From 109f1b26688c03a165e1edc412e8a579d8ab269d Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Thu, 19 Feb 2026 19:31:49 +0200 Subject: [PATCH 01/12] [DNM] Audio: Buffers: Add support for DP-to-DP component binding See https://github.com/thesofproject/sof/pull/10562 Previously binding two DP (Data Processing) scheduled components was rejected with IPC4_INVALID_REQUEST. This patch adds support for DP-to-DP binding by creating a dual ring buffer configuration where each DP module gets its own ring buffer on either side of the intermediate comp_buffer. Data flow for DP-to-DP: src_DP -> ring_buf_src -> comp_buffer -> ring_buf_sink -> sink_DP Changes in helper.c: - Remove the DP-to-DP bind rejection in ipc_comp_connect(). - Add src_is_dp, sink_is_dp, and dp_to_dp flags to detect the DP-to-DP case. - Create a second ring_buffer allocated from the source module's mod_alloc_ctx for the source side of the comp_buffer. - Refcount the DP vregion for each created ring_buffer via vregion_get(), with a NULL alloc guard. Changes in audio_buffer.c: - Change audio_buffer_attach_secondary_buffer() from a global rejection to per-side checks, allowing both secondary_buffer_sink and secondary_buffer_source to be set simultaneously. - Add a dual-secondary sync path in audio_buffer_sync_secondary_buffer() that cascades data through: input ring_buffer -> comp_buffer -> output ring_buffer, with rate-limiting applied on the output side. Changes in ring_buffer.c: - Release the DP vregion in ring_buffer_free() via vregion_put() and free the mod_alloc_ctx when the refcount reaches zero, matching the pattern used in comp_buffer_free(). Signed-off-by: Seppo Ingalsuo --- src/audio/buffers/audio_buffer.c | 69 ++++++++++++++++++++++++++------ src/audio/buffers/ring_buffer.c | 7 +++- src/ipc/ipc4/helper.c | 63 ++++++++++++++++++++++------- 3 files changed, 111 insertions(+), 28 deletions(-) diff --git a/src/audio/buffers/audio_buffer.c b/src/audio/buffers/audio_buffer.c index 1ecf8472dd65..f8a3087b0e64 100644 --- a/src/audio/buffers/audio_buffer.c +++ b/src/audio/buffers/audio_buffer.c @@ -24,7 +24,10 @@ int audio_buffer_attach_secondary_buffer(struct sof_audio_buffer *buffer, bool at_input, struct sof_audio_buffer *secondary_buffer) { - if (buffer->secondary_buffer_sink || buffer->secondary_buffer_source) + /* check per-side: allow attaching on both sides (needed for DP-to-DP) */ + if (at_input && buffer->secondary_buffer_sink) + return -EINVAL; + if (!at_input && buffer->secondary_buffer_source) return -EINVAL; /* secondary buffer must share audio params with the primary buffer */ @@ -48,6 +51,50 @@ int audio_buffer_sync_secondary_buffer(struct sof_audio_buffer *buffer, size_t l struct sof_source *data_src; struct sof_sink *data_dst; + if (buffer->secondary_buffer_sink && buffer->secondary_buffer_source) { + /* + * DP-to-DP case: both secondary buffers present. + * Data flows: input_ring_buffer -> comp_buffer -> output_ring_buffer + * + * This buffer may be synced by two DP modules during the same LL cycle: + * - The source DP module syncs it via comp_dev_for_each_consumer (output) + * - The sink DP module syncs it via comp_dev_for_each_producer (input) + * + * Both steps run in order (source DP first, then sink DP). Performing + * them both here in a single call ensures atomicity and correct + * rate-limiting. The second call for the same buffer will be a no-op + * since the comp_buffer will be empty. + * + * Step 1: copy from input secondary buffer to primary (comp_buffer). + * No limit on input side - copy all available data. + */ + data_src = audio_buffer_get_source(buffer->secondary_buffer_sink); + data_dst = &buffer->_sink_api; + + size_t data_available = source_get_data_available(data_src); + size_t free_size = sink_get_free_size(data_dst); + size_t to_copy = MIN(data_available, free_size); + + err = source_to_sink_copy(data_src, data_dst, true, to_copy); + if (err) + return err; + + /* + * Step 2: copy from primary (comp_buffer) to output secondary buffer. + * Apply the limit to the output side to control how much data + * is made available to the downstream DP module per LL cycle. + */ + data_src = &buffer->_source_api; + data_dst = audio_buffer_get_sink(buffer->secondary_buffer_source); + + data_available = source_get_data_available(data_src); + free_size = sink_get_free_size(data_dst); + to_copy = MIN(MIN(data_available, free_size), limit); + + err = source_to_sink_copy(data_src, data_dst, true, to_copy); + return err; + } + if (buffer->secondary_buffer_sink) { /* * audio_buffer sink API is shadowed, that means there's a secondary_buffer @@ -203,18 +250,16 @@ uint32_t audio_buffer_sink_get_lft(struct sof_sink *sink) return us_in_buffer; /* - * TODO, Currently there's no DP to DP connection - * >>> the code below is never accessible and won't work because of cache incoherence <<< - * - * to make DP to DP connection possible: + * NOTE: DP-to-DP connections are now supported via dual ring_buffers + * attached as secondary buffers on both sides of a comp_buffer. + * Data cascades: ring_buf_src -> comp_buffer -> ring_buf_sink + * with syncing during each LL cycle. * - * 1) module data must be ALWAYS located in non cached memory alias, allowing - * cross core access to params like period (needed below) and calling - * module_get_deadline for the next module, regardless of cores the modules are - * running on - * 2) comp_buffer must be removed from all pipeline code, replaced with a generic abstract - * class audio_buffer - allowing using comp_buffer and ring_buffer without current - * "hybrid buffer" solution + * Future improvements: + * 1) module data should be in non-cached memory alias for reliable + * cross-core access to params like period and deadlines + * 2) comp_buffer should be replaced with generic audio_buffer + * throughout pipeline code (Pipeline 2.0) */ } diff --git a/src/audio/buffers/ring_buffer.c b/src/audio/buffers/ring_buffer.c index 51245e91ca40..4f66c5b639ef 100644 --- a/src/audio/buffers/ring_buffer.c +++ b/src/audio/buffers/ring_buffer.c @@ -86,7 +86,6 @@ static inline void ring_buffer_writeback_shared(struct ring_buffer *ring_buffer, dcache_writeback_region(ptr, size); } - /** * @brief remove the queue from the list, free memory */ @@ -101,6 +100,12 @@ static void ring_buffer_free(struct sof_audio_buffer *audio_buffer) sof_ctx_free(alloc, (__sparse_force void *)ring_buffer->_data_buffer); sof_ctx_free(alloc, ring_buffer); + + /* matches vregion_get() in ipc_comp_connect() for each ring_buffer */ + if (alloc && alloc->vreg) { + if (!vregion_put(alloc->vreg)) + rfree(alloc); + } } static void ring_buffer_reset(struct sof_audio_buffer *audio_buffer) diff --git a/src/ipc/ipc4/helper.c b/src/ipc/ipc4/helper.c index 2fac5337f0f4..693e8b14f106 100644 --- a/src/ipc/ipc4/helper.c +++ b/src/ipc/ipc4/helper.c @@ -803,18 +803,14 @@ __cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) struct mod_alloc_ctx *alloc; #if CONFIG_ZEPHYR_DP_SCHEDULER - if (source->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP && - sink->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP) { - tr_err(&ipc_tr, "DP to DP binding is not supported: can't bind %x to %x", - src_id, sink_id); - return IPC4_INVALID_REQUEST; - } - + bool src_is_dp = source->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP; + bool sink_is_dp = sink->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP; + bool dp_to_dp = src_is_dp && sink_is_dp; struct comp_dev *dp; - if (sink->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP) + if (sink_is_dp) dp = sink; - else if (source->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP) + else if (src_is_dp) dp = source; else dp = NULL; @@ -887,8 +883,8 @@ __cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) * * size = 2*max(obs of source module, ibs of destination module) * (obs and ibs is single buffer size) - * in case of DP -> LL - * size = 2*ibs of destination (LL) module. DP queue will handle obs of DP module + * in case of DP -> LL or DP -> DP + * size = 2*ibs of destination module. DP queue will handle obs of DP module */ if (source->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_LL) buf_size = MAX(ibs, obs) * 2; @@ -923,12 +919,13 @@ __cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) #if CONFIG_ZEPHYR_DP_SCHEDULER struct ring_buffer *ring_buffer = NULL; - if (sink->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP || - source->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP) { + if (src_is_dp || sink_is_dp) { struct processing_module *srcmod = comp_mod(source); struct module_data *src_module_data = &srcmod->priv; struct processing_module *dstmod = comp_mod(sink); struct module_data *dst_module_data = &dstmod->priv; + bool is_shared = audio_buffer_is_shared(&buffer->audio_buffer); + uint32_t buf_id = buf_get_id(buffer); /* * Handle cases where the size of the ring buffer depends on the @@ -940,16 +937,52 @@ __cold int ipc_comp_connect(struct ipc *ipc, ipc_pipe_comp_connect *_connect) */ ring_buffer = ring_buffer_create(dp, MAX(ibs, dst_module_data->mpd.in_buff_size), MAX(obs, src_module_data->mpd.out_buff_size), - audio_buffer_is_shared(&buffer->audio_buffer), - buf_get_id(buffer)); + is_shared, buf_id); if (!ring_buffer) { buffer_free(buffer); return IPC4_OUT_OF_MEMORY; } + /* refcount the DP vregion for this ring_buffer (matches vregion_put in + * ring_buffer_free) + */ + if (alloc) + vregion_get(alloc->vreg); + /* data destination module needs to use ring_buffer */ audio_buffer_attach_secondary_buffer(&buffer->audio_buffer, dp == source, &ring_buffer->audio_buffer); + + /* + * DP-to-DP binding: both source and sink are DP modules. + * A second ring_buffer is needed on the other side of the comp_buffer + * so each DP module has its own lock-free ring_buffer interface. + * Data flows: src_DP -> ring_buf_src -> comp_buffer -> ring_buf_sink -> sink_DP + * The comp_buffer acts as the intermediary synced during LL cycles. + */ + if (dp_to_dp) { + struct ring_buffer *ring_buffer2; + struct mod_alloc_ctx *src_alloc = source->mod ? + source->mod->priv.resources.alloc : NULL; + + ring_buffer2 = + ring_buffer_create(source, + MAX(ibs, dst_module_data->mpd.in_buff_size), + MAX(obs, src_module_data->mpd.out_buff_size), + is_shared, buf_id); + if (!ring_buffer2) { + buffer_free(buffer); + return IPC4_OUT_OF_MEMORY; + } + + /* refcount the source DP vregion for ring_buffer2 */ + if (src_alloc) + vregion_get(src_alloc->vreg); + + /* attach second ring_buffer on the source side */ + audio_buffer_attach_secondary_buffer(&buffer->audio_buffer, dp != source, + &ring_buffer2->audio_buffer); + } } #endif /* CONFIG_ZEPHYR_DP_SCHEDULER */ From b52acdf19028e7d70a205612e9c448daade7482c Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 12 Aug 2026 20:45:09 +0300 Subject: [PATCH 02/12] [DNM] audio: stft_process: switch assert include to rtos/panic.h See https://github.com/thesofproject/sof/pull/11097 The two stft_process source files pulled in libc's , which under a newlib-based Zephyr build (e.g. MTL with COMMON_LIBC_MALLOC_ARENA_SIZE set) expands assert() to a __assert_no_args() call whose implementation is not linked into the SOF firmware image. Enabling COMP_STFT_PROCESS on such a build therefore fails at link time with an "undefined reference to __assert_no_args" error. Every other SOF audio component that uses assert() includes instead, which maps assert() to Zephyr's __ASSERT_NO_MSG in firmware builds and to sof_panic() in the posix testbench. Do the same in stft_process-generic.c and stft_process-hifi3.c. Signed-off-by: Seppo Ingalsuo --- src/audio/stft_process/stft_process-generic.c | 2 +- src/audio/stft_process/stft_process-hifi3.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/audio/stft_process/stft_process-generic.c b/src/audio/stft_process/stft_process-generic.c index 5241c372261f..cbbe859b3e9a 100644 --- a/src/audio/stft_process/stft_process-generic.c +++ b/src/audio/stft_process/stft_process-generic.c @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include "stft_process.h" diff --git a/src/audio/stft_process/stft_process-hifi3.c b/src/audio/stft_process/stft_process-hifi3.c index 6cf7c3dc7e85..efcef00ca474 100644 --- a/src/audio/stft_process/stft_process-hifi3.c +++ b/src/audio/stft_process/stft_process-hifi3.c @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include "stft_process.h" From da2ada6e4320723275400c568b88dede59293645 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Fri, 24 Jul 2026 16:14:18 +0100 Subject: [PATCH 03/12] audio: tensorflow: static build support for HiFi3 Wire the TFLM sources into the SOF firmware build for statically linked firmware. This unblocks non-LLEXT targets where TFLM has to live in the base image, using the Zephyr SDK GCC HiFi3 toolchain. Also add the requantize helper in speech.cc that unpacks the IEEE 754 mantissa directly instead of calling frexpf, so the file pulls in no libm symbols on the minimal-libc SOF build. Signed-off-by: Seppo Ingalsuo --- src/audio/tensorflow/CMakeLists.txt | 216 ++++++++++++++++++++++++++-- src/audio/tensorflow/speech.cc | 29 ++++ 2 files changed, 231 insertions(+), 14 deletions(-) diff --git a/src/audio/tensorflow/CMakeLists.txt b/src/audio/tensorflow/CMakeLists.txt index 5cb3086f46b1..27b2e7c720c4 100644 --- a/src/audio/tensorflow/CMakeLists.txt +++ b/src/audio/tensorflow/CMakeLists.txt @@ -1,6 +1,19 @@ # Copyright (c) 2025 Intel Corporation. # SPDX-License-Identifier: Apache-2.0 +# Newer xt-clang LLVMs accept this to keep literals in .rodata; older +# xt-clang (e.g. RI-2022.10, LLVM 10) rejects the sub-option. Detect it. +set(TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG "") +if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-mllvm --text-section-literals=false" + TFLM_HAS_MLLVM_TEXT_SECTION_LITERALS_FALSE) + if(TFLM_HAS_MLLVM_TEXT_SECTION_LITERALS_FALSE) + set(TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG -mllvm --text-section-literals=false) + add_compile_options(${TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG}) + endif() +endif() + # are we building the llext module ? if(CONFIG_COMP_TENSORFLOW STREQUAL "m" AND DEFINED CONFIG_LLEXT) add_subdirectory(llext ${PROJECT_BINARY_DIR}/tflm_llext) @@ -8,14 +21,40 @@ if(CONFIG_COMP_TENSORFLOW STREQUAL "m" AND DEFINED CONFIG_LLEXT) return() endif() -# TODO: detect Hifi4/5 for NN lib kernels +# nnlib-hifi4's NN kernels are HiFi4-specific (HiFi4 TIE intrinsics/headers); +# they don't exist for HiFi3 targets (e.g. tgl/cavs2.5) and there is no +# nnlib-hifi3 equivalent checked out. Gate on the actual core ISA +# (CONFIG_XTENSA_HIFI4), not just "is the compiler Clang" -- Clang is also +# used to build for HiFi3 targets, where this library must not be built. +set(TENSORFLOW_HAVE_NNLIB_HIFI4 FALSE) +if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CONFIG_XTENSA_HIFI4) + set(TENSORFLOW_HAVE_NNLIB_HIFI4 TRUE) +endif() + set(NN_HIFI_PATH ${sof_top_dir}/../nnlib-hifi4/xa_nnlib) -# paths for dependencies -set(TFLM_PATH ${sof_top_dir}/../tflite-micro) -set(FLATBUFFERS_PATH ${sof_top_dir}/../flatbuffers) -set(GEMMLOWP_PATH ${sof_top_dir}/../gemmlowp) -set(RUY_PATH ${sof_top_dir}/../ruy) +# paths for dependencies (each may be overridden with -D=) +if(NOT TFLM_PATH) + set(TFLM_PATH ${sof_top_dir}/../tflite-micro) +endif() +if(NOT FLATBUFFERS_PATH) + set(FLATBUFFERS_PATH ${sof_top_dir}/../flatbuffers) +endif() +if(NOT GEMMLOWP_PATH) + set(GEMMLOWP_PATH ${sof_top_dir}/../gemmlowp) +endif() +if(NOT RUY_PATH) + set(RUY_PATH ${sof_top_dir}/../ruy) +endif() + +# Toolchain include dirs are per-platform (SOC_TOOLCHAIN_NAME matches both +# the zephyr-sdk gnu/xtensa-_zephyr-elf toolchain dir and the +# modules/hal/xtensa/zephyr/soc/ HAL dir for every supported SoC). +set(TFLM_TOOLCHAIN_INCLUDE_ROOT + ${ZEPHYR_SDK_INSTALL_DIR}/gnu/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/include) +set(TFLM_HAL_SOC_PATH ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/${SOC_TOOLCHAIN_NAME}) + +if(TENSORFLOW_HAVE_NNLIB_HIFI4) add_library(nn_hifi_lib STATIC ${NN_HIFI_PATH}/algo/common/src/xa_nnlib_common_api.c @@ -200,8 +239,19 @@ target_include_directories(nn_hifi_lib PRIVATE ${NN_HIFI_PATH}/algo/common/include/ ${NN_HIFI_PATH}/include/nnlib/ ${NN_HIFI_PATH}/algo/ndsp/hifi4/include + ${TFLM_TOOLCHAIN_INCLUDE_ROOT} + ${TFLM_HAL_SOC_PATH} ) +target_compile_options(nn_hifi_lib PRIVATE + ${TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG} +) + +endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 + + +if(TENSORFLOW_HAVE_NNLIB_HIFI4) + # TODO: Need to detect and add mul16/32 options. #ifeq "$(has_mul16)" "0" #CFLAGS += -mno-mul16 @@ -225,6 +275,19 @@ target_compile_options(nn_hifi_lib PRIVATE -DTFLITE_SINGLE_ROUNDING=1 ) +target_compile_definitions(nn_hifi_lib PRIVATE + __XCC__ + __XCC_CLANG__ +) +target_compile_options(nn_hifi_lib PRIVATE + -mcpu=${SOC_TOOLCHAIN_NAME} + "SHELL:-include xtensahifiintrin.h" + "SHELL:-include ${NN_HIFI_PATH}/algo/common/include/xa_nnlib_hifi_isa_compat.h" +) + +endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 (nn_hifi_lib defs/opts) + + # TODO: complete sources have been added here from userspace build but # not all are needed so this is a list of "needed" sources to build # a memory and performance optimized TFLM for SOF. @@ -413,10 +476,16 @@ target_include_directories(tflm_lib PRIVATE ${FLATBUFFERS_PATH}/include ${GEMMLOWP_PATH} ${RUY_PATH} + ${sof_top_dir}/posix/include + ${sof_top_dir}/../modules/hal/xtensa/include + ${TFLM_HAL_SOC_PATH} +) +if(TENSORFLOW_HAVE_NNLIB_HIFI4) +target_include_directories(tflm_lib PRIVATE ${NN_HIFI_PATH} ${NN_HIFI_PATH}/include - ${sof_top_dir}/posix/include ) +endif() # TODO: Need to detect and add mul16/32 options. #ifeq "$(has_mul16)" "0" @@ -425,6 +494,36 @@ target_include_directories(tflm_lib PRIVATE #ifeq "$(has_mul32)" "0" #CFLAGS += -mno-mul32 -mno-div32 #endif + +# These select/enable the HiFi4 nnlib-optimized code paths in some TFLM +# kernels. Only valid when nn_hifi_lib is actually built and linked -- +# forcing XCHAL_HAVE_HIFI4 on a non-HiFi4 target risks enabling HiFi4-only +# branches in system/toolchain headers that don't apply to this core. +if(TENSORFLOW_HAVE_NNLIB_HIFI4) +target_compile_definitions(tflm_lib PRIVATE + -DHIFI4=1 + -DHAVE_VFPU=1 + -DHAVE_VFPU_SINGLE_PRECISION=1 + -DXCHAL_HAVE_HIFI4=1 + -DXCHAL_HAVE_HIFI4_VFPU=1 + + __xtensa__=1 + __XTENSA__=1 + __XCC__ + __XCC_CLANG__ + "XT_MAX(a,b)=((a)>(b)?(a):(b))" + "XT_MIN(a,b)=((a)<(b)?(a):(b))" + "AE_MOVINT16_FROMINT32(v)=((ae_int16)(v))" + "AE_CVT64F32_H(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_H(v))" + "AE_CVT64F32_L(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_L(v))" +) +target_compile_options(tflm_lib PRIVATE + -DHIFI4 + -DKERNELS_OPTIMIZED_FOR_SPEED + -DNNLIB_V2 +) +endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 + target_compile_options(tflm_lib PRIVATE -std=c++17 -stdlib=libc++ @@ -447,19 +546,108 @@ target_compile_options(tflm_lib PRIVATE -Wstrict-aliasing -Wno-unused-parameter -DXTENSA - -DKERNELS_OPTIMIZED_FOR_SPEED -DTF_LITE_MCU_DEBUG_LOG -DTF_LITE_USE_CTIME - --xtensa-core=ace10_LX7HiFi4_2022_10 - -mcoproc - -DHIFI4 + # TFLM's stock debug_log.cc calls vfprintf(stderr, ...), which pulls in + # stdio. Zephyr's minimal libc has no stderr. Stripping error strings + # neutralizes DebugLog() to a no-op and drops the dep entirely. + -DTF_LITE_STRIP_ERROR_STRINGS -mlongcalls - -DNNLIB_V2 -Wno-shadow ) add_local_sources(sof tflm-classify.c llext-wrap.c) -# Need to link libc++ and libc after tflm and nnlib -zephyr_link_libraries(tflm_lib nn_hifi_lib c++ c) +if(CMAKE_C_COMPILER_ID STREQUAL "Xtensa") + target_compile_options(tflm_lib PRIVATE + --xtensa-core=ace10_LX7HiFi4_2022_10 + -mcoproc + ) +elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") + target_compile_options(tflm_lib PRIVATE + -mcpu=${SOC_TOOLCHAIN_NAME} + ) +endif() + +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + target_include_directories(tflm_lib SYSTEM PRIVATE + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0 + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf + ${TFLM_TOOLCHAIN_INCLUDE_ROOT} + ) +endif() + +add_local_sources(sof tflm-classify.c llext-wrap.c) + +# Link nnlib only when it was actually built (HiFi4 target + Clang) +if(TENSORFLOW_HAVE_NNLIB_HIFI4) + zephyr_link_libraries(tflm_lib nn_hifi_lib) +else() + zephyr_link_libraries(tflm_lib) +endif() + +# CONFIG_MINIMAL_LIBC (SOF's global default) has no libm and is missing a +# few libc functions (e.g. abs()) that TFLM needs in a statically-linked +# (non-LLEXT) image. Linking the toolchain's whole libc.a is too broad: it +# conflicts with Zephyr's own malloc/free (multiple definition) and pulls in +# an __assert_no_args that needs an unavailable stderr. Instead, extract just +# the specific archive members TFLM actually needs into a small private +# archive and link only that. +if(NOT CONFIG_COMP_TENSORFLOW STREQUAL "m") + set(TFLM_TOOLCHAIN_LIBC_ARCHIVE + ${ZEPHYR_SDK_INSTALL_DIR}/gnu/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/lib/libc.a) + set(TFLM_LIBC_SHIM_MEMBERS + libc_stdlib_abs.c.o + libm_math_s_floor.c.o + # TFLM QuantizeMultiplier() uses double frexp() + round() at Prepare time. + libm_math_s_frexp.c.o + libm_common_s_round.c.o + libm_math_sf_exp.c.o + libm_math_sf_log.c.o + libm_common_sf_fmax.c.o + libm_common_sf_fmin.c.o + libm_common_sf_round.c.o + # error-handling/predicate helpers the above call internally + libm_common_sf_isnan.c.o + libm_common_sf_issignaling.c.o + libm_common_math_errf_uflowf.c.o + libm_common_math_errf_oflowf.c.o + libm_common_math_errf_divzerof.c.o + libm_common_math_errf_invalidf.c.o + ) + set(TFLM_LIBC_SHIM_DIR ${CMAKE_CURRENT_BINARY_DIR}/tflm_libc_shim) + set(TFLM_LIBC_SHIM_ARCHIVE ${CMAKE_CURRENT_BINARY_DIR}/libtflm_libc_shim.a) + file(MAKE_DIRECTORY ${TFLM_LIBC_SHIM_DIR}) + add_custom_command( + OUTPUT ${TFLM_LIBC_SHIM_ARCHIVE} + COMMAND ${CMAKE_AR} x ${TFLM_TOOLCHAIN_LIBC_ARCHIVE} ${TFLM_LIBC_SHIM_MEMBERS} + COMMAND ${CMAKE_AR} rcs ${TFLM_LIBC_SHIM_ARCHIVE} ${TFLM_LIBC_SHIM_MEMBERS} + WORKING_DIRECTORY ${TFLM_LIBC_SHIM_DIR} + DEPENDS ${TFLM_TOOLCHAIN_LIBC_ARCHIVE} + COMMENT "Extracting abs()/libm members TFLM needs from the toolchain libc.a" + ) + add_custom_target(tflm_libc_shim_gen DEPENDS ${TFLM_LIBC_SHIM_ARCHIVE}) + add_library(tflm_libc_shim STATIC IMPORTED GLOBAL) + set_target_properties(tflm_libc_shim PROPERTIES IMPORTED_LOCATION ${TFLM_LIBC_SHIM_ARCHIVE}) + add_dependencies(tflm_libc_shim tflm_libc_shim_gen) + zephyr_link_libraries(tflm_libc_shim) + + # TFLM/flatbuffers use assert() internally; the toolchain's own + # __assert_no_args implementation needs an unavailable stderr, so disable + # assert() outright instead (standard practice for release TFLM builds). + target_compile_definitions(tflm_lib PRIVATE NDEBUG) +endif() zephyr_include_directories(${TFLM_PATH}) +zephyr_include_directories(${FLATBUFFERS_PATH}/include) +zephyr_include_directories(${GEMMLOWP_PATH}) +zephyr_include_directories(${RUY_PATH}) +if(TENSORFLOW_HAVE_NNLIB_HIFI4) +zephyr_include_directories(${NN_HIFI_PATH}/algo/kernels/include) +zephyr_include_directories(${NN_HIFI_PATH}/include) +endif() +target_include_directories(modules_sof SYSTEM PRIVATE + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0 + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf + ${TFLM_TOOLCHAIN_INCLUDE_ROOT} +) + diff --git a/src/audio/tensorflow/speech.cc b/src/audio/tensorflow/speech.cc index 82ffdf698141..6d03daf1d340 100644 --- a/src/audio/tensorflow/speech.cc +++ b/src/audio/tensorflow/speech.cc @@ -4,6 +4,7 @@ #include #include +#include #include #include "tensorflow/lite/core/c/common.h" @@ -50,6 +51,34 @@ int RegisterOps(MicroSpeechOpResolver *op_resolver) { return 0; } +static int Init_Interpreter(struct tf_classify *tfc); + +// Decompose the Q9.23 -> int8 requantize factor +// M = 1 / (input_scale * 2^23) +// into a normalized int32 multiplier in [2^30, 2^31) and a right-shift, so the +// runtime hot path can do (mel_q23 * mult) >> shift in pure integer math. +// Unpacks IEEE 754 bits directly rather than calling frexpf so that this file +// pulls in no libm symbols on the minimal-libc SOF build. +static void ComputeInputRequantizeMultiplier(float input_scale, + int32_t *out_mult, int *out_shift) +{ + float m = 1.0f / (input_scale * static_cast(1 << 23)); + if (!(m > 0.0f)) { + *out_mult = 0; + *out_shift = 0; + return; + } + uint32_t bits; + std::memcpy(&bits, &m, sizeof(bits)); + // IEEE 754 binary32: bias-127 exponent; frexp uses [0.5, 1.0) => bias-126. + int exp = static_cast((bits >> 23) & 0xffu) - 126; + // Reinsert the implicit leading 1, then shift the 24-bit mantissa into bit + // 30 so the result is Q0.31 with MSB set, i.e. in [2^30, 2^31). + int32_t mult = static_cast(((bits & 0x7fffffu) | 0x800000u) << 7); + *out_mult = mult; + *out_shift = 31 - exp; +} + int TF_InitOps(struct tf_classify *tfc) { op_resolver = new MicroSpeechOpResolver(); From 5171a835a99962e879d1b472054b61e778c91e76 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Fri, 14 Aug 2026 11:45:36 +0300 Subject: [PATCH 04/12] audio: tensorflow: add model for banana, mango, orange keywords This model was trained with scripts - sof_tflm_generate_keyword_dataset.sh with parameters MAX_SAMPLES=1000. - sof_tflm_train_pipeline.sh with parameters N_SILENCE=1500, N_UNKNOWN=4000, EPOCHS=40 The verification report by sof_tflm_verify.py is: samples: 2751 overall accuracy: 0.9807 class support precision recall f1 -------------------------------------------- silence 225 0.9694 0.9867 0.9780 unknown 1176 0.9773 0.9881 0.9827 banana 450 0.9779 0.9822 0.9800 mango 450 0.9863 0.9622 0.9741 orange 450 0.9932 0.9756 0.9843 confusion matrix (rows=true, cols=pred): silence unknown banana mango orange silence 222 3 0 0 0 unknown 7 1162 2 2 3 banana 0 8 442 0 0 mango 0 9 8 433 0 orange 0 7 0 4 439 Signed-off-by: Seppo Ingalsuo --- src/audio/tensorflow/sof_tflm_labels.h | 10 + .../sof_tflm_quantized_model_data.cc | 2027 +++++++++++++++++ .../sof_tflm_quantized_model_data.h | 13 + 3 files changed, 2050 insertions(+) create mode 100644 src/audio/tensorflow/sof_tflm_labels.h create mode 100644 src/audio/tensorflow/sof_tflm_quantized_model_data.cc create mode 100644 src/audio/tensorflow/sof_tflm_quantized_model_data.h diff --git a/src/audio/tensorflow/sof_tflm_labels.h b/src/audio/tensorflow/sof_tflm_labels.h new file mode 100644 index 000000000000..d6f2231aae48 --- /dev/null +++ b/src/audio/tensorflow/sof_tflm_labels.h @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Auto-generated by sof_tflm_train.py — do not edit. + +#ifndef SOF_TFLM_LABELS_H_ +#define SOF_TFLM_LABELS_H_ + +#define TFLM_CATEGORY_COUNT 5 +#define TFLM_CATEGORY_DATA { "silence", "unknown", "banana", "mango", "orange", } + +#endif // SOF_TFLM_LABELS_H_ diff --git a/src/audio/tensorflow/sof_tflm_quantized_model_data.cc b/src/audio/tensorflow/sof_tflm_quantized_model_data.cc new file mode 100644 index 000000000000..c653f4afddc3 --- /dev/null +++ b/src/audio/tensorflow/sof_tflm_quantized_model_data.cc @@ -0,0 +1,2027 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Auto-generated by sof_tflm_train.py — do not edit. + +#include "sof_tflm_quantized_model_data.h" + +alignas(8) const unsigned char g_sof_tflm_quantized_model_data[] = { + 0x1c, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x14, 0x00, 0x20, 0x00, + 0x1c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x53, 0x00, 0x00, + 0x14, 0x53, 0x00, 0x00, 0xc4, 0x5d, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2e, 0xac, 0xff, 0xff, + 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x98, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x36, 0xac, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x6d, 0x65, 0x6c, 0x34, 0x30, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xdc, 0xff, 0xff, 0xff, 0x11, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x00, + 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x24, 0x52, 0x00, 0x00, 0x1c, 0x52, 0x00, 0x00, 0x08, 0x52, 0x00, 0x00, + 0xf4, 0x51, 0x00, 0x00, 0xe0, 0x51, 0x00, 0x00, 0xbc, 0x51, 0x00, 0x00, + 0x8c, 0x03, 0x00, 0x00, 0x5c, 0x03, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, + 0xc4, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, + 0xac, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xf2, 0xac, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xeb, 0x03, 0x00, 0x00, + 0x0c, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0xfe, 0x0d, 0xc0, 0xfc, 0x54, 0x83, 0xce, 0x09, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x32, 0x2e, 0x32, 0x31, 0x2e, 0x30, 0x00, 0x00, + 0x5e, 0xad, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x31, 0x2e, 0x31, 0x34, 0x2e, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xa4, 0xff, 0xff, 0xcc, 0xa4, 0xff, 0xff, + 0xd0, 0xa4, 0xff, 0xff, 0xd4, 0xa4, 0xff, 0xff, 0xd8, 0xa4, 0xff, 0xff, + 0xdc, 0xa4, 0xff, 0xff, 0xe0, 0xa4, 0xff, 0xff, 0x96, 0xad, 0xff, 0xff, + 0x04, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x08, 0xfc, 0x68, 0x00, + 0xa6, 0xb7, 0x38, 0x8e, 0x59, 0x17, 0x23, 0xf2, 0x32, 0xed, 0x33, 0x9e, + 0x0b, 0x0d, 0x6e, 0xed, 0xbd, 0xf2, 0x45, 0x64, 0x41, 0xd0, 0x68, 0xb6, + 0xca, 0xc8, 0xde, 0x3a, 0x2a, 0xb0, 0x9f, 0xb7, 0x03, 0x20, 0x71, 0x32, + 0x2b, 0xc9, 0xeb, 0x3e, 0x05, 0xf2, 0x26, 0x38, 0x21, 0xfb, 0xf3, 0x6a, + 0x3f, 0xda, 0x16, 0x35, 0xe2, 0xf6, 0xa3, 0x05, 0x1b, 0x12, 0xce, 0x44, + 0x23, 0xd6, 0x23, 0x0e, 0x3a, 0x7a, 0x1b, 0x19, 0x65, 0x3f, 0x19, 0xe5, + 0xda, 0x44, 0x16, 0x33, 0x01, 0xfc, 0x36, 0xe7, 0x6f, 0x41, 0x34, 0x98, + 0x30, 0xcb, 0x54, 0xdd, 0x3a, 0x66, 0x2c, 0xef, 0x21, 0xbb, 0xce, 0xc1, + 0x07, 0x5e, 0xed, 0xe1, 0xe4, 0xb9, 0x13, 0x17, 0x22, 0x0f, 0xce, 0xd9, + 0x01, 0xf8, 0x12, 0x7f, 0xbd, 0x3e, 0x24, 0x54, 0xff, 0xdb, 0xb8, 0x16, + 0x7f, 0x41, 0x26, 0xc6, 0x5f, 0x08, 0x08, 0x22, 0x05, 0xba, 0xd0, 0x24, + 0x4c, 0x4f, 0x03, 0x13, 0x18, 0x54, 0xe3, 0x06, 0x17, 0x0a, 0x20, 0x01, + 0x0e, 0x00, 0xdb, 0x51, 0x53, 0xef, 0x96, 0xb3, 0x02, 0x5a, 0x53, 0x51, + 0x6a, 0xd7, 0x79, 0x9f, 0x01, 0xa2, 0x51, 0x0d, 0x45, 0xc8, 0x61, 0x13, + 0xe5, 0x53, 0x66, 0x3b, 0x0b, 0xec, 0x32, 0x43, 0x21, 0x29, 0x27, 0x19, + 0xdb, 0xea, 0x37, 0x3b, 0x79, 0x4c, 0x39, 0xf9, 0x3d, 0x26, 0x75, 0x39, + 0xa2, 0x7b, 0x3a, 0x54, 0x45, 0x5c, 0xea, 0x39, 0x40, 0xab, 0x72, 0x0a, + 0x18, 0x3a, 0x5a, 0xd6, 0x2d, 0xde, 0xe5, 0xe2, 0x0a, 0xfe, 0x2f, 0x98, + 0xf3, 0x07, 0x7f, 0xc8, 0x54, 0xe8, 0x63, 0x98, 0x25, 0x49, 0x07, 0x43, + 0x28, 0xeb, 0xe0, 0xfe, 0x15, 0xd8, 0x0a, 0x4e, 0x2a, 0xcc, 0x67, 0x5a, + 0x4a, 0xb6, 0x5a, 0x9a, 0x00, 0xf0, 0x72, 0x26, 0xc3, 0xcd, 0x28, 0xb4, + 0x37, 0x39, 0xfa, 0x01, 0xfa, 0xc9, 0x25, 0xcf, 0x6b, 0x7f, 0x09, 0x07, + 0x0c, 0xd8, 0xce, 0x9d, 0x48, 0x65, 0x42, 0x37, 0xe0, 0x47, 0x21, 0x10, + 0x25, 0xf1, 0x5a, 0xbc, 0xab, 0x5e, 0xcf, 0xf9, 0x08, 0xd7, 0x36, 0xbb, + 0x76, 0x05, 0xf6, 0xc6, 0x1a, 0xc0, 0xf0, 0xe7, 0x03, 0xbf, 0xc7, 0x7f, + 0x09, 0xc8, 0x6c, 0x68, 0xce, 0xc1, 0x30, 0x15, 0xf5, 0xe6, 0xfb, 0x0d, + 0x12, 0x78, 0xe1, 0xd3, 0x3b, 0x16, 0x6f, 0xda, 0x74, 0xfe, 0xc8, 0xf4, + 0x39, 0x62, 0xbd, 0xeb, 0x0e, 0x01, 0xf4, 0xe0, 0xfa, 0x55, 0x0a, 0x25, + 0xaa, 0x27, 0xe6, 0x51, 0xfd, 0x23, 0x5f, 0x9f, 0x64, 0x45, 0x00, 0xae, + 0x31, 0xe2, 0x00, 0xaa, 0x3d, 0x59, 0xd9, 0xf1, 0xc7, 0xc7, 0x0d, 0x3e, + 0xc6, 0x1d, 0xe9, 0x4e, 0xe8, 0xe9, 0x4a, 0x29, 0xb9, 0xd5, 0x6a, 0x47, + 0xf5, 0xf3, 0x27, 0x04, 0x71, 0x76, 0xc3, 0x9e, 0x18, 0x0a, 0x2a, 0xfe, + 0xd8, 0x03, 0x17, 0x17, 0x18, 0x60, 0x0d, 0xed, 0x9b, 0xf9, 0x13, 0x3b, + 0xe6, 0x3e, 0xe2, 0xe9, 0x6e, 0xa2, 0x78, 0x76, 0xd8, 0xee, 0x03, 0xe9, + 0x4e, 0x65, 0x44, 0x4d, 0x17, 0xdd, 0x63, 0xc5, 0xfe, 0x05, 0x7f, 0x7a, + 0xe9, 0xfc, 0x97, 0x18, 0x05, 0xf0, 0x7a, 0xd5, 0xcb, 0xd2, 0x24, 0x53, + 0x13, 0xa2, 0x47, 0xdf, 0x0a, 0xec, 0x6e, 0xea, 0xf1, 0x02, 0xe1, 0xae, + 0xb9, 0xfe, 0xee, 0xe3, 0xc7, 0xe3, 0x58, 0x14, 0x23, 0x45, 0x01, 0x37, + 0xc0, 0x20, 0xed, 0xf7, 0xc2, 0x31, 0x00, 0xf0, 0xbb, 0xc2, 0xe1, 0x18, + 0xe7, 0xf5, 0xfd, 0xba, 0xd3, 0xd6, 0x2b, 0x10, 0xd0, 0xd2, 0x7b, 0xfb, + 0x64, 0x7f, 0x47, 0xda, 0xae, 0xe0, 0x1e, 0xdf, 0x33, 0x71, 0xd1, 0x29, + 0x97, 0xe1, 0x51, 0x19, 0xaf, 0xbc, 0xc7, 0x74, 0x07, 0xd1, 0x63, 0xe1, + 0x61, 0xa0, 0xe3, 0xb9, 0xdf, 0x03, 0x45, 0x1a, 0xe0, 0x7f, 0xe3, 0x9c, + 0xc6, 0x4b, 0x4c, 0xe0, 0x0d, 0x46, 0x2c, 0x0b, 0xdd, 0x38, 0xc0, 0xdd, + 0x71, 0xa9, 0x52, 0xa8, 0xde, 0x1c, 0x3a, 0xab, 0x37, 0x0f, 0x1d, 0x2d, + 0x9a, 0xf3, 0x35, 0xde, 0x46, 0x5d, 0x4b, 0x34, 0xa8, 0xd0, 0x29, 0x19, + 0xa1, 0x4b, 0xe8, 0x72, 0xa1, 0xfc, 0xcd, 0xfd, 0xbd, 0xb4, 0x7a, 0x15, + 0xa4, 0xe2, 0x27, 0x43, 0x23, 0x6c, 0x16, 0xe4, 0xcb, 0xea, 0x3d, 0xf0, + 0x50, 0xad, 0xfd, 0xf1, 0xce, 0x48, 0x89, 0xe8, 0xda, 0xb9, 0x15, 0x50, + 0xbb, 0x3f, 0x23, 0x06, 0x3a, 0xaf, 0xfd, 0x2f, 0xa8, 0xf5, 0xff, 0xc4, + 0x53, 0xea, 0xd2, 0xa5, 0x9f, 0xdf, 0xe2, 0xbd, 0xff, 0xe9, 0x6f, 0x4b, + 0xba, 0xe7, 0x22, 0x24, 0x76, 0x7a, 0x45, 0xf6, 0x81, 0x04, 0x23, 0x0b, + 0x17, 0x53, 0xde, 0x7b, 0x9d, 0xe4, 0x7f, 0x3e, 0xe4, 0x3f, 0x46, 0xfe, + 0x22, 0xb0, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x0b, 0xda, 0xff, 0xff, 0x3c, 0xb8, 0xff, 0xff, 0x8d, 0xf3, 0xff, 0xff, + 0x52, 0x0e, 0xff, 0xff, 0x6e, 0xec, 0xff, 0xff, 0x35, 0xf0, 0xff, 0xff, + 0x88, 0xdb, 0xff, 0xff, 0xf5, 0xd6, 0xff, 0xff, 0x4e, 0xb0, 0xff, 0xff, + 0x04, 0x00, 0x00, 0x00, 0x20, 0x4e, 0x00, 0x00, 0x00, 0x01, 0xfd, 0xb4, + 0xfd, 0x01, 0x01, 0x01, 0x02, 0xb6, 0xfd, 0xd3, 0x03, 0xfe, 0x05, 0x03, + 0x06, 0xfc, 0xfe, 0xed, 0x00, 0xfe, 0x03, 0x02, 0x02, 0x01, 0xfc, 0xea, + 0xfc, 0x02, 0x01, 0xfc, 0x01, 0x00, 0xfe, 0xde, 0x00, 0xfd, 0x02, 0xfd, + 0x01, 0xfc, 0xfd, 0xe4, 0x00, 0x00, 0x05, 0xfd, 0x01, 0x03, 0x00, 0xe6, + 0x00, 0x03, 0x01, 0x01, 0x00, 0x01, 0x00, 0xe7, 0xfd, 0xfd, 0x05, 0xfc, + 0x01, 0xfc, 0x04, 0xe0, 0xff, 0xff, 0xfe, 0x00, 0x02, 0xfc, 0xfd, 0xe6, + 0x03, 0xff, 0x01, 0x03, 0x03, 0x03, 0xfe, 0xe6, 0xfb, 0xfe, 0x05, 0xfc, + 0x01, 0x00, 0x00, 0xec, 0xfc, 0xfe, 0xfc, 0x00, 0x01, 0xfe, 0x02, 0xee, + 0x03, 0xff, 0xff, 0x03, 0x00, 0x00, 0x01, 0xef, 0xfc, 0xfe, 0xfd, 0x00, + 0x02, 0xfd, 0x01, 0xee, 0x04, 0x03, 0x01, 0xff, 0x00, 0x01, 0x03, 0xe6, + 0x04, 0xfd, 0x02, 0xfc, 0x02, 0xfe, 0xff, 0xed, 0x01, 0xff, 0xfd, 0x02, + 0x01, 0x03, 0x02, 0xf1, 0xfe, 0xfe, 0x02, 0x03, 0x01, 0x01, 0x01, 0xf8, + 0x01, 0xfc, 0x03, 0x03, 0x05, 0xfc, 0xfe, 0x00, 0xff, 0x02, 0x01, 0x02, + 0x03, 0x01, 0x01, 0xe3, 0xfe, 0x03, 0xff, 0xfd, 0x07, 0x81, 0x01, 0xec, + 0x03, 0xfd, 0xff, 0xfe, 0x0b, 0xf5, 0x01, 0xff, 0xfe, 0xff, 0xfe, 0xfc, + 0x0c, 0xfd, 0xfd, 0xf9, 0x02, 0x01, 0x03, 0x03, 0x09, 0xfe, 0x04, 0xec, + 0x01, 0xfb, 0x01, 0x00, 0x0a, 0xfe, 0x01, 0xf2, 0x00, 0xfc, 0x01, 0x03, + 0x07, 0xfc, 0x04, 0xf4, 0x01, 0x02, 0xfc, 0x02, 0x07, 0xfc, 0xfe, 0xef, + 0xfe, 0x03, 0x00, 0xfe, 0x06, 0xff, 0xfe, 0xea, 0x00, 0xff, 0x05, 0x02, + 0x03, 0x00, 0xff, 0xf2, 0x02, 0x02, 0x01, 0xfc, 0x06, 0xfe, 0xfd, 0xf7, + 0xfe, 0xfe, 0x00, 0x03, 0x0a, 0xfe, 0x04, 0xef, 0xfc, 0xfe, 0x04, 0x02, + 0x03, 0x02, 0xfd, 0xf5, 0x01, 0xfe, 0x04, 0x00, 0x07, 0xfe, 0xfd, 0xfb, + 0x02, 0xfd, 0x07, 0xff, 0x06, 0x00, 0xfc, 0xf8, 0xfe, 0xfd, 0x02, 0x01, + 0x02, 0x04, 0xfd, 0xf2, 0xfe, 0x03, 0x02, 0x01, 0x07, 0x01, 0x03, 0xf0, + 0x01, 0xfe, 0x00, 0xfd, 0x07, 0x00, 0x00, 0xf5, 0x03, 0xfc, 0xfe, 0xfe, + 0x12, 0xfe, 0xfc, 0xfe, 0xfe, 0xfc, 0x03, 0x00, 0x03, 0x02, 0x00, 0x02, + 0x01, 0x02, 0x01, 0x01, 0x08, 0x00, 0xfc, 0xb8, 0xff, 0x00, 0x02, 0x04, + 0x1b, 0xff, 0x00, 0xf6, 0xff, 0xff, 0x04, 0xff, 0x42, 0xeb, 0xfc, 0x16, + 0xfc, 0xfd, 0x02, 0xfe, 0x3d, 0xda, 0x01, 0x07, 0x03, 0x03, 0x03, 0xfe, + 0x25, 0xbd, 0xfc, 0xf1, 0x00, 0x02, 0xff, 0x03, 0x38, 0xf8, 0xfc, 0xf9, + 0x00, 0xfd, 0x02, 0xfd, 0x38, 0xe8, 0x02, 0xf8, 0xfc, 0x03, 0x00, 0x01, + 0x24, 0xfb, 0x00, 0xf8, 0xff, 0x00, 0x01, 0xfc, 0x2c, 0xf7, 0x01, 0xeb, + 0xfd, 0x02, 0xff, 0xfd, 0x2e, 0x0f, 0xfe, 0xf2, 0x02, 0x03, 0xfe, 0x00, + 0x34, 0x07, 0xfe, 0xfd, 0x03, 0xfe, 0xfd, 0x01, 0x40, 0x0b, 0x00, 0xf9, + 0x02, 0x00, 0xfe, 0xfe, 0x1a, 0x1b, 0x00, 0x01, 0x03, 0x00, 0x04, 0x01, + 0x0e, 0xf8, 0x04, 0x05, 0xfd, 0xfb, 0xff, 0xfc, 0x02, 0xd8, 0xfd, 0x07, + 0xfc, 0xff, 0xff, 0x02, 0x18, 0xe1, 0xfe, 0xf5, 0x03, 0xfe, 0x00, 0x03, + 0x3e, 0x17, 0x00, 0xef, 0x00, 0xfb, 0x04, 0x04, 0x3e, 0x2d, 0x03, 0xf9, + 0xff, 0x00, 0x01, 0xff, 0x17, 0xfe, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0x02, + 0x01, 0xfd, 0xfe, 0xfe, 0xfb, 0x01, 0x04, 0x02, 0x04, 0x02, 0x02, 0xa8, + 0x02, 0x03, 0xfc, 0xfd, 0x0f, 0x08, 0x01, 0x00, 0xfb, 0xfc, 0xff, 0xfd, + 0x19, 0xe2, 0xff, 0x18, 0x01, 0xfe, 0x01, 0xff, 0xee, 0xda, 0x01, 0xfe, + 0xfd, 0x02, 0xfe, 0x01, 0xe1, 0xc2, 0xfe, 0xfa, 0xfe, 0xfc, 0x02, 0x00, + 0xec, 0xe9, 0x00, 0xfc, 0xfc, 0xfc, 0xfc, 0xff, 0x02, 0xe1, 0xfd, 0xfa, + 0xfd, 0x04, 0xfe, 0xff, 0xfb, 0xfc, 0x03, 0xf7, 0xfd, 0xfe, 0x02, 0xfd, + 0x0c, 0xfc, 0xff, 0xea, 0x03, 0xfe, 0x03, 0x00, 0x0e, 0x14, 0x04, 0xf8, + 0xff, 0x00, 0xff, 0xff, 0x17, 0x03, 0x03, 0xfa, 0x01, 0x00, 0x00, 0x01, + 0x1a, 0xfc, 0xff, 0xf8, 0x03, 0x01, 0x02, 0x03, 0x02, 0x0e, 0x00, 0xfa, + 0xfe, 0x00, 0x00, 0x00, 0xfc, 0xf4, 0xfe, 0x01, 0xfc, 0x03, 0x03, 0x01, + 0xee, 0xdc, 0x02, 0x03, 0xff, 0xfd, 0xfe, 0x00, 0x01, 0xe5, 0xfe, 0xf7, + 0xff, 0xff, 0xfd, 0xff, 0x2d, 0x14, 0x02, 0xee, 0x00, 0x02, 0x01, 0xff, + 0x2b, 0x24, 0x03, 0xf5, 0xfc, 0x03, 0x03, 0x00, 0xcd, 0xfc, 0x01, 0xff, + 0x01, 0x00, 0x03, 0xff, 0x01, 0xfe, 0x02, 0x01, 0xff, 0xfe, 0xfc, 0xfd, + 0x07, 0x02, 0xfc, 0x96, 0xfd, 0xff, 0x03, 0x02, 0x09, 0x0c, 0xfd, 0x07, + 0xfd, 0xfb, 0xff, 0x01, 0x0d, 0xe1, 0xfe, 0x19, 0xfc, 0xfc, 0x00, 0xfc, + 0xc4, 0xeb, 0xfd, 0xff, 0x01, 0xfd, 0xff, 0x00, 0xc1, 0xd8, 0x01, 0xf9, + 0x02, 0x02, 0x02, 0x02, 0xcf, 0x00, 0x00, 0x02, 0xfd, 0xfe, 0x00, 0x00, + 0xea, 0xf1, 0xfd, 0xfd, 0xfc, 0x01, 0x01, 0x00, 0xed, 0x04, 0xff, 0xf2, + 0x01, 0xfc, 0xff, 0x02, 0x03, 0x08, 0xff, 0xed, 0xfc, 0x02, 0x01, 0x02, + 0x07, 0x1b, 0x00, 0xf5, 0x03, 0xfd, 0xfd, 0xfc, 0x09, 0x03, 0x01, 0xfb, + 0xfc, 0x02, 0x02, 0x01, 0x15, 0x06, 0xfe, 0xf6, 0xff, 0xfc, 0x04, 0xfe, + 0xfd, 0x14, 0x01, 0xff, 0xff, 0x01, 0x03, 0xfd, 0xfe, 0xf3, 0xff, 0x02, + 0xfe, 0xff, 0xfc, 0xfd, 0xeb, 0xe3, 0x00, 0x01, 0xff, 0xfe, 0x03, 0xfe, + 0x06, 0xe2, 0x03, 0xf5, 0xfe, 0x00, 0x02, 0xff, 0x18, 0x14, 0xff, 0xec, + 0xfd, 0x03, 0x04, 0x00, 0x1e, 0x24, 0x01, 0xfa, 0x02, 0xfe, 0xff, 0x00, + 0xca, 0x00, 0x01, 0xff, 0xfe, 0xff, 0xfc, 0x03, 0x04, 0x03, 0x00, 0x02, + 0xfe, 0xff, 0x02, 0x00, 0x05, 0x01, 0x03, 0x8b, 0x02, 0x02, 0xfe, 0xfd, + 0x08, 0x13, 0x01, 0x05, 0x02, 0x02, 0x01, 0xfc, 0xeb, 0xe7, 0xfe, 0x1b, + 0x03, 0xfb, 0x01, 0xff, 0xc3, 0xf3, 0x03, 0xfa, 0x02, 0x01, 0x03, 0xfd, + 0xc4, 0xed, 0xff, 0xfb, 0x02, 0xfb, 0xfe, 0x04, 0xd8, 0x02, 0xfc, 0x00, + 0x03, 0xfd, 0x01, 0x02, 0xdd, 0xf8, 0xfc, 0xfc, 0xfe, 0xfc, 0x01, 0x04, + 0xe8, 0x0d, 0x03, 0xf4, 0x02, 0x02, 0x05, 0xfc, 0x09, 0x18, 0x02, 0xed, + 0x03, 0xfc, 0x05, 0xff, 0x00, 0x1e, 0xfe, 0xf5, 0x03, 0xfb, 0x03, 0xff, + 0x03, 0x0a, 0xfc, 0xfa, 0xff, 0x01, 0x04, 0xff, 0x13, 0x0f, 0xfd, 0xf3, + 0x03, 0xfe, 0x03, 0x01, 0xfe, 0x18, 0xff, 0xfb, 0x00, 0x03, 0x01, 0xfd, + 0x09, 0xfb, 0x00, 0x08, 0x00, 0xff, 0x01, 0x04, 0xfe, 0xe8, 0xfe, 0x07, + 0xff, 0xff, 0xfe, 0x01, 0x0d, 0xe0, 0x02, 0xf6, 0xfd, 0xfe, 0x02, 0x02, + 0x23, 0x14, 0x02, 0xf4, 0xfe, 0xff, 0x05, 0xfc, 0x24, 0x1b, 0xfe, 0xfb, + 0x02, 0x00, 0x01, 0x02, 0xd6, 0xfe, 0xff, 0xf9, 0xfe, 0x02, 0x02, 0x04, + 0xff, 0x01, 0x02, 0x02, 0xff, 0x02, 0xfc, 0x02, 0x06, 0x02, 0x03, 0x94, + 0xff, 0xfd, 0xfc, 0xff, 0x07, 0x11, 0x03, 0x07, 0xfd, 0xfb, 0x04, 0xff, + 0xe5, 0xeb, 0x00, 0x1e, 0x02, 0xfc, 0xff, 0x02, 0xbd, 0xf1, 0x03, 0xfb, + 0x02, 0xff, 0xfe, 0x02, 0xbe, 0xee, 0x03, 0x02, 0xfe, 0x00, 0xff, 0xff, + 0xd4, 0x08, 0xfc, 0xff, 0x01, 0x00, 0x00, 0x04, 0xda, 0xfb, 0x01, 0xf7, + 0x03, 0x01, 0xff, 0x01, 0xe6, 0x0a, 0x03, 0xf3, 0x03, 0x03, 0x00, 0xfc, + 0xfd, 0x1b, 0xfe, 0xe5, 0x02, 0xfb, 0x03, 0xfc, 0xf9, 0x21, 0x04, 0xfa, + 0xfd, 0x03, 0xfe, 0xfe, 0x05, 0x0a, 0x00, 0xfa, 0x01, 0x02, 0x06, 0xfe, + 0x12, 0x02, 0xff, 0xfb, 0x02, 0xfd, 0x02, 0xff, 0x03, 0x12, 0xff, 0x00, + 0xfc, 0xfd, 0x01, 0x03, 0x15, 0xf9, 0x01, 0x06, 0x00, 0x01, 0x01, 0x03, + 0x02, 0xe4, 0x02, 0x00, 0xff, 0xfc, 0xfd, 0xff, 0x07, 0xe9, 0x00, 0xf5, + 0x03, 0x02, 0x00, 0xfe, 0x1b, 0x12, 0x03, 0xf3, 0xfc, 0x02, 0x02, 0x04, + 0x20, 0x21, 0x02, 0xf6, 0xfc, 0x00, 0x00, 0x04, 0xdd, 0xfb, 0x03, 0xf9, + 0x03, 0x03, 0x00, 0xfc, 0x00, 0xfe, 0xff, 0x00, 0x03, 0x00, 0xff, 0x04, + 0x02, 0x01, 0xfe, 0x9b, 0x04, 0xfc, 0x00, 0x00, 0x01, 0x0c, 0x03, 0x04, + 0xfc, 0xfc, 0xff, 0x01, 0xe0, 0xee, 0xfe, 0x18, 0x00, 0x01, 0x04, 0x03, + 0xb9, 0xf8, 0xff, 0xfd, 0x00, 0xfd, 0xff, 0x00, 0xbb, 0xf2, 0xfe, 0xfc, + 0x02, 0x01, 0x05, 0x00, 0xd4, 0x06, 0xff, 0xf5, 0xfe, 0xfe, 0x02, 0x02, + 0xe6, 0x04, 0xfc, 0xf5, 0x01, 0xfe, 0x01, 0x02, 0xe7, 0x11, 0x01, 0xf6, + 0xfd, 0x00, 0xff, 0x00, 0x0b, 0x26, 0x03, 0xe8, 0xff, 0xfb, 0xfe, 0xfd, + 0x01, 0x2a, 0x02, 0xfa, 0x02, 0xfe, 0x03, 0xff, 0x10, 0x12, 0xfd, 0xff, + 0x01, 0x03, 0x00, 0x04, 0x14, 0x06, 0x01, 0xfa, 0x02, 0x02, 0x04, 0x01, + 0x0a, 0x17, 0xfd, 0xfc, 0x03, 0xff, 0x02, 0x01, 0x07, 0xfc, 0x03, 0xfa, + 0x03, 0x03, 0x01, 0x04, 0xf3, 0xe4, 0x00, 0x01, 0xfe, 0x02, 0x00, 0xfd, + 0xfe, 0xed, 0xfe, 0xf7, 0x00, 0x01, 0x00, 0xfd, 0x17, 0x10, 0xfc, 0xf5, + 0xfe, 0xfc, 0x00, 0xfd, 0x1e, 0x11, 0xfe, 0xf8, 0x00, 0x03, 0x05, 0x00, + 0xd9, 0xfc, 0xff, 0xfd, 0x01, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x04, 0x02, + 0xfe, 0xfe, 0x05, 0x02, 0x03, 0xfe, 0x02, 0x96, 0x04, 0x03, 0x01, 0x03, + 0xff, 0x0a, 0xfc, 0x05, 0x03, 0xfc, 0x01, 0x04, 0xd8, 0xf5, 0x02, 0x13, + 0x01, 0xff, 0x06, 0x03, 0xbb, 0x02, 0x03, 0xf6, 0x01, 0x02, 0x05, 0xfd, + 0xc5, 0xe7, 0x01, 0xfa, 0x04, 0xfb, 0x00, 0xff, 0xdc, 0x01, 0xff, 0x05, + 0x01, 0xff, 0x02, 0x03, 0xf1, 0x05, 0xff, 0xfa, 0x00, 0x02, 0x02, 0x01, + 0xe0, 0x13, 0x02, 0xf7, 0x02, 0x03, 0xfd, 0x04, 0x0a, 0x1b, 0x04, 0xea, + 0x03, 0xff, 0x00, 0x03, 0xff, 0x25, 0xff, 0xf6, 0xff, 0x03, 0x01, 0xfd, + 0x08, 0x17, 0xfe, 0xf8, 0x04, 0x00, 0x00, 0x03, 0x0a, 0x03, 0x03, 0xf6, + 0x03, 0x01, 0x00, 0x01, 0xfc, 0x19, 0xfd, 0x00, 0xff, 0xfd, 0xfe, 0x02, + 0xf3, 0xf7, 0xfe, 0x01, 0xff, 0xfc, 0x03, 0xfe, 0xe3, 0xdd, 0x03, 0x00, + 0x03, 0x00, 0x02, 0xff, 0xf4, 0xf8, 0xfc, 0xf7, 0xfc, 0xfd, 0xfe, 0x00, + 0x10, 0x1e, 0xff, 0xf4, 0xfc, 0xff, 0x01, 0x04, 0x1d, 0x14, 0xfd, 0xfe, + 0x01, 0x02, 0x05, 0xff, 0xc3, 0xff, 0xff, 0x00, 0xfe, 0x02, 0x02, 0xfc, + 0xfd, 0xff, 0x01, 0x02, 0xff, 0xff, 0x00, 0xfe, 0x03, 0x02, 0xfc, 0xa9, + 0xff, 0x00, 0xfd, 0x02, 0x01, 0x02, 0xfc, 0xf8, 0xfe, 0x03, 0xfe, 0x02, + 0xcd, 0xfb, 0x03, 0x0c, 0xfd, 0x03, 0xfd, 0xfd, 0xc0, 0x07, 0x03, 0xfa, + 0x04, 0x00, 0x01, 0xfd, 0xc0, 0xe1, 0xfe, 0xf6, 0xfe, 0xfb, 0xfd, 0xfd, + 0xd0, 0x05, 0x00, 0xfd, 0xfd, 0x00, 0x02, 0xff, 0xe5, 0xfd, 0x03, 0xf9, + 0xfc, 0xfb, 0xfc, 0xfd, 0xea, 0x0d, 0x03, 0xfb, 0xff, 0x01, 0xfe, 0x03, + 0x01, 0x19, 0xff, 0xec, 0x00, 0xfe, 0x04, 0xff, 0xfc, 0x1b, 0xfd, 0xfe, + 0x01, 0xfb, 0x01, 0x01, 0x00, 0x0f, 0xff, 0xfd, 0xff, 0xfe, 0x02, 0x00, + 0x0b, 0x03, 0xfe, 0xfb, 0xfe, 0x04, 0x04, 0x00, 0xfa, 0x13, 0x01, 0x00, + 0xfe, 0xff, 0xff, 0x02, 0xf8, 0xfa, 0x02, 0x07, 0x01, 0xfc, 0x02, 0x02, + 0xe9, 0xe3, 0xfc, 0x03, 0xfe, 0xff, 0x03, 0xfd, 0xf7, 0xf3, 0xfd, 0xf6, + 0x02, 0xfe, 0xfe, 0x00, 0x0d, 0x17, 0x04, 0xf0, 0x02, 0xfb, 0xfe, 0xfc, + 0x0a, 0x1c, 0x03, 0x00, 0xfe, 0xfb, 0x05, 0x01, 0xe0, 0x01, 0xff, 0xfe, + 0x03, 0xfd, 0x02, 0xfc, 0x01, 0xfd, 0x02, 0x01, 0x01, 0x00, 0xff, 0xfe, + 0x02, 0x01, 0x04, 0xab, 0xff, 0x01, 0xfe, 0x01, 0x06, 0x02, 0x01, 0xf9, + 0x01, 0x01, 0xfe, 0x02, 0xde, 0xfe, 0xfd, 0x0a, 0x02, 0xff, 0x04, 0x00, + 0xd0, 0x13, 0x03, 0xff, 0x00, 0x02, 0x00, 0x00, 0xcc, 0xde, 0x02, 0xfa, + 0xfe, 0x00, 0xfb, 0x02, 0xd5, 0xfb, 0x02, 0x01, 0x00, 0xfc, 0xfe, 0x01, + 0xe9, 0xfa, 0x02, 0xf1, 0xfe, 0xff, 0xff, 0x04, 0xe4, 0x0e, 0xfe, 0xf8, + 0x00, 0x02, 0x00, 0xff, 0x09, 0x0a, 0xfe, 0xf5, 0xfc, 0x02, 0x05, 0xff, + 0x00, 0x10, 0x03, 0xf5, 0x01, 0xff, 0xfe, 0xfe, 0x0d, 0x07, 0x04, 0xf9, + 0xfe, 0x02, 0x04, 0x01, 0x0b, 0xfe, 0x00, 0xf4, 0x02, 0x02, 0x00, 0xff, + 0x03, 0x0b, 0x00, 0xfd, 0x03, 0xfc, 0xfc, 0x00, 0x02, 0xf1, 0xfc, 0xfe, + 0xfe, 0x01, 0xff, 0x03, 0xf5, 0xdd, 0xfd, 0x01, 0x02, 0xfc, 0x04, 0xff, + 0x05, 0xec, 0x03, 0xf2, 0xff, 0x01, 0x06, 0x04, 0x15, 0x15, 0x04, 0xf0, + 0xfd, 0x01, 0xff, 0x04, 0x19, 0x13, 0xfe, 0xfa, 0xfc, 0x02, 0x00, 0xfd, + 0xe7, 0xff, 0x00, 0xfd, 0xfc, 0x03, 0xfc, 0x00, 0xff, 0x00, 0xff, 0x01, + 0xfc, 0x00, 0x00, 0x03, 0x03, 0xff, 0x03, 0xb7, 0xfe, 0xfd, 0xff, 0x03, + 0x01, 0x05, 0x00, 0xf7, 0xff, 0x01, 0x01, 0x00, 0xdf, 0x08, 0x00, 0x0e, + 0xfd, 0x01, 0x01, 0xff, 0xd1, 0x0f, 0xfe, 0xf7, 0xfe, 0x00, 0xfe, 0x00, + 0xb0, 0xdc, 0xfc, 0x00, 0x02, 0xfc, 0xfd, 0x02, 0xd5, 0xfb, 0xfe, 0x04, + 0x03, 0xfd, 0x01, 0xfc, 0xdb, 0xfc, 0xff, 0xf7, 0x04, 0xfe, 0x00, 0xfd, + 0xdd, 0x0c, 0x00, 0xef, 0x00, 0x01, 0x02, 0xfe, 0xfc, 0x18, 0x01, 0xf1, + 0xfe, 0xfc, 0xfe, 0xfc, 0xf5, 0x15, 0x01, 0xf9, 0x04, 0xfd, 0x00, 0x02, + 0xfc, 0x07, 0xff, 0xfc, 0xfe, 0x03, 0x01, 0x03, 0xfd, 0x00, 0xff, 0xfb, + 0xfc, 0xff, 0xfd, 0x03, 0xef, 0x0f, 0x00, 0xfc, 0xff, 0xfb, 0x00, 0xfd, + 0x02, 0xef, 0x00, 0x00, 0xff, 0xfb, 0xfe, 0xfe, 0xf3, 0xdc, 0x02, 0x02, + 0xfe, 0xfd, 0xfc, 0x02, 0x0a, 0xea, 0xff, 0xfa, 0x00, 0xfc, 0x00, 0x03, + 0x0f, 0x0e, 0xfc, 0xf9, 0x00, 0xfd, 0x04, 0x04, 0x04, 0x11, 0x01, 0xf8, + 0x03, 0xfc, 0x00, 0x04, 0xbd, 0xfd, 0x03, 0xfd, 0x01, 0x04, 0xfe, 0xfd, + 0x01, 0x02, 0xff, 0x02, 0xff, 0xff, 0x01, 0xfd, 0x02, 0x00, 0x02, 0xba, + 0x00, 0x00, 0xfc, 0x04, 0x02, 0x02, 0x02, 0xf3, 0xfc, 0xff, 0x03, 0xfd, + 0xda, 0x04, 0x04, 0x0a, 0xfe, 0x01, 0x02, 0xff, 0xc2, 0x14, 0x03, 0xf9, + 0xfe, 0x03, 0x01, 0x03, 0xa4, 0xeb, 0x04, 0xf3, 0x02, 0xfd, 0x01, 0xfc, + 0xc3, 0xff, 0x02, 0x01, 0xff, 0x02, 0x01, 0x02, 0xd9, 0xf4, 0x00, 0xf0, + 0x04, 0x00, 0x07, 0xfe, 0xe7, 0x0c, 0xfc, 0xf3, 0xfe, 0x01, 0x05, 0x03, + 0xf4, 0x10, 0x01, 0xf0, 0x00, 0x02, 0x02, 0x02, 0xe7, 0x1b, 0xff, 0xf8, + 0xfe, 0xfb, 0x00, 0xfe, 0xf2, 0x04, 0x00, 0x06, 0x00, 0x03, 0xfd, 0xfe, + 0xff, 0x02, 0xff, 0xfa, 0xfe, 0x01, 0x03, 0xfe, 0xf6, 0x0f, 0xfc, 0x00, + 0xfb, 0xfd, 0x01, 0x03, 0xfe, 0xf2, 0x01, 0xff, 0x03, 0xfc, 0x05, 0x02, + 0xf5, 0xdd, 0xff, 0x01, 0xfc, 0xff, 0xff, 0x02, 0xff, 0xe5, 0x03, 0xf3, + 0xfe, 0xff, 0x02, 0x02, 0x01, 0x0d, 0x00, 0xf6, 0x02, 0x03, 0xfe, 0x00, + 0x04, 0x0f, 0xff, 0xfe, 0xfe, 0x02, 0xfe, 0x00, 0xb4, 0xfe, 0xfd, 0x00, + 0xfe, 0xfb, 0x01, 0x03, 0x00, 0x00, 0xff, 0x05, 0xfc, 0xfe, 0xff, 0xfc, + 0x05, 0x00, 0x04, 0xbe, 0x00, 0x04, 0x00, 0x04, 0x00, 0x03, 0xfd, 0xeb, + 0xfc, 0x02, 0x01, 0xfe, 0xf3, 0x0e, 0xfd, 0x03, 0x01, 0xfd, 0x06, 0xfc, + 0xc7, 0x1a, 0xff, 0xfe, 0x03, 0xff, 0x00, 0x02, 0xaa, 0xd8, 0x00, 0xfd, + 0x01, 0xfd, 0x04, 0x02, 0xc0, 0xfc, 0xfd, 0xfb, 0xff, 0xfe, 0x03, 0x04, + 0xd4, 0xf8, 0x02, 0xfb, 0xfd, 0x02, 0x02, 0x04, 0xdc, 0x06, 0x04, 0xf4, + 0xfd, 0xfc, 0x02, 0xfe, 0xfb, 0x0e, 0x02, 0xf2, 0x03, 0xfd, 0x03, 0x01, + 0xed, 0x16, 0xff, 0xf4, 0xfc, 0xfd, 0x02, 0xfe, 0xf7, 0x03, 0xfe, 0xfb, + 0xfd, 0xfd, 0x03, 0x01, 0xfd, 0x08, 0x00, 0xf5, 0xfc, 0xfd, 0x00, 0x03, + 0xf2, 0x10, 0x00, 0xfc, 0x02, 0x02, 0x04, 0x03, 0x0d, 0xf6, 0x03, 0x01, + 0x01, 0x02, 0x03, 0xff, 0xf3, 0xd1, 0x02, 0x01, 0x00, 0x02, 0x03, 0xff, + 0x01, 0xe3, 0x03, 0xf4, 0xfc, 0x00, 0x02, 0x02, 0x07, 0x07, 0x00, 0xf4, + 0x01, 0x00, 0x03, 0xff, 0x05, 0x06, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x02, + 0xb5, 0xfe, 0x01, 0xfd, 0x02, 0x03, 0x02, 0x03, 0x01, 0xfc, 0x04, 0x00, + 0xfd, 0x02, 0x00, 0x03, 0x03, 0xfe, 0x03, 0xb9, 0xfd, 0xfc, 0xfb, 0xff, + 0x01, 0x01, 0x02, 0xf2, 0xff, 0xfc, 0x04, 0x03, 0xf6, 0x17, 0xfc, 0x05, + 0x03, 0xff, 0x04, 0x04, 0xdc, 0x0f, 0xff, 0x04, 0x01, 0xfe, 0x04, 0xff, + 0xb8, 0xdc, 0xff, 0xf7, 0x02, 0xfd, 0x05, 0x03, 0xcf, 0x02, 0x04, 0xfd, + 0x00, 0xfd, 0xfe, 0x04, 0xe4, 0xf4, 0x01, 0xf3, 0xfc, 0x00, 0xfd, 0x02, + 0xec, 0x06, 0xfc, 0xf1, 0xfc, 0x01, 0x03, 0x03, 0xfc, 0x12, 0x03, 0xec, + 0x03, 0xfc, 0xff, 0x02, 0xf4, 0x0c, 0xfc, 0xf9, 0x00, 0xfc, 0xfd, 0x00, + 0x01, 0x04, 0x01, 0xfe, 0x01, 0x00, 0x03, 0x00, 0x0f, 0x00, 0xfd, 0xfb, + 0xff, 0xfe, 0x03, 0x04, 0x01, 0x07, 0xfe, 0x03, 0x00, 0xfe, 0x04, 0x04, + 0x12, 0xfc, 0x00, 0x01, 0x03, 0xff, 0x01, 0xfe, 0xf6, 0xd7, 0xfd, 0x04, + 0xfd, 0xfc, 0x02, 0x00, 0x01, 0xe2, 0x02, 0xf5, 0xfe, 0x03, 0x03, 0x04, + 0x0b, 0x02, 0xff, 0xf8, 0xff, 0xfc, 0x03, 0x02, 0x16, 0x0d, 0x01, 0xfe, + 0xff, 0x00, 0x01, 0x03, 0xc2, 0xfc, 0x00, 0xfc, 0xfe, 0x00, 0x00, 0xff, + 0x00, 0xfc, 0xff, 0x02, 0x04, 0xfd, 0x05, 0xfd, 0x01, 0x00, 0xfd, 0xc0, + 0x02, 0xff, 0x02, 0x04, 0x04, 0xff, 0xfe, 0xef, 0xfd, 0x02, 0x01, 0x01, + 0xfe, 0x1c, 0xfc, 0x01, 0x01, 0xff, 0x04, 0x01, 0xdb, 0x13, 0xff, 0x08, + 0x03, 0x01, 0xfd, 0xfc, 0xb9, 0xd0, 0xfe, 0xf5, 0x02, 0xfd, 0x01, 0x01, + 0xd4, 0x0b, 0xff, 0x04, 0x00, 0x00, 0xfd, 0x02, 0xf5, 0xfc, 0xfd, 0xfc, + 0x01, 0x01, 0x04, 0x00, 0xed, 0x02, 0xfd, 0xf1, 0xfc, 0xfb, 0x00, 0x01, + 0xf9, 0xff, 0xff, 0xf5, 0x02, 0x00, 0x04, 0x04, 0xfe, 0x01, 0xfe, 0xf8, + 0xff, 0xff, 0x02, 0x02, 0x01, 0xfc, 0x01, 0x01, 0x03, 0x01, 0x02, 0x00, + 0x1d, 0x00, 0x01, 0xfd, 0x00, 0xfd, 0x00, 0x04, 0x05, 0xfe, 0x03, 0xff, + 0x04, 0x02, 0xff, 0x00, 0x0f, 0xf0, 0x01, 0x01, 0x03, 0x01, 0x00, 0x03, + 0xf5, 0xd3, 0x03, 0x03, 0xfc, 0xfc, 0x05, 0xff, 0xfc, 0xde, 0x00, 0xf6, + 0x03, 0xfc, 0x03, 0xfe, 0xfe, 0xfc, 0xfc, 0xf7, 0xfd, 0x00, 0x02, 0x00, + 0x0f, 0x08, 0x01, 0xfb, 0xfb, 0xfc, 0x00, 0x00, 0xde, 0xfa, 0xff, 0xfd, + 0xfe, 0xfc, 0x00, 0xfc, 0x00, 0x02, 0xfe, 0xff, 0x01, 0x02, 0xfe, 0xfd, + 0xff, 0x02, 0x00, 0xc4, 0x01, 0xfe, 0xfc, 0xfe, 0x03, 0x01, 0xff, 0xe8, + 0x03, 0x01, 0x03, 0x01, 0xf6, 0x1e, 0xff, 0x03, 0xfe, 0xfe, 0xfd, 0x00, + 0xda, 0x18, 0x04, 0x01, 0x04, 0x02, 0x01, 0x00, 0xb1, 0xcf, 0x03, 0xf3, + 0xfc, 0xff, 0x01, 0x02, 0xd1, 0x0d, 0xff, 0x00, 0x01, 0xfe, 0x01, 0x01, + 0xe6, 0xf2, 0xfe, 0xfa, 0xfd, 0xfd, 0xfd, 0x00, 0xdd, 0x04, 0x01, 0xf2, + 0xfc, 0xff, 0x02, 0x02, 0xf2, 0xfc, 0x03, 0xf7, 0xfc, 0x02, 0xfd, 0xfd, + 0xee, 0x03, 0x03, 0xf7, 0xfc, 0x00, 0xff, 0xff, 0xfa, 0xfd, 0xfd, 0xff, + 0x03, 0xfd, 0x04, 0x04, 0x19, 0xff, 0x04, 0xfd, 0x00, 0x03, 0x04, 0x02, + 0xf6, 0xfe, 0xff, 0xf9, 0xfd, 0xfd, 0x03, 0x00, 0xfb, 0xea, 0x02, 0x00, + 0x00, 0xff, 0x01, 0x03, 0xd2, 0xcd, 0x01, 0x04, 0xfc, 0xff, 0x02, 0xfe, + 0xdd, 0xdc, 0xff, 0xfa, 0x03, 0xfe, 0xfd, 0xff, 0xef, 0xfc, 0x00, 0xf4, + 0x02, 0xfe, 0x02, 0x00, 0xf7, 0x01, 0x00, 0xf7, 0x02, 0xfe, 0xff, 0xfd, + 0xb7, 0xfb, 0xff, 0x00, 0xfe, 0xfb, 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, + 0x02, 0xff, 0x04, 0xfc, 0x02, 0x02, 0x02, 0xca, 0xfe, 0x01, 0x02, 0xff, + 0x05, 0x00, 0x01, 0xe7, 0x03, 0xfc, 0x00, 0xff, 0xff, 0x16, 0x02, 0x05, + 0xfe, 0x03, 0x05, 0xff, 0xe6, 0x12, 0xff, 0x05, 0xfc, 0x01, 0x01, 0x02, + 0xc0, 0xd3, 0xfd, 0xf2, 0x04, 0xfb, 0x02, 0xff, 0xe7, 0x14, 0x01, 0xff, + 0xfe, 0xff, 0x01, 0x01, 0xe9, 0xfe, 0xfd, 0xf5, 0xff, 0xfc, 0x02, 0xff, + 0xe9, 0x05, 0x04, 0xf1, 0xfd, 0xfd, 0x04, 0x01, 0xfe, 0x02, 0xfe, 0xf1, + 0x03, 0x03, 0xfb, 0xff, 0xf6, 0x05, 0x03, 0xf5, 0xfd, 0x00, 0xfe, 0x02, + 0x0a, 0x01, 0x03, 0xfc, 0x00, 0xfc, 0x04, 0x03, 0x1b, 0x06, 0x03, 0xfa, + 0xff, 0xfd, 0x02, 0xff, 0x06, 0xfb, 0x03, 0x01, 0x01, 0xfd, 0x04, 0x04, + 0x11, 0xec, 0x04, 0x06, 0xfb, 0xfc, 0x03, 0xff, 0xfb, 0xd2, 0x03, 0x05, + 0xfe, 0x03, 0x03, 0xfd, 0x00, 0xdd, 0xff, 0xf4, 0xfc, 0x01, 0xfe, 0x04, + 0x0c, 0x02, 0x01, 0xee, 0x02, 0xfd, 0x02, 0xfe, 0x16, 0x01, 0x03, 0x01, + 0x01, 0x01, 0xfe, 0xff, 0x10, 0xfc, 0xff, 0xfc, 0x03, 0xfd, 0x00, 0x04, + 0xff, 0x03, 0xfe, 0x00, 0xfd, 0xfc, 0x02, 0x01, 0x02, 0x02, 0xff, 0xc6, + 0x01, 0xfd, 0x00, 0x04, 0x04, 0x00, 0xfd, 0xec, 0xfe, 0x01, 0xfd, 0xff, + 0x01, 0x0e, 0xfc, 0x0c, 0x02, 0xfb, 0x00, 0x00, 0xee, 0x06, 0x03, 0x05, + 0x01, 0x01, 0x04, 0xfc, 0xc8, 0xd1, 0xfe, 0xee, 0xfd, 0x02, 0x00, 0x01, + 0xed, 0x0e, 0x03, 0x01, 0xfd, 0x01, 0x01, 0x02, 0x00, 0x0b, 0xfd, 0xf8, + 0x01, 0xfe, 0x00, 0x01, 0xfa, 0x01, 0x01, 0xeb, 0xfd, 0xfd, 0x02, 0x00, + 0x0b, 0x04, 0x00, 0xeb, 0xfc, 0xfd, 0xfd, 0x00, 0x04, 0x10, 0xfc, 0xf9, + 0x02, 0xfb, 0x03, 0x01, 0x04, 0x05, 0xfd, 0xf7, 0xfd, 0xfb, 0x02, 0xff, + 0x25, 0x04, 0xfc, 0xfc, 0xfe, 0x02, 0xfd, 0x04, 0x12, 0x0b, 0x00, 0x00, + 0x00, 0xfd, 0x00, 0x00, 0x17, 0xef, 0xfd, 0x09, 0xfc, 0x01, 0x03, 0x01, + 0x05, 0xcb, 0x03, 0x04, 0xfc, 0x01, 0x01, 0xfd, 0x0f, 0xdb, 0x03, 0xed, + 0xfd, 0x00, 0xff, 0x04, 0x1c, 0x05, 0x00, 0xf4, 0x02, 0xff, 0x04, 0x00, + 0x1e, 0x08, 0xfd, 0xff, 0x02, 0xfd, 0x01, 0x02, 0x07, 0xfd, 0xfc, 0x00, + 0x03, 0x02, 0xfd, 0x00, 0xfd, 0xfe, 0x04, 0x00, 0x00, 0x02, 0xfd, 0x03, + 0x04, 0xff, 0x01, 0xbe, 0x03, 0xfd, 0xfc, 0xfe, 0x04, 0x06, 0x04, 0xef, + 0xfe, 0x03, 0x06, 0xfd, 0x00, 0x0c, 0x02, 0x06, 0x03, 0xff, 0x04, 0x04, + 0xe2, 0xfc, 0xff, 0x09, 0xfc, 0xfe, 0xfd, 0x01, 0xda, 0xdc, 0xfc, 0xf1, + 0x03, 0x00, 0x03, 0xfe, 0x03, 0x11, 0xff, 0xfe, 0x04, 0x02, 0xfe, 0x01, + 0x01, 0xf5, 0x02, 0xfb, 0x01, 0x01, 0x02, 0x02, 0xf8, 0x09, 0x01, 0xf8, + 0x00, 0xfd, 0x01, 0xfd, 0x08, 0x08, 0xfc, 0xef, 0xfc, 0x00, 0xfe, 0xfc, + 0xfe, 0x0c, 0x01, 0xf8, 0xfd, 0xfd, 0x03, 0x03, 0x07, 0x07, 0xfe, 0xfe, + 0xff, 0xfe, 0xfd, 0xfe, 0x19, 0x0f, 0x00, 0x00, 0xfd, 0x03, 0x01, 0x02, + 0x0a, 0x01, 0x04, 0xfe, 0xfc, 0x01, 0xfe, 0x01, 0x18, 0xea, 0xfd, 0x05, + 0xfc, 0x02, 0xff, 0x02, 0xfb, 0xc3, 0x00, 0x01, 0xff, 0xfe, 0xff, 0xfe, + 0x05, 0xd7, 0xff, 0xf6, 0x03, 0xfd, 0xff, 0x00, 0x14, 0x00, 0x04, 0xf6, + 0x00, 0x01, 0xff, 0xff, 0x21, 0x08, 0xfd, 0xfe, 0x00, 0x01, 0x04, 0xfe, + 0xe6, 0xff, 0x01, 0xfd, 0x00, 0x04, 0xfd, 0x02, 0xfc, 0x02, 0xfd, 0x03, + 0x02, 0xfd, 0x01, 0x02, 0x02, 0x02, 0xfc, 0xc4, 0xff, 0x00, 0x03, 0xff, + 0x06, 0x00, 0x04, 0xea, 0xfb, 0xfe, 0xfe, 0xfe, 0x04, 0x10, 0xfd, 0x04, + 0xfe, 0x00, 0x04, 0xfc, 0xef, 0x03, 0x02, 0x05, 0x03, 0xff, 0x01, 0xfe, + 0xd8, 0xce, 0xfd, 0xee, 0xfc, 0xff, 0x03, 0xfd, 0xf1, 0xff, 0x03, 0xff, + 0x00, 0xff, 0x01, 0x01, 0xfb, 0xfe, 0x02, 0xf8, 0xff, 0x00, 0x01, 0xfc, + 0xee, 0x01, 0x01, 0xf6, 0x00, 0x00, 0x00, 0x03, 0xfe, 0xf6, 0x03, 0xe8, + 0xff, 0xfc, 0x02, 0xff, 0xfc, 0x01, 0x03, 0xfb, 0xfc, 0x03, 0xfc, 0x04, + 0xff, 0xfd, 0xfd, 0xfe, 0x02, 0x00, 0x00, 0x01, 0x07, 0x05, 0xff, 0xf6, + 0x00, 0x01, 0x00, 0x01, 0xf3, 0x03, 0x01, 0x04, 0x01, 0xfd, 0x00, 0xff, + 0x05, 0xe8, 0x00, 0x02, 0xfc, 0xfe, 0x03, 0x00, 0xe0, 0xc7, 0x01, 0x09, + 0x00, 0xfc, 0x02, 0xff, 0xf2, 0xd8, 0x01, 0xf7, 0x01, 0xfd, 0x04, 0x00, + 0xf8, 0xf7, 0x01, 0xf1, 0x00, 0xff, 0xff, 0x04, 0x01, 0x0a, 0xff, 0xf9, + 0xfd, 0x00, 0x01, 0xfd, 0xc0, 0xfa, 0x03, 0x00, 0x01, 0xff, 0x00, 0xff, + 0xfd, 0xfd, 0x02, 0x02, 0xfc, 0x02, 0xff, 0x00, 0x03, 0x02, 0x03, 0xc4, + 0x00, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0xec, 0xfe, 0x01, 0x02, 0xfe, + 0x00, 0x10, 0xff, 0x07, 0x00, 0x03, 0x01, 0x01, 0xf1, 0x0e, 0xff, 0x06, + 0x00, 0xfc, 0x03, 0xfe, 0xce, 0xcb, 0x00, 0xed, 0xff, 0xff, 0x02, 0xfc, + 0xe4, 0x07, 0xfc, 0xfe, 0x02, 0xff, 0xfe, 0x03, 0xe9, 0xf4, 0xfc, 0xf6, + 0x01, 0x03, 0x01, 0x03, 0xe4, 0xf8, 0xfd, 0xfa, 0xfe, 0xfd, 0x01, 0x04, + 0xf4, 0xf8, 0x00, 0xf4, 0x03, 0xfb, 0x00, 0x01, 0xea, 0x07, 0xff, 0xf8, + 0x00, 0x00, 0x00, 0xfd, 0xfb, 0xfc, 0xfc, 0xf8, 0x03, 0x03, 0x05, 0x01, + 0x0b, 0x05, 0x04, 0xfa, 0x02, 0x01, 0x00, 0x02, 0xf0, 0x00, 0x03, 0x03, + 0x03, 0xff, 0x01, 0x00, 0xf5, 0xdf, 0x01, 0x03, 0xfe, 0x01, 0x01, 0x03, + 0xe2, 0xca, 0x00, 0x0c, 0xfc, 0xfd, 0xff, 0xff, 0xea, 0xd6, 0x00, 0xf4, + 0xff, 0xfc, 0x05, 0x02, 0xea, 0x03, 0x03, 0xf5, 0xfd, 0xfc, 0xfc, 0xff, + 0xff, 0x07, 0x00, 0xf7, 0x01, 0xfc, 0xfe, 0x03, 0xba, 0xfd, 0x03, 0x00, + 0x03, 0xfc, 0x01, 0xff, 0x03, 0xfc, 0x01, 0x02, 0x04, 0x01, 0x02, 0x00, + 0x04, 0x02, 0xff, 0xb7, 0x01, 0xfe, 0xff, 0x02, 0xca, 0x03, 0x00, 0xd7, + 0x02, 0x03, 0xfe, 0x00, 0xe6, 0x10, 0x00, 0x39, 0xfe, 0x00, 0x01, 0x00, + 0xcf, 0x03, 0x04, 0x2f, 0xff, 0xff, 0xfd, 0x01, 0xca, 0xd2, 0xfe, 0x1b, + 0x00, 0xff, 0xfd, 0x03, 0xdc, 0xfb, 0xfe, 0x28, 0x03, 0x01, 0x01, 0xfc, + 0xd4, 0xef, 0x01, 0x2b, 0x00, 0xfd, 0xfd, 0x01, 0xcf, 0xe9, 0xff, 0x21, + 0xfd, 0x02, 0x04, 0x01, 0xe0, 0xf1, 0xff, 0x16, 0x00, 0xff, 0xfe, 0xfe, + 0xe2, 0xfe, 0x01, 0x1e, 0xfc, 0xfd, 0x04, 0x02, 0xdc, 0x00, 0x01, 0x1f, + 0x02, 0xfc, 0x01, 0xfd, 0xf7, 0xfc, 0xfe, 0x25, 0xfc, 0x02, 0x03, 0xfe, + 0xf9, 0xf7, 0xff, 0x22, 0xfe, 0x01, 0x01, 0x01, 0xe9, 0xe1, 0xfe, 0x31, + 0xfd, 0x00, 0x01, 0xfe, 0xf8, 0xcc, 0xfd, 0x2e, 0xff, 0x02, 0x02, 0x04, + 0xf7, 0xd5, 0x02, 0x1d, 0xfc, 0x01, 0x03, 0xfd, 0xfd, 0xf5, 0x02, 0x20, + 0xff, 0x00, 0x03, 0xfe, 0xf5, 0xfd, 0x02, 0x1b, 0x00, 0x04, 0x05, 0xfe, + 0x00, 0xf9, 0x01, 0xf7, 0x02, 0xfe, 0xfe, 0x01, 0x03, 0xfd, 0x02, 0x01, + 0x01, 0x00, 0x00, 0xfd, 0xfd, 0x01, 0x02, 0xf3, 0x02, 0xfd, 0x01, 0xff, + 0x01, 0x02, 0x01, 0xfe, 0xfc, 0x01, 0x02, 0x04, 0x03, 0xfe, 0xfe, 0xff, + 0xfc, 0x01, 0x01, 0xfe, 0x04, 0xf5, 0xfd, 0x00, 0x02, 0x04, 0x00, 0x02, + 0xfe, 0xe4, 0x02, 0x00, 0xfd, 0xfc, 0xfe, 0xfd, 0xfe, 0xfe, 0xfc, 0x00, + 0x02, 0xfd, 0x01, 0xfd, 0xff, 0xf5, 0xfd, 0x03, 0xfd, 0xff, 0x00, 0x03, + 0x01, 0xf7, 0x02, 0x03, 0x01, 0xfd, 0xff, 0x00, 0xfe, 0xf9, 0x00, 0x00, + 0x00, 0x00, 0x04, 0xff, 0xfc, 0xff, 0x03, 0x03, 0xfc, 0xfe, 0x01, 0x04, + 0x00, 0x02, 0x00, 0xfc, 0xfd, 0x03, 0xfd, 0x02, 0x02, 0xfe, 0xfd, 0xfe, + 0xff, 0x01, 0xff, 0x03, 0x03, 0xfb, 0x01, 0xfe, 0x01, 0x02, 0x00, 0x04, + 0x01, 0xf0, 0x02, 0x01, 0xfb, 0x02, 0x05, 0xfd, 0x03, 0xec, 0x02, 0xfe, + 0x02, 0xff, 0x00, 0x04, 0x01, 0xf4, 0xff, 0xfc, 0x00, 0x04, 0x01, 0xfc, + 0xfd, 0xfb, 0x00, 0x01, 0xff, 0x02, 0x03, 0x04, 0x01, 0x00, 0x03, 0xfb, + 0xfe, 0x03, 0xfd, 0xff, 0xfc, 0xf1, 0x03, 0x01, 0x01, 0x03, 0x02, 0x04, + 0x00, 0x01, 0xfe, 0xfe, 0x01, 0x03, 0x02, 0xff, 0x03, 0x01, 0xfe, 0x01, + 0x04, 0xfc, 0x03, 0xfd, 0xfc, 0x00, 0x03, 0x03, 0xff, 0xfd, 0xff, 0x03, + 0x01, 0x01, 0x04, 0x01, 0x01, 0x04, 0x03, 0x02, 0xfd, 0x01, 0xff, 0x00, + 0x03, 0xfd, 0x03, 0xfe, 0x01, 0x00, 0xff, 0x01, 0xfc, 0xff, 0x04, 0xfd, + 0x03, 0x00, 0x00, 0x03, 0x00, 0xfe, 0x00, 0xff, 0xfd, 0xfc, 0x01, 0xfc, + 0xff, 0xfe, 0x02, 0xfc, 0x02, 0x01, 0xff, 0xfb, 0xfc, 0x01, 0xfe, 0xfd, + 0x02, 0x02, 0xff, 0x00, 0xfd, 0x03, 0x01, 0xfd, 0xfc, 0x02, 0x04, 0x03, + 0x01, 0xfe, 0x04, 0xfc, 0x03, 0x03, 0x03, 0x00, 0xfe, 0xfd, 0x03, 0x04, + 0x00, 0x02, 0x03, 0xfc, 0xfd, 0xfe, 0x03, 0xfd, 0xfe, 0x03, 0xff, 0xff, + 0xfc, 0xfe, 0xfe, 0x03, 0xfe, 0x02, 0xfd, 0x03, 0x04, 0x01, 0x03, 0xfc, + 0xfc, 0xff, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0xfd, 0x05, 0x02, 0xfc, + 0x01, 0x02, 0x04, 0xfd, 0xfd, 0xfe, 0xfc, 0xff, 0xfe, 0xfd, 0xff, 0x03, + 0x03, 0x04, 0x02, 0xfe, 0xfe, 0x04, 0xfc, 0xff, 0xfd, 0xfe, 0xfe, 0x01, + 0xfb, 0xff, 0x00, 0xff, 0xfc, 0x03, 0xfc, 0xfc, 0xff, 0x00, 0xfc, 0xfb, + 0xff, 0x00, 0x02, 0x2c, 0x03, 0x03, 0x05, 0xff, 0x01, 0x43, 0x02, 0x18, + 0xfd, 0xfc, 0xfe, 0x04, 0x02, 0x02, 0x00, 0x05, 0xfc, 0xfd, 0xfd, 0xfc, + 0x01, 0x03, 0xfe, 0x00, 0xfd, 0xfc, 0x05, 0x00, 0x00, 0xfd, 0xfd, 0x0e, + 0x04, 0x03, 0xfe, 0x01, 0x00, 0x04, 0xff, 0x03, 0xff, 0xfe, 0xfc, 0x00, + 0xff, 0xfc, 0x04, 0x07, 0xff, 0xfc, 0x04, 0x00, 0x00, 0x02, 0xff, 0xff, + 0xfe, 0x03, 0xff, 0x01, 0x00, 0x01, 0xff, 0x06, 0xfd, 0x00, 0x00, 0x01, + 0x01, 0x03, 0x02, 0x09, 0x02, 0xfe, 0xff, 0x02, 0x03, 0x00, 0xff, 0x01, + 0x02, 0x04, 0x00, 0xfd, 0x01, 0x04, 0x04, 0x02, 0x03, 0xff, 0x02, 0x04, + 0x00, 0x03, 0xfc, 0x07, 0xfe, 0x02, 0xff, 0x02, 0xfd, 0xff, 0x01, 0x02, + 0xfc, 0x01, 0x04, 0x02, 0x00, 0x03, 0xff, 0xff, 0x00, 0x01, 0x01, 0xfd, + 0xff, 0x04, 0x00, 0x00, 0x04, 0x04, 0x02, 0x01, 0x01, 0xff, 0xfc, 0x04, + 0xfe, 0x00, 0xfd, 0xfe, 0x00, 0x00, 0x02, 0xff, 0x01, 0x01, 0xfc, 0x02, + 0xff, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0x00, 0xfd, 0xff, 0x02, 0xfd, 0xff, + 0x05, 0xff, 0xfd, 0xfe, 0x03, 0x01, 0xfc, 0x0d, 0xfe, 0x00, 0x01, 0xfe, + 0x06, 0x7e, 0x04, 0x0a, 0x04, 0x02, 0xff, 0x03, 0x08, 0xf4, 0xfd, 0x0d, + 0xfe, 0xff, 0x05, 0xff, 0x08, 0x1f, 0xfe, 0x05, 0x02, 0x01, 0x00, 0xfc, + 0x06, 0x12, 0xfd, 0x11, 0x01, 0x04, 0x01, 0x01, 0x02, 0x09, 0xfc, 0x0d, + 0x02, 0x04, 0xfd, 0x03, 0x02, 0x03, 0x01, 0x0a, 0xff, 0x03, 0xfc, 0xfd, + 0xff, 0x0e, 0xfd, 0x06, 0xfe, 0xfc, 0x02, 0x01, 0x00, 0x08, 0x02, 0x08, + 0x02, 0x03, 0x02, 0xfc, 0xff, 0x01, 0xfc, 0x05, 0x01, 0x04, 0xfb, 0xfe, + 0xff, 0x07, 0x04, 0x07, 0x05, 0x00, 0x03, 0x04, 0x01, 0x06, 0x00, 0xff, + 0x01, 0xff, 0x04, 0x03, 0x01, 0x00, 0xfe, 0x01, 0x00, 0x01, 0x01, 0x00, + 0xff, 0xfc, 0x01, 0x03, 0x00, 0x02, 0xfc, 0xfd, 0xff, 0xfd, 0xfe, 0xfc, + 0xfd, 0x02, 0x04, 0x03, 0xfe, 0xff, 0xfc, 0x01, 0x02, 0xfd, 0xfd, 0x03, + 0x00, 0x03, 0x02, 0x08, 0x02, 0xfe, 0x03, 0x01, 0xff, 0x01, 0x03, 0xfe, + 0xfd, 0xfd, 0x04, 0x04, 0xfb, 0x04, 0xfd, 0x01, 0x00, 0x00, 0xfe, 0x01, + 0xfe, 0x02, 0x03, 0x01, 0xfc, 0x00, 0xff, 0x01, 0x06, 0x00, 0xfc, 0x16, + 0xfd, 0xff, 0xfd, 0x03, 0x1a, 0x04, 0x01, 0x13, 0x01, 0x02, 0x01, 0x03, + 0x7f, 0xc3, 0xff, 0x0d, 0xfd, 0xfd, 0x03, 0x04, 0x60, 0xcf, 0xff, 0xff, + 0x05, 0xfe, 0x00, 0xfe, 0x42, 0xf5, 0xfe, 0x1c, 0x02, 0x04, 0x04, 0x04, + 0x26, 0xcf, 0x01, 0x11, 0x04, 0x03, 0x01, 0xfd, 0x07, 0xd9, 0x04, 0x10, + 0x01, 0x01, 0xfd, 0xfc, 0x0a, 0xe2, 0x04, 0x02, 0x01, 0x04, 0xfe, 0x02, + 0x08, 0xf4, 0xfe, 0x07, 0xff, 0xfd, 0x04, 0x00, 0x15, 0xe2, 0x04, 0x0b, + 0xfe, 0x01, 0x04, 0xfe, 0x18, 0xda, 0x04, 0x03, 0x02, 0x00, 0x01, 0xfe, + 0x13, 0xdf, 0xfc, 0xfb, 0x03, 0xff, 0x00, 0x04, 0x14, 0xed, 0x03, 0x05, + 0xfe, 0x00, 0xfe, 0xfd, 0x17, 0xe8, 0xfc, 0xfd, 0x03, 0x00, 0xfe, 0x02, + 0x20, 0x06, 0xfe, 0xfa, 0x04, 0xfc, 0xff, 0x00, 0x1b, 0x0e, 0x03, 0x03, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xe0, 0x04, 0x08, 0xff, 0xfe, 0x00, 0xfc, + 0x06, 0xe7, 0x02, 0x00, 0x02, 0x01, 0xfd, 0x00, 0x1c, 0x12, 0xff, 0xfb, + 0xfe, 0x00, 0xfe, 0x03, 0x03, 0x00, 0x01, 0xff, 0x03, 0xff, 0x00, 0xff, + 0x02, 0x01, 0x01, 0xf0, 0xff, 0xfc, 0x01, 0xfc, 0x11, 0x16, 0x03, 0x26, + 0x01, 0x03, 0xfe, 0x03, 0x6b, 0xc6, 0xfe, 0x11, 0xff, 0xfc, 0x04, 0x04, + 0x22, 0xd3, 0x00, 0xf7, 0x03, 0x02, 0x03, 0xff, 0x1d, 0xf7, 0x01, 0x23, + 0x03, 0x03, 0xff, 0x02, 0xfe, 0xde, 0xfc, 0x0d, 0x02, 0xfc, 0x00, 0x04, + 0xe6, 0xeb, 0x01, 0x07, 0x03, 0x04, 0x02, 0x00, 0xff, 0xee, 0x03, 0x03, + 0xfd, 0x02, 0x01, 0xfd, 0xf9, 0xff, 0x04, 0x07, 0xff, 0x03, 0x01, 0x01, + 0x18, 0xfa, 0xfe, 0x0f, 0xff, 0xfd, 0x03, 0x02, 0x0e, 0xe0, 0xff, 0x0e, + 0xfe, 0x05, 0x02, 0x02, 0x13, 0xdb, 0xfe, 0xfa, 0xff, 0xfd, 0x04, 0x04, + 0x0d, 0xf9, 0xfe, 0xff, 0x00, 0x00, 0x05, 0xfe, 0x0f, 0xed, 0x01, 0xfa, + 0xff, 0x02, 0xfd, 0x02, 0x0e, 0x14, 0xff, 0xf7, 0x03, 0x01, 0x05, 0xff, + 0x11, 0x10, 0xfd, 0x00, 0xfd, 0xfe, 0xff, 0xfe, 0xf1, 0xe4, 0x00, 0x08, + 0x03, 0xff, 0x02, 0xff, 0x0e, 0xe1, 0x00, 0xfa, 0x04, 0xfe, 0x00, 0x00, + 0x47, 0x10, 0xfe, 0xfd, 0x01, 0xff, 0xfe, 0xfd, 0x00, 0x04, 0xfc, 0xff, + 0x00, 0x03, 0xfe, 0x05, 0x03, 0x00, 0x01, 0xd3, 0xff, 0x01, 0xfe, 0x01, + 0x04, 0x26, 0x00, 0x29, 0x00, 0xfb, 0xfd, 0x00, 0x2a, 0xd8, 0x01, 0x0e, + 0xfc, 0x01, 0xfd, 0x04, 0xeb, 0xed, 0x00, 0xec, 0x04, 0x02, 0xff, 0x00, + 0x03, 0x27, 0xff, 0x27, 0x00, 0x03, 0x03, 0xfd, 0xfb, 0xf0, 0xff, 0x09, + 0xff, 0x03, 0x03, 0x03, 0xf2, 0xfd, 0xfd, 0x06, 0xfe, 0x05, 0x03, 0x03, + 0x11, 0xfb, 0x04, 0x03, 0x03, 0xfd, 0xfc, 0x03, 0x0e, 0x14, 0xfd, 0xfe, + 0xfe, 0xfc, 0xff, 0xfe, 0x1f, 0x13, 0x03, 0x12, 0xfe, 0xff, 0x01, 0xfe, + 0x14, 0xf2, 0x04, 0x0f, 0x01, 0x04, 0xfe, 0x01, 0x0e, 0xe4, 0x03, 0xfe, + 0xfd, 0xff, 0xfe, 0x00, 0x1a, 0xff, 0xff, 0xfe, 0xff, 0x02, 0x04, 0xfc, + 0x12, 0xfc, 0x03, 0xfa, 0x00, 0x00, 0x03, 0x02, 0x16, 0x1a, 0xfe, 0xfb, + 0x02, 0x04, 0x03, 0x00, 0x18, 0x29, 0x04, 0x05, 0xfe, 0xfe, 0x03, 0x01, + 0xf3, 0xf1, 0xfc, 0x09, 0xfd, 0x04, 0xfe, 0x00, 0x0d, 0xe7, 0xff, 0xf6, + 0x04, 0xfe, 0xfe, 0xfd, 0x57, 0x14, 0x01, 0xff, 0xff, 0x01, 0x02, 0x01, + 0xfe, 0xfe, 0x03, 0x01, 0x01, 0xfe, 0xfd, 0xfc, 0x02, 0xff, 0xfe, 0xd1, + 0x00, 0x02, 0xfd, 0x03, 0xff, 0x23, 0x01, 0x28, 0xfc, 0xfd, 0x03, 0xff, + 0x36, 0xd8, 0xff, 0x16, 0xff, 0xfd, 0x01, 0x03, 0x03, 0xf5, 0xfd, 0xed, + 0x03, 0xfd, 0x01, 0x02, 0x1e, 0x3f, 0x03, 0x26, 0x01, 0xfe, 0x05, 0x00, + 0x0d, 0xfe, 0x01, 0x00, 0x00, 0xfd, 0x03, 0xfc, 0xfd, 0x0b, 0xfe, 0x00, + 0xff, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x04, 0x07, 0xfe, 0xfd, 0x03, 0xff, + 0x0f, 0x1e, 0xfe, 0xf9, 0xfe, 0x05, 0x01, 0x01, 0x0b, 0x22, 0x00, 0x13, + 0x00, 0xff, 0xff, 0x01, 0x0b, 0xe9, 0x03, 0x13, 0xfe, 0xfd, 0xfe, 0x02, + 0x03, 0xda, 0x04, 0x01, 0xfd, 0x02, 0x00, 0xfe, 0x0b, 0xff, 0xfe, 0x02, + 0xfe, 0x02, 0xfe, 0xfd, 0x10, 0x06, 0x02, 0xfd, 0xfd, 0x03, 0xff, 0x03, + 0x0c, 0x22, 0x04, 0xf7, 0x04, 0xfd, 0xfc, 0x04, 0x0d, 0x31, 0xff, 0x07, + 0x03, 0x00, 0x02, 0xfc, 0xf1, 0xeb, 0x03, 0x0a, 0x01, 0x00, 0x00, 0x03, + 0xf5, 0xea, 0x02, 0xf3, 0xfe, 0x01, 0x05, 0x02, 0x54, 0x1a, 0x02, 0xfc, + 0x03, 0xff, 0x02, 0x01, 0xfc, 0xfc, 0xfe, 0x01, 0xfd, 0x04, 0x04, 0x02, + 0x00, 0x01, 0x00, 0xd7, 0xfd, 0x00, 0x03, 0xff, 0xfd, 0x23, 0xff, 0x28, + 0x02, 0xfe, 0xfe, 0x02, 0x2a, 0xd9, 0x03, 0x12, 0x05, 0xfe, 0xfd, 0x01, + 0x09, 0xfa, 0x03, 0xea, 0x00, 0xff, 0x01, 0x00, 0x27, 0x3e, 0x01, 0x1c, + 0xfe, 0x01, 0x05, 0xfc, 0x15, 0x02, 0xff, 0xf8, 0x03, 0x05, 0x03, 0xfc, + 0x07, 0x18, 0xfe, 0xfc, 0x03, 0x01, 0xff, 0xfd, 0x15, 0x15, 0xfe, 0x09, + 0x01, 0xfe, 0x04, 0x01, 0x14, 0x27, 0xfe, 0xfa, 0x03, 0x03, 0xff, 0xfe, + 0x10, 0x27, 0x00, 0x0f, 0xff, 0xfe, 0x01, 0x02, 0xf8, 0xf6, 0x03, 0x18, + 0xfe, 0xfe, 0xff, 0x03, 0xf9, 0xe8, 0xfc, 0x00, 0x05, 0x01, 0xff, 0xfd, + 0x01, 0xf4, 0x00, 0x01, 0xfd, 0xfe, 0x01, 0xff, 0x0f, 0x03, 0x00, 0xfb, + 0xfe, 0xfe, 0x02, 0x00, 0x05, 0x23, 0xfe, 0xfb, 0x03, 0x00, 0xfd, 0x02, + 0x0d, 0x2b, 0x02, 0x07, 0x01, 0x02, 0x04, 0xff, 0xf6, 0xee, 0xff, 0x06, + 0xfe, 0x05, 0x00, 0xfe, 0xfd, 0xed, 0xfd, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x1f, 0xff, 0xf9, 0x02, 0x04, 0xfe, 0xfe, 0x02, 0xfe, 0xfc, 0x00, + 0xfd, 0x02, 0xfe, 0xfe, 0x01, 0x01, 0xfd, 0xe3, 0x03, 0x04, 0x05, 0xfe, + 0xfb, 0x1c, 0x04, 0x22, 0xfe, 0xff, 0x01, 0x01, 0x21, 0xda, 0xfe, 0x12, + 0x04, 0xff, 0x04, 0x03, 0x0d, 0xf7, 0xff, 0xeb, 0xff, 0xfc, 0xfe, 0x03, + 0x21, 0x3e, 0x03, 0x17, 0xff, 0x00, 0x01, 0x01, 0x17, 0x04, 0xfd, 0xfa, + 0xfe, 0x02, 0x03, 0x00, 0x12, 0x1c, 0xfe, 0xf7, 0x04, 0x04, 0x05, 0x02, + 0x1f, 0x1b, 0xfc, 0x03, 0x04, 0xfe, 0xfe, 0xff, 0x16, 0x27, 0x00, 0xf5, + 0x04, 0x02, 0x02, 0xff, 0x0b, 0x2e, 0x01, 0x08, 0xfd, 0x00, 0xfe, 0x02, + 0xf3, 0xf4, 0x02, 0x11, 0x03, 0xff, 0x01, 0xfd, 0xf9, 0xe9, 0x01, 0x08, + 0x02, 0x02, 0x03, 0x03, 0x02, 0xf1, 0x04, 0xfd, 0x03, 0x03, 0x04, 0x00, + 0x13, 0x09, 0x02, 0xfb, 0x01, 0x02, 0x01, 0x02, 0x12, 0x20, 0x03, 0xf7, + 0xff, 0x03, 0x05, 0xfe, 0x0f, 0x20, 0xff, 0x05, 0x01, 0x03, 0xfc, 0xfd, + 0x00, 0xed, 0xfc, 0x05, 0xff, 0x04, 0x01, 0x04, 0x0c, 0xf4, 0xfc, 0xf6, + 0xfe, 0xff, 0x03, 0x00, 0x5a, 0x14, 0xfd, 0xfc, 0x04, 0xfd, 0x01, 0xfd, + 0x00, 0xfd, 0x00, 0xfe, 0xfc, 0x04, 0x01, 0x04, 0x00, 0xfe, 0xfc, 0xee, + 0x00, 0xfe, 0x01, 0x03, 0xf6, 0x18, 0x04, 0x1a, 0xfe, 0xfc, 0x00, 0x01, + 0x14, 0xe2, 0xfd, 0x0a, 0x01, 0xfe, 0x04, 0xfc, 0x0f, 0xf9, 0xfd, 0xed, + 0x01, 0x04, 0xfe, 0xfd, 0x1e, 0x3b, 0xfe, 0x1d, 0xff, 0x01, 0xff, 0x04, + 0x17, 0x08, 0x04, 0xf1, 0xff, 0x03, 0x02, 0x01, 0x0b, 0x1e, 0xfe, 0xfc, + 0xfe, 0x00, 0x03, 0xfe, 0x27, 0x1d, 0xfe, 0x01, 0xfc, 0xfd, 0xff, 0x03, + 0x12, 0x27, 0xff, 0xfb, 0x00, 0x00, 0x01, 0xfd, 0x12, 0x32, 0x04, 0x07, + 0xfd, 0x02, 0x04, 0x04, 0xf0, 0xfa, 0x02, 0x0a, 0x03, 0x00, 0xfe, 0xfd, + 0xf9, 0xf6, 0xfc, 0x06, 0xfd, 0xff, 0x01, 0x00, 0x00, 0xff, 0x01, 0xff, + 0x00, 0x00, 0x02, 0xfe, 0x0e, 0x03, 0x02, 0xf8, 0x01, 0x05, 0x05, 0x04, + 0x1a, 0x1a, 0x01, 0xff, 0x03, 0x00, 0x02, 0x04, 0x0d, 0x1b, 0xff, 0x03, + 0x04, 0x00, 0x03, 0x03, 0xff, 0xeb, 0x04, 0x05, 0x00, 0xfd, 0x01, 0xff, + 0x03, 0xf3, 0xff, 0xfb, 0xff, 0x03, 0xfd, 0x02, 0x54, 0x10, 0x04, 0xfd, + 0xfd, 0x00, 0x02, 0x00, 0xff, 0xff, 0xff, 0x02, 0x04, 0x04, 0x04, 0x01, + 0x01, 0x02, 0x01, 0xfe, 0xfd, 0x00, 0xfd, 0xfd, 0xf5, 0x0c, 0x00, 0x1d, + 0xfe, 0xfc, 0x02, 0x00, 0x0c, 0xe9, 0xfd, 0x0e, 0x03, 0x01, 0xfd, 0xfc, + 0x0a, 0x01, 0x00, 0xee, 0xfd, 0x01, 0x01, 0xfc, 0x14, 0x40, 0x01, 0x0e, + 0xfe, 0x02, 0x00, 0x02, 0x15, 0x05, 0x00, 0xf4, 0x05, 0xff, 0x01, 0x03, + 0x0d, 0x19, 0x00, 0xfb, 0x03, 0xff, 0x03, 0xff, 0x20, 0x19, 0xfe, 0x05, + 0x03, 0x00, 0x01, 0x00, 0x0c, 0x23, 0x00, 0xfe, 0x03, 0x04, 0x04, 0xfe, + 0x08, 0x29, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0xf9, 0x00, 0xff, 0x04, + 0x03, 0x01, 0x05, 0x04, 0xf8, 0x02, 0xfd, 0x02, 0x00, 0x03, 0xfe, 0x01, + 0x01, 0xfc, 0x03, 0x02, 0x02, 0xfd, 0xfe, 0x02, 0x0e, 0x10, 0x01, 0xfb, + 0x01, 0x02, 0xfe, 0x01, 0x0f, 0x19, 0xfe, 0xfe, 0x00, 0xfc, 0xff, 0x01, + 0x04, 0x16, 0x00, 0x0a, 0x00, 0x00, 0x03, 0xff, 0xfd, 0xf2, 0x01, 0x06, + 0xff, 0x02, 0x04, 0x02, 0x0b, 0xf1, 0x01, 0xf7, 0xfd, 0x00, 0x01, 0x03, + 0x41, 0x17, 0x04, 0xfb, 0xfe, 0xff, 0xfc, 0xfc, 0xfe, 0xff, 0xff, 0x02, + 0x03, 0xfe, 0x03, 0xfe, 0xff, 0x00, 0xfe, 0x0f, 0xfc, 0x01, 0x03, 0x01, + 0xf7, 0x0a, 0x00, 0x16, 0x02, 0x02, 0x00, 0x04, 0x04, 0xec, 0x01, 0x03, + 0xfc, 0x00, 0x01, 0x02, 0x0b, 0x04, 0xfe, 0xee, 0x02, 0x03, 0x03, 0x04, + 0x15, 0x34, 0x04, 0x11, 0x02, 0x03, 0x01, 0xfd, 0x17, 0x02, 0xfe, 0xf0, + 0x01, 0xff, 0x02, 0xfe, 0x0c, 0x1b, 0x00, 0xfb, 0xfd, 0x03, 0x03, 0xfd, + 0x11, 0x12, 0xff, 0x02, 0x02, 0x04, 0x03, 0xfc, 0x09, 0x24, 0x04, 0x03, + 0x02, 0x01, 0x02, 0x01, 0x02, 0x25, 0x01, 0x01, 0x04, 0x05, 0xfc, 0x01, + 0xf8, 0x03, 0x01, 0x00, 0xfd, 0x04, 0xfe, 0x00, 0xfe, 0x04, 0x03, 0x02, + 0x02, 0xfd, 0xfd, 0xff, 0x04, 0x02, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xff, + 0x0c, 0x08, 0xfd, 0xfc, 0x01, 0xff, 0xff, 0xfd, 0x07, 0x16, 0x01, 0x01, + 0xfc, 0x02, 0x01, 0xff, 0x02, 0x0f, 0x00, 0x07, 0xff, 0x00, 0xff, 0x03, + 0xfa, 0xea, 0xfd, 0x0b, 0x02, 0x02, 0x01, 0x04, 0x05, 0xf5, 0xfc, 0xf1, + 0xff, 0x01, 0x00, 0xfd, 0x4d, 0x11, 0x01, 0xfa, 0x00, 0xff, 0x01, 0x02, + 0x02, 0x01, 0xfd, 0x00, 0xfc, 0x03, 0x02, 0x04, 0xff, 0xff, 0xfc, 0x14, + 0xfd, 0xff, 0x05, 0x03, 0xf5, 0x05, 0xfc, 0x0f, 0xfe, 0xfd, 0x01, 0xfc, + 0x02, 0xf6, 0x00, 0x03, 0x04, 0xfe, 0xfc, 0x01, 0x0a, 0x02, 0xfc, 0xea, + 0x03, 0xfd, 0x02, 0xfc, 0x14, 0x34, 0x02, 0x06, 0x02, 0xfe, 0x02, 0x02, + 0x14, 0x03, 0x02, 0xf0, 0x01, 0x00, 0x02, 0x03, 0x0c, 0x1a, 0x03, 0xf9, + 0x02, 0x02, 0x05, 0x02, 0x18, 0x10, 0x00, 0xfe, 0xfc, 0xfd, 0x00, 0xfe, + 0x05, 0x1c, 0x00, 0x02, 0x01, 0xfe, 0xfe, 0xfe, 0x06, 0x1a, 0x01, 0x02, + 0x03, 0xff, 0x00, 0xfd, 0xff, 0xfe, 0x00, 0x03, 0x00, 0xfe, 0x00, 0x00, + 0x00, 0x04, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0x00, 0xfa, 0x03, 0x03, 0x01, + 0xfd, 0x05, 0xfd, 0xfc, 0x03, 0x02, 0x01, 0xfd, 0xfe, 0x04, 0x05, 0x00, + 0xfd, 0x0e, 0xfc, 0x07, 0x01, 0x00, 0x05, 0x00, 0xfa, 0x06, 0x00, 0x06, + 0xfe, 0x04, 0xff, 0x04, 0xfc, 0xf3, 0xfd, 0x03, 0x01, 0xfc, 0x00, 0xfc, + 0x0e, 0xfb, 0xfc, 0xfc, 0xfc, 0x03, 0xff, 0x04, 0x57, 0x0b, 0xff, 0xfa, + 0x02, 0xff, 0xfe, 0xfe, 0x02, 0x03, 0xff, 0x01, 0xfd, 0x02, 0x02, 0xfc, + 0x00, 0x01, 0x04, 0x22, 0x01, 0xfd, 0x01, 0x04, 0xf6, 0xfd, 0xff, 0x0e, + 0x02, 0x01, 0x03, 0x04, 0x0a, 0xff, 0x01, 0xff, 0xfe, 0x02, 0x01, 0x01, + 0x07, 0xff, 0x01, 0xe9, 0x04, 0x03, 0xfe, 0x01, 0x11, 0x2b, 0x04, 0x09, + 0x02, 0xff, 0xfe, 0xfc, 0x19, 0xff, 0x00, 0xf1, 0xfe, 0x02, 0xfd, 0x02, + 0x0b, 0x14, 0x00, 0xfd, 0xfe, 0x02, 0x02, 0x00, 0x17, 0x05, 0xfe, 0x06, + 0x02, 0x03, 0x03, 0xfc, 0xfc, 0x19, 0xff, 0x01, 0xff, 0xfd, 0x03, 0xfe, + 0x01, 0x0d, 0x01, 0x04, 0x00, 0xfd, 0xfe, 0x00, 0xf2, 0x02, 0x03, 0xfb, + 0x05, 0x04, 0xfd, 0x00, 0xfb, 0x08, 0xff, 0xfe, 0x00, 0xfe, 0xfe, 0x02, + 0xfd, 0x08, 0xfc, 0x03, 0x04, 0x00, 0x02, 0x04, 0x01, 0x05, 0xfd, 0x03, + 0xff, 0x00, 0x03, 0xff, 0xf7, 0x08, 0xff, 0x05, 0x04, 0x01, 0x00, 0xfe, + 0x00, 0xfa, 0x03, 0x09, 0xfd, 0x04, 0x00, 0xfc, 0xfb, 0xf1, 0xfe, 0x04, + 0xfc, 0x01, 0x01, 0xfd, 0x10, 0xfc, 0xfd, 0xf9, 0x03, 0xff, 0xfd, 0xfc, + 0x4c, 0x0f, 0xfd, 0xfd, 0x03, 0x04, 0x05, 0xfe, 0xfc, 0xff, 0x04, 0x02, + 0xff, 0xfe, 0x02, 0x01, 0x02, 0x00, 0xfe, 0x1d, 0x01, 0xfe, 0x00, 0x00, + 0xfa, 0xfa, 0x02, 0x0c, 0x03, 0x04, 0x05, 0xff, 0x0b, 0x01, 0x02, 0x05, + 0xff, 0xfd, 0x04, 0x01, 0x0c, 0xf8, 0x02, 0xef, 0xff, 0xfe, 0xff, 0x03, + 0x12, 0x28, 0xfc, 0x00, 0xfd, 0x03, 0x00, 0x01, 0x1a, 0x03, 0x01, 0xf0, + 0x01, 0xfd, 0x03, 0x04, 0x09, 0x1f, 0x02, 0xfc, 0x01, 0xff, 0xff, 0xff, + 0x16, 0x0a, 0x03, 0x01, 0xfe, 0xfd, 0xfe, 0x00, 0x05, 0x0d, 0xff, 0x00, + 0xfe, 0x00, 0xfb, 0x00, 0x03, 0x06, 0x00, 0x06, 0x02, 0x03, 0xff, 0x03, + 0xf9, 0x00, 0x04, 0x01, 0x00, 0x02, 0xfd, 0x00, 0xfd, 0x11, 0xfc, 0x01, + 0x00, 0x02, 0x01, 0x01, 0x01, 0x0b, 0x01, 0x07, 0x04, 0x01, 0x02, 0xff, + 0x03, 0x01, 0x00, 0xfd, 0xff, 0xfe, 0xff, 0xfe, 0x01, 0x05, 0x01, 0x08, + 0x04, 0xfd, 0xff, 0xfe, 0x05, 0xf8, 0x02, 0x08, 0x04, 0x00, 0xfc, 0xff, + 0xfe, 0xe9, 0x03, 0x01, 0xfd, 0xfe, 0x02, 0xfd, 0x18, 0x02, 0x04, 0xfc, + 0x03, 0x00, 0xfe, 0xfe, 0x2e, 0x0f, 0x02, 0xfe, 0x02, 0xfc, 0xfd, 0x04, + 0x02, 0xfc, 0xff, 0x00, 0xff, 0x04, 0x00, 0xfd, 0xff, 0xfe, 0x03, 0x1f, + 0x01, 0x00, 0xfd, 0xff, 0xf3, 0xf7, 0xfe, 0x04, 0xff, 0xff, 0x00, 0x00, + 0x08, 0x03, 0xfd, 0x02, 0xfe, 0x00, 0xfc, 0xfe, 0x03, 0xfc, 0x00, 0xf1, + 0x03, 0x02, 0xfd, 0x03, 0x14, 0x25, 0xfd, 0xff, 0x01, 0x04, 0xff, 0x00, + 0x12, 0x05, 0xfe, 0xf5, 0x01, 0xfe, 0x05, 0xfc, 0x0f, 0x19, 0xff, 0xfa, + 0x03, 0xfe, 0xfc, 0x02, 0x0b, 0x04, 0x00, 0xff, 0xff, 0x01, 0x01, 0xfe, + 0xfd, 0x0e, 0xfc, 0xfa, 0x02, 0xfd, 0xfd, 0xff, 0x01, 0x03, 0x00, 0x01, + 0xff, 0x04, 0xfd, 0xfe, 0xfa, 0xf5, 0x00, 0xfc, 0x02, 0xff, 0x02, 0x01, + 0xf9, 0x11, 0xfc, 0xfd, 0xff, 0x00, 0x01, 0xff, 0xfc, 0x0e, 0xfc, 0x01, + 0x00, 0x04, 0x01, 0x02, 0x00, 0xfd, 0x04, 0xff, 0x02, 0x03, 0xff, 0x01, + 0xfc, 0x02, 0xfc, 0x08, 0x03, 0x04, 0x02, 0xff, 0x00, 0xec, 0x04, 0x0c, + 0xfe, 0xff, 0x02, 0xff, 0x03, 0xee, 0x02, 0x03, 0xfc, 0x01, 0x01, 0xff, + 0x14, 0x09, 0xfd, 0xfe, 0x01, 0xfd, 0xff, 0x02, 0x3c, 0x13, 0xff, 0xfa, + 0x04, 0x00, 0xff, 0x03, 0x02, 0xfe, 0x03, 0x01, 0x01, 0xfe, 0x02, 0x04, + 0xfe, 0x00, 0x02, 0x1e, 0x04, 0xff, 0x00, 0x00, 0xf6, 0xf7, 0xff, 0x03, + 0x01, 0x05, 0x02, 0x03, 0x0e, 0xff, 0xfe, 0x03, 0x02, 0xfe, 0x03, 0xfd, + 0x07, 0xee, 0x03, 0xec, 0x04, 0x05, 0x06, 0x00, 0x12, 0x1d, 0xfd, 0x02, + 0x00, 0x01, 0x00, 0xfd, 0x17, 0xff, 0xfc, 0xf4, 0x04, 0x01, 0x02, 0xfd, + 0x06, 0x14, 0xfd, 0xfb, 0xff, 0x05, 0x01, 0x01, 0x0d, 0xff, 0xfe, 0xfc, + 0xfc, 0xfd, 0xfe, 0x02, 0xf9, 0x11, 0x01, 0x01, 0xfe, 0x01, 0x03, 0x03, + 0xff, 0x04, 0x02, 0xff, 0xff, 0xfd, 0xfd, 0x00, 0xfd, 0xf8, 0x00, 0xf9, + 0x02, 0x01, 0xfe, 0x01, 0xf4, 0x0c, 0x03, 0xfa, 0xfc, 0x03, 0x00, 0xff, + 0x00, 0x12, 0xff, 0x00, 0x03, 0x05, 0xfd, 0xfe, 0xfc, 0x0e, 0x02, 0x00, + 0x02, 0x04, 0xff, 0x03, 0xf9, 0x0a, 0x01, 0x09, 0x01, 0x04, 0xfd, 0xfd, + 0xf7, 0xee, 0xfe, 0x0a, 0xfd, 0x01, 0xff, 0x04, 0x06, 0xee, 0x04, 0x01, + 0xfe, 0x05, 0x03, 0x02, 0x24, 0x00, 0x01, 0x01, 0xfe, 0xfd, 0xfd, 0x03, + 0x2a, 0x18, 0xfd, 0xfe, 0x01, 0xfe, 0x04, 0x04, 0x02, 0xff, 0x03, 0x00, + 0xff, 0xfd, 0xff, 0x03, 0xfe, 0x01, 0xfe, 0x1c, 0x02, 0xfc, 0x02, 0xfc, + 0xf6, 0xf6, 0x04, 0x04, 0x01, 0x04, 0xfe, 0x04, 0x16, 0xfa, 0x01, 0x00, + 0x01, 0x01, 0x04, 0x03, 0x0e, 0xec, 0xfe, 0xf2, 0x02, 0x02, 0x02, 0x00, + 0x1e, 0x18, 0x04, 0x03, 0x03, 0x00, 0x03, 0x03, 0x1f, 0xfd, 0x02, 0xf7, + 0xfe, 0x05, 0x04, 0x04, 0x0c, 0x0f, 0xfe, 0xff, 0x03, 0xfd, 0x00, 0xfc, + 0x0e, 0xff, 0xfe, 0xff, 0x04, 0xfc, 0x01, 0x03, 0x07, 0x0b, 0x01, 0xfe, + 0xfc, 0x03, 0xfd, 0xfd, 0x05, 0x00, 0xff, 0xfc, 0x00, 0x01, 0x02, 0xfd, + 0x05, 0xf0, 0x01, 0xf6, 0x03, 0x04, 0x00, 0x03, 0xfb, 0x07, 0x00, 0xfa, + 0x03, 0xff, 0xfd, 0xff, 0x0a, 0x0e, 0x00, 0x00, 0xfe, 0x03, 0x03, 0xfe, + 0x03, 0x0c, 0xfc, 0xfc, 0xfe, 0x05, 0x02, 0xfe, 0x01, 0x0f, 0x02, 0x08, + 0xfe, 0xfd, 0x02, 0xfd, 0x00, 0xfa, 0x04, 0x0a, 0xfc, 0x01, 0x02, 0x04, + 0x08, 0xf1, 0xff, 0x0c, 0x01, 0xfd, 0x01, 0xfc, 0x21, 0x0c, 0xfd, 0xf9, + 0x02, 0x03, 0xfd, 0xfe, 0x2c, 0x1b, 0x03, 0xfe, 0x04, 0xff, 0x04, 0x03, + 0xfe, 0x04, 0xfe, 0x01, 0xff, 0x01, 0xfe, 0xfe, 0xff, 0x00, 0x02, 0x25, + 0x01, 0x03, 0xfc, 0x02, 0xf6, 0xf7, 0xfc, 0x03, 0x00, 0x05, 0x05, 0x04, + 0x1d, 0xfe, 0x01, 0x00, 0xfe, 0xfe, 0xfe, 0xff, 0x15, 0xe4, 0xfc, 0xef, + 0x00, 0x04, 0xfd, 0xfe, 0x1f, 0x14, 0x02, 0x03, 0xfe, 0x05, 0x03, 0x01, + 0x1c, 0xf2, 0xff, 0xf4, 0x01, 0x03, 0x00, 0xff, 0x09, 0x06, 0xfe, 0xfe, + 0xfd, 0x05, 0x00, 0x03, 0x15, 0xfb, 0xfd, 0xff, 0xfc, 0x04, 0x03, 0x01, + 0x09, 0x07, 0x01, 0xfc, 0x03, 0x01, 0xfe, 0xfe, 0x0b, 0xfe, 0xfc, 0xff, + 0x01, 0xff, 0x03, 0x00, 0xfa, 0xf0, 0x00, 0xfe, 0x02, 0x05, 0x01, 0xff, + 0xff, 0xfe, 0xff, 0xfa, 0x02, 0x00, 0xfc, 0x01, 0x05, 0x05, 0xfd, 0xfb, + 0x02, 0xfd, 0x01, 0x04, 0x05, 0x07, 0x01, 0x00, 0x02, 0x00, 0x02, 0x02, + 0xfd, 0x0a, 0xff, 0x05, 0xfd, 0x02, 0x00, 0x02, 0xf5, 0xfa, 0xfe, 0x09, + 0x04, 0xfe, 0x03, 0x02, 0x05, 0xf6, 0xfe, 0x05, 0x02, 0xfd, 0x02, 0x03, + 0x19, 0x0b, 0x04, 0xfa, 0x04, 0xfe, 0xff, 0x01, 0x25, 0x0e, 0x01, 0x00, + 0x01, 0xfe, 0x02, 0x03, 0xfe, 0xff, 0x03, 0x00, 0x01, 0xfd, 0x04, 0x00, + 0xfc, 0x01, 0x04, 0x1e, 0x03, 0x03, 0xfe, 0xfe, 0xf6, 0xf5, 0x02, 0x03, + 0x02, 0x02, 0xfe, 0xfe, 0x27, 0xff, 0xff, 0xf9, 0xfc, 0x00, 0xfe, 0x00, + 0x14, 0xe3, 0xfc, 0xf4, 0xfd, 0x01, 0xfe, 0x03, 0x27, 0x11, 0xfd, 0x05, + 0xff, 0x00, 0xff, 0x02, 0x20, 0xf6, 0x03, 0xf9, 0xfc, 0xfe, 0x03, 0xff, + 0x10, 0xfd, 0xfd, 0xff, 0x04, 0x00, 0x01, 0x03, 0x22, 0xfe, 0x00, 0xfa, + 0x02, 0x00, 0x03, 0xff, 0x0e, 0x07, 0xff, 0xfa, 0x01, 0xff, 0x04, 0x01, + 0x1b, 0xfb, 0x00, 0xfd, 0xff, 0x01, 0x01, 0x01, 0x09, 0xe9, 0x04, 0xfe, + 0xfd, 0xff, 0x01, 0x02, 0x01, 0xfd, 0x01, 0xfa, 0x02, 0x02, 0x04, 0x02, + 0x0a, 0x05, 0xff, 0x02, 0x03, 0x00, 0xfc, 0xfe, 0x0b, 0x10, 0x03, 0xfd, + 0x03, 0x03, 0x00, 0x02, 0x07, 0x0f, 0xff, 0x04, 0x03, 0x02, 0x04, 0x01, + 0x00, 0xfb, 0xfe, 0x05, 0xfd, 0x04, 0xff, 0x02, 0x00, 0xfa, 0x02, 0x01, + 0x02, 0x03, 0xfb, 0xfe, 0x18, 0x0a, 0x00, 0xfd, 0xfe, 0x03, 0x00, 0x03, + 0x32, 0x08, 0x04, 0xff, 0x03, 0x00, 0xfe, 0x01, 0xfd, 0xfc, 0xfe, 0xfe, + 0xff, 0x00, 0x03, 0x00, 0x01, 0xff, 0xff, 0x1c, 0xfc, 0x02, 0xff, 0xfd, + 0xf8, 0xf6, 0xfe, 0x02, 0xff, 0x01, 0xfc, 0xfd, 0x21, 0xf5, 0x01, 0xfe, + 0x01, 0x01, 0x05, 0x00, 0x19, 0xed, 0xff, 0xf3, 0xff, 0xfd, 0x01, 0xfe, + 0x26, 0x10, 0xfc, 0x07, 0x00, 0x05, 0x02, 0xfd, 0x22, 0xf4, 0xff, 0xf8, + 0x01, 0x00, 0x02, 0xff, 0x0f, 0x0d, 0xfc, 0x00, 0xfd, 0x00, 0x02, 0x04, + 0x23, 0xfa, 0x00, 0xf9, 0xff, 0xff, 0x03, 0x04, 0x15, 0x09, 0xff, 0xfd, + 0x00, 0x00, 0xfe, 0xff, 0x27, 0x09, 0x04, 0xff, 0x04, 0x05, 0x03, 0x03, + 0xff, 0xec, 0x02, 0xfb, 0x02, 0xfd, 0xfd, 0x00, 0xff, 0xff, 0x01, 0xfa, + 0x03, 0x03, 0x00, 0xff, 0x12, 0x06, 0xff, 0xff, 0x04, 0x01, 0x03, 0x02, + 0x0e, 0x0e, 0x03, 0xfe, 0x02, 0x03, 0x02, 0xff, 0x12, 0x1d, 0x00, 0xfe, + 0xfe, 0x02, 0x04, 0x01, 0x0a, 0x04, 0x03, 0x01, 0x03, 0x00, 0x02, 0x02, + 0x0a, 0xf9, 0x02, 0x04, 0x00, 0xfe, 0xfd, 0x03, 0x20, 0x08, 0xff, 0xff, + 0xfe, 0x05, 0x00, 0xfd, 0x44, 0x05, 0xfd, 0x01, 0xfe, 0x03, 0xff, 0xff, + 0x01, 0xfe, 0xfc, 0x00, 0x03, 0xfe, 0x01, 0xfd, 0xfe, 0x01, 0x02, 0x23, + 0x04, 0x00, 0x04, 0x03, 0xf5, 0xf2, 0xfe, 0x03, 0x04, 0xfc, 0x02, 0xfd, + 0x23, 0xf3, 0x01, 0xf8, 0x03, 0xfc, 0x00, 0x03, 0x18, 0xec, 0x00, 0xf5, + 0xfd, 0xfd, 0xfc, 0xfd, 0x28, 0x10, 0x00, 0x05, 0x03, 0xfd, 0xfb, 0xfd, + 0x2d, 0xf6, 0x04, 0xfd, 0xfd, 0x03, 0x05, 0xfd, 0x15, 0x06, 0x02, 0xfc, + 0x01, 0x02, 0x01, 0xfd, 0x37, 0xfd, 0xfc, 0xf7, 0xfe, 0x04, 0x00, 0xfd, + 0x25, 0x12, 0xfe, 0xfe, 0x02, 0x03, 0xfc, 0xfe, 0x24, 0x0d, 0xfd, 0xf8, + 0x01, 0x02, 0xfe, 0x03, 0x07, 0xf6, 0x03, 0xfb, 0xfc, 0x03, 0xfd, 0x01, + 0x0b, 0x07, 0xfe, 0xf8, 0xfc, 0x01, 0xff, 0x02, 0x22, 0x09, 0x00, 0xf6, + 0x02, 0x01, 0xfc, 0xfd, 0x1e, 0x19, 0x00, 0xff, 0x00, 0xfe, 0x02, 0xfd, + 0x25, 0x17, 0x03, 0xfd, 0x04, 0xfe, 0x03, 0xff, 0x1a, 0x0c, 0x03, 0x03, + 0xff, 0x05, 0x01, 0xfd, 0x1c, 0x01, 0x03, 0x03, 0x00, 0xfe, 0xff, 0x03, + 0x28, 0x0c, 0xfe, 0xfb, 0x04, 0xff, 0xff, 0x04, 0x4d, 0x07, 0xfd, 0xfe, + 0x00, 0x00, 0x00, 0x03, 0x04, 0x05, 0x00, 0x00, 0x01, 0x02, 0xfe, 0x02, + 0xff, 0x01, 0x03, 0x1b, 0xfe, 0x01, 0xfe, 0x02, 0xf5, 0xf3, 0x02, 0x01, + 0x02, 0x04, 0xfe, 0x03, 0x29, 0xf5, 0xff, 0xfe, 0x03, 0x03, 0x01, 0x00, + 0x12, 0xe3, 0x02, 0xf4, 0x02, 0x02, 0x01, 0x01, 0x2f, 0x0c, 0xfe, 0x08, + 0x04, 0x05, 0xfe, 0x03, 0x37, 0xfa, 0x04, 0xf8, 0x04, 0x02, 0x01, 0x00, + 0x28, 0x0b, 0x04, 0xfc, 0x04, 0xfd, 0xfb, 0xfe, 0x3d, 0x04, 0x01, 0xfa, + 0xfc, 0xfd, 0xff, 0x01, 0x2a, 0x1f, 0x02, 0xf9, 0x00, 0x00, 0x01, 0x01, + 0x2a, 0x0a, 0xff, 0x00, 0x02, 0x02, 0x03, 0xfe, 0x0f, 0xee, 0xff, 0xfd, + 0xff, 0x01, 0xfd, 0x01, 0x15, 0xff, 0xfe, 0xff, 0x02, 0x01, 0xff, 0x01, + 0x2b, 0x13, 0xfc, 0xf9, 0x01, 0x00, 0x04, 0x01, 0x2b, 0x1c, 0xff, 0xfd, + 0x00, 0xfd, 0xfd, 0x02, 0x30, 0x1b, 0x04, 0xfc, 0x00, 0x02, 0x04, 0xfd, + 0x24, 0x0b, 0x03, 0x02, 0xfe, 0xfc, 0xfe, 0xfe, 0x20, 0xff, 0xff, 0x06, + 0xff, 0xfd, 0xfd, 0xfe, 0x29, 0x0e, 0x04, 0xff, 0xfd, 0xfc, 0x04, 0xfe, + 0x50, 0x01, 0x01, 0x00, 0xfe, 0x04, 0x01, 0xff, 0x03, 0x00, 0x03, 0x02, + 0x01, 0x00, 0x02, 0x00, 0xf9, 0x01, 0x04, 0x24, 0x02, 0x00, 0xfc, 0x04, + 0x0f, 0xf7, 0xfe, 0x08, 0x02, 0xff, 0x05, 0x04, 0x20, 0xf0, 0xfd, 0xf6, + 0xfe, 0x00, 0x02, 0x03, 0x32, 0xee, 0xff, 0xec, 0xfd, 0x00, 0xff, 0x03, + 0x32, 0x05, 0x02, 0x07, 0xff, 0x01, 0x05, 0x00, 0x2c, 0xf2, 0xff, 0xf5, + 0x02, 0x03, 0xfe, 0xfe, 0x31, 0x01, 0x00, 0xf5, 0x02, 0x02, 0x00, 0x04, + 0x30, 0xfe, 0x00, 0xf5, 0x03, 0x01, 0xfd, 0xfc, 0x1e, 0x12, 0x01, 0xf5, + 0x01, 0x00, 0x04, 0xff, 0x1c, 0x01, 0xfd, 0xfa, 0xfc, 0x00, 0x04, 0x02, + 0x1f, 0xf4, 0x03, 0xfc, 0xfe, 0x03, 0x00, 0xfe, 0x0c, 0x04, 0xfd, 0xf6, + 0x01, 0x04, 0xfe, 0x03, 0x08, 0x11, 0xfc, 0xff, 0x01, 0xfd, 0xff, 0x02, + 0x0f, 0x13, 0xfd, 0xf7, 0x03, 0xfe, 0x02, 0x00, 0x0a, 0x15, 0x01, 0xff, + 0x04, 0x03, 0xff, 0x02, 0x0a, 0x05, 0xfe, 0x02, 0xfd, 0x03, 0xfc, 0x03, + 0x02, 0x07, 0x00, 0x00, 0xfe, 0xfe, 0x04, 0x01, 0x0c, 0x02, 0xfe, 0x00, + 0x03, 0x02, 0xfe, 0x00, 0x00, 0x0f, 0x01, 0xf7, 0x03, 0xff, 0x02, 0x02, + 0xff, 0x04, 0x01, 0x02, 0xff, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x08, + 0x01, 0xfe, 0xfc, 0xfe, 0x00, 0xf8, 0x00, 0x03, 0x00, 0x04, 0x00, 0xfd, + 0xfd, 0xfb, 0xff, 0x01, 0x00, 0xff, 0x02, 0xfd, 0x01, 0xf9, 0x02, 0x02, + 0xff, 0xff, 0x05, 0xfe, 0xfc, 0x07, 0xfd, 0xfd, 0x00, 0xfd, 0xfd, 0xfd, + 0x04, 0xf8, 0xfe, 0xfe, 0xfd, 0xfe, 0x00, 0xff, 0xfc, 0x00, 0x01, 0x03, + 0xfe, 0x02, 0x04, 0x00, 0x02, 0xfd, 0xff, 0xfc, 0x00, 0x02, 0x01, 0x03, + 0xfe, 0x02, 0x01, 0xfc, 0x02, 0x02, 0x01, 0x00, 0x04, 0xff, 0xfe, 0xfc, + 0xff, 0xfe, 0x04, 0xfe, 0x02, 0xfc, 0x03, 0x01, 0x02, 0x01, 0x01, 0x03, + 0x00, 0x00, 0xfd, 0x03, 0xfd, 0xfe, 0x02, 0x01, 0xfc, 0x06, 0xfc, 0x04, + 0xfd, 0xff, 0x03, 0xff, 0x01, 0x05, 0x02, 0x04, 0x02, 0x04, 0xfe, 0xff, + 0x01, 0x06, 0x02, 0x05, 0x01, 0x02, 0xfd, 0x04, 0xff, 0x01, 0xfc, 0xff, + 0x03, 0x00, 0x02, 0xff, 0xfc, 0xfd, 0x02, 0xff, 0x02, 0x04, 0x05, 0x03, + 0x02, 0xfc, 0x04, 0xff, 0x03, 0x04, 0xfe, 0x02, 0x04, 0x1c, 0x04, 0x02, + 0xfd, 0x02, 0xfd, 0x00, 0xfe, 0x00, 0xfe, 0x01, 0xff, 0xfd, 0xfd, 0xfd, + 0x00, 0x00, 0x00, 0x07, 0x01, 0xfd, 0xfd, 0x04, 0xfd, 0xfd, 0x02, 0x00, + 0xfd, 0xfd, 0xfe, 0x03, 0xff, 0xfd, 0x01, 0x02, 0x00, 0x03, 0xff, 0xff, + 0x00, 0xfe, 0x02, 0x04, 0x00, 0x04, 0x03, 0x04, 0xff, 0x00, 0xfd, 0x04, + 0xfd, 0x00, 0xfe, 0xff, 0x04, 0xfc, 0xfc, 0x01, 0x00, 0xfe, 0x01, 0x00, + 0xfd, 0xfc, 0xfc, 0xfd, 0x04, 0x03, 0x04, 0x02, 0xfd, 0x01, 0xfe, 0x04, + 0x03, 0x02, 0xfc, 0x02, 0x04, 0xfd, 0x02, 0xfe, 0x01, 0xfc, 0xfd, 0x01, + 0x03, 0x01, 0x01, 0xfd, 0xff, 0xff, 0x02, 0x03, 0xff, 0x01, 0xfe, 0xfe, + 0x00, 0xfc, 0xfc, 0xff, 0x03, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0xff, 0xfe, 0xfe, 0xfe, 0xfc, 0xfe, 0x04, 0xfe, 0x00, 0x01, 0x01, + 0xfe, 0x01, 0x03, 0x04, 0xfc, 0xff, 0x01, 0xfd, 0x02, 0x00, 0xfd, 0x00, + 0x01, 0x02, 0xff, 0x03, 0x05, 0x01, 0xfd, 0x03, 0x04, 0xff, 0xff, 0x04, + 0xfd, 0xfd, 0xfd, 0x00, 0xfe, 0x01, 0x04, 0xfd, 0xfd, 0x02, 0xfd, 0xfe, + 0xfd, 0x01, 0xfc, 0xfd, 0xfd, 0xff, 0x00, 0xfd, 0xfc, 0x06, 0x00, 0xff, + 0xfd, 0xfd, 0x03, 0x00, 0xfd, 0xff, 0x01, 0xfc, 0x01, 0x01, 0xfb, 0xfe, + 0xfe, 0xe6, 0xfe, 0xe5, 0xff, 0x02, 0xfe, 0x02, 0x00, 0xf9, 0xfe, 0xf3, + 0x00, 0xfe, 0xff, 0x00, 0x00, 0x03, 0xff, 0x02, 0x01, 0x01, 0xfb, 0xfe, + 0xfe, 0xfe, 0xfd, 0xfb, 0x01, 0x00, 0xfe, 0x01, 0x00, 0x03, 0x04, 0xf7, + 0x04, 0x01, 0x01, 0xfd, 0xfe, 0xfd, 0xfe, 0xfc, 0xfd, 0xfc, 0xfe, 0x04, + 0xfe, 0x00, 0x03, 0xfc, 0xfc, 0x01, 0xff, 0xff, 0x01, 0x04, 0x00, 0x01, + 0xfd, 0xfc, 0x02, 0xfc, 0xff, 0xfe, 0xfe, 0xf5, 0x00, 0x00, 0xff, 0x01, + 0x01, 0x03, 0xfd, 0xf7, 0x04, 0xff, 0x02, 0x02, 0x00, 0x03, 0x02, 0x02, + 0x01, 0x01, 0xfe, 0x01, 0xfe, 0x03, 0x03, 0xfc, 0x01, 0xfe, 0xfe, 0x01, + 0xfd, 0x00, 0xfc, 0x00, 0x03, 0xfe, 0xfc, 0x03, 0xfe, 0xff, 0x01, 0x02, + 0xfe, 0xfe, 0xfe, 0x04, 0xfe, 0xff, 0x01, 0x07, 0xfd, 0xfd, 0xff, 0xfd, + 0xff, 0xfc, 0xfd, 0x03, 0xfe, 0xfc, 0xff, 0xfe, 0xff, 0xfd, 0x01, 0x00, + 0xfe, 0xfd, 0xfa, 0x01, 0xff, 0x01, 0x00, 0x08, 0xfd, 0xfd, 0xff, 0x01, + 0xff, 0xfe, 0x03, 0x01, 0x03, 0xfc, 0xf9, 0xfa, 0xfc, 0x00, 0x01, 0x03, + 0xff, 0xfd, 0x02, 0xfd, 0xf8, 0xc3, 0xfd, 0xf4, 0x02, 0x01, 0x00, 0xfe, + 0xf3, 0x1c, 0xfe, 0xed, 0x03, 0xfd, 0x02, 0x02, 0xf9, 0xdf, 0x01, 0xf3, + 0x00, 0x00, 0x02, 0xfd, 0xfe, 0xeb, 0x01, 0xfa, 0xff, 0x00, 0xfc, 0x03, + 0x02, 0xf7, 0xfd, 0xfb, 0x01, 0x03, 0xfb, 0xfe, 0xfd, 0xfc, 0x00, 0xfb, + 0x02, 0xff, 0xfe, 0x00, 0xfb, 0xfe, 0xff, 0xfe, 0x01, 0x00, 0xfa, 0x00, + 0xfe, 0xff, 0xfd, 0x05, 0xfc, 0x00, 0xfc, 0x04, 0xfb, 0xfe, 0x03, 0xf3, + 0xfe, 0xfe, 0xfe, 0x00, 0xfb, 0xf7, 0x04, 0xf3, 0xfe, 0xff, 0xfd, 0x03, + 0xff, 0xff, 0x02, 0xff, 0x01, 0x03, 0xfd, 0x03, 0xff, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0xfe, 0x02, 0xff, 0xff, 0xfc, 0xfd, 0x03, 0xfe, 0xfa, 0x01, + 0x00, 0xfe, 0x03, 0x01, 0x00, 0x00, 0xfb, 0xfe, 0xff, 0x02, 0x02, 0x06, + 0xfe, 0xfd, 0x00, 0x03, 0x00, 0x02, 0xfe, 0x04, 0x00, 0x00, 0xfd, 0xfe, + 0xfe, 0xfd, 0x02, 0x00, 0xfd, 0x01, 0x01, 0xff, 0xfe, 0xff, 0x02, 0x01, + 0x02, 0xfe, 0x01, 0x04, 0x02, 0x03, 0x03, 0x02, 0xfe, 0xfc, 0xfd, 0x04, + 0xfc, 0x00, 0xfd, 0x03, 0x04, 0xfe, 0x02, 0x02, 0xe2, 0x03, 0x01, 0xdd, + 0xfd, 0x04, 0xfd, 0xfe, 0x81, 0x35, 0xff, 0xdb, 0x01, 0xfd, 0xfb, 0xfd, + 0xc4, 0x2c, 0xff, 0xef, 0x03, 0xfd, 0xfe, 0x03, 0xe8, 0x16, 0x02, 0xf1, + 0xfc, 0x01, 0x00, 0x04, 0xf6, 0x14, 0xff, 0x05, 0xff, 0x03, 0xfd, 0x02, + 0x23, 0x20, 0x00, 0x02, 0x02, 0x05, 0xfe, 0xfe, 0x1b, 0x19, 0x02, 0x07, + 0xfd, 0x01, 0xfc, 0xfd, 0x12, 0x05, 0xfd, 0x10, 0x02, 0x03, 0xff, 0xfc, + 0xfa, 0x0f, 0x00, 0xee, 0xfd, 0xff, 0x02, 0x03, 0xfa, 0x36, 0xfe, 0xf0, + 0x03, 0x00, 0xfd, 0x03, 0xf7, 0x33, 0xfd, 0x02, 0x01, 0x00, 0xfb, 0x03, + 0xe7, 0x12, 0x01, 0xfd, 0x03, 0x01, 0xfc, 0x00, 0xf0, 0x2b, 0xff, 0xf9, + 0xfd, 0x00, 0xfb, 0x00, 0xfb, 0x34, 0x02, 0xfe, 0x03, 0x03, 0xfb, 0xfd, + 0xf1, 0x11, 0x01, 0xfe, 0x03, 0x03, 0x01, 0xfe, 0xf1, 0x14, 0x02, 0xfe, + 0xff, 0x00, 0x01, 0x02, 0xe9, 0x0e, 0x01, 0x05, 0x02, 0x00, 0xfc, 0x02, + 0xeb, 0xee, 0x00, 0xff, 0xfc, 0x01, 0x02, 0xfe, 0xfd, 0x02, 0x02, 0xff, + 0x02, 0x00, 0x02, 0xfc, 0xfd, 0x00, 0x01, 0x1a, 0xfe, 0x01, 0xfd, 0xff, + 0xf6, 0xf1, 0x01, 0xcd, 0x00, 0xfd, 0x00, 0xff, 0xe7, 0x38, 0x03, 0xd9, + 0x00, 0xfc, 0xfb, 0x00, 0xf4, 0x22, 0xfe, 0x00, 0xff, 0x00, 0xff, 0x01, + 0xcb, 0x02, 0x01, 0x00, 0x01, 0x02, 0x02, 0xfd, 0xc3, 0xfb, 0x00, 0x04, + 0x02, 0xfd, 0x00, 0x02, 0xe3, 0xf9, 0x00, 0x09, 0xfe, 0xfd, 0xfc, 0x00, + 0xed, 0xeb, 0x01, 0x0a, 0x03, 0x02, 0x03, 0x00, 0xf6, 0xc7, 0x01, 0x17, + 0xfe, 0xfd, 0xfd, 0x03, 0xe7, 0xd2, 0x02, 0xf1, 0xff, 0x01, 0xff, 0x02, + 0xf5, 0x13, 0xfd, 0xf0, 0x01, 0x02, 0xff, 0x01, 0xef, 0x1d, 0xfd, 0x06, + 0xff, 0x01, 0x00, 0xfd, 0xd9, 0xee, 0x00, 0x03, 0xff, 0x02, 0xfa, 0x02, + 0xd9, 0x0c, 0xfe, 0xf4, 0xfd, 0x03, 0xfe, 0x01, 0xea, 0x1a, 0xfd, 0x00, + 0x01, 0xfd, 0xfa, 0x04, 0xe9, 0xfe, 0xff, 0x02, 0xfc, 0x04, 0x02, 0x02, + 0xe4, 0xff, 0x00, 0xfe, 0x04, 0xfd, 0xff, 0xfd, 0xe1, 0x07, 0xfe, 0x03, + 0xfe, 0x02, 0x02, 0x01, 0xd2, 0xec, 0x04, 0x06, 0x01, 0xfd, 0xfe, 0xfe, + 0xfc, 0x02, 0xfd, 0xff, 0x01, 0x02, 0xff, 0x02, 0x00, 0xff, 0x01, 0x27, + 0x00, 0x00, 0x01, 0xfe, 0xff, 0xe3, 0x02, 0xc8, 0xfe, 0x01, 0xfc, 0x03, + 0x20, 0x30, 0xfd, 0xd0, 0x01, 0x00, 0xfc, 0x03, 0x03, 0x19, 0xff, 0xf1, + 0x03, 0x00, 0xfb, 0x01, 0xca, 0xf3, 0x02, 0x06, 0xfd, 0x00, 0xfa, 0x01, + 0xa7, 0xec, 0x03, 0x06, 0xfd, 0xfe, 0xfd, 0x00, 0xbc, 0xed, 0x00, 0xff, + 0xfe, 0xfe, 0xfe, 0xfc, 0xb9, 0xe2, 0x00, 0xff, 0x01, 0xfe, 0xfc, 0xfe, + 0xbe, 0xb2, 0xff, 0x18, 0xff, 0x00, 0x00, 0x02, 0xd8, 0xaa, 0x00, 0xf1, + 0xfe, 0xff, 0xfa, 0x01, 0xfd, 0x09, 0xff, 0xe4, 0xfc, 0xff, 0xfa, 0x01, + 0xfc, 0x10, 0x03, 0x07, 0x01, 0xfe, 0xfc, 0x01, 0xeb, 0xe7, 0x00, 0x04, + 0xfd, 0xfd, 0xff, 0xff, 0xec, 0x06, 0x02, 0xf3, 0x00, 0xfe, 0xfc, 0xff, + 0xf8, 0x18, 0x02, 0x01, 0xfd, 0xff, 0xfd, 0x00, 0xeb, 0xf7, 0x00, 0x02, + 0x03, 0xfd, 0x02, 0x03, 0xee, 0xff, 0xfe, 0x05, 0x04, 0xfd, 0x00, 0xfd, + 0xee, 0x06, 0xfc, 0x0f, 0x02, 0xfe, 0x00, 0xff, 0xbf, 0xed, 0x03, 0x04, + 0xfd, 0xff, 0xfb, 0x00, 0x00, 0x02, 0x04, 0xfe, 0x02, 0x04, 0xfd, 0x03, + 0x00, 0xff, 0x02, 0x29, 0x01, 0x02, 0x01, 0x04, 0x01, 0xe0, 0xfe, 0xd0, + 0x00, 0xfd, 0xfa, 0xff, 0x2b, 0x2d, 0xfc, 0xd1, 0x00, 0x00, 0xfb, 0x01, + 0x09, 0x1c, 0xff, 0xf1, 0x01, 0x00, 0x01, 0x00, 0xe9, 0x04, 0x03, 0xff, + 0x00, 0x04, 0xfe, 0x02, 0xc4, 0xfc, 0xfd, 0xfb, 0x03, 0xfc, 0xfe, 0x04, + 0xcd, 0x0d, 0xfe, 0xfe, 0xff, 0xfd, 0xfe, 0x03, 0xd1, 0xfe, 0xfd, 0xfb, + 0xfd, 0xff, 0x00, 0xfe, 0xd2, 0xda, 0x00, 0x15, 0x02, 0x00, 0x03, 0xff, + 0xea, 0xb7, 0x03, 0xec, 0x03, 0xff, 0xfb, 0x02, 0x0b, 0x0b, 0x00, 0xe9, + 0x00, 0x04, 0xfc, 0xfd, 0x08, 0x15, 0xfe, 0x08, 0x01, 0x03, 0xff, 0xfd, + 0xff, 0xe1, 0x04, 0x08, 0xff, 0x02, 0xfe, 0x01, 0xfb, 0x00, 0x00, 0xf1, + 0x02, 0x04, 0x03, 0x00, 0x07, 0x1d, 0x01, 0x01, 0x02, 0x01, 0xfc, 0x03, + 0x02, 0xfd, 0x01, 0xff, 0xfc, 0xff, 0xfe, 0x04, 0xfb, 0x03, 0xfe, 0x01, + 0x04, 0xfd, 0xff, 0x02, 0xf4, 0x0c, 0xfe, 0x08, 0xfd, 0xff, 0xfc, 0xff, + 0xc5, 0xeb, 0xfe, 0x05, 0xfd, 0xff, 0xff, 0xfe, 0x01, 0x02, 0xfd, 0xff, + 0x02, 0x00, 0xfe, 0xfc, 0x01, 0x00, 0x01, 0x22, 0xff, 0x03, 0x03, 0x02, + 0x07, 0xe6, 0x03, 0xd8, 0x04, 0xff, 0x03, 0x03, 0x26, 0x27, 0x03, 0xd5, + 0xfc, 0xfd, 0x00, 0x02, 0x03, 0x11, 0xfd, 0xfd, 0x01, 0x01, 0x00, 0xff, + 0xf5, 0xf3, 0x00, 0x07, 0x00, 0xfe, 0xfc, 0xfc, 0xdf, 0xee, 0x01, 0xff, + 0xff, 0xfe, 0xfb, 0xff, 0xf0, 0x13, 0xfd, 0xf9, 0x01, 0xfd, 0xff, 0x03, + 0xe3, 0x11, 0x04, 0xf8, 0xfc, 0xfd, 0xfb, 0xfd, 0xeb, 0xf4, 0xfc, 0x15, + 0x00, 0xff, 0xff, 0x02, 0xf2, 0xba, 0x03, 0xeb, 0xfc, 0x00, 0xfe, 0xfc, + 0x10, 0x0d, 0x01, 0xe9, 0xff, 0x03, 0xfd, 0x04, 0x06, 0x0e, 0x02, 0x0f, + 0xfd, 0xfc, 0xff, 0xff, 0xfc, 0xd9, 0x03, 0x09, 0x03, 0x01, 0xfd, 0x01, + 0xf7, 0xf6, 0x01, 0xf0, 0xfc, 0x01, 0xfd, 0xfe, 0x03, 0x1a, 0xff, 0x02, + 0xff, 0xfe, 0xfd, 0xfe, 0x00, 0x0b, 0xfd, 0xfe, 0xfd, 0x02, 0xfc, 0xff, + 0xfa, 0x02, 0x01, 0x01, 0xff, 0x03, 0xfb, 0x00, 0xf6, 0x05, 0xfc, 0x0b, + 0xfe, 0x00, 0xff, 0xff, 0xb8, 0xe0, 0x03, 0x02, 0xfe, 0xfd, 0xfd, 0x02, + 0x04, 0x03, 0x02, 0x00, 0xfc, 0x00, 0xfd, 0x01, 0xff, 0x00, 0xff, 0x1f, + 0xff, 0x01, 0x00, 0xff, 0x00, 0xe9, 0xff, 0xde, 0xfe, 0x01, 0xff, 0x01, + 0x1a, 0x27, 0x04, 0xe0, 0xfc, 0x01, 0xfa, 0x01, 0xfe, 0x0d, 0x03, 0x04, + 0xfd, 0x02, 0x01, 0xfd, 0xf1, 0xda, 0xff, 0x0c, 0x03, 0xff, 0xff, 0xfe, + 0xeb, 0xd1, 0xfe, 0xfb, 0xff, 0xfe, 0xff, 0xff, 0x02, 0x06, 0xff, 0xfa, + 0xfe, 0x02, 0xff, 0x02, 0xeb, 0x09, 0x00, 0xf9, 0x00, 0x02, 0x01, 0x00, + 0xed, 0xef, 0x00, 0x19, 0x01, 0x02, 0xfe, 0x00, 0xf3, 0xd0, 0xff, 0xee, + 0x02, 0xfd, 0xfd, 0xff, 0x04, 0x1b, 0x01, 0xe6, 0xff, 0xfd, 0x02, 0x01, + 0x04, 0x19, 0xff, 0x0c, 0x04, 0x02, 0x00, 0x02, 0xf2, 0xd5, 0x02, 0x0b, + 0x03, 0xff, 0xfb, 0xfd, 0xeb, 0xe4, 0xfd, 0xf5, 0xff, 0xfe, 0xfd, 0xfc, + 0xfe, 0x18, 0xff, 0x01, 0x02, 0xfd, 0xfd, 0x00, 0x00, 0x08, 0xff, 0xff, + 0x00, 0x00, 0xfc, 0xff, 0xf2, 0x0d, 0x01, 0x02, 0x00, 0xfd, 0xfa, 0xfd, + 0xec, 0x06, 0x03, 0x09, 0x02, 0xff, 0xfd, 0xff, 0xc8, 0xe9, 0xfd, 0x03, + 0xfe, 0xff, 0xfb, 0x02, 0x00, 0xfe, 0x00, 0x00, 0x02, 0x00, 0x01, 0x04, + 0xfe, 0xff, 0x00, 0x18, 0x01, 0x00, 0xfd, 0x03, 0x01, 0xef, 0x01, 0xe9, + 0xfe, 0x03, 0xfe, 0xfc, 0x11, 0x21, 0xff, 0xe4, 0x03, 0x00, 0xfe, 0x03, + 0x00, 0x0c, 0xff, 0x0e, 0xfb, 0x00, 0xfc, 0x00, 0xf8, 0xcf, 0x01, 0x19, + 0xfe, 0x04, 0x00, 0xfc, 0xed, 0xc9, 0x01, 0x00, 0x01, 0x02, 0xfd, 0xfd, + 0x03, 0xfb, 0x02, 0xfb, 0xfd, 0xff, 0x00, 0x03, 0xec, 0xfb, 0x02, 0xfd, + 0xfd, 0xfe, 0x00, 0x00, 0xe9, 0xd5, 0x02, 0x16, 0x00, 0x02, 0xfc, 0x01, + 0xec, 0xe0, 0xfd, 0xe1, 0x03, 0x00, 0xff, 0x02, 0x08, 0x28, 0x00, 0xe6, + 0x02, 0xff, 0xfb, 0x01, 0x07, 0x1f, 0xff, 0x0e, 0x03, 0xfc, 0xfe, 0x00, + 0xf3, 0xcf, 0xfe, 0x0d, 0x01, 0xfd, 0xfb, 0xfd, 0xed, 0xda, 0xfd, 0xf6, + 0x02, 0x05, 0xff, 0x02, 0xf9, 0x0f, 0x04, 0xff, 0xfd, 0xfd, 0x02, 0x00, + 0x05, 0x0b, 0x00, 0x02, 0x00, 0x04, 0xfd, 0xff, 0xf7, 0x0c, 0x03, 0x03, + 0x01, 0xfe, 0xfb, 0xfd, 0xf3, 0x05, 0x03, 0x0b, 0xff, 0xff, 0xff, 0x04, + 0xc5, 0xee, 0xfd, 0x04, 0x02, 0x02, 0xfc, 0x02, 0x03, 0x01, 0xfe, 0x00, + 0xfe, 0x00, 0x03, 0xff, 0xff, 0x01, 0x00, 0x11, 0x00, 0x03, 0x01, 0x00, + 0x01, 0xf1, 0x03, 0xee, 0x03, 0xff, 0xfc, 0xff, 0x14, 0x1d, 0x03, 0xe4, + 0x00, 0x01, 0x01, 0x00, 0x03, 0x0e, 0x03, 0x0d, 0xfd, 0x00, 0xfc, 0x03, + 0xf8, 0xbf, 0x01, 0x1f, 0x00, 0xff, 0x01, 0xfe, 0xf0, 0xbd, 0x03, 0xfc, + 0x03, 0x00, 0xfc, 0x03, 0x05, 0xee, 0xff, 0xfc, 0xfe, 0xfd, 0xfc, 0x03, + 0xf1, 0xec, 0x03, 0x04, 0xff, 0x01, 0xff, 0xfe, 0xec, 0xbd, 0x01, 0x15, + 0xfc, 0xfe, 0xfd, 0xfd, 0xf7, 0xe6, 0xff, 0xea, 0xff, 0x02, 0xfc, 0xfd, + 0x14, 0x2d, 0xff, 0xf2, 0x02, 0xfe, 0xfc, 0x02, 0x07, 0x1b, 0xfd, 0x0b, + 0xff, 0x02, 0xff, 0x00, 0xf6, 0xc6, 0xfd, 0x11, 0x01, 0x04, 0xfe, 0xff, + 0xf0, 0xd1, 0xfd, 0xf9, 0x01, 0x03, 0xff, 0x03, 0x06, 0xff, 0xfd, 0xfd, + 0x02, 0xfd, 0x00, 0xfd, 0x08, 0x06, 0xfe, 0x02, 0xfd, 0x02, 0x01, 0x03, + 0xff, 0x07, 0xfc, 0x01, 0x01, 0x00, 0xfb, 0xff, 0xf2, 0x03, 0x01, 0x08, + 0xfd, 0x04, 0x01, 0xfe, 0xd0, 0xf3, 0x04, 0x04, 0x00, 0xfd, 0x03, 0x02, + 0xff, 0xfe, 0xfd, 0x01, 0x02, 0x02, 0xfe, 0x01, 0x02, 0x00, 0xfe, 0x0b, + 0x03, 0xfe, 0xfe, 0xfd, 0x05, 0xf9, 0xfe, 0xfb, 0x04, 0xfd, 0x00, 0x03, + 0x15, 0x18, 0xff, 0xeb, 0xfc, 0x00, 0xfc, 0x00, 0x08, 0x11, 0xfd, 0x11, + 0x00, 0x02, 0xfb, 0x03, 0x03, 0xc2, 0x02, 0x22, 0x03, 0xfd, 0x00, 0xfd, + 0xf3, 0xb6, 0x03, 0xfd, 0x02, 0x04, 0xfc, 0xfd, 0x07, 0xe8, 0x03, 0xfc, + 0x02, 0x03, 0x01, 0xfc, 0xf9, 0xed, 0x03, 0x0c, 0xfc, 0x04, 0xfd, 0x00, + 0xff, 0xc7, 0x00, 0x0f, 0xff, 0x02, 0x00, 0xfd, 0x04, 0xe2, 0xff, 0xee, + 0x03, 0x01, 0xfb, 0x03, 0x10, 0x2a, 0x00, 0xf3, 0x00, 0x02, 0xfe, 0x02, + 0x0a, 0x1f, 0xff, 0x0a, 0x01, 0xff, 0xfa, 0xfd, 0xf2, 0xd4, 0x00, 0x0f, + 0xfc, 0xfc, 0x01, 0x01, 0xe9, 0xce, 0xfd, 0xfc, 0xff, 0x03, 0xfb, 0xfe, + 0xff, 0x00, 0xfc, 0x02, 0x02, 0xfc, 0xfe, 0x03, 0x05, 0x05, 0x03, 0x00, + 0xfd, 0x03, 0xfe, 0x02, 0xfc, 0x05, 0xff, 0x07, 0xfc, 0xfe, 0xff, 0x00, + 0xf4, 0xfa, 0xff, 0x06, 0x01, 0xfd, 0xfd, 0x03, 0xd3, 0xfa, 0xfc, 0x04, + 0x01, 0x00, 0xfe, 0x02, 0xfc, 0xfc, 0x00, 0x00, 0x04, 0x00, 0xfc, 0x03, + 0xff, 0xff, 0x03, 0x09, 0x03, 0x00, 0xfc, 0xff, 0x06, 0xfb, 0x02, 0xf6, + 0xfd, 0xfc, 0xff, 0x02, 0x1a, 0x10, 0xff, 0xe9, 0xfd, 0x02, 0xfe, 0xff, + 0x0d, 0x14, 0x03, 0x07, 0xff, 0x03, 0xfd, 0x01, 0xfe, 0xc0, 0x04, 0x1d, + 0xff, 0x01, 0x02, 0xff, 0xf3, 0xbb, 0x00, 0x04, 0x00, 0xff, 0xfd, 0x02, + 0x04, 0xed, 0x00, 0x01, 0x02, 0x01, 0xfe, 0x01, 0xf7, 0xef, 0xff, 0x0d, + 0xfe, 0x01, 0x01, 0x03, 0xfb, 0xcc, 0xff, 0x14, 0x00, 0x04, 0xfe, 0x00, + 0x05, 0xe6, 0xfe, 0xee, 0xfe, 0x00, 0xfb, 0xfe, 0x12, 0x22, 0xfd, 0xf9, + 0xfc, 0xfd, 0x02, 0xfd, 0x0a, 0x20, 0x02, 0x06, 0x02, 0x00, 0xfb, 0x00, + 0xf6, 0xdd, 0x02, 0x0c, 0xff, 0x03, 0xfe, 0x03, 0xf0, 0xd0, 0xff, 0xfc, + 0x02, 0x03, 0x01, 0x02, 0xfc, 0x06, 0x00, 0xff, 0x03, 0xfd, 0xfc, 0x03, + 0x07, 0x04, 0xff, 0x09, 0x01, 0xfd, 0xfc, 0xfe, 0xfa, 0xff, 0x03, 0x07, + 0x03, 0x03, 0xfb, 0xfd, 0xf6, 0xfa, 0xff, 0x0a, 0x02, 0x00, 0xfe, 0x00, + 0xb9, 0xf8, 0x02, 0x05, 0xfe, 0x03, 0xfa, 0x03, 0xff, 0xfd, 0xfd, 0x01, + 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0x01, 0x03, 0xfe, 0x03, 0x03, 0xfd, + 0x07, 0xf8, 0x02, 0x02, 0xfc, 0xfd, 0xfb, 0x02, 0x0f, 0x02, 0x01, 0xec, + 0xfe, 0xfe, 0x02, 0xfd, 0x08, 0x14, 0x02, 0x0d, 0x01, 0xff, 0x00, 0x03, + 0x05, 0xd3, 0xfd, 0x13, 0x00, 0x00, 0xfc, 0xff, 0xf3, 0xc1, 0xfd, 0x04, + 0xfe, 0xfd, 0x02, 0xfd, 0x05, 0xeb, 0x02, 0x01, 0x01, 0xfd, 0xff, 0xff, + 0xfa, 0xf1, 0x02, 0x11, 0x02, 0x00, 0xfd, 0xfd, 0x00, 0xce, 0xfd, 0x0c, + 0xfc, 0xff, 0x00, 0x00, 0x06, 0xf3, 0x04, 0xf6, 0x01, 0x00, 0xfb, 0xfd, + 0x10, 0x23, 0xfc, 0xf5, 0xfe, 0x01, 0x02, 0x01, 0x0d, 0x25, 0xfd, 0x03, + 0xfc, 0x00, 0xfe, 0x02, 0xf2, 0xed, 0x02, 0x0c, 0x02, 0xff, 0xff, 0x03, + 0xeb, 0xe1, 0x01, 0xfe, 0x02, 0x04, 0xfd, 0x02, 0x03, 0x11, 0xff, 0x00, + 0x03, 0xfc, 0x01, 0xff, 0x0c, 0x0a, 0x04, 0x04, 0x02, 0x00, 0xfd, 0xfe, + 0xfe, 0x01, 0xfe, 0x08, 0xfd, 0x02, 0xfd, 0x00, 0xf2, 0xf2, 0x03, 0x09, + 0xfd, 0x04, 0x01, 0xfc, 0xbd, 0xfa, 0xfe, 0x07, 0xff, 0x01, 0xff, 0x00, + 0xfe, 0x00, 0xff, 0x02, 0xff, 0xfd, 0xfe, 0x00, 0x01, 0xff, 0xff, 0xfd, + 0x02, 0xfd, 0xfd, 0xfe, 0x07, 0xfd, 0x01, 0x05, 0x00, 0x02, 0xfd, 0x03, + 0x0c, 0xfb, 0x02, 0xf3, 0x02, 0x03, 0xfa, 0x02, 0x06, 0x11, 0x03, 0x0c, + 0xfe, 0x03, 0xff, 0x04, 0xfe, 0xdc, 0xff, 0x12, 0x01, 0x03, 0xfd, 0xff, + 0xf3, 0xca, 0x03, 0x04, 0xfd, 0xfe, 0x00, 0xfe, 0x05, 0xed, 0x03, 0x01, + 0xff, 0x04, 0xff, 0x00, 0xf8, 0xee, 0xfe, 0x0c, 0x03, 0x01, 0x03, 0xfd, + 0x01, 0xdb, 0x00, 0x0d, 0x02, 0xfe, 0xfb, 0x01, 0x02, 0xff, 0x04, 0xfb, + 0x03, 0x03, 0x00, 0x01, 0x16, 0x1b, 0xfd, 0xff, 0xfc, 0xff, 0xfb, 0x03, + 0x0a, 0x17, 0x01, 0x01, 0xfe, 0x04, 0xfa, 0x02, 0xfa, 0xee, 0x00, 0x0b, + 0xfd, 0xff, 0xfb, 0x03, 0xec, 0xea, 0xfd, 0xfb, 0x03, 0xff, 0xfd, 0x03, + 0xfc, 0x0d, 0x03, 0xfe, 0x00, 0xfd, 0xfe, 0x03, 0x03, 0x11, 0x00, 0x04, + 0x03, 0xff, 0xfd, 0x00, 0xfa, 0x04, 0x00, 0x0a, 0xff, 0x04, 0xfe, 0xff, + 0xea, 0xf0, 0x03, 0x0d, 0x02, 0x00, 0xfd, 0x01, 0xc2, 0xf1, 0x03, 0x06, + 0x01, 0xfe, 0xfc, 0x00, 0x00, 0x03, 0x02, 0xff, 0xfe, 0x01, 0xfe, 0x00, + 0xff, 0xfe, 0x01, 0xf6, 0x00, 0x02, 0xfe, 0x00, 0x03, 0x02, 0xff, 0x06, + 0x02, 0xfc, 0x00, 0x01, 0x04, 0xf9, 0x03, 0xf9, 0xff, 0x04, 0x03, 0x03, + 0x07, 0x0e, 0xfd, 0x0d, 0x02, 0xfd, 0xff, 0xff, 0xfe, 0xf1, 0xfe, 0x12, + 0x00, 0xfd, 0xfd, 0xfd, 0xf2, 0xda, 0x00, 0x05, 0xfd, 0xfe, 0xfb, 0x00, + 0x07, 0xee, 0x02, 0x04, 0xfd, 0xfd, 0xfe, 0x02, 0x01, 0xf5, 0xfe, 0x10, + 0x03, 0xff, 0xfc, 0x03, 0x02, 0xe1, 0xff, 0x0e, 0x03, 0x01, 0xfb, 0xfd, + 0x0a, 0x00, 0x03, 0xfd, 0x02, 0xfe, 0x01, 0x03, 0x14, 0x1c, 0xfc, 0xfc, + 0xfd, 0x00, 0xfe, 0xfd, 0x0e, 0x18, 0x02, 0x05, 0xfe, 0xfd, 0xff, 0xfc, + 0xff, 0xef, 0x00, 0x01, 0x02, 0x03, 0xff, 0x00, 0xfe, 0xec, 0x03, 0xff, + 0xfd, 0x00, 0x00, 0x01, 0x00, 0x07, 0x03, 0xff, 0xfd, 0x00, 0x02, 0xfe, + 0x07, 0x0b, 0xfd, 0x05, 0x04, 0xfe, 0xfe, 0x02, 0xf4, 0x03, 0x03, 0x08, + 0xff, 0xfd, 0x02, 0xfd, 0xe6, 0xf0, 0x02, 0x0d, 0xfe, 0x03, 0xfb, 0x02, + 0xb9, 0xee, 0x01, 0x05, 0x01, 0x02, 0xff, 0xff, 0xff, 0xfe, 0x03, 0x01, + 0x00, 0x00, 0xfc, 0x02, 0xfd, 0xff, 0x01, 0xfb, 0x01, 0xfd, 0x03, 0x02, + 0x03, 0x00, 0x04, 0x0d, 0xfc, 0x02, 0x00, 0xfd, 0xff, 0xfc, 0x00, 0xfe, + 0x03, 0x04, 0x00, 0x02, 0x01, 0x0d, 0x00, 0x08, 0xfe, 0xfe, 0x01, 0xfe, + 0xff, 0xf7, 0x03, 0x10, 0x00, 0xff, 0xfb, 0x02, 0xef, 0xe7, 0x03, 0x02, + 0xfd, 0xfd, 0xff, 0xff, 0x05, 0x01, 0xfd, 0x06, 0x03, 0x02, 0xfd, 0xff, + 0xfd, 0xfa, 0x03, 0x0c, 0x01, 0x01, 0xfe, 0xff, 0x04, 0xe8, 0x04, 0x0a, + 0x04, 0x02, 0x00, 0xfc, 0x0d, 0x07, 0xff, 0xfa, 0x00, 0x01, 0x01, 0x01, + 0x19, 0x1b, 0xff, 0x07, 0xfd, 0xff, 0xfb, 0xfd, 0x08, 0x0e, 0x01, 0x02, + 0x04, 0x04, 0x00, 0xfd, 0xfe, 0xf6, 0x03, 0x0b, 0x02, 0xfc, 0x01, 0x00, + 0xf8, 0xf0, 0xfd, 0xfd, 0x04, 0x00, 0x02, 0xfe, 0x02, 0x08, 0xfe, 0x01, + 0x00, 0xfd, 0xfe, 0x03, 0x05, 0x13, 0xfe, 0x05, 0x03, 0x01, 0xff, 0xfe, + 0xef, 0x05, 0xfd, 0x05, 0x04, 0x02, 0xfa, 0x01, 0xdf, 0xf5, 0xfc, 0x08, + 0xfe, 0x03, 0x02, 0x00, 0xc4, 0xe6, 0xfc, 0x03, 0xff, 0x01, 0xff, 0x03, + 0xff, 0xfd, 0xfe, 0xfe, 0x03, 0x03, 0x02, 0x01, 0xff, 0x01, 0x04, 0xfb, + 0xfc, 0x00, 0x00, 0x01, 0x02, 0x01, 0xfc, 0x0b, 0xfc, 0x01, 0xfc, 0x04, + 0xf9, 0x02, 0xfe, 0x01, 0xfd, 0x01, 0x00, 0x03, 0xfc, 0x0d, 0x00, 0x07, + 0x02, 0xfe, 0x01, 0xfc, 0xf6, 0xff, 0x03, 0x11, 0xff, 0xfe, 0xfe, 0xfd, + 0xea, 0xee, 0xfe, 0x04, 0x00, 0x01, 0xfd, 0x02, 0x00, 0x02, 0xfe, 0x06, + 0x00, 0x02, 0xfb, 0xfd, 0xf4, 0xf2, 0xfc, 0x0f, 0x00, 0x04, 0xfd, 0x00, + 0xfe, 0xe7, 0x01, 0x11, 0xff, 0x02, 0xfd, 0xfe, 0x06, 0x03, 0x00, 0x02, + 0xff, 0x01, 0xfd, 0x03, 0x0f, 0x18, 0xfe, 0x07, 0xff, 0x02, 0x01, 0x03, + 0x05, 0x08, 0xfe, 0x06, 0xfb, 0x00, 0xfd, 0x03, 0xfb, 0xf7, 0xfc, 0x05, + 0x03, 0x03, 0xfd, 0x03, 0xf2, 0xf5, 0x02, 0xfb, 0xfe, 0x00, 0xfb, 0xfe, + 0x02, 0x0a, 0x04, 0xfe, 0x04, 0x02, 0x01, 0x00, 0x05, 0x0a, 0xfc, 0x04, + 0xff, 0xfd, 0xfe, 0x02, 0xf3, 0x09, 0x01, 0x04, 0xfd, 0x03, 0x02, 0xfe, + 0xda, 0xf3, 0x01, 0x05, 0xfd, 0x02, 0x02, 0xfe, 0xbd, 0xe4, 0x03, 0x04, + 0xfe, 0x02, 0xfd, 0xfd, 0x03, 0x02, 0xfd, 0x00, 0x04, 0x02, 0xfc, 0x00, + 0xfd, 0x00, 0x00, 0xff, 0x01, 0x04, 0x02, 0x01, 0x03, 0x07, 0xfe, 0x0b, + 0xfc, 0xff, 0xfc, 0xfd, 0xf2, 0x00, 0x01, 0x01, 0x01, 0x04, 0xfa, 0xfd, + 0xfa, 0x10, 0x03, 0x0d, 0xff, 0x01, 0xfd, 0x04, 0xf4, 0x02, 0xfd, 0x07, + 0x00, 0xfd, 0xfd, 0xfe, 0xe0, 0xef, 0xfe, 0x04, 0x00, 0x03, 0x03, 0xfe, + 0xfc, 0x02, 0x00, 0x05, 0x03, 0xfd, 0xfe, 0xfd, 0xf3, 0xfa, 0x04, 0x0b, + 0xfe, 0xfd, 0x00, 0x01, 0xf4, 0xe4, 0x00, 0x0a, 0xfc, 0xfd, 0xfb, 0x02, + 0xfa, 0x03, 0xff, 0x02, 0x02, 0x04, 0x01, 0x01, 0x12, 0x13, 0x03, 0x05, + 0x03, 0x03, 0xfd, 0xff, 0x01, 0x0b, 0x00, 0x08, 0x04, 0xfe, 0xfb, 0x01, + 0xf1, 0xf8, 0xfc, 0x04, 0xfe, 0x01, 0xfc, 0xfe, 0xef, 0xf6, 0xff, 0x00, + 0xfd, 0xff, 0xff, 0x04, 0xfc, 0x0c, 0xfc, 0x03, 0x02, 0x03, 0xff, 0x04, + 0xf8, 0x0e, 0xfd, 0x05, 0x00, 0x01, 0x03, 0x02, 0xee, 0x03, 0x03, 0x01, + 0xff, 0x03, 0xff, 0x02, 0xd9, 0xfd, 0xfe, 0x08, 0xff, 0x01, 0x03, 0x01, + 0xb8, 0xe8, 0xff, 0x02, 0xfd, 0xfd, 0xfc, 0x04, 0xff, 0xfe, 0x00, 0xfe, + 0xff, 0x02, 0x01, 0x01, 0xfe, 0x01, 0xfe, 0x07, 0x00, 0xfe, 0x00, 0x00, + 0x01, 0x05, 0x01, 0x0b, 0xfe, 0x00, 0x00, 0x00, 0xef, 0x00, 0x03, 0x02, + 0xff, 0xfe, 0xfd, 0x01, 0xfc, 0x14, 0x03, 0x06, 0x01, 0xfc, 0x00, 0xff, + 0xf4, 0x04, 0x03, 0x05, 0x01, 0xff, 0x00, 0x02, 0xdd, 0xf2, 0x01, 0xff, + 0xff, 0xfe, 0x01, 0xfd, 0xf9, 0x01, 0xfe, 0x07, 0x01, 0x00, 0xfd, 0x01, + 0xdc, 0xf4, 0x00, 0x0d, 0xff, 0x01, 0xfe, 0xff, 0xf2, 0xec, 0xff, 0x09, + 0x01, 0xfd, 0xfd, 0x02, 0xef, 0xff, 0x02, 0x03, 0x01, 0xff, 0x00, 0xfc, + 0x06, 0x16, 0x02, 0x02, 0x01, 0xfe, 0xfe, 0x02, 0x01, 0x05, 0xfe, 0x02, + 0x02, 0xfe, 0xf9, 0x02, 0xef, 0xf5, 0x02, 0x07, 0x00, 0x02, 0xfc, 0x00, + 0xea, 0xfa, 0x04, 0xff, 0xff, 0x01, 0xff, 0x02, 0xf3, 0x0f, 0x00, 0x00, + 0xfd, 0xfe, 0xfd, 0xfd, 0xf5, 0x0f, 0x01, 0x03, 0x03, 0x03, 0xfc, 0x04, + 0xeb, 0x01, 0xfd, 0x04, 0x00, 0x01, 0x00, 0x02, 0xda, 0xfc, 0x01, 0x04, + 0xfe, 0x02, 0x03, 0x04, 0xc0, 0xf0, 0xff, 0x03, 0x02, 0x01, 0xfd, 0x03, + 0x02, 0x03, 0x02, 0xfd, 0x01, 0xfe, 0xff, 0xff, 0x02, 0xfe, 0x04, 0xff, + 0xff, 0x04, 0x03, 0xff, 0x04, 0x07, 0x02, 0x09, 0x02, 0xfe, 0xfd, 0x01, + 0xf6, 0xfe, 0xfe, 0x02, 0xfe, 0xff, 0xff, 0xfe, 0x04, 0x0e, 0x00, 0x07, + 0x01, 0xfd, 0x03, 0x00, 0xf0, 0xfe, 0xff, 0x0a, 0xfd, 0x02, 0x01, 0xff, + 0xe2, 0xef, 0xff, 0x02, 0xfc, 0x00, 0xfc, 0xff, 0xf6, 0x04, 0xff, 0x03, + 0xff, 0x02, 0xfa, 0x01, 0xe3, 0xf9, 0xfe, 0x0e, 0xfe, 0x01, 0x00, 0xfc, + 0xeb, 0xe2, 0x00, 0x0a, 0xfd, 0x03, 0xfc, 0x02, 0xe9, 0xff, 0x01, 0x04, + 0xfd, 0xfe, 0x01, 0xff, 0x0c, 0x1a, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, + 0x01, 0x04, 0x03, 0x06, 0xff, 0x01, 0xfc, 0xff, 0xef, 0xf7, 0xfd, 0x0b, + 0x00, 0x02, 0xfd, 0x03, 0xeb, 0xf5, 0x01, 0x03, 0x00, 0xfd, 0xfe, 0xfd, + 0xf5, 0x05, 0x00, 0x02, 0xfe, 0x00, 0xfc, 0xfc, 0xf7, 0x06, 0x01, 0x05, + 0x00, 0x01, 0x00, 0xfe, 0xee, 0xfd, 0x04, 0x08, 0xfe, 0x04, 0xfe, 0xfc, + 0xdb, 0xf6, 0x04, 0x06, 0xff, 0x00, 0x03, 0x01, 0xc5, 0xfe, 0xfd, 0x02, + 0x00, 0xfe, 0xfd, 0xfe, 0x01, 0xfd, 0x01, 0x01, 0x00, 0x02, 0xff, 0xfd, + 0xff, 0x00, 0xfe, 0x02, 0x00, 0xfd, 0xff, 0x00, 0x07, 0x03, 0x01, 0x0c, + 0xfd, 0xfc, 0xfd, 0x03, 0xff, 0x07, 0x02, 0xfd, 0xfe, 0x00, 0x00, 0x01, + 0x02, 0x10, 0x01, 0x09, 0x02, 0xff, 0xfd, 0xfd, 0xf4, 0xfd, 0xff, 0x06, + 0x01, 0x02, 0x01, 0x00, 0xdd, 0xf6, 0x02, 0xff, 0x02, 0x03, 0xfa, 0x00, + 0xf4, 0x03, 0xfe, 0xff, 0x03, 0x02, 0xfc, 0xff, 0xdc, 0xf9, 0xfd, 0x0b, + 0x01, 0xff, 0xfd, 0xfc, 0xe0, 0xeb, 0x00, 0x0c, 0x02, 0xfe, 0xfe, 0x01, + 0xed, 0xfa, 0xfe, 0x03, 0xff, 0x01, 0xff, 0x00, 0x12, 0x14, 0x00, 0x05, + 0x00, 0x01, 0xfe, 0xfc, 0xf8, 0xfe, 0xfe, 0x06, 0x00, 0x00, 0xf9, 0xfd, + 0xec, 0xf2, 0x04, 0x03, 0x03, 0x00, 0x00, 0x02, 0xe4, 0xed, 0x04, 0xfe, + 0xfe, 0xff, 0xfd, 0x02, 0xf2, 0x03, 0x03, 0x02, 0xff, 0x01, 0x03, 0x00, + 0xf1, 0x05, 0xfe, 0x0b, 0x03, 0xfd, 0x00, 0xfe, 0xea, 0xfd, 0xfe, 0x03, + 0xfd, 0x03, 0xfe, 0xfe, 0xde, 0xf6, 0x01, 0x09, 0x03, 0x02, 0x04, 0x01, + 0xca, 0xfc, 0x02, 0x03, 0x03, 0x03, 0xfd, 0x00, 0x03, 0xff, 0x03, 0x00, + 0x04, 0xff, 0x00, 0xff, 0x00, 0x02, 0x00, 0x08, 0x00, 0x04, 0x00, 0x03, + 0x08, 0x02, 0x03, 0x0a, 0x02, 0xff, 0x00, 0x01, 0xfc, 0x0b, 0xfd, 0xff, + 0xfe, 0xfe, 0xfd, 0xfd, 0x01, 0x11, 0x01, 0x08, 0x02, 0xfe, 0xfc, 0xfe, + 0xf8, 0xfa, 0x02, 0x0a, 0x00, 0xff, 0xff, 0xff, 0xd7, 0xf0, 0x01, 0xfd, + 0xfb, 0xfd, 0xfd, 0xff, 0xee, 0x03, 0xfe, 0x06, 0xfe, 0x04, 0xff, 0x00, + 0xd8, 0xf3, 0xfe, 0x0d, 0xfd, 0xfd, 0x01, 0x04, 0xde, 0xe1, 0x00, 0x0a, + 0xfe, 0x00, 0xff, 0x02, 0xe5, 0xf6, 0x02, 0x03, 0x00, 0xfe, 0xfe, 0xff, + 0x08, 0x0f, 0x01, 0x01, 0xfc, 0x02, 0xfc, 0x01, 0xf2, 0x02, 0xfe, 0x08, + 0xff, 0xfd, 0xfe, 0x00, 0xe9, 0xed, 0xff, 0x06, 0x03, 0x02, 0xfa, 0x01, + 0xde, 0xeb, 0xfe, 0x05, 0x02, 0x02, 0x01, 0xff, 0xed, 0xfb, 0xff, 0x06, + 0xfe, 0xff, 0xfe, 0xfd, 0xf0, 0xfd, 0x04, 0x06, 0xfd, 0x04, 0xfd, 0xfd, + 0xef, 0xf9, 0xfe, 0x08, 0x04, 0x02, 0x00, 0x00, 0xdf, 0xf8, 0xfe, 0x05, + 0x02, 0x04, 0xfb, 0x01, 0xd4, 0x03, 0xff, 0x01, 0xfe, 0x01, 0xfe, 0xfe, + 0x00, 0x01, 0xff, 0x02, 0x03, 0x00, 0x01, 0xfe, 0x07, 0x01, 0x00, 0x03, + 0x01, 0x01, 0x03, 0x02, 0xef, 0x02, 0x00, 0x0d, 0x01, 0xfe, 0xfc, 0xfe, + 0xf6, 0x0a, 0x02, 0xf1, 0xfd, 0xfd, 0x01, 0xfe, 0xe8, 0x0c, 0xfc, 0x00, + 0x01, 0x02, 0xfc, 0x02, 0xe5, 0x05, 0xfd, 0xf7, 0xfd, 0x03, 0x01, 0x02, + 0xeb, 0xfd, 0xff, 0xeb, 0x02, 0x01, 0xfa, 0x01, 0xe9, 0x0d, 0x02, 0xf4, + 0xfe, 0x00, 0xfb, 0xfe, 0xf0, 0xf9, 0x01, 0x0a, 0xfd, 0xfd, 0x00, 0xfd, + 0xf1, 0xef, 0xfd, 0x02, 0x01, 0x02, 0xff, 0x00, 0xf9, 0x01, 0x00, 0xf0, + 0x03, 0x04, 0xfc, 0x04, 0xf7, 0x15, 0xfd, 0xf3, 0x00, 0x02, 0xfb, 0x00, + 0xf3, 0x04, 0xff, 0xe5, 0x03, 0xfe, 0xfc, 0xfe, 0xf1, 0xf8, 0xff, 0xf8, + 0x03, 0x02, 0xfd, 0x00, 0xf3, 0xfa, 0xff, 0xeb, 0x03, 0xfe, 0x00, 0xff, + 0xf6, 0x08, 0xfe, 0xef, 0xfd, 0x02, 0x00, 0xfe, 0xf9, 0x0b, 0x00, 0xf3, + 0xfe, 0x03, 0xfd, 0x02, 0x00, 0xfe, 0xfd, 0xf7, 0xfd, 0x04, 0x00, 0xfc, + 0xfa, 0xfb, 0x01, 0xf5, 0x04, 0xfd, 0x02, 0xff, 0xfe, 0xf1, 0xff, 0x06, + 0x01, 0x02, 0x00, 0xfd, 0xfe, 0xfe, 0x02, 0x01, 0xfe, 0xfe, 0xfd, 0x00, + 0xfe, 0x00, 0x01, 0xf6, 0x02, 0xff, 0x01, 0x04, 0xfe, 0x01, 0x01, 0xfb, + 0x01, 0x03, 0xff, 0x02, 0x03, 0x08, 0x03, 0x00, 0x00, 0x04, 0xfc, 0x03, + 0xfe, 0x08, 0x02, 0x00, 0xfc, 0x01, 0x00, 0xfd, 0x03, 0x04, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x03, 0x02, 0xfd, 0xfc, 0xfe, 0x01, 0x00, 0xfe, 0xfe, + 0x02, 0x09, 0x01, 0x02, 0x04, 0xfc, 0xff, 0xfe, 0x00, 0x03, 0x02, 0xfd, + 0xfd, 0x02, 0x02, 0xff, 0xff, 0x03, 0xff, 0x03, 0xff, 0x02, 0xfc, 0x00, + 0xfe, 0x00, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xfd, 0x04, 0x0e, 0xfd, 0xfe, + 0x02, 0x02, 0x02, 0xfd, 0x01, 0x06, 0xfd, 0x03, 0xfe, 0xfe, 0xfe, 0x02, + 0x02, 0x04, 0x02, 0x02, 0x02, 0x03, 0xfe, 0xfe, 0x00, 0x02, 0xff, 0x00, + 0xfd, 0xfd, 0xfd, 0xff, 0x01, 0x06, 0x02, 0xff, 0x04, 0xfe, 0x00, 0xfe, + 0xfe, 0x0a, 0x03, 0xfe, 0xfe, 0xfc, 0xfd, 0x00, 0xff, 0x02, 0xff, 0x02, + 0xfd, 0xfe, 0xff, 0xff, 0x02, 0xff, 0xfd, 0xfe, 0xff, 0x00, 0xfc, 0x03, + 0x01, 0xf8, 0x01, 0xfb, 0x02, 0x02, 0xfc, 0x00, 0xff, 0xfe, 0xfd, 0xfe, + 0xfe, 0xfe, 0xfc, 0xfd, 0x01, 0x00, 0xfe, 0xef, 0x03, 0x00, 0x04, 0x01, + 0xfe, 0x00, 0x00, 0xff, 0xfd, 0xff, 0x00, 0xfc, 0xfd, 0x01, 0x00, 0xfb, + 0x00, 0x03, 0xff, 0x01, 0x02, 0x02, 0xff, 0x01, 0x00, 0xfc, 0x02, 0xfd, + 0xfe, 0x01, 0xfd, 0x00, 0xff, 0xff, 0x02, 0xff, 0xfd, 0x01, 0xfc, 0xff, + 0xfd, 0x01, 0x03, 0x00, 0x01, 0x01, 0xfd, 0xfd, 0x03, 0xff, 0x02, 0xfe, + 0x03, 0x01, 0x01, 0xff, 0x04, 0x03, 0x03, 0x00, 0x01, 0xfd, 0xfd, 0x01, + 0xfe, 0xfe, 0x01, 0xfe, 0xfd, 0x03, 0x01, 0xfc, 0xff, 0x00, 0xfc, 0xfc, + 0x01, 0x00, 0xfd, 0xfd, 0x01, 0x00, 0xfe, 0x00, 0xfd, 0x03, 0xfe, 0x00, + 0x01, 0xfd, 0x03, 0x03, 0xfc, 0x02, 0xfd, 0xff, 0xfd, 0x04, 0xff, 0x01, + 0xfd, 0xff, 0xfd, 0xff, 0x01, 0xfe, 0xfc, 0x00, 0xfe, 0x01, 0xfd, 0xfe, + 0x00, 0xfe, 0xff, 0x04, 0x01, 0x04, 0x00, 0xff, 0x03, 0xfe, 0xfd, 0xfd, + 0x02, 0x01, 0x04, 0x01, 0x00, 0xfe, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x03, + 0x03, 0x03, 0xfc, 0xfd, 0xff, 0xff, 0x00, 0x01, 0x01, 0x04, 0xfd, 0xfe, + 0x00, 0x03, 0xfd, 0x05, 0x03, 0x00, 0xfc, 0x02, 0xfd, 0x00, 0xfd, 0x0a, + 0xfc, 0xff, 0xf9, 0xff, 0xfe, 0xe9, 0x03, 0xf6, 0xff, 0x03, 0x04, 0x02, + 0x01, 0x03, 0x02, 0xf2, 0x01, 0xff, 0xff, 0x03, 0x02, 0x01, 0x00, 0x05, + 0x02, 0x01, 0x00, 0xfd, 0x00, 0xfc, 0x03, 0x11, 0x02, 0xff, 0xfe, 0x03, + 0x01, 0xfd, 0xfd, 0x18, 0x02, 0xfc, 0xfd, 0xff, 0xff, 0xfc, 0x01, 0x19, + 0xfd, 0x00, 0xfa, 0xff, 0x00, 0xfe, 0x01, 0x16, 0x01, 0xff, 0xfb, 0xff, + 0x00, 0x01, 0xfd, 0x0e, 0x00, 0xfe, 0x03, 0x02, 0x01, 0xfd, 0x00, 0x07, + 0x00, 0xfe, 0xfc, 0x02, 0x01, 0x00, 0x03, 0x05, 0xff, 0xfc, 0xfc, 0x01, + 0xff, 0xfd, 0x02, 0x04, 0xfd, 0x00, 0xfd, 0xfe, 0x00, 0x02, 0xfe, 0x07, + 0x02, 0x01, 0x00, 0xfc, 0xfe, 0x01, 0xfc, 0x08, 0x03, 0x02, 0xfd, 0x02, + 0x00, 0xff, 0xfd, 0x07, 0x02, 0xff, 0xfe, 0x01, 0xfe, 0xff, 0x02, 0x05, + 0x03, 0x00, 0xfe, 0xff, 0xff, 0x04, 0x04, 0x05, 0xff, 0xfe, 0xfd, 0x01, + 0x00, 0xfe, 0x03, 0x09, 0xfd, 0x00, 0x02, 0x00, 0xff, 0xfd, 0x04, 0x06, + 0xfe, 0xfd, 0x01, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xfe, 0x04, 0xfd, + 0xfe, 0x01, 0x00, 0x04, 0x03, 0xfe, 0xfc, 0x01, 0xfc, 0xd7, 0x00, 0xf9, + 0x03, 0x02, 0x03, 0xfd, 0xfb, 0x08, 0x00, 0xe5, 0x00, 0xff, 0x02, 0x02, + 0xfc, 0xec, 0xfd, 0x00, 0x04, 0x03, 0xfd, 0x03, 0xfe, 0xf2, 0x02, 0x13, + 0x05, 0xfd, 0xfe, 0xfc, 0xfc, 0xf7, 0x01, 0x11, 0x00, 0xff, 0x00, 0x01, + 0xfe, 0xff, 0x02, 0x0f, 0x03, 0xfe, 0x00, 0x03, 0xfc, 0xfc, 0x01, 0x0e, + 0xfc, 0xfe, 0xfc, 0xff, 0xfa, 0xff, 0x00, 0x00, 0xfe, 0x02, 0xfb, 0x00, + 0xfa, 0x00, 0xfd, 0xfd, 0x03, 0xff, 0x04, 0x04, 0xfb, 0xf7, 0x03, 0x01, + 0x01, 0x03, 0xfe, 0xfe, 0xff, 0xff, 0x02, 0x06, 0xfd, 0x00, 0x00, 0xfd, + 0x01, 0x01, 0x02, 0x02, 0xff, 0xfd, 0xfd, 0x03, 0xff, 0xfd, 0xff, 0x03, + 0xfd, 0xfd, 0xff, 0x03, 0xfe, 0xff, 0x00, 0x04, 0x03, 0xfe, 0x04, 0x03, + 0xfe, 0xfe, 0x00, 0x06, 0x03, 0x03, 0x01, 0xff, 0xfe, 0x01, 0x03, 0x03, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0x03, 0x05, 0xff, 0xfe, 0xff, 0x03, + 0xf9, 0x02, 0xff, 0xff, 0x01, 0xff, 0xfe, 0x02, 0x01, 0xfe, 0x03, 0x03, + 0x00, 0xfc, 0xfe, 0xff, 0xfd, 0x00, 0x01, 0x16, 0x02, 0xfe, 0x03, 0x02, + 0xe6, 0xf4, 0xfd, 0xe9, 0x04, 0x00, 0xfc, 0xfd, 0x81, 0x33, 0x00, 0xd4, + 0x01, 0xfe, 0x04, 0xff, 0xa7, 0x32, 0xfe, 0xff, 0x03, 0xfc, 0x02, 0x01, + 0xb7, 0x13, 0xfd, 0x1d, 0x03, 0x03, 0xfd, 0xff, 0xc2, 0xfb, 0xfd, 0xff, + 0x02, 0xfe, 0xfc, 0xff, 0xda, 0xf7, 0x01, 0xfc, 0x01, 0xff, 0x01, 0xfd, + 0xe3, 0xe7, 0xfc, 0xff, 0xff, 0x00, 0x02, 0x03, 0xdd, 0xd8, 0x02, 0xf7, + 0xff, 0xfd, 0xfc, 0x01, 0xdc, 0x06, 0x03, 0xf0, 0x03, 0x00, 0xfb, 0x01, + 0xd7, 0x17, 0x02, 0xf8, 0xff, 0x01, 0x01, 0xfe, 0xe4, 0x0b, 0x03, 0x04, + 0x03, 0x00, 0x00, 0x01, 0xf3, 0xfe, 0x02, 0x00, 0xfd, 0xff, 0x01, 0x02, + 0xf3, 0x1a, 0x02, 0xfd, 0x04, 0x02, 0x00, 0x03, 0xf0, 0x10, 0xfe, 0xfd, + 0x03, 0x01, 0x03, 0x02, 0xea, 0x05, 0x04, 0x01, 0xfd, 0xfd, 0x00, 0x02, + 0xf5, 0x02, 0x01, 0xff, 0x00, 0xfd, 0xfc, 0xfd, 0xe6, 0xfe, 0xfc, 0x05, + 0x03, 0xfd, 0xfa, 0x01, 0xd8, 0xf0, 0xfd, 0x03, 0x03, 0x01, 0x00, 0xff, + 0x02, 0x02, 0x00, 0xff, 0x01, 0x03, 0x01, 0xfd, 0xfc, 0xff, 0x02, 0x2e, + 0x01, 0x02, 0xfd, 0x04, 0xf7, 0xe3, 0x00, 0xd8, 0x01, 0x03, 0xff, 0x02, + 0xca, 0x33, 0x00, 0xc3, 0x00, 0xff, 0xfd, 0x01, 0x1e, 0x32, 0xfd, 0x0a, + 0xfe, 0xfd, 0x00, 0x00, 0x11, 0x0c, 0x01, 0x1b, 0x03, 0x01, 0x00, 0xfd, + 0x01, 0xfb, 0x03, 0x00, 0x00, 0x03, 0xfe, 0x02, 0x13, 0x02, 0x04, 0xf9, + 0xfd, 0xff, 0xfd, 0xff, 0x17, 0xfb, 0xff, 0x08, 0x02, 0xfe, 0xfd, 0xfc, + 0x24, 0xf9, 0x01, 0xf4, 0x03, 0x03, 0x01, 0x01, 0x24, 0x0e, 0xfe, 0xea, + 0x01, 0x00, 0xfd, 0x00, 0x26, 0x20, 0x02, 0xf7, 0x01, 0x01, 0xfd, 0x00, + 0x21, 0x15, 0x00, 0x02, 0xfd, 0x02, 0x00, 0x02, 0x2f, 0x0a, 0xff, 0xf8, + 0xfd, 0x03, 0xfc, 0x01, 0x34, 0x29, 0xff, 0x01, 0x00, 0xfe, 0xfb, 0x04, + 0x2c, 0x1e, 0xff, 0xfc, 0x02, 0xfd, 0xfc, 0xfd, 0x1b, 0x0d, 0x03, 0x02, + 0xfd, 0xff, 0xfe, 0xfd, 0x16, 0x0e, 0x04, 0x00, 0x02, 0x02, 0x02, 0x02, + 0x04, 0x0a, 0x00, 0x03, 0x01, 0x01, 0x02, 0xfe, 0xc7, 0xf2, 0xff, 0x03, + 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfd, 0xfe, 0x03, 0x02, 0x02, 0x00, + 0xfe, 0x00, 0x00, 0x33, 0x01, 0x02, 0x00, 0xfc, 0x00, 0xd5, 0x03, 0xd7, + 0xfd, 0x00, 0x01, 0x01, 0xe3, 0x30, 0xff, 0xc3, 0x01, 0xff, 0x03, 0x01, + 0x0c, 0x36, 0xfe, 0x0b, 0xfe, 0xfd, 0x00, 0xfe, 0x04, 0x09, 0xfe, 0x17, + 0xfe, 0xfd, 0xfc, 0x01, 0xff, 0xf1, 0x03, 0xff, 0x00, 0x01, 0xfe, 0x03, + 0x15, 0x0b, 0x02, 0xfc, 0x01, 0x03, 0x01, 0x00, 0x11, 0x0c, 0x02, 0x10, + 0x03, 0x02, 0xfc, 0x01, 0x20, 0xf7, 0x01, 0x02, 0x03, 0xfd, 0x00, 0x01, + 0x19, 0x0c, 0x01, 0xea, 0xfd, 0x01, 0x02, 0x04, 0x14, 0x15, 0x02, 0xfa, + 0x02, 0xfd, 0xfd, 0x02, 0x18, 0x08, 0xfc, 0x07, 0xfd, 0xfe, 0xfc, 0x02, + 0x1f, 0xf5, 0x01, 0xf7, 0xff, 0x01, 0xff, 0xfd, 0x2e, 0x18, 0xfd, 0x01, + 0xff, 0x02, 0x03, 0xfe, 0x23, 0x1b, 0x01, 0x05, 0xff, 0x03, 0xff, 0x03, + 0x0c, 0x0c, 0x03, 0x00, 0xff, 0x00, 0xfe, 0xfe, 0x04, 0x0d, 0x00, 0xff, + 0x02, 0x01, 0xff, 0xfe, 0xf5, 0x04, 0xff, 0x02, 0x03, 0x01, 0x00, 0x03, + 0xcb, 0xeb, 0x04, 0x03, 0x01, 0x03, 0x02, 0xff, 0xfd, 0xfe, 0xfe, 0x00, + 0xfd, 0x01, 0xfe, 0x03, 0xfe, 0x00, 0xfc, 0x32, 0xfd, 0x02, 0xfd, 0xfd, + 0x00, 0xd3, 0xfe, 0xdd, 0xfd, 0x01, 0x02, 0xff, 0xc5, 0x21, 0x02, 0xc9, + 0xfe, 0x02, 0x03, 0x03, 0xf0, 0x26, 0x00, 0x11, 0x01, 0x03, 0x01, 0x00, + 0xdd, 0xeb, 0x02, 0x1a, 0xfe, 0x01, 0xfe, 0xfc, 0xf2, 0xe3, 0xff, 0x01, + 0x04, 0xfe, 0x02, 0x00, 0x0a, 0xf3, 0xff, 0xf5, 0xfe, 0xff, 0x02, 0x03, + 0x14, 0xfb, 0xff, 0x11, 0xff, 0xfe, 0xfc, 0xfe, 0x0f, 0xd2, 0xfe, 0x0e, + 0x03, 0x03, 0xfc, 0x02, 0x06, 0xf2, 0x00, 0xf3, 0x01, 0x01, 0xfe, 0xfd, + 0xfc, 0x0a, 0xff, 0xfc, 0xfe, 0x02, 0x02, 0xff, 0xfc, 0xfd, 0xff, 0x02, + 0x03, 0x03, 0xfb, 0x02, 0x0a, 0xea, 0xfd, 0xf4, 0xff, 0x00, 0xfe, 0x01, + 0x0b, 0x0a, 0x04, 0x00, 0xfc, 0xff, 0xfc, 0x01, 0x08, 0x09, 0xfd, 0x00, + 0x01, 0xfd, 0xfe, 0x03, 0xfc, 0xfd, 0xfd, 0xfa, 0xfd, 0xfe, 0xfc, 0x02, + 0xfb, 0x06, 0xfe, 0x00, 0x02, 0xfd, 0xfe, 0xfe, 0xfa, 0x00, 0xfe, 0x02, + 0xfd, 0x02, 0xfa, 0x02, 0xcd, 0xf6, 0xfd, 0x06, 0x01, 0x01, 0x01, 0x01, + 0x03, 0x01, 0x01, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, + 0xff, 0x03, 0xfc, 0xfd, 0xff, 0xd8, 0x00, 0xe4, 0xff, 0x00, 0x00, 0xfe, + 0xbf, 0x12, 0x01, 0xd8, 0x00, 0x03, 0xfe, 0xff, 0xe4, 0x17, 0xfe, 0x07, + 0x03, 0x04, 0x02, 0xff, 0xd3, 0xfb, 0xfe, 0x0b, 0x03, 0x03, 0xfc, 0x02, + 0xe4, 0xf7, 0xff, 0x04, 0xfe, 0xfc, 0x01, 0x03, 0x06, 0xe1, 0x03, 0xfa, + 0x00, 0xfe, 0xfd, 0xfd, 0x00, 0xe0, 0xfd, 0x06, 0x01, 0x00, 0xff, 0x02, + 0xff, 0xcb, 0x00, 0x0b, 0x04, 0x03, 0xfd, 0x02, 0x03, 0xdb, 0x01, 0xf7, + 0x00, 0x00, 0xff, 0xff, 0xfe, 0xf6, 0xfd, 0xfa, 0xff, 0x00, 0xfd, 0x00, + 0xfd, 0xf0, 0x00, 0x06, 0xfe, 0xfc, 0xff, 0xfd, 0x0b, 0xee, 0xfc, 0xfa, + 0xfe, 0x02, 0xfe, 0xfe, 0x03, 0x02, 0xfd, 0x05, 0x00, 0xff, 0xfe, 0xfe, + 0x04, 0xea, 0xff, 0x07, 0xff, 0x04, 0xfe, 0x02, 0xf6, 0xf2, 0x02, 0xfd, + 0xff, 0xfe, 0xff, 0xfe, 0xfa, 0x0c, 0xfe, 0x01, 0xfd, 0xff, 0xfe, 0xfd, + 0xfc, 0x06, 0x00, 0x03, 0x00, 0x04, 0xfe, 0xff, 0xd2, 0xec, 0x04, 0x03, + 0x00, 0x04, 0xfc, 0x01, 0x03, 0xfe, 0xff, 0xff, 0x01, 0xfd, 0xfe, 0x00, + 0xfd, 0x00, 0xff, 0x25, 0xfe, 0x01, 0xff, 0x00, 0xfe, 0xe1, 0x01, 0xe9, + 0x03, 0x01, 0xff, 0xfd, 0xcb, 0x05, 0x00, 0xe1, 0x02, 0x01, 0xfe, 0x01, + 0xe7, 0x0e, 0x00, 0xfc, 0xfc, 0x01, 0x00, 0x01, 0xde, 0x0d, 0x00, 0xf2, + 0xfd, 0x03, 0xff, 0x03, 0xec, 0x1c, 0xfe, 0x0a, 0x02, 0xfe, 0xff, 0x03, + 0xf2, 0xec, 0x02, 0x02, 0xfd, 0x00, 0x00, 0x04, 0xf8, 0xef, 0xfe, 0x06, + 0x03, 0xfc, 0x02, 0xff, 0x03, 0xea, 0xfd, 0xff, 0xfe, 0x03, 0x04, 0x02, + 0x02, 0xda, 0x01, 0xff, 0x00, 0xfd, 0x00, 0x03, 0x01, 0xe7, 0xff, 0x07, + 0x02, 0x02, 0xff, 0xfd, 0x05, 0xe6, 0xfe, 0x01, 0xfe, 0x03, 0xfc, 0x03, + 0x09, 0xf9, 0xfd, 0xff, 0x03, 0xff, 0x01, 0xfd, 0x03, 0xf9, 0xfd, 0x0e, + 0xff, 0x02, 0x00, 0xfe, 0x01, 0xdb, 0xfd, 0x05, 0xff, 0xfe, 0xfd, 0xfd, + 0xfe, 0xe5, 0xfe, 0xff, 0xfd, 0x03, 0xfe, 0x01, 0x07, 0x05, 0xfe, 0x02, + 0xfe, 0xff, 0xfc, 0x03, 0xff, 0x02, 0xff, 0xfe, 0xfd, 0xff, 0x02, 0x00, + 0xb9, 0xee, 0x00, 0x03, 0xfd, 0x00, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, + 0x00, 0xff, 0xff, 0x01, 0xfe, 0xfe, 0xff, 0x1d, 0x02, 0xfd, 0x03, 0xfe, + 0x01, 0xe8, 0xff, 0xef, 0x01, 0x03, 0x01, 0x03, 0xe3, 0xf7, 0x02, 0xf5, + 0x00, 0xfe, 0x01, 0x01, 0xf6, 0xf2, 0xfe, 0xfb, 0x00, 0xff, 0xff, 0x03, + 0xf6, 0x15, 0xfe, 0xd6, 0xfd, 0xfe, 0x02, 0xfe, 0xf7, 0x29, 0x00, 0x09, + 0xfe, 0x03, 0xfc, 0xfe, 0xf0, 0x02, 0x03, 0x09, 0x00, 0xfe, 0xfe, 0x03, + 0xf6, 0xf6, 0xfe, 0x02, 0x03, 0xfe, 0x01, 0x00, 0x01, 0xfe, 0x00, 0xfb, + 0xfd, 0x01, 0xfc, 0xff, 0x03, 0xde, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, + 0xff, 0xd6, 0xff, 0x16, 0xfe, 0xfc, 0x01, 0xfd, 0x03, 0xd6, 0xff, 0xf4, + 0x02, 0x01, 0xfd, 0x00, 0x03, 0x00, 0xfe, 0xf7, 0x00, 0x02, 0xff, 0x01, + 0x07, 0xfb, 0x01, 0x14, 0xfc, 0x03, 0xfe, 0x02, 0xfe, 0xcc, 0x03, 0x05, + 0x03, 0xfd, 0xff, 0xfe, 0xf9, 0xd1, 0x03, 0xfd, 0x00, 0xfd, 0xff, 0xff, + 0x06, 0xfb, 0x01, 0x09, 0xff, 0xfd, 0xfd, 0xff, 0xfd, 0x05, 0x00, 0xff, + 0x02, 0xfe, 0x01, 0xfd, 0xc6, 0xe9, 0x00, 0x07, 0xfe, 0xff, 0xfd, 0x03, + 0x01, 0xfe, 0xfe, 0xff, 0x03, 0xfd, 0xff, 0x00, 0x00, 0x01, 0xfc, 0x10, + 0x03, 0x00, 0xfc, 0xff, 0xff, 0xee, 0x01, 0xf4, 0xfe, 0xff, 0xfc, 0xff, + 0xf5, 0xee, 0xff, 0x08, 0x01, 0x02, 0x01, 0x02, 0xf8, 0xdf, 0x00, 0x07, + 0x00, 0x02, 0xfc, 0x02, 0x08, 0x12, 0xff, 0xb7, 0x02, 0xfd, 0xfd, 0xfd, + 0x02, 0x2f, 0x02, 0x0c, 0xfd, 0x03, 0xfc, 0xff, 0x01, 0x0b, 0xff, 0x09, + 0x03, 0x01, 0xfc, 0x00, 0xfc, 0x02, 0x01, 0xfb, 0x03, 0x01, 0x03, 0xfd, + 0x0a, 0x11, 0xfe, 0xf7, 0x00, 0xff, 0xfc, 0xfc, 0x00, 0xf0, 0x01, 0x08, + 0xfd, 0xfe, 0x03, 0xfd, 0xf7, 0xdd, 0x03, 0x0d, 0xfe, 0xfd, 0x02, 0xfc, + 0xf7, 0xd9, 0x02, 0xff, 0x02, 0xfd, 0xff, 0xff, 0x01, 0x0c, 0x02, 0xfd, + 0x01, 0x02, 0xfa, 0x03, 0x00, 0xfd, 0x02, 0x11, 0x00, 0x00, 0xff, 0xfe, + 0xf3, 0xc0, 0x03, 0x0a, 0x02, 0x04, 0xfd, 0xff, 0xfb, 0xc5, 0x01, 0x07, + 0x00, 0x01, 0xff, 0x00, 0x02, 0xf6, 0x01, 0x03, 0x04, 0xfe, 0x01, 0xfc, + 0xf9, 0xfd, 0xff, 0x05, 0xff, 0xff, 0x00, 0xfd, 0xd3, 0xec, 0x00, 0x04, + 0xfd, 0x02, 0x02, 0x03, 0xfd, 0x01, 0x01, 0x00, 0x02, 0x01, 0x00, 0x01, + 0xfe, 0x00, 0x02, 0x08, 0x01, 0xfd, 0xfe, 0x00, 0xff, 0xf4, 0x01, 0xf7, + 0x01, 0x00, 0x01, 0xfd, 0xfa, 0xf2, 0xfd, 0x0b, 0x03, 0xfe, 0x01, 0xfe, + 0xfb, 0xca, 0x03, 0x11, 0x00, 0x02, 0x00, 0xff, 0x06, 0x0b, 0x03, 0xbe, + 0xfe, 0x02, 0xfe, 0xff, 0x06, 0x35, 0x02, 0x0b, 0x03, 0x01, 0xff, 0xfe, + 0xfe, 0x11, 0x00, 0x0c, 0xfd, 0x03, 0xfd, 0xfd, 0x03, 0x06, 0xff, 0xf5, + 0x02, 0x00, 0x01, 0x03, 0x08, 0x12, 0x02, 0xf4, 0x00, 0x01, 0xfd, 0x01, + 0xfe, 0xf8, 0xff, 0x09, 0x01, 0x02, 0x00, 0xfd, 0xf7, 0xec, 0xfe, 0x0c, + 0xff, 0xfd, 0xfa, 0x00, 0xfb, 0xdd, 0xfe, 0xfb, 0x01, 0x03, 0xfe, 0x02, + 0x00, 0x18, 0x04, 0xf6, 0x00, 0xfd, 0x01, 0x03, 0xf4, 0x0e, 0x01, 0x10, + 0x00, 0x01, 0xfe, 0xfd, 0xf5, 0xbe, 0xfd, 0x0b, 0xff, 0xfd, 0xfe, 0xff, + 0xed, 0xc8, 0x01, 0x05, 0x01, 0x01, 0x02, 0xff, 0x00, 0xf8, 0x02, 0x06, + 0x03, 0xfd, 0x00, 0xff, 0x00, 0xff, 0x00, 0x05, 0x04, 0xfe, 0x02, 0x01, + 0xc1, 0xf2, 0x03, 0x03, 0xfe, 0xfd, 0x01, 0xff, 0xfd, 0xfe, 0x02, 0x01, + 0x01, 0xff, 0xff, 0x04, 0xfd, 0x00, 0xfe, 0x0b, 0xff, 0x04, 0x02, 0xfd, + 0x03, 0xfc, 0x03, 0xf6, 0xff, 0x00, 0xfc, 0x00, 0xfb, 0xf0, 0x00, 0x0d, + 0x02, 0x01, 0xff, 0x02, 0xfd, 0xc6, 0x00, 0x16, 0xfe, 0xfd, 0x00, 0xfd, + 0x08, 0x00, 0x03, 0xcb, 0xfd, 0x02, 0xfe, 0xff, 0x07, 0x31, 0x03, 0x06, + 0x03, 0x01, 0xfb, 0xfe, 0x03, 0x15, 0xfe, 0x0a, 0xfe, 0x01, 0x00, 0xfe, + 0x00, 0x02, 0xfd, 0xf2, 0xfe, 0xfe, 0x00, 0x00, 0x13, 0x07, 0x02, 0xf5, + 0xff, 0xfc, 0xfd, 0x01, 0x08, 0xfa, 0xfc, 0x09, 0x03, 0x00, 0x01, 0xfc, + 0xfe, 0xef, 0xfe, 0x0f, 0x03, 0x02, 0xfb, 0x03, 0xfc, 0xdd, 0xff, 0x01, + 0xfd, 0x00, 0x03, 0x02, 0x09, 0x15, 0x02, 0xfd, 0x00, 0x00, 0xff, 0x01, + 0xfd, 0x0d, 0x02, 0x0f, 0x03, 0x01, 0xff, 0x00, 0xf1, 0xba, 0x02, 0x0a, + 0x00, 0xfd, 0x00, 0xfe, 0xe7, 0xc7, 0xfd, 0x01, 0x01, 0x02, 0x03, 0xfd, + 0x01, 0xf5, 0xfe, 0x01, 0x03, 0xff, 0x00, 0x02, 0xfd, 0x09, 0x00, 0x0a, + 0xff, 0xff, 0x01, 0x01, 0xad, 0xf8, 0x02, 0x04, 0x02, 0xfe, 0xfc, 0x00, + 0x00, 0x02, 0x02, 0x01, 0x01, 0xfe, 0x03, 0xfe, 0xfd, 0x00, 0x03, 0x07, + 0x03, 0x03, 0x02, 0x03, 0x01, 0x02, 0xff, 0xf1, 0xfd, 0x01, 0xfd, 0x02, + 0xf6, 0xfb, 0xff, 0x09, 0x03, 0x03, 0x01, 0xff, 0xfb, 0xc7, 0x03, 0x14, + 0x02, 0xfe, 0x01, 0x00, 0x08, 0xfc, 0xfd, 0xde, 0x00, 0xff, 0x00, 0x00, + 0x07, 0x2a, 0xfd, 0x0b, 0x01, 0x04, 0xfb, 0x03, 0x04, 0x0d, 0xfe, 0x0c, + 0xff, 0x01, 0xfd, 0x03, 0x01, 0x07, 0x01, 0xed, 0xff, 0x02, 0xfe, 0xfe, + 0x14, 0x07, 0xff, 0xf2, 0x02, 0x01, 0xff, 0x00, 0x10, 0xf7, 0x02, 0x03, + 0x03, 0xfe, 0x02, 0xfd, 0x03, 0xf6, 0xff, 0x0c, 0x01, 0x03, 0x01, 0xfd, + 0xfe, 0xdd, 0x03, 0x01, 0xfe, 0xfc, 0x01, 0xfd, 0x02, 0x0f, 0x00, 0xf6, + 0xfd, 0x02, 0x01, 0x02, 0xf6, 0x06, 0x03, 0x0e, 0xfc, 0xfe, 0xfd, 0x02, + 0xe8, 0xc6, 0xfd, 0x04, 0xfd, 0x00, 0xfe, 0x02, 0xea, 0xd0, 0x03, 0x05, + 0x01, 0x04, 0x00, 0xff, 0x01, 0xf6, 0xfc, 0x02, 0xfd, 0x03, 0xfd, 0x02, + 0xf7, 0xfe, 0x01, 0x0b, 0xfe, 0xfe, 0x00, 0x03, 0xa0, 0xf5, 0x03, 0x05, + 0xfd, 0x01, 0xff, 0x04, 0xfd, 0x03, 0x00, 0x01, 0x02, 0x01, 0x01, 0x03, + 0x01, 0x00, 0xfe, 0x0b, 0x02, 0xff, 0x01, 0xfe, 0x01, 0x05, 0x03, 0xf6, + 0x01, 0xfe, 0x03, 0x02, 0xf2, 0xfd, 0x00, 0x02, 0xfe, 0xfd, 0xfe, 0xfe, + 0xfe, 0xe1, 0x03, 0x0f, 0x00, 0xfe, 0x04, 0xfd, 0x0a, 0x03, 0x02, 0xed, + 0x02, 0x00, 0xfd, 0xfd, 0x06, 0x22, 0xfe, 0x09, 0x03, 0x02, 0xfc, 0x01, + 0x04, 0x0b, 0xfe, 0x05, 0x04, 0xfe, 0xff, 0xfe, 0x06, 0x03, 0x01, 0xf7, + 0x04, 0x01, 0x01, 0xff, 0x0f, 0x0b, 0x01, 0xf3, 0xff, 0x00, 0x01, 0x03, + 0x11, 0x02, 0x00, 0x03, 0x02, 0xfe, 0xfd, 0x01, 0x00, 0xf6, 0x01, 0x09, + 0x00, 0x00, 0x02, 0x03, 0xf9, 0xd9, 0x03, 0xff, 0x04, 0x00, 0x00, 0x00, + 0xfd, 0x10, 0xfe, 0xfa, 0x00, 0x02, 0xfd, 0x00, 0xef, 0x08, 0x03, 0x0c, + 0x03, 0x02, 0x03, 0xfd, 0xe8, 0xcf, 0x00, 0x00, 0xff, 0x01, 0x01, 0xfe, + 0xe7, 0xd9, 0x00, 0x03, 0xff, 0x01, 0xff, 0x02, 0xf9, 0xf6, 0x00, 0xfe, + 0xfe, 0x02, 0x02, 0x00, 0xef, 0x04, 0xfe, 0x08, 0xff, 0x02, 0xfb, 0x00, + 0x9d, 0xed, 0xfe, 0x05, 0x00, 0x00, 0xff, 0x01, 0x00, 0x02, 0x00, 0x00, + 0x03, 0x03, 0xfe, 0x01, 0xfe, 0xfd, 0xff, 0x07, 0x01, 0x02, 0x03, 0x01, + 0x02, 0x06, 0x00, 0xf7, 0x00, 0xfe, 0x02, 0xff, 0xf5, 0x02, 0x01, 0x02, + 0xfe, 0xff, 0xfb, 0x00, 0xff, 0xee, 0xfd, 0x08, 0x02, 0x01, 0x02, 0xff, + 0x0d, 0xf7, 0xfd, 0xf9, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x11, 0x02, 0x05, + 0xfc, 0x00, 0xff, 0x01, 0x08, 0x01, 0x01, 0x06, 0x02, 0x02, 0x02, 0x00, + 0x0a, 0x04, 0x02, 0xf8, 0xff, 0xfd, 0xfc, 0xfd, 0x11, 0x12, 0x03, 0xfa, + 0x00, 0x01, 0xfd, 0x01, 0x07, 0x09, 0x03, 0x01, 0x03, 0xff, 0x01, 0x03, + 0x02, 0x02, 0x03, 0x10, 0x01, 0x01, 0x03, 0x02, 0xf4, 0xe0, 0x04, 0x04, + 0xfd, 0x01, 0x03, 0xfe, 0xff, 0x04, 0x00, 0xfe, 0x03, 0xff, 0xfe, 0xff, + 0xed, 0x01, 0xff, 0x09, 0xff, 0xfe, 0x02, 0x01, 0xe7, 0xd8, 0x02, 0x08, + 0xfd, 0x00, 0xff, 0xfc, 0xe9, 0xef, 0xfd, 0x04, 0xff, 0x01, 0x01, 0x01, + 0xff, 0xff, 0x03, 0x07, 0x00, 0xfe, 0x01, 0xfd, 0xea, 0x03, 0x02, 0x0a, + 0x01, 0xff, 0xff, 0x01, 0xa4, 0xf1, 0x00, 0x06, 0xfe, 0x03, 0x03, 0x02, + 0x03, 0xfe, 0x03, 0xff, 0x00, 0x02, 0x03, 0xff, 0xfd, 0x00, 0x03, 0xff, + 0x03, 0x03, 0xfd, 0x03, 0x04, 0x03, 0xfe, 0xf7, 0x03, 0xff, 0xfe, 0x03, + 0xfb, 0xff, 0xfe, 0xfe, 0xff, 0xfc, 0x02, 0xfd, 0x01, 0xfc, 0x00, 0x0a, + 0xfe, 0xfe, 0xfd, 0x01, 0x12, 0x04, 0x02, 0xfd, 0x01, 0xfd, 0xfe, 0x00, + 0x0d, 0x0c, 0x01, 0xff, 0xff, 0xff, 0x03, 0x00, 0x05, 0xf1, 0x01, 0x08, + 0xff, 0xfe, 0x05, 0xfd, 0x09, 0x06, 0x02, 0xf7, 0x03, 0x03, 0x01, 0x02, + 0x0d, 0x0f, 0x00, 0xf2, 0xfe, 0xff, 0xff, 0xfe, 0x0a, 0x0e, 0x00, 0x05, + 0xfd, 0x03, 0xff, 0x00, 0x00, 0x05, 0x03, 0x0d, 0xfe, 0x02, 0xfe, 0x02, + 0xf7, 0xeb, 0xfd, 0x04, 0x01, 0xff, 0xff, 0xfe, 0xfa, 0x0b, 0x01, 0xfc, + 0xfe, 0x03, 0xfd, 0xfd, 0xf6, 0xfd, 0x00, 0x04, 0x02, 0xfc, 0xff, 0x02, + 0xf0, 0xe6, 0x00, 0x02, 0xff, 0x00, 0x00, 0xfe, 0xf2, 0xf8, 0xfe, 0x03, + 0xff, 0xfc, 0x00, 0x01, 0xfe, 0xfd, 0x00, 0xfe, 0x03, 0x00, 0xff, 0xfd, + 0xe9, 0x01, 0xfe, 0x05, 0x02, 0xff, 0x00, 0x01, 0xac, 0xea, 0x00, 0x05, + 0xfe, 0x03, 0x00, 0x03, 0x03, 0xfd, 0x00, 0x00, 0x02, 0x03, 0x03, 0xff, + 0xfd, 0x01, 0x00, 0x01, 0x02, 0x02, 0x01, 0xfc, 0x05, 0x07, 0xfd, 0xfc, + 0x02, 0x00, 0xfe, 0x02, 0x00, 0xff, 0xfd, 0xff, 0xff, 0x01, 0xfe, 0xff, + 0x0b, 0x02, 0xfe, 0x05, 0x03, 0xfe, 0xfe, 0xff, 0x14, 0x0b, 0xfd, 0x04, + 0x00, 0x03, 0x01, 0xff, 0x09, 0x0b, 0xfd, 0x02, 0x00, 0x03, 0xff, 0x03, + 0x08, 0xf8, 0x03, 0x03, 0x04, 0xfd, 0xff, 0x00, 0x0b, 0x09, 0x03, 0xf9, + 0x01, 0x00, 0x01, 0x01, 0x14, 0x13, 0xfe, 0xf6, 0x03, 0xfc, 0xfd, 0x03, + 0x09, 0x18, 0xfe, 0x04, 0x00, 0x03, 0xfd, 0xfe, 0xf9, 0x0b, 0x03, 0x08, + 0xfe, 0x02, 0xff, 0x04, 0xf1, 0xf3, 0xff, 0x07, 0x03, 0x00, 0x03, 0x00, + 0xfd, 0x0a, 0xfd, 0x01, 0x03, 0x02, 0xfc, 0x02, 0xf5, 0x05, 0xfe, 0x08, + 0x04, 0x03, 0xfd, 0x03, 0xed, 0xec, 0x04, 0x03, 0x01, 0x03, 0xfe, 0xff, + 0xf2, 0xfa, 0x03, 0x02, 0x02, 0xff, 0xfd, 0xfd, 0xfa, 0xfd, 0x02, 0x06, + 0xff, 0xfc, 0xfe, 0xfd, 0xea, 0x01, 0x00, 0x08, 0xff, 0x02, 0x00, 0xff, + 0xbd, 0xf3, 0x03, 0x03, 0x02, 0xff, 0xfd, 0x01, 0x03, 0x04, 0xfd, 0x01, + 0x03, 0x03, 0xfd, 0x00, 0xfc, 0x00, 0xfd, 0xf8, 0xfe, 0xfd, 0xfe, 0x02, + 0x04, 0x06, 0xfe, 0xff, 0x02, 0x02, 0xfd, 0xfc, 0x00, 0xff, 0xfc, 0x04, + 0xfd, 0x02, 0xfe, 0xfe, 0x08, 0x04, 0xfe, 0x08, 0x01, 0xfe, 0xfe, 0xff, + 0x0e, 0x08, 0x03, 0xfe, 0xff, 0x02, 0x02, 0xfe, 0x03, 0x07, 0xfe, 0x07, + 0x01, 0xfd, 0x00, 0xfd, 0x04, 0xfd, 0x01, 0x08, 0xfe, 0x01, 0x02, 0x03, + 0x07, 0x0c, 0x01, 0xff, 0xff, 0xfd, 0x01, 0x02, 0x12, 0x17, 0xff, 0xf3, + 0x03, 0x03, 0x01, 0x00, 0x06, 0x11, 0xff, 0x00, 0xfe, 0xfc, 0xfd, 0x00, + 0xfe, 0x0d, 0x01, 0x02, 0x00, 0x03, 0xfd, 0x00, 0xf7, 0xfa, 0x01, 0x03, + 0xfd, 0x02, 0xfd, 0x02, 0x01, 0x10, 0xfd, 0x04, 0x02, 0xff, 0x01, 0x01, + 0xe9, 0x00, 0x01, 0x02, 0xfd, 0x02, 0xfd, 0xff, 0xf2, 0xed, 0xfd, 0xfe, + 0xff, 0x02, 0x03, 0xfc, 0xeb, 0xfe, 0x01, 0x06, 0xfe, 0x02, 0xfd, 0x03, + 0xf6, 0x04, 0xfe, 0x03, 0x00, 0x03, 0x04, 0x00, 0xe4, 0x02, 0x03, 0x05, + 0x02, 0xfe, 0x01, 0xfc, 0xbe, 0xf4, 0x03, 0x03, 0x03, 0xfd, 0x01, 0x00, + 0x00, 0xff, 0x01, 0x00, 0x04, 0x02, 0xfc, 0x02, 0xfc, 0x00, 0xfd, 0xf8, + 0x02, 0xfc, 0xfd, 0xfd, 0x04, 0x0d, 0x02, 0x01, 0xfe, 0xfe, 0xff, 0xff, + 0xf4, 0x01, 0x03, 0x00, 0xfe, 0x02, 0xfd, 0x01, 0xfc, 0x06, 0xfe, 0x04, + 0x00, 0x02, 0x05, 0xfd, 0x02, 0x0d, 0xfd, 0x02, 0xff, 0x00, 0x02, 0xff, + 0x01, 0x05, 0x02, 0x02, 0x00, 0xfe, 0xfe, 0x02, 0x02, 0xfe, 0x00, 0x05, + 0xfd, 0x01, 0xfe, 0xfe, 0x02, 0x07, 0xfe, 0x01, 0x03, 0x00, 0x00, 0xfe, + 0x11, 0x15, 0x02, 0xf9, 0x00, 0x02, 0xfd, 0x01, 0x06, 0x11, 0x03, 0x05, + 0x00, 0xfc, 0xff, 0xff, 0x02, 0x09, 0x00, 0x04, 0xfe, 0x00, 0x01, 0xfd, + 0xfb, 0x00, 0xfe, 0x03, 0x01, 0x02, 0x06, 0xff, 0x00, 0x19, 0xfc, 0x05, + 0xff, 0xfe, 0xff, 0xfe, 0xed, 0xfd, 0x00, 0x08, 0x04, 0x01, 0xfe, 0x00, + 0xf0, 0xf0, 0x00, 0x01, 0xfd, 0xff, 0x01, 0x03, 0xe9, 0xf9, 0x00, 0x05, + 0x01, 0x03, 0x04, 0xfe, 0xf5, 0xfd, 0x03, 0x04, 0x04, 0x02, 0x02, 0x02, + 0xeb, 0xfe, 0xfd, 0x06, 0x00, 0x02, 0x02, 0x00, 0xbd, 0xf9, 0x02, 0x05, + 0x03, 0x04, 0x01, 0x00, 0xff, 0xfe, 0xff, 0xff, 0x00, 0x02, 0x03, 0xfd, + 0x00, 0xfd, 0x04, 0xfa, 0x03, 0xfe, 0x00, 0x00, 0x03, 0x07, 0x02, 0xfe, + 0xfd, 0xfd, 0x00, 0xfc, 0xf4, 0x00, 0xff, 0x03, 0x02, 0x02, 0x00, 0x03, + 0xf8, 0x05, 0x03, 0x06, 0x01, 0x00, 0x03, 0xfd, 0x00, 0x06, 0x00, 0x02, + 0x01, 0x03, 0x02, 0x01, 0xf5, 0x07, 0xff, 0x06, 0x04, 0x03, 0x00, 0xfd, + 0xfa, 0x00, 0xfd, 0x06, 0x00, 0xfd, 0xfc, 0x00, 0xf9, 0x07, 0x01, 0xfe, + 0x01, 0x01, 0x00, 0xfd, 0x0e, 0x16, 0x03, 0xff, 0x04, 0xfc, 0x00, 0x02, + 0x0a, 0x0c, 0x01, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x0a, 0x11, 0x03, 0x07, + 0x01, 0x02, 0xfc, 0x03, 0x01, 0x03, 0x00, 0x02, 0x03, 0x03, 0x03, 0xff, + 0x03, 0x13, 0x00, 0x00, 0x02, 0xfe, 0x02, 0x02, 0xef, 0x00, 0x03, 0x05, + 0x01, 0x04, 0x01, 0x01, 0xf2, 0xeb, 0xfe, 0x03, 0x01, 0xfd, 0xff, 0x00, + 0xe7, 0xf7, 0x03, 0x04, 0x02, 0xfc, 0x01, 0xff, 0xf6, 0x03, 0x02, 0x06, + 0xff, 0xfd, 0x02, 0xfd, 0xe9, 0xff, 0x00, 0x0b, 0x03, 0xfd, 0xfd, 0x03, + 0xc9, 0xfc, 0x02, 0x04, 0x03, 0x01, 0xfc, 0x02, 0xfe, 0x00, 0xfd, 0x00, + 0xfe, 0x02, 0x00, 0xfe, 0xfd, 0x01, 0x01, 0xfb, 0xff, 0x03, 0x03, 0x03, + 0x05, 0x06, 0x03, 0xfe, 0x03, 0xfe, 0xff, 0x03, 0xf1, 0x03, 0xff, 0x01, + 0x03, 0xfe, 0xfe, 0x03, 0xf6, 0xff, 0xfe, 0x04, 0xfe, 0xfe, 0x01, 0xff, + 0x02, 0x0a, 0xfe, 0xff, 0x01, 0xff, 0xff, 0x00, 0xf2, 0x0b, 0x04, 0x03, + 0xff, 0x04, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x08, 0x04, 0xfd, 0x03, 0x02, + 0xf5, 0x03, 0xfe, 0xfe, 0xfe, 0x02, 0x01, 0x04, 0x13, 0x0e, 0x00, 0xfc, + 0x00, 0xfc, 0x01, 0xfd, 0x0d, 0x10, 0x04, 0x04, 0x03, 0x01, 0x01, 0xff, + 0x07, 0x0a, 0xfe, 0x08, 0x03, 0xfd, 0x00, 0x04, 0x03, 0xfe, 0xfd, 0x02, + 0x01, 0x00, 0x01, 0xff, 0x09, 0x16, 0x04, 0x04, 0x02, 0x03, 0xfe, 0x00, + 0xf1, 0xfa, 0xfe, 0x03, 0x04, 0x00, 0x05, 0xfe, 0xee, 0xe3, 0x03, 0x02, + 0x00, 0x02, 0x00, 0xff, 0xe8, 0xef, 0x01, 0x05, 0x03, 0xfd, 0x02, 0xfe, + 0xfd, 0xfd, 0x01, 0x03, 0x02, 0xff, 0x02, 0x03, 0xef, 0xfe, 0x03, 0x04, + 0x03, 0xfc, 0xff, 0x01, 0xc3, 0xff, 0x04, 0x04, 0x03, 0xff, 0x02, 0xfe, + 0xfe, 0x03, 0x01, 0x01, 0xfd, 0x00, 0xff, 0x00, 0xfe, 0x01, 0x03, 0xfd, + 0x00, 0x02, 0xfe, 0xfe, 0x05, 0x06, 0x01, 0xfc, 0xfe, 0x03, 0xfc, 0x03, + 0xe9, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xfd, 0xf9, 0x0a, 0x00, 0x08, + 0xfe, 0x01, 0x02, 0x01, 0xf8, 0x0f, 0xff, 0xfa, 0x04, 0xff, 0xfb, 0xfd, + 0xf3, 0x0c, 0xfe, 0x04, 0x02, 0x01, 0xfc, 0xfe, 0xf2, 0x03, 0x02, 0x05, + 0x03, 0x01, 0x04, 0xff, 0xf4, 0x06, 0x01, 0xfb, 0x04, 0x00, 0xfe, 0x03, + 0x01, 0x10, 0x03, 0xfe, 0xfe, 0x02, 0x00, 0xff, 0x0f, 0x13, 0x02, 0x00, + 0x01, 0x02, 0x04, 0xff, 0x08, 0x0f, 0x03, 0x07, 0x01, 0xff, 0xfc, 0x00, + 0xff, 0xfe, 0xfd, 0x06, 0x02, 0x02, 0x00, 0x00, 0x03, 0x0f, 0xff, 0x02, + 0x03, 0x03, 0xfe, 0xff, 0xef, 0xfa, 0x02, 0x02, 0x02, 0xfe, 0x00, 0xff, + 0xe7, 0xe4, 0x00, 0x02, 0x01, 0xfd, 0x01, 0xff, 0xe8, 0xf6, 0xfe, 0x04, + 0x03, 0x03, 0x02, 0x01, 0xf8, 0xfe, 0xfd, 0x05, 0xfe, 0x03, 0x01, 0x04, + 0xee, 0xfe, 0x01, 0x0a, 0x00, 0xfe, 0xfe, 0xff, 0xc3, 0xfc, 0xfe, 0x06, + 0x00, 0x03, 0xfb, 0x01, 0x02, 0x02, 0xfe, 0x02, 0x03, 0x00, 0xff, 0x01, + 0x04, 0x01, 0x01, 0xf8, 0x01, 0x01, 0x03, 0x00, 0x11, 0x02, 0x02, 0x03, + 0x01, 0x00, 0x00, 0xfd, 0xe9, 0x03, 0x02, 0xef, 0x03, 0xff, 0xfd, 0x02, + 0xe7, 0x06, 0x03, 0xfa, 0xff, 0xfd, 0x01, 0x01, 0xe5, 0x0b, 0xfd, 0xf4, + 0xfd, 0x02, 0x02, 0x01, 0xdf, 0x0c, 0x02, 0xff, 0x01, 0x03, 0x00, 0x03, + 0xdf, 0x02, 0x02, 0x02, 0x03, 0xfe, 0xfd, 0x00, 0xe3, 0x08, 0xfe, 0xea, + 0xff, 0xff, 0xfe, 0x03, 0xe9, 0x0f, 0xfc, 0xed, 0x03, 0x01, 0xfd, 0x01, + 0xf2, 0x0f, 0x02, 0xf9, 0x03, 0x02, 0xfe, 0xfe, 0xf4, 0x08, 0xfe, 0xfd, + 0xfd, 0xff, 0x01, 0x04, 0xfa, 0xff, 0x02, 0xf4, 0xfd, 0xfe, 0x05, 0x04, + 0xf9, 0x05, 0x02, 0xf7, 0x04, 0xfe, 0xff, 0x01, 0xf9, 0x06, 0x00, 0xfb, + 0xfe, 0xff, 0x01, 0x00, 0xf9, 0xf8, 0xfe, 0xf8, 0xfd, 0x03, 0x03, 0x00, + 0xfb, 0xf7, 0xfc, 0xf6, 0x03, 0x00, 0x02, 0xfd, 0xfa, 0xfd, 0xff, 0xfa, + 0x01, 0x04, 0xff, 0xfd, 0xf6, 0xff, 0x00, 0xfa, 0x04, 0xfd, 0x02, 0xfd, + 0xfe, 0xf5, 0xfe, 0x09, 0xff, 0xfe, 0x01, 0xfd, 0x03, 0x00, 0xff, 0x01, + 0x02, 0xfe, 0xfd, 0xfd, 0x02, 0x00, 0xff, 0x08, 0xff, 0xff, 0xfe, 0xfe, + 0xfd, 0x05, 0x03, 0xfd, 0x02, 0xff, 0xff, 0xfd, 0xfe, 0x04, 0x03, 0x01, + 0xfc, 0x00, 0xff, 0x00, 0xfe, 0x05, 0x04, 0x04, 0xfe, 0xfe, 0x01, 0x01, + 0xfd, 0x08, 0xff, 0xfd, 0x01, 0xfd, 0x00, 0xfd, 0xff, 0x06, 0xfd, 0x00, + 0x02, 0x00, 0x02, 0xff, 0x03, 0x02, 0xfe, 0xff, 0x02, 0xfc, 0x04, 0x00, + 0xfd, 0x06, 0x02, 0x01, 0x03, 0x01, 0xfd, 0xfc, 0xff, 0x07, 0x01, 0xfd, + 0x01, 0x01, 0xff, 0x03, 0x00, 0x0a, 0x00, 0xfd, 0x01, 0x01, 0xfe, 0x01, + 0x04, 0x09, 0x04, 0x00, 0xfe, 0x03, 0xfd, 0x01, 0x01, 0x01, 0xff, 0x01, + 0xff, 0x01, 0x01, 0xff, 0x01, 0x09, 0xfe, 0xff, 0x03, 0xff, 0x00, 0x00, + 0x01, 0xfd, 0x01, 0x00, 0xff, 0x03, 0x03, 0x00, 0x02, 0x00, 0x01, 0xff, + 0xfd, 0x01, 0x00, 0x02, 0xff, 0x02, 0xfd, 0xfd, 0xfd, 0x01, 0x00, 0x02, + 0x03, 0x03, 0xfe, 0x03, 0x02, 0x02, 0x00, 0x00, 0x03, 0x04, 0xfc, 0xff, + 0xff, 0xfc, 0xfb, 0x03, 0xfc, 0xf9, 0xff, 0x02, 0x03, 0xfe, 0x04, 0x02, + 0x03, 0xfd, 0x02, 0xff, 0xff, 0xfe, 0x01, 0x03, 0x03, 0xfe, 0x01, 0x00, + 0xfd, 0x04, 0xfd, 0x02, 0x02, 0x02, 0xfd, 0xfe, 0xfe, 0x02, 0x02, 0x00, + 0xfe, 0x00, 0x03, 0x01, 0x01, 0xfd, 0x01, 0xfe, 0xfd, 0xfd, 0x00, 0x04, + 0x00, 0xfd, 0xfe, 0xfd, 0x01, 0x01, 0x00, 0xfc, 0xfc, 0x00, 0x03, 0x00, + 0xfe, 0x01, 0xfd, 0xfe, 0xff, 0x03, 0x00, 0xfe, 0x01, 0xfd, 0xff, 0xff, + 0x04, 0x01, 0x01, 0xff, 0x01, 0x01, 0xfd, 0x01, 0xff, 0xfd, 0x04, 0x01, + 0x02, 0xfe, 0x03, 0x03, 0xfe, 0x03, 0x00, 0x02, 0x00, 0xfe, 0xff, 0xfd, + 0xfd, 0xff, 0xfe, 0xff, 0xff, 0x01, 0x03, 0x03, 0xff, 0xfd, 0xfe, 0x00, + 0xff, 0x01, 0x01, 0xfd, 0xff, 0xff, 0x01, 0xfd, 0x02, 0x02, 0xfd, 0xfd, + 0x04, 0xff, 0x00, 0x00, 0xfd, 0x01, 0xfd, 0x01, 0x03, 0x00, 0x03, 0xfe, + 0x04, 0x01, 0xff, 0xfe, 0x00, 0xfe, 0xfd, 0xff, 0xfe, 0x00, 0x03, 0x00, + 0xfd, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x02, 0x03, 0xfd, + 0x03, 0x01, 0xff, 0xfe, 0x03, 0xfd, 0xfd, 0xff, 0x02, 0x00, 0x01, 0xfe, + 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0xfd, 0xfd, 0x00, 0x01, 0x00, 0xfd, 0xff, + 0xfe, 0xfe, 0x02, 0xfb, 0xfd, 0x00, 0xfd, 0x03, 0xff, 0xfb, 0xfc, 0x32, + 0x03, 0x00, 0x05, 0x03, 0x02, 0xfd, 0xfe, 0x24, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x13, 0xff, 0x01, 0x06, 0xff, 0xfe, 0x02, 0xff, 0xfd, + 0x00, 0xff, 0x04, 0xfd, 0x01, 0xff, 0x03, 0xfd, 0x02, 0xff, 0xff, 0x01, + 0x01, 0xfd, 0x03, 0x01, 0x00, 0xff, 0x01, 0x04, 0xff, 0xfe, 0x03, 0x00, + 0x04, 0x01, 0x03, 0xfd, 0xff, 0xfd, 0xfd, 0x06, 0xfe, 0x03, 0xfd, 0x04, + 0x00, 0x00, 0xff, 0x14, 0x03, 0x03, 0x04, 0xff, 0x03, 0x03, 0xfd, 0x10, + 0xfe, 0x01, 0xff, 0x04, 0x00, 0x03, 0xfd, 0x0e, 0x00, 0xff, 0x03, 0xfc, + 0x00, 0xff, 0x02, 0x09, 0x01, 0xfc, 0x05, 0xff, 0xfe, 0x04, 0xfd, 0x09, + 0x03, 0x03, 0x02, 0xfd, 0xff, 0x01, 0xff, 0x08, 0xfc, 0x01, 0x06, 0xfe, + 0xfe, 0x02, 0x00, 0x03, 0x00, 0xfd, 0x00, 0xfd, 0x00, 0x03, 0xfd, 0x08, + 0x04, 0xfd, 0x05, 0xfc, 0xff, 0x03, 0xfe, 0x01, 0xfc, 0xfe, 0x00, 0x01, + 0xff, 0xff, 0x00, 0x07, 0x02, 0x01, 0x01, 0xff, 0xfd, 0x01, 0x03, 0x00, + 0x05, 0xfc, 0x00, 0xfd, 0x02, 0x01, 0xfc, 0xfe, 0x01, 0xfd, 0x03, 0x01, + 0x01, 0xfb, 0xff, 0x16, 0xff, 0x02, 0x04, 0x00, 0xf9, 0xf7, 0xff, 0x15, + 0x00, 0xfd, 0x02, 0xfd, 0xf7, 0xf2, 0x01, 0x0d, 0x04, 0x03, 0xff, 0x02, + 0xfb, 0xfa, 0x03, 0xf2, 0xfc, 0xfd, 0x02, 0x00, 0xf9, 0xfc, 0xfe, 0xf3, + 0x02, 0x03, 0x01, 0x00, 0xfb, 0xff, 0x00, 0xff, 0x03, 0x01, 0x03, 0xff, + 0xfe, 0xf7, 0xfc, 0xff, 0xfd, 0x03, 0xfd, 0xfd, 0xff, 0xfd, 0x00, 0x06, + 0x01, 0x00, 0xfe, 0x02, 0x01, 0xfe, 0x01, 0x11, 0x01, 0xfd, 0xfe, 0x03, + 0xff, 0xfd, 0x03, 0x0a, 0xfe, 0xfd, 0x04, 0x00, 0x02, 0xfd, 0x02, 0x05, + 0xff, 0xff, 0xfc, 0x02, 0x01, 0x03, 0x01, 0x0b, 0xfe, 0xfe, 0x03, 0x00, + 0xff, 0x01, 0x04, 0x08, 0xfd, 0xfe, 0x01, 0x00, 0x01, 0x04, 0x03, 0x04, + 0x00, 0x00, 0x02, 0x03, 0xfc, 0xfe, 0x00, 0x06, 0x03, 0x03, 0xfe, 0x01, + 0x00, 0xfe, 0xfc, 0x02, 0xfe, 0x01, 0x04, 0x02, 0xfd, 0xff, 0x01, 0x04, + 0xfe, 0x00, 0xfb, 0xff, 0xf6, 0x01, 0xff, 0x00, 0x01, 0x04, 0x00, 0x04, + 0xfe, 0xfd, 0x01, 0x00, 0xfe, 0xff, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, + 0xff, 0x04, 0x03, 0xfd, 0xed, 0xfe, 0xfd, 0x20, 0xfc, 0xfe, 0x04, 0xff, + 0xa6, 0xcc, 0xfc, 0x14, 0x03, 0xfc, 0xff, 0xff, 0xac, 0xd9, 0x01, 0xfb, + 0xfe, 0x01, 0x02, 0x02, 0xce, 0x0b, 0x02, 0xcb, 0xfe, 0x01, 0x02, 0x00, + 0xd5, 0x36, 0x01, 0xe6, 0x01, 0x03, 0xfc, 0xfe, 0xc4, 0x26, 0x04, 0xf2, + 0x01, 0x02, 0x02, 0x00, 0xc9, 0x31, 0x01, 0xf5, 0x00, 0xfc, 0x00, 0x03, + 0xcd, 0x36, 0xfd, 0xfe, 0xfd, 0xfc, 0x03, 0x02, 0xce, 0x11, 0xfc, 0x12, + 0x04, 0x02, 0x04, 0x00, 0xce, 0xdf, 0xfe, 0x13, 0x01, 0xfc, 0x03, 0x02, + 0xca, 0xdb, 0xff, 0x03, 0xfe, 0x01, 0x01, 0x00, 0xe3, 0xf8, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x02, 0xe4, 0xe3, 0xff, 0x0c, 0x01, 0xfe, 0x01, 0x00, + 0xe5, 0xc0, 0xfe, 0x06, 0xfe, 0xfe, 0xfd, 0x02, 0xdd, 0xec, 0x00, 0x05, + 0x02, 0xfc, 0x02, 0x02, 0xe5, 0x0a, 0x02, 0x04, 0x00, 0xfd, 0xfe, 0xff, + 0xe4, 0xff, 0xfe, 0x03, 0xff, 0xfd, 0x04, 0x01, 0xdf, 0xf9, 0xfd, 0x00, + 0x01, 0xfe, 0x01, 0xfe, 0x01, 0x03, 0xfd, 0x00, 0xfe, 0x00, 0x01, 0xff, + 0xfd, 0x01, 0xfd, 0x0a, 0xfe, 0xfe, 0xff, 0xfe, 0xeb, 0xf8, 0xfe, 0x13, + 0xfe, 0x03, 0xfc, 0x01, 0x81, 0xe4, 0xff, 0x1f, 0x03, 0x01, 0x03, 0x01, + 0xc4, 0xe7, 0xfd, 0xfe, 0xfd, 0xfc, 0xfd, 0x02, 0x0c, 0x12, 0xfc, 0xae, + 0xff, 0xfe, 0xff, 0xff, 0x4b, 0x3b, 0x01, 0xef, 0x00, 0xfc, 0xff, 0x00, + 0x31, 0x26, 0x00, 0x00, 0x00, 0xfc, 0xfd, 0x00, 0x01, 0x30, 0xfc, 0xfb, + 0xfc, 0x02, 0xfd, 0x04, 0xcb, 0x3f, 0xfc, 0x01, 0xfc, 0x02, 0xfe, 0x00, + 0xb0, 0x18, 0x00, 0x15, 0xff, 0x00, 0xfe, 0xfd, 0xa4, 0xf2, 0xfd, 0x14, + 0xfc, 0xfd, 0x02, 0x01, 0xae, 0xfa, 0x03, 0x07, 0x01, 0xff, 0xfe, 0xff, + 0xc7, 0x0b, 0xfe, 0x04, 0xfd, 0xfc, 0xfd, 0xfe, 0xc6, 0xe7, 0xfc, 0x0f, + 0x01, 0x02, 0xfc, 0xff, 0xcf, 0xa9, 0x02, 0x0a, 0x03, 0xfc, 0x01, 0xff, + 0xd3, 0xe7, 0x01, 0x02, 0xfd, 0xff, 0x00, 0x00, 0xf6, 0x11, 0xfc, 0x00, + 0x00, 0xfc, 0x00, 0xff, 0xef, 0x05, 0x04, 0x07, 0x01, 0x02, 0xfd, 0xff, + 0xd4, 0xf7, 0xfe, 0x03, 0xfe, 0xff, 0xfd, 0xfd, 0x01, 0xfc, 0xfe, 0xfd, + 0xff, 0xfe, 0x00, 0xfd, 0xfd, 0x01, 0xfe, 0x25, 0x00, 0x00, 0x02, 0x02, + 0xf4, 0xee, 0x00, 0x0b, 0xfe, 0x02, 0xff, 0xfc, 0xa6, 0xd1, 0x04, 0x2c, + 0xff, 0xfe, 0x02, 0xfe, 0x33, 0xca, 0x03, 0x1d, 0xfe, 0x02, 0x00, 0x01, + 0x3f, 0xe4, 0x00, 0xaa, 0xff, 0x02, 0x00, 0x04, 0x58, 0x39, 0x02, 0xf5, + 0x03, 0x03, 0xfe, 0x00, 0x40, 0x11, 0x00, 0x03, 0x03, 0xfd, 0xfc, 0xfe, + 0x20, 0x16, 0xfe, 0xf4, 0x01, 0x02, 0x02, 0xfd, 0xfe, 0x2d, 0xff, 0xf9, + 0xff, 0xfe, 0xfe, 0x02, 0xdd, 0x16, 0xfe, 0x11, 0x00, 0x00, 0x00, 0x00, + 0xc4, 0xf1, 0x01, 0x04, 0xfd, 0x02, 0x03, 0xfd, 0xc7, 0x04, 0x00, 0xf9, + 0xfd, 0xfc, 0x04, 0x02, 0xca, 0x0f, 0xfd, 0x03, 0xfc, 0xfe, 0xfd, 0xfd, + 0xba, 0xdb, 0xfe, 0x17, 0x00, 0xfe, 0x03, 0x04, 0xb6, 0x99, 0xfd, 0x0b, + 0xfe, 0x03, 0xfd, 0x02, 0xda, 0xcf, 0x02, 0x04, 0x01, 0xff, 0x02, 0xff, + 0x10, 0x07, 0x01, 0x01, 0xfe, 0x02, 0xfd, 0xfd, 0xff, 0xf8, 0xfc, 0x07, + 0x04, 0xfd, 0xfe, 0xff, 0xc8, 0xf8, 0xff, 0x04, 0x00, 0xfe, 0xfe, 0x02, + 0x01, 0x01, 0xfd, 0xff, 0x01, 0xfe, 0xff, 0xff, 0xfe, 0x00, 0xff, 0x30, + 0xff, 0x03, 0x00, 0x04, 0xfc, 0xeb, 0x00, 0x02, 0xfc, 0xfc, 0xfe, 0x00, + 0xd0, 0xee, 0x00, 0x1b, 0x02, 0x02, 0xfe, 0x01, 0x2f, 0xbf, 0x03, 0x21, + 0xfe, 0xfc, 0x02, 0x00, 0x26, 0xb3, 0xfc, 0xb1, 0xfe, 0x01, 0x01, 0x04, + 0x32, 0x29, 0xff, 0x01, 0xfc, 0x00, 0xfe, 0xfd, 0x21, 0xfe, 0xfe, 0x11, + 0xff, 0x03, 0xfd, 0x04, 0x15, 0x03, 0x03, 0xf3, 0x02, 0x04, 0x00, 0x03, + 0x07, 0x19, 0xff, 0xf6, 0xfe, 0xfe, 0xfc, 0xff, 0xff, 0x0d, 0xfd, 0x0c, + 0x01, 0xfe, 0xfe, 0x00, 0xeb, 0x03, 0x01, 0xfb, 0x01, 0x01, 0x03, 0x00, + 0xed, 0x19, 0xfe, 0xfd, 0xfc, 0xfe, 0xfa, 0xfd, 0xe5, 0x2a, 0x00, 0x01, + 0x02, 0xfe, 0xff, 0x04, 0xd3, 0xf5, 0x03, 0x0e, 0xff, 0x03, 0x00, 0x03, + 0xd6, 0xa0, 0x03, 0x05, 0x02, 0x01, 0xfe, 0x00, 0xf2, 0xc2, 0x00, 0x03, + 0x01, 0xfe, 0xfc, 0x01, 0x12, 0xfc, 0x04, 0x00, 0xff, 0x01, 0x00, 0x01, + 0x0d, 0xfd, 0xfe, 0x0a, 0xfd, 0xfc, 0x03, 0x02, 0xd0, 0xf5, 0xfe, 0x04, + 0xff, 0x02, 0x00, 0x04, 0x04, 0x04, 0x04, 0xfe, 0x01, 0xfc, 0xfe, 0xfe, + 0x00, 0x01, 0x01, 0x2c, 0x00, 0x03, 0xfd, 0x01, 0x02, 0xf2, 0x02, 0xf6, + 0x01, 0x04, 0x01, 0x01, 0xee, 0x08, 0x02, 0x11, 0x01, 0xfc, 0xfd, 0x03, + 0x28, 0xe1, 0x01, 0x25, 0xff, 0xff, 0xfd, 0xfe, 0x1a, 0xa5, 0x02, 0xc8, + 0xff, 0x03, 0xfd, 0x02, 0x1d, 0x1c, 0x03, 0x07, 0xff, 0xfc, 0x00, 0x01, + 0x12, 0xee, 0x02, 0x16, 0x04, 0xfd, 0x01, 0xff, 0x03, 0xe5, 0xfd, 0xfb, + 0x01, 0x01, 0xff, 0x02, 0xff, 0xf4, 0xff, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, + 0xf8, 0x05, 0xff, 0x08, 0xff, 0x00, 0x03, 0xff, 0xfb, 0x05, 0xfe, 0xfa, + 0x02, 0xfc, 0x00, 0xfe, 0xfd, 0x1b, 0xff, 0xf1, 0x00, 0xff, 0x00, 0xfc, + 0xfd, 0x36, 0xfd, 0xf9, 0xfd, 0xfc, 0x05, 0x01, 0xee, 0x13, 0x02, 0x0e, + 0x02, 0x02, 0x03, 0xfd, 0xeb, 0xd1, 0x02, 0x07, 0x03, 0xfc, 0xff, 0x00, + 0xf6, 0xd4, 0xfe, 0x01, 0xff, 0x02, 0x00, 0xff, 0x0e, 0xff, 0x02, 0xfd, + 0x03, 0x02, 0xff, 0x03, 0x06, 0xff, 0xff, 0x0a, 0x02, 0xfe, 0xfe, 0xfd, + 0xde, 0xf7, 0x01, 0x02, 0x00, 0xff, 0xff, 0xfc, 0x00, 0xfe, 0xfd, 0x00, + 0x03, 0x04, 0xfd, 0x03, 0xff, 0x01, 0x00, 0x29, 0xfc, 0xff, 0x00, 0x03, + 0x06, 0xf7, 0x03, 0xf2, 0xff, 0xfe, 0xfd, 0xff, 0xf9, 0x16, 0x02, 0x02, + 0xfd, 0xfd, 0x00, 0xfc, 0x1b, 0xfa, 0xfe, 0x20, 0x02, 0x03, 0xff, 0xfd, + 0x10, 0xa8, 0x01, 0xe0, 0x02, 0x00, 0x01, 0x02, 0x10, 0x0a, 0x02, 0x09, + 0x03, 0x01, 0x02, 0x02, 0x03, 0xe1, 0xff, 0x12, 0x00, 0x00, 0xfc, 0xff, + 0xfc, 0xd4, 0xfd, 0x05, 0x01, 0x00, 0x01, 0xfe, 0xf9, 0xcd, 0xfd, 0x0b, + 0x03, 0xff, 0xfd, 0xfc, 0xfb, 0xf2, 0xfe, 0x0f, 0x02, 0x02, 0x03, 0x00, + 0xfb, 0x01, 0xff, 0xfb, 0x00, 0x03, 0xfc, 0xfe, 0xff, 0x1e, 0xfe, 0xfc, + 0xff, 0xfd, 0x03, 0x01, 0x03, 0x38, 0xfd, 0xfd, 0x03, 0x00, 0x03, 0xfe, + 0xee, 0x1f, 0x01, 0x03, 0x02, 0xff, 0xfe, 0xfe, 0xf1, 0xf1, 0xff, 0x01, + 0xff, 0x03, 0xfc, 0x04, 0xed, 0xde, 0xfd, 0x00, 0xfc, 0x01, 0xff, 0x02, + 0xfa, 0x03, 0x03, 0x00, 0x02, 0xff, 0xff, 0xfe, 0xf7, 0xfd, 0xfd, 0x0a, + 0xfc, 0x03, 0xff, 0x00, 0xed, 0xf6, 0x04, 0x01, 0xfe, 0xfd, 0xfd, 0xfe, + 0xfc, 0x03, 0xfd, 0xfd, 0xfc, 0xfd, 0x01, 0x03, 0xfc, 0xfd, 0xff, 0x20, + 0x03, 0xfe, 0xfd, 0xfd, 0x05, 0xfa, 0x03, 0xee, 0xfe, 0x00, 0x02, 0x00, + 0xfd, 0x1c, 0x00, 0xf8, 0xfe, 0x01, 0x00, 0x01, 0x13, 0x0c, 0xff, 0x1f, + 0xff, 0xfe, 0xfe, 0x03, 0xfb, 0xbc, 0x01, 0xfb, 0xfd, 0x02, 0xff, 0x00, + 0x07, 0xfe, 0xfe, 0x0d, 0xff, 0x02, 0x01, 0x03, 0xff, 0xd8, 0x00, 0x0f, + 0x02, 0x03, 0x03, 0x02, 0xfc, 0xce, 0x04, 0x02, 0x00, 0xff, 0xfe, 0xff, + 0xf7, 0xc2, 0xfe, 0x0a, 0x01, 0x03, 0xfe, 0x01, 0xf8, 0xdb, 0xff, 0x11, + 0x00, 0x00, 0xfd, 0x02, 0x01, 0xfb, 0x00, 0xf6, 0xfc, 0xfe, 0x02, 0xfe, + 0x04, 0x18, 0x03, 0xff, 0x02, 0x01, 0x01, 0x01, 0x09, 0x27, 0x02, 0xfe, + 0x04, 0x01, 0x01, 0x01, 0xff, 0x26, 0x00, 0x01, 0x03, 0x02, 0xfe, 0x00, + 0xf7, 0x10, 0xfd, 0xfe, 0x02, 0xfd, 0x02, 0x03, 0xf5, 0xff, 0xfc, 0x00, + 0xfe, 0xfe, 0xfd, 0x03, 0xf8, 0x02, 0x00, 0xfa, 0x00, 0x01, 0x04, 0xff, + 0xfe, 0x03, 0x01, 0x08, 0xfe, 0x02, 0x01, 0xfd, 0xe9, 0xf8, 0xff, 0x04, + 0xff, 0xff, 0x02, 0xfd, 0x00, 0xff, 0x03, 0x01, 0xff, 0x03, 0x02, 0x02, + 0x00, 0x02, 0x03, 0x1d, 0x00, 0x00, 0xff, 0xfd, 0x05, 0xfb, 0xfe, 0xf9, + 0xfc, 0x00, 0xfe, 0x04, 0xf9, 0x16, 0xff, 0xf6, 0xfc, 0xfc, 0x04, 0xfe, + 0x02, 0x15, 0xfd, 0x0f, 0xff, 0xff, 0x00, 0x03, 0xf4, 0xcf, 0xff, 0x0d, + 0xff, 0xfd, 0xfe, 0x00, 0x03, 0xfd, 0xfc, 0x09, 0xfe, 0xfd, 0x02, 0xff, + 0xf8, 0xd1, 0x01, 0x04, 0x00, 0x01, 0xfd, 0x03, 0xf4, 0xdd, 0xff, 0x06, + 0x02, 0xfc, 0xfe, 0xfc, 0xf3, 0xd5, 0x01, 0x09, 0x02, 0x03, 0x01, 0xfe, + 0xf6, 0xc7, 0xfe, 0x12, 0x04, 0xfd, 0xfe, 0x00, 0xfe, 0xe8, 0x03, 0xfa, + 0xff, 0xfd, 0x02, 0xff, 0x05, 0x12, 0x03, 0xf7, 0xfd, 0x02, 0x01, 0x02, + 0x0c, 0x1e, 0xfd, 0xf9, 0xfe, 0x02, 0x02, 0xfc, 0xff, 0x20, 0x02, 0xfc, + 0x04, 0xfd, 0xfd, 0x02, 0x06, 0x2f, 0xfe, 0xfc, 0x01, 0xfe, 0xfe, 0xfe, + 0xfc, 0x1b, 0xfe, 0xfa, 0x02, 0xfe, 0x02, 0x02, 0xf5, 0x02, 0x03, 0x03, + 0xfe, 0x03, 0xfd, 0x02, 0xf4, 0x0b, 0xfc, 0x02, 0x03, 0xfe, 0x02, 0x02, + 0xf4, 0xf5, 0x02, 0xff, 0x01, 0xfd, 0x04, 0xfd, 0x03, 0xfe, 0xfd, 0x01, + 0x01, 0xfd, 0x04, 0x01, 0x00, 0xff, 0x02, 0x12, 0x02, 0xff, 0x03, 0xfd, + 0x00, 0xfa, 0xfd, 0xf9, 0x01, 0x00, 0x03, 0x03, 0xf2, 0x09, 0x01, 0xf6, + 0xfd, 0x01, 0xfe, 0x01, 0x02, 0x1e, 0xfd, 0x01, 0x01, 0x02, 0x04, 0xfc, + 0xf1, 0xe7, 0xff, 0x0c, 0x01, 0xff, 0x06, 0xff, 0xfa, 0xff, 0x01, 0x0c, + 0xff, 0x03, 0xfc, 0x01, 0xef, 0xdb, 0xfd, 0x09, 0x02, 0xfe, 0x03, 0x04, + 0xf5, 0xeb, 0x00, 0x07, 0x02, 0xfd, 0x00, 0xfc, 0xe7, 0xe4, 0x02, 0x0a, + 0x02, 0x00, 0x04, 0x02, 0xf1, 0xd7, 0x00, 0x0a, 0x01, 0xff, 0x01, 0x01, + 0xfa, 0xdf, 0x03, 0xfc, 0x01, 0x01, 0x02, 0x02, 0x03, 0x05, 0x00, 0x00, + 0x02, 0x01, 0xff, 0xff, 0x0b, 0x0b, 0xfd, 0xfc, 0xfc, 0x00, 0xfe, 0xff, + 0x0c, 0x27, 0x02, 0xf7, 0x02, 0xfe, 0xfe, 0xff, 0x15, 0x3b, 0x02, 0xf4, + 0xfd, 0x02, 0x02, 0xff, 0x0b, 0x28, 0x03, 0xf5, 0x02, 0x03, 0x03, 0x03, + 0xff, 0x0b, 0x03, 0xf9, 0x00, 0x01, 0xfe, 0xfc, 0xf8, 0x02, 0xff, 0xff, + 0x03, 0xfd, 0x01, 0xfd, 0xe7, 0xf0, 0xfe, 0x04, 0x01, 0x03, 0x02, 0x02, + 0x03, 0x01, 0x00, 0xff, 0x00, 0xff, 0x01, 0xff, 0x02, 0x00, 0x02, 0x0e, + 0x04, 0xfe, 0xfe, 0x03, 0x02, 0xff, 0x03, 0x00, 0xfe, 0x02, 0xfd, 0x00, + 0xf1, 0x06, 0x01, 0xf4, 0x00, 0x03, 0x01, 0xfd, 0x04, 0x16, 0x01, 0x00, + 0xfd, 0x03, 0xfe, 0xfe, 0xf9, 0xf2, 0x03, 0x0c, 0x00, 0xfe, 0x01, 0xfd, + 0xfb, 0xfa, 0xff, 0x09, 0x01, 0xff, 0x02, 0x04, 0xf7, 0xd7, 0x00, 0x07, + 0xfe, 0xff, 0x04, 0xff, 0xef, 0xe9, 0x01, 0x07, 0xfe, 0x01, 0xff, 0xfd, + 0xe4, 0xe8, 0x00, 0x0c, 0xff, 0xfc, 0x02, 0xfe, 0xe9, 0xdf, 0xfd, 0x0a, + 0x03, 0x00, 0x02, 0x03, 0xf5, 0xd5, 0xff, 0xfb, 0xfd, 0x03, 0xff, 0x04, + 0xfa, 0xf5, 0xff, 0xfd, 0x02, 0x03, 0x05, 0xfc, 0x0e, 0xf3, 0x03, 0xfa, + 0xfe, 0xfd, 0x04, 0x02, 0x15, 0x20, 0x03, 0xf4, 0x03, 0xfd, 0x03, 0xfe, + 0x24, 0x3c, 0x02, 0xf6, 0x02, 0x03, 0xfd, 0x00, 0x16, 0x38, 0xfd, 0xf3, + 0x04, 0x03, 0x00, 0xfe, 0x09, 0x13, 0xfe, 0xff, 0x00, 0x03, 0x00, 0xfe, + 0xfa, 0xfe, 0xfd, 0xfb, 0xfc, 0x01, 0x01, 0xfe, 0xfc, 0xf5, 0xfd, 0xff, + 0x03, 0xff, 0x02, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0x02, 0xff, 0x01, 0xfd, + 0x01, 0x00, 0x01, 0x06, 0xfe, 0xfd, 0xfe, 0xff, 0x01, 0x03, 0x04, 0x00, + 0xfc, 0xfe, 0x01, 0x03, 0xf3, 0xff, 0xfc, 0xf8, 0x02, 0x03, 0x02, 0x00, + 0x07, 0x18, 0xff, 0x01, 0x04, 0x00, 0xff, 0xff, 0xf0, 0xf7, 0x00, 0x05, + 0xff, 0xfd, 0x03, 0x00, 0xfc, 0x06, 0x01, 0x0b, 0x02, 0x02, 0x00, 0x02, + 0xee, 0xd8, 0xfe, 0x06, 0x04, 0xfc, 0x04, 0xfe, 0xeb, 0xee, 0xff, 0x04, + 0x00, 0x01, 0x04, 0x04, 0xf4, 0xeb, 0xfe, 0x0d, 0xff, 0x02, 0x04, 0x02, + 0xf0, 0xdf, 0x00, 0x06, 0x02, 0xfe, 0x03, 0x01, 0xf2, 0xe2, 0xfd, 0xfc, + 0xfe, 0xfd, 0x00, 0x00, 0x04, 0xf2, 0x03, 0x04, 0x04, 0xff, 0x03, 0x02, + 0x0f, 0xe9, 0xfc, 0xff, 0xff, 0xfe, 0x00, 0xfc, 0x1e, 0x16, 0xfc, 0xf2, + 0xff, 0xff, 0xfc, 0xfc, 0x2f, 0x38, 0xfd, 0xf2, 0xfe, 0x02, 0x00, 0x01, + 0x14, 0x33, 0x02, 0xf3, 0x03, 0xfc, 0x03, 0x00, 0x05, 0x12, 0xfd, 0xfd, + 0x02, 0xfb, 0xfd, 0x03, 0x02, 0xfc, 0x01, 0xfc, 0x00, 0x01, 0x02, 0x01, + 0x18, 0xfa, 0x03, 0x03, 0x02, 0xfe, 0x04, 0x02, 0xfe, 0x04, 0x03, 0x00, + 0x03, 0xfc, 0x00, 0x01, 0x01, 0x00, 0xfd, 0x01, 0x03, 0xfd, 0x03, 0x04, + 0x04, 0x01, 0xfd, 0x00, 0x02, 0x02, 0xfe, 0x00, 0xfd, 0xf1, 0x03, 0xfa, + 0x03, 0x00, 0xfe, 0xff, 0x06, 0x15, 0xff, 0x06, 0xff, 0x02, 0xfe, 0xfe, + 0xf7, 0xf5, 0x00, 0x05, 0xff, 0x00, 0xff, 0x02, 0xfa, 0x07, 0xff, 0x0c, + 0xfd, 0xfc, 0x00, 0x02, 0xf8, 0xe2, 0x00, 0x04, 0xfd, 0x00, 0xfd, 0xfc, + 0xf2, 0xf6, 0xfe, 0x06, 0xff, 0xfe, 0xff, 0x01, 0xf2, 0xf1, 0x03, 0x0f, + 0xfe, 0x01, 0x02, 0x02, 0xed, 0xe1, 0x00, 0x08, 0x01, 0xfe, 0x02, 0xff, + 0xf0, 0xe3, 0x01, 0xfb, 0x00, 0x02, 0x00, 0xfd, 0xfb, 0xf3, 0x02, 0x07, + 0x03, 0xfc, 0xfb, 0x04, 0x0a, 0xe6, 0xfc, 0xf9, 0xfe, 0xfd, 0x03, 0x03, + 0x1d, 0x19, 0xfc, 0xf3, 0xff, 0x02, 0x05, 0xfe, 0x2a, 0x37, 0x02, 0xea, + 0x01, 0x00, 0x02, 0x00, 0x19, 0x2e, 0x03, 0xf3, 0xff, 0x02, 0x01, 0x00, + 0x0b, 0x1b, 0xfc, 0x05, 0x03, 0xfd, 0x02, 0x04, 0xff, 0x01, 0x01, 0xfc, + 0x01, 0x03, 0xfc, 0x03, 0x36, 0xff, 0xfe, 0x00, 0x00, 0xfe, 0x03, 0x04, + 0x04, 0x01, 0xfe, 0xfe, 0x01, 0x03, 0xfe, 0x00, 0x01, 0xfe, 0xfe, 0x01, + 0xff, 0xfe, 0xfe, 0x01, 0x02, 0x03, 0x04, 0x03, 0xfe, 0x00, 0x02, 0xfd, + 0xfc, 0xeb, 0xfc, 0xf8, 0xff, 0x01, 0xff, 0xfd, 0x05, 0x06, 0xff, 0xfe, + 0x02, 0xfc, 0x03, 0x03, 0xf5, 0xf5, 0x01, 0x03, 0x03, 0x00, 0x04, 0xff, + 0xfa, 0x0b, 0x03, 0x06, 0x04, 0x00, 0xff, 0x02, 0xec, 0xee, 0x03, 0x07, + 0x04, 0xff, 0xfe, 0xff, 0xee, 0xfe, 0xff, 0x08, 0xfe, 0x01, 0xfe, 0xfd, + 0xe5, 0xec, 0xfc, 0x0d, 0x01, 0xfd, 0xfd, 0xfd, 0xe3, 0xe9, 0x00, 0x06, + 0x01, 0x03, 0xff, 0x01, 0xe6, 0xe6, 0xfe, 0xf5, 0x02, 0x04, 0x02, 0xfd, + 0xfb, 0xf2, 0x00, 0x0a, 0x03, 0xfb, 0x01, 0xfc, 0x05, 0xe6, 0xfe, 0xfc, + 0xfe, 0xff, 0x03, 0xfd, 0x16, 0x1b, 0xfe, 0xf9, 0x03, 0xfe, 0x00, 0x03, + 0x26, 0x34, 0x02, 0xef, 0xfd, 0x01, 0x03, 0xfd, 0x15, 0x32, 0x01, 0xf5, + 0xfd, 0xff, 0x04, 0x01, 0x0b, 0x1a, 0xfd, 0xff, 0x02, 0xfe, 0x04, 0x00, + 0x01, 0xf7, 0x01, 0xf9, 0xfe, 0x01, 0x02, 0x01, 0x1c, 0x00, 0x03, 0x00, + 0xfe, 0x02, 0x04, 0xfd, 0xfc, 0x01, 0x03, 0xff, 0xfc, 0x00, 0x02, 0x02, + 0x00, 0xff, 0xfd, 0x0a, 0x00, 0xfd, 0x01, 0xff, 0x03, 0x06, 0x00, 0x08, + 0x01, 0x02, 0x04, 0x01, 0xe9, 0xed, 0xfd, 0xfe, 0xfe, 0xfe, 0x05, 0xfc, + 0x01, 0x04, 0x00, 0x05, 0x02, 0xfe, 0x00, 0xfd, 0xf3, 0xef, 0xfd, 0xfd, + 0xfd, 0xfd, 0xfd, 0xfc, 0xf8, 0x0e, 0xfc, 0x08, 0xfc, 0xfd, 0x01, 0xff, + 0xf2, 0xec, 0x01, 0x0a, 0xfd, 0x02, 0x02, 0x02, 0xef, 0xff, 0xfd, 0x0b, + 0x00, 0xfc, 0x02, 0xff, 0xea, 0xed, 0xff, 0x10, 0x00, 0x02, 0x00, 0x00, + 0xdf, 0xe9, 0xfd, 0x07, 0x01, 0x00, 0x04, 0xfe, 0xe8, 0xf2, 0xff, 0xfc, + 0x03, 0xff, 0x03, 0x00, 0xfb, 0xf8, 0x03, 0x05, 0x03, 0x00, 0xfd, 0x01, + 0x04, 0xe3, 0x00, 0xfd, 0xfc, 0x00, 0x01, 0xff, 0x1b, 0x10, 0xff, 0xfa, + 0x02, 0xff, 0xfe, 0xfd, 0x22, 0x2e, 0x01, 0xef, 0x04, 0xff, 0xfd, 0xfd, + 0x17, 0x2b, 0xfe, 0xf2, 0x02, 0xfe, 0x04, 0x00, 0x0c, 0x1c, 0xfd, 0xfb, + 0xfd, 0xfc, 0x00, 0xfc, 0x01, 0x00, 0xff, 0xfc, 0x03, 0xff, 0x01, 0x04, + 0x21, 0xfe, 0xfc, 0x00, 0x00, 0xfd, 0xfe, 0x02, 0x03, 0x01, 0xfe, 0xfe, + 0xfe, 0x00, 0xfb, 0xfd, 0xfe, 0x00, 0xfd, 0x01, 0xff, 0xfd, 0x00, 0x02, + 0x05, 0x08, 0x00, 0x02, 0x02, 0x01, 0x00, 0x01, 0xdd, 0xec, 0xfd, 0x00, + 0x02, 0xfd, 0xfe, 0x00, 0xfa, 0xfe, 0xfd, 0x06, 0x01, 0x00, 0x00, 0x02, + 0xe7, 0xee, 0x01, 0xfc, 0xfd, 0x01, 0xfd, 0x01, 0xf3, 0x0a, 0x01, 0x06, + 0x01, 0xfc, 0xfb, 0x04, 0xf9, 0xf1, 0x03, 0xfe, 0xfd, 0x01, 0xfe, 0xfd, + 0xfb, 0x02, 0x03, 0x05, 0xfd, 0xff, 0x05, 0xfc, 0xef, 0xee, 0x00, 0x11, + 0x00, 0x02, 0xfd, 0x03, 0xe9, 0xe6, 0x02, 0x08, 0xfd, 0x01, 0xfc, 0x02, + 0xef, 0xf5, 0x01, 0xff, 0x00, 0xfe, 0x00, 0x01, 0xfd, 0xfd, 0x01, 0x0a, + 0x02, 0xfc, 0xff, 0x01, 0x0b, 0xe1, 0x00, 0xfa, 0xfd, 0x00, 0xff, 0xfd, + 0x1b, 0x0d, 0x03, 0xfa, 0x03, 0xfc, 0xff, 0xfc, 0x29, 0x1b, 0x02, 0xed, + 0x03, 0xff, 0x04, 0x02, 0x21, 0x24, 0x02, 0xf5, 0x01, 0xfc, 0x00, 0xff, + 0x19, 0x0d, 0xff, 0xf9, 0x04, 0xfc, 0x04, 0x00, 0x0e, 0xf4, 0xfe, 0xfa, + 0x00, 0x00, 0x07, 0x04, 0x12, 0xf7, 0xfd, 0x01, 0xfd, 0x02, 0x02, 0xfd, + 0xfe, 0xfe, 0xfd, 0x00, 0x01, 0x00, 0x00, 0xff, 0xfe, 0x01, 0x00, 0xfe, + 0xfc, 0xff, 0x02, 0xfd, 0x04, 0x0d, 0xfe, 0x03, 0xfc, 0x00, 0x04, 0xfd, + 0xda, 0xfb, 0xfd, 0xfc, 0xfe, 0x03, 0xfd, 0x04, 0xee, 0x07, 0xfe, 0x02, + 0x00, 0xfc, 0x04, 0x00, 0xe9, 0xf5, 0x03, 0x00, 0xfc, 0x02, 0xfe, 0x04, + 0xf6, 0x0f, 0xfe, 0x08, 0x04, 0x01, 0x01, 0x03, 0xf9, 0xf1, 0x01, 0x00, + 0xff, 0xfe, 0x04, 0x02, 0xf4, 0x01, 0x03, 0x08, 0xfc, 0x01, 0xfd, 0xfc, + 0xe7, 0xf2, 0x03, 0x16, 0xfe, 0xfc, 0x01, 0x01, 0xe6, 0xe3, 0xfd, 0x0d, + 0x02, 0xfc, 0x01, 0x04, 0xef, 0xf6, 0x00, 0x03, 0x02, 0xff, 0x03, 0x00, + 0xff, 0x00, 0xff, 0x09, 0x00, 0xfc, 0xff, 0x00, 0x01, 0xe7, 0x00, 0x00, + 0x02, 0x00, 0xfd, 0x02, 0x19, 0x0a, 0xff, 0xfc, 0xfe, 0xfd, 0x01, 0x00, + 0x20, 0x1a, 0x02, 0xf6, 0x00, 0xfe, 0x02, 0x03, 0x1f, 0x18, 0xff, 0xf8, + 0xfe, 0x03, 0x02, 0xff, 0x15, 0x03, 0xff, 0xf7, 0x04, 0x03, 0xff, 0xfe, + 0x0c, 0xf0, 0xfd, 0xff, 0x01, 0xff, 0xfd, 0x01, 0x06, 0xff, 0x02, 0x01, + 0xfe, 0xfd, 0x01, 0xfe, 0x02, 0xfe, 0xff, 0xfd, 0x04, 0xff, 0x01, 0x02, + 0xff, 0x02, 0x00, 0x00, 0x01, 0xfd, 0x03, 0x01, 0x02, 0x0a, 0xfe, 0x07, + 0x03, 0x03, 0x00, 0xfd, 0xd8, 0xf6, 0xfd, 0xfb, 0xfc, 0x02, 0xfc, 0xfe, + 0xee, 0x0b, 0x03, 0x05, 0x03, 0x01, 0x03, 0x02, 0xec, 0xf6, 0xfd, 0x02, + 0xfc, 0x03, 0x00, 0x03, 0xf9, 0x0b, 0xff, 0x05, 0xfd, 0x01, 0x00, 0x01, + 0xf1, 0xfc, 0x00, 0x03, 0x03, 0xfc, 0x01, 0xfe, 0xe9, 0x09, 0xfe, 0x0c, + 0xff, 0xfd, 0xfd, 0x02, 0xdf, 0xed, 0x00, 0x14, 0x03, 0xfd, 0x00, 0xfd, + 0xd7, 0xdc, 0xff, 0x02, 0xfd, 0xfc, 0x03, 0x03, 0xdf, 0xf0, 0xfe, 0x00, + 0x02, 0xfe, 0x00, 0x04, 0xf3, 0x01, 0x01, 0x07, 0x01, 0x01, 0xff, 0x01, + 0xf1, 0xe5, 0x01, 0xff, 0xff, 0x00, 0x01, 0x00, 0x07, 0x08, 0x01, 0xf7, + 0xff, 0x01, 0x04, 0x04, 0x19, 0x1b, 0x04, 0xf8, 0xfc, 0xff, 0x00, 0x02, + 0x12, 0x14, 0x02, 0xff, 0x03, 0xfc, 0x03, 0xff, 0x05, 0x06, 0xfe, 0xfd, + 0xff, 0xfd, 0x01, 0x01, 0xfd, 0xf5, 0xff, 0xf7, 0x03, 0x03, 0x03, 0x00, + 0xd2, 0xff, 0x00, 0x00, 0xff, 0xfe, 0xfe, 0xff, 0xfe, 0x03, 0xfe, 0xfd, + 0x00, 0xfc, 0xfc, 0xff, 0x01, 0xff, 0x01, 0x08, 0xff, 0x02, 0xff, 0x00, + 0x01, 0x09, 0xfd, 0x05, 0xff, 0xfd, 0x01, 0x04, 0xd3, 0xff, 0xfd, 0xfc, + 0x00, 0xff, 0x03, 0x00, 0xf7, 0x10, 0x00, 0x05, 0x00, 0x03, 0x04, 0x02, + 0xea, 0xf6, 0xfc, 0xf7, 0xfc, 0x02, 0x05, 0xfe, 0xf4, 0x0d, 0x01, 0x08, + 0x02, 0x02, 0x01, 0x00, 0xf4, 0xf8, 0xfd, 0x00, 0x03, 0xfd, 0x02, 0x04, + 0xe5, 0x08, 0x01, 0x05, 0xfe, 0x03, 0xfe, 0x04, 0xda, 0xec, 0x01, 0x12, + 0x00, 0x00, 0xff, 0xfe, 0xcf, 0xde, 0x01, 0x07, 0xfe, 0x00, 0x03, 0x03, + 0xd7, 0xf2, 0x04, 0xf9, 0xfe, 0xfe, 0x02, 0x03, 0xe4, 0x00, 0xff, 0x04, + 0xfe, 0x00, 0x03, 0xfe, 0xe3, 0xe1, 0x03, 0x04, 0x03, 0xfc, 0xfc, 0xfe, + 0x01, 0x0b, 0x02, 0xfc, 0x02, 0xff, 0xfe, 0xfe, 0x05, 0x1a, 0xfc, 0xf8, + 0x02, 0xfe, 0x04, 0xfd, 0x0c, 0x15, 0x04, 0xf9, 0x02, 0xfc, 0xfe, 0xfd, + 0x00, 0x0c, 0x04, 0xfc, 0xff, 0xfe, 0x00, 0xfc, 0xf7, 0xf6, 0x04, 0xf8, + 0x01, 0xff, 0x00, 0x01, 0xe0, 0xfc, 0xfd, 0x02, 0x00, 0x00, 0xff, 0xfd, + 0xfd, 0x04, 0xfc, 0xff, 0xfd, 0x01, 0x01, 0x01, 0xfe, 0xff, 0xfd, 0x05, + 0xfe, 0xff, 0x01, 0x02, 0x03, 0x04, 0x03, 0x05, 0xfc, 0x01, 0x02, 0xfd, + 0xde, 0x00, 0x02, 0xfe, 0x01, 0x01, 0xfe, 0xff, 0xf3, 0x15, 0x03, 0x03, + 0x00, 0x01, 0xff, 0xfe, 0xe6, 0xfc, 0x00, 0xfd, 0x03, 0xfd, 0xfe, 0x01, + 0xfb, 0x0e, 0x00, 0x06, 0x01, 0x03, 0xfe, 0xfe, 0xf4, 0xf1, 0x04, 0x03, + 0x00, 0xfc, 0xfe, 0xff, 0xea, 0x07, 0xfd, 0x06, 0x01, 0xfc, 0xfd, 0x04, + 0xd8, 0xf1, 0x00, 0x0f, 0x03, 0xfe, 0xff, 0x02, 0xd2, 0xd9, 0xff, 0x06, + 0xfd, 0xfc, 0x03, 0xfd, 0xd7, 0xf0, 0xff, 0xfa, 0x03, 0xff, 0xfc, 0x04, + 0xec, 0x07, 0x01, 0x0b, 0x03, 0xfc, 0xfe, 0x03, 0xdf, 0xe6, 0x02, 0xfd, + 0x01, 0xff, 0x01, 0x00, 0xf5, 0x11, 0xfe, 0xf9, 0xff, 0xff, 0xff, 0xfd, + 0x03, 0x1a, 0xfd, 0xf7, 0x00, 0x00, 0xff, 0x03, 0x02, 0x1a, 0x04, 0xf4, + 0x00, 0xfe, 0x06, 0x01, 0x03, 0x0e, 0x01, 0xfe, 0xfc, 0xff, 0x00, 0xff, + 0xf2, 0xf8, 0x00, 0xf5, 0xfc, 0x02, 0x05, 0xfe, 0xd8, 0x02, 0x04, 0x01, + 0xfc, 0x02, 0x02, 0xfe, 0x00, 0x01, 0x03, 0x00, 0x02, 0xfc, 0x01, 0xfd, + 0x00, 0x02, 0x02, 0x09, 0x04, 0x03, 0x03, 0x03, 0x02, 0x0a, 0xfd, 0x02, + 0x03, 0xfc, 0xfe, 0x00, 0xd9, 0xfd, 0xfd, 0x01, 0xff, 0xfd, 0x00, 0x01, + 0xf9, 0x0e, 0x00, 0x01, 0xff, 0xff, 0x00, 0x03, 0xe9, 0xfd, 0x01, 0xfa, + 0x01, 0xfc, 0x04, 0x01, 0xf2, 0x13, 0x03, 0x05, 0xfd, 0x02, 0x01, 0x03, + 0xf4, 0xf5, 0xfe, 0x06, 0xfe, 0x02, 0xfd, 0x03, 0xe6, 0x07, 0x04, 0x01, + 0xff, 0x02, 0x02, 0x02, 0xdc, 0xea, 0xfe, 0x13, 0xfd, 0xff, 0x03, 0xfd, + 0xcf, 0xd7, 0xfe, 0x04, 0xfe, 0x03, 0xfe, 0xfe, 0xd7, 0xf2, 0xfd, 0xfc, + 0x02, 0xfc, 0x04, 0xff, 0xe1, 0xfe, 0x00, 0x09, 0x03, 0xff, 0x02, 0x04, + 0xe2, 0xeb, 0x02, 0x01, 0xfe, 0xfd, 0x04, 0x02, 0xf9, 0x09, 0x02, 0xfc, + 0xff, 0xfb, 0x01, 0x04, 0x00, 0x16, 0x03, 0xfc, 0x00, 0x00, 0xfd, 0xfe, + 0x06, 0x16, 0xfc, 0xfb, 0xff, 0x00, 0x04, 0x00, 0xfc, 0x0d, 0xfe, 0xfd, + 0xff, 0xfe, 0x01, 0xfd, 0xf4, 0xf9, 0x04, 0xf7, 0x02, 0x02, 0x04, 0x02, + 0xd0, 0xfe, 0xfd, 0x02, 0x03, 0x01, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0x00, + 0x03, 0xfd, 0x00, 0x02, 0x03, 0x01, 0x02, 0x08, 0xfc, 0xfe, 0x01, 0xfe, + 0xff, 0x02, 0xfd, 0x04, 0x03, 0xff, 0xfe, 0xfc, 0xeb, 0x06, 0xfe, 0xeb, + 0xff, 0x03, 0x04, 0x01, 0xe3, 0x10, 0x03, 0xfa, 0x04, 0xfc, 0xff, 0x01, + 0xd6, 0x0a, 0x00, 0xee, 0xfd, 0x05, 0x03, 0x04, 0xe2, 0x14, 0xfe, 0xf7, + 0xff, 0xfc, 0xfe, 0xfd, 0xec, 0x03, 0xff, 0xf9, 0x00, 0xfe, 0xfe, 0x02, + 0xf1, 0x05, 0x00, 0xfe, 0xfe, 0xfd, 0x03, 0x02, 0xf7, 0xf0, 0x02, 0x0d, + 0x03, 0xfd, 0x00, 0x02, 0xf4, 0xe6, 0xfd, 0x01, 0x01, 0x02, 0xfe, 0x04, + 0xf2, 0xef, 0x02, 0xf8, 0xfe, 0x02, 0xfd, 0x01, 0xfc, 0xfa, 0x03, 0x07, + 0x01, 0x00, 0xfd, 0xfe, 0xf9, 0xe6, 0x02, 0xf8, 0xff, 0x03, 0xff, 0xff, + 0xf1, 0x07, 0xfe, 0xf8, 0x03, 0x02, 0xff, 0xfd, 0xf9, 0x11, 0x00, 0xee, + 0x01, 0xfd, 0xfc, 0x03, 0xf9, 0x11, 0x00, 0xf0, 0xfd, 0xff, 0xfd, 0x02, + 0xfb, 0x04, 0x03, 0xf3, 0x02, 0x02, 0xfe, 0x02, 0xfb, 0xfd, 0x00, 0xf3, + 0x04, 0x01, 0xff, 0x00, 0xfd, 0xfb, 0x03, 0xfe, 0x01, 0x02, 0xfe, 0xff, + 0x00, 0x02, 0xfe, 0x00, 0x02, 0x01, 0xff, 0x01, 0xfc, 0x00, 0x03, 0xff, + 0x02, 0xff, 0x00, 0x01, 0x03, 0x05, 0x03, 0x03, 0x00, 0x01, 0x01, 0x03, + 0x00, 0x03, 0x00, 0xfe, 0xfd, 0x01, 0x03, 0xfc, 0xff, 0x08, 0x02, 0xfc, + 0x02, 0xfd, 0xfe, 0xfc, 0x02, 0x08, 0x00, 0x03, 0xfd, 0x00, 0xfd, 0xff, + 0xfe, 0x0c, 0x01, 0xff, 0xfc, 0x00, 0x00, 0xfe, 0xfc, 0x06, 0x03, 0x02, + 0x00, 0x01, 0x04, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x04, 0x03, 0xfd, 0x02, + 0x03, 0xfc, 0xff, 0x04, 0x02, 0x00, 0x02, 0xfe, 0x01, 0xf1, 0x03, 0x02, + 0x03, 0x01, 0xfd, 0x02, 0x03, 0xfc, 0x03, 0x02, 0x01, 0x02, 0x01, 0xfc, + 0x03, 0xfd, 0xfd, 0xff, 0x03, 0x03, 0x03, 0x00, 0xfd, 0xf8, 0xfc, 0xfc, + 0x03, 0xff, 0x01, 0x01, 0x01, 0xfa, 0xff, 0x01, 0xfe, 0xfc, 0xfc, 0x03, + 0xfd, 0x03, 0x00, 0xff, 0xfe, 0x04, 0x00, 0xff, 0xff, 0x00, 0xfd, 0xfe, + 0x02, 0x01, 0xfe, 0xff, 0x03, 0x06, 0xfd, 0x03, 0x01, 0x00, 0xff, 0x00, + 0x00, 0x02, 0x00, 0x03, 0x03, 0x03, 0xfe, 0x01, 0x03, 0xf7, 0xfe, 0x02, + 0xfc, 0x01, 0x02, 0xff, 0xfe, 0x00, 0x01, 0xff, 0x02, 0x02, 0x01, 0xfd, + 0x02, 0xff, 0xfc, 0xfc, 0xfe, 0x00, 0x02, 0x03, 0xfd, 0x00, 0xfe, 0xfc, + 0x01, 0xfe, 0x02, 0xfe, 0xfd, 0x02, 0x02, 0x02, 0x04, 0xfe, 0xff, 0x01, + 0x04, 0xff, 0xfd, 0xfd, 0xfe, 0x00, 0xfe, 0x02, 0x02, 0x01, 0x03, 0x03, + 0xfe, 0xfd, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x03, 0x01, 0xfd, 0xfc, 0x00, + 0xfe, 0x00, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x03, 0x03, 0x00, 0x04, 0x00, + 0x03, 0xfe, 0x00, 0x02, 0x02, 0xfd, 0x00, 0x02, 0x00, 0xfd, 0x01, 0x04, + 0xfe, 0x00, 0x02, 0xfc, 0x01, 0x02, 0xfe, 0xfd, 0x03, 0x02, 0x02, 0x00, + 0x00, 0x01, 0x02, 0xff, 0x00, 0x00, 0xfc, 0xfd, 0xfe, 0x02, 0xfd, 0x01, + 0x02, 0xfe, 0xfc, 0x03, 0x01, 0xfd, 0xfd, 0x01, 0x01, 0xff, 0xfe, 0x04, + 0x00, 0xfe, 0xfd, 0x02, 0xfd, 0xfe, 0xfd, 0x01, 0xfd, 0x01, 0xff, 0x04, + 0x01, 0x03, 0x03, 0x02, 0x02, 0x00, 0xfe, 0xff, 0x01, 0xfe, 0xfe, 0xfe, + 0x02, 0xfd, 0x01, 0x02, 0xfd, 0xfe, 0xfe, 0xfe, 0x03, 0x03, 0x01, 0xff, + 0x01, 0xfc, 0xfe, 0xfd, 0x03, 0x03, 0x04, 0xfd, 0xfe, 0xff, 0x04, 0xff, + 0x03, 0xfd, 0x00, 0x00, 0x7a, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0xbf, 0x19, 0x00, 0x00, 0x5b, 0xfb, 0xff, 0xff, + 0x39, 0xf9, 0xff, 0xff, 0x83, 0xf9, 0xff, 0xff, 0xc4, 0xf8, 0xff, 0xff, + 0x9a, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xa0, 0x0f, 0x00, 0x00, 0xaa, 0xfe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xba, 0xfe, 0xff, 0xff, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xf6, 0xff, 0xff, 0x1c, 0xf6, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, + 0x4d, 0x4c, 0x49, 0x52, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, + 0x65, 0x64, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, + 0x14, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, + 0x54, 0x01, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, + 0x8c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xce, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x5a, 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0x3f, 0x01, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, + 0x0b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0xe8, 0xf6, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x76, 0xff, 0xff, 0xff, + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x1c, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xb2, 0xff, 0xff, 0xff, + 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, + 0x0b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x37, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x07, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x16, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, + 0x0b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, + 0x08, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, + 0x68, 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0xbc, 0x06, 0x00, 0x00, + 0x1c, 0x06, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x6c, 0x04, 0x00, 0x00, + 0x88, 0x03, 0x00, 0x00, 0x8c, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, + 0xf0, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x72, 0xf8, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x05, 0x00, 0x00, 0x00, 0x54, 0xf8, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3b, + 0x1b, 0x00, 0x00, 0x00, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43, + 0x61, 0x6c, 0x6c, 0x5f, 0x31, 0x3a, 0x30, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xea, 0xf8, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x70, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x05, 0x00, 0x00, 0x00, 0xcc, 0xf8, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x0b, 0x0a, 0x3e, + 0x38, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x76, 0x5f, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x74, 0x73, 0x5f, 0x31, + 0x2f, 0x4d, 0x61, 0x74, 0x4d, 0x75, 0x6c, 0x3b, 0x74, 0x69, 0x6e, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, + 0x74, 0x73, 0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64, 0x64, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x82, 0xf9, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, + 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x54, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0f, 0x00, 0x00, + 0x64, 0xf9, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x8c, 0x20, 0x80, 0x3c, 0x1d, 0x00, 0x00, 0x00, + 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, + 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x31, 0x2f, 0x52, 0x65, + 0x73, 0x68, 0x61, 0x70, 0x65, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xa0, 0x0f, 0x00, 0x00, 0x72, 0xfa, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, + 0x5c, 0xfa, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x66, 0x6c, 0x61, 0x74, + 0x74, 0x65, 0x6e, 0x5f, 0x31, 0x2f, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, + 0x65, 0x2f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0xc2, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, + 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0xac, 0xfa, 0xff, 0xff, + 0x23, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x76, 0x5f, 0x31, 0x2f, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x5f, + 0x31, 0x2f, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x6c, + 0x69, 0x63, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xfb, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x28, 0x00, 0x00, 0x00, + 0xf8, 0xfa, 0xff, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x66, 0x6c, 0x61, 0x74, + 0x74, 0x65, 0x6e, 0x5f, 0x31, 0x2f, 0x53, 0x68, 0x61, 0x70, 0x65, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe2, 0xfa, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0xb0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0xcc, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x8c, 0x20, 0x80, 0x3c, 0x73, 0x00, 0x00, 0x00, + 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, + 0x64, 0x77, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x52, 0x65, 0x6c, + 0x75, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, + 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x42, + 0x69, 0x61, 0x73, 0x41, 0x64, 0x64, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x5f, + 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, 0x6e, + 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, 0x73, + 0x65, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, + 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x53, + 0x71, 0x75, 0x65, 0x65, 0x7a, 0x65, 0x31, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x18, 0x00, + 0x17, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x28, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x09, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x7b, 0xa2, 0xee, 0x3a, + 0xe1, 0xb4, 0x3d, 0x3b, 0x21, 0x3d, 0x49, 0x3a, 0x18, 0x20, 0xd7, 0x3a, + 0x49, 0x12, 0x4a, 0x3a, 0xc6, 0x56, 0x55, 0x3a, 0x2b, 0xfc, 0x7a, 0x3a, + 0x03, 0x9a, 0x49, 0x3a, 0x1e, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, + 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, + 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x77, 0x69, + 0x73, 0x65, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x2e, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0xf0, 0x00, 0x00, 0x00, 0x8c, 0xfc, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x00, 0x00, 0x08, 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, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x0e, 0x92, 0xef, 0x36, 0x55, 0x73, 0x3e, 0x37, + 0x29, 0x07, 0x4a, 0x36, 0x11, 0xf8, 0xd7, 0x36, 0x27, 0xdd, 0x4a, 0x36, + 0xf4, 0x2c, 0x56, 0x36, 0x24, 0xf8, 0x7b, 0x36, 0x68, 0x64, 0x4a, 0x36, + 0x72, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, + 0x2f, 0x52, 0x65, 0x6c, 0x75, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, + 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, 0x6e, 0x76, + 0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, 0x73, 0x41, 0x64, 0x64, 0x3b, 0x74, + 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, + 0x77, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x65, 0x70, 0x74, + 0x68, 0x77, 0x69, 0x73, 0x65, 0x3b, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, + 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, 0x64, 0x77, 0x63, 0x6f, 0x6e, 0x76, + 0x5f, 0x31, 0x2f, 0x53, 0x71, 0x75, 0x65, 0x65, 0x7a, 0x65, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3e, 0xfe, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x74, 0x00, 0x00, 0x00, + 0x9c, 0xfd, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x05, 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, 0x05, 0x00, 0x00, 0x00, + 0xd8, 0x55, 0x15, 0x3c, 0xc6, 0xae, 0x12, 0x3c, 0x41, 0x0f, 0x23, 0x3c, + 0xa1, 0xb4, 0x28, 0x3c, 0xfa, 0x15, 0x1f, 0x3c, 0x1b, 0x00, 0x00, 0x00, + 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, + 0x6c, 0x6f, 0x67, 0x69, 0x74, 0x73, 0x5f, 0x31, 0x2f, 0x4d, 0x61, 0x74, + 0x4d, 0x75, 0x6c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xa0, 0x0f, 0x00, 0x00, 0xd6, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, + 0x14, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x7c, 0x00, 0x00, 0x00, 0x34, 0xfe, 0xff, 0xff, + 0x08, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x05, 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, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xd1, 0x7b, 0x15, 0x39, 0x12, 0xd4, 0x12, 0x39, 0xb7, 0x38, 0x23, 0x39, + 0x87, 0xdf, 0x28, 0x39, 0x6d, 0x3e, 0x1f, 0x39, 0x1c, 0x00, 0x00, 0x00, + 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x76, 0x5f, 0x31, 0x2f, + 0x6c, 0x6f, 0x67, 0x69, 0x74, 0x73, 0x5f, 0x31, 0x2f, 0x42, 0x69, 0x61, + 0x73, 0x41, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x72, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, + 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x34, 0x00, 0x00, 0x00, 0x5c, 0xff, 0xff, 0xff, + 0x25, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x76, 0x5f, 0x31, 0x2f, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x5f, + 0x31, 0x2f, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x2f, 0x73, 0x68, + 0x61, 0x70, 0x65, 0x2f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc2, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x00, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x1c, 0x00, 0x00, 0x00, 0xac, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, + 0x61, 0x72, 0x69, 0x74, 0x68, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x74, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x16, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x17, 0x00, 0x10, 0x00, + 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x3c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x29, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6e, 0x79, 0x5f, 0x63, 0x6f, 0x6e, + 0x76, 0x5f, 0x31, 0x2f, 0x66, 0x6c, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x5f, + 0x31, 0x2f, 0x73, 0x74, 0x72, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x6c, + 0x69, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, + 0x20, 0x00, 0x1c, 0x00, 0x1b, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x60, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x31, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x81, 0x80, 0x80, 0x3b, 0x17, 0x00, 0x00, 0x00, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, 0x6c, 0x34, 0x30, 0x3a, 0x30, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xa4, 0xff, 0xff, 0xff, 0x19, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xb4, 0xff, 0xff, 0xff, + 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0xdc, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, + 0xe8, 0xff, 0xff, 0xff, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, + 0xf4, 0xff, 0xff, 0xff, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x0c, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, + 0x0c, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, +}; + +const size_t g_sof_tflm_quantized_model_data_size = 24208; diff --git a/src/audio/tensorflow/sof_tflm_quantized_model_data.h b/src/audio/tensorflow/sof_tflm_quantized_model_data.h new file mode 100644 index 000000000000..885a133b169f --- /dev/null +++ b/src/audio/tensorflow/sof_tflm_quantized_model_data.h @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Auto-generated by sof_tflm_train.py — do not edit. + +#ifndef G_SOF_TFLM_QUANTIZED_MODEL_DATA_H_ +#define G_SOF_TFLM_QUANTIZED_MODEL_DATA_H_ + +#include +#include + +extern const unsigned char g_sof_tflm_quantized_model_data[]; +extern const size_t g_sof_tflm_quantized_model_data_size; + +#endif // G_SOF_TFLM_QUANTIZED_MODEL_DATA_H_ From fdabc0c200f879574468bee7555bc1f532e42f42 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Wed, 22 Jul 2026 21:07:06 +0100 Subject: [PATCH 05/12] audio: tflm: add wake-word inference component with KPB trigger Introduce a TensorFlow Lite Micro-based keyword-detection component that runs an int8-quantized micro-speech model on the mel features from the MFCC component. The key-phrase buffer (KPB) sits ahead of MFCC in the pipeline; on a positive keyword the TFLM component posts a KPB trigger notification so the host can drain the buffered audio. Also includes tensor byte-sizing fixes for the int8 input path, per-hop mel feature requantization that strips the MFCC header and avoids float math on the DSP, and stream-shutdown event logging so the host sees a clean end-of-capture on trigger. Signed-off-by: Seppo Ingalsuo --- src/audio/tensorflow/CMakeLists.txt | 387 ++------- src/audio/tensorflow/Kconfig | 22 + .../micro_speech_quantized_model_data.cc | 5 - .../micro_speech_quantized_model_data.h | 4 - src/audio/tensorflow/speech.cc | 87 ++- src/audio/tensorflow/speech.h | 29 +- src/audio/tensorflow/tflm-classify.c | 739 +++++++++++++++--- 7 files changed, 824 insertions(+), 449 deletions(-) delete mode 100644 src/audio/tensorflow/micro_speech_quantized_model_data.cc delete mode 100644 src/audio/tensorflow/micro_speech_quantized_model_data.h diff --git a/src/audio/tensorflow/CMakeLists.txt b/src/audio/tensorflow/CMakeLists.txt index 27b2e7c720c4..05706827ce10 100644 --- a/src/audio/tensorflow/CMakeLists.txt +++ b/src/audio/tensorflow/CMakeLists.txt @@ -1,17 +1,9 @@ # Copyright (c) 2025 Intel Corporation. # SPDX-License-Identifier: Apache-2.0 -# Newer xt-clang LLVMs accept this to keep literals in .rodata; older -# xt-clang (e.g. RI-2022.10, LLVM 10) rejects the sub-option. Detect it. -set(TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG "") +# -mllvm --text-section-literals=false is a Clang-only flag; guard it if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag("-mllvm --text-section-literals=false" - TFLM_HAS_MLLVM_TEXT_SECTION_LITERALS_FALSE) - if(TFLM_HAS_MLLVM_TEXT_SECTION_LITERALS_FALSE) - set(TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG -mllvm --text-section-literals=false) - add_compile_options(${TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG}) - endif() + add_compile_options(-mllvm --text-section-literals=false) endif() # are we building the llext module ? @@ -56,64 +48,37 @@ set(TFLM_HAL_SOC_PATH ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/${SOC_TOOL if(TENSORFLOW_HAVE_NNLIB_HIFI4) +# nnlib-hifi4 requires Cadence XCC/Clang-specific TIE headers (xtensa/tie/xt_hifi2.h) +# and therefore can ONLY be built with Clang. Skip entirely when using gcc. +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + add_library(nn_hifi_lib STATIC ${NN_HIFI_PATH}/algo/common/src/xa_nnlib_common_api.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_pad_8.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_stride_slice_int16.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_batch_to_space_nd_8.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_transpose_8.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_depth_to_space_8.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_pad_16.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_stride_slice_int32.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_space_to_batch_nd_8.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_pad_32.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_stride_slice_int8.c - ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_space_to_depth_8.c ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_32_32.c ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_f32_f32.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_sym16_sym16.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_softmax_asym8_asym8.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_32_16.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_16_16.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_8_8.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_asym16_asym16.c - ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_32_8.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_16x16_16_circ_nb.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_16x16.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_16x16.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_transpose_conv_circ_buf.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_group_sym8sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_asym8xasym8_asym8_circ_nb.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_sym8sxasym8s.c + ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_add_f32.c + ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_sub_f32.c + ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_mul_f32.c + ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_abs_f32.c + ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/nanf_tbl.c + ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/inff_tbl.c + ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/pow2f_tbl.c + ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/expf_tbl.c + ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_8x8_8_circ.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_sym8sxsym16s.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_8x16.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_circ_buf.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_8x8.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_16x16_16_circ.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_transpose_conv_f32.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_f32.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_f32_circ.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_circ_buf.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_transpose_conv_sym8sxasym8s.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_8x16_16_circ.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_sym8sxsym16s_sym16s_circ.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv1d_std_8x8.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_8x16.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_sym8sxsym16s.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_f32.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_f32_circ_nb.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_sym8sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_asym8xasym8_asym8_circ.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_sym8sxasym8s.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_8x8.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_transpose_conv_sym8sxsym16s.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_f32.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv1d_std_8x16.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_8x8.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_16x16.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_sym8sxasym8s_asym8s_circ.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_pointwise_asym8xasym8.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_asym8xasym8.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv1d_std_circ_buf.c @@ -121,117 +86,11 @@ add_library(nn_hifi_lib STATIC ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_8x16_16_circ_nb.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv1d_std_16x16.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_matXvec_8x8_8_circ_nb.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_std_sym4sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv1d_std_f32.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_sym8sxsym16s.c ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_asym8xasym8.c - ${NN_HIFI_PATH}/algo/kernels/cnn/hifi4/xa_nn_conv2d_depthwise_8x16.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_f32.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_asym8xasym8_batch.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_sym8sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_8x8.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_8x16.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_asym4sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_sym8sxsym16s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_f32_batch.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_f32.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_16x16_batch.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_sym8sxsym16s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_asym8sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_16x8.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_8x16.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_8x8.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_asym8sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_asym8xasym8.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matmul_16x16.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_8x16_batch.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_16x16.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_asym8xasym8.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_sym8sxasym8s.c - ${NN_HIFI_PATH}/algo/kernels/matXvec/hifi4/xa_nn_matXvec_8x8_batch.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_f32.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_8.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_asym8_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_f32_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_16_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_16.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_16_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_asym8.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_inv_256_tbl.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_8_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_16.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_8.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_f32_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_asym8_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_f32.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_maxpool_asym8.c - ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_avgpool_8_nhwc.c - ${NN_HIFI_PATH}/algo/kernels/norm/hifi4/xa_nn_l2_norm_asym8s.c - ${NN_HIFI_PATH}/algo/kernels/norm/hifi4/xa_nn_l2_norm_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_sqrt_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_mul_16x16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_add_quant8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_mul_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_lstm_utils.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_dot_prod_16x16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_sub_quant16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_round_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_mul_acc_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_cosine_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_reduce_asym8s_asym8s.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_memset_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_floor_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_squared_diff_quant8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_add_quant16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_reduce_asym16s_asym16s.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_minmax_8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_logn_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_div_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_sub_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_compare_quant8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_logical_bool.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_broadcast_8_8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_quantize.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_neg_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_mul_quant16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_add_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_vec_interpolation_q15.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_square_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_sine_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_abs_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_memmove.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_mul_quant8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_squared_diff_quant16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_memmove_16.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_sub_quant8.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_ceil_f32.c - ${NN_HIFI_PATH}/algo/kernels/basic/hifi4/xa_nn_elm_rsqrt_f32.c ${NN_HIFI_PATH}/algo/kernels/fc/hifi4/xa_nn_fully_connected.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_tanh32x32_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/scl_sigmoidf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/inv2pif_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/nanf_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/pow2f_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_sigmoidf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_reluf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/expf_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_tanhf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_sigmoid32x32_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/lognf_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/sinf_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_cosinef_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_sinef_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_softmaxf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/scl_tanhf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_softmax32x32_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_lognf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/sqrt2f_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/inff_tbl.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_alognf_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/vec_relu32x32_hifi4.c - ${NN_HIFI_PATH}/algo/ndsp/hifi4/src/tanhf_tbl.c + ${NN_HIFI_PATH}/algo/kernels/pool/hifi4/xa_nn_inv_256_tbl.c + ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_transpose_8.c + ${NN_HIFI_PATH}/algo/kernels/reorg/hifi4/xa_nn_pad_8.c ) target_include_directories(nn_hifi_lib PRIVATE @@ -239,36 +98,44 @@ target_include_directories(nn_hifi_lib PRIVATE ${NN_HIFI_PATH}/algo/common/include/ ${NN_HIFI_PATH}/include/nnlib/ ${NN_HIFI_PATH}/algo/ndsp/hifi4/include - ${TFLM_TOOLCHAIN_INCLUDE_ROOT} - ${TFLM_HAL_SOC_PATH} + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include + ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/intel_ace15_mtpm ) target_compile_options(nn_hifi_lib PRIVATE - ${TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG} + -mllvm --text-section-literals=false ) -endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 +endif() # CMAKE_C_COMPILER_ID STREQUAL "Clang" -if(TENSORFLOW_HAVE_NNLIB_HIFI4) +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") # TODO: Need to detect and add mul16/32 options. -#ifeq "$(has_mul16)" "0" -#CFLAGS += -mno-mul16 -#endif -#ifeq "$(has_mul32)" "0" -#CFLAGS += -mno-mul32 -mno-div32 -#endif +target_compile_definitions(nn_hifi_lib PRIVATE + -DHIFI4=1 + -DHAVE_VFPU=1 + -DHAVE_VFPU_SINGLE_PRECISION=1 + -DXCHAL_HAVE_HIFI4=1 + -DXCHAL_HAVE_HIFI4_VFPU=1 + + __xtensa__=1 + __XTENSA__=1 + __XCC__ + __XCC_CLANG__ + "XT_MAX(a,b)=((a)>(b)?(a):(b))" + "XT_MIN(a,b)=((a)<(b)?(a):(b))" + "AE_MOVINT16_FROMINT32(v)=((ae_int16)(v))" + "AE_CVT64F32_H(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_H(v))" + "AE_CVT64F32_L(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_L(v))" +) + target_compile_options(nn_hifi_lib PRIVATE -fsigned-char -fno-exceptions -mlongcalls - -INLINE:requested - -mcoproc -fno-zero-initialized-in-bss - -mtext-section-literals -Wsign-compare - -m32 -DMODEL_INT16 -DNNLIB_V2 -Dhifi4 @@ -280,12 +147,12 @@ target_compile_definitions(nn_hifi_lib PRIVATE __XCC_CLANG__ ) target_compile_options(nn_hifi_lib PRIVATE - -mcpu=${SOC_TOOLCHAIN_NAME} + -mcpu=intel_ace15_mtpm "SHELL:-include xtensahifiintrin.h" "SHELL:-include ${NN_HIFI_PATH}/algo/common/include/xa_nnlib_hifi_isa_compat.h" ) -endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 (nn_hifi_lib defs/opts) +endif() # CMAKE_C_COMPILER_ID STREQUAL "Clang" (nn_hifi_lib defs/opts) # TODO: complete sources have been added here from userspace build but @@ -365,7 +232,7 @@ add_library(tflm_lib STATIC #${TFLM_PATH}/tensorflow/lite/micro/kernels/mul_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/mul.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/neg.cc - #${TFLM_PATH}/tensorflow/lite/micro/kernels/pack.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/pack.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/pooling_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/prelu_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/prelu.cc @@ -377,7 +244,7 @@ add_library(tflm_lib STATIC #${TFLM_PATH}/tensorflow/lite/micro/kernels/resize_nearest_neighbor.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/round.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/select.cc - #${TFLM_PATH}/tensorflow/lite/micro/kernels/shape.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/shape.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/slice.cc ${TFLM_PATH}/tensorflow/lite/micro/kernels/softmax_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/space_to_batch_nd.cc @@ -386,7 +253,8 @@ add_library(tflm_lib STATIC #${TFLM_PATH}/tensorflow/lite/micro/kernels/split_v.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/squared_difference.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/squeeze.cc - #${TFLM_PATH}/tensorflow/lite/micro/kernels/strided_slice_common.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/strided_slice.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/strided_slice_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/sub_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/svdf_common.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/tanh.cc @@ -395,46 +263,12 @@ add_library(tflm_lib STATIC #${TFLM_PATH}/tensorflow/lite/micro/kernels/var_handle.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/while.cc #${TFLM_PATH}/tensorflow/lite/micro/kernels/zeros_like.cc - # xtensa kernels - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/sub.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv_hifi.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/pooling_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/softmax_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/unidirectional_sequence_lstm.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/transpose_conv.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/fully_connected_common_xtensa.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/lstm_eval_hifi.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/add_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/depthwise_conv.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/reshape.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/softmax.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/depthwise_conv_hifi.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv_int16_reference.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv_int8_reference.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/fully_connected_int8.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/pad_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/fully_connected_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv_int8_int16.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/softmax_int8_int16.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/logistic.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/reduce.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/lstm_eval.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/reshape_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/pad.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/reduce_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/dequantize.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/add.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/pooling_int8.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/depthwise_conv_vision.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/strided_slice.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv_common_xtensa.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/svdf.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/fully_connected.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/leaky_relu.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/quantize.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/pooling.cc - ${TFLM_PATH}/tensorflow/lite/micro/kernels/xtensa/conv_vision.cc + # reference kernels for speech model ops + ${TFLM_PATH}/tensorflow/lite/micro/kernels/conv.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/depthwise_conv.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/fully_connected.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/reshape.cc + ${TFLM_PATH}/tensorflow/lite/micro/kernels/softmax.cc ${TFLM_PATH}/tensorflow/lite/micro/mock_micro_graph.cc ${TFLM_PATH}/tensorflow/lite/micro/flatbuffer_utils.cc ${TFLM_PATH}/tensorflow/lite/micro/micro_interpreter_graph.cc @@ -456,7 +290,8 @@ add_library(tflm_lib STATIC ${TFLM_PATH}/tensorflow/lite/micro/micro_profiler.cc ${TFLM_PATH}/tensorflow/lite/micro/micro_time.cc #${TFLM_PATH}/tensorflow/lite/micro/static_vector_test.cc - ${TFLM_PATH}/tensorflow/lite/micro/debug_log.cc + # debug_log.cc is replaced by our printk-backed DebugLog() in tflm-classify.c. + #${TFLM_PATH}/tensorflow/lite/micro/debug_log.cc ${TFLM_PATH}/tensorflow/lite/micro/test_helpers.cc ${TFLM_PATH}/tensorflow/lite/micro/micro_op_resolver.cc ${TFLM_PATH}/tensorflow/lite/micro/recording_micro_allocator.cc @@ -467,7 +302,7 @@ add_library(tflm_lib STATIC ${TFLM_PATH}/tensorflow/lite/micro/memory_planner/linear_memory_planner.cc ${TFLM_PATH}/tensorflow/lite/micro/micro_utils.cc ${TFLM_PATH}/tensorflow/lite/micro/micro_interpreter.cc - micro_speech_quantized_model_data.cc + sof_tflm_quantized_model_data.cc speech.cc ) @@ -484,6 +319,9 @@ if(TENSORFLOW_HAVE_NNLIB_HIFI4) target_include_directories(tflm_lib PRIVATE ${NN_HIFI_PATH} ${NN_HIFI_PATH}/include + ${sof_top_dir}/posix/include + ${sof_top_dir}/../modules/hal/xtensa/include + ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/intel_ace15_mtpm ) endif() @@ -494,12 +332,6 @@ endif() #ifeq "$(has_mul32)" "0" #CFLAGS += -mno-mul32 -mno-div32 #endif - -# These select/enable the HiFi4 nnlib-optimized code paths in some TFLM -# kernels. Only valid when nn_hifi_lib is actually built and linked -- -# forcing XCHAL_HAVE_HIFI4 on a non-HiFi4 target risks enabling HiFi4-only -# branches in system/toolchain headers that don't apply to this core. -if(TENSORFLOW_HAVE_NNLIB_HIFI4) target_compile_definitions(tflm_lib PRIVATE -DHIFI4=1 -DHAVE_VFPU=1 @@ -517,16 +349,9 @@ target_compile_definitions(tflm_lib PRIVATE "AE_CVT64F32_H(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_H(v))" "AE_CVT64F32_L(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_L(v))" ) -target_compile_options(tflm_lib PRIVATE - -DHIFI4 - -DKERNELS_OPTIMIZED_FOR_SPEED - -DNNLIB_V2 -) -endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 target_compile_options(tflm_lib PRIVATE -std=c++17 - -stdlib=libc++ -fno-rtti -fno-exceptions -fno-threadsafe-statics @@ -548,15 +373,25 @@ target_compile_options(tflm_lib PRIVATE -DXTENSA -DTF_LITE_MCU_DEBUG_LOG -DTF_LITE_USE_CTIME - # TFLM's stock debug_log.cc calls vfprintf(stderr, ...), which pulls in - # stdio. Zephyr's minimal libc has no stderr. Stripping error strings - # neutralizes DebugLog() to a no-op and drops the dep entirely. - -DTF_LITE_STRIP_ERROR_STRINGS + -DHIFI4 -mlongcalls -Wno-shadow ) -add_local_sources(sof tflm-classify.c llext-wrap.c) +if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(tflm_lib PRIVATE + -stdlib=libc++ + "SHELL:-include xtensahifiintrin.h" + -fno-vectorize + -fno-slp-vectorize + ) +else() + # gcc equivalents for vectorize disabling + target_compile_options(tflm_lib PRIVATE + -fno-tree-vectorize + -fno-tree-slp-vectorize + ) +endif() if(CMAKE_C_COMPILER_ID STREQUAL "Xtensa") target_compile_options(tflm_lib PRIVATE @@ -565,89 +400,35 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Xtensa") ) elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") target_compile_options(tflm_lib PRIVATE - -mcpu=${SOC_TOOLCHAIN_NAME} + -mcpu=intel_ace15_mtpm ) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_include_directories(tflm_lib SYSTEM PRIVATE - ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0 - ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf - ${TFLM_TOOLCHAIN_INCLUDE_ROOT} + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0 + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0/xtensa-intel_ace15_mtpm_zephyr-elf + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include ) endif() -add_local_sources(sof tflm-classify.c llext-wrap.c) +add_local_sources(sof tflm-classify.c speech.cc micro_speech_quantized_model_data.cc llext-wrap.c math_stubs.c) -# Link nnlib only when it was actually built (HiFi4 target + Clang) -if(TENSORFLOW_HAVE_NNLIB_HIFI4) +# Link nnlib only when Clang is available (nnlib requires XCC/Clang TIE headers) +if(CMAKE_C_COMPILER_ID STREQUAL "Clang") zephyr_link_libraries(tflm_lib nn_hifi_lib) else() zephyr_link_libraries(tflm_lib) endif() - -# CONFIG_MINIMAL_LIBC (SOF's global default) has no libm and is missing a -# few libc functions (e.g. abs()) that TFLM needs in a statically-linked -# (non-LLEXT) image. Linking the toolchain's whole libc.a is too broad: it -# conflicts with Zephyr's own malloc/free (multiple definition) and pulls in -# an __assert_no_args that needs an unavailable stderr. Instead, extract just -# the specific archive members TFLM actually needs into a small private -# archive and link only that. -if(NOT CONFIG_COMP_TENSORFLOW STREQUAL "m") - set(TFLM_TOOLCHAIN_LIBC_ARCHIVE - ${ZEPHYR_SDK_INSTALL_DIR}/gnu/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/lib/libc.a) - set(TFLM_LIBC_SHIM_MEMBERS - libc_stdlib_abs.c.o - libm_math_s_floor.c.o - # TFLM QuantizeMultiplier() uses double frexp() + round() at Prepare time. - libm_math_s_frexp.c.o - libm_common_s_round.c.o - libm_math_sf_exp.c.o - libm_math_sf_log.c.o - libm_common_sf_fmax.c.o - libm_common_sf_fmin.c.o - libm_common_sf_round.c.o - # error-handling/predicate helpers the above call internally - libm_common_sf_isnan.c.o - libm_common_sf_issignaling.c.o - libm_common_math_errf_uflowf.c.o - libm_common_math_errf_oflowf.c.o - libm_common_math_errf_divzerof.c.o - libm_common_math_errf_invalidf.c.o - ) - set(TFLM_LIBC_SHIM_DIR ${CMAKE_CURRENT_BINARY_DIR}/tflm_libc_shim) - set(TFLM_LIBC_SHIM_ARCHIVE ${CMAKE_CURRENT_BINARY_DIR}/libtflm_libc_shim.a) - file(MAKE_DIRECTORY ${TFLM_LIBC_SHIM_DIR}) - add_custom_command( - OUTPUT ${TFLM_LIBC_SHIM_ARCHIVE} - COMMAND ${CMAKE_AR} x ${TFLM_TOOLCHAIN_LIBC_ARCHIVE} ${TFLM_LIBC_SHIM_MEMBERS} - COMMAND ${CMAKE_AR} rcs ${TFLM_LIBC_SHIM_ARCHIVE} ${TFLM_LIBC_SHIM_MEMBERS} - WORKING_DIRECTORY ${TFLM_LIBC_SHIM_DIR} - DEPENDS ${TFLM_TOOLCHAIN_LIBC_ARCHIVE} - COMMENT "Extracting abs()/libm members TFLM needs from the toolchain libc.a" - ) - add_custom_target(tflm_libc_shim_gen DEPENDS ${TFLM_LIBC_SHIM_ARCHIVE}) - add_library(tflm_libc_shim STATIC IMPORTED GLOBAL) - set_target_properties(tflm_libc_shim PROPERTIES IMPORTED_LOCATION ${TFLM_LIBC_SHIM_ARCHIVE}) - add_dependencies(tflm_libc_shim tflm_libc_shim_gen) - zephyr_link_libraries(tflm_libc_shim) - - # TFLM/flatbuffers use assert() internally; the toolchain's own - # __assert_no_args implementation needs an unavailable stderr, so disable - # assert() outright instead (standard practice for release TFLM builds). - target_compile_definitions(tflm_lib PRIVATE NDEBUG) -endif() zephyr_include_directories(${TFLM_PATH}) zephyr_include_directories(${FLATBUFFERS_PATH}/include) zephyr_include_directories(${GEMMLOWP_PATH}) zephyr_include_directories(${RUY_PATH}) -if(TENSORFLOW_HAVE_NNLIB_HIFI4) zephyr_include_directories(${NN_HIFI_PATH}/algo/kernels/include) zephyr_include_directories(${NN_HIFI_PATH}/include) -endif() target_include_directories(modules_sof SYSTEM PRIVATE - ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0 - ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf - ${TFLM_TOOLCHAIN_INCLUDE_ROOT} + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0 + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0/xtensa-intel_ace15_mtpm_zephyr-elf + /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include ) diff --git a/src/audio/tensorflow/Kconfig b/src/audio/tensorflow/Kconfig index 446f9add2849..3d4455042b71 100644 --- a/src/audio/tensorflow/Kconfig +++ b/src/audio/tensorflow/Kconfig @@ -10,3 +10,25 @@ config COMP_TENSORFLOW Tensorflow Micro library. It is used for running machine learning models on DSP. It is a lightweight version of Tensorflow library designed for microcontrollers and embedded systems. + +if COMP_TENSORFLOW + +config COMP_TENSORFLOW_DEBUG_TRACE + bool "Verbose per-hop / per-inference debug traces" + default n + help + Enable the tflmcly per-hop ("[DBG hop N]"), per-inference + ("[PERF] TFLM Inference #N", "[DBG raw_output]", "TFLM top + prediction", per-node cycle counters, model-graph node count) + and sliding-window ("[DBG window] nonsat=…") debug prints in + the tflm-classify hot path. These fire ~50 times per second + (once per 20 ms MFCC hop) plus a burst every 500 ms and go + through printk/mtrace, which is not free on the DSP and can + contribute to backpressure on log/RTT paths. + + Leave disabled for production and normal capture tuning. Enable + only when actively debugging feature extraction, quantization, + or per-node timing. The keyword-detected line and the shutdown + summary remain enabled regardless of this option. + +endif # COMP_TENSORFLOW diff --git a/src/audio/tensorflow/micro_speech_quantized_model_data.cc b/src/audio/tensorflow/micro_speech_quantized_model_data.cc deleted file mode 100644 index ce9cc5086804..000000000000 --- a/src/audio/tensorflow/micro_speech_quantized_model_data.cc +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#include "micro_speech_quantized_model_data.h" - -alignas(16) const unsigned char g_micro_speech_quantized_model_data[] = {0x20,0x0,0x0,0x0,0x54,0x46,0x4c,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x12,0x0,0x1c,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0x0,0x0,0x18,0x0,0x12,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xec,0x48,0x0,0x0,0x8c,0x42,0x0,0x0,0x74,0x42,0x0,0x0,0x3c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x4,0x0,0x8,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x6d,0x69,0x6e,0x5f,0x72,0x75,0x6e,0x74,0x69,0x6d,0x65,0x5f,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x0,0xc,0x0,0x0,0x0,0x28,0x42,0x0,0x0,0xfc,0x41,0x0,0x0,0x68,0x3,0x0,0x0,0x34,0x3,0x0,0x0,0x28,0x3,0x0,0x0,0x14,0x3,0x0,0x0,0xe8,0x2,0x0,0x0,0xdc,0x2,0x0,0x0,0x40,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xbe,0xbc,0xff,0xff,0x4,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x31,0x2e,0x35,0x2e,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xba,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x50,0xba,0xff,0xff,0x0,0x0,0x0,0x0,0xee,0xbc,0xff,0xff,0x4,0x0,0x0,0x0,0x80,0x2,0x0,0x0,0xfa,0xee,0x28,0xc4,0xee,0xfe,0xcf,0xf,0x1e,0xf7,0x1f,0x6,0xd,0xed,0xe9,0x83,0x5c,0xc9,0x18,0xe3,0xf9,0x14,0x28,0x2a,0x9,0xf2,0x18,0x34,0x62,0xea,0xef,0xd6,0x36,0xb7,0x1e,0xf7,0x3b,0x22,0x28,0x39,0xc2,0x9d,0xf1,0x7,0x5e,0xb,0x1e,0x2c,0x7,0xdd,0xfd,0xc3,0xd8,0x4a,0xf3,0x28,0xa7,0x16,0xd5,0xf1,0xc3,0x5,0xfd,0x27,0xcc,0xba,0x1e,0xcb,0xd7,0x3d,0xd4,0x29,0x0,0xfd,0x28,0x44,0xfb,0xf2,0xf3,0xb6,0x4f,0xcf,0x9,0xf0,0xfa,0x45,0x41,0x49,0x5,0xc5,0x17,0x5d,0x64,0x0,0xf8,0xee,0x48,0x17,0xf4,0xe9,0x2e,0x4b,0x2e,0x3f,0xdf,0xee,0xe4,0x8,0x38,0xf1,0x16,0x13,0x2f,0x2a,0xed,0xc2,0xbf,0x36,0xf4,0x2,0xcf,0xaa,0xd2,0xfa,0xac,0x13,0xf6,0xe8,0xb5,0x68,0x12,0xb6,0xce,0xe,0xdf,0x58,0xe4,0x49,0x14,0x15,0x3,0xed,0xfa,0xd4,0x40,0xa7,0xf6,0xca,0xfb,0x0,0x4d,0x5e,0xe4,0x55,0x1d,0x30,0x45,0xe2,0xfc,0x1,0x48,0x81,0xe9,0xf1,0x1e,0xfc,0x21,0x32,0xed,0x4b,0xed,0xfa,0x2f,0xd2,0xfa,0xfb,0x4d,0xa7,0xed,0xc7,0x92,0xdf,0xe6,0xdb,0xf8,0x1f,0xd9,0xfa,0x91,0xf5,0xe5,0xc5,0x8c,0x17,0xf,0xb9,0xd2,0xc7,0xfe,0x68,0xd3,0x51,0x2e,0x49,0x1f,0xbd,0x1,0xeb,0x31,0x17,0xf0,0xef,0xff,0xb8,0x5d,0x62,0x2,0xf,0x1f,0x78,0x6a,0xb0,0xf9,0xfe,0x4f,0xcc,0xd3,0xff,0xa,0x96,0x1e,0x2c,0xed,0xbc,0xf4,0xb,0x42,0xc8,0xf1,0xea,0x6e,0x58,0xec,0xc4,0x99,0xae,0xdc,0xd7,0x12,0x87,0xd8,0x6,0xa2,0xc2,0xe6,0xa2,0x81,0x24,0xe9,0xac,0xce,0xb6,0x15,0x6b,0xba,0x0,0x19,0x58,0x29,0xb6,0xfe,0x1,0x25,0x96,0xd2,0xec,0xe,0x9c,0x60,0x5f,0xe9,0xf4,0xf5,0x69,0x6b,0xb5,0xe1,0xf6,0x5e,0xb7,0xb1,0xe5,0x11,0x9b,0x18,0x10,0xe3,0xe1,0xe0,0xd,0x4f,0xa5,0xde,0xe5,0x6f,0xe2,0xfb,0x99,0x82,0xa5,0xc9,0xb6,0x1f,0x46,0xf3,0x4,0xc6,0xca,0xd6,0x97,0x90,0x1d,0xc0,0x95,0xf0,0x19,0x30,0x77,0xc2,0x3c,0xfa,0x24,0x2,0x4d,0x6,0x7,0x15,0x2,0xb0,0xe7,0x27,0x22,0x67,0x4d,0xf1,0xc2,0xf4,0x64,0x38,0x40,0xdf,0xf6,0x3a,0x43,0xb8,0xe1,0xd,0x15,0x11,0xfe,0xf5,0xec,0xf9,0xe5,0x22,0x36,0xe4,0xfd,0x6d,0xbf,0xd,0x8e,0xb7,0x15,0xbf,0x9f,0x16,0xad,0xa,0x2,0x8e,0x14,0xda,0x9b,0x8e,0xc3,0xa6,0xca,0xf5,0x7f,0x51,0x56,0xc1,0xb3,0xd9,0x35,0xf8,0x7f,0x4,0xa,0x3,0x3f,0xbe,0xee,0x19,0x68,0x78,0x50,0xf9,0xa7,0xf7,0x7f,0x1d,0x76,0xdb,0xe8,0x33,0xb9,0xd7,0xe7,0xe8,0x69,0x15,0xf7,0xf5,0xb2,0xfe,0xe8,0xf3,0x5b,0xe2,0x6,0x6e,0x9,0x36,0xb7,0xcc,0x38,0xbf,0x8a,0x28,0x14,0x2e,0x18,0xa7,0x26,0xcb,0xb2,0x95,0x37,0xac,0xcd,0xd7,0x51,0x67,0x44,0xcd,0x31,0xde,0x4,0xe9,0x6a,0x0,0x13,0xa,0xc,0xdd,0x16,0xe0,0x24,0x7e,0x49,0xf1,0xb5,0x4,0x52,0x1,0x50,0xdd,0xf5,0x26,0xc9,0xf4,0xf8,0xd6,0x31,0x1b,0xd0,0xef,0x3,0xa,0xc0,0xd4,0x4f,0xe2,0xfd,0x72,0xf4,0x5a,0xc9,0xd7,0x31,0xc0,0x8e,0x17,0x5e,0x57,0x0,0xb4,0x3a,0xc8,0xd2,0x92,0x32,0xcb,0xd8,0xc3,0xa6,0x63,0x26,0xcf,0xbc,0xe8,0x57,0x9b,0xe9,0xf7,0x1c,0xea,0x12,0xf1,0xf7,0xdb,0xb9,0x7f,0x16,0xf6,0xe0,0x8,0x70,0xa2,0xed,0xcc,0xf1,0x1e,0x10,0x4,0xf7,0xa9,0xb7,0x34,0xaa,0xa,0xdb,0x2a,0xa6,0xb6,0x10,0xea,0xf8,0x5e,0x6,0x72,0xdd,0xd0,0xb9,0xd6,0xa0,0x10,0x9f,0x5a,0x17,0xb1,0xe7,0xc0,0x1,0x9d,0x1,0xe0,0xe0,0xaf,0x9c,0x46,0xd8,0xaf,0xe8,0xce,0x2,0x8a,0xbb,0xe4,0xf6,0xf3,0x36,0x7,0xca,0xcb,0x87,0x6e,0xcc,0xd6,0x9e,0xa,0x2a,0x81,0xd7,0xcf,0xc0,0x4,0xeb,0x24,0xcc,0xc9,0x95,0x33,0x81,0xf7,0xad,0x1c,0x9c,0xa4,0xd6,0xf9,0xe6,0x3d,0x84,0x7f,0xcc,0xd4,0xb0,0xf4,0xa2,0xe9,0x3c,0x36,0xee,0xd5,0xcf,0xcd,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0xbc,0xff,0xff,0x0,0x0,0x0,0x0,0x8e,0xbf,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x31,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xbd,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0xbd,0xff,0xff,0x0,0x0,0x0,0x0,0xce,0xbf,0xff,0xff,0x4,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x8a,0xfe,0xff,0xff,0xa9,0x0,0x0,0x0,0xd0,0xff,0xff,0xff,0xd0,0x0,0x0,0x0,0x52,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4f,0xfb,0xff,0xff,0x4a,0xfd,0xff,0xff,0x0,0x0,0x0,0x0,0xfe,0xbf,0xff,0xff,0x4,0x0,0x0,0x0,0x80,0x3e,0x0,0x0,0xff,0xf9,0xfd,0xa,0x7,0x8,0x7,0x3,0x7,0xf2,0xd1,0x9,0xf0,0xe9,0x28,0x9,0xdf,0x5,0xfa,0xf0,0xe8,0xe3,0x13,0xe,0x8,0xef,0xd3,0xee,0xf,0xe8,0xeb,0x14,0xf7,0xed,0xfd,0x1f,0xe8,0xd5,0xeb,0xfc,0xe,0xf4,0xf7,0x7,0x5,0xea,0xf6,0x1f,0xf8,0xdb,0xdc,0xb,0x3,0xdd,0xd8,0xf3,0xf,0x19,0xe1,0x9,0xfc,0xe4,0x2,0x4,0xf1,0x4,0xeb,0xf3,0x1e,0x6,0xfd,0x11,0xfc,0xfa,0xf6,0x1f,0xf,0x2,0xf5,0xf7,0xff,0x24,0xdf,0xf7,0xf8,0xf3,0xf6,0xe9,0xef,0x3,0xdd,0xf2,0x28,0xe1,0xf2,0x22,0xf4,0x9,0xf7,0xf9,0xf0,0xd4,0xf9,0xee,0xff,0x14,0xda,0xf3,0x11,0xe2,0xf6,0xc,0xf2,0xeb,0xf8,0xe8,0xe3,0x8,0x2,0x17,0xf4,0xb,0xc,0x27,0xe6,0x2,0x3,0xf9,0x14,0x18,0xf6,0xeb,0x1f,0xc,0xf1,0xee,0xfc,0x8,0xf0,0xfe,0xfd,0xee,0x17,0xfd,0x1c,0xef,0xfd,0xde,0x4,0x5,0xf0,0x31,0xfa,0xb,0xdc,0xd,0xed,0xf5,0xfa,0xf4,0x8,0xc,0xd7,0x1e,0x15,0x3,0xf5,0x2,0xf4,0xfb,0xed,0x1,0xfe,0xd6,0x1f,0xfd,0xfd,0xe,0xfa,0x6,0xf1,0xf9,0xe2,0x16,0xe9,0xf1,0x3,0xd,0xd,0xdf,0xf9,0x1a,0xe,0xf6,0xfc,0xa,0x19,0xe2,0xe0,0x9,0x15,0xf0,0xf1,0x6,0xf1,0xe1,0xef,0x1a,0x8,0xe8,0xfd,0x12,0x14,0x6,0xf1,0xfc,0xea,0xfb,0xf7,0xea,0x1d,0x9,0xfa,0xf6,0x8,0xf2,0xe7,0xf8,0xfc,0x16,0xf5,0xe,0x8,0xf9,0xa,0x3,0x26,0xd8,0x2,0xf5,0xf6,0xf6,0xef,0x1f,0xe4,0xe2,0xfb,0x2,0x1b,0xe6,0xde,0x0,0xf2,0xed,0xfb,0x18,0xe4,0x16,0x1a,0x1d,0xf1,0xf6,0xea,0x16,0x5,0xde,0xfb,0x18,0xf5,0xe4,0xfe,0xe2,0x1b,0x1c,0xc,0xe8,0x2,0xee,0xfb,0x7,0x24,0xf2,0xe9,0xfa,0xd,0x5,0xf1,0x3,0xfe,0xf6,0x19,0x6,0xff,0xf9,0x4,0xfb,0x15,0xef,0xf1,0xf8,0xe9,0xe1,0x10,0x4,0xfc,0xe6,0x1f,0xed,0xb,0xef,0x0,0x1e,0xe6,0x16,0xf3,0x9,0xfd,0x8,0x8,0x6,0x6,0x23,0xdf,0xfc,0x8,0xf4,0xea,0xc,0xf2,0xe6,0x18,0xf5,0x2,0xf9,0x50,0x9,0x1,0xda,0xb,0x5,0x12,0x18,0xef,0x4,0xe,0xd9,0xff,0xdc,0xf6,0x16,0xf9,0xf4,0xec,0xff,0xea,0xe6,0xfa,0xa,0xed,0xef,0x2,0xf0,0x25,0x21,0xf1,0x26,0xf5,0xed,0x9,0xea,0xea,0x24,0xfa,0x11,0xfc,0xdf,0xf3,0xa,0x28,0xc,0x19,0xff,0xf5,0xd6,0xe,0xe2,0x2a,0x6,0xfa,0x3,0xf9,0xe6,0xef,0x23,0xf9,0xfa,0xe6,0xfe,0xfc,0x3,0x6,0x1a,0xf9,0x8,0xe0,0xe5,0xff,0x5,0x1,0xe7,0x12,0x2,0x1d,0x5,0x3,0x5,0xb,0xee,0xed,0xfc,0xf,0xf3,0x2,0xe0,0x15,0xdf,0x2,0xed,0x10,0x26,0xef,0xd,0x6,0xee,0xef,0xf6,0xeb,0x11,0x9,0xf4,0xf7,0x6,0xf,0x1,0x2a,0xb,0x1,0xdd,0xfc,0xf4,0xf1,0x17,0x3,0x4,0x7,0xfc,0x22,0xfc,0xde,0xfe,0xb,0x3,0xf3,0xfb,0xc,0x25,0x4,0x19,0x4,0x3,0x1,0xfa,0xfb,0xf7,0xf6,0xe,0x15,0xe,0x9,0xff,0x6,0xfa,0xfb,0x1e,0xfb,0x5,0x22,0xf9,0xfe,0xf7,0x1d,0xed,0xdf,0x18,0x9,0xeb,0xef,0x4,0x12,0xea,0xdf,0xfb,0xda,0xf6,0xdf,0x17,0xef,0xef,0xe1,0x1a,0xd9,0xe2,0xe2,0xfc,0x5,0x11,0xf6,0xee,0xe8,0xf2,0xe1,0x8,0x26,0x4,0xed,0x3,0xe0,0xfb,0xee,0xc,0xee,0xf6,0x4,0x2d,0xf2,0xd3,0xf4,0xe0,0xf8,0xc,0xfe,0x11,0xb,0xd7,0xfd,0x18,0x7,0xd,0x7,0x8,0xf4,0xc6,0xa,0xa,0x1f,0xc,0xf4,0x1d,0x2,0xb,0x9,0xe,0x21,0xff,0x17,0xb,0xd,0xf2,0xed,0xd7,0xa,0xf8,0x3,0x6,0xfa,0xe5,0xfd,0x3,0x14,0xf,0xe9,0x1a,0xf4,0xda,0x1,0xe6,0x9,0x6,0x11,0xd,0xfd,0xeb,0x16,0x23,0xfa,0x0,0xb,0x17,0xf7,0xda,0xd7,0x1b,0xfa,0x1,0x3,0x5,0xfe,0xd6,0x2,0xee,0xee,0x2,0xf3,0x6,0xed,0x3,0xec,0x1,0xf2,0xf,0x5,0x17,0xb,0xfb,0xf,0x5,0x3,0x13,0xff,0x6,0x2,0xf5,0xf4,0x18,0x2b,0xf0,0x0,0x17,0xfc,0xfd,0x5,0xb,0xe,0x14,0xe1,0x24,0x8,0x24,0xe6,0xeb,0x21,0x12,0xfb,0x12,0xe7,0xf4,0xe8,0xe,0x18,0xee,0xf5,0xf3,0xd9,0xf3,0xdb,0xec,0xc,0x1e,0xcf,0x14,0xdb,0xe3,0xdc,0x2,0xc,0xfb,0xdb,0x1b,0xd0,0xfe,0xf9,0xfe,0x2a,0xf5,0x0,0xb,0xcd,0xe0,0xe2,0xe,0x4,0xf8,0xda,0x1c,0xe5,0xf,0xe8,0xf4,0xf7,0x15,0x6,0xf8,0x2,0xf7,0xf,0xfb,0x17,0xf9,0xda,0x1,0xda,0xd1,0xf6,0x2,0xfd,0x16,0xf1,0xe4,0xfa,0x7,0xee,0xa,0xf3,0xfd,0xf2,0x23,0xf0,0xe1,0xa,0x1a,0x12,0x1f,0xef,0x27,0x9,0xf1,0xc,0x13,0x23,0xfd,0xf5,0x3,0xfe,0x9,0xfd,0x16,0xf8,0x7,0x8,0x25,0x8,0xf8,0xf6,0xa,0xf1,0xf5,0x7,0x9,0x5,0xcc,0xf8,0x8,0x13,0xf9,0x1d,0x11,0xf,0xdc,0xee,0xf3,0x27,0xf9,0xf9,0x22,0xfa,0xd,0xe2,0x13,0xfb,0x11,0x3,0x1e,0xff,0xfb,0xed,0xf1,0xe,0xb,0xf,0x0,0x6,0xe0,0x15,0xf3,0x13,0xfc,0x18,0xf9,0xff,0x9,0xfa,0x1f,0x12,0xe5,0xe2,0x6,0xf9,0xf4,0x7,0x15,0xb,0x4,0xdb,0xd,0xeb,0xf3,0xe6,0x6,0xe5,0xee,0xd8,0x22,0xd8,0x10,0xea,0xf9,0x1c,0xf7,0xd3,0x11,0xc3,0xf8,0xde,0x5,0x0,0xe6,0x7,0xfd,0xd3,0x3,0xea,0xe0,0x13,0x14,0xcf,0xeb,0xcd,0xd3,0xde,0xf5,0xf0,0xc,0xc,0xfa,0xeb,0xd3,0xfb,0xfd,0x8,0xf9,0xf4,0x10,0xfa,0xd3,0xf4,0x11,0x11,0xf8,0xef,0xf8,0xf8,0xf1,0xfc,0xe1,0xf7,0x12,0x4,0xf4,0xfb,0xed,0xef,0xc,0xfd,0x1c,0xfe,0xe,0xfd,0xe2,0xfe,0xa,0x2,0xfe,0xe6,0x1f,0xef,0xe5,0xe6,0xf8,0x16,0x27,0xe8,0x20,0x5,0xe3,0xf1,0xef,0xee,0xed,0xd,0x11,0x16,0xfb,0xf3,0xff,0x14,0x1,0xff,0x15,0x10,0x2,0xe5,0x28,0x29,0x13,0x13,0x16,0xe6,0x0,0xd2,0x26,0xfd,0x3,0x4,0x5,0x7,0x6,0xf1,0xe,0x5,0xd,0xe2,0xf,0x2,0xe1,0x7,0xf7,0x1c,0xfa,0x14,0x30,0xf7,0xee,0x0,0xfa,0x3d,0x6,0x1c,0x4,0x6,0x7,0x5,0x1a,0x10,0xf6,0xee,0xa,0xeb,0x4,0xeb,0xdf,0x1d,0x9,0xd5,0xe8,0xd6,0xf4,0xf0,0xf,0x1d,0xea,0xf2,0xf8,0xa6,0xb,0xdc,0x9,0x8,0x24,0xee,0x24,0xaa,0xe4,0xcb,0x15,0xef,0xe7,0xe9,0xc,0xcf,0x6,0xe3,0x12,0x11,0x0,0x7,0x14,0xd7,0xde,0xf6,0xf,0xb,0x4,0xfb,0xd,0xf8,0xd,0xf6,0x1b,0xf1,0x21,0xdd,0xfc,0xf4,0xe9,0xf8,0xe8,0xf7,0x6,0x3,0x1e,0xce,0xe1,0xea,0xf6,0x5,0xf9,0x16,0x15,0x4,0xe0,0x14,0xf7,0x1e,0x1c,0xa,0x27,0xef,0xf3,0xf,0xf3,0xee,0x4,0xf8,0xf1,0x7,0xe3,0x5,0xb,0x0,0x1c,0x15,0x27,0x7,0xf7,0xfa,0xb,0xfa,0xfa,0x17,0x13,0xe1,0xf5,0xfb,0xc,0x21,0x2f,0xd7,0xfb,0xf5,0xfd,0xd3,0xf4,0x7,0xe,0xfd,0xb,0xfc,0xfa,0xf5,0xe,0x2,0xfa,0xfa,0x19,0xfd,0xfa,0xfc,0x13,0x24,0xc,0xe4,0x31,0xf8,0x12,0xf4,0x4,0x18,0x29,0x27,0x19,0xfc,0x8,0x11,0xe3,0x7,0xfe,0x26,0x40,0x5,0x2,0x4,0x2,0xf,0xee,0xf4,0x27,0xea,0xf4,0xf5,0x11,0x26,0xb,0xe7,0x5,0xd2,0xf6,0xea,0xfa,0xb,0xf9,0xfa,0x16,0xba,0x0,0xfb,0xd,0xb,0xf9,0xe6,0xf6,0xc5,0xf8,0xf6,0x1,0xf,0xed,0xed,0x13,0xcd,0xd,0xda,0x6,0x17,0xee,0x7,0x1d,0xb8,0xfa,0xe2,0xea,0xf2,0xee,0x4,0x0,0xdc,0xd0,0xfb,0xf5,0xec,0xfe,0xf1,0xd,0xf0,0xdb,0xf9,0xd,0x3,0x3,0xe,0xa,0xda,0xd6,0x1,0xf2,0x6,0x14,0x1c,0x1f,0xe8,0xe8,0xe,0xfd,0xc,0xf5,0xf3,0x3d,0xf3,0x5,0x10,0xfa,0x1b,0x18,0x8,0x36,0x9,0xf1,0xeb,0xf9,0x22,0x1,0xf3,0xf7,0xff,0xf0,0xc,0xe9,0x1,0x29,0x21,0x15,0x3,0xee,0xe9,0x1a,0xf7,0x15,0x6,0x25,0xfa,0xf0,0xe4,0xf1,0x1f,0x1,0xdc,0x2d,0xce,0xe9,0xea,0xb,0x6,0x2c,0xa,0x30,0xe7,0x9,0xf4,0xf0,0x10,0x29,0xf9,0x3d,0xe7,0xdc,0xe4,0xf7,0x3b,0x27,0x23,0x3a,0xa,0x6,0xe,0xfd,0x2c,0x7,0x2b,0x1c,0xfa,0x0,0xf9,0x11,0xea,0x14,0xeb,0xfc,0x18,0x3,0xf1,0x16,0x12,0x4,0xcf,0x12,0xdd,0xe4,0xe,0xf0,0x9,0xe8,0xf3,0xfb,0xa8,0xf9,0xee,0xfb,0x1e,0x1d,0xfd,0x5,0xab,0xe5,0xff,0x1,0xfe,0x4,0xf9,0x2,0xb9,0xdc,0xdf,0x5,0xf1,0xef,0xf1,0x1e,0xc7,0xee,0xf7,0x1e,0x0,0x0,0xf8,0x10,0xec,0xe8,0x4,0xf,0xf6,0xff,0x4,0x9,0xe0,0xa,0xe,0xe4,0xf0,0xf1,0x16,0x2b,0xd3,0xe1,0xa,0xef,0xf9,0xfe,0xb,0x22,0xf5,0x1,0xa,0xf8,0x2,0x0,0x17,0x19,0xf3,0x5,0x21,0xfa,0xee,0xee,0x12,0xf2,0xfa,0xf5,0x5,0x12,0xee,0xe4,0x28,0xfa,0xf1,0x3,0x15,0x16,0x18,0xfd,0xf,0x21,0x4,0xf4,0xe5,0xc,0x6,0x13,0xde,0x36,0xe8,0xfb,0xe7,0xfd,0xf6,0x12,0xe,0x1d,0xea,0xf8,0xd4,0xe8,0x19,0x7,0xe5,0x1c,0xf7,0xc,0xef,0x5,0xf,0x9,0xdd,0x1a,0xea,0xd7,0xf9,0xf9,0x12,0x17,0x2e,0x10,0x8,0xfe,0x14,0xf5,0x1d,0xfa,0x6,0x33,0xed,0xfe,0xf7,0x11,0xf0,0x15,0xe2,0x24,0xf6,0xa,0xe2,0xfc,0x23,0x12,0xdd,0x11,0xfd,0xe5,0x8,0xff,0x15,0xf6,0xf1,0x1b,0xae,0xfe,0xe6,0x15,0x2c,0x2d,0x15,0x15,0xc5,0xf8,0xea,0xe7,0x7,0x4,0xfe,0x28,0xa1,0xf2,0xe1,0xf9,0xf8,0xff,0xf4,0x22,0xb4,0xdb,0x3,0x20,0xe6,0xf3,0xe,0x19,0xe3,0xa,0xfa,0xee,0xf3,0xe5,0xd8,0xf9,0xf1,0xde,0x6,0x5,0xf2,0xf5,0xe7,0x16,0xd8,0xfe,0x7,0xea,0xee,0xe,0xfa,0xff,0xdb,0xe7,0x3,0xed,0x1,0xfd,0x9,0x1a,0xfa,0xe6,0x5,0x10,0xe9,0x1,0x1f,0x13,0xf7,0xf6,0xfb,0x13,0xff,0xdb,0xed,0xfe,0xa,0x10,0x9,0x29,0xf5,0x4,0xf5,0x26,0xd,0xc,0xf9,0x16,0xfa,0x2,0xf4,0x2e,0xde,0xf5,0xe1,0x1d,0xfb,0x2,0xb,0x23,0x7,0xea,0xd9,0xa,0xf3,0xa,0xf,0x1e,0xe7,0xf1,0xd7,0xb,0xf6,0xff,0xd,0x24,0xcc,0xa,0xee,0xda,0x14,0x12,0x11,0x29,0xf4,0x1a,0xef,0xb,0xfa,0xec,0xc,0x1b,0xf4,0xff,0xf5,0xef,0xf,0x10,0xd4,0x4,0xf9,0xf8,0xec,0xf9,0x21,0x5,0xd3,0x27,0xf3,0x17,0xff,0xf6,0x15,0xf9,0xed,0xa,0xac,0x2,0xfd,0xfb,0x4,0x29,0x6,0x3,0xb8,0xe6,0xd5,0x17,0x9,0x1b,0xf6,0x1b,0xab,0xdc,0xdf,0xfd,0x6,0x9,0x9,0x37,0xbb,0xed,0x19,0xd7,0xe2,0xdd,0x5,0x1,0xec,0xfb,0xe4,0xe,0xeb,0xf0,0x3,0x17,0x4,0xeb,0x9,0xee,0xeb,0xe7,0xc,0x16,0xcb,0xe,0x17,0xd8,0xe1,0xf8,0x2b,0x19,0xde,0xeb,0x10,0xf2,0xff,0xf8,0xee,0xe,0xe7,0xf0,0x15,0x8,0xf8,0xdf,0x6,0xd,0xf9,0x14,0xfa,0xb,0x4,0xfd,0x15,0x23,0x20,0xff,0xfd,0x1d,0xc,0xf1,0xfe,0x15,0xa,0x2,0xed,0xfe,0xfb,0x4,0xfb,0x1e,0xdd,0x5,0xe0,0x16,0xf9,0xf6,0xfd,0x32,0xdc,0xf2,0xd3,0x8,0xf4,0xec,0x17,0x25,0xe2,0xf0,0xee,0xf1,0xd,0xfe,0x13,0x2d,0x1,0x11,0xd4,0xe4,0x7,0xfb,0x32,0x11,0x14,0x7,0xd7,0x2,0x10,0xeb,0x2b,0x1d,0x1,0xfc,0xf3,0xf0,0x13,0x1a,0xdb,0x20,0x0,0xf0,0xf0,0x5,0x16,0x3,0xd4,0xe3,0xc2,0xf0,0x6,0x2,0x1e,0xa,0xec,0x1f,0xab,0xea,0xfa,0xe3,0x20,0x22,0x3,0x1b,0xb3,0xe,0xe3,0xf3,0x1d,0x27,0xe3,0x10,0xa7,0xda,0xf3,0x0,0xa,0xa,0x4,0xfb,0xb2,0xf,0xc,0xf5,0x7,0xff,0x13,0x1e,0xdb,0xf6,0xf9,0xef,0xe8,0xe7,0xfb,0x18,0xeb,0xec,0x9,0xda,0xf1,0xf0,0xb,0x4,0xe1,0xfa,0x1c,0x25,0xee,0x1,0xb,0x29,0xd7,0xc,0x4,0xb,0xef,0xfd,0x1c,0xfc,0xf1,0xfb,0xb,0xf,0xdf,0xed,0x17,0x38,0xc,0xd7,0xff,0xfd,0x1,0xfc,0xfb,0xfb,0x18,0x1a,0x18,0xe3,0xf9,0xf4,0xfa,0x20,0x6,0x9,0x11,0x8,0x1d,0xf8,0xfa,0x1d,0xf5,0x1c,0xf5,0xfe,0x3,0x7,0xe4,0x33,0xc8,0xc,0xe1,0x13,0xff,0xe5,0x10,0x2c,0xd3,0xf0,0xed,0x4,0x7,0x1,0xf1,0x16,0xe0,0x13,0xfa,0x11,0x7,0xfa,0x19,0x16,0x1,0x0,0x7,0x26,0x0,0xec,0x1d,0x23,0x5,0xf4,0x7,0x17,0x2c,0x1d,0xee,0xf0,0xc,0x9,0xe3,0x1a,0x24,0xb,0xf3,0x1e,0xce,0xfe,0xfe,0x12,0x21,0x1a,0xf6,0x23,0xc3,0x3,0xf4,0x10,0x1a,0x2a,0xf4,0x8,0xbf,0xff,0x4,0xf4,0xb,0x1d,0x1a,0xf8,0xcc,0x0,0xf7,0x13,0xf4,0xfd,0xf4,0x19,0xbd,0xef,0xc,0xd,0x2,0xfc,0x12,0x13,0xe9,0xe7,0xf5,0xfa,0xfa,0xf6,0x1a,0x2e,0xce,0xd4,0x1,0x12,0xfd,0xfc,0x26,0x10,0xcc,0xe7,0xee,0x13,0xee,0xff,0xef,0xea,0x0,0xe,0x1a,0x17,0x4,0xc,0x4,0xc,0xe6,0xf3,0xf6,0xdb,0xdd,0x4,0xf4,0x22,0x11,0x16,0xf3,0x7,0xec,0xf8,0xf2,0x7,0x3,0x2,0xf5,0xa,0xf6,0x2,0x1d,0x1b,0x11,0x6,0xf8,0x6,0x2,0xea,0xf3,0x1d,0xce,0x0,0xed,0xf9,0xef,0xf6,0xec,0x22,0xc7,0xf0,0xed,0xdb,0xe0,0x2,0x11,0x7,0xe8,0xf0,0xd1,0xed,0xff,0xfd,0xc,0x2e,0xd4,0xed,0xec,0xe,0xf1,0x7,0x1,0xe,0xe,0xfe,0xda,0xb,0xa,0xa,0x1f,0x2e,0x13,0x7,0x0,0x7,0x14,0x21,0xe9,0xfc,0xf0,0x1e,0xd7,0xea,0x34,0x7,0xc6,0xc,0xd4,0xec,0xfd,0x6,0x24,0xa,0xf3,0x15,0xaf,0xff,0xe9,0xf1,0xd,0x3e,0xe9,0x18,0xba,0x13,0xed,0xd7,0xb,0x31,0x5,0xe,0xaf,0x13,0xd6,0xe,0x10,0x2,0x2,0x14,0xcb,0xd5,0xf9,0xc,0xf9,0xe,0x1f,0x24,0xd5,0xeb,0xff,0xf1,0xf5,0xc,0x8,0x7,0xf4,0xd7,0x6,0x10,0xe8,0xef,0xfc,0x2f,0xee,0xf1,0x18,0xf8,0xf4,0x2,0x11,0x21,0xd3,0x12,0x14,0xe4,0xf4,0x2,0x5,0x24,0xca,0xf2,0xf3,0xeb,0xe7,0xf8,0x16,0x1a,0xeb,0xd,0x5,0x16,0xf1,0xec,0x11,0x1c,0x9,0x1e,0xe0,0xe6,0xfa,0xe,0xd,0x2a,0xea,0x2e,0xed,0xf9,0xf7,0x16,0x9,0x5,0xdd,0xd6,0x2,0xeb,0xf5,0xf3,0xe4,0x3b,0xed,0x4,0xe0,0xe,0xfd,0x9,0xfd,0x35,0xdc,0x18,0xf3,0x4,0xfa,0x5,0x15,0x34,0xe5,0xe1,0xe4,0xf4,0xe0,0xf9,0x8,0x32,0x4,0x8,0xf4,0xf,0xff,0x8,0x9,0x2f,0x6,0x2,0xfd,0x5,0xc,0x24,0xe3,0x1e,0xf5,0xc,0xdd,0xf8,0x18,0x20,0xd8,0x14,0xef,0xf4,0x17,0x8,0x25,0x14,0x4,0x6,0xb0,0xf5,0xf5,0x9,0xf,0x3e,0xff,0x28,0xb3,0xf5,0x19,0xd8,0x14,0x21,0xd9,0xf7,0xb7,0xe5,0xfe,0xe7,0x7,0x1e,0x4,0x15,0xc5,0xf9,0x14,0x20,0xeb,0x1,0x1,0x18,0xce,0x0,0xe6,0xe2,0xf7,0xfb,0xf3,0xd,0xd3,0xf3,0x4,0xf8,0xf0,0x3,0xf1,0x25,0xb5,0xef,0x5,0xe0,0x1,0xf6,0x4,0x16,0xd1,0x1,0xa,0x21,0x1,0x5,0xe,0x1,0xf0,0xa,0xf3,0x0,0x3,0xf8,0xfa,0x3,0xb,0xde,0xfe,0xff,0xfb,0xea,0x9,0x2,0xf5,0xe8,0xe7,0x8,0x0,0xf5,0xf8,0xf,0x13,0xfa,0xeb,0xe8,0xfb,0x1f,0x8,0x16,0xe6,0xfa,0xe1,0x0,0x3,0xdd,0xf1,0x26,0xe5,0x1d,0xd9,0xff,0xf2,0xf8,0xff,0x33,0xea,0xe5,0x3,0xc,0x7,0xf9,0xf8,0xf,0xe1,0x1e,0xdd,0xf,0x0,0xf1,0x6,0x21,0x9,0x5,0xf3,0xec,0xe6,0x4,0x7,0x32,0xf1,0xf9,0xf2,0x1,0x18,0x1f,0xd2,0xe2,0xa,0xf4,0xca,0xfc,0x28,0x16,0xc2,0x10,0xf2,0xfc,0x8,0xe9,0x2a,0xf,0xfa,0xf5,0xa9,0x7,0xec,0xe9,0x19,0x43,0xb,0x1c,0xa6,0xe9,0xf4,0x16,0xd,0x2b,0xfc,0x11,0x9a,0xe1,0xf1,0x1c,0xf5,0xf,0xe4,0x18,0xc0,0xd9,0x14,0x26,0xe6,0xf8,0xa,0x17,0xec,0xfb,0xe1,0x22,0xdf,0xf2,0xfe,0x1e,0xd4,0xeb,0xd7,0xe,0x8,0xf6,0xef,0xfc,0xe6,0xd4,0xf7,0xb,0xfb,0xf5,0x1,0x25,0xd7,0xfb,0xd,0xfe,0xff,0xf3,0x1d,0x32,0xfe,0xee,0x12,0xf2,0xc,0xec,0x2,0x10,0xef,0x1,0xf2,0xb,0xf3,0xf7,0xfa,0x25,0xfb,0xd,0x11,0x15,0x4,0xfc,0xc,0x21,0x12,0x29,0x0,0xfa,0xf6,0xf5,0x6,0x22,0xea,0xe2,0xee,0x0,0xfd,0xf0,0xb,0x1d,0xd3,0xe4,0xe4,0xa,0xfc,0xe8,0xea,0x2c,0xed,0xed,0xef,0xe8,0xf2,0x5,0xfd,0x15,0xd8,0xda,0xca,0xee,0xfa,0x0,0xfe,0xe,0xf2,0xf0,0xe,0xf5,0x4,0x3,0x1d,0x2b,0xee,0x5,0xf,0x10,0x13,0x35,0xe2,0x4,0x10,0xdf,0xcf,0xeb,0x40,0x26,0xe4,0x3,0xf3,0xf9,0xf5,0x14,0x24,0x2a,0xdf,0xfe,0xab,0xe5,0xfe,0x1c,0x27,0x35,0xdb,0xff,0xac,0x1,0xf6,0xfc,0x19,0x1a,0x11,0x1f,0xa8,0xf5,0x2,0xf,0x1a,0x1f,0xf7,0xf2,0xa2,0x0,0x15,0x22,0xe4,0x13,0x0,0x9,0xd9,0xd5,0x2,0x19,0xfd,0xf8,0xe7,0xff,0xfb,0xe0,0xef,0xf7,0xee,0xf3,0xf3,0x19,0xb0,0xdf,0x0,0xf,0x8,0xf3,0x15,0x17,0xec,0xf,0x11,0x14,0x2,0x8,0x10,0x17,0xe6,0x8,0xf7,0x0,0xed,0xf7,0x29,0x7,0x10,0x5,0x5,0xe7,0xed,0xf4,0xf9,0x15,0xf9,0xf0,0x8,0x0,0x3,0x9,0x21,0x28,0xf6,0xe,0xfb,0xf3,0x3,0xf7,0xf,0xc,0xf0,0xf5,0xe3,0xd8,0xf8,0xf2,0x9,0x1c,0xe7,0xfb,0xe4,0xf6,0xfa,0xf8,0xf1,0x42,0xf6,0xda,0xdd,0xd7,0xfa,0xff,0x2f,0x2c,0xda,0xa,0xde,0xec,0xf1,0x14,0xfb,0x1d,0xeb,0xee,0xf2,0xeb,0xf3,0xed,0xe,0x35,0xf0,0x6,0x19,0x4,0x2f,0x23,0xe2,0x7,0x13,0xf,0xe9,0xf0,0x22,0x2e,0xd9,0x1a,0xcb,0xed,0xfd,0x4,0x27,0x1e,0xf6,0x7,0x96,0xd6,0xd8,0x11,0x18,0x56,0xd2,0xfb,0x92,0xfc,0xb,0xa,0x17,0x2c,0xe5,0x4,0xa2,0xf8,0xe2,0x4,0x1a,0xd,0xeb,0x11,0xa2,0xe5,0xe5,0xf8,0x2,0xf7,0x17,0x3,0xca,0xe9,0xc,0x1f,0xfe,0xf5,0x18,0x12,0xdd,0x8,0x15,0xff,0xfc,0xf6,0xe1,0x1d,0xe2,0xe1,0xfe,0xfc,0x3,0xff,0xf2,0x23,0xd2,0x1,0x13,0xdd,0xf3,0xf4,0xf2,0x7,0xef,0x3,0x15,0x21,0xd8,0xf8,0x9,0xf3,0xe8,0xea,0xe8,0xf2,0x8,0xf0,0x4,0x1a,0xf2,0x19,0xfb,0x1b,0x15,0xfc,0x1d,0x30,0xe5,0x1e,0x9,0xe8,0xe9,0x9,0xf7,0x2a,0xe1,0xe,0x0,0x21,0xf3,0xff,0xfb,0x1,0xdf,0xf2,0xfe,0xf4,0xfc,0xf0,0xb,0xb,0xdd,0xe4,0xd2,0x14,0xf7,0xfe,0xb,0x39,0x1,0xe6,0xe4,0x27,0xfa,0xe4,0x4,0x2c,0xe2,0x4,0xf5,0x7,0xf2,0x3,0xf0,0x10,0xf5,0xf6,0xfc,0x16,0x22,0x1b,0xf8,0x11,0xe4,0x9,0xf6,0xf0,0x41,0x1e,0xcf,0x4,0xea,0xee,0xe,0xf6,0x1b,0x2f,0xc7,0xf1,0xba,0xef,0xf,0x16,0x1e,0x39,0x5,0x1e,0x90,0xe6,0xd,0xfa,0x22,0x3f,0xe3,0x23,0xa5,0xe3,0xe9,0xf,0x5,0x27,0x2,0x11,0x99,0x5,0xfa,0x5,0x3,0x1,0xff,0x26,0xd3,0xf7,0xf7,0xf9,0x5,0xf4,0xef,0x23,0xd2,0xdd,0x5,0x8,0xfa,0xff,0x3,0x4,0xbd,0xd7,0x14,0x6,0xef,0x6,0xe5,0x5,0xea,0xea,0x2,0xfd,0xd,0x0,0x8,0xff,0xe7,0xfb,0xfe,0x13,0xfe,0xec,0xf9,0x2,0xf3,0xff,0xff,0x8,0x4,0xed,0x19,0x1d,0xfa,0xa,0xd,0xf2,0xf,0xec,0x25,0x1c,0xec,0xb,0x1,0xff,0x1,0xf6,0x8,0x9,0xe8,0xe2,0xec,0x23,0xe5,0xe9,0xf0,0x2e,0xbd,0xe1,0xef,0x14,0xe9,0xf6,0xf5,0x1d,0xdc,0xe3,0xd7,0xfc,0xf9,0xf2,0xfe,0x24,0xf2,0x5,0xd5,0xed,0xe9,0xf9,0xfa,0x2d,0xf0,0xfe,0xee,0xf2,0xe8,0xf7,0x6,0x14,0x1,0x10,0x6,0xf3,0xe,0xe,0xc2,0x1d,0xf2,0x1c,0xed,0xe3,0x53,0x21,0xb8,0xc,0xde,0x3,0x15,0xeb,0x46,0x39,0xdf,0xf6,0xa3,0xee,0xf6,0xe0,0x33,0x50,0xdd,0x27,0x9f,0x7,0x13,0xe2,0x1f,0x35,0xed,0x1f,0xb7,0x7,0x11,0xed,0x17,0x28,0xf4,0x20,0xc1,0xec,0xef,0x16,0x2,0xfa,0xe0,0x1b,0xf7,0xdb,0xfd,0xa,0xe7,0xfb,0xe7,0x25,0xe2,0xe7,0xf8,0xf0,0xee,0xe9,0x2,0x6,0xc9,0xe4,0x14,0xe3,0xe2,0xf7,0xf8,0xfd,0xdd,0xe2,0x8,0xa,0xe4,0x5,0xf5,0x16,0xe7,0x1,0x0,0x1c,0xe7,0xf0,0xf6,0x19,0xfe,0xc,0xf2,0x6,0x3,0xe8,0xb,0xfe,0xe3,0x19,0x8,0x1a,0x10,0xfd,0x0,0x21,0xf0,0xeb,0x18,0x2,0xf3,0x4,0xf0,0x18,0xdb,0x5,0x1,0xde,0xed,0xe9,0x23,0x15,0xaf,0xe6,0xf1,0xa,0xe6,0xea,0x1,0x18,0xd8,0xfd,0xf1,0xe6,0xec,0xf5,0xe,0x1e,0xcc,0xfc,0xe7,0x0,0xe9,0x11,0x0,0x30,0xf9,0x14,0xf4,0x19,0xdd,0xf7,0xf7,0x2f,0xf4,0xf2,0xff,0x27,0x15,0x1c,0xbc,0x2f,0xe9,0x14,0xf5,0xe8,0x44,0x30,0xe8,0x1d,0xe4,0x18,0x11,0x0,0xc,0x2b,0xf3,0x29,0x96,0xe0,0x6,0xee,0x3e,0x55,0xdc,0x13,0x98,0xdf,0xf0,0xfe,0x17,0x33,0xe8,0x9,0xa3,0x7,0xef,0xe,0x1d,0x37,0xdd,0xfe,0xb5,0x0,0xf7,0xe0,0xea,0xfd,0xfd,0x19,0xbc,0xfd,0x15,0xfe,0x1,0xf3,0xd5,0x20,0xbf,0xe3,0x15,0xe,0xf0,0xf6,0xf2,0x14,0xcc,0xf0,0xf7,0x4,0xf2,0xff,0xb,0x2,0xd2,0xd8,0xfa,0xfc,0xe5,0x2,0x0,0xfb,0xf0,0xdc,0x1e,0x10,0x2,0x1,0x0,0x18,0xe9,0xdb,0x1e,0xf6,0xfc,0x3,0xef,0xa,0x0,0x16,0x0,0xf,0xf4,0x16,0xfa,0xb,0xe2,0xfa,0xe0,0x7,0xfb,0x2,0x21,0xe,0xdd,0xb,0xea,0xf0,0xeb,0xfb,0x19,0x9,0xd4,0xf2,0xef,0xb,0x0,0xeb,0x1a,0x2f,0xea,0x6,0x3,0xf6,0xf8,0xfb,0xfe,0x1d,0xea,0xdd,0xed,0xfd,0xfb,0xe7,0xfe,0x18,0xf4,0xfc,0xb,0xf6,0xfc,0xb,0xfb,0x28,0x7,0xff,0x7,0x1e,0x3,0x21,0xcf,0x22,0x5,0xe6,0xea,0xe7,0x43,0x2e,0xe7,0x14,0xfb,0xa,0x1e,0xfe,0x2c,0x24,0xd5,0xfd,0x9e,0xd1,0xf2,0x1c,0x32,0x51,0x1,0xf3,0xac,0xe1,0xf4,0xe5,0x1c,0x37,0xf1,0xf,0xa7,0xdb,0x0,0xf6,0xf,0x18,0xe1,0x10,0xc9,0xc5,0xe8,0xeb,0xf2,0xfd,0xf6,0x2,0xc2,0xff,0x0,0x19,0x3,0xf,0x2,0x22,0xd4,0xe7,0x7,0xf,0xe5,0x1a,0x9,0xb,0xdc,0xd2,0x0,0x5,0xee,0xf8,0xdc,0x14,0xd0,0xa,0xa,0xfa,0xeb,0x4,0xf3,0x6,0xde,0x5,0xfb,0xfd,0xe3,0xec,0xfd,0x14,0xd7,0x11,0xe,0xe6,0x6,0xec,0xde,0x22,0xd7,0x0,0x3,0xf5,0xf5,0xd,0x1,0x5,0xea,0xb,0x16,0x4,0xff,0x13,0xf3,0x12,0xd2,0xdf,0xb,0xe4,0x6,0xf6,0x8,0x2d,0xd3,0xd6,0xe7,0xa,0xec,0xff,0xfe,0x1,0xdf,0xf4,0xdf,0x1c,0xfe,0xf9,0xf7,0x13,0xca,0xff,0x3,0x6,0xe9,0xf7,0x6,0x8,0xd7,0xf3,0xed,0x8,0xe3,0xfd,0xc,0x11,0x15,0xfb,0x15,0x8,0x28,0x40,0xe7,0xd,0x8,0xec,0xe8,0x16,0x67,0x46,0xc8,0x16,0xf1,0x2,0x24,0x0,0x3a,0x43,0xd6,0x12,0xae,0xe7,0xf4,0xf8,0x3a,0x65,0xe4,0xc,0xb2,0xef,0x1f,0xe8,0x29,0x59,0xf8,0x11,0xc4,0xe1,0xfe,0xfa,0x27,0x43,0xc9,0x1e,0xbb,0xfb,0xf3,0x13,0x15,0xd,0xf1,0x13,0xcd,0xf0,0x7,0x19,0x7,0x0,0xd8,0xeb,0xbf,0xf0,0xfc,0xf6,0xef,0x16,0x1,0x2,0xc1,0xdf,0xfd,0xe9,0x6,0x6,0xf1,0x8,0xd7,0xcc,0xfb,0xe,0xfc,0x14,0xf2,0x1a,0xe2,0xd,0xeb,0x9,0x7,0x10,0xe6,0x13,0xeb,0xf5,0x15,0x14,0xeb,0xfe,0xf9,0x17,0xd2,0xe3,0x1e,0xf5,0x4,0xa,0xf1,0xe,0xde,0xe7,0x1,0x20,0xc,0xfc,0xdc,0xf9,0xe5,0xe9,0xff,0x1d,0xa,0xfe,0xec,0x25,0xaf,0xd2,0x1,0x16,0xfc,0x17,0xe8,0x1e,0xcd,0xd9,0xe2,0xf1,0xeb,0x8,0xff,0x33,0xe5,0xfb,0xeb,0x4,0xfe,0xf7,0xfd,0x1f,0xee,0xff,0xed,0xf8,0xe0,0xff,0xfd,0x2b,0xa,0xf5,0x15,0x1d,0xf3,0x3f,0x16,0xf6,0xf2,0xee,0xf4,0xef,0xf0,0x56,0xa,0x1a,0xbc,0xfc,0x2f,0xfb,0xf0,0x56,0x1e,0xe,0xc6,0xe8,0x6,0xb,0x11,0x62,0x3e,0xf9,0xb8,0xc9,0xed,0xeb,0x2,0x63,0x2c,0xfd,0xc5,0xe9,0x0,0x17,0xf,0x37,0xfe,0x20,0xcc,0xe0,0xe0,0xe,0xe6,0x20,0xa,0xfd,0xdf,0xee,0xb,0x2,0xee,0x1f,0xfb,0x6,0xd2,0xed,0xfe,0xeb,0xfc,0x12,0xfd,0x14,0x0,0xd8,0x8,0xf6,0xec,0x17,0xf9,0x10,0x0,0xd9,0x18,0xf1,0xee,0xf,0xf4,0x3,0xee,0xeb,0xf0,0xef,0xf2,0x6,0x4,0x0,0xf4,0xf,0x9,0x6,0xf7,0xb,0xfd,0x1,0x3,0x3,0xf4,0xf6,0xdd,0x14,0x1c,0xef,0xf1,0xdd,0xf7,0x13,0xd9,0x15,0xef,0x2,0xd2,0xe7,0x5,0x5,0xe2,0x9,0xf2,0x11,0xf5,0xba,0xf0,0x4,0xe0,0x1,0x6,0x10,0xe6,0xef,0xfc,0x12,0xf9,0xf4,0x1b,0x2f,0xe3,0xf,0xd7,0xf6,0xb,0x11,0xf7,0xc,0x0,0x6,0x18,0xef,0x6,0x3,0xa,0x9,0xf6,0x1a,0xd,0xed,0xfe,0x2c,0x43,0xf4,0xe5,0xde,0xf5,0x2,0x25,0x5a,0x49,0xd4,0xe6,0x24,0x1e,0xf7,0xe,0x5c,0x5d,0xf0,0xf9,0xe4,0x1c,0xeb,0x28,0x7f,0x5b,0xec,0xfa,0xdb,0xc,0xf5,0x20,0x49,0x51,0xe1,0xed,0xe6,0xe,0x26,0x28,0x33,0x35,0x5,0xe1,0xe4,0x1f,0xfc,0xf9,0x39,0x18,0x4,0xed,0xed,0x1,0xe7,0xe6,0x8,0x9,0x3,0xe7,0xf9,0xe,0x6,0xec,0x8,0x12,0x1a,0xda,0xef,0xdf,0xf9,0xe2,0x1e,0x1c,0x0,0x12,0xd7,0x1,0xf7,0x21,0x17,0x13,0x19,0xde,0xe0,0xec,0x16,0x1,0x1b,0x6,0xc,0xf0,0xe8,0x18,0x3,0x6,0xe,0x9,0xfa,0x3,0xf3,0xdd,0x1,0xfb,0xa,0x2a,0xf4,0xf6,0xda,0xe9,0xfe,0xe9,0x12,0x19,0xe9,0x5,0xdf,0x0,0xeb,0xf2,0x10,0xc,0xe1,0xcd,0xcb,0xf2,0x1f,0xd9,0xc,0xfa,0xfb,0xe8,0xde,0x0,0xfc,0xe5,0x0,0x11,0x2,0xe6,0x17,0x14,0x0,0xf2,0xfd,0x0,0xe1,0x10,0x24,0x12,0xec,0xed,0x1e,0x9,0x18,0x3,0xc,0x4,0xf4,0x15,0xf,0x10,0x18,0xd6,0x29,0x10,0x4,0x1c,0xef,0xf,0xc,0xc7,0x4,0xfe,0xeb,0xff,0xf5,0xe3,0x15,0xfe,0xcb,0x10,0xff,0x12,0xfb,0xe4,0xeb,0xf9,0x0,0x2,0xf1,0x14,0x13,0x1,0x2,0xf9,0x1,0x6,0xc,0xf5,0xa,0x1e,0x1,0x19,0xe,0x5,0xf5,0xa,0xff,0xff,0xf2,0xfb,0xdb,0xf8,0x6,0x17,0xf2,0xf7,0xd,0xe,0xf4,0xfa,0xf7,0x14,0xdb,0xe0,0xfd,0x8,0x16,0xf7,0x16,0xfc,0x9,0x27,0x7,0x9,0xfb,0xa,0xfc,0xc,0xe4,0xdb,0xee,0xff,0x10,0xf3,0x9,0xfa,0xf4,0x23,0xf3,0xf4,0x19,0xff,0xfa,0xff,0x19,0xf,0x11,0xed,0xec,0xf8,0xf,0x10,0xf3,0xff,0xb,0xf7,0x6,0xb,0xe,0x7,0xe4,0x18,0xa,0x8,0xe,0x2,0xa,0x5,0x19,0x2,0xf3,0xfe,0xfe,0xb,0xf,0xfc,0xfa,0x5,0xf9,0xe2,0xf9,0x1b,0xf7,0xf,0x7,0xfc,0x12,0xfe,0x1,0xfd,0xf0,0x4,0xf4,0xfd,0x7,0xf2,0x4,0x4,0x7,0xef,0xc,0xed,0xe,0xf6,0xef,0x8,0x7,0x4,0xe9,0xf3,0x20,0xda,0x15,0xf8,0xff,0xec,0xe0,0xf6,0xff,0xe9,0x8,0x1,0x10,0xf0,0xfc,0xe9,0x8,0xe8,0xf5,0xf8,0xe5,0x17,0xe6,0x3,0xfc,0x9,0xf5,0xdd,0xf2,0xff,0x5,0xf6,0xf8,0xf5,0x7,0xfc,0xf1,0x4,0xf3,0x13,0xe1,0xf,0xf2,0xa,0xf9,0xfd,0x1c,0xe0,0x11,0x1b,0xe6,0xef,0x5,0x5,0xc,0x23,0x10,0x9,0xfe,0xf7,0x1a,0xf1,0xfc,0x11,0x1d,0xff,0x3,0x3,0xe6,0x7,0x11,0xc,0xd,0x16,0x5,0x5,0x25,0xf3,0x10,0x10,0x6,0x9,0xe8,0x1a,0xf0,0xee,0x9,0xff,0x24,0xf7,0xfb,0xe6,0x6,0xfa,0x8,0x3,0x0,0xf2,0x4,0xf0,0xeb,0x14,0x1c,0x3,0x21,0x14,0x1d,0xfe,0x3,0xf6,0x2,0x9,0xff,0x0,0x13,0xef,0x10,0x1e,0xb,0x1d,0x1c,0xf1,0xf6,0xe7,0xfd,0x14,0x1,0xff,0x13,0xf7,0xfc,0x0,0x21,0xe3,0xeb,0x7,0xe,0x9,0xf1,0xf8,0xfd,0x3,0xee,0x19,0xfd,0xff,0xfb,0xff,0xea,0xfb,0x7,0xf0,0xa,0x4,0x4,0xb,0x12,0xfe,0xb,0xe0,0xff,0xf6,0xe5,0xfc,0x11,0xed,0xfd,0x15,0x3,0xdd,0xdb,0x4,0xfe,0xff,0xe,0xff,0xfa,0xfb,0xe5,0xef,0xf6,0xfe,0x22,0xf,0xe8,0xfe,0xf4,0xfd,0xd9,0x3,0xa,0xdf,0xcf,0xf1,0x14,0x5,0xfd,0xfb,0xf3,0xfb,0xfb,0xf,0xf8,0x5,0x9,0x3,0xf7,0x5,0x5,0x13,0xfb,0xeb,0x23,0xe7,0x18,0xfb,0x0,0xfe,0xdd,0xe9,0xea,0xd3,0xe8,0x1a,0xef,0x1,0xf1,0x9,0x1d,0xd8,0xfc,0xda,0x19,0x3,0xec,0xe5,0xf3,0xed,0xa,0xf4,0x13,0xb,0xf7,0xc,0x0,0xf9,0xea,0xe3,0xfe,0xff,0xd,0xa,0x1b,0xd7,0x17,0xeb,0xe9,0x0,0xe,0xee,0x24,0xef,0x9,0x7,0xf0,0xf5,0x7,0xf5,0xf5,0x10,0x17,0x6,0xf7,0xfc,0x2,0xfb,0xf9,0xe7,0xa,0x26,0xf3,0x1,0x1,0x9,0xb,0x2,0x27,0xf8,0xee,0xfd,0x1c,0xf8,0xf2,0xf,0xfc,0xd,0xe0,0xea,0x2,0xb,0x0,0xe0,0x8,0xfe,0x10,0x4,0xfe,0xeb,0x13,0x1,0xc,0xe,0xed,0x9,0x1,0xc,0xe3,0x10,0xdf,0xd1,0x14,0xf3,0xef,0x9,0xf0,0xee,0xe5,0x11,0xf4,0xf6,0x0,0xe8,0x20,0xa,0xfc,0xea,0xf7,0x2,0x16,0xe7,0xf3,0xd,0xe4,0x4,0xe6,0xef,0xf8,0xf,0x23,0x2,0xe0,0x1,0x1,0x1,0x5,0xf5,0xd,0xf5,0xf5,0xe1,0xff,0x4,0x0,0xf4,0xd,0xee,0xf1,0xef,0xf7,0xb,0xff,0x1b,0xec,0x5,0xe7,0xf3,0x13,0x12,0xf2,0xf3,0xfc,0xea,0x6,0xfe,0x13,0x12,0xdb,0x11,0xe2,0xfc,0xd,0x1c,0xe8,0x1d,0xfc,0xf2,0xe2,0x13,0x1d,0xda,0xf6,0x1c,0x18,0x1e,0xf4,0xfa,0x3,0xdc,0xf,0xff,0xff,0x18,0xb,0xed,0xf1,0xf8,0x2,0xf4,0x10,0xf9,0xeb,0xb,0xe,0xf,0x1,0x2,0x1b,0x6,0x10,0x0,0xe7,0x23,0xd,0xf6,0x11,0x8,0xf5,0xf,0x5,0x13,0xf7,0x1,0x1,0xc,0xf6,0xf9,0xf0,0x29,0x1,0xe9,0x11,0x2,0xfa,0xeb,0x16,0xe,0x10,0x9,0xe,0x1c,0xa,0xe3,0xd3,0x1,0xe3,0x0,0x6,0xe2,0xe9,0x19,0xef,0x12,0xf3,0xfc,0x2,0xb,0xc,0xd,0xed,0xfd,0xf6,0xf9,0xe9,0xf2,0x28,0xfe,0x3,0xec,0x3,0x0,0xf8,0xde,0xd,0x25,0x7,0x1a,0xe7,0xfd,0x29,0xd8,0xf7,0xfb,0xde,0xc,0x8,0x6,0x22,0xee,0x1d,0x5,0x7,0xf0,0xfb,0xfe,0x7,0xf1,0x4,0xe9,0x1,0xfc,0xf1,0x0,0xeb,0xe3,0x8,0xec,0xfe,0x4,0xeb,0xfc,0x1,0xf6,0xe,0xdf,0xf8,0x12,0xe3,0x16,0xdc,0x21,0xa,0xe6,0x6,0xe5,0x10,0x7,0xf7,0x1e,0xde,0xe3,0x7,0x16,0xed,0x23,0xf2,0x12,0xd,0xe9,0xf9,0xe8,0xfe,0xe,0x2,0x18,0xa,0xea,0xec,0xfb,0xfe,0xc,0x1b,0x19,0x20,0xfa,0x7,0xe5,0xc,0x4,0x27,0xdb,0xe6,0xfe,0xd,0xa,0xa,0xfe,0x39,0xdd,0xde,0x5,0xec,0x9,0x5,0xa,0x2c,0xf4,0x2,0x1f,0xd3,0x24,0xee,0xf,0x3c,0xf5,0xfd,0xf8,0xf8,0x12,0xf5,0xf3,0x19,0xf9,0xda,0xf6,0xa,0xa,0xf4,0x9,0xf,0xfc,0x0,0x1,0x1,0xf3,0xf8,0x5,0xf3,0xc,0x19,0xe,0xfd,0xfa,0xe1,0xfc,0xc,0x3,0xfb,0x1b,0x6,0xcc,0xe4,0x8,0xf9,0x10,0xe9,0x6,0x0,0x17,0xe8,0xd,0x12,0xca,0xf5,0x23,0xe4,0x21,0xf6,0x19,0x33,0xdd,0xfa,0xc,0x1,0x14,0x7,0x0,0x34,0xda,0x5,0x7,0x1,0x7,0xe4,0x6,0x24,0x2,0xff,0xf0,0x9,0xfc,0xf4,0x3,0x6,0xee,0x8,0xe2,0x1d,0xfa,0xc,0xfc,0x2,0x3,0xe5,0xf0,0xe2,0xa,0x18,0x12,0xc,0x1e,0x20,0xed,0x20,0xe4,0x1,0x2a,0x9,0xd,0xe,0xd0,0xf4,0xdd,0xfd,0x2b,0xf2,0x8,0xc,0xf8,0xf7,0xfc,0xf9,0x15,0xef,0x19,0x1c,0x1,0xff,0xe2,0x1,0xf3,0x30,0xe,0xfb,0x15,0xe8,0x1c,0x0,0xfa,0x16,0xef,0xea,0xfb,0x5,0xf0,0xe,0x2,0x13,0xf4,0x1,0x3,0xe5,0x29,0x7,0x9,0x24,0xf9,0xe3,0xf8,0xde,0x2d,0xf4,0xf5,0x40,0xed,0xdf,0x7,0xef,0xf,0xa,0xb,0x32,0xd,0xe8,0x0,0xe6,0xf6,0xfc,0xfd,0x19,0x11,0x9,0xf3,0x3,0xea,0xf1,0xfb,0x2,0xfd,0x6,0xff,0xfe,0x9,0xec,0x6,0xc,0x15,0xf9,0x6,0xd7,0xe3,0xf7,0xed,0x1,0x3,0xfd,0x14,0x1,0xe,0xe0,0x37,0xd,0xd2,0x18,0x2f,0xea,0x12,0xd,0x5,0x3a,0xd5,0x7,0x1e,0xf2,0x21,0x11,0xf9,0x36,0xd3,0xf5,0x12,0xf6,0xfb,0xf6,0x6,0xf,0xde,0xf9,0x6,0x9,0xdf,0xff,0xb,0xf3,0xf5,0x1,0xf1,0xea,0xf2,0x2,0x12,0xfc,0xe,0xee,0xf8,0xeb,0x0,0xef,0x21,0xf,0x9,0xef,0xeb,0x1e,0xef,0xf2,0x26,0xf9,0x17,0xf1,0xf1,0xf0,0xc,0x10,0x1d,0xff,0x1d,0x6,0x3,0xf6,0xfb,0x14,0x1b,0x3,0x22,0xfd,0xec,0x3,0xfa,0xf8,0x1,0x2b,0x1e,0x1b,0x9,0x9,0x7,0xff,0xf0,0x20,0xee,0x14,0xfb,0xf6,0xf8,0x11,0xd9,0x29,0xf4,0xfa,0x7,0xef,0x20,0xf9,0xf2,0x30,0xee,0xf0,0xf3,0xd6,0xd,0xfe,0x3,0x36,0xf5,0xd7,0x1,0xe6,0x4,0xf0,0x5,0x1f,0xf,0xdd,0xff,0xf8,0x1f,0xf2,0x4,0x37,0xfa,0x0,0xfd,0xf8,0x10,0xe1,0xfb,0xd,0xed,0xf6,0xe2,0xfe,0x8,0xfe,0x7,0x8,0x8,0x11,0xa,0xf0,0xf8,0xf5,0x4,0xea,0x8,0x12,0x6,0xd,0xf,0x10,0x40,0x28,0xc0,0xfb,0x3f,0x8,0x1d,0x9,0x1b,0x3d,0xee,0xf4,0x29,0x13,0x20,0xfc,0x11,0x4c,0xdb,0x2,0x15,0x5,0xec,0xeb,0xa,0x22,0xe7,0x0,0x2,0x1,0xd4,0xea,0xa,0xf3,0xe3,0xf8,0xf5,0xfa,0x1,0xd,0x19,0x6,0x24,0x13,0x2,0xf5,0xf1,0xf1,0x1b,0xf,0x19,0x4,0xe3,0xf9,0xe7,0x2,0x29,0xfc,0x29,0xec,0xe9,0x4,0xdc,0x22,0x1d,0xfd,0x1f,0x1,0xec,0xe8,0xf5,0x14,0x1b,0x19,0x6,0xe,0x2,0xd,0xf9,0x6,0xfc,0x15,0x7,0xfa,0xc,0xe1,0x18,0x1a,0xe8,0x1b,0xe9,0xef,0xa,0x18,0xfc,0x5,0xf9,0x14,0xdc,0x4,0x1,0xff,0x7,0xfd,0xf0,0x2c,0xf2,0xec,0xe,0xe7,0x1a,0x5,0xe8,0x35,0x13,0x9,0xf9,0x7,0xfe,0xfa,0xd,0x40,0xc,0xea,0xf4,0x4,0x1,0x11,0xfc,0x23,0xeb,0xf4,0xe9,0x4,0xeb,0xe7,0x7,0x9,0xfb,0xf1,0xf6,0xfd,0x2,0xfa,0x2,0xff,0x0,0xff,0xf1,0xf1,0x1a,0xe9,0x10,0xe3,0xb,0xc,0x8,0x4,0x1b,0xa,0x2b,0x10,0xe1,0x1,0x1f,0x6,0x4,0xec,0x19,0x49,0xee,0xf8,0x22,0xc,0x20,0x2,0x7,0x31,0xe7,0xff,0xf,0xf0,0xfd,0xea,0x13,0x26,0xce,0xfa,0xff,0xee,0xe9,0xfe,0x15,0x8,0x4,0x5,0xd,0xfa,0xdd,0xf8,0x7,0xb,0x33,0xef,0xec,0xf9,0xd9,0xe6,0x1d,0x10,0x41,0xf6,0xdf,0x11,0xe3,0x14,0x1d,0xfb,0x2b,0x15,0xdc,0x9,0xf6,0x5,0x16,0x0,0x1c,0x27,0xe4,0xfc,0xf7,0x16,0x8,0x8,0x2f,0xdd,0xf8,0xfa,0xe9,0xe,0xb,0xb,0x2,0x12,0x2,0xfd,0x19,0x3,0xeb,0x11,0xf4,0x9,0x9,0x15,0x12,0xd,0xef,0x1c,0xe4,0xfe,0x17,0xc,0x9,0x4,0xea,0x2f,0xf2,0x1e,0x2,0xfb,0xfe,0xe3,0x0,0x2e,0x4,0xf9,0xc,0x5,0x27,0xc,0x7,0x2d,0xf7,0xb,0xfb,0xf9,0x1c,0xdf,0x11,0x36,0x5,0xf2,0x2,0xf8,0xb,0x7,0x5,0xfb,0xfc,0xe,0x13,0xfa,0xfb,0x9,0xf5,0xfd,0x6,0x15,0xf9,0x3,0x18,0xfd,0x1a,0xa,0x3,0xe2,0xfb,0x0,0x1e,0xfe,0x4f,0x27,0xe1,0xf7,0x31,0xf0,0x1b,0xec,0x7,0x5f,0xe2,0xf8,0x40,0x5,0x17,0x24,0xc,0x3c,0xf3,0x10,0x13,0xf8,0xb,0xf3,0xf9,0x36,0xe1,0xf3,0xf4,0xe8,0xef,0xf8,0xfc,0xeb,0xe3,0xfb,0xf0,0xee,0xdb,0x6,0xc,0x11,0x1e,0x10,0xe2,0xe9,0xeb,0xd,0x34,0xf,0x43,0xd9,0xef,0x8,0xec,0x5,0x1d,0x2,0x33,0xef,0xf4,0xf7,0xe6,0xf9,0x22,0x7,0x4,0x6,0xe9,0x2,0xf0,0xfc,0x24,0x20,0x24,0x17,0xe6,0xf,0x5,0xf6,0xfc,0x1f,0xf2,0x1,0xd,0xe7,0xff,0x1d,0xf0,0xfa,0xd0,0x0,0xff,0xe,0x23,0xf9,0xf3,0x11,0xde,0xd,0x5,0x4,0xb,0xb,0xfb,0x26,0xd,0xd,0xff,0xe8,0x16,0xe8,0xb,0x3c,0x18,0xe4,0x4,0xff,0xfa,0xf3,0xff,0x40,0xee,0x6,0xfc,0xd,0x0,0xf7,0x13,0x3f,0xf7,0x13,0x6,0x8,0xf9,0x13,0xf2,0x19,0xfd,0xf9,0xf3,0xe6,0xfc,0x7,0xf6,0xfd,0xa,0x22,0x0,0x1,0x19,0xff,0xe7,0xff,0x8,0xfd,0x3,0xfd,0x1f,0xe7,0x28,0x8,0xde,0xf3,0x43,0xf6,0xc,0xfe,0x1e,0x52,0xf2,0x4,0x17,0xf2,0x8,0xd,0x4,0x38,0xde,0xc,0x10,0xef,0xdf,0xf,0x1,0x24,0xde,0xe1,0xd,0xfd,0xd4,0xf6,0x12,0xe,0xed,0x1,0xf0,0xf3,0xfd,0xff,0x18,0xf3,0x36,0xda,0xf6,0xef,0xe8,0xef,0x37,0x27,0x4e,0xf8,0xf4,0xff,0xe5,0xf3,0x32,0xb,0x36,0x8,0xe9,0xf6,0xe2,0x13,0x21,0xfe,0x12,0xed,0xdd,0xfb,0xf8,0x5,0xf,0x3,0x1c,0x4,0xfc,0xf2,0x23,0xe,0x3,0xfc,0xf9,0x18,0xf7,0x1,0x1b,0x3,0xf5,0xfd,0xde,0xf3,0x19,0xfc,0x11,0x2,0xe7,0x13,0xde,0xd8,0xf2,0x5,0x28,0x2,0x2,0x27,0x7,0x8,0xff,0x7,0x27,0xe,0x19,0x40,0xfb,0x2,0xc,0xf6,0xd,0x7,0xf,0x47,0xf8,0x5,0xe,0xfd,0x3,0x1e,0x7,0x32,0xe7,0xf6,0x24,0x1,0x1,0x2,0xa,0xff,0xf6,0x26,0x15,0xf0,0x4,0x13,0x3,0xfa,0xfe,0xf6,0xf1,0x9,0x2a,0xe6,0xea,0xf6,0x17,0x13,0xeb,0xff,0x15,0xeb,0x23,0x6,0xc8,0xf6,0x33,0xeb,0xf4,0xe7,0x12,0x2a,0xe3,0xe6,0x32,0xfa,0x16,0x15,0x17,0x40,0xf1,0x8,0x1a,0xf3,0xf6,0xc,0xc,0x11,0xd0,0x22,0x2,0xee,0xea,0xf4,0xf8,0xf9,0x13,0x10,0x17,0xf5,0xf1,0xa,0xe,0xfd,0x32,0xda,0xf1,0xe2,0xdb,0xf2,0x34,0x1f,0x53,0xfc,0xe4,0xf2,0xf6,0xf2,0x1d,0x4,0x4a,0xec,0xee,0x6,0xdf,0x1,0x1a,0x4,0x27,0xfc,0xe6,0xfd,0xd9,0xfd,0xe,0x0,0xc,0x16,0xf3,0x3,0xf7,0xfc,0xe,0xf,0x9,0x6,0x6,0x4,0x8,0x2,0xed,0xf5,0xe4,0xe6,0x7,0x6,0x3,0x18,0xea,0x13,0xe2,0xfa,0x10,0xf2,0x2,0xec,0x3,0x3c,0xf6,0xf6,0xa,0x10,0x9,0xf8,0x15,0x24,0xfd,0xd,0x9,0x1,0x0,0xff,0x0,0x1a,0xf0,0xee,0x8,0x3,0x1d,0x5,0x16,0x46,0xe6,0xf8,0x8,0x0,0x9,0x9,0xff,0x1,0xfc,0x20,0xfc,0xec,0x5,0x1b,0x3,0xf1,0x12,0xe4,0xfa,0x24,0x1c,0xf5,0xf2,0x5,0x11,0xe7,0xfa,0x2,0x20,0xea,0x31,0x10,0xcf,0xd8,0x33,0xee,0xff,0x9,0x20,0x3f,0xe2,0xa,0x29,0xee,0x3a,0xf2,0x1e,0x39,0x2,0x1e,0xfe,0xf2,0xef,0xe2,0xd,0xf,0xf1,0x19,0x2,0xe7,0xec,0xff,0xfe,0xe4,0xfe,0xfb,0x2,0xf6,0xf1,0xf4,0x7,0x1a,0x2a,0xf9,0x6,0xf9,0xda,0xf4,0x22,0x2,0x4f,0xa,0xf3,0xfc,0xf3,0xf6,0x25,0xa,0x28,0x1,0xf7,0x9,0xe6,0x5,0x28,0xf7,0x1e,0xf2,0xee,0x13,0xee,0x5,0xf,0xa,0x9,0xe8,0xe8,0xe,0x5,0x12,0xf,0x15,0x2,0xec,0xf8,0x2,0xf7,0x5,0xf8,0xff,0xdc,0x0,0x1,0x0,0x12,0x17,0xec,0x19,0xfa,0x9,0xfa,0xf3,0x1d,0xb,0x7,0x25,0xea,0xc,0xf5,0xfa,0x4,0xf7,0xfe,0x33,0xfe,0x14,0xef,0x4,0xf0,0x0,0x0,0x3a,0xea,0xfa,0x10,0x1,0xe4,0x0,0xff,0x23,0xe9,0x26,0x15,0x10,0x4,0x14,0xd,0x8,0xf8,0xfd,0x10,0xfb,0x0,0x21,0x6,0xfa,0xf,0x8,0xf1,0x9,0x28,0xf0,0xd8,0xd,0x8,0x9,0x2,0xfb,0x12,0x3,0xe,0xfb,0xce,0xf0,0x39,0xe5,0x9,0xf6,0x1f,0x35,0xdd,0x1c,0x25,0xef,0x17,0xc,0xf6,0x3e,0xf0,0x21,0x8,0xff,0xd7,0xfc,0xfd,0x1f,0xe5,0x18,0x12,0xe9,0xf5,0xe9,0x12,0xf6,0x2,0x13,0xf4,0xa,0xfd,0x3,0x9,0x8,0x2f,0x7,0xee,0xfd,0xd7,0x0,0x2b,0x29,0x3b,0xdb,0xde,0xf1,0xe1,0xf7,0x47,0x12,0x35,0xc,0xe4,0x9,0xef,0x17,0x2b,0xea,0x2d,0xf8,0xe8,0x18,0xef,0x3,0x11,0xa,0x10,0xff,0xe8,0x7,0xc,0x7,0x3,0x18,0x5,0x8,0xf8,0xf8,0x6,0x18,0xe9,0xf9,0xe0,0xf,0xd,0x18,0x4,0x1,0xf0,0x1c,0xf6,0x14,0xfd,0x12,0xc,0xc,0x2,0x34,0xf6,0xe6,0xfd,0xf9,0xf9,0xfd,0x0,0x2a,0xfc,0xf9,0xff,0xa,0xfe,0x1b,0xf5,0x34,0xdc,0xf9,0x15,0x13,0xe7,0x1b,0xf7,0x25,0xfd,0x9,0x8,0xa,0xf0,0x17,0xf,0x4,0xf4,0xe9,0x6,0x7,0xf5,0x2,0xfc,0xf5,0x9,0xee,0xf1,0x7,0x38,0x3,0x5,0xf,0x16,0xf,0xed,0xff,0x21,0xf8,0x34,0x7,0xd1,0xf9,0x27,0x0,0xc,0x21,0x18,0x42,0xe6,0x2,0x1a,0xf1,0x2f,0xf1,0xe,0x3b,0xee,0xf8,0x8,0xea,0xfe,0xf9,0x3,0x18,0xf5,0xf8,0xd,0xeb,0x1,0x10,0x9,0x2,0x15,0xfb,0xf1,0xb,0xf2,0x6,0x8,0x9,0x2f,0x19,0x2,0xfe,0xe4,0x6,0x1f,0x17,0x49,0xf2,0xe2,0x2,0xef,0x4,0x26,0x16,0x3f,0x8,0xf1,0xa,0xfd,0xf9,0x28,0x1,0x15,0xb,0xf9,0x10,0xdc,0x2,0x20,0xf7,0x16,0xe6,0x9,0x3,0xf1,0xf5,0x12,0x1c,0xfb,0x2a,0x8,0xfa,0xa,0x16,0xf6,0x15,0xf0,0x6,0x11,0xfd,0xe,0xf9,0xf6,0x12,0xed,0xf3,0xfd,0x1f,0xb,0xfa,0x8,0x30,0xf8,0xff,0xb,0xeb,0x10,0xff,0x7,0x22,0xd,0x7,0x9,0x3,0xf6,0xf8,0xfc,0x26,0xf8,0xee,0x11,0x2,0x3,0xa,0xef,0x38,0xfe,0x13,0x1b,0x9,0xfe,0x6,0x5,0xf3,0x4,0xdf,0xfc,0x0,0xe7,0x15,0xec,0xf1,0xf8,0xfc,0xed,0x5,0xe,0xf3,0x15,0x9,0x1,0xd,0xfd,0x0,0x24,0xe2,0x31,0x13,0xd5,0x1b,0x2b,0xe8,0x3,0x8,0x1d,0x33,0xdc,0xfd,0x24,0xe4,0x20,0xfa,0x7,0x33,0x1,0x12,0x6,0xf5,0xef,0xf7,0xfa,0x13,0x1,0xec,0xee,0xe0,0xfd,0xd,0xff,0x9,0xf6,0x0,0xed,0x7,0xea,0xe,0xff,0xe,0x26,0xfc,0xf0,0xe7,0xe7,0xfe,0x30,0xff,0x24,0x4,0x6,0xf4,0xf5,0xf8,0x23,0xe,0x3d,0xf2,0xfd,0x4,0xe8,0xfb,0x23,0xfe,0x33,0xe1,0x1,0xfd,0xdc,0xfb,0xe,0xfa,0x22,0xfb,0x11,0xfa,0xff,0x8,0x21,0x30,0x13,0x3,0xf2,0x3,0xf8,0xf,0xec,0xd,0xef,0xf,0x10,0x10,0xf,0xf6,0xf9,0x1e,0xf7,0xe5,0x8,0xfa,0x9,0xff,0x0,0x15,0x2,0x0,0x8,0xfe,0xfb,0xe,0x15,0x28,0xfa,0xfb,0x13,0x6,0xfb,0x5,0xf6,0x11,0xf6,0xb,0x6,0x15,0xe1,0x0,0xe9,0xf,0xe1,0x1d,0x18,0xfd,0xb,0xf,0xff,0xf2,0xf5,0xfd,0x14,0xff,0xf4,0xfe,0xe2,0xf8,0x14,0xb,0xeb,0x7,0x35,0xe2,0xeb,0xb,0x4,0x22,0xfe,0xe,0x1d,0xf2,0x24,0x11,0xcc,0xec,0x25,0xf7,0xff,0xf9,0x6,0x29,0xe4,0x7,0x1c,0xdb,0xf8,0x1d,0xfa,0x44,0xf2,0x1,0xf,0xe6,0x11,0x3,0xee,0x17,0x6,0xe0,0xc,0xd8,0xe9,0xfd,0x11,0xfe,0x7,0xdd,0xea,0xff,0xde,0xdd,0xa,0x9,0x30,0xf2,0x1,0xe4,0xe0,0xeb,0x2d,0x12,0x2d,0xeb,0xfc,0xf0,0xe8,0xf9,0x1f,0x8,0x3f,0xeb,0xe,0x13,0xf9,0xc,0x1c,0x2,0x25,0xec,0xf6,0x5,0xf3,0xf4,0x18,0x8,0x12,0xe9,0xfb,0xfd,0xf9,0x8,0x13,0x1c,0x8,0xec,0xfe,0x2,0xf1,0x19,0xf3,0x1d,0xf1,0x7,0x11,0x12,0xfa,0xf2,0xf6,0xd,0xff,0x17,0xa,0xfb,0x1f,0xf8,0x11,0x24,0xf6,0xfc,0xfe,0x7,0xed,0x5,0x1c,0x21,0xfe,0xfe,0x16,0xd,0x8,0xf,0x9,0x33,0xf4,0x1f,0x14,0xc,0xfe,0xf5,0xeb,0x2a,0xee,0xf3,0x12,0x19,0xec,0x1,0x6,0xf7,0x5,0x22,0xb,0xeb,0xeb,0x6,0xe1,0xf5,0xd,0xee,0xfb,0xa,0x31,0xff,0xe3,0xea,0x18,0x9,0xe3,0x7,0x1a,0xf8,0x15,0xfc,0xcc,0xf2,0x2a,0xe5,0x1,0xea,0x10,0x1f,0xd9,0x2,0x13,0xf6,0x16,0x1,0xe,0x3c,0x2,0x17,0x4,0xf1,0xf7,0x2,0x7,0xc,0x2,0x1f,0xf4,0xe6,0xf0,0xe9,0x5,0xf4,0xfd,0xe4,0xf7,0xe9,0xfc,0xef,0x6,0x2,0x26,0xf1,0xf1,0xeb,0xe9,0xe6,0x30,0x1c,0x38,0xf,0x3,0xf1,0x10,0x4,0x30,0x19,0x1f,0xfb,0xfc,0x5,0xe2,0xfe,0x18,0xf2,0x1c,0xf2,0xf5,0xe,0xf2,0x5,0x1d,0x28,0x12,0xf0,0xf0,0xf,0xa,0x3,0x1a,0x1a,0xf3,0x8,0x13,0xef,0xf5,0x1c,0x6,0x0,0xee,0x12,0x1d,0x3,0x18,0x6,0xa,0xe,0xf0,0xeb,0xfa,0xd,0x8,0xff,0x6,0x24,0xf,0x3,0xa,0xf,0xe,0xff,0x8,0x33,0xfc,0x0,0xe,0xfb,0xfb,0x5,0x7,0x19,0xe8,0xe7,0x12,0x11,0x15,0xf7,0xc,0x1a,0xf6,0x28,0x8,0xeb,0xf2,0x25,0xee,0x1,0x3,0xec,0xed,0xfa,0xf0,0xf2,0xef,0xf1,0x2,0x23,0xef,0x1,0x41,0xfa,0xf4,0xf4,0x15,0xf5,0xf5,0xf9,0x28,0xde,0x20,0xf6,0xc7,0xde,0x21,0xe4,0xfe,0xec,0xd,0x2c,0xee,0x24,0x10,0xf0,0x1d,0x12,0xe,0x2b,0x6,0xf8,0xfd,0x1,0x8,0xef,0xfd,0xf,0xeb,0xed,0xe1,0xdf,0xf1,0xe5,0x16,0xe3,0x8,0xfc,0xf6,0xf6,0xd8,0xf0,0x23,0xfc,0x2b,0xf5,0xff,0xe7,0xf4,0xe9,0x29,0x9,0x2b,0xc,0xff,0x8,0xb,0xed,0x29,0x14,0x3c,0xf5,0xeb,0x18,0xf6,0x10,0x22,0xf9,0x17,0x23,0x2,0xc,0xf6,0xfa,0x2f,0xfe,0x1e,0xeb,0xfd,0x3,0xf0,0x7,0x1c,0x9,0xfa,0xe1,0xd,0xf,0x18,0x3,0xfe,0xf0,0xec,0xb,0x10,0x2,0x14,0x6,0xef,0xf7,0xea,0xb,0x5,0xfe,0x1f,0x6,0xe,0x7,0x0,0xe1,0x1,0x1,0x7,0x5,0x9,0xf7,0xef,0x15,0xf7,0x12,0x5,0x3,0x4,0x1d,0x4,0x10,0x12,0x6,0x5,0x0,0x8,0x18,0xd6,0xf2,0xfa,0x7,0xf8,0x12,0x7,0xfd,0xdd,0x0,0x4,0xfb,0xf8,0x9,0xf3,0x9,0xfb,0xf0,0xe8,0x9,0x27,0xf5,0xf8,0x6,0x1,0x2,0xe,0xf6,0x1f,0xfa,0x29,0xf8,0xd6,0x1,0x22,0xf8,0x1d,0xe3,0x1a,0x39,0xa,0xd,0x19,0xf5,0x12,0xfb,0x1d,0x2a,0x3,0xf6,0xc,0xf2,0xfd,0xec,0x18,0x13,0xfe,0x1a,0xe8,0xdd,0x1,0xf8,0x30,0x1,0xf8,0xfe,0xe4,0xe7,0xff,0xeb,0x23,0xfa,0x2c,0xf0,0xfc,0xe7,0xa,0xf8,0x18,0x10,0x23,0x1,0xfa,0xe8,0xf1,0xfa,0x1d,0xe,0x17,0xe7,0xe4,0xf5,0xf9,0xc,0x17,0xc,0x13,0xe8,0xe1,0x17,0x19,0x5,0xb,0xf,0x23,0xed,0xff,0xfe,0xe0,0x14,0x16,0x0,0xd,0x1c,0xb,0xf5,0xfb,0x18,0xee,0xff,0xff,0xf3,0x18,0xc,0x5,0xfa,0xf6,0xfe,0xfe,0xf8,0xf8,0x9,0xef,0xf8,0xe,0xf0,0x0,0xf8,0xc,0xf8,0xf6,0x7,0x16,0x11,0xf8,0xea,0xff,0xff,0x1,0x20,0x7,0x8,0xfd,0x1c,0xfc,0x6,0xed,0xd,0x8,0x15,0xf0,0x25,0x1,0x1b,0x0,0x2,0xfe,0x1,0x5,0x1,0xfd,0xf1,0xe5,0xc,0xe4,0xe1,0xf0,0xfa,0xee,0xe,0x35,0xee,0x15,0xef,0xa,0xf9,0x1,0xf5,0x1f,0x5,0x1f,0xd,0xe1,0xf4,0xff,0xf5,0x23,0x2,0x18,0x30,0xfc,0xf0,0xd,0x4,0xd,0x6,0x29,0x1d,0xf9,0x8,0x6,0xe5,0x13,0xfd,0xd,0x26,0xef,0x9,0xdc,0xf2,0x5,0xdf,0xc,0xf6,0xf3,0xd9,0xf8,0x8,0xef,0xeb,0xf,0xf9,0x3a,0x3,0xff,0xe0,0xf7,0xf0,0x15,0x12,0x41,0xb,0xf1,0x4,0x4,0xe2,0xe,0xb,0x2c,0x3,0xea,0x2,0xfb,0xe7,0x8,0xe9,0x22,0xf3,0xf2,0x1c,0xfa,0xf3,0x11,0x4,0x1f,0xf5,0x2,0xf,0x1a,0x1f,0x24,0xb,0x6,0x1f,0xf3,0x6,0x0,0x2,0xe8,0xf6,0xf4,0xe8,0x7,0x2e,0xfb,0xf8,0x10,0x9,0xf0,0xe,0xff,0xfe,0x1c,0x14,0x17,0x6,0xe2,0xf1,0xfa,0x1,0x11,0x13,0x12,0x29,0xf1,0xf,0x1f,0xfa,0xfd,0xfd,0x2,0x7,0xe,0xfb,0xe,0x4,0x1,0x1,0xed,0xfe,0xde,0xfd,0x8,0xef,0xf6,0xa,0xff,0xf,0xe7,0xf2,0xf,0x2,0xea,0x10,0xf9,0xec,0xfd,0x9,0xea,0x1f,0x46,0xdd,0xe2,0xf7,0x8,0xf5,0xf7,0xe9,0x33,0xfb,0x2f,0xf6,0xb5,0x1d,0x15,0xeb,0x11,0xf7,0x2a,0x2e,0x8,0x1d,0xf4,0xfb,0x15,0xfa,0x22,0x34,0xff,0x6,0xf6,0xfd,0xfa,0xf9,0x3,0xf5,0xf4,0xf4,0xd5,0xea,0x1,0x8,0x22,0xf1,0xf2,0x6,0xd1,0xe5,0xc,0xef,0x12,0x3,0x8,0x2,0xf7,0x5,0x1b,0x7,0x39,0x34,0x21,0xe2,0xe3,0xb,0xc,0xf6,0x29,0xf7,0x24,0xa,0xfc,0xff,0x1a,0xfd,0x5,0xff,0xff,0xe,0xa,0x1a,0x9,0xfb,0x15,0x4,0x3,0xf7,0xfe,0x0,0xfc,0xfb,0x11,0xfa,0x1d,0xe,0x6,0xed,0xfc,0x23,0xd8,0xf2,0x4,0xe5,0xf,0x16,0x29,0xfe,0xf5,0xec,0xe2,0xe,0xeb,0x9,0x1d,0x11,0x5,0x11,0xe4,0x29,0x12,0x2,0x12,0x19,0xe,0x1a,0xee,0xf9,0x5,0x9,0xf5,0xfd,0x5,0x4,0xe4,0xf1,0x17,0x1,0xf2,0xfe,0xb,0xf4,0xd,0x4,0x6,0xfe,0xff,0xec,0xe9,0x0,0xff,0x3,0x3,0xfd,0xf1,0x15,0xfc,0xf3,0xff,0xfe,0x9,0xee,0x3c,0x1,0xec,0x2,0xf0,0xf6,0x20,0xeb,0x16,0x7,0x32,0xf3,0xce,0xf0,0x2,0xd4,0x11,0xe6,0x28,0xe,0xe3,0x21,0xee,0xce,0x1e,0xd9,0x23,0x26,0x6,0xfa,0xf9,0xf1,0x1,0xe6,0xb,0x7,0xdc,0x21,0xbc,0xe3,0xef,0xf8,0x12,0xfc,0xe6,0xfe,0xf5,0xd4,0x15,0xa,0x0,0x13,0xfc,0xec,0xf3,0xd6,0x1a,0xe3,0x21,0x36,0x2a,0x3,0xe9,0xe3,0xff,0x0,0x13,0x1c,0xe,0x20,0xe5,0xf5,0x24,0xb,0x20,0x14,0x13,0xf8,0x4,0x1b,0x2f,0xa,0x15,0x0,0xf4,0x1a,0x11,0xd,0x3,0x18,0xf,0x18,0x4,0x1f,0xfb,0xf2,0x1f,0x15,0x3,0xfb,0xb,0x17,0xfb,0xb,0x1b,0x1f,0xf4,0x7,0xf9,0xf9,0xf8,0xf4,0x14,0xf,0xf6,0xfe,0xdd,0xb,0xff,0x1,0x18,0x4,0x1b,0xa,0xed,0xe7,0xf9,0x16,0x2,0x1,0x0,0xf7,0xf1,0x7,0xf0,0x6,0xf8,0xb,0x2,0xf3,0xff,0x20,0xfd,0x1,0x4,0xf5,0xd9,0xf4,0xf4,0xf2,0xe8,0xff,0x4,0x0,0xf0,0xe2,0xfe,0xed,0x1b,0xef,0x20,0xfa,0xfb,0xf4,0x2,0x18,0x7,0xfb,0xef,0xe4,0x8,0xd,0xe1,0xe,0x25,0xc6,0xfd,0xc,0x1c,0xb,0xf0,0x1,0x1c,0xd4,0x11,0xf5,0x1b,0x9,0xfb,0xda,0x13,0xe3,0xf9,0x10,0x14,0xf0,0xf0,0xfd,0x1f,0xcf,0xf4,0xe4,0xfb,0xe,0xa,0x11,0xed,0xdc,0xfc,0xe6,0xf7,0xfc,0x13,0xe1,0xb,0xe4,0x4,0x11,0xee,0x21,0x14,0xe1,0x7,0xe4,0xfb,0x8,0x3,0x2b,0x27,0xf6,0xd,0x2,0x1b,0x9,0x9,0xf8,0x14,0x19,0xf,0xb,0x1,0x10,0x9,0x12,0x3,0xf5,0x18,0xf3,0xfb,0xf5,0x2,0xe,0xd,0x0,0x7,0xfc,0x18,0x25,0xb,0xf0,0xf9,0xe6,0x8,0x1,0x24,0x14,0xfa,0xed,0xe5,0x1f,0x9,0xfe,0x8,0xee,0x1a,0x1a,0x5,0x0,0xff,0xc,0xfe,0xf9,0x11,0x11,0xea,0xfe,0x8,0xf9,0xf0,0xe4,0x1,0xd,0xf1,0x0,0xb,0xea,0x19,0xea,0xf3,0xf8,0x8,0x12,0x1c,0x1f,0xfb,0xef,0xf0,0xf2,0x14,0xe1,0x3,0xfa,0xf9,0xda,0xe9,0xfc,0xf3,0xff,0x12,0x4,0xf7,0xfc,0x17,0xf,0xfc,0x29,0x3,0xe5,0xf2,0xee,0x1e,0xfa,0x4,0xed,0x25,0xf4,0xe1,0x15,0x10,0x1e,0xef,0x1c,0x4,0xde,0xe5,0x8,0x21,0xfd,0xfd,0xea,0x3,0xca,0xda,0x26,0x0,0xa,0xfd,0x5,0xf0,0xd4,0xe1,0x1a,0xe4,0xf5,0x7,0xe7,0xfa,0xdf,0xd4,0x3,0xf0,0x10,0x15,0xc,0xf4,0xed,0xe3,0xfb,0xf,0x1e,0x16,0x9,0x0,0xec,0xea,0x13,0x16,0xb,0x1,0xfb,0xff,0x0,0xfb,0x7,0x13,0x8,0xf4,0xe4,0x12,0x0,0xfb,0xfa,0xfc,0x8,0xeb,0x19,0x2,0x1c,0xe8,0x26,0xf3,0x10,0x9,0xf,0x19,0x2,0xfb,0xec,0xf7,0xe2,0xfb,0xfa,0x11,0xf3,0xb,0x8,0xff,0xd9,0xf8,0x12,0x18,0x6,0x7,0x22,0xff,0x19,0xf5,0xb,0xa,0x13,0xf2,0xfa,0x2,0x21,0xeb,0x11,0x17,0x17,0xec,0xe1,0xe,0xf7,0xe8,0xd8,0xe,0x1,0xf1,0xed,0xed,0xf0,0x9,0xf7,0xe7,0xfd,0xf0,0xf9,0xdb,0xee,0xdc,0xfb,0xf8,0xa,0xf5,0xb,0xd4,0xd7,0x8,0x6,0x18,0x6,0xc,0x13,0xfd,0x9,0x13,0x26,0x12,0xf4,0xef,0x0,0xf5,0x28,0x18,0xfe,0x4,0xe,0x21,0x1a,0xa,0x1e,0x9,0xf0,0xd,0xf,0xec,0xf3,0x17,0x22,0x0,0xec,0xe,0x1,0xe9,0x8,0x9,0xf2,0xf2,0x8,0xf0,0xb,0xd9,0x9,0x14,0xf5,0xf6,0x4,0x19,0xf4,0x11,0xe9,0xf2,0xd,0x20,0x17,0xa,0x5,0xc,0x4,0x1,0xfd,0xf4,0xfb,0x1b,0xc,0xf2,0xb,0xff,0xfe,0x1,0xd8,0xfa,0xe,0xf5,0x14,0xf9,0x1,0x4,0xf8,0xfa,0x2,0xe8,0xf9,0xf9,0xea,0xf1,0x7,0xff,0x1e,0x1,0xb,0xf7,0xa,0xf7,0xc,0xfd,0xec,0xf3,0x5,0xf8,0xda,0xb,0x15,0xf6,0xee,0xf9,0x10,0xfa,0xfe,0x8,0xf0,0xe6,0xec,0x5,0xff,0x15,0x19,0x1f,0x11,0xfc,0x9,0x8,0x1,0x6,0xfe,0x4,0x8,0xfb,0xfb,0x8,0xf4,0xf6,0x28,0x10,0xf9,0x28,0xb,0xf8,0xd,0x1,0x0,0xff,0x2,0x5,0x8,0xea,0xe9,0xf4,0xf6,0x1,0xea,0xdf,0x1f,0xfe,0xa,0xf9,0xf7,0xc,0x1b,0x6,0xed,0xf6,0xf2,0x3,0x3,0xfd,0x4,0xf5,0x10,0xa,0xb,0xf4,0xf8,0xf1,0xe7,0x5,0xfe,0xe7,0xb,0xf1,0xec,0xf4,0xec,0x6,0xee,0xde,0x5,0x1b,0xfe,0x13,0xf3,0xd9,0xea,0x4,0x10,0x5,0xed,0x15,0x2,0xb,0x10,0xfa,0x2,0x5,0xb,0x2,0x7,0xfc,0xf5,0x15,0x14,0x5,0xf7,0xc,0xfe,0xf6,0xf4,0xfa,0x6,0xfc,0x13,0xdc,0xe4,0x9,0xfa,0x2,0x23,0xec,0x6,0x11,0x13,0xf8,0xfa,0x27,0x28,0xb,0x23,0xec,0xf1,0x9,0x17,0xf,0x13,0xff,0xf2,0xfc,0xa,0xf5,0xd,0x3,0x26,0x1,0xf,0xfe,0xf1,0xfb,0xe6,0xf0,0x2,0xf2,0xff,0x2,0x11,0xff,0xfd,0x1c,0x2,0xb,0xf6,0x14,0xc,0xb,0x21,0x28,0xf0,0x11,0x5,0x6,0xed,0xf9,0xa,0xf2,0xef,0xf8,0xf1,0xfe,0xd,0xf9,0xf7,0xea,0x0,0x8,0xdb,0x2,0xf,0xfe,0x4,0xef,0x20,0x16,0x1,0xe8,0xed,0xe4,0x22,0xf6,0x19,0x0,0x4,0x1,0x13,0xeb,0xd,0xec,0x1,0x8,0x5,0xc,0xe,0xfe,0x2,0x12,0xf7,0x27,0xf9,0xfd,0x18,0xfe,0x24,0xf7,0x13,0xed,0x1e,0x9,0xff,0xd8,0xf4,0x12,0xf8,0x4,0xc,0x1c,0x11,0xfd,0x17,0x1d,0x1,0x13,0xee,0x11,0xf3,0xf8,0x6,0xf6,0x16,0xfe,0x15,0x16,0xdc,0x1f,0x0,0x25,0xee,0xff,0xf7,0xf6,0x2,0xdd,0x15,0xf1,0x14,0x8,0xe8,0xe5,0x21,0xea,0xf0,0x1a,0x7,0xea,0x8,0xea,0xe4,0x1e,0x0,0x13,0x17,0xec,0x11,0xd6,0x11,0x18,0x17,0x4,0x15,0x3,0x3a,0xd6,0x2,0x7,0x4,0xe6,0xe5,0xfe,0xe,0xff,0xed,0xfc,0xfb,0xff,0x1c,0x6,0xa,0xfb,0xf9,0xea,0x1a,0x21,0xf5,0x4,0x6,0xa,0xe3,0x16,0xea,0x4,0xe2,0xf9,0xf9,0xe6,0xfb,0xf,0xfc,0x6,0xfb,0x10,0x7,0x7,0x13,0x7,0xfc,0x16,0xef,0x7,0xdc,0x12,0x1f,0x8,0xf4,0xe9,0x14,0x6,0xf7,0xf1,0xc,0x1,0xc,0xe6,0x4,0xf3,0xf2,0xe5,0xf3,0xef,0x1d,0xf6,0x20,0x7,0xfe,0xf4,0x5,0xee,0x10,0xfd,0xe,0xb,0x2,0xd,0xd8,0x7,0xfb,0x26,0xa,0x1c,0x21,0x6,0x1f,0xf4,0x6,0x37,0x18,0xfa,0x16,0x1e,0x24,0xfb,0xf0,0x12,0xf9,0x2,0x9,0x17,0x16,0xf3,0xf9,0x17,0xf2,0x2,0xa,0x2d,0xe7,0xe3,0x25,0xf0,0xf9,0xf,0xdd,0x15,0xe6,0x4,0xfc,0xf1,0x17,0xa,0xea,0x24,0x7,0xf1,0x11,0x13,0x29,0xf4,0xc5,0xfb,0x7,0xef,0x13,0xb,0xe1,0xf1,0xeb,0xf8,0x1b,0x9,0x8,0x1f,0x15,0xf2,0x5,0x2,0xdd,0x9,0xf,0x16,0x10,0x1,0x30,0xf2,0xe0,0x27,0xfe,0xf1,0xe,0xe,0x7,0xe6,0x7,0xb,0x18,0xfe,0xf,0x1,0x7,0xf4,0x7,0x10,0xe7,0xfb,0xf3,0xf7,0xb,0xf9,0x15,0x18,0x25,0xc,0x14,0x2,0x8,0xa,0xf,0x10,0xec,0xee,0x1a,0x3,0x14,0xf,0xfa,0x25,0xff,0x18,0xd,0xb,0xea,0x1f,0x28,0x10,0xc,0xe7,0xee,0xf7,0xfa,0x3,0x15,0xc,0x1d,0x1,0x0,0x12,0xee,0x1,0xf1,0xf8,0xb,0xf3,0xfd,0x4,0xf8,0x2,0x1e,0xe,0xf3,0x2,0x10,0xfd,0x7,0xb,0x9,0x3,0x10,0x3e,0x8,0xe,0xc,0xf4,0xe7,0xfd,0x1c,0x27,0x1a,0xed,0xe1,0x8,0xdc,0xd9,0xf1,0x1e,0x7,0x12,0xf1,0x10,0xfb,0xc8,0x8,0xf,0x3,0x1d,0xdc,0x23,0x4,0xf9,0xa,0xff,0x8,0xe,0xc9,0x39,0xa,0x1,0x7,0xec,0xe0,0x5,0xe8,0x14,0xd8,0xe1,0xfa,0xd6,0xf8,0xed,0xdb,0xff,0x1d,0xf5,0x17,0xf,0x1c,0xdc,0xed,0xff,0xff,0x4,0x13,0xf5,0xe7,0xd2,0x12,0xdb,0xe1,0x13,0x11,0x23,0xe,0xf9,0x31,0xdc,0xef,0x7,0xa,0x20,0xf2,0xf9,0x13,0xff,0x1c,0x2a,0xdf,0xdb,0xe7,0x11,0xf2,0xfd,0xfb,0x28,0x0,0x15,0x3,0x2,0x20,0x7,0xf7,0x19,0x13,0x13,0xf6,0x9,0xfe,0xfd,0x20,0x14,0xf5,0xf5,0xfc,0x14,0xe,0x17,0xfe,0x15,0x4,0xf9,0xf6,0x1d,0xf6,0x1b,0xe4,0xee,0xfd,0x0,0xe9,0xee,0xce,0xf,0x20,0x5,0x2,0xd,0x6,0x5,0xf8,0xef,0xdf,0x16,0x17,0xe6,0xf1,0x10,0xf3,0x6,0x4,0xdb,0xfb,0xe7,0xf8,0x2,0x11,0xff,0xd,0xa,0xfa,0x27,0xa,0xfc,0xe8,0x11,0x17,0xf0,0xd,0xd,0xee,0xdf,0xdd,0xf1,0x15,0xd6,0xf7,0x0,0xef,0x2e,0xe6,0x24,0xfd,0xd5,0x4,0xf0,0x8,0x8,0xed,0x22,0x7,0xe1,0x9,0xd0,0xb,0x18,0xe6,0x3f,0xa,0xe5,0xe2,0xf9,0x8,0x2,0xd6,0x13,0x15,0xbd,0x0,0xe,0xf8,0xe2,0xca,0xec,0xe,0xe6,0xef,0x15,0x11,0xcb,0xdf,0xf9,0x3,0x22,0x10,0xfb,0xf9,0xe5,0x8,0xe1,0x11,0x10,0xfc,0xfa,0x0,0xf8,0x30,0xe5,0x8,0x14,0xe8,0x12,0xe2,0x4,0x19,0xb,0xfa,0x33,0xf3,0xec,0xfe,0xf8,0x25,0xf8,0x21,0x28,0xef,0x0,0xde,0xff,0x2b,0x3,0xfc,0x10,0xc,0xcf,0xfd,0x19,0xa,0xc,0xf2,0xf7,0xc,0xfd,0x2,0x1c,0xdf,0x26,0xd,0xf0,0xb,0xce,0x15,0xfb,0xec,0x27,0xf6,0xf9,0xe5,0xe2,0xfb,0xfd,0xd8,0x28,0xec,0xe9,0xf2,0xca,0x9,0x2,0x6,0xc,0xfa,0x5,0x1,0xd5,0xa,0x2,0xfb,0x4,0x17,0xdd,0xfe,0xeb,0xf1,0x9,0x10,0x12,0xff,0x0,0xe0,0x26,0xf7,0xed,0xf4,0x0,0xf2,0xfa,0x7,0x2,0xf5,0x6,0xe8,0x3,0xfd,0xdc,0xf2,0xc2,0xff,0xb,0xd6,0x25,0x4,0xe9,0xf0,0xd9,0x8,0x9,0xc5,0x23,0x12,0xf6,0x13,0x11,0xf3,0x18,0xf0,0x34,0xfe,0xfe,0xed,0xea,0x2,0x17,0xdc,0x1b,0x1b,0xea,0xfe,0xea,0xfe,0xf2,0xc4,0xfd,0x4,0xe9,0xd,0xd,0x9,0xca,0xd4,0xe1,0x4,0x1e,0xff,0xf,0xef,0xd6,0xf,0xd5,0xf8,0x26,0xd6,0x33,0xe8,0xf5,0x3b,0xf1,0xe8,0x39,0xe8,0x8,0xe5,0x1,0x2,0x4,0xf6,0x19,0xa,0xd0,0xeb,0xb,0x15,0xf7,0xe,0x23,0xf6,0xf4,0xd8,0xf4,0x17,0x23,0x25,0x14,0x1,0xd7,0xfd,0xf9,0x1f,0x1b,0x11,0xa,0x18,0xf5,0xf5,0xf,0xe0,0x2e,0x1,0xe5,0xdb,0xe2,0xf2,0x14,0xfa,0x2a,0x0,0xe2,0xea,0xfd,0xe,0xfc,0xc1,0x35,0x8,0xf6,0xf9,0xec,0x0,0x6,0x0,0xb,0xf6,0x1,0xfe,0xea,0xb,0x8,0x5,0xe4,0xea,0xd7,0xfd,0xee,0xf3,0xc,0xc,0xd,0x2,0xfd,0xee,0x17,0x10,0x13,0xfd,0x7,0x3,0xf8,0xc,0xd4,0xed,0xfe,0x7,0xf4,0xee,0xf4,0x3,0xc2,0x18,0x2c,0xd1,0x33,0xd8,0xdb,0xfa,0xed,0x10,0x1c,0xe3,0x37,0xa,0xea,0xfe,0xf6,0xef,0x20,0xed,0x32,0xf7,0xf5,0xf3,0xca,0xfd,0xa,0xcf,0xd,0x10,0xde,0x7,0x18,0x10,0xf0,0xd6,0xc,0x4,0xeb,0x1a,0xf9,0x8,0xc4,0xcb,0xe4,0xb,0x19,0xfc,0x29,0xf6,0xec,0x7,0xf3,0xed,0x2b,0xe9,0xfa,0x2,0xec,0x2b,0xf0,0xf2,0x2d,0xe8,0xed,0x0,0x12,0x13,0xed,0x1a,0x3d,0xf0,0x5,0x4,0xfc,0x13,0x10,0x1,0x40,0xf2,0x6,0x2,0xf9,0x22,0x24,0xff,0x18,0x0,0xeb,0xe8,0x14,0xf9,0x25,0xe0,0xff,0x3,0xe5,0xfd,0x8,0xea,0x2e,0xb,0x5,0xe7,0xde,0xe4,0xf5,0xea,0x3a,0xf4,0xf4,0xe7,0xed,0xec,0xf8,0xee,0x30,0xa,0xdb,0x5,0xf7,0x16,0xff,0xf7,0xfa,0x1f,0xef,0xe4,0xce,0xf8,0x13,0x4,0xf9,0x1,0xe1,0x3,0xf9,0xf9,0x8,0x4,0xfa,0xe4,0xe7,0xf7,0x28,0xfd,0xfd,0x0,0xfc,0xfb,0xef,0xa,0xec,0xc,0xa,0xd2,0x5,0xfb,0xcd,0xfb,0x9d,0xea,0x1c,0xe5,0x25,0xe8,0xea,0xb,0xf0,0xf3,0xd,0xab,0x49,0xe,0xeb,0x0,0xe2,0x3,0x29,0xe0,0x3d,0x6,0xf7,0xf8,0xcf,0xc,0x1a,0xd6,0x1f,0xef,0xfd,0xff,0xef,0xc,0xdb,0xe0,0x20,0x6,0xdf,0x1a,0xe7,0xfc,0xb2,0xd1,0xdf,0x13,0x7,0x1f,0xc,0xf7,0xde,0xa,0xdb,0xdf,0x1a,0xf5,0x29,0xd,0xeb,0x2c,0xcf,0xe,0x26,0xfe,0xef,0x4,0xf5,0x14,0x9,0x13,0x34,0xff,0xfe,0xe,0x6,0xe,0x10,0xf9,0x2a,0xb,0xe6,0xfe,0xf1,0x1a,0x36,0x29,0x29,0x5,0x5,0xd8,0x14,0x12,0x26,0xb,0x18,0xff,0xd7,0xdf,0xf,0xed,0x31,0xf7,0xfc,0xec,0xb,0xef,0xc,0xd2,0x30,0xf9,0x4,0xfe,0xef,0xe4,0xfb,0xd1,0x32,0xe5,0xee,0xf0,0xc,0xe6,0x13,0xed,0x1e,0xb,0xe4,0xe0,0xfa,0xf4,0x14,0xf4,0x18,0xf7,0xd9,0xf6,0xed,0xea,0xfc,0x6,0xfc,0xf5,0xed,0xeb,0x5,0x3,0x1b,0xb,0xff,0xb,0xef,0x1,0xf1,0x16,0x5,0x0,0xee,0xa,0xdb,0x10,0xb4,0x14,0xf,0xe1,0x1c,0xfd,0xf0,0xf8,0xc3,0x11,0x17,0xba,0x47,0x15,0xe6,0x1,0xea,0xf1,0xc,0x8,0x4a,0x15,0xf0,0xf7,0xea,0x0,0xf5,0xd4,0xf1,0xff,0xe0,0xc,0xf4,0x17,0xd8,0xea,0x3,0xff,0xd5,0x18,0xfb,0x7,0xc7,0xc9,0xdd,0xf3,0x15,0xd,0x22,0xea,0xdb,0xa,0xd6,0x9,0x1d,0xe5,0x2d,0x4,0xfc,0x35,0xc6,0xe,0x33,0xf1,0xd7,0xea,0x1,0x1b,0xe,0x1,0x2a,0xff,0xef,0xf1,0xf7,0xf,0xff,0x0,0x3b,0xe8,0xa,0xff,0xf4,0xd,0x1f,0x4,0x17,0xf7,0xdf,0xec,0x12,0x26,0x36,0x7,0xc,0x6,0xe7,0xd6,0x13,0xe3,0x30,0x9,0x0,0xf5,0xe0,0xf3,0x11,0xe2,0x38,0xd,0xf6,0x5,0xec,0x5,0x0,0xe5,0x24,0xef,0xfe,0xf8,0x0,0xd8,0x18,0xf1,0x26,0xb,0xf2,0xfc,0xe0,0xe4,0x6,0xb,0x1a,0x5,0xc6,0xf6,0xe8,0xde,0xfe,0xc,0x3,0x9,0xfe,0xe2,0x18,0x1b,0xfb,0xf7,0x6,0xf1,0xfe,0xf6,0xef,0x1b,0x7,0xd,0x1,0xa,0xed,0xf0,0xad,0x1a,0x17,0xd6,0x37,0xfd,0xd8,0xec,0xca,0xf1,0x15,0xc4,0x33,0xf1,0xed,0xf0,0xe9,0x15,0xd,0xf2,0x36,0xde,0xfd,0xe,0xfb,0x10,0xf,0xf6,0xf9,0xc,0xea,0xf0,0xe5,0xb,0xee,0xc1,0x10,0xf4,0xe8,0x1f,0xee,0x0,0xd0,0xe4,0xe7,0x13,0x7,0x27,0x12,0xea,0xea,0xf,0xea,0xf4,0x14,0xee,0xfe,0x9,0xfb,0x31,0xdb,0x1b,0x1c,0xe7,0xef,0xf5,0xf7,0x1a,0x6,0x1,0x2c,0xed,0xfb,0x4,0xfa,0x7,0x19,0xec,0x2b,0xd,0xfc,0xd8,0xfc,0xf,0x1f,0xfc,0x2d,0xf3,0xc9,0xda,0xa,0xfe,0x29,0x0,0xfa,0x9,0xe8,0xf6,0x21,0xf3,0x4a,0x1a,0xf8,0x0,0xe7,0xf0,0x21,0x1,0x22,0xf3,0x0,0xe9,0x6,0xe3,0x15,0xd7,0x3d,0xc,0x7,0xf1,0xf3,0xec,0x17,0xdf,0x29,0x1b,0xfd,0xfe,0xeb,0xed,0x17,0xf6,0x23,0xa,0xea,0xee,0xf9,0xf3,0xf,0xc,0xf8,0xf5,0xed,0xe8,0x1c,0x14,0x7,0x17,0xb,0xd,0xed,0xf7,0xed,0x10,0x7,0xd5,0xf2,0x9,0xd6,0xf7,0xb5,0xf6,0x19,0xc9,0x25,0x15,0xe8,0xf5,0xc4,0xf9,0x2a,0xb0,0x39,0xe,0x2,0x11,0xf0,0xf7,0x1d,0xeb,0x39,0x10,0x2,0x15,0xe0,0x8,0x1,0xee,0x1c,0x1e,0x8,0x4,0xf2,0x2,0xe8,0xda,0xfa,0xfb,0xe0,0xfe,0x5,0x2,0xd3,0xca,0xf4,0xec,0x10,0x16,0x5,0xd,0xd7,0x9,0xdc,0xf6,0x1e,0xf8,0x10,0xed,0xf7,0x27,0xf5,0x8,0x28,0xee,0xec,0xe0,0xf8,0x17,0xfb,0x23,0x2e,0xf1,0xfa,0xf5,0xfc,0x1a,0x10,0xf7,0x32,0xfb,0xfb,0xe8,0xf1,0x3,0x24,0xeb,0x25,0xf9,0xca,0xf1,0xfe,0x1,0x2e,0x7,0x18,0x3,0xe5,0xea,0x10,0xfa,0x3b,0x7,0xf,0x11,0x4,0xf7,0x1d,0xf1,0x24,0xd9,0x8,0xef,0x2,0xdd,0x7,0xc8,0x2c,0xd,0x6,0xec,0x17,0xda,0x21,0xdf,0x34,0xd9,0xfb,0xf2,0xf4,0xec,0xe,0xa,0xf,0xf,0xdb,0xf0,0xfb,0xe6,0xf,0x0,0x4,0xf9,0x1,0x5,0x5,0xfe,0x8,0xf3,0xe,0xf2,0xfb,0x1,0xfd,0x18,0x1d,0xf6,0xee,0x6,0xcf,0xfc,0xae,0x27,0x21,0xd2,0x33,0x3,0xe0,0xe0,0xc9,0xfb,0x3a,0xbd,0x4d,0x4,0xe8,0xf5,0xe6,0xeb,0x19,0xf2,0x4b,0x1d,0xfc,0xf7,0xd9,0xff,0xfe,0xea,0xf,0x4,0xe,0x0,0xed,0x19,0xe9,0xe9,0xff,0x11,0xef,0x14,0x1,0x17,0xbc,0xb5,0xef,0xc,0x22,0x27,0xf,0x1,0xd4,0x3,0xce,0x1,0x25,0xff,0xf9,0xf0,0xa,0x1c,0xe5,0xf,0x1c,0xee,0xf4,0xf1,0xf4,0xc,0x0,0x8,0x1c,0xf4,0xd5,0xf1,0xfc,0x1f,0x11,0x0,0x18,0x3,0xf7,0xe4,0xff,0x7,0x9,0x1a,0x18,0xff,0xea,0xec,0xfd,0x13,0x2b,0xf8,0xc,0xfa,0xdf,0xf6,0x11,0xda,0x2a,0xdc,0xfc,0xff,0xff,0xec,0x12,0xe1,0x37,0xfd,0xeb,0xfe,0xea,0xd1,0x12,0xfa,0x28,0x1a,0xd,0xf0,0xf7,0xe0,0xc,0xeb,0x35,0x14,0xeb,0x0,0xeb,0xe7,0x1b,0xfc,0x9,0x0,0xf2,0x4,0xf9,0xe5,0x1a,0xe,0x8,0x12,0xf8,0xfe,0x9,0xf,0xd,0xea,0x3,0xe1,0xfe,0xf2,0xec,0xd,0x2,0xdb,0x4,0x1d,0xd4,0x1,0xca,0x13,0x29,0xca,0x28,0x4,0xe2,0xf1,0xdb,0xb,0x2c,0xcd,0x44,0x0,0xe7,0xf4,0xd0,0x12,0x15,0xff,0x42,0x11,0x5,0xfd,0xd9,0x11,0x1c,0xf4,0x15,0xec,0xf2,0x24,0xd6,0x1d,0xec,0xda,0xf5,0xec,0xe5,0x22,0xf2,0xb,0xbd,0xd0,0xeb,0x5,0x7,0x1b,0x1,0xed,0xf5,0x2,0xcf,0x8,0x15,0xfd,0x1c,0xe5,0x4,0x19,0xc7,0x25,0x22,0xf3,0xde,0xfb,0xfb,0x20,0xf6,0xeb,0x25,0xfe,0xf5,0x8,0xf5,0x17,0xe,0x4,0x1c,0xf9,0xee,0xec,0xe1,0x6,0x12,0xff,0x2a,0x13,0xed,0xfe,0x5,0x18,0x25,0x20,0x9,0x13,0xea,0xd7,0x5,0x6,0x33,0x25,0xff,0xa,0xf0,0xea,0x17,0xe1,0x30,0xfa,0xd,0xa,0x4,0x0,0xe,0xe9,0x16,0x20,0xd,0x2,0xe8,0xed,0x7,0xe8,0x3c,0xf1,0xd9,0xfa,0xe1,0xed,0x18,0xfc,0xf0,0x9,0xe3,0x5,0xfe,0xd1,0xb,0xe,0xf5,0x25,0xfd,0xfb,0x30,0x1e,0x8,0xfc,0xc,0x21,0xea,0xfc,0xe5,0x1e,0x16,0xf5,0xf4,0xfc,0xf0,0xea,0xc4,0x21,0x27,0xe9,0x2b,0xdb,0xdb,0xec,0xe5,0xfe,0x37,0xe2,0x46,0x25,0xfa,0xec,0xe4,0xf3,0x19,0xf2,0x4c,0x6,0x0,0xfb,0xeb,0x10,0x10,0xf7,0x2a,0xf8,0xe9,0x18,0xee,0x21,0xe8,0xd5,0xf4,0xa,0xed,0x24,0xfe,0xf9,0xb2,0xbc,0xf3,0x1d,0x0,0x2f,0x7,0x8,0xe1,0xf1,0xed,0x27,0x27,0xfe,0x22,0xfd,0x2,0x20,0xd8,0x5,0x25,0xec,0xf1,0xff,0xa,0xf,0xe6,0xfe,0x46,0xfd,0xe1,0xca,0xf7,0x22,0x3,0x8,0x21,0xf5,0xf,0xf7,0xfb,0xc,0xfb,0x14,0x2d,0x3,0xe5,0xe4,0x9,0xb,0x1a,0xe6,0x1,0x28,0xe9,0xd6,0xb,0xf7,0x2c,0xfb,0x11,0xee,0xb,0xed,0x17,0xf0,0x3c,0xf5,0x8,0xfa,0xf8,0xcd,0x17,0xfa,0x39,0xea,0x11,0xf5,0xed,0xee,0xa,0xec,0x41,0xd6,0xe7,0xf9,0xfa,0xc8,0x15,0xf7,0x8,0xe,0xe3,0x8,0xe8,0xec,0xfd,0xfe,0xf1,0x0,0xe9,0xf4,0x9,0x26,0x2,0x16,0xf0,0x1,0xef,0x1,0xff,0x3,0x22,0xdb,0xfc,0xf5,0xde,0xe5,0xc4,0x1,0x28,0xd4,0x38,0x8,0xd0,0xec,0xd5,0x4,0x2f,0xce,0x4e,0xeb,0xf9,0xe7,0xdf,0xf0,0x1b,0xf5,0x42,0xf1,0xf6,0x9,0xd5,0xa,0xd,0x8,0x4,0x5,0xe2,0xe,0xd7,0x19,0xdb,0xda,0xe1,0x25,0xde,0x15,0xe,0x14,0xbd,0xb0,0xe3,0xe5,0x24,0x1e,0xf8,0xd,0xd8,0xf7,0xf2,0xff,0x18,0xf5,0x7,0xf0,0x2,0x25,0xd5,0x1e,0x2e,0xdf,0xe7,0x5,0xef,0x11,0xe8,0xe7,0x47,0xf4,0xe1,0xde,0x9,0x36,0x1a,0x11,0x11,0xf5,0x12,0xe5,0xe7,0x18,0x1,0x17,0x2a,0x3,0x5,0xea,0x9,0xb,0x12,0x4,0x17,0xf0,0xee,0xd7,0x11,0xed,0x3c,0x17,0x16,0xff,0x2,0xdc,0x21,0xf3,0x2e,0xe5,0x13,0xef,0xec,0xe2,0x10,0xd0,0x2e,0xee,0xff,0x1,0xe0,0xe5,0xb,0xda,0x1f,0xf8,0xf6,0xfb,0x7,0xdb,0x5,0xf6,0xc,0xf3,0xf0,0x10,0xf9,0xf5,0xf2,0xd,0x10,0xf7,0xf6,0xff,0x2b,0xd,0x6,0x1e,0xf3,0xc,0xe9,0x1,0xf2,0x23,0xfe,0xe9,0xdd,0x12,0xdd,0xf7,0xbb,0x22,0x1b,0xd4,0x38,0x29,0xd4,0xcf,0xf5,0xf9,0x27,0xdd,0x47,0x0,0xf2,0xe5,0x9,0xfc,0xe,0xf9,0x34,0xa,0x2,0xfd,0xec,0x25,0x1d,0x3,0x15,0x9,0xf1,0x1b,0xd0,0x17,0xda,0xda,0xe7,0x7,0xe3,0x15,0xf1,0x2,0xb9,0xce,0xe6,0xc,0x10,0x31,0xfe,0xf7,0xd9,0xfa,0xed,0xed,0x33,0xf4,0x19,0xe7,0xfe,0x3f,0xe5,0x6,0x2e,0xe6,0xf2,0xdc,0xf5,0x18,0xe6,0x1,0x2f,0xee,0xe7,0xe4,0xfe,0x2c,0x3,0xf7,0x20,0x5,0x7,0xe2,0x6,0x1e,0x5,0xed,0x2f,0x3,0xea,0xf8,0xe,0xc,0x1f,0xff,0x20,0xf4,0xe8,0xe1,0x1c,0xec,0x22,0x1e,0x5,0xfd,0xf5,0xca,0x30,0xe9,0x30,0xe4,0x14,0xff,0xf2,0xdc,0x17,0xf8,0x26,0xe1,0xb,0x1,0x11,0xc2,0x2,0xf1,0x36,0x10,0x2,0x5,0xed,0xf1,0x15,0xfa,0x17,0xf8,0xf7,0xf1,0xe8,0xd3,0xfd,0x8,0xfb,0x27,0xf5,0xf5,0x13,0x6,0xb,0xf0,0x1,0xf9,0xd7,0xe,0xec,0x12,0xfe,0xfd,0xee,0x25,0xd8,0xf1,0xb2,0x9,0x1c,0xbf,0x34,0xea,0xc8,0xea,0xdb,0xe,0x24,0xde,0x47,0xfe,0xdc,0xe0,0xf3,0x6,0x20,0xfe,0x2b,0xf6,0x18,0x14,0xcd,0x19,0x16,0xfe,0x1a,0x15,0xf8,0x11,0xf4,0x22,0xd7,0xcc,0xdd,0x15,0xdc,0x14,0xf9,0x2,0xbb,0xca,0xe3,0xf3,0xd,0x1e,0x2a,0xc,0xe4,0x5,0xe0,0x18,0x2a,0x7,0x20,0xed,0xf6,0x17,0xcf,0xf4,0x2a,0xd6,0xfb,0xce,0x3,0x37,0xe2,0xfd,0x1d,0xfb,0xe5,0xe0,0x5,0x29,0xef,0x16,0x23,0xf7,0x1,0xf4,0xc,0x14,0xff,0xee,0x31,0xf9,0x12,0xf9,0x14,0xf6,0xc,0xf6,0xb,0xf,0xd8,0xdc,0xfe,0xf,0x37,0xfa,0x1,0x9,0x4,0xd1,0xb,0xc,0x29,0xf3,0xa,0xf9,0xed,0xc2,0x18,0xf4,0x25,0x18,0xf,0x8,0xf7,0xed,0x1f,0xf7,0x4f,0xe,0xf0,0xe4,0x0,0xeb,0xfa,0x1a,0xc,0x3,0xe9,0xfc,0xf0,0xcc,0x6,0x5,0xf2,0x12,0x4,0xe2,0x16,0xa,0xa,0xf3,0xb,0xf3,0xdc,0xfd,0x10,0xfc,0xe,0xe2,0xe0,0xfe,0xf0,0xff,0xb1,0x6,0x1b,0xe4,0x30,0x13,0xc6,0xc3,0xfa,0xc,0x1e,0xd9,0x57,0x11,0xe1,0xd6,0xfa,0xee,0x1d,0xf7,0x37,0xea,0xf0,0x5,0xef,0x24,0x1e,0xf1,0x10,0xe8,0xeb,0x19,0xd1,0x18,0xf5,0xc8,0xf8,0xec,0xf5,0x1f,0xf2,0xff,0xb3,0xd2,0xe6,0xe,0x6,0x2e,0x7,0x17,0xe0,0xf5,0x2,0xf9,0x20,0x7,0x16,0x8,0xe8,0x1d,0xd3,0x8,0x34,0xda,0xf2,0xce,0xfb,0x1f,0xe1,0x0,0x2d,0xdb,0xdf,0xcc,0x5,0xfb,0xf7,0x0,0x33,0xf9,0xb,0x1,0x13,0x28,0xf8,0x7,0x24,0xf8,0xf,0x3,0xd,0xe9,0x6,0xfe,0x18,0xf9,0xed,0xf5,0xc,0xe0,0x2c,0xe,0xf9,0x6,0xfb,0xce,0x27,0xe8,0x29,0x19,0xf9,0x1,0xe,0xc8,0x25,0xed,0x30,0xeb,0x1,0xfe,0x10,0xdc,0x1e,0x0,0x1e,0x10,0xf9,0x0,0xfc,0xc8,0xe,0x4,0x13,0x4,0xf0,0x2,0xfe,0xd8,0xf,0x1b,0xf7,0xe1,0xf8,0xde,0x12,0xe2,0xef,0xa,0x2,0xe0,0xdd,0xf1,0xe,0x2a,0x25,0x15,0xeb,0x2,0xf4,0xf0,0xbf,0xfc,0x27,0xdc,0x42,0xf,0xe9,0xbf,0xe8,0x20,0x33,0xc9,0x3f,0x10,0xec,0xf3,0x3,0x2,0x2c,0x4,0x38,0x6,0xa,0xf9,0xe5,0x1c,0x3f,0xf,0xc,0x25,0xe2,0x6,0xe6,0x3,0xf4,0xd7,0xfe,0xf6,0xe7,0x2f,0xfa,0x3,0xb6,0xcb,0xf1,0x11,0xa,0x2c,0xfc,0x1e,0xe0,0xff,0xc2,0xdd,0x1d,0xf3,0x10,0xfa,0x7,0x1e,0xf6,0x20,0x7,0xe6,0xf1,0xa,0xe8,0x27,0xf1,0xf5,0x24,0xed,0xfd,0xee,0x13,0x15,0xe9,0xe2,0x22,0xe5,0xf9,0xdd,0x1d,0x32,0x4,0xfa,0x25,0x0,0xee,0xfd,0xb,0xe,0x23,0xfa,0xf,0x1,0xf8,0xf0,0x15,0xe4,0x21,0xf7,0x10,0xf9,0xe7,0xc3,0x19,0xe1,0x34,0xff,0xed,0xf4,0xef,0xd7,0x21,0x1,0x31,0xee,0xf7,0xf2,0xf3,0xe5,0xa,0xee,0x2e,0x1e,0xf2,0xc,0x7,0xc2,0x8,0xa,0x14,0x14,0x0,0xfc,0xf9,0xd6,0xfb,0xf8,0xe5,0xf1,0xfa,0xe0,0x15,0x21,0xef,0x6,0xf9,0x0,0xf5,0xf4,0xb,0xb,0x18,0x2,0xf5,0x4,0xdb,0xfd,0xcc,0x32,0x1d,0xc9,0x3b,0x12,0xd9,0xaf,0xcf,0xf,0x26,0xde,0x35,0xe4,0xdb,0xd3,0x22,0x11,0x2e,0xfb,0x36,0xfa,0xfd,0x2,0xeb,0xf,0x37,0xb,0x14,0x1d,0xdd,0x18,0xe0,0x10,0xe0,0xdf,0x14,0xf9,0xf0,0x19,0xf7,0xfb,0xc4,0xe5,0xe7,0x11,0x1,0x31,0x1a,0xf7,0xd8,0xf1,0xe9,0xf3,0x21,0xf9,0xfe,0xe4,0xe9,0x2,0xd0,0x6,0x14,0xd7,0xfc,0xec,0x6,0x10,0xfc,0xf0,0x1c,0xe7,0xec,0xe3,0x3,0x21,0xe4,0x4,0x12,0xf0,0xf3,0xed,0x16,0x36,0x2,0xfd,0x13,0x11,0xdf,0xeb,0x19,0x7,0x10,0xc,0xf9,0x8,0xf8,0xf4,0x1d,0xfd,0x1d,0x16,0xf4,0xa,0x8,0xec,0xc,0x9,0x3d,0xe0,0xb,0xee,0x10,0xd1,0x1e,0x15,0x43,0xeb,0xfa,0xf3,0x5,0xc7,0xf2,0xd9,0x25,0x20,0xee,0xe9,0xfd,0xce,0x16,0xc,0x27,0x6,0xa,0x6,0xf9,0xd6,0xb,0x5,0xe8,0x2,0xe8,0xd2,0x10,0x1,0xf2,0x15,0x9,0x4,0xd3,0xe2,0xfe,0xf0,0x32,0x1b,0xd9,0xf5,0xea,0xcc,0xcb,0x10,0x1c,0xf1,0x3b,0x2,0xd4,0xbf,0xca,0xfe,0x12,0xdb,0x3b,0xf8,0xd5,0xe7,0x13,0x10,0x1a,0xf4,0x38,0x9,0x8,0xee,0xf4,0xf4,0x3c,0xf7,0x15,0x4,0xe4,0xfa,0xf4,0x4,0xee,0xf4,0x7,0xf8,0xe9,0x3b,0xe2,0x1f,0xd5,0xed,0xe6,0xfd,0x18,0x49,0x21,0x6,0xd8,0xde,0xfa,0xf0,0x1b,0xfe,0xde,0x8,0xf7,0x14,0xc7,0xf,0x1d,0xcf,0x0,0xea,0xff,0x1b,0xd5,0x8,0xd,0xd9,0xf1,0xf4,0x16,0x23,0xd8,0xc,0x29,0xdc,0xf1,0xf2,0x21,0x49,0xfc,0xe2,0x8,0x1,0xf0,0xf8,0x17,0xf9,0xf,0xf5,0xfa,0x1a,0xef,0xec,0x9,0xeb,0x1a,0xc,0x17,0x9,0x11,0xe9,0x1a,0xf7,0x29,0xf9,0xfd,0x7,0x1,0xdd,0xa,0xec,0x22,0x15,0x3,0xfd,0xe2,0xd2,0x15,0xec,0x4d,0xd7,0xfc,0xf6,0xb,0xcc,0xe,0x4,0x3,0xf7,0xfb,0xfb,0xd,0xeb,0x19,0x7,0xf4,0xf4,0xe5,0xde,0x22,0x7,0xea,0xf7,0xeb,0x23,0xc8,0xee,0x3,0x4,0xf,0x19,0xc3,0xf8,0x6,0xd0,0xf7,0xfe,0xe,0xe7,0xa,0x2,0xb0,0xb8,0x0,0xfb,0x18,0xf,0x22,0xf7,0xe9,0xdc,0x9,0x15,0x23,0xd,0x22,0x13,0xe2,0xed,0xeb,0x18,0x20,0xb,0x12,0xfc,0x2,0xf1,0xdb,0xe,0xe1,0x4,0xdb,0xf,0xf3,0x1a,0x6,0xef,0xdb,0xdc,0xdd,0xfb,0x0,0x2a,0x20,0xfd,0xc1,0xe3,0xef,0x1,0x14,0xf2,0x14,0x0,0xf,0x28,0xd9,0xff,0xf4,0xdc,0x9,0xfa,0x1c,0x8,0xd1,0x3,0xa,0xf4,0xe4,0xdb,0x20,0x30,0xea,0x6,0x11,0xe2,0x26,0xf7,0x16,0x22,0xf9,0x7,0x2,0xf5,0xf6,0xfb,0x1d,0xc,0x16,0xa,0x7,0xf9,0x11,0xde,0x20,0x8,0x19,0x4,0xa,0xb,0xc,0xf7,0xf4,0xfc,0x41,0xf1,0xf8,0x16,0x9,0xdc,0xe,0x1a,0x2b,0x1f,0xe7,0xfe,0x1,0xe0,0xfd,0xe2,0x34,0xec,0xf3,0xf5,0x3,0xec,0xb,0xfb,0x4,0xf6,0xdd,0xfd,0x6,0x14,0xd,0xfa,0xfc,0xf1,0xa,0xca,0x1,0xec,0xe,0xe,0xec,0xd7,0xee,0xd4,0xf2,0xfe,0x16,0xfa,0xbd,0xd,0xef,0xcb,0xc4,0xee,0xed,0x13,0x10,0x19,0xf8,0xb1,0xf1,0xe3,0x0,0xf3,0xc,0xf6,0xde,0xc6,0x15,0x27,0x14,0x29,0x15,0xf6,0xf4,0xf5,0xe7,0x0,0xb,0x2f,0xc,0xef,0x3,0xf,0xfd,0x8,0xf3,0xf9,0xf9,0x5,0xd,0x34,0x15,0x1b,0xc8,0xd1,0xf2,0x1b,0xa,0x22,0x12,0x11,0xe9,0xf4,0xe1,0x2a,0x20,0x3,0xf2,0xf8,0x14,0xb,0xd0,0xf4,0xe,0xbf,0xc6,0xd8,0x4,0x5,0xf8,0xf4,0x4,0xc9,0xea,0xfd,0xf7,0xfa,0xe3,0x1b,0x11,0xde,0xc,0x11,0x25,0x29,0xe5,0x2,0xef,0xef,0x2,0xfa,0x1a,0x21,0x19,0x9,0x8,0x5,0x4,0xe5,0xfa,0xed,0x2d,0x26,0xfa,0x17,0xf6,0xe8,0x12,0x12,0x31,0xfc,0xd,0x0,0xf7,0xeb,0x19,0xf1,0x2a,0x6,0x14,0xec,0x8,0xd3,0x21,0x7,0x32,0xe3,0x2,0xb,0xfb,0xd8,0x27,0x7,0x5,0xe6,0xf5,0xf5,0xa,0xf7,0x2c,0x2a,0xd8,0x1b,0xda,0xf7,0xea,0xf6,0xf9,0xe,0xf8,0xc,0x5,0xc7,0xd6,0x6,0x12,0xe3,0xe1,0xe1,0xd8,0xdb,0xc6,0xf8,0xe6,0xfa,0xc,0x7,0xf8,0xe7,0xe1,0xf,0x0,0xf3,0x3,0xf0,0xde,0xcc,0xf5,0xfc,0xef,0x1e,0x16,0x13,0xfb,0xf4,0x3,0xe9,0xfc,0xfa,0x15,0xe8,0x15,0x9,0xf1,0xd,0xdb,0xa,0xe8,0x9,0xf5,0x1a,0x4,0xf8,0xd8,0xd4,0x4,0xee,0x25,0x29,0x9,0xfe,0xf3,0xf5,0xd4,0xa,0x15,0x19,0xf5,0x12,0xfe,0x4,0xe7,0x1,0xeb,0xde,0xbe,0xfe,0x9,0x12,0xdf,0x13,0xe0,0xef,0xc7,0xff,0x3,0x8,0xfe,0xf2,0x19,0xe0,0xe4,0xc,0x22,0x1e,0x5,0xf7,0x16,0xf2,0xf9,0x6,0x17,0xf6,0xc,0x1e,0x23,0x8,0xfe,0xdc,0xfd,0x17,0x11,0xdf,0xf5,0xf,0x1,0x3,0x8,0xee,0x1b,0x2,0xb,0x1b,0xc,0x16,0x1a,0x0,0xf,0x26,0x14,0xf8,0xf4,0xf3,0x19,0x16,0x22,0xa,0xd0,0xf9,0xf1,0x5,0x2b,0x1e,0x1e,0xef,0xf5,0x6,0x5,0xe7,0x3f,0x2a,0x6,0xf0,0x15,0x14,0x13,0x20,0x1b,0xde,0x10,0x5,0x33,0xf8,0x8,0x4,0x17,0xd,0xf,0xf6,0x1,0xed,0x28,0x25,0x1c,0x13,0xfb,0xea,0xfb,0xf3,0x1c,0xf9,0x1f,0xf0,0xfb,0x17,0xf8,0xff,0x10,0xf7,0xb,0x24,0x4,0x0,0xd,0xc,0xf7,0xa,0x16,0x13,0xf8,0x5,0xa,0xf1,0xf5,0xee,0xf8,0x14,0xe,0xed,0xfe,0x1b,0xfe,0x17,0x13,0x10,0x12,0x21,0x1c,0xfa,0xe5,0xb,0x8,0xc,0x10,0x1b,0x3,0xef,0xd,0x5,0xa,0xf0,0x4,0x11,0x15,0x0,0xfd,0xef,0x2,0x18,0xf4,0x9,0xfa,0xf6,0x2,0xf7,0xfd,0x13,0xef,0x13,0xf7,0xf9,0x17,0xf,0xfa,0xf8,0x15,0xff,0x4,0xef,0xf0,0x15,0xfa,0xfe,0xf0,0xf4,0xed,0x6,0x1c,0x2,0xfb,0xf7,0x5,0xfb,0xc,0xef,0xf4,0xf0,0xf6,0xec,0x17,0xf3,0xf5,0xef,0x2,0xfd,0xe5,0x21,0xc,0xf1,0x1e,0x8,0xf1,0xb,0xf7,0x9,0x1d,0xf2,0xf9,0xf2,0xfb,0xe,0xed,0xf8,0xfa,0xdd,0xf0,0xfd,0xdb,0x1a,0xf4,0xef,0xc,0x6,0xf,0xdf,0xe2,0x6,0x6,0xee,0xfa,0xd,0x17,0xfc,0xf9,0x15,0x1a,0xe4,0xfb,0xc,0x1a,0xfc,0x1b,0x4,0x7,0x20,0xff,0x9,0xf,0xf2,0x26,0x19,0x1f,0xd,0x2,0x16,0x3,0x3,0xfd,0x5,0x1,0x1b,0xa,0x11,0xfa,0x21,0x13,0xfb,0xc,0x5,0xf3,0xdd,0xe4,0xdc,0x22,0x1b,0x15,0x14,0xe,0xe8,0x0,0xf7,0xf8,0xf4,0xb,0xb,0xfd,0x21,0xe3,0xf,0xe1,0x22,0x1,0x21,0xb,0x1f,0x9,0x10,0xe2,0x18,0x11,0xe,0xed,0x1,0x14,0x12,0xfd,0x11,0xf6,0xe9,0x20,0xe1,0xf5,0x1b,0x27,0x22,0xfa,0xf7,0xfe,0x13,0xf6,0xdc,0x6,0xd,0xf4,0x5,0x20,0xd,0xb,0xe4,0x15,0x28,0xc,0x0,0xf5,0x7,0xc,0xa,0x6,0xe,0xf3,0xfb,0xfe,0x4,0x8,0xf4,0xef,0x3,0xe4,0xeb,0x6,0xee,0xed,0xdb,0xeb,0x1d,0xf4,0xfa,0xc,0xfc,0xfe,0x11,0xf7,0xf8,0xf5,0xef,0xe7,0xfc,0x1b,0xdc,0x17,0xfd,0xfe,0x0,0xea,0xf4,0xf1,0xf7,0xf,0x21,0x4,0xfd,0xd,0xc,0xa,0x14,0xfd,0x19,0x9,0x1,0xfd,0xe2,0xc,0xc,0xe0,0x25,0xfb,0xff,0xd,0x18,0xf6,0xb,0x19,0x12,0x10,0x9,0xb,0x6,0x12,0x1c,0x10,0x3,0x13,0xa,0x5,0xf,0x9,0x1,0x21,0xe4,0x1,0x26,0xf9,0xf4,0x5,0x19,0x0,0xff,0xb,0xff,0x16,0x9,0xe7,0xee,0xed,0xf5,0xf,0x2f,0xee,0x19,0x3,0xa,0x10,0xee,0xf7,0x2e,0xf4,0x8,0xf7,0xee,0x7,0x0,0xfc,0xe,0xf0,0x12,0x8,0x5,0xed,0x11,0xfc,0xfb,0xf7,0x25,0xf1,0x5,0xc,0xf9,0xfa,0x3,0xc,0x16,0x4,0x25,0xf8,0xe7,0xfc,0x11,0xd,0x19,0xd8,0xfa,0xb,0x6,0xfd,0xef,0x13,0xf6,0xff,0xe,0xf9,0x4,0xf1,0xdc,0xfb,0xe1,0xf6,0xb,0x15,0x7,0xf7,0x2,0xe,0xf1,0xfd,0xe3,0xeb,0x7,0xf1,0xef,0x3,0xfe,0xf8,0x7,0x10,0xf7,0x0,0xf9,0xf2,0xe,0xf9,0xf2,0x1d,0xf5,0xd8,0xff,0xe6,0x18,0x2a,0x1b,0x3,0x16,0xfe,0xf4,0xf5,0xfd,0x4,0x1,0xfe,0xfe,0x7,0xfc,0xe,0xfa,0x15,0xeb,0x2,0x15,0xea,0xfd,0x4,0xe5,0xfe,0xed,0xfe,0x1a,0x9,0x2a,0x1b,0xdf,0xfb,0xf8,0xf1,0x4,0x1a,0x34,0x7,0xf9,0xd,0xf5,0xef,0xec,0x10,0x1a,0xb,0xf,0x13,0xfe,0x10,0x22,0x1e,0x2,0xe6,0xf7,0x11,0xfa,0x11,0xfc,0x1b,0x21,0x12,0xf4,0x18,0x16,0x29,0xe4,0xc,0x2e,0x12,0x7,0x20,0xf6,0x1d,0xf4,0x12,0x33,0xf4,0xee,0xfe,0x5,0x6,0xfb,0x13,0xc,0xe,0xf0,0x0,0xf8,0xee,0xf3,0x17,0x0,0xf7,0xfb,0xfc,0xf,0xf4,0xd5,0xa,0xed,0xeb,0xf5,0xe9,0xef,0xd8,0xf0,0xf8,0xe2,0x19,0xf7,0xf8,0xa,0xb,0x9,0xfa,0xe7,0xf,0xfc,0xe8,0x2,0x0,0x1a,0xfe,0xfd,0x1b,0xe6,0xef,0xf,0xe3,0x10,0xf1,0xe2,0xb,0xe,0x6,0x29,0x0,0x1,0xf3,0x0,0x11,0x4,0xf2,0xf7,0xea,0xf8,0xe0,0x9,0xe,0x13,0xf4,0x0,0x9,0xfa,0xf5,0xc,0xff,0x18,0x8,0xd,0xfa,0xde,0xfa,0x3,0xf2,0xf3,0x1b,0xeb,0x6,0xea,0xfb,0xff,0xd,0xf5,0x10,0x17,0xf8,0xe8,0xf1,0xf1,0xf5,0x0,0x3,0xa,0x9,0xa,0xf3,0xfb,0x33,0x26,0xe7,0x17,0xe3,0xfa,0x1f,0x24,0xfc,0x7,0x2,0xe2,0xeb,0x8,0x2c,0xf8,0x2,0x1f,0x4,0xeb,0xb,0x4,0x17,0xf7,0xff,0x1c,0xed,0x0,0x3f,0xd5,0x17,0x1d,0xfe,0x3,0xf1,0x1c,0x17,0xec,0xe,0x54,0xee,0xf5,0x25,0xfa,0x8,0xee,0x13,0x32,0xe,0xd8,0x9,0xf,0xee,0xe5,0x6,0x10,0xf4,0xfb,0xe4,0xfb,0x9,0xde,0x13,0xff,0x2,0xf9,0xec,0xa,0x0,0xe9,0xfd,0xdc,0x6,0x4,0xdb,0x6,0x1,0xf8,0x9,0xe2,0xc,0x14,0xda,0xfe,0x20,0xe3,0x9,0xda,0x14,0x12,0xe1,0x5,0xff,0xf3,0x0,0x8,0xfb,0xf1,0xfd,0xf3,0x4,0xfa,0x8,0xff,0x1,0x1d,0xb,0xfd,0xa,0xf4,0xfb,0xfc,0xf9,0x19,0xed,0xfc,0xf2,0x6,0xe7,0x2,0xf6,0xc,0xfc,0xfb,0x1,0xc,0xeb,0x1b,0xff,0xff,0x8,0x1d,0xf7,0xe8,0xfc,0xf4,0xc,0xfa,0xf1,0xee,0xed,0xdd,0xfc,0x6,0x5,0xdc,0x1a,0xfc,0xf9,0x7,0xdf,0x1b,0x14,0xc,0xfc,0x1,0x16,0xe1,0xed,0x9,0x34,0xee,0xe4,0x1c,0x1b,0xfc,0x3b,0x3,0x15,0xf2,0xeb,0x14,0x0,0xdd,0x24,0x4,0xf1,0xed,0xfd,0xe6,0x32,0xf9,0x24,0x4,0xe,0x22,0x3,0x14,0x2f,0xf5,0x1a,0x37,0xf4,0x18,0x3,0xf,0x4b,0xe6,0xd,0x5c,0xf7,0x1f,0x1c,0xe6,0x23,0xc,0x15,0x4e,0xe0,0x5,0x1c,0xec,0xff,0x4,0x13,0x15,0xee,0x7,0xec,0xc,0xdd,0xf8,0xe,0x3,0xc,0x1f,0xe8,0xe,0xf5,0xec,0xfc,0xe2,0xe8,0xfb,0xf6,0x0,0xe5,0xea,0xf3,0xd3,0xf5,0xfd,0xd2,0xfd,0x1b,0xed,0x9,0xd1,0x23,0xfa,0xd4,0xf7,0xe9,0xf0,0xa,0xd6,0x14,0x3,0xe6,0x10,0xf4,0x18,0xfe,0xe1,0xb,0x25,0xf5,0xfc,0xe9,0xf2,0xe9,0xf4,0xd,0xf5,0x0,0xf9,0x17,0x2,0xfd,0x3,0x4,0xf8,0xf5,0x14,0xe3,0xd3,0xeb,0xe7,0x9,0xf3,0x14,0x17,0xee,0xe6,0xf6,0xff,0x11,0x26,0xf4,0xf7,0x2,0xfa,0x5,0x8,0x16,0xff,0xd,0xf7,0xf1,0xf7,0xe6,0xfb,0x4,0x4,0x7,0x2,0x4,0x9,0xf5,0xfc,0x5f,0xd6,0xe7,0x2a,0x23,0xf4,0x1b,0x6,0x1,0xea,0xe7,0x5,0x25,0xe3,0x25,0x7,0xea,0xfb,0xfb,0x9,0x25,0xde,0x37,0x4,0x7,0xe5,0xff,0x14,0x2f,0xa,0x30,0x23,0x4,0xf0,0x23,0xfe,0x1c,0xd2,0x2b,0x55,0x1,0xe5,0x26,0xfe,0x14,0xed,0x24,0x46,0xe6,0xee,0xf,0xfd,0xed,0xef,0xe,0x1e,0x5,0xa,0x12,0xff,0xe4,0xf5,0xc,0xed,0xfd,0xea,0xd,0x13,0x1a,0xe5,0xfc,0xc2,0xef,0xa,0xe2,0xf,0xfe,0xff,0xc,0xf0,0xff,0xdf,0xea,0x0,0xf6,0xe1,0x4,0xd8,0x26,0x20,0xdc,0xf4,0x19,0x6,0xe8,0xd2,0x10,0x4,0xf1,0x2,0xc,0x6,0xf0,0xf0,0x4,0x1f,0xf4,0xf5,0xed,0xf1,0xfa,0xf1,0x4,0x2,0xf8,0xfb,0x4,0xf1,0xe5,0xe4,0xa,0xf0,0xfe,0xef,0x1c,0xe3,0xeb,0xf3,0x0,0x17,0x1,0x13,0x19,0xda,0xf8,0x6,0xde,0x11,0xea,0xf7,0xf4,0xef,0x3,0x4,0xb,0xe8,0x8,0xe,0xe2,0xee,0xde,0x6,0xe,0x29,0xfb,0xfa,0x0,0x2,0xec,0x1b,0x52,0xff,0xde,0x3a,0x2f,0x13,0x30,0xe9,0xff,0xf6,0xe7,0x15,0x1d,0xd9,0x3c,0xf,0xe6,0x14,0xee,0x13,0x1f,0xe7,0x33,0x8,0xfc,0x6,0xc,0x8,0x19,0xd9,0x2b,0x1f,0x7,0x10,0x24,0x16,0x29,0xfc,0x31,0x4d,0xf0,0xd9,0x3f,0xf2,0x20,0xe2,0x25,0x49,0xe5,0xec,0xa,0xf5,0xf2,0xd9,0x22,0x1f,0xed,0x22,0x2,0xa,0x16,0x8,0xf7,0xfb,0xe,0xfb,0xfb,0x1d,0xf3,0x1c,0xf6,0xe1,0xcf,0x19,0xf4,0xf,0xee,0xf9,0x4,0xd1,0xf9,0xe2,0xda,0xf1,0x24,0xf5,0x7,0xdf,0x1d,0xf9,0xdb,0x18,0xb,0xea,0x8,0xca,0xf2,0xfa,0xec,0x4,0xe,0x17,0xed,0xf1,0x6,0x15,0xfc,0xfd,0x8,0xfa,0xe3,0xe4,0xa,0xfc,0xee,0x8,0xf5,0x9,0xef,0xee,0x6,0xef,0xe1,0x19,0x7,0xe8,0xe6,0xdf,0xea,0xd,0xf1,0x16,0xee,0xed,0xf8,0x9,0xfa,0xfb,0xc,0xf8,0xeb,0xda,0x0,0xfc,0x4,0xfe,0xf5,0xff,0xf6,0xe1,0xc,0xa,0x13,0xd,0xf6,0xf5,0x15,0x7,0xca,0xec,0x50,0xe,0xd0,0x26,0x4c,0xf8,0x23,0xeb,0xff,0x8,0xe3,0x11,0x2c,0xf9,0x2a,0xf1,0xe9,0xb,0xe9,0xf,0x15,0xec,0x33,0x11,0xc,0xd,0x1,0x1,0x32,0xe3,0x41,0x27,0x11,0x2,0x2e,0x7,0x9,0xe3,0x22,0x4d,0xf1,0x5,0x27,0x3,0x25,0xf5,0x2c,0x3b,0xf4,0x0,0x16,0xb,0xec,0xfe,0x17,0xd,0xff,0xe7,0xfe,0x24,0x6,0xee,0xf0,0xe9,0xfa,0x1c,0xf2,0x19,0x8,0xfa,0xff,0xd2,0x1,0x2,0xea,0x5,0xf2,0xf4,0xb,0xd2,0xf9,0xd,0xcd,0xd,0x12,0xf2,0xe,0xe1,0x1f,0x0,0xe7,0x14,0x4,0xff,0x9,0xdb,0xfc,0xd9,0x6,0xf9,0xeb,0x1,0xef,0xfa,0xfb,0xf5,0xfc,0xfb,0x14,0xe2,0xf9,0xf5,0x2,0xfd,0xfc,0x1,0xf7,0xf3,0x0,0xec,0xe7,0xf2,0x0,0xf1,0x11,0xec,0xf0,0xe9,0x11,0xa,0x7,0x4,0x1,0xee,0xfb,0xf2,0x14,0x1,0x12,0xf0,0xf2,0xf1,0xf0,0xfb,0x8,0x3,0xf8,0x1,0xe8,0xf9,0x17,0x26,0xf,0xea,0xf7,0xf8,0x1e,0xfe,0xf2,0xf8,0x3f,0x0,0xd4,0x1c,0x53,0xfe,0x1e,0xf,0xef,0xdd,0xed,0x10,0x19,0xe7,0x34,0xe,0xde,0xdf,0xfa,0xe,0x29,0xe3,0x16,0x9,0x6,0x12,0xeb,0xf9,0x32,0xe0,0x1a,0x1d,0xf3,0xed,0x10,0x7,0x31,0xf2,0x12,0x52,0xeb,0xf7,0x1e,0xf7,0x1a,0xdc,0x3e,0x33,0xe3,0xfb,0x1f,0xb,0x8,0xfe,0x13,0x1a,0xf4,0xf8,0xfe,0x8,0xfc,0xe9,0xfe,0xeb,0xe6,0xf6,0x2,0x18,0x2,0xe8,0xfb,0xf3,0x1,0x8,0xd7,0x13,0x4,0xe6,0x2,0xe6,0xd7,0x1,0xd4,0xf0,0xe,0x5,0x18,0xe5,0x8,0xe5,0xd2,0x16,0x12,0xfe,0xe,0xd3,0xfc,0x1f,0xe9,0xf8,0x11,0x6,0xf3,0xd5,0xf8,0xff,0xf0,0x4,0xa,0xd9,0xf8,0xfd,0xf5,0x12,0xff,0x6,0x1b,0xe6,0xfe,0xfe,0xde,0xee,0xf6,0x18,0xf1,0xf8,0x6,0xf3,0x2,0xea,0x4,0x14,0xfc,0xee,0xe6,0x9,0xf9,0xee,0xe3,0xe7,0xfc,0xd9,0xef,0xfc,0xa,0xc,0x3,0xf6,0xe2,0x11,0xf,0x19,0x18,0x10,0xef,0xe5,0x22,0xf5,0xe5,0xe9,0x4b,0xf7,0xdb,0xc,0x4f,0xde,0x22,0x16,0x9,0x16,0xd1,0xf8,0x19,0xe0,0x24,0xfe,0xb8,0xfb,0xe5,0x12,0x1c,0xe3,0x22,0x9,0x5,0x29,0xf7,0x10,0x31,0xe1,0x33,0x3f,0xfd,0xed,0x4,0x3,0x2e,0xed,0x30,0x36,0xee,0x16,0x2f,0xf5,0x1b,0xdc,0x3a,0x56,0xe5,0xef,0x26,0xff,0x3,0xd7,0x31,0x16,0xef,0xf1,0x8,0x13,0x1,0x2,0x3,0xf1,0xf2,0x8,0xff,0x5,0x12,0xf2,0xee,0xda,0xed,0xec,0xea,0xf7,0xc,0xf1,0x9,0xe6,0xe6,0x0,0xcc,0x10,0xd,0xd,0x20,0xf4,0x18,0x23,0xec,0xf9,0x0,0xe4,0x7,0xd4,0xfb,0x16,0xd2,0x1,0xe6,0x1,0x6,0xf0,0xfe,0x3,0xf3,0x9,0x1,0xd,0x5,0xf7,0xd4,0x2,0xfb,0xfb,0x8,0xf0,0x1f,0xf3,0xfe,0xeb,0x2,0xe,0x1b,0xf,0x4,0xf5,0xf0,0x1f,0x14,0xf7,0x6,0xdc,0xf9,0xe9,0x1,0xff,0x8,0xf2,0x6,0xff,0xff,0xf3,0x5,0x1a,0xfc,0xfa,0xeb,0xfb,0xfa,0x12,0x20,0xf6,0xe0,0xe8,0x1c,0xfa,0xd6,0xd,0x2c,0x4,0xe1,0x9,0x3b,0xd3,0x2a,0xee,0xf7,0xed,0xf1,0xf7,0xd,0xf0,0x32,0xf,0xc9,0xe,0x0,0x10,0x24,0xfb,0x31,0xf0,0xf4,0xdd,0xf5,0x4,0x25,0xc7,0x27,0x25,0x16,0x11,0x2e,0x9,0x30,0xd1,0x2c,0x34,0xe6,0xf0,0x21,0xf5,0x21,0xc8,0x40,0x39,0xde,0xf0,0x12,0xf3,0x10,0xe8,0x1f,0x18,0xfa,0xea,0x7,0x11,0xdf,0xed,0xfa,0xf0,0x7,0xef,0xf3,0x5,0x10,0xe5,0xf3,0xe9,0xe9,0xe8,0xd6,0x1,0xf9,0x5,0xb,0xee,0xf9,0x12,0xe3,0x5,0xfd,0xe6,0x16,0xe2,0x1b,0x12,0xc5,0x0,0xfd,0x2,0x4,0xd2,0xff,0xec,0xf6,0xfd,0x0,0xe4,0xf7,0xf3,0xeb,0xfa,0xf8,0xd,0x3,0xfa,0xfe,0xe4,0xdb,0xe3,0x6,0xff,0xf4,0xf2,0x1b,0xf1,0xf7,0x2,0x1,0x4,0x13,0xe5,0xc,0x5,0xf7,0xa,0x3,0x3,0xb,0x3,0xee,0xf7,0x21,0x20,0xff,0xf3,0x9,0xe5,0xff,0xec,0x17,0x0,0x6,0x14,0xeb,0xf2,0x18,0x16,0x1f,0xec,0xee,0xe1,0x1e,0x3,0xfa,0xfe,0x28,0x3,0xc9,0xc,0x3f,0xd8,0x30,0x16,0x3,0xf8,0xe9,0xfb,0x28,0xe1,0x36,0xa,0xdf,0xe5,0xeb,0x8,0x1c,0xcd,0x29,0xf2,0xfc,0xa,0xed,0x1,0x29,0xf1,0x20,0x13,0x4,0xec,0x17,0xa,0x35,0xc3,0x1a,0x46,0xe0,0xd7,0x3c,0x9,0x28,0xd1,0x22,0x20,0xd5,0xfa,0x28,0xfa,0xff,0xea,0x1d,0x23,0xe0,0x7,0x7,0xf,0xf1,0xf1,0x8,0xf0,0xf8,0xff,0x5,0x1b,0x5,0xfa,0xf0,0xfb,0xe3,0xe4,0xcc,0x1a,0xf9,0x9,0x6,0xee,0xf4,0x3,0xd0,0x14,0xf4,0xff,0x1d,0xe8,0x11,0xf4,0xd1,0xf4,0x4,0xb,0xfb,0xdc,0xa,0xc,0xeb,0xed,0x6,0xf3,0x4,0xdd,0xdf,0xf9,0xea,0xfc,0xf5,0xf2,0xfb,0xea,0xe3,0x3,0xee,0xe,0xff,0xdb,0x1e,0x4,0xf7,0x1a,0x4,0xc,0xd,0xda,0x4,0xe9,0xff,0x4,0x0,0xc,0xf9,0xe4,0xfb,0xf6,0x14,0xde,0x1b,0x0,0xb,0xfe,0x6,0xf8,0xf,0xdc,0x1,0xef,0xef,0xd,0xf8,0xf1,0xf,0xf9,0xf9,0xdf,0xd,0xe4,0xd9,0xf9,0x2b,0xee,0xe8,0x9,0x40,0xf9,0x2f,0xa,0xfa,0xe8,0xe9,0x1,0xe,0xe7,0x23,0xa,0xd0,0x19,0xd3,0xe,0x4,0xda,0x2b,0xf,0xe7,0xe6,0xf3,0xfb,0x2c,0xd3,0x36,0x19,0xe,0xfe,0x3,0x1a,0x2e,0xd0,0x23,0x32,0xf1,0xe1,0x2a,0x9,0x1b,0xf6,0x29,0x3e,0xce,0x15,0xa,0xe8,0xec,0xdf,0x44,0x28,0xd9,0xfd,0xfa,0x9,0xff,0xe7,0x8,0xec,0xf4,0xef,0x1,0x19,0x11,0xf3,0xeb,0xeb,0xed,0x1a,0xdd,0x15,0xf,0x7,0xfe,0xeb,0xff,0xd6,0xd5,0x4,0xf5,0x7,0x10,0xe6,0xc,0xe4,0xda,0xc,0x8,0xee,0x6,0xd8,0xf8,0xf1,0xe0,0x1,0x8,0xfe,0xf9,0xf3,0xdf,0x3,0xe6,0xf4,0xa,0xff,0xf2,0xe0,0xd9,0xeb,0x1,0x10,0x2,0xfc,0xd,0x14,0xea,0xf8,0x3,0x18,0xf3,0x9,0xfc,0xc,0xb,0x1f,0xf5,0x5,0xf7,0xf9,0x0,0xfd,0x4,0xfc,0x16,0x7,0x0,0xdf,0xf9,0xfa,0xc,0xfb,0xf4,0xf7,0xf0,0xeb,0x7,0x17,0x20,0xfb,0xf0,0xec,0x4,0x0,0xf8,0xf2,0x2d,0xf9,0xd9,0xb,0x55,0xec,0x33,0x26,0xf8,0xa,0xf2,0xb,0x25,0xdf,0x29,0x5,0xd1,0x14,0xe2,0xf2,0x12,0xdd,0x28,0xfc,0xec,0x8,0xfd,0x2,0x3a,0xe6,0x29,0x25,0xd,0x10,0x9,0xa,0x32,0xf5,0x17,0x2d,0xea,0xfb,0x35,0xfc,0x28,0xd0,0x29,0x2f,0xcb,0x6,0xf,0x4,0xf2,0xf3,0x34,0x1c,0xf4,0x8,0x5,0xfc,0xfd,0xed,0xf,0xf8,0xe9,0xf0,0x9,0x16,0xfe,0x2,0xff,0xd4,0xea,0xa,0xeb,0xc,0xf8,0xf4,0x9,0xf4,0xf2,0x7,0xd9,0xb,0xfd,0xe4,0x1a,0xef,0x14,0x8,0xd8,0xfc,0xf5,0xe1,0x3,0xcf,0xf1,0x11,0xdb,0x15,0x7,0x10,0xf8,0xfc,0xe2,0xf1,0xf5,0xde,0xff,0xe7,0x1,0xea,0xee,0xe9,0x2,0xa,0x18,0xec,0xfe,0xf9,0x9,0xf3,0xe,0x2,0xf1,0xfc,0xf9,0x16,0x5,0x7,0x9,0xd,0xe,0xf7,0x4,0xed,0x4,0xdb,0x4,0x4,0xf6,0xdc,0xee,0xec,0xf5,0xfe,0xf4,0x2,0xe4,0xb,0xe0,0x17,0xa,0xe0,0xf7,0xdc,0x11,0xd6,0xfe,0xfa,0x35,0xde,0xe6,0x6,0x44,0xf9,0x35,0xa,0xfb,0xff,0xec,0xfb,0x16,0xd9,0x23,0xf,0xd4,0xef,0xdf,0x6,0xb,0xd9,0x25,0xff,0xf8,0xeb,0xf4,0xa,0x20,0xe5,0x22,0x1c,0xeb,0xf4,0xd,0xc,0x19,0xe1,0x1e,0x31,0xe9,0xfb,0x20,0xf0,0x23,0xfe,0x35,0x28,0xb4,0x6,0x28,0xe7,0xfb,0xe9,0x2a,0x1a,0xef,0x15,0xc,0xed,0xf1,0x4,0xe,0xa,0xff,0x16,0x1,0x4,0x17,0xea,0xec,0xdc,0xf4,0xf7,0x4,0x16,0x1f,0xa,0x11,0xef,0x12,0xdf,0xd9,0xc,0xf5,0x10,0x2,0xf3,0x10,0x3,0xd3,0xf5,0xb,0x2,0x0,0xcb,0xf6,0x23,0xf6,0xf1,0x1f,0xf9,0xfc,0xf0,0xf6,0xfe,0xfa,0xf8,0xf9,0xf4,0xfb,0xa,0xd6,0x29,0x9,0x2,0x0,0xfc,0xfc,0xee,0xf5,0x5,0xfb,0x1e,0xf1,0xf1,0xf3,0x2,0xec,0x1c,0xc,0xe,0xb,0x4,0xf6,0xe7,0x14,0x8,0x27,0x1,0xfe,0xe5,0xe7,0x1,0x1b,0xf0,0xf6,0xff,0xf4,0xe7,0xee,0x18,0xd,0x8,0xf8,0xd6,0x7,0xf4,0x8,0xff,0x1d,0x13,0xe7,0xb,0x42,0xef,0x28,0x0,0xf9,0xf0,0xf3,0x0,0x15,0xfd,0x1a,0x22,0xc1,0xf5,0xe0,0xf8,0x9,0xe6,0xe,0x5,0xf9,0xf6,0x1,0x1,0x13,0xdc,0x1f,0xd,0xfb,0x4,0x8,0xb,0x15,0xdb,0x28,0x34,0xed,0xb,0x3a,0xed,0x16,0xe3,0x39,0x32,0xc4,0xb,0x20,0xe7,0xf7,0x2,0x35,0x24,0xfc,0xe8,0x1c,0xf8,0xf1,0xfa,0xc,0x1d,0xf2,0x5,0xff,0x12,0xf,0x1,0xec,0xea,0xf0,0x3,0xe7,0x15,0xfd,0x5,0x8,0xe0,0x1b,0xf8,0xe1,0x1e,0xed,0xdc,0x11,0xeb,0xfd,0x1a,0xeb,0x9,0xf9,0xf3,0x0,0xe8,0xe6,0x8,0xf7,0xde,0x1e,0x0,0x0,0x0,0xe4,0x9,0xf2,0xf8,0xe7,0xf2,0xd,0xfa,0xe2,0xf,0x4,0x8,0xf2,0x13,0xf8,0xf9,0xf1,0xff,0x3,0x11,0x12,0xe9,0xf4,0x13,0x7,0xc,0x13,0x2b,0xf7,0xdd,0xf9,0xe9,0xfa,0xdb,0x1d,0xf6,0xf6,0xf9,0xe4,0xf6,0xd,0xeb,0xd,0x8,0xe7,0xe7,0xf2,0x3,0x1d,0xd9,0xd8,0xe4,0xf7,0xea,0xdc,0xdc,0x26,0x2,0xee,0xfa,0x38,0xfc,0x1a,0xef,0xda,0xf1,0xdf,0xb,0x1a,0xe0,0x16,0x16,0xdc,0x4,0xfa,0xf7,0xee,0x2,0x25,0x2,0xf5,0xfb,0x8,0xf6,0x11,0xf5,0x12,0x8,0xf4,0xe3,0x1b,0xf5,0x3a,0xdc,0x20,0x2e,0xe0,0xf5,0x30,0xe4,0x9,0xf8,0x3c,0x45,0xd3,0x8,0x23,0xd8,0x9,0xe4,0x35,0x30,0xe4,0xfe,0x7,0xf6,0x5,0x1,0x5,0xff,0xf6,0xd,0x2,0xfd,0x3,0x5,0xd,0x0,0xf5,0xd6,0xcf,0x19,0x6,0xee,0xd,0xf2,0x1,0x18,0xef,0x12,0x4,0x2,0x21,0xd9,0x2,0xd,0xeb,0xe9,0x13,0x8,0x15,0xf0,0xee,0x3,0xec,0x6,0x17,0xed,0x0,0x1a,0xee,0xf2,0xfc,0x9,0xec,0xf8,0xf8,0x18,0xf4,0x13,0x4,0xf6,0x2,0xf0,0xfc,0xfe,0xe3,0x1,0xa,0x1c,0x1b,0xec,0xe,0x1,0xfb,0x8,0x11,0xf5,0x0,0x14,0xe6,0x12,0x7,0xf4,0x15,0x7,0xfc,0xfb,0xf5,0xf1,0x1,0x21,0x1,0xe9,0xe8,0xef,0xdb,0xdf,0x1f,0xa,0xdd,0xd1,0x16,0x4,0xfd,0xe1,0x24,0xf0,0xec,0xf4,0x38,0xe1,0x16,0xfd,0xe0,0xec,0xe7,0xc,0x2a,0x4,0xc,0x17,0xdc,0xe8,0xf2,0x3,0xec,0xfd,0x19,0xfe,0xf3,0xf0,0xf3,0xfb,0x18,0xdf,0x1c,0x0,0x9,0xf4,0x18,0xb,0x1f,0xf6,0x34,0x22,0xf4,0x22,0x45,0xeb,0x23,0xcf,0x32,0x34,0xf2,0xf9,0x29,0xd4,0xf7,0xb,0x38,0x2a,0x9,0xe6,0x5,0x1,0xb,0xfe,0x17,0xfb,0x0,0xeb,0x8,0xfd,0xc,0x2,0x1d,0xea,0xfa,0xb,0xeb,0x9,0xfe,0xfe,0x10,0xe0,0xf6,0x6,0xf0,0x15,0xf3,0x9,0x11,0xe4,0xf9,0x7,0xe1,0xed,0x17,0x5,0xc,0xe1,0xdb,0xf2,0xf8,0xea,0x22,0xe9,0x2,0x0,0xfd,0xe7,0xf2,0xf8,0xf9,0xfc,0xfa,0xe8,0xe8,0xeb,0xe9,0xd,0x4,0xf8,0xf8,0xf7,0xf8,0xd,0x3,0xc,0x13,0xf2,0xf,0xf9,0xe6,0xfd,0xf,0x19,0x8,0xf7,0xfa,0x1,0xf3,0x12,0x1e,0x5,0xa,0x9,0xfd,0xb,0x7,0x8,0x2,0xfc,0xd6,0xe8,0x14,0x1,0x13,0x19,0xef,0xda,0xe,0xa,0x7,0xef,0x34,0xe0,0x5,0x1e,0x4e,0xe9,0x19,0xff,0xe1,0x4,0xfb,0xe,0x11,0x5,0x1f,0x15,0xd4,0xec,0xf9,0xe7,0xf9,0xfc,0x25,0xff,0x6,0xf2,0x1,0xf6,0x2a,0x17,0x24,0x11,0xf3,0x1a,0x1f,0xfb,0x32,0xeb,0x33,0x2f,0x0,0x8,0x2c,0xf0,0x26,0xf4,0x25,0x36,0xd9,0xf1,0x1a,0xd5,0xec,0xf9,0x32,0x27,0xfc,0xf4,0xf0,0xe3,0xfa,0xc,0x16,0x17,0xfa,0xf9,0xe5,0x1f,0x1f,0xfa,0xff,0xfd,0xd,0x2,0xe9,0xe,0xf0,0x12,0x9,0xda,0x2,0xea,0xe5,0xa,0xff,0x3,0x13,0xf0,0xa,0xf9,0xe9,0xff,0x10,0xfc,0x1a,0xf3,0xf7,0xf,0xf4,0xfa,0xf4,0x5,0x10,0xa,0xdd,0x9,0xf7,0xf0,0xe5,0x7,0x7,0xfa,0x2,0xd7,0xf8,0xf7,0x1,0xfb,0xe,0xf8,0x7,0xf,0xfe,0x3,0x12,0x5,0x9,0x13,0xf8,0xdc,0xfd,0x27,0xf,0xec,0xf7,0x7,0x0,0xfc,0x12,0xf8,0xfb,0xea,0xe4,0xe9,0xe9,0xe0,0xff,0xdc,0xd6,0xeb,0xf2,0xf7,0xd,0x1b,0xe9,0xc4,0x6,0x0,0xfd,0x4,0x46,0xf9,0xe9,0x13,0x2d,0xc,0x1f,0xf8,0xd3,0xc,0x14,0x11,0x5,0xe5,0x27,0x8,0xc5,0xef,0xdf,0xdd,0x4,0xf8,0x11,0x10,0xf0,0xe7,0xfb,0x3,0x3c,0xe7,0x14,0xc,0xf4,0xf6,0x1b,0xa,0x23,0xf2,0x2d,0x1a,0x8,0xff,0x32,0xe7,0x1a,0x5,0x2b,0x34,0xf1,0xa,0x0,0xe8,0x2,0xdf,0x2c,0x2a,0x3,0xe6,0xfc,0xef,0xfc,0xe4,0x3,0x1,0x3,0xee,0xe9,0x15,0x5,0x3,0x13,0x11,0xe,0xee,0xf5,0x22,0x1b,0xe,0xfd,0xf3,0xa,0x2,0xdd,0x20,0xeb,0x6,0xf8,0xe2,0x6,0xe,0xde,0xd,0xf9,0x16,0x1c,0xc,0xe0,0xf0,0xec,0xc,0xf,0xf2,0x27,0x1d,0xde,0xe6,0xf0,0xf9,0xf0,0x2,0xa,0x7,0x6,0xf9,0xf,0xfa,0xf0,0xee,0xf1,0xf7,0xff,0x2,0xb,0xd,0x1b,0xee,0xf6,0x5,0xff,0x1c,0x17,0x4,0x5,0x17,0x0,0xff,0xd,0xf3,0x23,0x10,0xfd,0x5,0xfb,0xea,0x3,0x10,0x7,0xd7,0xf7,0xff,0xf3,0xf1,0x17,0xed,0xd3,0xcb,0x14,0x1c,0xf5,0x3,0x47,0xf6,0xf7,0xf2,0x3e,0xf2,0x22,0xf4,0xed,0xfc,0xee,0xb,0xf4,0xf1,0x25,0x10,0xd0,0xf6,0x0,0xef,0x10,0xfc,0x15,0xe5,0xdb,0xf3,0xea,0x10,0x22,0xf2,0x2b,0x11,0xf9,0xa,0xfc,0xf5,0x53,0x16,0x25,0x43,0xe0,0xe,0x13,0xfc,0x2d,0xe2,0x55,0x65,0xf4,0x8,0x1,0xdf,0xa,0x0,0x49,0x1c,0xfe,0xdf,0xef,0xf2,0xf9,0xf6,0xfd,0xff,0xf3,0x2,0xf6,0x14,0xb,0xe8,0x9,0xfc,0xfc,0xe2,0xe5,0x11,0x3,0x9,0xfb,0x6,0x10,0x1a,0xf3,0xd,0xfa,0xa,0xd5,0xf5,0x1a,0x11,0xf2,0xfc,0x1f,0xfe,0xe,0xe4,0xef,0xd7,0xee,0x6,0x1e,0x4,0x12,0x28,0xf7,0xe,0x6,0xf8,0xee,0xf0,0x1a,0x1,0xf7,0xfd,0x3,0x11,0x19,0x10,0x4,0xfb,0xd7,0xfa,0x16,0x6,0x7,0x23,0xfa,0x14,0x11,0xf1,0x12,0x10,0x4,0xe1,0xee,0xf7,0x21,0xe,0xa,0xa,0xf8,0x7,0xa,0xee,0x3,0x1f,0xfa,0xc4,0xec,0x12,0x1,0x1e,0xfd,0xf1,0xe8,0xcc,0xf4,0x17,0xff,0xdd,0x45,0x10,0xee,0xfa,0x3d,0xe7,0x27,0xdd,0xd7,0xf9,0xf4,0xf6,0x6,0xf8,0x1e,0x13,0xe7,0xe2,0xf1,0xe3,0xf3,0xf7,0x18,0x12,0xe4,0xa,0xdb,0xff,0xff,0xfe,0x20,0x9,0x0,0xf7,0x23,0xf6,0x2d,0x14,0x26,0x28,0xe5,0xff,0xf,0xe3,0x1d,0xe8,0x56,0x43,0xe7,0xfb,0xf9,0xe6,0xe9,0xe2,0x19,0x19,0x8,0xfa,0xf3,0xe5,0x23,0x7,0xf,0xf8,0xf8,0xf3,0xfc,0x11,0x2a,0x5,0xf4,0xf1,0xfa,0xfb,0xf1,0x1e,0x13,0xf,0xf9,0xf5,0xfa,0x9,0xf9,0x3,0xf0,0xf0,0xe7,0xec,0xf1,0xc,0xe6,0xee,0xf6,0x20,0xf,0xe9,0x0,0xf4,0xfe,0xf0,0x13,0xa,0x17,0x13,0xee,0x13,0xfb,0xff,0xf8,0xfd,0xf4,0xe2,0xe8,0x6,0xfc,0x14,0x3,0x17,0x0,0x3,0xe6,0xfd,0xf2,0x12,0x12,0x20,0xeb,0x10,0x2,0xf7,0x13,0xd,0x11,0xfd,0xde,0xf5,0x7,0xf3,0x4,0xff,0x6,0x5,0xfb,0xea,0xf0,0xa,0x0,0xb5,0xe8,0x1a,0x3,0xfe,0xd,0x1a,0xe7,0xc0,0xd6,0xdc,0xf6,0xf8,0x39,0xf5,0xd5,0xf8,0x22,0xfa,0x22,0x5,0xd0,0xf4,0x2d,0xfc,0x0,0xa,0x1b,0xfc,0xe6,0x9,0x14,0xfa,0x0,0x1d,0x1a,0xfd,0xf3,0x18,0xfc,0xeb,0x15,0xf5,0xe,0xa,0xf3,0xf1,0x1b,0x5,0x14,0x3,0x2d,0x27,0xfb,0x18,0x22,0xef,0xf6,0x6,0x28,0x2b,0xde,0xec,0xef,0xe8,0xd3,0xfe,0x17,0x12,0x1,0x13,0x5,0xf7,0x0,0xde,0xf3,0xe5,0x3,0xfb,0x7,0xb,0xfd,0xdc,0xdf,0x3,0xc,0x0,0xfa,0x6,0xe,0x2,0x5,0xfa,0xfd,0xed,0x9,0xc,0xfd,0xfb,0xc,0xf0,0xe4,0x4,0xd6,0xf3,0x9,0xa,0xf9,0xf8,0xe2,0xef,0xdf,0xf0,0xf8,0x3,0xf,0x20,0xf4,0xe3,0xf8,0x2,0xe2,0xe5,0x25,0xf,0xeb,0xf8,0xe9,0xfd,0x4,0xc,0xc,0xfe,0x1,0x8,0xfc,0xfc,0x1b,0x1,0xe5,0x13,0xf9,0xe8,0x7,0x20,0xfe,0x6,0xec,0xfe,0x9,0xef,0x14,0x4,0xb,0xf5,0xe7,0xff,0xa,0x2,0x9,0xe9,0xc4,0x16,0xd,0xe7,0x15,0x14,0xf1,0xd0,0xec,0xe7,0xf0,0xf0,0x33,0x5,0xda,0xf2,0xb,0x8,0x38,0x1,0x7,0xfd,0xd8,0x6,0xd9,0xf0,0x16,0x1f,0xff,0xf7,0xe0,0xd8,0xf3,0xf7,0x12,0x8,0xe,0x5,0xf6,0x3,0xef,0x1b,0x12,0xf4,0xe8,0xf,0x2,0xfd,0xf2,0x16,0x26,0x22,0xe0,0x7,0xf7,0xe6,0xeb,0x16,0x22,0x1a,0xb,0x1,0xf5,0xea,0xd2,0x22,0xf,0x13,0x15,0x8,0xf0,0xfb,0xed,0x11,0xf3,0xe9,0xff,0xde,0xa,0x18,0xf,0x2,0xfb,0xf9,0xfb,0xe8,0x12,0x18,0x1,0xf4,0xf6,0xf8,0xf0,0x1f,0x24,0x15,0xf5,0x0,0x1c,0xf9,0x1,0xa,0x11,0xd5,0x1,0x12,0x2,0xec,0xfd,0x7,0xf2,0xea,0xf9,0xff,0xf7,0xfb,0x15,0xec,0xe5,0x1,0xeb,0x5,0xf9,0x10,0xfe,0x28,0xe5,0xa,0xeb,0x1b,0xe,0xf9,0xde,0x2,0x15,0xa,0xff,0xfe,0x11,0x24,0x3,0xf8,0x0,0x8,0xfd,0xe,0xeb,0xf3,0xf6,0xf7,0x14,0xe,0xfc,0xf5,0xde,0xf5,0x0,0x0,0x0,0x0,0x8e,0xfe,0xff,0xff,0x4,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xab,0x1,0x0,0x0,0xfa,0xfd,0xff,0xff,0xa2,0xff,0xff,0xff,0xba,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xfc,0xff,0xff,0x0,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x54,0x4f,0x43,0x4f,0x20,0x43,0x6f,0x6e,0x76,0x65,0x72,0x74,0x65,0x64,0x2e,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x24,0xfb,0xff,0xff,0x68,0x1,0x0,0x0,0x5c,0x1,0x0,0x0,0x50,0x1,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xf4,0x0,0x0,0x0,0x90,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xce,0xff,0xff,0xff,0x0,0x0,0x0,0x9,0x3,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1a,0xff,0xff,0xff,0x0,0x0,0x80,0x3f,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x18,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x7,0x0,0x14,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x1,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xc4,0xfc,0xff,0xff,0x1,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x16,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x7,0x0,0x10,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x38,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x14,0x0,0x0,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x7,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x1a,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0x7,0x0,0x14,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x2,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x8,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xff,0xff,0xff,0xff,0x31,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x34,0x4,0x0,0x0,0xcc,0x3,0x0,0x0,0x4c,0x3,0x0,0x0,0xdc,0x2,0x0,0x0,0x60,0x2,0x0,0x0,0x20,0x2,0x0,0x0,0xb0,0x1,0x0,0x0,0x44,0x1,0x0,0x0,0x70,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2,0xfc,0xff,0xff,0x0,0x0,0x0,0x9,0x44,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xf4,0xfb,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x0,0x0,0x80,0x3b,0xe,0x0,0x0,0x0,0x6c,0x61,0x62,0x65,0x6c,0x73,0x5f,0x73,0x6f,0x66,0x74,0x6d,0x61,0x78,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x1a,0x0,0x8,0x0,0x7,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0xb4,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x94,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x12,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x12,0x0,0x0,0x0,0x50,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x11,0x1e,0x23,0x3a,0x9e,0xa1,0x15,0x39,0x23,0x69,0x45,0x3a,0x9,0xe4,0xe4,0x39,0x65,0xd7,0x13,0x3a,0xe0,0xb2,0xfd,0x39,0x1b,0xc1,0x53,0x3a,0xc2,0x50,0x2d,0x3a,0x12,0x0,0x0,0x0,0x66,0x69,0x72,0x73,0x74,0x5f,0x77,0x65,0x69,0x67,0x68,0x74,0x73,0x2f,0x72,0x65,0x61,0x64,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x3a,0xfd,0xff,0xff,0x0,0x0,0x0,0x9,0x54,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x2c,0xfd,0xff,0xff,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xb5,0xfa,0xfa,0x39,0x1f,0x0,0x0,0x0,0x66,0x69,0x6e,0x61,0x6c,0x5f,0x66,0x63,0x5f,0x77,0x65,0x69,0x67,0x68,0x74,0x73,0x2f,0x72,0x65,0x61,0x64,0x2f,0x74,0x72,0x61,0x6e,0x73,0x70,0x6f,0x73,0x65,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xa0,0xf,0x0,0x0,0xa2,0xfd,0xff,0xff,0x0,0x0,0x0,0x9,0x58,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x44,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x74,0xfe,0xff,0xff,0x30,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf2,0xdd,0xbb,0x3d,0x1,0x0,0x0,0x0,0x32,0xa3,0x25,0x41,0x1,0x0,0x0,0x0,0xf6,0xa0,0x50,0xc1,0x5,0x0,0x0,0x0,0x61,0x64,0x64,0x5f,0x31,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xe,0xfe,0xff,0xff,0x0,0x0,0x0,0x2,0x2c,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x4,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x52,0x65,0x73,0x68,0x61,0x70,0x65,0x5f,0x32,0x2f,0x73,0x68,0x61,0x70,0x65,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4a,0xfe,0xff,0xff,0x0,0x0,0x0,0x9,0x5c,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x44,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1c,0xff,0xff,0xff,0x30,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x50,0x50,0xd0,0x3d,0x1,0x0,0x0,0x0,0x0,0x80,0xcf,0x41,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x52,0x65,0x73,0x68,0x61,0x70,0x65,0x5f,0x32,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xc2,0xfe,0xff,0xff,0x0,0x0,0x0,0x9,0x58,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x94,0xff,0xff,0xff,0x2c,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x50,0x50,0xd0,0x3d,0x1,0x0,0x0,0x0,0x0,0x80,0xcf,0x41,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x52,0x65,0x73,0x68,0x61,0x70,0x65,0x5f,0x31,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xa8,0x7,0x0,0x0,0x2e,0xff,0xff,0xff,0x0,0x0,0x0,0x9,0x60,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc,0x0,0x14,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x10,0x0,0xc,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1,0x0,0x0,0x0,0x3a,0x6a,0xac,0x3d,0x1,0x0,0x0,0x0,0xd0,0xbd,0xab,0x41,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x52,0x65,0x6c,0x75,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0xaa,0xff,0xff,0xff,0x0,0x0,0x0,0x2,0x44,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x9c,0xff,0xff,0xff,0x18,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x96,0x8,0x29,0x38,0xb,0x0,0x0,0x0,0x4d,0x61,0x74,0x4d,0x75,0x6c,0x5f,0x62,0x69,0x61,0x73,0x0,0x1,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0xe,0x0,0x18,0x0,0x8,0x0,0x7,0x0,0xc,0x0,0x10,0x0,0x14,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0xa0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x88,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xc,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x8,0x0,0xc,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x9a,0xbb,0x84,0x38,0x83,0x84,0x73,0x37,0x5b,0xa3,0xa0,0x38,0x16,0x41,0x3a,0x38,0xc7,0x9a,0x70,0x38,0xed,0x70,0x4e,0x38,0x54,0x4f,0xac,0x38,0xfd,0x7,0x8d,0x38,0xb,0x0,0x0,0x0,0x43,0x6f,0x6e,0x76,0x32,0x44,0x5f,0x62,0x69,0x61,0x73,0x0,0x1,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x4c,0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0xe6,0xff,0xff,0xff,0x0,0x0,0x0,0x19,0x2,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x0,0x16,0xa,0x0,0xe,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x4,0x0,0x0,0x0,0x0,0x0,0xa,0x0,0xc,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0xa,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x3,0x0,0x0,0x0}; diff --git a/src/audio/tensorflow/micro_speech_quantized_model_data.h b/src/audio/tensorflow/micro_speech_quantized_model_data.h deleted file mode 100644 index 3babbb703d36..000000000000 --- a/src/audio/tensorflow/micro_speech_quantized_model_data.h +++ /dev/null @@ -1,4 +0,0 @@ -#include - -constexpr unsigned int g_micro_speech_quantized_model_data_size = 18800; -extern const unsigned char g_micro_speech_quantized_model_data[]; diff --git a/src/audio/tensorflow/speech.cc b/src/audio/tensorflow/speech.cc index 6d03daf1d340..df243ec4af5e 100644 --- a/src/audio/tensorflow/speech.cc +++ b/src/audio/tensorflow/speech.cc @@ -14,8 +14,7 @@ #include "tensorflow/lite/micro/testing/micro_test.h" #include "speech.h" -// hard code the model today -#include "micro_speech_quantized_model_data.h" +#include "sof_tflm_quantized_model_data.h" // The following values are derived from values used during model training. // If you change the way you preprocess the input, update all these constants. @@ -24,10 +23,10 @@ static constexpr int kFeatureSize = TFLM_FEATURE_SIZE; static constexpr int kFeatureCount = TFLM_FEATURE_COUNT; static constexpr int kFeatureElementCount = TFLM_FEATURE_ELEM_COUNT; -// Arena size is a guesstimate, followed by use of -// MicroInterpreter::arena_used_bytes() on both the AudioPreprocessor and -// MicroSpeech models and using the larger of the two results. -static constexpr size_t kArenaSize = 28584; // xtensa p6 +// Sized for the retrained tiny_conv DS-CNN wake-word model. Tune down to +// interpreter->arena_used_bytes() (printed by tflm-classify.c on success) +// once the model is finalized. +static constexpr size_t kArenaSize = 131072; alignas(16) static uint8_t g_arena[kArenaSize]; // type for features @@ -39,7 +38,7 @@ static TfLiteTensor *input; static TfLiteTensor *output; static tflite::MicroInterpreter *interpreter; -using MicroSpeechOpResolver = tflite::MicroMutableOpResolver<4>; +using MicroSpeechOpResolver = tflite::MicroMutableOpResolver<7>; static MicroSpeechOpResolver *op_resolver; // Adding more kernels is quite efficient. TODO add more @@ -48,6 +47,10 @@ int RegisterOps(MicroSpeechOpResolver *op_resolver) { TF_LITE_ENSURE_STATUS(op_resolver->AddFullyConnected()); TF_LITE_ENSURE_STATUS(op_resolver->AddDepthwiseConv2D()); TF_LITE_ENSURE_STATUS(op_resolver->AddSoftmax()); + /* Dynamic-Reshape triple emitted by newer TF/Keras -> tflite converters. */ + TF_LITE_ENSURE_STATUS(op_resolver->AddShape()); + TF_LITE_ENSURE_STATUS(op_resolver->AddStridedSlice()); + TF_LITE_ENSURE_STATUS(op_resolver->AddPack()); return 0; } @@ -82,6 +85,11 @@ static void ComputeInputRequantizeMultiplier(float input_scale, int TF_InitOps(struct tf_classify *tfc) { op_resolver = new MicroSpeechOpResolver(); + if (!op_resolver) { + tfc->error = "op_resolver alloc failed (OOM)"; + return -ENOMEM; + } + if (RegisterOps(op_resolver) != 0) { tfc->error = "register ops failed"; return -EINVAL; @@ -90,6 +98,12 @@ int TF_InitOps(struct tf_classify *tfc) // create the interpreter interpreter = new tflite::MicroInterpreter(model, *op_resolver, g_arena, kArenaSize); + if (!interpreter) { + tfc->error = "interpreter alloc failed (OOM)"; + delete op_resolver; + op_resolver = nullptr; + return -ENOMEM; + } // and allocate the tensors if (interpreter->AllocateTensors() != kTfLiteOk) { @@ -101,7 +115,9 @@ int TF_InitOps(struct tf_classify *tfc) return -EINVAL; } - return 0; + // fetch input/output tensors + quantization params once; the + // interpreter/tensors are stable for the lifetime of this instance + return Init_Interpreter(tfc); } static int Init_Interpreter(struct tf_classify *tfc) @@ -112,9 +128,18 @@ static int Init_Interpreter(struct tf_classify *tfc) return -EINVAL; } - // check input shape is compatible with our feature data size - if (kFeatureElementCount != input->dims->data[input->dims->size - 1]){ + // Accept any input rank as long as the total element count matches + // (retrained tiny_conv is [1,49,40,1] rather than a flat [1,1960]). + int input_elems = 1; + for (int i = 0; i < input->dims->size; i++) + input_elems *= input->dims->data[i]; + if (kFeatureElementCount != input_elems) { tfc->error = "input interpreter shape incompatible"; + MicroPrintf("TFLM: input rank=%d elems=%d expected=%d", + input->dims->size, input_elems, kFeatureElementCount); + for (int i = 0; i < input->dims->size; i++) + MicroPrintf("TFLM: input dim[%d]=%d", i, + input->dims->data[i]); return -EINVAL; } @@ -124,12 +149,25 @@ static int Init_Interpreter(struct tf_classify *tfc) return -EINVAL; } - // check output shape is compatible with our number of prediction categories - if (tfc->categories != output->dims->data[output->dims->size - 1]) { + // Accept any output rank as long as total element count == categories. + int output_elems = 1; + for (int i = 0; i < output->dims->size; i++) + output_elems *= output->dims->data[i]; + if (tfc->categories != output_elems) { tfc->error = "output shape != categories"; + MicroPrintf("TFLM: output rank=%d elems=%d categories=%d", + output->dims->size, output_elems, tfc->categories); return -EINVAL; } + // expose the model's real input quantization params so callers can + // requantize their features correctly instead of assuming a fixed + // scale/zero_point. + tfc->input_scale = input->params.scale; + tfc->input_zero_point = input->params.zero_point; + ComputeInputRequantizeMultiplier(tfc->input_scale, + &tfc->input_mult, &tfc->input_shift); + return 0; } @@ -139,7 +177,7 @@ int TF_SetModel(struct tf_classify *tfc, unsigned char *model_tflite) // Map the model into a usable data structure. This doesn't involve any // copying or parsing, it's a very lightweight operation. - model = tflite::GetModel(g_micro_speech_quantized_model_data); + model = tflite::GetModel(g_sof_tflm_quantized_model_data); if (model->version() != TFLITE_SCHEMA_VERSION) { tfc->error = "failed to load model"; return -EINVAL; @@ -151,13 +189,6 @@ int TF_SetModel(struct tf_classify *tfc, unsigned char *model_tflite) int TF_ProcessClassify(struct tf_classify *tfc) { Features *features = reinterpret_cast(tfc->audio_features); - int ret; - - // initialise the interpreter for current feature block - ret = Init_Interpreter(tfc); - if (!ret) - return ret; - float output_scale = output->params.scale; int output_zero_point = output->params.zero_point; @@ -173,10 +204,20 @@ int TF_ProcessClassify(struct tf_classify *tfc) // Dequantize output values for (int i = 0; i < tfc->categories; i++) { - tfc->predictions[i] = - (tflite::GetTensorData(output)[i] - output_zero_point) * - output_scale; + int8_t raw = tflite::GetTensorData(output)[i]; + tfc->raw_output[i] = raw; + tfc->predictions[i] = (raw - output_zero_point) * output_scale; } return 0; } + +size_t TF_ArenaUsedBytes(void) +{ + return interpreter ? interpreter->arena_used_bytes() : 0; +} + +size_t TF_ArenaCapacity(void) +{ + return kArenaSize; +} diff --git a/src/audio/tensorflow/speech.h b/src/audio/tensorflow/speech.h index 7b45022e3564..23a5fff41a53 100644 --- a/src/audio/tensorflow/speech.h +++ b/src/audio/tensorflow/speech.h @@ -7,6 +7,12 @@ #include "tensorflow/lite/core/c/common.h" +/* Class-count and label names emitted alongside the retrained model by + * sof_tflm_train.py. Regenerated on every training run so speech.h never + * needs a manual edit when the keyword list changes. + */ +#include "sof_tflm_labels.h" + /* default model configuration */ #define TFLM_SAMPLE_RATE 16000 #define TFLM_FEATURE_SIZE 40 @@ -15,14 +21,25 @@ #define TFLM_FEATURE_STRIDE_MS 20 #define TFLM_FEATURE_DURATION_MS 30 -#define TFLM_CATEGORY_COUNT 4 -#define TFLM_CATEGORY_DATA {"silence", "unknown", "yes", "no",} struct tf_classify { int8_t *audio_features; size_t audio_data_size; int categories; const char *error; float predictions[TFLM_CATEGORY_COUNT]; + int8_t raw_output[TFLM_CATEGORY_COUNT]; + int op_count; + uint32_t node_cycles[10]; + int node_codes[10]; + float input_scale; + int input_zero_point; + /* Precomputed integer requantizer for the Q9.23 mel-log -> int8 + * feature path: pre_zp = round((int64)mel_q23 * input_mult >> input_shift). + * The factor of 2^-23 from Q9.23 is folded into input_mult so runtime + * does no float math. See Init_Interpreter() in speech.cc. + */ + int32_t input_mult; + int input_shift; }; /* Export of C++ APIs into C namespace for linkage */ @@ -42,6 +59,14 @@ extern "C" /* 3rd - perform the inference */ int TF_ProcessClassify(struct tf_classify *tfc); + /* Interpreter tensor-arena usage after AllocateTensors(); 0 if the + * interpreter is not initialized. Diagnostic for tuning kArenaSize. + */ + size_t TF_ArenaUsedBytes(void); + + /* Total tensor-arena capacity provisioned in the firmware image. */ + size_t TF_ArenaCapacity(void); + #ifdef __cplusplus } #endif diff --git a/src/audio/tensorflow/tflm-classify.c b/src/audio/tensorflow/tflm-classify.c index 9c93329bce1c..e518b4cbffc1 100644 --- a/src/audio/tensorflow/tflm-classify.c +++ b/src/audio/tensorflow/tflm-classify.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -28,82 +29,235 @@ #include #include #include +#include +#include + +static void sof_ut_log(const char *msg) +{ + printk("%s\n", msg); +} #include #include #include +#include +#include + +#include +#include +#include +#include +#include +#include +#if CONFIG_AMS +#include +#include +#include +#endif +#include +#include #include "speech.h" +/* TFLM error strings land here. Route to printk/mtrace so AllocateTensors() + * and Invoke() failures print their real reason instead of vanishing. + */ +void DebugLog(const char *format, va_list args) +{ + vprintk(format, args); +} + +int DebugVsnprintf(char *buffer, size_t buf_size, const char *format, + va_list vlist) +{ + return vsnprintf(buffer, buf_size, format, vlist); +} + +/* MFCC's non-compress output prepends a struct mfcc_data_header (24 bytes) + * to each hop, followed by TFLM_FEATURE_SIZE int32_t Q9.23 mel-log values + * (mel40.conf: 40 bins, 20ms hop). This must match MFCC_FRAME_BYTES in + * host-gateway-micsel-mfcc-tflm-capture.conf. + */ +#define MFCC_HOP_BYTES (sizeof(struct mfcc_data_header) + TFLM_FEATURE_SIZE * sizeof(int32_t)) + +void start_tflm_ut_thread(void); +void run_unit_tests(void); + +#if defined(__xtensa__) +#include +#endif + +static inline uint32_t get_ccount(void) +{ + return k_cycle_get_32(); +} + SOF_DEFINE_REG_UUID(tflmcly); LOG_MODULE_REGISTER(tflmcly, CONFIG_SOF_LOG_LEVEL); +#if CONFIG_COMP_TENSORFLOW_MODULE EXPORT_SYMBOL(tflmcly_uuid); EXPORT_SYMBOL(log_const_tflmcly); +#endif static const char * const prediction[] = TFLM_CATEGORY_DATA; +/* Pre-roll history in ms that KPB drains to host on wake-word trigger. + * Must be <= KPB_MAX_DRAINING_REQ (2000 ms on non-TGL, 2000 ms on TGL). + */ +#define TFLM_KPB_DRAIN_REQ_MS 2000 + +/* MFCC delivers one hop every 20 ms; run inference every 25 hops = 500 ms. */ +#define TFLM_MFCC_HOP_MS 20 +#define TFLM_INFERENCE_STRIDE_HOPS 25 + struct tflm_comp_data { struct comp_data_blob_handler *model_handler; struct tf_classify tfc; -}; + struct ipc_msg *msg; + struct kpb_event_data event_data; + struct kpb_client client_data; + uint32_t drain_req_ms; +#if CONFIG_AMS + uint32_t kpd_uuid_id; +#endif + /* Per-instance sliding window and inference cadence. */ + int8_t feature_buf[TFLM_FEATURE_ELEM_COUNT]; + int frame_counter; + /* Per-instance shutdown-summary counters. */ + uint32_t category_totals[TFLM_CATEGORY_COUNT]; + uint32_t total_inferences; + uint32_t kpb_trigger_events; +} __attribute__((aligned(8))); + +#if CONFIG_AMS +/* Key-phrase detected AMS message UUID (matches KPB consumer). */ +static const ams_uuid_t tflm_ams_kpd_msg_uuid = AMS_KPD_MSG_UUID; +#endif -__cold static int tflm_init(struct processing_module *mod) +static void tflm_notify_kpb(struct processing_module *mod) { - struct module_data *md = &mod->priv; + struct tflm_comp_data *cd = module_get_private_data(mod); struct comp_dev *dev = mod->dev; - struct module_config *cfg = &md->cfg; - struct tflm_comp_data *cd; - size_t bs = cfg->size; + + comp_info(dev, "TFLM keyword trigger -> notifying KPB to begin draining"); + + cd->client_data.r_ptr = NULL; + cd->client_data.sink = NULL; + cd->client_data.id = 0; + cd->client_data.drain_req = cd->drain_req_ms; + +#if CONFIG_AMS + struct ams_message_payload ams_payload; int ret; - assert_can_be_cold(); + ams_helper_prepare_payload(dev, &ams_payload, cd->kpd_uuid_id, + (uint8_t *)&cd->client_data, + sizeof(cd->client_data)); + ret = ams_send(&ams_payload); + if (ret) + comp_err(dev, "ams_send failed %d", ret); +#else + cd->event_data.event_id = KPB_EVENT_BEGIN_DRAINING; + cd->event_data.client_data = &cd->client_data; + + notifier_event(dev, NOTIFIER_ID_KPB_CLIENT_EVT, + NOTIFIER_TARGET_CORE_ALL_MASK, &cd->event_data, + sizeof(cd->event_data)); +#endif +} - comp_info(dev, "entry"); +/* TODO: scaffolding for future IPC4 keyword notification path; unused today. */ +static __maybe_unused int tflm_ipc_notification_init(struct processing_module *mod) +{ + return 0; +} - cd = mod_zalloc(mod, sizeof(*cd)); - if (!cd) - return -ENOMEM; +static __maybe_unused void tflm_send_keyword_notification(struct processing_module *mod, + uint32_t category_idx) +{ + struct tflm_comp_data *cd = module_get_private_data(mod); + struct sof_ipc4_notify_module_data *msg_module_data; + struct sof_ipc4_control_msg_payload *msg_payload; - md->private = cd; + if (!cd->msg) + return; - /* Handler for configuration data */ - cd->model_handler = mod_data_blob_handler_new(mod); - if (!cd->model_handler) { - comp_err(dev, "mod_data_blob_handler_new() failed."); - ret = -ENOMEM; - goto fail; - } + msg_module_data = (struct sof_ipc4_notify_module_data *)cd->msg->tx_data; + msg_payload = (struct sof_ipc4_control_msg_payload *)msg_module_data->event_data; + msg_payload->chanv[0].value = category_idx; + ipc_msg_send(cd->msg, NULL, false); +} - /* Get configuration data and reset DRC state */ - ret = comp_init_data_blob(cd->model_handler, bs, cfg->data); - if (ret < 0) { - comp_err(dev, "comp_init_data_blob() failed."); - goto fail; - } - /* hard coded atm */ - cd->tfc.categories = TFLM_CATEGORY_COUNT; +/* Shared TFLM backend state. speech.cc has one static arena/model/interpreter, + * so TF_SetModel/TF_InitOps must run only once no matter how many tflmcly + * instances the topology creates; secondary instances copy the resolved input + * quant params from the first-init cache below. + */ +static bool g_tflm_initialized; +static int g_tflm_instance_count; +static float g_tflm_shared_input_scale; +static int g_tflm_shared_input_zero_point; +static int32_t g_tflm_shared_input_mult; +static int32_t g_tflm_shared_input_shift; +static int g_tflm_shared_categories; + +__cold static void tflm_log_summary_at_shutdown(struct processing_module *mod) +{ + struct tflm_comp_data *cd = mod ? module_get_private_data(mod) : NULL; + struct comp_dev *dev = mod ? mod->dev : NULL; + char summary_buf[256]; + size_t off; + int i; - /* set default model for the moment*/ - ret = TF_SetModel(&cd->tfc, NULL); - if (!ret) { - comp_err(dev, "failed to set model"); - goto fail; + if (!cd) + return; + + off = snprintk(summary_buf, sizeof(summary_buf), + "[TFLM STREAM SHUTDOWN SUMMARY] Total Inferences=%u | Keyword Events:", + cd->total_inferences); + for (i = 0; i < TFLM_CATEGORY_COUNT && off < sizeof(summary_buf); i++) { + off += snprintk(summary_buf + off, sizeof(summary_buf) - off, + "%s %s=%u", i ? "," : "", + prediction[i], cd->category_totals[i]); } + if (off < sizeof(summary_buf)) + snprintk(summary_buf + off, sizeof(summary_buf) - off, + " | Total KPB Triggers=%u", cd->kpb_trigger_events); + sof_ut_log(summary_buf); + if (dev) + comp_info(dev, "%s", summary_buf); + printk("%s\n", summary_buf); +} - /* initialise ops */ - ret = TF_InitOps(&cd->tfc); - if (!ret) { - comp_err(dev, "failed to init ops"); - goto fail; - } +void tflm_yield(void) +{ + k_yield(); +} - return ret; +__cold static int tflm_init(struct processing_module *mod) +{ + struct module_data *md = &mod->priv; + struct comp_dev *dev = mod->dev; + struct tflm_comp_data *cd; -fail: - /* Passing NULL pointer to free functions is Ok */ - mod_data_blob_handler_free(mod, cd->model_handler); - mod_free(mod, cd); - return ret; + assert_can_be_cold(); + + cd = rzalloc(SOF_MEM_FLAG_USER, sizeof(*cd)); + if (!cd) { + printk("[TFLM INIT] FAILED: rzalloc(%zu) OOM\n", sizeof(*cd)); + return -ENOMEM; + } + + md->private = cd; + cd->tfc.categories = TFLM_CATEGORY_COUNT; + cd->drain_req_ms = TFLM_KPB_DRAIN_REQ_MS; +#if CONFIG_AMS + cd->kpd_uuid_id = AMS_INVALID_MSG_TYPE; +#endif + g_tflm_instance_count++; + printk("[TFLM INIT] instance=%d dev=%p init complete\n", + g_tflm_instance_count, dev); + return 0; } __cold static int tflm_free(struct processing_module *mod) @@ -112,8 +266,12 @@ __cold static int tflm_free(struct processing_module *mod) assert_can_be_cold(); - mod_data_blob_handler_free(mod, cd->model_handler); - mod_free(mod, cd); + tflm_log_summary_at_shutdown(mod); + if (--g_tflm_instance_count <= 0) { + g_tflm_instance_count = 0; + g_tflm_initialized = false; + } + rfree(cd); return 0; } @@ -122,41 +280,41 @@ __cold static int tflm_set_config(struct processing_module *mod, uint32_t param_ const uint8_t *fragment, size_t fragment_size, uint8_t *response, size_t response_size) { - struct tflm_comp_data *cd = module_get_private_data(mod); - struct comp_dev *dev = mod->dev; - int ret; - - assert_can_be_cold(); - - comp_dbg(dev, "entry"); - - struct sof_ipc4_control_msg_payload *ctl = (struct sof_ipc4_control_msg_payload *)fragment; - - comp_info(dev, "bytes control"); - ret = comp_data_blob_set(cd->model_handler, pos, data_offset_size, fragment, - fragment_size); - - /* TODO: now load the model from the blob */ - - return ret; + return 0; } -#if DEBUG - -/* The first feature for no and yes used in tflm_speech example */ - -int8_t expected_feature_no[TFLM_FEATURE_SIZE] = { - 126, 103, 124, 102, 124, 102, 123, 100, 118, 97, 118, 100, 118, 98, - 121, 100, 121, 98, 117, 91, 96, 74, 54, 87, 100, 87, 109, 92, - 91, 80, 64, 55, 83, 74, 74, 78, 114, 95, 101, 81, -}; - -int8_t expected_feature_yes[TFLM_FEATURE_SIZE] = { - 124, 105, 126, 103, 125, 101, 123, 100, 116, 98, 115, 97, 113, 90, - 91, 82, 104, 96, 117, 97, 121, 103, 126, 101, 125, 104, 126, 104, - 125, 101, 116, 90, 81, 74, 80, 71, 83, 76, 82, 71, -}; -#endif +/* + * MFCC's mel-log output is Q9.23 fixed point, normalized by the mel40.conf + * profile's mel_offset/mel_scale/top_db tuning to approximately the 0..1 + * range (see the dynamic_mmax clamp + offset + scale in mfcc_common.c). + * We requantize that into int8 features using the model's own input tensor + * scale/zero_point (populated by TF_InitOps()/Init_Interpreter() in speech.cc). + * + * The float-domain operation is + * int8_pre = round((mel_q23 / 2^23) / input_scale) + input_zero_point + * which we execute in integer math using a pre-decomposed multiplier and + * right-shift so this per-sample hot path (40 features x ~50 hops/sec) + * needs no float divides or FPU support: + * int8_pre = round((int64)mel_q23 * input_mult >> input_shift) + input_zero_point + * with input_mult/input_shift set once at model prepare time. + */ +static inline int8_t mfcc_mel_q23_to_int8(int32_t mel_q23, int32_t input_mult, + int input_shift, int input_zero_point) +{ + int64_t prod = (int64_t)mel_q23 * (int64_t)input_mult; + int64_t abs_prod = prod >= 0 ? prod : -prod; + int64_t rounding = (int64_t)1 << (input_shift - 1); + int32_t abs_scaled = (int32_t)((abs_prod + rounding) >> input_shift); + int32_t scaled = prod >= 0 ? abs_scaled : -abs_scaled; + + scaled += input_zero_point; + if (scaled > 127) + scaled = 127; + else if (scaled < -128) + scaled = -128; + + return (int8_t)scaled; +} /* * This expects features from 16kHz mono 16 bit input stream. @@ -174,63 +332,402 @@ int8_t expected_feature_yes[TFLM_FEATURE_SIZE] = { * features in the input buffer. */ + + + static int tflm_process(struct processing_module *mod, struct sof_source **sources, int num_of_sources, struct sof_sink **sinks, int num_of_sinks) { struct tflm_comp_data *cd = module_get_private_data(mod); - struct comp_dev *dev = mod->dev; - size_t frame_bytes = source_get_frame_bytes(sources[0]); - int features = source_get_data_frames_available(sources[0]); + + + /* Guard: skip processing if TFLM interpreter was not prepared */ + if (!g_tflm_initialized) { + printk("[TFLM PROCESS] WARNING: not initialized, skipping frame\n"); + /* Still drain the source so the pipeline doesn't stall */ + size_t avail = source_get_data_available(sources[0]); + if (avail > 0) { + const void *dp, *bs; + size_t bsz; + if (source_get_data(sources[0], avail, &dp, &bs, &bsz) == 0) + source_release_data(sources[0], avail); + } + return 0; + } + + size_t bytes_to_process = source_get_data_available(sources[0]); const void *data_ptr, *buf_start; size_t buf_size; - int ret; + int ret = 0; + +#if CONFIG_COMP_TENSORFLOW_DEBUG_TRACE + uint32_t sched_ccount_start = get_ccount(); + uint64_t sched_timer_start = sof_cycle_get_64(); +#endif - comp_dbg(dev, "entry"); + int8_t *feature_buf = cd->feature_buf; - /* Window size is TFLM_FEATURE_ELEM_COUNT and we increment - * by TFLM_FEATURE_SIZE until buffer empty. - */ - while (features >= TFLM_FEATURE_ELEM_COUNT) { - ret = source_get_data(sources[0], TFLM_FEATURE_ELEM_COUNT * frame_bytes, + while (bytes_to_process >= MFCC_HOP_BYTES) { + ret = source_get_data(sources[0], MFCC_HOP_BYTES, &data_ptr, &buf_start, &buf_size); - if (ret) - return ret; - - cd->tfc.audio_features = data_ptr; - cd->tfc.audio_data_size = TFLM_FEATURE_ELEM_COUNT; - ret = TF_ProcessClassify(&cd->tfc); - if (!ret) { - comp_err(dev, "classify failed %s.", - cd->tfc.error); - source_release_data(sources[0], 0); - return ret; - } + if (ret != 0 || !data_ptr) + break; + + { + /* Ring buffer may wrap inside a single hop; copy the + * 184-byte header+mel payload into a contiguous scratch + * so hdr / mel[] accesses (and the sink copy) can treat + * it as linear. + */ + uint8_t hop_scratch[MFCC_HOP_BYTES]; + const uint8_t *src_end = (const uint8_t *)buf_start + buf_size; + size_t src_until_wrap = src_end - (const uint8_t *)data_ptr; + + if (src_until_wrap >= MFCC_HOP_BYTES) { + memcpy(hop_scratch, data_ptr, MFCC_HOP_BYTES); + } else { + memcpy(hop_scratch, data_ptr, src_until_wrap); + memcpy(hop_scratch + src_until_wrap, buf_start, + MFCC_HOP_BYTES - src_until_wrap); + } + + /* Strip the mfcc_data_header and requantize the + * TFLM_FEATURE_SIZE int32 Q9.23 mel-log values into + * int8 features for this hop. + */ + const int32_t *mel = (const int32_t *) + (hop_scratch + sizeof(struct mfcc_data_header)); + int8_t hop_features[TFLM_FEATURE_SIZE]; + + /* Match training preprocessing exactly: clip Q9.23 mel to + * [-1.0, +4.0] and then rescale to [-1.0, +1.0] centered + * on 0 (np.clip + (X - 1.5) / 2.5 in train_wov_tflm.py). + * TFLite calibration on that range picks + * input_scale=1/128, input_zero_point=0, so the model + * consumes the full int8 dynamic range. + */ + enum { + MEL_CLIP_MIN_Q23 = -(1 << 23), /* -1.0 */ + MEL_CLIP_MAX_Q23 = (4 << 23), /* +4.0 */ + MEL_CENTER_Q23 = (3 << 22), /* +1.5 */ + TWO_FIFTHS_Q31 = 858993459, /* round(0.4 * (1<<31)) */ + }; + + for (int i = 0; i < TFLM_FEATURE_SIZE; i++) { + int32_t mel_c = mel[i]; + + if (mel_c < MEL_CLIP_MIN_Q23) + mel_c = MEL_CLIP_MIN_Q23; + else if (mel_c > MEL_CLIP_MAX_Q23) + mel_c = MEL_CLIP_MAX_Q23; + + /* Fold (mel - 1.5) * (2/5) into one Q1.31 multiply. */ + mel_c = Q_MULTSR_32X32((int64_t)(mel_c - MEL_CENTER_Q23), + TWO_FIFTHS_Q31, 23, 31, 23); + + hop_features[i] = mfcc_mel_q23_to_int8(mel_c, + cd->tfc.input_mult, cd->tfc.input_shift, + cd->tfc.input_zero_point); + } + +#if CONFIG_COMP_TENSORFLOW_DEBUG_TRACE + { + const struct mfcc_data_header *hdr = + (const struct mfcc_data_header *)hop_scratch; + static int dbg_hop_count; + int32_t mel_min = mel[0], mel_max = mel[0]; + int8_t f_min = hop_features[0], f_max = hop_features[0]; + char dbg_buf[192]; + + dbg_hop_count++; + for (int i = 1; i < TFLM_FEATURE_SIZE; i++) { + if (mel[i] < mel_min) mel_min = mel[i]; + if (mel[i] > mel_max) mel_max = mel[i]; + if (hop_features[i] < f_min) f_min = hop_features[i]; + if (hop_features[i] > f_max) f_max = hop_features[i]; + } + snprintk(dbg_buf, sizeof(dbg_buf), + "[DBG hop %d] vad=%d E=%d Ne=%d mel_min=%d mel_max=%d f_min=%d f_max=%d", + dbg_hop_count, (int)hdr->vad_flag, + (int)hdr->energy, (int)hdr->noise_energy, + mel_min, mel_max, + f_min, f_max); + sof_ut_log(dbg_buf); + } +#endif - /* debug - dump the output */ - for (int i = 0; i < cd->tfc.categories; i++) { - comp_dbg(dev, "tf: predictions %1.3f %s", - cd->tfc.predictions[i], prediction[i]); - } + /* Shift 49-frame sliding window history by 1 frame (20ms hop) */ + memmove(&feature_buf[0], &feature_buf[TFLM_FEATURE_SIZE], + TFLM_FEATURE_ELEM_COUNT - TFLM_FEATURE_SIZE); + memcpy(&feature_buf[TFLM_FEATURE_ELEM_COUNT - TFLM_FEATURE_SIZE], + hop_features, TFLM_FEATURE_SIZE); + + /* Copy source data to sink first, before releasing source data */ + if (num_of_sinks > 0 && sinks[0]) { + void *snk_ptr, *snk_buf_start; + size_t snk_buf_size; + int sret = sink_get_buffer(sinks[0], MFCC_HOP_BYTES, + &snk_ptr, &snk_buf_start, &snk_buf_size); + if (sret == 0 && snk_ptr) { + size_t size_to_wrap = (uint8_t *)snk_buf_start + snk_buf_size - (uint8_t *)snk_ptr; + if (MFCC_HOP_BYTES <= size_to_wrap) { + memcpy(snk_ptr, hop_scratch, MFCC_HOP_BYTES); + } else { + memcpy(snk_ptr, hop_scratch, size_to_wrap); + memcpy(snk_buf_start, hop_scratch + size_to_wrap, + MFCC_HOP_BYTES - size_to_wrap); + } + sink_commit_buffer(sinks[0], MFCC_HOP_BYTES); + } else { + /* Rate-limited: first 5, then every 100th failure. */ + static uint32_t dbg_sink_fail_count; + + dbg_sink_fail_count++; + if (dbg_sink_fail_count <= 5 || + dbg_sink_fail_count % 100 == 0) { + size_t free_sz = sink_get_free_size(sinks[0]); + + printk("[TFLM SINK FAIL #%u] sink_get_buffer(%u) ret=%d snk_ptr=%p free=%zu\n", + dbg_sink_fail_count, + (unsigned)MFCC_HOP_BYTES, sret, + snk_ptr, free_sz); + } + } + } + + /* Release source data immediately after reading */ + source_release_data(sources[0], MFCC_HOP_BYTES); + bytes_to_process -= MFCC_HOP_BYTES; + + cd->frame_counter++; + + /* Run inference every TFLM_INFERENCE_STRIDE_HOPS MFCC hops. */ + if (cd->frame_counter >= TFLM_INFERENCE_STRIDE_HOPS) { + cd->frame_counter = 0; + + cd->tfc.audio_features = feature_buf; + cd->tfc.audio_data_size = TFLM_FEATURE_ELEM_COUNT; + +#if CONFIG_COMP_TENSORFLOW_DEBUG_TRACE + { + int nonsat = 0; + for (int fi = 0; fi < TFLM_FEATURE_ELEM_COUNT; fi++) + if (feature_buf[fi] != -128) + nonsat++; + char nb[96]; + snprintk(nb, sizeof(nb), + "[DBG window] nonsat=%d/%d", + nonsat, TFLM_FEATURE_ELEM_COUNT); + sof_ut_log(nb); + } + + uint32_t stride_ms = TFLM_INFERENCE_STRIDE_HOPS * TFLM_MFCC_HOP_MS; + uint32_t c_start = get_ccount(); + uint64_t t_start = sof_cycle_get_64(); +#endif + + ret = TF_ProcessClassify(&cd->tfc); + +#if CONFIG_COMP_TENSORFLOW_DEBUG_TRACE + uint32_t c_end = get_ccount(); + uint64_t t_end = sof_cycle_get_64(); + uint32_t cycles = c_end - c_start; + uint64_t timer_delta = t_end - t_start; + uint32_t mcps_x100 = (timer_delta > 0) ? (uint32_t)(((uint64_t)cycles * 3840ULL) / timer_delta) : 0; + static uint32_t inf_count = 0; + inf_count++; + + char ut_buf[160]; + snprintk(ut_buf, sizeof(ut_buf), "[PERF] TFLM Inference #%u (stride=%ums): CCOUNT=%u cycles, 38M_Timer_delta=%llu, MCPS=%u.%02u", + inf_count, stride_ms, + cycles, (unsigned long long)timer_delta, mcps_x100 / 100, mcps_x100 % 100); + sof_ut_log(ut_buf); + printk("[PERF] TFLM Inference #%u: CCOUNT=%u cycles, timer_delta=%llu, MCPS=%u.%02u\n", + inf_count, cycles, (unsigned long long)timer_delta, mcps_x100 / 100, mcps_x100 % 100); + + snprintk(ut_buf, sizeof(ut_buf), "[TFLM MODEL GRAPH] Total Nodes = %d", cd->tfc.op_count); + sof_ut_log(ut_buf); + + { + char raw_buf[160]; + int off = snprintk(raw_buf, sizeof(raw_buf), + "[DBG raw_output] ret=%d", ret); + for (int i = 0; i < TFLM_CATEGORY_COUNT && + off < (int)sizeof(raw_buf); i++) + off += snprintk(raw_buf + off, + sizeof(raw_buf) - off, + " %s=%d", + prediction[i], + cd->tfc.raw_output[i]); + sof_ut_log(raw_buf); + } + + for (int k = 0; k < cd->tfc.op_count && k < 10; k++) { + snprintk(ut_buf, sizeof(ut_buf), " Node %d (OpCode=%d): %u cycles", + k, cd->tfc.node_codes[k], cd->tfc.node_cycles[k]); + sof_ut_log(ut_buf); + } +#endif + + if (ret >= 0) { + int max_idx = 0; + float max_score = cd->tfc.predictions[0]; + + for (int i = 0; i < cd->tfc.categories; i++) { + if (cd->tfc.predictions[i] > max_score) { + max_score = cd->tfc.predictions[i]; + max_idx = i; + } + } + + cd->total_inferences++; + if (max_idx >= 0 && max_idx < TFLM_CATEGORY_COUNT) + cd->category_totals[max_idx]++; + +#if CONFIG_COMP_TENSORFLOW_DEBUG_TRACE + { + char result_buf[200]; + int max_pct_dbg = (int)(max_score * 100.0f); + if (max_pct_dbg < 0) max_pct_dbg = 0; + int off = snprintk(result_buf, sizeof(result_buf), + "TFLM top prediction: %s confidence=%d pct (inferences=%u):", + prediction[max_idx], max_pct_dbg, + cd->total_inferences); + for (int i = 0; i < TFLM_CATEGORY_COUNT && + off < (int)sizeof(result_buf); i++) + off += snprintk(result_buf + off, + sizeof(result_buf) - off, + " %s=%u", + prediction[i], + cd->category_totals[i]); + sof_ut_log(result_buf); + } +#endif - /* advance by one stride */ - source_release_data(sources[0], TFLM_FEATURE_SIZE * frame_bytes); - features = source_get_data_frames_available(sources[0]); + // Only announce a keyword hit for real keyword classes + // (indices >= 2, i.e. not silence/unknown). + if (max_idx >= 2 && max_score >= 0.50f) { + char kw_buf[96]; + int max_pct = (int)(max_score * 100.0f); + if (max_pct < 0) max_pct = 0; + snprintk(kw_buf, sizeof(kw_buf), + "TFLM KEYWORD DETECTED: %s confidence=%d pct", + prediction[max_idx], max_pct); + sof_ut_log(kw_buf); + + cd->kpb_trigger_events++; + tflm_notify_kpb(mod); + } + } + } + } } +#if CONFIG_COMP_TENSORFLOW_DEBUG_TRACE + { + uint32_t sched_ccount_end = get_ccount(); + uint64_t sched_timer_end = sof_cycle_get_64(); + uint32_t sched_c_delta = sched_ccount_end - sched_ccount_start; + uint64_t sched_t_delta = sched_timer_end - sched_timer_start; + uint32_t sched_mcps_x100 = 0; + + if (sched_t_delta > 0) + sched_mcps_x100 = (uint32_t)(((uint64_t)sched_c_delta * 3840ULL) / sched_t_delta); + + (void)sched_mcps_x100; + } +#endif return ret; } + +static int tflm_prepare(struct processing_module *mod, + struct sof_source **sources, int num_of_sources, + struct sof_sink **sinks, int num_of_sinks) +{ + struct tflm_comp_data *cd = module_get_private_data(mod); + + printk("[TFLM PREPARE] tflm_prepare called, loading model...\n"); + + if (g_tflm_initialized) { + /* Shared TFLM engine already up. Copy the resolved input quant + * params so this instance's requantize path uses the same + * scale/zero_point/mult/shift as the first-initialized instance. + */ + cd->tfc.input_scale = g_tflm_shared_input_scale; + cd->tfc.input_zero_point = g_tflm_shared_input_zero_point; + cd->tfc.input_mult = g_tflm_shared_input_mult; + cd->tfc.input_shift = g_tflm_shared_input_shift; + cd->tfc.categories = g_tflm_shared_categories; + printk("[TFLM PREPARE] shared engine already initialized; attach instance\n"); + goto post_init; + } + + int ret = TF_SetModel(&cd->tfc, NULL); + if (ret < 0) { + printk("[TFLM PREPARE] FAILED: TF_SetModel returned %d\n", ret); + return ret; + } + + ret = TF_InitOps(&cd->tfc); + if (ret < 0) { + printk("[TFLM PREPARE] FAILED: TF_InitOps returned %d (%s)\n", + ret, cd->tfc.error ? cd->tfc.error : "no detail"); + return ret; + } + + g_tflm_shared_input_scale = cd->tfc.input_scale; + g_tflm_shared_input_zero_point = cd->tfc.input_zero_point; + g_tflm_shared_input_mult = cd->tfc.input_mult; + g_tflm_shared_input_shift = cd->tfc.input_shift; + g_tflm_shared_categories = cd->tfc.categories; + g_tflm_initialized = true; + printk("[TFLM PREPARE] TFLM model & ops initialized successfully!\n"); + printk("[TFLM PREPARE] arena_used=%zu / capacity=%zu bytes\n", + TF_ArenaUsedBytes(), TF_ArenaCapacity()); + printk("[DBG quant] input_scale_x1e6=%d input_zero_point=%d\n", + (int)(cd->tfc.input_scale * 1000000.0f), cd->tfc.input_zero_point); + +post_init: +#if CONFIG_AMS + if (cd->kpd_uuid_id == AMS_INVALID_MSG_TYPE) { + int ams_ret = ams_helper_register_producer(mod->dev, + &cd->kpd_uuid_id, + tflm_ams_kpd_msg_uuid); + if (ams_ret) { + printk("[TFLM PREPARE] AMS producer register failed %d\n", + ams_ret); + return ams_ret; + } + } +#endif + return 0; +} + + static int tflm_reset(struct processing_module *mod) { - //struct tflm_comp_data *cd = module_get_private_data(mod); + struct tflm_comp_data *cd = module_get_private_data(mod); + tflm_log_summary_at_shutdown(mod); +#if CONFIG_AMS + if (cd->kpd_uuid_id != AMS_INVALID_MSG_TYPE) { + int ret = ams_helper_unregister_producer(mod->dev, + cd->kpd_uuid_id); + if (ret) + comp_err(mod->dev, "ams unregister failed %d", ret); + cd->kpd_uuid_id = AMS_INVALID_MSG_TYPE; + } +#else + (void)cd; +#endif return 0; } static const struct module_interface tflmcly_interface = { .init = tflm_init, -// .prepare = tflm_prepare, + .prepare = tflm_prepare, .process = tflm_process, .set_configuration = tflm_set_config, // .get_configuration = tflm_get_config, @@ -240,9 +737,27 @@ static const struct module_interface tflmcly_interface = { DECLARE_TR_CTX(tflm_tr, SOF_UUID(tflmcly_uuid), LOG_LEVEL_INFO); DECLARE_MODULE_ADAPTER(tflmcly_interface, tflmcly_uuid, tflm_tr); -SOF_MODULE_INIT(tflmcly, sys_comp_module_tflmcly_interface_init); +SOF_MODULE_INIT(tflmcly_interface, sys_comp_module_tflmcly_interface_init); + +#if CONFIG_COMP_TENSORFLOW_MODULE +int llext_entry(void) +{ + printk("[TFLM LLEXT] llext_entry initialized cleanly.\n"); + return 0; +} +EXPORT_SYMBOL(llext_entry); +#endif + + + + + + + + #if CONFIG_COMP_TENSORFLOW_MODULE + /* modular: llext dynamic link */ #include From b186ed145fd528cab17389868a2b1587d1f3d8dd Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 12 Aug 2026 20:54:55 +0300 Subject: [PATCH 06/12] audio: mfcc: tune: emit mel40 and mel40_compress configs The on-device TFLM wake-word path (KPB -> SRC -> MFCC -> tflmcly) needs a 40-bin/20 ms-hop mel spectrogram to match TFLM micro_speech's front-end shape (FEATURE_SIZE=40, FEATURE_STRIDE_MS=20, FEATURE_DURATION_MS=30). Two variants are required: mel40.conf for the plain audio-buffer path used for off-target sanity checking and mel40_compress.conf for the compress PCM output actually consumed by the wake-word inference component. Add both export blocks to setup_mfcc.m so the blobs stay in lock-step under any future front-end tuning change, and ship the initial generated mel40.conf and mel40_compress.conf so the Wake-on-Voice topology graphs that consume them have matching blobs to reference. Signed-off-by: Seppo Ingalsuo --- src/audio/mfcc/tune/setup_mfcc.m | 20 ++++++++++++++++ .../include/components/mfcc/mel40.conf | 24 +++++++++++++++++++ .../components/mfcc/mel40_compress.conf | 24 +++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 tools/topology/topology2/include/components/mfcc/mel40.conf create mode 100644 tools/topology/topology2/include/components/mfcc/mel40_compress.conf diff --git a/src/audio/mfcc/tune/setup_mfcc.m b/src/audio/mfcc/tune/setup_mfcc.m index dbf69587a74f..8192d104d556 100644 --- a/src/audio/mfcc/tune/setup_mfcc.m +++ b/src/audio/mfcc/tune/setup_mfcc.m @@ -31,6 +31,26 @@ function setup_mfcc() setup.tplg_fn = 'mel80_compress.conf'; export_mfcc_setup(gen_cfg, setup); + % Blob for 40-bin/20ms-hop mel spectrogram, matching TFLM micro_speech's + % front-end shape (TFLM_FEATURE_SIZE=40, TFLM_FEATURE_STRIDE_MS=20, + % TFLM_FEATURE_DURATION_MS=30) for interim wake-word sanity-checking. + setup = get_mel_spectrogram_config(); + setup.frame_length = 30.0; % 480 samples at 16 kHz + setup.frame_shift = 20.0; % 320 samples at 16 kHz + setup.num_mel_bins = 40; + setup.tplg_fn = 'mel40.conf'; + export_mfcc_setup(gen_cfg, setup); + + % Same 40-bin/20ms-hop mel spectrogram with compress PCM output for the + % on-device TFLM wake-word path (KPB -> SRC -> MFCC -> tflmcly). + setup = get_mel_spectrogram_config(); + setup.frame_length = 30.0; + setup.frame_shift = 20.0; + setup.num_mel_bins = 40; + setup.compress_output = true; + setup.tplg_fn = 'mel40_compress.conf'; + export_mfcc_setup(gen_cfg, setup); + % Blob for mel spectrogram with compress PCM output and DTX setup = get_mel_spectrogram_config(); setup.compress_output = true; diff --git a/tools/topology/topology2/include/components/mfcc/mel40.conf b/tools/topology/topology2/include/components/mfcc/mel40.conf new file mode 100644 index 000000000000..63b022713475 --- /dev/null +++ b/tools/topology/topology2/include/components/mfcc/mel40.conf @@ -0,0 +1,24 @@ +# Exported MFCC configuration 01-Aug-2026 +# cd src/audio/mfcc/tune; octave setup_mfcc.m +Object.Base.data."mfcc_config" { + bytes " + 0x53,0x4f,0x46,0x34,0x00,0x00,0x00,0x00, + 0x74,0x00,0x00,0x00,0x01,0xd0,0x01,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x74,0x00,0x00,0x00,0x00,0x02,0x00,0x04, + 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,0x80,0x3e,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xe0,0x01,0x40,0x01,0x40,0x1f,0x00,0x00, + 0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x04, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x00,0x00,0x01,0x01,0x00,0x01,0x00, + 0x00,0x00,0x00,0x00" +} diff --git a/tools/topology/topology2/include/components/mfcc/mel40_compress.conf b/tools/topology/topology2/include/components/mfcc/mel40_compress.conf new file mode 100644 index 000000000000..2a18ddac9667 --- /dev/null +++ b/tools/topology/topology2/include/components/mfcc/mel40_compress.conf @@ -0,0 +1,24 @@ +# Exported MFCC configuration 12-Aug-2026 +# cd src/audio/mfcc/tune; octave setup_mfcc.m +Object.Base.data."mfcc_config" { + bytes " + 0x53,0x4f,0x46,0x34,0x00,0x00,0x00,0x00, + 0x74,0x00,0x00,0x00,0x01,0xd0,0x01,0x03, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x74,0x00,0x00,0x00,0x00,0x02,0x00,0x04, + 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,0x80,0x3e,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0xe0,0x01,0x40,0x01,0x40,0x1f,0x00,0x00, + 0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x04, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, + 0x01,0x00,0x00,0x01,0x01,0x00,0x01,0x01, + 0x00,0x00,0x00,0x00" +} From 0916ebc64e6b709f6fd7b697752cbebb554c4da4 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Fri, 14 Aug 2026 12:41:10 +0300 Subject: [PATCH 07/12] audio: mfcc: raise max_frames to a full hop in DP mode When the MFCC component runs in the DP (Data Processing) scheduling domain, the DP thread is woken on ibs, which is roughly one FFT hop of input. Sizing the processing capacity to only dev->frames means the DP thread has to re-enter many times per LL tick to nibble through one hop, adding unnecessary scheduling overhead. Raise the max_frames argument passed to mfcc_setup() to at least cd->config->frame_shift when the component is scheduled in the DP domain, so a single DP invocation drains one whole hop. Signed-off-by: Seppo Ingalsuo --- src/audio/mfcc/mfcc.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/audio/mfcc/mfcc.c b/src/audio/mfcc/mfcc.c index 724d3d7faf06..89294a6a9ac8 100644 --- a/src/audio/mfcc/mfcc.c +++ b/src/audio/mfcc/mfcc.c @@ -241,7 +241,16 @@ static int mfcc_prepare(struct processing_module *mod, /* Initialize MFCC, max_frames is set to dev->frames + 4 */ if (cd->config && data_size > 0) { - ret = mfcc_setup(mod, dev->frames + 4, audio_stream_get_rate(&sourceb->stream), + int max_frames = dev->frames + 4; + + /* DP wakes on ibs (~1 hop of input); consume the whole + * hop per call so we don't re-enter the DP thread many + * times per LL tick just to nibble dev->frames at a time. + */ + if (dev->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP) + max_frames = MAX(max_frames, cd->config->frame_shift); + + ret = mfcc_setup(mod, max_frames, audio_stream_get_rate(&sourceb->stream), audio_stream_get_channels(&sourceb->stream)); if (ret < 0) { comp_err(dev, "setup failed."); From b55af6ec6db41c4b13b0e0897f26679d34f50f7c Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Wed, 22 Jul 2026 21:24:05 +0100 Subject: [PATCH 08/12] topology2: add TFLM Wake-on-Voice branches for HDA and SoundWire Add topology graphs and IPC4 ABI manifest bits for the Wake-on-Voice pipeline on HDA and SoundWire jack inputs, plus a bench variant for off-target training and validation. Register the KPB IPC4 UUID, attach the mel40 MFCC binary config blob as a real config, and give the ARL target the HDA_MIC_MFCC_PARAMS it was missing. Wire the dual-path KPB routing so the always-on inference branch and the host capture branch share the same buffer. Signed-off-by: Seppo Ingalsuo --- .../topology2/cavs-benchmark-hda.conf | 11 ++ tools/topology/topology2/cavs-sdw.conf | 11 ++ .../development/tplg-targets-bench.cmake | 2 + .../topology2/development/tplg-targets.cmake | 15 ++ .../include/bench/mfcc_controls_capture.conf | 1 + .../include/bench/mfcc_controls_playback.conf | 1 + .../topology2/include/common/abi.conf | 7 + .../include/common/common_definitions.conf | 3 + .../topology2/include/components/kpb.conf | 4 +- .../topology2/include/components/tflm.conf | 54 ++++++ ...host-gateway-micsel-mfcc-tflm-capture.conf | 174 ++++++++++++++++++ .../cavs/host-gateway-tdfb-drc-capture.conf | 1 + .../include/pipelines/cavs/src-kpb-be.conf | 115 ++++++++++++ .../topology2/platform/intel/dmic1-mfcc.conf | 4 +- .../platform/intel/hda-mic-tflm-kpb.conf | 159 ++++++++++++++++ .../intel/sdw-dmic-audio-feature.conf | 28 +++ .../platform/intel/sdw-dmic-tflm-kpb.conf | 162 ++++++++++++++++ .../platform/intel/sdw-jack-tflm-kpb.conf | 161 ++++++++++++++++ tools/topology/topology2/sof-hda-generic.conf | 10 + 19 files changed, 920 insertions(+), 3 deletions(-) create mode 100644 tools/topology/topology2/include/common/abi.conf create mode 100644 tools/topology/topology2/include/components/tflm.conf create mode 100644 tools/topology/topology2/include/pipelines/cavs/host-gateway-micsel-mfcc-tflm-capture.conf create mode 100644 tools/topology/topology2/include/pipelines/cavs/src-kpb-be.conf create mode 100644 tools/topology/topology2/platform/intel/hda-mic-tflm-kpb.conf create mode 100644 tools/topology/topology2/platform/intel/sdw-dmic-tflm-kpb.conf create mode 100644 tools/topology/topology2/platform/intel/sdw-jack-tflm-kpb.conf diff --git a/tools/topology/topology2/cavs-benchmark-hda.conf b/tools/topology/topology2/cavs-benchmark-hda.conf index d1357caa20ab..dc27b8899a03 100644 --- a/tools/topology/topology2/cavs-benchmark-hda.conf +++ b/tools/topology/topology2/cavs-benchmark-hda.conf @@ -845,6 +845,17 @@ IncludeByKey.BENCH_CONFIG { } + # mfccmel40 reuses the mfccmel bench include; BENCH_MFCC_PARAMS=mel40 selects the blob. + "mfccmel4016" { + + } + "mfccmel4024" { + + } + "mfccmel4032" { + + } + # # Micsel component # diff --git a/tools/topology/topology2/cavs-sdw.conf b/tools/topology/topology2/cavs-sdw.conf index 311e0376b333..c9d78596d67a 100644 --- a/tools/topology/topology2/cavs-sdw.conf +++ b/tools/topology/topology2/cavs-sdw.conf @@ -11,6 +11,7 @@ + @@ -32,6 +33,8 @@ + + @@ -280,6 +283,10 @@ IncludeByKey.SDW_JACK_COMPR_AUDIO_FEATURE_CAPTURE { "true" "platform/intel/sdw-jack-audio-feature-compress.conf" } +IncludeByKey.SDW_JACK_TFLM_KPB_CAPTURE { + "true" "platform/intel/sdw-jack-tflm-kpb.conf" +} + IncludeByKey.SDW_DMIC_AUDIO_FEATURE_CAPTURE { "true" "platform/intel/sdw-dmic-audio-feature.conf" } @@ -287,3 +294,7 @@ IncludeByKey.SDW_DMIC_AUDIO_FEATURE_CAPTURE { IncludeByKey.SDW_DMIC_COMPR_AUDIO_FEATURE_CAPTURE { "true" "platform/intel/sdw-dmic-audio-feature-compress.conf" } + +IncludeByKey.SDW_DMIC_TFLM_KPB_CAPTURE { + "true" "platform/intel/sdw-dmic-tflm-kpb.conf" +} diff --git a/tools/topology/topology2/development/tplg-targets-bench.cmake b/tools/topology/topology2/development/tplg-targets-bench.cmake index 2dd4f28bc07c..abf8a5bd7230 100644 --- a/tools/topology/topology2/development/tplg-targets-bench.cmake +++ b/tools/topology/topology2/development/tplg-targets-bench.cmake @@ -20,6 +20,7 @@ set(components "level_multiplier" "mfcc" "mfccmel" + "mfccmel40" "micsel" "phase_vocoder" "rtnr" @@ -48,6 +49,7 @@ set(component_parameters "BENCH_LEVEL_MULTIPLIER_PARAMS=default" "BENCH_MFCC_PARAMS=default" "BENCH_MFCC_PARAMS=mel80" + "BENCH_MFCC_PARAMS=mel40" "BENCH_MICSEL_PARAMS=passthrough" "BENCH_PHASE_VOCODER_PARAMS=default" "BENCH_RTNR_PARAMS=default" diff --git a/tools/topology/topology2/development/tplg-targets.cmake b/tools/topology/topology2/development/tplg-targets.cmake index ab6a8b2976b5..f5399a9ab2dc 100644 --- a/tools/topology/topology2/development/tplg-targets.cmake +++ b/tools/topology/topology2/development/tplg-targets.cmake @@ -60,6 +60,12 @@ NHLT_BIN=nhlt-sof-lnl-nocodec-fpga-4ch.bin,PASSTHROUGH=true,DMIC_IO_CLK=19200000 # HDA topology with passthrough analog codec pipelines using CHAIN_DMA "sof-hda-generic\;sof-hda-passthrough-chain-dma\;HDA_CONFIG=passthrough,CODEC_HDA_CHAIN_DMA=true" +# HDA generic + KPB-based Wake-on-Voice (TFLM) capture branch. +# Adds a WoV drain PCM and an MFCC/TFLM detect PCM tapped off the +# Analog capture endpoint (module-copier.4.2). Applies to all IPC4 +# HDA platforms; no NHLT differentiation. +"sof-hda-generic\;sof-hda-generic-tflm-kpb\;HDA_CONFIG=mix,HDA_MIC_TFLM_KPB_CAPTURE=true" + # SSP topology for PTL, includes Data Processing SRC "cavs-nocodec\;sof-ptl-nocodec\;PLATFORM=ptl,NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,\ PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-ptl-nocodec.bin,SRC_DOMAIN=DP" @@ -497,6 +503,15 @@ MFCC_FRAME_BYTES=344,MFCC_BLOB=mel" HDMI1_ID=4,HDMI2_ID=5,HDMI3_ID=6,SDW_JACK_COMPR_AUDIO_FEATURE_CAPTURE=true,\ MFCC_FRAME_BYTES=76,MFCC_BLOB=ceps" +# Soundwire topologies with TFLM/KPB Wake-on-Voice on jack +"cavs-sdw\;sof-mtl-rt713-l0-rt1316-l12-tflm-kpb\;PLATFORM=mtl,NUM_SDW_AMP_LINKS=2,\ +HDMI1_ID=4,HDMI2_ID=5,HDMI3_ID=6,SDW_JACK_TFLM_KPB_CAPTURE=true" + +"cavs-sdw\;sof-arl-cs42l43-l0-cs35l56-l23-tflm-kpb\;PLATFORM=mtl,NUM_SDW_AMP_LINKS=2,SDW_DMIC=1,\ +SDW_AMP_FEEDBACK=false,SDW_SPK_STREAM=Playback-SmartAmp,SDW_DMIC_STREAM=Capture-SmartMic,\ +SDW_JACK_OUT_STREAM=Playback-SimpleJack,SDW_JACK_IN_STREAM=Capture-SimpleJack,\ +SDW_JACK_TFLM_KPB_CAPTURE=true,SDW_DMIC_TFLM_KPB_CAPTURE=true" + "cavs-sdw\;sof-arl-cs42l43-l0-cs35l56-l23-mfcc-mel-compr\;PLATFORM=mtl,NUM_SDW_AMP_LINKS=2,SDW_DMIC=1,\ SDW_AMP_FEEDBACK=false,SDW_SPK_STREAM=Playback-SmartAmp,SDW_DMIC_STREAM=Capture-SmartMic,\ SDW_JACK_OUT_STREAM=Playback-SimpleJack,SDW_JACK_IN_STREAM=Capture-SimpleJack,\ diff --git a/tools/topology/topology2/include/bench/mfcc_controls_capture.conf b/tools/topology/topology2/include/bench/mfcc_controls_capture.conf index 8788387ec8c7..8a77e1254a12 100644 --- a/tools/topology/topology2/include/bench/mfcc_controls_capture.conf +++ b/tools/topology/topology2/include/bench/mfcc_controls_capture.conf @@ -6,6 +6,7 @@ name '$ANALOG_CAPTURE_PCM MFCC bytes' IncludeByKey.BENCH_MFCC_PARAMS { "default" "include/components/mfcc/default.conf" + "mel40" "include/components/mfcc/mel40.conf" "mel80" "include/components/mfcc/mel80.conf" } } diff --git a/tools/topology/topology2/include/bench/mfcc_controls_playback.conf b/tools/topology/topology2/include/bench/mfcc_controls_playback.conf index 007dbb91cd4f..f9177636ab65 100644 --- a/tools/topology/topology2/include/bench/mfcc_controls_playback.conf +++ b/tools/topology/topology2/include/bench/mfcc_controls_playback.conf @@ -6,6 +6,7 @@ name '$ANALOG_PLAYBACK_PCM MFCC bytes' IncludeByKey.BENCH_MFCC_PARAMS { "default" "include/components/mfcc/default.conf" + "mel40" "include/components/mfcc/mel40.conf" "mel80" "include/components/mfcc/mel80.conf" } } diff --git a/tools/topology/topology2/include/common/abi.conf b/tools/topology/topology2/include/common/abi.conf new file mode 100644 index 000000000000..b86157c4f8fa --- /dev/null +++ b/tools/topology/topology2/include/common/abi.conf @@ -0,0 +1,7 @@ +Object.Base.manifest.1 { + name "sof_manifest" + Object.Base.data.1 { + name "SOF ABI" + bytes "0x03,0x00,0x1d,0x00,0x01,0x00" + } +} diff --git a/tools/topology/topology2/include/common/common_definitions.conf b/tools/topology/topology2/include/common/common_definitions.conf index 06f0f425c5e2..962ba2ee1ef8 100644 --- a/tools/topology/topology2/include/common/common_definitions.conf +++ b/tools/topology/topology2/include/common/common_definitions.conf @@ -73,6 +73,9 @@ Define { SDW_SPK_ECHO_REF false # No echo reference for speaker SDW_JACK_AUDIO_FEATURE_CAPTURE false # No audio features capture for jack SDW_JACK_COMPR_AUDIO_FEATURE_CAPTURE false # No compress audio features capture for jack + SDW_JACK_TFLM_KPB_CAPTURE false # No TFLM/KPB Wake-on-Voice branch on jack SDW_DMIC_AUDIO_FEATURE_CAPTURE false # No audio features capture for microphone SDW_DMIC_COMPR_AUDIO_FEATURE_CAPTURE false # No compress audio features capture for microphone + SDW_DMIC_TFLM_KPB_CAPTURE false # No TFLM/KPB Wake-on-Voice branch on microphone + HDA_MIC_TFLM_KPB_CAPTURE false # No TFLM/KPB Wake-on-Voice branch on HDA analog capture } diff --git a/tools/topology/topology2/include/components/kpb.conf b/tools/topology/topology2/include/components/kpb.conf index 03f7989be8ac..2605589786ac 100644 --- a/tools/topology/topology2/include/components/kpb.conf +++ b/tools/topology/topology2/include/components/kpb.conf @@ -67,8 +67,8 @@ Class.Widget."kpb" { num_input_audio_formats 1 num_output_audio_formats 1 - #UUID: D8218443-5FF3-4A4C-B388-6CFE07B9562E - uuid "43:84:21:d8:f3:5f:4c:4a:b3:88:6c:fe:07:b9:56:2e" + #UUID: A8A0CB32-4A77-4DB1-85C7-53D7EE07BCE6 + uuid "32:cb:a0:a8:77:4a:b1:4d:85:c7:53:d7:ee:07:bc:e6" no_pm "true" cpc 720000 num_input_pins 1 diff --git a/tools/topology/topology2/include/components/tflm.conf b/tools/topology/topology2/include/components/tflm.conf new file mode 100644 index 000000000000..6144b2ce91de --- /dev/null +++ b/tools/topology/topology2/include/components/tflm.conf @@ -0,0 +1,54 @@ +# +# A TFLM Classification component for SOF. All attributes defined herein are namespaced +# by alsatplg to "Object.Widget.tflmcly.attribute_name" +# + +Class.Widget."tflmcly" { + # + # Pipeline ID + # + DefineAttribute."index" { + type "integer" + } + + # + # Unique instance for TFLM widget + # + DefineAttribute."instance" { + type "integer" + } + + # Include common widget attributes definition + + + attributes { + !constructor [ + "index" + "instance" + ] + !mandatory [ + "num_input_pins" + "num_output_pins" + "num_input_audio_formats" + "num_output_audio_formats" + ] + + !immutable [ + "uuid" + ] + !deprecated [ + "preload_count" + ] + unique "instance" + } + + # + # Default attributes for tflmcly + # UUID: c51dc642-a2e1-48df-a490e2748cb6363e + # + uuid "42:c6:1d:c5:e1:a2:df:48:a4:90:e2:74:8c:b6:36:3e" + type "effect" + no_pm "true" + num_input_pins 1 + num_output_pins 1 +} diff --git a/tools/topology/topology2/include/pipelines/cavs/host-gateway-micsel-mfcc-tflm-capture.conf b/tools/topology/topology2/include/pipelines/cavs/host-gateway-micsel-mfcc-tflm-capture.conf new file mode 100644 index 000000000000..14253a70d371 --- /dev/null +++ b/tools/topology/topology2/include/pipelines/cavs/host-gateway-micsel-mfcc-tflm-capture.conf @@ -0,0 +1,174 @@ +# +# Micsel-MFCC-TFLM capture detection pipeline +# +# This class provides a detection pipeline that first uses micsel to convert +# a 16 kHz stereo capture stream into a stereo double-mono stream (both +# channels carrying the same audio content), then feeds it into MFCC for +# feature extraction and TFLM for classification. The final compressed +# frames are delivered to the host over a stereo double-mono aif_out so +# the topology remains compatible with capture PCMs that require stereo. +# + + + + + + + + + +Define { + # 20 ms FFT hop at 16 kHz, 2 ch, s32: 320 samples * 2 * 4 = 2560 B. + MFCC_INPUT_BYTES 2560 + # MFCC compress output frame: 24-byte header + 40 mel bins * 4 bytes. + MFCC_FRAME_BYTES 184 + # TFLM expects one MFCC frame every 20 ms; wake it per-frame so it + # stays in lock-step with MFCC instead of batching. + TFLM_INPUT_BYTES 184 +} + +Class.Pipeline."host-gateway-micsel-mfcc-tflm-capture" { + + + + attributes { + !constructor [ + "index" + ] + + unique "instance" + } + + Object.Widget { + host-copier."1" { + type "aif_out" + node_type $HDA_HOST_INPUT_CLASS + stream_name "HDA Mic TFLM Detect" + pcm_id $index + num_input_pins 1 + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + } + ] + } + + micsel."1" { + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + out_ch_cfg $CHANNEL_CONFIG_DUAL_MONO + } + ] + } + + mfcc."1" { + scheduler_domain "DP" + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + ibs $MFCC_INPUT_BYTES + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + obs $MFCC_FRAME_BYTES + } + ] + } + + # tflmcly is an audio pass-through: it copies each MFCC frame + # from input to output unchanged and sends classification + # results out-of-band via IPC. ibs/obs are one MFCC frame so + # the DP thread wakes per 20 ms hop and stays in lock-step + # with MFCC. tflm_process runs an inference roughly once per + # 32 frames internally; between inferences it just forwards + # the incoming MFCC frame. + tflmcly."1" { + scheduler_domain "DP" + num_input_pins 1 + num_output_pins 1 + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + ibs $TFLM_INPUT_BYTES + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + obs $TFLM_INPUT_BYTES + } + ] + } + + pipeline."1" { + priority 0 + lp_mode 0 + } + } + + Object.Base { + !route [ + { + source micsel.$index.1 + sink mfcc.$index.1 + } + { + source mfcc.$index.1 + sink tflmcly.$index.1 + } + { + source tflmcly.$index.1 + sink "host-copier.$index.capture" + } + ] + } + + direction "capture" + dynamic_pipeline 1 + time_domain "timer" +} diff --git a/tools/topology/topology2/include/pipelines/cavs/host-gateway-tdfb-drc-capture.conf b/tools/topology/topology2/include/pipelines/cavs/host-gateway-tdfb-drc-capture.conf index 752c421535c5..a57678873a1c 100644 --- a/tools/topology/topology2/include/pipelines/cavs/host-gateway-tdfb-drc-capture.conf +++ b/tools/topology/topology2/include/pipelines/cavs/host-gateway-tdfb-drc-capture.conf @@ -67,6 +67,7 @@ Class.Pipeline."host-gateway-tdfb-drc-capture" { } drc."1" { + num_output_pins 2 Object.Control { bytes."1" { IncludeByKey.EFX_MIC_DRC_PARAMS { diff --git a/tools/topology/topology2/include/pipelines/cavs/src-kpb-be.conf b/tools/topology/topology2/include/pipelines/cavs/src-kpb-be.conf new file mode 100644 index 000000000000..8bbe78bb9b0c --- /dev/null +++ b/tools/topology/topology2/include/pipelines/cavs/src-kpb-be.conf @@ -0,0 +1,115 @@ +# +# SRC-KPB backend pipeline +# +# This class provides a pipeline that converts a DAI-side capture stream +# down to 16 kHz stereo via SRC and feeds it into a KPB widget for +# key-phrase buffering with dual sinks (WoV drain and detection paths). +# +# Usage: +# +# Object.Pipeline.src-kpb-be."N" { +# period 1000 +# time_domain "timer" +# } +# +# Where N is the unique pipeline ID within the same alsaconf node. +# + + + + + + + +Class.Pipeline."src-kpb-be" { + + + + attributes { + !constructor [ + "index" + ] + + # + # src-kpb-be objects instantiated within the same alsaconf node + # must have unique pipeline_id attribute. + # + unique "instance" + } + + Object.Widget { + src."1" { + num_input_pins 1 + num_output_pins 1 + num_input_audio_formats 3 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 48000 + } + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 96000 + } + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 192000 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + } + ] + } + + kpb."1" { + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + } + ] + } + + pipeline."1" { + priority 0 + lp_mode 0 + } + } + + Object.Base { + !route [ + { + source src.$index.1 + sink kpb.$index.1 + } + ] + } + + direction "capture" + dynamic_pipeline 1 + time_domain "timer" +} diff --git a/tools/topology/topology2/platform/intel/dmic1-mfcc.conf b/tools/topology/topology2/platform/intel/dmic1-mfcc.conf index 3aad756a85f5..d7ea66199e10 100644 --- a/tools/topology/topology2/platform/intel/dmic1-mfcc.conf +++ b/tools/topology/topology2/platform/intel/dmic1-mfcc.conf @@ -1,4 +1,6 @@ - +# mfcc widget class is already included at the top of the parent +# sof-hda-generic.conf, so no need to pull include/components/mfcc.conf +# here again. Define { DMIC1_PCM_NAME "DMIC MFCC" diff --git a/tools/topology/topology2/platform/intel/hda-mic-tflm-kpb.conf b/tools/topology/topology2/platform/intel/hda-mic-tflm-kpb.conf new file mode 100644 index 000000000000..506fb2e6a604 --- /dev/null +++ b/tools/topology/topology2/platform/intel/hda-mic-tflm-kpb.conf @@ -0,0 +1,159 @@ +# SPDX-License-Identifier: BSD-3-Clause +# +# HDA analog capture TFLM/KPB Wake-on-Voice branch. +# +# Layered on top of sof-hda-generic.conf via +# IncludeByKey.HDA_MIC_TFLM_KPB_CAPTURE. Taps the Analog Capture DAI +# endpoint (module-copier.4.2) into: +# +# SRC (48 -> 16 kHz stereo) -> KPB (16 kHz stereo, dual sinks) +# pin 0 -> micsel -> MFCC (40 mel compress) -> TFLM classifier +# -> host-copier: "HDA Mic TFLM Detect" PCM +# pin 1 -> host-copier: "HDA Mic WoV Capture" PCM +# +# KPB is used in a Linux-compatible configuration (ibs == obs, no +# micselector mode); the topology-side micsel widget performs channel +# reduction on the detection path. The TFLM Detect PCM is exposed as +# stereo double-mono to work around HDA capture's mono restriction. +# +# KPB output_pin_binding names must match kernel widget names (see +# sof_ipc4_get_queue_id): host-copier.. and +# ... + +Define { + HDA_TFLM_KPB_PIPELINE_ID 40 + HDA_TFLM_WOV_PIPELINE_ID 41 + HDA_TFLM_WOV_PCM_ID 41 + HDA_TFLM_DETECT_PIPELINE_ID 42 + HDA_TFLM_DETECT_PCM_ID 42 +} + +Object.Pipeline.src-kpb-be [ + { + index $HDA_TFLM_KPB_PIPELINE_ID + + # KPB requires pin 0 (binding.1) to feed the detect/selector sink + # and pin 1+ (binding.2) to feed the host drain; see kpb_bind(). + Object.Widget.kpb.1 { + Object.Base.output_pin_binding.1 { + output_pin_binding_name "micsel.$HDA_TFLM_DETECT_PIPELINE_ID.1" + } + Object.Base.output_pin_binding.2 { + output_pin_binding_name "host-copier.$HDA_TFLM_WOV_PCM_ID.capture" + } + } + } +] + +Object.Pipeline.host-gateway-capture [ + { + index $HDA_TFLM_WOV_PIPELINE_ID + + Object.Widget.host-copier.1 { + stream_name "HDA Mic WoV Capture" + pcm_id $HDA_TFLM_WOV_PCM_ID + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_rate 16000 + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_rate 16000 + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + } +] + +Object.Pipeline.host-gateway-micsel-mfcc-tflm-capture [ + { + index $HDA_TFLM_DETECT_PIPELINE_ID + + Object.Widget.host-copier.1 { + stream_name "HDA Mic TFLM Detect" + pcm_id $HDA_TFLM_DETECT_PCM_ID + } + + Object.Widget.micsel.1 { + Object.Control { + bytes."1" { + name "HDA Mic TFLM Micsel bytes" + + } + } + } + + Object.Widget.mfcc.1 { + Object.Control { + bytes."1" { + name "HDA Mic TFLM MFCC bytes" + + } + mixer."1" { + name "HDA Mic TFLM MFCC VAD" + } + } + } + } +] + +Object.Base.route [ + { + source "module-copier.4.2" + sink "src.$HDA_TFLM_KPB_PIPELINE_ID.1" + } + { + source "kpb.$HDA_TFLM_KPB_PIPELINE_ID.1" + sink "host-copier.$HDA_TFLM_WOV_PCM_ID.capture" + } + { + source "kpb.$HDA_TFLM_KPB_PIPELINE_ID.1" + sink "micsel.$HDA_TFLM_DETECT_PIPELINE_ID.1" + } +] + +Object.PCM.pcm [ + { + name "HDA Mic WoV Capture" + id $HDA_TFLM_WOV_PCM_ID + direction "capture" + + Object.Base.fe_dai.1 { + name "HDA Mic WoV Capture" + } + + Object.PCM.pcm_caps.1 { + name "HDA Mic WoV Capture" + formats 'S32_LE' + rates '16000' + channels_min 2 + channels_max 2 + } + } + { + name "HDA Mic TFLM Detect" + id $HDA_TFLM_DETECT_PCM_ID + direction "capture" + + Object.Base.fe_dai.1 { + name "HDA Mic TFLM Detect" + } + + Object.PCM.pcm_caps.1 { + name "HDA Mic TFLM Detect" + formats 'S32_LE' + rates '16000' + channels_min 2 + channels_max 2 + } + } +] diff --git a/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf b/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf index fdb4acbf9a6d..8103290be7ab 100644 --- a/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf +++ b/tools/topology/topology2/platform/intel/sdw-dmic-audio-feature.conf @@ -1,3 +1,6 @@ +# Class.Widget.tflmcly is pulled in at cavs-sdw.conf top level via +# host-gateway-micsel-mfcc-tflm-capture.conf. + Define { SDW_DMIC_MODULE_COPIER_ID 41 SDW_DMIC_AUDIO_FEATURE_CAPTURE_PCM_NAME "Microphone Audio Features" @@ -38,6 +41,27 @@ Object.Pipeline.host-gateway-src-micsel-mfcc-capture [ } } } + + Object.Widget.tflmcly.1 { + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_bit_depth 32 + in_valid_bit_depth 32 + in_rate 16000 + ibs $MFCC_FRAME_BYTES + } + ] + Object.Base.output_audio_format [ + { + out_bit_depth 32 + out_valid_bit_depth 32 + out_rate 16000 + obs $MFCC_FRAME_BYTES + } + ] + } } ] Object.Base.route [ @@ -47,6 +71,10 @@ Object.Base.route [ } { source "mfcc.$SDW_DMIC_AUDIO_FEATURE_CAPTURE_PIPELINE_ID.1" + sink "tflmcly.$SDW_DMIC_AUDIO_FEATURE_CAPTURE_PIPELINE_ID.1" + } + { + source "tflmcly.$SDW_DMIC_AUDIO_FEATURE_CAPTURE_PIPELINE_ID.1" sink "host-copier.$SDW_DMIC_AUDIO_FEATURE_CAPTURE_PCM_ID.capture" } ] diff --git a/tools/topology/topology2/platform/intel/sdw-dmic-tflm-kpb.conf b/tools/topology/topology2/platform/intel/sdw-dmic-tflm-kpb.conf new file mode 100644 index 000000000000..14d56974a89f --- /dev/null +++ b/tools/topology/topology2/platform/intel/sdw-dmic-tflm-kpb.conf @@ -0,0 +1,162 @@ +# SPDX-License-Identifier: BSD-3-Clause +# +# SoundWire DMIC TFLM/KPB Wake-on-Voice capture branch. +# +# Layered on top of cavs-sdw.conf (SDW jack + amps + HDMI + SDW DMIC) +# via IncludeByKey.SDW_DMIC_TFLM_KPB_CAPTURE. Structural twin of the +# jack-side sdw-jack-tflm-kpb.conf, but taps the DMIC DAI-side +# module-copier (module-copier.41.0) into: +# +# SRC (48 -> 16 kHz stereo) -> KPB (16 kHz stereo, dual sinks) +# pin 0 -> micsel -> MFCC (40 mel compress) -> TFLM classifier +# -> host-copier: "Mic In TFLM Detect" PCM +# pin 1 -> host-copier: "Mic In WoV Capture" PCM +# +# KPB output_pin_binding names must match kernel widget names (see +# sof_ipc4_get_queue_id): host-copier.. and +# ... Detect PCM is stereo double-mono via +# micsel to remain compatible with HDA-style capture pipelines. + +Define { + SDW_DMIC_MODULE_COPIER_ID 41 + SDW_DMIC_TFLM_KPB_PIPELINE_ID 135 + # host-copier internal routes in host-gateway* pipeline classes + # reference host-copier.$index., so keep + # pcm_id == pipeline_id for the two host-side PCMs. + SDW_DMIC_TFLM_WOV_PIPELINE_ID 57 + SDW_DMIC_TFLM_WOV_PCM_ID 57 + SDW_DMIC_TFLM_WOV_PCM_NAME "Mic In WoV Capture" + SDW_DMIC_TFLM_WOV_STREAM_NAME "Mic In WoV Capture Stream" + SDW_DMIC_TFLM_DETECT_PIPELINE_ID 58 + SDW_DMIC_TFLM_DETECT_PCM_ID 58 + SDW_DMIC_TFLM_DETECT_PCM_NAME "Mic In TFLM Detect" + SDW_DMIC_TFLM_DETECT_STREAM_NAME "Mic In TFLM Detect Stream" +} + +Object.Pipeline.src-kpb-be [ + { + index $SDW_DMIC_TFLM_KPB_PIPELINE_ID + + Object.Widget.kpb.1 { + Object.Base.output_pin_binding.1 { + output_pin_binding_name "micsel.$SDW_DMIC_TFLM_DETECT_PIPELINE_ID.1" + } + Object.Base.output_pin_binding.2 { + output_pin_binding_name "host-copier.$SDW_DMIC_TFLM_WOV_PCM_ID.capture" + } + } + } +] + +Object.Pipeline.host-gateway-capture [ + { + index $SDW_DMIC_TFLM_WOV_PIPELINE_ID + + Object.Widget.host-copier.1 { + stream_name "$SDW_DMIC_TFLM_WOV_STREAM_NAME" + pcm_id $SDW_DMIC_TFLM_WOV_PCM_ID + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_rate 16000 + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_rate 16000 + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + } +] + +Object.Pipeline.host-gateway-micsel-mfcc-tflm-capture [ + { + index $SDW_DMIC_TFLM_DETECT_PIPELINE_ID + + Object.Widget.host-copier.1 { + stream_name "$SDW_DMIC_TFLM_DETECT_STREAM_NAME" + pcm_id $SDW_DMIC_TFLM_DETECT_PCM_ID + } + + Object.Widget.micsel.1 { + Object.Control { + bytes."1" { + name "$SDW_DMIC_TFLM_DETECT_PCM_NAME Micsel bytes" + + } + } + } + + Object.Widget.mfcc.1 { + Object.Control { + bytes."1" { + name "$SDW_DMIC_TFLM_DETECT_PCM_NAME MFCC bytes" + + } + mixer."1" { + name "$SDW_DMIC_TFLM_DETECT_PCM_NAME MFCC VAD" + } + } + } + } +] + +Object.Base.route [ + { + source "module-copier.$SDW_DMIC_MODULE_COPIER_ID.0" + sink "src.$SDW_DMIC_TFLM_KPB_PIPELINE_ID.1" + } + { + source "kpb.$SDW_DMIC_TFLM_KPB_PIPELINE_ID.1" + sink "host-copier.$SDW_DMIC_TFLM_WOV_PCM_ID.capture" + } + { + source "kpb.$SDW_DMIC_TFLM_KPB_PIPELINE_ID.1" + sink "micsel.$SDW_DMIC_TFLM_DETECT_PIPELINE_ID.1" + } +] + +Object.PCM.pcm [ + { + name "$SDW_DMIC_TFLM_WOV_PCM_NAME" + id $SDW_DMIC_TFLM_WOV_PCM_ID + direction "capture" + + Object.Base.fe_dai.1 { + name "$SDW_DMIC_TFLM_WOV_PCM_NAME" + } + + Object.PCM.pcm_caps.1 { + name "$SDW_DMIC_TFLM_WOV_STREAM_NAME" + formats 'S32_LE' + rates '16000' + channels_min 2 + channels_max 2 + } + } + { + name "$SDW_DMIC_TFLM_DETECT_PCM_NAME" + id $SDW_DMIC_TFLM_DETECT_PCM_ID + direction "capture" + + Object.Base.fe_dai.1 { + name "$SDW_DMIC_TFLM_DETECT_PCM_NAME" + } + + Object.PCM.pcm_caps.1 { + name "$SDW_DMIC_TFLM_DETECT_STREAM_NAME" + formats 'S32_LE' + rates '16000' + channels_min 2 + channels_max 2 + } + } +] diff --git a/tools/topology/topology2/platform/intel/sdw-jack-tflm-kpb.conf b/tools/topology/topology2/platform/intel/sdw-jack-tflm-kpb.conf new file mode 100644 index 000000000000..0dc571f442c2 --- /dev/null +++ b/tools/topology/topology2/platform/intel/sdw-jack-tflm-kpb.conf @@ -0,0 +1,161 @@ +# SPDX-License-Identifier: BSD-3-Clause +# +# SoundWire jack TFLM/KPB Wake-on-Voice capture branch. +# +# Layered on top of cavs-sdw.conf (SDW jack + amps + HDMI) via +# IncludeByKey.SDW_JACK_TFLM_KPB_CAPTURE. Taps the jack DAI-side +# module-copier (module-copier.11.0) into: +# +# SRC (48 -> 16 kHz stereo) -> KPB (16 kHz stereo, dual sinks) +# pin 0 -> micsel -> MFCC (40 mel compress) -> TFLM classifier +# -> host-copier: "Jack In TFLM Detect" PCM +# pin 1 -> host-copier: "Jack In WoV Capture" PCM +# +# KPB output_pin_binding names must match kernel widget names (see +# sof_ipc4_get_queue_id): host-copier.. and +# ... Detect PCM is stereo double-mono via +# micsel to remain compatible with HDA-style capture pipelines. + +Define { + SDW_JACK_MODULE_COPIER_ID 11 + SDW_JACK_TFLM_KPB_PIPELINE_ID 134 + # host-copier internal routes in host-gateway* pipeline classes + # reference host-copier.$index., so keep + # pcm_id == pipeline_id for the two host-side PCMs. + SDW_JACK_TFLM_WOV_PIPELINE_ID 55 + SDW_JACK_TFLM_WOV_PCM_ID 55 + SDW_JACK_TFLM_WOV_PCM_NAME "Jack In WoV Capture" + SDW_JACK_TFLM_WOV_STREAM_NAME "Jack In WoV Capture Stream" + SDW_JACK_TFLM_DETECT_PIPELINE_ID 56 + SDW_JACK_TFLM_DETECT_PCM_ID 56 + SDW_JACK_TFLM_DETECT_PCM_NAME "Jack In TFLM Detect" + SDW_JACK_TFLM_DETECT_STREAM_NAME "Jack In TFLM Detect Stream" +} + +Object.Pipeline.src-kpb-be [ + { + index $SDW_JACK_TFLM_KPB_PIPELINE_ID + + Object.Widget.kpb.1 { + Object.Base.output_pin_binding.1 { + output_pin_binding_name "micsel.$SDW_JACK_TFLM_DETECT_PIPELINE_ID.1" + } + Object.Base.output_pin_binding.2 { + output_pin_binding_name "host-copier.$SDW_JACK_TFLM_WOV_PCM_ID.capture" + } + } + } +] + +Object.Pipeline.host-gateway-capture [ + { + index $SDW_JACK_TFLM_WOV_PIPELINE_ID + + Object.Widget.host-copier.1 { + stream_name "$SDW_JACK_TFLM_WOV_STREAM_NAME" + pcm_id $SDW_JACK_TFLM_WOV_PCM_ID + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_channels 2 + in_rate 16000 + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_channels 2 + out_rate 16000 + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + } +] + +Object.Pipeline.host-gateway-micsel-mfcc-tflm-capture [ + { + index $SDW_JACK_TFLM_DETECT_PIPELINE_ID + + Object.Widget.host-copier.1 { + stream_name "$SDW_JACK_TFLM_DETECT_STREAM_NAME" + pcm_id $SDW_JACK_TFLM_DETECT_PCM_ID + } + + Object.Widget.micsel.1 { + Object.Control { + bytes."1" { + name "$SDW_JACK_TFLM_DETECT_PCM_NAME Micsel bytes" + + } + } + } + + Object.Widget.mfcc.1 { + Object.Control { + bytes."1" { + name "$SDW_JACK_TFLM_DETECT_PCM_NAME MFCC bytes" + + } + mixer."1" { + name "$SDW_JACK_TFLM_DETECT_PCM_NAME MFCC VAD" + } + } + } + } +] + +Object.Base.route [ + { + source "module-copier.$SDW_JACK_MODULE_COPIER_ID.0" + sink "src.$SDW_JACK_TFLM_KPB_PIPELINE_ID.1" + } + { + source "kpb.$SDW_JACK_TFLM_KPB_PIPELINE_ID.1" + sink "host-copier.$SDW_JACK_TFLM_WOV_PCM_ID.capture" + } + { + source "kpb.$SDW_JACK_TFLM_KPB_PIPELINE_ID.1" + sink "micsel.$SDW_JACK_TFLM_DETECT_PIPELINE_ID.1" + } +] + +Object.PCM.pcm [ + { + name "$SDW_JACK_TFLM_WOV_PCM_NAME" + id $SDW_JACK_TFLM_WOV_PCM_ID + direction "capture" + + Object.Base.fe_dai.1 { + name "$SDW_JACK_TFLM_WOV_PCM_NAME" + } + + Object.PCM.pcm_caps.1 { + name "$SDW_JACK_TFLM_WOV_STREAM_NAME" + formats 'S32_LE' + rates '16000' + channels_min 2 + channels_max 2 + } + } + { + name "$SDW_JACK_TFLM_DETECT_PCM_NAME" + id $SDW_JACK_TFLM_DETECT_PCM_ID + direction "capture" + + Object.Base.fe_dai.1 { + name "$SDW_JACK_TFLM_DETECT_PCM_NAME" + } + + Object.PCM.pcm_caps.1 { + name "$SDW_JACK_TFLM_DETECT_STREAM_NAME" + formats 'S32_LE' + rates '16000' + channels_min 2 + channels_max 2 + } + } +] diff --git a/tools/topology/topology2/sof-hda-generic.conf b/tools/topology/topology2/sof-hda-generic.conf index 01a020bad17f..2b105573c734 100644 --- a/tools/topology/topology2/sof-hda-generic.conf +++ b/tools/topology/topology2/sof-hda-generic.conf @@ -10,8 +10,11 @@ + + + @@ -187,3 +190,10 @@ Object.Widget.virtual [ index 8 } ] + +# Optional TFLM/KPB Wake-on-Voice branch tapping the HDA Analog capture +# module-copier. Adds two capture PCMs (Detect + WoV drain) without +# touching the base HDA graph. +IncludeByKey.HDA_MIC_TFLM_KPB_CAPTURE { + "true" "platform/intel/hda-mic-tflm-kpb.conf" +} From c7dec9a406439ce3d28573626c5927e3ca99858e Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Thu, 23 Jul 2026 15:03:10 +0100 Subject: [PATCH 09/12] platform: cavs25: enable TFLM Wake-on-Voice on cAVS 2.5 Enable KPB, TFLM, MFCC, Gain and Volume on the cAVS 2.5 (TGL/ADL/RPL) board defconfig and size its DP scheduler heap for the TFLM working set. Register the DP scheduler in the cAVS platform init so the DP domain pipelines that host MFCC and TFLM come up cleanly, and add tflmcly.toml to the TGL rimage manifest so the signed image lists the new modules. Also make the tensorflow static CMake wiring portable across xtensa targets: hardcoded /home/lrg zephyr-sdk paths, mcpu names and include directories are replaced with SOC_TOOLCHAIN_NAME and ZEPHYR_SDK_INSTALL_DIR expansions, the -mllvm text-section-literals flag is feature-detected, and HiFi4-only kernels are gated on TENSORFLOW_HAVE_NNLIB_HIFI4. Signed-off-by: Seppo Ingalsuo --- app/boards/intel_adsp_cavs25.conf | 10 ++- src/audio/tensorflow/CMakeLists.txt | 121 +++++++++++++++++++++------- src/platform/intel/cavs/platform.c | 7 ++ tools/rimage/config/tgl.toml.h | 4 + 4 files changed, 114 insertions(+), 28 deletions(-) diff --git a/app/boards/intel_adsp_cavs25.conf b/app/boards/intel_adsp_cavs25.conf index 7cd938ec7ff8..e1c6df6e44f6 100644 --- a/app/boards/intel_adsp_cavs25.conf +++ b/app/boards/intel_adsp_cavs25.conf @@ -12,6 +12,13 @@ CONFIG_COMP_MFCC=y CONFIG_COMP_MULTIBAND_DRC=y CONFIG_COMP_VOLUME_WINDOWS_FADE=y CONFIG_FORMAT_CONVERT_HIFI3=n +CONFIG_SOF_STAGING=y +CONFIG_CPP=y +CONFIG_STD_CPP17=y +# cavs2.5 has no LLEXT/module-manager support (see CONFIG_LIBRARY_MANAGER=n +# below), so build tensorflow in statically rather than as an LLEXT module. +CONFIG_COMP_TENSORFLOW=y +CONFIG_STACK_SIZE_EDF=32768 CONFIG_PCM_CONVERTER_FORMAT_S16LE=y CONFIG_PCM_CONVERTER_FORMAT_S24LE=y CONFIG_PCM_CONVERTER_FORMAT_S32LE=y @@ -33,7 +40,8 @@ CONFIG_SOF_LOG_LEVEL_INF=y CONFIG_DEBUG_COREDUMP=y CONFIG_DEBUG_COREDUMP_BACKEND_INTEL_ADSP_MEM_WINDOW=y CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y -CONFIG_HEAP_MEM_POOL_SIZE=8192 +CONFIG_HEAP_MEM_POOL_SIZE=32768 +CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=32768 # Zephyr / device drivers CONFIG_DAI_INIT_PRIORITY=70 diff --git a/src/audio/tensorflow/CMakeLists.txt b/src/audio/tensorflow/CMakeLists.txt index 05706827ce10..c76af666c0b9 100644 --- a/src/audio/tensorflow/CMakeLists.txt +++ b/src/audio/tensorflow/CMakeLists.txt @@ -1,9 +1,17 @@ # Copyright (c) 2025 Intel Corporation. # SPDX-License-Identifier: Apache-2.0 -# -mllvm --text-section-literals=false is a Clang-only flag; guard it +# Newer xt-clang LLVMs accept this to keep literals in .rodata; older +# xt-clang (e.g. RI-2022.10, LLVM 10) rejects the sub-option. Detect it. +set(TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG "") if(CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - add_compile_options(-mllvm --text-section-literals=false) + include(CheckCXXCompilerFlag) + check_cxx_compiler_flag("-mllvm --text-section-literals=false" + TFLM_HAS_MLLVM_TEXT_SECTION_LITERALS_FALSE) + if(TFLM_HAS_MLLVM_TEXT_SECTION_LITERALS_FALSE) + set(TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG -mllvm --text-section-literals=false) + add_compile_options(${TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG}) + endif() endif() # are we building the llext module ? @@ -48,10 +56,6 @@ set(TFLM_HAL_SOC_PATH ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/${SOC_TOOL if(TENSORFLOW_HAVE_NNLIB_HIFI4) -# nnlib-hifi4 requires Cadence XCC/Clang-specific TIE headers (xtensa/tie/xt_hifi2.h) -# and therefore can ONLY be built with Clang. Skip entirely when using gcc. -if(CMAKE_C_COMPILER_ID STREQUAL "Clang") - add_library(nn_hifi_lib STATIC ${NN_HIFI_PATH}/algo/common/src/xa_nnlib_common_api.c ${NN_HIFI_PATH}/algo/kernels/activations/hifi4/xa_nn_activations_32_32.c @@ -98,18 +102,18 @@ target_include_directories(nn_hifi_lib PRIVATE ${NN_HIFI_PATH}/algo/common/include/ ${NN_HIFI_PATH}/include/nnlib/ ${NN_HIFI_PATH}/algo/ndsp/hifi4/include - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include - ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/intel_ace15_mtpm + ${TFLM_TOOLCHAIN_INCLUDE_ROOT} + ${TFLM_HAL_SOC_PATH} ) target_compile_options(nn_hifi_lib PRIVATE - -mllvm --text-section-literals=false + ${TFLM_TEXT_SECTION_LITERALS_FALSE_FLAG} ) -endif() # CMAKE_C_COMPILER_ID STREQUAL "Clang" +endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 -if(CMAKE_C_COMPILER_ID STREQUAL "Clang") +if(TENSORFLOW_HAVE_NNLIB_HIFI4) # TODO: Need to detect and add mul16/32 options. target_compile_definitions(nn_hifi_lib PRIVATE @@ -147,12 +151,12 @@ target_compile_definitions(nn_hifi_lib PRIVATE __XCC_CLANG__ ) target_compile_options(nn_hifi_lib PRIVATE - -mcpu=intel_ace15_mtpm + -mcpu=${SOC_TOOLCHAIN_NAME} "SHELL:-include xtensahifiintrin.h" "SHELL:-include ${NN_HIFI_PATH}/algo/common/include/xa_nnlib_hifi_isa_compat.h" ) -endif() # CMAKE_C_COMPILER_ID STREQUAL "Clang" (nn_hifi_lib defs/opts) +endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 (nn_hifi_lib defs/opts) # TODO: complete sources have been added here from userspace build but @@ -319,9 +323,6 @@ if(TENSORFLOW_HAVE_NNLIB_HIFI4) target_include_directories(tflm_lib PRIVATE ${NN_HIFI_PATH} ${NN_HIFI_PATH}/include - ${sof_top_dir}/posix/include - ${sof_top_dir}/../modules/hal/xtensa/include - ${sof_top_dir}/../modules/hal/xtensa/zephyr/soc/intel_ace15_mtpm ) endif() @@ -332,6 +333,12 @@ endif() #ifeq "$(has_mul32)" "0" #CFLAGS += -mno-mul32 -mno-div32 #endif + +# These select/enable the HiFi4 nnlib-optimized code paths in some TFLM +# kernels. Only valid when nn_hifi_lib is actually built and linked -- +# forcing XCHAL_HAVE_HIFI4 on a non-HiFi4 target risks enabling HiFi4-only +# branches in system/toolchain headers that don't apply to this core. +if(TENSORFLOW_HAVE_NNLIB_HIFI4) target_compile_definitions(tflm_lib PRIVATE -DHIFI4=1 -DHAVE_VFPU=1 @@ -349,6 +356,12 @@ target_compile_definitions(tflm_lib PRIVATE "AE_CVT64F32_H(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_H(v))" "AE_CVT64F32_L(v)=((ae_int64)(int64_t)(int32_t)AE_MOVAD32_L(v))" ) +target_compile_options(tflm_lib PRIVATE + -DHIFI4 + -DKERNELS_OPTIMIZED_FOR_SPEED + -DNNLIB_V2 +) +endif() # TENSORFLOW_HAVE_NNLIB_HIFI4 target_compile_options(tflm_lib PRIVATE -std=c++17 @@ -373,7 +386,6 @@ target_compile_options(tflm_lib PRIVATE -DXTENSA -DTF_LITE_MCU_DEBUG_LOG -DTF_LITE_USE_CTIME - -DHIFI4 -mlongcalls -Wno-shadow ) @@ -400,35 +412,90 @@ if(CMAKE_C_COMPILER_ID STREQUAL "Xtensa") ) elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang") target_compile_options(tflm_lib PRIVATE - -mcpu=intel_ace15_mtpm + -mcpu=${SOC_TOOLCHAIN_NAME} ) endif() if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") target_include_directories(tflm_lib SYSTEM PRIVATE - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0 - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0/xtensa-intel_ace15_mtpm_zephyr-elf - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0 + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf + ${TFLM_TOOLCHAIN_INCLUDE_ROOT} ) endif() -add_local_sources(sof tflm-classify.c speech.cc micro_speech_quantized_model_data.cc llext-wrap.c math_stubs.c) +add_local_sources(sof tflm-classify.c llext-wrap.c) -# Link nnlib only when Clang is available (nnlib requires XCC/Clang TIE headers) -if(CMAKE_C_COMPILER_ID STREQUAL "Clang") +# Link nnlib only when it was actually built (HiFi4 target + Clang) +if(TENSORFLOW_HAVE_NNLIB_HIFI4) zephyr_link_libraries(tflm_lib nn_hifi_lib) else() zephyr_link_libraries(tflm_lib) endif() + +# CONFIG_MINIMAL_LIBC (SOF's global default) has no libm and is missing a +# few libc functions (e.g. abs()) that TFLM needs in a statically-linked +# (non-LLEXT) image. Linking the toolchain's whole libc.a is too broad: it +# conflicts with Zephyr's own malloc/free (multiple definition) and pulls in +# an __assert_no_args that needs an unavailable stderr. Instead, extract just +# the specific archive members TFLM actually needs into a small private +# archive and link only that. +if(NOT CONFIG_COMP_TENSORFLOW STREQUAL "m") + set(TFLM_TOOLCHAIN_LIBC_ARCHIVE + ${ZEPHYR_SDK_INSTALL_DIR}/gnu/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf/lib/libc.a) + set(TFLM_LIBC_SHIM_MEMBERS + libc_stdlib_abs.c.o + libm_math_s_floor.c.o + # TFLM QuantizeMultiplier() uses double frexp() + round() at Prepare time. + libm_math_s_frexp.c.o + libm_common_s_round.c.o + libm_math_sf_exp.c.o + libm_math_sf_log.c.o + libm_math_sf_ceil.c.o + libm_common_sf_fmax.c.o + libm_common_sf_fmin.c.o + libm_common_sf_round.c.o + # error-handling/predicate helpers the above call internally + libm_common_sf_isnan.c.o + libm_common_sf_issignaling.c.o + libm_common_math_errf_uflowf.c.o + libm_common_math_errf_oflowf.c.o + libm_common_math_errf_divzerof.c.o + libm_common_math_errf_invalidf.c.o + ) + set(TFLM_LIBC_SHIM_DIR ${CMAKE_CURRENT_BINARY_DIR}/tflm_libc_shim) + set(TFLM_LIBC_SHIM_ARCHIVE ${CMAKE_CURRENT_BINARY_DIR}/libtflm_libc_shim.a) + file(MAKE_DIRECTORY ${TFLM_LIBC_SHIM_DIR}) + add_custom_command( + OUTPUT ${TFLM_LIBC_SHIM_ARCHIVE} + COMMAND ${CMAKE_AR} x ${TFLM_TOOLCHAIN_LIBC_ARCHIVE} ${TFLM_LIBC_SHIM_MEMBERS} + COMMAND ${CMAKE_AR} rcs ${TFLM_LIBC_SHIM_ARCHIVE} ${TFLM_LIBC_SHIM_MEMBERS} + WORKING_DIRECTORY ${TFLM_LIBC_SHIM_DIR} + DEPENDS ${TFLM_TOOLCHAIN_LIBC_ARCHIVE} ${CMAKE_CURRENT_LIST_FILE} + COMMENT "Extracting abs()/libm members TFLM needs from the toolchain libc.a" + ) + add_custom_target(tflm_libc_shim_gen DEPENDS ${TFLM_LIBC_SHIM_ARCHIVE}) + add_library(tflm_libc_shim STATIC IMPORTED GLOBAL) + set_target_properties(tflm_libc_shim PROPERTIES IMPORTED_LOCATION ${TFLM_LIBC_SHIM_ARCHIVE}) + add_dependencies(tflm_libc_shim tflm_libc_shim_gen) + zephyr_link_libraries(tflm_libc_shim) + + # TFLM/flatbuffers use assert() internally; the toolchain's own + # __assert_no_args implementation needs an unavailable stderr, so disable + # assert() outright instead (standard practice for release TFLM builds). + target_compile_definitions(tflm_lib PRIVATE NDEBUG) +endif() zephyr_include_directories(${TFLM_PATH}) zephyr_include_directories(${FLATBUFFERS_PATH}/include) zephyr_include_directories(${GEMMLOWP_PATH}) zephyr_include_directories(${RUY_PATH}) +if(TENSORFLOW_HAVE_NNLIB_HIFI4) zephyr_include_directories(${NN_HIFI_PATH}/algo/kernels/include) zephyr_include_directories(${NN_HIFI_PATH}/include) +endif() target_include_directories(modules_sof SYSTEM PRIVATE - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0 - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include/c++/14.3.0/xtensa-intel_ace15_mtpm_zephyr-elf - /home/lrg/zephyr-sdk-1.0.1/gnu/xtensa-intel_ace15_mtpm_zephyr-elf/xtensa-intel_ace15_mtpm_zephyr-elf/include + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0 + ${TFLM_TOOLCHAIN_INCLUDE_ROOT}/c++/14.3.0/xtensa-${SOC_TOOLCHAIN_NAME}_zephyr-elf + ${TFLM_TOOLCHAIN_INCLUDE_ROOT} ) diff --git a/src/platform/intel/cavs/platform.c b/src/platform/intel/cavs/platform.c index 8a1a7c59c3b5..4752916a85b5 100644 --- a/src/platform/intel/cavs/platform.c +++ b/src/platform/intel/cavs/platform.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -122,6 +123,12 @@ int platform_init(struct sof *sof) sof->platform_timer_domain = timer_domain_init(sof->platform_timer, 0); scheduler_init_ll(sof->platform_timer_domain); +#if CONFIG_ZEPHYR_DP_SCHEDULER + ret = scheduler_dp_init(); + if (ret < 0) + return ret; +#endif /* CONFIG_ZEPHYR_DP_SCHEDULER */ + /* init the system agent */ trace_point(TRACE_BOOT_PLATFORM_AGENT); sa_init(sof, CONFIG_SYSTICK_PERIOD); diff --git a/tools/rimage/config/tgl.toml.h b/tools/rimage/config/tgl.toml.h index 2ca246880727..d5f7d29fe24b 100644 --- a/tools/rimage/config/tgl.toml.h +++ b/tools/rimage/config/tgl.toml.h @@ -120,6 +120,10 @@ #include