diff options
| author | Marin Ivanov <[email protected]> | 2025-07-25 10:17:14 +0300 |
|---|---|---|
| committer | Marin Ivanov <[email protected]> | 2026-01-18 20:09:26 +0200 |
| commit | 0168586485e6310c598713c911b1dec5618d61a1 (patch) | |
| tree | 6aabc2a12ef8fef70683f5389bea00f948015f77 /src | |
* codec2 cut-down version 1.2.0
* Remove codebook and generation of sources
* remove c2dec c2enc binaries
* prepare for emscripten
Diffstat (limited to 'src')
59 files changed, 14428 insertions, 0 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..16a7a25 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,89 @@ +# +# codec2 library sources +# + +set(CODEC2_SRCS + lpc.c + nlp.c + postfilter.c + sine.c + codec2.c + codec2_fft.c + codec2_fifo.c + kiss_fft.c + kiss_fftr.c + interp.c + lsp.c + mbest.c + newamp1.c + phase.c + quantise.c + pack.c + codebook.c + codebookd.c + codebookjmv.c + codebookge.c + codebooknewamp1.c + codebooknewamp1_energy.c + codebooknewamp2.c + codebooknewamp2_energy.c + phi0.c + lpcnet_freq.c +) + +set(CODEC2_PUBLIC_HEADERS + codec2.h + codec2_fifo.h + comp.h + codec2_math.h + ${CODEC2_VERSION_PATH}/version.h +) + +# +# Debug options +# +#add_definitions(-DDEBUG_ALLOC) + +# +# Setup the codec2 library +# +# Patch level version bumps should not change API/ABI. +set(SOVERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") +message(STATUS "codec2 version: ${CODEC2_VERSION}") +add_library(codec2 ${CODEC2_SRCS}) +add_executable(codec2lib ${CODEC2_SRCS}) +if(UNIX) + target_link_libraries(codec2 PUBLIC m) +endif(UNIX) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +set_target_properties(codec2 PROPERTIES + SOVERSION ${SOVERSION} + PUBLIC_HEADER "${CODEC2_PUBLIC_HEADERS}" +) + +# Required include directories for export +target_include_directories(codec2 INTERFACE + $<INSTALL_INTERFACE:include/codec2> + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> + $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}> +) + +# Export config for import from full install +install(EXPORT codec2-config + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 +) + +# Export config for import from build tree. +export(TARGETS codec2 + FILE ${CMAKE_BINARY_DIR}/codec2.cmake +) + +install(TARGETS codec2 EXPORT codec2-config + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 COMPONENT dev +) + +set(EMSCRIPTEN_OPTS "-s 'STRICT=1' -s 'ALLOW_MEMORY_GROWTH=1' -s 'WASM=1' -s 'MODULARIZE=1' -s 'EXTRA_EXPORTED_RUNTIME_METHODS=[FS]'") +#set_target_properties(codec2lib PROPERTIES LINK_FLAGS "${EMSCRIPTEN_OPTS} --no-entry -s 'EXPORT_NAME=createCodec2'")
\ No newline at end of file diff --git a/src/_kiss_fft_guts.h b/src/_kiss_fft_guts.h new file mode 100644 index 0000000..16305af --- /dev/null +++ b/src/_kiss_fft_guts.h @@ -0,0 +1,194 @@ +/* +Copyright (c) 2003-2010, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* kiss_fft.h + defines kiss_fft_scalar as either short or a float type + and defines + typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */ +#include <limits.h> + +#include "kiss_fft.h" + +#define MAXFACTORS 32 +/* e.g. an fft of length 128 has 4 factors + as far as kissfft is concerned + 4*4*4*2 + */ + +struct kiss_fft_state { + int nfft; + int inverse; + int factors[2 * MAXFACTORS]; + kiss_fft_cpx twiddles[1]; +}; + +/* + Explanation of macros dealing with complex math: + + C_MUL(m,a,b) : m = a*b + C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise + C_SUB( res, a,b) : res = a - b + C_SUBFROM( res , a) : res -= a + C_ADDTO( res , a) : res += a + * */ +#ifdef FIXED_POINT +#if (FIXED_POINT == 32) +#define FRACBITS 31 +#define SAMPPROD int64_t +#define SAMP_MAX 2147483647 +#else +#define FRACBITS 15 +#define SAMPPROD int32_t +#define SAMP_MAX 32767 +#endif + +#define SAMP_MIN -SAMP_MAX + +#if defined(CHECK_OVERFLOW) +#define CHECK_OVERFLOW_OP(a, op, b) \ + if ((SAMPPROD)(a)op(SAMPPROD)(b) > SAMP_MAX || \ + (SAMPPROD)(a)op(SAMPPROD)(b) < SAMP_MIN) { \ + fprintf(stderr, \ + "WARNING:overflow @ " __FILE__ "(%d): (%d " #op " %d) = %ld\n", \ + __LINE__, (a), (b), (SAMPPROD)(a)op(SAMPPROD)(b)); \ + } +#endif + +#define smul(a, b) ((SAMPPROD)(a) * (b)) +#define sround(x) (kiss_fft_scalar)(((x) + (1 << (FRACBITS - 1))) >> FRACBITS) + +#define S_MUL(a, b) sround(smul(a, b)) + +#define C_MUL(m, a, b) \ + do { \ + (m).r = sround(smul((a).r, (b).r) - smul((a).i, (b).i)); \ + (m).i = sround(smul((a).r, (b).i) + smul((a).i, (b).r)); \ + } while (0) + +#define DIVSCALAR(x, k) (x) = sround(smul(x, SAMP_MAX / k)) + +#define C_FIXDIV(c, div) \ + do { \ + DIVSCALAR((c).r, div); \ + DIVSCALAR((c).i, div); \ + } while (0) + +#define C_MULBYSCALAR(c, s) \ + do { \ + (c).r = sround(smul((c).r, s)); \ + (c).i = sround(smul((c).i, s)); \ + } while (0) + +#else /* not FIXED_POINT*/ + +#define S_MUL(a, b) ((a) * (b)) +#define C_MUL(m, a, b) \ + do { \ + (m).r = (a).r * (b).r - (a).i * (b).i; \ + (m).i = (a).r * (b).i + (a).i * (b).r; \ + } while (0) +#define C_FIXDIV(c, div) /* NOOP */ +#define C_MULBYSCALAR(c, s) \ + do { \ + (c).r *= (s); \ + (c).i *= (s); \ + } while (0) +#endif + +#ifndef CHECK_OVERFLOW_OP +#define CHECK_OVERFLOW_OP(a, op, b) /* noop */ +#endif + +#define C_ADD(res, a, b) \ + do { \ + CHECK_OVERFLOW_OP((a).r, +, (b).r) \ + CHECK_OVERFLOW_OP((a).i, +, (b).i) \ + (res).r = (a).r + (b).r; \ + (res).i = (a).i + (b).i; \ + } while (0) +#define C_SUB(res, a, b) \ + do { \ + CHECK_OVERFLOW_OP((a).r, -, (b).r) \ + CHECK_OVERFLOW_OP((a).i, -, (b).i) \ + (res).r = (a).r - (b).r; \ + (res).i = (a).i - (b).i; \ + } while (0) +#define C_ADDTO(res, a) \ + do { \ + CHECK_OVERFLOW_OP((res).r, +, (a).r) \ + CHECK_OVERFLOW_OP((res).i, +, (a).i) \ + (res).r += (a).r; \ + (res).i += (a).i; \ + } while (0) + +#define C_SUBFROM(res, a) \ + do { \ + CHECK_OVERFLOW_OP((res).r, -, (a).r) \ + CHECK_OVERFLOW_OP((res).i, -, (a).i) \ + (res).r -= (a).r; \ + (res).i -= (a).i; \ + } while (0) + +#ifdef FIXED_POINT +#define KISS_FFT_COS(phase) floorf(.5 + SAMP_MAX * cosf(phase)) +#define KISS_FFT_SIN(phase) floorf(.5 + SAMP_MAX * sinf(phase)) +#define HALF_OF(x) ((x) >> 1) +#elif defined(USE_SIMD) +#define KISS_FFT_COS(phase) _mm_set1_ps(cosf(phase)) +#define KISS_FFT_SIN(phase) _mm_set1_ps(sinf(phase)) +#define HALF_OF(x) ((x)*_mm_set1_ps(.5)) +#else +#define KISS_FFT_COS(phase) (kiss_fft_scalar) cosf(phase) +#define KISS_FFT_SIN(phase) (kiss_fft_scalar) sinf(phase) +#define HALF_OF(x) ((x)*.5) +#endif + +#define kf_cexp(x, phase) \ + do { \ + (x)->r = KISS_FFT_COS(phase); \ + (x)->i = KISS_FFT_SIN(phase); \ + } while (0) + +/* a debugging function */ +#define pcpx(c) \ + fprintf(stderr, "%g + %gi\n", (double)((c)->r), (double)((c)->i)) + +#ifdef KISS_FFT_USE_ALLOCA +// define this to allow use of alloca instead of malloc for temporary buffers +// Temporary buffers are used in two case: +// 1. FFT sizes that have "bad" factors. i.e. not 2,3 and 5 +// 2. "in-place" FFTs. Notice the quotes, since kissfft does not really do an +// in-place transform. +#include <alloca.h> +#define KISS_FFT_TMP_ALLOC(nbytes) alloca(nbytes) +#define KISS_FFT_TMP_FREE(ptr) +#else +#define KISS_FFT_TMP_ALLOC(nbytes) KISS_FFT_MALLOC(nbytes) +#define KISS_FFT_TMP_FREE(ptr) KISS_FFT_FREE(ptr) +#endif diff --git a/src/bpf.h b/src/bpf.h new file mode 100644 index 0000000..d74e059 --- /dev/null +++ b/src/bpf.h @@ -0,0 +1,18 @@ +#define BPF_N 101 + +float bpf[] = { + 0.002174, 0.003245, 0.002147, 0.001866, 0.002764, 0.000567, -0.001641, + -0.000565, -0.002415, -0.005837, -0.003620, -0.002828, -0.006268, -0.002787, + 0.001963, -0.001234, 0.001446, 0.009200, 0.005331, 0.003521, 0.011821, + 0.006951, -0.002015, 0.005137, 0.001828, -0.013390, -0.007058, -0.003273, + -0.020458, -0.014321, 0.001751, -0.012891, -0.009730, 0.018993, 0.008544, + 0.000534, 0.035755, 0.029074, -0.001192, 0.030852, 0.030983, -0.029834, + -0.009550, 0.011945, -0.081971, -0.082875, 0.000423, -0.133526, -0.211778, + 0.182628, 0.514906, 0.182628, -0.211778, -0.133526, 0.000423, -0.082875, + -0.081971, 0.011945, -0.009550, -0.029834, 0.030983, 0.030852, -0.001192, + 0.029074, 0.035755, 0.000534, 0.008544, 0.018993, -0.009730, -0.012891, + 0.001751, -0.014321, -0.020458, -0.003273, -0.007058, -0.013390, 0.001828, + 0.005137, -0.002015, 0.006951, 0.011821, 0.003521, 0.005331, 0.009200, + 0.001446, -0.001234, 0.001963, -0.002787, -0.006268, -0.002828, -0.003620, + -0.005837, -0.002415, -0.000565, -0.001641, 0.000567, 0.002764, 0.001866, + 0.002147, 0.003245, 0.002174}; diff --git a/src/bpfb.h b/src/bpfb.h new file mode 100644 index 0000000..e3a958f --- /dev/null +++ b/src/bpfb.h @@ -0,0 +1,18 @@ +#define BPFB_N 101 + +float bpfb[] = { + 0.003795, 0.006827, 0.002261, 0.002523, 0.005758, -0.000264, -0.000674, + 0.003113, -0.004144, -0.004923, 0.000043, -0.008017, -0.008711, -0.001802, + -0.010210, -0.010428, -0.000899, -0.009413, -0.009072, 0.003469, -0.005335, + -0.004828, 0.010724, 0.000941, 0.000708, 0.018957, 0.007084, 0.004825, + 0.025418, 0.010147, 0.004452, 0.027434, 0.007550, -0.002861, 0.023483, + -0.001944, -0.018138, 0.014122, -0.017583, -0.040768, 0.002598, -0.036604, + -0.069541, -0.004273, -0.054876, -0.107289, 0.010068, -0.068052, -0.200119, + 0.207287, 0.597150, 0.207287, -0.200119, -0.068052, 0.010068, -0.107289, + -0.054876, -0.004273, -0.069541, -0.036604, 0.002598, -0.040768, -0.017583, + 0.014122, -0.018138, -0.001944, 0.023483, -0.002861, 0.007550, 0.027434, + 0.004452, 0.010147, 0.025418, 0.004825, 0.007084, 0.018957, 0.000708, + 0.000941, 0.010724, -0.004828, -0.005335, 0.003469, -0.009072, -0.009413, + -0.000899, -0.010428, -0.010210, -0.001802, -0.008711, -0.008017, 0.000043, + -0.004923, -0.004144, 0.003113, -0.000674, -0.000264, 0.005758, 0.002523, + 0.002261, 0.006827, 0.003795};
\ No newline at end of file diff --git a/src/c2file.h b/src/c2file.h new file mode 100644 index 0000000..66c1e4a --- /dev/null +++ b/src/c2file.h @@ -0,0 +1,19 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2file.h + AUTHOR......: Kevin Otte + DATE CREATED: 2017-08-01 + + Header structures for Codec2 file storage + +\*---------------------------------------------------------------------------*/ + +const char c2_file_magic[3] = {0xc0, 0xde, 0xc2}; + +struct c2_header { + char magic[3]; + char version_major; + char version_minor; + char mode; + char flags; +}; diff --git a/src/codebook.c b/src/codebook.c new file mode 100644 index 0000000..946671e --- /dev/null +++ b/src/codebook.c @@ -0,0 +1,285 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/lsp1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp3.txt */ +#ifdef __EMBEDDED__ +static const float codes2[] = { +#else +static float codes2[] = { +#endif + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp4.txt */ +#ifdef __EMBEDDED__ +static const float codes3[] = { +#else +static float codes3[] = { +#endif + 700, + 800, + 900, + 1000, + 1100, + 1200, + 1300, + 1400, + 1500, + 1600, + 1700, + 1800, + 1900, + 2000, + 2100, + 2200 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp5.txt */ +#ifdef __EMBEDDED__ +static const float codes4[] = { +#else +static float codes4[] = { +#endif + 950, + 1050, + 1150, + 1250, + 1350, + 1450, + 1550, + 1650, + 1750, + 1850, + 1950, + 2050, + 2150, + 2250, + 2350, + 2450 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp6.txt */ +#ifdef __EMBEDDED__ +static const float codes5[] = { +#else +static float codes5[] = { +#endif + 1100, + 1200, + 1300, + 1400, + 1500, + 1600, + 1700, + 1800, + 1900, + 2000, + 2100, + 2200, + 2300, + 2400, + 2500, + 2600 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp7.txt */ +#ifdef __EMBEDDED__ +static const float codes6[] = { +#else +static float codes6[] = { +#endif + 1500, + 1600, + 1700, + 1800, + 1900, + 2000, + 2100, + 2200, + 2300, + 2400, + 2500, + 2600, + 2700, + 2800, + 2900, + 3000 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp8.txt */ +#ifdef __EMBEDDED__ +static const float codes7[] = { +#else +static float codes7[] = { +#endif + 2300, + 2400, + 2500, + 2600, + 2700, + 2800, + 2900, + 3000 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp9.txt */ +#ifdef __EMBEDDED__ +static const float codes8[] = { +#else +static float codes8[] = { +#endif + 2500, + 2600, + 2700, + 2800, + 2900, + 3000, + 3100, + 3200 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lsp10.txt */ +#ifdef __EMBEDDED__ +static const float codes9[] = { +#else +static float codes9[] = { +#endif + 2900, + 3100, + 3300, + 3500 +}; + +const struct lsp_codebook lsp_cb[] = { + /* /home/metala/projects/smesh/asko/src/codebook/lsp1.txt */ + { + 1, + 4, + 16, + codes0 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp2.txt */ + { + 1, + 4, + 16, + codes1 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp3.txt */ + { + 1, + 4, + 16, + codes2 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp4.txt */ + { + 1, + 4, + 16, + codes3 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp5.txt */ + { + 1, + 4, + 16, + codes4 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp6.txt */ + { + 1, + 4, + 16, + codes5 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp7.txt */ + { + 1, + 4, + 16, + codes6 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp8.txt */ + { + 1, + 3, + 8, + codes7 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp9.txt */ + { + 1, + 3, + 8, + codes8 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lsp10.txt */ + { + 1, + 2, + 4, + codes9 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebookd.c b/src/codebookd.c new file mode 100644 index 0000000..a080e98 --- /dev/null +++ b/src/codebookd.c @@ -0,0 +1,473 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/dlsp1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp3.txt */ +#ifdef __EMBEDDED__ +static const float codes2[] = { +#else +static float codes2[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp4.txt */ +#ifdef __EMBEDDED__ +static const float codes3[] = { +#else +static float codes3[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 250, + 300, + 350, + 400, + 450, + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp5.txt */ +#ifdef __EMBEDDED__ +static const float codes4[] = { +#else +static float codes4[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 250, + 300, + 350, + 400, + 450, + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp6.txt */ +#ifdef __EMBEDDED__ +static const float codes5[] = { +#else +static float codes5[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 250, + 300, + 350, + 400, + 450, + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp7.txt */ +#ifdef __EMBEDDED__ +static const float codes6[] = { +#else +static float codes6[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp8.txt */ +#ifdef __EMBEDDED__ +static const float codes7[] = { +#else +static float codes7[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp9.txt */ +#ifdef __EMBEDDED__ +static const float codes8[] = { +#else +static float codes8[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/metala/projects/smesh/asko/src/codebook/dlsp10.txt */ +#ifdef __EMBEDDED__ +static const float codes9[] = { +#else +static float codes9[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + +const struct lsp_codebook lsp_cbd[] = { + /* /home/metala/projects/smesh/asko/src/codebook/dlsp1.txt */ + { + 1, + 5, + 32, + codes0 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp2.txt */ + { + 1, + 5, + 32, + codes1 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp3.txt */ + { + 1, + 5, + 32, + codes2 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp4.txt */ + { + 1, + 5, + 32, + codes3 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp5.txt */ + { + 1, + 5, + 32, + codes4 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp6.txt */ + { + 1, + 5, + 32, + codes5 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp7.txt */ + { + 1, + 5, + 32, + codes6 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp8.txt */ + { + 1, + 5, + 32, + codes7 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp9.txt */ + { + 1, + 5, + 32, + codes8 + }, + /* /home/metala/projects/smesh/asko/src/codebook/dlsp10.txt */ + { + 1, + 5, + 32, + codes9 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebookge.c b/src/codebookge.c new file mode 100644 index 0000000..2bcaebc --- /dev/null +++ b/src/codebookge.c @@ -0,0 +1,283 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/gecb.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 2.71, 12.0184, + 0.04675, -2.73881, + 0.120993, 8.38895, + -1.58028, -0.892307, + 1.19307, -1.91561, + 0.187101, -3.27679, + 0.332251, -7.66455, + -1.47944, 31.2461, + 1.52761, 27.7095, + -0.524379, 5.25012, + 0.55333, 7.4388, + -0.843451, -1.95299, + 2.26389, 8.61029, + 0.143143, 2.36549, + 0.616506, 1.28427, + -1.71133, 22.0967, + 1.00813, 17.3965, + -0.106718, 1.41891, + -0.136246, 14.2736, + -1.70909, -20.5319, + 1.65787, -3.39107, + 0.138049, -4.95785, + 0.536729, -1.94375, + 0.196307, 36.8519, + 1.27248, 22.5565, + -0.670219, -1.90604, + 0.382092, 6.40113, + -0.756911, -4.90102, + 1.82931, 4.6138, + 0.318794, 0.73683, + 0.612815, -2.07505, + -0.410151, 24.7871, + 1.77602, 13.1909, + 0.106457, -0.104492, + 0.192206, 10.1838, + -1.82442, -7.71565, + 0.931346, 4.34835, + 0.308813, -4.086, + 0.397143, -11.8089, + -0.048715, 41.2273, + 0.877342, 35.8503, + -0.759794, 0.476634, + 0.978593, 7.67467, + -1.19506, 3.03883, + 2.63989, -3.41106, + 0.191127, 3.60351, + 0.402932, 1.0843, + -2.15202, 18.1076, + 1.5468, 8.32271, + -0.143089, -4.07592, + -0.150142, 5.86674, + -1.40844, -3.2507, + 1.56615, -10.4132, + 0.178171, -10.2267, + 0.362164, -0.028556, + -0.070125, 24.3907, + 0.594752, 17.4828, + -0.28698, -6.90407, + 0.464818, 10.2055, + -1.00684, -14.3572, + 2.32957, -3.69161, + 0.335745, 2.40714, + 1.01966, -3.15565, + -1.25945, 7.9919, + 2.38369, 19.6806, + -0.094947, -2.41374, + 0.20933, 6.66477, + -2.22103, 1.37986, + 1.29239, 2.04633, + 0.243626, -0.890741, + 0.428773, -7.19366, + -1.11374, 41.3414, + 2.6098, 31.1405, + -0.446468, 2.53419, + 0.490104, 4.62757, + -1.11723, -3.24174, + 1.79156, 8.41493, + 0.156012, 0.183336, + 0.532447, 3.15455, + -0.764484, 18.514, + 0.952395, 11.7713, + -0.332567, 0.346987, + 0.202165, 14.7168, + -2.12924, -15.559, + 1.35358, -1.92679, + -0.010963, -16.3364, + 0.399053, -2.79057, + 0.750657, 31.1483, + 0.655743, 24.4819, + -0.45321, -0.735879, + 0.2869, 6.5467, + -0.715673, -12.3578, + 1.54849, 3.87217, + 0.271874, 0.802339, + 0.502073, -4.85485, + -0.497037, 17.7619, + 1.19116, 13.9544, + 0.01563, 1.33157, + 0.341867, 8.93537, + -2.31601, -5.39506, + 0.75861, 1.9645, + 0.24132, -3.23769, + 0.267151, -11.2344, + -0.273126, 32.6248, + 1.75352, 40.432, + -0.784011, 3.04576, + 0.705987, 5.66118, + -1.3864, 1.35356, + 2.37646, 1.67485, + 0.242973, 4.73218, + 0.491227, 0.354061, + -1.60676, 8.65895, + 1.16711, 5.9871, + -0.137601, -12.0417, + -0.251375, 10.3972, + -1.43151, -8.90411, + 0.98828, -13.209, + 0.261484, -6.35497, + 0.395932, -0.702529, + 0.283704, 26.8996, + 0.420959, 15.4418, + -0.355804, -13.7278, + 0.527372, 12.3985, + -1.16956, -15.9985, + 1.90669, -5.81605, + 0.354492, 3.85157, + 0.82576, -4.16264, + -0.49019, 13.0572, + 2.25577, 13.5264, + -0.004956, -3.23713, + 0.026709, 7.86645, + -1.81037, -0.451183, + 1.08383, -0.18362, + 0.135836, -2.26658, + 0.375812, -5.51225, + -1.96644, 38.6829, + 1.97799, 24.5655, + -0.704656, 6.35881, + 0.480786, 7.05175, + -0.976417, -2.42273, + 2.50215, 6.75935, + 0.083588, 3.2588, + 0.543629, 0.910013, + -1.23196, 23.0915, + 0.785492, 14.807, + -0.213554, 1.688, + 0.004748, 18.1718, + -1.54719, -16.1168, + 1.50104, -3.28114, + 0.080133, -4.63472, + 0.476592, -2.18093, + 0.44247, 40.304, + 1.07277, 27.592, + -0.594738, -4.16681, + 0.42248, 7.61609, + -0.927521, -7.27441, + 1.99162, 1.29636, + 0.291307, 2.39878, + 0.721081, -1.95062, + -0.804256, 24.9295, + 1.64839, 19.1197, + 0.060852, -0.590639, + 0.266085, 9.10325, + -1.9574, -2.88461, + 1.11693, 2.6724, + 0.35458, -2.74854, + 0.330733, -14.1561, + -0.527851, 39.5756, + 0.991152, 43.195, + -0.589619, 1.26919, + 0.787401, 8.73071, + -1.0138, 1.02507, + 2.8254, 1.89538, + 0.24089, 2.74557, + 0.427195, 2.54446, + -1.95311, 12.244, + 1.44862, 12.0607, + -0.210492, -3.37906, + -0.056713, 10.204, + -1.65237, -5.10274, + 1.29475, -12.2708, + 0.111608, -8.67592, + 0.326634, -1.16763, + 0.021781, 31.1258, + 0.455335, 21.4684, + -0.37544, -3.37121, + 0.39362, 11.302, + -0.851456, -19.4149, + 2.10703, -2.22886, + 0.373233, 1.92406, + 0.884438, -1.72058, + -0.975127, 9.84013, + 2.0033, 17.3954, + -0.036915, -1.11137, + 0.148456, 5.39997, + -1.91441, 4.77382, + 1.44791, 0.537122, + 0.194979, -1.03818, + 0.495771, -9.95502, + -1.05899, 32.9471, + 2.01122, 32.4544, + -0.30965, 4.71911, + 0.436082, 4.63552, + -1.23711, -1.25428, + 2.02274, 9.42834, + 0.190342, 1.46077, + 0.479017, 2.48479, + -1.07848, 16.2217, + 1.20764, 9.65421, + -0.258087, -1.67236, + 0.071852, 13.416, + -1.87723, -16.072, + 1.28957, -4.87118, + 0.067713, -13.4427, + 0.435551, -4.1655, + 0.46614, 30.5895, + 0.904895, 21.598, + -0.518369, -2.53205, + 0.337363, 5.63726, + -0.554975, -17.4005, + 1.69188, 1.14574, + 0.227934, 0.889297, + 0.587303, -5.72973, + -0.262133, 18.6666, + 1.39505, 17.0029, + -0.01909, 4.30838, + 0.304235, 12.6699, + -2.07406, -6.46084, + 0.920546, 1.21296, + 0.284927, -1.78547, + 0.209724, -16.024, + -0.636067, 31.5768, + 1.34989, 34.6775, + -0.971625, 5.30086, + 0.590249, 4.44971, + -1.56787, 3.60239, + 2.1455, 4.51666, + 0.296022, 4.12017, + 0.445299, 0.868772, + -1.44193, 14.1284, + 1.35575, 6.0074, + -0.012814, -7.49657, + -0.43, 8.50012, + -1.20469, -7.11326, + 1.10102, -6.83682, + 0.196463, -6.234, + 0.436747, -1.12979, + 0.141052, 22.8549, + 0.290821, 18.8114, + -0.529536, -7.73251, + 0.63428, 10.7898, + -1.33472, -20.3258, + 1.81564, -1.90332, + 0.394778, 3.79758, + 0.732682, -8.18382, + -0.741244, 11.7683 +}; + +const struct lsp_codebook ge_cb[] = { + /* /home/metala/projects/smesh/asko/src/codebook/gecb.txt */ + { + 2, + 8, + 256, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebookjmv.c b/src/codebookjmv.c new file mode 100644 index 0000000..64974af --- /dev/null +++ b/src/codebookjmv.c @@ -0,0 +1,1591 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/lspjmv1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 0.435217, 0.668864, 1.0103, 1.22042, 1.50398, 1.78468, 2.13546, 2.35747, 2.61891, 2.73804, + 0.179285, 0.33316, 0.500638, 0.79695, 1.03999, 1.23497, 1.6523, 1.84823, 2.62556, 2.80497, + 0.268785, 0.356576, 0.595753, 1.04434, 1.24938, 1.42868, 1.68699, 1.86469, 2.33991, 2.5138, + 0.12007, 0.165585, 0.484694, 0.95916, 1.23753, 1.52915, 1.83751, 2.10773, 2.48749, 2.76685, + 0.150214, 0.229487, 0.62824, 0.961255, 1.33706, 1.59831, 1.91974, 2.21786, 2.53732, 2.75956, + 0.268624, 0.34598, 0.569637, 0.754737, 0.916538, 1.50854, 1.78635, 1.95442, 2.36953, 2.50182, + 0.246064, 0.468874, 0.662711, 0.890015, 1.14715, 1.51043, 1.78106, 2.09594, 2.65539, 2.80037, + 0.191631, 0.280628, 0.393229, 0.611761, 1.42017, 1.70774, 1.87303, 2.10155, 2.28035, 2.49949, + 0.361668, 0.507047, 0.789974, 1.04599, 1.50238, 1.67703, 1.90534, 2.16255, 2.43226, 2.59087, + 0.20816, 0.294285, 0.448634, 0.694229, 0.872517, 1.07032, 1.70335, 2.16874, 2.42619, 2.60366, + 0.316939, 0.513618, 0.705487, 0.917036, 1.17599, 1.31114, 1.6186, 2.03784, 2.45052, 2.5794, + 0.241068, 0.377728, 0.521595, 0.717203, 1.31041, 1.53999, 1.73643, 2.09893, 2.29792, 2.58735, + 0.234937, 0.281875, 0.780422, 1.44073, 1.60943, 1.75643, 1.97721, 2.14861, 2.60203, 2.7225, + 0.178679, 0.242672, 0.416988, 0.708348, 0.95562, 1.17667, 1.7818, 2.05449, 2.28159, 2.44811, + 0.345036, 0.42108, 0.740887, 1.16544, 1.32494, 1.4888, 1.76346, 1.90617, 2.39505, 2.64916, + 0.249586, 0.357494, 0.520747, 0.847195, 1.42841, 1.59778, 1.77819, 2.1785, 2.41344, 2.56466, + 0.295235, 0.574231, 1.2491, 1.4641, 1.72756, 1.92679, 2.09536, 2.28483, 2.56707, 2.72248, + 0.34193, 0.427307, 0.634001, 0.804212, 0.905629, 1.33337, 1.79033, 1.89276, 2.44582, 2.60283, + 0.363948, 0.508985, 0.667357, 0.946354, 1.43756, 1.62654, 1.81114, 2.03909, 2.29188, 2.43549, + 0.163514, 0.277407, 0.409207, 0.902065, 1.18907, 1.33964, 1.80241, 1.96077, 2.65293, 2.81899, + 0.302643, 0.359753, 0.651207, 1.20802, 1.4237, 1.54815, 1.88213, 2.01559, 2.26054, 2.5789, + 0.155928, 0.216908, 0.381812, 0.654803, 1.11237, 1.58993, 1.84756, 1.97672, 2.22408, 2.72534, + 0.274981, 0.347675, 0.572, 0.736046, 0.894248, 1.63237, 1.89139, 2.05689, 2.6029, 2.72178, + 0.154496, 0.243461, 0.348174, 0.689505, 1.57381, 1.70031, 1.94318, 2.10158, 2.56466, 2.77317, + 0.292612, 0.466612, 0.795936, 1.04747, 1.41369, 1.75085, 2.06289, 2.34007, 2.61361, 2.76949, + 0.242896, 0.3615, 0.555859, 0.793597, 0.932291, 1.40947, 1.86386, 2.00953, 2.4645, 2.67749, + 0.221646, 0.344724, 0.554564, 0.729403, 1.13657, 1.30177, 1.52918, 2.16359, 2.39582, 2.61081, + 0.160969, 0.224467, 0.371545, 0.626879, 1.16095, 1.44423, 1.67597, 1.87978, 2.47859, 2.67202, + 0.214172, 0.341585, 0.676575, 0.977397, 1.32543, 1.7201, 2.07259, 2.36954, 2.63528, 2.77879, + 0.203311, 0.289438, 0.458739, 0.914153, 1.12288, 1.30292, 1.58384, 1.88683, 2.18787, 2.42704, + 0.280383, 0.3716, 0.824827, 1.10025, 1.23623, 1.39892, 1.57804, 2.016, 2.36897, 2.50673, + 0.170627, 0.251778, 0.393686, 0.608347, 1.2876, 1.44667, 1.79328, 2.03655, 2.31015, 2.75244, + 0.18058, 0.288746, 0.987854, 1.43171, 1.67722, 1.91566, 2.12494, 2.28945, 2.58961, 2.75426, + 0.176335, 0.266263, 0.445421, 0.706403, 0.875402, 1.42292, 1.75867, 1.96091, 2.41068, 2.60175, + 0.216173, 0.287404, 0.480696, 1.00977, 1.2913, 1.47664, 1.89558, 2.06429, 2.28406, 2.48311, + 0.176523, 0.273934, 0.403407, 0.966139, 1.30472, 1.43661, 1.94473, 2.08484, 2.54446, 2.76242, + 0.311836, 0.550501, 0.879591, 1.09623, 1.27666, 1.47786, 1.81771, 2.15434, 2.56047, 2.77984, + 0.179765, 0.25056, 0.455939, 1.02389, 1.22513, 1.47566, 1.73462, 1.91871, 2.14734, 2.43824, + 0.271033, 0.457235, 0.599622, 0.821049, 0.940125, 1.20094, 1.84972, 1.98666, 2.54817, 2.75158, + 0.179326, 0.248002, 0.426405, 0.81706, 1.28589, 1.56502, 2.11736, 2.29871, 2.5724, 2.7527, + 0.374409, 0.535936, 0.897009, 1.18507, 1.59157, 1.7572, 1.96794, 2.17999, 2.45739, 2.62264, + 0.185472, 0.282752, 0.409439, 0.657499, 0.856446, 1.0294, 1.87993, 2.06932, 2.34474, 2.7531, + 0.375964, 0.578457, 0.758945, 0.929339, 1.12748, 1.25944, 1.70411, 2.12297, 2.33603, 2.4983, + 0.225641, 0.36103, 0.501679, 0.783379, 1.31485, 1.45262, 1.71415, 1.98716, 2.2257, 2.72436, + 0.144996, 0.252919, 0.632145, 1.22604, 1.57534, 1.90155, 2.17148, 2.39055, 2.68229, 2.80983, + 0.172022, 0.263338, 0.448634, 0.729435, 0.984007, 1.1716, 1.75705, 1.99023, 2.32131, 2.77121, + 0.235731, 0.351117, 0.796871, 1.05571, 1.30022, 1.59182, 1.89587, 2.12292, 2.41789, 2.59982, + 0.254053, 0.319371, 0.455623, 1.08614, 1.66467, 1.91588, 2.05908, 2.23342, 2.45204, 2.58679, + 0.375538, 0.742993, 1.13991, 1.33776, 1.73556, 2.01391, 2.31501, 2.48343, 2.65158, 2.75521, + 0.247245, 0.481131, 0.710366, 0.897602, 1.12109, 1.27171, 1.78735, 2.1995, 2.42966, 2.74067, + 0.226103, 0.311441, 0.501648, 0.844424, 1.36282, 1.53134, 1.77747, 1.98993, 2.18749, 2.3585, + 0.195862, 0.296224, 0.609554, 0.783241, 1.24347, 1.44548, 1.63703, 2.02264, 2.48356, 2.64614, + 0.233302, 0.299441, 0.472792, 1.24946, 1.45788, 1.60186, 1.83143, 1.99372, 2.59719, 2.75543, + 0.168096, 0.224183, 0.3827, 0.596214, 1.06059, 1.29442, 1.60576, 1.84849, 2.3577, 2.56919, + 0.33005, 0.445912, 0.661713, 0.874446, 1.00079, 1.45297, 1.94399, 2.07692, 2.42388, 2.61236, + 0.226382, 0.287303, 0.517631, 0.806229, 1.30901, 1.88528, 2.16051, 2.28641, 2.52638, 2.66082, + 0.20317, 0.499314, 0.887358, 1.23507, 1.46292, 1.69826, 1.99932, 2.22922, 2.57161, 2.76669, + 0.307531, 0.378353, 0.573606, 0.712218, 0.850169, 1.309, 2.05909, 2.26382, 2.49794, 2.67682, + 0.276203, 0.51025, 0.6868, 0.902844, 1.2052, 1.32798, 1.71889, 2.03895, 2.25639, 2.69715, + 0.161948, 0.229115, 0.393619, 0.683613, 1.13781, 1.32269, 1.78372, 1.96158, 2.38907, 2.63608, + 0.201334, 0.276773, 0.468994, 0.967017, 1.47597, 1.63242, 1.96577, 2.19728, 2.48059, 2.70155, + 0.214587, 0.315421, 0.469498, 0.733397, 1.146, 1.27791, 1.72784, 2.22713, 2.44026, 2.68112, + 0.255602, 0.394609, 0.743393, 0.977796, 1.19908, 1.40597, 1.91834, 2.22483, 2.47919, 2.66339, + 0.245989, 0.352625, 0.517055, 0.80283, 1.55871, 1.79565, 1.94405, 2.13364, 2.33327, 2.47998, + 0.337423, 0.480433, 0.869036, 1.13957, 1.63076, 1.82296, 2.07484, 2.29261, 2.47913, 2.62532, + 0.220974, 0.35885, 0.57164, 0.752791, 0.937013, 1.15172, 1.6744, 2.06247, 2.55872, 2.78484, + 0.267518, 0.331708, 0.541111, 1.11655, 1.41112, 1.53287, 1.79295, 1.93352, 2.24894, 2.62864, + 0.084613, 0.105083, 0.297424, 0.916949, 1.2563, 1.56703, 1.88539, 2.18987, 2.52279, 2.7921, + 0.205328, 0.287223, 0.724462, 1.0324, 1.45771, 1.64217, 1.92563, 2.17552, 2.42964, 2.60549, + 0.232554, 0.338724, 0.502115, 0.859975, 1.04409, 1.24565, 1.80656, 1.99964, 2.26116, 2.45998, + 0.291638, 0.379172, 0.626072, 0.792796, 0.959124, 1.50489, 1.73447, 1.91961, 2.61436, 2.72271, + 0.191554, 0.263114, 0.426797, 0.610628, 1.07741, 1.82954, 2.02195, 2.21057, 2.42765, 2.61383, + 0.389151, 0.679476, 0.915414, 1.03664, 1.25085, 1.58661, 2.04097, 2.2815, 2.56794, 2.71882, + 0.2032, 0.30128, 0.470357, 0.668716, 0.851737, 0.980327, 1.57086, 2.03762, 2.28907, 2.69388, + 0.304064, 0.405934, 0.710274, 0.962705, 1.12882, 1.34167, 1.63505, 1.84538, 2.07992, 2.50751, + 0.171777, 0.240705, 0.409371, 0.786432, 1.2232, 1.37569, 1.69176, 1.86608, 2.35041, 2.49394, + 0.231251, 0.277994, 0.557867, 1.32582, 1.66035, 1.77948, 2.00714, 2.17232, 2.44046, 2.65231, + 0.188101, 0.259494, 0.412543, 0.624843, 0.839549, 1.0337, 1.63413, 1.93194, 2.24608, 2.42577, + 0.361304, 0.419465, 0.795676, 1.18461, 1.2968, 1.57845, 1.84175, 1.99736, 2.54054, 2.68714, + 0.274372, 0.338938, 0.492443, 0.963516, 1.50951, 1.70638, 1.86988, 2.07717, 2.26128, 2.44418, + 0.41599, 0.652103, 1.03129, 1.26955, 1.57275, 1.77297, 2.00466, 2.17527, 2.43061, 2.59655, + 0.242045, 0.370942, 0.534392, 0.763529, 1.00117, 1.12976, 1.68219, 2.14464, 2.32448, 2.7157, + 0.377438, 0.588168, 0.765394, 0.976873, 1.35665, 1.49009, 1.73797, 2.00677, 2.21369, 2.38997, + 0.191625, 0.284123, 0.405342, 1.01678, 1.43273, 1.54759, 1.81393, 1.95832, 2.47077, 2.64926, + 0.272672, 0.349555, 0.633911, 1.15223, 1.30394, 1.54764, 1.9195, 2.0477, 2.56278, 2.73058, + 0.168423, 0.23633, 0.421468, 0.831345, 1.08354, 1.55345, 1.88073, 2.0647, 2.37086, 2.63295, + 0.219318, 0.301481, 0.513617, 0.765086, 1.02602, 1.51465, 2.0482, 2.24857, 2.49981, 2.65707, + 0.232695, 0.347947, 0.495203, 0.71883, 1.42301, 1.72249, 1.87958, 2.16504, 2.42025, 2.58966, + 0.270284, 0.336865, 0.684929, 1.15579, 1.69042, 1.87674, 2.02736, 2.22618, 2.44675, 2.582, + 0.149701, 0.193747, 0.352019, 0.520123, 0.823974, 1.43475, 1.68659, 1.96115, 2.37091, 2.69307, + 0.254818, 0.412303, 0.601514, 0.771438, 1.17545, 1.37657, 1.53903, 1.93704, 2.40858, 2.56362, + 0.233713, 0.355886, 0.593725, 0.76288, 1.27148, 1.5639, 1.79752, 2.09469, 2.53863, 2.71173, + 0.179028, 0.237103, 0.396818, 1.04202, 1.63354, 1.76268, 2.12393, 2.32239, 2.58819, 2.75134, + 0.182027, 0.251039, 0.434581, 0.714302, 0.950997, 1.4379, 1.81357, 1.9691, 2.14588, 2.35397, + 0.501538, 0.692148, 0.84886, 1.07131, 1.35054, 1.48948, 1.84164, 2.10428, 2.34154, 2.51529, + 0.27453, 0.38147, 0.526682, 0.922143, 1.44495, 1.5736, 1.85877, 2.06675, 2.2848, 2.62682, + 0.360617, 0.583131, 0.979491, 1.25408, 1.48835, 1.79756, 2.21952, 2.48218, 2.74237, 2.86203, + 0.140913, 0.220301, 0.619552, 0.818307, 1.05243, 1.33997, 1.83073, 2.13395, 2.53638, 2.75113, + 0.293514, 0.391691, 0.79008, 0.96274, 1.16032, 1.5266, 1.80549, 2.04146, 2.36162, 2.56496, + 0.199542, 0.290571, 0.452891, 0.689515, 1.25853, 1.40988, 1.88624, 2.22813, 2.46568, 2.72665, + 0.29692, 0.356356, 0.784287, 0.99654, 1.14618, 1.62387, 1.8155, 2.0383, 2.60063, 2.7057, + 0.206451, 0.276025, 0.537547, 0.802572, 1.22041, 1.64206, 1.86363, 2.00198, 2.21534, 2.58538, + 0.33365, 0.464751, 0.653772, 0.966306, 1.10387, 1.3402, 1.7847, 1.91459, 2.47017, 2.68692, + 0.181861, 0.24487, 0.376456, 0.554383, 1.3299, 1.81044, 2.04784, 2.20232, 2.66086, 2.81706, + 0.450565, 0.647291, 0.951172, 1.22943, 1.51964, 1.68681, 2.04911, 2.26717, 2.50128, 2.6506, + 0.219996, 0.320591, 0.427747, 0.601183, 0.753448, 0.929578, 1.74198, 2.28579, 2.47263, 2.74957, + 0.333848, 0.423373, 0.658791, 1.0313, 1.22263, 1.36577, 1.90189, 2.1211, 2.29031, 2.53118, + 0.166064, 0.233902, 0.383355, 0.661806, 1.22657, 1.39968, 1.77127, 1.97454, 2.17349, 2.56634, + 0.189286, 0.243602, 0.390584, 1.38793, 1.58872, 1.76324, 2.09112, 2.31631, 2.59353, 2.75508, + 0.158404, 0.224878, 0.385, 0.668463, 0.942954, 1.41197, 1.70031, 1.82807, 2.0594, 2.69255, + 0.325989, 0.461263, 0.851471, 1.04571, 1.28403, 1.5162, 1.79734, 2.08839, 2.43767, 2.62721, + 0.223709, 0.28919, 0.632812, 0.858738, 1.5419, 1.74677, 1.93574, 2.18482, 2.40433, 2.58301, + 0.545842, 0.95242, 1.34082, 1.51684, 1.83888, 2.01289, 2.24497, 2.40317, 2.59228, 2.69112, + 0.238526, 0.349079, 0.494582, 0.987665, 1.17075, 1.34823, 1.46864, 2.29696, 2.64416, 2.78738, + 0.270857, 0.442003, 0.655998, 0.881913, 1.25925, 1.42836, 1.76987, 1.99853, 2.39559, 2.65284, + 0.154384, 0.211806, 0.489481, 0.997257, 1.24982, 1.54123, 1.77886, 1.9494, 2.31914, 2.62339, + 0.268258, 0.312888, 0.589114, 1.25863, 1.57271, 1.67543, 1.91278, 2.07046, 2.27993, 2.56423, + 0.170715, 0.224965, 0.374011, 0.540197, 1.16189, 1.49907, 1.92587, 2.08257, 2.24662, 2.46972, + 0.324358, 0.391989, 0.706816, 0.833614, 1.01573, 1.56899, 1.73598, 2.12707, 2.55841, 2.65387, + 0.178059, 0.258575, 0.374125, 0.536831, 1.33483, 1.79863, 1.98698, 2.18925, 2.43227, 2.6267, + 0.198857, 0.420955, 0.817664, 1.17836, 1.46674, 1.8213, 2.20733, 2.47441, 2.73828, 2.85119, + 0.188344, 0.324302, 0.470468, 0.790033, 0.934101, 1.18872, 1.88717, 2.05283, 2.44832, 2.63024, + 0.201295, 0.365646, 0.526513, 0.758388, 1.1401, 1.26733, 1.65017, 1.87934, 2.10289, 2.60029, + 0.135058, 0.169428, 0.307348, 0.50316, 1.01808, 1.44795, 1.81098, 2.134, 2.48028, 2.75985, + 0.178006, 0.26661, 0.390327, 0.928681, 1.50161, 1.62133, 1.87136, 2.02586, 2.58044, 2.7708, + 0.246182, 0.42429, 0.644023, 0.801168, 1.11488, 1.27776, 1.50332, 2.07489, 2.2957, 2.50138, + 0.322996, 0.430355, 0.6316, 1.0477, 1.22184, 1.42673, 1.90308, 2.03222, 2.51673, 2.70845, + 0.292994, 0.430599, 0.619178, 0.794567, 1.28303, 1.65282, 1.84084, 2.06995, 2.38538, 2.52825, + 0.525494, 0.787797, 1.12182, 1.38748, 1.67457, 1.93622, 2.22404, 2.39062, 2.63428, 2.74323, + 0.299504, 0.409196, 0.602235, 0.892336, 1.05643, 1.25377, 1.48914, 1.63988, 2.42748, 2.65037, + 0.423758, 0.52048, 0.758987, 1.04126, 1.17366, 1.42368, 1.81824, 1.93641, 2.363, 2.62664, + 0.155042, 0.247496, 0.641445, 0.954509, 1.22497, 1.46585, 1.83784, 2.09046, 2.4515, 2.71616, + 0.251949, 0.421094, 0.706797, 0.975659, 1.25991, 1.52007, 1.81631, 2.12202, 2.47491, 2.71667, + 0.21522, 0.302248, 0.730598, 0.896343, 1.14557, 1.37019, 1.70069, 2.02256, 2.28327, 2.48922, + 0.28523, 0.453559, 0.66367, 0.861526, 1.0116, 1.24742, 1.65598, 1.86129, 2.57894, 2.73133, + 0.162067, 0.219409, 0.373433, 0.544669, 1.1033, 1.59718, 1.92104, 2.1434, 2.4065, 2.66048, + 0.342367, 0.511499, 0.93135, 1.16322, 1.39365, 1.61115, 1.97277, 2.19442, 2.47077, 2.64926, + 0.25101, 0.364125, 0.560956, 0.746545, 1.01984, 1.17072, 1.53295, 2.28867, 2.57709, 2.72307, + 0.315001, 0.489412, 0.720682, 0.877607, 1.09047, 1.25385, 1.44822, 1.92295, 2.25589, 2.40863, + 0.174666, 0.235793, 0.387644, 0.554402, 1.23109, 1.45614, 1.68803, 2.12745, 2.36703, 2.59727, + 0.215113, 0.341915, 1.04372, 1.32275, 1.49541, 1.74189, 1.96116, 2.23982, 2.5449, 2.70394, + 0.219852, 0.30177, 0.513912, 0.705474, 0.87754, 1.2959, 1.699, 1.98706, 2.28797, 2.49697, + 0.290638, 0.366442, 0.655155, 1.04499, 1.17215, 1.53254, 1.80079, 1.94893, 2.50968, 2.66005, + 0.232252, 0.31377, 0.658552, 0.941977, 1.46317, 1.66549, 1.86246, 2.02784, 2.53402, 2.70124, + 0.326539, 0.552681, 1.12173, 1.33138, 1.52007, 1.86708, 2.08286, 2.33247, 2.60604, 2.73709, + 0.190254, 0.340428, 0.492777, 0.739738, 0.895461, 1.07937, 1.64316, 1.79529, 2.49182, 2.72938, + 0.283586, 0.41844, 0.587306, 0.870866, 1.41855, 1.57703, 1.7995, 2.0694, 2.27448, 2.4381, + 0.235752, 0.35765, 0.502891, 1.01243, 1.25885, 1.40779, 1.82006, 1.95583, 2.5059, 2.73433, + 0.278412, 0.343137, 0.849977, 1.2329, 1.3505, 1.59063, 1.78752, 2.09158, 2.54136, 2.66386, + 0.162966, 0.243159, 0.439238, 0.684821, 0.887783, 1.4629, 1.88174, 2.04425, 2.28939, 2.705, + 0.235063, 0.371799, 0.57821, 0.752199, 1.00855, 1.47628, 1.80491, 2.2714, 2.65504, 2.78965, + 0.154939, 0.223696, 0.344718, 0.667555, 1.49566, 1.66944, 2.06988, 2.30721, 2.62769, 2.81134, + 0.239702, 0.335917, 0.716616, 1.1318, 1.45251, 1.63913, 2.10552, 2.27982, 2.50203, 2.66922, + 0.226818, 0.331261, 0.472705, 0.651974, 0.781639, 1.2198, 1.8229, 2.08273, 2.43933, 2.6109, + 0.223413, 0.359594, 0.534704, 0.741518, 1.22589, 1.38987, 1.61819, 2.00991, 2.207, 2.45984, + 0.171308, 0.268378, 0.383799, 0.858926, 1.37629, 1.51917, 1.7806, 1.92291, 2.62309, 2.8024, + 0.140134, 0.21232, 0.443224, 0.967457, 1.26424, 1.56215, 1.92915, 2.21739, 2.66834, 2.83075, + 0.221323, 0.322124, 0.485563, 0.818589, 1.01184, 1.19898, 1.42362, 1.6694, 2.15752, 2.36319, + 0.369687, 0.525655, 0.719213, 0.939654, 1.13763, 1.31222, 1.59994, 1.82681, 2.35522, 2.58068, + 0.211975, 0.314411, 0.489148, 0.739213, 1.3778, 1.5545, 1.82437, 2.15887, 2.35299, 2.72262, + 0.170698, 0.296368, 0.934285, 1.24313, 1.5559, 1.86654, 2.15994, 2.36344, 2.58503, 2.73853, + 0.189263, 0.305887, 0.439912, 0.78461, 1.22726, 1.34251, 1.58765, 1.75491, 2.43989, 2.72131, + 0.296339, 0.385169, 0.612012, 1.08132, 1.27636, 1.43718, 1.87147, 2.00172, 2.33909, 2.64022, + 0.229588, 0.320544, 0.517278, 0.969137, 1.14256, 1.62609, 1.87792, 2.11546, 2.54674, 2.70802, + 0.248869, 0.420193, 0.732388, 1.04902, 1.30341, 1.60146, 1.94921, 2.23946, 2.64822, 2.82261, + 0.2076, 0.29232, 0.496539, 0.857149, 1.18229, 1.39985, 1.71416, 1.86824, 2.02794, 2.20074, + 0.225558, 0.396897, 0.541783, 0.873366, 1.17897, 1.29958, 1.67719, 1.8496, 2.33048, 2.75272, + 0.176821, 0.231377, 0.372767, 0.508565, 1.15282, 1.80805, 2.11268, 2.25007, 2.57134, 2.74855, + 0.352149, 0.515765, 1.02324, 1.26022, 1.44357, 1.62207, 1.8728, 2.10018, 2.48928, 2.67104, + 0.166138, 0.263444, 0.370151, 0.590066, 0.754819, 0.940533, 1.76187, 1.94661, 2.44501, 2.75819, + 0.342082, 0.476411, 0.656223, 0.851774, 1.00399, 1.15337, 1.6944, 2.06562, 2.25564, 2.44015, + 0.227237, 0.376514, 0.514329, 0.894887, 1.14167, 1.28305, 1.83138, 1.9859, 2.33447, 2.78488, + 0.215891, 0.269548, 0.684111, 1.40566, 1.67481, 1.80093, 2.17209, 2.3394, 2.59157, 2.7301, + 0.23624, 0.400377, 0.533684, 0.750343, 0.910405, 1.08911, 1.73773, 1.91281, 2.19252, 2.68873, + 0.169242, 0.284879, 0.916252, 1.16977, 1.43368, 1.64438, 1.91912, 2.16162, 2.48266, 2.68259, + 0.270731, 0.336506, 0.477594, 1.04271, 1.60584, 1.79686, 1.94591, 2.16004, 2.35491, 2.52095, + 0.420586, 0.652563, 1.11716, 1.40601, 1.74754, 1.94742, 2.20309, 2.35997, 2.5479, 2.68217, + 0.281552, 0.395037, 0.640181, 0.944531, 1.19396, 1.33049, 1.71866, 2.18839, 2.44459, 2.57867, + 0.311824, 0.476892, 0.633431, 0.845825, 1.33252, 1.49166, 1.69361, 2.04108, 2.28932, 2.4394, + 0.133945, 0.20079, 0.647237, 0.927687, 1.18888, 1.36966, 1.69956, 1.97278, 2.29526, 2.67818, + 0.204796, 0.278215, 0.443465, 1.27048, 1.40521, 1.64092, 1.82425, 2.32709, 2.59964, 2.77253, + 0.18397, 0.244116, 0.410594, 0.639103, 1.22159, 1.40487, 1.62836, 1.90244, 2.16863, 2.3068, + 0.343622, 0.434735, 0.666599, 0.868069, 1.04894, 1.53278, 1.81983, 1.97188, 2.2887, 2.44875, + 0.238017, 0.320361, 0.657255, 0.917611, 1.30331, 1.72736, 1.98891, 2.18145, 2.44297, 2.61332, + 0.323613, 0.545056, 0.930173, 1.22606, 1.44018, 1.7723, 2.05689, 2.34781, 2.68938, 2.82062, + 0.28893, 0.401387, 0.617124, 0.836453, 0.990306, 1.26123, 1.91328, 2.11005, 2.32458, 2.55716, + 0.33267, 0.480804, 0.656147, 0.880536, 1.02957, 1.23049, 1.76906, 1.9323, 2.20037, 2.58521, + 0.185551, 0.265352, 0.409432, 0.608847, 1.0347, 1.22282, 1.87697, 2.17165, 2.4035, 2.66644, + 0.155026, 0.223348, 0.401684, 1.07914, 1.41579, 1.62002, 2.04552, 2.25851, 2.63162, 2.80229, + 0.183461, 0.263081, 0.425694, 0.635685, 1.18866, 1.35756, 1.57499, 2.08598, 2.28872, 2.51111, + 0.314738, 0.463011, 0.648733, 0.877651, 1.00289, 1.26581, 2.00541, 2.1981, 2.48153, 2.71418, + 0.244411, 0.318444, 0.546578, 0.793615, 1.32615, 1.73548, 1.9456, 2.11466, 2.31535, 2.47853, + 0.326237, 0.54354, 0.987361, 1.30441, 1.68493, 1.90215, 2.20717, 2.37427, 2.55753, 2.71622, + 0.157795, 0.283302, 0.430398, 0.660379, 0.81106, 1.14254, 1.4793, 1.71871, 2.67026, 2.84756, + 0.220856, 0.283872, 0.779935, 1.07494, 1.31221, 1.62633, 1.83761, 1.96888, 2.15599, 2.60238, + 0.140763, 0.205719, 0.406561, 0.762459, 1.04127, 1.48699, 1.83831, 2.11461, 2.55281, 2.77228, + 0.140451, 0.39592, 0.79211, 1.108, 1.40264, 1.62308, 1.94315, 2.22795, 2.54616, 2.774, + 0.229862, 0.336462, 0.54659, 0.81015, 1.20191, 1.34679, 1.82532, 2.09293, 2.28573, 2.47336, + 0.224913, 0.328246, 0.517269, 0.874793, 1.01259, 1.45218, 1.69578, 2.01493, 2.51145, 2.67257, + 0.247745, 0.335741, 0.546558, 0.710177, 1.17056, 1.72779, 1.97068, 2.15853, 2.48282, 2.62891, + 0.398252, 0.555087, 0.890367, 1.1212, 1.38153, 1.60123, 1.86665, 2.06661, 2.40516, 2.58802, + 0.198563, 0.288867, 0.478054, 0.658477, 0.851841, 1.0271, 1.53974, 2.02111, 2.57946, 2.78418, + 0.304271, 0.371642, 0.66159, 1.06898, 1.22425, 1.41193, 1.68052, 1.86977, 2.10007, 2.30855, + 0.188223, 0.257939, 0.432402, 0.73505, 1.31804, 1.48553, 1.82811, 2.04644, 2.30702, 2.45724, + 0.246723, 0.297276, 0.604475, 1.3109, 1.57044, 1.68885, 1.91366, 2.05133, 2.55601, 2.71497, + 0.158309, 0.234509, 0.435792, 0.6679, 0.957567, 1.23592, 1.59294, 1.81816, 2.30739, 2.76897, + 0.419843, 0.501412, 0.766892, 1.07317, 1.18937, 1.48022, 1.7666, 1.92215, 2.53794, 2.69477, + 0.27514, 0.335563, 0.678421, 1.08152, 1.59238, 1.77263, 1.93124, 2.1407, 2.3338, 2.49086, + 0.372056, 0.856814, 1.23954, 1.40999, 1.6903, 1.86302, 2.0727, 2.27355, 2.53266, 2.69052, + 0.321254, 0.422981, 0.604856, 0.793437, 0.912112, 1.12845, 1.79598, 2.17323, 2.36015, 2.53614, + 0.395214, 0.598779, 0.771997, 0.946713, 1.21378, 1.33043, 1.66033, 1.97715, 2.16506, 2.34402, + 0.225286, 0.317828, 0.464801, 1.11233, 1.36951, 1.512, 1.92195, 2.05341, 2.59352, 2.77729, + 0.330612, 0.407807, 0.730129, 1.25973, 1.45981, 1.60567, 1.98131, 2.13701, 2.46597, 2.67972, + 0.213145, 0.305305, 0.507016, 0.662299, 1.05685, 1.47986, 1.6719, 2.10271, 2.36987, 2.58199, + 0.219658, 0.296096, 0.443507, 0.610973, 0.799691, 1.67658, 1.96549, 2.15323, 2.50223, 2.693, + 0.174947, 0.257739, 0.373547, 0.552567, 1.40532, 1.61425, 1.84892, 2.11779, 2.31788, 2.7119, + 0.209667, 0.297529, 0.756195, 1.0953, 1.5642, 1.84477, 2.1037, 2.29266, 2.52005, 2.67949, + 0.170138, 0.24031, 0.452247, 0.684414, 0.880102, 1.36692, 1.74165, 2.13129, 2.50573, 2.73261, + 0.278164, 0.468635, 0.707518, 0.853693, 1.05478, 1.21046, 1.54094, 2.17456, 2.41066, 2.61214, + 0.155738, 0.23889, 0.352836, 0.621012, 1.44144, 1.6197, 1.82517, 1.97533, 2.52537, 2.74857, + 0.223776, 0.274424, 0.479048, 0.797871, 1.69419, 1.87813, 2.13528, 2.37373, 2.59542, 2.72979, + 0.151088, 0.198286, 0.326558, 0.536276, 0.845893, 1.14165, 1.46056, 1.76287, 2.02585, 2.1773, + 0.434445, 0.614208, 0.887657, 1.02845, 1.19136, 1.3922, 1.78689, 2.06248, 2.4234, 2.61936, + 0.180755, 0.275311, 0.397787, 0.859366, 1.40976, 1.52332, 1.90885, 2.08232, 2.38972, 2.74389, + 0.275975, 0.508416, 0.889894, 1.31893, 1.63331, 1.90473, 2.16901, 2.37466, 2.72697, 2.84767, + 0.156239, 0.262624, 0.406657, 0.739074, 1.04449, 1.20123, 1.81089, 2.0056, 2.5817, 2.80489, + 0.195391, 0.258771, 0.654924, 0.824371, 1.31526, 1.50073, 1.76594, 2.06399, 2.34118, 2.51366, + 0.178034, 0.301047, 0.46302, 0.716172, 1.19887, 1.34045, 1.83456, 2.02213, 2.40075, 2.77629, + 0.340368, 0.404236, 0.843747, 1.03924, 1.20211, 1.70805, 1.91495, 2.16951, 2.52152, 2.62335, + 0.218465, 0.289694, 0.528045, 0.817051, 1.13234, 1.58046, 1.83889, 1.98339, 2.14749, 2.34813, + 0.322509, 0.458058, 0.654679, 0.958976, 1.11821, 1.32157, 1.90139, 2.04641, 2.36093, 2.66422, + 0.191821, 0.252321, 0.389176, 0.581111, 1.52967, 1.93169, 2.08361, 2.27046, 2.56685, 2.71388, + 0.493961, 0.710827, 0.98226, 1.19627, 1.41933, 1.62091, 1.92801, 2.14565, 2.42977, 2.60197, + 0.213148, 0.311589, 0.424636, 0.602664, 0.736895, 1.02216, 1.99228, 2.21853, 2.61163, 2.85032, + 0.288129, 0.434441, 0.629313, 0.856153, 1.28967, 1.42452, 1.8758, 2.15024, 2.35181, 2.53684, + 0.160031, 0.230716, 0.406654, 0.870424, 1.15652, 1.39232, 1.8041, 1.95144, 2.21048, 2.73516, + 0.22934, 0.293962, 0.503222, 1.2421, 1.47582, 1.62465, 1.99868, 2.1445, 2.57855, 2.75327, + 0.15877, 0.220035, 0.363386, 0.577761, 0.96309, 1.17494, 1.73817, 1.9792, 2.16244, 2.66192, + 0.346062, 0.444816, 0.716985, 1.18072, 1.37058, 1.523, 1.89217, 2.06668, 2.3958, 2.62766, + 0.307495, 0.38933, 0.612607, 0.969283, 1.55771, 1.83994, 1.99674, 2.17238, 2.42063, 2.5392, + 0.437804, 0.726957, 1.29117, 1.5033, 1.76543, 1.96212, 2.16365, 2.33623, 2.57962, 2.70852, + 0.232184, 0.333678, 0.528368, 0.706749, 1.20328, 1.37902, 1.61116, 2.15468, 2.5929, 2.75032, + 0.272652, 0.46171, 0.625777, 0.839609, 1.34202, 1.49673, 1.71538, 2.13757, 2.37004, 2.59739, + 0.184908, 0.302324, 0.454883, 0.880307, 1.10438, 1.29253, 1.7772, 1.94336, 2.44417, 2.62273, + 0.265644, 0.341261, 0.553228, 1.13947, 1.42715, 1.56044, 1.93394, 2.08413, 2.39331, 2.65413, + 0.16792, 0.207301, 0.370331, 0.525538, 1.03089, 1.36816, 1.78247, 2.0624, 2.33276, 2.5263, + 0.343172, 0.433912, 0.717501, 0.889734, 1.05206, 1.69528, 2.05316, 2.20846, 2.60887, 2.71832, + 0.216527, 0.305247, 0.44589, 0.729271, 1.63974, 1.90328, 2.05335, 2.22125, 2.43225, 2.56802, + 0.110545, 0.209955, 0.844788, 1.1742, 1.4922, 1.81024, 2.17727, 2.4405, 2.69729, 2.83523, + 0.217384, 0.337412, 0.488999, 0.761842, 0.879715, 1.20953, 1.97075, 2.1208, 2.61165, 2.79176, + 0.190459, 0.296484, 0.469967, 0.800649, 1.10556, 1.27853, 1.51694, 1.69307, 2.11442, 2.71674, + 0.134814, 0.175978, 0.300425, 0.496817, 1.2443, 1.48531, 1.86172, 2.13123, 2.48505, 2.77388, + 0.210174, 0.278266, 0.435508, 0.927538, 1.60691, 1.7539, 1.95755, 2.16628, 2.39852, 2.74961, + 0.213766, 0.3153, 0.509924, 0.70993, 0.964724, 1.10678, 1.38261, 2.00107, 2.32321, 2.56531, + 0.400615, 0.524954, 0.798552, 1.01285, 1.13549, 1.47485, 1.98903, 2.13091, 2.50797, 2.67946, + 0.2494, 0.377023, 0.519635, 0.754227, 1.45956, 1.64276, 1.82896, 2.07788, 2.29823, 2.46753, + 0.473365, 0.683973, 1.05234, 1.37583, 1.54811, 1.74759, 2.1393, 2.31877, 2.60998, 2.73925, + 0.203877, 0.341791, 0.48518, 0.884069, 1.09759, 1.26953, 1.47992, 1.75788, 2.6484, 2.82239, + 0.273046, 0.404254, 0.555403, 0.954547, 1.29123, 1.39902, 1.72289, 1.90344, 2.17198, 2.64531, + 0.040369, 0.117266, 0.617136, 0.892043, 1.26033, 1.54165, 1.85938, 2.1531, 2.49823, 2.76189, + 0.132414, 0.211358, 0.742445, 1.06686, 1.33108, 1.57079, 1.86746, 2.13253, 2.47962, 2.73108, + 0.237329, 0.326529, 0.612538, 0.790663, 0.990133, 1.41374, 1.73823, 1.93691, 2.16773, 2.45163, + 0.27396, 0.405794, 0.57253, 0.933672, 1.05782, 1.39795, 1.85653, 1.99755, 2.59949, 2.76004, + 0.199334, 0.29838, 0.442931, 0.628638, 1.30321, 1.64014, 1.80402, 2.11302, 2.37545, 2.54895, + 0.350188, 0.50201, 0.821298, 1.03864, 1.36929, 1.5924, 1.91082, 2.15649, 2.46051, 2.65326, + 0.281558, 0.399892, 0.573105, 0.753299, 0.900613, 1.05457, 1.58199, 2.17844, 2.43035, 2.61604, + 0.344653, 0.543532, 0.703715, 0.862285, 1.19822, 1.33821, 1.57908, 2.06077, 2.30675, 2.48575, + 0.220701, 0.326795, 0.520618, 0.755133, 1.29555, 1.45189, 1.6905, 2.20005, 2.41427, 2.61591, + 0.279478, 0.332193, 0.801527, 1.34597, 1.48748, 1.6785, 1.9222, 2.10002, 2.58557, 2.71339, + 0.163502, 0.212169, 0.365096, 0.525464, 0.869846, 1.20881, 1.79399, 2.04031, 2.29718, 2.4698, + 0.285531, 0.341488, 0.754059, 1.17002, 1.30084, 1.5137, 1.69986, 1.88992, 2.58146, 2.70687, + 0.249595, 0.366997, 0.626427, 0.945219, 1.40704, 1.56056, 1.83166, 2.23115, 2.46635, 2.65452, + 0.271671, 0.443136, 1.15641, 1.40646, 1.67652, 1.85648, 2.06322, 2.2305, 2.47584, 2.63958, + 0.28662, 0.427806, 0.63732, 0.803409, 0.996161, 1.26638, 1.68175, 2.00397, 2.39465, 2.58855, + 0.314906, 0.440519, 0.612129, 0.896126, 1.47241, 1.71769, 1.88135, 2.09944, 2.36917, 2.49547, + 0.170277, 0.25127, 0.405477, 0.915641, 1.12689, 1.43663, 1.71477, 1.8932, 2.55299, 2.73852, + 0.27941, 0.337137, 0.734563, 1.28105, 1.4806, 1.61188, 1.85321, 1.99488, 2.41605, 2.65483, + 0.165776, 0.226083, 0.417544, 0.744574, 1.04447, 1.53489, 1.80849, 1.94495, 2.13849, 2.60179, + 0.264579, 0.336652, 0.542033, 0.71019, 0.913338, 1.65575, 1.81776, 2.23196, 2.52444, 2.65852, + 0.158194, 0.235588, 0.338347, 0.541657, 1.58338, 1.76629, 2.00914, 2.24334, 2.50394, 2.77516, + 0.332612, 0.50962, 0.822935, 1.07588, 1.45429, 1.65079, 1.97445, 2.25128, 2.53734, 2.74512, + 0.262817, 0.359709, 0.520893, 0.707667, 0.818364, 1.43885, 1.97125, 2.08767, 2.49701, 2.64644, + 0.2332, 0.399599, 0.612456, 0.775547, 1.19919, 1.35576, 1.6469, 2.13625, 2.34249, 2.69574, + 0.149687, 0.238538, 0.372248, 0.63452, 1.25581, 1.43379, 1.77004, 1.92875, 2.61191, 2.82493, + 0.137016, 0.210297, 0.591489, 1.12545, 1.37565, 1.6853, 2.08961, 2.39089, 2.70446, 2.84443, + 0.21349, 0.341024, 0.541716, 0.750061, 1.0882, 1.24458, 1.55534, 1.96557, 2.1879, 2.38371, + 0.300159, 0.489291, 0.825022, 1.0371, 1.19409, 1.34738, 1.68475, 2.02494, 2.46561, 2.74097, + 0.170029, 0.255033, 0.392758, 0.727117, 1.38207, 1.57968, 1.80091, 1.95907, 2.28234, 2.7288, + 0.175883, 0.365509, 1.11217, 1.38587, 1.72039, 1.97781, 2.2453, 2.42161, 2.62957, 2.754, + 0.16259, 0.248164, 0.45463, 0.763209, 0.966031, 1.28234, 1.73074, 1.93805, 2.47938, 2.66756, + 0.258043, 0.345866, 0.55652, 0.981312, 1.36153, 1.48238, 1.87224, 2.15823, 2.36227, 2.55503, + 0.234139, 0.348843, 0.528234, 0.987884, 1.19522, 1.42215, 1.96003, 2.12737, 2.60332, 2.793, + 0.179699, 0.559209, 0.867682, 1.08884, 1.31689, 1.5715, 1.9222, 2.19739, 2.50112, 2.72868, + 0.216784, 0.310791, 0.487492, 0.932903, 1.20195, 1.36655, 1.8004, 1.9775, 2.17426, 2.53707, + 0.186878, 0.400655, 0.580952, 0.846287, 1.10387, 1.26678, 1.84277, 2.01959, 2.488, 2.71722, + 0.164641, 0.248712, 0.389358, 0.772822, 1.21256, 1.36992, 2.02587, 2.27762, 2.61752, 2.80953, + 0.351899, 0.520326, 0.926597, 1.21965, 1.50984, 1.67684, 1.92174, 2.11125, 2.35638, 2.54593, + 0.242182, 0.365285, 0.506156, 0.71602, 0.865221, 1.01169, 1.78692, 2.12298, 2.35088, 2.76773, + 0.413776, 0.559566, 0.7358, 0.928997, 1.07912, 1.26718, 1.88007, 2.15249, 2.32483, 2.53986, + 0.210597, 0.329568, 0.469735, 0.78859, 1.21549, 1.31981, 1.71146, 2.05899, 2.24544, 2.65373, + 0.197937, 0.254148, 0.477985, 1.22709, 1.62992, 1.76743, 2.18698, 2.3851, 2.59487, 2.72554, + 0.205489, 0.333855, 0.523915, 0.706275, 1.10215, 1.24661, 1.6489, 2.02683, 2.28169, 2.75931, + 0.230328, 0.322431, 0.861834, 1.14561, 1.34721, 1.57611, 1.80728, 2.00482, 2.35437, 2.57225, + 0.224898, 0.282022, 0.506636, 1.1523, 1.62656, 1.75209, 2.02818, 2.21882, 2.48896, 2.67046, + 0.313732, 0.625469, 1.16447, 1.49908, 1.74961, 2.01853, 2.26223, 2.4296, 2.69216, 2.8225, + 0.375623, 0.575307, 0.7912, 0.93577, 1.09694, 1.34339, 1.80799, 2.18731, 2.51972, 2.6948, + 0.236981, 0.332412, 0.47927, 0.844461, 1.34764, 1.49073, 1.68394, 2.03914, 2.29762, 2.45843, + 0.129047, 0.20625, 0.636751, 0.865101, 1.13689, 1.35661, 1.7048, 1.91668, 2.51836, 2.75632, + 0.195171, 0.266517, 0.414793, 1.23956, 1.45291, 1.60836, 1.83305, 2.0478, 2.47352, 2.62199, + 0.165853, 0.21272, 0.372757, 0.536136, 1.01394, 1.33963, 1.55512, 1.94574, 2.23628, 2.44095, + 0.256981, 0.368868, 0.635878, 0.802543, 1.08476, 1.43912, 1.81473, 2.12052, 2.45815, 2.62146, + 0.214382, 0.297135, 0.445091, 0.70205, 1.3651, 1.85126, 2.06703, 2.2073, 2.47073, 2.61243, + 0.34071, 0.532103, 0.935278, 1.17102, 1.37789, 1.6386, 1.96527, 2.24616, 2.63127, 2.80634, + 0.310524, 0.412051, 0.582478, 0.768755, 0.871594, 1.11985, 1.92635, 2.20751, 2.40709, 2.63663, + 0.249349, 0.443517, 0.631532, 0.810096, 1.20513, 1.35721, 1.6074, 1.98416, 2.20802, 2.64511, + 0.14309, 0.185312, 0.325214, 0.504, 1.13447, 1.32791, 1.67365, 2.0069, 2.38928, 2.74609, + 0.226575, 0.298946, 0.453938, 0.998061, 1.3946, 1.59728, 2.06418, 2.22325, 2.42547, 2.56946, + 0.183924, 0.255181, 0.415834, 0.624247, 1.04234, 1.20308, 1.55524, 2.12531, 2.40035, 2.66192, + 0.27561, 0.365968, 0.654909, 0.990108, 1.1708, 1.45533, 2.07756, 2.25267, 2.50232, 2.68595, + 0.204334, 0.287844, 0.39481, 0.761295, 1.5012, 1.78471, 1.93557, 2.15283, 2.34926, 2.54564, + 0.342976, 0.527539, 0.917466, 1.16059, 1.49953, 1.76183, 2.09527, 2.30187, 2.54057, 2.69469, + 0.202374, 0.333367, 0.480179, 0.708677, 0.819505, 1.10529, 1.80664, 1.95335, 2.61084, 2.7975, + 0.307033, 0.368471, 0.602486, 1.10861, 1.41335, 1.52864, 1.79852, 1.98614, 2.16905, 2.43726, + 0.144073, 0.196932, 0.386988, 0.819061, 1.28977, 1.62507, 1.90192, 2.13611, 2.48302, 2.70797, + 0.17676, 0.268627, 0.662082, 1.05687, 1.54797, 1.71139, 1.97294, 2.24991, 2.54447, 2.76109, + 0.191409, 0.292985, 0.492193, 0.800526, 1.04184, 1.27855, 1.83663, 2.02868, 2.24939, 2.62778, + 0.324102, 0.399146, 0.687435, 0.868704, 1.02296, 1.58208, 1.85385, 1.98188, 2.55491, 2.67706, + 0.229172, 0.302836, 0.481418, 0.704363, 0.967567, 1.82827, 2.0973, 2.25847, 2.54911, 2.70465, + 0.467124, 0.696788, 0.9395, 1.09499, 1.27754, 1.4885, 1.89628, 2.15847, 2.47418, 2.65999, + 0.175418, 0.234039, 0.367674, 0.513586, 0.747619, 1.0084, 1.58316, 2.05311, 2.36329, 2.68115, + 0.410273, 0.561949, 0.736215, 0.956685, 1.13569, 1.28842, 1.75061, 1.93771, 2.15132, 2.48934, + 0.204541, 0.277613, 0.529607, 0.722971, 1.19998, 1.44734, 1.71563, 1.92105, 2.35778, 2.50749, + 0.253116, 0.311907, 0.696982, 1.32008, 1.57542, 1.70532, 2.00507, 2.16867, 2.46188, 2.66505, + 0.163657, 0.237902, 0.393374, 0.60949, 0.854272, 1.08998, 1.52639, 1.84234, 2.12625, 2.67905, + 0.448627, 0.530664, 0.812719, 1.0952, 1.20764, 1.57541, 1.88421, 2.0343, 2.55301, 2.68835, + 0.262717, 0.338748, 0.512685, 1.00354, 1.48018, 1.62208, 1.82852, 2.14242, 2.35646, 2.51153, + 0.417111, 0.636688, 1.03657, 1.31988, 1.67992, 1.87339, 2.07372, 2.2494, 2.50773, 2.65105, + 0.263698, 0.461151, 0.618737, 0.830471, 1.00404, 1.15887, 1.80157, 2.02022, 2.30656, 2.74304, + 0.387779, 0.575108, 0.729791, 0.932981, 1.36116, 1.50516, 1.75118, 2.06847, 2.33826, 2.48764, + 0.18151, 0.265666, 0.454631, 1.08238, 1.2873, 1.5792, 1.85118, 2.09696, 2.46724, 2.64693, + 0.277668, 0.345119, 0.602341, 1.1792, 1.37899, 1.54562, 1.81386, 1.96259, 2.4918, 2.66445, + 0.17932, 0.24808, 0.456925, 0.722589, 1.12693, 1.57945, 1.7994, 1.95067, 2.48412, 2.70724, + 0.314322, 0.381145, 0.608651, 0.727613, 0.890472, 1.61028, 2.13617, 2.25836, 2.59638, 2.70978, + 0.189539, 0.266068, 0.419729, 0.651693, 1.41016, 1.64311, 1.85481, 2.27558, 2.49205, 2.72201, + 0.254466, 0.313038, 0.594149, 1.01254, 1.68881, 1.93546, 2.11918, 2.28787, 2.53554, 2.66793, + 0.134691, 0.171906, 0.30274, 0.492936, 0.899551, 1.22919, 1.73394, 2.01288, 2.44634, 2.74276, + 0.231556, 0.365068, 0.680761, 0.889142, 1.11134, 1.2959, 1.54264, 1.97178, 2.42756, 2.63191, + 0.222525, 0.305606, 0.527193, 0.687519, 1.18138, 1.67176, 1.86368, 2.07202, 2.63452, 2.77927, + 0.17877, 0.237415, 0.37516, 0.856692, 1.67368, 1.81374, 2.01679, 2.27242, 2.5226, 2.73596, + 0.193532, 0.268731, 0.451328, 0.753471, 0.984854, 1.28535, 1.68565, 1.88412, 2.09168, 2.24342, + 0.476037, 0.65161, 0.801054, 1.01016, 1.24137, 1.35584, 1.77598, 2.08615, 2.27291, 2.45435, + 0.211657, 0.308331, 0.421366, 0.865966, 1.41877, 1.55674, 1.78615, 2.02033, 2.19859, 2.63198, + 0.203789, 0.490794, 1.01014, 1.27501, 1.47221, 1.81014, 2.17064, 2.43766, 2.66212, 2.78806, + 0.174355, 0.252095, 0.674715, 0.842194, 1.05509, 1.278, 1.69868, 2.07056, 2.39938, 2.65743, + 0.245109, 0.324049, 0.628822, 0.92791, 1.1236, 1.58007, 1.87864, 2.0546, 2.35872, 2.54684, + 0.182644, 0.253804, 0.386248, 0.614056, 1.36482, 1.54588, 2.04017, 2.21883, 2.41901, 2.62461, + 0.295605, 0.367794, 0.690701, 1.05516, 1.1866, 1.64445, 1.94415, 2.10144, 2.56212, 2.69127, + 0.220878, 0.289573, 0.640307, 0.822072, 1.14406, 1.5678, 1.76641, 1.90811, 2.10346, 2.56049, + 0.403453, 0.526298, 0.732204, 0.90115, 1.03587, 1.33938, 1.78399, 1.94196, 2.37103, 2.62665, + 0.212825, 0.25857, 0.471588, 0.685549, 1.26374, 1.82105, 2.16382, 2.2884, 2.62806, 2.78816, + 0.401181, 0.642053, 1.03247, 1.23611, 1.44445, 1.68668, 2.00672, 2.22851, 2.57211, 2.72396, + 0.239433, 0.341091, 0.492629, 0.70763, 0.881426, 1.03082, 1.71925, 2.34406, 2.57906, 2.75694, + 0.294093, 0.38277, 0.577412, 1.00928, 1.31304, 1.4193, 1.74467, 2.09423, 2.28904, 2.47584, + 0.169805, 0.236922, 0.403314, 0.638995, 1.17645, 1.35214, 1.66557, 1.90976, 2.15012, 2.71624, + 0.210447, 0.277913, 0.452474, 1.40269, 1.51343, 1.72094, 1.90394, 2.2785, 2.58376, 2.74318, + 0.159574, 0.225382, 0.374008, 0.714137, 1.01125, 1.37171, 1.69916, 1.87159, 2.02706, 2.49119, + 0.258602, 0.557253, 0.81972, 1.03886, 1.30147, 1.44536, 1.83061, 2.09817, 2.32081, 2.54107, + 0.232756, 0.282242, 0.631974, 0.898694, 1.53744, 1.86922, 2.06397, 2.23446, 2.49823, 2.63352, + 0.580133, 0.997946, 1.32096, 1.48187, 1.73161, 1.89858, 2.12071, 2.29013, 2.53009, 2.65166, + 0.21184, 0.307093, 0.45336, 0.945579, 1.25082, 1.49029, 1.72414, 2.2811, 2.5627, 2.7526, + 0.314276, 0.493555, 0.667782, 0.8965, 1.32301, 1.48262, 1.66749, 1.97441, 2.42735, 2.55568, + 0.182455, 0.261592, 0.418011, 1.05093, 1.26139, 1.44337, 1.66547, 1.93903, 2.44469, 2.63845, + 0.24157, 0.306934, 0.491293, 1.10595, 1.55483, 1.66652, 1.92392, 2.08765, 2.3676, 2.65489, + 0.190084, 0.25485, 0.454062, 0.724519, 1.08336, 1.39389, 1.89234, 2.08886, 2.32176, 2.4843, + 0.306497, 0.389831, 0.721793, 0.839714, 1.12475, 1.6524, 1.82292, 2.27331, 2.5692, 2.6696, + 0.1862, 0.27346, 0.383201, 0.564758, 1.51107, 1.84502, 1.99828, 2.1941, 2.38869, 2.58792, + 0.300722, 0.478218, 0.823364, 1.12749, 1.59114, 1.87135, 2.17472, 2.40318, 2.62478, 2.7824, + 0.228884, 0.358342, 0.504622, 0.795874, 1.00562, 1.15261, 1.90805, 2.12479, 2.37247, 2.79758, + 0.171885, 0.248234, 0.432842, 0.833143, 1.04089, 1.26929, 1.66164, 1.91863, 2.15896, 2.6534, + 0.140943, 0.193684, 0.343025, 0.562303, 1.06955, 1.54333, 1.82447, 1.96164, 2.46351, 2.77054, + 0.173053, 0.245656, 0.360656, 0.960618, 1.58953, 1.68991, 1.98414, 2.143, 2.58839, 2.7594, + 0.24018, 0.429951, 0.63744, 0.786596, 1.06915, 1.22657, 1.47088, 1.95205, 2.19506, 2.61597, + 0.367862, 0.471897, 0.730834, 1.08232, 1.22629, 1.46293, 1.92817, 2.05247, 2.40674, 2.66246, + 0.247175, 0.358209, 0.535946, 0.781876, 1.3637, 1.63524, 1.80723, 1.99378, 2.45277, 2.60104, + 0.445578, 0.687898, 1.11411, 1.30103, 1.5774, 1.88604, 2.2249, 2.43653, 2.65969, 2.76103, + 0.214389, 0.336025, 0.487794, 0.759534, 0.970518, 1.1411, 1.45733, 1.62464, 2.30692, 2.71527, + 0.3773, 0.466775, 0.716121, 1.08378, 1.25654, 1.41124, 1.78943, 1.93637, 2.20557, 2.56236, + 0.148362, 0.214593, 0.545023, 0.840437, 1.19333, 1.48066, 1.79187, 2.08342, 2.41054, 2.67613, + 0.150403, 0.278398, 0.792676, 0.97668, 1.21885, 1.40524, 1.77506, 2.16246, 2.54786, 2.74638, + 0.236301, 0.328633, 0.630867, 0.839915, 1.04235, 1.29887, 1.62775, 1.83949, 2.29893, 2.49396, + 0.337889, 0.49792, 0.711277, 0.85042, 0.992027, 1.24688, 1.71075, 2.08668, 2.52716, 2.70716, + 0.172215, 0.23654, 0.372897, 0.525146, 1.18258, 1.73573, 1.92703, 2.11462, 2.31917, 2.54278, + 0.415304, 0.624807, 0.906616, 1.11784, 1.44615, 1.66942, 1.94841, 2.17282, 2.50453, 2.67075, + 0.265417, 0.407241, 0.613894, 0.816534, 0.980063, 1.15606, 1.75675, 2.27485, 2.49719, 2.71224, + 0.27644, 0.468209, 0.649518, 0.816686, 1.19517, 1.35552, 1.54923, 1.93527, 2.21787, 2.42698, + 0.188925, 0.277012, 0.412665, 0.672627, 1.35481, 1.51452, 1.69999, 2.14455, 2.38219, 2.58608, + 0.24263, 0.352485, 0.912974, 1.34378, 1.60443, 1.80187, 2.01479, 2.19307, 2.46081, 2.632, + 0.190903, 0.285841, 0.44907, 0.760328, 0.954285, 1.18294, 1.69264, 1.87816, 2.27684, 2.46596, + 0.220659, 0.300374, 0.721694, 0.947306, 1.29833, 1.56298, 1.76062, 1.88825, 2.50644, 2.68968, + 0.213168, 0.290928, 0.695227, 0.918179, 1.37819, 1.63199, 1.84789, 2.00307, 2.35836, 2.61935, + 0.328586, 0.517244, 0.93732, 1.37624, 1.57484, 1.76435, 2.05863, 2.22433, 2.58444, 2.75665, + 0.248486, 0.367007, 0.562147, 0.750632, 0.902785, 1.14756, 1.63742, 1.91206, 2.41399, 2.6057, + 0.310691, 0.477895, 0.670796, 0.940507, 1.41829, 1.5635, 1.80514, 2.11408, 2.37636, 2.53516, + 0.256555, 0.41421, 0.559427, 0.981289, 1.19165, 1.37831, 1.6784, 1.84931, 2.5767, 2.75663, + 0.291424, 0.335003, 0.750149, 1.28965, 1.43721, 1.59999, 1.80318, 1.96741, 2.60175, 2.73376, + 0.195254, 0.279513, 0.451755, 0.649111, 0.828694, 1.60951, 1.91491, 2.09122, 2.31959, 2.5349, + 0.222304, 0.332624, 0.475678, 0.685205, 1.03033, 1.73722, 1.92098, 2.37829, 2.70672, 2.81773, + 0.164833, 0.240093, 0.359862, 0.801929, 1.51368, 1.64171, 2.04052, 2.24884, 2.48866, 2.71403, + 0.214777, 0.287322, 0.572644, 1.14507, 1.36711, 1.75269, 2.04242, 2.22207, 2.54305, 2.69789, + 0.226099, 0.330382, 0.474439, 0.687757, 0.799187, 1.31984, 1.94457, 2.0781, 2.3678, 2.50846, + 0.24454, 0.392163, 0.553692, 0.729765, 1.24786, 1.44838, 1.61759, 2.07464, 2.34005, 2.51806, + 0.175381, 0.314231, 0.446023, 0.797404, 1.32846, 1.43973, 1.79335, 1.93957, 2.4688, 2.72165, + 0.205808, 0.29367, 0.452447, 1.07427, 1.28823, 1.65563, 1.8575, 2.36469, 2.63981, 2.79814, + 0.253926, 0.392653, 0.587584, 0.800134, 0.97631, 1.18559, 1.57069, 1.82141, 2.09089, 2.34902, + 0.322461, 0.410912, 0.723569, 1.06064, 1.20152, 1.40036, 1.57919, 1.78876, 2.46024, 2.6166, + 0.211266, 0.304981, 0.436011, 0.771978, 1.49062, 1.67775, 1.88623, 2.1135, 2.32635, 2.72726, + 0.235012, 0.406911, 0.864785, 1.29148, 1.70829, 1.93855, 2.1799, 2.3524, 2.56379, 2.71145, + 0.176814, 0.26862, 0.445837, 0.823113, 1.02978, 1.27157, 1.62339, 1.81122, 2.40214, 2.61417, + 0.241865, 0.339268, 0.507509, 1.00368, 1.20435, 1.37256, 1.94079, 2.10137, 2.38561, 2.66998, + 0.230878, 0.334743, 0.50037, 0.879929, 1.02189, 1.53377, 1.97079, 2.12897, 2.56726, 2.71729, + 0.297505, 0.451574, 0.748848, 0.988527, 1.36624, 1.60667, 1.89466, 2.17448, 2.52143, 2.75917, + 0.199265, 0.271145, 0.49816, 0.854679, 1.1721, 1.36415, 1.76208, 1.96909, 2.17354, 2.31163, + 0.222173, 0.424864, 0.564942, 0.829809, 1.03817, 1.19405, 1.7206, 1.85809, 2.43176, 2.74146, + 0.181961, 0.226819, 0.390513, 0.556339, 1.0566, 1.55306, 2.12835, 2.25802, 2.6025, 2.80212, + 0.3576, 0.565047, 1.15301, 1.35031, 1.53358, 1.71854, 1.95789, 2.17535, 2.50565, 2.67849, + 0.162257, 0.236808, 0.374039, 0.570569, 0.748034, 1.17226, 1.82339, 2.05303, 2.51377, 2.77207, + 0.305794, 0.46587, 0.645121, 0.88265, 1.14129, 1.26686, 1.70158, 2.00288, 2.18412, 2.41125, + 0.231652, 0.380738, 0.549642, 0.83741, 1.22527, 1.33297, 1.85158, 2.11937, 2.31508, 2.73211, + 0.235449, 0.286771, 0.684809, 1.34666, 1.52663, 1.70348, 2.10149, 2.25455, 2.57718, 2.71899, + 0.23387, 0.446515, 0.60508, 0.814654, 1.05496, 1.1788, 1.63316, 1.84974, 2.13938, 2.73277, + 0.271706, 0.335152, 0.857227, 1.25374, 1.38719, 1.70217, 1.89677, 2.19111, 2.48, 2.60136, + 0.237386, 0.314549, 0.438339, 0.912164, 1.57776, 1.87779, 2.03279, 2.19704, 2.41232, 2.53648, + 0.361168, 0.574093, 1.02384, 1.46852, 1.69056, 1.91737, 2.18737, 2.33403, 2.6691, 2.80629, + 0.27848, 0.398742, 0.573342, 0.839212, 1.07389, 1.22209, 1.69168, 2.16526, 2.37741, 2.53688, + 0.286018, 0.447947, 0.61506, 0.849446, 1.31947, 1.46358, 1.76995, 2.00103, 2.18943, 2.45038, + 0.21944, 0.301601, 0.668534, 0.861094, 1.21, 1.49867, 1.74512, 1.87777, 2.31438, 2.6196, + 0.223591, 0.352153, 0.598841, 1.21789, 1.35908, 1.59174, 1.77109, 2.21386, 2.56154, 2.73542, + 0.176857, 0.236601, 0.395107, 0.634632, 1.13349, 1.33512, 1.77037, 1.98131, 2.20656, 2.33972, + 0.334735, 0.402265, 0.659168, 0.781639, 0.975228, 1.665, 1.87207, 2.04753, 2.47696, 2.57398, + 0.215968, 0.284755, 0.524241, 0.78146, 1.33481, 1.77238, 1.95388, 2.19421, 2.57825, 2.74194, + 0.298193, 0.489879, 0.812985, 1.18369, 1.49642, 1.67998, 2.10879, 2.31656, 2.67378, 2.85161, + 0.312989, 0.415446, 0.618011, 0.899096, 1.08368, 1.26338, 1.8874, 2.24306, 2.41945, 2.57048, + 0.244471, 0.431115, 0.601512, 0.813139, 1.10216, 1.22106, 1.69244, 2.03316, 2.2218, 2.61984, + 0.150949, 0.21906, 0.349217, 0.611327, 1.07711, 1.25055, 1.91552, 2.08398, 2.45, 2.79254, + 0.161611, 0.218964, 0.445377, 0.927863, 1.45115, 1.76846, 2.13001, 2.36672, 2.666, 2.81405, + 0.196, 0.297256, 0.497266, 0.6919, 1.08988, 1.27368, 1.51372, 2.00647, 2.27378, 2.57222, + 0.335268, 0.460795, 0.685187, 0.867664, 1.01381, 1.47955, 2.01199, 2.16848, 2.57264, 2.71756, + 0.257604, 0.340872, 0.499757, 0.843052, 1.39655, 1.83169, 2.03423, 2.17033, 2.42262, 2.5405, + 0.417663, 0.631718, 0.955424, 1.19732, 1.6598, 1.87988, 2.1688, 2.35905, 2.57809, 2.69825, + 0.162052, 0.251583, 0.4399, 0.660911, 0.903902, 1.3203, 1.62476, 1.77858, 2.53053, 2.79971, + 0.256861, 0.322803, 0.68537, 1.08644, 1.26328, 1.56988, 1.85165, 2.01495, 2.26471, 2.44701, + 0.125192, 0.176171, 0.336135, 0.7816, 1.20022, 1.43997, 1.80542, 2.07752, 2.46247, 2.73819, + 0.102286, 0.191322, 0.774556, 1.07615, 1.36946, 1.62715, 1.97301, 2.236, 2.60937, 2.81298, + 0.173442, 0.232622, 0.491622, 0.844157, 1.09524, 1.3708, 1.69697, 2.05141, 2.31606, 2.50205, + 0.257531, 0.343598, 0.654071, 0.838985, 1.0481, 1.48747, 1.72538, 1.89742, 2.43051, 2.586, + 0.1979, 0.276312, 0.440283, 0.705103, 1.26734, 1.7403, 1.93448, 2.15401, 2.4002, 2.62414, + 0.40959, 0.596785, 0.983751, 1.18177, 1.37115, 1.50238, 1.75828, 2.01857, 2.38005, 2.59215, + 0.231819, 0.33289, 0.483514, 0.644585, 0.816808, 0.926308, 1.4033, 2.23301, 2.46786, 2.67846, + 0.25861, 0.340064, 0.670485, 0.908467, 1.10761, 1.45624, 1.75958, 1.93218, 2.11312, 2.31013, + 0.184377, 0.249203, 0.410806, 0.587907, 1.3025, 1.51032, 1.72443, 1.98189, 2.2829, 2.42213, + 0.25411, 0.313328, 0.659859, 1.26582, 1.41295, 1.66593, 1.92715, 2.10198, 2.55145, 2.67303, + 0.161592, 0.23748, 0.376535, 0.637094, 0.823028, 1.13761, 1.69642, 1.87577, 2.40363, 2.63962, + 0.384501, 0.466812, 0.740791, 0.938093, 1.06235, 1.50928, 1.74914, 1.9178, 2.54816, 2.67151, + 0.333872, 0.419367, 0.638994, 1.09262, 1.52055, 1.64945, 1.86662, 2.14894, 2.34672, 2.50614, + 0.426216, 0.686997, 1.23588, 1.42885, 1.61159, 1.79286, 2.01759, 2.23372, 2.54777, 2.69661, + 0.262949, 0.367509, 0.530429, 0.741867, 0.872474, 1.0696, 1.74557, 2.06119, 2.28384, 2.49418, + 0.335782, 0.547236, 0.716211, 0.919077, 1.27569, 1.40844, 1.68512, 1.96739, 2.21764, 2.44668, + 0.227629, 0.330991, 0.486068, 1.11757, 1.30498, 1.51013, 1.75726, 1.94697, 2.62556, 2.7826, + 0.35985, 0.436633, 0.750634, 1.20151, 1.33757, 1.59484, 1.97027, 2.11384, 2.57381, 2.72996, + 0.211871, 0.304028, 0.512758, 0.663762, 1.08635, 1.63333, 1.81802, 2.12958, 2.39108, 2.60077, + 0.196092, 0.279726, 0.434488, 0.624802, 0.772358, 1.40438, 1.94878, 2.16092, 2.63, 2.77518, + 0.176304, 0.262521, 0.373719, 0.581101, 1.52011, 1.73617, 1.93323, 2.14017, 2.35813, 2.75352, + 0.254932, 0.381411, 0.806187, 1.10229, 1.53452, 1.75028, 1.9709, 2.15987, 2.45592, 2.65841, + 0.190385, 0.288656, 0.449066, 0.678174, 0.812376, 1.44933, 1.72866, 1.96632, 2.63881, 2.78955, + 0.251178, 0.386509, 0.609363, 0.797102, 1.02416, 1.18173, 1.45466, 2.01263, 2.49309, 2.69893, + 0.166654, 0.266226, 0.385171, 0.71199, 1.3979, 1.53235, 1.91597, 2.088, 2.56527, 2.78953, + 0.238453, 0.306036, 0.449309, 0.876277, 1.52144, 1.93398, 2.13442, 2.26799, 2.5376, 2.65825, + 0.161634, 0.219919, 0.353206, 0.524346, 0.961806, 1.20771, 1.68792, 1.91694, 2.16187, 2.32066, + 0.413612, 0.597095, 0.793763, 0.98629, 1.28179, 1.41266, 1.65246, 2.01609, 2.38416, 2.52858, + 0.228655, 0.341562, 0.480989, 0.988605, 1.371, 1.47742, 1.86103, 2.01585, 2.33975, 2.77315, + 0.259092, 0.597012, 0.985224, 1.32174, 1.64335, 1.95737, 2.28868, 2.49747, 2.71649, 2.84447, + 0.185652, 0.304664, 0.446232, 0.864434, 1.09179, 1.27377, 1.94257, 2.09554, 2.52465, 2.76824, + 0.176687, 0.256678, 0.745652, 0.934909, 1.28376, 1.44006, 1.76524, 2.12209, 2.3881, 2.59055, + 0.189805, 0.275637, 0.440995, 0.821356, 1.25602, 1.41098, 1.92978, 2.12014, 2.39603, 2.60464, + 0.266823, 0.337688, 0.819408, 1.13475, 1.2892, 1.77703, 1.98289, 2.22175, 2.59029, 2.6981, + 0.205348, 0.276512, 0.527305, 0.727412, 1.02465, 1.65398, 1.90418, 2.04661, 2.21792, 2.45566, + 0.293498, 0.424494, 0.613795, 0.95613, 1.13398, 1.3248, 1.80903, 1.95392, 2.29385, 2.57588, + 0.18312, 0.24965, 0.376204, 0.543914, 1.35083, 1.90722, 2.09255, 2.25571, 2.51439, 2.6879, + 0.541205, 0.789796, 1.05895, 1.26942, 1.5039, 1.70219, 1.97018, 2.17544, 2.49681, 2.65224, + 0.229326, 0.339475, 0.451881, 0.66121, 0.795832, 1.0738, 2.0271, 2.20637, 2.4789, 2.72678, + 0.330006, 0.506868, 0.673076, 0.887406, 1.22877, 1.34923, 1.78129, 2.08658, 2.27776, 2.48003, + 0.138389, 0.200001, 0.396259, 0.811975, 1.09071, 1.46041, 1.74549, 1.90427, 2.34825, 2.69989, + 0.176584, 0.242161, 0.37827, 1.17785, 1.56472, 1.67817, 1.95162, 2.12141, 2.58011, 2.73713, + 0.145852, 0.198423, 0.335644, 0.550505, 1.01973, 1.37119, 1.79763, 1.94383, 2.20749, 2.74647, + 0.385078, 0.503696, 0.703239, 1.06999, 1.36574, 1.47205, 1.82583, 2.15964, 2.37128, 2.52097, + 0.28495, 0.38805, 0.507352, 0.879125, 1.52353, 1.77624, 1.9296, 2.15756, 2.44799, 2.5864, + 0.491116, 0.756155, 1.2552, 1.52246, 1.77658, 2.02812, 2.28606, 2.42977, 2.67911, 2.77616, + 0.252477, 0.396081, 0.713022, 0.861502, 1.15222, 1.3708, 1.61401, 2.1448, 2.57407, 2.71253, + 0.282756, 0.438437, 0.613566, 0.847746, 1.26077, 1.37906, 1.6422, 2.13754, 2.36837, 2.52216, + 0.203971, 0.322195, 0.479842, 0.953133, 1.21128, 1.39763, 1.80081, 1.95452, 2.40348, 2.57371, + 0.264533, 0.358424, 0.628768, 1.11124, 1.34025, 1.50648, 1.99959, 2.19411, 2.46141, 2.66736, + 0.17773, 0.22368, 0.394553, 0.556177, 0.947415, 1.50064, 1.73353, 1.92605, 2.26147, 2.43605, + 0.314223, 0.363636, 0.727886, 0.85188, 1.05384, 1.79813, 1.97435, 2.1826, 2.538, 2.62968, + 0.201778, 0.2755, 0.404891, 0.747466, 1.50005, 1.84118, 1.99884, 2.22681, 2.48199, 2.66951, + 0.132164, 0.314955, 0.821473, 1.19604, 1.42659, 1.69993, 2.03686, 2.3235, 2.68547, 2.82896, + 0.223374, 0.347335, 0.50773, 0.773547, 0.967916, 1.13413, 1.9914, 2.30657, 2.52136, 2.78875, + 0.312742, 0.449784, 0.583287, 0.934234, 1.26857, 1.36506, 1.5693, 1.68705, 2.0773, 2.59502, + 0.124286, 0.162126, 0.29073, 0.654031, 1.23166, 1.53846, 1.89307, 2.18478, 2.56264, 2.79822, + 0.177049, 0.251654, 0.367891, 0.912504, 1.55758, 1.69305, 1.89899, 2.07214, 2.35016, 2.64604, + 0.240517, 0.378333, 0.547809, 0.754272, 0.973321, 1.10367, 1.57442, 2.02805, 2.21113, 2.56271, + 0.427795, 0.519003, 0.771284, 0.93724, 1.08662, 1.60988, 1.87875, 2.05279, 2.53412, 2.65715, + 0.22437, 0.317969, 0.439666, 0.812931, 1.3985, 1.62663, 1.79418, 2.114, 2.30916, 2.49684 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lspjmv2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + 0.005167, -0.03731, -0.002159, 0.016849, 0.130396, + 0.039445, 0.03168, -0.074412, -0.031499, 0.060536, + 0.019479, -0.030564, -0.048137, -0.056279, -0.027829, + 0.020585, -0.01127, 0.023913, -0.005706, 0.011407, + -0.023217, 0.107455, -0.037777, 0.00407, -0.017279, + -0.090444, 0.007641, 0.099001, -0.047913, -0.017199, + 0.0227, -0.063865, 0.047213, 0.043843, -0.036225, + 0.001312, -0.123861, -0.038988, 0.058666, 0.074541, + 0.039508, 0.1103, 0.013954, -0.119228, -0.035807, + -0.047392, 0.027035, -0.004412, -0.03265, -0.03715, + 0.002491, -0.045447, 0.15826, 0.022828, -0.030124, + -0.047856, 0.088744, -0.009678, 0.106688, 0.08769, + -0.027941, 0.044084, -0.0285, 0.018736, -0.069969, + -0.035358, -0.051568, -0.030459, -0.017899, 0.027632, + -0.018607, -0.123557, 0.019228, 0.057485, -0.028907, + 0.019057, 0.038151, -0.08022, 0.034222, 0.023081, + 0.021312, 0.041905, 0.112903, 0.024092, 0.093974, + -0.116679, 0.015344, -0.066059, -0.096437, 0.004041, + -0.022464, -0.11626, 0.047819, -0.003921, -0.073504, + 0.001975, -0.025869, 0.0282, 0.12269, 0.010627, + -0.035672, 0.078963, -0.009686, 0.000743, -0.147582, + 0.016932, -0.020291, -0.096896, -0.237875, -0.029121, + 0.017376, -0.04013, -0.053865, 0.15406, -0.013215, + 0.015215, -0.019023, -0.070604, 0.032265, 0.04034, + 0.102365, -0.022746, 0.019895, 0.05057, 0.008845, + -0.034134, 0.044441, -0.049387, -0.140481, 0.07257, + 0.013023, -0.006079, 0.037574, 0.004937, -0.081501, + 0.003696, 0.049908, 0.007355, 0.000403, 0.026006, + -0.008466, 0.08068, 0.061382, -0.108985, -0.08806, + -0.012275, -0.081061, 0.020333, -0.079001, 0.068724, + -0.014081, -0.042609, 0.093365, 0.04412, 0.000303, + 0.063391, 0.096574, -0.105424, 0.039041, 0.010412, + -0.054031, -0.084948, 0.080406, -0.035883, 0.137428, + 0.063037, 0.050562, 0.02469, -0.031394, 0.13032, + -0.015501, -0.078884, -0.076886, -0.013864, -0.073587, + 0.048778, 0.003814, -0.031125, 0.046897, 0.028304, + 0.048692, 0.132795, 0.06545, 0.059487, -0.042396, + -0.176999, 0.056943, -0.004135, -0.049378, -0.041083, + -0.039445, -0.016292, -0.00455, 0.06201, -0.079613, + -0.054566, -0.008476, -0.01671, 0.049202, 0.025758, + -0.078723, 0.092091, 0.096536, -0.065079, 0.021161, + 0.076657, 0.009203, -0.036866, -0.016559, 0.012823, + 0.008225, -0.003006, 0.108033, 0.04312, -0.06087, + -0.019346, 0.02279, -0.001728, 0.062304, -0.016965, + -0.001302, -0.01449, -0.041803, -0.034058, -0.197066, + -0.033655, -0.127217, -0.108681, -0.010571, -0.004705, + -0.015553, -0.086069, 0.034109, -0.101379, 0.002068, + -0.004003, -0.044637, -0.068617, 0.052228, -0.047812, + -0.043307, 0.035681, 0.042207, -0.055946, 0.055944, + -0.026792, -0.012601, -0.05671, -0.021094, 0.105842, + -0.025598, -0.078858, -0.013487, 0.030728, -0.031956, + 0.031444, 0.022763, 0.025364, 0.121366, 0.070736, + -0.084556, 0.098118, -0.024301, -0.058655, -0.043194, + -0.011752, -0.043781, 0.091051, -0.071201, -0.02098, + 0.082904, -0.031657, -0.088247, 0.066709, -0.079182, + -0.012151, 0.011796, -0.010589, 0.100656, 0.094539, + 0.035967, 0.025338, 0.071826, 0.009741, -0.040209, + 0.006866, -0.015095, -0.168469, -0.056133, 0.060145, + 0.04583, -0.068969, 0.034551, 0.015842, -0.092809, + 0.054699, 0.138744, 0.001726, 0.006927, 0.005167, + 0.016978, 0.046384, -0.060183, -0.040742, -0.072692, + -0.022489, -0.029728, -0.065018, -0.124741, 0.044927, + -0.029057, -0.037154, 0.031068, 0.060086, 0.009984, + 0.009311, -0.006957, -0.105508, 0.059637, -0.019564, + -0.068154, -0.066443, 0.000799, 0.028579, 0.097063, + 0.096936, 0.03023, -0.034623, -0.088918, 0.040334, + 0.019439, -0.050707, -0.003294, -0.028505, -0.053599, + 0.06246, -0.070688, -0.016465, -0.03568, 0.017378, + 0.009363, 0.048761, 0.043374, 0.039587, -0.023232, + -0.067033, 0.042663, 0.05407, -0.042797, -0.089391, + -0.030497, -0.050249, 0.059528, 0.089089, -0.029633, + 0.064125, -0.086614, -0.002005, 0.08062, 0.000502, + -0.00349, 0.097336, 0.099565, 0.015648, 0.006691, + 0.077668, 0.016572, 0.035404, -0.046026, 0.017237, + -0.048631, 0.009314, 0.141479, 0.017079, 0.043796, + -0.106474, 0.145951, 0.05774, 0.01125, -0.059443, + 0.027572, 0.02665, 0.008527, 0.002949, -0.03768, + -0.077991, -0.090617, 0.00342, -0.04601, 0.007354, + 0.019056, -0.128651, 0.016464, 0.004584, -0.030883, + -0.092069, 0.038976, -0.08184, 0.066695, -0.04734, + 0.003513, 0.040613, 0.046815, -0.023406, 0.062389, + 0.021759, 0.024928, -0.018922, -0.048006, 0.0638, + -0.014416, -0.050333, 0.042628, -0.114934, -0.10145, + 0.062139, 0.029295, -0.065908, 0.111463, 0.050781, + -0.022707, 0.135414, 0.003548, 0.134535, -0.048259, + -0.092344, -0.027727, 0.016343, -0.060786, -0.081502, + -0.005412, -0.026229, -0.143331, 0.052404, -0.077298, + -0.035919, -0.041968, -0.106108, -0.004369, 0.065028, + 0.09637, -0.053299, 0.043317, -0.049735, 0.049815, + 0.032324, 0.051309, -0.009607, -0.205917, 0.005023, + -0.054316, -0.022895, 0.099327, -0.006927, -0.076574, + -0.111024, 0.111026, 0.038381, -0.060368, 0.064238, + -0.034316, 0.026846, 0.02574, -0.076162, -0.163904, + 0.055955, -0.056885, 0.014831, -0.120715, 0.090938, + 0.035289, -0.036439, 0.060012, 0.080302, 0.036215, + 0.06525, 0.08303, -0.058784, 0.104826, -0.051805, + -0.011099, -0.00642, 0.053042, 0.024127, 0.092534, + 0.058569, -0.033442, 0.025186, -0.018222, 0.117744, + 0.044345, -0.042456, -0.043767, -0.021378, -0.121965, + 0.027371, 0.052731, -0.020316, 0.036912, 0.115357, + 0.03115, 0.041547, 0.059267, -0.039672, -0.086918, + -0.162369, 0.024801, 0.031725, 0.0834, -0.034463, + 0.000272, -0.008147, -0.002016, 0.131953, -0.092911, + -0.091944, -0.062864, -0.005221, 0.063647, -0.012658, + 0.042685, 0.067952, 0.038644, -0.153221, 0.096841, + 0.108299, 0.089446, -0.047164, 0.004196, -0.043268, + -0.035456, 0.050838, 0.070444, 0.084465, -0.07998, + -0.048916, 0.057726, 0.023894, 0.027653, 0.017775, + 0.015461, -0.030287, -0.022245, 0.052081, -0.150947, + -0.002682, -0.056774, -0.123366, -0.091754, 0.006536, + 0.006473, -0.143025, 0.05469, -0.043189, 0.03297, + 0.027446, 0.033127, -0.132722, -0.010417, -0.080097, + -0.018187, 0.001858, 0.11129, -0.090749, 0.059434, + -0.068738, 0.090679, -0.14507, -0.065277, 0.063514, + -0.003982, -0.056382, -0.003673, 0.015845, -0.073396, + 0.043688, 0.002836, 0.069211, 0.124852, -0.053313, + -0.040946, 0.07044, -0.107024, -0.019199, -0.033672, + -0.00144, 0.02168, 0.110595, -0.053452, -0.052426, + 0.035461, -0.028179, -0.049041, 0.02258, -0.010989, + -0.002913, -0.051691, -0.075881, 0.037241, 0.076377, + 0.034735, -0.031556, 0.073516, -0.001427, 0.016296, + -0.017537, 0.003346, -0.099774, -0.067624, -0.044257, + -0.018202, 0.030622, 0.012773, 0.046475, -0.121785, + -0.057265, 0.116179, -0.079916, 0.066396, 0.050104, + -0.013177, 0.057766, -0.047879, -0.109526, -0.146491, + 0.032675, -0.049318, -0.057045, -0.080068, 0.089621, + -0.046564, -0.029992, 0.040828, 0.029281, -0.037369, + -0.009731, -0.082145, -0.117622, 0.117077, 0.037369, + 0.00082, -0.106634, -0.007967, 0.000812, 0.140637, + 0.03653, 0.062121, -0.065504, -0.09493, 0.121336, + 0.01753, -0.01733, -0.040402, -0.018255, 0.010992, + 0.019746, -0.027564, 0.033588, 0.042466, -0.003143, + 0.013767, 0.084179, 0.033753, -0.017279, -0.009676, + -0.006452, 0.032645, 0.031852, -0.030975, -0.043384, + -0.005433, -0.015258, 0.053273, 0.054748, -0.064736, + 0.008959, -0.141223, -0.032957, -0.015079, 0.018198, + -0.001681, 0.143079, 0.076, 0.001037, -0.048744, + 0.022062, 0.02603, -0.008263, -0.050353, -0.023037, + -0.036477, -0.051733, 0.137823, -0.034438, -0.007573, + -0.004256, 0.064218, 0.075183, 0.095106, 0.026497, + 0.02636, 0.009791, -0.058039, 0.053315, -0.077817, + -0.033283, -0.081151, -0.05522, 0.004268, 0.017539, + -0.007329, -0.1172, 0.09322, 0.037359, 0.002718, + 0.010749, 0.018281, -0.0758, -0.024889, 0.00572, + 0.022129, 0.035613, 0.036187, 0.032246, 0.105439, + -0.073766, 0.016887, -0.059934, -0.049471, 0.07352, + -0.024041, -0.104642, 0.023557, -0.059746, -0.043871, + 0.022311, -0.00025, -0.074027, 0.198593, 0.102732, + 0.024478, 0.077658, -0.060042, -0.018229, -0.149648, + -0.009871, -0.105822, 0.007585, -0.161459, -0.041121, + -0.02146, 0.00902, -0.065018, 0.111801, -0.024953, + 0.074594, -0.026041, -0.062859, 0.009199, 0.069609, + 0.078672, -0.033414, 0.054128, 0.005408, -0.016273, + 0.052076, 0.10761, -0.067518, -0.0964, 0.033703, + -0.01435, -0.024676, 0.056254, -0.04377, -0.060847, + -0.004185, 0.07355, -0.05783, -0.016644, 0.029096, + 0.005755, 0.026472, 0.040449, -0.09195, -0.048538, + -0.034439, -0.107938, 0.090712, -0.117001, 0.04317, + -0.006505, -0.035277, 0.117316, 0.127002, 0.047906, + -0.001441, 0.118379, -0.132165, 0.00738, 0.023823, + -0.02012, -0.083725, 0.047284, 0.023795, 0.074123, + -0.013439, 0.024994, 0.060254, -0.06912, 0.166373, + -0.024228, -0.06315, -0.046506, -0.077202, -0.054592, + -0.006571, 0.010335, -0.006568, 0.003982, 0.075837, + 0.008643, 0.136339, -0.005502, 0.03391, -0.066379, + -0.127371, -0.006954, 0.03977, -0.070123, 0.060925, + -0.046386, -0.02642, -0.00528, 0.103509, -0.02231, + -0.00374, -0.014999, -0.03777, 0.080005, 0.025231, + -0.054995, 0.071017, 0.009442, -0.075737, 0.013441, + 0.051947, 0.027097, -0.070351, -0.055705, -0.021115, + 0.021387, 0.029232, 0.163331, -0.03238, 0.010008, + -0.011987, -0.028631, 0.002665, 0.01477, -0.009558, + -0.034325, 0.01583, -0.091253, -0.012677, -0.107378, + -0.034624, -0.047725, -0.10233, 0.042525, -0.006869, + 0.014048, -0.043127, 0.052384, -0.047473, 0.055102, + 0.009744, -0.033646, -0.081755, -0.001464, -0.016223, + -0.036697, -0.002279, 0.023279, -0.036221, 0.101478, + -0.058454, 0.065074, 0.003524, 0.00501, 0.097182, + -0.038171, -0.037943, -0.009994, -0.033355, -0.044552, + 0.041318, 0.065041, 9.2e-05, 0.100816, 0.029007, + -0.031803, 0.183537, -0.009617, -0.010544, -0.028465, + 0.0069, -0.014988, 0.09049, -0.174817, 0.027464, + 0.063314, -0.049281, -0.001567, 0.091421, -0.078603, + -0.004869, -0.063266, -0.001922, 0.069338, 0.081771, + 0.058737, 0.073195, 0.081676, -0.047808, -0.025797, + -0.004185, 0.033203, -0.125472, -0.108148, 0.031258, + 0.035192, 0.029957, 0.046675, 0.047238, -0.088197, + 0.033315, 0.114919, -0.04918, 0.025707, 0.053843, + 0.035182, 0.140206, -0.05866, -0.025978, -0.019658, + -0.014847, -0.021051, -0.034385, -0.121789, 0.173406, + -0.112251, -0.022333, 0.071206, 0.028998, 0.046468, + 0.067704, -0.026159, -0.158316, 0.014936, 0.040216, + -0.010137, -0.053492, 0.004935, -0.011277, 0.073852, + 0.091261, 0.114794, -0.01406, -0.051545, 0.077316, + 0.101258, -0.046137, 0.022994, -0.066767, -0.065537, + 0.049952, -0.043582, 0.012823, 0.009313, 0.036343, + 0.054885, 0.037796, 0.02194, 0.013211, 0.006019, + -0.099578, 0.058596, -0.045463, -0.015632, -0.087141, + -0.019273, -0.03314, 0.043796, 0.119057, -0.081813, + -0.021538, -0.070453, -0.052551, 0.077213, 9.4e-05, + 0.050268, 0.092271, 0.051688, -0.025224, 0.075437, + 0.027983, 0.069205, 0.031787, -0.099975, 0.004387, + -0.002747, -0.056567, 0.161394, 0.000164, 0.084189, + -0.124844, 0.050329, 0.009844, 0.055877, 0.055701, + 0.030479, 0.028843, -0.001076, -0.017173, -0.10277, + -0.038426, -0.133841, -0.03584, -0.072046, 0.020206, + 0.016438, -0.097885, 0.041857, 0.034601, 0.030422, + -0.089192, -0.014112, -0.052276, 0.012005, -0.029335, + -0.011331, 0.101833, 0.063827, 0.044288, 0.101597, + -0.034689, -0.027434, -0.017801, -0.079224, 0.067103, + -0.027456, -0.098034, 0.009448, -0.038986, -0.156729, + 0.085023, 0.033136, -0.021343, 0.110701, -0.011901, + -0.006484, 0.082023, -0.027094, 0.091208, -0.013163, + -0.012223, 0.005933, 0.010653, -0.098119, -0.005304, + -0.021061, -0.058077, -0.073035, 0.097856, -0.102847, + -0.035329, -0.092754, -0.101463, -0.048671, 0.055015, + 0.102145, 0.062017, 0.016002, 0.036489, 0.059, + 0.042861, 0.025447, -0.019735, -0.107841, -0.033752, + -0.043982, -0.067059, 0.051092, 0.025235, -0.147107, + -0.016269, 0.123009, 0.035894, -0.020453, 0.040013, + 0.015557, 0.015825, 0.080712, -0.06963, -0.149739, + 0.022006, -0.008848, 0.040169, -0.095688, 0.059575, + -0.030641, -0.061353, 0.046302, 0.104489, 0.043372, + -0.001579, 0.059737, -0.104073, 0.042342, -0.048611, + -0.013811, -0.056255, 0.107179, 0.057433, 0.084815, + 0.030217, 0.02236, -0.040342, -0.028775, 0.120588, + 0.04127, -0.045775, -0.030195, -0.106859, -0.104349, + 0.072418, -0.003603, -0.013072, 0.040728, 0.086869, + 0.091943, 0.066517, 0.024442, -0.030929, -0.03292, + -0.160336, -0.010347, -0.068458, 0.017458, 0.044823, + 0.050694, 0.067625, 0.040303, 0.113164, -0.038747, + -0.065558, -0.106357, -0.028352, 0.121488, 0.026548, + -0.00782, 0.054872, 0.094674, -0.099533, 0.005231, + 0.118132, 0.04278, -0.065079, 0.03144, 0.043229, + -0.050024, 0.015943, 0.073917, 0.034049, 0.010548, + -0.024979, 0.022639, 0.027795, 0.049491, 0.048762, + -0.002738, -0.010783, -0.027637, -0.006986, -0.104141, + -0.066719, -0.061742, -0.067028, -0.053057, -0.003478, + -0.050948, -0.122196, 0.022082, 0.002595, 0.015094, + 0.006014, 0.005784, -0.184537, -0.034872, -0.036104, + 0.055412, 0.006886, 0.103488, -0.063001, 0.096665, + -0.035533, 0.009847, -0.095114, 0.008588, 0.023736, + -0.034278, -0.11197, -0.041172, 0.03973, -0.102952, + 0.063775, 0.039273, 0.109863, 0.0918, 0.030306, + -0.082206, 0.089449, -0.058478, -0.029341, 0.038389, + 0.061057, -0.024711, 0.111044, -0.035079, -0.027985, + 0.01457, 0.002046, -0.031545, 0.058848, -0.0195, + -0.002475, -0.025589, -0.144358, 0.063478, 0.124927, + -0.014094, -0.01097, 0.031621, -0.040043, 0.004389, + 0.025003, 0.052397, -0.054526, -0.073469, 0.026795, + -0.024697, 0.024739, 0.118299, 0.014948, -0.132109, + 0.020192, 0.037815, -0.09027, 0.049313, 0.082764, + -0.022642, -0.006053, -0.038073, -0.057363, -0.107347, + 0.033166, -0.027556, -0.019765, -0.111958, 0.027773, + -0.063001, -0.052998, 0.019353, -0.009646, -0.01127, + 0.011872, -0.006508, -0.122226, 0.059824, 0.041779, + 0.016445, -0.03189, -0.03631, 0.013085, 0.091631, + 0.062866, 0.054501, -0.117523, -0.010907, 0.087026, + -0.014974, -0.03592, -0.048565, -0.019246, -0.043405, + -0.006959, 0.006211, 0.04237, 0.014603, -0.006435, + 0.019149, 0.078038, -0.020556, 0.018114, -0.036521, + -0.054036, 0.007325, 0.056349, -0.033497, -0.02596, + 0.050184, -0.066536, 0.091501, 0.071356, -0.049044, + -0.032263, -0.095268, -0.008784, 0.049033, 0.036929, + 0.020357, 0.152151, 0.040814, -0.063159, -0.024324, + -0.017084, 0.011876, -0.015442, -0.019811, -0.000366, + -0.0027, -0.072981, 0.109288, 0.007473, -0.049442, + -0.05404, 0.051947, 0.019359, 0.12916, 0.021981, + 0.002248, 0.035262, -0.023141, 0.064666, -0.078273, + -0.031663, -0.031343, -0.006058, -0.045421, 0.017466, + -0.067122, -0.130784, 0.067057, 0.05246, -0.041165, + -0.004411, 0.046453, -0.055461, 0.048162, -0.009687, + 0.02153, 0.007211, 0.104764, 0.079849, 0.086248, + -0.072791, 0.001112, -0.027964, -0.071233, -0.013339, + 0.007979, -0.118231, 0.076826, -0.060762, -0.084358, + -0.011447, 0.009765, 0.014163, 0.164784, -0.015892, + -0.020756, 0.152509, -0.014014, -0.041853, -0.117008, + -0.011755, -0.005766, -0.086896, -0.13965, -0.032342, + 0.025651, -0.007843, -0.039073, 0.103397, -0.042591, + -0.005971, -0.001324, -0.053945, -0.000716, 0.048977, + 0.130185, 0.028226, 0.061179, 0.024489, -0.021939, + -0.007019, 0.054336, -0.01004, -0.095411, 0.082406, + -0.03213, -0.015054, 0.033059, 0.002802, -0.080159, + -0.022452, 0.077426, -0.015314, 0.033583, 0.028479, + 0.023293, 0.035078, 0.006442, -0.110541, -0.106244, + -0.034737, -0.10414, -0.03457, -0.114316, 0.079382, + 0.006009, 0.003901, 0.080081, 0.055082, 0.012896, + 0.064981, 0.057219, -0.112986, 0.003906, -0.028414, + -0.012383, -0.054541, 0.077483, 0.004267, 0.123567, + 0.007369, 0.099856, 0.023273, -0.028194, 0.12203, + -0.036635, -0.126589, -0.034567, -0.028288, -0.06504, + 0.01428, 0.011435, -0.004867, 0.043901, 0.035395, + 0.028599, 0.075858, 0.11846, 0.070581, -0.051903, + -0.170905, 0.050352, 0.053514, -0.017139, 0.021748, + -0.09661, 0.008904, -0.001049, 0.078787, -0.101201, + -0.026229, -0.019757, -0.035771, 0.054142, 0.068041, + -0.020328, 0.099979, 0.096623, -0.046957, -0.001733, + 0.049586, 0.052458, -0.031724, -0.028332, -0.005418, + 0.04671, 0.014238, 0.133125, -0.005428, -0.080055, + -0.033226, 0.034007, 0.025272, 0.033924, -0.044662, + -0.03469, -0.079173, -0.160689, -0.153893, -0.228771, + -0.00245, -0.083966, -0.168294, 0.010694, -0.012167, + 4e-06, -0.044377, 0.023373, -0.077437, 0.012178, + -0.015899, -0.010828, -0.062847, 0.029927, -0.074557, + -0.053306, 0.049688, 0.057017, -0.022571, 0.015337, + -0.046545, 0.018895, -0.024848, -0.004424, 0.165442, + -0.060201, -0.098629, -0.06519, 0.036582, -0.038566, + 0.051453, 0.093478, 0.039619, 0.117535, 0.090386, + -0.029366, 0.108075, -0.016568, -0.093576, -0.048799, + -0.045599, -0.023619, 0.070072, -0.109294, 0.001548, + 0.076285, -0.091274, -0.068829, 0.000215, -0.046519, + -0.022512, -0.027067, 0.014905, 0.079017, 0.140699, + 0.061141, 0.009178, 0.097811, 0.033468, -0.006666, + 0.007163, -0.007578, -0.124238, -0.025271, 0.017581, + 0.042405, -0.034252, 0.06489, 0.0025, -0.139083, + 0.009733, 0.158179, 0.014474, 0.038913, 0.05629, + -0.004998, 0.075401, -0.030557, -0.038595, -0.04907, + -0.01468, -0.076306, -0.132365, -0.177693, 0.09176, + -0.057238, -0.072379, 0.050877, 0.051489, 0.028125, + 0.004991, 0.032621, -0.167359, 0.041002, -0.007072, + -0.086405, -0.042263, -0.019757, -0.011524, 0.066004, + 0.08567, 0.008071, -0.013614, -0.062142, 0.08328, + 0.000887, -0.07582, 0.008295, -0.020136, -0.016886, + 0.089657, -0.10626, -0.051491, -0.012687, 0.054778, + 0.011535, 0.086613, 0.053803, 0.027164, -0.023825, + -0.040009, 0.080987, 0.026309, -0.000334, -0.085288, + -0.024208, -0.08504, 0.096077, 0.120527, -0.044181, + 0.003034, -0.091142, 0.006471, 0.115971, -0.026358, + 0.003489, 0.083633, 0.109975, -0.029425, 0.061726, + 0.056115, -0.006711, 0.013158, -0.062917, -0.015029, + 0.003354, 0.031574, 0.119045, 0.022859, 0.023777, + -0.068292, 0.115604, 0.031617, 0.008953, 0.006943, + 0.01442, 0.008569, -0.031547, -0.006857, -0.05169, + -0.086683, -0.108339, 0.005093, -0.108646, -0.03472, + 0.054273, -0.096753, 0.050806, -0.021115, -0.025278, + -0.079997, 0.027008, -0.034211, 0.090949, 0.005678, + 0.019288, 0.042083, 0.062119, 0.019301, 0.040859, + -0.009113, 0.022427, -0.004019, -0.06089, 0.032884, + -0.012373, -0.037976, 0.017625, -0.079369, -0.050788, + 0.07972, -0.039347, -0.085324, 0.091044, 0.026653, + -0.063122, 0.099371, -0.024736, 0.084631, -0.100421, + -0.073313, 0.014317, 0.022555, -0.116051, -0.063966, + -0.009688, -0.063666, -0.131709, 0.016744, -0.135028, + -0.003708, -0.043685, -0.121631, -0.03693, 0.125776, + 0.084333, 0.010114, 0.071231, -0.010395, 0.059391, + 0.01776, 0.033034, -0.018996, -0.13054, 0.025758, + -0.018261, -0.060044, 0.127025, -0.032724, -0.107299, + -0.064538, 0.090073, -0.010186, -0.066127, 0.107025, + -0.01094, 0.003083, 0.01903, -0.023935, -0.140176, + 0.003549, -0.042402, -0.010695, -0.185915, 0.060835, + 0.005405, -0.013822, 0.029205, 0.079338, 0.068155, + 0.071485, 0.030282, -0.087207, 0.07348, -0.02794, + 0.004896, -0.033246, 0.072637, 0.018017, 0.054712, + 0.026184, -0.005287, 0.034456, -0.036753, 0.079232, + 0.072707, 0.004506, -0.039353, -0.01556, -0.071466, + 0.010257, 0.067446, -0.006598, 0.047396, 0.072218, + 0.023405, 0.082663, 0.015319, -0.035436, -0.075461, + -0.124036, -0.032046, 0.060837, 0.010231, -0.053024, + 0.0228, 0.042891, -0.041549, 0.132395, -0.09533, + -0.077091, -0.058554, -0.070632, 0.04757, 0.031856, + 0.000127, 0.114996, 0.05866, -0.092472, 0.064503, + 0.09645, 0.0662, -0.001059, 0.039487, -0.032859, + -0.065721, 0.001601, 0.088037, 0.059828, -0.047411, + -0.077714, 0.010275, 0.013629, 0.003304, 0.005407, + 0.000665, 0.012927, -0.077525, 0.069202, -0.157417, + 0.014547, -0.095965, -0.087546, -0.067375, -0.027867, + 0.005458, -0.095839, 0.105294, -0.044892, 0.045151, + -0.001349, 0.038356, -0.127152, -0.080503, -0.105423, + -0.018484, 0.008439, 0.104398, -0.027959, 0.082086, + -0.020605, 0.042785, -0.109139, -0.025958, 0.079733, + 0.036289, -0.083773, -0.033819, 0.032566, -0.065556, + 0.006659, 0.00209, 0.097027, 0.115715, -0.013271, + -0.067514, 0.128365, -0.089129, 0.02616, -0.040584, + -0.002443, -0.017254, 0.129204, -0.110078, -0.064943, + 0.089215, -0.022299, -0.034959, 0.022446, -0.019254, + -0.0389, -0.069862, -0.07054, 0.069949, 0.111993, + -0.006311, -0.009057, 0.094278, -0.014932, 0.003657, + -0.019323, 0.026145, -0.062611, -0.073753, -0.007182, + 0.014101, 0.015776, 0.052537, 0.064728, -0.160187, + -0.005122, 0.076356, -0.104763, 0.091493, 0.020225, + -0.000433, 0.062698, -0.060457, -0.14754, -0.066168, + 0.007195, -0.061498, -0.037801, -0.039763, 0.059551, + -0.02841, -0.07451, 0.057667, 0.020584, -0.04251, + -0.025311, -0.037825, -0.18801, 0.077423, 0.030749, + -0.025465, -0.067541, 0.003073, -0.049778, 0.127789, + 0.002786, 0.120009, -0.067812, -0.026565, 0.111272, + 0.023219, -0.024403, -0.014507, -0.048624, 0.022163, + 0.014596, -0.052136, 0.00158, 0.064595, 0.017963, + 0.02133, 0.098862, -0.009253, -0.041062, 0.008903, + -0.013829, 0.031967, 0.076571, -0.005348, -0.04401, + 0.031252, 0.000369, 0.036818, 0.072854, -0.038569, + 0.004161, -0.128017, -0.053152, 0.050896, -0.015212, + -0.036159, 0.097995, 0.068397, -0.048472, -0.056131, + -0.01192, 0.059188, 0.010215, -0.061152, -0.011717, + -0.035949, -0.057039, 0.090859, -0.029682, 0.041466, + -0.025106, 0.131191, 0.059327, 0.085383, 0.021699, + 0.04923, 0.03663, -0.077086, 0.017806, -0.08879, + 0.00404, -0.069533, -0.026785, 0.009666, 0.014017, + -0.055897, -0.096299, 0.120693, 0.029995, 0.032602, + -0.001365, 0.034015, -0.053512, 0.001573, -0.01917, + 0.003956, 0.006452, 0.067313, 0.028301, 0.160615, + -0.053111, 0.01399, -0.02706, -0.013638, 0.039376, + -0.054462, -0.096553, 0.079994, -0.043791, -0.025051, + -0.003222, 0.019418, -0.049525, 0.151136, 0.034123, + 0.055117, 0.058918, -0.017393, 0.026169, -0.12638, + -0.019008, -0.028939, -0.014027, -0.173373, -0.032841, + -0.00337, 0.03968, -0.118311, 0.114094, -0.041869, + 0.041121, -0.038391, -0.096074, -0.032479, 0.060222, + 0.063968, -0.024528, 0.018158, -0.009892, -0.043882, + -0.005004, 0.1298, -0.025438, -0.121186, 0.04986, + 0.010448, -0.040388, 0.061853, -0.017304, -0.035088, + -0.008678, 0.061476, -0.039493, -0.005055, 0.079169, + 0.046134, 0.00977, 0.068294, -0.078965, -0.043792, + -0.030529, -0.053845, 0.053853, -0.140682, 0.111461, + 0.003549, -0.014939, 0.148955, 0.072861, 0.004332, + 0.015386, 0.062006, -0.122325, -0.032529, 0.010241, + -0.047982, -0.12644, 0.05584, 0.067128, 0.101189, + -0.00263, 0.031969, 0.046076, -0.080194, 0.10474, + -0.033486, -0.077818, -0.058697, -0.095258, -0.111074, + 0.037236, 0.011711, 0.001113, -0.005664, 0.048588, + 0.041131, 0.098257, 0.033126, 0.029317, -0.095311, + -0.071555, -0.039999, 0.026678, -0.072182, 0.035031, + -0.007997, -0.048174, -0.006796, 0.075959, -0.05206, + -0.007645, 0.037076, -0.035574, 0.085576, 0.034126, + -0.050676, 0.05143, 0.031999, -0.134308, -0.001489, + 0.084564, -0.018394, -0.09741, -0.042931, -0.025608, + -0.025489, 0.041919, 0.142482, 0.004617, -0.041085, + -0.028816, -0.015527, -0.031005, 0.028405, -0.02224, + -0.067737, -0.025241, -0.052578, 0.012322, -0.120556, + 0.016278, -0.081744, -0.09916, 0.025144, 0.025441, + 0.003176, -0.073871, 0.031718, -0.028622, 0.029031, + 0.01791, -0.030693, -0.104215, -0.015422, -0.065738, + -0.048346, -0.012847, 0.046849, -0.008621, 0.058771, + -0.054495, 0.031597, -0.038844, 0.043138, 0.092588, + -0.071371, -0.059093, -0.001197, 0.001766, -0.074762, + 0.02947, 0.089616, 0.005009, 0.052977, 0.015899, + -0.045424, 0.158466, -0.038717, -0.032506, 0.028687, + 0.011435, -0.006772, 0.047605, -0.144659, -0.031229, + 0.073577, 0.01153, -0.008172, 0.058883, -0.088412, + 0.033615, -0.03412, -0.030701, 0.101215, 0.096645, + 0.027368, 0.041249, 0.081502, -0.02544, 0.007592, + 0.059893, 0.012106, -0.112009, -0.114692, 0.016397, + 0.087068, 0.016199, 0.051263, 0.011915, -0.085364, + 0.026046, 0.145258, -0.047521, 0.077134, -0.000345, + 0.034532, 0.099801, -0.087591, -0.059719, -0.058671, + 0.022737, -0.001887, -0.107049, -0.116757, 0.134115, + -0.055403, 0.005157, 0.067618, 0.081074, 0.071787, + 0.063802, -0.00343, -0.106491, 0.017543, 0.002214, + -0.013785, -0.032962, 0.010084, 0.024325, 0.045963, + 0.059883, 0.072282, -0.008608, -0.015127, 0.048225, + 0.041752, -0.068845, 0.012227, -0.090748, -0.035309, + 0.045353, -0.078624, -0.019489, 0.035531, 0.058571, + 0.045414, 0.039032, -0.011106, 0.048787, -0.025336, + -0.084893, 0.031896, 0.01085, 0.012526, -0.053205, + 0.016952, -0.044041, 0.068766, 0.097328, -0.122229, + 0.027016, -0.051759, -0.057246, 0.074566, 0.006201, + 0.069904, 0.100068, 0.076124, 0.004278, 0.029466, + 0.045229, 0.055683, 0.01879, -0.067806, 0.039373, + 0.029179, -0.036787, 0.129921, -0.028993, 0.037711, + -0.105011, 0.138747, -0.00437, 0.05208, 0.050835, + 0.025511, -0.002962, 0.007852, -0.055234, -0.075055, + 0.00046, -0.089231, -0.030467, -0.080347, 0.007488, + 0.06746, -0.076368, 0.084991, 0.039544, 0.033391, + -0.044318, 0.00639, -0.079387, -0.002909, -0.029708, + -0.047882, 0.06304, 0.065719, 0.021811, 0.070945, + -0.007571, -0.001302, -0.064119, -0.068005, 0.05104, + -0.017747, -0.063938, 0.018673, -0.038391, -0.099966, + 0.057475, -0.007669, 0.009384, 0.109283, 0.012248, + -0.048858, 0.092498, 0.011967, 0.061525, -0.028819, + -0.015131, -0.02416, -0.03322, -0.101648, -0.01798, + -0.003342, -0.049829, -0.125096, 0.128241, -0.047377, + -0.028943, -0.109072, -0.066133, -0.015454, 0.098334, + 0.053371, 0.011324, 0.042781, 0.044313, 0.06251, + 0.098408, 0.06541, -0.040693, -0.116351, -0.032327, + -0.013634, -0.058591, 0.081507, 0.042019, -0.09977, + -0.018275, 0.084624, -0.007512, -0.041113, 0.054203, + 0.017879, -0.029747, 0.059865, -0.048281, -0.111513, + -0.022478, 0.002059, 0.022383, -0.12536, 0.058216, + 0.002386, -0.0816, 0.049288, 0.157428, 0.057724, + 0.005046, 0.102125, -0.083473, 0.044059, -0.094864, + 0.03912, -0.063306, 0.057341, 0.060519, 0.107383, + 0.007076, -0.009373, -0.012555, -0.06663, 0.117121, + 0.025254, -0.008796, -0.062102, -0.083164, -0.079007, + 0.084839, 0.042308, -0.055353, 0.036386, 0.132641, + 0.084464, 0.056288, -0.011636, -0.059554, -0.087748, + -0.147377, -0.052414, -0.010203, -0.009159, -0.018829, + 0.009621, 0.061633, 0.015716, 0.086332, -0.061465, + -0.011833, -0.062998, -0.021168, 0.125194, 0.045025, + 0.052316, 0.02572, 0.095155, -0.093252, 0.02872, + 0.056113, 0.063321, -0.045315, 0.025199, 0.023591, + -0.070481, 0.07235, 0.092458, 0.047973, -0.025439, + -0.001281, 0.021028, 0.034576, 0.084779, 0.006867, + -0.010323, -0.04633, -0.009172, 0.030485, -0.117679, + -0.021782, -0.034737, -0.086292, -0.045885, 0.009655, + -0.037167, -0.123331, 0.017291, -0.028319, 0.071447, + -0.05718, -0.032912, -0.139418, -0.025966, -0.039305, + 0.009411, -0.054017, 0.076307, -0.060252, 0.110087, + -0.061366, 0.038897, -0.098107, 0.046119, 0.043021, + -0.02913, -0.096885, 0.007623, 0.090513, -0.097416, + 0.053264, 0.058296, 0.054372, 0.060769, 0.015586, + -0.067956, 0.059996, -0.03785, 0.005986, 0.000778, + 0.045873, -0.065546, 0.0779, -0.085638, 0.000698, + 0.027694, -0.021241, -0.002777, 0.034509, -0.048173, + 0.009988, 0.001008, -0.077434, 0.026002, 0.13949, + 0.00891, 0.007791, 0.059292, -0.057047, 0.014127, + -0.022959, 0.08571, -0.068087, -0.081561, 0.005935, + 0.007577, 0.061544, 0.076542, 0.00166, -0.113279, + 0.024973, 0.08675, -0.061674, 0.095059, 0.089352, + -0.024436, 0.024181, -0.016117, -0.073634, -0.067986, + 0.074701, -0.046868, -0.054634, -0.092485, 0.006662, + -0.033256, -0.053774, 0.049001, -0.002339, 0.013545, + -0.006432, -0.012089, -0.086842, 0.104105, 0.061991 +}; + /* /home/metala/projects/smesh/asko/src/codebook/lspjmv3.txt */ +#ifdef __EMBEDDED__ +static const float codes2[] = { +#else +static float codes2[] = { +#endif + 0.007066, 0.075781, -0.070082, -0.092014, -0.066477, + 0.09051, 0.106622, 0.025911, -0.01676, 0.003724, + -0.024628, 0.058332, 0.012876, 0.059557, -0.002092, + -0.065092, -0.096975, -0.041837, -0.002432, 0.058918, + 0.014358, 0.080049, -0.008803, -0.002091, -0.097584, + 0.085323, -0.026053, -0.086585, -0.009541, 0.130555, + 0.045391, 0.037557, 0.074726, -0.050453, 0.033517, + -0.035576, -0.084211, -0.08643, 0.00891, -0.072674, + -0.098699, -0.02454, -0.048972, -0.066975, -0.048791, + 0.032184, 0.070992, -0.014416, 0.141892, -0.044249, + -0.108921, -0.02045, 0.115988, 0.011287, -0.026273, + 0.024341, 0.138519, -0.036467, 0.020684, 0.074258, + -0.053563, 0.077463, 0.072166, 0.032112, -0.079303, + -0.025039, 0.079675, 0.094211, -0.115754, 0.038892, + 0.050897, -0.024639, 0.057826, -0.110429, 0.071184, + 0.015309, -0.034027, -0.055726, 0.043179, -0.063089, + 0.043359, -0.011698, 0.006637, 0.002751, 0.03011, + -0.001261, 0.11147, 0.043277, -0.004205, -0.021599, + -0.005698, 0.058842, 0.168422, 0.059313, -0.007971, + -0.087599, 0.073891, -0.083238, 0.099279, -0.017364, + -0.018429, 0.01404, -0.014864, -0.111512, 0.08945, + -0.028498, -0.087983, -0.07732, -0.062602, 0.000328, + -0.027152, -0.093796, 0.111381, -0.018603, 0.092394, + -0.007256, 0.025391, 0.011454, 0.012802, -0.04168, + 0.008078, 0.020905, -0.105401, -0.083265, 0.027756, + -0.04963, -0.044085, -0.051424, 0.104125, -0.000779, + -0.063079, -0.130699, 0.0705, 0.033468, -0.019802, + -0.061011, 0.094839, -0.040122, 0.118409, 0.05695, + 0.086391, -0.006615, 0.045337, -0.04419, -0.106474, + -0.081912, 0.067557, -0.031649, -0.014437, 0.057585, + -0.121755, -0.049113, 0.057109, -0.049872, 0.044104, + 0.064705, -0.091589, 0.037286, -0.048606, -0.045398, + 0.003456, 0.05723, 0.006262, -0.055206, -0.063871, + -0.005249, 0.081783, 0.134969, -0.002331, 0.052643, + -0.093346, 0.072093, 0.116025, -0.031453, -0.006012, + -0.038574, -0.030841, 0.010288, 0.02442, 0.051657, + -0.086584, 0.046381, 0.00541, 0.052622, -0.072741, + 0.079023, 0.078099, -0.093912, 0.005477, -0.006721, + 0.100232, -0.017587, 0.044819, 0.036655, 0.02158, + -0.006829, -0.050076, -0.00302, 0.088246, 0.01356, + -0.01569, 0.012477, -0.052595, -0.048861, -0.033688, + 0.055615, 0.092298, -0.066194, 0.016416, -0.066059, + 0.046976, 0.003023, 0.104646, 0.109136, 0.018293, + -0.016507, -0.006859, 0.004326, 0.070843, 0.14075, + 0.025774, 0.03473, -0.07959, 0.050054, -0.10795, + 0.002378, 0.097498, 0.027111, -0.122953, -0.002423, + -0.020539, -0.063263, -0.095493, -0.157361, -0.039183, + 0.025721, 0.026897, -0.0012, 0.033997, -0.001749, + 0.061593, -0.013053, -0.106317, -0.06819, 0.046352, + -0.05606, 0.157084, -0.049365, 0.053959, -0.051065, + -0.047672, 0.08157, 0.064342, -0.030705, -0.070806, + -0.076503, -0.059471, 0.012419, 0.073968, -0.026179, + -0.038473, 0.059013, -0.035783, -0.030057, -0.036346, + -0.052692, -0.015346, -0.022687, -0.035279, 0.013314, + 0.068397, -0.046609, -0.009593, -0.040796, 0.157438, + -0.07536, -0.110464, 0.031839, -0.029035, -0.015222, + 0.041013, -0.099212, -0.10892, -0.008627, 0.012095, + 0.020855, 0.009935, -0.086917, 0.058827, -0.006536, + 0.022104, -0.005013, 0.003496, 0.046663, -0.051061, + -0.036803, -0.067317, -0.007075, 0.18087, -0.027434, + -0.025056, -0.039341, -0.073918, -0.00318, -0.11093, + -0.042711, 0.005519, -0.035005, -0.088419, 0.170942, + 0.001503, -0.121485, 0.066383, -0.067346, 0.005643, + 0.080088, -0.042562, -0.006668, -0.036538, 0.020683, + 0.042848, 0.027852, -0.029088, -0.156468, 0.006503, + 0.037716, 0.032082, 0.038416, 0.021835, -0.106963, + -0.043017, 0.018166, 0.070409, -0.005426, -0.035585, + -0.111071, -0.039986, 0.05043, 0.035157, 0.066902, + -0.040684, 0.060527, 0.036225, 0.002527, -0.015087, + 0.059243, 0.021268, -0.010682, -0.018434, 0.059128, + 0.111314, -0.05407, 0.105744, -0.051476, -0.01297, + -0.000358, -0.099249, -0.077385, 0.069924, -0.039101, + -0.072139, -0.049069, -0.088018, 0.006144, 0.000712, + 0.08103, 0.021987, -0.046031, 0.058087, -0.00132, + -0.046851, -0.011062, 0.108321, -0.001146, -0.071193, + 0.044973, -0.002915, -0.003323, 0.041735, 0.094566, + 0.05353, 0.035927, 0.100282, 0.059082, -0.054059, + -0.012158, -0.035417, 0.020412, -0.073193, 0.059296, + -0.040489, -0.09525, -0.003821, -0.084904, 0.053925, + 0.109183, -0.005862, -0.036538, 0.080962, -0.040647, + 0.02007, 0.057778, -0.020197, -0.079626, -0.003186, + -0.050855, 0.128185, 0.034731, 0.05746, -0.035236, + -0.057096, -0.001238, 0.122018, -0.071204, -0.047253, + -0.051767, 0.048301, -0.052678, 0.02599, -0.017481, + -0.029379, 0.030738, 0.047207, -0.047864, -0.033561, + 0.029884, -0.091175, -0.085446, -0.02614, 0.092628, + 0.067706, -0.085617, 0.081433, 0.047305, 0.031945, + -0.048728, -0.040387, 0.046206, 0.010578, -0.037639, + 0.011328, -0.042458, -0.149597, 0.033882, -0.061869, + 0.0088, 0.057754, -0.095876, 0.03823, 0.096876, + -0.033487, -0.141669, -0.014172, 0.028439, -0.092764, + -0.053714, 0.086926, 0.034786, 0.136053, -0.005569, + 0.028753, 0.00963, 0.044114, -0.050365, -0.066224, + 0.006017, 0.014348, 0.024471, 0.000489, 0.067234, + -0.021678, -0.11876, 0.036349, -0.040295, 0.076358, + -0.008444, -0.086082, -0.044018, -0.025804, 0.028971, + -0.009233, 0.053026, -0.035341, -0.182193, -0.102515, + 0.08921, 0.066812, 0.032417, 0.046882, -0.034815, + -0.052293, 0.022814, 0.129622, 0.128232, -0.012105, + -0.087084, 0.004762, 0.086538, 0.046566, 0.098359, + -0.018713, 0.039204, -0.021707, -0.06011, -0.117527, + -0.005459, 0.060994, -0.057718, -0.021783, 0.035154, + 0.100557, -0.01547, -0.025818, 0.00845, 0.051535, + -0.001388, -0.11461, -0.057903, 0.041862, 0.061778, + 0.045701, -0.078563, -0.070166, -0.04845, -0.08853, + 0.021375, -0.004598, -0.09071, -0.009399, -0.073952, + -0.035575, -0.05028, 0.11478, 0.137866, 0.065234, + 0.003594, -0.066802, -0.144989, 0.166201, 0.039564, + -0.022457, -0.03009, 0.016187, 0.115443, -0.097331, + -0.019139, 0.09944, 0.002198, -0.030953, 0.021099, + -0.045399, -0.046871, 0.022533, -0.064657, 0.005776, + 0.049063, -0.028478, 0.019268, 0.054265, 0.028042, + 0.045559, -0.005541, -0.01441, -0.024165, -0.054976, + -0.073258, 0.084205, 0.036077, -0.068683, 0.004708, + -0.085228, 0.001234, 0.046261, -0.050496, -0.028227, + -0.086828, -0.001218, 0.021865, 0.003791, -0.000568, + -0.088733, -0.040041, -0.035891, -0.054915, 0.073463, + -0.132031, -0.012844, -0.068544, 0.013052, 0.087335, + 0.038603, -0.115382, -0.010433, -0.007113, 0.095126, + -0.047378, -0.081353, 0.018021, -0.021156, -0.120774, + 0.040038, 0.007633, -0.088728, -0.009928, 0.020142, + 0.052024, -0.021063, -0.118121, 0.102739, -0.055837, + 0.005253, -0.061924, 0.06368, -0.014512, -0.020259, + 0.029493, -0.013435, -0.020638, 0.089342, 0.001092, + -0.046491, -0.145634, -0.083159, -0.158142, -0.279281, + 0.003611, 0.055863, -0.064655, -0.088773, 0.089283, + -0.029619, -0.089949, 0.017197, -0.066633, -0.052347, + 0.090828, -0.087551, 0.000338, 0.085238, -0.005313, + 0.096211, 0.071381, -0.076546, -0.077927, -0.040864, + 0.062936, 0.041559, 0.016235, -0.017513, 0.014773, + -0.025734, 0.028586, 0.070292, 0.055794, -0.026131, + -0.076954, -0.082228, 0.043947, -0.035921, 0.152668, + -0.04951, 0.023159, 0.008506, -0.044773, -0.160358, + 0.024984, -0.025587, -0.071627, -0.038376, 0.088478, + 0.120568, 0.046723, 0.086731, 0.000695, -0.015751, + -0.027837, -0.160937, -0.095031, 0.036271, -0.009061, + -0.015078, -0.036281, -0.103665, -0.058258, -0.049573, + 0.022021, 0.108296, -0.002586, 0.065655, -0.018584, + -0.046441, -0.031018, 0.06735, 0.014328, 0.00886, + -0.000245, 0.0634, -0.00181, 0.043515, 0.090344, + -0.063845, 0.020485, 0.079401, 0.070558, -0.116428, + 0.032628, 0.068949, 0.052238, -0.04453, 0.096813, + 0.029911, -0.008814, 0.044352, -0.168172, 0.009604, + 0.055828, -0.100739, -0.026013, 0.021193, -0.051425, + 0.035891, -0.004085, 0.030216, -0.060801, 0.037202, + 0.007262, 0.120686, 0.026846, 0.058464, -0.100792, + -0.009176, 0.027589, 0.123957, -0.011283, -0.025744, + -0.105081, 0.118244, -0.042122, -0.025404, 0.000873, + -0.012703, 0.084159, -0.067539, -0.140536, 0.041637, + -0.014485, -0.043382, -0.048004, -0.075416, 0.054401, + -0.018651, -0.032908, 0.164231, -0.053236, 0.033946, + -0.021681, -0.012655, -0.037049, -0.001613, -0.053393, + -0.014635, 0.017954, -0.116115, -0.027232, 0.034005, + -0.035376, 0.026492, -0.03725, 0.070733, 0.074835, + -0.021378, -0.14298, 0.123195, 0.003699, 0.025398, + 0.015629, 0.07737, 0.032623, 0.12158, 0.0971, + 0.000946, -0.056355, 0.042065, 0.008184, -0.081824, + -0.101937, 0.065473, 0.00336, 0.069241, 0.073002, + -0.053844, -0.044301, 0.080351, -0.091833, 0.044288, + 0.007447, -0.120723, -0.013806, -0.023636, -0.064616, + 0.030556, 0.07263, 0.074428, -0.087759, -0.02644, + 0.06484, 0.049162, 0.091053, 0.023891, 0.033811, + -0.027746, 0.116392, 0.106126, -0.056644, -0.014781, + 0.036137, -0.002632, 0.055512, 0.070077, 0.067819, + -0.030625, 0.053772, -0.078457, -0.021351, -0.113011, + 0.052797, 0.044875, -0.077269, -0.009867, 0.101493, + 0.073477, -0.024103, 0.049145, -0.004706, -0.025211, + -0.053731, -0.049009, -0.035786, 0.05443, 0.046515, + 0.025154, -0.043569, -0.034789, -0.05861, 0.006931, + 0.012049, 0.046809, -0.129441, 0.025541, -0.030933, + 0.000297, -0.054058, 0.179837, 0.081515, 0.004932, + -0.028445, -0.073753, 0.010629, 0.080042, 0.09871, + -0.014017, 0.057597, 0.00101, 0.071658, -0.06757, + 0.074384, 0.110366, -0.018121, -0.108754, 0.037793, + 0.028041, -0.047508, -0.031359, -0.098913, -0.036486, + -0.017311, -0.001279, -0.013694, 0.051968, 0.036512, + 0.088201, 0.031155, -0.043442, -0.065045, 0.023486, + 0.027, 0.104768, -0.015176, -0.038754, -0.004178, + 0.003732, 0.062166, 0.085438, -0.077368, -0.101645, + -0.118347, 0.007589, -0.056489, 0.082268, 0.020253, + -0.035623, 0.034235, -0.099354, -0.061237, -0.024285, + 0.005441, -0.039694, -0.025957, -0.004411, 0.049903, + 0.00304, 0.036243, 0.023552, -0.007334, 0.128963, + -0.077727, -0.059175, -0.019437, -0.024872, 0.004339, + 0.084006, -0.076605, -0.102261, 0.036714, -0.035205, + -0.007642, -0.005125, -0.030525, 0.09639, -0.053138, + -0.002192, -0.024851, 0.050645, 0.04149, -0.043183, + 0.046796, -0.050894, 0.055023, 0.133834, -0.024013, + 0.000872, -0.057072, -0.00063, 0.04207, -0.129339, + -0.064283, 0.037836, -0.066393, 0.004438, 0.125379, + -0.062213, -0.067468, 0.090177, -0.046094, -0.025725, + 0.079101, -0.074909, -0.04373, -0.073483, 0.069672, + -0.020413, -7.9e-05, -0.049725, -0.120751, -0.04698, + 0.039894, 0.072305, 0.009798, 0.005613, -0.045217, + 0.006862, 0.036285, 0.074819, -0.006747, 0.015144, + -0.071562, 0.012324, -0.001082, 0.014835, 0.07996, + -0.027804, 0.103358, -0.017203, 0.014914, -0.056687, + 0.030827, 0.028076, 0.003395, -0.073255, 0.11031, + 0.056498, -0.044893, 0.110122, -0.109058, -0.052302, + -0.001604, -0.089977, -0.060548, 0.107808, 0.025463, + -0.070203, -0.000513, -0.123913, 0.046247, -0.085392, + 0.096343, 0.09589, -0.06495, 0.070363, 0.034272, + 0.037773, -0.07695, 0.124858, -0.009008, -0.010115, + 0.083868, 0.051242, 0.039149, 0.015185, 0.083375, + 0.029773, -0.045961, 0.100395, 0.003743, -0.138294, + -0.041755, 0.010806, 0.057797, -0.147374, 0.095858, + -0.009929, -0.103347, -0.03231, -0.11056, 0.121377, + 0.145244, 0.017079, -0.080587, 0.020516, -0.044939, + -0.010477, 0.038347, -0.003466, -0.001618, 0.0196, + -0.021762, 0.125482, 0.011074, 0.065815, 0.040298, + 0.009202, -0.051686, 0.129684, -0.131135, 0.044536, + 0.009313, 0.102518, -0.075351, 0.054338, 0.020273, + -0.045753, 0.031345, 0.000407, -0.097294, -0.000416, + -0.007466, -0.044972, -0.078744, 0.042414, 0.066624, + 0.030318, -0.067852, 0.061416, -0.028992, 0.056606, + 0.004038, -0.036253, -0.014279, 0.023123, -0.007832, + -0.000137, -0.027684, -0.127648, -0.007713, -0.008746, + -0.0265, 0.049032, -0.183319, 0.059107, 0.0665, + 0.016902, -0.093331, 0.090129, 0.016648, -0.083492, + -0.023669, -0.010473, 0.027614, 0.145068, 0.000681, + 0.044133, -0.035809, 0.005668, -0.090461, -0.090732, + -0.033927, 0.042997, 0.0217, -0.046955, 0.044487, + -0.026444, -0.061011, 0.01011, -0.023804, 0.030427, + -0.015195, -0.155603, -0.016584, 0.021461, -0.003528, + -0.059784, 0.032214, 0.000847, -0.098859, -0.07898, + 0.043188, 0.066433, 0.062309, 0.144507, 0.006865, + -0.068953, 0.046698, 0.099369, 0.043354, -0.014309, + -0.033202, -0.00295, 0.040734, 0.083454, 0.039319, + 0.051358, 0.006074, -0.073465, -0.090554, -0.120787, + -0.040676, 0.092412, -0.085151, -0.021699, 0.005813, + 0.103135, 0.024964, 0.025832, -0.075982, 0.035699, + -0.02731, -0.153007, 0.03642, 0.0576, 0.08163, + 0.001605, -0.054191, -0.033043, -0.01439, -0.071383, + 0.03618, 0.03586, -0.04698, 0.038541, -0.044757, + -0.078032, -0.029878, 0.078183, 0.082251, 0.010549, + 0.053317, -0.038231, -0.06561, 0.055798, 0.037504, + 0.076317, -0.027605, 0.010349, 0.095361, -0.088636, + 0.049089, 0.113316, 0.051084, 0.038589, 0.03433, + -0.055948, -0.037217, -0.015418, -0.139976, 0.036306, + 0.039306, -0.009889, -0.04491, 0.016559, -5e-05, + 0.106073, 0.01528, -0.002563, -0.109085, -0.048475, + -0.035319, 0.16386, 0.032981, -0.044932, 0.003227, + -0.123233, -0.010638, 0.055479, -0.003666, -0.072249, + -0.111158, 0.065365, 0.010691, 0.039119, -0.001837, + -0.118729, 0.06147, -0.002077, -0.033335, -0.060165, + -0.026081, -0.001806, -0.079616, -7.5e-05, 0.080598, + 0.032908, -0.03514, -0.003136, -0.029024, 0.094622, + -0.075773, -0.022898, -0.014817, 0.058393, -0.111505, + 0.036794, -0.01576, -0.112602, 0.030323, 0.085897, + -0.020834, 0.056079, -0.103762, 0.117671, -0.041205, + 0.041684, -0.084336, 0.034186, 0.011973, -0.006313, + 0.040836, -0.035709, 0.03417, 0.122672, 0.090973, + -0.053182, -0.059371, 0.091017, -0.090998, -0.116986, + 0.001405, 0.138364, 0.017107, -0.064076, 0.103486, + -0.031142, -0.030068, 0.046547, -0.133471, -0.042055, + 0.140418, -0.125084, 0.035218, -0.001162, -0.02113, + -0.012034, 0.097413, -0.079006, -0.03903, -0.054011, + 0.143887, 0.078835, -0.000601, -0.021173, -0.039895, + -0.02505, 0.075865, 0.039221, 0.032458, 0.038206, + -0.038873, -0.085003, -0.032736, -0.026956, 0.113525, + -0.023933, 0.120794, -0.003862, -0.026459, -0.138724, + 0.089559, 0.029002, -0.052098, -0.085692, 0.115174, + 0.083497, 0.024179, 0.119021, -0.067541, 0.019047, + -0.02772, -0.086083, -0.055329, 0.020087, -0.027086, + -0.047858, -0.051975, -0.035205, -0.059342, -0.068582, + 0.058936, 0.044141, -0.080315, 0.119744, -0.046518, + -0.064588, -0.027212, 0.147823, 0.032404, 0.01669, + 0.024302, 0.08556, -0.001525, 0.016469, 0.038891, + -0.020146, 0.019943, 0.045067, 0.03807, -0.086274, + -0.025769, 0.044192, 0.102141, -0.064765, 0.055849, + 0.048803, -0.030066, -0.00922, -0.116655, 0.068295, + 0.04758, -0.076138, -0.070307, 0.047582, -0.111342, + 0.004656, -0.004452, 0.029703, -0.004259, 0.01113, + 0.014446, 0.166086, 0.059565, 0.000985, -0.052607, + 0.013251, 0.094476, 0.106216, 0.016715, -0.025581, + -0.101244, 0.072897, -0.114526, 0.024681, 0.010784, + -0.051759, 0.032389, -0.050202, -0.083316, 0.052334, + -0.0351, -0.116721, -0.110336, -0.053391, 0.065541, + -0.02979, -0.020457, 0.135285, -0.004142, 0.111508, + -0.030936, 0.018549, -0.016034, 0.018572, -0.084336, + -0.048615, -0.018739, -0.096815, -0.090162, 0.01941, + -0.040821, -0.009925, -0.097427, 0.091891, 0.031793, + -0.024598, -0.132848, 0.078353, 0.089339, -0.068562, + -0.020779, 0.040974, -0.055675, 0.169131, 0.029649, + 0.078165, -0.050679, -0.005881, -0.004983, -0.104324, + -0.069096, 0.12796, 0.011392, -0.000769, 0.062168, + -0.079842, 0.001606, 0.089284, -0.035465, 0.031075, + 0.029519, -0.102956, -0.010902, -0.06403, -0.019669, + 0.057492, 0.075802, -0.008904, -0.060743, -0.053144, + 0.005126, 0.06298, 0.085674, 0.019895, 0.104448, + -0.086473, 0.056906, 0.056795, -0.01294, 0.036606, + -0.008604, -0.04045, 0.042062, 0.04181, 0.02768, + -0.092256, 0.091237, -0.0395, 0.024761, -0.088978, + 0.068585, 0.088295, -0.048033, -0.017808, 0.04537, + 0.1246, -0.03532, 0.056751, 0.092751, 0.054025, + -0.015725, -0.061938, 0.036806, 0.078768, -0.016065, + 0.002444, -0.023887, -0.072177, -0.02979, -0.00586, + 0.015478, 0.129142, -0.091024, 0.071482, -0.065445, + 0.005867, -0.006051, 0.098646, 0.054089, 0.018713, + 0.033837, -0.008355, -0.051959, 0.05744, 0.160305, + -0.001863, 0.016738, -0.033705, 0.062233, -0.140759, + 0.027342, 0.060074, 0.030362, -0.117875, 0.06102, + -0.028026, -0.088238, -0.003782, -0.146288, -0.080395, + 0.050048, 0.036136, 0.0195, 0.066902, 0.020355, + 0.024817, -0.056254, -0.140918, -0.085803, 0.02054, + -0.00373, 0.161411, -0.049408, 0.000219, -0.002348, + -0.055021, 0.06782, 0.126483, -0.031063, -0.119299, + -0.102834, 0.001133, 0.010172, 0.107707, -0.029106, + -0.059813, 0.036698, -0.02172, -0.043189, -0.00227, + -0.031694, 0.009605, -0.022459, -0.036417, 0.053675, + 0.061561, -0.012723, 0.05004, -0.02945, 0.131044, + -0.124516, -0.107579, -0.012171, 0.011761, 0.002599, + 0.016327, -0.060854, -0.08091, 0.030875, -0.002997, + -0.02097, -0.01188, -0.086096, 0.037912, 0.012421, + 0.055253, -0.00725, 0.04174, 0.055596, -0.02442, + -0.017564, -0.079202, 0.008897, 0.180091, 0.05449, + 0.001772, -0.022151, -0.082048, -0.010559, -0.163377, + -0.02066, -0.017827, -0.0308, -0.045856, 0.122405, + -0.052946, -0.13049, 0.097383, -0.116737, 0.039855, + 0.056504, -0.059549, -0.059931, -0.018658, 0.034898, + 0.054889, 0.005373, -0.066796, -0.12736, 0.04796, + 0.071746, 0.02741, -0.006212, 0.024132, -0.094062, + 0.005369, -0.008926, 0.073085, -0.014265, -0.029204, + -0.100025, -0.072076, 0.014651, 0.069368, 0.048275, + -0.066823, 0.086074, 0.014921, -0.015395, -0.045138, + 0.026224, 0.000902, -0.038208, -0.035221, 0.057397, + 0.097606, -0.073195, 0.051626, -0.033488, 0.027813, + 0.00207, -0.09751, -0.057877, 0.12668, -0.082194, + -0.072597, 0.006014, -0.093185, -0.016853, -0.02279, + 0.138461, 0.005394, -0.056485, 0.102778, 0.028918, + -0.045604, -0.060041, 0.121251, 0.02926, -0.101404, + 0.061194, 0.033039, -0.016798, 0.064263, 0.065144, + 0.010925, 0.023151, 0.107623, 0.027977, -0.090356, + -0.024863, -0.00644, 0.04787, -0.047486, 0.088211, + -0.012139, -0.116121, -0.000525, -0.140961, 0.016604, + 0.06349, -0.022732, -0.046944, 0.06697, -0.068838, + 0.016143, 0.026202, -0.043344, -0.064881, 0.024877, + -0.072845, 0.120531, 0.077901, 0.047272, 0.011713, + -0.044646, 0.040932, 0.076164, -0.101233, -0.029615, + -0.065118, 0.050966, -0.023273, 0.053517, 0.02371, + -0.007489, 0.035822, 0.023439, -0.055528, -0.004033, + -0.007662, -0.096546, -0.081662, 0.037141, 0.137562, + 0.075526, -0.097496, 0.12399, 0.013996, 0.087005, + -0.019788, -0.082043, 0.020524, 0.007027, -0.021537, + -0.036264, -0.090952, -0.177722, -0.009306, -0.031473, + -0.009287, 0.047557, -0.090241, 0.089347, 0.056375, + -0.005506, -0.112128, 0.004356, 0.064421, -0.038478, + -0.035674, 0.040616, 0.007731, 0.160236, -0.054199, + -0.007537, 0.012434, 0.022001, -0.021567, -0.075163, + -0.026053, 0.015909, 0.041015, 0.021832, 0.034152, + -0.048539, -0.086655, 0.047465, 0.000682, 0.04264, + 0.023697, -0.095971, -0.022874, -0.000369, 0.003413, + 0.046005, 0.064807, 0.010131, -0.129517, -0.092254, + 0.116469, 0.053796, 0.03811, 0.09447, 0.018435, + -0.034803, 0.073591, 0.108348, 0.104096, 0.049884, + -0.021274, 0.022097, 0.065347, 0.065555, 0.089319, + 0.000474, -0.004186, -0.040493, -0.065543, -0.083167, + -0.017425, 0.049177, -0.044248, 0.008399, 0.06818, + 0.154778, 0.027549, -0.008012, 0.01495, 0.043254, + 0.039599, -0.136415, -0.018716, 0.0619, 0.031263, + 0.058118, -0.0372, -0.114692, -0.080876, -0.053238, + 0.077436, 0.015015, -0.092517, 0.005804, -0.065541, + -0.005653, -0.073184, 0.095594, 0.08247, 0.060989, + -0.000262, -0.035766, -0.083441, 0.122634, 0.088429, + -0.014397, -0.055434, -0.005659, 0.069697, -0.064892, + 0.008824, 0.082498, 0.051866, -0.03607, 0.033403, + -0.082855, -0.087376, 0.002714, -0.097121, -0.01917, + 0.027179, -0.06987, -0.009316, 0.04745, 0.040657, + 0.060527, 0.00462, -0.040264, -0.051228, -0.029023, + -0.071384, 0.101421, 0.009538, -0.099185, 0.0601, + -0.048395, -0.024677, 0.025125, -0.056043, -0.058045, + -0.054059, 0.008107, 0.021078, 0.04529, -0.018459, + -0.113359, 0.014009, -0.006826, -0.052747, 0.046922, + -0.075976, 0.008538, -0.084411, -0.004369, 0.045801, + 0.075392, -0.06734, 0.014454, 0.032407, 0.092478, + -0.061859, -0.083458, 0.051442, 0.031695, -0.080233, + 0.054028, 0.027, -0.073549, 0.0323, 0.036501, + -0.011384, -0.02078, -0.124142, 0.093905, -0.028332, + 0.039139, -0.030944, 0.079952, -0.001717, 0.013976, + 0.038005, -0.001751, -0.044097, 0.129827, 0.014385, + -0.001682, -0.063458, -0.002511, -0.07815, -0.141236, + 0.021955, 0.104851, -0.093246, -0.060019, 0.069998, + 0.004399, -0.096408, 0.059327, -0.062268, -0.074327, + 0.108063, -0.090534, -0.045654, 0.048119, 0.049187, + 0.042105, 0.043964, -0.091516, -0.047999, -0.028881, + 0.070471, 0.055401, -0.025605, 0.011176, 0.008475, + 0.022254, 0.038266, 0.048106, 0.047176, -0.017967, + -0.010978, -0.088762, 0.034806, 0.019311, 0.126815, + -0.010571, 0.053073, 0.032162, -0.00078, -0.1522, + -0.014253, -0.021954, -0.13104, -0.061376, 0.113838, + 0.060725, 0.020201, 0.102533, -0.011392, -0.052046, + -0.069625, -0.091011, -0.097954, 0.067847, 0.017856, + -0.053461, -0.040679, -0.121664, -0.077208, -0.106919, + 0.057996, 0.069756, -0.012433, 0.069569, -0.055159, + -0.024801, -0.060448, 0.1017, 0.014619, 0.03658, + -0.004526, 0.093977, -0.028211, 0.045261, 0.149736, + -0.014691, -0.007959, 0.097708, 0.107128, -0.079723, + 0.029157, 0.020116, 0.104828, -0.064208, 0.119172, + 0.039583, -0.029446, 0.006628, -0.110398, 0.004062, + 0.048132, -0.060601, 0.009448, 0.051777, -0.053127, + 0.050551, -0.001924, 0.028079, -0.050618, -0.013698, + 0.00192, 0.088162, 0.073078, 0.085795, -0.066788, + 0.014025, 0.042699, 0.176241, -0.046674, -0.034822, + -0.051433, 0.121729, -0.057076, 0.023901, 0.045075, + -0.057182, 0.05478, -0.01728, -0.146674, 0.00209, + -0.016223, -0.044841, -0.084524, -0.152479, 0.072688, + -0.006962, 0.008711, 0.127455, -0.003876, 0.053162, + -0.013682, -0.025386, -0.000427, -0.024811, -0.024474, + -0.056267, 0.062116, -0.121311, -0.053011, 0.065651, + -0.075385, -0.00868, -0.063033, 0.083039, 0.110577, + -0.000152, -0.127017, 0.055904, 0.013659, 0.005664, + -0.002852, 0.047248, 0.001128, 0.100773, 0.037274, + 0.026368, -0.042205, 0.021887, -0.020247, -0.056678, + -0.077475, 0.089799, 0.058003, 0.039741, 0.106663, + -0.016853, -0.015972, 0.075741, -0.048829, 0.015374, + -0.032657, -0.125677, -0.06206, -0.057409, -0.061287, + 0.073151, 0.050357, 0.053547, -0.059886, -0.051298, + 0.057954, -0.003817, 0.076028, 0.006757, 0.061109, + -0.03803, 0.143209, 0.092207, -0.018493, 0.062291, + 0.005751, -0.036449, 0.067582, 0.031449, 0.101894, + -0.080754, 0.011515, -0.049485, -0.016137, -0.087818, + 0.108851, 0.038222, -0.099315, -0.003117, 0.052278, + 0.107517, -0.036233, 0.06537, 0.040409, -0.057029, + -0.033167, -0.081758, -0.019502, 0.033438, 0.013365, + -0.01776, -0.025906, -0.020244, -0.078722, -0.011697, + -0.028246, 0.068647, -0.106417, 0.026956, -0.064914, + 0.062711, -0.017857, 0.151539, 0.044613, -0.01782, + 0.009085, -0.032785, -0.025795, 0.07579, 0.075667, + -0.040398, 0.058556, -0.042634, 0.093973, -0.099529, + 0.057103, 0.073562, 0.01264, -0.066141, 0.029558, + 0.060219, -0.083699, -0.054799, -0.120442, -0.000374, + 0.006521, 0.034512, -0.039558, 0.042191, 0.033865, + 0.103992, -0.014977, -0.077384, -0.05134, 0.001873, + 0.047451, 0.140612, -0.024885, -0.02142, -0.046604, + 0.030606, 0.10066, 0.076356, -0.019288, -0.09857, + -0.114463, -0.010855, -0.034657, 0.025618, -0.003356, + -0.087913, 0.064346, -0.07554, -0.091569, -0.024965, + -0.021232, -0.017255, -0.056931, -0.003104, 0.030219, + -0.020112, -0.012334, 0.035298, 0.001405, 0.161753, + -0.064618, -0.064401, -0.007218, -0.00012, -0.047208, + 0.116105, -0.056464, -0.069645, -0.007032, -0.01209, + -0.023237, 0.016, -0.039802, 0.074319, -0.012604, + 0.014863, -0.058081, 0.093219, 0.062253, -0.040302, + 0.027405, -0.128683, 0.039923, 0.116808, -0.011706, + 0.012483, -0.017698, 0.003645, -0.007588, -0.120662, + -0.032868, 0.066217, -0.031343, -0.034166, 0.146334, + -0.031228, -0.125921, 0.117756, -0.042686, -0.062094, + 0.049375, -0.112262, 0.010166, -0.073599, 0.04869, + 0.028292, 0.020076, -0.062865, -0.106114, -0.0253, + 0.066916, 0.029279, 0.028191, -0.003599, -0.040614, + 0.020491, 0.060238, 0.052747, -0.01039, -0.022389, + -0.063358, -0.028707, 0.035907, -0.011898, 0.079703, + -0.003758, 0.078051, -0.017869, 0.009045, -0.018982, + 0.034974, 0.069405, -0.018909, -0.038613, 0.083909, + 0.033935, -0.036607, 0.088891, -0.052599, -0.059839, + 0.052758, -0.068308, -0.063615, 0.126093, -0.00946, + -0.042175, -0.011113, -0.073071, 0.052086, -0.052619, + 0.049226, 0.066898, -0.045666, 0.117923, 0.053656, + -0.010739, -0.043962, 0.141903, 0.001792, -0.035469, + 0.090671, 0.043993, -0.013655, 0.018989, 0.127223, + 0.00103, -0.001154, 0.081839, -0.024979, -0.103704, + -0.07792, 0.036083, 0.06822, -0.06221, 0.11373, + -0.010501, -0.065801, 0.050885, -0.104304, 0.121937, + 0.11185, 0.00968, -0.011791, 0.001677, -0.035029, + 0.010677, 0.024572, -0.01286, -0.030323, -0.010466, + 0.011279, 0.167752, 0.003136, 0.109709, 0.007292, + 0.000987, 0.004572, 0.108706, -0.113192, -0.012431, + -0.015225, 0.073653, -0.051275, 0.077928, -0.012752, + -0.011708, 0.014172, 0.025162, -0.095378, 0.026382, + -0.028889, -0.058569, -0.129329, 0.011087, 0.061452, + 0.056893, -0.058004, 0.103586, -0.060752, 0.081824, + -0.042805, -0.015991, -0.024444, 0.028952, -0.013528, + 0.042851, 0.019988, -0.165741, -0.031012, -0.014713, + -0.026059, 0.031698, -0.134343, 0.03209, 0.020828, + 0.051674, -0.128006, 0.050856, 0.02222, -0.073513, + -0.00934, 0.013756, 0.036163, 0.098407, -0.023495, + 0.023858, 0.008121, 0.02222, -0.103489, -0.046663, + -0.033, 0.063565, 0.029224, -0.012693, 0.084202, + 0.012187, -0.051, 0.026126, -0.043293, 0.008675, + -0.019812, -0.16507, -0.014555, -0.047431, 0.01799, + -0.040073, 0.107192, 0.022228, -0.089023, -0.066885, + 0.01463, 0.073186, 0.069902, 0.072634, 0.019593, + -0.041539, 0.031788, 0.09231, 0.027223, 0.034027, + -0.051855, 0.000391, 0.007869, 0.13191, 0.069384, + 0.046276, 0.04044, -0.037093, -0.031393, -0.112828, + 0.015709, 0.096749, -0.103205, -0.021284, 0.011405, + 0.158287, -0.021028, 0.042219, -0.050759, 0.069715, + -0.042907, -0.11698, 0.014224, 0.094648, 0.028395, + 0.041535, -0.057033, -0.047607, -0.024419, -0.034905, + 0.010125, 0.036728, -0.052503, -0.001839, -0.033477, + -0.053414, -0.070394, 0.092895, 0.1006, -0.026352, + 0.080574, -0.028763, -0.059548, 0.094571, 0.091787, + 0.041437, 0.014312, 0.045792, 0.108269, -0.081586, + 0.056288, 0.137447, 0.054718, -0.032474, 0.054502, + -0.100144, -0.00646, 0.024739, -0.117043, -0.008919, + 0.070299, -0.036862, -0.014543, 0.0245, -0.015222, + 0.114975, -0.043705, 0.000421, -0.061872, -0.035148, + -0.022797, 0.128575, -0.031798, -0.086718, -0.007172, + -0.071706, -0.006833, 0.028645, -0.007011, -0.096745, + -0.142269, 0.027996, 0.06521, 0.061381, 0.000741, + -0.140531, 0.01748, -0.014986, -0.040893, -0.012718, + -0.012494, -0.021869, -0.032923, 0.016456, 0.104475, + 0.010792, -0.066178, 0.019097, -0.001893, 0.067513, + -0.092673, -0.059851, -0.045936, 0.052642, -0.0625, + 0.065013, -0.025659, -0.149301, 0.051705, 0.035692, + -0.04579, -0.007482, -0.069141, 0.149365, -0.042039, + 0.018492, -0.081315, 0.05588, 0.058158, 0.019669, + 0.063836, -0.012391, 0.007057, 0.155454, 0.033854, + -0.016532, -0.007661, 0.043113, -0.080283, -0.10867, + -0.029344, 0.093781, -0.01584, -0.068134, 0.091804, + 0.004148, -0.058507, 0.059633, -0.095883, -0.004939, + 0.086151, -0.113571, -0.019466, -0.009167, 0.003662 +}; + +const struct lsp_codebook lsp_cbjmv[] = { + /* /home/metala/projects/smesh/asko/src/codebook/lspjmv1.txt */ + { + 10, + 9, + 512, + codes0 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lspjmv2.txt */ + { + 5, + 9, + 512, + codes1 + }, + /* /home/metala/projects/smesh/asko/src/codebook/lspjmv3.txt */ + { + 5, + 9, + 512, + codes2 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebooknewamp1.c b/src/codebooknewamp1.c new file mode 100644 index 0000000..8e29c31 --- /dev/null +++ b/src/codebooknewamp1.c @@ -0,0 +1,1065 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/train_120_1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 6.7484, 7.6125, 6.0332, 5.2789, 1.5239, 2.2353, 2.0748, 0.5289, 0.8748, 2.5432, -2.2863, -3.191, -0.0434, -1.9857, -3.3605, 0.7069, -5.9493, -0.5672, -0.6798, -18.0977, + 4.0503, 3.9086, 2.9225, 2.3773, 0.658, -0.4363, -0.0644, 2.4063, 1.3428, 2.4542, 0.5275, 0.982, -1.3277, 0.6811, 0.0273, -0.1838, -0.0222, -0.6478, -2.2405, -17.4152, + 13.3284, 12.1212, 10.6531, 9.8214, 11.0388, 15.812, 19.711, 16.5488, 16.1068, 15.8771, 7.2553, 4.2486, -6.0036, -12.5476, -20.1299, -28.2803, -25.3971, -21.7907, -11.5143, -26.859, + 21.4405, 18.4703, 17.8693, 14.9679, 11.2994, 6.4906, 4.7717, 0.1959, -0.8801, 1.8991, 1.9793, -4.9755, -7.7852, -10.0492, -8.5295, -8.2893, -4.1203, -12.4072, -16.166, -26.1817, + 4.0023, 3.8279, 1.2681, 1.0053, 0.7002, -0.3886, 3.4465, -1.4055, -6.7846, -2.3345, -2.905, -0.1344, 3.4192, 2.4319, 10.0096, 3.9279, 0.6807, 0.322, -3.8325, -17.2565, + 29.8276, 21.1543, 12.7853, 13.0246, 5.8164, 3.7469, 2.4198, 0.151, -4.5449, 5.2695, 11.7552, -4.8954, -6.0291, -8.978, 4.965, -10.654, -12.5363, -21.6056, -18.2985, -23.3739, + 4.861, 5.1207, 6.5382, 9.8638, 15.4754, 18.8192, 14.8018, 10.7685, 12.4401, 14.0392, 2.92, -3.7283, -9.7213, -13.5526, -16.073, -13.7571, -5.4267, -12.2552, -14.5143, -26.6193, + 3.0429, 3.0335, 4.4785, 5.6483, 5.3476, 5.7519, 3.5651, 4.9007, 4.9672, -0.733, -0.6458, 6.5888, 5.2957, -2.0068, -6.0189, -7.2145, 2.5545, -5.8358, -7.4936, -25.2263, + 5.9384, 7.0203, 10.7433, 15.2477, 14.8437, 8.0949, 3.1384, -0.0014, -0.1756, 2.1601, 8.1029, 0.4123, -6.8062, -9.6038, -6.2302, 0.4409, -8.9878, -10.1638, -4.6903, -29.484, + 7.188, 6.1134, 5.4021, 10.5427, 17.0718, 14.5658, 6.8632, 2.2257, 0.4412, 3.8257, 9.0388, -1.1212, -6.7639, -9.2412, -8.6575, -2.9951, -8.6659, -9.422, -6.6046, -29.8068, + 9.8859, 4.3889, 3.6253, 3.2033, 4.6563, 4.5967, 1.8747, -0.0037, 3.2114, 3.8854, 3.1501, 0.8523, -5.283, -8.4603, -5.1159, -3.9157, 6.98, -1.527, -6.0421, -19.9624, + 7.6208, 10.1888, 12.8648, 16.4838, 14.9269, 7.8064, 3.5594, -2.8048, -3.6303, -10.8596, -7.1254, -2.889, 5.4295, -2.5015, -5.5359, -2.9934, -6.598, -7.1493, -4.9387, -21.8545, + 12.7227, 17.1387, 21.7055, 19.8068, 12.1832, 5.8645, -2.4103, -3.8445, -5.5496, -5.5608, -0.201, 5.1772, -1.4666, -6.6602, -1.2573, -3.1593, -10.7925, -14.3751, -12.0047, -27.3167, + 7.4465, 7.8765, 9.4912, 12.2074, 12.1631, 11.478, 7.6294, 2.6922, 0.1566, -2.1903, -1.5699, -1.8031, 2.2555, -1.5591, -7.9267, -10.3612, -5.5432, -5.5673, -10.0797, -26.796, + 0.3749, 1.9725, 2.6868, 6.3326, 8.9635, 12.8113, 13.6523, 14.0916, 11.2443, 1.2914, -1.9954, -2.9443, -4.6718, -4.3132, -3.4613, -8.1105, -7.9033, -7.0956, -6.5898, -26.3361, + 10.3072, 10.6822, 8.8253, 4.8992, 4.3627, 8.8165, 9.7824, 3.7264, 0.4265, 0.6068, 3.0934, 2.9121, -0.6717, -5.8045, -1.7344, -9.1008, -8.8333, -6.0633, -11.2321, -25.0005, + 10.6992, 14.806, 18.9665, 22.421, 21.871, 15.6647, 10.616, 12.1366, 14.0479, 7.0707, -3.8212, -12.177, -16.1111, -19.3389, -18.8315, -17.5346, -7.9646, -9.4592, -17.5614, -25.5, + 9.9592, 11.7001, 14.2704, 14.1434, 7.3322, 4.2766, -0.0567, -2.7113, -5.7358, -6.739, -5.9067, -0.1939, 4.8177, -3.981, -7.2528, -3.2695, -1.5685, -7.894, -6.3355, -14.8548, + 17.6322, 19.5153, 22.4362, 16.2943, 10.4698, 2.5066, -2.3936, -5.377, -7.9766, -9.8004, -12.964, -13.1015, -9.8076, -5.7565, 1.8732, 0.4843, 3.3621, -1.0048, -4.8377, -21.5543, + 9.9491, 17.4987, 23.2236, 17.3142, 6.8072, 6.6873, 1.9421, 1.1415, 2.9409, 6.847, 2.4633, -7.2869, -8.9792, -3.3155, -0.1918, -11.8037, -18.6298, -12.6475, -9.762, -24.1984, + 9.208, 9.9971, 12.5064, 20.0609, 20.9647, 10.9574, 7.436, 4.4943, 4.8454, 11.0636, 1.8176, -7.3479, -12.5617, -15.3912, -11.5022, -5.0309, -14.7556, -15.4294, -6.415, -24.9176, + 7.7917, 9.3291, 11.8185, 15.3501, 19.3235, 20.6869, 19.816, 14.6028, 10.2893, 9.9407, 9.8534, 3.6182, 2.7695, -5.2735, -19.7962, -24.6834, -27.0316, -25.6805, -24.9149, -27.8096, + 0.1108, 3.1261, 6.8163, 12.4528, 16.9192, 10.8153, 2.6109, -0.2652, -4.8897, -6.1056, -7.3218, -4.4594, 4.3004, 3.7728, -2.8276, -0.0458, 1.0104, -6.4884, -6.486, -23.0456, + 12.9442, 10.3059, 3.1303, 2.1611, 1.4795, 2.758, 6.9527, 8.4487, 7.1533, 1.4465, -0.9113, -3.9971, -4.909, -5.3881, -3.1011, -0.4922, -1.1819, -5.3279, -8.2374, -23.2345, + 25.0945, 17.8572, 8.95, 2.704, 0.2187, 1.4115, 0.7421, 0.5831, -0.3096, 0.9334, -2.9667, -4.0352, -2.8473, -4.8594, -4.5863, -4.4311, -2.8466, -4.4808, -5.1669, -21.9645, + 14.6124, 19.7986, 21.2066, 15.762, 8.7509, 3.7653, -0.5239, -3.8894, -6.8522, -8.4979, -8.1879, -5.8438, 0.5485, 6.7415, 0.4745, 2.675, -10.3676, -15.0245, -12.2357, -22.9125, + 11.9959, 12.9771, 17.1177, 21.531, 16.8892, 10.8731, 9.7276, 8.5106, 12.9569, 2.2512, -6.9324, -13.2124, -16.538, -18.0518, -16.6252, -9.7038, -6.122, -8.7542, -6.8998, -21.9905, + 12.8107, 14.567, 13.4289, 7.1693, 3.4265, 3.1397, 2.5457, -1.2214, -0.3887, 2.4506, 3.9777, 0.9056, -6.9195, -7.3811, -3.2619, -0.3714, 2.6266, -6.3479, -12.2319, -28.9244, + 2.6437, 2.2575, 3.8643, 6.0625, 10.9091, 16.9554, 21.5045, 12.7233, 9.3579, 9.4439, 12.8585, 4.4528, -2.4283, -4.733, -2.2502, -11.3098, -18.5273, -22.457, -23.1304, -28.1976, + 10.5757, 10.9392, 14.0126, 18.2101, 14.3745, 8.6896, 4.908, 1.0411, 2.3482, 7.2221, 4.544, -5.0353, -11.2852, -13.0882, -10.96, -3.0288, -9.5005, -10.2217, -6.6739, -27.0717, + 14.6172, 4.5412, 13.3824, 9.2916, 19.2818, 13.6563, 14.4089, 10.126, 1.6926, 3.9361, -0.6461, -5.1244, -9.3641, -13.9807, -11.4128, -11.8597, -0.8237, -20.3149, -12.3561, -19.0515, + 4.0591, 4.6177, 7.7662, 6.8737, 9.4052, 10.1099, 12.8714, 8.1202, 6.6015, 7.9224, 1.7548, -1.6325, -4.8379, -5.0955, -2.1947, -8.422, -11.8799, -10.7107, -12.0066, -23.3222, + -3.3385, -1.1297, 3.0554, 4.9769, 3.8625, 8.6998, 8.0974, -0.5519, -1.0699, -5.4771, -4.7235, -4.8192, 7.1236, -0.4895, -2.0107, 0.1838, 3.518, 3.2804, 3.1904, -22.3779, + 10.9362, 15.2821, 18.1297, 12.4682, 2.6895, -1.2007, -1.7676, -6.1681, -6.0524, -5.8064, -3.1002, 4.3237, 2.0263, -5.5109, 1.0348, -0.476, -4.6274, 1.4107, -7.5329, -26.0586, + 27.0648, 22.2199, 14.8908, 7.7845, 2.8689, -0.0364, 0.0683, -0.1186, -1.6323, -2.4217, -4.0112, -2.3476, -5.4442, -5.8509, -6.4386, -6.2558, -6.7739, -5.9348, -7.0916, -20.5398, + 4.3156, -0.2499, 1.1824, 2.8225, 8.191, 5.2798, 2.2597, -3.0043, -5.0382, -5.2727, -4.0013, 2.6952, 8.1245, -1.1517, -1.8957, 2.4603, 3.0897, -1.0817, -0.1353, -18.5898, + 17.5894, 22.9315, 26.4862, 22.162, 13.7474, 13.5177, 15.2005, 16.3224, 4.9523, -4.2419, -8.3503, -12.4022, -12.6698, -6.7159, -16.2122, -20.1926, -20.5969, -16.0749, -12.5173, -22.9353, + 6.5871, 8.0443, 8.4339, 11.3345, 17.3665, 13.4455, 6.9211, 2.0512, -0.7348, -1.2898, 1.0076, 8.4862, -0.336, -6.4714, -5.9432, -4.1602, -12.1155, -12.4645, -10.9269, -29.2355, + 19.0066, 20.3716, 18.0417, 9.4806, 4.8058, 0.3359, -4.1091, -8.193, -8.9962, -9.7495, -13.2924, -8.6275, -4.9424, 6.0502, -6.8142, -7.1166, -3.0922, 8.8016, 5.6937, -17.6547, + 4.7309, -6.5949, 4.9914, 7.3489, 9.0188, 4.1567, 7.1949, 0.4917, 5.0462, 7.5219, 1.5314, -15.3803, 5.313, -0.0983, -7.0327, -1.2671, -0.4646, -1.6442, -0.7446, -24.119, + 13.7639, 5.1424, 5.3193, 3.8945, 3.9574, 1.4034, 0.1896, -4.0608, -2.5264, -4.9434, 2.8459, 2.6311, -2.7915, -3.7842, -0.3711, 0.5487, 5.3766, -4.3496, -3.2801, -18.9656, + 12.6752, 14.7799, 16.2157, 18.6944, 14.139, 7.0937, 3.8206, -2.4778, -3.9766, -4.4531, -2.8711, 3.2148, 0.68, -9.1748, -10.16, -6.0557, -0.8581, -9.2828, -14.0109, -27.9924, + 15.0025, 18.2042, 22.4086, 21.6195, 14.2308, 10.5772, 6.7291, 6.0463, 11.7877, 8.4162, -3.4731, -11.2708, -15.6923, -17.5613, -14.5235, -4.5248, -17.8954, -18.3529, -10.3105, -21.4173, + 2.5368, 2.8687, 8.7229, 5.2089, 8.9671, 2.8847, -1.3535, -4.4273, -4.906, -7.8939, -15.475, -10.4797, -4.4811, 6.5892, 9.9939, 12.9078, 3.2705, 1.3246, 3.7883, -20.0468, + 8.5207, 11.8364, 16.4466, 19.9166, 16.0662, 8.4129, 4.329, -0.8928, -3.7592, -5.4071, -4.287, 0.4615, 9.9611, 5.819, 1.7969, -7.7765, -17.3073, -19.5235, -17.7924, -26.8211, + 3.0595, 10.0158, 11.1623, 5.9413, 3.1988, -2.1129, 0.3528, -3.0158, -2.3599, -1.3347, -1.0479, 3.9189, 7.8019, 3.0538, -1.6139, 0.8043, -4.929, -6.9959, -7.2918, -18.6077, + 17.8476, 19.4332, 25.4614, 19.1508, 12.2748, 9.4543, 6.1101, 3.6929, 2.9336, 5.5407, -9.2238, -17.0071, -20.8856, -22.9308, -21.1711, -15.0234, 4.8627, 2.2867, -2.1943, -20.6125, + 9.6165, 8.8018, 11.1694, 14.6183, 18.4154, 13.4481, 7.158, 4.165, 1.8242, 0.9521, 5.1356, 4.027, -5.9523, -12.0202, -14.3055, -10.5893, -2.8308, -12.2805, -13.3723, -27.9806, + 13.4166, 16.7617, 20.6572, 22.0976, 15.9129, 10.641, 5.4061, 3.157, -0.7256, 1.2303, 5.9463, 5.1273, 3.4864, 1.6884, -10.9215, -19.5567, -22.8693, -20.4758, -24.042, -26.9379, + 8.0404, 15.9476, 21.0441, 15.082, 8.2842, 3.1036, -0.2419, -4.2559, -6.0751, -7.4529, -5.5847, 1.552, 8.3483, 3.3751, -1.0503, -10.4691, -11.936, -5.5738, -6.8713, -25.2662, + 19.995, 20.2102, 18.7443, 12.722, 5.8592, 3.8088, 0.4504, -1.5876, -0.0425, -3.0873, 5.5382, -0.1499, -5.85, -7.9372, -6.2374, -0.2643, -15.0702, -16.9914, -9.3644, -20.7458, + -2.6024, -7.495, -1.2522, 3.5119, 3.9726, 3.4991, 2.4457, 3.2158, -0.183, -1.7087, -7.3996, -6.8962, -5.2421, -7.5762, -9.1433, 6.6126, 10.5297, 10.4556, 18.2991, -13.0433, + 0.8317, 2.2343, 3.6899, 5.6335, 5.8479, 6.433, 6.0022, 5.363, 2.3387, -0.5344, -1.0716, 0.6509, -0.7175, -4.0229, -6.0631, -4.7546, -1.97, -4.6226, 0.0933, -15.3616, + -9.366, -6.9175, -4.9307, -3.1828, -1.6587, -1.4971, -0.1586, 0.6208, 0.5169, 2.4709, 4.6017, 5.3127, 4.5449, 3.269, 3.759, 3.4511, 3.826, 3.9369, 4.8805, -13.479, + -1.183, 0.5095, 1.1754, 2.3109, 2.2722, 1.3243, 1.6529, -0.1799, -0.2874, -1.2863, -2.2761, -1.5668, -1.2037, -2.4367, -3.9243, -2.1186, 2.3502, 1.4312, 9.5827, -6.1467, + 9.2349, 10.765, 18.1608, 20.6655, 13.5769, 5.4902, 3.0323, -1.0259, -0.501, 1.7689, 10.381, 12.0253, 9.1922, -4.9615, -15.0315, -19.9651, -21.4377, -17.68, -6.4577, -27.2328, + 10.6391, 10.7983, 11.4949, 16.5329, 19.2664, 13.6129, 6.1846, 2.4573, -3.1501, -7.1814, -7.9387, -2.6238, 4.6419, -5.9113, -9.351, -7.0591, -3.2275, -10.282, -10.5308, -28.3726, + 18.6364, 19.3874, 19.593, 14.3075, 9.4402, 3.6045, -1.9801, -5.5352, -9.0094, -10.9308, -12.7345, -14.0779, -10.9593, -3.8674, 6.3753, 9.5959, -1.4018, -7.4988, -6.1435, -16.8015, + 9.4969, 11.3591, 11.5468, 7.8918, 4.7217, 3.0266, 4.2145, 2.2878, 1.2224, 5.6903, 10.6919, 4.2718, 0.7184, -3.7583, -6.7954, -8.0558, -7.9668, -10.2861, -12.5018, -27.7759, + 1.9805, 4.9512, 7.016, 7.8284, 8.7891, 8.0863, 7.7994, 7.9865, 8.6027, 13.1944, 14.7771, 11.0643, 2.1716, -5.7171, -10.9834, -8.7615, -16.8907, -14.3039, -17.4732, -30.1175, + 7.4683, 9.4924, 11.1231, 14.049, 15.3387, 7.9538, 5.2116, -0.0275, -3.0014, 0.105, 0.6547, 7.966, -2.3476, -7.0894, -4.6113, -2.0949, -15.972, -16.2041, -7.4758, -20.5386, + 4.8388, 4.2032, 3.5738, 6.4994, 10.8701, 16.7006, 14.8672, 6.7149, 3.1448, 0.6167, 2.5321, 7.5899, 1.6456, -3.0073, -4.4465, -2.3406, -11.2907, -15.6965, -17.0827, -29.9328, + 9.8208, 5.5733, 3.2835, 2.3197, 5.4502, 9.1113, 10.3794, 8.6442, 6.0107, 6.4897, 4.2548, 1.1709, -4.1757, -9.6942, -10.5243, -11.8609, -10.0641, -3.4488, -2.2532, -20.4873, + 5.8783, 5.8851, 7.6595, 5.2009, 5.1, 1.982, 2.2615, 1.4023, -1.1079, 1.1247, 3.7199, 2.8362, -0.5182, 1.4421, 1.5607, -8.4521, -3.7106, -1.6008, -5.275, -25.3888, + 13.8298, 17.3228, 17.9494, 18.8765, 12.6415, 7.5326, 5.2828, 1.03, -1.0231, -5.4994, -6.6194, -2.5155, 4.6895, -3.4515, -7.2113, -4.1051, -13.7542, -14.3604, -11.8611, -28.7541, + -8.8559, -3.0649, 2.2249, 4.9828, 6.417, 6.9906, 9.9342, 12.0149, 12.2463, 14.3103, 18.4345, 6.3234, 4.2404, -2.7341, -6.9396, -10.7644, -10.1668, -12.3674, -16.3891, -26.8371, + 10.9983, 13.5279, 16.2801, 19.6892, 16.9475, 11.0028, 3.9633, 1.1799, -2.0078, -0.985, 2.7247, -0.1311, -6.6215, -8.589, -4.3971, -11.9543, -15.4358, -13.3278, -4.8427, -28.0217, + 7.2013, 9.1028, 13.1142, 19.8377, 22.536, 16.6528, 11.833, 10.3141, 12.9885, 15.8372, 9.0995, 8.4627, 1.1838, -14.4656, -21.4397, -23.6775, -22.5547, -24.8595, -24.4974, -26.6692, + -8.4073, -6.6779, -3.958, -1.6241, -2.147, -2.2867, -2.2534, -3.0205, -4.5931, -2.5545, -2.135, -1.3098, 1.1053, -1.1397, 1.217, 6.2234, 3.6093, 9.8015, 23.5766, -3.426, + 9.6955, 11.4467, 15.0851, 15.4765, 9.8267, 3.549, -0.5777, -2.7726, -5.1878, -5.7225, -4.4558, 0.4969, 9.2914, 5.8917, 6.4235, -4.2514, -11.0149, -9.4893, -13.0444, -30.6665, + 2.9943, 1.4307, 0.8714, 2.2925, 2.1145, 2.9148, 2.4003, 1.9382, 1.6662, -2.3476, -2.0877, -1.9322, 3.3342, 1.7171, -0.9114, 3.2785, 1.7852, 1.4651, -1.3549, -21.5695, + 7.7138, 9.34, 11.7519, 14.3217, 14.9762, 11.0903, 9.904, 9.3599, 10.4611, 6.3795, -3.9927, -7.6734, -12.4888, -12.1729, -5.7999, -5.5417, -9.569, -9.5926, -7.6846, -30.7825, + 4.4498, 9.229, 15.0677, 17.9679, 11.2745, 2.673, -0.9888, -5.6255, -7.5349, -8.4589, -8.451, -5.5027, 1.7669, 4.3143, -4.8629, -2.0721, 4.6797, -5.0125, -4.4213, -18.4923, + 11.1829, 12.4396, 12.7925, 12.6901, 8.015, 3.4089, 1.7847, -0.2306, -2.0077, -1.0178, 2.2167, -0.4542, -8.4111, -8.9029, -8.0861, -3.9439, -6.2512, -2.2635, -2.1307, -20.8306, + -0.0237, 3.59, 4.5144, 3.8794, 5.7527, 11.0182, 8.9091, 7.1863, 7.0702, 7.1782, 4.7799, 0.6784, -4.3508, -5.3991, -6.5953, -5.6132, -9.5378, -5.6903, -1.3834, -25.9632, + -2.7117, -1.4799, 1.2116, 2.3262, 3.7406, 3.7668, 1.2697, 0.2086, 0.7399, -1.3479, -2.2145, -3.7982, 4.9747, -0.4583, -1.7465, -0.9161, 7.2119, 0.8965, -0.2723, -11.4012, + 7.6123, 10.5335, 16.3125, 23.5319, 21.6117, 16.329, 18.2001, 16.9715, 0.9425, -7.0707, -12.7338, -16.0871, -18.4761, -17.8994, -14.8763, -4.844, -8.9433, -6.8294, -0.8772, -23.408, + 9.1763, 3.0851, 4.6724, 8.0499, 14.6517, 16.8559, 10.4532, 11.9797, 13.2732, 7.6578, -1.4245, -7.0469, -11.9925, -15.0269, -14.7577, -15.9057, -2.4494, -8.2002, -4.4694, -18.5819, + -0.3793, 0.7119, 0.4558, 1.7011, 3.1548, 7.4097, 8.6888, 7.5902, 9.102, 7.3493, 9.7346, 15.2626, 6.8726, -0.7975, 0.8553, -9.6815, -9.3426, -14.3122, -13.9791, -30.3963, + 5.2988, 6.3406, 1.2009, 3.3308, 2.029, 2.8107, 1.003, 0.4513, -1.4458, 3.0391, 1.2595, -9.2407, 1.3164, 1.9175, 0.7738, 1.8301, 0.5948, -0.9497, -2.7482, -18.8117, + 23.5623, 25.058, 25.0568, 22.4174, 16.4713, 14.4026, 11.1159, 5.025, -1.0266, -8.5971, -10.1924, -9.612, -11.8638, -13.7028, -4.2, -6.01, -12.7481, -18.5497, -22.5946, -24.012, + -5.0424, -4.212, -3.2703, -0.4028, 1.8335, 3.2012, 2.3768, 2.0802, 0.6396, 0.2079, 0.1418, -0.1844, 2.5056, -0.2078, -1.3169, -0.2911, 0.814, 1.7717, 5.2809, -5.9255, + 7.633, 9.9835, 15.1303, 18.9128, 13.0001, 5.9224, 1.3978, -3.1674, -6.4703, -8.3713, -7.747, -5.2412, 1.6661, 5.3754, 0.9111, 2.2634, -7.6214, -11.2828, -5.6474, -26.647, + 15.3965, 19.4488, 18.3928, 11.4564, 4.0261, 0.4604, -4.6326, -9.8409, -11.0926, -12.7123, -13.1035, -12.3357, -8.4063, 1.3638, 7.8807, 5.5655, 3.421, 0.7205, 5.4867, -21.4953, + 4.0267, 4.8087, 7.0895, 9.6094, 12.6372, 17.6545, 19.7244, 17.4364, 13.7517, 13.9367, 6.0059, -4.5448, -9.4075, -13.3403, -13.662, -10.1856, -10.5214, -17.1512, -19.3146, -28.5537, + 26.5287, 22.7007, 21.6748, 17.6005, 11.9372, 12.6653, 5.4749, -6.1299, -8.9419, -6.962, -5.7222, -5.6209, -8.635, -10.0876, -8.1562, -7.7238, -5.4233, -10.0839, -13.1237, -21.9717, + 3.974, 4.1572, 5.7242, 12.448, 17.3522, 11.6512, 5.2405, 1.2103, 0.5569, 2.7329, 9.6369, -0.5073, -5.1263, -2.7956, -0.7621, -3.7186, -1.7764, -8.4788, -18.8985, -32.6208, + 6.8442, 11.6517, 15.0164, 13.0383, 3.5465, 0.5949, -3.0134, -7.5262, -8.2082, -8.6101, -7.2813, -1.2345, 9.272, 5.1011, 6.0543, -0.9163, -4.5878, 3.4588, -4.8078, -28.3926, + 7.8637, 4.0004, -2.938, 2.0521, 2.2442, -0.4633, 1.8855, 1.9277, -0.6295, 1.3834, 1.2896, 1.0703, -0.4938, 1.5669, 0.0079, -1.5584, -2.007, 0.9263, -0.4846, -17.6435, + 5.8623, 7.6023, 7.9357, 8.1933, 9.8252, 14.3094, 18.598, 17.631, 14.1029, 11.3791, 8.9224, 4.7903, -4.573, -11.3683, -17.8078, -14.2065, -11.2294, -16.2936, -23.1509, -30.5225, + -1.7942, -0.0063, 1.995, 3.6026, 3.2262, 0.8396, 2.3621, 2.373, 0.2704, 0.4107, 0.3605, 1.3362, -2.3048, -2.1177, -2.8566, 0.0808, -2.4432, 2.0828, 10.0173, -17.4341, + 16.0587, 21.303, 20.2092, 12.229, 4.0091, 1.0523, -3.6402, -8.1002, -8.5006, -10.1681, -9.7303, -7.7995, -1.2107, 8.9891, 5.5157, 1.2399, -8.3907, -7.4334, -1.1958, -24.4366, + 15.8248, 21.2415, 22.3705, 19.6523, 12.6511, 4.98, 2.0524, 1.2562, -2.0002, -7.0989, -8.4866, -8.1644, -3.6111, 2.9801, -6.3159, -7.3905, -2.5939, -11.1587, -18.1433, -28.0453, + 11.4701, 14.8919, 19.2495, 17.1766, 9.1256, 4.6224, 0.3569, -3.6692, -6.2969, -8.7664, -7.4764, -1.7487, 3.4354, -4.0219, -5.5797, 1.1971, -7.0079, -5.6899, -4.914, -26.3546, + 4.0502, 6.3561, 7.7528, 13.2425, 22.1071, 16.8285, 10.8539, 9.9555, 11.6373, 14.4871, 1.0686, -6.014, -8.7291, -9.9474, -5.242, -14.0196, -19.62, -16.4317, -13.2116, -25.1241, + 14.0747, 12.9823, 14.7396, 18.358, 20.8024, 21.6686, 20.4893, 18.2777, 14.8271, 4.2101, -4.6228, -5.0852, -8.9555, -9.9704, -14.4886, -22.2364, -24.8924, -24.6202, -19.9776, -25.5806, + 6.5756, 6.5342, 9.0959, 14.5314, 20.6452, 22.1123, 17.0555, 14.5823, 18.4626, 9.7441, 0.1482, -4.4759, -4.9624, -0.2271, -12.9306, -21.6336, -23.8195, -22.7039, -21.8165, -26.9179, + -2.413, -0.2375, 2.8918, 5.5011, 6.7427, 5.7418, 5.0778, 5.1858, 4.3188, 3.4462, 4.3416, 1.8899, 2.3449, -0.9372, -1.2877, -2.8414, -4.0969, -5.4193, -7.2573, -22.992, + 18.6934, 11.3904, 9.2311, 9.3832, 5.4199, 3.6295, -0.1793, 0.6487, -3.5589, -4.0062, -6.2031, 0.6797, 0.8497, -5.8255, -3.0197, -0.8407, 3.412, -4.6925, -10.2551, -24.7566, + -1.1447, 1.564, 1.4686, 1.7604, 1.7234, 2.3262, 4.7312, 2.6246, 3.8383, 6.5465, 3.383, 1.7225, -1.7619, -1.0275, -1.1491, 1.9434, -4.9663, -2.3871, -2.8449, -18.3507, + 14.1023, 13.565, 10.151, 8.7911, 7.7313, 7.648, 9.2651, 8.0399, 4.9244, 6.1141, 5.5459, -0.9256, -6.155, -7.0836, -8.6484, -9.0926, -9.2649, -13.5303, -12.0852, -29.0925, + 9.8451, 13.4743, 16.9269, 13.4623, 5.8133, 1.7553, -0.7487, -3.9831, -8.1249, -9.5689, -8.7611, -6.3983, -0.6612, 10.9895, 12.8583, 0.3283, -8.6023, -10.4136, -5.9048, -22.2865, + 19.2227, 18.1307, 15.9732, 13.2757, 8.9377, 4.0318, 2.7371, 2.4204, 4.8079, 5.9436, -1.6587, -5.6682, -8.2354, -8.6156, -5.7373, -5.9194, -13.5825, -11.1928, -9.7272, -25.1435, + 9.7172, 12.7596, 17.788, 19.5982, 13.1714, 6.9756, 4.2961, 1.3629, -0.4383, 4.963, 8.784, 0.9395, -2.9094, 0.87, -9.7739, -17.6442, -19.7626, -14.0983, -10.0576, -26.5411, + 19.7847, 26.9921, 27.0885, 20.9467, 13.4352, 6.9927, 3.8926, 5.5073, 6.395, 3.641, -3.526, -9.9366, -12.2833, -15.4366, -15.2739, -13.403, -13.6697, -14.5223, -14.0162, -22.6082, + -4.745, -2.3439, -1.2527, 0.2681, 2.5169, 3.0271, 3.2731, 1.1854, -1.4898, -2.2085, 0.9214, 6.1154, 5.0556, 7.1405, 5.3972, 1.8235, -0.1874, -0.9732, -2.7856, -20.7382, + 2.7354, 2.9846, 4.5226, 11.0075, 16.9767, 9.7039, 5.0497, 0.2367, -2.2382, -2.2319, 3.3972, 5.8953, -3.5572, -7.9222, -5.1006, 4.0687, -6.798, -6.9512, -1.5062, -30.2728, + 1.8923, 1.9933, 1.7272, 1.4697, 2.1029, 2.7198, 2.2271, 0.4083, 1.489, 2.3633, 0.0136, -3.1335, -1.8351, -3.4645, -2.5082, 0.1244, -0.6305, -0.2515, 2.667, -9.3744, + 7.3147, 10.8559, 16.3202, 21.3322, 15.5047, 5.7917, 2.0324, -0.5787, -3.8385, -3.1611, 4.7722, 6.9085, -0.8153, 0.2585, 0.5455, -11.9753, -19.4608, -19.4821, -11.0006, -21.3242, + -4.8271, -2.3317, -0.8263, -0.6913, 0.0284, 2.1785, 4.853, 2.4866, 0.5257, 1.0973, 0.9581, 2.0508, -0.085, -0.324, -2.1544, -3.6769, 8.253, 1.6818, 2.7619, -11.9586, + 28.0344, 21.3292, 26.7011, 15.9009, 17.4755, 11.8357, 5.06, 6.5559, -4.3031, -3.5802, -8.7494, -8.4692, -7.5683, -2.5689, -10.7488, -16.5549, -18.6071, -16.7713, -13.4451, -21.5263, + 11.4465, 12.5754, 14.651, 12.0835, 5.352, 1.6789, 2.3021, -2.4719, -2.0905, -0.5169, -2.1754, -2.9241, -2.7917, 2.0815, 1.0635, -3.6587, -4.768, -6.8125, -8.2348, -26.7899, + 11.1007, 8.9165, 11.8079, 11.0313, 1.9749, -0.9229, -2.467, -6.7769, -9.1537, -10.4373, -8.8596, -6.3617, 0.2425, 8.333, 2.9722, 9.5504, -3.2943, -3.168, 4.4488, -18.9367, + 12.7055, 18.2073, 17.6143, 9.1957, 1.5762, -1.0952, -4.9687, -6.129, -7.3791, -7.2053, -4.3066, 3.6014, 9.8467, 10.7313, -1.8676, -11.4282, -13.9225, -8.1802, 2.6837, -19.6797, + 0.8368, -1.761, 0.4628, 2.3612, 5.116, 7.7374, 9.4921, 4.3865, 6.1712, 5.6238, 6.3738, 5.3491, 2.7348, 5.4859, 4.6651, -8.4273, -10.9892, -8.675, -10.7619, -26.1822, + 12.9582, 16.0251, 19.0637, 18.9347, 12.6765, 7.8161, 3.8112, 0.9397, 6.1611, 7.4639, -2.5194, -7.1391, -10.2242, -10.1934, -4.1747, -5.7525, -14.4868, -8.2946, -13.9643, -29.1013, + 29.3165, 26.9707, 19.9517, 12.4469, 7.3647, 2.8794, 1.4068, -2.4963, -5.4012, -4.1083, -5.2153, -6.4891, -5.9548, -6.4872, -6.651, -6.7351, -9.9422, -8.4833, -11.8558, -20.5171, + 7.6646, 7.8496, 5.346, 3.4574, 6.3183, 1.1408, 3.1494, 5.1045, 0.2373, 1.0847, -0.432, -0.3662, -0.3503, -0.5473, -8.1949, -0.9695, -1.7599, -3.3828, -3.0248, -22.3253, + 7.0587, 8.6157, 9.7452, 14.4294, 20.8498, 17.0788, 7.0614, 2.4228, -0.5017, -1.0215, 3.1054, 5.3564, -3.4904, -7.3987, -7.4398, -7.0656, -8.8032, -12.863, -18.8666, -28.2731, + 5.767, -2.6937, 9.6459, -0.7839, 10.7523, 2.796, -2.6113, -3.2915, -6.2928, -7.6167, -12.6729, -5.4796, 5.0447, 13.7582, 10.305, 4.5191, -1.3433, 5.4917, -1.7375, -23.5567, + -11.2311, -7.9712, -5.4028, -3.3542, -3.1975, -4.2245, -3.9952, -5.3576, -5.3493, -4.8108, -5.4962, -2.9288, 2.5785, 4.7736, 13.8058, 17.8731, 9.8332, 14.95, 11.022, -11.5171, + 2.8142, 1.3603, 4.2714, 4.8975, 4.3374, -3.4231, 3.1881, 5.0714, 3.9705, 6.2234, 3.7268, 5.279, 1.3825, -7.6582, -2.9268, 2.0075, -4.057, -5.6086, 1.2855, -26.1418, + 4.9776, 6.4457, 7.7463, 9.3687, 9.5559, 9.1954, 6.3666, 4.9237, 2.1719, 1.7788, 1.4634, -0.3859, -6.1409, -5.3778, -2.6336, -2.5068, -8.3667, -7.0441, -11.2867, -20.2514, + 10.0472, 11.9967, 16.4907, 19.9334, 16.2325, 9.2915, 4.313, 0.7097, -4.0959, -8.1186, -10.5064, -10.3134, -5.2102, 1.0801, -1.5982, -3.8949, 1.2501, -7.5248, -12.9333, -27.1495, + 17.0433, 19.1713, 22.6813, 17.1064, 8.7516, 4.3917, -0.7236, -5.3026, -7.9288, -8.3773, -7.4784, -3.7859, -2.5186, 0.02, -1.5465, 0.1954, -10.783, -12.0301, -3.0579, -25.8283, + 18.6591, 22.3501, 23.5831, 19.0252, 13.9063, 13.3289, 9.0463, -3.2346, 1.2718, 1.4619, -4.3706, -7.4089, -10.771, -11.8151, -0.8947, -8.7094, -22.3259, -8.0672, -18.5235, -26.5118, + 3.2886, 3.8514, 1.5062, 4.9096, 3.9001, 3.8964, -0.6349, -1.5534, -1.3119, -2.313, -1.8455, -3.5666, -2.6094, 3.4411, -1.0089, -3.0556, 4.525, 3.3979, 1.1349, -15.952, + -5.6652, -3.8931, -1.8885, 1.6299, 2.3371, 2.0746, 2.1285, 0.4372, 0.0031, 4.2521, 5.201, 3.3227, 2.8933, 1.9467, 2.1449, 0.9405, 2.168, 2.3807, -1.3113, -21.1022, + 21.727, 24.2953, 23.2112, 13.4917, 7.3423, 1.4843, -3.1924, -4.8355, -10.3896, -11.396, -12.8133, -11.6304, -9.9774, -2.6034, 3.7943, 3.526, -4.2988, -6.0579, 0.3494, -22.0269, + 7.1102, 6.3521, 11.665, 18.7864, 16.7459, 8.3216, 5.8454, 4.3436, 9.4868, 7.7601, -3.1382, -10.3196, -14.1642, -15.1634, -11.6972, -1.82, -7.1959, -8.5258, -1.8553, -22.5374, + 14.2212, 17.8028, 21.4842, 24.9383, 24.9854, 22.3982, 21.377, 20.9687, 13.4315, 0.0683, -9.1695, -13.1215, -13.8982, -14.9798, -18.1636, -20.5802, -22.0396, -23.026, -22.3178, -24.3795, + 8.9039, 9.7955, 9.3225, 11.7206, 17.8844, 21.1802, 19.2262, 17.3421, 13.9029, 7.386, -2.6995, -8.3297, -10.1319, -8.7756, -6.059, -8.7597, -15.4747, -24.0243, -25.5723, -26.8375, + 3.8554, 4.2234, 6.2441, 12.5445, 18.1461, 14.0699, 5.9992, 2.722, 1.0526, 2.1813, 9.5825, 3.3502, -4.3618, -5.0291, 0.561, -10.3142, -15.3449, -12.7063, -7.6401, -29.1358, + -8.9085, -6.1917, -3.8341, 0.0473, -0.3559, -1.0455, 0.4343, 0.7424, 0.1788, -2.4081, -1.5815, 0.7755, 2.7896, -0.3538, 0.5914, 4.753, 5.3039, 5.5717, 8.461, -4.9697, + 6.0177, 9.1902, 12.54, 17.665, 18.0833, 11.1113, 3.6376, -0.9348, -2.434, -3.3221, -2.487, 5.475, 6.1443, -3.6923, -2.5169, -0.6902, -11.0083, -16.8129, -17.3554, -28.6106, + 12.6629, 16.5188, 17.012, 11.3763, 2.7817, -0.7077, -5.5288, -8.1972, -9.1883, -10.5072, -9.3239, -6.2042, 2.0877, 8.3448, 2.7802, 8.4635, -5.0126, -9.023, -5.59, -12.7449, + 26.6077, 25.1133, 19.7421, 13.7493, 7.5294, 4.8418, 5.8235, 5.9404, 3.3399, 4.8147, -1.6758, -4.4299, -7.1722, -6.547, -9.6023, -9.9251, -17.0327, -19.5694, -18.7525, -22.7953, + 9.3391, 15.4719, 19.7226, 13.6838, 5.7655, 2.9423, -0.2309, -3.0447, -5.0071, -3.643, 3.6089, 8.1171, -1.0555, -2.536, 2.0952, -6.4482, -11.0547, -9.9411, -11.5931, -26.1921, + 6.7164, 12.9088, 8.1465, 2.9974, -1.5306, 3.7966, 4.6355, 0.1956, -4.4054, 2.5643, -3.5126, -0.4027, 0.5107, -1.6406, 0.9829, -5.6846, -0.0083, -4.8894, -3.3272, -18.0535, + 1.8584, 3.5453, 10.7864, 10.3313, 8.8364, 11.3153, 12.655, 8.0839, 10.2072, 14.1247, 0.1105, 4.9955, 5.9811, 7.9709, 7.5141, -6.0319, -21.0185, -23.4977, -32.6987, -35.0693, + 13.1044, 15.4062, 17.5958, 18.0756, 11.3524, 4.367, 2.6428, 0.8781, 0.0399, 6.6751, 8.2361, -2.6757, -10.1776, -9.8299, -3.1506, -9.5151, -14.3971, -6.2859, -13.5883, -28.7532, + 0.0688, 2.2921, 6.5965, 8.3598, 8.2327, 8.6486, 7.1471, 7.1631, 4.4823, 3.4067, 11.3001, 9.5567, 0.6574, -2.5849, -6.7404, -8.6614, -8.6399, -12.0189, -13.1958, -26.0705, + 9.5134, 11.1944, 14.6379, 21.3303, 20.9351, 12.8622, 5.9234, 3.0673, 0.5662, 2.8569, 7.4992, -0.6339, -9.8527, -12.4761, -11.2573, -4.7464, -13.594, -18.0638, -14.8928, -24.8691, + 5.5904, 5.1588, 4.7053, 4.3271, 5.8271, 9.5093, 8.411, 1.6453, -2.2667, -2.6767, -1.4248, -1.126, 2.4114, -1.8009, -4.819, -8.2201, -2.9355, -0.2567, -0.3488, -21.7105, + 0.4175, 1.2148, 5.1829, 9.3743, 9.7458, 5.9476, 5.0377, 2.5369, -2.7391, -8.896, -11.0818, -7.065, -7.4393, -1.4335, 10.1963, 9.6385, 5.0133, -4.2894, -3.8725, -17.489, + 8.8274, 9.1037, 13.6965, 18.9331, 20.496, 15.7102, 9.1227, 5.5813, 1.7546, 1.3849, 6.9672, 6.4807, 5.2247, 4.2668, -9.8256, -18.2374, -24.2455, -24.1902, -22.7864, -28.2649, + -10.4296, -11.2348, -7.6061, -8.6646, -7.9499, -6.125, -4.3918, -6.8877, -5.4461, -2.2579, -1.3507, 2.298, 4.8244, 12.7426, 12.4434, 14.4927, 14.8125, 12.9871, 9.6224, -11.879, + 8.889, 12.0408, 17.2338, 23.3492, 22.1801, 17.325, 16.4611, 18.6109, 12.0359, -2.1102, -7.5218, -11.7288, -11.4854, -7.679, -11.7033, -21.2349, -23.6258, -19.3358, -7.8566, -23.8442, + -7.7648, -7.6325, -5.9874, -5.7763, -5.5038, -4.9788, -3.5524, -3.9264, -4.7269, -2.6727, -1.6911, -0.4884, 1.8633, 1.5449, 3.1375, 9.0909, 11.6855, 13.422, 16.9117, -2.9544, + 17.5979, 21.004, 20.369, 15.7264, 13.3239, 13.0722, 13.4678, 1.7577, -6.0904, -6.9925, -8.3415, -10.6335, -9.5482, -1.5234, 3.987, -6.9271, -17.4878, -18.4739, -8.9267, -25.3608, + 6.1805, 4.1462, 3.501, 2.723, 3.9708, 8.1302, 9.491, 3.6927, 2.979, 2.0598, -0.61, -1.6298, -2.5238, -2.5441, -3.9959, -2.7189, -3.9403, -3.9477, -4.9568, -20.0067, + 7.7322, 4.4707, 5.232, 7.8782, 9.1005, 5.4418, 6.0577, 3.7093, 0.1939, -0.2785, 1.1984, -2.6011, 0.6595, 2.7395, -0.9452, -4.5096, -8.4529, -6.4501, -6.8768, -24.2995, + -6.4169, -3.8203, -3.3676, -1.3384, 0.0068, -0.0917, -0.654, -1.1092, -2.2062, -2.8976, -3.0409, -2.6706, 2.975, 6.3064, 7.4779, 12.0806, 5.7715, 5.5715, 0.9432, -13.5194, + 7.6067, 9.3813, 13.4849, 19.9139, 22.7781, 18.435, 15.914, 18.9134, 10.1002, -4.3291, -8.2178, -13.6741, -15.704, -16.5313, -14.1193, -3.7115, -13.7922, -12.8183, -7.7992, -25.8309, + 4.7167, 3.8923, 5.7519, 8.0369, 12.8563, 16.738, 15.0698, 9.7568, 7.4623, 7.4165, 7.755, 1.1797, -6.3964, -6.5897, -1.5093, -9.7231, -17.0341, -15.7607, -12.6623, -30.9568, + 9.6098, 13.4286, 18.728, 18.1791, 9.8536, 3.5779, 1.4841, 0.4639, -0.5329, 2.6536, 9.8742, -3.2808, -8.9269, -11.0817, -6.3122, -2.5681, -15.3236, -12.3977, -1.9946, -25.4341, + 3.899, 7.6431, 13.4623, 16.8504, 10.0821, 3.4259, -0.1709, -4.7791, -8.1809, -9.2214, -8.3021, -5.9798, 2.0125, 6.9915, 1.4712, 6.5493, -3.7836, -4.9571, 1.3613, -28.3737, + 13.9079, 16.7984, 20.6342, 24.6533, 24.3507, 19.3643, 17.9172, 18.392, 11.702, 0.001, -10.1043, -14.9084, -18.2285, -20.4094, -21.5267, -19.7383, -13.5385, -9.5045, -16.6159, -23.1465, + 7.1797, 11.3922, 15.749, 19.3949, 17.3819, 10.7478, 7.3006, 6.1472, 9.1598, 11.0073, 4.7816, -2.4892, -3.7349, -3.7521, -1.7971, -9.8976, -22.2914, -25.755, -23.0236, -27.501, + 5.66, 8.46, 10.4652, 12.1954, 14.9914, 18.5645, 17.0459, 10.3163, 4.813, 2.322, 0.5889, 4.1108, 1.2082, -9.395, -13.7061, -13.109, -10.106, -11.3113, -21.8744, -31.2396, + -1.8886, -0.7563, 0.4909, 4.9127, 6.9239, 5.1456, 6.2254, 6.4299, 5.1768, 9.199, 13.2223, 5.4194, -3.0538, -4.7242, -5.1855, -3.7939, -7.3421, -6.1816, -4.3871, -25.8328, + 11.3455, 9.9507, 8.1659, 6.0877, 1.4526, 0.9704, 4.7975, 4.0208, -0.5941, 2.5357, 1.534, -4.3306, -1.6103, -4.4373, -0.0323, -2.6725, -2.0195, -3.5278, -6.3697, -25.2666, + -0.8009, 5.6194, 7.0974, 6.1331, 7.2063, 7.4038, 4.5741, 8.4379, 4.2968, 7.9137, 13.0725, 2.3362, 0.6963, -2.4917, -4.9374, -7.2728, -8.216, -9.6329, -14.4558, -26.98, + 9.4449, 12.499, 15.8206, 17.3018, 10.9373, 5.5366, 0.8716, -1.2105, -2.477, -3.4484, 1.0611, 6.1591, -1.7466, -7.5929, -6.9295, -2.1338, -8.9361, -10.3674, -6.3554, -28.4344, + 11.5326, 10.9047, 16.3163, 21.0845, 11.9757, 7.0511, 0.8356, -4.987, -6.945, -9.2309, -9.7748, -8.2038, -2.2957, 5.5139, -5.4119, -2.741, 2.4166, -7.4497, -6.0628, -24.5286, + 9.3064, 9.3678, 11.2235, 13.9991, 14.4345, 11.1982, 6.3282, 1.4131, -2.6884, -7.1825, -11.0075, -12.3749, -9.2573, -6.0414, 2.3206, 4.6097, 3.567, -3.2208, -9.5445, -26.4507, + -6.7163, -6.0323, -3.7943, 0.882, 3.6629, 4.3198, 4.7402, 4.0799, 4.8854, 5.8718, 8.3927, 9.6825, 10.5717, 3.8917, 0.9125, -1.2807, -3.7018, -5.757, -8.2525, -26.3582, + 10.2748, 11.6455, 16.3809, 20.149, 18.2488, 12.7899, 10.3972, 8.0106, -0.6794, -6.4024, -9.7054, -13.5667, -14.6497, -16.1902, -6.9531, 0.2117, -0.7067, -1.2331, -10.6728, -27.3488, + 13.3782, 16.35, 15.3612, 8.9247, 3.489, -0.7729, -2.6106, -7.5432, -8.0129, -7.614, -7.8535, -2.4356, 6.505, -4.5887, -3.2816, 5.8982, -1.3889, 0.3111, 0.3606, -24.4762, + 10.0811, 14.1057, 20.3635, 24.0314, 20.369, 17.0236, 16.446, 19.2548, 6.0111, -3.4365, -9.9143, -13.0905, -15.015, -11.4726, -6.6405, -10.0976, -14.6658, -19.9459, -19.48, -23.9274, + -7.1817, -5.5458, -1.6137, 0.8007, 1.9284, 2.5116, 0.3432, 3.3359, 0.2833, -1.3305, -2.496, -1.6366, -2.6968, 3.6695, 6.8225, 4.4926, 6.194, 6.7541, 2.2072, -16.8418, + 9.6326, 11.3478, 14.3982, 20.7665, 19.7772, 12.3406, 6.1933, 1.0438, -1.1521, -1.586, 1.844, 7.8419, -1.5328, -9.8703, -10.1973, -2.244, -12.0413, -18.5948, -20.6014, -27.366, + 1.5056, 1.688, 4.2152, 9.5291, 17.0514, 16.2096, 8.5432, 4.2111, 4.4898, 11.7231, 5.577, -4.8191, -7.502, -5.9733, -0.7664, -10.2798, -14.8967, -9.8638, -3.1062, -27.5357, + 15.2115, 17.9992, 21.5012, 24.9136, 19.176, 15.8798, 16.4094, 17.804, 5.9025, -3.3769, -10.4408, -15.3738, -18.5882, -19.7882, -17.7007, -14.2386, -13.9566, -13.8247, -5.8162, -21.6922, + 12.1911, 17.2966, 17.4896, 10.6943, 3.5061, -0.1018, -2.5405, -6.3143, -7.6095, -8.5828, -7.4501, -2.2275, 8.4004, 0.023, -1.6734, 2.8727, -8.2243, -7.2548, -0.595, -19.8998, + -0.4264, 0.0708, 1.9133, 6.0904, 12.781, 17.8469, 12.0313, 4.9753, 4.279, 6.9401, 10.3052, 0.2003, -6.7328, -10.0168, -10.0292, -2.7869, -5.6536, -9.3242, -6.0818, -26.3818, + 7.8387, 12.9821, 20.1116, 21.8527, 15.0291, 10.4182, 9.9996, 12.5177, 11.6815, -0.1048, -5.5624, -6.4577, -2.0918, -6.3498, -17.7376, -20.9015, -21.1073, -13.6752, -3.7477, -24.6953, + 18.0184, 21.7405, 20.202, 16.4376, 12.3859, 12.2417, 12.1975, 6.3324, -4.4281, -11.4734, -5.9353, -8.8421, -10.328, -4.7973, 3.4477, 1.4017, -15.9637, -17.1346, -16.9459, -28.5571, + 8.9922, 8.4069, 10.2569, 10.5303, 10.1285, 4.9362, 1.8698, -0.0537, -5.3906, -5.9983, -4.6797, 1.6021, -1.9697, -5.3874, -2.3336, -0.9265, -2.7071, -2.3523, -3.3933, -21.5307, + 0.1643, -2.21, -0.9888, -3.4801, -0.5275, -1.468, -0.5683, -1.5514, -0.4216, 0.5034, -0.8521, -2.7835, 0.5014, -1.2182, -0.7495, 5.2974, 5.8643, 8.2766, 6.0259, -9.8143, + 7.672, 8.0788, 9.1059, 14.2217, 21.6149, 24.6272, 15.4198, 12.7487, 14.5686, 14.3925, 0.6524, -7.7122, -12.314, -13.4374, -8.0366, -14.9387, -21.7305, -22.0625, -19.3233, -23.5474, + 2.2815, 1.7578, -0.6674, 1.7705, 0.4755, 0.4978, -1.3799, -2.1107, -2.6075, -3.5652, -2.8715, -6.8295, -1.7109, 2.8096, -0.7449, 2.5543, 8.6739, -0.5359, 6.8846, -4.6821, + 18.2027, 16.9209, 12.1191, 7.6862, 3.0545, 0.5751, -1.6156, -1.2378, -3.1289, -4.2377, -5.6464, -5.0994, -5.0515, -1.2417, 1.1802, 1.1938, 0.3821, -6.3202, -6.4152, -21.3203, + 3.5023, 4.9407, 6.5095, 8.9494, 13.2647, 15.1725, 11.9431, 6.2423, 1.1652, -1.6313, -2.9929, -1.9072, 3.4422, 2.8306, -3.2309, -5.3351, -2.3238, -10.7536, -17.8375, -31.9502, + 4.7778, 10.318, 13.9538, 16.0868, 9.138, 2.9991, -0.6627, -4.2067, -5.6625, -4.9839, -1.2287, 7.7334, 9.3244, 7.4153, -4.1228, -11.6166, -8.7569, -5.6012, -5.8002, -29.1044, + -3.8341, -1.3838, -0.9472, -0.4209, 1.7906, 4.2155, 2.2324, 4.3091, 1.1357, 8.4456, 9.7973, 6.3722, 2.6068, 0.3293, 0.1016, -0.3203, -4.2313, -3.6986, -3.9405, -22.5593, + 7.9933, 10.952, 14.6109, 19.7867, 15.1983, 6.5296, 4.9056, 0.7415, -0.5271, -0.1092, 6.9036, 12.3792, 7.7901, 2.0866, -9.1117, -12.3605, -5.7793, -23.1437, -29.0076, -29.8384, + 25.899, 23.1895, 19.6721, 15.4616, 9.3167, 5.4831, 6.1546, 7.4477, 4.2279, -1.3757, -8.0309, -11.4646, -10.4795, -7.5543, -4.2227, -6.0439, -16.4547, -16.3865, -13.0397, -21.7998, + 5.9702, 6.6918, 8.5551, 14.7594, 15.5278, 10.2403, 6.0423, 1.7099, -0.1415, 0.4245, 5.8906, 10.2752, 2.9571, 1.0304, -7.5844, -15.493, -16.0321, -8.3602, -12.0263, -30.437, + 0.2377, 1.249, 0.9118, 1.8024, 3.7548, 4.8963, 5.1515, 4.2684, 0.3786, 0.5058, 0.4839, -0.9914, 1.4073, 1.1727, -2.9065, -4.4307, -6.9456, -0.2385, 0.3969, -11.1044, + 4.9017, 3.2442, -1.2482, -1.2472, -2.0773, -5.4371, 0.3708, 4.1825, 12.1289, 1.295, -2.3136, -3.1723, -0.4429, -1.6571, -9.7455, 6.5626, 13.4075, 7.0987, -2.0865, -23.7642, + 26.5958, 8.4474, 11.9082, 11.6976, 1.401, -0.25, 3.9848, 3.6429, -6.0468, 2.5341, -5.2699, -11.5085, 3.8103, -6.3108, -2.4679, 2.153, -6.3876, -7.178, -8.406, -22.3496, + 2.2962, 0.8041, 0.8352, 6.615, 14.5461, 15.0856, 3.2964, 0.5549, -1.6557, -2.0236, 2.8955, 7.5016, -1.2031, -5.6899, -4.7833, 1.2942, -7.3403, -8.3771, -4.0417, -20.61, + -3.152, -0.4969, 6.6485, 7.8768, 5.5605, 6.5283, 5.6337, 4.1543, 13.9779, 2.7762, 6.1398, -3.707, -1.7982, -2.8944, -6.0041, -6.5265, -11.4873, -1.5122, 6.058, -27.7754, + -8.002, -4.6131, -0.7821, 3.316, 4.4465, 4.7754, 2.8155, 1.0612, 4.806, 6.0492, 5.939, 3.1446, 2.8568, -0.6657, -2.6961, -2.15, -0.9756, -0.2816, -1.9847, -17.0594, + 12.4378, 17.8157, 22.2857, 21.4926, 15.3987, 11.6565, 8.461, -5.9608, -14.7466, -15.8101, -21.885, -17.3295, -13.0545, -3.3503, 5.7314, 1.5346, 1.1396, -7.594, -1.8366, -16.3862, + 0.8964, 0.1937, 0.1104, 1.6479, 5.6517, 12.189, 10.2771, 4.4234, 1.0502, -0.5311, 1.2594, 6.8796, 5.2931, -3.9156, -6.05, -0.9098, -4.2858, -6.9837, -7.0958, -20.1002, + 19.8439, 13.428, 9.6622, 10.665, 8.095, 5.5066, 1.7572, -1.0429, -0.8012, -2.8142, -0.4934, 1.3117, 0.5243, -6.173, -8.129, -6.3324, -1.5063, -10.0417, -9.139, -24.3207, + -2.7279, -1.7097, -1.1534, 1.6639, 5.7537, 6.7942, 10.6044, 12.5105, 10.6069, 10.0936, 6.6639, 5.768, -0.0784, -3.9348, -2.0808, -2.5423, -7.773, -12.2311, -11.4054, -24.8224, + 10.1275, 12.1619, 16.2723, 20.8127, 20.974, 14.8019, 10.1842, 6.5306, 4.4543, 7.4531, 12.2713, 6.962, 6.8204, -5.0668, -18.1362, -24.0479, -25.9037, -25.4208, -24.389, -26.8618, + -9.9466, -6.5695, -9.8093, -1.7391, 0.058, 3.2073, 7.0375, 2.3619, -1.1764, -5.8692, 0.305, -4.2033, 11.2777, -0.3904, 7.8268, 9.8649, 4.7504, 6.9825, 7.6743, -21.6424, + 14.0137, 16.9699, 19.0697, 15.0058, 7.0268, 5.9083, 2.9474, 2.1595, 3.8159, 7.2602, 11.3975, 7.5965, 1.66, -6.7074, -13.8401, -15.7435, -16.6488, -16.4066, -16.4466, -29.0384, + 6.2399, 3.2858, -0.2213, -1.4923, 1.3132, 3.933, 3.5221, 2.8631, 1.3615, -0.079, -1.0125, -1.0737, -0.3033, -0.848, -0.4749, -1.1495, 0.1031, -0.209, -1.3002, -14.458, + 14.6593, 20.5101, 23.6344, 20.8409, 12.562, 6.6891, 3.7103, -0.8534, -3.6042, -5.9363, -7.011, -3.7764, 1.6775, -5.6072, -12.2281, -10.8044, -4.3275, -11.1148, -14.7836, -24.2367, + 17.5445, 22.4817, 15.1353, 12.588, 5.1049, 1.9643, 5.3928, -3.5987, -0.475, 11.7373, 12.9388, -3.8264, -3.5752, -8.3127, 9.4226, -10.0441, -20.2747, -19.0638, -21.801, -23.3385, + 11.5639, 14.1176, 19.178, 24.7909, 18.2344, 11.0457, 8.2594, 6.6617, 7.5852, 14.184, 12.1883, 7.8148, -0.4947, -16.4472, -21.5615, -22.7378, -21.8493, -21.9703, -24.981, -25.582, + 7.3833, 6.5793, 5.7205, 10.2722, 16.6567, 15.1599, 9.5922, 5.5668, 5.0234, 9.3817, 5.3741, -5.1082, -9.8091, -12.3432, -12.5495, -6.2366, -5.9929, -8.3697, -6.8581, -29.4426, + 0.3726, -5.6285, -3.2253, 2.1557, 3.8332, 12.1538, 14.6059, 12.3634, 15.7294, 17.0679, 4.8054, -1.6834, -7.5585, -11.9417, -12.8749, -9.7037, -1.2933, -5.8852, -6.0304, -17.2623, + 12.4589, 17.5375, 23.1698, 18.7129, 9.0574, 6.8369, 3.3366, -0.7668, -3.5028, -5.8079, -2.0422, 3.5413, -5.492, -15.4559, -14.9601, -7.186, -2.1139, -10.3945, -4.5301, -22.3991, + 7.7831, 5.9803, 3.3957, 1.1363, 0.6624, -0.3876, -1.227, 0.535, 0.3563, 5.2276, 9.1991, 8.9238, 2.632, -1.9335, -4.212, -2.5342, -1.0999, -4.9168, -4.9485, -24.572, + 12.7865, 11.7808, 12.0132, 12.7418, 11.7725, 11.2618, 10.9064, 7.0094, 3.3808, -2.3233, -4.5714, -6.7413, -8.0255, -8.7048, -10.995, -7.0616, -9.371, -7.6597, -4.91, -23.2897, + 7.4583, 10.3954, 16.3813, 20.381, 16.5656, 9.1371, 4.5296, 4.0559, 6.8658, 9.8043, 0.1187, -6.6202, -8.4161, -2.4957, -9.4787, -16.3418, -17.6122, -13.1639, -7.5007, -24.0638, + 10.5778, 12.5102, 15.45, 16.251, 14.1076, 12.4513, 11.9259, 10.4537, 6.3771, 1.6824, -3.8825, -5.5239, -8.8633, -8.0708, -4.646, -3.2386, -13.9943, -17.4761, -15.8823, -30.2093, + 16.545, 21.4563, 20.013, 10.542, 0.7521, -0.1817, -5.7313, -0.269, -4.1817, -0.5968, 6.2079, 4.1626, -0.4622, 5.1095, -10.2058, -16.0783, -19.9597, -11.663, 4.3789, -19.838, + 0.6538, 1.9228, 2.293, 5.2351, 12.5744, 11.0394, 7.485, 0.8228, -3.4564, -5.0324, -2.9456, 4.4755, 9.605, 1.6136, 0.0025, -0.9954, -6.7769, -7.886, -2.933, -27.6973, + 14.1315, 17.7109, 22.9482, 25.5022, 19.8506, 12.4355, 10.8121, 14.0608, 12.2635, -2.6541, -11.3457, -15.5204, -18.073, -18.739, -15.772, -7.2576, -9.9721, -9.7355, -17.106, -23.54, + -5.7314, -4.059, 1.0581, 0.9805, 1.3616, 2.7093, 6.3692, 11.6381, 12.018, 9.1818, 6.8001, 1.9409, 3.0785, -2.5335, -5.799, -0.6774, 0.8325, -4.7436, -7.1073, -27.3175, + -1.064, 0.7851, 2.716, 6.1021, 12.1198, 15.4431, 10.3026, 4.0089, 1.9648, -0.0384, 2.4993, 9.2599, 1.9572, -4.2838, -3.1953, -1.1928, -7.8283, -8.5999, -10.0789, -30.8773, + -5.6296, -4.3307, -2.3209, -0.8933, 0.2894, -1.9304, -2.0575, -2.778, -6.2185, -5.9192, -6.6197, -5.5076, 1.7, -2.2417, 6.734, 9.7221, 5.4135, 15.423, 16.2356, -9.0706, + 21.8983, 23.2393, 21.5176, 17.3026, 15.6381, 10.7095, -4.6739, -9.4131, -7.3736, -9.636, -10.3893, -7.6173, -3.694, 2.4229, 12.3234, -14.8401, -14.2133, -12.879, -4.4302, -25.8921, + 11.8056, 15.656, 20.2939, 16.8416, 9.1858, 2.5617, 2.6711, -1.0207, -1.45, -0.2437, 6.6714, 6.5193, -0.4136, -1.1308, -3.7531, -13.8441, -14.3531, -10.4897, -18.0817, -27.4259, + 55.7273, 39.936, 26.2526, 15.0127, 6.4718, 0.7391, -2.3157, -3.1939, -2.9475, -3.3569, -5.3235, -7.9446, -10.6626, -13.1662, -14.21, -14.4691, -14.4121, -13.8376, -15.6433, -22.6564, + 3.7665, 2.9173, 4.2496, 1.847, 7.9023, 14.8241, 11.0448, 3.454, 2.7173, -3.8368, 2.5626, 4.5604, 2.9217, -9.5401, -8.3622, -8.8234, -1.4224, -0.0449, -2.7094, -28.0285, + -9.3983, -8.0419, -4.4832, 1.9754, -0.3749, 4.6985, 6.4445, 3.4462, 1.2139, 4.153, -6.0488, 0.4383, 7.0647, 3.8491, 2.7818, -2.689, 2.0052, 6.3893, 4.3086, -17.7324, + 10.6303, 13.7716, 17.1718, 20.1678, 12.2486, 3.36, 2.4058, -2.5934, -4.8765, -6.0115, -4.6562, -0.7932, 8.0003, -2.284, -3.8243, 0.1863, -9.1648, -14.9839, -14.094, -24.6607, + 16.6586, 21.6444, 20.8223, 12.8954, 8.1955, 4.1214, 1.5648, -2.8573, -5.5724, -6.5555, -5.8004, -2.3591, 4.833, -0.2831, 0.7092, -9.8961, -15.4807, -12.0228, -6.1807, -24.4365, + 6.2715, 7.1856, 9.0377, 12.3924, 19.0793, 22.2584, 18.7678, 12.6682, 9.6569, 13.2645, 2.9549, -2.9501, -4.4734, -4.244, -12.7065, -19.5653, -21.3156, -21.7041, -19.8037, -26.7746, + 6.6118, 7.9766, 9.5899, 16.7112, 22.8331, 15.9736, 8.1328, 4.9522, 3.0471, 7.2666, 11.8402, -1.4154, -4.2808, -5.2523, -8.9476, -17.0691, -18.3281, -12.6216, -21.0003, -26.0198, + 17.3127, 17.4868, 17.7344, 12.4834, 5.8856, 4.6009, 1.073, -2.7678, -2.0723, -0.4628, -3.7999, -5.837, -8.6148, -7.6108, -6.5104, -2.5688, -1.6184, -6.1466, -7.5013, -21.0659, + 3.4054, 5.0769, 7.0766, 9.8006, 20.025, 22.5645, 11.5478, 6.2329, 4.4723, 6.4844, 10.6573, 0.2331, -6.2477, -11.087, -10.3507, -4.2484, -15.1989, -19.0756, -16.4193, -24.9492, + 4.7627, -2.1833, -2.2828, -3.7716, 2.8453, 7.51, 11.3439, 6.188, 0.3611, -1.2837, -10.299, -7.9318, -4.0985, 1.3582, 6.4088, 6.3304, 9.4372, -0.3781, -7.0962, -17.2205, + 0.0639, 1.7461, 3.2578, 7.1373, 14.2936, 21.0383, 16.8137, 10.1108, 14.304, 14.1399, 0.3676, -6.3231, -10.5295, -12.7919, -9.1838, -2.4821, -12.1068, -13.6518, -9.174, -27.0298, + 6.2012, 6.2177, 8.6617, 15.7008, 20.0807, 16.3263, 9.7644, 7.667, 11.6809, 8.6315, -2.6559, -7.4948, -10.0457, -10.1131, -6.9875, -12.9972, -15.776, -10.0148, -6.4425, -28.4048, + 8.4071, 5.8192, 3.5662, 1.9627, 2.4472, 1.8597, -0.737, 2.3814, 0.1779, 1.4958, 2.9385, -6.0143, -2.3152, 0.3049, -1.7145, 0.7158, -1.3399, -5.1439, 2.0438, -16.8555, + 7.4409, 3.3788, 6.5115, 14.5248, 13.0646, 4.0268, -1.1894, -5.0999, -7.691, -8.4282, -7.9356, -3.3516, 6.9774, 0.9806, -1.3988, 5.5785, -3.1694, -5.2282, 1.6484, -20.6401, + 11.6728, 5.2904, 7.2713, 8.1521, 8.6202, 4.839, 1.9077, -2.7604, -4.5028, -8.9428, -12.4662, -11.0383, -4.7642, 4.2903, 3.3702, 1.0547, 5.8752, 0.7203, -0.1952, -18.3942, + 1.7662, 2.1132, 0.6823, 0.5069, -0.7694, -0.573, -0.6749, 0.4539, -2.385, -0.8937, 3.2905, 1.9366, 4.8907, 8.891, 3.4773, 1.6832, -0.385, -1.0325, -5.4486, -17.5299, + 11.1327, 8.1369, 5.9398, 7.2387, 9.0755, 13.7563, 15.6715, 10.9671, 4.3603, 6.5521, 8.2784, 8.2998, -3.5109, -8.8874, -13.5723, -11.9565, -11.2912, -14.9059, -15.3573, -29.9274, + 17.2359, 18.8517, 18.1626, 16.5245, 13.3466, 10.8703, 8.4673, 4.7337, 2.635, 0.0183, 1.1954, 4.7388, -2.9359, -6.0731, -7.4347, -16.3769, -19.935, -20.0072, -15.2078, -28.8095, + 15.9881, 16.1253, 11.9372, 8.7157, 5.3883, 4.3873, 5.5095, 5.6589, 0.5361, -1.1208, -4.817, -4.8077, -4.2337, -3.8897, -5.7866, -5.1486, -6.6937, -4.6271, -8.1104, -25.0113, + 10.5287, 10.4645, 11.0189, 12.4921, 10.2092, 2.1803, 0.6775, -1.9607, -7.8737, -8.5232, -10.8456, -10.0601, -9.5234, -5.7091, 4.1283, 1.9979, 4.9082, 2.3842, -1.6831, -14.8109, + 6.8712, 7.1195, 7.8478, 9.0102, 7.5469, 4.9121, 6.0618, 3.0705, 0.6628, 1.7728, 2.714, 6.3541, 3.1029, -4.2377, -6.3687, -2.2545, -6.3865, -11.4164, -9.6711, -26.7119, + 16.6601, 22.046, 20.3084, 13.4923, 8.0021, 8.7024, 10.126, 10.4026, 4.1888, -3.7328, -6.171, -10.8693, -16.0494, -7.8483, 0.2833, 3.3381, -13.0116, -16.9474, -14.2501, -28.6704, + -1.6472, -1.5329, -0.7265, -0.859, 1.55, 3.3445, 6.06, 5.7678, 2.9402, 4.2316, 1.8384, -2.4116, 1.7488, -1.1846, 0.2843, -0.4495, 1.5215, -2.2191, -1.2847, -16.9723, + 5.4499, 9.2168, 13.6525, 18.6245, 21.2266, 16.3225, 10.2029, 13.7648, 16.3433, 7.8345, -0.8506, -3.0654, 0.8282, -4.7895, -14.3191, -13.6263, -16.5382, -25.7242, -26.3799, -28.1733, + 5.4928, 7.273, 11.4735, 16.9546, 13.9651, 4.9178, 1.4991, -1.5005, -3.3689, -4.2367, 1.4622, 8.4912, 0.6337, -0.2593, 0.3732, -7.8143, -10.1871, -7.5615, -7.0778, -30.5301, + 6.6781, 5.8903, 6.7632, 9.181, 8.8397, 9.7239, 8.7155, 7.797, 6.3227, 3.4228, 0.2514, 0.111, -1.6716, -5.4364, -5.9387, -8.2352, -7.5149, -7.0855, -8.8552, -28.9591, + 11.8209, 17.497, 19.5821, 14.6674, 8.781, 10.5929, 17.1599, 11.1304, -1.5934, -2.4291, -7.104, -7.2023, -9.3009, -11.7782, -8.5498, -11.3872, -9.756, -0.1211, -12.0128, -29.997, + 10.1575, 12.1948, 14.9933, 16.4447, 14.1842, 8.2787, 4.1829, 1.5996, -0.4007, 2.6686, 4.592, 3.807, -0.5362, -2.8498, -6.0317, -8.0974, -11.2561, -15.969, -16.7096, -31.2528, + 17.3728, 16.5602, 12.158, 2.2953, -0.7338, -2.2088, -3.006, -3.495, -5.7703, -1.8968, -4.1417, -2.255, -0.4691, -0.6536, -2.4783, -1.3584, 1.113, -1.5486, -2.18, -17.3041, + 10.9509, 14.6912, 20.9171, 20.7445, 13.3882, 9.0276, 8.481, 10.448, 11.1634, -1.3107, -8.8976, -12.455, -14.1419, -12.2168, -8.1653, -9.184, -14.6536, -10.7798, -3.349, -24.6582, + -4.2511, -4.318, -6.4235, -4.0719, -2.3887, -3.1485, -4.2032, -3.5194, -7.501, -5.4107, -2.3368, 0.6165, -2.548, -6.5746, 5.71, 1.8165, 14.8553, 24.383, 15.8024, -6.4884, + 6.8815, 10.8626, 15.3667, 14.4704, 2.5878, 0.6962, -3.7687, -7.2033, -9.3334, -10.5308, -9.619, -8.2135, -3.3921, 8.1225, 8.7748, 9.4979, -0.1825, -3.9609, 2.5378, -23.5939, + 10.7457, 13.4613, 16.3838, 18.1633, 11.9764, 6.2322, 2.2046, -1.6815, -5.4025, -5.3261, -1.9194, 5.785, 7.0183, 8.8506, -7.0398, -15.809, -17.0181, -9.4482, -9.5562, -27.6203, + 4.4895, 6.7459, 11.3127, 18.7251, 18.1351, 6.5502, 1.1677, -1.0341, -3.9953, -2.3382, 3.5745, 11.8555, 2.9192, 6.0596, -4.8984, -13.0118, -16.247, -15.0252, -10.6982, -24.2871, + 10.1449, 10.3471, 14.749, 16.1718, 16.9528, 11.3815, 6.8749, 1.4265, -2.7864, -6.1956, -8.0139, -7.8556, -2.8591, 4.0596, 5.4548, 3.3633, -10.2166, -16.2406, -18.8135, -27.945, + 9.5266, 9.8619, 11.6564, 16.1435, 22.5856, 19.0228, 9.5649, 5.1013, 3.9082, 6.9523, 9.4453, -4.8784, -10.6008, -16.0258, -16.6123, -14.774, -6.6639, -13.8342, -16.3927, -23.9867, + -2.8166, -0.2578, 2.8925, 4.4555, 5.6756, 4.6914, 3.4417, 3.4041, 1.889, 1.8575, -0.5242, 1.9867, 0.9536, -0.9744, -1.401, -2.1961, -1.2827, -2.3186, -2.1481, -17.3281, + 6.5757, 10.4876, 15.8653, 20.5177, 18.3749, 8.4114, 4.7411, 0.5009, -2.9659, -4.1461, -4.5681, -0.6566, 5.8038, -2.3737, -8.5532, -6.5787, -2.8561, -13.7548, -17.8769, -26.9485, + 7.1295, 8.3469, 8.9916, 14.7649, 20.5, 15.5149, 7.3359, 0.6792, -1.5195, -5.0373, 0.9468, 7.0372, -4.0339, -9.7787, -8.9444, -0.8558, -12.0386, -13.0157, -7.1764, -28.8465, + -6.3643, -3.56, -0.9853, 1.3808, 3.5164, 4.4752, 4.2783, 4.1699, 0.4058, -0.8097, -0.9913, 3.1386, 9.3653, -1.1057, -1.2662, 0.7587, 1.7985, -2.7481, 1.1071, -16.5641, + 10.8441, 6.1056, 4.5464, 11.5523, 11.5304, 4.8593, 1.2036, 0.6177, -6.5224, -11.5032, -13.3278, -7.1852, -1.6717, 9.2735, 6.7578, -0.905, -7.2789, -6.0827, 3.0089, -15.8228, + 2.43, 2.4475, 8.1825, 8.1925, 2.2974, 10.8311, 15.569, 1.4027, 0.329, -0.4366, 6.3648, 1.0487, -0.9166, -8.1367, -8.1915, -9.569, -3.4184, 0.0616, -4.9205, -23.5675, + 18.5545, 22.239, 21.2685, 17.01, 9.6982, 4.732, 4.3296, 7.5541, 8.1889, 7.8498, 0.4258, -3.7349, -6.3446, -8.3581, -11.0931, -16.2715, -16.4055, -15.8123, -17.441, -26.3892, + 5.3049, 3.9686, 5.5462, 12.1792, 19.9309, 17.032, 8.3644, 7.8784, 10.6383, 15.3943, 3.6647, -0.1421, 3.0499, -3.2605, -15.9284, -20.0685, -19.5084, -15.1548, -11.4151, -27.474, + -4.1173, -2.8993, -1.1226, 2.7523, 4.1168, 4.2377, 1.6192, 1.4859, 2.7141, 0.481, 0.9555, -0.9423, 1.2205, 0.597, 0.3948, 0.467, 2.1347, 1.5199, 1.6806, -17.2954, + 15.7137, 20.9924, 24.3419, 24.5468, 20.7453, 18.1011, 19.1224, 15.9122, 12.9399, 8.1629, -8.2323, -12.3399, -17.0242, -22.3729, -23.1787, -23.2286, -17.6989, -10.8077, -20.3082, -25.3873, + -1.2634, 1.8562, 5.1481, 8.605, 8.7868, 9.5351, 6.6634, 3.816, -0.1296, -4.656, -0.5036, -0.2003, 1.6621, -1.6607, -2.8913, -4.8208, 0.3233, -5.1066, -6.1044, -19.0592, + 10.6986, 11.8307, 11.5659, 12.449, 11.188, 6.9008, 2.6629, 3.0301, 3.4569, 5.3227, 2.5092, -1.0853, -3.8118, -7.084, -4.9747, -7.3629, -11.0099, -5.9887, -11.0008, -29.2965, + 13.6712, 17.1821, 19.2431, 13.3261, 5.9589, 0.4984, 0.367, -2.3834, -3.2315, -2.1198, 4.8356, 0.4745, -8.1763, -11.1278, -9.8688, -0.1733, -8.1227, -9.3563, -5.3546, -15.6426, + -5.7735, -2.5076, -1.5044, -1.1663, 0.0004, 2.3285, 2.2748, 3.5509, 0.5101, -3.3403, 0.8431, 1.7502, 3.2945, -0.4888, 1.3903, 4.0779, 1.6571, 2.3564, 6.2297, -15.4829, + 9.1796, 11.0931, 14.7746, 19.7918, 17.0503, 10.0451, 7.8355, 5.3063, 5.9805, 11.7545, 10.2992, 6.2216, 2.6489, -6.8542, -15.2068, -16.6927, -14.099, -23.4163, -26.3767, -29.3354, + 4.4691, 6.369, 7.7808, 12.847, 20.5705, 17.7665, 9.4381, 6.2778, 2.4431, 5.0549, 9.9596, 3.2883, -2.2059, 2.04, -4.0438, -15.0151, -19.7303, -18.2469, -20.2388, -28.8235, + 25.3208, 24.3974, 22.6154, 19.5733, 14.8131, 10.5701, 9.4361, 4.3748, -1.5593, -4.3511, -14.7283, -17.6258, -0.952, -8.5196, -7.3624, -3.251, -9.9332, -17.3271, -21.4343, -24.057, + 22.3042, 16.1278, 12.0077, 14.7975, 10.7206, 8.3648, 8.061, 10.1267, 7.5498, 1.8723, -3.9201, -8.2481, -10.1623, -11.376, -12.7367, -5.005, -3.3744, -11.9178, -17.47, -27.722, + 4.0018, 3.5852, 3.3315, 5.3461, 4.3656, 2.8461, -0.0206, -2.5696, 0.1895, 5.1002, 3.3534, 0.2158, 1.3297, -0.9671, -0.5937, -1.9855, -1.7054, -1.7064, -4.2453, -19.8713, + -0.182, 0.3377, 2.3741, 5.1705, 4.8793, 2.2995, 4.3309, 2.2662, 0.4173, -0.8843, 6.0098, 9.0178, 2.964, -0.8977, -1.5385, -6.1656, -4.1289, -4.7989, -1.1105, -20.3607, + 7.6526, 7.4466, 4.8852, 0.6442, 1.5298, 0.3141, 2.6136, 0.1768, 0.3184, 1.5717, 0.2364, -0.4716, -4.0283, -1.7854, 1.1771, -1.1242, 0.5833, -0.2901, -4.6526, -16.7979, + 19.3739, 25.1966, 25.2676, 19.4367, 10.1976, 2.4144, -1.1928, -4.0638, -8.7478, -10.523, -11.0799, -12.5634, -10.0392, -5.3666, 3.7592, 3.344, 0.1212, -8.8586, -13.7562, -22.9202, + 9.6043, 10.541, 12.3377, 19.7574, 26.3167, 19.8022, 16.1636, 16.4176, 17.5852, 2.8061, -5.6826, -11.1198, -15.0897, -15.5002, -11.1047, -14.2676, -20.4525, -20.5783, -15.3843, -22.1521, + 12.9015, 20.6704, 27.9257, 24.9274, 19.2594, 24.215, 19.1475, 0.5334, -3.3152, -12.4822, -15.0498, -16.9033, -19.2802, -17.1972, -9.8015, -9.8416, -13.7988, -8.2071, -2.2124, -21.4912, + 14.4389, 13.4012, 16.1103, 14.9288, 9.7959, 11.0171, 12.0893, -1.4171, -9.8704, -8.5713, -15.4225, -18.6377, -16.5003, -13.9403, 1.0172, 8.7826, 2.1557, -0.7217, -0.1613, -18.4945, + 3.2298, 2.2245, 4.4788, 6.2407, 6.6193, 4.0854, 3.5648, 2.2977, 2.4361, 0.5689, -4.6553, -1.2701, -2.8888, -2.1474, -1.0212, -1.5878, -0.7381, 0.5436, -4.6923, -17.2887, + 12.1886, 11.0008, 17.9358, 24.301, 22.2969, 15.0778, 12.8771, 17.0838, 11.2261, -0.0847, -7.9648, -13.0993, -17.1559, -19.7583, -18.6302, -14.9903, -5.4184, -14.9564, -12.137, -19.7926, + 18.1628, 19.7982, 21.7942, 23.1496, 22.2974, 18.3029, 13.8973, 12.5987, 14.0955, 8.3018, -1.2018, -2.7097, -5.1243, -15.5625, -20.9814, -25.9011, -25.5502, -25.1062, -24.3739, -25.8874, + 5.12, 2.6682, 2.7787, 5.122, 7.7683, 7.6609, 0.3239, -0.5597, -2.1976, -4.2025, -2.3433, 5.4581, 3.3195, -4.6819, -7.7339, -5.9433, 6.7709, -3.0093, -0.4617, -15.857, + 3.1474, 3.9068, 4.6743, 6.198, 3.9172, 5.5703, 3.756, 5.3815, 6.4792, 7.4263, 4.0188, -0.9053, -2.9276, -4.264, -3.8751, -2.5664, -3.8921, -5.7279, -7.3914, -22.9261, + 7.7606, 7.9634, 9.259, 13.4058, 20.913, 19.2571, 11.4285, 9.1142, 10.4227, 12.6605, 1.394, -7.8667, -12.9049, -16.1586, -15.3321, -7.7158, -10.1835, -11.8246, -14.2319, -27.3607, + 9.9378, 9.7046, 10.1765, 13.167, 9.5151, 2.2155, -0.0456, 0.0357, -0.3521, -1.264, 0.0667, 3.9496, -0.7853, 0.9935, 1.7327, -2.1738, -2.4763, -8.9075, -14.5354, -30.9548, + 9.4566, 14.4761, 17.5184, 16.5421, 10.8319, 4.8634, 3.7958, 1.0301, -0.7413, -4.7772, 0.1278, 10.6261, 1.7256, -4.7562, -1.8151, -1.2979, -10.9708, -19.1139, -21.0656, -26.4558, + 4.1609, 4.3674, 5.163, 10.4393, 19.9966, 22.0365, 15.0772, 16.7404, 13.2009, 0.0579, -7.2967, -13.1855, -16.4671, -16.2778, -13.5417, -3.6468, -7.6575, -10.0591, -0.8708, -22.2374, + 9.2619, 9.285, 10.6963, 10.0411, 5.3819, 1.803, 1.0922, -0.366, -0.8976, -3.181, -0.6819, -3.8642, -8.4569, -8.9974, -5.5095, -1.9498, -5.7587, -2.8793, 9.9987, -15.0177, + 16.0944, 15.0736, 17.429, 17.1266, 16.3425, 13.9152, -0.3124, -3.4633, -3.3349, -5.5676, 1.022, 7.3152, 5.0978, 0.8308, -5.9027, -14.3898, -14.2461, -12.232, -23.5828, -27.2154, + 2.0137, 5.7764, 10.2219, 14.9245, 16.5703, 10.5235, 3.0729, -1.4882, -7.205, -6.2506, -5.1311, 1.5065, 6.9953, -1.443, 1.824, -1.5831, -9.7701, -7.7954, -0.2269, -32.5358, + 0.8118, 3.1428, 4.1975, 8.8492, 17.1316, 16.9999, 8.6244, -0.0326, -4.953, -5.2292, -0.1353, 6.3691, -2.1837, -2.6835, 3.8299, -6.3313, -4.714, -0.206, -11.6261, -31.8615, + 16.0656, 15.8566, 16.266, 14.0919, 7.2745, 1.1478, 0.5592, -3.1884, -2.7528, -3.9872, -1.52, -5.6031, -7.1936, -11.6082, -9.9024, -5.9648, -1.2652, -4.4434, -0.5317, -13.3008, + 6.0546, 7.8172, 12.5175, 18.974, 18.6314, 12.5099, 8.6741, 7.3229, 9.6232, 16.1584, 9.3568, 6.3688, 5.3827, -10.1648, -19.1392, -25.0842, -25.6307, -21.0082, -12.2957, -26.0685, + 8.7645, 5.7385, 7.3877, 9.4659, 8.7034, 6.7927, 2.2815, 1.642, 0.5587, -0.7987, 1.2054, 8.0228, 11.5479, 4.5805, -6.4932, -9.4841, -11.6576, -7.6077, -9.5897, -31.0604, + 13.5337, 13.1762, 15.6646, 19.9549, 24.347, 21.3479, 19.5471, 19.3675, 13.3653, -0.5856, -8.6584, -13.2572, -16.9863, -17.9847, -20.7708, -15.4798, -11.0509, -15.4702, -16.1382, -23.9221, + 9.4656, 10.0639, 11.4433, 14.668, 18.7771, 15.2024, 9.3195, 5.137, 1.9578, 0.3561, 3.767, 8.6933, 1.32, -4.9956, -10.6736, -14.332, -17.7829, -18.0592, -14.314, -30.0137, + 1.5799, 4.3053, 2.3818, 2.891, -1.2059, -0.83, -0.1903, -0.1292, 1.0233, 3.9206, 3.9828, 2.2978, 3.232, -2.5703, -2.6923, -1.3776, 2.9213, 0.1727, -0.511, -19.2019, + 6.8519, 4.8647, 1.9844, 2.2401, 3.7555, 1.5005, -1.3694, 0.5704, 2.1485, 0.76, 0.6917, -1.0898, 1.8295, -1.7615, 0.1607, -2.4085, 0.4928, -1.2003, -0.2145, -19.8066, + 26.8652, 27.9313, 22.2964, 13.2728, 4.9234, 4.975, 10.5105, 12.7213, 4.9587, -6.5278, -2.0124, -3.4059, -5.9594, -7.3378, -10.2568, -18.1183, -18.7465, -15.1523, -18.6899, -22.2476, + 11.7015, 12.5524, 16.8036, 20.5917, 17.3325, 11.6535, 7.9132, 3.4464, 6.4909, 8.4604, 0.112, -8.677, -13.3036, -17.0534, -16.5775, -11.3553, -3.454, -9.9071, -10.954, -25.776, + 20.0026, 21.9415, 20.1743, 15.7692, 9.6829, 6.6171, 12.1877, 15.1379, 6.9729, -2.6223, -11.926, -8.003, -5.4775, -7.9242, -14.3282, -6.4602, -11.9823, -18.5276, -14.5214, -26.7133, + 8.4727, 10.313, 16.1554, 22.5237, 20.4885, 15.1245, 10.9192, 10.3785, 14.0959, 8.6752, -2.6735, -8.1503, -8.9174, -2.4684, -9.1899, -21.2524, -22.7439, -18.1241, -17.6618, -25.965, + 16.4001, 11.079, 6.5408, 3.9922, 0.9638, 0.6155, 0.1321, -0.0033, -1.5205, -0.5347, 0.0838, -0.8675, -0.2837, -1.6297, -1.6342, -2.753, -2.7291, -3.0597, -3.9086, -20.8833, + 12.8347, 13.993, 15.6832, 15.4917, 10.9362, 11.4157, 15.6476, 4.371, -10.872, 4.3584, -2.6363, -7.3238, -10.3423, -4.3725, 0.4684, 7.2994, -11.0045, -18.8176, -14.2499, -32.8805, + 12.3323, 15.8058, 21.8399, 24.3008, 14.4087, 10.993, 7.8357, 8.0265, 12.8222, 14.2335, 5.8155, 6.0731, -6.0593, -17.6762, -22.1263, -23.2555, -24.2165, -21.7123, -15.9183, -23.5226, + 5.7344, 5.3389, 3.8374, 3.419, 2.8812, 1.7219, 0.1439, 1.858, -0.5349, 2.0653, -5.3722, 2.7017, 1.0724, -0.8636, -1.4371, 0.4192, -0.6553, -2.1126, -0.737, -19.4805, + 8.7871, 8.8914, 10.508, 13.7939, 18.1053, 18.3809, 13.6037, 9.9123, 6.2489, 7.8891, 6.4768, -2.8713, -8.9109, -11.1699, -11.8847, -5.8137, -11.8112, -19.3777, -21.5409, -29.2171, + 21.2487, 22.5877, 21.7624, 19.0832, 14.4498, 8.3623, 6.4664, 3.1545, -0.286, -1.9696, -3.9389, -1.8288, -3.7243, -9.6176, -13.7865, -15.0846, -11.3343, -12.9399, -16.9243, -25.6805, + 15.5067, 16.3749, 16.311, 12.8646, 5.4498, 2.4274, -1.0299, -3.27, -3.2357, -0.0252, 7.5399, -0.6948, -6.2588, -9.1664, -6.8883, 0.76, -11.6902, -9.982, -1.1495, -23.8436, + 15.5548, 17.3265, 20.2482, 21.9118, 17.7825, 12.4436, 8.5947, 8.3626, 10.7582, 6.8704, -2.615, -7.1451, -11.7102, -15.2112, -16.7335, -10.8661, -12.143, -16.7183, -19.7849, -26.926, + 9.7348, 18.6985, 22.2, 9.7733, 3.5414, -0.989, -5.4561, -5.4928, -8.476, -6.8757, -4.1569, 6.8951, 2.1633, -1.2892, 3.0483, -7.4717, -12.0842, -7.7317, 1.0735, -17.105, + 6.6628, 6.9628, 9.289, 7.3292, 2.0881, -0.1054, -1.5163, -4.7058, -4.4988, -5.4883, -6.5025, -2.6194, 5.9468, -1.1287, -0.4851, 5.3144, -1.644, -1.6601, 4.2795, -17.5182, + 11.7595, 13.0074, 13.6551, 14.3417, 13.9024, 11.589, 9.9365, 4.195, -1.2916, -2.3847, -1.5414, -3.1381, -5.4213, -4.9864, 0.0096, 0.2286, -7.594, -13.3606, -21.1287, -31.778, + 16.556, 21.1528, 18.2294, 14.8217, 11.7211, 5.8948, 0.1128, -5.7142, 0.4819, 3.4296, -7.6731, -15.2596, -14.091, -4.345, 4.2359, -1.261, -8.7829, -14.4366, -8.1323, -16.9402, + -9.6162, -5.892, -0.4336, -0.0688, 3.9825, 0.71, -1.9156, -3.0982, -4.8027, -4.2612, -2.6264, 1.0431, 5.5418, 11.1806, 9.5552, 5.0905, 3.5862, 4.3463, 5.867, -18.1885, + 9.2493, 12.521, 14.8487, 20.3042, 16.9267, 10.5281, 5.4085, -1.4152, -5.3054, -5.325, -4.1371, 2.4443, 0.8006, -8.09, -7.9314, -5.9206, -13.5877, -13.0043, -4.8031, -23.5116, + 5.9148, 6.0122, 7.7679, 11.9347, 14.3202, 11.188, 5.7941, 0.6362, -0.9006, -3.7616, -1.0465, 6.3361, 0.5894, -7.7629, -9.2778, -6.0898, -0.474, -7.4253, -3.178, -30.5771, + 9.047, 12.9059, 18.1346, 24.2631, 23.6353, 19.2579, 20.8877, 17.0355, 3.1774, -5.2773, -10.0473, -14.9178, -17.5773, -16.4551, -11.9394, -9.6664, -11.9143, -7.0063, -19.2353, -24.308, + 11.6229, 13.7686, 16.3077, 18.973, 21.2077, 21.177, 18.6717, 15.526, 14.4577, 10.9286, -2.0523, -9.7658, -14.147, -18.3895, -20.2191, -19.9491, -14.1791, -17.4745, -18.9708, -27.4939, + -1.2854, -2.7859, 2.0352, 3.8729, 2.5634, 1.1875, 2.9803, 3.4105, 0.6928, -0.5396, -6.4408, -2.1739, 4.1284, -0.7168, -3.4324, -5.3047, 2.106, 6.1169, 6.17, -12.5844, + 3.6719, 5.1933, 3.433, 2.0915, 1.709, 4.9193, 7.5225, 11.4575, 7.7921, 1.1072, -1.3846, 0.672, -0.8916, -0.5196, -2.8857, -5.7085, -3.7344, -4.4707, -6.4364, -23.5377, + 5.0076, 6.0603, 5.6858, 5.8716, 4.9796, 4.351, 3.2343, -0.0278, -1.6006, -3.6879, -3.6306, -0.3994, -2.7867, -5.8602, -4.3815, -4.1661, 1.9375, 0.0251, 1.7605, -12.3723, + 1.5611, 2.5677, 6.9184, 12.7642, 12.9002, 7.6294, 1.5737, -0.4407, -4.6258, -3.3019, -0.3274, 9.4821, 8.3473, 7.1185, 0.9099, -4.2945, -2.0947, -5.5952, -16.6889, -34.4035, + -10.077, -9.2074, -7.5499, -5.3349, -2.0639, 0.7289, 3.3239, 5.0911, 7.8838, 10.9963, 10.2149, 9.1756, 7.3923, 3.8453, -0.9308, -1.4293, -1.7749, -2.4954, -0.635, -17.1538, + 11.6964, 15.7897, 21.5631, 25.0743, 21.2867, 19.0704, 20.7015, 14.1826, 0.0839, -7.4606, -11.2687, -14.0743, -15.6804, -14.7951, -10.801, -12.5161, -17.6133, -13.8075, -7.4286, -24.0031, + -6.9283, -6.6188, -5.8684, -5.5056, -3.6164, -2.5751, -3.3395, -0.3521, -3.7955, -8.6077, -6.1256, -4.7755, -5.6371, 1.9017, 5.4236, 6.9088, 17.0056, 9.6477, 17.8081, 5.05, + 1.04, 4.3584, 5.7473, 5.9965, 7.1951, 11.1543, 16.3999, 17.9219, 13.7898, 8.5105, 6.6032, 8.3888, 3.1208, -8.4853, -12.1692, -10.3091, -9.406, -16.3383, -22.0676, -31.451, + 4.0785, 3.7601, 3.2477, 4.5535, 2.8617, 2.8959, 4.0341, 3.3572, -6.7255, 5.4042, 2.4187, 1.223, 0.1581, -3.0654, -1.9472, 0.8423, -1.1312, 1.2092, -3.2861, -23.8888, + 7.3239, 6.915, 9.3764, 18.0744, 16.9415, 9.605, 5.2932, 1.9763, 2.0297, 6.284, 11.8379, 10.9565, 8.5711, -5.0433, -15.8094, -21.0356, -22.5868, -18.9436, -8.4281, -23.3379, + -1.7885, -4.8321, -3.3241, 0.9574, -0.7694, -4.0018, -4.5674, -4.526, -2.6221, 4.0186, 7.6808, 10.9687, 1.1618, 6.5552, 7.2914, 5.9801, 0.8194, -0.4241, 1.0077, -19.5855, + 2.5382, 2.7665, 6.6332, 9.6977, 12.0223, 5.6888, 5.2502, -0.0648, 0.179, 1.7261, 3.6718, 4.6019, -4.2546, -5.2838, -8.6175, -3.503, -2.89, -5.1451, -3.1562, -21.8607, + -1.7959, -1.641, -1.3048, -1.9856, -1.1093, -0.5878, -1.7759, -0.7425, -2.7139, -3.3222, -3.9402, -1.9787, -4.1788, -1.9573, -0.0518, 0.6181, 5.7386, 8.4544, 14.2974, -0.0227, + 1.9227, 3.4879, 4.9261, 5.1627, 4.2257, 4.6417, 3.0455, -0.455, -1.933, -4.6665, -6.5225, -3.7829, -5.2713, -1.4162, 3.7054, 5.6573, 7.046, 2.7847, -1.9201, -20.6381, + 5.4951, 4.1184, 5.0794, 4.1307, 2.3794, 0.0327, -0.8237, -1.5895, -3.7505, -6.6385, -6.0766, -2.2466, -0.408, -4.9327, -5.84, -1.6035, 0.3752, 6.5602, 12.3259, -6.5875, + 6.8048, 2.6542, 8.2117, 4.3594, 9.5824, 4.9978, 9.2805, 5.4616, 0.1801, 2.8218, 4.8979, 8.0336, 1.3602, -0.8584, 3.0641, -6.3167, -11.4947, -13.9096, -9.3665, -29.7643, + 20.4394, 23.8508, 19.9523, 13.4804, 4.7063, -0.881, 2.3157, 4.3508, 4.6054, 2.6117, -2.816, -5.7052, -5.0189, -10.4846, -14.5942, -12.8055, -6.1098, -12.0585, -7.7055, -18.1337, + 9.9351, 14.3502, 19.553, 16.3727, 7.0796, 2.9949, -1.1604, -3.2246, -3.9592, -2.8637, 3.6007, 8.3194, 1.5624, 4.008, -6.2282, -13.296, -15.2078, -10.4525, -5.9946, -25.3891, + 5.5354, 4.2644, 3.4234, 3.565, 3.9406, 1.8276, 0.2709, 0.3493, -0.002, -0.7304, 1.8692, 2.1692, -1.3779, -0.9234, -5.0911, 0.1335, -1.1518, -0.8308, -1.2357, -16.0052, + 14.718, 8.4248, 6.7389, 6.9731, 8.7963, 12.7964, 14.6589, 10.3137, 3.2909, -3.7235, -5.8542, -6.9864, -6.8348, -4.2701, -4.4326, -5.4747, 0.7281, -9.3904, -11.2298, -29.2424, + 9.1842, 9.7851, 10.8472, 12.9244, 10.6955, 6.8423, 4.6037, 0.765, -2.0301, -2.7855, 1.3686, 5.5053, -1.4464, -8.6948, -6.8949, -4.4565, -9.3587, -11.9106, -7.0277, -17.9162, + 9.5187, 11.0469, 10.8992, 10.5477, 12.4336, 17.931, 22.0092, 22.1029, 21.2249, 17.7472, 4.1368, -3.9142, -11.6583, -18.8125, -22.4708, -24.5855, -14.9292, -12.6855, -22.7109, -27.8313, + 12.0341, 16.6419, 15.8489, 10.0396, 3.3655, -1.8695, -5.2143, -9.4106, -10.9745, -12.0991, -12.045, -11.1231, -7.2635, 0.0306, 12.4231, 12.6061, 4.1888, -1.9085, 0.6831, -15.9537, + -1.3674, -0.5228, -4.0775, -3.81, -1.0761, 13.75, 19.2044, 15.7231, 9.5615, 7.9996, 6.5298, 3.6199, 0.5658, -1.3324, -7.5527, -6.3571, -7.0946, -6.2162, -8.1181, -29.4293, + 7.3145, 11.1318, 15.8219, 21.2414, 19.7326, 13.4391, 10.1286, 13.1458, 13.522, 4.5818, -4.9865, -10.4663, -12.4137, -8.4915, -7.5278, -14.5074, -14.9519, -10.6855, -18.9716, -27.0572, + -2.6938, -1.0116, 0.5434, -0.5197, 1.251, 2.781, -3.1452, 2.3461, 1.3093, 1.0916, 0.2998, 1.6109, 9.4326, 9.1761, -2.9635, -1.3175, -1.3459, -2.3687, -0.4622, -14.0137, + -0.6799, -0.1341, 0.7366, 1.5016, 2.3553, 1.9877, 1.8684, -1.1687, -1.7388, -0.3259, 3.2899, 3.7096, 2.8005, -0.4016, 0.0798, 0.8146, 0.249, -0.5574, 0.0812, -14.4681, + -4.5962, -1.7335, 2.2323, 4.9758, 4.1965, 6.112, 6.3004, -0.242, -0.4268, -3.4101, -1.9343, 1.8578, -0.3352, -3.5061, -2.9167, 0.7871, 0.7063, -1.6356, 3.3878, -9.8196, + 13.1227, 13.7568, 12.075, 11.2378, 13.9543, 15.7037, 14.8582, 9.5334, 0.1292, -3.0889, -7.7565, -10.9896, -5.4579, -2.1373, 0.1387, -11.7169, -13.0933, -7.4977, -12.364, -30.4077, + 29.3087, 22.8979, 20.4744, 14.9176, 7.8398, 2.3822, -3.7671, 1.0563, -3.5131, 2.1709, 4.106, -2.4865, -7.3802, -9.3667, -9.8213, -8.8247, -9.4073, -14.9259, -16.153, -19.5079, + 8.2477, 12.7093, 19.458, 20.8257, 15.6422, 8.6762, 4.5782, 4.1335, 5.6439, 14.7051, 12.4104, 11.4909, -6.3291, -17.1032, -20.7835, -24.4558, -22.5241, -14.5649, -5.2278, -27.5328, + 0.7217, 4.0954, 5.2473, 1.527, 1.7119, 3.5822, -1.4614, 0.872, -1.3606, -1.4757, -0.4869, 1.0336, -0.7433, 2.0743, 0.6152, -7.1442, 0.592, 6.3583, 2.8714, -18.6301, + 20.3582, 21.7378, 21.8475, 15.5031, 8.5323, 5.5254, -0.6584, -4.0833, -5.5901, -5.8466, -2.2597, 3.0499, -4.1864, -7.3615, -5.3521, -8.6549, -8.7165, -10.8646, -9.6599, -23.3202, + 7.9037, 5.3843, 2.5963, 1.7924, -4.1648, 1.1119, 1.0025, 0.4959, -1.4533, -3.0047, 0.7379, 1.8636, 2.4329, 0.95, -0.1706, -0.3177, 0.7889, 1.1735, -0.473, -18.6499, + -1.9942, -2.2404, 1.0361, 1.1275, 2.4246, 0.9687, -0.7731, -0.435, 2.7773, 4.6081, 2.2666, 5.9874, 1.4863, -4.3135, -1.0943, 3.1059, -4.9201, 3.6382, 1.5522, -15.2082, + 15.5189, 17.894, 20.2047, 21.1613, 16.5719, 9.883, 6.2072, 1.5961, -2.8649, -4.235, -1.2109, 1.6294, -0.3114, -6.289, -6.647, -6.6461, -16.7097, -18.4834, -19.5782, -27.6908, + 4.5707, 9.9453, 16.9194, 16.3836, 7.5074, 1.7185, -1.6704, -4.647, -7.171, -7.5216, -6.2372, -1.4728, 9.199, 4.5872, 4.2446, -3.1203, -10.1462, -8.9093, -2.0237, -22.1562, + 10.2043, 6.2265, 8.048, 6.0822, 2.9673, -0.2686, -0.4905, -3.3479, -4.2925, -4.0224, -2.6407, -3.8742, 0.6899, 3.7007, 5.8631, 8.848, -1.0855, -6.5692, -4.1304, -21.9079, + 12.9155, 18.0966, 19.8262, 14.0767, 6.9947, 1.6106, -0.8791, -6.2102, -7.3162, -10.2835, -10.9883, -8.3441, -1.6557, 0.008, -5.7847, 1.4192, -5.5022, -4.2471, 3.9784, -17.7147, + 5.1637, 8.0679, 12.5738, 17.5701, 14.9252, 4.1592, 0.9276, -0.3161, 0.0005, 3.6819, 10.2605, 3.1026, -2.7955, -2.8307, -1.1861, -9.2862, -11.7976, -5.3295, -15.7634, -31.1274, + 6.9673, 6.7974, 6.1367, 10.4782, 15.9809, 13.2295, 4.9742, 0.4813, -4.131, -5.6911, -5.9712, -1.2511, 7.3306, 2.6442, 0.3224, -0.8372, -7.4799, -9.3018, -8.5882, -32.0913, + 13.1396, 12.9563, 12.3478, 9.0857, 2.3849, -0.849, -1.4825, -4.2362, -7.2804, -7.4639, -6.8853, -6.4479, -4.2443, -8.2231, -3.9022, 0.4289, 0.1896, 3.7001, 6.9697, -10.1879, + 15.333, 18.1603, 22.1112, 21.6848, 13.1886, 10.5333, 8.8464, 9.6626, 12.4137, 13.9577, 10.142, -0.2864, -11.4409, -16.9791, -19.7494, -15.6645, -19.7643, -22.5, -23.5283, -26.1208, + 6.8457, -6.8649, 5.4271, 5.2712, -1.3685, 5.0072, 1.5557, 0.4655, -8.6121, 0.8133, -3.3697, -1.5367, 2.2231, 2.7614, 0.6905, -0.9517, 3.9757, 2.5271, 6.8378, -21.6975, + 4.0198, 5.3861, 1.469, -2.5892, -0.7717, 2.5302, 1.6444, 0.6228, 0.0646, 3.2916, 3.8112, -0.6089, 2.1623, 0.1459, 0.1339, 0.1325, -1.6768, -0.5331, -0.5013, -18.7335, + -7.1586, -2.6175, 0.5796, 4.1833, -1.3849, 0.3608, -8.9238, -4.4835, -1.6026, -5.1856, -8.3891, -1.473, 9.5706, -8.3291, 11.6042, 11.148, -0.2734, 4.8182, 12.1074, -4.5509, + 12.6166, 14.8923, 16.2633, 17.1269, 18.2744, 19.287, 16.5858, 10.4162, 6.9131, 6.3384, 2.9142, -1.3754, -10.9051, -16.4865, -19.5016, -17.7616, -6.9047, -16.5161, -23.1066, -29.0706, + 10.8009, 12.8094, 14.6516, 18.7246, 16.6285, 12.1161, 8.7229, 6.4887, 7.8806, 10.133, 4.172, -4.3839, -6.8368, -8.8011, -8.4415, -14.6175, -16.9291, -13.3638, -20.2402, -29.5143, + 6.219, 6.4291, 6.1608, 8.0273, 9.8018, 9.8514, 6.5431, 7.0773, 5.8326, 5.6116, 8.215, 7.4679, -0.2957, -6.5386, -7.9, -7.1888, -10.2895, -12.2362, -14.0338, -28.7541, + 8.0266, 9.6417, 12.2059, 15.4655, 15.3945, 10.4886, 6.7757, 2.33, 3.3664, 6.5551, 2.3159, -4.1967, -9.2962, -11.8145, -9.9788, 0.04, -6.7484, -6.4088, -11.3916, -32.771, + -6.0361, -3.7035, -0.2831, 1.4674, 0.7756, 0.3247, -0.7445, -0.5024, -2.1341, 2.7813, -0.1459, -3.5635, -3.9893, -4.293, -0.5948, 5.6527, 2.1314, 14.0267, 12.5554, -13.7247, + -14.2301, -11.8469, -5.4438, -2.2899, 3.4911, 0.4713, 0.7187, -2.7114, -1.5588, -2.821, -0.0887, 1.506, 2.8286, 9.35, 12.2742, 8.0817, 12.1298, 7.7574, 3.4239, -21.0423, + 10.2809, 9.4545, 10.3039, 12.6386, 19.498, 22.5798, 19.2258, 15.3342, 18.162, 10.8305, -3.6184, -11.2472, -16.1533, -19.0561, -21.3742, -19.1215, -7.0133, -13.0322, -12.3255, -25.3663, + -7.1992, -4.095, -0.4752, -0.0397, -1.2923, 1.268, 2.102, -2.0159, 0.5678, -4.1475, -2.286, 1.2468, 2.916, 3.7433, -3.5078, 6.2645, 5.1466, 3.3947, 11.0482, -12.6391, + -1.4558, 2.635, 2.5261, -0.4261, 7.9067, 7.3761, 10.505, 2.1413, -4.1382, -2.8818, 6.9021, 5.4317, 4.9534, 4.5363, -2.8372, -3.4508, -1.0165, -1.6706, -9.0235, -28.0132, + 5.4483, 7.0338, 8.8713, 13.9617, 19.3432, 16.574, 12.5536, 13.7232, 15.1487, 4.1979, -4.0767, -8.9863, -10.9482, -13.1722, -11.3412, -7.4945, -4.4916, -3.5707, -22.8865, -29.8879, + 12.0309, 14.2862, 17.8716, 18.2606, 13.3426, 8.9006, 1.3455, -9.418, -11.1012, -15.4444, -17.4768, -17.9985, -12.4515, -5.2431, 8.8612, 5.5913, 6.3114, -1.1018, 0.2013, -16.7679, + 16.8689, 16.8256, 18.5632, 14.4683, 8.2457, 2.7262, 1.7491, 0.4673, -4.4682, -6.2835, -4.328, 2.1966, -4.4856, -9.6447, -7.5807, 2.0175, -9.6747, -9.7002, -3.665, -24.2978, + 10.3443, 9.5624, 9.5859, 9.3945, 7.7097, 5.9502, 5.4955, 7.0578, 3.897, 1.8002, 2.9026, 0.83, -0.8072, -3.4283, -8.7861, -9.4681, -7.6897, -10.0581, -8.5829, -25.7097, + 8.4589, 13.906, 18.357, 21.8577, 20.8363, 13.5168, 7.0018, 3.5585, 0.2984, -4.3657, -7.6435, -5.4526, -6.4991, -0.0823, -10.9834, -14.489, -9.9873, -4.5713, -15.9935, -27.7237, + -2.7942, -1.0695, -0.1214, 2.5877, 1.5098, 1.0893, 1.5717, 3.2131, 6.2989, 10.9335, 9.8682, 8.6743, 4.8838, 1.8707, -1.0579, -3.7852, -5.7917, -7.6708, -7.9578, -22.2525, + 25.1784, 20.8581, 17.0052, 12.9557, 7.7424, 3.9815, 6.0072, 3.4663, -1.9041, -8.1079, -11.4077, -11.8642, -8.7727, 4.7601, 2.8284, -7.3135, -15.0133, -13.8178, -7.5999, -18.9821, + 13.6088, 10.9215, 11.1892, 11.7633, 13.2294, 6.3264, 1.9267, -1.7303, -3.3278, -4.4979, -7.2855, -3.9683, 5.3311, -1.6679, -8.5378, -6.9275, 2.8396, -8.2151, -5.8206, -25.1573, + 20.0774, 19.5893, 17.125, 15.9021, 10.2327, 5.8537, 4.1551, 8.7468, 6.2824, -1.6643, -0.8142, -5.7458, -5.8553, -6.7971, -4.8129, 0.1863, -14.4064, -22.1846, -19.7857, -26.0848, + 1.9579, 3.5459, 5.6047, 9.8227, 17.151, 16.9383, 8.2371, 2.3829, -0.9137, -2.6491, -2.1733, 3.0262, 6.5399, -2.8952, -2.9389, -0.9532, -9.2242, -11.9604, -12.7131, -28.7857, + 2.7147, 5.0851, 5.901, 8.2492, 9.0379, 12.5344, 15.7585, 7.9343, 2.8699, -7.6515, -7.5935, -7.0792, -7.0329, -0.2973, -4.1153, 0.8146, 0.8342, -8.0293, -6.0641, -23.8708, + -1.8671, 0.2021, 1.1744, 3.3514, 3.8114, 4.6535, 6.4708, 5.5903, 4.6873, 6.12, 7.1503, 10.882, 10.1467, 5.0564, -4.0471, -7.0223, -5.8028, -7.0328, -13.2761, -30.2485, + 14.4582, 17.2732, 16.2772, 7.1332, 0.6525, -4.4947, -7.791, -9.8395, -12.5801, -10.7856, -8.8712, -4.2717, 7.2719, 0.7198, 1.5521, 3.5804, -2.9845, 0.1717, 6.3548, -13.8266, + 28.6852, 25.8888, 20.5479, 11.1546, 4.6177, 1.8681, 3.9247, 1.295, -2.924, 4.305, 4.3461, -5.4196, -7.8904, -10.2821, -8.2802, -13.991, -11.2895, -12.538, -13.7725, -20.2458, + 6.9489, 8.2782, 12.9177, 18.1269, 10.1196, 2.5932, -1.2838, -5.9588, -9.0612, -10.7381, -10.6395, -8.4104, -4.0818, 7.0965, 0.3344, 2.1418, 2.2817, -3.7137, 1.6102, -18.5618, + 6.2919, 7.1483, 7.7499, 10.3266, 12.7585, 21.8234, 21.7899, 13.6697, 7.2737, 9.3185, 13.4418, -0.153, -6.4198, -9.4554, -7.4143, -12.4542, -21.2295, -24.5545, -24.4585, -25.4529, + 3.2078, 1.1604, 2.382, 7.1676, 15.6309, 19.6735, 9.8897, 7.8474, 10.1305, 10.405, -1.822, -9.0708, -12.7476, -14.298, -11.7869, -3.2366, -4.1439, -6.6114, -0.0121, -23.7655, + 4.9484, 5.9562, 10.0092, 16.2669, 12.926, 3.9525, 0.492, -2.9838, -4.7825, -5.0706, -3.0972, 4.4166, 5.1484, -3.0885, -2.2935, 1.8467, -6.6209, -8.5405, -3.2672, -26.218, + 9.119, 11.7308, 15.3181, 20.5759, 15.7183, 7.69, 3.7341, -3.2723, -6.7161, -9.0437, -8.0703, -0.593, 6.4087, 3.5269, 3.0413, -8.4178, -14.7425, -12.7049, -6.9905, -26.3121, + 1.4852, -0.6829, -1.569, -0.2848, 5.5052, 12.8631, 6.4129, 0.4626, -3.55, -5.4162, -3.9006, -1.4888, 7.5205, 5.649, 1.1393, 5.5204, -1.2344, -6.2194, -3.0728, -19.139, + 11.9158, 15.3244, 18.2371, 17.8689, 12.9861, 8.5734, 2.6935, -0.462, -0.3115, 4.3187, 1.8359, -6.5328, -11.3944, -12.3343, -10.2127, -3.2123, -10.7404, -11.6243, -6.0915, -20.8377, + -1.1406, 4.4681, 1.0243, 1.7567, 0.8452, 1.0568, 1.7113, 1.4304, 8.2151, 0.5703, 1.2053, -5.7909, -4.3638, 0.9165, -4.5872, 3.4354, 6.9859, 3.9875, -3.5121, -18.2142, + 18.8171, 22.5033, 16.7157, 10.3549, 3.9514, 1.6962, -0.6346, -5.9992, -6.8816, -7.3001, -7.9076, -4.3326, 4.9348, 4.6458, 0.9437, -3.5521, -9.364, -2.4386, -11.4118, -24.7409, + -0.9409, 0.5904, 2.2794, 4.9547, 5.8743, 8.7846, 11.0088, 11.1838, 11.6958, 14.1355, 8.9116, 2.5256, -1.8779, -5.6262, -5.5753, -9.1754, -9.0981, -12.4659, -11.4699, -25.7149, + 0.4141, 2.8215, 2.0838, 3.1886, 4.2216, 1.7188, 4.6179, 2.9704, 1.6545, -2.846, -0.9511, 2.6537, -1.8008, 0.9825, 1.2384, 1.5282, -0.7271, -3.094, -0.809, -19.8659, + 6.043, 4.6516, 4.3017, 7.7179, 6.7963, 6.291, 8.7476, 8.7592, 7.7014, 12.1586, 8.0227, -1.3414, -6.0075, -8.1097, -6.8511, -6.6141, -5.8068, -8.7086, -9.3302, -28.4218, + 7.1395, 6.4611, 6.477, 6.5752, 5.736, 5.6174, 3.8338, -0.3402, -1.9803, -2.2319, -4.1316, -3.2411, -2.2252, 4.195, 1.9636, -1.7425, 0.5431, -3.5115, -6.8529, -22.2844, + 17.8843, 21.4402, 20.6904, 15.9517, 9.7051, 2.5656, -1.5516, -7.4554, -8.8729, -10.2263, -8.6781, -5.1896, -0.7045, -6.768, -8.2898, -6.9326, 1.3954, -3.2208, -6.0504, -15.6928, + 10.6767, 10.3544, 18.1231, 11.2879, 6.1413, -0.361, -2.4504, -5.1076, -4.9943, -4.9704, -2.3126, 5.9757, 0.9523, -4.2427, -2.5152, 4.9197, -8.3019, -9.0057, 0.3384, -24.5078, + 9.9161, 11.8977, 18.2327, 24.4645, 22.2618, 14.5543, 11.0874, 11.6473, 16.7269, 16.7802, 10.9221, 4.3259, -12.8739, -20.0422, -22.5408, -24.1296, -20.9142, -22.6765, -24.3668, -25.2731, + 9.4023, 7.3715, 11.9062, 12.512, 7.0268, 13.6459, 7.2747, 2.8388, 14.6515, 22.1573, 24.2647, 6.5863, -1.1334, -12.1075, -18.8356, -21.0343, -18.7149, -21.3705, -23.1378, -23.304, + 6.1154, 6.8878, 8.0486, 2.083, 11.4555, 24.4875, 10.2548, 8.5452, 8.1934, -4.1865, 11.8854, 1.3485, 1.9895, -14.5678, -11.0286, -3.4615, 1.3428, -19.7548, -24.2069, -25.4313, + 10.357, 12.8522, 17.3265, 22.8368, 16.6859, 10.9743, 8.2198, 6.8557, 9.3432, 12.2609, 5.1561, 1.541, 1.3448, -11.6896, -19.8579, -22.4891, -19.3409, -16.0157, -19.9891, -26.372, + -2.2958, -3.0198, 2.5524, 6.5326, 5.0549, 2.8939, 1.6085, 1.4431, -0.1701, -2.0055, 1.1867, -1.3016, -2.2987, 6.124, 3.0188, -0.9646, 2.6135, 4.0735, 0.2584, -25.3041, + 3.3425, -4.9398, 1.7857, 0.981, 8.2974, 13.876, 7.3422, 4.3951, 4.0317, 8.9378, 9.1371, -1.7588, -9.1168, -12.4667, -12.0238, -9.0772, 4.3501, -0.6556, 4.4305, -20.8684, + 2.6724, 2.4627, -2.5441, -3.3045, -4.2917, -1.4508, 1.5865, -1.0572, -2.1109, 1.487, -1.0006, 3.5002, 3.7107, 1.3794, -1.6261, 0.0378, 2.0162, 0.3261, 3.2452, -5.0385, + 3.1268, 4.8784, 8.6218, 13.5865, 14.1019, 7.249, 1.4764, 0.4142, -1.444, -0.1256, 6.7242, 13.6333, 7.9001, 5.1808, -8.7618, -15.9427, -17.574, -13.2732, -3.9031, -25.8689, + 8.7515, 17.2518, 23.5164, 15.769, 8.1574, 4.9814, 0.5026, -0.4621, -1.5217, 2.4458, 11.1982, 12.8925, 8.2107, -10.1894, -18.8969, -20.9839, -19.6436, -9.2705, -7.3159, -25.3934, + 11.798, 12.1448, 14.6065, 20.2682, 20.5368, 14.0544, 8.9695, 7.1447, 9.3182, 10.2279, -1.3945, -9.863, -14.231, -14.26, -11.294, -5.3186, -14.6453, -16.0278, -14.7441, -27.2906, + 8.3692, 9.6882, 12.8542, 17.3005, 21.134, 18.5917, 11.2777, 5.5517, 0.547, -2.3437, -2.3633, -0.2054, 0.7833, -4.4844, -5.7547, -6.4185, -15.2118, -20.989, -20.6002, -27.7265, + 3.254, 3.5495, 5.6572, 11.4443, 18.6822, 14.2818, 7.9623, 5.8581, 7.6636, 11.238, 10.4719, -0.3434, -0.9127, 0.3323, -9.6682, -12.3368, -7.0303, -17.504, -22.5944, -30.0053, + 10.5668, 4.7765, 4.8789, 5.9385, 13.1029, 20.5979, 14.5257, 8.6496, 2.4271, -1.164, 1.2029, 9.4957, -0.02, -12.573, -14.8513, -9.422, -4.4288, -12.9535, -14.372, -26.3782, + 3.6092, 2.1429, -0.2581, 2.1516, 6.0252, 4.4742, 4.352, 2.9527, 3.6102, 2.6901, -0.0942, 2.2564, 1.3309, -0.5758, -1.109, 0.1191, -0.118, -0.1015, -5.5503, -27.9075, + 8.4206, 12.653, 18.9633, 23.9855, 21.254, 9.7237, 1.5121, -0.7361, 0.7545, -1.5581, 2.4158, 9.9186, 6.7278, 3.6705, -12.4971, -19.8574, -23.2581, -23.72, -10.9203, -27.4525, + 22.1951, 16.4633, 13.2055, 7.497, 2.228, -2.4528, 8.773, 10.687, 4.9929, 1.1178, -5.3802, -8.2471, -5.7256, -8.8078, -8.354, 1.5835, 1.5054, -11.6521, -13.9564, -25.6726, + -7.9053, -6.584, -6.0103, -4.8986, -4.2425, -4.7462, -6.7261, -8.5401, -8.6906, -8.8402, -5.6306, -0.7673, 8.6501, 5.08, 13.9798, 11.4953, 10.0314, 17.429, 14.9683, -8.0522, + 11.9359, 8.4098, 2.8637, 0.1621, 4.2653, 2.699, 1.2433, -1.9101, -2.5608, -4.4372, -0.737, 5.0345, 2.4512, -1.2451, -4.6924, -2.0267, 0.3932, -0.7445, -1.8229, -19.2813, + -1.3202, 3.8184, 7.4609, 11.6391, 16.2849, 25.4929, 15.8707, 1.4126, 12.3759, 21.2527, 8.1587, -3.8943, -14.786, -10.693, -17.9239, -16.3824, -1.7644, -13.0054, -19.3451, -24.6522, + 9.8443, 9.9627, 12.5201, 13.7261, 10.3992, 6.629, 2.9281, -0.7644, -3.9695, -5.3737, -8.3704, -7.5382, -1.7207, 5.7599, 1.941, -0.8146, 0.5436, -5.6632, -12.2155, -27.8236, + 6.429, 4.7082, 3.9317, 3.1702, -1.6353, -3.6078, -6.315, -9.1986, -10.3233, -9.8065, -5.8063, -1.3404, -0.7673, -2.2448, -1.2797, 7.1795, 3.2561, 15.5273, 14.8629, -6.7401, + 23.9506, 22.1558, 17.7456, 14.435, 8.3329, 3.1023, 4.3134, 8.6024, 3.8015, -3.9642, -10.78, -9.6229, -10.886, -10.6376, -8.0083, 4.7524, -6.4851, -13.7226, -12.4871, -24.598, + 9.576, 11.4366, 12.9012, 14.4846, 16.8425, 19.5473, 19.7042, 15.2736, 12.0272, 11.0446, 7.4677, 1.1314, -9.0848, -18.3215, -23.8214, -23.171, -19.9932, -10.2715, -17.3599, -29.4137, + -3.4431, -3.1613, -1.9102, -0.6935, 1.387, 1.2966, -1.0892, -2.4642, -3.0407, -4.4927, -5.4209, -4.2773, -0.5358, 0.409, 1.2794, 5.899, 14.3402, 3.7638, 11.1512, -8.9972, + 15.2464, 18.8014, 25.3166, 19.5775, 11.0313, 6.5896, 5.6381, 2.9552, 5.1185, 13.254, 13.6736, 8.5584, -8.3365, -15.9401, -20.3756, -21.2859, -21.2275, -19.3217, -15.1325, -24.1407, + 3.1035, 6.1792, 5.0462, 3.5926, 7.0741, 6.4046, 9.9419, 7.7684, 4.2113, 3.6277, 6.5092, 5.59, -1.7178, -6.4492, -7.8871, -6.9582, -5.1379, -8.3058, -10.5436, -22.049, + -0.728, 0.5704, 3.9717, 5.9469, 6.078, 4.077, 1.2426, -1.3458, -3.2314, -4.6819, -6.2378, -5.0198, -1.208, 10.5808, 2.6382, 3.7712, 3.8446, -1.7555, -1.1558, -17.3572, + 5.3326, 5.4267, 9.824, 16.2001, 13.6887, 6.951, 1.1917, -1.6723, -2.5788, -2.7648, 2.6931, 5.4843, -4.2095, -9.6143, -6.2919, 3.6211, -3.8754, -6.5263, -5.2823, -27.5977, + 2.5771, 3.4727, 5.4467, 8.8349, 9.887, 12.1341, 12.0826, 7.7444, 4.5255, 0.7889, -2.0382, -4.7604, -5.7542, -4.6241, -2.4718, -4.0958, -6.2797, -4.6267, -9.5398, -23.3031, + 14.7846, 16.0256, 18.44, 18.7731, 12.4129, 9.2087, 4.9463, 5.2837, 7.9434, 9.1983, 5.6775, 1.0431, -7.1678, -12.3799, -13.9635, -9.429, -13.5075, -18.2553, -21.2672, -27.767, + 14.086, 12.616, 17.7362, 22.848, 13.2766, 7.4189, 5.7487, 1.8704, 2.3287, 6.7312, 16.704, 13.9396, 0.1199, -14.272, -18.2397, -22.3862, -24.8172, -19.6941, -10.4326, -25.5823, + 1.2702, -1.274, -3.71, -0.5628, -4.5219, -4.458, -7.71, -8.3547, -7.0524, -3.3805, -3.0927, 1.978, 6.7217, 16.8392, 12.2288, 6.1018, 4.3647, 3.7046, 7.0648, -16.1569, + -1.5691, -0.6625, 0.8145, 2.7114, 4.5683, 6.3808, 5.3169, 3.3697, 3.7409, -1.1329, 1.3502, 1.4333, 7.1092, 8.0819, 7.414, -0.3489, -3.5222, -5.2023, -8.9373, -30.9159, + 8.8791, 11.5486, 17.4354, 21.959, 18.7721, 13.0614, 12.3597, 15.8383, 7.9901, -4.7504, -11.1404, -17.0402, -20.1418, -20.5768, -16.8543, -10.271, 3.5082, 1.5897, -6.0317, -26.1349, + 1.4924, 2.3041, 3.6995, 3.9735, 2.9478, 1.4182, -0.1153, -0.7081, -1.6935, -4.7155, -3.8966, -1.0552, 4.3924, 3.5582, 4.7903, 3.4573, 4.4498, 3.7588, -4.9783, -23.08, + 19.7104, 23.5312, 26.4663, 21.1276, 13.4352, 11.0142, 11.5216, 12.6431, 11.662, 1.8352, -2.6313, -2.1531, -10.9044, -16.4683, -19.1821, -21.4207, -21.6631, -20.6795, -14.544, -23.3003, + -7.3825, -5.1236, -2.0803, -0.3985, -2.1515, -3.3191, -2.5398, -3.6553, -4.6673, 0.245, -1.138, 0.4163, -5.0235, -3.1123, 1.6781, 0.5456, 9.2542, 19.9831, 16.2303, -7.7611, + 2.5108, 2.1845, 2.6268, 3.2213, 4.7277, 4.9151, 4.4068, 2.5115, -1.2667, -1.047, -0.584, 3.198, 11.3786, 3.1343, -1.5396, -0.779, -4.2909, -5.9553, -4.0558, -25.2973, + 1.3099, 3.8149, 5.9305, 6.029, 6.2561, 6.5634, 6.5483, 2.2558, 2.8164, 5.8479, 6.7553, 3.8567, 2.7371, -0.0626, -3.8527, -5.1436, -5.5124, -7.3236, -9.2045, -29.6219, + 6.9414, 7.8896, 11.9174, 19.4391, 22.8159, 17.513, 12.8967, 11.7403, 13.3801, 0.6255, -8.6365, -13.1338, -15.0777, -14.1269, -8.2615, -12.9862, -16.1846, -10.2908, -1.8314, -24.6297, + 13.6675, 18.7539, 23.7644, 23.5665, 14.5584, 8.2788, 5.9566, 3.8037, 5.8231, 9.3954, 3.8096, -3.7071, -3.0809, -2.7965, -15.391, -22.2338, -22.7083, -19.7578, -17.2327, -24.4698, + 6.8878, 4.6215, 4.083, 1.7534, 6.3161, 9.303, 9.1793, 1.8539, -3.8953, -6.2684, -7.283, -6.1167, 0.8013, 5.3564, -0.9241, -2.6976, 1.7576, -1.1627, -4.9125, -18.6528, + 11.5366, 9.1379, 9.1023, 13.3107, 15.2931, 8.4262, 2.0019, -1.8545, -5.347, -10.498, -13.165, -8.7617, -2.8037, 6.5213, -2.9746, -1.1653, 2.895, -3.9002, -0.4074, -27.3478, + 8.1149, 5.2054, 4.7193, 10.9119, 14.2393, 9.7159, 2.7743, 0.0628, -0.9042, 2.5046, 6.2675, 4.5297, -1.7121, -2.7212, -6.4591, -8.2032, -12.1525, -9.796, -4.5542, -22.5432, + 10.427, 10.1489, 7.8411, 6.9092, 5.2675, 3.1553, 3.186, 0.3063, 0.4719, -0.871, -0.6868, -1.1505, -4.6137, -2.9984, -2.9661, -2.854, -3.0302, -2.2057, -5.9823, -20.3547, + 16.5991, 18.818, 20.4139, 16.0812, 15.2582, 13.6, 9.773, 4.82, 7.267, 0.5444, -5.1929, -8.9752, -12.2178, -15.2451, -9.0857, -9.6324, -11.9042, -7.0554, -15.8485, -28.0175, + 6.9984, 7.5807, 9.7172, 14.2935, 21.1422, 18.8026, 13.0729, 13.6068, 15.6061, 5.7873, -4.4176, -10.663, -14.9625, -15.276, -12.1485, -4.9859, -13.8661, -15.0801, -8.9505, -26.2577, + 4.8529, 5.9107, 5.9519, 3.1046, -0.7986, -3.8, -3.3218, -6.5949, -9.5964, -7.6925, -7.0336, -3.5031, 2.4411, -0.1901, 9.1699, 13.0532, 0.4243, 10.947, 3.0406, -16.3654, + 2.3975, 0.4924, 3.8005, 6.146, 0.9043, 2.1381, -0.0106, 2.9239, -11.7677, -3.8359, -3.4925, 0.8716, 3.474, -2.8287, -3.8786, 1.2858, 6.8931, -2.1701, 3.3894, -6.7326, + -3.5428, -1.39, 0.9285, 2.4806, 2.9675, 0.798, 0.9612, 0.2854, -2.0562, -1.3222, -1.9025, -0.0059, 8.6474, 4.6327, 1.6964, 0.3984, 0.9512, 1.7069, 1.4812, -17.7159, + 17.4798, 18.9995, 21.9699, 20.6967, 14.4015, 9.2408, 9.2963, 4.6834, -0.5765, -2.0466, -4.687, -8.134, -10.84, -6.9387, -4.9129, -2.3346, -9.5282, -16.6374, -22.862, -27.27, + 30.2051, 29.0816, 22.701, 15.9702, 13.2347, 12.3034, 7.9736, 1.711, -2.905, -5.822, -9.0457, -11.4933, -10.9824, -10.7128, -9.7198, -11.447, -12.1083, -14.372, -14.3489, -20.2236, + 4.3667, 5.6948, 7.6382, 9.1345, 7.9965, 5.9946, 4.8983, 4.5838, 1.3099, -1.1182, -2.4032, -2.5986, -0.3123, -3.8248, -3.3874, -4.6492, -2.5381, -4.101, -4.4278, -22.2567, + 13.3799, 15.9919, 18.2801, 18.5738, 14.5051, 15.061, 12.6361, 1.8684, -4.4789, -7.5763, -7.3687, -5.7285, -8.7693, -10.097, -1.0795, 0.7696, -6.5956, -14.5402, -16.2583, -28.5735, + 1.2989, -0.2985, -0.1264, 2.2528, 6.1919, 9.085, 11.5888, 9.6084, 6.4565, 4.6999, 3.8291, -3.1433, -2.0178, -5.4377, -3.5892, -2.4088, -3.4525, -6.5279, -6.8848, -21.1245, + 6.699, 6.9952, 6.99, 10.6461, 18.176, 23.4925, 20.7738, 19.3068, 14.5258, 4.1679, -5.0313, -10.5967, -15.7569, -18.7535, -19.3572, -18.4953, -9.1098, -8.3084, -3.508, -22.8561, + 0.3614, -3.0919, -2.2049, 0.2924, 3.5194, 12.3203, 10.5339, 6.5081, 2.9888, 3.7587, 9.6208, 6.5139, -3.3458, -8.5883, -8.7468, -4.73, 1.1707, -5.5824, -3.0982, -18.2001, + 3.6833, 5.1669, 7.0034, 5.1138, 6.2451, 5.1324, 2.9024, -0.2756, 0.6913, 0.7688, 2.7471, -3.0081, -4.2841, -1.679, 0.6913, -2.2915, -1.1739, -2.5591, -2.7007, -22.1738, + 11.4726, 11.0663, 10.8078, 10.4446, 10.6033, 12.3965, 13.0646, 7.6243, 1.8855, -2.1733, -3.8981, -0.7658, 2.9887, -2.4982, -10.215, -14.2533, -12.1696, -5.433, -8.34, -32.608, + -6.7179, -4.6131, -3.1636, 0.0876, 0.6888, 1.0614, 0.5541, -3.503, -3.5922, -2.2597, -0.8136, 6.0096, 11.8925, 2.9252, -1.145, -0.4619, -0.0294, 2.9522, 6.4894, -6.3616, + 5.3482, 3.731, 5.0957, 3.1029, 1.678, 3.1184, 0.5161, -3.5018, -4.5034, -6.3519, -7.8639, -5.658, -5.1767, -2.3928, 0.1325, 3.3098, 7.821, 11.9881, 4.419, -14.8118, + 8.2697, 5.8835, 6.0215, 10.4427, 12.0342, 7.5709, 3.5443, -1.0166, -4.1313, -6.5619, -5.066, -0.8575, 7.1102, -0.6052, -4.0956, 0.6756, 0.8926, -4.2551, -6.4788, -29.3772, + 2.0192, 3.9566, 4.9448, 8.089, 14.6263, 15.3545, 12.2775, 10.3302, 7.2993, 12.5826, 7.7803, -2.3944, -7.4949, -10.2984, -9.7837, -7.3581, -7.2692, -6.1954, -16.7366, -31.7295, + 12.8428, 15.92, 16.2497, 11.854, 3.8, -1.0057, -2.5059, -6.532, -8.39, -9.9165, -9.6596, -6.0113, 1.0447, 13.8469, 7.3566, -4.1906, -11.0801, -8.0052, 3.2361, -18.8537, + 17.202, 18.636, 23.3502, 20.5862, 15.5823, 12.7495, 6.4445, -6.6661, -9.171, -15.5663, -21.8272, -18.4838, -16.7082, -14.2582, 2.8891, 3.6115, -0.4823, -0.0577, 2.5754, -20.4057, + 11.2405, 16.2045, 19.5245, 19.0279, 10.816, 4.2621, 0.0074, -4.8018, -7.7494, -9.5065, -10.8518, -10.4718, -6.2617, 1.5892, 9.5055, 4.0459, -4.23, -9.8946, -9.4119, -23.0441, + 21.5981, 16.6548, 9.2131, 4.2901, -2.7752, -6.0814, -5.7172, -6.8518, -5.3057, -3.6255, 1.9348, 7.8994, -1.326, -8.0365, -10.6481, -6.5275, -3.0468, 3.5257, 5.6627, -10.8371, + 2.3529, 1.9098, 1.1705, -1.0129, 0.2322, -2.1724, -2.7849, -0.3004, 1.1108, 2.9625, 0.3261, -2.0946, 1.0272, 3.4696, 1.9753, 1.1513, 2.4885, 2.1442, 0.7739, -14.7298, + -1.7003, -2.4848, -2.4346, 4.7038, 24.9669, 27.0962, 7.9463, 4.7152, 0.192, -0.8991, -0.8489, 9.9068, -2.48, -9.4907, -11.9321, -1.857, -6.2441, -11.0862, -11.2891, -16.7804, + 14.9206, 17.922, 23.4494, 28.4771, 23.9338, 22.5858, 21.7793, 9.3991, -3.6346, -10.2702, -14.3748, -16.3264, -19.3026, -18.4585, -17.3134, -12.271, -10.593, -10.9994, -7.9141, -21.0092, + 10.8472, 9.9985, 8.1012, 5.6373, 0.7372, 0.0745, -0.8638, -1.7933, -2.9142, -3.015, -2.2427, -0.7782, -2.5201, -6.2197, -5.1933, 0.2777, -5.0155, 0.2927, 4.1108, -9.5213, + 11.2774, 17.5024, 20.7927, 14.9512, 8.8893, 5.3831, 1.1126, -0.5407, -1.8226, -0.7548, 3.8991, 14.1917, 11.4189, -2.2812, -13.1711, -17.2396, -15.8893, -13.7806, -15.9376, -28.0009, + -1.8142, -1.3801, -0.2831, 1.382, 1.7722, 1.4623, -1.2023, -3.2113, -5.2345, -6.7523, -4.9565, -2.8637, 4.0779, -2.6764, 0.8821, 14.4958, 8.5614, 4.5439, 7.906, -14.7091, + 10.5077, 13.8832, 19.5676, 20.853, 17.7078, 12.7109, 11.5269, 8.0218, 2.2318, -5.7244, -10.1683, -12.812, -14.923, -10.7023, -2.0109, -8.3963, -10.2008, -5.4032, -10.7793, -25.8902, + -0.2509, 1.3469, 0.6421, 2.6377, 6.0659, 4.3721, 5.352, 3.9824, -1.7069, -2.0895, -5.2191, -1.537, -3.3737, 1.3384, 4.0383, 10.2321, 1.6548, -3.2413, -5.147, -19.0973, + 6.4953, 9.3365, 14.1057, 20.6271, 16.1168, 7.358, 1.4929, -2.7587, -4.0681, -3.9748, 1.3672, 8.9105, -0.92, -5.3133, 0.3345, -6.1299, -12.7503, -9.3229, -13.4612, -27.4454, + 0.6201, 2.4328, 4.976, 9.2545, 15.4025, 12.2971, 5.768, 5.0077, 4.0499, 4.2155, 9.706, 7.7493, 5.8274, 0.3852, -5.9984, -11.5236, -7.305, -10.3504, -20.7971, -31.7176, + -3.7294, -1.4413, -3.7524, -4.5904, -3.2743, 0.736, -3.2763, -4.8007, -0.6213, 4.903, 10.4614, 11.0474, 17.3494, -0.7763, 5.4732, 0.7769, 1.2498, -0.7639, -2.107, -22.8638, + 6.7163, 9.2255, 12.3187, 17.6924, 17.6404, 11.894, 7.0991, 4.2645, 4.3021, 9.9874, 5.8382, -3.4579, -6.9519, -4.809, -2.1538, -14.0697, -18.7474, -17.332, -11.2745, -28.1824, + 14.7156, 19.4663, 14.7897, 6.5422, 1.1728, -2.3524, -4.9286, -7.8168, -8.8525, -9.4747, -10.7274, -8.5129, -4.4565, 7.8312, 0.0283, 4.0451, 1.6338, -1.3894, 4.4306, -16.1441, + 19.068, 22.0875, 24.611, 22.0341, 17.3706, 15.8785, 14.1658, 11.9508, 4.4308, -1.1373, -6.4223, -10.3244, -11.8572, -13.5064, -14.4779, -15.1004, -15.5216, -16.8251, -22.0101, -24.4145, + 9.0336, 19.0176, 24.4867, 24.6758, 18.9461, 11.7838, 7.6427, 4.775, 1.2864, 0.4513, 1.8155, -1.2592, -9.2086, -14.2929, -15.7555, -13.6408, -7.7748, -14.5157, -21.5902, -25.877, + 1.4827, 0.2805, -0.381, 1.4732, 8.234, 8.1707, 10.06, 8.3087, 4.1212, 2.7249, 3.5821, 7.9718, 3.7426, -2.6511, -5.3909, -4.4519, -4.5293, -6.7232, -8.9602, -27.0648, + 10.5705, 10.67, 11.7791, 12.1925, 10.0236, 6.6964, 5.1163, 2.6148, 4.7648, 2.5521, -3.9125, -7.4628, -9.6721, -9.3307, -9.9466, -8.0895, 1.1968, -3.82, -3.4846, -22.458, + 7.5905, 8.3863, 11.5587, 16.2565, 22.0088, 23.0422, 17.8049, 13.1018, 17.1694, 13.5769, -0.2381, -1.8062, 1.5806, -10.3901, -20.8106, -24.7914, -25.0524, -24.3552, -19.3769, -25.2554, + 7.3275, 11.616, 16.6781, 15.5131, 8.1538, 4.8147, -1.7134, -2.9599, -6.5688, -7.0695, -0.9248, 5.3367, -4.508, -7.1758, -3.427, -3.5021, -8.7907, -5.2842, 1.7479, -19.2635, + 8.6994, 13.7488, 20.2706, 15.6056, 8.03, 2.7906, -2.4915, -6.3762, -9.0577, -10.4892, -11.7811, -10.7422, -7.7494, -0.3422, 10.0858, 3.8928, 3.968, -2.0796, -2.0561, -23.9265, + -1.8066, -1.3696, 1.0493, 1.3711, 1.9691, 1.1999, -1.8646, -1.9643, -1.7749, -1.339, -3.3717, 3.1526, 1.2109, 0.799, 0.4966, 2.5531, 3.3704, 2.3429, 4.9229, -10.9469, + 4.0689, 7.4175, 12.694, 18.06, 16.5869, 9.3259, 4.5282, 2.8636, 1.6428, 4.7328, 12.4121, 9.1212, 6.2302, 0.0152, -12.5596, -17.7355, -18.6999, -12.797, -17.6503, -30.2571, + 0.8292, 2.6495, 1.8804, 4.1439, 5.6667, 5.7021, 4.9475, 6.8868, 6.795, 8.0289, 10.5666, 8.6874, 1.8534, -2.2297, -6.3646, -6.79, -8.1505, -9.3082, -10.0423, -25.7522, + 7.1022, 3.8236, 1.8946, 4.423, 4.784, 4.6315, 5.8219, 2.7914, 1.6501, 0.4344, 2.2205, 4.0071, 0.0326, -2.6285, -2.5436, -3.5874, -3.6688, -4.2155, -7.0087, -19.9643, + 0.1242, 12.2019, 4.3084, 4.2478, 1.9093, 0.6288, 1.1102, 1.5269, 2.2918, 5.1362, 2.1955, -5.7687, 1.1936, -1.4469, 0.2971, -4.6605, 0.8522, 1.2017, -3.9848, -23.3647, + -5.1159, -1.2775, 2.526, 4.1265, 3.4097, -1.7194, -0.8844, -1.4795, -5.4958, -6.8537, -1.5398, 0.9661, -2.324, -4.8943, 8.2925, 3.4432, -1.7853, 6.31, 13.441, -9.1454, + 3.9898, 4.3777, 4.2357, 3.0453, 3.7447, 2.5019, 1.1011, -0.478, -2.4003, -0.6497, 0.8291, 0.2117, 0.0985, -0.2133, 0.383, -1.785, -1.0322, -2.1328, -1.6069, -14.2203, + 11.3622, 14.7416, 16.8859, 15.0883, 9.9488, 8.7692, 4.3995, -2.0242, -2.6878, -1.0092, 0.7764, -2.2298, -4.084, -8.1165, -6.2525, -5.2064, -7.0092, -6.7164, -9.2528, -27.3833, + 3.6579, 2.8996, 4.0461, 8.3701, 17.0082, 23.3625, 16.2578, 7.1955, 17.3887, 6.3999, -4.2883, -9.9015, -12.7556, -12.3388, -5.468, -10.3674, -10.9476, -10.1432, -6.0175, -24.3585, + 7.5312, 5.8939, 4.3265, 4.0014, 2.9087, 1.6542, 2.9601, 3.9087, 1.37, -2.9778, -0.8059, -0.8752, -0.992, -0.8125, -0.8336, -0.0306, -2.6451, -2.7999, -4.2986, -17.4834, + 15.3876, 20.0855, 22.6771, 20.6277, 15.1509, 8.8202, 3.6289, -2.1904, -8.5688, -13.1818, -15.2549, -15.0083, -12.7233, -8.7307, 0.5974, 4.3829, -2.277, -0.0304, -7.8902, -25.5026, + 23.6589, 23.2539, 20.352, 15.1761, 11.4144, 5.8059, 5.4712, 1.316, 0.0827, -2.4308, -7.0613, -6.1765, -1.8534, 5.6004, -1.4387, -15.4564, -17.387, -18.868, -17.3832, -24.0763, + 11.6709, 14.1123, 21.1753, 25.8068, 20.7082, 14.063, 14.1588, 17.922, 14.6153, 4.8179, 3.3194, 0.469, -11.4997, -19.1991, -21.5666, -21.4213, -21.1902, -22.3547, -22.1566, -23.4508, + 4.6799, 3.0606, 1.6539, 6.2007, -2.0201, 3.0954, 0.5569, 3.2707, 1.3312, 0.0725, 1.8286, -5.9667, 2.657, -0.0978, -1.2174, -2.2597, 0.2234, 1.4765, -4.2077, -14.3379, + 9.3104, 11.8578, 14.9832, 13.1906, 8.5578, 4.2616, -0.4942, -3.0677, -3.2171, -5.1322, -1.7298, 6.6384, -0.8475, -8.0712, -9.5863, -5.8386, 2.661, -8.3104, -6.0285, -19.1373, + 2.2896, 3.8587, 4.9224, 8.6357, 13.9236, 17.8222, 15.7427, 11.5211, 7.5272, 9.1679, 9.7247, 5.7451, 0.5275, 0.3504, -6.2281, -12.9212, -14.0843, -20.5964, -26.6432, -31.2855, + 18.9039, 18.0327, 13.6297, 9.7561, 7.4319, 5.3744, 2.9646, 1.7415, 0.6716, 0.6859, 2.7446, 0.5342, -4.3187, -6.1877, -6.9311, -9.8734, -11.9041, -9.1281, -8.9591, -25.169, + 6.4513, 6.7843, 9.4438, 12.9549, 16.4801, 14.9093, 8.2954, 1.6877, -2.5193, -4.4922, -6.7348, -6.9853, -4.6783, 0.7181, 1.0483, -5.1128, -1.1161, -7.5305, -12.398, -27.2058 +}; + /* /home/metala/projects/smesh/asko/src/codebook/train_120_2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + -1.2668, -1.2477, -0.0681, 3.8419, -0.0693, -1.7919, -1.5943, 0.8402, 0.155, -3.1526, -3.0204, 0.7337, -0.2603, 1.659, 0.023, 5.5893, -2.4959, 1.9604, -0.6348, 0.7999, + 2.6673, 1.4923, 1.1408, -0.7478, -1.0755, -1.3421, -0.4884, 0.2535, 0.2951, 1.5088, 1.9447, -2.662, 2.3751, 1.5298, 4.1357, -6.563, -2.1766, -2.7535, -0.7706, 1.2362, + -0.6415, -0.4348, -1.2178, -0.987, -1.1057, -2.1421, -2.3594, -0.4977, -4.1484, -4.712, 5.5425, 3.0695, 3.661, 2.9729, 2.4379, -1.6136, -1.3052, 2.1342, 1.9164, -0.5692, + 1.593, -1.1175, -1.2476, 1.6203, 2.5315, 2.3427, -0.5223, -3.1063, -2.1739, -1.4774, -2.6108, -3.5842, -0.3828, -0.1511, 0.8929, 2.5717, -1.7657, 1.8954, 6.0193, -1.3272, + -0.2102, -0.3681, -1.2724, -1.152, -0.3715, -0.5633, -2.5238, -1.768, 4.7356, 5.6452, 0.862, 0.875, -0.8932, -1.5918, -1.4047, -0.072, -0.608, -0.7876, 1.3972, 0.0717, + 5.1178, -1.5391, -4.2881, -1.9745, 1.3515, 2.4014, 0.9329, 3.4647, -2.4062, -0.4224, 2.8708, -1.6053, -3.1492, -2.6783, -2.6937, -4.4645, 1.8599, -0.5456, 3.891, 3.877, + -1.7119, -1.0101, -0.5002, -1.7849, -0.4884, 0.2279, -0.8335, -1.0083, -1.2819, 0.1129, -1.3674, -1.3338, 0.929, 3.0765, 2.6339, 3.5627, -2.2713, 0.6565, -1.2099, 3.6022, + -1.5938, -1.3264, 0.9856, 2.8765, 2.37, 1.2528, 1.2586, -1.2453, -1.3974, -1.4988, -1.6309, -1.2183, -0.1625, -0.869, 0.003, -2.0081, 1.358, 2.9585, 3.3396, -3.452, + -1.368, -0.6304, -2.5755, -1.2397, 4.9487, 2.7251, 1.4675, -0.1832, -0.3932, 1.4723, 1.741, 0.6216, -1.0849, -0.7112, -0.3751, -1.7539, 0.1222, 1.9858, -0.5248, -4.2444, + -1.2786, -0.2384, 0.6718, 2.9763, -1.6959, 6.4607, -3.9459, -2.056, -2.7306, -0.2583, 0.0389, -3.6271, -4.0721, 0.826, 0.8112, 2.8769, 2.24, 0.5444, 0.3571, 2.0995, + 2.5196, 2.3359, 1.662, 0.625, -1.0528, -0.9133, 1.8668, 1.2853, 1.4368, 1.4676, 1.1301, 1.3664, 1.1076, -3.2853, -0.453, 0.4467, -4.7302, -3.8149, -3.9866, 0.9865, + 0.1738, 1.294, 1.3514, -0.3684, -0.7078, -0.2329, 1.3467, -1.0678, -0.0262, 0.2448, -0.8418, -0.391, 2.7415, 2.9948, -4.5965, -0.1192, 0.2496, 0.4684, 0.0669, -2.5805, + 0.2482, -1.3236, -1.481, 0.9433, 3.4287, 2.2233, 8.9344, -1.1138, 0.4585, -3.747, 3.0416, -2.7394, 2.288, 1.6598, -3.6439, 0.0633, -2.7363, -1.2617, -3.1924, -2.05, + 1.4672, -1.3248, -0.5511, 1.4512, -0.471, -1.2381, 2.9453, -2.3244, 2.3249, -2.1969, 0.9414, -1.9926, 0.5254, 0.0792, -3.2076, -2.414, 3.5291, 3.5738, -0.0613, -1.0556, + 1.556, 0.0091, 0.077, 2.8542, -1.4594, -2.0102, 0.544, 2.8119, -0.2925, -0.7111, 0.9589, -1.6923, -1.8606, 1.104, -1.6733, -0.0895, 3.6894, 2.7628, -6.9922, 0.4138, + -1.5539, 0.682, 1.4458, 0.4297, -0.4115, -1.3266, 0.5024, -0.6975, -0.382, 1.284, 0.9597, -1.0561, 2.2198, 0.1292, 1.4343, 3.0313, -3.9845, 0.6776, 0.338, -3.7217, + -2.0283, -1.5216, 1.0103, 4.8788, 3.7028, 4.4, -0.3076, 2.4853, 2.2296, -1.5213, 0.436, -5.9903, -2.6578, -2.3985, -2.0127, 1.3737, -3.795, 2.3105, -0.2099, -0.3839, + -1.7339, -0.9861, -0.2078, -1.2579, 2.5808, -0.9255, 3.2388, 1.0999, 3.6754, 4.6424, 1.9111, 1.4716, 2.7531, -0.2725, -0.3573, -0.5392, -4.2109, -6.4662, -2.3713, -2.0442, + 0.7177, 1.4094, 0.7205, 6.8683, 1.7836, 7.1562, -2.9368, 3.4036, -0.6064, 2.3377, 2.8714, -7.0408, -9.7129, 4.1278, -3.4444, -5.9919, 5.5073, -0.8996, -7.5142, 1.2434, + 0.8042, 1.5886, 0.8754, -0.4378, 0.2336, 0.0424, -0.1245, 0.0847, 0.6402, 2.6508, 1.6375, -3.2393, -2.2823, -2.1435, -1.5628, 0.4271, 2.2571, 2.5048, -1.5933, -2.3629, + 0.6292, 1.1956, 0.8357, -0.8634, -0.1796, 1.8589, 0.694, 2.8309, 2.5569, -0.4253, 0.2913, 0.7772, 1.418, 3.421, -1.9468, 4.2236, -7.3361, -3.7802, -3.598, -2.6029, + 1.9034, -0.7126, -2.3343, 0.2344, 3.6545, 3.9405, 3.0203, 0.1937, -1.1906, -1.9012, -0.6667, -1.259, -1.1021, -2.665, 0.14, -1.4183, -1.2342, 0.0547, 0.1519, 1.1906, + -3.6125, -2.2485, -1.082, -1.9912, -1.1521, -2.2527, -2.5383, 0.932, 1.1572, 2.023, 1.6579, 1.3763, 6.4432, 2.1652, -2.0259, 1.9724, 3.2824, -0.4615, -1.1909, -2.4539, + -1.153, -2.179, -0.7355, -2.0941, 0.6246, 1.7502, -3.3266, -3.4374, -2.6486, -2.2938, 0.9286, 1.3396, -2.1323, 0.2739, 1.2664, 4.4111, 1.3864, 3.905, 2.8286, 1.2861, + -1.9752, 0.7423, 2.4137, 1.8854, -1.1393, -2.5802, -2.9355, -3.674, -1.8244, 0.3099, 6.1403, 4.6215, -2.0636, -3.7172, -0.94, 1.424, -0.3669, 2.0205, 0.6217, 1.0369, + -0.1561, 3.9621, -1.3649, 0.2912, 3.5366, 0.8537, -0.9376, -3.7333, -6.5447, -1.2107, 3.3183, 2.5758, 1.9693, -4.869, 0.6212, 0.0985, 1.5746, 0.2433, -2.6173, 2.389, + 0.6849, -1.1521, -2.0382, -0.8953, 0.8771, 1.1996, -0.9704, -1.3679, -1.146, 0.0582, 0.2636, -1.9785, 0.5235, 1.6427, 0.6362, 0.7411, 5.6052, -0.3533, 0.6579, -2.9883, + 0.5989, -3.9928, -2.1937, 3.8742, 2.0056, 2.3132, -0.4478, -2.0855, -4.3607, -2.126, 5.3544, 1.9827, 5.3407, -0.8346, -2.4624, 1.1729, -4.3825, 0.7623, -1.9429, 1.424, + -3.3103, 0.0394, 2.0113, 2.6733, 1.2484, -0.2186, 0.1156, -0.4856, 2.4501, 0.8179, -1.1164, -2.1952, -0.9719, 2.0728, 0.4002, 1.1891, 1.7518, -1.2571, -3.3136, -1.9012, + 1.886, 6.9767, 2.4311, -2.0414, 3.91, 5.5378, -1.7478, -0.8304, 2.8523, -1.4075, 0.1309, 1.8232, -2.8868, -7.5003, -3.4867, -3.2756, -2.8584, 6.2611, -7.4682, 1.694, + 3.5074, 1.3392, 1.0862, 2.9814, 0.8158, -2.616, -2.3837, -0.8255, -0.1595, 2.0087, -2.8876, -2.4727, -1.3574, -1.2864, -1.5711, -1.0772, 0.4648, 2.7262, 2.1044, -0.397, + -0.143, -0.9788, -2.1195, -0.7774, 4.0804, 3.7123, 1.5082, 0.2869, -2.5968, -2.0127, 1.5147, 3.7486, 3.2447, 0.6959, 0.3308, -2.4516, -3.4598, -4.1669, -0.687, 0.2709, + 0.0724, 0.3235, -1.9536, -2.7454, -3.3392, -1.9023, -1.015, 0.7511, -0.0539, -2.8386, 5.2737, 5.1053, 1.4372, 1.4046, 1.4504, 2.4912, -2.6526, -0.6188, -0.653, -0.5369, + -6.955, 1.3233, 4.3542, 2.9502, 0.9929, -0.1186, -0.8657, -2.3452, 3.5061, 2.8348, -4.1741, -4.1264, 4.697, 3.0117, -0.2849, -8.0081, 3.4452, 0.7819, -2.7443, 1.7251, + -4.0878, -0.8849, -4.7521, 5.0067, -3.351, -4.8233, -6.6328, 4.8752, -0.7474, 3.8614, 2.6271, 0.9119, 1.0371, 2.2968, 4.316, -3.7042, 0.99, 0.496, 4.7952, -2.23, + 0.5901, 2.0654, 1.7824, -0.557, 0.4874, 2.7659, 0.8232, -0.1306, -0.6795, -1.3143, -1.248, 0.9969, 2.0563, 0.1625, 0.7346, 0.0223, -1.6836, -2.9087, -4.1058, 0.1406, + -0.5074, -0.8373, -0.8579, -0.046, -0.0854, -1.4221, -0.6935, 2.5302, 2.2014, 2.2225, 0.5896, 1.2715, -0.7624, -2.7997, -5.3296, 4.0372, 3.2176, -1.4146, -1.3705, 0.0565, + -3.819, -1.1051, 1.5169, -0.5542, -1.5591, 0.2921, -2.1144, 1.6664, 2.8275, 0.7745, 2.6977, 4.4021, -0.201, 0.0685, 1.3158, -0.8045, -5.9834, 1.7874, -2.1592, 0.9509, + 0.6749, -0.0635, 0.3751, 0.6561, 0.4718, -2.3144, -4.9191, -3.0907, 0.5499, -0.3498, 1.237, 2.6699, 1.5353, 1.6809, 1.2117, -1.3733, 0.0977, 1.361, 0.0102, -0.4207, + 0.8139, -2.9454, -1.1694, 1.1826, 3.5742, 4.3331, 1.4143, 1.7017, -1.2428, 4.8459, -4.4642, -0.0684, -1.7273, -0.1932, -2.6041, -1.4272, 0.2873, -0.9676, -0.1422, -1.2013, + -1.869, 1.2475, -2.8884, -0.3842, -0.3588, 2.7759, -2.006, -2.2023, -2.6599, -2.5791, -3.1221, 3.2645, 1.8131, 2.863, 6.3144, -4.2619, 0.7589, -0.7608, 4.8657, -0.8104, + 2.3449, 0.3057, -2.2411, -1.3084, 0.6572, -0.379, 0.2674, 0.5337, 0.4996, 0.8832, 2.3616, 3.9339, 4.7846, -2.7473, -0.5167, -0.0864, 0.9288, -4.3018, -4.0903, -1.8294, + 2.9658, 2.7467, -1.9276, -4.0009, -0.7257, -0.6616, -2.0255, -1.2898, 0.3022, 1.581, 3.0521, 2.579, -3.2369, -0.4791, 0.4455, 0.1138, 1.1032, 0.9003, -1.5708, 0.1285, + 5.2204, -2.819, 0.8203, 0.5992, -1.3205, -2.1549, 5.0256, -1.605, 0.5506, -2.8092, -0.2831, -1.6376, -1.8233, -0.0177, 2.5319, 2.0586, 0.9166, -1.5417, -0.3071, -1.4039, + 0.109, -0.1359, -0.4821, -0.506, -1.1903, -0.1205, 1.301, 0.0989, 0.228, 1.3298, 1.4648, 0.728, 0.0076, -1.4837, -0.1633, 1.2525, 0.9437, -0.0019, -3.9783, 0.5988, + -4.0941, -3.422, 0.4966, -5.4678, 6.0636, 1.1749, -0.183, 3.3518, 3.548, 1.4243, 2.5791, -5.9065, -1.8723, -1.6703, 1.399, 6.8845, 1.8643, -1.2344, -3.7475, -1.188, + 3.5819, 1.2282, -0.2187, -0.8194, -0.0683, 0.6784, 0.9405, -0.1871, -1.0635, -2.3089, -1.7476, -2.3377, -1.8039, -0.2123, 0.7402, 0.881, 0.7063, -3.8015, 4.2698, 1.5426, + -0.7508, -2.5319, -1.4606, 1.0638, -3.8848, 1.206, 2.6878, -1.2315, -0.1629, -2.273, -3.3361, -1.6208, 1.9855, 3.4308, -0.212, -1.4559, -0.3738, 2.3568, 2.3629, 4.2004, + 1.5564, 1.6137, 1.4225, 1.6668, 1.3266, 0.046, 0.1831, -0.3664, -1.4348, 2.569, 2.2918, 1.6955, 1.668, -1.3807, -1.0884, -1.098, -0.5844, -1.0295, -3.6955, -5.3616, + 1.7128, -1.8066, -4.0653, -3.8214, -0.9531, 3.4797, 0.7961, -2.4955, -2.7851, 0.0025, 0.7872, 1.0652, 1.5456, -0.4352, 1.9173, 4.6258, 0.3691, -0.1501, -0.2351, 0.4458, + -1.6777, -3.1299, -1.6947, -1.1535, -2.1999, -3.2226, -0.9846, -2.1533, -0.6467, 2.0938, 2.1307, 2.9065, 1.5181, 3.0875, 0.0486, -0.2157, 1.3461, 0.7741, 2.732, 0.4413, + -2.0098, -0.0651, -1.1313, -3.1454, -1.8173, 0.4664, 2.3278, 3.1806, -3.0726, -1.5969, 3.6994, 0.6478, -0.6833, 1.0635, 1.1405, 6.7102, -4.8934, -4.2029, 3.4752, -0.0933, + 3.0911, 3.132, 3.6764, 1.2247, 2.0977, -0.4399, -3.947, 1.4276, -0.2596, 0.5511, -6.4999, -0.9385, 3.2215, 1.7397, -2.0786, -2.616, -3.015, -2.0586, 1.9218, -0.2304, + 0.5955, -0.9572, -3.8115, -1.2133, 0.96, 3.0247, 8.636, 5.7851, 6.1244, 0.7094, -2.441, -1.1712, -1.7901, -3.5399, -2.8318, -2.5468, -4.9596, -0.6022, 0.6141, -0.5845, + 12.5835, 1.8094, 0.1352, 1.7718, 0.9427, -1.369, 7.1277, 0.0421, -2.3404, -4.665, 1.4653, -2.488, 2.6056, -10.3828, -8.1067, 4.1108, -1.2481, -1.833, -2.7827, 2.6214, + 2.9658, -0.2617, 0.2806, -0.2164, 2.855, 1.9755, -3.5301, -1.235, 0.9311, 0.8713, -2.2265, -0.6005, 2.6386, 2.7666, -2.3603, -2.5163, 1.6854, 1.0161, -7.8883, 2.8489, + -0.9445, 0.6006, -1.3214, -5.0651, -2.1702, -0.0289, 0.1003, 2.2883, 0.0424, 3.4686, 2.0494, 1.6327, -1.6152, 0.122, -2.8666, -2.2261, 4.9579, -2.2581, -2.7323, 5.9663, + -1.3666, -0.2364, -0.3999, -0.9988, -2.0227, -0.061, -0.5411, -2.2113, -0.2283, -1.715, 1.0239, 4.276, 1.9603, -3.0526, -2.5894, 0.8611, 5.2528, 3.4951, -2.2336, 0.7875, + 4.7609, 3.7023, 0.7955, -3.1291, -1.3671, 0.8798, -0.9947, 0.2668, 0.5762, -0.9479, -4.5541, -0.6922, 0.0699, -5.8412, 4.2302, 5.0652, 1.3544, -2.4661, -0.6224, -1.0865, + -2.6815, -0.9958, 1.6109, -1.7618, -2.5561, 1.0357, -1.5863, -2.2811, 3.4491, 1.1806, -0.2855, -0.138, -0.0202, 5.6861, 0.8289, -1.0913, 0.5986, -1.1493, 3.2455, -3.0884, + 1.7353, 3.1908, 5.0898, -0.4602, 0.0751, -2.1427, -5.091, -3.1667, -3.3291, 1.9531, 0.4802, -4.8101, 2.2518, 2.438, 0.6439, -7.3548, -0.0689, 1.8997, 5.717, 0.9491, + -1.1588, -3.1119, -3.4525, 0.2538, 1.3345, -1.05, -0.387, -0.0472, 0.1522, 4.0806, 2.8886, 3.8741, -1.9507, -2.9183, -0.3828, -0.0805, 0.4136, 1.1466, -3.1863, 3.5818, + -4.1654, -5.7362, -5.0041, -0.9889, 4.1884, 4.8135, 1.5658, -2.3781, 0.8425, 7.5151, 7.3977, 3.9243, 0.6283, 0.9194, -5.0741, -1.9566, 0.21, -4.9786, 0.876, -2.5989, + -5.3114, 2.2992, -1.9803, 1.215, 9.1545, -2.196, -2.8749, 9.6686, 0.5512, -4.17, -1.1338, -4.1549, 1.6645, -3.1643, -1.78, 4.9896, 0.339, -0.0421, -1.0391, -2.0347, + 1.074, 2.184, 0.9247, 2.0617, -2.1994, -4.0653, -1.5118, -0.9397, 1.3781, 2.9104, -0.8864, 8.5382, 0.5495, -3.5922, -0.2482, -0.5485, -0.9604, -1.8453, -3.1808, 0.3575, + 3.5141, 2.7621, 1.2101, -0.3665, -1.1827, -0.5351, 0.4822, 0.7598, 0.8241, 1.4976, -0.8943, -2.8067, -2.3512, -2.0448, 0.3706, -0.9201, -3.9192, 1.1431, 0.4761, 1.9809, + -1.7817, 1.1939, -1.2195, 1.7524, -4.7374, 1.152, 0.0973, 1.5475, 2.2848, -7.787, 2.0346, 0.5213, 2.8861, 3.1077, 1.1974, 2.3936, -1.4248, -0.2888, -1.4706, -1.4588, + -0.7677, -2.0426, -2.9918, -1.8722, -1.4336, 0.4207, 1.4107, 1.0509, -0.1714, 0.2221, 1.3054, 0.5884, 3.1454, 1.8747, 0.151, -0.5701, 0.5457, 2.7058, -0.0854, -3.4859, + 1.6593, 1.0024, 0.3202, 1.0267, -0.2368, 0.1208, -0.7272, -1.0487, 0.2686, -1.0197, -1.3131, 4.1829, 1.0297, 1.7779, -3.0898, -0.7777, -4.5532, 2.1765, -0.31, -0.4886, + 2.9341, -0.2895, -2.421, 0.9438, 2.949, 1.2447, -0.4279, -0.4133, -0.2487, 0.6464, 0.1859, -0.8613, 0.069, -2.0024, -3.5783, -0.9123, -2.3469, 0.3089, 5.3909, -1.171, + 13.8818, 0.6217, -0.6459, -3.4218, 0.8331, 0.8918, 2.2009, 4.0596, -3.038, -7.3862, -3.2105, -2.2108, 4.7972, -5.3735, 3.887, -1.819, -0.5123, 0.9752, -3.6921, -0.8383, + 0.2536, -11.0226, 4.4625, -7.9396, 8.6657, 2.6088, -1.0215, 0.4492, -5.0641, 2.7194, 1.1735, 2.207, 3.3733, -0.2605, 5.5319, 3.5989, 0.2759, -3.6185, -2.9338, -3.4591, + -0.2533, -1.2245, -1.1924, -0.1962, 0.6099, -2.1289, -2.0002, -2.039, -1.5592, 0.7879, 0.1165, -0.9325, -1.5485, 0.4552, 0.3883, 1.9054, 2.3495, 3.9138, 2.3594, 0.1886, + 0.175, 3.7528, 1.6899, -4.327, -5.0437, -3.141, -4.7768, -1.9628, -4.5893, 5.9435, -9.6773, -0.4601, 3.0571, 1.2797, 0.1161, 3.5574, 3.7157, -2.0222, 5.9308, 6.7823, + -0.6999, -2.9933, -3.6606, -0.6207, -1.4032, -1.1364, 0.253, -0.9004, -2.7685, -4.3142, -0.7561, 0.8142, -0.4715, 0.8444, 2.0053, 0.5983, 3.3363, 4.4913, 6.9146, 0.4673, + 1.0959, -0.0886, 0.2379, 3.2725, 1.2016, -1.1581, -1.364, -0.6268, -0.3678, 0.9051, 0.7593, -2.2902, -1.4578, 0.6349, 0.5115, -4.4984, 2.2315, 2.2535, -2.7867, 1.5345, + 3.6055, 3.8842, 2.1794, -0.7568, -1.05, -2.1686, -0.6731, -2.0718, 0.8001, -0.6819, 1.1112, 0.5707, -2.4862, 3.1489, 2.6767, 2.5134, -1.9147, -4.1519, -2.4548, -2.0802, + -1.9388, -0.7447, -0.8349, 0.1123, 0.1251, -1.3476, -2.6413, -0.477, 5.6864, -1.8563, -3.3514, -0.5309, -1.6295, -1.3453, -0.4664, 4.593, 1.1909, 2.9264, 0.9356, 1.5944, + 0.5951, -0.4177, -0.1304, 0.5462, -1.3265, 1.4534, 1.6425, 0.973, 0.8946, 2.1586, 4.2557, 0.8968, -5.0524, -1.9576, 2.6089, 0.6571, 0.7918, -2.2504, -4.5907, -1.748, + -1.6456, -2.0706, -2.4462, -2.5983, -2.5056, 2.0863, -0.9159, -0.8806, -0.8052, -0.7776, 1.0285, 0.4522, 1.5131, 3.453, 4.933, -2.7752, 1.775, 2.1982, -0.0181, -0.0006, + 2.2117, 0.6658, -0.1647, -0.7769, -0.3291, -0.0686, 3.183, 1.8603, 1.0488, -0.7866, -1.0352, 1.6465, 0.2395, 0.3989, -1.2496, -1.9498, -2.6996, -7.5216, 1.332, 3.9951, + 1.0405, 1.3681, 2.7153, 3.0279, 2.8206, 1.9933, -1.5434, -2.0223, -1.049, -1.2756, -0.1434, 0.2554, 0.8858, 1.3178, 0.3714, 3.567, -3.1912, -1.0147, -3.0243, -6.0993, + -0.8348, -2.4017, -3.6731, -2.0399, -0.2474, -1.064, -1.1488, 1.3352, 2.8367, 5.1498, -0.0673, 1.7148, 2.0672, 0.78, -2.8302, 2.8981, -0.7525, 1.3119, -2.4119, -0.6222, + 3.0927, 2.0509, 2.4548, -1.3001, -3.9942, -0.7486, 2.8523, 0.1569, -4.3404, -10.5627, 4.2087, 4.2968, 2.7013, -1.1646, 0.2008, -2.4272, 1.8708, 0.5192, -2.3092, 2.4416, + 0.6449, -3.5216, -3.8362, 2.1329, -1.2999, 0.6434, -2.5079, 3.1409, -0.943, 2.1409, -0.9005, 2.6639, 5.842, 2.2508, -0.1834, -3.5407, -2.0329, -1.9827, -0.2675, 1.5565, + 5.1512, 4.1361, 0.9497, -3.1897, -6.0608, -4.8346, -0.7128, -2.1849, -2.1809, 0.1265, 0.3295, 0.2665, 1.1233, -0.4722, 2.7945, 1.1909, 0.4093, 1.9529, 0.638, 0.5674, + -2.0255, 1.8944, 3.261, -0.6543, -0.1603, 1.6419, 1.8339, -4.1284, -1.6495, -7.4417, 2.7611, 3.0349, -5.4696, 5.3754, 0.2729, 5.17, 0.7296, -0.1265, -1.6533, -2.6659, + -7.1882, -6.8851, -0.9549, 2.6573, 1.6288, -0.3149, -2.2361, 1.6706, 4.0565, 3.2723, -2.0478, -0.6505, 2.7769, 4.9536, 1.831, -4.1026, -0.854, 2.2409, 0.8671, -0.7209, + 0.8703, 1.1461, 2.9551, 0.5102, 0.4539, 9.1307, -3.4339, -1.5513, -2.2902, -4.1038, -6.058, -0.8757, 3.583, 2.5081, -1.9449, 0.3605, 0.8645, 0.6768, -0.2206, -2.5809, + -4.5091, -1.0618, 1.6342, 0.589, 1.0199, 0.707, -0.4636, -0.7393, -2.0902, -4.3948, -1.8491, 2.8967, 1.9263, 0.6394, 4.9955, 3.9485, -0.2145, -1.3652, -1.4955, -0.1736, + -1.2527, -0.6868, 0.0359, 0.5854, 0.7286, -0.5988, -1.0892, -1.2358, -0.5524, -1.8766, -4.8554, 1.3154, 3.0969, 1.2141, 0.4785, 0.5435, 0.966, 0.9526, 2.5969, -0.3662, + -3.4429, -2.5359, -0.7902, 1.6794, 1.395, 0.9304, 0.5281, 2.0451, -0.282, -0.762, -2.3113, -2.5279, -1.2407, -4.6199, 3.9276, -1.3637, 2.0692, 2.0266, 2.415, 2.8601, + -0.0841, -1.4504, -2.5295, -2.1914, 0.016, -1.5806, -3.8581, -1.8751, 1.241, 1.4792, -0.0268, -3.0304, 1.1672, 3.1034, -0.0043, -1.775, 1.0722, 5.8103, 3.7335, 0.783, + -1.2601, -0.9248, -0.9753, -1.158, -0.4657, 0.9286, 0.4457, -0.7164, 2.9298, 6.0232, 1.1288, -9.2201, -2.6002, 1.0866, 3.5907, -0.3994, -0.8783, -0.4493, 3.0463, -0.132, + -2.6865, -1.7683, 0.5719, 4.2697, 0.4434, 0.9403, -0.1787, -3.9995, -1.4954, -2.9666, 0.5871, 0.7458, -0.5643, -3.3758, 2.4009, 1.363, 3.2345, 2.9305, 0.6423, -1.0943, + 0.2605, -0.1269, 0.1894, 0.8801, 5.6065, 4.4842, -0.336, 1.6337, -1.008, 2.2349, -1.3371, -3.4195, -1.5849, 3.4658, -2.7632, -2.8878, 0.2535, -1.0857, -3.4858, -0.9736, + 0.5903, -1.1309, -3.8731, -2.8181, 0.6957, -2.193, -3.7976, -0.1684, 0.3131, 0.8609, 0.0568, -0.1356, 5.9915, 2.3704, 3.984, 0.584, -1.9366, -2.6479, 0.4937, 2.7608, + -1.4917, 0.6707, -1.8279, 0.4736, -4.3226, 7.6508, -0.677, -1.0388, 1.6577, 3.4357, 2.121, -1.6783, -1.9394, -0.4857, 0.0446, -2.1769, -1.5641, 1.5895, 1.475, -1.9161, + -2.4617, -1.4865, 0.9268, 3.7356, 1.9298, -1.0879, -0.9003, -0.6573, -0.4536, 1.1463, 2.5279, -0.9025, -2.1547, 0.5579, -1.4546, -2.5618, -1.102, 1.7633, 4.9058, -2.2707, + 3.2436, 2.0698, 1.3674, -1.4618, -0.4269, 1.2764, 0.316, 1.2237, 0.7208, 1.5117, 1.4584, -0.5527, -0.7757, -2.7217, -4.0792, 1.8261, 2.7197, -3.9546, -1.7508, -2.0101, + 0.2659, 1.9357, 0.5705, -1.8509, -5.0017, -3.7512, -2.7574, 0.2996, -1.125, 0.6895, 2.7521, 3.709, 3.4556, 6.5334, -3.5389, -3.897, -2.9436, 0.765, 1.5177, 2.3717, + -1.2532, -0.7651, -0.7634, -1.69, -2.3167, -1.0574, 0.9291, -0.7963, -1.477, -1.6646, 0.5558, 0.7009, 3.4059, 9.2719, 1.4172, 2.4588, -0.7901, -3.7873, -1.0613, -1.3173, + 3.2264, 0.6063, -2.4159, -3.8529, -1.9936, 2.6889, 2.5115, 0.8341, 0.8209, 1.2008, 0.7255, -2.1489, -1.1543, -0.6443, 2.0479, -0.7011, -0.5619, -0.082, 0.5538, -1.6613, + 0.89, 0.2673, 1.2328, -0.1459, 2.5186, 2.3429, -0.5461, -0.5497, 1.9452, 5.1637, 1.5156, -3.9805, -1.5621, -1.5331, -2.7711, -2.2357, 0.7958, -1.6083, -2.3152, 0.5758, + 4.0233, 3.7838, 3.0862, 2.468, -0.8644, -2.4804, -0.9694, -1.9035, -3.4966, -3.959, -3.9724, -1.208, -1.6237, 0.7915, 0.4354, 0.8419, 1.1287, 1.8538, 2.3476, -0.2827, + -0.5315, 1.6742, 2.6296, -0.5391, -1.8812, 2.7171, 6.8646, 3.9934, -2.0577, -0.8537, -4.3316, -2.4473, -2.8864, -0.3456, -1.9169, -1.4494, 0.4578, 1.9608, -0.1673, -0.8898, + -2.1559, -2.48, -1.5001, 1.3457, 3.3362, 2.6367, 1.4331, 2.3397, 3.7557, 3.4063, 1.6588, 1.2723, -0.3658, 0.5614, -2.5827, -5.6096, -3.4952, -4.1966, -1.5564, 2.1965, + 0.1567, -1.6324, -1.8735, -2.1011, 0.8687, 2.8596, 1.0227, 5.0782, -3.8186, -0.4012, -1.0627, -1.0858, 2.3105, 2.5822, -1.0014, -0.6915, 1.2628, 0.1273, -4.312, 1.7113, + 0.5493, 0.1877, -0.3065, 0.0805, 0.17, -0.4682, -0.7192, 0.7521, 1.1935, -1.2445, 0.5061, 3.0407, 3.3122, 2.9044, 2.0613, -2.6946, -2.8479, -1.4855, -3.4536, -1.5377, + 1.2611, 1.2112, -0.4954, 1.5849, 2.8817, 0.5597, -3.2189, -1.8993, -2.3996, 0.0235, -0.927, -1.1263, -1.6443, -3.5163, -1.2543, 1.841, 4.5628, 1.0754, -0.1607, 1.6406, + -0.8759, -1.6975, 0.2532, 6.4042, -3.4246, -2.9858, 1.9661, -3.2513, -4.0109, -0.5134, 2.5545, -3.0437, -2.1093, -3.6915, 4.1398, 6.0036, -1.3456, 1.3628, -1.0285, 5.294, + 8.8405, -7.236, 2.8239, 7.1563, -1.4248, -8.041, -1.9196, 1.8187, -0.932, -3.1134, 1.9133, 4.5783, 5.5866, -1.744, -0.1615, -9.2039, 4.4457, -2.5424, 2.5822, -3.4268, + -1.9594, -0.144, -0.0014, -0.5248, -1.274, 1.9184, 0.2637, 0.9658, 3.9879, -1.7646, 0.8739, 3.6824, -1.4748, -0.5493, 4.194, -0.5892, 0.9704, -2.3393, -5.2036, -1.0319, + -1.8153, -0.8777, -1.3975, -2.8688, -1.315, 0.6005, 2.0795, 2.0158, -0.0187, 2.3273, 5.2446, 3.191, 0.542, -1.0394, 1.3294, -4.655, -1.5318, -1.6999, 0.2573, -0.3684, + 4.3069, 1.2137, -1.8464, -3.0026, -0.9539, 3.1554, 3.4215, 2.0922, 0.4828, 1.6102, 1.1857, 1.5577, -1.8593, -2.9907, -3.064, -4.6355, -1.6614, 1.3592, 1.5116, -1.8833, + 0.6407, 1.1519, 1.5429, -0.7369, -1.7269, -1.6671, -0.129, -0.7049, 0.8116, -1.2198, -4.0157, -5.1437, -3.1965, 2.3418, 0.7111, 2.6992, 0.5585, 1.9829, 4.9644, 1.1355, + 0.6364, 2.1072, 0.987, -5.1572, -4.3363, -1.0839, -1.3521, 1.8709, 0.8132, -0.2938, -0.2079, -2.5242, -0.8999, 2.3401, 0.7392, 3.1549, 3.0568, -1.1375, 0.0963, 1.1908, + -0.0136, -2.4241, -0.4209, 1.6339, 3.4114, 3.5889, -1.41, -3.5651, 3.1831, 2.0426, 0.5548, -2.0177, 1.6429, -3.2634, 1.578, -4.1305, -0.9389, 0.1651, 0.4588, -0.0751, + 2.0687, 0.8544, -0.3821, -0.1978, 1.0057, 2.3289, 3.0174, -0.333, 2.0178, -0.6679, -0.1993, -1.917, 1.6018, -0.3834, 0.6526, 1.9588, 0.3355, -2.0462, -4.1767, -5.5379, + 2.7809, 0.2282, 0.482, 1.9051, -1.735, -3.4716, -3.3685, -1.3005, 0.1251, -1.5366, -1.9516, -2.1469, 1.2541, 3.7123, 3.039, 0.8154, 2.3154, 2.5014, 0.0685, -3.7166, + -2.7442, -0.5589, 1.8753, 0.2528, -1.7122, -1.5279, 0.3471, 1.3429, -0.0809, -1.0979, -0.5556, 2.8899, 0.2864, 2.18, 1.7006, -3.4442, -2.6681, 2.9174, 1.9107, -1.3132, + 1.1471, -0.3191, -2.5131, -2.6788, 2.7236, 4.0318, 2.942, 3.1336, 1.5351, 0.48, -0.0086, -1.0945, -1.1975, -0.4758, 0.1588, -0.497, -0.2437, -3.5219, -3.3061, -0.2958, + -0.6947, -3.5085, -2.7613, 0.0475, 0.2365, -2.4104, -0.4597, -0.9262, -0.2261, 1.8983, 0.9162, 0.3544, -1.0767, 2.3229, 2.3748, -1.6417, 3.4712, -3.6716, 0.1472, 5.6077, + -1.7531, -0.9915, -0.4352, 0.4089, 0.189, -1.7111, -0.6401, -0.9353, -0.5743, 0.3365, -0.6869, 0.9392, 0.8776, -0.2201, 0.7815, -1.7487, -0.2509, 3.0732, 0.2971, 3.0442, + -6.4696, -1.5332, 1.3136, 7.9582, 4.7035, 0.4178, -1.4784, -2.4577, -0.6662, -2.4183, -3.1348, -2.0591, -4.3423, -0.208, 1.5975, -2.6953, 0.1211, 4.7779, 4.5315, 2.0419, + 0.8642, 3.0824, 1.7461, -0.8529, 0.9231, -0.3502, -2.7586, -2.7081, -1.4853, 1.1577, 2.4953, -2.0279, 3.1643, -1.1352, 0.2786, -0.165, 2.423, -0.5282, -0.4006, -3.7227, + -3.9091, 0.2639, -0.0395, -5.0339, 1.4635, 7.9381, -1.8279, -7.5321, 1.8947, 0.9696, -7.1991, 7.7502, 4.8838, -5.2722, 5.2271, 6.4012, -8.2785, -5.8271, 0.4487, 7.6786, + -0.4051, 0.3015, -0.5211, -1.1563, -1.5548, -0.8506, -1.7742, -0.6679, 0.3853, 3.9695, 3.145, -3.5632, -0.3392, -3.3757, 1.3514, 4.4934, -1.2754, -0.4248, 1.0022, 1.2601, + -3.0667, 3.2388, 3.6288, -0.3263, -3.6989, -4.3941, -3.0073, -2.9882, -2.7834, -3.8873, 2.3701, 6.1068, 1.0432, -2.8444, 0.146, -2.5272, 1.8208, 2.6818, 7.7176, 0.7699, + -0.8674, 0.6588, -0.0766, 1.935, 3.3452, 2.7012, 0.4707, -0.8282, -0.7703, -3.8252, -2.8814, -0.2389, -1.3895, -0.9376, 0.2572, -3.4418, -2.3763, -1.8695, 7.4789, 2.6558, + 0.8567, 1.9741, 0.6363, 2.1993, 1.9072, 2.2211, 3.7376, -0.0455, 1.3289, -1.0736, -4.8817, -4.0284, 2.4624, 1.0596, -3.8101, -3.8498, 0.8895, -0.5176, -2.3743, 1.3083, + 3.7465, 3.5865, 0.1979, 0.4072, -1.1714, -1.4598, -2.1688, -1.4971, -1.1953, -2.8028, -1.8515, 1.1483, 3.7654, -2.6485, 1.2635, -2.4929, -1.4965, 0.6356, 3.3756, 0.6583, + -1.7286, -0.6675, 0.3769, 1.1159, 0.0587, 1.4828, 1.214, 6.0165, 1.2212, -3.4526, -2.4321, -0.8616, -2.2663, -0.0017, -0.0046, 0.2615, 0.0517, -0.8546, 0.5801, -0.1095, + 3.4455, 1.4668, -0.0851, -2.9245, 0.0932, 1.2861, 1.125, -0.6317, -4.0005, -4.4206, -1.5097, 1.3643, -0.1238, -0.8046, -2.45, 4.2293, 2.9297, 3.2594, -3.0122, 0.7633, + 2.2354, -0.6334, -2.7256, -1.7876, -1.8603, 0.6549, 0.1244, -1.81, -1.7636, -2.7665, 1.0419, 3.6034, 2.7187, -5.8124, -0.9848, 2.8478, -0.3193, 3.4835, 2.5353, 1.2184, + 3.0602, 4.3425, 2.426, -0.5623, -0.8919, -0.273, 1.3901, 0.4772, -0.5219, -1.3754, 0.4815, 2.4087, -5.0472, -5.6009, -2.8901, -2.4607, 1.8809, 3.5997, 3.9232, -4.3669, + -0.0346, -0.2122, -0.229, -0.9365, -0.4221, -1.93, -2.3572, -2.9919, -2.2394, 3.2115, 2.4104, 2.4249, -0.5682, 1.5001, -1.3857, 2.614, -1.8866, -5.618, 7.3368, 1.3135, + -0.4484, -1.1107, -1.9143, -1.2992, -0.5392, -1.0181, -0.6562, 0.5186, -0.7919, -1.4379, -4.0959, 2.4107, 1.5417, 0.0557, 3.4844, 1.7096, -0.8275, 1.7994, 2.0983, 0.5209, + -0.4549, 0.183, 0.2262, -2.2572, -1.5931, -0.7026, 2.6431, 2.6098, 4.0381, -0.4805, -2.9134, -3.5443, -0.6536, -2.1551, 2.0956, 1.2393, 0.2979, 0.9155, -2.0621, 2.5682, + -0.1092, -1.2889, -2.5682, -2.3378, -1.7259, -0.5628, -0.6114, -2.8295, -2.569, -3.3678, -2.2669, 0.6023, 0.3823, 5.9006, 5.7607, 1.9871, 0.6942, 1.2471, 3.2445, 0.4186, + 0.6515, 1.8638, -0.3444, -2.0169, -0.6995, -2.9879, -2.4596, -1.0847, -0.8686, -2.3776, 2.0331, 4.8909, 4.1694, 1.269, 1.4079, 1.9289, 1.882, -0.9986, -3.0198, -3.239, + 1.7936, 1.2201, -1.9231, -2.6761, 1.6107, 7.0585, 8.8031, 2.9894, -2.3291, -6.5825, -1.5641, 3.0126, -4.0096, -4.0332, -0.6223, -0.5985, -0.8359, 1.2689, 0.3585, -2.941, + -1.2384, -0.3295, 2.3565, 3.0657, 3.2204, 1.089, -0.5456, 0.1283, 2.9904, -0.097, -5.2104, -1.5801, -2.5751, -2.3243, -0.3014, 2.6881, 0.5623, -1.5424, -1.9388, 1.5825, + -2.6631, -2.8705, -3.6445, -0.1511, 1.0369, 4.6018, 2.7993, -0.5794, -0.1152, 0.9196, 4.1279, -0.7083, -3.1505, -2.187, -2.5145, -0.8667, 1.9629, 3.781, 1.8562, -1.6347, + -3.7832, -0.9972, 1.0298, 0.8253, -2.4369, -3.3827, -2.6892, -0.8231, -1.082, -0.0375, -0.7937, -1.8433, -0.5302, 3.8146, 2.3123, 1.6122, 4.1004, 5.6672, -1.045, 0.0824, + -0.1, -2.02, -0.5383, 2.2917, 0.8366, -2.2105, -0.8495, 2.1052, 3.4989, -0.0827, -0.3031, -1.7154, 1.3463, 5.4572, -3.0939, -0.0935, -1.1704, -5.241, 2.43, -0.5476, + -3.7789, -1.9485, 1.8338, 2.9833, 0.6807, 1.8337, 5.1432, -0.4532, 0.5973, -0.6042, 0.8753, -1.5014, 0.4292, -2.2709, -1.2993, -0.1667, -1.6955, 1.1932, -6.0865, 4.2353, + -0.492, 0.0568, -2.6837, -3.2294, -0.292, -0.679, 2.7843, 3.0219, 1.7934, -2.2037, -3.0967, 1.8829, 0.5782, -1.6334, 1.9235, 4.5606, -4.2261, -0.0121, 2.2982, -0.3517, + -0.6429, 2.5139, 2.3667, 2.2, -1.8905, -1.3195, -0.0575, -0.672, 2.8832, 0.3828, 0.9744, 2.9334, -0.6053, 3.2595, 2.5269, 0.0016, -5.8119, -0.9627, -4.8744, -3.2058, + 0.8584, 0.9302, 0.363, -0.3058, -0.919, -1.1142, -3.3748, -2.621, 0.9921, -0.044, -0.2277, 0.806, 1.7478, 2.0581, 0.39, 4.4187, 5.843, -6.6138, -3.1191, -0.068, + 0.3281, -0.0986, -1.1173, -1.9481, -2.4515, -1.0863, -1.3545, 1.1448, 2.8412, 3.7501, 2.6741, 2.7224, 1.8554, 1.4018, -3.7195, -2.9142, -1.2068, -4.2062, 2.968, 0.417, + 0.2181, -1.3017, -1.3715, -0.9326, -1.1639, -0.6082, 2.2905, 2.1838, 3.153, 3.3746, 2.0088, -0.8055, -1.0486, 0.7007, -1.796, -0.3898, -2.4327, -2.4057, -2.1793, 2.506, + -2.4912, -0.4925, 1.9418, -0.632, -1.0125, 1.8048, -1.536, -1.7457, -0.3001, 0.5912, 0.4548, -1.4661, -1.5177, -0.5917, 5.6377, -3.6558, 1.8798, 3.7139, 3.0715, -3.6543, + -1.077, 1.7774, 3.6503, 0.2492, -2.5625, -1.2989, 0.3077, -1.4511, -0.7454, -1.0293, 0.9281, -0.097, -1.418, 0.5544, 2.007, 3.1415, 2.3666, -0.7117, -2.8143, -1.777, + -1.8815, -2.2795, -1.158, 1.0865, -0.0453, 1.6476, 0.0859, -1.8231, -0.7599, -1.0013, 0.0173, -0.6116, 0.011, 0.6057, 0.1048, 0.392, 2.8241, -0.4223, -0.292, 3.4995, + 0.0544, 2.8654, 4.0202, 1.6845, -1.8534, -2.9185, -1.4228, -3.6388, -2.021, -2.4342, -3.4254, -1.7961, 2.7218, 6.6019, 2.278, -0.0758, -2.1727, 1.0645, -0.3083, 0.7762, + -4.2733, -4.7209, -2.5347, -4.1434, -2.3709, 0.1195, 0.9517, -1.8672, 1.5567, 3.4133, 0.9511, 6.1534, 5.0591, 3.3617, 4.3448, -0.8335, 0.0697, -1.2096, -2.2085, -1.8188, + 0.0539, 1.0537, 0.6965, 0.7551, -2.3328, -4.4085, -1.7944, 4.6582, -1.8228, -0.38, 0.4342, 0.9079, 1.1727, -0.2538, -0.9787, 1.6403, 0.3758, 0.2889, -1.0679, 1.0017, + 0.9075, 0.5642, -0.6092, -2.8652, -3.3111, -1.2627, 1.6981, 0.5866, 2.5675, 2.8589, 1.6024, 2.0917, 0.4354, 1.0342, 1.2054, -2.7817, -0.5893, 0.0883, -2.8199, -1.401, + 0.898, -0.3869, -0.4833, 2.6033, -0.0884, -0.3699, 7.2953, 1.6809, 0.8531, 1.6498, -4.4993, 0.0072, -1.9421, -1.8001, -2.5825, -3.6475, -2.3221, 0.6178, 0.3128, 2.204, + -6.0307, -1.3653, -0.3786, 0.0247, 0.6616, 0.7676, 3.3234, 3.0965, 0.7765, -0.6097, 1.0441, -0.9142, 1.6186, -9.2158, -4.2017, 2.5866, 2.2875, 2.0945, 2.8697, 1.5646, + -0.3542, -0.028, 4.1718, 2.5282, 6.0404, 2.9659, -1.0269, -1.4497, -5.6815, -3.9178, -3.928, -6.4467, -2.5804, -4.6703, -1.3963, 3.1437, 4.398, -0.5477, 2.7035, 6.0758, + -1.5432, 3.8376, 1.421, -1.1449, 0.4892, 1.3172, -2.0383, -2.2564, -2.1791, 3.0272, -4.0284, -1.3615, -1.9716, -4.988, 3.88, 2.5715, -2.8049, 5.2429, -2.0992, 4.629, + 1.9112, 0.2401, 1.209, 1.9221, -0.5051, 2.0731, -0.8317, -1.4381, 1.1319, 0.2604, 4.857, -4.2486, -4.2343, -0.1445, 2.6106, 1.1135, -3.459, -1.7688, 1.2613, -1.96, + -4.6396, -2.9689, 0.9238, 0.7657, 0.5574, -0.365, -3.7022, -4.0756, -5.0362, 0.3243, 3.188, 1.727, -0.7319, 2.9308, 3.7592, 2.6099, -0.3181, 4.3233, 1.9146, -1.1863, + 0.198, -2.2883, 0.933, 3.8033, -3.0797, 0.0635, -1.8773, -1.7344, -1.0161, 0.156, -0.1661, -3.8927, -0.3658, 0.3316, 1.1226, 1.9542, -1.049, -2.2906, 3.6658, 5.5322, + -0.8058, -0.987, 1.9765, 0.8081, -0.8891, 1.6549, -1.7178, -0.2062, -0.6134, 3.7968, 2.8384, 4.3753, 1.2045, -6.0029, -1.5145, -3.5656, 0.8785, -0.8278, 0.9419, -1.3448, + -1.9513, 2.4604, 2.9573, 3.3043, 2.2986, 1.0394, -0.4185, -0.089, -0.2841, 2.2073, 1.6514, 0.3367, -1.0792, -1.4676, -0.885, 1.7747, 0.0695, -7.9932, -5.3486, 1.4171, + -2.8766, -0.2007, 0.3439, 0.7801, -0.0362, -1.8832, 1.2162, 3.7611, 1.5511, -0.2914, 4.4891, 2.4265, 0.517, 1.2791, -3.0822, -4.3172, 2.155, -1.7349, -2.5924, -1.5044, + -1.3853, -0.5001, 0.6365, -1.9167, -1.9693, -1.6932, -2.5123, -3.1209, -1.5363, 3.8772, 1.7176, 4.5613, 2.2969, -1.7507, -0.4549, 2.7398, -2.2572, -0.1132, 1.3625, 2.0183, + -0.2587, 0.7517, 0.0083, -1.5665, -2.9108, -3.8211, -5.3272, -2.2879, -3.3006, 3.201, 3.9688, 4.6713, 3.8047, 3.4665, 0.6502, 0.9612, 0.0958, -1.5002, 1.1994, -1.8059, + -0.0767, -2.8888, -3.8572, -1.6523, 2.8392, 3.7128, 0.7093, -0.0657, 0.9823, -1.6073, -2.181, -1.5064, -0.6392, 2.2679, 1.7322, -1.1001, 1.0422, 1.4078, 2.4192, -1.5382, + 2.1069, 1.6101, -0.6015, -1.1106, -0.0731, 0.3657, 2.1738, 0.6411, -3.2826, -4.2217, 0.0005, 4.1333, 2.9287, 4.0221, -1.0117, -7.1186, -0.37, 1.5812, 0.1654, -1.9391, + -3.3989, -5.4211, -3.3823, 0.1417, -0.209, -2.9282, 3.8367, 5.4395, 2.1603, -1.6658, -0.0286, 3.8151, -1.6236, -0.4057, -0.8473, 2.3634, 0.3434, 0.0424, -0.3374, 2.1055, + 3.8095, -5.8994, -4.2159, -2.8701, 5.179, -4.6791, -5.6257, 0.4437, 3.5907, 6.0531, -2.4206, -0.619, 2.0474, 3.5867, 7.1475, -4.6633, 4.1906, 1.2868, -11.1492, 4.8074, + -5.2857, -2.3511, 1.887, -1.8753, -2.8109, 0.3363, -1.9008, -0.409, 0.8741, -0.4525, -6.3796, 0.4485, 2.7092, 2.5765, 4.4129, 4.7975, -0.3228, 3.7712, 2.7353, -2.7608, + -3.9913, -5.9775, -2.6898, 8.0565, 3.5971, 1.2374, 3.459, 0.3338, 0.6958, -1.1912, -2.2406, -2.0748, 0.0857, 3.9701, 1.1276, 1.2332, 0.6559, -3.8152, 0.9255, -3.3971, + -2.4876, -2.515, -2.0296, -1.0642, 1.008, 0.6973, -1.7376, -1.5703, 1.5923, -0.7283, -0.1226, -1.7315, 2.4167, -0.4425, -1.5075, 3.8846, 0.5544, 0.8966, 4.627, 0.26, + 2.8767, 0.9007, 0.0796, -2.1662, -1.5086, 1.0148, -1.337, 0.8661, 0.0749, 1.4614, 3.18, 2.1743, -1.6449, -2.7523, -2.7644, 2.2901, -1.91, -4.8716, -2.0883, 6.1248, + 3.6336, 2.1044, 0.4628, -0.6805, -0.0353, -2.3281, 1.0902, 3.0334, -1.907, -2.0882, -2.9673, 0.1514, 0.3556, -1.0151, -5.4063, 2.3884, 2.5624, -3.2553, 3.9458, -0.0449, + -1.3869, -1.5992, 1.4579, 1.4992, 1.7691, 0.8878, 0.9518, 0.7305, -1.505, -1.6287, -1.6402, -0.3868, 2.7983, -2.2046, -0.5051, 0.1956, 7.1623, 2.4667, -5.9139, -3.1488, + -3.5734, -7.3577, -7.1566, -1.3669, 4.32, 2.1415, 0.4237, -0.1707, 3.4434, 2.6751, 2.2337, 0.4895, 2.5968, 1.0123, -0.9145, -1.1189, 0.9048, 2.1474, 0.4312, -1.1607, + -5.2465, -1.6283, -2.7428, -3.2948, -2.2122, 4.3049, 4.7808, 4.7619, 0.2262, -0.6089, 1.1643, 3.359, -2.1676, 0.2134, -1.1502, 1.4193, 1.4168, 0.3538, -2.8694, -0.0796, + -3.4905, 1.2508, 2.0451, 0.449, 3.13, 4.3899, 0.1675, -1.3519, -0.0668, 0.4245, -1.7121, 0.2301, -2.207, 0.3069, 3.1491, -7.5721, 2.7986, 3.8554, -4.1493, -1.6472, + 1.5232, 1.53, -1.0621, -1.4488, -0.8044, -0.39, 1.3086, -2.5549, -4.3776, 0.5264, 2.2421, -0.5299, -2.7363, 4.9582, 1.0929, 1.1601, 2.8351, 1.9896, -4.9813, -0.2808, + 6.5366, -2.5283, -5.5972, -3.4516, -0.2385, 1.8382, -1.6024, 0.2804, 8.8284, 4.4416, -6.1238, 3.7728, 3.4763, 2.9323, -2.3678, -5.511, -4.9901, -0.1283, 0.0084, 0.4242, + 1.9342, 1.566, 2.2346, 1.0331, -0.6035, -0.4461, 0.0271, 0.7571, 1.1796, 0.2963, -0.9807, -0.5607, -1.4711, -2.5426, -4.1871, 2.4178, 0.203, -1.7949, -3.6655, 4.6035, + 2.2188, 0.9702, -1.9037, -2.3323, -0.927, -0.7473, 0.4463, 4.0069, 3.238, 1.6378, 1.585, -1.9473, -1.213, -2.1935, -1.9102, -3.3249, 2.6456, 1.082, -1.3884, 0.057, + 1.8633, 1.2717, 1.6148, 0.3758, 2.9711, -0.8914, -1.2864, 1.1672, 2.0355, 1.2245, -3.703, 3.72, -3.0675, -1.925, 2.2356, -0.7355, 0.5128, -4.4528, -2.9595, 0.0288, + -2.2984, -0.5209, 0.3609, 2.6675, -3.691, -0.3519, 6.3822, 3.0237, -0.1277, -2.2553, 1.0403, 0.997, -1.3107, -1.9745, -0.1646, 4.8839, 0.1333, -1.3256, -3.424, -2.0441, + -2.319, 2.2812, 1.2138, -1.1727, -3.334, -5.2226, 3.639, 2.5124, -1.5642, 3.4166, 0.533, 1.8016, -0.3986, -2.9233, -3.7394, 0.9982, -0.006, -1.6833, 4.3443, 1.6231, + -2.2576, -2.6516, -1.1317, -1.2013, 0.7393, 0.1827, -1.2343, -3.2192, 2.3728, 2.7817, 1.6779, 0.8901, 0.532, 1.4647, 3.7014, 7.0412, -2.6912, -2.5104, -1.2474, -3.2389, + -1.769, -1.9167, -2.8243, 0.8559, 1.6454, 0.6817, 0.5231, -1.2522, -2.6542, -3.2288, -0.2864, 0.0091, 0.5513, -0.6182, -3.9328, 4.4973, 6.4951, 0.4313, 1.6808, 1.1116, + -0.2744, -1.578, -1.8323, -1.2019, -0.362, 1.2906, -0.2832, -1.9105, -0.8966, 0.8634, -0.4648, -2.3172, -1.9676, -1.7065, 0.8232, -2.4736, 3.5667, 5.3037, 4.3018, 1.1191, + -0.4003, -1.4016, -2.6548, -3.2373, -2.1471, -0.9075, -1.1057, 1.1084, 0.0584, 0.6994, -2.2697, 0.1501, -0.0187, -0.2177, -1.1214, 2.5501, 5.4533, 5.8815, -0.4561, 0.0366, + 2.4755, 2.6766, 3.381, 2.8797, -1.3067, -1.2604, 0.4792, -1.5575, -2.0569, -1.156, -1.3594, -0.7176, 0.2831, 1.2557, -0.1965, -2.5773, 0.8488, 0.4905, -3.0053, 0.4234, + -0.5334, -1.6405, -1.4903, -1.2901, -2.0368, -2.4054, -2.0422, -1.2649, -0.3204, 2.3946, 2.8987, 2.5774, -1.9494, -5.6321, 2.8212, 3.655, 3.985, 1.2152, 1.3991, -0.3406, + -1.8395, -0.9841, -0.1468, -2.7046, 0.5709, -0.0486, 2.3079, -3.1973, 5.7249, -2.0537, -0.8947, -0.5513, -1.5588, -0.066, 1.7712, 1.4939, 0.7539, 0.8995, 0.7376, -0.2144, + -2.1136, -6.496, 4.0091, -2.7287, -2.852, 0.0889, 4.2865, 1.1559, 1.4489, 2.3747, -0.2811, -1.6675, -2.1043, 2.4825, 1.5983, 3.0151, 1.4924, 1.4598, 1.4466, -6.6156, + 0.3044, 0.5145, 0.8314, -0.5726, -1.4732, 0.5522, 1.0454, 0.7132, -0.3595, 0.4703, 4.9451, 2.9593, 3.4319, -1.7835, -2.7963, -3.6604, -2.7125, 1.2113, -5.0055, 1.3846, + 2.3458, 3.264, 1.811, 0.4827, -1.6195, 1.9882, 1.8256, 3.5857, 4.1301, 1.6235, -5.1588, -3.8052, -1.7214, -1.0231, 1.3522, -0.3858, -5.6155, -1.3895, -1.6421, -0.048, + 3.7883, 2.2512, 0.5915, 3.6595, 3.6582, 1.2917, -2.0747, 3.0623, -4.8462, -9.6783, -4.7828, -4.1622, -5.2776, -1.2559, 2.3471, 0.9386, 6.0401, 4.8334, -1.7435, 1.3593, + -0.5609, -1.1658, -2.4817, -6.555, -4.61, -0.2509, 0.7628, -0.8368, 3.8495, 3.922, 3.0356, 2.0951, 1.5781, 3.7313, 2.8834, -1.2291, -3.427, 1.5639, 1.6072, -3.9116, + -1.4268, 0.2383, 2.3216, 0.1248, 2.0796, 1.5987, 0.8138, -0.2165, -2.9254, -1.2364, 4.4075, -3.3005, -5.5475, 2.3771, 2.6523, 1.5551, 2.538, 1.7514, -3.2529, -4.552, + -0.7746, 0.9904, 0.2665, 0.8152, 1.7416, -1.7222, -3.8193, 0.6115, 3.8698, -1.5065, -1.1919, -1.259, -0.954, 1.8722, -0.152, -4.1283, -0.551, 0.1951, 0.742, 4.9546, + -4.9471, -2.6326, -0.7296, -2.9661, 3.2611, 5.2949, 1.3584, -0.3484, 0.0238, -0.5367, 1.037, -2.4283, -1.4686, 5.4446, 2.1704, -0.2969, -1.9436, 4.7301, 0.0591, -5.0816, + 0.8281, -1.2416, -3.3762, -3.932, -1.3993, -3.0591, -0.9292, 2.5927, 2.1047, 2.4478, 0.5704, 1.2666, 0.5289, -0.2372, 1.2696, 3.8278, 3.1348, 1.0903, -4.3525, -1.1346, + -0.743, -0.748, -1.261, -0.7625, 1.0816, 1.6556, 1.2019, 2.2812, 3.2082, 1.5688, -1.3094, -2.0639, -2.5822, -2.2528, -1.34, -1.6246, 0.6375, 2.89, 1.4778, -1.315, + 0.8081, -1.3233, 1.3342, -0.4629, 2.2543, -1.7177, 1.7285, 2.2425, -4.4738, 0.6367, 1.5497, -1.2988, 0.3335, -1.159, 0.1744, -4.2648, 5.1183, 0.3072, -2.6556, 0.8684, + 4.0404, 1.9094, -0.2474, -1.16, -0.9167, -2.2516, 3.93, 2.7965, 0.9719, -0.3105, 2.6858, -1.8089, -6.0898, -5.0707, 2.0812, -0.0971, -1.5043, 0.0458, -1.0273, 2.0234, + 0.1375, 0.239, 1.2366, 1.5253, 1.5536, 1.1452, -3.3801, -3.1595, -2.7411, 1.0175, 6.4814, 1.4661, -1.2521, -3.3744, -3.5432, -5.427, -1.3071, 4.3703, 3.6696, 1.3422, + -0.0191, 0.4401, -0.0551, 1.261, 4.9915, 1.8859, 4.2946, 2.2533, 1.246, -0.3261, -1.8245, 0.5397, -0.962, -2.4208, -1.3984, 1.3654, -2.31, -4.0785, -1.5595, -3.3235, + -4.1713, -3.8609, -3.6233, -2.2953, 0.459, -0.2721, -0.1506, -1.7078, 0.0356, 1.5074, 1.0712, 0.7854, 0.7858, 0.0168, -0.816, 0.081, 0.5445, 4.5197, 7.1653, -0.0742, + -2.9674, -1.465, 1.0679, 3.2208, 3.0814, -0.6959, -0.9252, 1.0871, 0.168, -0.9317, -0.6966, -1.1041, 2.3656, 1.0874, -0.7021, -0.5843, -5.954, -1.0591, 4.3651, 0.6421, + -2.3881, -1.1722, -0.2878, -1.31, 0.1054, 2.7187, 3.1286, 1.395, 2.5138, 0.8551, -1.0485, -2.7991, -1.7081, -1.9009, -0.2092, -1.1297, 5.4416, 0.9634, -4.8359, 1.6679, + 0.3475, 0.6761, -0.916, -3.3303, -2.5114, -1.3053, -2.4606, -1.5909, -0.1066, 1.2867, 0.1087, 0.6627, -0.938, -2.1561, -4.1442, 0.553, 3.6775, 4.3771, 4.5604, 3.2095, + 1.8172, 1.9142, 1.3748, -1.2576, -1.3958, 0.406, -0.4725, -1.2643, 0.8079, -0.6725, -3.4257, -3.2969, 2.8901, -0.0329, 4.2131, 0.839, -2.3538, -2.2196, 3.3371, -1.2078, + 1.9496, 3.6573, 4.2326, 1.1863, 1.8389, -0.7982, -0.8176, 0.9762, -2.1796, -2.4082, 0.46, -2.1099, -0.13, 5.8933, -3.2271, 1.4122, -3.0287, -5.0286, 0.1022, -1.9807, + 0.7977, 0.4131, 0.7926, 0.7439, -2.715, -3.186, -1.6061, -0.5456, 3.5797, 0.0724, -0.4993, 0.4656, -0.7994, -0.5991, 0.0862, 3.6997, -0.5342, -0.3047, 0.9064, -0.7678, + 1.0025, 0.1292, 1.8299, -0.2181, -0.3367, 2.6298, -1.6812, -0.7903, 1.0473, -0.5336, -4.1833, 2.6382, 0.948, -0.3031, -1.3062, -0.6706, 1.4954, 1.107, -3.9483, 1.1443, + -2.822, -2.9373, -1.7368, -1.1113, 0.7976, 1.021, 2.2881, 1.7823, -1.6829, -2.1388, -0.0636, 0.6047, 1.3691, 0.5354, -2.8472, 1.99, -0.2414, -1.8409, 2.3664, 4.6674, + 0.81, 0.5306, 3.2216, 2.7904, 2.3222, -0.094, -1.2977, 0.6699, -0.3153, -2.0729, -0.4524, 0.1611, 0.0422, -0.9458, -1.6284, -1.059, 0.4113, -0.2203, -0.7025, -2.1711, + 0.6469, 2.9521, -0.5269, -2.8396, -2.829, -0.4167, -2.6035, -1.8694, -1.271, -1.195, -0.6111, -1.1719, -0.0843, 4.1129, 3.9912, -0.9572, -5.8704, 3.6319, 4.0418, 2.869, + -1.7675, 0.6361, 2.5132, 2.083, 1.8929, -1.5061, -3.5844, -4.2969, -2.8299, -0.687, 0.8308, 1.3968, 0.3529, 4.0998, -1.6161, 1.3306, 0.56, -0.5129, -1.6573, 2.7621, + -4.0964, -1.5173, 1.2551, 0.2978, 1.5682, 0.3497, -1.4315, -2.0554, -0.5756, 2.5392, 0.79, 3.4286, -2.9558, -1.7034, -0.8459, 1.0513, 5.1871, -2.5294, 1.2695, -0.0257, + 0.0328, -1.2155, -1.2836, -0.9363, -1.2229, -1.693, -1.8595, 0.3399, -1.5276, -1.0107, 6.404, -1.9072, 0.7733, 0.6079, 2.8719, 3.0211, 2.307, -3.5448, 0.3434, -0.5002, + -6.6638, -3.5679, 2.7288, 3.1465, -1.8044, -3.2026, 0.3954, 1.5738, 0.684, -0.5029, 1.1915, -2.4277, -2.892, -0.4612, 0.5352, 2.0495, 4.9107, 0.7993, 0.1809, 3.327, + -7.7693, -2.7271, -0.5302, -1.6862, -2.675, -4.1941, 6.2224, 4.1406, 1.2187, -0.8566, 3.217, 2.7593, 3.3324, -2.3093, -1.4924, 1.2643, -2.9807, 2.3328, 4.673, -1.9398, + -0.3214, 0.7654, 1.4453, 1.0347, 0.7854, -0.0281, 0.6653, 2.1756, 2.5539, 2.4886, 2.8291, -2.3264, -5.6113, -4.1472, -2.1955, -0.1794, -0.8897, -2.9162, 2.0658, 1.8062, + 0.0689, -0.0814, 0.5156, -0.9104, 1.9645, 1.489, -0.7622, -1.4287, 1.4489, 2.2731, 1.0561, 3.0605, 2.5928, -3.3062, -2.8865, -3.6767, -3.9506, -2.1727, -0.4806, 5.1867, + -2.7262, -0.408, -7.2353, 0.2532, -1.7494, 4.8406, 2.4161, -8.2402, -0.3311, 1.0612, 3.376, -0.5373, 3.2052, 3.7144, -2.9286, 10.7765, 4.9188, -8.1638, -0.8809, -1.3612, + 3.8706, 1.5102, 0.378, -7.459, -0.9006, 2.4899, 2.468, -2.4184, -1.4186, 0.2908, 2.1056, 2.4328, 4.226, -3.9887, -6.7913, -1.0651, 2.4289, 0.5874, 4.8024, -3.5488, + -1.2691, -4.1749, -2.7407, 1.493, 1.4665, -0.9212, -1.463, -5.1747, -2.2251, 0.8474, 0.854, 6.6525, 0.1651, -0.5706, -0.3287, 3.1547, -1.46, 0.8291, 2.5923, 2.2733, + 3.8347, 2.4921, 1.8361, 2.4264, 0.2839, -2.7167, 0.2831, -0.5469, -0.6398, 0.3108, 1.0194, -2.1389, -0.8456, -4.7666, -2.5049, 1.2075, -5.6326, 1.3761, 3.1197, 1.602, + -3.7739, -1.8529, 0.6063, -0.8541, -1.637, 3.6233, 0.8975, 1.9643, 3.5106, -0.3623, -2.4744, -0.7625, -0.7853, -1.5705, 0.2237, -0.6207, 0.0761, -0.4742, 1.5632, 2.7029, + 1.157, 0.8704, 1.6827, 1.2654, -0.5848, -2.69, -2.6615, -0.9589, -1.6641, -2.7103, -1.4381, -0.4901, 1.8045, -1.5216, -1.1394, 5.0021, 4.1235, 1.555, -3.7877, 2.1859, + 2.542, 1.6423, 0.7395, 0.8846, 0.9016, 2.7752, 3.3824, 2.5574, 0.4625, -2.0442, -1.8686, -0.186, -1.7933, -5.0038, -3.5773, -1.2917, -2.0519, -1.8556, 1.0146, 2.7701, + -4.4081, -3.4569, -0.8021, 0.2773, 2.5574, 2.3862, 1.3118, 0.1408, 0.6688, 1.9053, -1.5497, -0.5855, 1.2457, -0.5521, 0.963, -2.247, -2.8924, -3.743, 6.1844, 2.5961, + 0.4138, -4.3685, -4.3743, 3.3166, 1.9814, -1.9703, -1.1246, -1.8788, 1.8555, 2.5293, -0.6354, 0.3032, 3.9855, 0.4439, -1.3412, -2.6733, 1.5434, 2.8406, -1.39, 0.543, + -0.9949, 0.7752, 0.5153, -0.3382, 0.759, -0.3806, 0.6362, -0.0446, 0.6992, -2.3407, -2.218, -0.8794, 1.9075, 1.9883, 2.6403, 1.4665, 1.1384, 1.9497, -0.4373, -6.842, + -0.369, 1.5979, 3.652, 2.5947, 0.9915, -0.4587, -1.5761, -1.3889, -0.8595, -0.0002, 0.3336, 2.0392, 1.9215, -1.5962, -2.1409, -2.1868, -2.0225, -6.9604, 4.1862, 2.2427, + 0.7081, 1.2472, 1.2274, -0.7827, -1.3963, 0.1531, 1.0164, 1.122, 1.4236, 4.7449, 4.197, -1.6566, 1.4602, -0.4324, -5.0812, -4.6776, -3.2034, 0.202, -0.8325, 0.5609, + -0.8996, -1.1981, -0.4982, -3.3678, -3.1656, -0.484, -1.6889, 1.4162, 1.8691, 1.8944, 0.6984, 2.1971, 0.7659, -0.3399, -1.054, -1.9648, 4.8986, 2.2357, -0.435, -0.8795, + -3.0303, -1.1024, -3.6351, 1.8563, 2.2581, 0.9526, -1.318, 1.052, 0.9676, 1.4472, -0.2536, 1.6459, 0.5539, 2.7964, -2.3045, 3.1405, -0.8848, -0.5008, -4.0553, 0.4143, + -2.0566, 0.3509, 1.5804, -0.1468, -1.2009, -5.1236, -1.6316, -0.6083, -0.2262, -3.8727, -1.4106, 4.1461, 2.8353, 5.5841, 2.0344, -1.3445, -0.2669, 1.6597, 0.4425, -0.7448, + 0.4237, 5.5027, 3.4466, -0.9733, 1.1101, 0.3187, 0.4016, -0.8934, -4.1773, 1.2529, -1.0141, 1.7716, -1.4207, 2.0071, -6.7629, -1.426, -0.8769, -1.9766, 2.062, 1.2241, + 0.525, 0.4342, -1.3517, -2.8754, -3.0586, 0.6098, 2.2679, 1.4929, 1.4608, 3.1011, 1.506, -4.8013, -7.5268, -0.6504, -0.503, 2.778, 2.8557, 1.0462, 3.4571, -0.7675, + 3.573, 1.8714, -0.1581, -1.7722, -0.3433, -2.7056, -3.0806, -1.91, -3.1355, 1.0548, -1.9906, 0.4699, 0.0873, 2.5566, -0.1726, -0.8702, 2.1464, 4.3968, 5.0995, -5.1171, + -0.6968, -1.4896, -0.0495, 0.8149, 1.4216, -0.0327, -1.7535, -2.2313, -0.321, 1.9568, 4.8784, -1.9324, -1.8058, -2.6431, -3.7316, 0.3685, 1.1306, 4.9893, -0.2577, 1.3848, + -1.4341, -1.1497, -1.8056, 0.1413, 2.571, 2.939, 0.7055, -0.4196, -0.2614, 0.1608, -0.6195, -0.3637, 4.1643, 0.3576, 0.0984, 2.2749, 0.4728, -7.315, -0.1921, -0.3248, + -4.2895, -7.0396, -4.8802, -1.5844, 1.4442, 1.8886, 0.5829, 0.1608, -2.6352, -1.0632, 0.4985, 3.2097, 6.327, 9.0622, 8.0546, -0.4311, 2.12, -2.0642, -2.9293, -6.4319, + -2.8918, -0.9105, -1.1049, -1.3358, 0.0333, -0.4429, 1.114, 3.2177, -0.2479, -0.9423, 2.0518, -3.4204, -3.3752, -1.508, 4.5184, 3.5104, 0.837, 0.3279, 4.1906, -3.6215, + 1.1012, 2.83, 4.9338, 4.9135, -1.4413, -4.6933, -2.9852, -2.2104, -2.0709, -0.2446, -1.7323, 0.446, -0.3491, 0.7293, 1.2549, 1.552, -1.6591, -0.0263, -1.3091, 0.9607, + -3.8105, -2.2705, -0.4801, 0.003, -1.0835, -0.8967, -1.848, 4.3428, 2.2775, 1.1261, 1.5948, 4.4091, 3.5564, -2.1928, -2.8051, -1.2385, -1.6399, -0.9968, 0.5731, 1.3796, + 4.5581, 4.2833, 0.3675, -0.5438, 1.94, 3.0816, 0.3261, -0.8096, -2.6679, -2.1086, -0.8131, -4.9186, -3.634, 5.7405, 0.0185, 0.6308, 2.5276, -4.0355, -1.8846, -2.0583, + -1.2863, -0.264, -0.1222, 1.8197, -0.8215, -1.4173, 6.3047, -1.3136, 2.0735, -0.1627, 3.0262, 1.5599, -2.3044, -2.9292, -2.1284, -0.006, -0.2974, -0.4468, 0.2977, -1.5818, + -0.3043, -4.9833, -4.4641, 1.6692, 5.7638, 4.6547, 3.7525, -0.961, -3.955, -2.2488, 0.7885, 4.2621, 3.6322, 2.1375, -6.9698, 1.9153, 2.5541, -3.4886, -0.8469, -2.9081, + 1.6869, -2.2603, -5.3537, -1.924, -2.3796, 2.8412, 5.8922, -3.3838, 0.7866, 3.3273, 0.722, 4.1493, -2.8075, 1.2195, -4.122, 2.7912, 5.5751, -0.9361, -3.796, -2.0281, + 1.8743, 1.5687, 0.9347, -0.0119, 5.1974, -0.9505, -1.5819, -0.0387, -0.2355, 2.4835, -2.718, -2.1816, -1.0347, -1.5606, -1.4552, 0.4355, -1.6713, -3.1551, -0.2146, 4.3156, + -0.5064, 0.6473, 1.6157, 0.4031, -0.7786, 0.4664, 2.3609, -0.8533, -2.7426, 0.0584, 3.6047, -1.3728, 0.0256, -2.0089, 0.7575, -3.1106, -1.7839, 0.971, 1.5709, 0.6757, + -0.1854, -0.4792, 0.2327, 0.5721, 1.3762, 0.9344, 1.6367, 0.2158, 0.6455, 0.9744, -3.1471, -5.2734, -4.3577, 3.1646, 3.1365, 2.2803, 1.2303, -1.996, -1.5643, 0.6037, + 1.554, 2.1016, 2.3825, 0.8004, -2.0847, -2.7548, -1.5073, 0.1971, -0.2707, -0.769, -1.8324, -0.6385, -4.5361, -6.8801, 5.4599, 2.666, 1.1252, 2.285, 1.3862, 1.3159, + -2.3092, 8.5984, 0.5061, -0.6741, -2.467, 3.2934, -0.668, 2.0327, 0.6889, -1.8602, -0.9325, -1.2001, -4.3458, -2.5628, 0.6948, -1.1889, 0.4479, 2.595, 1.2931, -1.9416, + 0.8421, 1.5717, 0.5751, 0.5951, 0.4783, -2.2142, 0.3553, 6.0828, 3.0287, -2.3343, -3.2264, -0.7759, -2.009, -0.3873, -2.4778, 0.6768, -3.499, -0.8957, 4.2903, -0.6766, + -0.6942, 8.6603, -5.4134, -0.8727, -0.3504, -3.3092, -0.5586, -0.2913, 2.8905, -3.0583, -2.9724, -1.747, 3.325, -1.1022, -4.4193, 7.6704, 0.5149, -0.7173, -3.6, 6.0453, + 0.6802, 1.0947, 1.2451, 3.8611, 4.5266, 1.8951, 0.7625, 6.226, 2.5223, 4.8966, 1.838, -0.3753, 1.3861, -7.5361, -6.881, -3.7307, -4.9193, -2.5727, -4.5778, -0.3414, + -1.4648, -1.9631, -1.4302, 3.2813, 2.7021, -1.3306, -3.5822, -3.4123, -2.6251, -2.554, -2.983, 1.7868, 1.1612, 1.7944, 0.6471, 3.7619, 3.5844, -0.436, 2.9666, 0.0957, + -2.6065, -0.4815, 3.7667, 3.2609, 1.4317, 5.8806, 0.0973, -3.3441, -3.2874, -4.9485, -1.6589, 0.7537, 0.3424, 0.9215, 3.8135, -4.2041, -1.8751, -0.8917, 1.0067, 2.0227, + 4.0705, -1.6316, -3.7042, -1.3612, 1.3654, 1.6949, -0.0461, -0.428, 2.9316, 0.2615, -3.3312, 0.4341, 1.2323, -0.8543, -0.862, -4.8579, -6.1758, 3.1382, 4.934, 3.1899, + -4.1097, -4.1313, -2.7947, -1.2657, -0.6757, 0.0158, -0.2664, -0.7288, -2.8256, -1.9407, 0.4965, 2.0938, 4.2596, 1.7443, 2.092, 3.1468, 3.6217, 1.9383, 0.0884, -0.7586, + -0.5474, 3.7117, 4.4423, -1.1991, -3.2034, 0.2008, -1.1999, -0.3645, -0.3658, -1.5068, 4.3945, -0.5362, -1.4209, -0.9138, -0.075, -0.959, 3.3133, 2.7513, -7.0608, 0.5385, + -0.2792, 1.018, 0.1758, 4.6409, 0.999, 0.8572, -2.2212, -4.3593, 1.021, 5.0992, 3.1964, 1.4429, -1.7425, -0.9214, -2.3245, -1.3975, -6.8773, 2.8027, -1.1862, 0.056, + 1.7064, 0.3215, -0.2518, 0.0527, -2.5377, -4.4163, -3.0416, -0.1822, -1.1887, -2.941, 0.6761, 3.4948, 1.6101, 1.2626, 0.2612, 5.622, -3.9114, -1.0915, 4.1888, 0.3661, + -1.7866, -1.1389, -0.0309, -0.9349, 0.3853, 1.9195, 0.2339, 0.3886, 0.9745, 1.4208, 2.5313, 4.3943, -4.636, -2.5445, -2.1898, -2.533, -0.3527, 4.7621, 0.5928, -1.4558, + 7.8057, -3.8468, 0.8827, 0.8768, -4.7631, -5.1731, 0.0664, 5.3199, -1.789, -4.3428, 1.9966, 2.9221, -4.5512, 5.176, 0.582, -0.2561, -0.2887, 0.6505, -0.8654, -0.4024, + -2.578, -0.0834, 0.144, -1.6096, -4.137, -4.824, -1.6968, 2.0832, 4.4015, 2.3414, 0.0326, -1.7738, 3.0088, 2.5338, 2.2405, 0.7822, -3.427, 2.3235, 0.3274, -0.0892, + 2.1843, 2.593, 1.3745, 1.7373, 2.8715, 2.7285, -1.1274, -0.1783, 0.9497, 1.0004, -0.2974, -0.2919, 0.6463, 0.2228, -1.5085, -5.8708, -3.691, -0.8536, -2.5539, 0.0647, + -1.6643, -0.8616, 0.2098, 2.2486, 4.6647, 3.854, 2.3834, 1.3656, -0.2611, -0.7523, -0.2703, 2.863, 1.157, -1.6263, -4.3844, -3.5346, -0.0484, -0.8649, -4.9645, 0.4867, + 0.6824, 1.0939, 0.6691, 0.3291, -0.2396, -0.9714, -0.9487, 0.4056, -0.8422, -1.0662, -0.8121, -1.8756, 1.8363, 1.0681, 3.7568, 2.7493, -2.279, 1.4171, -4.9986, 0.0258, + -2.0461, -1.9677, -1.8134, -2.6831, -3.0621, -1.6874, 2.2873, 0.6491, 1.7878, 1.1808, 1.5028, -1.154, -1.2923, -0.0603, -3.5107, 6.4917, 4.0814, 1.4288, 0.0396, -0.1721, + 1.7926, 0.64, 0.0107, -3.4114, 12.2384, -4.2391, -4.1672, -5.5139, -1.6966, 5.3015, -0.9447, -4.0014, 3.1093, 5.2076, 5.6201, 2.3962, -5.3615, -1.8057, -0.2628, -4.9121, + 1.2301, -0.2653, 0.0535, -2.1294, -3.7763, -2.5405, -1.3165, 1.3892, 1.1754, 1.8095, 2.3931, -0.531, -0.8291, 0.5926, -0.2725, -7.2218, 1.8619, 3.8534, 3.4226, 1.1011, + -4.1789, -3.5276, -0.8324, -0.4176, -2.4, 0.0369, 0.9853, 5.4189, -1.8625, 4.5416, -0.0534, -2.2531, -1.839, 3.0263, 1.3992, -0.9141, -0.2291, 0.6856, 2.4454, -0.0313, + -6.4975, -4.6128, -3.3675, -4.8986, -0.8354, 2.3584, -0.6088, 4.1352, 0.6068, 0.7211, 0.275, -2.0557, 0.4476, 2.7831, 4.6078, -0.4014, 5.9849, 2.1061, 1.2312, -1.9795, + 1.323, 1.1384, 1.2773, 1.715, -0.7509, -3.8269, -1.129, -0.1851, -3.0673, 2.4551, -1.8006, -0.5768, 2.5367, -0.4358, 1.0236, 2.8956, 4.5161, -0.4242, -3.2309, -3.4534, + -0.3567, 2.4123, 4.0459, 3.3988, 2.0862, -2.1774, -5.126, -1.093, -2.2588, -0.1938, 0.5021, -0.2723, 1.0175, -2.6722, 0.0196, -1.3546, -1.6702, 0.808, 0.6509, 2.2336, + -3.1316, -2.5501, -0.7668, 1.9764, 1.8647, -0.0801, 0.9053, 0.9563, -1.0947, 0.3992, -1.9982, 2.2428, 2.0122, -5.4193, -2.6261, -0.7274, 0.7121, 1.7109, 3.9486, 1.666, + -7.9949, 4.0953, 3.7255, -1.4546, 8.0933, 1.7853, -4.2627, 4.4208, 9.6075, -2.0281, -0.5418, -3.566, -1.9219, -6.8006, -1.4426, -1.872, 6.0536, -6.8174, 0.7937, 0.1276, + -1.9787, -1.0115, 0.4548, -0.6009, 1.0489, -0.3883, -3.8168, 3.5539, 1.8044, -0.802, 2.2377, 4.013, 2.5264, 2.9341, 2.9402, 3.194, -12.1756, -4.5827, 0.714, -0.0649, + -2.6937, -0.9969, 0.6136, -0.2092, 0.1112, 0.1733, 0.0276, 0.6804, -4.181, 0.4835, 3.1126, -0.8365, -1.6005, 3.1133, -1.3297, -0.4657, 2.8302, 2.713, -2.7204, 1.175, + -4.2305, -1.0868, 0.5304, -0.1415, -1.2124, -0.8981, -0.879, -0.8763, -0.9777, 1.0148, 4.1145, 2.1714, 1.231, -1.6938, -1.4429, 1.2355, 6.6877, 0.2382, -3.2655, -0.5189, + -2.1503, -3.4325, -3.4567, -1.0918, 0.5993, 0.3527, 0.3437, 0.2288, 0.7821, 1.0173, 2.2607, -0.9887, -0.3595, 4.4457, 3.707, 1.5475, -3.7173, 0.7682, -0.5101, -0.3462, + -3.7019, -3.2897, -0.3993, 1.1225, 4.7873, 3.25, -1.8347, -2.0699, 0.0727, 1.2966, -0.1512, 1.4478, -2.4263, -0.3987, -2.4159, -3.3225, 2.8445, 0.7735, 0.8954, 3.5197, + 0.0807, -1.1966, -2.9464, 0.8465, 1.6234, 1.1215, 1.2824, 3.7187, 2.3234, -3.7329, -7.3924, -3.2192, -4.4371, -4.8564, 3.1927, 2.3654, 4.5154, -1.033, 4.4531, 3.291, + 0.0329, 2.1961, 1.8627, 0.509, -2.3566, -3.1635, -1.4865, -3.4766, -3.4834, -4.5095, -2.404, -5.545, 7.4389, 3.1752, 2.6905, 4.3345, 1.8695, -0.0444, -0.0458, 2.4056, + -4.2525, -4.2615, -2.8448, -1.4174, -1.4188, -1.0941, 0.0321, 2.7304, 1.6246, 3.7714, 3.6887, 2.3979, 1.9374, 0.7696, -7.0469, 0.1811, 3.9202, 4.8839, -3.2038, -0.3977, + -0.4109, -0.9615, -1.1887, -1.3425, -1.0669, -2.7829, -2.9395, 1.289, 1.6984, -0.5601, 1.6775, -0.5469, -0.8102, -0.2298, -0.7565, 0.3451, 3.1792, 2.2226, 4.5535, -1.3689, + -5.7264, -3.6531, -1.3521, 0.1463, 1.711, 3.189, 0.7838, -1.0176, -0.2195, 1.4384, 0.0207, -0.4968, -1.0491, 0.1749, 1.0739, 2.0378, 1.358, 1.236, 0.4429, -0.098, + 0.7773, -0.8979, -1.2165, -1.9337, -2.9157, -4.0101, -0.3148, -4.646, -4.2945, 4.177, 5.5969, 1.4549, 3.5448, 1.4079, -0.8343, -3.2017, 5.5239, 2.2268, -0.3838, -0.0607, + -0.6985, -0.6307, 2.4635, -0.5381, -0.2883, 3.4018, 2.1088, 2.918, -0.5123, -0.9613, 0.0579, -4.3385, -3.8027, 1.0743, 5.0578, -1.828, -2.2439, -4.7171, 0.9386, 2.5388, + -4.5218, 0.1558, 2.838, 2.3948, -1.9436, 0.6339, -0.7954, 1.9788, 1.5836, 1.1696, -4.5526, -0.564, 1.4447, 7.0584, -6.8023, -4.5393, -6.0449, -0.5031, 6.1354, 4.8739, + 0.3624, -1.2047, -2.0776, -1.5816, -0.7523, -0.4259, 1.9866, -0.1702, -0.471, -1.9514, -1.5113, -0.2099, 2.707, 3.8409, 4.1635, -1.6517, 0.8031, 3.118, -4.9637, -0.01, + 3.3248, 2.1375, 1.3785, 0.2103, 3.0519, 1.4244, 0.2968, -0.3016, -1.2728, 0.9142, 0.2763, 0.9396, 2.3345, -1.6742, -3.9431, -3.4421, -2.5066, -1.7463, 1.1359, -2.5381, + 7.3832, 7.8862, -6.4414, -8.9767, 0.1372, -3.3099, 3.3247, -2.2516, -2.6663, 1.5419, 7.2572, -0.6762, -1.4552, 3.0048, 6.921, -8.5959, -2.6649, 2.5301, -0.7893, -2.1588, + 1.3303, 0.1631, -2.4438, -1.2379, 0.9953, 2.7203, 1.9038, 1.2786, 0.3887, 2.8669, 0.368, -0.1846, 5.6338, 2.1238, -1.0482, -5.2051, -1.0787, -7.2281, -1.5184, 0.1722, + 0.1645, -0.9895, -2.0311, -3.1149, -3.298, -2.1249, 2.0221, 2.1048, -0.3058, -1.0676, -2.5289, -1.4215, -1.7517, 2.914, 4.1244, -0.6494, 2.6877, 3.2611, 2.5839, -0.5792, + -0.4639, -1.9119, -0.6903, 1.0816, 1.798, 1.1866, 0.422, 1.5316, 0.8944, -2.981, 5.6782, 3.5367, -0.9955, 2.4778, -1.9477, -3.1693, -0.034, -1.9442, -1.8186, -2.6506, + -3.9601, -3.1838, -1.3333, -0.9936, 0.4708, 1.864, 0.2776, -3.5639, -1.8523, 3.8979, 6.3274, 1.9935, 2.4867, -0.2835, -0.1329, -0.9778, 1.4936, 2.4315, 0.5084, -5.4702, + -1.9007, -8.9624, 0.7258, -2.6244, 1.8683, 0.7413, 8.169, -2.357, -4.2143, -5.3821, 5.3979, -0.3396, -0.0209, 2.4866, -1.7903, 8.5769, -2.6396, -4.5135, 0.4288, 6.3503, + 2.3682, 1.2735, 1.0581, 0.7198, -1.3884, -1.1783, 2.7862, -0.315, -4.4216, 1.0457, 0.802, 0.2322, -1.8255, 0.9933, 1.5522, 4.2681, -3.4105, -1.8681, -3.1691, 0.4773, + 0.1022, 3.5273, 4.7298, 1.5753, -3.6041, -2.406, 0.8414, 1.2204, 1.0785, 1.4517, 0.9533, 1.0682, -0.0095, -1.2482, -3.715, -1.4924, 0.0586, 0.2151, -3.5086, -0.8381, + 2.6097, 1.3046, 0.1797, -0.8433, -0.8002, -0.6737, -0.7817, -0.0181, -1.8564, -0.0021, 1.7429, 2.1363, 2.4019, 0.852, -1.2013, -2.3776, 0.1614, -1.6535, 0.2922, -1.473, + -1.1555, -1.9989, -3.7971, -3.5419, -1.7702, 5.6208, 1.6756, -3.4769, -2.2174, -0.5921, -2.9465, 2.4449, 3.2181, 2.5732, 0.5741, 1.4008, -1.6104, 2.6683, 4.0017, -1.0706, + 2.6808, 2.4971, 2.2595, 2.6039, 2.5012, 2.7248, 0.3061, -0.5761, -0.0415, -2.4607, -1.2162, -0.08, -2.7145, -3.3777, 0.3468, 1.3821, -2.901, -0.5334, -2.3262, -1.075, + -1.4573, -0.7869, 0.2356, -0.1795, -1.7997, -2.4756, -0.7083, -1.2917, -0.2409, 1.8121, 2.3854, -0.078, -2.6742, 0.8926, 3.1169, 2.4329, -3.2335, 1.5184, 1.6752, 0.8566, + 1.3578, 1.5299, 1.0786, -1.596, -3.3648, -1.6673, 1.3592, 5.7139, -0.3364, -0.8154, -1.0911, 0.3285, 1.2167, -6.5169, 3.5759, 0.3841, -3.4189, 2.252, -0.3564, 0.3665, + -3.9427, -4.1692, -3.9599, -2.7914, -2.7852, 0.8501, 2.1268, 3.1929, 2.9997, 0.9798, 3.7115, 2.7044, 0.8023, -1.3597, -0.1213, 1.8505, 0.8537, 2.357, 0.4425, -3.7419, + 1.1259, 1.7278, 1.7181, 1.0824, 0.9378, 2.2855, -0.4426, -2.0998, 0.2868, -2.3258, -2.4774, -3.503, -2.192, -0.0403, 0.0689, -2.1823, -1.7516, 0.3348, 2.6371, 4.8097, + 2.6282, 3.1949, 1.4763, -1.8168, -2.3026, -0.1157, -0.0177, 1.6877, 0.85, 0.1002, -0.5211, 1.2286, 1.5164, -0.6411, -0.9348, -3.1872, 0.1863, -3.1762, -3.7899, 3.6345, + 0.6239, 1.6179, 1.2014, 0.2608, -1.992, 4.7736, 2.9884, -1.6687, -1.57, -3.2904, 2.3265, 0.1217, -0.6529, 1.1537, -1.343, -3.266, -0.7427, -0.3946, -0.8553, 0.7078, + -2.5785, 3.3274, 0.7827, -1.1641, 0.3099, 2.093, -3.8923, -2.1233, -0.2174, -1.0352, 2.3827, 3.2008, -1.3061, -1.3553, 2.0138, -4.8137, 2.2926, -0.4492, 0.2262, 2.3061, + 0.703, -0.6796, 0.6702, 1.233, 0.3286, -1.1249, -0.2281, 0.9008, -0.4257, 1.5252, 0.1413, 3.8708, -2.7125, -0.1048, -1.3046, -2.6469, -1.7645, -0.4236, 2.6448, -0.6022, + -2.0396, 0.9147, 3.7884, 2.4844, -0.2561, -2.4529, 1.8969, -0.1479, 0.695, -1.2549, -4.9008, -1.2459, 0.9313, 0.6906, 5.2636, -1.1277, -0.2394, -2.2895, -2.5856, 1.8753, + 1.678, -1.6532, -2.7599, -2.245, 0.5197, -1.6003, 4.4426, 1.0934, -0.3109, 0.9191, -3.4242, 1.3304, -1.5208, -0.9853, -0.2434, 3.9418, 0.4425, -2.2543, 4.6335, -2.0037, + 2.2658, -0.6139, -1.3935, -0.0563, -2.955, -1.9056, 3.4601, -0.3817, -1.6475, -0.291, -0.5503, 1.7727, 0.0114, 2.6384, 2.8574, 0.5346, -5.4829, -2.6161, 0.958, 3.3952, + -2.9553, 0.0039, 3.9564, 2.2087, -0.9348, -1.5953, -1.378, 0.1552, -2.1548, 0.7917, 1.8242, 1.6997, -1.8826, -0.8677, -0.7876, -0.2152, 2.3842, 2.1467, 1.7116, -4.111, + 0.7023, 1.9303, 1.0064, 0.0165, 5.4286, -1.1464, -1.0459, -2.0088, -1.2634, -2.1806, -0.6159, 0.3372, 3.405, -1.1188, -2.8596, -2.391, -0.555, 5.4226, -1.0697, -1.9937, + -0.8683, 0.0341, 1.1306, -1.3868, -1.9833, 2.9612, -0.7025, 0.9705, -3.1777, 4.1388, 0.7353, 0.3664, 2.0843, 0.2998, -0.405, -1.1895, 3.2137, -5.0324, 1.1351, -2.3244, + -1.0092, 0.5101, 2.307, 2.1852, 1.5304, -1.7001, 1.6095, -1.457, -3.9762, -1.6422, -0.2532, 1.3474, 0.8974, 0.9819, -2.2295, 4.7058, -2.038, 3.1038, -2.542, -2.3311, + 1.9713, 1.0803, -1.0686, -1.2321, 0.3041, -0.5899, -1.6032, -0.6543, -2.1903, -2.1676, 0.3844, 0.2905, -0.5787, -1.1285, -3.3703, -0.5637, 0.3705, 2.2696, 8.3763, 0.1004, + -2.3313, 3.6108, -3.7738, 2.3534, -6.3897, 3.9802, 2.8098, 6.2413, 2.517, 5.126, 2.4541, -1.7202, -4.9921, -5.7179, -3.3204, 5.3271, 2.0124, -5.7657, 0.7907, -3.2116, + 0.323, 1.0311, 1.366, 0.9706, 2.0785, 2.0724, -0.0151, -0.8301, -1.1195, -2.8044, -0.9819, 0.0417, 0.0944, -1.2077, -2.2323, 4.1593, 1.4207, -2.7654, -0.5102, -1.0909, + 1.0182, 0.5812, 0.3232, 1.704, 1.6371, 0.0882, 0.7883, 2.0623, -2.4549, -1.7632, -0.0828, 0.1245, -1.0882, -0.0487, -2.0254, -0.8118, -5.9132, 2.5533, 0.488, 2.8199, + -2.1755, -1.411, 0.7926, 3.1903, 3.2045, 1.4005, 2.2246, 0.4995, 1.4795, 1.0003, 1.4155, -1.8108, -1.7649, -2.0289, -4.9177, 1.9399, 0.4644, -0.6846, -2.6827, -0.1356, + -2.3372, -0.8774, 1.8295, 2.5713, 0.4237, -1.62, 0.725, 1.2049, -2.5557, -1.7837, -2.0535, 1.8608, 2.0142, 1.1559, 0.414, -2.2055, 2.6316, -1.0207, -0.4407, 0.0634, + -6.476, 2.3566, 6.2881, 1.178, 2.2768, 0.5492, 3.6691, 1.5956, 1.5393, 0.8045, -2.4474, -1.1396, -3.0192, -2.8013, 2.1788, 0.9584, -4.0593, -1.3318, -0.6033, -1.5164, + -0.2224, 3.1469, 4.1918, -1.5853, -2.9401, 2.4424, -2.0556, -1.6902, 1.4657, -1.4987, -4.5783, -3.9175, 1.8499, 2.5001, -2.9926, -3.1367, 4.3814, 2.8761, -0.3135, 2.0766, + 0.2838, 0.7448, 1.5373, 1.7127, 1.9184, 1.9954, 1.4552, 0.6636, -0.0775, -1.4076, -2.7023, -2.4765, -6.0615, -4.2297, -2.8214, 4.4402, 0.5975, 1.2302, 2.2798, 0.9178, + 0.1873, 0.8058, 1.4948, 0.4584, -0.6762, -2.1053, -0.4098, -0.951, -0.4347, -0.3909, -1.0508, -2.5837, -1.0389, -4.2899, -4.0647, 3.8453, 2.2675, 2.8481, 4.595, 1.4936, + 6.4165, 4.769, 2.1643, -0.5306, -1.7418, -1.1821, 0.4655, 2.4797, -1.0005, -2.7835, 0.6462, 1.054, 0.1648, -0.2195, -1.2133, -1.6876, -0.2896, -1.1843, -4.2375, -2.0895, + 0.6591, -2.4247, -3.5305, -2.0684, 0.7993, 0.5286, -1.0223, -0.9537, 0.6266, 1.4075, 1.462, 1.6652, 1.3324, -0.3799, 1.6047, -0.403, -1.4183, -0.7574, 3.5079, -0.6351, + -0.7402, -0.5022, -0.0104, -0.1501, 0.0126, -0.8303, -0.6338, 0.0643, 0.7573, 4.3586, 2.2234, -0.7379, 3.8453, 0.8151, 2.8221, -1.4249, -1.4011, -3.5524, -6.4818, 1.5666, + 1.297, 2.6835, 1.2613, -1.8292, -0.939, -1.6773, -1.9287, 1.2477, 1.3854, -1.9138, -1.0744, 1.6338, -4.8418, -0.558, -1.29, 5.2745, -2.7458, 2.6939, -0.9625, 2.2835, + 1.8861, 3.1363, 4.0321, 1.7435, 0.5233, -0.7855, 2.0137, 0.8065, 1.2174, -4.0074, 0.586, -1.0339, -6.4815, -6.1251, 1.1641, -3.9644, -6.3895, 7.8222, 2.0846, 1.7715, + 3.9399, 2.2907, 1.6049, 0.7588, -0.5727, -0.4203, 1.1669, 0.6185, -0.3417, 1.2484, 1.5946, 1.7091, -1.8086, -4.7596, -2.8399, -3.9325, -2.0296, -0.678, -0.7509, 3.2019, + -0.3222, 0.619, 2.2698, 6.3269, 5.8198, 2.6992, 0.0601, -0.5335, -1.7361, -3.6667, 0.2231, -2.3194, -2.0166, 2.496, 0.142, -3.4765, -2.9842, -0.3195, -1.1974, -2.084, + 1.2403, -2.3646, -2.0313, 0.7252, 3.2474, 2.8194, 3.1981, 0.9009, 1.1286, -0.917, -2.4531, -2.402, 1.6229, 2.3317, -1.4971, 0.7586, -3.2903, -2.1223, -1.2864, 0.3911, + 2.1547, -0.4814, -1.6208, -0.2568, 3.766, 2.5927, -0.5335, 0.5221, 2.1027, -1.7193, -2.1878, -1.5973, 0.4487, -3.0208, -3.0695, -0.2839, 1.21, -4.2182, 4.88, 1.3123, + -0.8216, 0.0172, 1.0117, 1.8195, 2.2767, 0.0322, -4.7072, -3.7244, 0.2876, 1.2946, -1.1268, -2.0514, -0.3229, 1.5642, 2.8282, 1.4525, -0.2405, 0.3745, -0.8299, 0.8658, + -0.5885, -0.7711, -0.1566, 0.2456, -1.1305, -2.14, -1.5832, -2.7023, 2.6573, 2.8982, -1.9439, -1.4435, 3.2616, 3.0544, -1.0646, -0.2393, 0.2808, -0.6774, -3.3509, 5.3938, + -2.1609, 4.7541, 2.6519, 2.9104, -0.9771, -3.4464, 1.3102, 4.9024, 3.0997, 0.1198, -0.6878, -5.0516, -2.6241, -0.139, 0.326, -3.7625, -4.6033, 5.7644, -2.7192, 0.333, + -0.0774, 0.0212, 1.7356, 2.6966, 3.8703, -1.264, -2.204, -3.8688, -2.8745, -0.383, -1.2433, 2.7247, 1.1808, 0.5913, 3.3839, -2.9426, 0.1962, -0.6047, -3.1975, 2.2593, + -1.7694, -0.8337, -1.4857, 1.6357, 3.0084, 1.4757, 0.7496, 0.4982, -0.8638, 1.0294, 3.8151, 2.548, -0.4944, -5.1598, -4.1575, 1.6819, -0.9028, -3.0629, 2.9081, -0.6201, + -4.1737, -1.1372, 0.4218, -0.398, -0.2873, -2.0904, -1.4241, 1.1799, 4.8192, 5.5695, 2.124, -1.9634, -0.1503, -0.2208, -2.6623, -1.214, 1.5287, 0.1773, -0.4832, 0.3844, + 1.1759, 3.6352, 3.0816, -1.1382, -0.8341, -1.2549, 1.7627, -0.261, -1.7582, -4.6767, -1.9887, 0.8806, -0.2903, -2.9331, -3.3697, 0.3291, -2.5313, 6.3991, 2.6926, 1.0793, + 3.1054, 0.5446, -2.7707, -3.1154, -2.4354, -2.1091, -1.9215, 1.5263, -0.5089, -2.1954, -3.0602, -1.7502, 2.0283, 3.094, 3.1639, 6.0315, 0.1168, -2.3219, 2.2755, 0.3024, + 1.4017, 0.2037, -0.1188, 0.363, -1.7809, 1.2589, -0.0416, 0.1426, -0.29, -0.0669, -0.9365, -1.7637, -4.6543, 4.5857, 0.7173, -1.2893, 0.7992, 1.8632, 0.4734, -0.8667, + -0.6645, 0.3054, -0.1583, 0.39, 0.1223, 1.1996, 4.2148, 1.7843, 2.7706, 0.9297, -1.0663, 1.2711, -0.1675, -0.5861, -2.5452, -2.9107, 1.264, 0.2394, -4.6672, -1.7254, + 1.3908, 0.5115, -0.8577, 0.3878, 0.771, 1.2838, -1.2112, -1.293, -1.9359, -2.3893, -2.5796, 1.2692, 3.1933, -0.2748, 0.2489, 3.4206, -5.3967, -3.2312, 2.6326, 4.06, + -3.1151, -2.4768, -1.4409, 0.082, -0.065, 0.8542, 2.7545, 0.8481, 2.7775, 3.2925, -1.1392, -0.56, 5.6459, -1.5505, 0.7937, -0.2372, -3.8294, -1.7699, -1.1681, 0.3038, + -1.4631, -1.5744, -1.0602, 1.2727, 5.2755, 0.7411, 2.6424, 0.9111, -1.5443, -0.8217, -2.458, -1.9627, -0.3229, -0.7005, -0.1842, 1.441, 1.119, -0.0388, -1.7254, 0.4532, + 2.6735, -0.132, -2.0731, -1.2667, -0.0059, 0.4063, 1.1045, -0.65, 0.2919, -0.2343, -0.1432, 0.5161, -1.3203, -1.9223, -1.8439, -0.3541, 2.5902, 0.7807, 0.9691, 0.6136, + -2.576, -2.1039, 3.3039, 7.5737, 4.851, -1.928, 1.3509, -0.0624, 1.3149, 2.3856, -2.8836, 1.6777, 1.6919, -0.2315, 2.0672, -1.6292, -7.7877, -7.8864, -2.423, 3.2949, + 0.1825, 1.4326, 1.8802, -0.76, -3.5028, -2.0654, -2.5905, -1.978, -1.3931, -2.0377, 2.0912, -0.7666, -1.6801, 0.1901, 1.3312, -0.8245, -0.8221, 9.1933, 2.6121, -0.4925, + 0.6596, 0.5183, 0.0656, 0.6099, 0.217, -0.2483, 0.3752, 0.0528, -1.355, -1.959, -3.0746, -2.7901, 1.748, 0.0667, -1.3253, 1.8365, 1.2016, 0.6331, 1.5502, 1.2179, + 1.518, -2.8697, -3.0225, 1.1901, 1.2949, 1.2425, -0.2655, -1.0124, 0.1504, 0.9476, 0.8294, 0.498, -4.6214, -0.4714, 2.314, 0.5042, 0.0042, 0.6173, 0.025, 1.1274, + 5.2946, 0.9166, -1.6961, 2.6183, 3.7503, -0.5464, -0.4536, -2.5804, 0.7239, -3.0443, -0.9745, -0.5296, -1.2153, 0.2578, -4.9483, 0.2574, 1.6442, -1.7218, -1.0182, 3.2654, + -0.3113, 0.1627, 0.201, -0.6825, 0.4894, 0.3705, 0.5406, -0.5307, 2.3413, 3.1334, -0.2531, 0.7289, 0.0127, 0.8411, -0.5394, -1.5751, -4.4648, 3.3442, -1.3619, -2.4473, + 0.7892, 1.6007, 2.2451, -0.0142, -1.8268, 1.0211, 1.1632, -0.431, 0.4809, 0.7681, -0.3119, -3.184, 1.8621, 0.7982, 3.9396, 5.5125, -9.0182, -7.2338, 1.472, 0.3673, + 4.5691, 3.1984, 0.4848, -1.6299, -1.5279, -0.4613, -0.394, -0.7641, -0.774, -1.4705, -2.0718, -3.7739, -3.8204, -2.0882, 0.9538, 2.3794, 3.3309, 2.1292, 0.9829, 0.7475, + -1.7639, -2.13, 1.8133, 5.4637, 4.9096, 0.44, -0.2077, -3.2872, -2.801, -3.3973, 1.4612, -0.7884, -0.4468, 0.3167, 3.033, 3.6546, 1.5554, -2.1172, -5.0158, -0.6924, + -0.9691, 2.1549, 0.9464, -1.8955, -2.483, 0.5229, 1.0573, -0.1544, -2.7731, -1.7762, -1.2133, 0.4997, -0.404, 0.0598, 2.1564, 0.9676, 0.1749, -0.3066, 1.3334, 2.102, + 0.1735, -0.6351, -2.2851, 0.3979, 2.1071, 0.8723, -1.4327, 2.7248, 2.2122, -3.8366, -6.8693, 2.9956, 2.234, 0.2392, 4.5854, 0.8064, -0.4877, -1.9451, 0.1604, -2.0173, + -3.0467, -2.6229, -0.6828, -1.5402, -4.5504, -0.6274, -1.5654, -1.1048, -5.0244, 1.2208, 4.3959, 1.7152, 0.8404, 2.3104, 3.911, 1.3725, 3.6004, -1.5868, -0.0242, 3.0095, + 4.6972, -2.0723, 3.7478, -0.0539, -1.3604, -1.6975, -5.1051, 4.5477, 7.491, 0.8111, -1.5236, -2.0035, -2.3201, -1.9156, -1.8399, 2.7039, 1.1102, 2.7618, 0.1987, -8.1775, + 4.2697, 2.1482, 1.1807, -0.8188, -0.0158, -0.9415, -3.1934, -7.6652, -5.2761, -0.4096, 0.8289, -0.6591, -0.1321, -2.2645, 2.689, 3.5308, -0.186, 2.2844, 2.1691, 2.4613, + -2.6176, -1.9646, -0.3365, 0.449, 1.789, 3.0096, 1.2687, 0.1913, 0.7099, 3.1055, 2.4376, 1.5156, 0.2027, -3.2954, -0.8316, 0.625, 2.5125, -1.9645, -4.736, -2.0703, + 0.9801, -1.159, -1.1869, -1.8206, -2.6697, -2.2474, -1.9247, 1.339, 0.7955, 3.2786, 2.1796, 1.2439, 3.831, 0.9791, -3.7027, -2.0691, -3.3297, 3.47, 4.0219, -2.0091, + -1.9305, 1.1296, 2.7892, 3.5086, -0.4192, 1.8621, -2.4767, -4.562, -1.3151, -0.4855, 0.213, 4.0896, -0.2763, 2.9118, 1.5789, -0.3477, -0.82, 5.6054, -7.8822, -3.173, + 3.5183, 4.1815, 1.9981, -0.8261, -1.4369, -0.3881, 1.0213, -3.8793, -3.6636, 2.2621, 1.1803, 1.7727, -0.7985, -1.2902, -5.0777, -1.2307, 0.3381, 4.4122, -1.4815, -0.612, + 4.0477, 1.4256, -1.6604, -3.5999, -1.9136, -0.3445, 0.3946, 1.6694, 1.2905, 0.9828, 0.5724, -0.1289, 1.3498, 1.3379, 0.2067, 0.3656, 0.2492, -1.2128, -3.2905, -1.7416, + -2.0178, -2.6699, -1.3526, 0.2496, 0.4148, -0.8854, 1.0823, -0.6203, 1.2579, 0.4148, -2.2346, -0.4015, 1.4157, 4.8809, 6.623, -3.5608, -1.8735, -4.5603, 3.5038, 0.334, + 1.4937, -1.542, -2.385, 3.1706, 1.4707, 0.1938, 0.5057, 3.8806, -0.0936, 0.3334, 0.4606, 1.4472, -0.903, -1.4318, 3.5118, -5.2689, -1.4235, -1.2997, 0.0053, -2.1257, + -3.6561, 0.1855, 0.3705, 1.1645, 0.2341, -0.8092, 2.398, -0.3274, -0.4576, -1.1851, -3.8496, 2.0281, -3.3309, 0.9466, -0.078, 1.0318, 4.0737, 2.619, -0.3495, -1.0083, + -0.1238, -0.3756, -0.3626, -1.1974, -3.028, -3.3983, -3.5184, -2.8303, -0.2464, -1.0525, 0.7469, 1.1667, 1.9967, 2.0536, 5.8842, 4.672, 0.6593, -0.227, -1.2558, 0.4368, + 1.4898, -0.0036, 2.1872, 4.7731, 5.3388, 2.1104, 0.861, -1.9286, -4.4764, -2.9139, -5.8875, 0.1502, 2.3687, -3.3444, 1.8016, 2.0118, 0.348, 1.5855, -1.0664, -5.4053, + -0.2559, -0.097, 0.6606, -3.0637, -4.0503, -2.5522, 0.2345, 0.1786, -0.3244, -2.5706, 1.7286, 2.2086, 1.6927, 2.74, 1.934, -0.1619, 5.414, 3.6846, -5.1534, -2.2469, + 0.7337, 0.6464, -0.7291, -0.8337, -0.3024, 0.3377, 1.5178, 1.0116, 2.585, 0.9759, -1.397, -3.2182, -3.6906, -0.0798, 3.4993, -1.9939, -5.3046, 1.4115, 4.7666, 0.0639, + -2.9601, -0.9321, -1.3007, -4.5012, -0.6859, 1.6271, 0.8938, 1.8188, 2.7147, 2.4868, 2.4402, 0.6577, 1.204, 2.0247, 0.2523, 1.3499, 1.0757, -5.3086, -0.2223, -2.6347, + 1.2887, 2.2547, 3.3766, 1.8575, -1.791, -1.7548, 1.5265, 2.7964, 1.224, 1.972, 0.2687, 1.81, 3.1328, -2.586, -2.7821, -3.9778, -2.4086, -2.0066, -0.0746, -4.1265, + 0.8108, -0.0118, 0.351, 0.2469, -0.3564, -0.0688, 2.2772, 2.9983, 0.022, -0.8672, -4.831, -2.0824, 0.0877, 2.2501, 0.0661, -8.6456, -1.6422, 4.8643, 2.3157, 2.2152, + -2.3502, 1.9923, 1.6641, -2.2786, 3.4633, 2.605, -3.0058, 1.5172, -5.319, -0.9994, -2.4221, 0.2495, 3.8898, -2.058, 1.1705, 0.4058, -1.2798, 2.5712, -0.5349, 0.7192, + 5.2963, 2.758, 0.0542, -1.8363, 0.6217, 3.1975, 0.8761, 0.6926, 0.1889, -2.2049, -2.6639, -2.3949, -0.455, 0.9028, 0.9417, -2.32, -1.6049, 2.2215, -3.0876, -1.184, + 0.0332, 0.6867, -0.5444, -2.656, -2.3272, -1.9975, 2.7492, 3.4613, 1.2531, 2.297, 0.6826, 1.6161, 0.8081, -2.8567, -0.251, 3.1363, -4.7699, -0.8591, 1.4746, -1.9362, + 0.1179, 0.1304, -0.0905, -0.0885, 0.5876, 2.0857, -0.3875, -1.3306, -0.8957, -0.1982, 0.8458, -0.0513, -2.2349, -5.5634, 7.5385, 3.9965, -1.063, -1.5645, -2.102, 0.268, + 1.5416, 0.4773, -0.0338, 0.6704, 0.3091, -0.0982, -0.8312, -1.8586, -2.1668, -3.0698, -3.6621, -2.8717, -0.1465, 2.9749, 3.0473, 2.3156, -0.0362, 0.7605, 1.1471, 1.5312, + -1.4651, -1.1492, -0.67, -0.6012, -0.1247, 1.155, -0.2106, -1.2695, -0.4411, 1.1446, 4.1491, 2.66, 1.3124, 1.6069, 0.6316, -0.4851, -2.5715, -4.3867, -1.004, 1.7189, + 0.2437, 0.6555, 0.3411, 0.8466, -1.7425, -0.1636, 6.1311, 0.6211, -2.703, -1.5009, -0.1744, 0.866, 1.3589, 1.249, 1.1273, -2.7402, -0.0949, -1.544, -1.861, -0.9159, + 4.3927, 3.3672, 0.9009, -1.2521, 0.623, -0.5206, 0.8245, -0.9087, -1.8374, 0.0097, -3.1469, -2.4307, -3.0482, 0.2541, 1.948, 5.7092, -3.3716, -3.2953, 2.6836, -0.9014, + 2.2171, 0.1913, -1.6779, -0.9585, -1.3241, 0.2292, 1.4881, 2.7969, 0.2756, -3.8207, -2.4695, -0.3208, 2.3024, 2.5414, -0.1815, -0.2933, 2.0837, 0.9892, -1.0861, -2.9823, + 0.1186, 0.1645, -0.3865, -0.8001, -0.3047, -2.3398, -0.6229, -0.0641, 0.8491, 1.7026, -1.1341, -2.0704, -0.3123, 0.1814, 3.882, 1.2943, 0.4627, -0.5672, 0.5181, -0.5712, + -0.1015, -2.3234, -2.352, 0.9949, 2.2704, 0.9946, 0.356, 0.9113, 0.1017, -0.453, 0.852, -1.0302, 0.8806, 0.3674, -2.6615, -4.89, -2.9475, 1.9045, 2.6392, 4.4864, + 2.3941, 1.701, 1.9067, 0.4931, -1.4348, -2.6074, -1.1597, -1.0504, -3.046, -2.8157, -0.6597, -0.592, -0.3406, -1.123, -0.8586, 4.9381, 2.8734, 1.4518, 2.5923, -2.6625, + -0.8669, 1.9301, 3.2551, 6.1577, 2.0399, 2.6785, 0.738, -0.3115, 4.7391, 1.4868, -6.0175, -7.4317, -4.5623, -0.859, 3.8966, -0.1349, -2.5476, -0.008, -1.4441, -2.7383, + -1.8064, 0.5147, 0.58, -2.6271, -3.9359, -2.9321, -2.4785, 0.6104, -1.7343, -0.3653, -0.3024, 0.235, 2.3057, 1.9998, 2.2392, 1.9124, 3.0438, -0.2241, 5.1672, -2.202, + 1.858, 3.3342, 3.04, 1.067, 0.2251, 0.548, 1.7906, 0.7871, 1.285, -0.3795, -2.015, -2.3713, 0.5611, 0.5214, -0.8547, 0.0171, -1.8463, -2.7006, -1.7828, -3.0844, + 1.4841, -0.81, -2.4242, -1.8509, -0.9746, -1.0553, 4.8924, 1.3818, -1.8605, -4.3708, -2.0142, 6.4457, 0.9506, -0.5924, 0.1104, 2.4175, -0.6754, -0.8459, -0.1554, -0.053, + -0.0877, -0.9877, -1.7358, 0.3853, 1.1022, 1.2975, 4.3189, -1.9877, -3.1833, 1.0392, 0.1796, 4.1158, 1.465, -1.6177, 1.6123, -4.1615, -3.2584, 1.2187, -4.3136, 4.5989, + 0.4487, -0.1107, -2.0381, -0.2337, 2.5745, 2.8339, -0.0417, 1.4413, -1.4483, -1.1675, -6.2515, -6.936, -3.2717, 4.8492, 0.9246, -0.975, 4.1724, 1.7821, 1.382, 2.0655, + 0.1081, -0.6949, 0.1665, 0.6685, 0.879, 0.7273, 0.1766, -0.0005, -0.2218, -0.4294, 0.4489, -0.4843, 0.2008, 2.1975, 4.5024, -1.0296, -1.2026, -2.5547, -1.0944, -2.3636, + 2.3396, 2.1543, 2.2429, 4.7578, 0.839, -0.8895, 4.6297, 0.4985, -2.3653, 2.1787, -1.0612, -0.8953, -6.2919, 0.5546, -0.4272, -0.967, -1.9781, -0.4692, -5.5295, 0.6795, + 0.153, -2.1926, 2.1973, 4.5005, -1.3453, 1.3286, -2.031, 1.0783, -1.351, -0.7983, 0.6783, -3.4857, 5.3977, -3.6561, -3.5986, 6.0882, 0.1428, -0.9697, 3.0219, -5.1583, + -2.6086, -0.0766, 2.7222, 2.0552, 2.4096, 3.0319, 1.0596, -0.1283, -0.8104, -0.2732, -1.4259, -4.0229, -1.4469, -1.6716, -1.1861, -0.9216, 0.678, -0.0004, 2.0118, 0.6041, + 1.8333, 3.1078, -1.8097, 1.1817, 3.7643, 0.5185, 1.9828, -0.3454, 1.2321, -1.0494, -6.2996, 3.9399, -4.6043, 2.7296, -2.2906, -1.7821, -0.5503, -0.1687, 1.5615, -2.9514, + -1.9822, -1.787, -2.0807, -0.6471, 1.7376, -0.7108, -0.9897, 0.1273, -1.5435, -3.408, 1.1979, 3.2003, 1.0189, -0.9731, -1.079, -1.9655, 3.5511, 1.2692, 3.4593, 1.6049, + 1.8097, 0.7952, 2.3044, 2.0422, 0.0385, -1.489, -2.6817, -2.4115, -2.0814, -4.7349, 1.3168, 5.2099, 2.0691, 0.2209, -0.3967, -1.391, -0.0825, -1.397, -1.3074, 2.1664, + -0.6317, -0.6961, -1.7818, 1.7212, 1.8896, 0.7627, 6.4133, 0.0239, -2.0812, -0.634, -0.8745, -0.8436, -3.5167, -3.0992, -0.4403, -5.0217, 5.7819, 4.7221, -2.9383, 1.2443, + -0.8542, -4.8873, -5.4381, -4.263, -4.129, 0.7749, 4.7768, 0.2842, 0.3115, -0.282, 0.2149, -0.1804, 0.6193, 5.7873, 5.1866, -1.3257, -3.0389, -1.9693, 8.9711, -0.5589, + -1.7203, 0.3016, 0.2697, 0.0913, 0.2499, 2.9554, 0.332, 0.0927, -3.0516, 1.3578, -0.8456, 1.2764, 0.1248, 3.9102, 2.8147, -2.3847, -6.7532, -2.2614, 1.9868, 1.2535, + 2.3588, 1.8978, 1.0798, 1.0217, 0.8258, -0.3312, 0.8967, -0.1754, -0.3981, 1.015, -0.3879, -0.8493, -1.269, -1.1797, 1.5079, -0.1598, -2.3607, 1.1269, 2.648, -7.2674, + 1.1746, 4.6165, 5.494, 3.4461, -3.9021, -1.605, -0.1323, -0.938, -0.4156, -1.9, -0.2856, -1.2349, -3.6515, -2.9147, 0.053, 1.1469, 0.2371, -1.3253, 3.8834, -1.7466, + -2.2758, 1.8844, 4.6711, 2.2076, -1.3597, -0.4741, 0.4627, -0.0358, -0.0017, -1.0258, -0.6957, -1.027, 1.1372, -2.604, -3.0616, -4.3523, 1.6973, 1.9314, 1.1807, 1.741, + 1.9665, 1.3206, -0.1069, 0.8467, 1.1209, 2.6581, 1.0313, -0.7646, -0.9327, -0.4666, 1.3979, -1.1019, -2.4235, -8.2049, 1.1737, 4.931, 0.7484, 0.2664, -6.0708, 2.6104, + 1.1852, -1.5416, -3.6491, 4.4048, -6.7437, 4.6469, 1.6802, 1.291, 2.2789, 2.761, 1.3944, -0.7732, -5.8136, 4.4421, -2.2039, 0.8414, -5.8722, -4.6747, -3.6578, 10.0038, + -3.9689, -0.5502, 1.1683, -2.1974, -1.9082, 0.1416, 1.6772, 0.326, 3.7162, 2.4168, 2.6207, -1.7735, 1.5236, 0.348, -0.3569, 4.1471, 1.4471, -0.6226, -8.1997, 0.0448, + 0.6532, 1.491, 1.2058, 1.7096, 2.395, 1.7319, -1.5483, -1.8447, -2.2888, 0.7634, 3.2796, 1.6709, -4.9985, -3.0829, -1.1211, 1.2229, -0.2209, -1.194, 1.9569, -1.7811, + -1.9523, -4.3005, -4.5837, 1.0346, 1.2567, 1.0099, 3.2344, 2.8332, 1.1895, -1.5164, -2.2052, -1.2334, -1.4331, 2.1022, 2.3179, 5.6712, 2.1958, -2.0504, -2.5243, -1.046, + -1.1815, -1.53, -0.6842, -0.5633, -2.6867, -1.4016, 0.6359, -2.017, -1.297, -1.6432, -1.0489, -1.3764, -1.1731, -0.5962, 3.5229, 5.3595, 3.1187, 3.4061, 0.3009, 0.855, + -3.1382, -0.628, -0.8774, -0.9941, 0.9435, 0.9619, 0.852, -3.3796, -3.2423, -1.3758, 3.304, 2.2194, 1.0056, 2.5348, -0.2996, 0.9762, -3.7819, -0.3936, 5.7234, -0.4105, + -3.2428, -5.3967, -1.5226, 4.3711, 2.0836, 2.1112, 0.7032, -4.0183, -12.6551, -15.4852, 0.9361, 9.2253, 10.5424, 3.4081, 3.4337, -0.7556, 1.6657, 0.8127, 4.5992, -0.816, + 1.8248, 0.0419, 0.5248, 1.8646, -1.2814, -2.6618, -0.0669, 0.1817, 2.2151, -0.8152, 5.1179, 2.3104, 3.6555, -8.7128, -2.079, 1.0629, -0.0963, -1.5473, 0.4756, -2.0146, + -0.1111, 0.3482, -0.0235, -0.7175, -0.1449, -0.3857, -0.8724, 0.4592, 0.498, 0.2237, 0.3924, 0.2623, -0.5426, 0.937, -0.6701, 0.16, 0.1978, 1.4707, -0.454, -1.0274, + -0.9442, -0.4989, -0.2375, -0.5991, -1.2414, -0.4327, -0.2055, -0.5191, 2.6955, 3.9938, -2.7275, 1.8004, 1.9744, 1.7067, -0.5541, -5.7033, 0.6046, -1.4009, -1.3782, 3.6669, + -0.8575, 0.6722, 1.8197, 2.2695, 1.4265, -1.5445, -1.743, -1.5937, 2.047, -0.1126, 0.3473, 1.4243, 0.9317, -1.3895, -1.064, 0.4664, -0.0706, -3.0958, -1.0532, 1.1198, + 0.9735, -3.1553, -4.9524, -1.8534, 0.7715, 2.4911, 5.1271, 0.432, -4.1146, 1.1236, 2.7184, 2.0135, 1.9444, 1.7813, 1.8232, -2.6267, -5.6361, 0.3774, 1.0979, -0.3363, + 1.9497, 1.0413, -1.2191, -0.8636, 0.0511, -0.3375, -0.5315, -1.0284, 2.1218, -5.0828, 1.0827, -2.2172, -1.3936, 0.4537, 3.3006, 0.9962, -1.2147, 0.093, -2.8723, 5.6705, + -3.0064, -0.669, 1.9882, 3.1451, 0.5101, 1.4897, 6.0735, 3.0322, 0.7197, 2.5823, 0.9024, -1.3595, -0.6102, -4.4164, -5.2345, 0.5038, -1.7243, -1.0135, 0.3868, -3.2999, + -1.3127, -0.5603, -0.4395, -0.5779, -1.3273, -0.7737, 1.1446, 2.1363, 0.5709, -0.9646, 0.1742, -0.3429, 0.7079, -1.3617, -0.1807, 0.8278, 4.5177, -3.6128, 1.9484, -0.5738, + 4.9592, 5.5662, -1.4308, 2.4625, -1.3728, 0.3179, 2.5142, -3.1176, -3.0793, 2.5866, -6.0767, -3.0209, -1.0428, 3.7946, 3.4423, -3.9407, 3.868, -5.8781, -3.2612, 2.7097, + 1.8752, 4.6096, 2.6992, 0.0622, 1.9683, -1.5159, -0.2846, 2.0429, 5.1916, 0.0415, 0.4228, 0.2499, -1.8859, -1.2282, -1.8414, -3.2239, -2.8594, -2.2718, -1.947, -2.105, + -0.4172, -0.066, -0.7815, -1.3234, 1.6425, 1.596, 0.1952, 2.8005, 1.8348, -0.0556, -1.7528, -0.333, 2.5351, 3.2175, -0.0237, -2.6102, -2.3993, -0.4569, 0.2104, -3.8124, + 0.534, -7.1325, 7.3739, -7.1474, 5.0035, 4.0837, 1.7481, 0.6285, 2.147, 3.3649, 3.4871, -4.6213, 5.3643, -0.8361, 2.3067, -0.6517, -4.1528, -4.1599, -0.0969, -7.2432, + 6.4977, -1.8922, 6.0123, 2.6649, 3.9019, -2.9401, -5.9544, 6.5995, -3.7727, -1.3909, -4.1986, 0.3151, 1.1248, 0.2299, 1.4836, -7.4381, 0.2549, 4.7727, -2.9947, -3.2755, + 0.0546, 0.0075, 0.5596, 0.2523, -2.3268, -4.5642, -3.6799, -0.8395, 2.7336, 3.7088, 2.7486, 2.6118, 1.5065, 0.0463, 0.417, -0.5592, 1.5006, -0.4534, -1.6715, -2.0529, + 2.9815, 2.4495, 1.7545, 3.2822, 2.8844, 2.5666, 0.0398, 1.6192, 2.6128, 3.3153, -4.7284, -2.6356, -1.7561, -4.3333, -3.6328, -2.9815, -0.9212, -0.8755, -0.3601, -1.2811, + -0.8024, 1.2002, 3.222, -0.7626, -2.1102, -1.0525, -1.8044, 0.6518, -0.3024, 1.2038, 0.2348, 0.2257, -2.8991, -1.661, 1.3306, -0.9177, -2.5629, -0.6077, 5.6868, 1.7272, + -0.1833, -0.3751, 0.5635, 0.1503, -0.2949, -0.6821, 1.4873, -1.2805, -1.3007, -0.6803, 0.0098, 0.9789, 1.7868, 3.5914, 0.8184, 1.0857, 6.4677, -3.3457, -6.706, -2.0913, + 4.2126, 1.0339, -0.8906, 0.9053, 2.8206, 3.1913, 0.4808, 1.7342, 1.1617, 0.7387, 3.7928, -0.7288, -6.1883, -1.6937, -4.9005, -3.6291, -0.7611, -1.4035, -0.2407, 0.3643, + -8.3754, -2.2519, 1.308, 1.8062, 0.885, 1.6497, 2.088, 2.7261, 0.2633, -0.5998, 0.5979, 0.7034, 0.996, 2.9711, 0.165, 0.8745, -0.1614, -0.6875, -1.3556, -3.6024, + 1.4188, 1.0202, 1.5256, 1.662, 0.7476, -1.439, -3.4051, -1.878, 0.4521, -3.9741, 0.7867, -0.3719, -2.3721, -1.0437, 0.6801, -0.2011, -3.0818, 2.9062, 4.2361, 2.3315, + 0.1054, -2.6122, -4.3807, -5.3145, -0.2846, 4.3842, 3.017, 3.8061, 0.711, -1.0498, -0.2574, -0.9802, 0.3402, 1.2503, 2.5457, -7.8042, -0.1469, 2.8259, 3.0062, 0.8386, + 5.2058, 7.108, 4.9534, -1.243, -6.6855, -3.7117, -6.1961, -2.1515, -0.5576, -1.6169, 5.7678, 7.778, -3.9195, 1.0323, -4.8749, 2.1979, -6.6948, 5.7018, -1.1809, -0.9126, + 5.0054, 3.2246, 2.722, 2.5774, 0.3515, -0.4988, -0.6659, -1.1531, -0.3512, -0.2899, -1.1677, 0.8076, -0.071, -1.3279, -1.882, -2.0262, -1.5275, -2.277, -2.2582, 0.808, + -0.3421, -2.1542, -1.9404, 1.9715, 2.0717, 1.269, -0.59, 2.8831, 2.5295, -0.0718, 1.0132, -2.1895, 0.9449, 0.2787, 2.8471, 3.2171, -2.0622, -4.9892, -4.8142, 0.1278, + -3.5648, -4.522, -3.8219, -0.0484, 2.559, 3.3348, 4.6892, 3.089, 3.1738, 2.4402, -0.3648, -2.0478, -1.8476, 0.1171, -0.1749, -2.2364, 0.1988, -2.2378, 0.6726, 0.592, + -2.5566, -0.841, -0.428, -0.4406, -0.5726, -0.3279, -1.871, -2.483, 2.814, 4.1548, -1.1877, -1.2228, 1.1741, 0.7041, -4.1128, 0.8974, 1.646, 2.7315, 1.4956, 0.4265, + 0.6395, 0.6244, 0.2175, 0.2548, -0.6436, -1.4509, -1.2471, -1.8889, -1.6984, 0.63, -0.0902, -1.4274, 1.6267, 2.2897, -1.4907, -1.0863, -0.599, -0.3234, 4.5402, 1.1229, + -3.0281, -3.4576, 0.2465, 1.1848, -0.3128, -1.4112, -1.7883, -2.4368, -3.6604, 0.2309, 4.1432, 0.2306, 3.9874, 1.3414, -2.9661, 0.2318, 1.3943, 2.8996, 1.0512, 2.1197, + -6.4523, -0.8108, 3.0394, 2.9265, 1.7276, -0.6852, -1.3401, -1.2086, 0.2339, 0.6323, 0.9584, -0.4322, -0.4865, 1.1438, 3.9792, -0.5978, -3.3409, -0.0134, 0.1557, 0.5712, + 0.8836, 0.6632, -0.5682, 1.0909, 1.02, 0.2143, 1.7898, 0.4314, -1.2105, -1.6888, -2.8939, 1.5904, 1.4323, 5.0287, -2.409, -2.6282, -1.2927, -1.8499, -3.8726, 4.2691, + 2.7571, 0.5054, 0.5914, -0.4593, -1.9535, -2.8534, -5.1043, -5.0146, 0.3167, 1.921, 1.992, 1.2596, 1.2329, -1.0134, -2.2148, -0.9619, 3.3405, 0.4893, 1.9185, 3.2509, + -7.8257, -8.0514, -2.2922, 4.6049, 1.7841, 0.2877, 2.46, 0.2299, 0.3961, 0.7952, 4.9841, 0.5914, -3.3601, 1.4043, 5.5671, 2.2508, 0.0018, 1.51, -2.0511, -3.2867, + 1.5686, 1.2169, -0.6391, -2.6751, -3.0325, -3.9104, -2.5516, -0.9763, 6.3909, -1.3255, 1.3817, 1.7409, 2.2064, 2.8908, 0.3118, 0.3554, 0.3092, -0.0695, -2.5566, -0.6363, + 1.1784, 0.7886, 1.7506, 3.8841, 0.1097, -3.4846, -1.1668, -0.2517, -0.3004, -0.0493, 2.027, 0.2092, 1.544, 3.4255, 0.2943, -0.8517, -1.6072, -4.0976, -5.8976, 2.4958, + 0.9988, 2.8848, 3.2891, 3.3681, 1.4676, 3.2906, 1.3735, 1.197, 0.4611, -0.5875, 1.7464, 0.9583, 0.5681, -1.4825, -4.2976, -3.2226, -2.3712, -7.0782, -2.8558, 0.2917, + -0.2746, -0.1545, -0.1213, -1.7658, -0.9647, -0.899, -2.2776, -1.6043, 2.1487, 5.2377, -7.3002, -1.2976, 0.8951, 2.6087, 1.9104, 0.8944, 4.2107, 2.4289, -0.6124, -3.0624, + 4.5993, 2.8908, 2.6348, 2.5753, 3.5423, -1.3467, -3.634, -1.3719, -1.5896, -1.7807, 0.4182, -0.4869, -0.0081, -1.7322, -5.0302, -4.0281, 3.2297, 0.1854, 0.7317, 0.2006, + -3.2143, -2.4079, 2.3832, -1.4835, -2.9589, -4.3471, -9.4701, -8.698, 2.2131, 11.9939, 3.4222, 5.6731, 1.0493, 0.9347, 3.177, 3.6996, -0.0115, 2.2951, -2.8928, -1.3571, + 2.2986, 0.5686, -2.7234, 0.0628, 3.3595, 3.0322, 1.2528, 0.1697, 0.2877, -3.1109, -4.5198, 4.2898, 4.5477, -0.5365, -2.9437, -1.776, -3.4896, -0.4971, 0.5506, -0.823, + 0.0226, -1.9088, -4.1034, -3.5139, 1.8311, 6.6465, 1.9042, -0.2585, 0.4811, -1.3603, -0.8669, -2.6469, -2.4021, -2.3699, -1.0708, 1.8059, 0.3697, 0.3642, 3.4726, 3.6036, + 1.8666, 0.3455, -0.4415, 1.453, 2.1752, 0.4141, 0.9988, 0.9339, 2.0369, 0.0808, -1.3138, -1.2683, 0.1032, 0.3074, 0.3794, -2.248, -4.4451, -2.7006, 1.2456, 0.077, + -0.9714, 0.8948, -0.5528, -1.5023, -2.1884, -1.619, -2.6643, 0.3765, 5.2588, 1.9474, 4.7336, 6.0668, 0.9206, -6.1173, 0.2687, 4.2344, -2.7801, 4.7836, -5.9468, -5.1428, + -3.5447, -2.6492, -1.1225, 1.1104, -0.6763, -0.3734, 0.7874, 2.9348, 3.7914, 3.3802, -3.0687, -1.7645, -1.7552, 0.4322, 1.5566, 3.1434, -2.9717, 0.2913, 0.3294, 0.1693, + 2.3099, -0.6833, -2.4051, -0.87, -0.1793, -0.7055, -1.1773, 0.0766, -2.2742, -3.5734, -2.1986, 0.6775, 0.1605, 0.0083, 4.2284, 1.3025, 3.7892, -0.0746, -0.9582, 2.5465, + 0.9486, 0.1048, 1.8316, 3.4918, 2.1758, 1.1342, 1.0848, 2.4632, 0.0993, -1.9453, -1.1703, -1.6274, -2.0353, 0.8991, 0.4736, -4.0911, -2.9565, -2.3552, -2.1133, 3.5874, + 0.6208, 3.4997, 6.2697, 4.2107, 1.2652, 2.1894, 1.1355, -2.5271, -2.9525, 0.0535, 0.3829, -2.5199, -2.9063, -2.7287, -1.9607, 1.46, 1.2748, 0.44, -4.8467, -2.3602, + 0.5243, 2.9289, 2.2684, 0.4191, -2.1542, -0.2881, -0.2706, 0.6758, 5.4475, 1.1883, -2.5477, -6.5024, -4.1506, 0.6656, 0.9576, -1.2352, 1.0736, -4.8441, 2.5699, 3.2741, + -0.7794, 1.1463, 3.5016, 1.112, 0.8485, -1.0628, -0.8132, 3.8405, -0.3344, 1.2653, 0.4357, 0.5494, -2.5741, -2.4964, -3.4166, -4.9706, 4.8271, -4.7341, 1.1838, 2.4711, + 1.8447, 1.0979, -1.7573, 0.3863, -0.5133, -3.1578, 0.0583, -0.5417, 4.1974, -4.603, 0.1241, -3.2329, 4.6242, -4.6647, -2.461, 0.5959, 3.2183, -1.2626, 5.6612, 0.3859, + -2.3894, -1.0328, 1.7896, 5.5648, 5.222, 1.8869, 1.0956, -0.1977, 3.2983, 0.9466, -2.0813, -0.1679, -0.5816, -0.1714, -2.751, 1.1951, 1.5496, 1.64, -5.0073, -9.808, + 0.7738, -1.7298, -3.2257, -0.3183, 1.9284, 1.7227, 0.8166, 0.9095, 0.5332, -0.5016, -1.266, -1.9608, 2.0035, -2.6922, 3.7039, 0.8905, -0.7247, 2.7531, -3.0591, -0.5571, + -0.0748, -0.507, -0.2516, 1.7723, 1.4041, 4.352, 1.7022, 1.099, -1.4641, -2.362, 3.1174, 0.5476, 1.5192, -1.9294, -4.9678, 0.2919, -3.1451, 1.3976, -0.5997, -1.9017, + -0.3043, -4.5751, -6.4864, -2.8079, 2.8553, 1.4264, -0.629, 0.8259, 1.1617, -0.8255, -1.1913, -0.9336, -0.8179, -0.6841, 2.7254, 1.919, 4.4832, 2.4919, 2.0452, -0.6788, + 2.9368, 3.5644, 3.7164, 3.7726, 0.3148, -2.5071, -1.0177, 0.4365, 0.4818, -2.1099, -3.0728, -1.1823, -1.8323, -2.546, -3.2217, -2.5081, 0.1068, -0.334, 2.0018, 3.0001, + 2.0122, -0.8437, -0.0894, -3.5669, 0.2151, 1.3672, -1.1852, 2.2748, 0.2674, 2.1266, -4.5961, -3.5181, 1.641, 4.2095, -4.0873, 0.0362, 3.5548, -2.6567, 1.8468, 0.9915, + -2.9528, 1.3693, 1.3737, 3.6447, 4.6399, 3.0004, -0.4081, -0.5069, -2.0885, -2.1563, 0.7639, 0.479, -2.4821, 1.6495, 0.828, -0.4457, -4.8607, 3.5285, 3.1896, -8.5655, + -4.4449, -2.6584, -0.3396, 2.7055, 3.1313, 2.6691, -0.1405, -2.692, 1.138, 5.9263, 0.1508, -2.5031, -2.5963, -2.2339, -0.4387, 2.7348, 0.1166, -2.0958, -0.1884, 1.7591, + -0.4506, -2.2585, -2.0183, -1.2141, 2.3804, 5.1371, -0.1012, 0.7185, -1.9558, -5.5843, 1.7274, 2.5676, 1.3295, -2.3148, 3.4722, 0.9168, 0.3809, -1.2468, -0.6805, -0.8055, + -0.5741, -1.3187, -1.6054, -1.8387, -3.0009, -2.2631, 1.6411, 1.0542, 0.863, 1.3059, 0.666, 0.5171, -0.9355, -1.8837, 0.8703, 0.385, -0.0855, 0.2754, 4.4605, 1.4674, + 4.0853, 2.9178, 0.0251, -1.7053, -2.9819, -2.0918, -1.9947, -0.8293, -0.6373, 0.5052, 2.1796, 2.6733, -1.7046, -0.6344, 1.362, -0.4864, -2.0884, -1.6708, 1.5012, 1.5754, + -1.5635, 2.8252, -0.9149, -3.0463, -4.7327, 2.7084, 1.1209, 0.7968, 0.7865, -1.2527, -0.1248, 2.6941, 2.7972, 2.2336, -0.0652, -0.4532, -2.9265, -0.056, -0.4324, -0.3945, + 2.462, 0.7164, -1.5674, -3.1513, -1.6402, 2.4149, 2.901, 2.5761, 3.2262, 0.0749, -4.5314, -3.4112, 0.2922, 1.0743, 0.0408, -1.5976, -0.5032, 0.6577, 0.7598, -0.794, + 1.971, 1.173, -0.6838, -2.2094, -1.9356, 1.4952, -2.0825, -0.2927, 0.7657, -1.8337, 4.4472, -3.8324, 0.7557, 0.0732, -3.6271, -1.9071, 4.314, 2.4552, -0.0317, 0.9857, + 3.7325, 2.7934, 1.0157, -1.7096, -2.8454, -1.8953, -0.7562, 0.3146, -0.3781, -1.002, -1.6158, -0.3984, -0.0573, 0.9972, 1.0112, -1.0599, 0.037, 3.6124, 1.1087, -2.9047, + -1.4832, -1.9899, -0.8731, -0.933, -2.9066, 2.382, -0.1603, -0.717, -1.1285, -0.9274, 2.1578, 6.4011, -1.6535, 2.3099, -1.6654, 3.7268, 0.0883, -1.8527, -0.5184, -0.2568, + 0.6353, 1.3687, 1.8257, 0.3226, -0.8766, 1, 1.0853, 1.2934, 0.8779, 1.7553, 1.1543, -2.0442, -1.6763, -0.4593, 0.9294, -1.2072, -2.2593, -0.6144, -2.8074, -0.3032, + -1.207, -1.3475, -1.8312, -1.7806, -2.9611, -3.1818, 2.9332, -0.124, 0.1906, 2.9202, -1.8371, 1.0525, -2.0319, 2.7074, -2.1979, -1.3072, -0.5591, 3.0013, 2.66, 4.9011, + -5.1303, 3.387, -3.7967, -1.9466, -5.3864, -1.1368, -0.5684, 3.7351, -0.5755, -3.2378, -4.425, 2.035, 3.9372, 5.4701, -2.7768, 5.9464, 6.6849, -3.7875, 1.9948, -0.423, + -1.3037, -1.9678, -3.152, -1.4018, 0.2092, 2.801, 2.076, -0.3324, 1.0911, 0.905, 1.7187, 3.4255, 1.0022, 3.5722, -3.5224, -4.7658, -1.0745, 0.2766, 1.2898, -0.8471, + 1.9772, -2.9635, -3.024, -2.2547, 0.1703, 1.7771, -1.6073, -3.1859, 1.541, 1.4356, 0.9203, 3.9297, 4.2495, 5.7007, -4.0193, -0.8612, 1.6423, 0.8844, -5.1605, -1.1517, + 2.9132, 0.8992, -1.0688, -1.5448, -0.9185, 0.4003, -1.77, -2.7768, -1.4639, 0.2261, 0.7139, 1.7997, 3.0514, 3.3204, 0.6803, 0.9792, -0.2717, -2.645, -0.2252, -2.2988, + -2.9741, -2.4804, -3.0116, -3.1521, 0.1074, 1.3714, 0.6662, 2.0637, 1.7849, -0.4611, -0.772, -1.6172, 0.8203, 3.4203, 0.8069, 2.2581, 3.2451, 0.5915, -2.2429, -0.4245, + -0.8028, -0.229, 0.2137, -0.4319, 0.558, 0.2543, 0.9172, 0.8892, -0.4807, -1.2827, 0.9202, 1.1454, -1.6931, -3.6479, 0.4568, 3.9049, 1.2435, 2.6145, 0.7928, -5.3425, + 2.619, 1.9162, 0.9769, -0.1078, -0.429, -0.365, -2.8284, -4.4494, -5.991, -4.8405, 0.711, -0.4595, 0.2195, 3.3942, 0.9527, -1.8867, 3.8742, 3.7699, 1.215, 1.7087, + 1.8829, 0.7201, 0.6607, -0.0626, -1.194, -1.4411, -0.0944, 0.1172, -0.7491, -0.3712, -2.5287, -2.1899, -1.228, -1.4906, -0.5689, -1.4885, 2.7842, 4.0586, -1.1367, 4.32, + 4.671, 0.9897, -0.6156, -0.6851, -1.412, 4.1532, 4.4321, 1.1339, -1.0985, 0.5736, 1.4085, -4.6356, -3.3117, -1.5968, -3.4345, -0.7293, -0.0528, -0.3096, -3.6684, 4.188, + -2.5398, -1.383, 0.0979, 1.9654, 3.5192, -0.0522, -3.287, -3.8507, 0.6356, -0.985, -3.0198, -3.7269, -0.831, 1.9829, 1.8339, -0.8073, 0.2152, 2.0459, 6.118, 2.0688, + 0.4962, 3.2227, 3.5953, 1.3395, -3.4218, -4.9933, -1.9981, 0.9513, -1.0998, -2.7535, 1.3298, -0.6976, 0.0716, 0.7392, 5.8854, -4.3047, 2.189, 1.9699, -2.4444, -0.0765, + -5.8327, 1.1129, 0.8081, 5.6003, 5.5684, 4.702, 2.8089, 0.4347, 1.1649, -4.9188, -11.4465, -1.3196, 0.4225, -2.4705, 0.3286, -0.0113, 8.734, -2.122, -2.1264, -1.4373, + -1.6231, -1.3969, -2.0111, -1.262, 4.3084, -1.2012, 1.2341, 0.1866, 0.0635, -2.6548, 2.3896, 1.8088, 0.029, -4.3105, 3.9166, -0.0331, -0.3748, -2.471, 1.0435, 2.3583, + 0.631, 1.3989, 1.5277, 0.7608, 1.0894, 1.7235, 2.0681, 2.3537, 0.9918, 1.2164, -0.3325, -2.2666, 0.1756, 0.1615, 0.5196, -2.673, -7.1201, -2.9272, -5.4551, 6.1563, + 7.8768, 5.4153, -2.5369, 0.0405, 4.1259, -0.2108, -4.6599, -0.9803, -1.3472, -5.5873, 0.0334, -6.0975, -0.7915, 0.7551, -0.1575, 2.8766, -3.5702, -0.2561, 4.01, 1.0615 +}; + +const struct lsp_codebook newamp1vq_cb[] = { + /* /home/metala/projects/smesh/asko/src/codebook/train_120_1.txt */ + { + 20, + 9, + 512, + codes0 + }, + /* /home/metala/projects/smesh/asko/src/codebook/train_120_2.txt */ + { + 20, + 9, + 512, + codes1 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebooknewamp1_energy.c b/src/codebooknewamp1_energy.c new file mode 100644 index 0000000..d9832d8 --- /dev/null +++ b/src/codebooknewamp1_energy.c @@ -0,0 +1,43 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/newamp1_energy_q.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 10, + 12.5, + 15, + 17.5, + 20, + 22.5, + 25, + 27.5, + 30, + 32.5, + 35, + 37.5, + 40, + 42.5, + 45, + 47.5 +}; + +const struct lsp_codebook newamp1_energy_cb[] = { + /* /home/metala/projects/smesh/asko/src/codebook/newamp1_energy_q.txt */ + { + 1, + 4, + 16, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebooknewamp2.c b/src/codebooknewamp2.c new file mode 100644 index 0000000..422410a --- /dev/null +++ b/src/codebooknewamp2.c @@ -0,0 +1,527 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/codes_450.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 11.9178, 14.1558, 15.0079, 16.3077, 17.3822, 18.2611, 17.4655, 14.7258, 9.9322, 5.5523, 2.3108, -0.5449, -3.1948, -5.2578, -6.672, -7.0718, -6.2242, -3.5271, -0.4724, -0.6426, -5.5883, -11.069, -13.9474, -14.1999, -11.6213, -9.2487, -10.7685, -15.1688, -17.7995, 4.747, 5.3362, 4.5288, 2.041, -0.2507, -1.4078, -1.9789, -2.0773, -2.8836, -2.6876, -5.367, -21.5899, + 20.9429, 19.2708, 15.6619, 12.7137, 9.1871, 6.4196, 3.1467, 1.6784, 0.8989, 1.2827, 1.4966, 0.1254, -2.5426, -4.515, -6.1876, -6.3874, -6.0478, -5.9793, -6.4367, -5.2532, -2.2523, -0.5109, 1.6273, 0.3551, -4.439, -9.5465, -11.7875, -11.3329, -11.5883, 4.4211, 3.0334, 0.1707, -1.8877, -1.6176, -0.7003, 0.0063, 0.8933, -0.3305, -0.5297, -3.459, -17.2335, + 10.3698, 10.9179, 12.2827, 14.2252, 13.1924, 8.1149, 3.4397, 0.4163, -0.6468, -1.2093, -1.7787, -2.1501, -2.3738, -2.1698, -1.6602, -2.0012, -2.2206, -2.6679, -2.9048, -4.0924, -3.9533, -4.6653, -3.4648, -4.1545, -4.7802, -5.9292, -6.6217, -6.2599, -7.2545, -1.4487, -2.0915, -2.0764, -2.524, -2.8369, -1.7282, 0.3818, 1.6462, 2.6312, 4.3951, 3.6513, -6.604, + 10.7001, 9.9813, 8.3287, 7.1242, 6.507, 6.5092, 5.9516, 5.2985, 4.9376, 4.9107, 3.3698, 2.148, 1.7415, 1.8271, 2.9065, 1.7503, 1.1809, -0.5973, -2.5964, -4.1194, -4.3826, -4.2663, -6.1171, -8.2455, -10.0389, -10.0722, -11.1753, -11.2765, -12.2855, 0.8221, 0.8933, 0.0873, 0.1278, -0.2444, -0.1326, 0.4115, -0.088, 0.3496, 0.6766, -2.9033, -13.4861, + 14.8732, 12.7779, 9.6261, 7.1258, 5.1364, 5.1173, 4.4647, 4.316, 3.755, 3.9126, 3.6316, 2.8536, 1.993, -1.1494, -2.4465, -3.4951, -3.8807, -4.2782, -4.514, -4.6567, -4.7573, -4.9527, -5.3524, -6.1002, -6.5648, -6.24, -6.7782, -6.9091, -7.5078, -0.7325, -1.047, -1.1322, -1.23, -1.1725, -0.7847, -0.074, 0.3234, 1.3703, 2.8077, 1.6715, -7.7106, + 13.0634, 13.058, 11.8762, 10.3012, 8.7287, 8.2751, 6.914, 5.6997, 4.4786, 3.7849, 4.1201, 2.8106, 0.712, -1.419, -2.0942, -2.3582, -0.5397, 1.516, 0.4684, -2.9378, -7.1601, -10.1338, -10.8807, -10.0235, -7.7214, -7.4752, -9.9005, -11.5702, -11.5927, 4.263, 3.6157, 2.2639, 2.6715, 3.2976, 2.2826, 0.9481, -1.7723, -4.4187, -3.5441, -9.6074, -17.0075, + 17.4365, 16.75, 15.4119, 14.0262, 11.9105, 8.764, 5.0192, 1.9276, 0.0772, -0.8006, -1.8916, -2.6101, -3.2178, -2.5671, -1.7974, -0.9511, -1.6296, -2.8438, -5.2983, -6.939, -8.1364, -7.5562, -6.4223, -7.1565, -8.562, -8.8653, -6.302, -4.6173, -3.1589, 0.3453, 2.406, 5.1191, 5.4688, 4.3371, 3.0997, 0.6091, -2.3128, -3.0561, -3.3297, -12.6865, -6.0911, + 13.0911, 12.7368, 12.4903, 13.0944, 13.0545, 12.0753, 8.9618, 6.1436, 4.1205, 3.004, 2.5067, 2.1012, 1.7892, 1.0194, -0.5009, -2.7054, -4.3792, -5.7855, -7.3332, -7.6356, -6.8161, -6.3032, -6.7524, -8.6805, -9.1565, -8.9761, -9.6991, -10.228, -11.2374, -0.8915, -1.3351, -1.3279, -0.8507, -1.1734, -0.5889, -0.2953, 0.9333, 1.7331, 2.7464, 1.0499, -11.7092, + 20.5201, 20.0295, 17.9227, 15.1345, 11.8697, 8.3087, 5.1766, 3.006, 1.254, 0.4174, -0.172, -0.8532, -1.8929, -2.4981, -2.7278, -3.1121, -3.4982, -3.7976, -4.7868, -5.4073, -5.4391, -5.9033, -7.2898, -8.3095, -8.7395, -9.6577, -9.6812, -9.1534, -10.7197, -2.0265, -2.4422, -3.2898, -3.0803, -2.9851, -1.2856, 0.1567, 1.891, 3.3083, 5.0377, 4.7157, -9.9218, + 8.7254, 11.0045, 12.0666, 13.2121, 13.3296, 12.8324, 10.851, 7.8774, 5.4319, 2.5287, -0.0029, -1.8774, -3.6195, -5.042, -5.6921, -5.2354, -4.487, -3.3016, -2.0527, -2.1409, -3.9671, -5.5705, -6.5599, -6.6471, -6.1324, -6.7689, -8.5096, -9.9894, -10.2634, 3.4359, 2.7738, 2.8295, 2.9482, 1.6625, 0.8956, -0.0514, -1.5848, -1.4749, -2.2921, -9.1424, -14.2391, + 23.9657, 22.7269, 19.7344, 15.7159, 12.2183, 10.6582, 8.5153, 6.8034, 5.1757, 2.7658, 0.5046, -1.3116, -2.041, -1.6635, 0.4261, 3.7125, 3.3282, 0.1068, -4.3151, -7.4691, -8.1547, -7.8283, -7.2057, -10.8214, -15.3903, -17.5933, -17.6434, -16.8095, -18.1107, 1.5132, 0.3244, 0.0189, -0.7294, -1.1966, -0.6245, -0.5177, 0.2092, 1.03, 0.8494, -0.877, -19.8535, + 16.628, 15.7442, 12.731, 10.1009, 8.2897, 8.5577, 8.8444, 10.056, 10.305, 9.1696, 6.7854, 3.8917, 0.3608, -3.0307, -5.8666, -7.1637, -6.5677, -5.6155, -5.1575, -4.9714, -6.5135, -7.7608, -7.9326, -8.4341, -8.5905, -8.717, -10.2926, -12.2908, -12.5593, 4.2267, 2.1595, 0.5102, -1.382, -1.1131, -0.0305, -0.5306, -0.0216, -0.2857, -0.0746, -3.4583, -17.0769, + 13.6209, 12.7507, 12.8553, 14.2468, 15.9471, 14.0699, 8.8461, 3.2261, -1.1845, -3.9187, -5.7488, -7.4173, -8.8555, -9.2473, -8.9917, -6.5605, -1.7283, 2.9838, 3.3778, -0.7316, -2.7883, -0.8816, 0.0532, -4.9902, -8.7894, -10.3247, -7.5806, -5.9415, -6.2971, 14.656, 9.593, 3.1821, -1.9796, -0.7713, -2.07, -4.1354, -3.8071, -3.636, -4.5115, -6.5203, -23.1275, + 23.4988, 25.5182, 26.1443, 25.6216, 23.429, 19.3707, 13.905, 7.5166, 1.8256, -2.4154, -5.4517, -7.7013, -9.8647, -11.2215, -12.6184, -14.4069, -15.4023, -15.6232, -14.8399, -14.567, -14.519, -13.7907, -10.6309, -3.489, 1.4794, 1.635, -2.2134, -1.66, 0.471, 10.9708, 10.5205, 11.2036, 9.2796, 5.4146, -1.1911, -4.4466, -8.0856, -10.7515, -10.9044, -12.0101, -11.4961, + -0.5898, -1.0967, -1.1205, -1.0443, -1.2431, -3.0645, -6.3248, -9.1338, -11.1628, -12.4243, -13.5982, -14.0819, -13.6551, -13.9519, -12.0462, -9.7393, -6.5133, -1.4737, 1.3159, 2.742, 3.1032, 9.2423, 13.5689, 17.8419, 17.0272, 18.0312, 18.1676, 16.34, 14.8841, 4.5894, 3.407, 3.1758, 1.7888, 1.6163, 0.3158, 0.2364, -0.4657, -1.0093, -2.6399, -11.0146, 8.1604, + 13.0299, 12.0907, 11.0575, 11.898, 14.1078, 15.4469, 13.8192, 9.6452, 5.0678, 1.5872, -1.0858, -3.3552, -4.4488, -5.1355, -3.8141, 0.5493, 5.0898, 4.4313, -0.414, -3.7603, -4.7684, -3.669, -4.362, -10.8698, -15.5016, -18.468, -18.1605, -12.2966, -7.7111, 13.7174, 7.2067, 0.5178, -3.0887, -2.4521, -1.3997, -1.4244, -0.6539, -2.051, -3.7269, -6.6452, -24.084, + 20.2958, 22.7253, 24.1108, 25.8434, 27.1854, 26.7629, 24.301, 22.1308, 21.1525, 19.6181, 13.7675, 5.3826, -2.8225, -8.7282, -12.7146, -14.6989, -16.2675, -17.4195, -18.1391, -18.1287, -17.6301, -15.6767, -15.3188, -16.1464, -16.5053, -15.5852, -16.0162, -15.5577, -15.9205, 1.1396, 0.2956, 0.2622, -0.146, -0.2889, 0.0275, 0.0598, -0.0862, -0.0115, -0.3351, -0.9169, -18.8932, + 21.5882, 22.6633, 22.5911, 21.7567, 19.8871, 16.4681, 11.6127, 6.5703, 2.578, -0.4539, -2.9597, -5.4269, -8.0935, -10.3291, -11.8474, -12.0219, -10.4753, -7.1877, -2.9765, -0.5555, -2.4316, -6.5984, -7.4329, -5.2211, -3.7364, -8.4581, -13.117, -14.2101, -12.1825, 9.2042, 6.8442, 4.1847, 1.6315, -1.3411, -3.276, -3.4037, -3.4563, -3.6074, -2.1629, -4.6172, -19.8953, + 10.6094, 9.956, 8.4942, 8.0886, 9.3761, 11.3323, 13.7662, 16.0947, 16.8139, 12.1179, 6.8094, 2.767, 1.8054, 3.1768, 7.3289, 5.1766, -2.2376, -6.9741, -8.5553, -10.5642, -11.2643, -7.7672, -9.8975, -14.2107, -19.646, -19.4783, -14.0319, -7.9045, -11.1818, -5.2324, -8.464, 2.9045, 12.886, 11.9777, 10.5541, 7.9613, -4.2589, -8.3955, -8.1996, -11.7332, -19.6994, + 5.5041, 5.3222, 5.1942, 5.546, 6.9576, 8.9054, 10.4828, 11.034, 9.8032, 6.8135, 3.3656, -0.1277, -3.596, -5.7793, -6.2939, -4.2863, -0.0268, 4.572, 4.4361, 0.4802, -3.4351, -5.2809, -4.4513, -2.2637, -4.765, -9.6486, -13.3377, -14.7275, -10.3971, 17.8073, 13.8296, 10.4356, 9.0219, 2.4512, -5.9813, -10.1712, -10.716, -9.7016, -7.6983, -9.2773, -25.0775, + 16.3656, 18.4878, 18.9993, 18.9918, 18.4816, 16.9653, 13.5777, 9.3381, 5.1691, 1.7384, -1.9039, -5.4804, -8.83, -11.9448, -15.0434, -16.8969, -17.167, -15.0995, -10.9516, -5.3056, 1.0232, 3.6264, 1.1957, 1.1028, 1.6644, -3.8335, -10.3741, -12.278, -11.6184, 10.0963, 5.3648, 2.5424, 2.471, -0.7901, -3.2113, -3.7043, -3.1, -2.4933, -1.9709, -5.2046, -20.9631, + 17.8837, 18.4715, 18.4874, 18.4556, 18.3711, 17.499, 15.0865, 11.4049, 7.8551, 5.655, 5.2257, 5.9267, 6.7868, 6.4202, 3.6161, -0.83, -5.6377, -9.6817, -12.6005, -14.4203, -15.5246, -15.5077, -13.4622, -11.2201, -12.0997, -15.712, -18.3392, -17.8512, -14.2586, 8.3898, 6.8733, 5.8658, 4.5307, 0.2802, -3.1226, -4.8018, -4.8634, -4.4593, -3.4916, -5.2013, -22.21, + -3.1319, -2.9567, -3.5158, -3.6542, -3.9792, -4.569, -4.2861, -2.5541, -2.2464, -1.9153, -2.4682, -3.1479, -3.0568, -4.8839, -4.5795, -5.39, -5.0456, -3.5545, -1.3265, 0.8505, 3.0174, 4.7498, 6.6168, 8.1567, 6.6236, 7.6792, 9.3003, 9.8713, 9.3959, -10.5735, -12.5116, -14.0639, -7.5471, -1.304, 2.4789, 5.3713, 7.7962, 9.4623, 10.2101, 10.6812, 18.1437, + 21.9881, 22.0268, 21.418, 21.0501, 19.7092, 16.8902, 12.8939, 9.2408, 6.1523, 3.8245, 2.5628, 1.6418, 0.828, 0.3977, 0.2944, 0.9841, 0.5033, -2.6922, -7.8516, -11.9595, -14.1961, -14.2907, -11.4202, -8.4658, -10.2796, -16.2385, -20.8415, -22.5979, -21.5723, 2.4756, 1.959, 0.8663, 0.5639, -0.3186, -0.6196, -0.7514, -0.8893, -0.926, -0.411, -1.9489, -22.2015, + 13.6868, 14.9404, 15.1, 15.5585, 16.0353, 14.4054, 10.2425, 6.216, 2.6004, 0.014, -1.093, -1.9058, -2.2147, -3.1008, -3.0478, -1.9164, -0.2033, 1.1951, -1.7083, -5.1393, -7.0402, -8.4745, -8.2053, -8.7459, -9.3367, -10.365, -11.228, -12.609, -13.6605, -1.5164, -1.7406, -1.1213, -1.2392, -0.3054, 0.1166, 1.2891, 0.806, 2.8591, 2.2703, -1.4183, -13.8822, + 24.2507, 21.6076, 17.0141, 11.8925, 7.3451, 3.9013, 1.1114, -0.6837, -1.7199, -1.9483, -2.6719, -3.0002, -3.6624, -4.0397, -4.0608, -4.1225, -3.981, -4.1129, -4.5653, -4.8917, -4.8071, -4.8794, -4.6353, -4.2726, -4.735, -4.9508, -5.2264, -5.1675, -4.9885, -5.7398, -5.9757, -5.9417, -4.9603, -3.1354, -0.5548, 2.3754, 4.4296, 5.8362, 7.1375, 6.5291, -0.9148, + 17.2631, 17.8371, 17.1292, 16.2736, 14.9354, 14.1976, 13.0153, 12.0657, 10.4316, 7.4938, 4.2444, 1.4828, -0.6872, -3.7746, -5.5994, -5.3343, -3.0025, -0.6389, -0.055, -2.7128, -6.5932, -9.9814, -10.8426, -10.0857, -9.6056, -13.2586, -18.8699, -22.5792, -22.7486, -0.7483, -1.0121, -2.2299, -2.0299, -0.7415, -0.0212, 1.8597, 2.903, 2.7112, 2.3661, -3.0572, -22.3309, + -11.1995, -10.693, -9.1942, -8.1742, -7.6079, -6.5119, -6.9193, -7.1422, -7.9717, -7.7574, -7.1013, -6.4983, -6.0445, -5.1389, -3.0175, -0.5052, 2.9571, 5.6253, 7.3169, 6.5738, 7.6017, 10.0073, 10.6429, 11.476, 11.4863, 10.6648, 9.4863, 8.0975, 9.5413, 3.3127, 3.2227, 3.8144, 3.7156, 4.3089, 2.3578, 0.7872, -1.2526, -2.7715, -4.3321, -13.1631, 5.2507, + 17.1783, 16.8887, 14.7421, 11.8348, 8.0205, 3.2499, -1.9129, -6.6225, -10.9397, -13.6517, -14.723, -16.1104, -18.1604, -17.7193, -17.2055, -15.5458, -13.1652, -9.9983, -5.1836, -1.0331, 1.9889, 4.4501, 8.5649, 11.1613, 14.3782, 14.8611, 11.2164, 10.3416, 13.0949, 7.1449, 3.2853, 6.0619, 4.3926, 2.9056, -0.2214, -2.0011, -1.6095, -2.237, -3.8553, -13.8661, 1.4609, + 10.6486, 10.4669, 9.1585, 9.0007, 10.2209, 13.1112, 15.2667, 14.3795, 11.1262, 6.6047, 3.1822, -0.1678, -2.0727, -1.3024, 2.42, 5.9038, 2.7803, -3.182, -6.2303, -8.685, -9.4777, -6.1465, -4.6662, -9.5877, -14.2877, -18.3825, -17.6042, -13.824, -8.6536, 4.3381, -2.0474, -4.0413, 0.7437, 4.3435, 8.027, 4.8604, 0.4728, -3.1556, -4.1581, -9.3831, -21.0994, + 4.5339, 3.018, 1.159, -1.8077, -3.7376, -3.2592, -4.8664, -9.0451, -10.5616, -11.0424, -11.0656, -11.1375, -9.1571, -8.9187, -5.487, -3.7659, -1.1875, -3.3535, 6.862, 12.8048, 15.213, 16.4198, 9.1571, 6.4605, 6.304, 10.6463, -0.7014, -3.2795, 9.7951, 11.6354, 5.742, 6.8106, 9.3406, 9.2914, 6.7851, 13.375, 12.321, -24.4316, -25.4838, -25.3856, -1.3255, + 6.4369, 5.6614, 4.5505, 3.277, 2.0132, 1.6324, -0.2278, -1.7054, -2.5408, -2.944, -2.5595, -3.6388, -4.3998, -3.8497, -2.46, -0.6672, 0.4797, -0.4954, -0.1361, -0.3178, -0.0794, 0.9249, 1.391, 0.569, 0.3416, 1.0916, 0.5145, 1.1248, -3.9866, 15.2047, 12.434, 6.7379, -7.0628, -9.2462, -7.3526, -5.253, -3.4204, -1.8366, -0.0754, -0.1298, -20.8819, + 13.5404, 15.5222, 16.2893, 16.887, 17.0524, 17.1327, 14.7572, 10.872, 6.784, 2.54, -0.5888, -3.3697, -5.4657, -6.7879, -7.7962, -7.6553, -7.4342, -6.9197, -6.9455, -6.3541, -6.7461, -7.4159, -7.7579, -8.3178, -7.4289, -7.3424, -8.2132, -8.9949, -9.843, 0.3453, -0.2701, -0.5525, 0.0397, 0.0597, 0.2448, 0.8902, 1.5587, 1.2101, 0.8399, -4.3658, -12.2454, + 24.5559, 23.413, 20.6408, 17.3808, 14.416, 11.8493, 9.6532, 8.6801, 7.2117, 5.4621, 3.0668, 0.223, -2.112, -4.3454, -5.0915, -4.2332, -0.9253, -0.0786, -2.2834, -6.2673, -9.6185, -12.226, -14.2603, -13.3716, -11.5386, -12.2997, -15.1963, -16.5699, -16.1351, 4.5303, 3.2491, 1.5538, 0.2521, -0.8115, -1.5855, -1.5263, -1.3266, -0.9651, -0.7138, -2.6565, -20.2257, + 8.1022, 9.7899, 9.7931, 9.7477, 9.2987, 8.7666, 6.9904, 5.329, 3.0336, 1.6204, 0.386, -1.2415, -2.468, -4.1707, -5.1485, -6.7003, -7.657, -8.3503, -8.5552, -8.8991, -9.0059, -8.7857, -7.078, -4.545, -2.6069, 0.6288, 2.8467, 3.7676, 5.1114, 3.4695, 4.5378, 3.2083, 2.5145, 1.3409, -1.3752, -0.8674, -0.472, -1.0186, -1.5059, -9.8318, 0.0727, + 14.4586, 14.2733, 13.1879, 11.9606, 10.2045, 9.3636, 9.6651, 11.0114, 12.1122, 12.3036, 11.028, 8.7772, 5.9733, 2.4672, 0.3102, 0.0747, 1.2366, 0.9815, -2.8016, -7.9803, -12.3829, -14.765, -15.7924, -13.6058, -11.0614, -13.0621, -17.8806, -20.1354, -19.922, 5.074, 2.9263, -0.3365, -1.5294, -1.0384, -0.437, -0.2758, -0.3204, -0.0653, -0.0869, -3.9105, -24.588, + 16.8931, 17.8847, 18.3283, 18.5232, 18.199, 16.7506, 13.533, 8.8264, 3.6715, -0.1991, -2.2432, -3.329, -3.3054, -2.6748, -0.669, 2.7103, 4.8565, 3.5571, -0.4645, -5.0037, -8.7773, -10.0343, -10.0215, -10.2618, -11.9582, -16.0391, -19.8259, -20.4865, -18.4405, 4.2237, 7.7521, 9.4271, 7.7776, 3.2089, -1.3047, -4.371, -6.1258, -6.624, -6.4665, -7.4973, -21.6119, + 26.2407, 26.8595, 25.5084, 23.5987, 20.6139, 16.2421, 10.9416, 5.9994, 2.3434, -0.3767, -2.7912, -5.3898, -7.9202, -9.5689, -11.3407, -12.1566, -12.5654, -12.0723, -10.0537, -6.9972, -3.0971, -1.8157, -4.5501, -5.7844, -5.5235, -7.2936, -10.9909, -13.4932, -14.5663, 2.1561, 1.5321, 0.2818, -0.1633, -0.3426, -0.3136, 0.0161, -0.3898, 0.0287, -0.0952, -2.7103, -16.2994, + 18.3705, 19.3592, 20.1123, 19.1051, 15.6286, 9.5321, 3.0603, -1.6458, -4.5598, -6.3273, -7.5713, -8.4739, -9.3282, -10.3168, -10.7509, -9.103, -6.7703, -2.574, 3.3208, 6.7538, 4.2453, 2.974, 1.108, -3.3077, -7.0808, -9.7837, -9.6571, -8.2866, -8.0329, 10.1201, 5.6162, 1.7587, -0.9681, -1.7807, -2.3958, -2.4286, -1.6485, -1.8262, -1.9033, -4.544, -20.3964, + 13.2741, 15.4244, 17.0234, 18.2818, 19.5432, 18.9691, 14.9962, 9.1156, 3.6419, -0.2906, -3.157, -6.1768, -7.9818, -9.3506, -9.4656, -9.2507, -8.4602, -6.2085, -1.8201, 1.5162, 1.249, -0.0059, -1.8007, -4.5282, -8.6837, -12.6709, -15.3611, -15.4209, -12.4015, 7.815, 3.1728, 1.5432, 0.795, -0.5318, -1.2456, -1.5988, -1.7996, -2.1907, -2.0052, -3.9542, -22.2556, + 15.9184, 17.3622, 17.4678, 16.8842, 14.6841, 11.8317, 7.6477, 2.3173, -1.3712, -4.0441, -5.5323, -6.8296, -7.7101, -8.4121, -8.4766, -8.2702, -8.0827, -7.3742, -7.9359, -7.9155, -8.0671, -7.6939, -7.0166, -5.7862, -3.8811, -1.0122, 2.4703, 3.9838, 4.8441, 2.9188, 2.7328, 3.6011, 4.033, 4.2894, 1.6661, -1.5176, -1.7944, -2.1907, -2.2625, -11.4761, -0.6248, + 27.6543, 28.3344, 28.0974, 27.8652, 25.881, 21.2395, 14.9679, 8.7442, 3.5965, -1.0986, -5.8391, -9.7803, -12.4065, -13.0919, -11.4339, -7.2826, -2.4552, -0.6713, -3.1822, -8.1469, -9.6767, -9.4577, -8.9612, -11.2661, -13.6229, -15.3616, -15.2642, -14.0444, -13.3373, 2.3229, 0.95, 0.5581, 0.0389, -0.1161, 0.3407, -0.3396, -0.7413, -0.8075, -0.6566, -1.5496, -16.0531, + 14.7743, 15.871, 16.5584, 17.4275, 18.6438, 19.6359, 19.7934, 19.0788, 17.9177, 16.9057, 15.9073, 14.4531, 10.2026, 3.0567, -4.1665, -9.7579, -13.4361, -15.9678, -18.1928, -19.8105, -20.3101, -20.0861, -19.2226, -16.1803, -12.5817, -12.1735, -14.1311, -13.5138, -10.6954, 7.7639, 2.5429, 2.6941, 2.9367, 0.5893, -1.929, -2.8709, -3.1704, -3.0337, -2.2216, -3.3012, -22.819, + 12.7199, 12.8622, 12.1185, 10.3818, 7.6754, 5.4729, 4.0902, 2.5106, 1.3459, -0.1508, -1.059, -0.9743, -1.2979, -1.7207, -2.0981, -3.4023, -3.6088, -3.7334, -2.9611, -2.7071, -3.2507, -3.7314, -4.9032, -4.9793, -5.4541, -5.3634, -5.5199, -5.9327, -6.3294, 0.5719, 0.7629, 0.4111, 0.3851, 0.5406, 0.361, -0.6901, -0.4405, 0.2987, 0.0781, -2.2788, -7.7046, + 17.0925, 17.268, 16.3588, 15.6578, 15.5233, 15.868, 16.0037, 14.7721, 12.292, 8.7258, 4.3618, 0.2688, -3.5171, -6.9208, -9.2849, -8.9305, -6.2881, -2.6008, 0.0832, -0.7819, -3.3713, -5.1713, -4.904, -6.2218, -11.397, -17.6896, -21.9017, -23.4215, -21.8734, 3.1762, 2.3323, 1.1259, -0.1136, -0.6656, -1.1934, -1.1198, -0.332, -0.0039, -0.1887, -3.0174, -24.2388, + 17.2297, 15.6739, 13.0707, 10.1587, 7.8155, 7.3743, 6.0217, 4.4665, 3.0535, 2.6239, 2.2641, 1.967, 1.5434, 0.6206, -1.2673, -3.0579, -4.7912, -5.9248, -5.918, -6.122, -5.8687, -6.3517, -6.5968, -7.5677, -7.4916, -7.9499, -8.0977, -8.4791, -8.399, 1.8899, 2.2808, 2.6284, 2.1186, 1.2552, 0.2046, -0.3591, -0.6669, -1.5091, -1.4378, -6.4047, -11.8263, + 4.5933, 4.7596, 4.4438, 5.2453, 6.6446, 8.2821, 6.9832, 4.381, 1.1278, -1.5253, -1.8904, -2.1516, -3.4268, -5.4133, -6.8772, -7.1547, -5.3998, -2.6582, 1.2751, 2.0882, -0.7302, -4.1881, -5.1819, -2.1264, 0.8208, 0.5532, -1.8235, -1.5249, 0.8743, 5.3771, 4.5451, 4.0828, 5.1397, 3.7744, 0.358, -1.2512, -0.7183, -2.7542, -4.1142, -14.4391, -6.0204, + -2.2799, -1.768, -3.2413, -3.927, -2.7062, -1.0703, -1.335, -1.9824, -2.4957, -1.3919, -2.1103, -4.0545, -4.3911, -5.7784, -7.9812, -7.7496, -7.5943, -5.8788, -3.7846, -2.676, 2.8977, 4.842, 8.2162, 4.4328, 10.2839, 10.4092, 11.3489, 11.1069, 10.659, -9.8885, -12.0674, -13.7764, -6.7026, -2.8416, 2.6527, 5.34, 7.6116, 8.5217, 10.1675, 10.983, 18.5816, + 8.679, 8.1241, 7.9956, 9.001, 10.6051, 11.9336, 12.07, 10.4828, 7.604, 4.4092, 1.4213, -0.5435, -1.807, -2.2849, -1.1776, 2.4297, 6.7853, 8.4364, 6.3991, 4.5951, 1.7264, -5.9987, -12.0781, -16.538, -18.7068, -19.2937, -18.0295, -14.918, -11.3219, 9.6625, 7.9093, 9.1967, 5.7578, -1.0641, -5.1134, -6.0886, -5.4946, -5.3822, -2.7102, -6.6734, -25.9833, + 10.3657, 10.3631, 9.7058, 9.4298, 9.0617, 7.9822, 5.9655, 2.6688, -0.5238, -2.6855, -3.0614, -3.3624, -4.7739, -5.3797, -4.5954, -3.2382, -1.5077, -1.7236, -2.7671, -2.9653, -4.5764, -6.3959, -5.0542, -3.3922, -3.4383, -5.4556, -2.3727, -2.0655, 3.7923, -5.226, -22.0236, -1.5093, 6.4261, 7.5104, 7.6639, 4.2871, 1.2994, 0.5479, 5.7985, -4.7744, 7.7899, + 10.4446, 10.4588, 9.0587, 7.0901, 3.1501, -0.3318, -2.706, -4.6185, -5.7165, -6.2274, -5.5457, -6.1342, -6.9016, -7.4068, -6.2107, -3.8982, -1.1383, -1.7125, -3.1209, -2.5081, -2.3909, 0.2919, 4.6445, 2.6432, 2.6694, 4.3011, 3.5911, 6.8931, 1.3315, 21.797, 18.1696, 11.3834, -3.1623, -8.4098, -8.5693, -7.6899, -7.0385, -5.9998, -5.4794, -5.0009, -22.6316, + 17.2287, 17.7616, 17.8929, 19.2677, 20.817, 21.4764, 18.7667, 14.2036, 10.5122, 8.1941, 7.842, 9.4381, 10.7037, 7.2143, -0.2794, -6.1524, -10.8365, -13.8587, -16.1691, -17.3352, -17.228, -14.8106, -11.1914, -12.304, -16.0739, -18.1082, -16.4868, -14.5719, -15.9127, 2.3379, 0.5208, 0.3528, -0.1779, -0.65, -0.5172, -0.1244, -0.1086, 0.2128, -0.1577, -1.6885, -22.6503, + 18.5355, 20.4972, 20.185, 18.5749, 15.6167, 12.2745, 7.9486, 3.0171, -0.8357, -2.7695, -4.9, -6.7903, -8.0533, -9.4775, -9.7203, -10.0951, -9.496, -9.2581, -9.1995, -6.3741, -2.3905, 0.456, 1.0899, -0.4465, -1.4521, -2.6965, -6.3247, -8.5287, -9.3872, 0.7079, 0.5683, -0.4043, -0.7092, -0.1113, 1.5441, 2.4584, 1.8607, 0.7709, -0.1603, -6.5252, -13.3875, + 15.7485, 14.5502, 12.3547, 10.1884, 8.6909, 8.0435, 6.3074, 4.6065, 2.2122, -0.193, -1.2413, -2.4859, -3.7253, -4.0244, -2.8733, -1.95, -1.0559, -2.6557, -3.6275, -3.0937, -3.1904, -3.242, -3.8325, -6.0485, -6.6724, -6.1617, -7.5456, -8.3219, -10.7613, 9.0819, 5.6131, 0.9836, -3.3767, -5.113, -4.5161, -2.5844, -1.0875, -0.3335, 0.8807, 0.4519, -18.486, + 13.0658, 12.0977, 9.3051, 6.8101, 5.9796, 6.1211, 5.3037, 4.3634, 4.1469, 2.3546, 0.6265, -1.0456, -1.8168, -2.1623, -1.4037, -2.0812, -2.8168, -3.454, -4.9104, -5.6641, -6.1702, -5.2274, -3.5942, -3.4678, -3.4265, -4.9099, -5.1651, -6.2588, -6.5997, 3.1896, 2.3931, 3.5929, 2.5385, 1.8123, 0.7336, -0.3261, -0.9462, -1.535, -2.552, -8.9007, -9.6432, + 6.9128, 6.7304, 6.9243, 6.4631, 5.6472, 3.9796, 1.7898, -0.2489, -2.4436, -2.6508, -2.547, -2.8932, -3.7418, -4.0472, -3.7409, -4.1721, -4.5045, -2.5398, -1.2681, -2.2512, -4.0819, -2.5504, -0.5617, -0.8125, -6.3247, -16.4522, 5.3598, 10.4107, 13.6148, 2.9041, 3.9937, 4.1878, 3.1505, 2.3718, 2.0861, -0.7564, -2.898, -3.01, -1.1906, -10.8392, 7.899, + 15.3717, 14.4646, 14.0665, 15.2685, 17.889, 16.6173, 10.8299, 5.4591, 1.3248, -1.5112, -3.5105, -5.0396, -4.7139, -3.2327, 0.4893, 6.608, 9.2663, 7.1616, 4.6529, 0.9359, -6.9866, -12.7386, -15.0655, -16.3268, -15.5303, -12.5805, -11.4429, -13.9588, -17.7676, 4.4548, 2.5041, -0.5574, -1.9092, -1.6954, -0.798, -0.8178, 0.6929, 0.2455, 0.1742, -2.2936, -23.5972, + 15.1415, 17.2129, 18.5276, 20.2576, 22.0435, 22.941, 21.3301, 18.4906, 16.7921, 16.6351, 16.5489, 13.5214, 7.0026, -0.4264, -6.3907, -10.2154, -12.0432, -13.8717, -14.814, -14.5501, -12.6863, -11.2906, -14.4502, -19.325, -21.0242, -20.2029, -17.6079, -17.4052, -20.1409, -0.1152, 0.2933, 0.6422, 0.8539, 0.5304, -0.1244, -0.6918, -0.3401, -0.1677, 0.0292, -0.9099, -22.1229, + 16.3527, 16.4358, 14.5529, 11.7515, 8.0259, 5.7593, 4.7947, 5.2455, 6.9418, 9.3793, 10.6924, 9.9655, 9.0457, 8.3252, 8.4762, 6.3689, 3.4623, -0.5745, -4.6846, -8.568, -10.9887, -12.4636, -14.764, -14.5242, -15.3129, -17.5422, -18.4522, -18.6412, -19.0596, 4.6132, 1.4513, -0.0514, -0.1917, -0.3334, -0.137, -0.0439, -0.2954, -0.2393, -0.9118, -3.8606, -24.6234, + 3.0149, 3.3679, 2.0858, 1.6705, 1.6501, 2.5867, 1.6237, 0.5766, -1.332, -2.3047, -2.927, -3.0607, -3.6274, -5.2376, -5.7845, -5.3526, -3.5342, -1.1532, 1.814, 2.9895, 2.7465, 1.9285, 1.7068, 1.7703, 2.22, 1.9728, 0.2297, -1.0946, 1.4544, -2.0981, -1.6916, 0.235, 2.2065, 3.1538, 2.2516, 2.893, 1.2452, 0.2641, 0.7151, -9.1746, 0.1743, + 33.1383, 31.0792, 25.7434, 19.1612, 13.837, 10.1403, 5.0657, -0.9848, -4.0125, -3.8049, -1.4317, 2.9301, 4.0459, 0.1222, -5.3168, -8.1684, -10.0826, -10.8448, -10.2597, -10.3317, -9.4719, -5.7311, -3.3677, -4.7251, -6.396, -9.1268, -12.2844, -14.42, -14.5022, 2.606, 2.2289, 1.6967, 0.1399, -0.9831, -0.9608, -0.851, -1.0292, -0.7889, -0.5855, -1.473, -15.7149, + 27.2923, 26.1076, 23.8786, 21.313, 19.0418, 17.172, 15.5267, 14.4631, 14.0462, 13.507, 12.4676, 9.9142, 5.6853, 0.598, -4.4056, -8.3465, -10.4675, -12.5667, -14.3166, -15.5842, -15.4689, -15.0589, -15.5652, -16.495, -16.8464, -17.9497, -19.4354, -19.6539, -18.853, 1.2956, 0.1647, -0.0666, -0.5622, -1.0818, -1.0177, -0.6516, 0.0389, 0.9296, 1.4023, -0.4513, -20.2788, + 26.6766, 26.7374, 25.7566, 24.028, 20.4779, 14.6637, 7.833, 1.9621, -2.07, -4.7989, -7.3077, -9.0786, -9.622, -7.7331, -4.741, 0.1848, 4.407, 2.7266, -2.1973, -5.5028, -7.5677, -8.3692, -9.3827, -11.2185, -12.6814, -12.9582, -12.5667, -13.3838, -14.2742, 2.1312, 0.7483, 0.4117, -0.1309, -0.2886, -0.2604, -0.4816, 0.0583, -0.0383, -0.2744, -1.8754, -17.9569, + 3.3978, 4.4684, 4.2593, 3.9748, 2.4838, 0.6609, -2.0182, -4.4753, -6.9532, -7.4489, -7.9821, -8.8126, -7.7701, -6.4035, -3.2114, -0.1726, 4.0273, 6.9857, 8.4846, 6.351, 4.9727, 4.647, 4.6414, 3.6916, 1.9176, 0.3255, -2.6101, -3.475, -3.9565, 1.7533, 1.1049, 0.647, -0.2625, -0.1699, -0.7934, -1.0459, -1.6085, 0.7985, 2.6353, -3.0588, -6.3429, + 10.0599, 9.5448, 6.901, 4.3178, 2.5886, 1.5303, 0.1509, -1.0275, -2.6254, -2.8291, -3.0667, -3.4775, -4.4368, -5.1122, -6.2497, -6.7213, -5.2797, -3.88, -2.4109, -1.6128, -3.0693, -4.8056, -5.1575, -1.7918, 2.5625, 3.7623, 3.5521, 7.7141, 10.8696, 8.0651, 6.4772, 6.6051, 3.56, 1.8517, -0.5246, -1.7934, -2.7395, -3.6923, -4.3495, -13.4599, 0.6565, + 25.7569, 24.1232, 20.4182, 16.1881, 12.4409, 10.9425, 10.5212, 10.6127, 10.069, 8.9583, 6.8593, 5.3047, 4.2774, 2.9654, 1.7215, -0.5266, -3.2445, -6.9442, -10.3293, -12.7061, -14.021, -14.2363, -13.7968, -14.0351, -15.0354, -15.6847, -16.5621, -16.6992, -17.3378, 1.2536, 0.3575, 0.1415, -0.1561, -0.1699, -0.6288, -0.437, 0.0255, 0.2138, 0.5498, -1.1499, -20.2166, + 0.0231, -0.9014, -1.8167, -1.2335, -0.9356, 0.1659, 0.0099, -0.3194, -1.2785, -1.6159, -0.9934, -0.9581, -1.828, -2.2803, -1.6717, -0.1281, -0.6227, 0.0211, -0.2651, -0.5372, -0.9352, -1.0325, 0.2653, -0.4461, 0.6598, 1.585, 4.5525, 6.2731, 6.2437, 6.2289, 7.1906, 6.8806, 4.1911, 2.5668, 0.0429, -1.5955, -2.8462, -4.6688, -4.0492, -13.9413, -0.0713, + 7.9284, 9.1572, 9.8203, 10.6262, 11.7687, 13.2204, 14.0222, 13.2111, 10.5107, 6.8116, 3.6111, 0.4955, -2.3899, -5.1121, -6.5572, -6.6556, -5.2199, -2.9231, -0.5211, -0.857, -4.748, -9.1464, -11.8191, -10.7137, -6.0224, -4.822, -8.063, -12.3598, -13.2532, 13.1773, 12.7484, 9.6243, 5.0688, -0.9409, -6.7845, -7.3453, -6.4726, -6.1985, -4.8683, -8.0086, -24.4428, + 20.659, 19.3955, 16.2834, 13.6379, 12.4445, 12.1295, 10.9807, 10.1646, 10.4918, 11.3802, 11.3612, 11.2354, 10.6339, 6.7227, 1.1138, -3.7021, -6.4288, -7.959, -9.976, -11.0475, -13.1574, -15.9863, -18.1733, -17.6149, -16.1809, -16.3342, -15.4709, -13.2473, -13.3553, 6.4606, 2.2334, 0.0904, -1.0983, -1.1535, -1.871, -1.3953, -0.4539, -0.1442, 0.1951, -2.8632, -21.9027, + 11.5076, 12.066, 12.717, 14.7721, 15.3221, 13.0928, 8.0689, 3.5812, 1.5428, 1.239, 0.9197, -0.0146, -2.1654, -5.8495, -7.9985, -6.4957, -1.4612, 4.6035, 5.2013, 1.9497, -2.2153, -5.558, -2.2714, -3.5929, -8.3748, -16.9482, -17.692, -14.1565, -11.7896, -0.1089, 2.8427, 6.389, 4.636, 3.9712, 2.8762, -3.4553, 0.8911, -3.1126, -3.8817, -11.0478, -18.2605, + 9.1012, 8.2983, 7.709, 8.2796, 9.717, 11.3893, 12.9622, 12.4812, 9.4717, 5.4783, 2.6937, 2.0314, 2.3476, 3.7201, 7.2459, 7.9823, 4.2063, -1.0767, -4.4784, -6.7559, -4.5456, -4.6976, -8.2963, -18.7549, -25.0006, -24.3482, -13.5441, -8.7468, -4.87, 9.4162, -0.0518, -5.6394, -1.8175, 2.846, 5.7461, 4.9827, 2.5039, -4.5892, -5.3372, -8.0598, -24.0108, + 25.3914, 22.4719, 18.4847, 14.1484, 9.8827, 6.3827, 3.7424, 2.3869, 2.0026, 2.1806, 2.2067, 2.4594, 2.5334, 2.7925, 2.7285, 2.5917, 0.9336, -1.3314, -3.7507, -6.3146, -9.9633, -12.2523, -11.7329, -10.5539, -10.5613, -12.897, -14.8061, -16.0931, -13.0635, 9.4907, 8.6133, 6.9669, 5.2967, 0.8483, -2.8965, -3.7224, -5.4526, -6.1034, -5.5404, -7.5006, -19.2567, + 14.7633, 21.0347, 26.5178, 28.8557, 23.366, 14.8939, 7.8472, 4.1479, 1.6451, 0.194, -1.0241, -1.71, -2.7839, -5.4888, -5.8766, -6.7065, -6.5101, -6.3172, -7.4748, -8.1349, -8.6673, -9.2054, -8.7696, -9.2949, -9.5243, -9.8586, -10.6206, -12.3755, -12.9225, 0.5464, 0.3011, -0.4717, -0.8221, -0.5981, -0.7596, -0.1787, 0.0888, 0.268, 1.7014, -0.0756, -13.4143, + 14.5722, 15.9781, 17.0264, 17.6175, 17.4232, 16.5459, 14.6151, 11.6122, 8.3872, 5.7241, 3.1297, 0.7916, -1.8948, -4.6319, -7.4829, -9.0432, -9.8372, -10.2623, -9.8461, -8.3463, -7.1311, -7.5141, -8.8925, -9.9645, -10.0906, -8.0182, -7.1753, -10.4665, -12.8258, 7.5756, 9.5196, 10.3723, 8.1609, 3.493, -3.1717, -6.1605, -6.9929, -7.1805, -6.8863, -8.7297, -20.7652, + 37.2037, 35.8111, 32.3205, 28.0474, 23.2802, 17.7045, 11.6084, 5.8427, 0.267, -3.7432, -6.2669, -8.1167, -9.3928, -10.1312, -10.3467, -10.0877, -9.5979, -9.7744, -10.3207, -10.6331, -9.9469, -8.6203, -8.3585, -9.6074, -10.8446, -11.5167, -11.7789, -11.6363, -11.3647, 0.3839, 0.1181, -0.0142, -0.2099, -0.2835, 0.155, -0.034, 0.1033, 0.0295, 0.1568, -0.4049, -11.8075, + 25.2715, 25.9731, 25.5019, 24.4387, 22.0168, 17.9875, 12.8839, 8.1186, 4.0883, 0.9493, -1.832, -4.9719, -7.8984, -10.8034, -12.5203, -12.4959, -10.7116, -8.3345, -4.1201, -0.1578, 0.1929, 0.1873, -2.8273, -8.7555, -14.7009, -17.595, -18.3997, -17.0685, -14.4171, 1.9066, 0.3797, 0.2936, 0.7746, -0.4377, -0.094, 0.1464, -0.0351, 0.2602, -0.8075, -2.3869, -18.3683, + -1.7829, -2.9115, -3.3197, -3.0219, -3.0103, -2.1963, -1.8274, -1.5453, -1.3834, -0.5971, -0.1822, -0.0707, -0.4004, -0.4751, 0.5738, 0.6319, 1.4145, 1.0927, 1.3496, 1.6238, 1.3746, 1.5109, 1.6452, 1.4227, 2.6607, 1.9921, 2.0933, 1.3984, 1.9401, -5.1733, -5.1451, -4.0887, -4.3334, -2.3485, -1.275, 1.8849, 3.8802, 5.4984, 6.3884, 4.712, 5.8699, + 3.0884, 3.6195, 4.4987, 5.4241, 5.9234, 4.3151, 1.2318, -2.0672, -4.856, -6.7176, -7.7263, -9.2051, -9.8093, -9.8027, -9.8649, -7.58, -3.5471, 1.2395, 3.8333, 2.452, -0.138, -0.1169, 2.7696, 4.2835, 3.0029, 2.8349, 6.1975, 8.555, 8.1619, 3.4262, 3.7255, 2.9723, 1.5679, 0.6856, 0.7789, 0.0324, -0.04, -1.093, -1.5814, -10.4745, 2.5083, + 7.7805, 8.5455, 8.0969, 7.418, 6.0322, 4.2643, 0.7072, -3.9008, -6.6106, -8.5279, -9.9913, -12.2197, -13.9875, -14.6194, -13.4585, -8.5866, -0.141, 5.8556, 2.7328, -4.3868, -7.6497, 1.0307, 6.7604, 2.0849, -2.0565, 4.3945, 7.6154, 14.5442, 18.2732, 15.9793, 12.4675, 8.6361, 9.3177, 7.162, -0.437, -7.8068, -13.596, -11.2218, -10.5975, -9.9034, -5.2521, + 15.1743, 16.3078, 16.6845, 19.2037, 24.9642, 26.0482, 22.2299, 20.1754, 18.1609, 11.9813, 3.3906, -4.1269, -9.8102, -12.4054, -13.1972, -14.9771, -15.2101, -17.035, -17.5402, -17.273, -16.8388, -14.0848, -9.7661, -6.4551, -6.0572, -3.5105, -0.1292, -3.2831, -12.6212, 2.675, 0.5089, 0.394, -0.3851, -0.0012, -0.1207, -0.3792, 0.6121, -0.3176, -1.0554, -1.9307, -19.7041, + 31.556, 30.0892, 27.2291, 23.5683, 19.0546, 13.2491, 7.4257, 2.9756, 1.0209, 1.0243, 1.37, 0.6757, -1.0362, -3.4535, -5.1118, -5.5508, -4.6428, -3.9233, -3.2906, -5.2994, -8.4124, -11.6578, -14.3387, -15.5177, -14.9184, -14.036, -14.9127, -16.4768, -16.6595, 1.6433, 1.397, 1.0165, 0.631, -0.0752, -0.3736, -0.503, -0.708, -0.7791, -0.4687, -1.7802, -17.0148, + 10.1749, 8.8485, 5.1795, 4.5617, 6.0171, 6.4829, 4.3672, 1.6019, -1.645, -2.9876, -3.6524, -3.2008, -2.3296, -2.1644, -0.9768, 0.4251, 1.9391, 3.4981, 4.6467, 4.5048, 2.1218, -0.3094, -2.3029, -5.762, -6.5009, -7.7314, -8.789, -8.6982, -7.319, -8.3023, -3.9045, 0.7597, 3.5083, 5.647, 8.438, 8.927, 8.157, 4.5045, 0.2453, -27.9802, 0.6878, + -2.6861, 19.2221, 33.978, 25.1761, 5.3276, 0.9553, 6.0941, 10.8857, -5.1659, -6.6908, 10.287, 5.5719, -7.7825, 0.7662, -3.2785, -9.7089, 2.1449, -8.495, -0.8482, -8.2638, -3.5649, -9.0557, -5.193, -8.2034, -6.3047, -4.3602, -8.0851, -11.0228, -11.6996, 3.2339, 2.5869, 1.5692, 0.5614, -0.4616, -0.6459, -1.3729, -1.3736, -1.2425, -0.6779, -2.177, -11.9897, + 7.7287, 10.4343, 12.3692, 13.9892, 14.6808, 14.5459, 13.0629, 9.866, 5.8851, 1.8545, -0.9409, -3.2758, -5.5305, -7.8527, -9.4747, -10.4586, -10.7336, -9.8759, -8.2611, -5.1685, -1.7008, 0.1176, -2.2902, -4.5858, -4.0962, -2.2, -2.3668, -6.9728, -8.7495, 13.3085, 14.0301, 12.5973, 11.0446, 6.5436, -2.6637, -9.4551, -11.0645, -11.2845, -10.7446, -12.3117, -20.4326, + 10.736, 10.3386, 8.2768, 6.4632, 4.7302, 3.0267, 0.5796, 0.112, 1.9363, 5.0018, 8.3004, 9.8879, 8.2713, 4.5555, 2.8097, 1.8606, 2.8946, 3.7421, 5.297, 1.2683, -4.7378, -8.7201, -12.8564, -12.496, -9.6753, -7.5251, -10.0781, -16.3686, -17.6314, 11.3379, 8.1471, 4.3411, 2.5211, 1.4007, -1.3607, -3.3014, -4.3151, -5.9538, -5.2614, -7.5554, -24.6877, + 15.8329, 15.515, 15.4055, 16.5837, 18.1854, 17.6604, 13.6126, 8.4914, 4.4891, 2.4328, 0.8814, 0.778, 2.695, 5.3091, 6.6587, 3.8545, -1.3529, -6.1324, -10.5147, -12.4571, -13.5735, -11.0746, -7.2535, -11.2844, -17.2383, -20.4683, -17.4107, -10.9397, -8.6853, 6.2333, 2.1814, 0.232, -2.1897, -2.6025, -1.7475, 0.3359, 2.9117, 0.0927, -0.1075, -5.3398, -21.1984, + 7.6562, 6.587, 4.6968, 5.126, 9.8218, 14.9709, 16.085, 11.5684, 4.7265, -0.2176, -2.9979, -6.0694, -8.2544, -9.495, -8.0755, -5.7955, -0.4807, 4.7296, 3.3026, -0.0914, -2.8102, -1.2809, -0.3393, -3.3149, -5.6215, -8.5469, -6.678, -7.897, -11.3047, 12.3298, 6.3356, 1.6165, -2.5162, -1.6392, -1.6454, -1.7173, -2.3908, -2.4175, -3.1101, -4.8454, -23.7397, + 4.9452, 5.0593, 3.8655, 4.302, 7.6977, 11.2424, 13.0502, 11.2196, 6.9219, 2.6857, 0.2056, -1.5076, -2.7845, -3.1104, -0.8091, 1.9648, 6.1634, 5.4049, 1.224, 0.3494, -1.5074, -1.8246, -3.5432, -4.5137, -4.3268, -8.6129, -12.2904, -18.8599, -22.6111, 7.0748, 5.7565, 2.9123, -0.3591, -1.5206, -1.728, -1.8572, -1.6318, -2.3011, -2.3197, -4.0261, -26.4685, + 6.064, 7.2189, 7.3048, 8.3637, 9.316, 10.4746, 10.1941, 8.3124, 5.0444, 1.9281, -0.2645, -1.4345, -2.125, -2.621, -3.0015, -2.7992, -2.6148, -2.9666, -3.0696, -3.8743, -4.5941, -4.898, -5.682, -5.7978, -5.5722, -5.1973, -5.4147, -6.4176, -5.8765, -6.4521, -7.2215, -4.2413, -2.7669, -0.8266, 1.9295, 3.3149, 5.244, 5.9014, 6.7572, -1.6387, -0.2567, + 5.2371, 4.8863, 3.31, 2.1337, 3.1492, 5.6939, 8.7998, 11.5679, 12.8023, 11.4528, 9.0298, 8.9298, 10.6661, 11.0071, 6.4326, 0.2441, -4.1637, -7.7062, -9.8518, -10.2264, -9.582, -9.1951, -8.6992, -10.3299, -13.3858, -12.1048, -8.3569, -6.0495, -5.6913, 14.1502, 9.0286, 4.54, -1.001, -2.1523, -1.3098, -3.6803, -4.2446, -3.9915, -4.5409, -6.7984, -22.3276, + 1.1749, 2.9147, 3.84, 5.6634, 7.4575, 9.0125, 7.3532, 4.8392, 2.719, 0.871, -1.4481, -2.7601, -4.4452, -5.2662, -3.9827, -3.4617, -3.6219, -3.1639, 0.2716, 3.4947, 2.5863, 2.0483, 0.3695, -1.8223, -3.055, -5.56, -5.1761, -5.3683, -5.4841, 2.7668, 2.1577, 3.0912, 2.4351, 2.4455, 2.9457, 1.449, -1.5314, -2.866, -2.9647, -9.929, -9.9768, + 25.7146, 25.3619, 23.9564, 22.3568, 19.1718, 13.1052, 5.5763, -0.1008, -2.7575, -4.2993, -6.3232, -7.4184, -9.0999, -12.1658, -14.7424, -14.2269, -13.0082, -10.2417, -6.6055, -0.914, 1.6308, -1.8199, -3.8874, -1.8765, -3.1164, -7.7016, -9.3481, -4.282, -2.9383, 8.4368, 1.7117, -0.7722, -1.4926, -2.2285, -1.9674, -1.046, -0.6567, 0.1437, 0.9502, -3.079, -15.7527, + 10.7572, 9.4885, 7.7426, 6.5423, 6.0951, 6.6895, 8.5238, 11.1515, 12.9326, 13.0679, 11.3687, 8.6878, 5.8071, 4.2486, 4.2979, 5.1375, 3.6691, -0.4487, -5.794, -9.6188, -11.6687, -12.0791, -10.1837, -7.1986, -9.3267, -15.4942, -18.3956, -19.0668, -16.9329, 10.8057, 6.4011, 3.369, 1.5029, -0.9587, -2.8947, -3.7517, -3.2931, -2.8022, -2.8052, -5.5731, -27.3774, + 30.7504, 28.4951, 25.5185, 22.1742, 18.1099, 13.036, 7.7976, 3.5112, 0.1176, -2.6569, -5.1898, -7.4966, -10.1459, -13.1401, -15.8245, -17.097, -17.1868, -16.6198, -16.0292, -14.4009, -11.3257, -6.937, 0.011, 2.6766, 1.9106, 1.9904, 0.8448, -1.2215, -1.6723, 13.9837, 12.0732, 6.7883, 4.2122, -0.6419, -6.1564, -6.879, -7.3232, -5.7545, -3.2248, -7.0778, -13.8733, + 5.5235, 4.9142, 3.2141, 2.659, 2.9961, 4.2989, 2.3547, 0.5028, -0.826, -1.5841, -2.8526, -2.4476, -1.183, 1.5505, 2.5932, 1.4615, -0.955, -2.6992, -1.462, 0.7531, 3.9055, 4.2326, 1.8576, -1.8966, -2.2755, -5.1995, -7.0773, -7.5304, -4.8283, 8.7008, 8.7053, 7.0759, 3.5239, 0.2213, -0.4716, -2.9649, -4.4365, -3.897, -5.646, -10.8111, -11.0662, + 10.0683, 11.2576, 9.125, 5.5609, 2.1927, 2.3916, 0.5672, -0.6821, -1.7701, -2.4144, -2.1229, -2.5051, -3.0931, -3.4474, -3.5498, -4.6568, -4.0419, -2.9786, -1.6058, 0.2043, 0.2119, -0.9338, -2.1449, -1.59, -1.2476, -0.0367, -0.7467, -1.0002, -1.0118, -12.1871, -7.6015, -6.026, -2.6153, 1.8019, 5.1419, 7.0075, 7.4839, 6.3084, 5.7281, -5.0417, 11.1839, + 19.0914, 19.5418, 18.555, 17.3149, 15.8219, 14.6893, 12.7457, 11.1878, 8.8607, 6.1729, 3.1425, -0.6029, -5.0284, -9.2811, -12.4294, -13.9531, -12.8183, -10.2445, -6.0419, -0.7352, 0.9087, -2.2874, -5.6745, -5.3857, -4.8993, -8.6787, -14.4653, -17.3889, -18.1181, 2.0079, 2.3051, 0.155, -1.9709, -2.1518, -1.0518, -0.2981, 0.922, 1.4828, 1.7198, -3.1202, -19.8209, + 7.5768, 6.693, 5.4155, 4.9157, 5.4796, 5.747, 5.5734, 5.4561, 5.0927, 4.7098, 4.4827, 3.6618, 2.9817, 3.26, 4.2867, 6.6922, 8.7811, 7.7587, 3.8523, -0.1532, -4.4933, -6.9881, -8.1454, -8.949, -9.5267, -13.8968, -17.7691, -17.7758, -14.7195, 9.4196, 10.2634, 10.4478, 8.8124, 5.1507, 1.4872, -4.9411, -9.3928, -9.8991, -10.009, -11.3391, -24.4463, + 6.3112, 6.1145, 5.3668, 4.5313, 3.6954, 4.7877, 6.2658, 8.3789, 10.2936, 11.7688, 11.4084, 9.532, 6.981, 5.0657, 4.7615, 5.5904, 6.1808, 3.6441, -0.8606, -5.0517, -7.7101, -8.0207, -7.3867, -7.998, -11.4209, -15.6623, -18.321, -19.2583, -18.9878, 1.9218, -1.0898, -2.1315, -2.6064, -0.329, 1.3612, 2.7055, 3.4481, 2.127, 0.3937, -5.8006, -23.891, + 4.7133, 7.0828, 7.4451, 6.1536, 5.1026, 6.1735, 5.562, 4.7204, 2.3449, 0.0662, -0.0552, -1.4746, -1.3028, -2.0833, -2.3742, -3.0032, -1.8959, -3.1532, -2.7407, -2.7522, -3.1457, -4.1303, -3.0723, -3.0359, -3.2114, -2.1394, -2.2842, -3.9496, -3.5601, -9.5458, -8.5225, -2.1447, -3.0135, -13.5275, -8.701, 7.2088, 11.6588, 11.789, 11.7226, 3.0758, 6.7721, + 14.9989, 17.5318, 17.0021, 15.1799, 12.5029, 9.0797, 3.8559, 0.1428, -2.0371, -1.8983, 1.178, 2.723, 2.0463, 1.0309, 1.6621, 0.5141, -1.5732, -3.0527, -4.0016, -5.2671, -5.7073, -7.6154, -8.5918, -8.8827, -8.7941, -6.7438, -5.5924, -13.4525, -16.2384, -1.004, -2.5012, -0.5919, 1.0505, 3.9201, 5.2244, 4.5335, 2.9522, -3.9239, 1.3432, -11.0028, -13.759, + 23.3831, 23.986, 23.9088, 23.9899, 24.5442, 24.7231, 23.4676, 20.9361, 19.0352, 18.1315, 16.6484, 13.2407, 6.9323, -0.853, -7.8736, -12.542, -15.8304, -18.1801, -19.7679, -20.6937, -20.6499, -19.866, -18.7929, -17.4798, -16.8484, -17.7541, -18.9554, -19.1779, -17.6622, 2.2274, 0.2658, 0.2329, 0.5563, -0.2993, -0.6411, -0.8349, -0.8217, -0.3946, 0.3529, -0.6438, -20.4737, + 27.1582, 28.3012, 27.2357, 25.1547, 21.7324, 15.2318, 7.9956, 2.0196, -1.2674, -2.1412, -2.5552, -3.818, -5.536, -7.5787, -8.8477, -9.9856, -10.6186, -10.6812, -11.5427, -13.058, -14.018, -14.2114, -12.3911, -5.9856, -0.0551, 2.4393, -1.0062, -8.7488, -13.2219, 8.5421, 8.1274, 3.1062, 1.0714, -1.1957, -2.6079, -3.1237, -3.4444, -3.3713, -3.1296, -3.9745, -17.2997, + 0.2274, 1.5742, 0.903, -0.0755, -0.9929, -0.001, 0.9686, 1.1448, 0.4783, -0.3525, -0.1336, -0.1913, -1.6241, -4.5094, -5.8249, -5.384, -4.269, -0.9607, 3.2627, 5.8265, 5.0034, 2.6931, 1.4156, 0.6324, 1.3181, 1.5226, -0.7562, -0.2634, -1.6323, 10.1447, 8.1369, 6.9278, 1.8273, -2.8348, -3.1502, -3.8258, -3.2103, -3.0403, -2.8386, -8.1368, -10.7452, + 2.203, 2.3567, 2.277, 1.9391, 1.4807, 2.4535, 3.7369, 4.5955, 4.8497, 4.7689, 3.9314, 2.906, 0.5571, -2.275, -3.2233, -2.8254, -1.7099, 0.781, 3.0014, 3.5591, 0.5135, -3.7594, -6.0245, -4.9397, -2.1317, -1.108, -3.4783, -7.2902, -7.145, 17.4214, 15.9833, 12.556, 11.8901, 6.7955, -3.1206, -12.2737, -12.4585, -12.5086, -11.3448, -12.94, -23.4673, + 1.7001, 2.1276, 3.1509, 3.8711, 3.445, 3.9578, 3.9916, 2.2726, 1.586, 2.9582, 1.5039, -0.3172, -1.6934, 0.048, 1.7637, 5.8108, 12.7325, 15.4092, 10.2323, 1.637, -5.9209, -8.2841, -8.8154, -8.6341, -8.8994, -8.7332, -8.858, -9.426, -8.6166, 1.0902, -0.3804, -1.838, -2.1594, -2.0188, -0.5336, -0.2356, 0.9072, 1.9988, 2.4507, 0.7188, -11.1533, + 3.347, 4.2651, 3.1581, 1.5899, 1.3593, 5.4416, 9.6912, 10.3789, 8.2781, 5.7621, 2.3516, -1.6093, -4.6703, -4.3014, -2.0948, 1.2895, 4.5826, 5.8867, 2.758, -0.5921, -1.6254, -0.3408, -0.8297, -4.7115, -8.7548, -10.195, -9.4023, -10.1017, -10.9107, 5.4257, 1.3752, -1.6808, -1.6847, 0.0776, 4.2441, 3.7807, 1.7086, -1.1629, -3.5093, -8.5743, -19.3479, + 16.0698, 16.0234, 16.6242, 18.4265, 19.5793, 17.7359, 12.2454, 6.7061, 2.9279, 1.0254, 1.3081, 3.1537, 6.2322, 6.7809, 1.2833, -4.6315, -8.4988, -10.9702, -12.9812, -12.8617, -10.8763, -6.7933, -7.5585, -12.211, -13.1807, -11.6979, -8.6529, -10.8315, -14.3767, 3.5106, 2.2779, 0.8347, -0.4316, 0.4812, -0.3548, -0.958, -0.3001, -0.9639, -1.0077, -3.0884, -21.7124, + 14.8614, 14.3243, 13.2597, 11.9042, 11.3617, 12.9241, 16.0023, 18.6135, 19.9112, 18.7801, 18.0215, 16.7944, 15.059, 9.5509, 2.2373, -3.7737, -7.9433, -11.6438, -15.8775, -19.0534, -20.0063, -19.8849, -17.4072, -14.6677, -14.9214, -15.6185, -17.3399, -17.4032, -18.065, 0.4331, -1.3874, -1.3387, -1.2657, 0.1397, 0.9913, 1.3715, 1.5636, 0.9626, 0.3031, -1.7729, -22.491, + 24.4358, 25.1322, 25.6771, 26.9458, 25.4271, 20.1741, 13.1848, 7.1606, 2.9511, -1.5207, -6.2228, -9.1615, -10.2139, -7.9615, -3.5511, 0.8947, -0.064, -5.6909, -11.888, -15.0418, -13.4238, -8.6724, -10.1392, -15.6141, -16.4146, -15.3775, -9.3359, -5.8457, -5.844, 5.367, 0.7714, -1.2803, -0.3316, 0.0917, 1.3247, -0.3166, -0.6629, -0.4726, -0.9886, -3.5022, -15.8979, + 11.2574, 14.5322, 17.177, 19.437, 21.2176, 22.024, 20.3915, 16.7178, 12.6022, 9.4053, 7.3741, 6.1361, 6.443, 7.2023, 6.6378, 2.8391, -3.5908, -9.035, -12.7524, -16.0348, -18.3668, -20.0831, -20.1715, -19.0743, -16.0476, -13.945, -16.7267, -18.3902, -17.1759, 6.7669, 3.5601, 1.4726, 1.2131, 0.8001, -1.0515, -1.7968, -2.1212, -2.4567, -2.6039, -3.7828, -21.2313, + 9.8296, 10.9668, 11.4657, 12.4379, 13.8874, 14.6363, 14.3342, 12.4038, 8.9235, 5.049, 2.1177, -0.5223, -2.7832, -4.1482, -4.6107, -3.0828, -0.2052, 2.3942, 2.4641, -1.9911, -6.8813, -9.3285, -9.5593, -6.0838, -4.8651, -9.6703, -15.7893, -21.0597, -20.3293, 7.8335, 9.3572, 8.2255, 6.2992, 3.6571, -1.3039, -4.8523, -6.7448, -6.9973, -6.7242, -8.7501, -23.8675, + 10.0961, 10.4449, 9.9127, 8.5711, 6.218, 4.5618, 2.4521, 1.111, -0.1627, -0.3653, 0.8918, 1.6279, 1.8907, 0.7438, -0.7728, -1.2107, -1.2055, -1.5566, -3.2793, -4.1807, -4.1312, -5.1981, -4.9412, -5.1286, -4.9138, -5.1042, -5.2876, -6.4396, -4.6442, -4.2766, -4.5588, -1.6946, -0.6815, 1.6923, 2.6384, 3.794, 3.9827, 3.1253, 3.8234, -7.8447, -3.7539, + 0.0757, -0.0653, -0.5789, 0.6712, 3.3974, 5.2272, 3.8057, 1.3204, -0.9531, -1.2566, -1.6955, -1.1717, -0.9735, 0.2237, 1.1803, 4.3319, 6.8301, 9.0463, 9.4433, 7.5902, 3.7433, 0.0327, -1.4644, -4.7154, -6.0059, -7.2747, -9.9821, -10.6151, -10.1672, 1.8545, 3.4334, 6.1661, 5.8556, 3.1158, 1.3495, -0.3375, -1.2855, -2.2198, -4.5273, -13.4049, -11.7714, + 18.832, 19.0344, 19.1952, 19.544, 18.8449, 14.8697, 8.6867, 2.7879, -1.6869, -4.7635, -7.1363, -8.878, -9.6594, -9.0777, -6.9523, -1.8282, 3.5267, 4.4511, -1.5807, -5.656, -7.8512, -4.0511, 0.2367, -5.4146, -11.328, -13.9141, -12.866, -9.0793, -8.286, 7.2253, 2.308, 0.9914, -1.0476, -1.1123, -1.0979, 0.2181, 0.5772, -1.1907, -1.879, -4.9926, -19.5991, + 6.9436, 25.3648, 31.2509, 23.4659, 7.6212, 8.5476, 13.4044, 12.1024, 6.331, 6.4395, 11.2808, 6.4453, 3.3798, -0.4108, -2.6193, -4.1535, -5.4353, -7.8115, -9.9117, -10.8599, -12.3626, -13.5397, -13.0447, -13.134, -12.5666, -12.9922, -14.205, -14.7731, -14.7573, 0.6782, 0.293, 1.1419, 0.5868, -0.3036, -0.7149, -0.2401, 0.2321, -0.6483, 0.2892, -1.3142, -13.0829, + 8.063, 8.593, 8.9037, 9.6389, 9.9192, 8.643, 5.1562, 1.1687, -2.685, -5.3768, -7.2472, -8.6966, -9.7539, -8.277, -7.3009, -4.7332, -2.5381, -2.7034, -3.2364, -4.1264, -4.6546, -3.984, -4.4745, -3.1865, -2.7693, 0.2429, 6.0573, 8.4087, 10.949, 1.5828, 2.2857, 2.4626, 4.2564, 3.1914, 1.9048, -0.4814, -1.9794, -1.6878, -0.6562, -10.8788, 6.9006, + 15.3121, 14.0216, 12.315, 10.8984, 9.8481, 9.486, 9.9555, 11.2336, 12.1475, 11.5421, 9.508, 6.1797, 2.1804, -1.5586, -4.1037, -3.8925, -2.2145, -0.574, -2.0726, -5.8999, -9.587, -12.3986, -13.2888, -11.0931, -8.695, -10.6144, -15.3843, -17.4751, -15.7759, 11.6735, 8.2281, 4.7038, 3.1666, 1.7515, -3.5926, -5.6951, -5.7508, -5.1915, -3.439, -5.8544, -26.0008, + 10.5147, 10.1953, 9.3949, 9.1051, 8.3007, 7.6855, 5.3821, 2.1136, -0.5365, -2.3955, -3.8024, -5.3725, -5.6568, -4.8775, -2.4291, 0.2566, 4.4555, 7.9385, 8.4324, 6.4827, 2.9059, 0.5262, -2.9536, -6.313, -9.2242, -10.021, -12.3911, -13.793, -13.9236, -1.0018, -1.0252, -1.9659, -2.6464, -2.974, -1.2967, 0.3806, 1.637, 3.3651, 4.3609, 1.1664, -14.6511, + 17.246, 16.9637, 17.1204, 18.874, 20.7478, 19.3865, 13.9822, 8.1265, 3.288, 0.778, -0.2592, -1.0141, 0.0742, 3.2639, 4.6036, 2.5181, -3.1653, -6.8864, -8.0795, -7.3818, -6.3471, -6.8628, -11.5495, -14.8984, -15.4665, -15.712, -14.8453, -15.6943, -18.8106, 1.498, 1.4377, 1.0081, 0.1939, -0.3867, 0.3736, -0.2884, -0.4032, -0.4237, -0.7102, -2.299, -21.4765, + 29.1324, 27.4472, 23.9346, 19.8815, 15.3348, 10.3288, 4.4524, -0.1346, -3.0576, -4.7063, -5.5439, -5.9222, -5.9328, -6.6024, -6.7197, -6.0365, -5.2696, -5.1176, -6.4818, -7.5705, -8.4454, -8.5007, -8.4654, -7.9097, -7.0136, -8.1875, -7.3437, -4.302, -1.2484, 4.1307, 4.9307, 5.3321, 3.9185, 2.3886, 0.5401, -1.5333, -2.6429, -3.4176, -4.0077, -9.6393, -7.8398, + 26.1063, 27.1257, 26.4958, 24.5623, 21.0909, 16.0392, 10.3606, 5.2224, 1.283, -1.7057, -5.2899, -8.7872, -11.5471, -13.8485, -15.6146, -16.5388, -16.6318, -15.7526, -14.3061, -11.8594, -6.9641, 0.2736, 3.2894, 2.3319, 2.1876, -0.1464, -6.9487, -10.5477, -9.8802, 8.0155, 5.1637, 1.2918, -0.1585, -1.6768, -2.1876, -2.1575, -2.3734, -1.4901, -0.3422, -4.085, -16.2781, + -2.8938, 0.5854, 4.9032, 19.8896, 33.0777, 27.8431, 5.8284, -0.8777, -0.4212, 7.5419, 14.4523, 0.5889, -7.2843, -5.7721, 2.2765, -3.867, -7.0376, -2.4089, -1.923, -6.9736, -5.054, -6.8128, -9.1282, -7.6378, -9.9538, -8.0762, -10.1133, -10.3156, -10.4365, 1.79, 1.293, 1.2513, 1.1649, -0.0523, -0.1935, -1.3719, -0.6466, -0.7256, -0.6226, -1.8868, -11.7248, + 5.0511, 7.2825, 7.4756, 7.6284, 6.3099, 6.5711, 6.0062, 5.2464, 4.1337, 3.5789, 2.7344, 1.9171, -0.0947, -4.7055, -6.3175, -6.726, -8.3754, -7.5699, -4.4289, -0.5061, 0.5491, -0.6121, -1.663, -2.5886, -1.0683, -1.0286, -4.3484, -7.2928, -7.1586, 2.8359, 1.6298, 0.9777, 0.2594, 0.2894, -0.2649, -0.2767, 0.5984, -0.0902, -0.5417, -5.4171, -8.5849, + 26.8109, 26.2612, 24.6562, 22.4444, 19.7975, 16.2207, 11.9006, 7.5618, 4.2432, 1.162, -1.9686, -4.6999, -7.0035, -8.7711, -9.4863, -9.0559, -7.8923, -6.8802, -7.012, -8.4837, -11.2123, -13.1769, -13.1832, -11.7848, -8.9173, -7.9697, -7.9495, -8.0762, -7.535, 6.9413, 5.9114, 4.4559, 1.9045, -0.222, -1.5629, -2.1181, -2.9624, -3.1458, -3.1496, -6.0522, -15.8707, + 15.4221, 13.9665, 11.5956, 9.4217, 7.3471, 4.9825, 2.5822, 1.1306, -0.4479, -0.0543, 0.4224, 2.6264, 2.4323, 2.9777, 3.9679, 4.5466, 4.0757, 2.5862, 0.7066, -2.3566, -5.4206, -6.8028, -9.1716, -8.9333, -8.9478, -9.7023, -11.2057, -13.2026, -14.5445, 4.5118, 3.2465, 1.4635, 1.0112, 0.8257, -0.5633, -0.8311, -1.4185, -1.8127, -1.1914, -5.2417, -16.4127, + 28.007, 28.9811, 29.1691, 29.0099, 27.2163, 23.1256, 18.5752, 16.0256, 16.0772, 16.0792, 13.4415, 7.1002, -1.0509, -7.6202, -12.1978, -14.61, -16.035, -16.8734, -17.1512, -17.3461, -17.2821, -16.7355, -16.3289, -16.1605, -16.3294, -16.8373, -17.0316, -17.0117, -16.2062, 0.8143, -0.0316, 0.0425, -0.0469, -0.56, -0.2604, -0.2934, -0.0397, 0.1815, 0.6487, -0.4551, -17.2928, + 21.3473, 20.28, 18.5835, 16.4034, 13.0771, 9.2891, 7.0954, 6.8063, 9.6682, 13.1023, 14.6281, 13.8935, 12.0583, 11.5472, 11.1879, 7.7716, 2.5072, -3.2634, -8.4595, -14.0714, -18.2085, -21.2308, -24.2103, -24.5753, -21.1428, -16.8159, -16.8684, -20.7499, -19.65, 7.8883, 2.8059, -0.2509, 0.2746, 0.577, -0.7075, -1.0613, -1.6761, -2.152, -2.4962, -3.2017, -23.7494, + 16.7277, 16.51, 14.9737, 13.3864, 11.3764, 9.4606, 7.4445, 4.9221, 3.5715, 2.4337, 1.9778, 1.0209, 0.1128, -1.6904, -3.3639, -3.2615, -1.5944, -0.2581, -0.903, -2.3174, -4.1698, -4.9533, -4.5665, -6.1912, -10.0495, -13.234, -15.5995, -16.5459, -15.2199, 5.3973, 5.3767, 6.35, 5.5996, 2.0913, -2.3482, -4.267, -3.6648, -4.0077, -3.9263, -6.601, -20.6386, + 3.6641, 3.072, 2.139, 1.3959, 0.5821, 0.1856, -0.7457, -1.801, -2.5799, -2.9996, -3.1922, -3.7936, -4.3073, -4.4608, -3.725, -2.3583, -1.9204, -1.2606, -2.2907, -2.819, -3.6214, -3.1415, -2.0045, 0.0938, 2.4493, 4.0398, 6.5627, 10.1038, 12.7333, -5.2898, -3.8412, -0.6529, 0.7502, 1.5439, 2.507, 2.6854, 3.8159, 2.2321, 3.0585, -6.8092, 14.5213, + 7.5981, 6.7937, 5.2222, 4.6535, 5.7305, 7.9847, 10.01, 10.9988, 9.0694, 6.0491, 3.4695, 2.202, 3.1237, 4.5225, 7.5338, 7.066, 2.89, -1.4622, -5.4401, -6.1963, -7.3166, -5.9799, -7.7791, -10.5609, -13.5413, -13.8804, -12.9467, -9.4679, -10.3461, 11.6866, 9.3826, 4.4701, -2.9772, -5.447, -4.9307, -2.727, -0.1581, -1.4072, -1.6802, -6.2119, -24.8632, + 5.8372, 5.4933, 4.4445, 3.1566, 1.2701, 1.1435, -1.1096, -2.4243, -3.5109, -2.2282, 0.6573, 2.1785, 1.1141, 0.6038, -0.927, -0.101, 0.3438, 0.9773, 1.8036, -0.1658, -2.1507, -2.6201, -1.5194, -0.3072, 1.7488, -3.1481, -4.7553, -3.5314, -2.2733, 1.5456, 3.9136, 6.0524, 4.791, 5.6839, 4.8261, 0.4655, -3.9096, -15.7692, 1.863, -9.4624, -9.489, + 4.6026, 4.2957, 4.0221, 3.8863, 4.8775, 7.7799, 11.9268, 15.6438, 16.1838, 13.0359, 8.2259, 3.9397, 1.1633, -0.5844, -0.4453, 1.672, 3.9861, 4.4822, 0.7429, -4.6835, -8.2254, -8.6845, -8.8455, -9.205, -9.3625, -12.115, -14.9115, -16.6057, -16.7984, 9.4268, 8.2301, 5.436, 2.2444, -2.802, -3.6865, -3.4374, -3.621, -3.4624, -3.4351, -4.8928, -25.4465, + 31.7873, 30.4727, 26.1023, 20.2575, 14.3546, 8.305, 2.5479, -2.7242, -6.2652, -7.8786, -9.5076, -10.7253, -11.9221, -12.5796, -13.002, -12.411, -11.3787, -10.5858, -9.2885, -7.2279, -5.6862, -4.5481, -3.8155, -3.181, -0.2688, 1.7479, 2.4086, 2.6005, 2.4118, 6.0159, 2.6937, 1.8092, 1.2143, 0.6228, -0.1962, -1.5166, -0.7925, -1.1563, -2.0509, -6.6433, -6.4991, + 18.8196, 18.806, 19.0012, 19.7425, 18.9386, 15.192, 9.3626, 3.8042, -0.7101, -2.8913, -4.5793, -4.8562, -4.2855, -1.5235, 2.8079, 3.9527, -0.682, -6.1064, -9.0907, -10.7715, -10.2261, -6.853, -5.4028, -9.0538, -11.2966, -11.9744, -10.3023, -9.0454, -10.7763, 4.8079, 2.0464, 0.5831, -0.5085, -0.7115, -0.6171, -0.2759, -0.3213, -0.227, -0.8577, -3.9185, -18.4439, + 29.8848, 29.1207, 27.5698, 25.5473, 23.0863, 20.0333, 16.4515, 12.7057, 8.6525, 4.4123, 0.1328, -3.7662, -7.0685, -9.2222, -10.1967, -10.3862, -9.4399, -7.5052, -6.1986, -7.052, -9.653, -11.7447, -12.817, -13.2994, -13.4411, -14.5193, -16.0619, -17.4467, -17.7785, 0.6444, 0.915, 1.0957, 0.6198, -0.2661, -0.3037, -0.4308, -0.4697, -0.3863, -0.3182, -1.1, -17.5027, + 18.4803, 19.3278, 19.3456, 18.5446, 16.5534, 13.5838, 10.0057, 6.5241, 3.2399, 0.544, -2.4922, -5.5969, -8.475, -10.0774, -10.9952, -10.9028, -10.6525, -9.9639, -8.7708, -5.9295, -0.9987, 2.2097, -2.2176, -6.2966, -4.0572, -2.0702, -5.9921, -9.8384, -13.0318, 9.7202, 8.7919, 5.85, 1.2627, -3.1473, -4.0847, -3.9814, -3.8063, -3.2668, -2.9485, -4.3897, -21.4605, + 10.8936, 10.0376, 8.9233, 8.3835, 9.1909, 11.1956, 12.7625, 12.831, 11.2547, 8.6892, 5.7674, 5.0532, 5.1919, 6.4652, 5.5698, 1.2762, -3.6991, -7.9057, -10.9535, -12.3006, -13.0325, -12.0668, -10.2756, -8.9081, -9.5586, -12.4845, -12.5292, -10.6874, -9.0841, 6.7548, 4.3777, 7.2866, 11.0895, 5.9012, -3.2191, -7.2773, -7.4247, -5.9063, -4.6316, -6.951, -23.662, + 14.1801, 13.6094, 10.246, 6.2621, 3.2304, 0.492, -3.3704, -5.1542, -6.4379, -7.1331, -6.8071, -6.701, -7.0994, -6.7923, -5.4284, -4.1081, -2.2588, -0.3405, 0.3901, -0.1306, 0.2111, 1.2777, 2.612, 2.4542, 2.4177, 2.7283, 1.9381, 0.6674, -0.9548, 1.3373, 0.4195, 0.2246, -0.2612, -0.578, -0.3401, 0.2289, 0.3082, 1.5502, 2.1823, -5.0717, -1.9154, + 7.4197, 7.6107, 5.1248, 2.8926, 2.5158, 5.2747, 7.9445, 9.5554, 9.8134, 10.8602, 11.2127, 10.8181, 10.8451, 8.6337, 3.4818, -1.7126, -6.6143, -9.2501, -11.755, -13.8987, -14.1553, -13.7199, -12.4906, -7.978, -7.1759, -5.4179, -4.3134, -2.3617, -3.1596, 3.7397, 0.2684, -0.7543, 2.0473, 3.1074, 3.1748, 0.6925, 0.1021, -1.9327, -0.9979, -9.4471, -15.9473, + 5.0374, 7.8743, 10.506, 13.2551, 15.8405, 18.1863, 17.687, 15.2297, 11.9245, 8.8446, 6.8821, 5.5715, 2.9277, -1.1968, -4.6014, -6.2302, -7.5567, -8.8097, -8.9946, -8.6106, -9.0917, -8.5223, -8.8031, -10.3066, -10.5465, -10.512, -10.3576, -11.9252, -13.702, 3.764, 1.872, 2.0488, 1.2415, 0.9134, -0.5949, -1.6362, -1.3248, -1.6433, -1.0179, -3.6227, -18.8186, + 19.2311, 20.9055, 21.1816, 19.8035, 16.764, 10.9316, 4.3014, -1.2152, -6.3082, -9.8229, -12.4158, -14.601, -15.196, -13.5529, -10.486, -6.001, -0.0077, 5.5394, 4.4883, 0.8609, -0.7114, -0.5882, -2.0714, -4.1988, -3.5305, -2.7385, -3.9119, -6.6059, -10.044, 6.8589, 1.6709, -0.4277, -0.8756, -0.7567, -0.4132, -0.3654, -0.2776, -1.2933, -1.0276, -3.0928, -19.711, + 24.3921, 23.8657, 21.7178, 19.5721, 17.2483, 13.0391, 8.278, 4.5096, 2.1017, 1.4583, 0.4028, -1.6986, -2.5413, -2.4202, -3.3681, -6.3081, -8.4179, -8.6508, -8.3994, -5.6233, -2.8768, -2.4582, -4.6987, -11.026, -15.7297, -17.5495, -16.498, -11.2445, -7.0765, 10.9683, 8.5482, 1.624, -0.8116, -2.3291, -2.0794, -2.7065, -3.3384, -2.8326, -2.6102, -4.4326, -18.4205, + 21.6293, 21.2629, 20.0435, 18.0462, 14.0665, 8.5047, 3.1435, -1.3209, -4.4014, -5.7444, -6.244, -6.5178, -6.8764, -6.1381, -3.8131, -1.3478, -0.7585, -3.8085, -6.8211, -8.0966, -7.589, -5.2013, -2.5966, -3.9678, -5.8322, -4.8627, -3.8164, -4.4574, -6.4845, 7.4192, 3.5944, 0.8769, -1.2773, -0.8711, -1.2539, -1.2063, -1.1651, -0.7991, -1.1807, -4.1369, -15.4669, + 25.3218, 25.2194, 24.6132, 23.8034, 22.1467, 19.2686, 16.007, 12.6244, 9.8907, 7.3439, 4.6106, 2.0173, -0.23, -3.1887, -6.2778, -8.9287, -10.75, -12.4083, -13.6221, -14.5295, -14.0216, -11.6668, -8.29, -7.178, -8.6454, -13.0929, -18.1357, -20.6369, -21.2645, 0.649, 1.5279, 1.4976, 1.2259, -0.2509, -0.5437, -1.0645, -0.9697, -0.4026, 0.0229, -1.6919, -19.5268, + -1.2546, -1.5446, -0.9486, 0.9829, 1.7405, 1.8511, 2.612, 4.5582, 4.2836, 3.2383, 1.925, 1.5674, 0.4781, -1.1296, -1.5011, -0.3895, 1.2177, 2.8828, 3.7419, 3.9893, 0.6886, -1.304, -2.837, -5.679, -3.6007, -1.063, -1.5598, -5.1076, -7.8381, 10.2277, 6.2474, 2.9832, -0.8736, -8.4082, -6.4397, -4.2854, -1.8654, 0.4359, 0.954, 1.0241, -18.8314, + -3.652, -0.9802, 0.633, 3.0142, 3.7152, 4.2246, 3.065, 2.2808, 0.7668, -0.9696, -2.1283, -3.4617, -5.696, -9.1999, -10.9932, -10.595, -8.8872, -8.3491, -3.9024, 3.8951, 4.5732, 4.1833, 4.4267, 5.3015, 7.163, 6.8136, 3.6, 4.1437, 7.0149, 8.8113, 4.5339, 4.332, 3.8462, 2.4702, 0.0061, -1.7359, -2.2461, -3.3967, -3.6881, -12.9329, -0.9921, + 24.1276, 23.4144, 21.9515, 19.2491, 15.3233, 10.6683, 5.7075, 1.4491, -1.9622, -3.4974, -4.3346, -5.264, -5.4783, -4.5424, -2.5563, 1.0471, 2.9749, 1.0585, -4.2112, -7.704, -8.5161, -8.5574, -7.1906, -8.4892, -11.7312, -13.8838, -13.1386, -9.4367, -6.477, -5.2323, -4.7057, -2.176, 0.8632, 2.4803, 4.6972, 3.2524, 3.1237, 0.8651, 3.0078, -6.1758, -9.0277, + 9.207, 8.6269, 7.9993, 9.2567, 10.6048, 10.9179, 8.2726, 5.4801, 2.9587, 1.4349, 1.6895, 0.8687, -0.1341, -1.4667, -2.2954, -2.9979, -3.1146, -3.5248, -3.6823, -3.9108, -4.704, -5.0502, -5.2411, -6.0582, -6.2892, -7.1229, -6.8496, -7.8359, -7.0393, 1.0164, 0.3126, 0.256, 0.1094, 0.1566, -0.0117, -0.2184, 0.266, 0.0029, 0.5627, -2.4525, -9.3388, + 19.0542, 19.7864, 20.4414, 20.8883, 19.4828, 14.6899, 8.0652, 2.5866, -1.961, -4.2899, -5.3264, -5.8141, -5.3969, -2.8814, 0.6767, 3.6783, 2.8172, -1.1754, -3.8287, -4.3496, -4.1271, -2.7566, -3.4552, -6.5139, -9.4384, -14.1688, -17.1871, -19.0448, -20.4515, 1.8392, 0.8553, 0.2154, -0.0271, -0.4104, -0.2449, -0.1708, 0.0249, -0.0369, -0.2525, -1.7922, -22.7099, + 22.2875, 23.2966, 21.0875, 19.4172, 19.4631, 20.2489, 19.086, 14.7884, 9.6247, 4.7618, -1.1341, -7.8711, -13.4709, -16.4039, -17.9473, -16.0183, -8.7161, -0.3674, 4.2198, 1.897, -0.6141, -0.3383, 1.4297, -1.9778, -12.253, -18.9367, -22.1657, -22.0094, -21.384, 0.0857, -0.3388, -0.3844, -0.6424, -0.7435, -0.5609, -0.1067, 0.1511, 0.7988, 1.0267, 0.7142, -22.3449, + 1.5997, 0.7952, 0.5771, -0.1086, -0.9165, -0.4936, -0.5385, -1.1104, -2.3027, -2.7303, -1.7093, -1.2741, -1.2559, 0.1339, 2.1512, 4.2566, 4.4113, 3.294, 1.9275, 1.166, 0.9857, 0.1003, -0.1015, -0.9056, -0.5391, -0.5752, -1.0655, -2.5147, -3.257, 1.4399, 1.6942, 1.2365, 0.6457, -0.0065, 0.5875, 0.3795, -0.0796, 0.4453, 1.0116, -7.354, -5.9661, + 17.6306, 19.8446, 20.6406, 20.9119, 20.8696, 19.9715, 17.0436, 12.6644, 7.8356, 3.7315, 0.0618, -2.5156, -4.0666, -3.6383, -2.3405, -0.6112, -0.7237, -3.4603, -8.5171, -12.2394, -14.9608, -15.8437, -14.9681, -12.615, -11.0775, -11.0437, -12.1047, -15.2272, -15.2522, 3.8383, 2.7442, 1.4004, 0.6138, -0.4141, -0.6861, -1.0225, -0.8449, -0.9118, -0.8189, -3.8984, -19.7618, + 4.0159, 4.7341, 5.0428, 5.4476, 5.5823, 5.0017, 4.7364, 5.0152, 5.4244, 7.2281, 10.0426, 12.1892, 12.5133, 10.8886, 9.4587, 9.9271, 9.6594, 6.2877, 1.1672, -4.8743, -9.8309, -10.9887, -10.4195, -8.8449, -10.0345, -14.288, -19.4282, -23.5124, -22.141, 9.6326, 8.1547, 3.0154, -1.3662, -1.9025, -0.9827, -0.5431, -2.6536, -3.4587, -4.054, -5.842, -26.6165, + 1.3951, 2.3341, 2.7846, 3.6043, 3.9813, 5.2605, 5.5279, 4.846, 3.2475, 2.3327, 1.8366, 1.4325, 0.6121, -0.4539, -1.6285, -2.8274, -4.2077, -4.6993, -5.0706, -4.2874, -4.4071, -3.4175, -3.0547, -3.3504, -1.7471, -0.7879, -0.0749, -0.117, 0.9361, 4.5093, 3.2132, 3.2053, 2.7775, 1.5517, -0.0446, -1.3922, -2.0535, -0.9648, -1.7751, -9.0269, -4.586, + 28.2916, 29.7152, 29.0955, 27.1159, 23.3768, 18.1997, 11.9697, 5.6704, 0.9205, -2.5625, -6.9213, -11.486, -15.0627, -16.3635, -16.7915, -16.8262, -16.229, -14.5129, -11.0684, -5.6647, 2.9493, 7.145, 4.8374, 2.6581, -2.8551, -9.629, -15.306, -15.9776, -14.6886, 0.7674, -0.5757, -1.0994, -0.2628, -0.333, 0.2608, 0.1505, 0.3201, 0.6736, 0.6525, -0.5539, -15.2205, + 21.3574, 19.0821, 16.0689, 13.5763, 11.7756, 9.8197, 7.1626, 5.6591, 4.1988, 2.6866, 1.2839, 0.297, -0.7392, -2.1025, -2.9588, -3.9692, -4.2266, -4.5449, -5.2046, -5.5074, -6.5396, -7.8927, -8.7128, -9.14, -9.3002, -10.003, -10.319, -10.7968, -11.0108, 1.2272, 0.8607, 0.9681, 0.0462, -0.4903, -0.1304, -0.4412, -0.146, 0.3281, 0.933, -3.1554, -13.2931, + -11.9427, -9.0347, -8.1854, 0.5355, 16.2351, 30.0772, 15.6863, -0.5026, -5.1802, -3.4273, 8.1185, 14.303, 3.9959, -5.7275, -2.8537, 5.8633, 2.1444, -4.9037, -1.6011, 1.0216, -1.4938, -3.6235, -5.0675, -4.7195, -2.6927, -4.8393, -5.4537, -9.4932, -7.2387, 4.1282, 1.8786, 1.9953, 0.5488, -0.3819, -1.3723, -1.0026, 0.0804, -1.6472, -0.9937, -3.2335, -11.7554, + 18.449, 17.8582, 16.6014, 15.4593, 14.0319, 12.3568, 10.0803, 7.8236, 5.707, 4.5343, 3.607, 3.4959, 2.7669, 0.5453, -0.986, -2.0713, -2.6104, -3.5225, -5.566, -7.1856, -8.5038, -9.9136, -10.8379, -12.1072, -13.2841, -13.7883, -13.6681, -14.0513, -15.221, 1.9454, 1.7954, 1.7868, 0.9124, 0.3779, -0.2762, -0.6521, -0.9212, -0.7314, -0.0795, -4.1574, -18.4931, + 11.8976, 17.951, 18.5286, 15.1944, 9.4977, 6.4581, 3.3668, -0.2268, -3.9011, -5.4058, -5.9886, -7.2383, -7.8525, -10.3087, -12.8063, -12.1794, -11.0999, -8.8156, -8.1165, -6.1532, -4.2252, -4.0395, -1.3151, 0.5738, 3.955, 8.7131, 6.7113, 1.7138, 5.1116, 0.9965, 1.4759, 3.0237, 2.9344, 5.1266, 4.6639, 2.7831, 2.9561, 0.3334, -5.8448, -18.4487, 1.1692, + 0.9487, 1.413, 0.9479, -0.0826, 0.2145, 3.217, 4.0687, 3.2987, 3.5035, 4.5743, 4.0544, 3.4101, 4.0914, 4.5664, 4.8132, 6.4401, 9.3451, 8.9607, 6.079, 2.7728, 0.8498, -0.8017, -2.4432, -4.7032, -9.3198, -12.6235, -15.1492, -15.7996, -16.6466, -0.8633, -0.9141, -0.0119, -0.337, -0.1759, 0.0244, 0.0238, 0.6518, 1.091, 1.8672, -1.356, -15.2177, + 34.1302, 32.0599, 27.8887, 23.7603, 19.3256, 13.9648, 7.8176, 2.2845, -0.8316, -2.8468, -4.8687, -6.8758, -8.2507, -10.028, -11.0038, -9.9438, -7.5333, -4.6451, -2.1804, -2.2669, -3.7303, -5.3382, -6.9605, -9.3264, -11.3621, -13.0806, -13.5868, -13.1789, -13.393, 0.4195, 0.2121, 0.0329, 0.2371, 0.0989, 0.178, 0.0464, 0.0275, 0.3526, 0.0885, -1.6936, -14.6518, + 15.6422, 15.2859, 14.7754, 15.3593, 17.2032, 19.1105, 18.2304, 15.0687, 12.08, 11.4521, 13.3209, 14.1182, 10.1435, 2.4651, -4.8883, -9.38, -12.5864, -13.8568, -15.1276, -15.6378, -14.1885, -9.7248, -6.9518, -9.9796, -12.4385, -13.0782, -14.0208, -19.5089, -22.8872, 0.499, 0.8082, 1.3862, 0.4212, 0.1198, -0.3486, -1.0547, -0.403, 0.3854, -0.1208, -1.6927, -24.4489, + 31.6974, 29.478, 26.629, 23.262, 19.3188, 14.1307, 8.2731, 2.81, -1.094, -3.2472, -4.229, -4.829, -5.3248, -6.1539, -6.7558, -5.9669, -4.6964, -4.4401, -6.192, -8.0753, -8.1121, -6.2825, -6.0789, -5.7147, -3.3695, -8.9378, -16.7789, -19.5464, -19.7736, 3.0519, 6.0787, 1.0322, -0.6589, -1.6175, -2.1104, -1.9403, -1.7062, -0.9516, 0.481, -1.659, -17.7143, + 6.6516, 7.1945, 6.2582, 4.9369, 3.5619, 3.6748, 2.077, 0.4189, -2.1975, -3.886, -3.9613, -3.8644, -5.3511, -7.2609, -7.6175, -7.1661, -5.7976, -4.5218, -1.9308, 1.448, 5.0915, 4.7364, 4.6719, 3.6113, 3.3328, 2.0626, -1.533, -2.8815, -1.7589, 6.4246, 5.9081, 6.0283, 5.5237, 2.9559, -0.7124, -3.2659, -4.6501, -4.6857, -3.8757, -9.6509, -8.7268, + 12.9326, 13.6158, 13.6027, 13.5734, 13.4039, 13.8175, 13.8659, 12.7258, 9.7632, 6.3103, 2.7321, -0.5733, -3.8746, -7.086, -9.645, -10.7832, -10.3935, -8.3777, -4.8027, -1.1394, -0.1906, -2.9954, -5.6539, -5.3461, -4.393, -8.2738, -13.2039, -15.2593, -14.3519, 12.0896, 7.9934, 4.3314, 2.9333, -0.2922, -3.974, -5.2453, -5.1292, -4.2466, -2.5427, -5.9177, -24.1706, + 3.3111, 5.7192, 7.6731, 8.6538, 8.7816, 9.2367, 10.2956, 10.7802, 8.7371, 5.9609, 4.1644, 2.5137, 0.7897, -0.7157, -1.6711, -1.2978, -0.9879, -0.5737, -1.7029, -3.8746, -6.212, -6.9054, -7.5755, -8.5853, -8.663, -8.4875, -9.3126, -9.4585, -10.5934, 1.9845, 0.8889, 0.2842, -0.9179, -1.4593, -0.6826, -0.6777, -0.0392, 0.8979, 1.4414, -1.7202, -13.5455, + 14.2205, 14.4641, 13.7854, 13.0598, 13.2991, 14.8419, 16.1502, 16.5712, 15.2079, 11.8669, 7.9213, 4.5068, 2.1444, 1.2542, 2.5468, 4.6558, 4.3109, 0.6255, -5.187, -9.7699, -11.4109, -10.1544, -8.4757, -11.5168, -17.9764, -22.4698, -24.8959, -25.1837, -24.3922, 1.4299, 0.413, 0.0191, -0.2559, 0.4822, -0.2917, -0.0644, 0.3763, 0.0596, -0.3088, -1.8594, -27.0927, + -2.8758, 15.2556, 21.0124, 15.289, 2.1565, 2.6722, 2.923, 4.3949, 0.446, -0.9254, 1.7753, 1.364, 0.4328, -3.9146, -4.3331, -4.1112, -3.8881, -5.2841, -2.7539, -1.9759, -0.4884, -4.8231, -3.5586, -3.51, -2.3689, -4.3495, -5.1658, -7.1944, -6.2007, -2.475, -1.0212, 2.7562, 1.1019, 2.0472, 2.2292, 2.3273, 2.8928, -1.1663, -0.0381, -8.6541, -3.0398, + 18.8285, 20.4979, 21.7173, 23.1703, 24.2063, 23.5814, 21.0896, 17.9453, 15.643, 14.4782, 13.143, 9.6223, 4.1452, -1.1378, -5.0589, -7.8909, -10.5229, -13.0157, -15.3961, -16.7612, -17.5151, -17.5485, -17.4267, -17.8018, -18.7396, -19.9281, -20.0342, -16.863, -12.4276, 8.6336, 4.4955, 1.3996, -0.2307, -1.5565, -2.0497, -2.323, -2.1696, -2.165, -1.6041, -2.43, -20.8387, + 16.1197, 16.1677, 13.0422, 10.1574, 7.482, 4.6731, 0.9828, -1.4519, -2.9998, -3.7625, -4.0148, -4.3809, -5.3027, -6.4756, -7.1149, -7.3309, -7.7257, -6.9484, -6.1237, -4.9958, -3.5063, -1.5803, 0.7658, 1.786, 3.3939, 3.3871, 0.1351, -1.5829, -2.7956, 3.7721, 2.8811, 2.698, 2.1046, 1.6496, 1.643, 0.3146, -1.1205, -1.2974, -2.3187, -10.3263, -6.3444, + 33.2222, 30.5262, 25.0634, 19.0582, 13.7573, 9.6221, 5.3575, 1.773, -0.2567, -0.9304, -1.7632, -2.8645, -3.748, -4.1938, -4.1659, -4.0416, -4.7502, -6.0605, -7.9728, -8.5077, -8.1116, -7.8726, -8.1931, -9.0767, -10.5826, -11.3078, -11.2136, -11.3407, -11.426, 0.8122, 0.488, 0.3714, -0.1432, -0.1971, -0.2624, -0.2558, -0.0613, 0.088, 0.0913, -0.931, -13.399, + 23.3644, 24.0993, 25.3117, 28.071, 27.1967, 22.1136, 17.5071, 15.1758, 14.335, 11.14, 4.3238, -3.0833, -8.0197, -10.4359, -12.1778, -13.4366, -14.3352, -15.1818, -14.9458, -14.461, -13.872, -11.3742, -10.2486, -10.0143, -11.6705, -10.3545, -10.901, -13.4149, -14.7113, -0.0476, -0.0526, 0.7467, 1.6512, 0.2779, 1.1979, -0.1397, -0.0153, -0.2711, -0.9085, -2.4389, -16.2622, + 14.4881, 12.3355, 8.8723, 6.0773, 3.3394, 2.1115, 0.8125, 0.2147, 0.056, -0.0137, -0.2214, -0.6427, -0.7267, -1.5641, -2.3561, -2.2954, -2.4665, -2.8622, -3.0085, -3.0425, -3.2164, -3.541, -3.2388, -3.283, -3.0079, -3.0781, -3.2229, -3.1753, -3.3443, 0.6505, 0.0498, -0.1331, -1.126, -0.6639, -0.2628, -0.209, 0.4291, 0.7281, 1.5146, -0.9773, -5.3512, + 2.0621, 1.412, 0.1443, -0.6564, 0.5194, 4.127, 7.3667, 9.7238, 11.5833, 11.3655, 7.7646, 4.2923, 2.5041, 4.7009, 7.5418, 8.5568, 4.4916, -1.2294, -4.3559, -5.7809, -5.5627, -3.7357, -4.6814, -7.6996, -10.083, -11.5284, -10.0528, -10.0753, -12.7146, 1.7722, -0.0816, -0.3269, 0.6524, 2.3093, 3.6584, 1.5222, 0.4498, -1.3345, -1.6645, -6.9568, -19.683, + 25.4648, 24.2073, 21.4183, 18.0385, 14.5373, 11.3133, 7.9671, 5.3323, 3.4067, 2.4589, 2.3509, 1.9998, 0.7508, -0.6518, -2.8305, -5.4658, -7.9173, -10.2576, -11.4401, -11.9089, -12.2924, -10.4402, -8.9248, -9.352, -7.9692, -5.3374, -6.585, -12.1411, -15.7319, 4.8043, 4.3614, 2.147, 0.1372, -1.2225, -1.5199, -1.617, -1.646, -1.4994, -1.0956, -2.8494, -19.563, + 10.4477, 9.9103, 9.3167, 9.9753, 13.0396, 16.4188, 16.2006, 11.2422, 5.492, 2.0198, -0.5193, -2.2228, -3.7621, -2.3955, 0.6073, 4.9323, 5.7164, 1.908, -3.853, -5.3428, -5.1549, -4.4637, -8.4757, -12.2439, -13.8905, -14.278, -11.6814, -12.1684, -16.7752, 0.6951, -0.414, -0.215, -0.4177, -0.1652, 2.0344, 0.4827, 0.3849, 0.6488, 0.2765, -3.3105, -20.973, + 11.6894, 11.5653, 11.7767, 13.6634, 16.8841, 16.8356, 11.607, 5.3075, 0.2573, -3.0445, -5.5117, -6.5939, -7.5658, -6.4151, -2.9369, 2.581, 5.6008, 0.1628, -5.9773, -6.9647, -6.5125, -3.3783, -4.0081, -8.2854, -9.9143, -9.2857, -6.2357, -5.9007, -9.4002, 10.4552, 5.0807, 0.6307, -1.3477, -0.5399, -0.5873, -1.8383, -1.7997, -2.057, -2.8514, -5.1454, -22.0833, + 21.2161, 21.5655, 20.7743, 20.2657, 20.4741, 20.8267, 19.9547, 17.4467, 13.8013, 9.3303, 4.0053, -0.5555, -4.305, -6.2844, -5.9649, -3.292, -0.3039, -0.5084, -4.2075, -9.2735, -12.3913, -12.0554, -11.2851, -13.2289, -17.6674, -21.0646, -22.6765, -22.3615, -22.2348, 0.6227, 0.2943, 0.3156, -0.0153, -0.3658, -0.4357, -0.0101, 0.1177, 0.2549, 0.3115, -1.0897, -21.8725, + -5.8017, -5.8902, -5.5846, -4.762, -4.4881, -3.9174, -4.283, -5.1666, -6.3677, -6.8882, -6.9995, -6.8752, -7.3225, -8.7191, -9.5016, -8.754, -7.1882, -3.8658, -0.5597, 2.3798, 1.4716, 2.7987, 5.8548, 11.0383, 14.5525, 16.8697, 19.0261, 18.9539, 19.9898, 7.1234, 3.7053, 2.7491, 2.3946, 1.8894, -0.2885, -0.8988, -0.3606, -0.2356, -2.8434, -13.235, 10.7649, + 29.8544, 29.8362, 28.5318, 26.532, 23.6452, 19.329, 14.5539, 10.284, 6.4573, 3.11, 0.1941, -2.1012, -5.6884, -9.9636, -12.852, -13.5951, -13.0431, -13.2967, -13.3194, -12.2195, -9.3679, -5.0767, -1.3008, -4.8112, -12.0561, -15.7608, -16.8756, -16.0321, -14.9678, 2.1806, 0.2835, -0.2562, -0.386, -0.657, -0.1415, -0.217, -0.2013, 0.4029, 0.2038, -1.2117, -16.045, + 8.0644, 8.0499, 7.1416, 6.5893, 5.5981, 4.3993, 3.4826, 2.7143, 2.8318, 2.358, 2.4915, 1.9093, -0.3049, -1.4506, -1.2401, -2.3404, -1.2673, -2.2808, -2.4575, -3.4995, -3.9318, -5.0149, -5.3296, -3.8867, -4.4533, -4.5744, -4.0511, -4.8087, -4.7385, -9.0466, -10.6663, -9.9253, -6.6473, -2.6332, 0.9689, 4.1205, 6.334, 8.2517, 9.8032, 9.4405, 1.9804, + 9.5207, 9.0443, 7.8069, 7.3329, 7.3094, 8.0083, 9.9299, 12.4518, 13.0618, 11.3574, 7.8442, 3.8017, -0.1018, -3.9012, -6.5018, -7.0985, -5.6241, -2.4385, 1.2347, 1.1544, -2.3784, -5.3165, -6.5624, -5.5597, -5.2937, -9.9992, -14.6755, -17.3896, -17.0176, 9.0473, 5.4785, 3.0998, 0.8918, -1.3974, -3.6623, -3.5233, -2.5034, -1.0502, -1.2373, -5.1436, -25.0416, + -5.0642, -5.1796, -4.6005, -5.1034, -4.7822, -2.6885, -1.4531, -1.7854, -2.0629, -2.7192, -4.452, -3.929, -3.4335, -4.7675, -6.1288, -7.0944, -6.633, -5.1475, -3.279, 1.153, 2.3119, 6.3456, 6.1984, 9.1249, 10.9774, 11.5921, 12.7428, 11.4754, 8.3823, -9.7326, -13.5256, -14.6472, -7.0881, -1.2233, -0.9864, 6.1958, 7.2048, 10.0661, 12.3652, 11.3714, 19.005, + 6.7705, 6.0726, 4.7668, 4.7287, 5.5025, 5.2104, 3.6077, 1.7454, 0.3953, -0.348, -0.7236, -1.1397, -2.5075, -2.4282, -2.0351, -1.5354, -0.9783, -1.1816, -2.7792, -3.3855, -3.4229, -4.1416, -3.3236, -3.6243, -3.9451, -2.9592, -1.2582, 1.2767, 1.6406, 9.6325, 11.3324, 9.8681, 5.5229, 2.3829, -0.2309, -2.8115, -5.0973, -6.3038, -7.6243, -16.6711, -7.8822, + 18.7275, 18.7602, 15.1086, 10.7098, 6.9559, 5.0306, 2.7456, 0.2771, -1.9055, -2.8108, -2.7768, -3.7007, -4.2089, -5.7436, -6.2204, -5.8236, -4.9148, -3.2075, -2.8848, -3.121, -2.7428, -4.5923, -3.8926, -3.7191, -2.9927, -3.2069, -3.9982, -3.813, -2.0396, -6.3039, -3.8256, -2.1569, 0.2409, 3.3218, 4.6289, 5.0475, 3.5987, 1.8219, 1.8959, -8.2692, 2.9296, + 19.0392, 17.4654, 14.9352, 12.2077, 10.497, 11.1852, 10.4778, 8.4045, 4.8902, 1.7924, -0.876, -4.1317, -6.0495, -6.1897, -5.015, -1.439, 2.3264, 1.7138, -1.0924, -3.4019, -4.302, -3.5935, -2.4494, -6.411, -11.384, -13.3423, -14.0158, -14.8337, -16.408, 5.217, 2.0001, 0.7957, -0.6171, -0.8902, -1.2003, -1.1541, -0.6336, -0.6395, -0.6616, -2.2164, -21.367, + 10.4791, 9.9395, 9.0805, 9.1584, 10.6784, 12.7374, 14.6952, 15.0752, 12.809, 9.8648, 7.835, 7.5607, 9.0798, 10.1615, 7.6961, 2.2376, -2.6758, -6.5418, -9.4708, -10.5541, -11.1366, -10.0882, -12.2916, -15.8392, -17.7528, -18.3635, -16.7645, -14.5122, -13.097, 9.0915, 6.6105, 3.9354, -0.3391, -3.1013, -3.4367, -2.504, -2.1417, -1.8401, -1.7766, -4.4978, -24.3538, + 2.0821, 3.1287, 4.0753, 5.4302, 5.7802, 6.6537, 7.213, 6.6951, 4.596, 2.8045, 2.4487, 1.8103, 0.4415, -1.7609, -3.0165, -2.8462, 0.1898, 3.3827, 4.319, 1.6896, -2.8185, -5.5524, -7.0484, -7.5484, -6.109, -5.9753, -4.7225, -7.1165, -8.2257, 3.668, 2.9008, 1.3962, 0.7099, 1.6828, 1.2318, -0.5067, -1.7458, -1.5988, -1.6313, -6.1069, -11.5601, + 1.1497, 1.32, 1.2707, 2.0082, 2.0004, 1.8044, 1.127, -0.2158, -1.8933, -2.4634, -3.4218, -4.7937, -4.71, -4.6869, -4.1693, -4.4056, -4.91, -4.6525, -4.3514, -5.3638, -6.5281, -5.1288, -3.6008, -0.1517, 2.6878, 7.224, 11.7457, 15.7449, 17.364, 6.9238, 4.8734, 3.1279, 0.9919, 0.1466, -0.3872, -0.1158, -0.4139, -1.8167, -1.7305, -11.5996, 8.8903, + 9.7978, 8.0725, 4.8934, 3.5284, 2.7083, 3.7014, 4.0313, 4.6282, 3.9292, 3.2742, 2.0518, 0.7154, -1.2921, -1.9667, -1.5639, -1.3033, -0.5627, -0.4778, -0.7607, -2.2442, -3.8987, -4.4781, -4.252, -4.6421, -4.1577, -4.5224, -4.4218, -5.2138, -5.574, 0.7391, -0.0616, -0.3222, 0.1802, -0.1541, -0.5544, -0.09, 0.4549, 0.453, 0.6154, -1.2603, -6.8376, + 11.0218, 10.5069, 8.2672, 5.9543, 3.9578, 3.9631, 2.6698, 1.5498, 0.3926, 0.318, 0.1925, 0.7238, -0.6282, -2.8873, -3.5603, -4.0488, -2.8863, 0.6168, 3.2951, 2.8007, -0.0448, -2.6501, -4.7672, -5.2381, -5.1827, -6.3352, -6.8157, -6.003, -5.1825, 5.7059, 6.0081, 5.5317, 5.2309, 1.9392, -0.7052, -2.995, -3.4059, -4.2816, -4.2198, -8.8083, -12.1555, + 30.722, 30.4352, 28.7635, 26.8276, 23.0072, 17.1944, 10.8428, 5.1151, 0.6042, -2.9361, -6.0945, -8.6787, -10.4457, -11.4951, -12.7062, -13.0113, -13.2579, -13.2793, -13.0584, -12.0898, -10.8056, -8.6431, -7.2774, -8.7256, -10.1911, -7.2394, -2.5936, -0.3436, -0.6396, 5.5942, 2.8807, 1.9726, 1.6097, 0.9653, 0.3476, -0.8863, -1.5202, -2.194, -2.7497, -6.0197, -9.7496, + 11.0431, 11.2874, 10.754, 9.9197, 8.6647, 8.6958, 8.6183, 9.9875, 10.047, 8.3112, 7.2898, 5.9718, 4.5865, 2.1034, -0.7735, -2.4122, -3.3246, -3.2844, -4.4966, -6.4114, -8.1119, -10.1936, -10.6919, -10.5371, -10.9794, -10.4475, -10.1218, -12.43, -13.0643, -8.4396, -8.4986, -5.5124, -3.9624, -1.092, -0.4675, 2.3907, 5.5877, 7.2456, 8.023, 4.7255, -8.4177, + 12.7397, 11.0783, 9.2586, 6.5612, 4.1628, 2.3704, 1.9316, 1.0515, -1.035, -1.2451, -1.9616, -3.0021, -4.2825, -5.4905, -5.6435, -5.621, -6.6154, -6.2022, -5.0535, -4.7672, -3.5637, -2.1688, -1.0431, 0.1656, 0.9547, 1.642, 2.0989, 1.7796, 1.9001, -9.9315, -12.1933, -12.6352, -7.0282, -1.8872, 1.8245, 4.5894, 7.3621, 9.3193, 10.4805, 10.0998, 9.3097, + 15.1389, 17.4197, 18.3393, 18.5836, 17.5461, 15.0277, 11.1098, 6.8515, 2.5234, -0.3132, -2.9049, -4.0328, -5.4435, -6.6072, -7.1258, -7.1761, -6.4666, -4.533, -0.7343, 1.2614, -1.3012, -6.3734, -11.7238, -12.6667, -10.4556, -6.4641, -7.1625, -10.7517, -11.5648, 8.7437, 7.862, 8.4762, 9.1692, 5.7736, -1.6953, -4.9554, -7.2071, -8.1718, -8.3657, -9.6294, -20.1832, + 18.735, 18.8415, 17.7238, 16.779, 16.8597, 17.9978, 19.1477, 18.5999, 16.1427, 12.4936, 8.6595, 5.9831, 4.9948, 5.7667, 5.588, 1.9462, -3.6217, -9.0782, -13.3577, -15.7337, -14.0069, -9.9754, -8.9549, -15.6483, -21.552, -23.5522, -23.683, -23.3131, -23.7818, 0.3454, -0.042, -0.0575, 0.3156, 0.1128, -0.3066, -0.4222, -0.0008, 0.1796, 0.4486, -0.5731, -24.7214, + 16.6836, 16.0011, 14.2761, 12.3355, 8.6965, 4.5639, -0.4844, -4.198, -4.765, -4.1296, -4.0155, -2.9656, -1.797, 0.468, 1.9673, 2.9994, 4.5, 3.5757, 1.1168, -0.5475, -1.7944, -2.5137, -4.8674, -5.5801, -7.1945, -9.0212, -11.1995, -10.8822, -11.2279, 0.2823, -1.5628, -3.0013, -1.8679, -2.2856, -1.4908, 0.7971, 1.9446, 3.1469, 4.5357, -0.4981, -12.2633, + 19.0033, 19.2025, 17.7777, 15.3002, 12.665, 9.5501, 5.6575, 1.8616, -1.6276, -3.6035, -5.2976, -7.4545, -9.9218, -11.055, -12.1614, -12.333, -11.7581, -10.8363, -9.3486, -5.9142, -0.9878, 3.2625, 3.7572, 3.2186, 3.6513, 0.3807, -3.4386, -5.0746, -4.4758, 13.3555, 8.9978, 5.4532, 3.6182, -1.0628, -3.2096, -4.4349, -5.7492, -5.1348, -3.5353, -8.2981, -16.823, + 18.4297, 15.9331, 11.2397, 7.8129, 5.538, 4.6599, 3.1356, 2.3935, 1.0751, 1.097, 0.648, -0.216, -2.0789, -2.6802, -3.0441, -2.3536, -0.3163, 1.8936, 2.7495, 0.5565, -3.1908, -5.3708, -7.0075, -7.5402, -7.2433, -8.2848, -9.2167, -9.4201, -9.1988, 2.6256, 2.051, 1.3148, 0.5355, 0.063, -0.6332, -0.4758, -0.6747, -0.4639, -0.1424, -4.2, -12.3908, + 7.3097, 7.7813, 7.8527, 7.8546, 8.1128, 8.9506, 10.6384, 12.8363, 14.6251, 15.4901, 15.1366, 13.4976, 11.9988, 11.7295, 11.3616, 8.4914, 2.9159, -3.6536, -9.48, -13.735, -17.1927, -18.7882, -17.6248, -13.8464, -10.5674, -13.8181, -18.1434, -20.8743, -18.8591, 11.3245, 8.7172, 3.5788, -0.9416, -1.5672, -2.3545, -2.3414, -3.3449, -3.961, -3.8438, -5.2662, -25.7869, + -1.6196, -1.5619, -1.3693, -0.0041, 0.6985, 1.0211, -0.2712, -1.1631, -2.5701, -3.8567, -4.4749, -4.1959, -4.6373, -5.4392, -6.632, -6.8724, -5.3058, -4.2328, -1.9447, -0.2533, 0.7399, 0.5052, 2.5635, 6.5244, 9.7417, 10.9027, 8.3775, 5.7836, 9.5462, -0.9205, 1.3066, 3.5975, 5.1438, 4.6369, 2.962, -0.2142, 1.2689, -0.0412, -3.1056, -14.6343, 6.0567, + 14.2155, 14.8572, 14.6396, 15.6515, 18.4554, 21.3207, 21.295, 16.587, 10.7997, 7.0073, 4.3743, 2.985, 1.5061, 3.2006, -0.1576, -6.6249, -11.7054, -14.9389, -16.7542, -15.9586, -13.4133, -9.9384, -8.4859, -12.4268, -14.9176, -16.0461, -14.1275, -6.4255, -4.9741, 5.5063, 0.3654, 3.5212, 7.9053, 3.8839, -1.5841, -4.1647, -4.5145, -3.545, -1.9892, -5.3846, -20.3075, + 9.1018, 8.8735, 7.5282, 6.865, 7.5449, 8.2635, 6.4844, 3.4564, 0.6817, -1.5163, -2.2174, -2.8199, -3.288, -2.4514, -0.1202, 2.7625, 4.3459, 5.3239, 3.3628, -0.1718, -3.0498, -4.4866, -5.5655, -6.7973, -7.4857, -9.1801, -9.3929, -8.469, -7.5827, 4.3844, 4.6419, 5.2823, 3.5134, 1.9965, 0.2705, -0.4359, -2.5064, -3.1275, -3.8266, -10.1926, -14.0516, + 22.6352, 23.6582, 24.5865, 26.389, 26.4341, 23.2091, 17.7722, 13.535, 11.1208, 9.98, 8.2759, 4.0348, -1.7705, -7.8105, -12.5187, -14.9802, -16.3623, -17.382, -17.7578, -17.649, -15.5778, -12.8018, -11.4459, -14.3128, -16.352, -15.2082, -10.9596, -5.2865, -3.4553, 7.6752, 3.5999, 2.0739, 1.1336, -0.6895, -1.5345, -2.458, -2.0781, -1.8815, -2.5118, -3.3292, -17.5176, + 1.875, 1.8662, 1.4311, 0.9127, -0.1302, -0.376, -0.5434, -0.222, 1.2349, 3.6442, 6.7696, 8.9037, 8.5438, 6.152, 3.7222, 3.0903, 4.4232, 5.4581, 6.2833, 3.7218, -0.7522, -4.4112, -6.2164, -5.4842, -3.9166, -5.963, -10.1542, -15.3434, -14.5193, 13.3682, 11.1151, 8.2449, 5.7945, 3.1501, -1.3709, -6.5216, -8.303, -8.2964, -7.6878, -9.493, -25.2906, + 23.8996, 24.1043, 23.8658, 23.668, 21.5342, 15.4333, 6.3905, -1.1158, -4.6322, -5.8867, -6.7301, -7.6112, -8.9183, -10.1939, -10.8837, -8.9691, -3.9727, 3.1911, 5.9335, 0.9841, -5.6662, -8.2167, -5.1918, -3.2488, -11.7754, -15.7999, -16.0905, -9.046, -5.0555, 9.193, 1.3362, -0.8279, -1.4971, -1.9949, -1.9954, -1.0397, -0.8391, 0.6715, 0.815, -3.8216, -17.2628, + 2.1343, 3.1072, 3.1035, 2.4651, 1.077, 2.5793, 2.6348, 1.2152, -0.5649, -2.3867, -0.692, 0.8781, 1.3547, -0.8951, -2.8053, -3.6858, -2.1707, 1.958, 5.8746, 8.3664, 5.4534, -0.2992, -2.5199, -5.0547, -5.4956, -3.579, -4.0494, -3.2599, -4.7435, 6.3175, 4.364, 4.2936, 4.0751, 4.2436, 2.1309, -2.1883, -4.5757, -4.9307, -4.577, -9.1531, -11.6403, + 24.1543, 25.338, 25.2642, 24.289, 21.5268, 15.8776, 8.7349, 1.8963, -3.3513, -6.9022, -9.3648, -10.8355, -12.1831, -12.5211, -12.8565, -12.9812, -11.8854, -11.1641, -9.286, -5.4976, -0.9263, 3.4028, 4.724, 3.7754, 2.3125, -4.4255, -11.3777, -13.5943, -12.1432, 6.6341, 8.4368, 8.7627, 5.8486, 0.7153, -3.2965, -5.0124, -5.0678, -5.2114, -4.9009, -6.9086, -15.732, + 33.3595, 30.8257, 27.394, 23.1538, 18.548, 12.9357, 7.6481, 4.1721, 3.2632, 3.436, 3.9739, 4.0188, 3.3042, 2.799, 2.1257, 0.5313, -1.9459, -5.6161, -9.5935, -12.9587, -14.8978, -16.0532, -16.3206, -16.6767, -16.1054, -16.6153, -17.9698, -18.6045, -18.1317, 1.5134, 0.826, -0.0981, -0.1095, -0.5148, -0.5502, -0.3922, -0.2658, -0.1093, 0.4252, -0.7246, -17.8748, + 1.6216, 0.9985, 0.7656, 2.7126, 3.5846, 4.9869, 4.3162, 4.0409, 2.9716, 0.7825, 0.4168, 0.2302, -0.1647, -1.1633, -1.3128, -0.8806, -0.1106, -0.3406, -2.2081, -3.7852, -4.1417, -2.9134, -2.1959, -1.8077, -1.5502, -2.2082, -1.4934, -0.695, -0.4569, -7.0535, -3.1321, 1.0676, 0.9741, 1.5466, 3.3522, 3.6041, 3.9392, 1.3441, 1.8148, -7.4571, 2.7151, + 15.5981, 19.5861, 21.1052, 20.7702, 17.9972, 13.4362, 8.4295, 3.6958, -0.0748, -3.8419, -6.8494, -8.7952, -9.5977, -10.9677, -13.2231, -11.6825, -9.656, -6.9659, -3.1059, 0.6508, -2.2959, -4.9921, -6.595, -5.9531, -3.291, -4.7702, -3.987, -1.794, -2.8308, -2.5, -4.6538, -0.7258, 4.733, 8.3235, 5.3781, -0.4169, -0.0664, 0.8379, -2.0639, -8.8455, -9.7704, + 23.7863, 25.9404, 25.3891, 21.9998, 16.2579, 9.6322, 3.4737, -1.7621, -6.1163, -9.2774, -11.9071, -13.8355, -14.8079, -15.2219, -15.496, -14.785, -13.1085, -11.2726, -7.3218, -0.9826, 6.1996, 7.861, 5.9579, 4.5346, 0.9527, -4.262, -5.857, -3.1595, -2.8119, 8.3142, 3.663, 2.1376, 0.017, -1.3069, -1.1574, -2.2597, -2.0274, -1.1056, -1.2385, -5.0363, -15.6945, + 20.3765, 22.4983, 23.2522, 22.4935, 18.6192, 11.9388, 4.7215, -2.2228, -6.9248, -8.7614, -9.4361, -10.4167, -12.0447, -14.3511, -15.7581, -15.0919, -13.4051, -11.6659, -8.9412, -4.6688, 1.6099, 5.0989, 2.6335, 0.0407, 0.1956, 0.6445, -1.3875, -1.9917, 2.9449, 22.4551, 18.5214, 5.2727, 6.1503, -0.1446, -8.9143, -8.7222, -9.1792, -9.3487, -7.5459, -8.5445, -16.1222, + 11.1076, 12.0485, 11.055, 10.5716, 11.0874, 11.6622, 9.9206, 4.9761, 0.3715, -2.6436, -4.8249, -9.221, -10.4786, -11.6233, -11.899, -10.3869, -9.3054, -5.4126, -0.0922, 1.7786, 1.9733, 2.3237, 2.4041, 2.1518, -0.8245, -3.1849, -3.9744, -5.1713, -4.3894, 1.391, -2.4885, -4.1076, -3.8565, -1.6768, 1.3241, 2.8087, 3.8092, 4.3728, 3.2455, -4.8218, -10.0894, + -0.2633, -1.4544, -2.4182, -3.0882, -3.5531, -4.3925, -6.6002, -8.5372, -9.6704, -9.8444, -10.3936, -9.9956, -8.9278, -7.5639, -5.9124, -1.9933, 2.8919, 6.3172, 5.944, 4.7295, 5.0606, 5.2459, 8.2338, 8.7234, 10.0863, 10.2509, 9.9392, 9.0613, 8.1243, 1.1238, 0.9922, 1.1101, 1.8146, 2.6706, 2.2247, 1.2363, 1.1432, -0.1842, -0.9655, -11.166, 5.3441, + 6.9294, 5.0117, 2.6132, 2.2629, 4.5422, 9.5764, 14.7837, 15.8748, 11.9468, 7.4679, 4.5656, 4.3597, 5.8184, 8.6426, 5.8541, -0.7924, -5.2311, -8.036, -9.7347, -8.9, -8.2834, -6.3029, -5.072, -7.3093, -8.1284, -8.3417, -7.7152, -10.4763, -15.926, 4.7158, 2.3141, 1.3121, 1.3526, 1.5962, -0.3417, -1.386, -1.6767, -1.776, -1.6516, -4.4588, -23.6471, + 20.5611, 21.499, 21.6805, 21.4105, 19.9564, 16.4129, 11.009, 4.5495, -0.7043, -3.4671, -4.6121, -5.3523, -6.5924, -7.7881, -8.2287, -7.0226, -4.0117, -0.4161, 1.788, 1.3595, -1.3403, -3.8721, -3.965, -4.9622, -8.7031, -14.8711, -18.9891, -20.1269, -15.2011, 9.5765, 9.609, 6.3797, 4.6167, -0.3327, -3.7082, -4.7974, -5.1837, -5.3397, -4.8761, -5.9441, -20.3305, + 28.9011, 29.1365, 27.4009, 24.4914, 20.2583, 14.7607, 8.7681, 4.0956, 2.2405, 2.3157, 3.7552, 5.6036, 6.0319, 3.0401, -2.3373, -6.5825, -9.1181, -11.519, -13.0607, -13.4398, -13.0287, -11.6613, -11.3947, -12.1649, -13.2592, -14.7276, -15.9052, -16.4327, -16.1678, 0.805, 0.5113, 0.4244, -0.0076, -0.2346, -0.4785, -0.2332, -0.0629, -0.0095, 0.3865, -1.101, -17.2993, + 14.0295, 13.9502, 13.6228, 13.9615, 14.5159, 15.7344, 16.5458, 16.6583, 15.876, 14.9767, 14.5095, 14.6169, 14.1664, 10.4532, 3.0906, -3.2947, -6.9042, -10.1425, -12.3464, -13.3132, -12.9262, -11.8067, -11.4974, -15.4253, -20.2544, -22.9691, -22.5572, -21.639, -21.6312, 2.018, 1.7654, 2.894, 1.2851, 1.2694, -0.7044, -1.7554, -1.1719, -1.4637, -0.7534, -3.3831, -24.9877, + 14.3136, 12.8038, 10.76, 9.9164, 8.0164, 4.8641, 0.3656, -1.398, -2.3438, -1.8387, -0.9641, -0.4343, -1.8428, -3.9974, -5.5735, -6.9534, -5.2614, -1.8837, -0.6653, -2.2186, -4.1385, -7.9205, -4.8743, -0.0041, -1.6958, -8.8891, -5.9515, 2.5199, 5.289, -0.4214, 3.3144, 7.7656, 5.2578, 2.3868, 4.6757, -4.9484, 1.0462, -11.2993, 2.2105, -9.9881, -1.011, + 15.2498, 16.8589, 17.4454, 17.3595, 15.7318, 12.0402, 6.8196, 1.9584, -1.895, -4.1206, -5.7554, -6.5663, -7.4096, -8.0543, -8.0905, -5.7704, -1.8905, 1.4927, 2.8765, 0.693, -2.5985, -3.9517, -2.8026, -3.1264, -6.0718, -8.7896, -10.874, -11.1991, -9.5592, 1.025, 2.5513, 3.7885, 4.2634, 3.9729, 3.4142, 0.3627, -0.0631, -2.7607, -5.0823, -11.4719, -15.3324, + 19.7099, 20.3722, 20.4412, 20.5912, 20.9609, 21.5266, 21.3284, 19.9806, 17.9191, 15.7219, 13.9555, 12.9719, 11.7125, 7.8879, 1.8651, -4.0484, -8.384, -12.3338, -16.2678, -19.1476, -20.5188, -20.7942, -19.7332, -19.5087, -20.0131, -21.1706, -22.0267, -21.828, -21.17, 2.6261, 1.4238, 0.5675, 0.1586, -0.3335, -0.753, -0.695, -0.815, -0.6504, -0.3559, -1.1732, -23.1129, + 1.8825, 1.5975, 0.765, 0.8382, 1.097, 2.3121, 1.7334, 1.3645, 1.6653, 2.5832, 3.6249, 3.8831, 3.7892, 3.6596, 2.8817, 2.2713, 1.6918, 1.3161, 0.6652, 0.0342, -2.3559, -3.5644, -4.4403, -3.4709, -4.1781, -4.9507, -5.6105, -5.7659, -5.319, -4.6785, -6.2814, -4.417, -3.7355, -2.9146, -0.606, 2.7131, 5.1159, 5.7786, 5.8363, 3.1891, -2.7682, + 20.9204, 18.3266, 13.9646, 10.345, 7.1213, 4.7949, 2.3975, 0.3252, -0.8377, -1.2032, -1.3516, -1.2322, -1.3903, -2.0806, -3.2115, -3.8099, -3.7972, -3.8008, -4.4221, -4.5737, -4.8822, -4.8118, -5.0104, -5.0121, -4.8009, -5.1006, -5.4825, -5.7785, -5.6058, 0.0304, 0.0212, -0.8099, -1.099, -0.8995, -1.1798, -0.0605, 0.4825, 1.2857, 1.8683, 0.3606, -7.2005, + 5.2951, 4.6853, 3.2703, 1.4395, -0.0679, -1.5464, -4.0205, -5.271, -6.2684, -7.4709, -7.5305, -6.6769, -5.9752, -5.0052, -2.1987, 1.0365, 4.3659, 5.4876, 4.1372, 2.9011, 2.0765, 1.4275, 2.262, 2.497, 2.1857, 1.8463, 1.4213, 2.718, 2.9788, 2.6542, 4.1837, 4.7936, 4.0109, 4.2119, 2.0348, 0.3166, -0.4254, -3.181, -4.8204, -13.7789, -1.2474, + 10.5896, 10.0518, 9.5208, 11.5878, 14.9277, 14.1122, 8.4894, 2.1708, -2.5335, -5.3221, -7.6712, -9.9945, -11.5742, -11.8957, -12.0296, -10.9304, -8.1129, -3.4826, 2.2855, 6.7275, 2.7163, 2.8417, 3.8437, 1.4929, -1.9462, -3.7791, -2.6804, -3.2326, -6.1727, 14.4024, 9.7441, 3.2594, -2.4965, -1.6315, -2.624, -3.3409, -3.9874, -3.0303, -4.0633, -6.2319, -23.1513, + 12.3877, 13.4337, 14.0526, 15.3719, 16.723, 17.0301, 15.6932, 13.1714, 10.9923, 10.12, 9.9867, 8.1477, 4.6596, 0.522, -3.1428, -6.2242, -8.4106, -10.536, -11.526, -13.2012, -11.1252, -8.8838, -9.7283, -14.6481, -19.0045, -16.0374, -8.1446, -9.6615, -12.0177, -3.6514, -5.1768, -3.3816, -0.8285, 1.8774, 4.0666, 6.6919, 6.7739, 0.8553, -0.399, -6.8277, -19.582, + 7.513, 6.3917, 4.409, 3.2713, 2.4681, 1.4505, -0.7914, -2.2729, -2.7937, -1.4184, 0.5941, 1.7683, 1.7245, 2.1691, 0.8665, 0.4093, 0.8033, 3.3147, 3.5683, -0.9897, -3.9384, -5.0587, -4.1462, -2.0529, -1.2512, -5.3164, -7.9226, -1.6494, -1.1198, 3.1545, 4.178, 6.4164, 4.4137, 1.438, 1.5613, -8.5713, -1.5266, -2.1776, 0.8939, -9.7803, -10.1082, + -0.4172, 3.9814, -2.5335, 4.7982, 6.2404, 9.5386, 1.728, -2.6347, 7.9832, -10.0263, -1.023, 2.1623, 7.0028, 7.7748, 15.0971, 5.6506, 5.2734, 4.3666, -5.3182, -6.5883, -8.8498, 1.1908, 5.523, -1.1525, -3.9009, -23.1871, 0.2212, -1.9086, -20.9924, 7.1776, 8.9477, 9.4213, 0.6845, 6.7206, 6.8189, 0.9603, -10.6166, 0.5146, -13.1811, -17.4476, -7.6137, + 23.378, 25.0892, 26.2191, 26.9457, 24.6201, 18.5566, 11.6556, 4.9788, 0.6249, -3.74, -8.5904, -12.3926, -14.727, -15.9297, -15.762, -14.5514, -11.9079, -8.2268, -0.1798, 5.9532, 4.5772, 3.1484, 0.2938, -5.5237, -12.1896, -14.8172, -14.8798, -12.4827, -10.1404, 3.2764, -1.6281, -2.1589, -1.373, -0.4182, 0.5715, -0.2811, 1.7069, 1.5263, 1.5414, -2.7632, -16.8809, + 26.2968, 26.9773, 27.1574, 27.9417, 26.5696, 21.5857, 14.8761, 8.6361, 4.1683, 0.7533, -1.9295, -2.5208, -0.0812, 2.225, 0.9523, -3.4957, -8.2811, -11.7647, -14.3663, -15.2907, -14.5936, -12.5687, -12.9612, -14.8338, -16.5565, -16.2573, -15.0745, -13.883, -13.6813, 1.4448, -0.0533, -0.092, -0.0314, -0.2973, 0.5069, -0.2172, -0.1011, -0.0306, -0.0946, -1.0343, -16.8789, + 15.2599, 15.8558, 16.5112, 17.1923, 16.9184, 12.7155, 6.7767, 1.6437, -3.4349, -7.8714, -10.5492, -12.4016, -14.2321, -14.946, -15.0099, -14.2604, -12.3944, -9.913, -6.0566, 3.4214, 4.0393, 0.985, 0.9812, 5.2322, 5.1852, 2.0753, 2.8816, 0.5603, -7.1654, 13.9261, 10.8083, 1.8284, -2.6412, -3.5133, -2.9693, -2.93, -3.3031, -3.3193, -3.2617, -4.6248, -21.7463, + 17.6998, 15.3407, 11.6586, 7.2522, 2.903, 1.127, 0.287, 0.3993, 0.1515, 0.9131, 1.2039, 0.835, 0.617, -0.2241, -0.4502, -0.7194, -0.2872, -1.3096, -2.7798, -3.9323, -4.0148, -5.4557, -5.6772, -5.5259, -5.6333, -6.0967, -5.8797, -6.4353, -5.9666, -4.2226, -4.1479, -4.5146, -4.3292, -2.7654, -0.8517, 1.0845, 2.937, 4.9613, 6.0166, 5.832, -4.0046, + 6.7958, 6.618, 6.8562, 7.7048, 9.32, 10.2947, 9.2183, 6.4762, 2.7485, -0.8988, -3.443, -4.619, -6.3031, -8.1363, -8.6511, -7.2066, -4.4822, -1.4434, 2.6598, 5.1827, 2.6866, -0.9832, -2.3089, -1.3324, -0.7075, -3.4975, -7.3602, -8.3172, -6.8713, 15.6013, 14.5952, 12.4864, 10.1694, 6.7654, -5.1118, -14.7309, -11.9476, -9.2847, -6.6284, -11.9143, -21.6331, + 14.4296, 12.7223, 10.1123, 8.5522, 7.7405, 6.5977, 2.6762, -1.5488, -4.129, -3.7931, -3.089, -3.1619, -4.0464, -5.1734, -7.7679, -6.3552, -4.2463, 2.5055, 5.5392, 0.2036, -3.7031, -5.8323, -6.0258, -1.1405, -6.8812, -8.2643, -6.4325, 2.2624, 8.249, -1.6654, -1.1619, -3.519, -1.9517, -1.3057, -0.412, 0.2731, 3.0941, 3.3892, 6.7202, -3.4609, 4.9976, + 16.2171, 16.8083, 17.6167, 19.1924, 18.7528, 14.2594, 8.5818, 3.6957, -0.9158, -4.4517, -7.0958, -9.391, -11.6987, -13.394, -14.5794, -13.1362, -10.8013, -7.497, -2.2178, 3.955, 3.3524, 1.1405, 1.732, 1.1123, -4.7613, -8.88, -8.5945, -6.1985, -2.8033, 13.6191, 7.9112, 3.4818, -0.7153, -0.3308, -2.3878, -3.9144, -3.8872, -3.3753, -4.2532, -6.1481, -19.8313, + 6.8744, 6.6595, 5.9608, 5.627, 4.3932, 3.6619, 1.6033, 0.6207, 0.2849, 0.0399, 0.6193, -0.4371, -1.6617, -0.9777, 1.0971, 4.1974, 5.9086, 2.26, -0.0342, 1.3932, -0.7669, -2.8459, -3.327, -4.4869, -4.5589, -4.9693, -7.563, -7.8037, -11.7691, 6.8143, 4.0009, -0.8944, -7.1111, -6.4611, -4.2217, -1.7229, 0.436, 2.1972, 3.2561, 3.7068, -18.5017, + 18.3619, 17.7217, 16.1766, 13.4866, 10.6915, 10.2793, 11.8384, 14.1579, 15.8226, 15.6994, 14.1178, 12.1825, 10.7237, 10.1085, 8.7558, 5.2488, -0.0978, -5.2425, -10.2876, -14.5133, -15.8759, -16.5173, -16.7647, -16.0517, -18.5506, -21.537, -23.2401, -23.8593, -22.8353, 1.5487, 0.0279, -0.5628, -0.2643, 0.4887, -0.1023, -0.4874, 0.2721, 0.8224, -0.165, -1.5779, -24.7124, + 31.7198, 31.7692, 29.2043, 25.0452, 19.3123, 12.8393, 5.9234, 0.3241, -2.4789, -4.4056, -7.0192, -8.8068, -10.3571, -11.5877, -12.2897, -12.495, -12.4338, -12.1031, -11.1686, -9.2498, -5.8575, -2.3369, -1.375, -2.0352, -2.1517, -3.404, -5.9186, -8.2233, -10.44, -0.0554, -0.5312, 0.1527, 0.4184, 0.6585, 0.9224, 0.6649, 0.9519, 0.5466, -0.5067, -3.222, -11.4604, + 20.9886, 21.1123, 20.4027, 20.0167, 19.1884, 16.5783, 12.5867, 8.3317, 4.5773, 1.2778, -1.2341, -2.6474, -2.9142, -1.9783, -0.0434, 0.4668, -1.7813, -4.6738, -7.2502, -9.3057, -10.6229, -10.4876, -10.2177, -11.841, -13.179, -14.6712, -15.1393, -14.287, -13.2531, -3.396, -1.5619, 2.3074, 5.7136, 6.3342, 5.5398, 2.4437, 0.2877, -1.8718, -4.5073, -11.2895, -13.3591, + 19.3924, 20.6124, 21.6255, 22.8929, 23.6118, 22.1117, 17.5653, 12.1779, 8.8663, 7.6147, 7.1982, 7.2343, 9.0939, 9.9573, 8.6027, 6.9323, 4.6278, -0.1742, -9.4767, -17.6803, -21.359, -22.4801, -22.5914, -22.5224, -22.4181, -22.3005, -22.8483, -23.1612, -23.1052, 0.6133, 0.2252, -0.4348, -0.4131, -0.5289, -0.397, -0.218, 0.1438, 0.5713, 0.4924, -0.0541, -22.3321, + -5.4361, -5.853, -6.336, -5.5397, -4.6575, -4.7263, -5.3668, -5.7909, -7.2619, -6.2038, -4.8838, -2.3553, -0.0793, 2.8083, 6.1069, 7.9082, 8.9577, 8.4116, 6.9427, 5.3831, 4.8464, 3.2166, 2.969, 3.6037, 2.4221, 1.8058, 0.2551, -0.2588, -0.888, 1.1827, 1.8083, 1.5989, 1.9336, 1.4331, 1.415, 1.02, 0.1423, -1.1623, -0.54, -8.8315, -3.2727, + 15.8074, 16.7591, 16.8279, 14.8127, 12.3398, 10.0795, 6.3564, 1.5357, -1.2393, -3.3949, -5.2006, -6.9275, -7.1545, -7.4402, -8.2594, -9.4265, -11.1999, -12.9999, -8.0859, -4.8163, -2.9284, 1.356, 0.0774, -2.3044, -1.8591, 0.1665, -4.2809, -4.0953, 5.4946, 9.8215, 5.0171, 7.0888, 8.4199, 6.4234, 3.6409, 10.6458, 9.4642, -18.581, -21.0542, -20.8865, -9.8207, + 16.5885, 17.1406, 17.0874, 16.5509, 14.5628, 11.8287, 11.686, 12.5074, 11.7212, 10.7081, 10.1468, 9.1212, 8.375, 5.9474, 2.4174, 0.3172, -1.3076, -2.387, -7.4556, -13.1264, -14.3324, -15.1303, -14.9156, -14.1134, -15.0136, -16.5819, -19.31, -21.7927, -21.2401, -7.0652, -6.6847, -6.5388, -5.2451, -2.6953, 0.0429, 2.8899, 5.3552, 6.884, 7.0718, 5.9852, -18.2709, + 5.7159, 5.5464, 5.7456, 6.9034, 7.0731, 7.8586, 8.0236, 8.6981, 9.1036, 9.353, 10.1684, 9.7683, 7.9546, 5.4206, 1.7391, -0.2107, -1.2165, -2.1493, -3.9988, -5.8835, -7.1432, -9.2187, -9.9765, -11.168, -10.8259, -10.9835, -11.5153, -12.5521, -12.2304, 0.1902, 0.2673, 0.6601, -0.0091, -0.1874, -0.6461, -0.5035, -1.0433, 0.8599, 2.7028, -2.2908, -14.5718, + 17.6557, 17.3889, 17.6615, 17.9794, 16.5379, 12.1975, 5.9007, 0.5883, -3.1335, -4.8335, -5.4254, -6.2659, -6.3932, -5.9023, -4.4098, -0.6232, 2.7006, 4.3695, 3.8488, 2.2808, 0.7423, -2.7461, -8.2729, -11.5807, -12.4732, -11.8352, -10.1651, -11.6722, -14.1196, 8.4864, 3.3593, 0.136, -1.6129, -1.5632, -1.3569, -1.625, -0.1613, -1.1646, -1.4389, -3.0589, -22.3338, + -10.394, -11.3059, -10.7072, -9.0929, -7.9625, -7.9528, -9.4227, -10.3318, -10.941, -11.1389, -11.6416, -11.7743, -11.8888, -11.1901, -10.5924, -9.486, -5.0151, 0.7991, 6.1915, 8.4506, 7.592, 12.1623, 17.6583, 20.5566, 20.2652, 20.369, 19.7694, 19.3174, 17.7068, 3.6441, 3.32, 3.1784, 2.3126, 2.6626, 2.7456, 1.7616, 0.1272, -1.6565, -3.6722, -14.4236, 11.3192, + -5.28, -6.7018, -5.8538, -2.9829, -0.9541, -0.9051, -2.3575, -3.5615, -3.7286, -3.675, -3.1606, -4.9611, -3.9368, -5.758, -6.751, -8.289, -7.8523, -5.0164, -1.2817, -1.0886, 3.4595, 6.5066, 6.9768, 10.1455, 9.1411, 11.6105, 10.998, 12.7941, 12.4636, -8.2776, -14.0532, -15.1503, -7.3901, -2.1067, 2.8745, 5.7677, 7.7844, 9.1465, 10.3125, 11.0923, 19.6399, + 29.3262, 30.3667, 30.846, 31.0752, 29.3541, 25.4538, 21.7947, 19.7689, 18.2651, 13.3813, 5.5283, -2.7838, -9.2904, -12.5752, -14.327, -15.2147, -15.6347, -15.958, -16.2781, -16.2588, -15.7969, -15.4712, -15.0026, -15.2417, -15.4496, -14.8024, -15.4856, -15.3255, -14.2641, 0.8519, 0.0729, -0.0994, -0.0081, -0.3526, -0.2653, 0.2798, -0.1248, -0.0021, 0.1016, -0.4538, -15.6262, + 15.4867, 33.4494, 31.067, 16.7893, 6.4957, 16.0571, 16.9999, 3.5875, -1.1144, 4.8625, -0.6863, -3.8211, -1.9744, -8.9072, -8.5418, -10.0978, -9.2052, -7.2961, -7.0614, -7.4703, -6.4488, -9.4828, -7.1526, -6.4892, -6.7913, -8.1872, -9.9015, -12.0879, -12.078, 0.2229, 0.6948, 1.138, 0.0739, -0.1888, -0.1421, 0.1878, 0.2524, -0.6463, 0.3346, -1.9272, -10.914, + 5.6609, 8.4186, 9.2335, 8.5627, 6.3863, 5.2965, 4.7202, 4.121, 2.247, 0.4513, -1.5117, -3.6436, -5.3381, -8.3221, -7.4711, -7.9576, -7.8478, -7.1587, -4.1684, -2.5146, -2.1257, -2.2843, -1.1957, -1.5497, 0.8946, 0.9399, 1.4159, 1.7779, 2.9627, -5.4497, -6.1886, -3.2681, -2.133, -0.0404, 3.3281, 4.7853, 6.276, 5.5714, 2.7564, -5.6374, 7.7525, + 8.2746, 28.7187, 36.6976, 28.2924, 10.6085, 7.9432, 11.522, 11.0743, -0.8646, -3.5525, 2.5564, -2.1952, -6.5887, -4.6155, -7.3323, -7.9392, -7.8581, -8.4524, -7.5176, -8.1708, -7.7429, -8.5235, -8.284, -8.3037, -8.0554, -8.4741, -9.7485, -10.9377, -10.531, 0.614, 0.5808, 0.566, -0.0413, 0.0489, -0.0922, -0.0506, -0.0413, -0.202, -0.1189, -1.2632, -9.9199, + 11.0404, 11.4527, 12.0166, 13.1928, 15.2678, 14.9233, 9.1277, 2.3164, -2.7085, -5.3527, -7.7675, -9.0506, -9.7011, -10.3636, -8.8246, -5.5374, -1.0381, 4.5069, 6.0732, 3.0152, -2.7476, -2.7839, 0.0922, -1.8194, -6.8672, -9.4573, -9.4575, -5.7898, -3.7583, 10.8326, 2.8363, 2.0266, -5.3026, -6.6996, -2.9341, 1.7162, 6.9334, 1.7529, -2.8185, -8.3432, -20.4214, + 12.4387, 12.5027, 11.9274, 11.7982, 12.5741, 13.7391, 15.0701, 16.2946, 15.8718, 14.4312, 13.1234, 12.3489, 12.0782, 10.4253, 5.1065, -2.4414, -7.7163, -11.2866, -14.5564, -17.0603, -18.3751, -18.6502, -16.8442, -12.5688, -10.3598, -13.7062, -17.0023, -16.5492, -12.6137, 10.1763, 4.1712, 1.7946, 2.0076, 0.9052, -2.1595, -3.3835, -3.6172, -3.1645, -2.457, -4.273, -25.1913, + 23.6574, 23.796, 23.2767, 22.058, 20.0235, 16.6036, 11.9504, 7.3306, 3.6864, 1.7264, 0.9711, 0.7044, 1.071, 2.2585, 2.9655, 1.1649, -2.95, -7.6177, -11.4979, -13.5632, -15.3135, -16.4809, -16.207, -14.4023, -12.2974, -13.2762, -14.7359, -14.053, -10.8494, 8.8738, 6.6767, 4.8152, 2.7736, 0.0848, -2.4935, -3.4294, -4.0796, -4.0216, -3.7791, -5.4208, -19.2524, + 24.5799, 26.6882, 26.121, 23.6936, 19.3829, 13.8994, 6.2899, -0.2105, -4.0678, -6.8423, -8.5308, -9.6576, -10.9976, -12.5439, -13.932, -14.634, -14.8621, -14.4895, -13.6415, -12.6341, -10.1213, -4.554, 2.381, 5.5155, 4.5043, 4.6729, 1.554, -3.0055, -4.5582, 9.0263, 7.4732, 2.8612, 0.7241, -2.0536, -2.7733, -3.2059, -2.7189, -1.5532, -1.3601, -6.4198, -12.7575, + 7.6213, 8.4172, 8.9876, 10.4827, 12.2597, 15.2393, 17.4791, 18.0965, 15.0336, 10.0484, 5.7655, 2.6712, 0.2945, -1.4627, -1.971, -1.066, 1.16, 3.098, 1.1433, -4.1444, -8.297, -10.7541, -12.9877, -13.8031, -13.3996, -14.1617, -17.1393, -19.3636, -19.2476, 6.5354, 4.7648, 2.4269, 0.5232, -1.4945, -1.8813, -1.964, -1.7311, -1.653, -1.7955, -3.7308, -24.6643, + 13.5087, 13.5242, 12.7722, 11.8179, 11.1371, 10.7172, 10.5263, 11.1693, 11.9327, 11.741, 11.0557, 10.1108, 9.3715, 8.9355, 7.6249, 5.0772, 0.6107, -4.7883, -10.1816, -14.0801, -16.86, -18.9941, -20.5775, -19.3418, -15.1559, -10.7533, -12.0838, -14.9402, -13.8764, 11.0621, 7.6386, 4.9345, 4.3245, 3.4049, 0.2756, -3.5276, -6.3143, -7.1008, -6.6692, -8.0282, -24.5342, + 5.8438, 4.0764, 2.213, 1.0693, 0.2917, 0.2268, 0.3178, 0.0571, -0.122, -0.3299, -0.5484, -0.7221, -0.5026, -0.6535, -0.827, -0.8342, -1.183, -1.478, -1.3638, -1.1982, -1.1886, -1.0489, -0.664, -0.3974, -0.3609, -0.2538, 0.0154, -0.0545, -0.3807, -6.2176, -6.9549, -7.1781, -6.1296, -3.0722, 0.1331, 2.5736, 4.6982, 6.3374, 7.5607, 8.2495, 4.9755, + 0.8084, -0.3755, -1.4286, -0.3083, 0.4094, 0.3217, -1.3855, -3.3308, -4.9621, -6.0578, -7.2055, -8.3467, -8.9662, -9.8798, -8.8811, -7.5773, -5.2881, -2.3523, -0.7359, -2.064, -3.5321, 3.1588, 7.1883, 8.4965, 6.8253, 10.082, 14.4185, 16.1906, 14.7782, 2.7472, 3.178, 3.1134, 1.3703, 0.638, 0.5841, -0.0788, -0.4106, -0.5281, -1.2372, -9.3762, 9.7708, + 6.0347, 7.9306, 7.3087, 7.586, 8.0389, 6.2727, 1.7726, -1.951, -5.1723, -6.4728, -8.8919, -11.0154, -12.2556, -12.0671, -11.6595, -10.0395, -9.5655, -7.4114, -6.337, -7.0881, -7.2175, -0.9489, 2.422, 5.6816, 9.0238, 12.3465, 14.645, 14.7417, 14.2888, 2.3315, 1.6729, 1.0736, 1.3455, 0.9342, 1.8468, 0.4757, 0.6854, 0.1631, -0.4447, -10.0841, 9.3461, + 46.3168, 40.1857, 32.991, 25.4126, 18.0879, 11.1478, 4.737, -0.5137, -4.1524, -5.9367, -6.6956, -7.3488, -7.7462, -7.7468, -7.367, -6.8462, -6.4988, -7.1096, -8.3038, -9.1796, -8.8798, -8.2279, -8.5672, -9.495, -9.9228, -10.8964, -12.033, -12.6718, -12.7395, 0.0319, 0.3618, 0.0496, -0.3085, -0.3788, -0.2193, -0.1354, 0.1832, 0.4305, 0.6666, -0.6818, -13.371, + 11.6554, 10.6537, 9.3283, 9.0008, 10.6684, 13.7237, 16.302, 16.4883, 14.7382, 14.1678, 15.6614, 15.7353, 11.5669, 3.2738, -3.5965, -7.5962, -9.386, -11.3905, -12.5797, -12.1046, -11.4132, -10.6087, -9.1391, -12.6739, -14.9908, -15.8921, -11.8803, -12.2627, -17.4496, 3.468, 2.416, 1.3256, -0.8144, 0.1187, -0.6282, -0.9031, -0.1242, -0.905, -0.7535, -3.1999, -23.5324, + 12.1675, 12.7254, 13.2135, 14.1985, 15.5137, 16.9806, 16.3379, 13.0366, 8.366, 4.1955, 1.8866, 0.9609, 0.6094, 1.9753, 4.6385, 5.7596, 1.8347, -3.2804, -8.2098, -10.9983, -11.7998, -9.9732, -7.5792, -9.7338, -14.223, -17.7555, -18.8744, -17.4527, -14.5201, 8.5409, 5.7667, 4.956, 3.2564, 0.0271, -3.4128, -3.9385, -3.7737, -3.3325, -3.1328, -4.9568, -24.6241, + 9.112, 9.5643, 6.4962, 4.5254, 2.7757, 3.3307, 2.9999, 2.2174, 0.0229, -1.1179, 0.0764, 1.8616, 1.8079, -0.7101, -2.7389, -1.9102, -1.6224, -0.6549, 0.4717, -1.0044, -2.57, -7.5968, -14.5192, -14.0727, -5.93, 1.9148, 1.1204, 1.1277, 5.0226, -1.2631, 1.5663, 1.1958, 1.8714, 2.7703, 3.0917, 1.6973, 0.4038, -0.8317, -0.0474, -10.4545, 2.316, + 17.413, 18.4485, 19.823, 21.9391, 23.4308, 21.8507, 17.8532, 15.0747, 14.5401, 16.0453, 15.3416, 9.4703, 1.3616, -5.8986, -10.9098, -13.9034, -16.0964, -17.8246, -18.9143, -19.3551, -18.7588, -15.8862, -10.9884, -9.6544, -11.1991, -11.1716, -7.9982, -9.7072, -14.3257, 2.4025, 0.4919, 0.6628, -0.0126, 0.21, -0.6177, -0.6937, -0.1321, -0.2311, -0.0316, -2.0484, -21.0953, + 23.3464, 23.7587, 23.3198, 22.6359, 21.2675, 18.808, 15.3692, 11.2959, 7.5849, 4.5951, 2.3321, 0.6206, 0.1406, 1.2537, 2.7028, 2.3454, -1.0568, -5.4629, -9.1807, -11.1211, -11.633, -11.0576, -12.1808, -16.0691, -19.9208, -21.7935, -21.7452, -20.5008, -19.6545, 1.7728, 0.6055, 0.3687, 0.2898, 0.001, -0.3228, -0.5114, -0.4052, -0.3988, -0.136, -1.2637, -21.53, + -3.6391, -1.828, -2.2141, -2.8117, -2.3529, -0.6648, 0.7132, 2.6314, 3.0327, 3.8765, 4.7159, 6.0331, 6.984, 8.0909, 8.2184, 7.4433, 5.1418, 1.2303, -2.8864, -5.9181, -7.2732, -6.6797, -6.8357, -5.8669, -3.4482, -1.6078, -1.4231, -1.7328, -0.9288, 5.0214, 2.8439, 1.2445, 2.6452, 1.4416, 1.0353, -0.6548, -1.6658, 0.1662, -1.8989, -10.1785, -9.4487, + 28.59, 28.4485, 26.4597, 24.2982, 20.1833, 14.5406, 9.8101, 7.1801, 4.6176, 2.4138, 0.7001, -2.5862, -4.1909, -6.9729, -9.1018, -9.6205, -10.881, -11.6812, -10.5387, -10.434, -10.1742, -2.9512, -0.769, -7.7471, -11.9011, -14.8085, -14.9057, -14.9118, -13.0663, -2.8812, -2.2219, 3.1021, 7.3299, 4.0256, 5.0339, 1.4276, -2.9978, -1.6788, -3.5104, -7.6288, -12.833, + 17.2116, 17.2987, 16.9789, 18.3176, 20.751, 21.2753, 16.7522, 10.5133, 5.1142, 1.071, -1.6324, -4.2824, -5.9266, -7.1525, -5.1415, -0.8661, 3.3622, 1.3492, -3.6601, -7.4519, -9.7242, -8.3497, -5.386, -9.2331, -14.7369, -17.544, -17.6867, -15.904, -15.3169, 3.1075, 0.5173, 0.2992, -0.3406, -0.3, 0.1907, 0.194, 0.147, -0.5, -0.5615, -2.7535, -21.0709, + -3.1988, -4.0916, -5.2881, -5.3666, -5.4604, -5.669, -4.5675, -2.8244, -2.3646, -2.2769, -2.5378, -3.9469, -5.3482, -6.8601, -7.9884, -9.9236, -10.036, -5.5943, -1.7619, 2.5871, 4.2247, 6.6177, 8.6593, 10.3741, 10.0072, 13.2806, 13.3423, 12.7747, 13.2373, -10.5369, -13.7286, -14.4672, -7.5571, -1.4016, 2.5948, 5.6055, 7.446, 9.7262, 10.9589, 11.36, 20.0322, + 6.7783, 7.2343, 7.5331, 7.7761, 7.5074, 7.6964, 8.5725, 10.1613, 11.2545, 11.2432, 10.164, 8.2217, 5.7244, 3.0761, 1.5943, 2.29, 3.8412, 4.4389, 2.8003, -1.0955, -5.1726, -8.1891, -9.0934, -10.2132, -12.0854, -15.5298, -19.4471, -23.4981, -23.5838, 4.8567, 5.6416, 5.2432, 4.8449, 4.3077, 1.0329, -3.6054, -4.753, -5.3304, -4.6545, -7.5837, -26.896, + 8.4973, 9.579, 10.3958, 11.0142, 10.3482, 7.3892, 3.2338, 0.0093, -2.226, -2.9444, -3.5594, -3.3833, -3.1035, -3.2915, -3.1816, -1.7272, -1.5694, -1.309, -0.9698, -1.6827, -1.8826, -2.4935, -2.7299, -3.3411, -3.5987, -3.5349, -4.0664, -5.515, -4.3567, 3.6788, 2.2969, 2.2073, 2.205, 0.4179, -0.5426, -0.2219, -1.2268, -0.5609, -0.3836, -7.8702, -9.1107, + 17.6231, 17.9262, 18.5472, 20.0216, 20.3023, 17.2887, 12.1996, 7.3566, 4.7274, 3.6547, 4.0756, 5.881, 5.504, 1.8555, -4.482, -8.8437, -12.2983, -14.1074, -15.701, -15.7749, -15.0957, -12.7982, -7.9092, -8.3535, -11.5389, -11.4704, -7.3965, -5.1788, -6.015, 7.6735, 4.3849, 2.0779, 0.2256, -0.3031, -1.8488, -2.2661, -1.6177, -1.6092, -1.8719, -4.8451, -18.7476, + 12.8205, 14.2684, 15.5868, 16.7831, 17.8071, 18.5983, 18.8925, 18.18, 16.6295, 15.0296, 14.4114, 15.1384, 15.0538, 11.9286, 6.3973, 0.5192, -5.4829, -11.2613, -15.915, -19.5693, -22.3818, -23.8883, -24.2652, -24.1324, -21.657, -17.7761, -13.9964, -14.512, -13.2068, 12.3627, 9.0753, 5.2809, 2.4178, 1.3885, -1.6252, -3.9036, -5.7988, -6.3917, -5.9659, -6.8402, -21.2728, + 20.5006, 19.7859, 17.9876, 15.5578, 13.4254, 11.0431, 7.8434, 4.6796, 1.3542, -1.1988, -3.1242, -4.8289, -6.6124, -8.2071, -8.4241, -6.4513, -2.471, 0.8654, 0.4899, -3.0973, -6.3396, -7.6626, -7.3643, -5.6214, -3.7466, -5.6286, -8.3519, -11.4399, -12.9632, 6.3044, 6.3906, 3.8753, 0.4819, -1.9504, -2.646, -2.8098, -2.5547, -2.1552, -0.9715, -3.9646, -18.7636, + 4.95, 4.5607, 3.172, 2.1209, 0.349, -1.0626, -3.5132, -4.7851, -6.2971, -7.3286, -6.8625, -6.4027, -6.8983, -8.1437, -7.2159, -6.5081, -6.243, -5.2328, -3.1319, -1.8582, -0.2079, -0.4158, 1.4593, 6.3046, 10.2618, 11.6043, 10.489, 12.3236, 14.512, 7.5422, 7.3893, 6.7744, 4.7439, 3.7082, 1.4685, -2.1681, -2.4628, -6.2634, -5.1931, -15.539, 4.5238, + -7.141, -6.5576, -5.8532, -3.8568, -2.3391, -0.1389, -0.2988, -0.6152, -1.3909, -2.2598, -3.3096, -3.1888, -4.0487, -5.2444, -3.1046, -1.246, -0.3725, 1.6801, 1.7857, 1.4104, 0.4592, 2.1738, 4.1615, 5.0013, 6.4493, 6.5541, 6.132, 7.0552, 8.1032, 1.4568, 1.3024, 1.2345, 0.1461, -0.9716, 0.5343, 1.2784, 1.2357, -0.0481, 1.4818, -7.6504, 7.6553, + 2.7066, 2.4471, 1.1636, -0.0118, -0.1417, -0.8857, -3.1245, -4.8414, -6.9143, -7.764, -7.8038, -8.175, -9.1533, -9.9253, -10.0476, -7.9885, -5.4758, -0.6781, 2.4938, 3.5356, 5.3377, 10.4949, 13.4549, 12.5233, 9.2737, 7.1566, 5.3825, 4.3104, 2.6502, 1.7997, 1.0976, 0.5063, 0.9888, -0.0215, 0.8543, 0.3799, 1.5785, 0.4497, 0.6056, -8.2389, 0.7587, + 15.6038, 13.7257, 10.761, 8.3191, 6.7695, 6.1252, 5.5801, 6.3511, 7.5592, 7.0879, 5.0425, 2.3556, -0.6287, -2.0902, -1.8476, 1.1771, 5.218, 6.2633, 2.3465, -3.3395, -7.6295, -9.3311, -8.2251, -8.2814, -12.4973, -15.3911, -16.5987, -12.5111, -11.9141, 6.9187, 2.666, -0.5025, -2.5042, -3.4261, -3.1605, -1.1635, 1.6816, 1.5678, 1.5285, -3.6059, -21.5346, + 17.6619, 19.2955, 19.3999, 18.1758, 14.7064, 10.338, 5.4051, 0.8448, -2.7673, -5.8069, -8.5749, -10.4074, -11.7428, -13.3545, -14.7279, -15.0946, -14.9717, -14.1635, -12.0366, -9.1704, -5.5296, 1.7983, 8.7621, 10.6721, 9.0083, 6.252, 0.4593, -2.8951, -1.5362, 17.6102, 14.966, 11.8151, 6.0356, -2.6221, -10.0292, -11.4635, -9.0063, -4.3623, -3.1041, -9.8395, -15.6595, + 15.5037, 19.5752, 20.4189, 20.0547, 19.078, 16.8051, 14.6828, 13.1886, 10.1566, 3.7762, -1.134, -2.4739, -2.6979, -3.0349, -2.9212, -1.9641, -2.139, -4.2528, -5.4908, -5.4648, -2.3822, 1.3316, 0.1433, -8.8993, -18.5802, -23.4001, -24.1794, -22.3013, -23.3986, -0.5049, 2.4704, -2.1518, 0.1889, 8.8275, 7.0883, -1.7491, -2.8957, -3.5389, -3.58, -4.1549, -22.0424, + 22.2571, 23.2194, 23.3933, 23.2954, 22.5841, 20.0392, 15.7479, 11.5849, 8.77, 7.9103, 8.1392, 8.4163, 7.8831, 4.6926, -0.6859, -6.5062, -11.4228, -14.857, -17.9311, -19.2012, -19.8667, -20.3831, -19.2002, -15.1301, -11.0896, -11.7977, -14.413, -13.8987, -11.5493, 6.2481, 3.7903, 3.5761, 3.3013, -0.8054, -2.9745, -3.092, -3.5267, -2.491, -0.8625, -3.1636, -20.4183, + 9.8965, 9.6623, 8.329, 7.4658, 5.9247, 5.2895, 3.6738, 3.1009, 1.1973, -0.2394, 0.0744, -0.2488, -1.7673, -2.8794, -4.7879, -4.3784, -4.5885, -3.9967, -2.8591, -1.8656, -2.4063, -3.7709, -4.0771, -4.7175, -3.4331, -2.4372, -2.8219, -1.4458, -1.8932, 10.2458, 7.5639, 2.768, -9.9537, -3.5803, -1.8907, 0.2144, 0.7131, -0.3057, 0.1415, -5.9163, -11.5491, + 15.2412, 13.6648, 11.746, 11.4262, 12.464, 13.7257, 13.2285, 9.7944, 4.8606, 1.4831, -0.3682, -1.5802, -2.2343, -0.4399, 3.1592, 4.1899, -0.2603, -4.7397, -7.1446, -6.9457, -6.2341, -4.9071, -5.6164, -9.2612, -10.3548, -11.0953, -11.7433, -14.5977, -17.4609, 6.0283, 4.4046, 1.6269, -0.9371, -1.3835, -1.4248, -1.2533, -0.8106, -1.1426, -1.5174, -3.5905, -22.8504, + 10.9657, 10.2369, 8.6562, 6.5066, 5.4153, 4.3801, 3.7307, 2.9701, 3.0231, 3.962, 5.6227, 6.8354, 6.8607, 7.7333, 9.3711, 9.9052, 7.3966, 2.1887, -3.3161, -8.0311, -11.2107, -14.2345, -15.6874, -15.1299, -12.3738, -7.8431, -8.18, -10.637, -9.1168, 12.4941, 8.2803, 6.3797, 5.8238, 4.5394, 1.5368, -3.0238, -7.3749, -9.2127, -8.2187, -11.2239, -21.6561, + -1.8184, 2.4357, 5.5586, 6.9268, 6.9316, 6.6729, 5.8397, 5.6316, 4.9978, 3.5427, 2.8029, 2.1519, 1.5431, 0.6158, 0.3469, -0.516, -0.7873, -1.1647, -1.4196, -2.0573, -2.9471, -3.3866, -4.0651, -4.9043, -5.5018, -6.2789, -6.6909, -6.974, -7.4862, 0.3871, 0.0109, -0.4655, -0.7491, -0.9646, -0.7984, -0.5764, -0.2825, 0.8617, 1.8001, 0.7766, -8.6084, + 26.9824, 24.7422, 20.3883, 16.4687, 12.785, 8.7194, 4.1423, 1.1187, 0.4923, 1.295, 1.3167, -1.4325, -5.9855, -8.8959, -10.4619, -7.317, -2.2777, -2.0173, -3.2424, -2.3419, 0.2272, 1.3235, 1.3113, -5.1772, -12.0604, -15.3385, -15.4975, -15.3067, -13.9604, 3.9044, 0.9553, -0.105, -0.6867, -0.6467, -0.6666, -0.6241, -0.2928, -0.2046, -0.3915, -1.2419, -18.1483, + 17.4264, 17.8739, 18.0003, 19.1004, 20.7794, 20.0129, 15.2235, 9.3432, 5.1301, 3.7231, 2.3327, 1.2995, 1.8338, 4.1579, 7.7891, 10.5489, 10.0894, 9.6396, 4.8572, -4.9005, -15.2998, -20.5168, -23.2742, -23.953, -23.553, -22.129, -20.9638, -20.9315, -23.6395, 0.5658, 0.703, -0.1044, -0.6743, -0.6856, -0.735, -0.3973, 0.2942, 0.8749, 0.8195, -0.6608, -23.7592, + 11.0645, 10.901, 10.3455, 9.1551, 8.2401, 8.4773, 10.1716, 11.9195, 13.3973, 14.303, 14.0566, 13.0477, 11.7356, 9.5219, 7.83, 6.8087, 4.1182, -0.0372, -5.3649, -10.0547, -11.7439, -11.6649, -9.2813, -10.9454, -17.6273, -22.3121, -25.1873, -26.7049, -24.1694, 1.5313, -0.0939, -0.8118, -1.4436, 1.2266, 2.0907, 1.6972, 1.5907, -0.0005, -1.5372, -4.2496, -26.64, + 7.2201, 8.5015, 11.5206, 11.9242, 7.928, 3.2514, 0.5668, 0.7646, 1.2768, 1.9716, 3.4275, 3.9772, 2.0908, -0.4764, -2.4307, -1.9307, -0.2561, 1.3364, 0.1271, -2.1785, -4.4197, -5.1263, -6.374, -7.1163, -6.5611, -6.9173, -7.2567, -7.3864, -7.4542, 4.2215, 2.477, 1.4908, 0.9538, 0.278, -2.2207, -1.8537, -1.0888, -0.2235, 0.301, -4.3353, -11.8723, + 9.0358, 8.4259, 6.9459, 5.289, 4.7496, 6.3098, 9.2991, 13.3013, 15.9079, 15.539, 12.4964, 10.644, 9.7104, 9.7273, 8.5423, 3.6988, -2.7453, -8.0067, -11.5004, -13.3609, -14.6771, -13.2598, -11.305, -7.8208, -9.6607, -12.4588, -13.3476, -14.2784, -17.201, 1.6164, -1.2748, -1.3834, -0.4721, 0.9792, 1.3035, 2.0628, 2.1638, 0.6958, -0.7525, -4.9387, -23.7718, + 9.9565, 8.4628, 5.9625, 4.33, 2.9878, 3.3325, 3.411, 2.9855, 3.4264, 4.1032, 5.0697, 5.2769, 4.9009, 3.1001, 1.4373, -0.264, -1.896, -3.0143, -3.5656, -4.3939, -4.4464, -4.68, -5.3044, -6.0923, -5.6495, -6.5418, -7.2604, -8.5353, -7.0993, 1.0313, 1.1537, 1.5169, 0.9291, 0.7698, 0.3306, -0.6705, -0.6783, -0.1746, -0.1455, -4.0627, -9.9902, + 8.8206, 8.3311, 7.6969, 7.4773, 8.8832, 10.4436, 11.5039, 11.592, 9.4044, 5.3729, 2.7965, 1.9244, 0.844, 0.9343, 3.0627, 6.0994, 4.9989, -0.1279, -4.374, -6.7306, -7.8914, -6.9026, -5.4598, -8.4881, -12.8495, -16.5109, -17.0277, -14.2238, -9.5997, 15.6704, 10.6049, 9.844, 7.9028, 1.2354, -5.4491, -8.2374, -7.873, -7.9121, -7.2858, -8.5, -25.1681, + 28.034, 39.0868, 27.1887, 10.6361, 11.9455, 17.4394, 5.1212, 0.4727, 0.9604, -3.2583, -4.9003, -4.7245, -5.4538, -5.8998, -6.9947, -8.1227, -7.9559, -7.4467, -7.2961, -8.3144, -8.2615, -7.493, -6.2339, -6.9302, -6.771, -7.9933, -8.7878, -9.0802, -8.9666, 0.2832, 0.1164, 0.0146, 0.0499, -0.3417, -0.2028, 0.0292, -0.0176, 0.3328, 0.3092, -0.5731, -8.1546, + 13.2856, 13.6736, 13.8385, 14.28, 16.0154, 17.101, 16.3952, 13.2274, 9.9508, 8.9754, 9.0915, 10.0588, 8.791, 4.7013, -0.6836, -5.8039, -9.0189, -11.2256, -12.734, -12.444, -11.1395, -8.86, -7.8172, -12.7618, -18.4517, -20.0185, -18.1437, -12.9371, -7.3458, 15.2491, 9.0836, 7.8889, 2.1805, -3.0815, -5.2994, -5.5285, -5.1346, -5.1469, -4.4882, -5.723, -22.9727, + 13.2791, 36.046, 37.8677, 20.5156, 1.8115, 5.3912, 6.3369, -1.8419, -4.5104, -2.1483, -1.6031, -4.4187, -2.3622, -5.5552, -5.8859, -5.4153, -6.3869, -5.0848, -6.7256, -6.3113, -6.6644, -6.7067, -6.3379, -7.1113, -6.5094, -6.6908, -7.2644, -7.5701, -8.1431, 0.0788, -0.2498, 0.1241, -0.2112, 0.0855, -0.0675, 0.3132, 0.2893, 0.0553, 0.4068, -0.8245, -8.0347, + 7.9344, 6.5125, 3.7957, 3.5965, 6.7588, 12.694, 16.5097, 15.1028, 8.0593, 1.9598, -1.2146, -2.5926, -3.3772, -1.3486, 3.1728, 5.8914, 1.9225, -4.7654, -9.1401, -9.7051, -8.8318, -4.5607, -2.0376, -6.245, -8.0736, -8.0805, -5.2827, -6.9369, -11.718, 7.2258, 3.3652, 1.3586, -1.1046, 0.1664, -0.3445, -1.186, -1.2597, -1.3364, -2.1233, -4.7616, -22.1072, + 21.0378, 20.1437, 17.5203, 14.9435, 12.2481, 9.7639, 5.599, 1.4969, -1.3751, -3.1146, -3.919, -4.7517, -4.5423, -4.8816, -3.7907, -3.156, -2.1567, -0.7505, 0.1795, -0.4587, -2.1088, -3.6718, -5.6034, -7.3929, -8.2906, -9.552, -10.5896, -12.2849, -10.5415, -10.7549, -8.4301, -5.8121, -1.4994, 2.1408, 6.5891, 7.6924, 9.5764, 7.2596, 6.0779, -12.8398, -1.9629, + 10.7156, 9.5865, 7.6225, 6.9649, 7.0204, 6.9685, 5.2279, 3.7124, 2.4551, 1.6576, 1.9988, 3.6736, 4.0688, 1.8389, -1.2786, -2.3368, -0.4395, 1.0954, 3.9267, 3.5576, -1.4334, -6.6048, -9.776, -10.9008, -10.7709, -9.343, -10.2106, -9.759, -9.2378, 2.5943, 0.3766, -1.2329, -1.3523, -0.5254, -0.1927, -0.3463, -0.4383, 0.4702, 1.6846, -1.0379, -12.5558, + 24.058, 24.4379, 23.9745, 23.0444, 20.8465, 16.8979, 11.813, 7.1514, 3.368, 0.5959, -1.6053, -3.718, -5.6992, -7.0693, -6.5902, -3.1806, 1.0957, 2.1175, -1.3667, -5.8106, -7.7326, -6.3061, -6.7167, -11.4328, -17.2877, -19.9514, -19.4929, -18.2702, -17.1703, 1.8172, -0.1844, -0.2118, -0.1481, -0.6409, -0.6132, -0.3659, 0.2614, 0.3884, 0.5934, -0.896, -20.2332, + 19.4765, 20.139, 19.4603, 17.8222, 14.3397, 10.2003, 4.8581, -0.7364, -4.1646, -6.0966, -7.2789, -8.6454, -10.5389, -11.5302, -9.4624, -7.2408, -3.9524, -2.2222, -4.3879, -6.9029, -9.6078, -8.5139, -4.7196, -4.0072, -5.4425, -3.2306, 1.5193, 5.03, 5.8358, 16.6913, 13.78, 8.079, 4.9477, 0.9965, -4.7924, -7.0379, -7.8346, -6.8472, -7.4504, -10.5321, -11.1317, + 18.8135, 17.0829, 14.0965, 11.2672, 7.9285, 3.6326, 1.0246, 1.6274, 5.2441, 9.5096, 12.7855, 11.9891, 9.99, 8.1345, 7.9624, 7.3196, 8.1668, 7.4695, 3.3884, -5.5692, -13.6276, -18.3033, -22.2152, -22.3568, -16.4382, -9.9941, -12.6602, -22.2049, -24.0632, 8.03, 3.8659, 0.487, 0.5409, 0.8745, -0.3373, -1.1358, -2.3213, -3.1408, -3.2458, -3.6172, -26.2789, + -3.1846, -2.1461, -1.3884, -2.1168, -3.4536, -2.2068, -1.9328, -3.2837, -4.0724, -3.4451, -3.7064, -3.449, -5.5867, -7.8526, -8.9224, -10.9618, -10.414, -7.1444, -2.693, 1.689, 4.0196, 6.33, 6.7767, 10.2897, 10.6153, 11.6584, 13.3164, 12.9788, 10.2869, -8.7628, -13.5736, -14.7094, -7.7628, -1.0738, 2.3985, 3.7455, 7.9153, 9.1097, 10.9709, 11.7425, 19.7352, + 7.2036, 10.7988, 12.0301, 12.67, 13.909, 16.0294, 17.1742, 15.7924, 13.0556, 11.3737, 9.8981, 9.758, 10.055, 8.6757, 4.393, 0.9731, -2.5467, -5.8685, -7.3935, -7.9704, -6.2553, -7.4006, -13.7008, -21.8328, -25.5284, -24.9555, -17.274, -13.6475, -19.4157, -0.8046, -1.7221, 0.6106, 5.7975, 8.4089, 4.3333, -1.5262, -3.211, -3.4206, -4.0492, -4.4166, -25.3279, + 15.5255, 15.8281, 15.8649, 15.5717, 15.2512, 14.5946, 13.3549, 11.766, 10.2176, 8.4641, 7.0906, 6.0253, 5.1563, 4.7439, 4.4714, 3.6019, 0.9681, -2.7655, -6.2281, -9.0931, -11.2485, -13.4855, -15.2719, -16.2999, -17.251, -18.5206, -20.9106, -20.3915, -17.03, 7.378, 8.0307, 7.885, 7.6236, 5.1345, 1.2557, -3.7418, -6.8045, -8.6459, -8.6051, -9.5101, -22.9827, + 26.7348, 25.8552, 24.2536, 22.168, 19.2892, 15.067, 11.8818, 10.349, 10.6841, 11.6366, 12.5339, 12.4939, 11.6206, 9.1288, 4.6195, -0.5596, -5.8142, -10.4221, -14.3446, -17.6431, -19.9802, -21.2101, -22.1807, -21.9, -20.1487, -18.1387, -18.1454, -19.6347, -18.1941, 5.5041, 1.739, -0.1498, 0.3482, -0.1172, -0.967, -1.1456, -1.3452, -1.2394, -1.1363, -1.491, -21.2326, + 16.937, 16.4331, 14.8117, 13.584, 11.6269, 10.1575, 7.6822, 5.8162, 3.2955, 0.7078, -0.94, -2.4858, -3.3054, -4.9715, -5.404, -5.2105, -5.0578, -4.9223, -4.7159, -4.8903, -5.6388, -6.4062, -6.4586, -6.1964, -6.2205, -6.7543, -6.8166, -7.3223, -7.3349, -2.386, -1.5474, -0.5275, -0.2007, 0.87, 2.1354, 2.2672, 1.9194, 1.3885, 1.7931, -5.712, -7.0233, + 18.1837, 17.9105, 17.8502, 18.6001, 17.6649, 14.2299, 8.9135, 3.9793, 0.2595, -2.5341, -4.9127, -7.3705, -8.608, -10.0958, -9.6568, -8.5105, -6.6859, -1.7349, 3.3029, 3.1008, 0.1928, -0.6889, -2.6251, -6.034, -10.08, -12.4257, -10.0527, -7.9815, -14.1909, -0.8841, -2.2545, -2.1948, -0.1934, 1.8452, 1.587, 0.0467, 0.886, 1.7017, 2.0046, -2.5444, -18.3771, + 8.7179, 7.6147, 4.8975, 2.3828, 0.6009, 0.0492, 0.7007, 3.0024, 5.6126, 8.3164, 9.7108, 8.5643, 5.5842, 2.4437, 0.8618, 1.4883, 2.2665, 4.0837, 2.0839, -2.0359, -5.2412, -7.0937, -7.9286, -7.0963, -7.3007, -8.8955, -10.5985, -11.5307, -11.2613, 4.1091, 1.9827, 0.6908, -1.0075, -0.1945, -0.4742, -0.465, 0.2047, 0.0728, -0.1453, -4.7735, -16.8928, + 26.5577, 26.0733, 24.6549, 22.5723, 19.6449, 15.1079, 9.6936, 5.0965, 2.0343, 0.4929, -0.51, -0.7852, -0.6639, -1.6495, -4.5761, -7.3418, -9.5136, -10.9969, -12.3139, -12.694, -11.8566, -8.9787, -3.5622, 1.2887, 1.2102, -6.9904, -16.4084, -22.1027, -23.4832, -1.8879, 0.4885, 2.0094, -0.3326, -2.5347, -2.2882, -2.5729, -1.0909, 0.4876, 5.9716, 1.75, -19.5897, + 35.3242, 34.3711, 32.268, 29.4806, 25.8876, 21.5217, 17.0469, 12.7325, 8.2745, 3.717, -0.9461, -5.4939, -9.1998, -10.9322, -11.5916, -11.7605, -11.9938, -12.5431, -13.0923, -13.2971, -13.3947, -13.1377, -12.6123, -12.5003, -13.0962, -13.2815, -13.653, -14.1174, -13.9808, 0.5697, 0.0342, -0.0298, -0.0559, -0.1023, 0.0891, -0.0151, -0.1749, -0.0061, 0.0508, -0.3598, -13.8339, + 10.0703, 9.7251, 9.1433, 8.8944, 8.618, 8.9798, 8.7995, 7.6156, 6.5867, 6.0265, 5.9165, 4.8201, 3.4139, 2.636, 2.763, 3.8113, 3.0665, -0.158, -4.1852, -6.9646, -8.5002, -7.9262, -6.4833, -8.3135, -11.7801, -15.4185, -14.2921, -13.7284, -13.1365, 1.2932, 3.3955, 6.0907, 4.2778, 4.2667, 1.2855, -2.6003, -1.0796, -3.6746, -1.8634, -11.3916, -19.3656, + 23.3051, 24.1993, 23.9215, 23.6862, 23.1858, 21.5213, 18.1183, 13.5369, 8.5586, 3.3648, -2.7305, -8.4197, -12.7332, -14.9501, -15.7545, -16.1289, -14.8115, -12.7042, -10.1815, -6.8723, -4.1455, -3.1746, -3.2618, -1.9552, -2.0348, -7.0796, -14.1032, -17.0807, -15.2758, 6.0612, 4.0067, 0.6827, -0.7321, -1.3626, -1.3544, -1.3699, -1.2448, -1.0738, -0.8706, -2.7423, -19.3798, + 15.2674, 16.9866, 17.1277, 16.7099, 15.7308, 13.2318, 9.297, 4.9391, 0.8073, -2.3215, -4.1763, -5.419, -5.9209, -6.5426, -6.5178, -6.1109, -5.5659, -5.2001, -5.0134, -5.0517, -5.0368, -5.4231, -5.5314, -6.1976, -6.3703, -6.2889, -5.3624, -6.1367, -5.9099, -8.075, -7.3361, -4.4931, -3.1183, -2.2693, -0.445, 2.6648, 5.708, 7.3558, 8.7204, 1.2878, -1.4334, + 16.2521, 17.5727, 18.3716, 19.7318, 20.2218, 17.5895, 11.4595, 3.5824, -4.4163, -9.7646, -11.0944, -11.4598, -11.7153, -11.2087, -10.3436, -9.499, -7.9409, -5.7447, -1.7839, 3.2246, 5.5449, 5.2691, 3.5281, 1.4077, -0.7885, -7.8706, -13.4426, -14.7741, -11.9087, 8.1501, 11.0831, 13.4143, 10.3995, 2.9803, -3.3969, -7.2017, -8.5882, -8.4386, -8.7227, -9.6791, -18.788, + 13.3298, 15.6004, 16.9495, 17.9742, 18.6413, 18.0052, 15.3407, 10.8188, 5.7704, 1.6139, -1.5541, -4.5241, -6.85, -8.6887, -10.0915, -10.3456, -9.1067, -7.2349, -3.6908, -0.4604, -0.7272, -4.5894, -7.5233, -6.1277, -2.5212, -4.8361, -11.8782, -16.9767, -16.3176, 9.514, 11.6129, 9.6344, 6.8283, 1.8214, -5.0008, -6.9907, -7.4822, -6.786, -5.353, -7.7983, -21.5097, + 5.8509, 5.0121, 4.1809, 3.1146, 2.3783, 3.1729, 5.0219, 8.3707, 10.9759, 11.227, 8.3063, 4.3902, 0.4943, -2.3167, -1.645, 1.9935, 5.6473, 4.3761, -0.8021, -4.8923, -7.3829, -8.9257, -7.0734, -4.5608, -5.6127, -9.9029, -12.5815, -12.1258, -6.6911, 19.4769, 13.9666, 10.8452, 9.4207, 4.267, -4.7851, -10.4839, -11.6782, -11.7512, -9.0329, -10.245, -24.1213, + 21.8999, 23.2973, 23.7997, 23.4635, 22.0363, 18.0109, 11.7586, 5.0662, 0.6662, -2.2727, -5.6763, -8.5064, -10.4473, -10.5884, -9.8688, -7.3515, -1.6565, 4.9891, 8.0386, 5.1463, 1.6954, -0.6651, -6.4585, -12.0333, -17.064, -19.1042, -20.056, -19.6043, -18.5148, 1.3036, -0.0062, -0.2979, -0.3133, -0.533, -0.7489, -0.3368, 0.3007, 0.2781, 0.7521, -0.3986, -20.6963, + -10.8987, -3.8431, 0.8023, 3.7818, 5.0658, 6.8699, 5.8536, 5.2186, 3.8311, 2.242, 1.7635, 0.0185, -1.2264, -1.7443, -3.2128, -1.6985, -0.4682, -0.6943, 1.3731, 2.1612, 2.0833, 0.947, -0.8848, -2.3964, -2.7117, -2.4339, -2.8978, -3.2996, -3.6012, 2.7097, 2.9692, 3.1594, 3.0175, 3.5504, 2.5518, -0.2289, -2.095, -2.3143, -3.331, -9.9888, -7.1246, + 24.4808, 26.3759, 27.594, 28.3806, 27.5669, 22.5831, 15.7417, 10.5723, 9.0486, 9.8475, 11.5983, 11.3131, 7.1102, 0.2086, -7.1702, -11.973, -14.3609, -16.1449, -17.3317, -17.8091, -17.4066, -16.0482, -15.0664, -15.2895, -16.4422, -17.0076, -17.0725, -17.2911, -16.0079, 1.3349, -0.0323, -0.0023, -0.0696, -0.4582, -0.2103, -0.2903, -0.1486, -0.0517, 0.5839, -0.6555, -18.4443, + 17.9414, 16.0904, 14.3699, 13.3391, 11.1223, 8.3964, 4.984, 2.4988, 0.7921, 0.1608, -0.231, 0.1816, -0.4705, -2.1166, -2.9171, -3.7835, -3.0302, -2.2559, -1.96, -0.9583, -1.2307, -3.4055, -6.3253, -8.4085, -9.7194, -10.3891, -10.6675, -10.8207, -11.1873, 1.0986, 0.4777, -0.0911, -0.085, -0.2734, 0.014, -0.2098, 0.7129, 0.898, 1.8977, -4.4395, -12.1029, + 12.4723, 14.3737, 15.7331, 17.5345, 18.5865, 17.4102, 13.1675, 8.1222, 3.7914, 0.4168, -2.7856, -5.0694, -6.1658, -6.8186, -6.5122, -3.9192, 0.1995, 5.0703, 4.8669, 1.2909, -0.9029, -1.6452, -6.8885, -13.7427, -17.9265, -18.6395, -13.8409, -11.8927, -16.286, 1.0018, -0.413, 0.2921, 0.9706, 3.0372, 2.3311, -1.1419, -1.468, -0.837, -1.0945, -2.6785, -23.0503, + 16.1352, 15.6199, 13.6322, 10.9321, 8.0808, 7.3912, 8.2284, 10.3433, 11.9724, 11.5988, 9.3631, 5.6849, 2.7468, -0.1363, -1.7113, -0.5317, 2.3026, 3.9081, 0.3916, -4.3635, -7.2068, -8.5384, -8.455, -8.954, -13.2029, -18.1608, -21.6849, -22.2538, -23.132, 1.1059, 0.2225, -0.9789, -1.0458, -0.6792, -0.6786, -0.0893, 1.8547, 2.2928, 0.8548, -2.8591, -24.9911, + 28.0419, 26.8927, 23.9676, 20.3423, 17.0949, 14.1432, 11.117, 8.5048, 5.9497, 3.7523, 1.8284, -1.1682, -4.22, -7.3805, -9.6413, -9.8772, -7.8838, -5.3446, -3.541, -3.9253, -6.0372, -7.8179, -8.639, -8.2594, -11.0251, -14.9594, -17.1292, -17.6345, -17.1513, 2.0146, 1.0165, 0.2708, -0.3124, -0.5924, -0.7003, -0.5256, -0.1176, 0.1111, -0.074, -1.0907, -18.2597, + 30.4937, 29.9533, 27.013, 23.2537, 19.3056, 15.2225, 11.4303, 9.6244, 9.1658, 8.8058, 7.5946, 3.9214, -0.3706, -4.6724, -8.3883, -10.6272, -11.6333, -12.3129, -12.9451, -13.0994, -12.8851, -12.729, -13.3639, -13.9071, -13.6304, -13.0095, -13.0398, -14.2416, -14.9284, 0.6244, 0.4573, 0.2518, -0.4563, -0.2954, -0.1108, -0.0098, 0.1405, 0.0912, 0.3156, -1.0087, -16.5521, + 23.7058, 24.6386, 24.654, 23.9896, 22.7528, 20.4522, 16.9148, 13.0348, 9.6982, 7.0016, 4.5976, 2.122, -0.6149, -3.6746, -5.8863, -5.9902, -4.5281, -3.6266, -4.892, -9.1128, -13.5269, -16.4106, -17.2411, -16.4096, -15.1425, -15.8149, -18.5726, -21.0323, -21.086, 0.97, 2.5909, 2.5737, 1.8731, 0.5116, -0.3889, -0.5545, -1.3812, -1.8817, -1.7258, -2.5873, -20.1722, + 22.205, 22.3808, 20.3781, 16.4796, 12.6684, 8.8562, 3.8726, -0.891, -3.6288, -4.2849, -3.4387, -1.6917, 0.1253, 1.9297, 2.5614, 1.1487, -1.7631, -3.8451, -4.6916, -4.6895, -4.3072, -5.2689, -7.0584, -8.3927, -8.7357, -10.2762, -11.8104, -13.7994, -14.0324, 5.754, 5.5094, 3.1104, 0.8059, 0.0318, -1.6334, -2.2746, -2.0707, -2.1335, -1.8766, -5.2228, -18.1315, + 17.6753, 18.8195, 20.1357, 22.2056, 22.9569, 20.8704, 15.5249, 10.2701, 6.9749, 6.5302, 7.5814, 7.0271, 2.6959, -1.7891, -4.8427, -7.5373, -9.7567, -11.089, -11.6891, -11.88, -12.2196, -11.3183, -11.2853, -12.8185, -14.2184, -14.2772, -13.2856, -15.1315, -16.1298, 1.6839, 0.9589, 0.5363, 0.356, 0.0003, -0.3851, -0.4445, -0.1741, -0.4978, -0.0434, -1.9906, -19.7528, + 16.983, 17.0052, 16.9926, 18.4021, 19.9925, 19.1283, 15.4081, 10.3401, 5.5724, 1.5019, -1.4332, -3.0065, -3.3422, -1.3956, 2.0439, 4.2794, 1.1281, -3.7178, -7.4632, -8.5376, -7.6364, -6.3039, -11.6545, -18.3967, -21.4453, -20.788, -16.5366, -10.0359, -7.0843, 11.0713, 4.6537, 0.5072, -0.3393, -0.6602, 0.5953, -2.0626, -2.4851, -3.0603, -3.5773, -4.6428, -20.8691, + 17.7707, 19.5364, 20.6287, 20.9849, 20.093, 17.6674, 14.5484, 11.0817, 6.902, 2.2545, -2.3356, -5.7371, -8.9898, -12.8304, -15.5822, -17.0433, -18.8124, -19.7104, -19.4116, -18.1842, -15.3531, -8.7155, -0.1993, 4.7176, 5.4518, 4.7364, 1.7967, -2.2008, -3.0647, 15.041, 12.3154, 5.6659, 1.3689, -3.8672, -5.9083, -6.0931, -4.9235, -3.3736, -2.9423, -7.2832, -16.8582, + 9.1549, 8.6933, 7.899, 7.7096, 7.5098, 8.0171, 9.241, 10.6919, 12.1971, 13.4831, 13.6508, 14.1654, 13.7371, 10.9089, 4.6506, -2.3217, -5.6454, -8.0201, -9.9057, -10.0159, -10.6042, -10.3898, -8.1978, -9.743, -12.7378, -17.4512, -17.2848, -13.59, -15.8022, 0.6882, 4.3643, 6.04, 2.5052, 2.9297, 1.4706, -1.9898, -0.8867, -4.2772, -3.045, -7.7994, -22.2645, + -7.8843, -6.8506, -6.0261, -4.4439, -3.8369, -1.9649, 0.3352, 2.3185, 3.0465, 3.3257, 3.554, 4.668, 3.7349, 2.5291, 2.4128, 3.779, 4.5682, 5.6219, 5.4149, 4.7479, 2.2185, -0.8515, -1.7161, -2.4559, -2.0632, -2.2051, -3.7165, -3.1032, -5.1569, 8.135, 6.3528, 5.3232, 1.0605, 1.2735, 0.2509, -2.2104, -2.9957, -3.4893, -2.5108, -11.1898, -12.1806, + 19.3396, 19.941, 20.3727, 21.0809, 21.0327, 19.1352, 15.1028, 10.7594, 7.8609, 7.5499, 8.5005, 9.706, 9.1824, 5.3617, -1.3028, -5.6212, -8.2717, -9.5373, -9.7484, -8.8869, -7.1221, -9.045, -14.6697, -18.5948, -20.2891, -20.4076, -19.813, -20.1946, -21.4218, 1.2915, 0.6782, 0.3569, -0.0683, -0.483, -0.2926, -0.3937, 0.261, 0.1608, 0.1333, -1.644, -22.5256, + 2.7246, 2.5148, 1.4831, 1.8238, 1.6121, 2.4035, 2.7381, 2.9387, 2.1358, 2.0826, 2.3275, 2.3406, 1.9098, 0.1135, -0.7424, -0.9928, -0.9805, -0.2098, 0.5803, 0.3688, 0.0187, -1.6561, -1.4168, -1.4577, -1.3632, -2.614, -4.7663, -7.0691, -6.8479, 2.3665, 2.3301, 1.9626, 1.0968, 1.9491, 1.1267, -0.1355, -0.0256, -1.2772, -1.4379, -7.9556, -8.3907, + 4.529, 1.5249, 0.3659, 0.0056, 0.863, 3.3152, 1.1307, -3.3632, -4.3601, -3.7553, -5.0257, -5.6659, -5.3754, -4.9885, -4.3119, -4.9927, -6.0531, -10.2279, -4.3307, 2.1887, 3.8591, 8.8378, 4.5088, 3.9006, 4.9936, 11.1237, 3.014, -1.5171, 9.8068, 13.2445, 7.3306, 5.9252, 9.0687, 7.7216, 4.0675, 11.9777, 11.311, -23.2633, -23.8643, -23.5193, -4.4759, + 22.151, 23.1727, 23.3097, 23.0639, 21.6223, 18.4164, 13.8969, 8.9695, 4.5053, 1.2957, -1.3036, -3.3247, -5.1402, -7.1172, -8.6948, -7.8753, -4.6461, -1.4461, -1.0227, -4.3094, -8.8842, -11.9962, -11.9234, -9.0257, -6.5369, -10.3321, -16.4292, -19.9706, -20.425, 2.3851, 5.8201, 6.5059, 3.9876, 0.333, -2.1429, -2.898, -3.4857, -3.4682, -2.4183, -4.6186, -20.078, + 11.7456, 12.7989, 13.3162, 13.8312, 14.7779, 15.3799, 14.0233, 10.9089, 7.3194, 4.1768, 1.7992, 0.0512, -0.9458, -0.5202, 1.3786, 3.486, 2.0668, -2.392, -7.4022, -10.759, -12.9261, -14.3064, -12.7761, -8.6791, -8.3015, -10.8632, -13.2729, -14.2798, -9.6355, 15.8594, 13.6933, 9.1741, 8.4349, 3.8782, -4.9728, -8.7226, -9.3197, -9.3643, -8.7767, -9.8839, -22.469, + 22.5139, 20.9546, 19.1373, 16.905, 14.6133, 12.3135, 10.2395, 8.4844, 6.951, 5.0069, 2.4662, -0.438, -3.5684, -7.0424, -9.9771, -11.1936, -9.88, -6.3251, -3.0189, -1.9735, -4.9442, -9.7372, -12.9352, -11.8709, -6.8801, -5.688, -9.6188, -12.4995, -11.9948, 12.0588, 11.2938, 8.1711, 2.396, -3.1587, -5.3733, -5.898, -5.622, -4.8347, -3.2857, -5.7474, -21.5935, + 26.6734, 23.862, 18.347, 12.7193, 8.0473, 4.8602, 2.4155, 1.4627, 1.0558, 0.6193, 0.2671, -0.5986, -1.6798, -2.4678, -2.2065, -2.936, -2.8372, -4.0092, -4.438, -5.3046, -5.8491, -6.4148, -7.4157, -7.9456, -8.4776, -9.0352, -9.1998, -9.5061, -10.0078, 1.63, 1.341, 0.6385, 0.2013, -0.3629, -0.2927, -0.3661, -0.3133, -0.063, 0.4392, -2.852, -12.0787, + 9.0155, 7.9133, 6.4106, 6.4968, 8.6477, 11.6576, 14.8601, 16.0323, 14.2529, 11.8653, 10.9041, 9.9373, 7.2309, 2.3059, -4.1636, -8.0163, -9.7982, -12.7129, -15.1421, -15.4797, -14.8005, -12.834, -10.4715, -5.856, -5.3611, -5.0344, -3.584, -5.3517, -8.924, 11.043, 4.7986, 3.1188, -0.3636, -1.4561, -1.9319, -2.5464, -2.3041, -2.3666, -3.0258, -4.9659, -22.6702, + 9.0489, 10.4274, 10.5425, 10.8125, 12.0032, 13.7184, 13.0711, 9.6959, 5.4837, 1.6077, -1.9964, -4.4495, -7.8808, -10.2103, -11.6407, -11.4255, -9.7241, -7.5467, -3.5478, 1.8951, 3.5718, 1.5955, -0.5403, 0.5662, 0.2415, -4.3154, -9.5295, -11.0052, -10.4693, 11.1024, 7.2333, 6.1462, 4.3929, 0.7029, -2.0309, -3.7294, -5.1402, -4.8388, -4.6151, -9.2233, -21.2734, + 11.5593, 10.342, 8.917, 7.7962, 6.0867, 5.9638, 3.8519, 0.4188, -0.7715, -1.3184, -1.5894, -1.6173, -0.5956, 0.0397, 0.998, 0.672, -0.2103, -4.0838, 0.9485, 2.7667, 1.7723, -0.8231, -4.4419, -7.1686, -8.5571, -4.2281, -12.0695, -12.5608, -2.0974, 7.0256, 2.5786, 2.8194, 7.2989, 5.3493, 3.5256, 11.6032, 11.1767, -16.6084, -17.8153, -16.9535, -14.6567, + 24.2288, 25.1078, 25.3408, 25.2954, 24.689, 22.7229, 18.9908, 14.5853, 10.6023, 7.4918, 5.2132, 4.666, 5.1836, 5.0476, 2.8795, -1.3269, -6.117, -10.7585, -14.7563, -17.5071, -18.3274, -18.4398, -17.9983, -17.57, -18.5575, -19.775, -20.4184, -20.5476, -19.9453, 1.4677, 0.899, 0.5256, 0.5195, -0.193, -0.5086, -0.7678, -0.6113, -0.2499, -0.1187, -0.9625, -20.088, + 1.3606, 0.3524, -0.4981, -3.0376, -5.4591, -5.1861, -5.3381, -7.9395, -4.6276, -1.6746, -2.1073, -1.772, 2.3082, 5.262, 5.3649, 4.6501, 3.6803, -1.4394, 4.494, 9.4882, 7.6591, 6.7428, -0.6196, -2.1749, -1.2855, 2.9511, -4.6673, -9.5251, 3.038, 18.0806, 14.1151, 9.121, 5.7949, 2.4151, -7.5054, 6.895, -0.4827, -16.5385, -16.07, -15.8252, -15.5778, + 21.5243, 22.4067, 22.6543, 21.9383, 19.0581, 14.0232, 8.4188, 2.8494, -1.1924, -2.9917, -3.8222, -4.1823, -4.8633, -4.9565, -2.8338, 0.9516, 2.0941, -1.6445, -6.8552, -9.959, -11.1205, -11.0602, -8.6668, -7.9525, -10.6286, -14.095, -13.9349, -10.3116, -4.8478, 13.9994, 11.9398, 8.001, 4.2542, -0.6981, -4.9047, -6.1557, -6.5212, -6.7797, -5.8456, -7.2894, -17.9998, + 13.8275, 13.6751, 13.2793, 13.1536, 13.5104, 14.6497, 15.6909, 16.1684, 15.2109, 12.8857, 9.6156, 6.423, 4.2876, 3.2525, 3.1015, 2.9273, 0.8232, -3.76, -9.4442, -13.3046, -15.6203, -16.1398, -14.4329, -11.4384, -11.9914, -16.0394, -20.1422, -21.4553, -18.7137, 9.9896, 6.0754, 2.5716, 1.2147, -0.1252, -2.8394, -3.5768, -3.1998, -3.2277, -2.5626, -4.3197, -26.1243, + 1.0072, 1.0349, 0.4547, 2.0233, 3.1568, 3.6248, 2.6871, 2.1595, 0.3986, -1.1817, -0.8372, -0.4964, -1.131, -1.353, -1.2089, 0.5624, 1.6332, 2.6953, 2.6143, 2.1661, 1.0687, -0.5002, -1.863, -2.0422, -1.929, -2.0051, -4.7328, -5.7009, -2.3057, -9.2017, -9.126, -10.3545, -1.5749, 2.8548, 5.5584, 7.3199, 8.4704, 7.1113, 6.4743, -7.532, 8.8174, + 22.3237, 20.1229, 16.3186, 14.9885, 15.806, 14.2422, 9.0206, 4.5767, 2.3692, 1.2439, -0.3609, -2.4418, -4.3713, -8.0945, -10.811, -9.9282, -5.6299, 1.8658, 5.9594, 1.6554, -4.8836, -8.0129, -7.8686, -4.1518, -10.8846, -16.3956, -17.6436, -10.8807, -8.1336, 8.1699, 0.1374, -2.1155, -2.7808, -2.5717, -2.5099, -1.4743, 0.402, 2.8792, 2.7754, -2.9117, -19.9846, + 14.9448, 13.3235, 11.069, 7.797, 3.6467, 1.2905, -0.1418, 0.0865, 0.0848, 0.1249, -0.0042, -0.4006, -0.5457, -2.0216, -2.4005, -2.6631, -2.7574, -3.493, -3.6341, -4.853, -3.8008, -4.5467, -3.9983, -3.1834, -3.3005, -2.257, -2.3485, -2.8054, -3.2121, -8.3072, -10.2892, -11.0655, -7.2025, -2.5835, 1.3158, 3.9103, 6.1494, 8.7822, 9.4411, 9.849, 4.1623, + 17.4109, 16.3957, 12.7323, 9.0568, 6.0296, 4.0628, 1.3809, -1.0636, -2.5917, -3.1282, -2.4806, -2.6332, -2.6331, -3.0197, -3.1246, -3.2078, -3.2369, -3.3087, -3.5259, -3.6952, -3.2777, -3.5126, -3.3483, -4.6082, -4.5229, -3.9702, -2.8815, -2.2298, -1.0686, 10.2492, 8.7238, 6.5287, 4.1319, 1.3909, -1.3457, -3.1912, -4.083, -5.8573, -5.7467, -10.8007, -10.7504, + 3.681, 4.8086, 4.9739, 5.5677, 4.9032, 4.1256, 1.8122, 0.1556, -1.1456, -2.1369, -2.2315, -2.0785, -3.1848, -4.0677, -5.2026, -5.8769, -6.5043, -6.1685, -5.6023, -5.9105, -4.2511, -1.3453, 1.8335, 3.4033, 5.1448, 5.5509, 4.8678, 3.4921, 1.3864, 4.5899, 3.1561, 2.1086, 1.0104, -0.3847, -0.6586, -0.6429, -0.112, -0.4119, -0.3363, -8.3185, -3.2346, + 3.1333, 2.2434, 0.566, -0.1689, 0.6551, 3.137, 6.4778, 9.1712, 8.4572, 6.33, 4.6298, 2.8657, 0.1787, -1.1319, -0.2827, 2.3196, 5.5007, 6.1676, 2.4317, -1.1696, -3.2988, -3.3141, -2.9589, -3.536, -5.2348, -8.6527, -10.1506, -11.6535, -12.7119, 12.8762, 10.2239, 6.7637, 2.0074, -1.9484, -4.8866, -5.3018, -4.5051, -4.3255, -3.6989, -7.2049, -23.9005, + 8.622, 10.8825, 12.2872, 13.3601, 14.228, 15.3604, 14.9416, 12.814, 8.4375, 3.9118, -0.1235, -3.3572, -6.8491, -10.5514, -12.6045, -13.2373, -13.4285, -13.2888, -12.4858, -9.8652, -5.1267, 0.837, 1.7581, 3.1241, 4.135, -0.4102, -5.4532, -8.806, -9.1118, 14.9701, 12.4418, 7.1314, 0.5687, -6.407, -6.8941, -5.5568, -3.3084, -2.3663, -1.6449, -8.9346, -21.6106, + 19.1182, 16.6713, 12.8335, 8.8739, 6.1759, 6.223, 7.5297, 9.2506, 9.4142, 7.8053, 5.9066, 4.3378, 3.9155, 4.5696, 4.9822, 3.2409, -0.8415, -5.8082, -9.1525, -11.0999, -12.9425, -14.8404, -14.6104, -11.5397, -8.3035, -9.3615, -9.7422, -9.9642, -12.6415, 4.2777, 1.5675, 1.0684, 0.6135, 0.0628, -0.5807, -1.1085, -1.0788, -0.8209, -0.6136, -3.3875, -20.5875, + 0.8644, 0.924, 0.5001, 1.9751, 3.9631, 6.3687, 6.1077, 3.622, 0.7094, -1.0962, -1.8495, -2.7933, -4.0125, -4.8808, -2.1854, 1.6422, 4.3506, 5.1936, 3.1952, -0.0683, -2.2673, -2.2756, -2.5661, -3.5305, -3.3037, -2.7368, -2.4517, -1.7145, -1.6839, 4.7659, 4.9768, 3.8161, 1.7084, 0.2338, 0.0457, -0.5947, -0.8458, -1.4961, -2.2835, -10.3266, -8.0604, + 22.8493, 23.0279, 22.4564, 21.783, 19.763, 14.2941, 7.4867, 2.4477, 1.1542, 1.702, 2.145, 2.1381, 2.9526, 3.5821, 3.514, 2.5293, 1.8263, 1.6906, -0.1177, -4.358, -9.4178, -13.6122, -17.0109, -18.1586, -18.2289, -17.0887, -18.0638, -20.2393, -21.0462, 1.905, 0.4924, 0.1429, -0.1603, -0.2972, -0.2106, -0.5323, -0.0051, -0.0488, 0.0713, -1.3573, -21.7449, + -5.0691, 5.7916, 20.3977, 33.7608, 20.5478, 6.3862, -0.6167, 2.4285, 7.7738, 0.648, -5.4985, -5.1477, -2.1058, -9.1202, -9.7561, -5.6897, -8.4994, -6.6489, -4.049, -6.39, -1.1222, -4.7105, -1.2435, -3.1404, -0.467, -1.2691, -3.2353, -6.3597, -7.5957, 2.6335, 2.9453, 2.3526, 1.7483, 0.5793, -0.6841, -0.692, -0.588, -1.6805, -2.0348, -4.5797, -8.0873, + 27.8982, 26.1875, 22.3314, 17.8436, 13.657, 9.3782, 4.5001, 1.0587, -0.1319, 0.5334, 2.2176, 3.9007, 4.3904, 2.8784, -0.5056, -2.7187, -4.2442, -4.9618, -6.1501, -6.656, -6.3475, -6.6372, -7.4694, -9.822, -14.653, -16.2989, -16.6133, -16.9745, -16.5912, 1.5751, 0.2732, 0.392, -0.1605, -0.6644, -0.5397, -0.03, -0.1057, -0.0387, 0.4893, -1.1907, -17.7674, + 4.0687, 5.1941, 6.0984, 7.7169, 8.4142, 8.8229, 7.325, 5.7734, 4.1436, 2.4793, 2.4633, 2.0981, 1.079, 0.0726, -0.0934, -1.1969, -2.7251, -3.5007, -3.7768, -4.1983, -4.436, -4.9365, -5.3239, -6.0842, -6.5913, -6.0399, -5.6196, -5.4516, -5.7753, 2.3864, 4.1318, 4.1698, 4.0758, 2.9462, 1.5278, 0.0907, -0.4889, -3.3101, -2.5223, -13.0073, -9.7421, + -2.5217, 6.6906, 18.938, 32.5385, 26.0727, 10.4378, 1.8923, 3.892, 11.1274, 10.8157, 0.2901, -2.1358, 1.8304, 0.111, -6.1198, -3.9839, -1.5639, -5.813, -5.0685, -6.2978, -9.356, -8.6952, -9.9906, -9.6668, -9.281, -8.9004, -9.6041, -12.9599, -12.678, 1.0846, 1.273, 0.8512, 0.3292, 0.2685, 0.1416, -0.4299, -0.2512, -0.6945, -0.7869, -1.7857, -11.2964, + 9.0608, 8.3549, 5.9106, 3.0223, 1.5989, 1.4872, 0.5967, -0.7899, -2.0584, -2.6475, -1.994, -0.9341, -0.2649, 0.8782, 0.819, 0.7941, 0.2218, -0.275, -0.3771, -0.9402, -2.1665, -2.7001, -2.978, -2.6056, -1.981, -2.2466, -2.1946, -2.6591, -2.9316, 2.9882, 2.9231, 2.3934, 1.2468, 1.7808, 1.5958, 0.9538, 0.0307, -1.6679, -1.9384, -10.3063, -6.9292, + 25.3209, 26.4747, 25.0162, 21.0118, 15.7497, 9.7187, 3.2049, -2.7534, -7.5484, -11.3498, -13.8939, -15.3292, -16.7275, -17.7766, -18.3047, -18.0188, -16.5419, -14.814, -11.1748, -6.2506, 1.1228, 5.4465, 3.3274, 4.0262, 6.8686, 6.7842, 4.545, 4.7788, 7.0872, 14.4073, 8.6959, 4.9137, 0.7333, -0.0689, -3.2729, -3.9427, -4.6901, -3.7843, -4.7606, -8.2309, -11.1556, + 39.324, 35.158, 30.1649, 24.8807, 19.4559, 14.1503, 9.3376, 5.7395, 2.9171, 0.8743, -0.16, -1.561, -3.3663, -5.479, -7.0899, -8.1039, -8.6121, -9.3362, -10.6742, -11.7063, -11.8889, -11.631, -11.7325, -11.7388, -11.4894, -12.8703, -14.4784, -15.0647, -15.0195, 0.4215, 0.7196, 0.4543, 0.0332, -0.2347, -0.2869, -0.3136, -0.1185, -0.0711, 0.1485, -0.7523, -15.3163, + 4.1198, 2.4046, -0.9207, -3.0537, -4.9411, -4.5132, -4.0855, -3.8951, -3.8661, -1.0021, 0.5493, 0.6922, -0.1138, -0.3066, 0.1108, -0.0251, 0.8424, 2.6646, 9.217, 6.3754, 2.4274, 3.211, 3.9376, 2.5394, 1.3314, 0.0248, -3.5589, -5.2404, -4.9255, -3.5255, -3.1009, -3.7604, -3.47, -2.8733, -1.9992, 0.5113, 3.0512, 5.1249, 4.8231, 5.219, -1.6532, + 3.662, 2.9859, 3.004, 3.0506, 2.2625, 2.4007, 2.1773, 2.2676, 1.7231, 1.4288, 1.216, 0.5069, -0.1552, -0.1104, -0.1481, -0.3494, -0.2743, -0.5949, -0.9982, -1.2915, -1.7757, -1.8432, -2.05, -2.8592, -2.5411, -2.0302, -1.9641, -2.8754, -4.8244, 7.6823, 3.2328, -2.8255, -7.4261, -7.6683, -4.0922, -1.2719, 1.1834, 2.9852, 4.1242, 4.0762, -14.2392, + 12.2682, 12.4958, 10.637, 8.6802, 6.1895, 3.3521, 0.012, -3.1196, -5.8915, -7.9346, -8.4726, -9.2365, -10.2529, -11.6156, -12.3872, -11.4245, -9.0191, -6.8545, -3.2918, -0.0972, 1.404, 0.7813, 2.7012, 7.4433, 10.4513, 8.1526, 4.822, 3.6293, 6.5779, 3.5887, 2.5442, 4.8598, 3.9894, 2.1825, 1.899, -1.1549, -1.3419, -2.5535, -1.8075, -12.206, 0.8433, + 15.4243, 14.3712, 10.5979, 6.0053, 3.6236, 3.166, 2.6457, 3.0378, 3.3307, 2.9774, 1.6056, 0.6289, -1.2252, -2.5293, -2.5259, -3.3644, -3.2999, -2.9968, -4.1243, -3.1379, -4.5943, -5.1946, -6.5332, -5.4258, -4.3474, -2.458, -3.2897, -3.9496, -8.4184, 12.5953, 13.0978, 8.0807, 2.08, -3.4741, -5.6039, -6.0827, -5.2556, -5.1645, -4.3359, -5.937, -19.1939, + 12.6031, 11.514, 9.5918, 8.9721, 11.2278, 16.3861, 18.3055, 15.2493, 9.3533, 5.1262, 3.409, 2.8449, 4.219, 7.3448, 7.1824, 2.1285, -4.7265, -9.0679, -11.7653, -12.9187, -12.377, -9.886, -9.0188, -10.4117, -12.4113, -14.1603, -11.834, -11.7956, -15.0847, 1.6333, -0.1749, -0.124, -0.2004, 0.4426, 1.4656, 0.2738, 0.7777, -0.0047, -0.2122, -3.8769, -21.6008, + 15.7554, 16.8394, 17.1615, 17.2884, 17.403, 17.2657, 15.8921, 13.5652, 10.3715, 6.8406, 3.5351, 0.5517, -2.1632, -4.146, -4.2553, -2.4789, 0.2986, 0.953, -2.3858, -7.5703, -11.2229, -12.115, -10.5591, -8.6344, -11.4398, -17.0807, -20.6444, -20.9882, -18.0373, 8.3336, 5.5551, 2.471, 1.8701, 0.0297, -2.8652, -3.472, -2.9808, -2.8086, -2.1702, -3.9628, -24.3752, + 27.9412, 27.2421, 22.9503, 16.5254, 9.6885, 4.5967, 0.6997, -3.4665, -6.6867, -7.8148, -9.1495, -10.061, -11.4055, -11.7392, -11.8813, -11.3038, -9.8795, -7.5418, -2.587, 4.6153, 3.8429, 0.5688, -2.8955, -0.2237, 1.9886, 1.7001, 1.8074, -3.1272, -14.4038, -3.8881, -2.8329, -1.6443, 1.8671, 3.1413, 1.8729, 0.1398, 2.8367, 0.3757, 1.7313, -3.5996, -13.385, + 9.1831, 9.4128, 8.6344, 9.5797, 10.1063, 10.3011, 8.2263, 4.5395, 1.0974, -1.7556, -3.6105, -4.8265, -5.4684, -5.8802, -4.5931, -3.1888, -0.4075, 0.3805, -0.9063, -3.405, -4.9101, -5.9677, -5.8009, -5.0301, -5.4306, -6.4969, -3.081, -2.1162, 1.4143, -5.1355, -2.3496, -0.042, 3.9648, 4.8248, 5.4912, 2.045, -0.1732, 0.0828, 0.7502, -9.4585, 1.8224, + 4.4588, 4.2389, 3.3197, 3.133, 4.0702, 5.7759, 7.7099, 9.0876, 11.1245, 12.651, 12.5527, 11.9764, 10.9501, 11.0837, 11.4805, 9.3639, 4.7521, -0.5944, -4.4402, -7.1309, -8.3207, -8.3043, -9.481, -12.7554, -15.5784, -17.8883, -18.8492, -17.9501, -16.4359, 5.8124, 3.4155, 3.383, 3.3147, 1.6832, -0.537, -2.7626, -3.1367, -2.1515, -2.797, -6.2238, -24.3008, + 11.3859, 11.294, 10.4575, 10.5198, 11.2222, 12.7124, 13.5178, 13.4129, 10.5164, 5.9792, 2.3897, -0.1138, -1.9321, -3.1972, -3.142, -0.7773, 2.4075, 3.1154, -1.3266, -7.1228, -10.5939, -11.1307, -9.876, -7.3492, -6.6029, -10.8829, -13.8968, -15.3987, -15.5878, 8.9895, 6.7302, 4.3952, 0.2012, -4.6771, -5.1924, -3.7684, -1.4949, -0.4984, -0.067, -4.6178, -24.6307, + 18.9158, 19.7886, 19.7526, 19.1358, 18.1177, 16.4664, 14.0122, 10.8818, 7.5481, 4.5462, 1.5367, -0.9445, -2.7129, -3.9653, -5.5016, -7.5102, -9.0864, -9.0742, -9.0767, -10.2313, -9.4105, -5.3027, -1.9268, -1.391, -3.5726, -10.4635, -17.0711, -22.1873, -21.273, 5.4315, 7.4977, 3.9877, 0.2418, -1.1556, -2.9339, -2.8218, -3.2557, -2.2125, -0.425, -4.3542, -22.8328, + 28.1526, 28.1117, 24.7174, 18.3759, 10.6219, 2.4804, -4.1378, -7.4788, -9.3437, -10.849, -12.5556, -14.1384, -15.1322, -15.0182, -14.614, -14.5304, -14.2862, -13.9234, -11.7259, -8.2717, -1.7653, 6.2167, 7.1311, 7.8239, 8.7319, 8.2789, 7.6074, 7.1853, 2.3358, 3.7971, -0.5557, -1.9296, -2.2395, -1.0081, 1.6256, 1.1217, 0.2632, 1.4311, 1.1466, -3.6525, -7.2238, + -1.9896, -1.5846, -1.1882, -1.5851, -4.5749, -6.7021, -4.694, -3.5898, -2.8275, -4.0926, -5.1006, -4.1183, -4.9559, -5.2145, -6.9309, -7.9964, -7.8043, -5.1453, -1.8211, -0.6339, 3.5622, 6.5139, 7.8184, 9.0948, 11.5264, 11.4601, 10.4022, 10.4535, 11.7185, -9.6611, -13.7925, -13.7882, -6.6479, -2.4133, 2.1029, 4.5429, 8.2581, 9.4338, 9.8315, 12.1338, 18.9608, + 29.0162, 27.1449, 23.5731, 20.2452, 17.511, 14.7918, 12.0251, 9.1599, 6.0664, 3.8158, 0.8485, -1.4407, -3.2916, -4.0983, -4.397, -4.3435, -5.263, -7.1322, -9.5766, -10.6471, -11.1044, -11.3079, -11.3508, -11.6324, -11.9889, -12.9298, -13.9392, -14.6929, -15.0614, 0.4975, 0.3394, -0.0827, -0.4799, -0.4676, -0.3009, 0.0384, 0.1607, 0.4964, 0.5891, -0.7905, -17.1701, + 8.4713, 7.5563, 6.3767, 6.1947, 6.0689, 6.3779, 4.9213, 3.5036, 2.5255, 3.0901, 4.1254, 6.3043, 8.3238, 9.4464, 9.317, 6.566, 2.2721, -0.8163, -4.484, -7.0774, -8.1734, -9.5687, -10.5231, -10.5767, -10.2078, -10.4331, -9.7161, -9.9741, -9.8905, 3.2535, 1.2694, 0.1807, -0.6651, -1.0284, -0.5802, 0.6037, 0.3968, 0.3279, 1.2972, -5.0555, -13.8489, + 8.3726, 8.7329, 8.5586, 8.5134, 8.7002, 9.8765, 11.6676, 13.2674, 13.5452, 12.0942, 10.0691, 7.6401, 4.866, 2.868, 2.7547, 3.9563, 4.9074, 3.0494, -2.0753, -8.4742, -13.384, -15.824, -17.8178, -16.4808, -10.6391, -9.9987, -14.2994, -17.06, -17.3864, 10.6631, 9.4847, 5.5492, 1.305, -3.107, -4.8971, -4.8382, -4.5691, -2.3532, -2.1714, -5.066, -26.2617, + 19.0595, 18.3832, 15.9029, 12.653, 10.0486, 8.156, 6.2927, 4.3924, 2.8935, 2.2985, 1.7559, 0.7258, -0.7293, -3.1142, -3.953, -4.8127, -4.7935, -5.2925, -6.6673, -7.3117, -8.4213, -8.8278, -9.24, -8.0623, -7.4252, -7.1006, -5.9527, -5.3881, -5.4699, 10.5325, 9.0445, 4.9973, 0.1331, -3.2907, -4.1662, -4.1984, -3.1495, -2.7117, -2.1058, -5.085, -17.2009, + 52.2372, 44.3578, 36.5608, 28.9176, 21.5115, 14.4397, 7.8187, 1.8482, -3.252, -7.1355, -9.4888, -11.6207, -13.4063, -14.7098, -15.4667, -15.9341, -16.1369, -16.0366, -15.3538, -13.7588, -10.6277, -7.7814, -6.1144, -5.0819, -4.0409, -3.936, -4.9781, -5.9562, -6.8747, 3.7022, 1.466, 0.4111, 0.137, -0.3542, -0.1182, -0.112, -0.5566, -0.7197, -0.2876, -3.568, -11.6568, + 18.5298, 18.5912, 18.1337, 17.486, 16.8943, 16.3587, 16.0594, 15.4122, 13.4402, 10.4256, 7.3367, 4.652, 2.5497, 1.6836, 2.6521, 4.205, 4.7439, 1.2637, -5.1624, -11.963, -16.836, -19.069, -18.8984, -17.4618, -16.1587, -17.2824, -20.6892, -23.3973, -23.4997, 3.2388, 3.5069, 1.9919, 0.0447, -0.5876, -0.7419, -0.9096, -1.1897, -1.237, -1.2266, -2.8899, -24.3059, + 14.2216, 15.1107, 15.4424, 14.9543, 12.7476, 8.8407, 3.8349, -1.225, -5.2339, -7.6335, -9.5259, -10.5663, -11.348, -10.711, -9.3182, -6.6849, -3.0625, 0.0032, 2.0229, 0.5151, -0.5651, -0.4048, 0.5255, -0.7083, -2.6478, -3.1557, -2.5836, -2.0039, -0.8405, 3.7139, 1.8811, 2.0645, 2.2576, 1.8972, 2.7893, 0.9195, -0.0976, -1.1232, -2.5385, -11.7639, -9.8006, + 27.6767, 26.3073, 23.1657, 18.9402, 14.2694, 9.6933, 4.9155, 1.3429, -1.0736, -2.1647, -2.4791, -3.7245, -5.2366, -7.8495, -9.6757, -10.3534, -9.9166, -8.3142, -6.6376, -3.953, -4.0753, -4.3093, -3.5187, -3.901, -5.2935, -7.7755, -9.0692, -8.273, -8.7168, 5.8445, 3.8687, 2.4179, 0.0649, -0.8031, -1.3677, -1.4763, -1.6757, -1.5716, -1.57, -3.7316, -15.598, + 7.4225, 6.3812, 4.2676, 2.9128, 1.8225, 2.633, 3.2026, 3.4899, 4.3798, 5.0782, 4.0849, 3.8689, 3.6113, 4.5683, 5.8542, 4.5947, 0.2532, -3.2821, -6.4774, -7.465, -7.9861, -7.4196, -6.0622, -5.4357, -5.0398, -5.4225, -4.6902, -3.4197, -5.7249, 10.3884, 8.1074, 7.3911, 3.6782, 0.8704, -2.0339, -3.8319, -4.9728, -4.3725, -5.2689, -9.9555, -15.7366, + 17.5213, 20.443, 21.919, 22.2701, 21.3171, 18.9687, 14.6306, 9.0767, 3.5198, -0.8778, -4.3458, -6.9865, -9.548, -11.142, -12.3506, -13.4175, -13.6194, -14.0717, -13.7947, -12.3999, -9.1656, -3.9176, -0.2193, -1.5457, -4.1719, -2.7467, -2.4932, -5.3995, -7.4528, 7.1434, 7.0238, 7.2627, 6.798, 5.2527, 1.0139, -3.4114, -6.523, -7.8521, -6.8412, -9.8668, -15.3691, + 23.8876, 22.5517, 20.2028, 18.0102, 15.3733, 12.6542, 9.101, 5.3097, 1.3988, -1.1554, -2.5833, -3.9593, -5.0937, -4.9268, -4.3385, -4.0356, -4.4731, -5.2411, -5.8573, -6.0798, -6.4837, -6.6593, -7.293, -7.7787, -8.422, -9.5983, -10.7066, -11.6689, -12.1349, 1.8395, 1.5059, 0.7809, 0.7822, 0.3229, 0.0573, -0.1778, 0.0288, -0.5032, -0.4347, -4.2018, -15.0448, + 13.9062, 13.1904, 12.429, 13.6194, 15.2333, 15.2034, 12.0474, 7.3708, 3.009, -0.0473, -1.0773, -1.4032, 0.0264, 2.8347, 3.5334, 0.2574, -4.8606, -8.499, -10.3461, -10.2062, -9.1724, -6.5298, -5.6943, -9.5272, -11.1766, -10.7021, -7.7752, -7.2838, -8.3598, 9.0389, 8.3462, 5.7086, 0.2994, -0.2224, -1.6621, -3.2697, -3.1981, -3.4783, -4.1342, -7.4282, -20.6505, + -0.1956, 12.8891, 25.959, 29.2372, 11.9659, 3.6545, 1.9759, 11.5615, 8.2666, -2.4823, 2.1238, 10.6975, 3.0083, -5.1305, 2.5407, -3.5456, -5.3431, 1.0377, -4.8653, -4.1095, -8.9872, -10.0069, -10.663, -10.8153, -10.0788, -9.9282, -11.0117, -13.4387, -14.316, 0.9647, 0.5126, 1.4038, 0.7744, 0.0988, -0.4577, -0.1039, -0.1823, -0.4661, -0.3208, -2.2235, -13.2318, + 25.9629, 27.1177, 27.848, 28.135, 27.2179, 24.6308, 20.83, 16.5838, 12.6784, 8.6134, 4.1825, 0.4406, -2.7846, -5.2345, -6.7282, -7.9739, -9.5601, -11.2902, -13.5857, -15.5917, -16.3027, -16.6819, -16.4912, -15.9456, -15.775, -16.835, -17.5886, -18.0613, -17.8109, 1.0702, 0.8294, 0.1689, 0.5813, -0.0091, 0.1284, -0.3058, -0.7039, -0.552, -0.2521, -0.9553, -17.8347, + 28.3817, 26.3242, 22.4988, 18.1016, 13.8114, 9.4292, 5.2503, 1.4133, -1.6541, -2.4802, -2.4725, -3.0842, -3.4601, -3.8401, -3.4525, -2.3946, -2.6693, -1.6244, -0.8581, 0.9642, 0.0547, -3.6789, -8.6927, -12.3146, -14.172, -14.6132, -14.5422, -14.6064, -15.6195, 1.2358, -0.1021, -0.4812, -0.1634, -0.1968, 0.6015, -0.1027, -0.0844, -0.0133, 0.251, -0.9445, -16.6483, + 14.8559, 14.2769, 13.3144, 13.4636, 14.521, 15.1971, 13.3361, 10.1599, 6.7908, 5.5468, 6.0091, 7.5005, 8.7471, 7.3385, 1.8761, -2.5391, -5.4603, -7.6289, -8.7381, -8.1046, -7.0789, -6.1772, -7.8795, -11.4586, -14.0732, -15.6269, -16.7078, -19.9955, -21.4649, 1.8161, 1.8568, 0.796, 0.3224, 0.4841, -0.7227, -0.9581, 0.3734, -0.1277, -0.0325, -3.8078, -24.4035, + 5.4535, 4.296, 0.7585, -1.6071, -2.7931, -2.2472, -2.8178, -3.1626, -2.5628, -1.3912, -0.366, 1.6795, 4.203, 6.4164, 7.0674, 7.5227, 7.0796, 4.9076, 4.3543, 2.9287, -0.1541, -2.4266, -4.0876, -4.9944, -4.2282, -4.2178, -6.484, -7.8159, -5.3111, 9.2246, 8.2902, 7.184, 5.6544, 4.317, 2.1934, 1.5215, -2.4633, -8.8855, -12.3322, -14.7039, -13.9292, + 9.098, 9.2332, 9.0227, 7.89, 7.2001, 9.306, 12.746, 15.4304, 15.0788, 11.5632, 8.2993, 7.2707, 8.2449, 10.9986, 9.5064, 3.6569, -2.3332, -7.1688, -8.9599, -9.8137, -8.1433, -4.6312, -6.5469, -11.9994, -16.1445, -17.53, -16.182, -19.8515, -25.2405, 0.4708, -0.3092, 0.2379, 1.4804, -0.1717, -0.9282, -1.5045, 0.4378, 1.4582, 0.6172, -1.7888, -27.118, + 30.5921, 29.7607, 27.5057, 24.3076, 20.267, 15.1816, 9.3486, 3.1611, -1.4937, -4.0966, -4.8189, -4.992, -5.0548, -3.9493, -2.766, -2.8294, -4.1521, -6.8587, -8.9405, -9.3227, -7.2576, -3.2574, -2.6669, -7.8789, -12.9388, -16.4992, -17.2553, -16.5402, -16.5552, 0.5625, 0.3502, 0.0083, -0.184, -0.6199, -0.4748, -0.2997, -0.1545, 0.4846, 0.8919, -0.5646, -16.4454, + 14.8981, 14.8814, 13.6043, 11.5145, 9.5013, 6.6072, 1.92, -2.184, -4.25, -5.6701, -6.3798, -6.5602, -7.0938, -7.2697, -4.0665, -0.3509, 2.6024, 2.4125, -0.1554, -3.0971, -4.9214, -6.2652, -5.4681, -4.3507, -3.9793, -4.8021, -2.3819, -1.6978, 3.0025, 2.862, 3.2617, 6.8021, 5.2352, 3.3376, 0.5084, -1.9352, -2.2484, -1.4495, -1.6734, -14.7006, -2.2554, + 19.3171, 19.5822, 19.1016, 18.4606, 17.7886, 17.3421, 16.7071, 15.2413, 12.1252, 7.557, 2.4543, -2.6968, -6.6532, -9.4513, -11.1611, -10.7979, -8.4551, -5.851, -3.975, -5.4484, -8.6775, -10.2725, -9.6723, -8.111, -6.9238, -9.5412, -14.0157, -16.8585, -17.1147, 6.4595, 5.2042, 2.6176, 0.4543, -1.5212, -2.1299, -2.1223, -2.0336, -1.9001, -1.436, -3.5925, -21.8904, + 10.0554, 11.4918, 12.0024, 11.9869, 11.4982, 10.7952, 8.7236, 5.9738, 2.4552, -0.5185, -1.8366, -4.1108, -5.5111, -6.6353, -6.8364, -7.097, -6.1121, -5.4311, -4.4856, -3.253, -4.1916, -5.5562, -5.6815, -5.4794, -4.5844, -3.0317, -1.607, -1.6034, -1.4198, 6.0457, 6.4584, 6.3816, 6.2004, 3.9293, 1.7377, -2.4799, -5.0585, -4.1685, -5.2278, -13.8183, -8.6957, + 5.1528, 4.1179, 3.0625, 2.9843, 1.9679, 0.9714, 1.4744, 4.4833, 5.5293, 4.703, 3.5767, 3.8031, 1.7543, -1.0533, -1.2774, 0.957, 5.1278, 5.59, 4.5922, 0.5748, -5.0484, -6.9525, -6.3139, -9.2098, -9.0484, -9.2166, -5.0713, -4.7295, -2.5016, 10.5692, 7.5278, 2.2517, 0.6253, 2.9159, 0.5499, -2.4843, -3.578, -4.6422, -4.8638, -8.8714, -13.879, + 18.7418, 15.9185, 12.8438, 10.204, 7.5183, 6.1018, 4.7206, 3.9908, 3.3693, 2.4047, 1.441, 0.1504, -0.1335, -0.4013, 0.1702, -0.4796, -1.4923, -3.1582, -4.6899, -4.8726, -5.5428, -6.5059, -7.1643, -7.5192, -7.9222, -8.7815, -9.429, -9.6309, -9.8521, -0.4363, -0.6716, -0.6321, -1.0615, -1.3192, -0.9262, 0.103, 0.7901, 1.5962, 2.2939, 0.2637, -10.2983, + 35.3923, 32.3026, 26.5029, 19.6975, 12.6365, 5.9222, 0.137, -3.8927, -5.9336, -6.6867, -6.9777, -6.7865, -6.2733, -4.3479, -3.5674, -3.6341, -3.7323, -5.0584, -6.319, -6.1046, -4.6307, -4.8921, -3.7741, -3.8037, -7.6419, -9.4026, -9.7867, -9.3143, -10.0304, -0.3209, -0.8025, -0.7882, -0.9161, -0.6206, -0.3729, 0.2723, 0.9229, 1.0626, 1.2478, 0.3157, -11.3279, + 15.1154, 17.2376, 18.5113, 18.6287, 17.8606, 16.0374, 12.387, 7.3049, 2.2274, -1.2547, -3.4619, -4.9984, -7.5019, -10.3433, -11.986, -13.4479, -13.9092, -13.7812, -13.8196, -12.9157, -11.1559, -7.187, -2.1572, 1.9368, 1.9384, 1.8602, 1.894, -1.4092, -3.6107, 13.969, 15.4855, 13.978, 10.9462, 5.3217, -5.087, -10.7886, -11.2651, -11.1873, -9.5973, -11.775, -16.726, + 18.2228, 18.4615, 17.4249, 17.1396, 16.6125, 14.4185, 10.8568, 8.6164, 6.3579, 5.237, 3.856, 1.9252, -0.6359, -4.275, -5.1889, -6.7505, -7.9919, -9.0778, -10.1, -9.9142, -8.7383, -6.1658, -3.7111, -6.176, -9.8971, -12.5047, -12.7338, -12.8872, -12.3808, -0.813, 0.6976, 0.3804, 0.6457, 1.5482, 2.4749, 3.0413, 2.8395, -0.4708, -2.7284, -7.6154, -15.6555, + 6.0325, 10.0051, 11.3341, 12.3589, 13.89, 16.1481, 16.3116, 12.7566, 8.9105, 7.2557, 4.4785, 2.2316, 0.9797, -0.6614, 0.5661, 4.8341, 6.5458, 3.6213, -1.1381, -4.3272, -5.4198, -6.5113, -7.7865, -12.3725, -19.933, -25.0176, -17.8042, -15.8364, -21.4525, -3.1483, -3.2143, -0.2635, 8.5907, 13.2637, 6.6922, -2.8514, -3.6166, -4.6591, -4.9686, -5.8249, -25.4194, + 17.3207, 17.7695, 17.5402, 17.0035, 16.5266, 15.9285, 14.7115, 13.0615, 10.7412, 7.7296, 4.597, 1.7062, -1.0815, -3.0472, -3.6756, -2.2649, -0.4084, -0.9339, -5.2361, -10.6763, -14.8835, -17.2271, -17.8907, -15.6384, -10.4668, -8.4525, -11.8808, -15.4044, -15.4675, 8.8476, 9.5703, 6.9625, 3.109, -0.1253, -3.622, -4.8452, -5.4253, -5.054, -3.4938, -5.9236, -22.7477, + 18.232, 19.5978, 19.719, 18.7548, 16.3427, 13.615, 10.6951, 8.6087, 5.9251, 3.1428, 1.8336, 0.1222, -0.3161, -1.8892, -3.4565, -4.4788, -4.1025, -3.7501, -4.9649, -7.4742, -8.6908, -9.9373, -10.883, -11.3028, -11.4257, -11.5192, -12.7474, -14.6156, -15.0348, -8.1772, -8.1988, -6.2878, -4.971, -3.0389, -0.0545, 3.6911, 6.8598, 7.3721, 8.3424, 4.4628, -8.8778, + 13.8589, 12.2371, 9.8247, 7.6249, 6.1891, 5.8925, 4.1202, 1.8072, 0.1905, -0.9244, -0.4689, 0.1547, 0.5703, 1.3955, 2.047, 2.6142, 1.4776, -0.3379, -2.6582, -5.2107, -5.8303, -6.1283, -6.7972, -7.3151, -7.5206, -7.3966, -7.0187, -6.1092, -6.2882, 2.8357, 1.3808, 1.5156, 0.8705, -0.2752, -0.1447, -0.1738, -1.0712, -0.4308, -0.502, -4.005, -11.046, + 25.9341, 27.732, 28.2232, 27.7876, 25.5774, 21.4281, 15.8329, 10.0447, 4.4219, -0.7932, -4.9567, -7.948, -9.7086, -10.7951, -11.8434, -13.0235, -13.3873, -13.9249, -14.4275, -14.4362, -13.1477, -10.3022, -6.8516, -4.3801, -3.0535, -2.9543, -6.5274, -11.658, -12.8631, 5.4748, 4.2973, 2.0928, 0.3859, -0.05, -1.0781, -1.5335, -2.0293, -2.087, -2.0482, -3.4246, -15.9155, + 12.5611, 14.6864, 16.3579, 17.9048, 19.1559, 20.0003, 19.3273, 16.6175, 11.9366, 7.1513, 3.6125, 1.1772, -0.676, -2.6536, -3.6769, -3.9465, -1.4534, 2.8613, 3.1405, -2.9573, -11.3536, -17.9162, -20.1933, -20.5787, -18.1872, -12.946, -11.7495, -17.2172, -20.9852, 3.0886, 4.0379, 3.6614, 1.7858, 1.8672, 1.0455, -1.0249, -2.3716, -3.3037, -4.0002, -4.786, -22.6731, + 6.3873, 6.0538, 5.2554, 4.7605, 3.7352, 4.0478, 3.0878, 1.1603, -0.41, -0.4842, 0.3498, 0.7144, -0.2324, -1.6604, -3.0147, -3.2036, -2.2852, 0.45, 5.1996, 6.1851, 1.9002, -1.2909, -2.8734, -4.709, -4.8637, -4.9906, -6.0915, -6.1561, -7.0214, -0.4395, -0.6291, -0.8046, -1.1373, -1.0367, -1.1976, -0.5358, 0.8614, 1.5251, 2.7259, 0.6681, -8.1549, + 6.4678, 24.1453, 28.3564, 16.3768, 0.9487, 6.1492, 9.9337, 5.7837, 0.7687, 2.7379, 7.4627, 2.6615, 2.1447, -1.7243, -4.9079, -3.6716, -5.126, -1.3976, -1.3562, -1.3187, -5.1578, -9.3517, -9.8801, -10.0344, -8.5754, -9.5176, -12.9621, -14.5277, -14.4277, 2.6144, 2.0177, 2.0939, -0.3296, 0.2968, -0.6507, -0.6394, 0.0217, -1.9957, -0.1306, -3.2985, -14.8655, + 12.551, 12.4285, 11.8955, 12.7578, 16.9371, 21.2938, 20.7903, 16.7803, 12.6688, 11.7788, 11.63, 7.3846, 0.3301, -5.6353, -9.1568, -12.4924, -14.5919, -16.295, -17.9481, -16.1853, -15.7323, -12.4489, -10.0349, -7.7045, -8.7699, -6.9254, -3.1598, -3.0985, -9.0472, 7.8424, 3.8265, 0.9376, -0.6967, -1.1188, -1.5694, -1.9503, -0.6167, -1.4541, -2.2369, -2.9635, -21.8681, + 15.6754, 16.7432, 16.5153, 12.3311, 4.2455, 0.205, -0.6894, 2.1431, 4.3595, 7.572, 9.8733, 9.2508, 5.8913, 2.6955, 1.6669, 2.5024, 2.1823, 0.5005, -4.3623, -8.712, -8.4826, -7.8486, -12.0698, -13.3968, -11.9915, -10.9867, -12.2995, -11.0273, -12.4867, -2.7836, -4.412, -5.1131, -4.1277, -2.4732, -0.972, 1.3438, 3.6062, 4.7125, 5.6821, 4.537, -11.9, + 22.3286, 23.0046, 23.0498, 23.5807, 23.1994, 18.4599, 10.9563, 4.0795, 0.4966, -1.421, -3.5925, -5.4787, -5.7217, -4.6302, -2.1947, 3.6628, 9.53, 10.8217, 9.1886, 2.5031, -8.0477, -14.9331, -18.4387, -19.9305, -20.4501, -20.2597, -19.9758, -19.4479, -20.3392, 1.1842, 0.4014, 0.0219, -0.1675, -0.5484, -0.3769, -0.3371, -0.0928, -0.0308, 0.3091, -0.3631, -21.5338, + 21.9984, 23.9238, 25.3357, 26.4343, 26.0313, 22.5182, 16.6027, 9.8676, 5.2339, 2.4325, -0.1466, -2.8415, -2.8856, -0.9913, 3.1553, 6.9975, 6.7848, 4.8021, -2.7887, -13.1318, -18.6046, -20.0234, -20.0047, -19.9587, -19.6763, -19.9132, -20.3439, -20.4619, -20.3457, 1.2714, 0.3555, 0.0928, -0.1438, -0.1909, -0.1061, -0.2499, -0.3508, -0.1985, -0.175, -0.3048, -19.6659, + -0.2567, -0.2113, -0.8684, 0.4465, 3.3786, 5.2759, 2.6214, -1.2665, -3.2281, -4.9538, -5.9464, -5.0624, -5.8449, -5.2078, -4.5607, -2.446, -0.3193, 2.4345, 5.491, 8.175, 9.787, 9.0613, 6.6768, 1.8115, -0.9513, -2.1611, -3.707, -3.7433, -4.4246, 0.1631, 2.1256, 4.6102, 5.3221, 6.3935, 4.7668, 3.6937, 3.2175, -0.8613, -8.2952, -21.136, -6.1298, + 3.8793, 4.4914, 2.0392, 1.3477, -1.0271, -0.6639, 0.1117, -1.7816, -3.233, -2.324, -1.7798, -3.8111, -6.4867, -7.2086, -6.2062, -8.1286, -2.5, 3.355, 12.4119, 16.8546, 9.9403, 10.7928, 11.849, 6.7929, -4.703, -7.2697, -8.7835, -9.4026, -8.5564, -1.174, -2.4092, -2.9332, -3.4178, -3.5228, -2.2895, -0.328, 1.5973, 4.164, 4.8094, 5.5038, -5.9517, + 55.6246, 47.8318, 40.1222, 32.5666, 25.2478, 18.2625, 11.7233, 5.7654, 0.6757, -2.9249, -4.9251, -6.7338, -8.2843, -9.4091, -10.0166, -10.5275, -11.0842, -11.8508, -12.6565, -13.2845, -13.4392, -13.4505, -13.5945, -14.13, -14.9588, -15.832, -16.5919, -17.0696, -17.0561, -0.1692, -0.1054, -0.1641, -0.3548, -0.4054, -0.2499, -0.1197, 0.3574, 0.6137, 0.729, -0.1316, -16.1029, + 28.348, 28.4457, 26.9174, 24.2222, 20.0737, 14.3497, 7.6659, 1.6711, -2.293, -4.4091, -5.0514, -3.9119, -1.1398, 2.5446, 4.7855, 3.9543, 0.0941, -4.3143, -7.576, -9.0354, -10.4294, -11.217, -12.2003, -12.8513, -13.7072, -15.19, -16.7728, -16.6535, -16.3197, 1.689, 1.2293, 1.498, 1.02, -0.3583, -0.7205, -0.7464, -0.7978, -0.7991, -0.4289, -1.5854, -17.0352, + 7.1738, 5.876, 3.417, 2.3215, 1.3711, 0.544, -1.4461, -3.1488, -4.5999, -4.7859, -4.3101, -4.0022, -3.9658, -3.1268, -2.0884, -1.4297, -0.0002, 0.9577, 1.567, 1.5085, 1.0721, 0.3227, 0.511, 0.7323, 0.8496, 1.7441, 0.7228, 0.7656, 1.447, -8.6193, -7.2247, -5.3667, -3.5827, -1.8357, 0.6166, 4.1585, 4.9638, 7.0248, 8.8447, 1.0209, 8.4769, + -0.7467, 0.3554, 1.8709, 0.8731, -1.4638, -3.343, -6.6672, -9.5951, -10.4012, -10.6421, -11.0116, -11.8429, -12.2455, -11.7931, -7.9381, -3.6179, 4.3015, 10.3005, 10.2729, 5.6096, 4.179, 4.6704, 9.5416, 5.1426, 3.2307, 6.6932, 7.397, 11.6314, 15.2383, 14.9214, 12.3993, 10.3175, 9.4781, 6.529, 0.7143, -6.7843, -12.1011, -12.5497, -11.0634, -11.8611, -4.9295, + 8.9473, 8.9587, 8.3247, 7.7486, 7.2645, 6.8446, 6.7225, 7.4361, 8.0756, 8.3721, 7.8521, 5.8385, 3.2013, -0.0003, -2.2581, -3.0372, -2.3326, -0.4339, 2.2803, 1.7881, -3.0603, -8.5789, -12.0665, -11.7987, -9.2546, -6.5489, -9.3084, -14.6968, -16.2796, 11.5926, 10.477, 8.8581, 8.3385, 5.311, -2.0531, -7.544, -8.5312, -8.7087, -8.2386, -9.5016, -25.9443, + 17.7853, 20.4425, 22.0494, 22.6794, 21.5241, 17.2874, 10.6686, 4.0415, -0.8452, -3.3573, -4.8317, -6.2098, -8.0414, -10.4109, -12.4433, -13.6668, -13.5852, -12.5998, -10.4309, -6.2165, -0.7444, 0.8686, -2.2118, -2.8842, -0.1978, -1.0432, -7.6768, -11.1308, -8.8188, 14.1142, 12.1567, 7.0646, 6.3108, 1.5813, -5.6339, -6.7414, -7.8081, -7.7366, -5.6857, -7.6219, -18.4403, + 10.4095, 10.1666, 9.2271, 8.086, 6.4145, 4.2188, 0.0306, -2.2509, -4.0464, -2.5048, 0.7199, 3.4238, 3.2446, 1.8968, 2.3554, 2.4242, 1.5237, 2.3494, 4.0741, 2.8937, -1.4622, -5.2927, -9.7781, -9.2472, -7.305, -3.6229, -4.1228, -9.1846, -14.6411, 8.1502, 5.2313, 1.058, 1.4879, 3.7251, 2.9439, -0.5626, -1.1335, -5.4441, -3.6896, -11.7665, -16.0896, + 16.3683, 15.7368, 14.0789, 11.8221, 8.6363, 4.8193, 0.7944, -2.5033, -4.2969, -5.1383, -5.1385, -5.8567, -6.7831, -7.2715, -6.194, -4.4484, -2.8402, -2.2612, -2.0718, -1.0756, 0.0928, 1.1543, 1.4991, -0.3, 0.0566, -0.6778, -3.4172, -5.3252, -9.4588, 11.6386, 8.1885, 3.6288, -1.2989, -3.6855, -3.9476, -4.1335, -3.4808, -2.6249, -1.8682, -2.4166, -19.6188, + 9.9289, 9.2679, 7.9267, 8.7379, 10.9513, 13.7239, 14.8623, 12.3233, 7.4753, 3.3088, 0.9949, -1.1257, -2.9647, -3.3198, -1.5514, 1.8208, 1.1498, -4.6271, -7.9003, -10.0749, -11.1748, -10.0605, -6.3035, -5.8941, -7.6734, -10.1071, -9.5489, -6.0056, -4.14, 9.5365, 2.656, 3.6743, 6.2251, 4.9344, -1.5821, -4.9354, -4.9959, -4.249, -3.3389, -7.9251, -19.9895, + 15.7601, 15.5371, 14.5879, 13.6852, 13.7329, 14.2619, 14.5602, 14.105, 11.9855, 9.0424, 5.9338, 2.9248, 1.1175, -0.2175, -0.4564, -0.8056, -2.8269, -5.9252, -9.3719, -12.1962, -12.8615, -12.521, -10.3147, -10.3071, -11.7171, -13.5357, -14.5158, -14.3799, -15.2819, 0.2685, -1.1025, -1.4893, -1.4317, -1.3748, -0.8857, -0.0388, 0.9292, 2.3295, 3.5114, -0.7158, -18.7537, + 10.0771, 10.8307, 10.8465, 11.7532, 13.7152, 14.8042, 13.3142, 9.3177, 4.2443, -0.137, -2.8245, -4.9084, -6.2428, -7.4346, -7.1199, -4.5048, -0.3499, 3.4684, 5.2923, 2.9229, -0.3932, -2.4266, -2.9696, -4.8989, -8.2386, -13.2276, -16.6579, -16.3335, -11.9188, 12.1564, 11.5591, 10.1368, 8.7589, 4.6074, -3.2222, -8.3162, -9.1139, -8.8367, -7.9752, -9.7544, -23.1025, + 11.5053, 11.7027, 11.7371, 13.2093, 15.2251, 15.5948, 12.9282, 8.237, 4.0626, 1.5654, 0.2206, -0.6203, 0.1854, 2.0975, 5.0249, 6.2795, 5.603, 2.918, 1.3161, -0.0224, -2.9425, -5.8601, -7.8659, -9.4742, -11.962, -17.3077, -22.0414, -24.853, -26.4631, 0.6245, 0.843, 0.7564, -0.0344, 0.186, 0.2573, 0.0022, 0.3483, -0.0033, -0.3539, -2.626, -27.0235, + 5.1441, 5.4989, 4.5886, 4.889, 4.4149, 4.7882, 4.1037, 2.1106, -0.5897, -1.6882, -2.0231, -2.3075, -4.0395, -5.998, -7.0714, -7.2239, -6.85, -6.2178, -5.879, -4.2255, -3.0049, -0.9642, 0.5881, 1.855, 5.0224, 5.6412, 5.331, 2.5657, 1.5411, 13.0414, 12.1678, 10.8758, 8.35, 3.9695, -1.2713, -6.6778, -7.5357, -8.1366, -9.815, -14.9679, -9.097, + 5.6158, 4.9839, 2.6123, 0.8571, -0.5963, -0.3233, -0.2214, -0.3194, -0.137, 0.4421, 0.3275, 0.0835, -0.517, -0.8713, -0.8569, -0.8339, -0.8554, -0.5354, -0.0395, -0.0558, -0.9263, -0.8835, -0.8978, -0.6944, -0.6268, -0.8091, -1.0483, -1.4194, -1.4539, -1.4149, -1.4513, -1.7313, -2.1794, -1.7446, -0.9286, 0.2594, 1.3903, 2.1796, 3.3663, 2.2545, -1.2043, + 10.708, 10.7135, 9.5629, 8.5444, 8.8788, 10.1398, 10.5302, 9.9131, 6.6128, 3.5565, 2.0899, 1.1039, 0.3794, 0.6277, -0.198, -1.3526, -2.7157, -4.4999, -6.1998, -7.9255, -8.1415, -9.2812, -8.2556, -8.1488, -8.8083, -9.3952, -7.3216, -6.7527, -4.3647, -4.2821, -3.0286, 0.3702, 1.9504, 4.267, 4.98, 3.4858, 0.8969, -0.2219, 0.7569, -9.1747, -5.7376, + 15.6199, 17.2444, 17.3338, 14.6899, 10.1694, 6.6473, 3.7155, 2.2358, 1.5381, 1.6499, 1.6341, 0.4488, 0.1506, -1.4323, -2.951, -3.5813, -3.4819, -3.2311, -4.3442, -6.2089, -6.4666, -6.7538, -7.4724, -7.2719, -7.5336, -7.1999, -7.6644, -8.4572, -9.0267, -8.4693, -10.5727, -9.758, -6.2924, -2.3994, 1.2587, 4.0421, 6.4837, 8.0877, 9.5585, 8.0612, -1.6481, + 19.7459, 20.2278, 18.163, 15.009, 12.1531, 9.979, 6.226, 3.3367, 0.8576, -0.7079, -0.8905, -2.1529, -4.1404, -5.6658, -7.062, -8.838, -8.6505, -8.0785, -6.8102, -4.7097, -3.3992, -4.6255, -5.7732, -5.7892, -3.5462, -3.1831, -5.7363, -8.6675, -7.2716, 4.1141, 4.3678, 4.3289, 4.1542, 4.0907, 1.7285, -0.9643, -1.7912, -4.9181, -4.5913, -10.5192, -12.1315, + 6.1392, 7.2498, 8.1626, 7.685, 6.4337, 6.4811, 6.2044, 4.4007, 3.1418, 2.4995, 0.929, 0.1185, -0.7668, 1.7199, 1.8949, 2.0578, 0.9328, -0.211, -2.8546, -2.7195, -3.0066, -5.4613, -5.4714, -6.1331, -7.3092, -7.381, -7.7191, -8.5523, -8.4648, -2.487, -2.6525, -3.0263, -3.5473, -2.5564, -1.093, 0.1556, 2.3664, 3.5226, 4.7554, 4.5624, -7.591, + 9.311, 9.9536, 9.2138, 10.0448, 12.2215, 15.3929, 16.8943, 15.4237, 10.3171, 4.7547, 1.0177, -2.1707, -4.9877, -7.5219, -7.9593, -6.9345, -4.8837, -0.9854, 3.2044, 2.3045, -0.4463, -2.4338, -5.1476, -7.89, -10.631, -12.6634, -14.4919, -15.1208, -15.7863, 5.6159, 2.3509, 0.9141, -0.354, -1.9709, -1.3207, -0.835, -0.2962, -0.1715, -0.2711, -3.6616, -23.6214, + 23.3043, 22.9242, 21.5293, 19.5762, 16.1241, 10.4648, 6.0084, 4.4333, 5.1608, 6.7668, 7.1607, 5.7544, 1.6077, -1.1787, -4.1636, -7.1966, -8.5322, -8.3418, -7.6815, -6.4004, -5.6492, -7.9013, -12.6029, -15.0772, -12.4774, -7.5784, -9.0924, -17.5597, -19.3815, 3.7144, 2.6198, 1.4796, 0.442, -0.5744, -0.9102, -0.6355, -1.0076, -1.4038, -1.1279, -2.5963, -20.6144, + 11.2061, 12.3118, 12.8295, 13.0523, 13.1146, 12.3645, 9.9362, 5.7743, 1.7043, -1.8769, -4.8871, -7.3022, -10.0064, -12.5843, -14.2598, -13.6895, -11.6784, -9.5138, -6.1691, -0.5296, 5.2373, 5.2179, 3.438, 3.0836, 2.2733, -1.6391, -6.1888, -7.6374, -3.5815, 20.8484, 18.6436, 8.9742, 10.0179, 3.879, -7.4403, -11.3642, -12.3105, -11.5853, -8.933, -10.7298, -20.8771, + 16.8529, 17.4255, 16.4102, 15.5784, 15.8674, 17.495, 18.1947, 15.9349, 11.712, 7.2655, 2.7249, -1.9527, -5.0648, -6.5508, -5.6015, -1.523, 3.8782, 6.4704, 3.5684, -1.2082, -2.4831, -2.6718, -6.1617, -14.2995, -21.6998, -24.5766, -25.7294, -25.4801, -24.3755, 1.7078, 0.3442, -0.186, -0.3639, -0.6031, -0.7615, -0.5273, -0.1524, 0.161, 0.3883, -0.0071, -25.9432, + 3.6247, 4.1362, 4.7304, 5.4643, 6.0686, 6.7599, 7.37, 7.9086, 8.2045, 8.2007, 8.305, 7.9346, 6.506, 5.2072, 4.901, 4.7326, 5.1044, 4.6386, 2.5145, -2.675, -8.8497, -12.8927, -16.3752, -16.1979, -12.4272, -9.0385, -10.4849, -12.3511, -11.0196, 16.8771, 16.0363, 12.4221, 5.0921, -2.2734, -6.9441, -6.2634, -7.9111, -8.604, -8.3171, -10.1145, -25.1507, + 20.4102, 22.2333, 21.4536, 19.4223, 16.2855, 13.0015, 8.6431, 4.0577, 0.1512, -3.055, -6.8588, -9.9672, -11.6652, -13.5703, -15.4009, -14.9881, -14.1899, -13.0588, -12.144, -10.7868, -7.9129, -2.9873, -1.111, -1.0826, 1.2318, 4.7844, 4.0367, 1.8708, 1.1966, 1.4837, -0.6523, -2.7877, -2.3545, -1.2604, 3.0293, 4.438, 2.6853, 3.182, 0.1563, -7.9197, -4.8422, + 24.4801, 24.0824, 22.4438, 19.5938, 14.694, 8.679, 3.7523, 0.8565, -0.9075, -1.514, -0.7636, 1.4427, 4.6338, 4.78, -0.4807, -5.3801, -6.6867, -7.1351, -7.2085, -6.89, -7.0642, -5.4063, 1.9414, 1.1193, -8.061, -17.439, -17.6573, -19.7125, -20.1924, -1.8469, 0.7851, 2.9495, 5.7461, 5.1153, 0.0343, 1.2368, -1.4044, -2.4151, -4.0039, -6.1967, -17.9837, + 34.238, 33.5242, 31.1201, 27.6874, 23.0098, 16.3994, 8.7955, 1.8365, -2.8561, -4.7762, -4.6828, -3.5969, -2.7477, -3.7154, -5.8733, -6.7781, -7.1404, -9.1196, -11.1436, -11.7088, -11.204, -10.1729, -10.8046, -9.7894, -7.4004, -10.6648, -13.8125, -14.2674, -14.356, 0.7706, 1.2161, 0.201, -0.2054, -0.41, -0.3813, -0.4077, -0.2383, -0.1037, 0.0286, -0.4699, -14.1437, + 28.8775, 29.5132, 28.5106, 26.2574, 21.3404, 14.0753, 6.0344, -0.6419, -5.0399, -7.8669, -10.5378, -12.6348, -13.9599, -14.7351, -14.0154, -11.1568, -6.4165, -1.6004, -0.2199, -4.6568, -7.7877, -4.327, -3.6815, -7.3611, -9.9812, -9.0522, -3.7854, -1.0622, -4.0886, 4.5036, 0.0436, -1.262, 0.1566, 0.7061, 0.993, -0.1034, -0.8841, -0.1473, -0.6208, -3.3851, -11.7638, + 23.7811, 23.4799, 22.5985, 21.1811, 19.295, 16.9827, 14.153, 11.0015, 7.6758, 4.3321, 1.377, -1.2257, -4.1809, -8.056, -12.0663, -14.7575, -16.2562, -16.8262, -16.6031, -14.6213, -10.859, -6.2555, -3.6846, -3.645, -3.7342, -4.0353, -7.6132, -10.866, -10.5716, 9.6447, 7.8023, 3.9088, 0.9709, -1.2963, -2.9548, -3.6717, -3.5325, -2.8548, -2.7867, -5.23, -17.9213, + 7.3168, 7.9817, 8.1669, 8.3682, 8.5119, 8.7999, 8.5177, 8.224, 7.976, 7.1004, 4.9797, 2.844, -0.2787, -2.8393, -5.1812, -6.501, -7.8099, -7.3824, -4.9246, -1.2066, 1.0202, -1.2524, -5.5773, -6.6635, -6.2109, -4.9615, -7.0357, -10.7105, -11.2719, 12.8705, 11.8805, 10.2523, 9.3642, 5.4904, -1.6627, -6.1562, -9.1055, -10.2004, -10.6557, -12.0775, -23.3035, + 29.5404, 29.4681, 28.4882, 26.7591, 23.995, 19.9029, 14.9906, 9.9884, 4.9431, 0.7201, -2.7182, -4.9295, -5.8329, -5.2835, -3.1411, -1.0337, -1.2994, -4.6551, -9.294, -12.6166, -14.4507, -14.7304, -13.5533, -12.6574, -13.3765, -15.4995, -17.3894, -18.253, -18.0815, 0.4964, 0.5507, 1.1546, 0.737, -0.0255, -0.3498, -0.5226, -0.4656, -0.4711, -0.2868, -0.8174, -17.811, + -1.0744, 14.9003, 33.1596, 35.0523, 13.0736, 2.0052, -0.7661, 8.7597, 2.7166, -6.495, -4.261, 3.772, -4.3426, -8.7782, -3.2656, -7.4382, -8.4893, -4.5093, -7.9161, -3.7247, -7.052, -3.6709, -6.265, -4.496, -4.0238, -4.7559, -5.1416, -7.861, -9.1128, 0.6813, 1.7272, 1.1217, 0.4323, -0.0682, -0.265, -0.1787, -0.4185, -0.8065, -0.2104, -2.0153, -10.3544, + 17.3596, 17.5673, 15.0858, 11.4644, 7.3814, 4.0226, -0.141, -3.3849, -5.6204, -6.9233, -7.1105, -7.9534, -8.3396, -9.0384, -9.3087, -9.0779, -7.7416, -7.4684, -7.3969, -6.6548, -5.2109, -4.5759, -2.5217, -0.3381, 2.765, 6.1586, 8.7075, 9.567, 8.7272, 5.4636, 3.5914, 3.5111, 3.4034, 3.2185, 1.4996, -0.7001, -2.2097, -2.6342, -2.6685, -12.4751, 1.7656, + 9.2805, 8.3218, 6.4144, 5.5901, 4.5122, 4.117, 2.0243, 0.4668, -1.3946, -1.908, -1.6016, -2.3054, -3.2805, -3.6877, -3.6998, -3.136, -2.3723, -2.0691, -2.5325, -3.5697, -3.7685, -3.6638, -2.437, -2.4841, -1.3748, -1.3849, -0.1182, 1.3637, 4.6978, -2.5191, 0.6452, 3.8178, 5.9716, 6.9002, 5.0344, 1.4694, -0.9067, -2.4853, -4.2997, -13.628, 3.6107, + 14.3113, 15.3825, 16.0172, 17.0841, 17.9406, 17.4527, 13.8237, 9.1622, 4.4761, 0.4333, -1.8491, -4.1973, -6.2352, -7.3255, -6.6956, -3.8665, 0.4871, 1.8452, -1.9049, -6.4158, -9.6692, -9.9954, -8.3868, -6.3274, -7.5276, -11.6979, -13.095, -12.8586, -10.3679, 12.6405, 9.43, 6.8308, 1.9954, -1.8154, -4.05, -4.6445, -4.94, -4.6161, -4.141, -6.6897, -21.7106, + 15.9574, 13.5685, 10.9183, 9.2647, 7.9607, 6.5007, 4.5878, 3.5591, 3.2169, 1.2933, -0.051, -0.9224, -2.2752, -2.6282, -3.7623, -4.7934, -4.9449, -4.3779, -4.6931, -3.1458, -4.4724, -5.0318, -4.9908, -4.4859, -5.058, -5.3554, -5.0038, -5.0901, -5.7451, -5.4116, -5.6692, -5.7576, -5.1885, -3.0995, -0.5277, 2.1995, 4.1437, 5.6134, 6.876, 6.8216, -1.5471, + 19.4303, 18.5843, 17.0128, 17.0462, 18.3032, 19.023, 17.0309, 14.9915, 13.9671, 13.7472, 10.8472, 5.3475, -0.7858, -5.0732, -8.3887, -9.9459, -10.5501, -11.5448, -12.079, -11.0765, -11.334, -10.813, -12.3197, -14.8319, -14.5526, -12.6243, -11.2782, -13.0457, -15.0877, 2.8732, 1.857, 1.3694, -0.0267, -0.8287, -0.4903, -0.4684, -0.4454, -0.2649, -0.5119, -3.0635, -20.4302, + 12.4117, 13.0466, 13.2331, 13.485, 13.9028, 13.3369, 10.6679, 6.6169, 2.3362, -0.7175, -3.1184, -5.0629, -7.1577, -9.3769, -10.526, -9.6526, -5.9526, -0.9724, 3.2956, 3.3183, -0.2154, -2.7832, -2.1155, -2.0009, -5.4287, -9.8635, -12.0371, -11.731, -6.9389, 19.8935, 17.5132, 8.1204, 5.9513, -0.9114, -7.8096, -9.0959, -8.7765, -8.7232, -7.8238, -8.3381, -22.9941, + 5.4465, 6.1545, 6.596, 7.3692, 6.5453, 5.6331, 3.5394, 2.3607, 0.8659, 0.0509, -0.6899, -0.6602, -0.8114, -0.9871, -2.062, -2.1051, -2.1293, -2.4346, -2.8842, -2.7862, -2.7031, -2.7005, -2.3058, -2.4182, -2.9614, -3.3012, -3.625, -3.4399, -3.5562, 1.1375, 0.955, 0.1967, 0.2876, -0.3489, -0.1347, -0.2618, -0.2052, 0.1031, 0.1921, -1.9213, -5.8132, + 19.3219, 18.607, 17.2268, 15.7037, 13.2112, 9.2621, 6.1735, 5.2932, 6.8689, 8.1175, 8.5297, 6.2006, 2.9639, 0.2106, -1.5424, -3.0741, -3.6228, -1.7612, 1.1881, 0.4888, -4.7011, -12.4521, -18.8925, -20.1895, -15.2633, -7.7586, -8.4595, -18.6161, -23.0341, 7.2675, 6.3572, 1.7187, 0.3913, 0.3928, -0.3109, -1.9821, -2.8777, -3.2372, -3.3101, -4.4095, -25.201, + 8.4541, 8.1779, 7.1194, 5.4725, 2.9601, 1.1998, -0.3538, -1.2461, -1.9054, -1.1532, -0.8697, -0.7216, -1.4868, -2.8361, -3.9114, -3.9948, -3.2868, -2.9321, -1.6346, 0.6941, 1.5767, 0.1133, -0.6901, -1.9526, -1.704, -0.6393, -1.7853, -2.0227, -0.6415, 6.3775, 3.5011, 1.7742, 0.8521, -0.8807, -2.4262, -1.9793, -2.713, -1.0301, -0.2906, -3.185, -7.4694, + 10.0438, 9.573, 9.4079, 10.5993, 13.6404, 15.4525, 14.499, 10.5598, 6.2936, 3.7658, 1.8182, 2.4916, 3.9516, 5.8549, 9.0644, 9.6627, 6.8173, 4.3977, 1.349, -4.2076, -12.0535, -17.0808, -19.6338, -19.7015, -18.7275, -16.8855, -13.8529, -11.6701, -15.4293, 6.271, 4.5162, 0.1386, -2.0908, -1.7858, -2.0793, -1.8138, 0.2844, 0.7409, 0.2032, -4.3846, -24.8049, + 25.0551, 24.1141, 20.9653, 16.3108, 10.8527, 5.3678, 0.7364, -2.8219, -5.0859, -5.765, -6.1499, -6.6367, -7.4276, -7.5696, -8.0119, -6.4695, -2.7893, 0.4057, 2.0532, 0.861, -1.2343, -2.5971, -2.0921, -3.1259, -5.4032, -7.7358, -7.6535, -8.064, -10.089, 1.7165, 0.5619, 0.1133, -0.0994, -0.1364, -0.266, -0.4353, 0.5041, 0.4384, 0.8615, -3.2587, -14.5713, + -0.2824, -1.2002, -1.1857, -0.7688, -0.8143, -0.7172, -1.5304, -2.1288, -3.0516, -3.6018, -4.8378, -6.1535, -7.732, -6.8121, -6.1824, -3.6103, -1.4311, 0.9978, 1.1937, 0.8415, 2.4841, 6.3803, 8.8835, 7.0925, 6.7752, 9.2623, 5.7944, 2.8315, -0.4967, 18.7297, 14.2388, 10.8799, 4.2826, -6.9342, -8.6376, -8.3976, -6.7575, -6.0459, -5.4581, -5.9001, -18.8293, + 10.1128, 8.8893, 7.3473, 6.5214, 7.293, 10.3397, 14.0197, 15.8841, 13.7146, 8.7127, 4.4971, 1.7567, 0.2355, 0.565, 2.536, 6.4325, 6.1884, 1.5759, -3.2537, -5.8565, -5.4444, -3.863, -6.5876, -12.9364, -16.8492, -18.9964, -18.8056, -16.0076, -18.0217, 3.9553, 2.3698, 1.9291, -0.0877, -0.9652, -0.9019, -0.4445, -0.6487, -0.2555, -1.3366, -3.614, -25.1871, + 12.2726, 11.228, 9.4632, 7.3787, 5.2189, 3.66, 2.1581, 1.8973, 1.7208, 1.1692, 2.6675, 2.148, 0.1934, -0.9062, -0.5766, -0.7741, -0.2722, -1.4842, -1.6982, -2.2141, -2.7162, -2.8899, -3.2527, -3.3476, -3.8185, -5.7582, -8.5254, -9.5927, -13.3491, 2.9336, -0.0614, -5.1792, -7.8262, -5.8818, -2.4979, 0.281, 2.5842, 4.2687, 5.4567, 5.9224, -16.9053, + 37.2172, 34.3913, 31.2113, 27.7111, 23.6697, 19.0839, 14.6521, 10.8663, 7.8437, 5.4886, 3.9602, 2.5869, 0.56, -1.9033, -4.6862, -7.319, -10.071, -12.7038, -14.768, -15.8511, -16.1191, -16.1652, -16.2159, -15.9004, -15.8958, -16.8057, -17.9478, -18.494, -18.3957, 0.4419, 0.2835, -0.0357, -0.2713, -0.3987, -0.3334, -0.2999, -0.1625, 0.2757, 0.674, -0.1736, -16.8775, + 11.3753, 13.7268, 15.9469, 19.24, 21.6371, 21.2732, 16.6665, 10.0971, 4.1118, -0.3896, -3.6531, -5.5614, -8.0681, -10.2817, -11.6723, -11.5104, -10.0734, -10.1816, -8.5685, -7.1045, -6.4138, -4.8696, -3.9548, -5.7824, -5.0034, -4.9254, -6.3935, -5.3682, -4.2986, 12.8596, 6.0788, 2.4099, 2.8908, 0.0595, -2.3723, -2.9619, -4.0883, -4.5273, -4.0164, -6.3324, -17.4382, + 26.4179, 26.6038, 25.6315, 22.7118, 17.4654, 11.2374, 4.563, -0.6721, -3.649, -5.1965, -6.8885, -8.5149, -9.9685, -10.5303, -10.6988, -9.8426, -8.6196, -5.7793, -0.9658, 3.2322, 2.5498, 0.5196, -0.4196, -3.4101, -7.4205, -10.7757, -11.9107, -12.1132, -13.5565, 2.4448, 1.027, 0.2616, -0.2763, -0.6725, -0.5323, -0.4687, -0.3345, 0.1168, 0.1296, -1.6954, -17.0871, + 18.4471, 16.7466, 13.9277, 10.8916, 8.7857, 7.1932, 5.5568, 4.1778, 3.8018, 3.6509, 4.1995, 4.5197, 3.7143, 2.0835, 1.0146, 0.3919, -0.3931, -1.7518, -3.7102, -5.6106, -7.0424, -8.2355, -8.7436, -9.9803, -10.8971, -12.1221, -12.4526, -14.0451, -14.1182, 1.5911, 1.3311, 0.9816, 0.2592, 0.5671, -0.15, -0.6917, -0.071, -0.0271, 0.0589, -3.8492, -16.0146, + 5.9232, 5.3337, 3.8014, 2.9697, 3.4359, 4.2543, 3.4648, 1.7717, 0.1194, -0.0269, 0.7474, 1.7656, 2.2681, 3.3777, 5.535, 7.6925, 7.117, 5.0594, 1.6134, -2.884, -4.6636, -5.6498, -6.726, -7.6581, -7.7482, -7.0077, -8.1003, -8.2149, -7.5709, 2.7271, 3.2452, 3.0964, 1.8085, 1.2978, 0.1047, -1.3807, -1.5844, -0.8243, -0.5104, -7.9799, -12.0827, + 12.4719, 12.1361, 10.1546, 7.9843, 6.3039, 5.8891, 4.6571, 2.6181, -0.1657, -1.9369, -2.8607, -3.3105, -4.8578, -7.0042, -7.1916, -5.9866, -4.1997, -1.7831, 1.5238, 4.3316, 3.2165, 1.1019, 0.2627, -0.7887, -2.3974, -4.1659, -7.7383, -8.8914, -9.3732, 3.3631, 2.173, 1.7422, 1.8227, 1.4558, 0.1916, -0.0971, -0.1883, -1.5408, -1.1423, -7.7797, -11.8474, + 11.3451, 10.9, 8.9585, 6.1028, 3.1858, -1.1621, -5.3836, -9.5575, -11.5639, -12.6129, -13.2817, -13.1921, -12.6233, -11.4537, -9.9063, -7.2485, -2.9323, -0.1679, 2.3451, 3.4644, 4.1413, 6.5832, 8.0312, 9.6, 9.3866, 8.339, 7.0332, 6.2115, 5.4582, 2.4819, 2.4952, 2.5332, 1.3146, 1.284, 1.1744, 1.4075, 1.6533, -0.791, -1.1435, -12.4097, 1.0916, + 23.6029, 24.2878, 23.193, 21.6752, 20.1647, 17.8825, 13.5147, 9.0959, 4.9067, 0.9398, -2.2819, -4.7976, -6.5405, -7.8935, -8.5957, -8.1319, -5.7029, -2.901, -1.4003, -3.8107, -7.7146, -10.9603, -11.9185, -11.3097, -10.0262, -10.8911, -13.0763, -15.2199, -16.0905, -4.3614, -2.5556, -2.1777, -1.8997, -0.5988, 1.0869, 2.5785, 3.4868, 4.0967, 3.3192, -2.9749, -12.6358, + 4.1481, 24.8058, 32.005, 24.107, 7.9048, 5.1844, 9.4865, 6.993, -4.1867, -5.3105, -0.1042, -5.3429, -7.948, -8.834, -11.8488, -10.9382, -11.6153, -10.8429, -8.8763, -8.2063, -5.9086, -4.678, -0.7362, 0.9339, 1.6189, 1.242, -2.165, -5.4458, -5.4417, 3.8026, 4.9367, 2.9396, 1.2003, 0.8096, -0.4055, -1.2653, -1.7631, -2.913, -1.4945, -5.8474, -8.5756, + 23.7954, 23.1921, 21.7016, 20.0766, 17.1113, 13.7019, 10.3999, 7.0724, 4.4505, 3.2062, 3.6711, 5.104, 6.2303, 4.8847, -0.1659, -4.8929, -7.3427, -9.3139, -10.945, -11.4728, -10.0337, -7.5622, -3.5203, -5.8211, -14.2213, -19.1068, -19.3958, -20.2365, -20.5672, -0.5258, 0.0632, 2.1808, 3.9092, 2.4964, -0.3407, -0.519, -0.8656, -0.9771, -1.7973, -3.6241, -20.0182, + -3.736, -3.6185, -3.3879, -2.0035, -2.0453, -3.0452, -2.1024, -2.2759, -2.6516, -4.3569, -3.6456, -2.3824, -3.7115, -5.0829, -6.2136, -7.0765, -6.8802, -6.4042, -2.6943, 1.3032, 2.8085, -2.4198, 6.8476, 8.522, 10.8666, 10.9764, 11.8694, 11.688, 10.8525, -10.1854, -14.3979, -14.1885, -6.1104, -2.3069, 3.0598, 3.2787, 7.7402, 9.9334, 10.5862, 12.5907, 18.9431, + 13.3492, 12.8348, 12.1001, 10.6097, 8.9141, 7.8597, 5.9391, 3.8673, 2.6411, 2.3479, 2.7602, 2.8027, 2.2779, 0.4287, -1.3226, -2.0315, -2.1676, -1.5551, -1.2222, -2.1197, -4.0818, -6.1594, -8.1874, -9.3177, -9.4499, -9.7874, -10.1789, -10.6801, -10.4712, -3.7681, -4.8313, -5.1537, -4.2661, -3.2035, -1.4351, 1.4217, 3.2157, 5.2602, 6.9893, 5.7708, -7.9426, + 23.1558, 23.5472, 22.1677, 18.7915, 13.0187, 6.0783, -0.4803, -4.5728, -6.1861, -7.0011, -7.3578, -8.089, -10.0377, -12.234, -12.8288, -11.4502, -9.5173, -6.4728, -2.1175, 2.0048, 1.357, -2.9595, -2.6436, 1.518, 3.0406, -2.5769, -4.8065, -2.5134, -0.8343, 3.1119, 3.3528, 5.9276, 3.6737, 2.5908, 1.6925, -3.4674, -1.5813, -3.2207, -2.1812, -9.8987, -8.8538, + 26.492, 27.5278, 23.5895, 18.4003, 14.4396, 11.3628, 6.6147, 2.4341, -0.2444, -2.4075, -4.2073, -6.4485, -7.8162, -9.2259, -9.5571, -9.3064, -9.091, -7.0174, -7.1701, -7.0279, -7.651, -7.5329, -8.2698, -7.2504, -4.4537, -4.4137, -4.3225, -4.9571, -2.4902, -7.3866, -6.0243, -3.8745, 0.0041, 2.702, 4.9257, 5.6046, 5.2905, 3.4738, 1.697, -6.4124, 2.1053, + 20.0311, 32.4089, 21.4065, 3.874, 5.863, 17.0357, 3.7543, 2.9904, 15.6577, 4.2113, -0.9665, 3.2682, -4.9242, 0.9109, -5.5297, -0.979, -5.0003, -0.7131, -5.5269, -8.0296, -9.9403, -10.8809, -10.2649, -9.9965, -9.6956, -10.6759, -12.5982, -13.0794, -12.6109, 0.8915, 0.0604, -0.2305, -0.0021, -0.6053, -0.3414, -0.0731, 0.4824, 0.7549, -0.1062, -0.8306, -13.4365, + 16.7766, 17.5169, 16.4982, 14.0891, 10.0932, 5.3461, 0.6341, -3.6859, -5.9242, -6.3128, -5.935, -5.7548, -6.0307, -6.0498, -6.4996, -6.5626, -4.8816, -3.2502, -3.2922, -4.2819, -4.8479, -5.5791, -4.7813, -3.1384, -3.49, -2.8954, 0.2902, 4.4573, 7.4915, -5.5534, -4.1269, -1.5355, 0.4168, 0.9124, 3.0599, 2.1241, 2.4262, 2.5, 4.5034, -4.7272, 8.0549, + 14.2987, 14.8926, 15.4168, 16.0974, 16.7877, 16.0424, 12.971, 8.0251, 2.909, -0.5642, -2.964, -4.5656, -6.3342, -5.7781, -3.4597, 0.3272, 2.7738, -0.3574, -4.8087, -8.1398, -9.6152, -7.9303, -6.227, -7.0986, -10.3018, -13.1453, -11.2961, -9.1627, -8.7927, 1.0994, 1.8123, 2.8974, 2.905, 4.6509, 3.4505, -0.601, -1.4758, -2.7795, -2.4745, -9.4847, -15.4782, + 19.5896, 21.6796, 21.9059, 19.1821, 14.0268, 8.5044, 2.2676, -4.7266, -10.645, -13.046, -14.086, -14.5335, -14.9498, -14.787, -14.0697, -11.4549, -8.2147, -4.026, 0.3628, 4.9113, 3.4988, 0.578, 1.9943, 2.981, 0.8573, -1.3207, -0.074, 2.1207, 1.474, 10.3387, 1.2319, -0.4911, -1.8207, -1.07, -0.8286, 0.3764, 0.204, -0.829, -1.6698, -5.4418, -14.7994, + 7.6904, 8.5944, 9.5072, 9.882, 10.2276, 10.5222, 10.3373, 9.3607, 7.6459, 4.8852, 2.1707, -0.1575, -1.8433, -2.7877, -2.2526, -0.5664, 2.3824, 4.3345, 3.544, -0.6514, -5.2439, -9.2918, -11.7988, -14.1092, -12.7385, -9.1451, -9.6551, -10.7736, -10.0695, 11.9243, 11.2262, 10.3898, 9.8282, 8.0787, 3.3521, -3.2649, -10.5053, -13.2404, -13.3007, -14.4881, -21.2847, + 30.307, 29.5477, 26.4796, 21.7752, 16.6251, 11.7301, 7.3299, 3.8872, 0.729, -1.2037, -2.4737, -3.5896, -4.8044, -5.4589, -6.3339, -6.5407, -6.0748, -6.4957, -7.6726, -8.7065, -8.7749, -8.8999, -9.3481, -9.1891, -9.9612, -10.0486, -10.55, -11.2845, -11, -6.1498, -6.3059, -5.5965, -4.5595, -2.8356, 0.0899, 2.711, 4.5977, 5.7639, 7.0861, 5.1987, -6.4033, + 12.2542, 12.1227, 12.1295, 13.7252, 16.2506, 16.1281, 10.9394, 4.8988, -0.4731, -3.6819, -5.4021, -7.4944, -8.2715, -8.0576, -6.1477, -3.0306, 1.9117, 4.056, 2.1482, 0.8098, 0.1207, 0.0058, -2.3034, -4.0466, -3.922, -6.4147, -11.2118, -17.1187, -19.9247, 6.0099, 3.6952, 1.2907, -0.5044, -0.8291, -1.0627, -1.1957, -1.1416, -1.4267, -1.5418, -3.2939, -24.486, + 9.7234, 8.7897, 6.536, 5.5091, 6.6941, 8.8748, 9.0238, 7.6482, 4.3129, 1.4757, -0.7289, -2.4072, -4.4322, -5.3461, -3.7806, -1.1393, 2.9797, 3.5166, -1.5034, -4.0711, -4.3945, -4.4639, -5.1951, -6.0761, -6.0336, -6.996, -6.516, -4.952, -7.048, 14.6458, 13.1436, 9.144, 2.7564, -0.8129, -3.8913, -6.65, -6.1267, -6.0986, -6.7696, -9.3407, -21.2384, + 8.5519, 7.5224, 5.9151, 4.8177, 3.503, 2.2565, 1.1622, 0.1988, -0.5493, -0.385, -0.1928, -0.4114, -0.8801, -1.0153, -1.0764, -1.4171, -1.4905, -1.3971, -1.0636, -1.1738, -0.9725, -1.888, -2.3866, -2.7467, -2.5988, -2.5326, -3.1114, -3.2783, -3.3604, -3.8082, -3.8849, -4.0621, -3.5801, -2.8055, -1.5136, 0.9076, 2.835, 4.3455, 5.8838, 5.6825, -0.4474, + 7.7224, 9.4298, 7.9025, 6.4102, 5.0524, 7.1733, 6.8444, 5.1985, 1.7514, 0.1644, 0.4222, 1.0885, -0.3101, -2.4745, -2.9872, -2.3617, -3.5889, -3.7306, -1.5428, -0.5556, -0.6425, -2.7366, -1.5405, -2.2119, -3.2504, -3.1003, -4.4891, -10.0519, -13.5853, -15.9446, -3.2508, 0.2918, -0.9236, 3.57, 5.1357, 5.1789, 6.0048, 3.6122, 3.0229, -6.6974, 0.466, + 12.4572, 13.576, 13.8205, 13.8979, 14.7964, 17.0228, 18.4159, 17.4577, 14.0275, 10.4467, 7.5633, 5.822, 5.5014, 6.0819, 6.428, 5.7453, 2.9483, 0.4368, -2.0706, -3.5909, -6.3177, -11.4245, -17.9894, -23.7008, -25.5017, -25.0724, -24.5956, -23.3443, -22.8376, 1.8005, 0.405, -0.0309, -0.4072, -0.7903, -0.7639, -0.633, 0.2496, 0.9862, 0.2958, -1.1118, -25.7677, + 4.7942, 4.1637, 3.1217, 3.4886, 5.7426, 8.4586, 9.4051, 8.4408, 4.0573, -0.0847, -2.6488, -4.2622, -6.8882, -7.9882, -8.0785, -6.5745, -3.6736, 0.0836, 3.7506, 4.295, 1.443, 1.7647, 2.5945, 0.5096, -1.403, -2.4095, -4.2409, -7.3362, -10.5254, 14.3716, 9.9001, 5.5613, -0.4343, -4.0106, -4.4911, -4.7396, -4.3992, -3.5933, -3.3021, -4.8629, -20.9215, + 21.6217, 21.5816, 19.9361, 17.4078, 14.6925, 11.478, 7.736, 4.5567, 2.3261, 1.3757, 0.8699, 1.0465, 1.101, -0.3579, -2.1883, -4.1422, -5.522, -7.4591, -9.7124, -11.0673, -12.8828, -14.8063, -14.5786, -12.2038, -9.6561, -7.6717, -6.6862, -4.494, -2.3008, -2.8294, -2.2589, -0.7299, 1.858, 3.4539, 3.4053, 2.7591, 1.9997, 0.5308, 0.5471, -8.7356, -3.9438, + 1.0482, 0.882, 0.312, -0.0147, 0.1548, 1.1642, 2.5065, 4.2829, 6.8793, 9.8376, 11.4462, 10.6004, 8.7525, 7.4364, 7.3679, 8.2254, 7.9411, 4.8316, -0.5361, -4.6026, -6.7708, -7.8326, -7.7624, -5.3939, -6.4851, -9.7433, -13.7435, -16.3579, -14.4263, 10.9932, 7.619, 5.9532, 4.7231, 0.1759, -2.5109, -4.5002, -5.8815, -4.2941, -4.7897, -7.4879, -24.0798, + 8.4638, 7.6638, 6.7405, 6.7849, 9.6108, 11.6513, 11.2989, 8.3544, 3.044, -0.8467, -3.9303, -4.9339, -3.7358, -4.1317, -2.0585, 2.7514, 7.6579, 7.9793, 2.3491, -1.2307, -6.1104, -5.2397, -3.7933, -5.5972, -9.8841, -12.1146, -11.4629, -8.7974, -10.4828, 8.1529, 4.6235, 5.0235, -3.915, -7.5503, -5.3361, -1.2531, 6.4683, 2.2949, -0.055, -8.4536, -22.5498, + 9.8543, 8.7085, 6.2122, 3.2566, 2.0932, 1.8184, 0.621, -1.4796, -2.3312, -2.6373, -4.0537, -4.6289, -4.6135, -3.7432, -2.1216, 0.8603, 3.6326, 5.0735, 3.4051, 1.8301, 1.3556, -1.1657, -2.6873, -3.258, -2.3407, -3.5712, -3.7082, -3.8659, -2.5155, -3.0106, -3.6582, 1.1257, 3.5876, 5.1138, 3.862, 1.9732, 0.5329, 1.0253, -0.8077, -9.7439, -1.3313, + -2.9689, -3.6925, -3.2882, -2.1408, -0.3207, 1.4181, 2.0372, 0.1628, -1.5615, -1.1744, -1.1748, -2.3007, -3.8174, -4.8189, -4.0221, -1.3971, 3.2927, 7.6888, 9.8326, 7.1859, 3.6459, 2.2387, 1.1579, 1.6876, 0.0249, -1.1344, -3.2237, -2.0378, -1.2991, 8.2053, 7.6257, 7.4526, 5.2692, 0.6619, -2.5875, -5.5343, -3.5316, -3.8077, -4.5073, -9.2463, -10.5134, + 9.7903, 6.5524, 4.2187, 2.8629, 1.5301, 2.609, 2.8671, -0.4058, 0.1443, 2.1025, 2.2641, 2.254, 2.8227, 4.2305, 2.6246, 0.1011, -0.5037, -2.5281, 5.9816, 8.8018, 3.5902, -2.1055, -8.2336, -7.5542, -8.3988, -6.77, -12.1221, -12.6274, -4.0986, 15.9214, 10.1934, 4.0555, -0.7395, -4.485, -5.0408, 1.8975, -3.7215, -6.1218, -5.7613, -6.198, -17.642, + 29.2898, 29.127, 27.9887, 26.035, 22.788, 18.9325, 14.8741, 10.7353, 6.3361, 1.5435, -3.4721, -8.0918, -11.5471, -14.2024, -15.543, -16.5237, -17.5387, -18.0503, -18.3862, -18.0321, -17.2039, -14.4258, -7.6289, -2.1492, -0.8256, -0.4858, 0.7007, -0.7217, -3.5225, 7.7486, 6.5879, 3.6481, 0.1102, -1.4486, -1.4917, -1.7642, -2.4587, -2.7189, -2.3171, -5.8956, -12.2398, + 4.4923, 5.9961, 3.5313, -0.1456, -2.9561, -3.9972, -5.5178, -6.5495, -8.2904, -9.4007, -9.5368, -9.2154, -10.6132, -12.2389, -12.145, -11.3212, -9.2653, -6.1867, -0.5047, 2.8376, -1.5645, 1.0645, 6.8296, 12.903, 17.1169, 16.2097, 16.8799, 17.2979, 14.2904, 3.6672, 1.4385, 0.6939, -0.7824, -1.0548, 0.7585, 1.5905, 1.4809, 1.2351, 0.7042, -9.7316, 9.0007, + 17.1014, 20.3617, 22.1941, 23.6186, 23.8203, 21.498, 16.0993, 10.2193, 4.4688, 0.3152, -2.6232, -4.4565, -5.7629, -7.4399, -7.9702, -8.7398, -8.6156, -7.5758, -5.6113, -3.8507, -4.771, -7.9311, -11.5008, -12.9375, -11.7921, -9.1891, -8.8722, -13.4431, -16.6139, 2.6455, 3.2595, 3.634, 3.0753, 1.5772, -0.5994, -1.7486, -1.896, -2.7589, -2.489, -4.6996, -18.2534, + -6.795, -4.3945, -2.1814, -0.0391, 1.0243, 2.1577, 2.4659, 2.7954, 2.9978, 2.3847, 1.7726, 1.1096, -0.1514, -3.1834, -4.1688, -4.9229, -4.741, -4.3919, -0.8572, 1.4319, 1.2097, 1.1996, -0.6138, 0.0932, 1.9431, 3.2864, 3.0149, 3.03, 4.5238, -4.4471, -6.9731, -3.2184, -0.9733, 0.9643, 1.9409, 2.7291, 5.1726, 4.8981, 5.2725, -5.3657, 7.6481 +}; + +const struct lsp_codebook newamp2vq_cb[] = { + /* /home/metala/projects/smesh/asko/src/codebook/codes_450.txt */ + { + 41, + 9, + 500, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codebooknewamp2_energy.c b/src/codebooknewamp2_energy.c new file mode 100644 index 0000000..39e1bcf --- /dev/null +++ b/src/codebooknewamp2_energy.c @@ -0,0 +1,35 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/metala/projects/smesh/asko/src/codebook/newamp2_energy_q.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 0.1, + 5, + 10, + 15, + 20, + 30, + 37.5, + 42.5 +}; + +const struct lsp_codebook newamp2_energy_cb[] = { + /* /home/metala/projects/smesh/asko/src/codebook/newamp2_energy_q.txt */ + { + 1, + 3, + 8, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/src/codec2.c b/src/codec2.c new file mode 100644 index 0000000..1c9472c --- /dev/null +++ b/src/codec2.c @@ -0,0 +1,1818 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2.c + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Codec2 fully quantised encoder and decoder functions. If you want use + codec2, the codec2_xxx functions are for you. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "codec2.h" + +#include <assert.h> +#include <math.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "bpf.h" +#include "bpfb.h" +#include "codec2_fft.h" +#include "codec2_internal.h" +#include "debug_alloc.h" +#include "defines.h" +#include "interp.h" +#include "lpc.h" +#include "lsp.h" +#include "machdep.h" +#include "nlp.h" +#include "phase.h" +#include "postfilter.h" +#include "quantise.h" +#include "sine.h" + +/*---------------------------------------------------------------------------* \ + + FUNCTION HEADERS + +\*---------------------------------------------------------------------------*/ + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, + COMP Aw[], float gain); +void codec2_encode_3200(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_3200(struct CODEC2 *c2, short speech[], + const unsigned char *bits); +void codec2_encode_2400(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_2400(struct CODEC2 *c2, short speech[], + const unsigned char *bits); +void codec2_encode_1600(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_1600(struct CODEC2 *c2, short speech[], + const unsigned char *bits); +void codec2_encode_1400(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_1400(struct CODEC2 *c2, short speech[], + const unsigned char *bits); +void codec2_encode_1300(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_1300(struct CODEC2 *c2, short speech[], + const unsigned char *bits, float ber_est); +void codec2_encode_1200(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_1200(struct CODEC2 *c2, short speech[], + const unsigned char *bits); +void codec2_encode_700c(struct CODEC2 *c2, unsigned char *bits, short speech[]); +void codec2_decode_700c(struct CODEC2 *c2, short speech[], + const unsigned char *bits); +static void ear_protection(float in_out[], int n); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_create + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Create and initialise an instance of the codec. Returns a pointer + to the codec states or NULL on failure. One set of states is + sufficient for a full duuplex codec (i.e. an encoder and decoder). + You don't need separate states for encoders and decoders. See + c2enc.c and c2dec.c for examples. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_create")]] +struct CODEC2 *codec2_create(int mode) { + struct CODEC2 *c2; + int i, l; + + // ALL POSSIBLE MODES MUST BE CHECKED HERE! + // we test if the desired mode is enabled at compile time + // and return NULL if not + + if (false == (CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, mode) || + CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, mode) || + CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, mode) || + CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, mode) || + CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, mode) || + CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, mode) || + CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, mode))) { + return NULL; + } + + c2 = (struct CODEC2 *)MALLOC(sizeof(struct CODEC2)); + if (c2 == NULL) return NULL; + + c2->mode = mode; + + /* store constants in a few places for convenience */ + + c2->c2const = c2const_create(8000, N_S); + c2->Fs = c2->c2const.Fs; + int n_samp = c2->n_samp = c2->c2const.n_samp; + int m_pitch = c2->m_pitch = c2->c2const.m_pitch; + + c2->Pn = (float *)MALLOC(2 * n_samp * sizeof(float)); + if (c2->Pn == NULL) { + return NULL; + } + c2->Sn_ = (float *)MALLOC(2 * n_samp * sizeof(float)); + if (c2->Sn_ == NULL) { + FREE(c2->Pn); + return NULL; + } + c2->w = (float *)MALLOC(m_pitch * sizeof(float)); + if (c2->w == NULL) { + FREE(c2->Pn); + FREE(c2->Sn_); + return NULL; + } + c2->Sn = (float *)MALLOC(m_pitch * sizeof(float)); + if (c2->Sn == NULL) { + FREE(c2->Pn); + FREE(c2->Sn_); + FREE(c2->w); + return NULL; + } + + for (i = 0; i < m_pitch; i++) c2->Sn[i] = 1.0; + c2->hpf_states[0] = c2->hpf_states[1] = 0.0; + for (i = 0; i < 2 * n_samp; i++) c2->Sn_[i] = 0; + c2->fft_fwd_cfg = codec2_fft_alloc(FFT_ENC, 0, NULL, NULL); + c2->fftr_fwd_cfg = codec2_fftr_alloc(FFT_ENC, 0, NULL, NULL); + make_analysis_window(&c2->c2const, c2->fft_fwd_cfg, c2->w, c2->W); + make_synthesis_window(&c2->c2const, c2->Pn); + c2->fftr_inv_cfg = codec2_fftr_alloc(FFT_DEC, 1, NULL, NULL); + c2->prev_f0_enc = 1 / P_MAX_S; + c2->bg_est = 0.0; + c2->ex_phase = 0.0; + + for (l = 1; l <= MAX_AMP; l++) c2->prev_model_dec.A[l] = 0.0; + c2->prev_model_dec.Wo = TWO_PI / c2->c2const.p_max; + c2->prev_model_dec.L = PI / c2->prev_model_dec.Wo; + c2->prev_model_dec.voiced = 0; + + for (i = 0; i < LPC_ORD; i++) { + c2->prev_lsps_dec[i] = i * PI / (LPC_ORD + 1); + } + c2->prev_e_dec = 1; + + c2->nlp = nlp_create(&c2->c2const); + if (c2->nlp == NULL) { + return NULL; + } + + c2->lpc_pf = 1; + c2->bass_boost = 1; + c2->beta = LPCPF_BETA; + c2->gamma = LPCPF_GAMMA; + + c2->xq_enc[0] = c2->xq_enc[1] = 0.0; + c2->xq_dec[0] = c2->xq_dec[1] = 0.0; + + c2->smoothing = 0; + c2->se = 0.0; + c2->nse = 0; + c2->user_rate_K_vec_no_mean_ = NULL; + c2->post_filter_en = true; + + c2->bpf_buf = (float *)MALLOC(sizeof(float) * (BPF_N + 4 * c2->n_samp)); + assert(c2->bpf_buf != NULL); + for (i = 0; i < BPF_N + 4 * c2->n_samp; i++) c2->bpf_buf[i] = 0.0; + + c2->softdec = NULL; + c2->gray = 1; + + /* newamp1 initialisation */ + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + mel_sample_freqs_kHz(c2->rate_K_sample_freqs_kHz, NEWAMP1_K, ftomel(200.0), + ftomel(3700.0)); + int k; + for (k = 0; k < NEWAMP1_K; k++) { + c2->prev_rate_K_vec_[k] = 0.0; + c2->eq[k] = 0.0; + } + c2->eq_en = false; + c2->Wo_left = 0.0; + c2->voicing_left = 0; + c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 0, NULL, NULL); + c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 1, NULL, NULL); + } + + // make sure that one of the two decode function pointers is empty + // for the encode function pointer this is not required since we always set it + // to a meaningful value + + c2->decode = NULL; + c2->decode_ber = NULL; + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) { + c2->encode = codec2_encode_3200; + c2->decode = codec2_decode_3200; + } + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) { + c2->encode = codec2_encode_2400; + c2->decode = codec2_decode_2400; + } + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) { + c2->encode = codec2_encode_1600; + c2->decode = codec2_decode_1600; + } + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) { + c2->encode = codec2_encode_1400; + c2->decode = codec2_decode_1400; + } + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) { + c2->encode = codec2_encode_1300; + c2->decode_ber = codec2_decode_1300; + } + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) { + c2->encode = codec2_encode_1200; + c2->decode = codec2_decode_1200; + } + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + c2->encode = codec2_encode_700c; + c2->decode = codec2_decode_700c; + } + + return c2; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_destroy + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Destroy an instance of the codec. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_destroy")]] +void codec2_destroy(struct CODEC2 *c2) { + assert(c2 != NULL); + FREE(c2->bpf_buf); + nlp_destroy(c2->nlp); + codec2_fft_free(c2->fft_fwd_cfg); + codec2_fftr_free(c2->fftr_fwd_cfg); + codec2_fftr_free(c2->fftr_inv_cfg); + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + codec2_fft_free(c2->phase_fft_fwd_cfg); + codec2_fft_free(c2->phase_fft_inv_cfg); + } + FREE(c2->Pn); + FREE(c2->Sn); + FREE(c2->w); + FREE(c2->Sn_); + FREE(c2); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_bits_per_frame + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Returns the number of bits per frame. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_bits_per_frame")]] +int codec2_bits_per_frame(struct CODEC2 *c2) { + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) return 64; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) return 48; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) return 64; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) return 56; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) return 52; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) return 48; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) return 28; + + return 0; /* shouldn't get here */ +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_bytes_per_frame + DATE CREATED: April 2021 + + Returns the number of bytes per frame. Useful for allocated storage for + codec2_encode()/codec2_decode(). Note the number of bits may not be a + multiple of 8, therefore some bits in the last byte may be unused. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_bytes_per_frame")]] +int codec2_bytes_per_frame(struct CODEC2 *c2) { + return (codec2_bits_per_frame(c2) + 7) / 8; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_samples_per_frame + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Returns the number of speech samples per frame. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_samples_per_frame")]] +int codec2_samples_per_frame(struct CODEC2 *c2) { + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) return 160; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) return 160; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) return 320; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) return 320; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) return 320; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) return 320; + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) return 320; + return 0; /* shouldn't get here */ +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Take an input buffer of speech samples, and compress them to a packed buffer + of bytes. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_encode")]] +void codec2_encode(struct CODEC2 *c2, unsigned char *bytes, short speech[]) { + assert(c2 != NULL); + assert(c2->encode != NULL); + + c2->encode(c2, bytes, speech); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Take an input packed buffer of bytes, and decode them to a buffer of speech + samples. + +\*---------------------------------------------------------------------------*/ + +[[clang::export_name("codec2_decode")]] +void codec2_decode(struct CODEC2 *c2, short speech[], + const unsigned char *bytes) { + codec2_decode_ber(c2, speech, bytes, 0.0); +} + +void codec2_decode_ber(struct CODEC2 *c2, short speech[], + const unsigned char *bits, float ber_est) { + assert(c2 != NULL); + assert(c2->decode != NULL || c2->decode_ber != NULL); + + if (c2->decode != NULL) { + c2->decode(c2, speech, bits); + } else { + c2->decode_ber(c2, speech, bits, ber_est); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_3200 + AUTHOR......: David Rowe + DATE CREATED: 13 Sep 2012 + + Encodes 160 speech samples (20ms of speech) into 64 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm twice. On the + first frame we just send the voicing bits. On the second frame we + send all model parameters. Compared to 2400 we encode the LSP + differences, a larger number of bits for the LSP(d)s and scalar + (non-VQ) quantisation for pitch and energy. + + The bit allocation is: + + Parameter bits/frame + ------------------------------------------------------ + Harmonic magnitudes (LSP differerences) 50 + Pitch (Wo) 7 + Energy 5 + Voicing (10ms update) 2 + TOTAL 64 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_3200(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + float ak[LPC_ORD + 1]; + float lsps[LPC_ORD]; + float e; + int Wo_index, e_index; + int lspd_indexes[LPC_ORD]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + encode_lspds_scalar(lspd_indexes, lsps, LPC_ORD); + for (i = 0; i < LSPD_SCALAR_INDEXES; i++) { + pack(bits, &nbit, lspd_indexes[i], lspd_bits(i)); + } + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_3200 + AUTHOR......: David Rowe + DATE CREATED: 13 Sep 2012 + + Decodes a frame of 64 bits into 160 samples (20ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_3200(struct CODEC2 *c2, short speech[], + const unsigned char *bits) { + MODEL model[2]; + int lspd_indexes[LPC_ORD]; + float lsps[2][LPC_ORD]; + int Wo_index, e_index; + float e[2]; + float snr; + float ak[2][LPC_ORD + 1]; + int i, j; + unsigned int nbit = 0; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for (i = 0; i < 2; i++) + for (j = 1; j <= MAX_AMP; j++) model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 2 x 10ms + frames */ + + model[0].voiced = unpack(bits, &nbit, 1); + model[1].voiced = unpack(bits, &nbit, 1); + + Wo_index = unpack(bits, &nbit, WO_BITS); + model[1].Wo = decode_Wo(&c2->c2const, Wo_index, WO_BITS); + model[1].L = PI / model[1].Wo; + + e_index = unpack(bits, &nbit, E_BITS); + e[1] = decode_energy(e_index, E_BITS); + + for (i = 0; i < LSPD_SCALAR_INDEXES; i++) { + lspd_indexes[i] = unpack(bits, &nbit, lspd_bits(i)); + } + decode_lspds_scalar(&lsps[1][0], lspd_indexes, LPC_ORD); + + /* interpolate ------------------------------------------------*/ + + /* Wo and energy are sampled every 20ms, so we interpolate just 1 + 10ms frame between 20ms samples */ + + interp_Wo(&model[0], &c2->prev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + + /* LSPs are sampled every 20ms so we interpolate the frame in + between, then recover spectral amplitudes */ + + interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, + LPC_ORD); + + for (i = 0; i < 2; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[1]; + c2->prev_e_dec = e[1]; + for (i = 0; i < LPC_ORD; i++) c2->prev_lsps_dec[i] = lsps[1][i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_2400 + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Encodes 160 speech samples (20ms of speech) into 48 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm twice. On the + first frame we just send the voicing bit. On the second frame we + send all model parameters. + + The bit allocation is: + + Parameter bits/frame + -------------------------------------- + Harmonic magnitudes (LSPs) 36 + Joint VQ of Energy and Wo 8 + Voicing (10ms update) 2 + Spare 2 + TOTAL 48 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_2400(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + float ak[LPC_ORD + 1]; + float lsps[LPC_ORD]; + float e; + int WoE_index; + int lsp_indexes[LPC_ORD]; + int i; + int spare = 0; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + pack(bits, &nbit, lsp_indexes[i], lsp_bits(i)); + } + pack(bits, &nbit, spare, 2); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_2400 + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Decodes frames of 48 bits into 160 samples (20ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_2400(struct CODEC2 *c2, short speech[], + const unsigned char *bits) { + MODEL model[2]; + int lsp_indexes[LPC_ORD]; + float lsps[2][LPC_ORD]; + int WoE_index; + float e[2]; + float snr; + float ak[2][LPC_ORD + 1]; + int i, j; + unsigned int nbit = 0; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for (i = 0; i < 2; i++) + for (j = 1; j <= MAX_AMP; j++) model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 2 x 10ms + frames */ + + model[0].voiced = unpack(bits, &nbit, 1); + + model[1].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[1], &e[1], c2->xq_dec, WoE_index); + + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + lsp_indexes[i] = unpack(bits, &nbit, lsp_bits(i)); + } + decode_lsps_scalar(&lsps[1][0], lsp_indexes, LPC_ORD); + check_lsp_order(&lsps[1][0], LPC_ORD); + bw_expand_lsps(&lsps[1][0], LPC_ORD, 50.0, 100.0); + + /* interpolate ------------------------------------------------*/ + + /* Wo and energy are sampled every 20ms, so we interpolate just 1 + 10ms frame between 20ms samples */ + + interp_Wo(&model[0], &c2->prev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + + /* LSPs are sampled every 20ms so we interpolate the frame in + between, then recover spectral amplitudes */ + + interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, + LPC_ORD); + for (i = 0; i < 2; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[1]; + c2->prev_e_dec = e[1]; + for (i = 0; i < LPC_ORD; i++) c2->prev_lsps_dec[i] = lsps[1][i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1600 + AUTHOR......: David Rowe + DATE CREATED: Feb 28 2013 + + Encodes 320 speech samples (40ms of speech) into 64 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, Wo and E + frame 2: voicing bit + frame 3: voicing bit, Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Pitch (Wo) 7 7 14 + Energy 5 5 10 + Voicing (10ms update) 2 2 4 + TOTAL 14 50 64 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1600(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD + 1]; + float e; + int lsp_indexes[LPC_ORD]; + int Wo_index, e_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, scalar Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2 * c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3 * c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + pack(bits, &nbit, lsp_indexes[i], lsp_bits(i)); + } + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_1600 + AUTHOR......: David Rowe + DATE CREATED: 11 May 2012 + + Decodes frames of 64 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_1600(struct CODEC2 *c2, short speech[], + const unsigned char *bits) { + MODEL model[4]; + int lsp_indexes[LPC_ORD]; + float lsps[4][LPC_ORD]; + int Wo_index, e_index; + float e[4]; + float snr; + float ak[4][LPC_ORD + 1]; + int i, j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for (i = 0; i < 4; i++) + for (j = 1; j <= MAX_AMP; j++) model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 4 x 10ms + frames */ + + model[0].voiced = unpack(bits, &nbit, 1); + + model[1].voiced = unpack(bits, &nbit, 1); + Wo_index = unpack(bits, &nbit, WO_BITS); + model[1].Wo = decode_Wo(&c2->c2const, Wo_index, WO_BITS); + model[1].L = PI / model[1].Wo; + + e_index = unpack(bits, &nbit, E_BITS); + e[1] = decode_energy(e_index, E_BITS); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + Wo_index = unpack(bits, &nbit, WO_BITS); + model[3].Wo = decode_Wo(&c2->c2const, Wo_index, WO_BITS); + model[3].L = PI / model[3].Wo; + + e_index = unpack(bits, &nbit, E_BITS); + e[3] = decode_energy(e_index, E_BITS); + + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + lsp_indexes[i] = unpack(bits, &nbit, lsp_bits(i)); + } + decode_lsps_scalar(&lsps[3][0], lsp_indexes, LPC_ORD); + check_lsp_order(&lsps[3][0], LPC_ORD); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 50.0, 100.0); + + /* interpolate ------------------------------------------------*/ + + /* Wo and energy are sampled every 20ms, so we interpolate just 1 + 10ms frame between 20ms samples */ + + interp_Wo(&model[0], &c2->prev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3], c2->c2const.Wo_min); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for (i = 0, weight = 0.25; i < 3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, + LPC_ORD); + } + for (i = 0; i < 4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for (i = 0; i < LPC_ORD; i++) c2->prev_lsps_dec[i] = lsps[3][i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1400 + AUTHOR......: David Rowe + DATE CREATED: May 11 2012 + + Encodes 320 speech samples (40ms of speech) into 56 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, joint VQ of Wo and E + frame 2: voicing bit + frame 3: voicing bit, joint VQ of Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Energy+Wo 8 8 16 + Voicing (10ms update) 2 2 4 + TOTAL 10 46 56 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1400(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD + 1]; + float e; + int lsp_indexes[LPC_ORD]; + int WoE_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, joint Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2 * c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, joint Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3 * c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + pack(bits, &nbit, lsp_indexes[i], lsp_bits(i)); + } + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_1400 + AUTHOR......: David Rowe + DATE CREATED: 11 May 2012 + + Decodes frames of 56 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_1400(struct CODEC2 *c2, short speech[], + const unsigned char *bits) { + MODEL model[4]; + int lsp_indexes[LPC_ORD]; + float lsps[4][LPC_ORD]; + int WoE_index; + float e[4]; + float snr; + float ak[4][LPC_ORD + 1]; + int i, j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for (i = 0; i < 4; i++) + for (j = 1; j <= MAX_AMP; j++) model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 4 x 10ms + frames */ + + model[0].voiced = unpack(bits, &nbit, 1); + + model[1].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[1], &e[1], c2->xq_dec, WoE_index); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[3], &e[3], c2->xq_dec, WoE_index); + + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + lsp_indexes[i] = unpack(bits, &nbit, lsp_bits(i)); + } + decode_lsps_scalar(&lsps[3][0], lsp_indexes, LPC_ORD); + check_lsp_order(&lsps[3][0], LPC_ORD); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 50.0, 100.0); + + /* interpolate ------------------------------------------------*/ + + /* Wo and energy are sampled every 20ms, so we interpolate just 1 + 10ms frame between 20ms samples */ + + interp_Wo(&model[0], &c2->prev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3], c2->c2const.Wo_min); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for (i = 0, weight = 0.25; i < 3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, + LPC_ORD); + } + for (i = 0; i < 4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for (i = 0; i < LPC_ORD; i++) c2->prev_lsps_dec[i] = lsps[3][i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1300 + AUTHOR......: David Rowe + DATE CREATED: March 14 2013 + + Encodes 320 speech samples (40ms of speech) into 52 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, + frame 2: voicing bit + frame 3: voicing bit, Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Pitch (Wo) 0 7 7 + Energy 0 5 5 + Voicing (10ms update) 2 2 4 + TOTAL 2 50 52 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1300(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD + 1]; + float e; + int lsp_indexes[LPC_ORD]; + int Wo_index, e_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 2: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2 * c2->n_samp]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3 * c2->n_samp]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack_natural_or_gray(bits, &nbit, Wo_index, WO_BITS, c2->gray); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack_natural_or_gray(bits, &nbit, e_index, E_BITS, c2->gray); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + pack_natural_or_gray(bits, &nbit, lsp_indexes[i], lsp_bits(i), c2->gray); + } + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_1300 + AUTHOR......: David Rowe + DATE CREATED: 11 May 2012 + + Decodes frames of 52 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_1300(struct CODEC2 *c2, short speech[], + const unsigned char *bits, float ber_est) { + MODEL model[4]; + int lsp_indexes[LPC_ORD]; + float lsps[4][LPC_ORD]; + int Wo_index, e_index; + float e[4]; + float snr; + float ak[4][LPC_ORD + 1]; + int i, j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for (i = 0; i < 4; i++) + for (j = 1; j <= MAX_AMP; j++) model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 4 x 10ms + frames */ + + model[0].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[1].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[2].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[3].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + + Wo_index = unpack_natural_or_gray(bits, &nbit, WO_BITS, c2->gray); + model[3].Wo = decode_Wo(&c2->c2const, Wo_index, WO_BITS); + model[3].L = PI / model[3].Wo; + + e_index = unpack_natural_or_gray(bits, &nbit, E_BITS, c2->gray); + e[3] = decode_energy(e_index, E_BITS); + + for (i = 0; i < LSP_SCALAR_INDEXES; i++) { + lsp_indexes[i] = unpack_natural_or_gray(bits, &nbit, lsp_bits(i), c2->gray); + } + decode_lsps_scalar(&lsps[3][0], lsp_indexes, LPC_ORD); + check_lsp_order(&lsps[3][0], LPC_ORD); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 50.0, 100.0); + + if (ber_est > 0.15) { + model[0].voiced = model[1].voiced = model[2].voiced = model[3].voiced = 0; + e[3] = decode_energy(10, E_BITS); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 200.0, 200.0); + // fprintf(stderr, "soft mute\n"); + } + + /* interpolate ------------------------------------------------*/ + + /* Wo, energy, and LSPs are sampled every 40ms so we interpolate + the 3 frames in between */ + + for (i = 0, weight = 0.25; i < 3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, + LPC_ORD); + interp_Wo2(&model[i], &c2->prev_model_dec, &model[3], weight, + c2->c2const.Wo_min); + e[i] = interp_energy2(c2->prev_e_dec, e[3], weight); + } + + /* then recover spectral amplitudes */ + + for (i = 0; i < 4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for (i = 0; i < LPC_ORD; i++) c2->prev_lsps_dec[i] = lsps[3][i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1200 + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Encodes 320 speech samples (40ms of speech) into 48 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: voicing bit + frame 1: voicing bit, joint VQ of Wo and E + frame 2: voicing bit + frame 3: voicing bit, joint VQ of Wo and E, VQ LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 27 27 + Energy+Wo 8 8 16 + Voicing (10ms update) 2 2 4 + Spare 0 1 1 + TOTAL 10 38 48 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1200(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + float lsps[LPC_ORD]; + float lsps_[LPC_ORD]; + float ak[LPC_ORD + 1]; + float e; + int lsp_indexes[LPC_ORD]; + int WoE_index; + int i; + int spare = 0; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, joint Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2 * c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, joint Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3 * c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_vq(lsp_indexes, lsps, lsps_, LPC_ORD); + for (i = 0; i < LSP_PRED_VQ_INDEXES; i++) { + pack(bits, &nbit, lsp_indexes[i], lsp_pred_vq_bits(i)); + } + pack(bits, &nbit, spare, 1); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_1200 + AUTHOR......: David Rowe + DATE CREATED: 14 Feb 2012 + + Decodes frames of 48 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_1200(struct CODEC2 *c2, short speech[], + const unsigned char *bits) { + MODEL model[4]; + int lsp_indexes[LPC_ORD]; + float lsps[4][LPC_ORD]; + int WoE_index; + float e[4]; + float snr; + float ak[4][LPC_ORD + 1]; + int i, j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for (i = 0; i < 4; i++) + for (j = 1; j <= MAX_AMP; j++) model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 4 x 10ms + frames */ + + model[0].voiced = unpack(bits, &nbit, 1); + + model[1].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[1], &e[1], c2->xq_dec, WoE_index); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[3], &e[3], c2->xq_dec, WoE_index); + + for (i = 0; i < LSP_PRED_VQ_INDEXES; i++) { + lsp_indexes[i] = unpack(bits, &nbit, lsp_pred_vq_bits(i)); + } + decode_lsps_vq(lsp_indexes, &lsps[3][0], LPC_ORD, 0); + check_lsp_order(&lsps[3][0], LPC_ORD); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 50.0, 100.0); + + /* interpolate ------------------------------------------------*/ + + /* Wo and energy are sampled every 20ms, so we interpolate just 1 + 10ms frame between 20ms samples */ + + interp_Wo(&model[0], &c2->prev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3], c2->c2const.Wo_min); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for (i = 0, weight = 0.25; i < 3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, + LPC_ORD); + } + for (i = 0; i < 4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for (i = 0; i < LPC_ORD; i++) c2->prev_lsps_dec[i] = lsps[3][i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_700c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Version c of 700 bit/s codec that uses newamp1 fixed rate VQ of amplitudes. + + Encodes 320 speech samples (40ms of speech) into 28 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: nothing + frame 1: nothing + frame 2: nothing + frame 3: 18 bit 2 stage VQ (9 bits/stage), 4 bits energy, + 6 bit scalar Wo/voicing. No spare bits. + + Voicing is encoded using the 0 index of the Wo quantiser. + + The bit allocation is: + + Parameter frames 1-3 frame 4 Total + ----------------------------------------------------------- + Harmonic magnitudes (rate k VQ) 0 18 18 + Energy 0 4 4 + log Wo/voicing 0 6 6 + TOTAL 0 28 28 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_700c(struct CODEC2 *c2, unsigned char *bits, + short speech[]) { + MODEL model; + int indexes[4], i, M = 4; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + for (i = 0; i < M; i++) { + analyse_one_frame(c2, &model, &speech[i * c2->n_samp]); + } + + int K = 20; + float rate_K_vec[K], mean; + float rate_K_vec_no_mean[K], rate_K_vec_no_mean_[K]; + + newamp1_model_to_indexes(&c2->c2const, indexes, &model, rate_K_vec, + c2->rate_K_sample_freqs_kHz, K, &mean, + rate_K_vec_no_mean, rate_K_vec_no_mean_, &c2->se, + c2->eq, c2->eq_en); + c2->nse += K; + + pack_natural_or_gray(bits, &nbit, indexes[0], 9, 0); + pack_natural_or_gray(bits, &nbit, indexes[1], 9, 0); + pack_natural_or_gray(bits, &nbit, indexes[2], 4, 0); + pack_natural_or_gray(bits, &nbit, indexes[3], 6, 0); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_700c + AUTHOR......: David Rowe + DATE CREATED: August 2015 + + Decodes frames of 28 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_700c(struct CODEC2 *c2, short speech[], + const unsigned char *bits) { + MODEL model[4]; + int indexes[4]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 4, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + int M = 4; + COMP HH[M][MAX_AMP + 1]; + float interpolated_surface_[M][NEWAMP1_K]; + + newamp1_indexes_to_model( + &c2->c2const, model, (COMP *)HH, (float *)interpolated_surface_, + c2->prev_rate_K_vec_, &c2->Wo_left, &c2->voicing_left, + c2->rate_K_sample_freqs_kHz, NEWAMP1_K, c2->phase_fft_fwd_cfg, + c2->phase_fft_inv_cfg, indexes, c2->user_rate_K_vec_no_mean_, + c2->post_filter_en); + + for (i = 0; i < M; i++) { + /* 700C is a little quieter so lets apply some experimentally derived audio + * gain */ + synthesise_one_frame(c2, &speech[c2->n_samp * i], &model[i], &HH[i][0], + 1.5); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_energy_700c + AUTHOR......: Jeroen Vreeken + DATE CREATED: Jan 2017 + + Decodes energy value from encoded bits. + +\*---------------------------------------------------------------------------*/ + +float codec2_energy_700c(struct CODEC2 *c2, const unsigned char *bits) { + int indexes[4]; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 4, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + float mean = newamp1_energy_cb[0].cb[indexes[2]]; + mean -= 10; + if (indexes[3] == 0) mean -= 10; + + return POW10F(mean / 10.0); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_get_energy() + AUTHOR......: Jeroen Vreeken + DATE CREATED: 08/03/2016 + + Extract energy value from an encoded frame. + +\*---------------------------------------------------------------------------*/ + +float codec2_get_energy(struct CODEC2 *c2, const unsigned char *bits) { + assert(c2 != NULL); + assert((CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) || + (CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) || + (CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) || + (CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) || + (CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) || + (CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) || + (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode))); + MODEL model; + float xq_dec[2] = {}; + int e_index, WoE_index; + float e = 0.0f; + unsigned int nbit; + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) { + nbit = 1 + 1 + WO_BITS; + e_index = unpack(bits, &nbit, E_BITS); + e = decode_energy(e_index, E_BITS); + } + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model, &e, xq_dec, WoE_index); + } + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) { + nbit = 1 + 1 + WO_BITS; + e_index = unpack(bits, &nbit, E_BITS); + e = decode_energy(e_index, E_BITS); + } + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model, &e, xq_dec, WoE_index); + } + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) { + nbit = 1 + 1 + 1 + 1 + WO_BITS; + e_index = unpack_natural_or_gray(bits, &nbit, E_BITS, c2->gray); + e = decode_energy(e_index, E_BITS); + } + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model, &e, xq_dec, WoE_index); + } + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + e = codec2_energy_700c(c2, bits); + } + + return e; +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: synthesise_one_frame() + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Synthesise 80 speech samples (10ms) from model parameters. + +\*---------------------------------------------------------------------------*/ + +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, + COMP Aw[], float gain) { + int i; + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + /* newamp1, we've already worked out rate L phase */ + COMP *H = Aw; + phase_synth_zero_order(c2->n_samp, model, &c2->ex_phase, H); + } else { + /* LPC based phase synthesis */ + COMP H[MAX_AMP + 1]; + sample_phase(model, H, Aw); + phase_synth_zero_order(c2->n_samp, model, &c2->ex_phase, H); + } + + postfilter(model, &c2->bg_est); + synthesise(c2->n_samp, c2->fftr_inv_cfg, c2->Sn_, model, c2->Pn, 1); + + for (i = 0; i < c2->n_samp; i++) { + c2->Sn_[i] *= gain; + } + + ear_protection(c2->Sn_, c2->n_samp); + + for (i = 0; i < c2->n_samp; i++) { + if (c2->Sn_[i] > 32767.0) + speech[i] = 32767; + else if (c2->Sn_[i] < -32767.0) + speech[i] = -32767; + else + speech[i] = c2->Sn_[i]; + } +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: analyse_one_frame() + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Extract sinusoidal model parameters from 80 speech samples (10ms of + speech). + +\*---------------------------------------------------------------------------*/ + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]) { + COMP Sw[FFT_ENC]; + float pitch; + int i; + int n_samp = c2->n_samp; + int m_pitch = c2->m_pitch; + + /* Read input speech */ + + for (i = 0; i < m_pitch - n_samp; i++) c2->Sn[i] = c2->Sn[i + n_samp]; + for (i = 0; i < n_samp; i++) c2->Sn[i + m_pitch - n_samp] = speech[i]; + + dft_speech(&c2->c2const, c2->fft_fwd_cfg, Sw, c2->Sn, c2->w); + + /* Estimate pitch */ + nlp(c2->nlp, c2->Sn, n_samp, &pitch, Sw, c2->W, &c2->prev_f0_enc); + model->Wo = TWO_PI / pitch; + model->L = PI / model->Wo; + + /* estimate model parameters */ + two_stage_pitch_refinement(&c2->c2const, model, Sw); + + /* estimate phases when doing ML experiments */ + estimate_amplitudes(model, Sw, c2->W, 0); + est_voicing_mbe(&c2->c2const, model, Sw, c2->W); +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: ear_protection() + AUTHOR......: David Rowe + DATE CREATED: Nov 7 2012 + + Limits output level to protect ears when there are bit errors or the input + is overdriven. This doesn't correct or mask bit errors, just reduces the + worst of their damage. + +\*---------------------------------------------------------------------------*/ + +static void ear_protection(float in_out[], int n) { + float max_sample, over, gain; + int i; + + /* find maximum sample in frame */ + + max_sample = 0.0; + for (i = 0; i < n; i++) + if (in_out[i] > max_sample) max_sample = in_out[i]; + + /* determine how far above set point */ + + over = max_sample / 30000.0; + + /* If we are x dB over set point we reduce level by 2x dB, this + attenuates major excursions in amplitude (likely to be caused + by bit errors) more than smaller ones */ + + if (over > 1.0) { + gain = 1.0 / (over * over); + for (i = 0; i < n; i++) in_out[i] *= gain; + } +} + +void codec2_set_lpc_post_filter(struct CODEC2 *c2, int enable, int bass_boost, + float beta, float gamma) { + assert((beta >= 0.0) && (beta <= 1.0)); + assert((gamma >= 0.0) && (gamma <= 1.0)); + c2->lpc_pf = enable; + c2->bass_boost = bass_boost; + c2->beta = beta; + c2->gamma = gamma; +} + +/* + Allows optional stealing of one of the voicing bits for use as a + spare bit, only 1300 & 1400 & 1600 bit/s supported for now. + Experimental method of sending voice/data frames for FreeDV. +*/ + +int codec2_get_spare_bit_index(struct CODEC2 *c2) { + assert(c2 != NULL); + + switch (c2->mode) { + case CODEC2_MODE_1300: + return 2; // bit 2 (3th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_1400: + return 10; // bit 10 (11th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_1600: + return 15; // bit 15 (16th bit) is v2 (third voicing bit) + break; + } + + return -1; +} + +/* + Reconstructs the spare voicing bit. Note works on unpacked bits + for convenience. +*/ + +int codec2_rebuild_spare_bit(struct CODEC2 *c2, char unpacked_bits[]) { + int v1, v3; + + assert(c2 != NULL); + + v1 = unpacked_bits[1]; + + switch (c2->mode) { + case CODEC2_MODE_1300: + + v3 = unpacked_bits[1 + 1 + 1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[2] = (v1 || v3); + + return 0; + + break; + + case CODEC2_MODE_1400: + + v3 = unpacked_bits[1 + 1 + 8 + 1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[10] = (v1 || v3); + + return 0; + + break; + + case CODEC2_MODE_1600: + v3 = unpacked_bits[1 + 1 + 8 + 5 + 1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[15] = (v1 || v3); + + return 0; + + break; + } + + return -1; +} + +void codec2_set_natural_or_gray(struct CODEC2 *c2, int gray) { + assert(c2 != NULL); + c2->gray = gray; +} + +void codec2_set_softdec(struct CODEC2 *c2, float *softdec) { + assert(c2 != NULL); + c2->softdec = softdec; +} + +float codec2_get_var(struct CODEC2 *codec2_state) { + if (codec2_state->nse) + return codec2_state->se / codec2_state->nse; + else + return 0; +} + +float *codec2_enable_user_ratek(struct CODEC2 *codec2_state, int *K) { + codec2_state->user_rate_K_vec_no_mean_ = + (float *)malloc(sizeof(float) * NEWAMP1_K); + *K = NEWAMP1_K; + return codec2_state->user_rate_K_vec_no_mean_; +} + +void codec2_700c_post_filter(struct CODEC2 *codec2_state, bool en) { + codec2_state->post_filter_en = en; +} + +void codec2_700c_eq(struct CODEC2 *codec2_state, bool en) { + codec2_state->eq_en = en; + codec2_state->se = 0.0; + codec2_state->nse = 0; +} diff --git a/src/codec2.h b/src/codec2.h new file mode 100644 index 0000000..9f88264 --- /dev/null +++ b/src/codec2.h @@ -0,0 +1,120 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2.h + AUTHOR......: David Rowe + DATE CREATED: 21 August 2010 + + Codec 2 fully quantised encoder and decoder functions. If you want use + Codec 2, these are the functions you need to call. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __CODEC2__ +#define __CODEC2__ +#include <codec2/version.h> +#include <stdbool.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define CODEC2_MODE_3200 0 +#define CODEC2_MODE_2400 1 +#define CODEC2_MODE_1600 2 +#define CODEC2_MODE_1400 3 +#define CODEC2_MODE_1300 4 +#define CODEC2_MODE_1200 5 +#define CODEC2_MODE_700C 8 + +#ifndef CODEC2_MODE_EN_DEFAULT +#define CODEC2_MODE_EN_DEFAULT 1 +#endif + +// by default we enable all modes +// disable during compile time with -DCODEC2_MODE_1600_EN=0 +// all but CODEC2 1600 are enabled then + +// or the other way round +// -DCODEC2_MODE_EN_DEFAULT=0 -DCODEC2_MODE_1600_EN=1 +// only CODEC2 Mode 1600 + +#if !defined(CODEC2_MODE_3200_EN) +#define CODEC2_MODE_3200_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_2400_EN) +#define CODEC2_MODE_2400_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1600_EN) +#define CODEC2_MODE_1600_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1400_EN) +#define CODEC2_MODE_1400_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1300_EN) +#define CODEC2_MODE_1300_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1200_EN) +#define CODEC2_MODE_1200_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_700C_EN) +#define CODEC2_MODE_700C_EN CODEC2_MODE_EN_DEFAULT +#endif + +#define CODEC2_MODE_ACTIVE(mode_name, var) \ + ((mode_name##_EN) == 0 ? 0 : (var) == mode_name) + +struct CODEC2; + +struct CODEC2 *codec2_create(int mode); +void codec2_destroy(struct CODEC2 *codec2_state); +void codec2_encode(struct CODEC2 *codec2_state, unsigned char bytes[], + short speech_in[]); +void codec2_decode(struct CODEC2 *codec2_state, short speech_out[], + const unsigned char bytes[]); +void codec2_decode_ber(struct CODEC2 *codec2_state, short speech_out[], + const unsigned char *bytes, float ber_est); +int codec2_samples_per_frame(struct CODEC2 *codec2_state); +int codec2_bits_per_frame(struct CODEC2 *codec2_state); +int codec2_bytes_per_frame(struct CODEC2 *codec2_state); + +void codec2_set_lpc_post_filter(struct CODEC2 *codec2_state, int enable, + int bass_boost, float beta, float gamma); +int codec2_get_spare_bit_index(struct CODEC2 *codec2_state); +int codec2_rebuild_spare_bit(struct CODEC2 *codec2_state, char unpacked_bits[]); +void codec2_set_natural_or_gray(struct CODEC2 *codec2_state, int gray); +void codec2_set_softdec(struct CODEC2 *c2, float *softdec); +float codec2_get_energy(struct CODEC2 *codec2_state, const unsigned char *bits); + +// support for ML and VQ experiments +void codec2_open_mlfeat(struct CODEC2 *codec2_state, char *feat_filename, + char *model_filename); +void codec2_load_codebook(struct CODEC2 *codec2_state, int num, char *filename); +float codec2_get_var(struct CODEC2 *codec2_state); +float *codec2_enable_user_ratek(struct CODEC2 *codec2_state, int *K); + +// 700C post filter and equaliser +void codec2_700c_post_filter(struct CODEC2 *codec2_state, bool en); +void codec2_700c_eq(struct CODEC2 *codec2_state, bool en); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/codec2_fft.c b/src/codec2_fft.c new file mode 100644 index 0000000..7a75062 --- /dev/null +++ b/src/codec2_fft.c @@ -0,0 +1,150 @@ +/* + * codec2_fft.c + * + * Created on: 24.09.2016 + * Author: danilo + */ + +#include "codec2_fft.h" + +#include "debug_alloc.h" + +#ifdef USE_KISS_FFT +#include "_kiss_fft_guts.h" + +#else +#if 0 +// caching constants in RAM did not seem to have an effect on performance +// TODO: Decide what to with this code +#define FFT_INIT_CACHE_SIZE 4 +const arm_cfft_instance_f32* fft_init_cache[FFT_INIT_CACHE_SIZE]; + +static const arm_cfft_instance_f32* arm_fft_instance2ram(const arm_cfft_instance_f32* in) +{ + + arm_cfft_instance_f32* out = malloc(sizeof(arm_cfft_instance_f32)); + + if (out) { + memcpy(out,in,sizeof(arm_cfft_instance_f32)); + out->pBitRevTable = malloc(out->bitRevLength * sizeof(uint16_t)); + out->pTwiddle = malloc(out->fftLen * sizeof(float32_t)); + memcpy((void*)out->pBitRevTable,in->pBitRevTable,out->bitRevLength * sizeof(uint16_t)); + memcpy((void*)out->pTwiddle,in->pTwiddle,out->fftLen * sizeof(float32_t)); + } + return out; +} + + +static const arm_cfft_instance_f32* arm_fft_cache_get(const arm_cfft_instance_f32* romfft) +{ + const arm_cfft_instance_f32* retval = NULL; + static int used = 0; + for (int i = 0; fft_init_cache[i] != NULL && i < used; i++) + { + if (romfft->fftLen == fft_init_cache[i]->fftLen) + { + retval = fft_init_cache[i]; + break; + } + } + if (retval == NULL && used < FFT_INIT_CACHE_SIZE) + { + retval = arm_fft_instance2ram(romfft); + fft_init_cache[used++] = retval; + } + if (retval == NULL) + { + retval = romfft; + } + return retval; +} +#endif +#endif + +void codec2_fft_free(codec2_fft_cfg cfg) { +#ifdef USE_KISS_FFT + KISS_FFT_FREE(cfg); +#else + FREE(cfg); +#endif +} + +codec2_fft_cfg codec2_fft_alloc(int nfft, int inverse_fft, void* mem, + size_t* lenmem) { + codec2_fft_cfg retval; +#ifdef USE_KISS_FFT + retval = kiss_fft_alloc(nfft, inverse_fft, mem, lenmem); +#else + retval = MALLOC(sizeof(codec2_fft_struct)); + retval->inverse = inverse_fft; + switch (nfft) { + case 128: + retval->instance = &arm_cfft_sR_f32_len128; + break; + case 256: + retval->instance = &arm_cfft_sR_f32_len256; + break; + case 512: + retval->instance = &arm_cfft_sR_f32_len512; + break; + // case 1024: + // retval->instance = &arm_cfft_sR_f32_len1024; + // break; + default: + abort(); + } + // retval->instance = arm_fft_cache_get(retval->instance); +#endif + return retval; +} + +codec2_fftr_cfg codec2_fftr_alloc(int nfft, int inverse_fft, void* mem, + size_t* lenmem) { + codec2_fftr_cfg retval; +#ifdef USE_KISS_FFT + retval = kiss_fftr_alloc(nfft, inverse_fft, mem, lenmem); +#else + retval = MALLOC(sizeof(codec2_fftr_struct)); + retval->inverse = inverse_fft; + retval->instance = MALLOC(sizeof(arm_rfft_fast_instance_f32)); + arm_rfft_fast_init_f32(retval->instance, nfft); + // memcpy(&retval->instance->Sint,arm_fft_cache_get(&retval->instance->Sint),sizeof(arm_cfft_instance_f32)); +#endif + return retval; +} +void codec2_fftr_free(codec2_fftr_cfg cfg) { +#ifdef USE_KISS_FFT + KISS_FFT_FREE(cfg); +#else + FREE(cfg->instance); + FREE(cfg); +#endif +} + +// there is a little overhead for inplace kiss_fft but this is +// on the powerful platforms like the Raspberry or even x86 PC based ones +// not noticeable +// the reduced usage of RAM and increased performance on STM32 platforms +// should be worth it. +void codec2_fft_inplace(codec2_fft_cfg cfg, codec2_fft_cpx* inout) { +#ifdef USE_KISS_FFT + // decide whether to use the local stack based buffer for in + // or to allow kiss_fft to allocate RAM + // second part is just to play safe since first method + // is much faster and uses less RAM + if (cfg->nfft <= 512) { + kiss_fft_cpx in[512]; + memcpy(in, inout, cfg->nfft * sizeof(kiss_fft_cpx)); + kiss_fft(cfg, in, (kiss_fft_cpx*)inout); + } else { + kiss_fft(cfg, (kiss_fft_cpx*)inout, (kiss_fft_cpx*)inout); + } +#else + arm_cfft_f32(cfg->instance, (float*)inout, cfg->inverse, 1); + if (cfg->inverse) { + arm_scale_f32((float*)inout, cfg->instance->fftLen, (float*)inout, + cfg->instance->fftLen * 2); + } + +#endif +} diff --git a/src/codec2_fft.h b/src/codec2_fft.h new file mode 100644 index 0000000..cea8f35 --- /dev/null +++ b/src/codec2_fft.h @@ -0,0 +1,99 @@ +/* + * codec2_fft.h + * + * Created on: 17.09.2016 + * Author: danilo + */ + +#ifndef DRIVERS_FREEDV_CODEC2_FFT_H_ +#define DRIVERS_FREEDV_CODEC2_FFT_H_ + +// #include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifndef FDV_ARM_MATH +#define USE_KISS_FFT +#else +#include "arm_const_structs.h" +#include "arm_math.h" +#endif + +#include "comp.h" +#include "defines.h" + +typedef COMP codec2_fft_cpx; +#include "kiss_fftr.h" + +#ifdef USE_KISS_FFT +#include "kiss_fft.h" +typedef kiss_fftr_cfg codec2_fftr_cfg; +typedef kiss_fft_cfg codec2_fft_cfg; +typedef kiss_fft_scalar codec2_fft_scalar; +#else +typedef float32_t codec2_fft_scalar; +typedef struct { + arm_rfft_fast_instance_f32* instance; + int inverse; +} codec2_fftr_struct; + +typedef codec2_fftr_struct* codec2_fftr_cfg; + +typedef struct { + const arm_cfft_instance_f32* instance; + int inverse; +} codec2_fft_struct; +typedef codec2_fft_struct* codec2_fft_cfg; +#endif + +static inline void codec2_fftr(codec2_fftr_cfg cfg, codec2_fft_scalar* in, + codec2_fft_cpx* out) { +#ifdef USE_KISS_FFT + kiss_fftr(cfg, in, (kiss_fft_cpx*)out); +#else + arm_rfft_fast_f32(cfg->instance, in, (float*)out, cfg->inverse); + out->imag = 0; // remove out[FFT_ENC/2]->real stored in out[0].imag +#endif +} + +static inline void codec2_fftri(codec2_fftr_cfg cfg, codec2_fft_cpx* in, + codec2_fft_scalar* out) { +#ifdef USE_KISS_FFT + kiss_fftri(cfg, (kiss_fft_cpx*)in, out); +#else + arm_rfft_fast_f32(cfg->instance, (float*)in, out, cfg->inverse); + // arm_scale_f32(out,cfg->instance->fftLenRFFT,out,cfg->instance->fftLenRFFT); +#endif +} + +codec2_fft_cfg codec2_fft_alloc(int nfft, int inverse_fft, void* mem, + size_t* lenmem); +codec2_fftr_cfg codec2_fftr_alloc(int nfft, int inverse_fft, void* mem, + size_t* lenmem); +void codec2_fft_free(codec2_fft_cfg cfg); +void codec2_fftr_free(codec2_fftr_cfg cfg); + +static inline void codec2_fft(codec2_fft_cfg cfg, codec2_fft_cpx* in, + codec2_fft_cpx* out) { +#ifdef USE_KISS_FFT + kiss_fft(cfg, (kiss_fft_cpx*)in, (kiss_fft_cpx*)out); +#else + memcpy(out, in, cfg->instance->fftLen * 2 * sizeof(float)); + arm_cfft_f32(cfg->instance, (float*)out, cfg->inverse, 1); + // TODO: this is not nice, but for now required to keep changes minimal + // however, since main goal is to reduce the memory usage + // we should convert to an in place interface + // on PC like platforms the overhead of using the "inplace" kiss_fft calls + // is neglectable compared to the gain in memory usage on STM32 platforms + if (cfg->inverse) { + arm_scale_f32((float*)out, cfg->instance->fftLen, (float*)out, + cfg->instance->fftLen * 2); + } +#endif +} + +void codec2_fft_inplace(codec2_fft_cfg cfg, codec2_fft_cpx* inout); + +#endif diff --git a/src/codec2_fifo.c b/src/codec2_fifo.c new file mode 100644 index 0000000..55d8b26 --- /dev/null +++ b/src/codec2_fifo.c @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fifo.c + AUTHOR......: David Rowe + DATE CREATED: Oct 15 2012 + + A FIFO design useful in gluing the FDMDV modem and codec together in + integrated applications. The unittest/tfifo indicates these + routines are thread safe without the need for synchronisation + object, e.g. a different thread can read and write to a fifo at the + same time. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "codec2_fifo.h" + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +struct FIFO { + short *buf; + short *pin; + short *pout; + int nshort; +}; + +// standard create function +struct FIFO *codec2_fifo_create(int nshort) { + short *buf = (short *)malloc(sizeof(short) * nshort); + assert(buf != NULL); + return codec2_fifo_create_buf(nshort, buf); +} + +// alternate create function where buffer is externally supplied +struct FIFO *codec2_fifo_create_buf(int nshort, short *buf) { + struct FIFO *fifo; + assert(buf != NULL); + fifo = (struct FIFO *)malloc(sizeof(struct FIFO)); + assert(fifo != NULL); + + fifo->buf = buf; + fifo->pin = fifo->buf; + fifo->pout = fifo->buf; + fifo->nshort = nshort; + + return fifo; +} + +void codec2_fifo_destroy(struct FIFO *fifo) { + assert(fifo != NULL); + free(fifo->buf); + free(fifo); +} + +int codec2_fifo_write(struct FIFO *fifo, short data[], int n) { + int i; + short *pdata; + short *pin = fifo->pin; + + assert(fifo != NULL); + assert(data != NULL); + + if (n > codec2_fifo_free(fifo)) { + return -1; + } else { + /* This could be made more efficient with block copies + using memcpy */ + + pdata = data; + for (i = 0; i < n; i++) { + *pin++ = *pdata++; + if (pin == (fifo->buf + fifo->nshort)) pin = fifo->buf; + } + fifo->pin = pin; + } + + return 0; +} + +int codec2_fifo_read(struct FIFO *fifo, short data[], int n) { + int i; + short *pdata; + short *pout = fifo->pout; + + assert(fifo != NULL); + assert(data != NULL); + + if (n > codec2_fifo_used(fifo)) { + return -1; + } else { + /* This could be made more efficient with block copies + using memcpy */ + + pdata = data; + for (i = 0; i < n; i++) { + *pdata++ = *pout++; + if (pout == (fifo->buf + fifo->nshort)) pout = fifo->buf; + } + fifo->pout = pout; + } + + return 0; +} + +int codec2_fifo_used(const struct FIFO *const fifo) { + short *pin = fifo->pin; + short *pout = fifo->pout; + unsigned int used; + + assert(fifo != NULL); + if (pin >= pout) + used = pin - pout; + else + used = fifo->nshort + (unsigned int)(pin - pout); + + return used; +} + +int codec2_fifo_free(const struct FIFO *const fifo) { + // available storage is one less than nshort as prd == pwr + // is reserved for empty rather than full + + return fifo->nshort - codec2_fifo_used(fifo) - 1; +} diff --git a/src/codec2_fifo.h b/src/codec2_fifo.h new file mode 100644 index 0000000..c96f785 --- /dev/null +++ b/src/codec2_fifo.h @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fifo.h + AUTHOR......: David Rowe + DATE CREATED: Oct 15 2012 + + A FIFO design useful in gluing the FDMDV modem and codec together in + integrated applications. + + The name codec2_fifo.h is used to make it unique when "make + installed". + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __FIFO__ +#define __FIFO__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct FIFO; + +struct FIFO *codec2_fifo_create(int nshort); +struct FIFO *codec2_fifo_create_buf(int nshort, short *buf); +void codec2_fifo_destroy(struct FIFO *fifo); +int codec2_fifo_write(struct FIFO *fifo, short data[], int n); +int codec2_fifo_read(struct FIFO *fifo, short data[], int n); + +/* Return the number of bytes stored in the FIFO */ +int codec2_fifo_used(const struct FIFO *const fifo); + +/* Return the space available in the FIFO */ +int codec2_fifo_free(const struct FIFO *const fifo); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/codec2_internal.h b/src/codec2_internal.h new file mode 100644 index 0000000..32cd7eb --- /dev/null +++ b/src/codec2_internal.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_internal.h + AUTHOR......: David Rowe + DATE CREATED: April 16 2012 + + Header file for Codec2 internal states, exposed via this header + file to assist in testing. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __CODEC2_INTERNAL__ +#define __CODEC2_INTERNAL__ +#include <stdbool.h> + +#include "codec2_fft.h" +#include "newamp1.h" + +struct CODEC2 { + int mode; + C2CONST c2const; + int Fs; + int n_samp; + int m_pitch; + codec2_fft_cfg fft_fwd_cfg; /* forward FFT config */ + codec2_fftr_cfg fftr_fwd_cfg; /* forward real FFT config */ + float *w; /* [m_pitch] time domain hamming window */ + float W[FFT_ENC]; /* DFT of w[] */ + float *Pn; /* [2*n_samp] trapezoidal synthesis window */ + float *bpf_buf; /* buffer for band pass filter */ + float *Sn; /* [m_pitch] input speech */ + float hpf_states[2]; /* high pass filter states */ + void *nlp; /* pitch predictor states */ + int gray; /* non-zero for gray encoding */ + + codec2_fftr_cfg fftr_inv_cfg; /* inverse FFT config */ + float *Sn_; /* [2*n_samp] synthesised output speech */ + float ex_phase; /* excitation model phase track */ + float bg_est; /* background noise estimate for post filter */ + float prev_f0_enc; /* previous frame's f0 estimate */ + MODEL prev_model_dec; /* previous frame's model parameters */ + float prev_lsps_dec[LPC_ORD]; /* previous frame's LSPs */ + float prev_e_dec; /* previous frame's LPC energy */ + + int lpc_pf; /* LPC post filter on */ + int bass_boost; /* LPC post filter bass boost */ + float beta; /* LPC post filter parameters */ + float gamma; + + float xq_enc[2]; /* joint pitch and energy VQ states */ + float xq_dec[2]; + + int smoothing; /* enable smoothing for channels with errors */ + float *softdec; /* optional soft decn bits from demod */ + + /* newamp1 states */ + + float rate_K_sample_freqs_kHz[NEWAMP1_K]; + float prev_rate_K_vec_[NEWAMP1_K]; + float Wo_left; + int voicing_left; + codec2_fft_cfg phase_fft_fwd_cfg; + codec2_fft_cfg phase_fft_inv_cfg; + float se; /* running sum of squared error */ + unsigned int nse; /* number of terms in sum */ + float *user_rate_K_vec_no_mean_; /* optional, user supplied vector for + quantisation experiments */ + bool post_filter_en; + float eq[NEWAMP1_K]; /* optional equaliser */ + bool eq_en; + + /* used to dump features for deep learning experiments */ + FILE *fmlfeat, *fmlmodel; + + /* encode/decode function pointers for the selected mode */ + void (*encode)(struct CODEC2 *c2, unsigned char *bits, short speech[]); + void (*decode)(struct CODEC2 *c2, short speech[], const unsigned char *bits); + void (*decode_ber)(struct CODEC2 *c2, short speech[], + const unsigned char *bits, float ber_est); +}; + +// test and debug +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, + COMP Aw[], float gain); +#endif diff --git a/src/codec2_math.h b/src/codec2_math.h new file mode 100644 index 0000000..c7312f0 --- /dev/null +++ b/src/codec2_math.h @@ -0,0 +1,83 @@ +#ifndef CODEC2_MATH_H +#define CODEC2_MATH_H + +//========================================================================== +// Name: codec2_math.h +// +// Purpose: A wrapper around architecture specific math libraries +// used on embedded devices to improve Codec2 performance. +// Created: May 15, 2022 +// Authors: Mooneer Salem +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program; if not, see <http://www.gnu.org/licenses/>. +// +//========================================================================== + +#include <stddef.h> + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +#include "comp.h" + +//========================================================================== +// Note: the functions in this file must be implemented in your code if you +// intend on using Codec2 in a non-ARM based embedded device. Otherwise, +// linker errors will occur. For ARM, a default implementation of these +// functions exists in codec2_math_arm.c. +//========================================================================== + +//========================================================================== +/// Calculates the dot product of two real-valued float vectors. +/// +/// @param leftHandSideRealVector A pointer to the first vector to use for the +/// dot product. +/// @param rightHandSideRealVector A pointer to the second vector to use for the +/// dot product. +/// @param vectorLength The length of the vector. Both vectors should be at +/// least this long. +/// @param resultReal A pointer to the variable in which to store the scalar +/// result. +/// +//========================================================================== +void codec2_dot_product_f32(float* leftHandSideRealVector, + float* rightHandSideRealVector, size_t vectorLength, + float* resultReal); + +//========================================================================== +/// Calculates the dot product of two complex-valued float vectors. +/// +/// @param leftHandSideComplexVector A pointer to the first vector to use for +/// the dot product. +/// @param rightHandSideComplexVector A pointer to the second vector to use for +/// the dot product. +/// @param vectorLength The length of the vector. Both vectors should be at +/// least this long. +/// @param resultReal A pointer to the variable in which to store the real +/// component of the result. +/// @param resultImag A pointer to the variable in which to store the imaginary +/// component of the result. +/// +//========================================================================== +void codec2_complex_dot_product_f32(COMP* leftHandSideComplexVector, + COMP* rightHandSideComplexVector, + size_t vectorLength, float* resultReal, + float* resultImag); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // CODEC2_MATH_H diff --git a/src/codec2_math_arm.c b/src/codec2_math_arm.c new file mode 100644 index 0000000..b8af967 --- /dev/null +++ b/src/codec2_math_arm.c @@ -0,0 +1,73 @@ +//========================================================================== +// Name: codec2_math_arm.c +// +// Purpose: A wrapper around architecture specific math libraries +// used on ARM embedded devices to improve Codec2 performance. +// Created: May 15, 2022 +// Authors: Mooneer Salem +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program; if not, see <http://www.gnu.org/licenses/>. +// +//========================================================================== + +#if defined(__EMBEDDED__) && defined(__ARM_ARCH) +#include "arm_math.h" +#include "codec2_math.h" + +//========================================================================== +/// Calculates the dot product of two real-valued float vectors. +/// +/// @param leftHandSideRealVector A pointer to the first vector to use for the +/// dot product. +/// @param rightHandSideRealVector A pointer to the second vector to use for the +/// dot product. +/// @param vectorLength The length of the vector. Both vectors should be at +/// least this long. +/// @param resultReal A pointer to the variable in which to store the scalar +/// result. +//========================================================================== +void codec2_dot_product_f32(float* leftHandSideRealVector, + float* rightHandSideRealVector, size_t vectorLength, + float* resultReal) { + arm_dot_prod_f32(leftHandSideRealVector, rightHandSideRealVector, + vectorLength, resultReal); +} + +//========================================================================== +/// Calculates the dot product of two complex-valued float vectors. +/// +/// @param leftHandSideComplexVector A pointer to the first vector to use for +/// the dot product. +/// @param rightHandSideComplexVector A pointer to the second vector to use for +/// the dot product. +/// @param vectorLength The length of the vector. Both vectors should be at +/// least this long. +/// @param resultReal A pointer to the variable in which to store the real +/// component of the result. +/// @param resultImag A pointer to the variable in which to store the imaginary +/// component of the result. +/// +/// @note Each array of floats is organized with even elements being real and +/// odd elements imaginary. +//========================================================================== +void codec2_complex_dot_product_f32(COMP* leftHandSideComplexVector, + COMP* rightHandSideComplexVector, + size_t vectorLength, float* resultReal, + float* resultImag) { + arm_cmplx_dot_prod_f32((float*)leftHandSideComplexVector, + (float*)rightHandSideComplexVector, vectorLength, + resultReal, resultImag); +} + +#endif // defined(__EMBEDDED__) && defined(__ARM_ARCH) diff --git a/src/comp.h b/src/comp.h new file mode 100644 index 0000000..ffc20c1 --- /dev/null +++ b/src/comp.h @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: comp.h + AUTHOR......: David Rowe + DATE CREATED: 24/08/09 + + Complex number definition. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __COMP__ +#define __COMP__ + +/* Complex number */ + +typedef struct { + float real; + float imag; +} COMP; + +#endif diff --git a/src/comp_prim.h b/src/comp_prim.h new file mode 100644 index 0000000..e0166d3 --- /dev/null +++ b/src/comp_prim.h @@ -0,0 +1,138 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: comp_prim.h + AUTHOR......: David Rowe + DATE CREATED: Marh 2015 + + Complex number maths primitives. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __COMP_PRIM__ +#define __COMP_PRIM__ + +#include <math.h> + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +inline static COMP cneg(COMP a) { + COMP res; + + res.real = -a.real; + res.imag = -a.imag; + + return res; +} + +inline static COMP cconj(COMP a) { + COMP res; + + res.real = a.real; + res.imag = -a.imag; + + return res; +} + +inline static COMP cmult(COMP a, COMP b) { + COMP res; + + res.real = a.real * b.real - a.imag * b.imag; + res.imag = a.real * b.imag + a.imag * b.real; + + return res; +} + +inline static COMP fcmult(float a, COMP b) { + COMP res; + + res.real = a * b.real; + res.imag = a * b.imag; + + return res; +} + +inline static COMP cadd(COMP a, COMP b) { + COMP res; + + res.real = a.real + b.real; + res.imag = a.imag + b.imag; + + return res; +} + +inline static float cabsolute(COMP a) { + return sqrtf((a.real * a.real) + (a.imag * a.imag)); +} + +/* + * Euler's formula in a new convenient function + */ +inline static COMP comp_exp_j(float phi) { + COMP res; + res.real = cosf(phi); + res.imag = sinf(phi); + return res; +} + +/* + * Quick and easy complex 0 + */ +inline static COMP comp0() { + COMP res; + res.real = 0; + res.imag = 0; + return res; +} + +/* + * Quick and easy complex subtract + */ +inline static COMP csub(COMP a, COMP b) { + COMP res; + res.real = a.real - b.real; + res.imag = a.imag - b.imag; + return res; +} + +/* + * Compare the magnitude of a and b. if |a|>|b|, return true, otw false. + * This needs no square roots + */ +inline static int comp_mag_gt(COMP a, COMP b) { + return ((a.real * a.real) + (a.imag * a.imag)) > + ((b.real * b.real) + (b.imag * b.imag)); +} + +/* + * Normalize a complex number's magnitude to 1 + */ +inline static COMP comp_normalize(COMP a) { + COMP b; + float av = cabsolute(a); + b.real = a.real / av; + b.imag = a.imag / av; + return b; +} + +#endif diff --git a/src/debug_alloc.h b/src/debug_alloc.h new file mode 100644 index 0000000..37cc686 --- /dev/null +++ b/src/debug_alloc.h @@ -0,0 +1,71 @@ +/* debug_alloc.h + * + * Some macros which can report on malloc results. + * + * Enable with "-D DEBUG_ALLOC" + */ + +#ifndef DEBUG_ALLOC_H +#define DEBUG_ALLOC_H + +#include <stdio.h> + +// Debug calls + +#ifdef CORTEX_M4 +extern char *__heap_end; +register char *sp asm("sp"); +#endif + +#if defined(__EMBEDDED__) +extern void *codec2_malloc(size_t size); +extern void *codec2_calloc(size_t nmemb, size_t size); +extern void codec2_free(void *ptr); +#else +#define codec2_malloc(size) (malloc(size)) +#define codec2_calloc(nmemb, size) (calloc(nmemb, size)) +#define codec2_free(ptr) (free(ptr)) +#endif // defined(__EMBEDDED__) + +static inline void *DEBUG_MALLOC(const char *func, size_t size) { + void *ptr = codec2_malloc(size); + fprintf(stderr, "MALLOC: %s %p %d", func, ptr, (int)size); +#ifdef CORTEX_M4 + + fprintf(stderr, " : sp %p ", sp); +#endif + if (!ptr) fprintf(stderr, " ** FAILED **"); + fprintf(stderr, "\n"); + return (ptr); +} + +static inline void *DEBUG_CALLOC(const char *func, size_t nmemb, size_t size) { + void *ptr = codec2_calloc(nmemb, size); + fprintf(stderr, "CALLOC: %s %p %d %d", func, ptr, (int)nmemb, (int)size); +#ifdef CORTEX_M4 + fprintf(stderr, " : sp %p ", sp); +#endif + if (!ptr) fprintf(stderr, " ** FAILED **"); + fprintf(stderr, "\n"); + return (ptr); +} +static inline void DEBUG_FREE(const char *func, void *ptr) { + codec2_free(ptr); + fprintf(stderr, "FREE: %s %p\n", func, ptr); +} + +#ifdef DEBUG_ALLOC +#define MALLOC(size) DEBUG_MALLOC(__func__, size) +#define CALLOC(nmemb, size) DEBUG_CALLOC(__func__, nmemb, size) +#define FREE(ptr) DEBUG_FREE(__func__, ptr) +#else // DEBUG_ALLOC +// Default to normal calls +#define MALLOC(size) codec2_malloc(size) + +#define CALLOC(nmemb, size) codec2_calloc(nmemb, size) + +#define FREE(ptr) codec2_free(ptr) + +#endif // DEBUG_ALLOC + +#endif // DEBUG_ALLOC_H diff --git a/src/defines.h b/src/defines.h new file mode 100644 index 0000000..a2fd9ec --- /dev/null +++ b/src/defines.h @@ -0,0 +1,122 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: defines.h + AUTHOR......: David Rowe + DATE CREATED: 23/4/93 + + Defines and structures used throughout the codec. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __DEFINES__ +#define __DEFINES__ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +/* General defines */ + +#define N_S 0.01 /* internal proc frame length in secs */ +#define TW_S 0.005 /* trapezoidal synth window overlap */ +#define MAX_AMP 160 /* maximum number of harmonics */ +#ifndef PI +#define PI 3.141592654 /* mathematical constant */ +#endif +#ifndef M_PI +#define M_PI 3.14159265358979323846f +#endif +#define TWO_PI 6.283185307 /* mathematical constant */ +#define MAX_STR 2048 /* maximum string size */ + +#define FFT_ENC 512 /* size of FFT used for encoder */ +#define FFT_DEC 512 /* size of FFT used in decoder */ +#define V_THRESH 6.0 /* voicing threshold in dB */ +#define LPC_ORD 10 /* LPC order */ +#define LPC_ORD_LOW 6 /* LPC order for lower rates */ + +/* Pitch estimation defines */ + +#define M_PITCH_S 0.0400 /* pitch analysis window in s */ +#define P_MIN_S 0.0025 /* minimum pitch period in s */ +#define P_MAX_S 0.0200 /* maximum pitch period in s */ + +/*---------------------------------------------------------------------------*\ + + TYPEDEFS + +\*---------------------------------------------------------------------------*/ + +/* Structure to hold constants calculated at run time based on sample rate */ + +typedef struct { + int Fs; /* sample rate of this instance */ + int n_samp; /* number of samples per 10ms frame at Fs */ + int max_amp; /* maximum number of harmonics */ + int m_pitch; /* pitch estimation window size in samples */ + int p_min; /* minimum pitch period in samples */ + int p_max; /* maximum pitch period in samples */ + float Wo_min; + float Wo_max; + int nw; /* analysis window size in samples */ + int tw; /* trapezoidal synthesis window overlap */ +} C2CONST; + +/* Structure to hold model parameters for one frame */ + +typedef struct { + float Wo; /* fundamental frequency estimate in radians */ + int L; /* number of harmonics */ + float A[MAX_AMP + 1]; /* amplitiude of each harmonic */ + float phi[MAX_AMP + 1]; /* phase of each harmonic */ + int voiced; /* non-zero if this frame is voiced */ +} MODEL; + +/* describes each codebook */ + +struct lsp_codebook { + int k; /* dimension of vector */ + int log2m; /* number of bits in m */ + int m; /* elements in codebook */ +#ifdef __EMBEDDED__ /* make sure stored in flash */ + const float *cb; /* The elements */ +#else + float *cb; /* The elements */ +#endif +}; + +extern const struct lsp_codebook lsp_cb[]; +extern const struct lsp_codebook lsp_cbd[]; +extern const struct lsp_codebook lsp_cbjmv[]; +extern const struct lsp_codebook ge_cb[]; +extern const struct lsp_codebook newamp1vq_cb[]; +extern const struct lsp_codebook newamp1_energy_cb[]; +extern const struct lsp_codebook newamp2vq_cb[]; +extern const struct lsp_codebook newamp2_energy_cb[]; + +#ifdef _GNU_SOURCE +#define POW10F(x) exp10f((x)) +#else +#define POW10F(x) expf(2.302585092994046f * (x)) +#endif + +#endif diff --git a/src/interp.c b/src/interp.c new file mode 100644 index 0000000..08a9518 --- /dev/null +++ b/src/interp.c @@ -0,0 +1,308 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: interp.c + AUTHOR......: David Rowe + DATE CREATED: 9/10/09 + + Interpolation of 20ms frames to 10ms frames. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "interp.h" + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <string.h> + +#include "defines.h" +#include "lsp.h" +#include "quantise.h" + +float sample_log_amp(MODEL *model, float w); + +#if 0 +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp() + AUTHOR......: David Rowe + DATE CREATED: 22/8/10 + + Given two frames described by model parameters 20ms apart, determines + the model parameters of the 10ms frame between them. Assumes + voicing is available for middle (interpolated) frame. Outputs are + amplitudes and Wo for the interpolated frame. + + This version can interpolate the amplitudes between two frames of + different Wo and L. + + This version works by log linear interpolation, but listening tests + showed it creates problems in background noise, e.g. hts2a and mmt1. + When this function is used (--dec mode) bg noise appears to be + amplitude modulated, and gets louder. The interp_lsp() function + below seems to do a better job. + +\*---------------------------------------------------------------------------*/ + +void interpolate( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float Wo_min +) +{ + int l; + float w,log_amp; + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (prev->Wo + next->Wo)/2.0; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = Wo_min; + } + interp->L = PI/interp->Wo; + + /* Interpolate amplitudes using linear interpolation in log domain */ + + for(l=1; l<=interp->L; l++) { + w = l*interp->Wo; + log_amp = (sample_log_amp(prev, w) + sample_log_amp(next, w))/2.0; + interp->A[l] = powf(10.0, log_amp); + } +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: sample_log_amp() + AUTHOR......: David Rowe + DATE CREATED: 22/8/10 + + Samples the amplitude envelope at an arbitrary frequency w. Uses + linear interpolation in the log domain to sample between harmonic + amplitudes. + +\*---------------------------------------------------------------------------*/ + +float sample_log_amp(MODEL *model, float w) { + int m; + float f, log_amp; + + assert(w > 0.0); + assert(w <= PI); + + m = floorf(w / model->Wo + 0.5); + f = (w - m * model->Wo) / w; + assert(f <= 1.0); + + if (m < 1) { + log_amp = f * log10f(model->A[1] + 1E-6); + } else if ((m + 1) > model->L) { + log_amp = (1.0 - f) * log10f(model->A[model->L] + 1E-6); + } else { + log_amp = (1.0 - f) * log10f(model->A[m] + 1E-6) + + f * log10f(model->A[m + 1] + 1E-6); + } + + return log_amp; +} + +#ifdef NOT_NEEDED + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_lsp() + AUTHOR......: David Rowe + DATE CREATED: 10 Nov 2010 + + Given two frames described by model parameters 20ms apart, determines + the model parameters of the 10ms frame between them. Assumes + voicing is available for middle (interpolated) frame. Outputs are + amplitudes and Wo for the interpolated frame. + + This version uses interpolation of LSPs, seems to do a better job + with bg noise. + +\*---------------------------------------------------------------------------*/ + +void interpolate_lsp(codec2_fft_cfg fft_fwd_cfg, + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float *prev_lsps, /* previous frames LSPs */ + float prev_e, /* previous frames LPC energy */ + float *next_lsps, /* next frames LSPs */ + float next_e, /* next frames LPC energy */ + float *ak_interp, /* interpolated aks for this frame */ + float *lsps_interp, /* interpolated lsps for this frame */ + float Wo_min) { + int i; + float e; + float snr; + + /* trap corner case where V est is probably wrong */ + + if (interp->voiced && !prev->voiced && !next->voiced) { + interp->voiced = 0; + } + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) interp->Wo = (prev->Wo + next->Wo) / 2.0; + if (!prev->voiced && next->voiced) interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) interp->Wo = prev->Wo; + } else { + interp->Wo = Wo_min; + } + interp->L = PI / interp->Wo; + + // printf(" interp: prev_v: %d next_v: %d prev_Wo: %f next_Wo: %f\n", + // prev->voiced, next->voiced, prev->Wo, next->Wo); + // printf(" interp: Wo: %1.5f L: %d\n", interp->Wo, interp->L); + + /* interpolate LSPs */ + + for (i = 0; i < LPC_ORD; i++) { + lsps_interp[i] = (prev_lsps[i] + next_lsps[i]) / 2.0; + } + + /* Interpolate LPC energy in log domain */ + + e = powf(10.0, (log10f(prev_e) + log10f(next_e)) / 2.0); + // printf(" interp: e: %f\n", e); + + /* convert back to amplitudes */ + + lsp_to_lpc(lsps_interp, ak_interp, LPC_ORD); + aks_to_M2(fft_fwd_cfg, ak_interp, LPC_ORD, interp, e, &snr, 0, 0, 1, 1, + LPCPF_BETA, LPCPF_GAMMA); + // printf(" interp: ak[1]: %f A[1] %f\n", ak_interp[1], interp->A[1]); +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of Wo and L samples given two + samples 20ms apart. Assumes voicing is available for centre + (interpolated) frame. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo(MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float Wo_min) { + interp_Wo2(interp, prev, next, 0.5, Wo_min); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Weighted interpolation of two Wo samples. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo2(MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float weight, float Wo_min) { + /* trap corner case where voicing est is probably wrong */ + + if (interp->voiced && !prev->voiced && !next->voiced) { + interp->voiced = 0; + } + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (1.0 - weight) * prev->Wo + weight * next->Wo; + if (!prev->voiced && next->voiced) interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) interp->Wo = prev->Wo; + } else { + interp->Wo = Wo_min; + } + interp->L = PI / interp->Wo; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_energy() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of energy given two samples 20ms + apart. + +\*---------------------------------------------------------------------------*/ + +float interp_energy(float prev_e, float next_e) { + // return powf(10.0, (log10f(prev_e) + log10f(next_e))/2.0); + return sqrtf(prev_e * + next_e); // looks better is math. identical and faster math +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_energy2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of energy given two samples 20ms + apart. + +\*---------------------------------------------------------------------------*/ + +float interp_energy2(float prev_e, float next_e, float weight) { + return POW10F((1.0 - weight) * log10f(prev_e) + weight * log10f(next_e)); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interpolate_lsp_ver2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Weighted interpolation of LSPs. + +\*---------------------------------------------------------------------------*/ + +void interpolate_lsp_ver2(float interp[], float prev[], float next[], + float weight, int order) { + int i; + + for (i = 0; i < order; i++) + interp[i] = (1.0 - weight) * prev[i] + weight * next[i]; +} diff --git a/src/interp.h b/src/interp.h new file mode 100644 index 0000000..276edd9 --- /dev/null +++ b/src/interp.h @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: interp.h + AUTHOR......: David Rowe + DATE CREATED: 9/10/09 + + Interpolation of 20ms frames to 10ms frames. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __INTERP__ +#define __INTERP__ + +#include "defines.h" +#include "kiss_fft.h" + +void interpolate(MODEL *interp, MODEL *prev, MODEL *next); +void interpolate_lsp(kiss_fft_cfg fft_dec_cfg, MODEL *interp, MODEL *prev, + MODEL *next, float *prev_lsps, float prev_e, + float *next_lsps, float next_e, float *ak_interp, + float *lsps_interp, float Wo_min); +void interp_Wo(MODEL *interp, MODEL *prev, MODEL *next, float Wo_min); +void interp_Wo2(MODEL *interp, MODEL *prev, MODEL *next, float weight, + float Wo_min); +float interp_energy(float prev, float next); +float interp_energy2(float prev, float next, float weight); +void interpolate_lsp_ver2(float interp[], float prev[], float next[], + float weight, int order); + +#endif diff --git a/src/kiss_fft.c b/src/kiss_fft.c new file mode 100644 index 0000000..e7993cf --- /dev/null +++ b/src/kiss_fft.c @@ -0,0 +1,426 @@ +/* +Copyright (c) 2003-2010, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "_kiss_fft_guts.h" +/* The guts header contains all the multiplication and addition macros that are + defined for fixed or floating point complex numbers. It also declares the kf_ + internal functions. + */ + +static void kf_bfly2(kiss_fft_cpx *Fout, const size_t fstride, + const kiss_fft_cfg st, int m) { + kiss_fft_cpx *Fout2; + kiss_fft_cpx *tw1 = st->twiddles; + kiss_fft_cpx t; + Fout2 = Fout + m; + do { + C_FIXDIV(*Fout, 2); + C_FIXDIV(*Fout2, 2); + + C_MUL(t, *Fout2, *tw1); + tw1 += fstride; + C_SUB(*Fout2, *Fout, t); + C_ADDTO(*Fout, t); + ++Fout2; + ++Fout; + } while (--m); +} + +static void kf_bfly4(kiss_fft_cpx *Fout, const size_t fstride, + const kiss_fft_cfg st, const size_t m) { + kiss_fft_cpx *tw1, *tw2, *tw3; + kiss_fft_cpx scratch[6]; + size_t k = m; + const size_t m2 = 2 * m; + const size_t m3 = 3 * m; + + tw3 = tw2 = tw1 = st->twiddles; + + do { + C_FIXDIV(*Fout, 4); + C_FIXDIV(Fout[m], 4); + C_FIXDIV(Fout[m2], 4); + C_FIXDIV(Fout[m3], 4); + + C_MUL(scratch[0], Fout[m], *tw1); + C_MUL(scratch[1], Fout[m2], *tw2); + C_MUL(scratch[2], Fout[m3], *tw3); + + C_SUB(scratch[5], *Fout, scratch[1]); + C_ADDTO(*Fout, scratch[1]); + C_ADD(scratch[3], scratch[0], scratch[2]); + C_SUB(scratch[4], scratch[0], scratch[2]); + C_SUB(Fout[m2], *Fout, scratch[3]); + tw1 += fstride; + tw2 += fstride * 2; + tw3 += fstride * 3; + C_ADDTO(*Fout, scratch[3]); + + if (st->inverse) { + Fout[m].r = scratch[5].r - scratch[4].i; + Fout[m].i = scratch[5].i + scratch[4].r; + Fout[m3].r = scratch[5].r + scratch[4].i; + Fout[m3].i = scratch[5].i - scratch[4].r; + } else { + Fout[m].r = scratch[5].r + scratch[4].i; + Fout[m].i = scratch[5].i - scratch[4].r; + Fout[m3].r = scratch[5].r - scratch[4].i; + Fout[m3].i = scratch[5].i + scratch[4].r; + } + ++Fout; + } while (--k); +} + +static void kf_bfly3(kiss_fft_cpx *Fout, const size_t fstride, + const kiss_fft_cfg st, size_t m) { + size_t k = m; + const size_t m2 = 2 * m; + kiss_fft_cpx *tw1, *tw2; + kiss_fft_cpx scratch[5]; + kiss_fft_cpx epi3; + epi3 = st->twiddles[fstride * m]; + + tw1 = tw2 = st->twiddles; + + do { + C_FIXDIV(*Fout, 3); + C_FIXDIV(Fout[m], 3); + C_FIXDIV(Fout[m2], 3); + + C_MUL(scratch[1], Fout[m], *tw1); + C_MUL(scratch[2], Fout[m2], *tw2); + + C_ADD(scratch[3], scratch[1], scratch[2]); + C_SUB(scratch[0], scratch[1], scratch[2]); + tw1 += fstride; + tw2 += fstride * 2; + + Fout[m].r = Fout->r - HALF_OF(scratch[3].r); + Fout[m].i = Fout->i - HALF_OF(scratch[3].i); + + C_MULBYSCALAR(scratch[0], epi3.i); + + C_ADDTO(*Fout, scratch[3]); + + Fout[m2].r = Fout[m].r + scratch[0].i; + Fout[m2].i = Fout[m].i - scratch[0].r; + + Fout[m].r -= scratch[0].i; + Fout[m].i += scratch[0].r; + + ++Fout; + } while (--k); +} + +static void kf_bfly5(kiss_fft_cpx *Fout, const size_t fstride, + const kiss_fft_cfg st, int m) { + kiss_fft_cpx *Fout0, *Fout1, *Fout2, *Fout3, *Fout4; + int u; + kiss_fft_cpx scratch[13]; + kiss_fft_cpx *twiddles = st->twiddles; + kiss_fft_cpx *tw; + kiss_fft_cpx ya, yb; + ya = twiddles[fstride * m]; + yb = twiddles[fstride * 2 * m]; + + Fout0 = Fout; + Fout1 = Fout0 + m; + Fout2 = Fout0 + 2 * m; + Fout3 = Fout0 + 3 * m; + Fout4 = Fout0 + 4 * m; + + tw = st->twiddles; + for (u = 0; u < m; ++u) { + C_FIXDIV(*Fout0, 5); + C_FIXDIV(*Fout1, 5); + C_FIXDIV(*Fout2, 5); + C_FIXDIV(*Fout3, 5); + C_FIXDIV(*Fout4, 5); + scratch[0] = *Fout0; + + C_MUL(scratch[1], *Fout1, tw[u * fstride]); + C_MUL(scratch[2], *Fout2, tw[2 * u * fstride]); + C_MUL(scratch[3], *Fout3, tw[3 * u * fstride]); + C_MUL(scratch[4], *Fout4, tw[4 * u * fstride]); + + C_ADD(scratch[7], scratch[1], scratch[4]); + C_SUB(scratch[10], scratch[1], scratch[4]); + C_ADD(scratch[8], scratch[2], scratch[3]); + C_SUB(scratch[9], scratch[2], scratch[3]); + + Fout0->r += scratch[7].r + scratch[8].r; + Fout0->i += scratch[7].i + scratch[8].i; + + scratch[5].r = + scratch[0].r + S_MUL(scratch[7].r, ya.r) + S_MUL(scratch[8].r, yb.r); + scratch[5].i = + scratch[0].i + S_MUL(scratch[7].i, ya.r) + S_MUL(scratch[8].i, yb.r); + + scratch[6].r = S_MUL(scratch[10].i, ya.i) + S_MUL(scratch[9].i, yb.i); + scratch[6].i = -S_MUL(scratch[10].r, ya.i) - S_MUL(scratch[9].r, yb.i); + + C_SUB(*Fout1, scratch[5], scratch[6]); + C_ADD(*Fout4, scratch[5], scratch[6]); + + scratch[11].r = + scratch[0].r + S_MUL(scratch[7].r, yb.r) + S_MUL(scratch[8].r, ya.r); + scratch[11].i = + scratch[0].i + S_MUL(scratch[7].i, yb.r) + S_MUL(scratch[8].i, ya.r); + scratch[12].r = -S_MUL(scratch[10].i, yb.i) + S_MUL(scratch[9].i, ya.i); + scratch[12].i = S_MUL(scratch[10].r, yb.i) - S_MUL(scratch[9].r, ya.i); + + C_ADD(*Fout2, scratch[11], scratch[12]); + C_SUB(*Fout3, scratch[11], scratch[12]); + + ++Fout0; + ++Fout1; + ++Fout2; + ++Fout3; + ++Fout4; + } +} + +/* perform the butterfly for one stage of a mixed radix FFT */ +static void kf_bfly_generic(kiss_fft_cpx *Fout, const size_t fstride, + const kiss_fft_cfg st, int m, int p) { + int u, k, q1, q; + kiss_fft_cpx *twiddles = st->twiddles; + kiss_fft_cpx t; + int Norig = st->nfft; + + kiss_fft_cpx *scratch = + (kiss_fft_cpx *)KISS_FFT_TMP_ALLOC(sizeof(kiss_fft_cpx) * p); + + for (u = 0; u < m; ++u) { + k = u; + for (q1 = 0; q1 < p; ++q1) { + scratch[q1] = Fout[k]; + C_FIXDIV(scratch[q1], p); + k += m; + } + + k = u; + for (q1 = 0; q1 < p; ++q1) { + int twidx = 0; + Fout[k] = scratch[0]; + for (q = 1; q < p; ++q) { + twidx += fstride * k; + if (twidx >= Norig) twidx -= Norig; + C_MUL(t, scratch[q], twiddles[twidx]); + C_ADDTO(Fout[k], t); + } + k += m; + } + } + KISS_FFT_TMP_FREE(scratch); +} + +static void kf_work(kiss_fft_cpx *Fout, const kiss_fft_cpx *f, + const size_t fstride, int in_stride, int *factors, + const kiss_fft_cfg st) { + kiss_fft_cpx *Fout_beg = Fout; + const int p = *factors++; /* the radix */ + const int m = *factors++; /* stage's fft length/p */ + const kiss_fft_cpx *Fout_end = Fout + p * m; + +#ifdef _OPENMP + // use openmp extensions at the + // top-level (not recursive) + if (fstride == 1 && p <= 5) { + int k; + + // execute the p different work units in different threads +#pragma omp parallel for + for (k = 0; k < p; ++k) + kf_work(Fout + k * m, f + fstride * in_stride * k, fstride * p, in_stride, + factors, st); + // all threads have joined by this point + + switch (p) { + case 2: + kf_bfly2(Fout, fstride, st, m); + break; + case 3: + kf_bfly3(Fout, fstride, st, m); + break; + case 4: + kf_bfly4(Fout, fstride, st, m); + break; + case 5: + kf_bfly5(Fout, fstride, st, m); + break; + default: + kf_bfly_generic(Fout, fstride, st, m, p); + break; + } + return; + } +#endif + + if (m == 1) { + do { + *Fout = *f; + f += fstride * in_stride; + } while (++Fout != Fout_end); + } else { + do { + // recursive call: + // DFT of size m*p performed by doing + // p instances of smaller DFTs of size m, + // each one takes a decimated version of the input + kf_work(Fout, f, fstride * p, in_stride, factors, st); + f += fstride * in_stride; + } while ((Fout += m) != Fout_end); + } + + Fout = Fout_beg; + + // recombine the p smaller DFTs + switch (p) { + case 2: + kf_bfly2(Fout, fstride, st, m); + break; + case 3: + kf_bfly3(Fout, fstride, st, m); + break; + case 4: + kf_bfly4(Fout, fstride, st, m); + break; + case 5: + kf_bfly5(Fout, fstride, st, m); + break; + default: + kf_bfly_generic(Fout, fstride, st, m, p); + break; + } +} + +/* facbuf is populated by p1,m1,p2,m2, ... + where + p[i] * m[i] = m[i-1] + m0 = n */ +static void kf_factor(int n, int *facbuf) { + int p = 4; + double floor_sqrt; + floor_sqrt = floorf(sqrtf((double)n)); + + /*factor out powers of 4, powers of 2, then any remaining primes */ + do { + while (n % p) { + switch (p) { + case 4: + p = 2; + break; + case 2: + p = 3; + break; + default: + p += 2; + break; + } + if (p > floor_sqrt) p = n; /* no more factors, skip to end */ + } + n /= p; + *facbuf++ = p; + *facbuf++ = n; + } while (n > 1); +} + +/* + * + * User-callable function to allocate all necessary storage space for the fft. + * + * The return value is a contiguous block of memory, allocated with malloc. As + * such, It can be freed with free(), rather than a kiss_fft-specific function. + * */ +kiss_fft_cfg kiss_fft_alloc(int nfft, int inverse_fft, void *mem, + size_t *lenmem) { + kiss_fft_cfg st = NULL; + size_t memneeded = sizeof(struct kiss_fft_state) + + sizeof(kiss_fft_cpx) * (nfft - 1); /* twiddle factors*/ + + if (lenmem == NULL) { + st = (kiss_fft_cfg)KISS_FFT_MALLOC(memneeded); + } else { + if (mem != NULL && *lenmem >= memneeded) st = (kiss_fft_cfg)mem; + *lenmem = memneeded; + } + if (st) { + int i; + st->nfft = nfft; + st->inverse = inverse_fft; + + for (i = 0; i < nfft; ++i) { + const double pi = + 3.141592653589793238462643383279502884197169399375105820974944; + double phase = -2 * pi * i / nfft; + if (st->inverse) phase *= -1; + kf_cexp(st->twiddles + i, phase); + } + + kf_factor(nfft, st->factors); + } + return st; +} + +void kiss_fft_stride(kiss_fft_cfg st, const kiss_fft_cpx *fin, + kiss_fft_cpx *fout, int in_stride) { + if (fin == fout) { + // NOTE: this is not really an in-place FFT algorithm. + // It just performs an out-of-place FFT into a temp buffer + kiss_fft_cpx *tmpbuf = + (kiss_fft_cpx *)KISS_FFT_TMP_ALLOC(sizeof(kiss_fft_cpx) * st->nfft); + kf_work(tmpbuf, fin, 1, in_stride, st->factors, st); + memcpy(fout, tmpbuf, sizeof(kiss_fft_cpx) * st->nfft); + KISS_FFT_TMP_FREE(tmpbuf); + } else { + kf_work(fout, fin, 1, in_stride, st->factors, st); + } +} + +void kiss_fft(kiss_fft_cfg cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout) { + kiss_fft_stride(cfg, fin, fout, 1); +} + +void kiss_fft_cleanup(void) { + // nothing needed any more +} + +int kiss_fft_next_fast_size(int n) { + while (1) { + int m = n; + while ((m % 2) == 0) m /= 2; + while ((m % 3) == 0) m /= 3; + while ((m % 5) == 0) m /= 5; + if (m <= 1) + break; /* n is completely factorable by twos, threes, and fives */ + n++; + } + return n; +} diff --git a/src/kiss_fft.h b/src/kiss_fft.h new file mode 100644 index 0000000..ea1349e --- /dev/null +++ b/src/kiss_fft.h @@ -0,0 +1,126 @@ +#ifndef KISS_FFT_H +#define KISS_FFT_H + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ATTENTION! + If you would like a : + -- a utility that will handle the caching of fft objects + -- real-only (no imaginary time component ) FFT + -- a multi-dimensional FFT + -- a command-line utility to perform ffts + -- a command-line utility to perform fast-convolution filtering + + Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c + in the tools/ directory. +*/ + +#ifdef USE_SIMD +#include <xmmintrin.h> +#define kiss_fft_scalar __m128 +#define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes, 16) +#define KISS_FFT_FREE _mm_free +#else +#define KISS_FFT_MALLOC malloc +#define KISS_FFT_FREE free +#endif + +#ifdef FIXED_POINT +#include <sys/types.h> +#if (FIXED_POINT == 32) +#define kiss_fft_scalar int32_t +#else +#define kiss_fft_scalar int16_t +#endif +#else +#ifndef kiss_fft_scalar +/* default is float */ +#define kiss_fft_scalar float +#endif +#endif + +typedef struct { + kiss_fft_scalar r; + kiss_fft_scalar i; +} kiss_fft_cpx; + +typedef struct kiss_fft_state *kiss_fft_cfg; + +/* + * kiss_fft_alloc + * + * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. + * + * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL); + * + * The return value from fft_alloc is a cfg buffer used internally + * by the fft routine or NULL. + * + * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using + * malloc. The returned value should be free()d when done to avoid memory leaks. + * + * The state can be placed in a user supplied buffer 'mem': + * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, + * then the function places the cfg in mem and the size used in *lenmem + * and returns mem. + * + * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), + * then the function returns NULL and places the minimum cfg + * buffer size in *lenmem. + * */ + +kiss_fft_cfg kiss_fft_alloc(int nfft, int inverse_fft, void *mem, + size_t *lenmem); + +/* + * kiss_fft(cfg,in_out_buf) + * + * Perform an FFT on a complex input buffer. + * for a forward FFT, + * fin should be f[0] , f[1] , ... ,f[nfft-1] + * fout will be F[0] , F[1] , ... ,F[nfft-1] + * Note that each element is complex and can be accessed like + f[k].r and f[k].i + * */ +void kiss_fft(kiss_fft_cfg cfg, const kiss_fft_cpx *fin, kiss_fft_cpx *fout); + +/* + A more generic version of the above function. It reads its input from every Nth + sample. + * */ +void kiss_fft_stride(kiss_fft_cfg cfg, const kiss_fft_cpx *fin, + kiss_fft_cpx *fout, int fin_stride); + +/* If kiss_fft_alloc allocated a buffer, it is one contiguous + buffer and can be simply free()d when no longer needed*/ +#define kiss_fft_free free + +/* + Cleans up some memory that gets managed internally. Not necessary to call, but + it might clean up your compiler output to call this before you exit. +*/ +void kiss_fft_cleanup(void); + +/* + * Returns the smallest integer k, such that k>=n and k has only "fast" factors + * (2,3,5) + */ +int kiss_fft_next_fast_size(int n); + +/* for real ffts, we need an even size */ +#define kiss_fftr_next_fast_size_real(n) \ + (kiss_fft_next_fast_size(((n) + 1) >> 1) << 1) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/kiss_fftr.c b/src/kiss_fftr.c new file mode 100644 index 0000000..e3aee37 --- /dev/null +++ b/src/kiss_fftr.c @@ -0,0 +1,168 @@ +/* +Copyright (c) 2003-2004, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to +endorse or promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "kiss_fftr.h" + +#include "_kiss_fft_guts.h" +#include "assert.h" + +struct kiss_fftr_state { + kiss_fft_cfg substate; + kiss_fft_cpx *tmpbuf; + kiss_fft_cpx *super_twiddles; +#ifdef USE_SIMD + void *pad; +#endif +}; + +kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void *mem, + size_t *lenmem) { + int i; + kiss_fftr_cfg st = NULL; + size_t subsize, memneeded; + + if (nfft & 1) { + fprintf(stderr, "Real FFT optimization must be even.\n"); + return NULL; + } + nfft >>= 1; + + kiss_fft_alloc(nfft, inverse_fft, NULL, &subsize); + memneeded = sizeof(struct kiss_fftr_state) + subsize + + sizeof(kiss_fft_cpx) * (nfft * 3 / 2); + + if (lenmem == NULL) { + st = (kiss_fftr_cfg)KISS_FFT_MALLOC(memneeded); + } else { + if (*lenmem >= memneeded) st = (kiss_fftr_cfg)mem; + *lenmem = memneeded; + } + if (!st) return NULL; + + st->substate = (kiss_fft_cfg)(st + 1); /*just beyond kiss_fftr_state struct */ + st->tmpbuf = (kiss_fft_cpx *)(((char *)st->substate) + subsize); + st->super_twiddles = st->tmpbuf + nfft; + kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize); + + for (i = 0; i < nfft / 2; ++i) { + float phase = + -3.14159265358979323846264338327 * ((float)(i + 1) / nfft + .5); + if (inverse_fft) phase *= -1; + kf_cexp(st->super_twiddles + i, phase); + } + return st; +} + +void kiss_fftr(kiss_fftr_cfg st, const kiss_fft_scalar *timedata, + kiss_fft_cpx *freqdata) { + /* input buffer timedata is stored row-wise */ + int k, ncfft; + kiss_fft_cpx fpnk, fpk, f1k, f2k, tw, tdc; + + assert(st->substate->inverse == 0); + + ncfft = st->substate->nfft; + + /*perform the parallel fft of two real signals packed in real,imag*/ + kiss_fft(st->substate, (const kiss_fft_cpx *)timedata, st->tmpbuf); + /* The real part of the DC element of the frequency spectrum in st->tmpbuf + * contains the sum of the even-numbered elements of the input time sequence + * The imag part is the sum of the odd-numbered elements + * + * The sum of tdc.r and tdc.i is the sum of the input time sequence. + * yielding DC of input time sequence + * The difference of tdc.r - tdc.i is the sum of the input (dot product) + * [1,-1,1,-1... yielding Nyquist bin of input time sequence + */ + + tdc.r = st->tmpbuf[0].r; + tdc.i = st->tmpbuf[0].i; + C_FIXDIV(tdc, 2); + CHECK_OVERFLOW_OP(tdc.r, +, tdc.i); + CHECK_OVERFLOW_OP(tdc.r, -, tdc.i); + freqdata[0].r = tdc.r + tdc.i; + freqdata[ncfft].r = tdc.r - tdc.i; +#ifdef USE_SIMD + freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0); +#else + freqdata[ncfft].i = freqdata[0].i = 0; +#endif + + for (k = 1; k <= ncfft / 2; ++k) { + fpk = st->tmpbuf[k]; + fpnk.r = st->tmpbuf[ncfft - k].r; + fpnk.i = -st->tmpbuf[ncfft - k].i; + C_FIXDIV(fpk, 2); + C_FIXDIV(fpnk, 2); + + C_ADD(f1k, fpk, fpnk); + C_SUB(f2k, fpk, fpnk); + C_MUL(tw, f2k, st->super_twiddles[k - 1]); + + freqdata[k].r = HALF_OF(f1k.r + tw.r); + freqdata[k].i = HALF_OF(f1k.i + tw.i); + freqdata[ncfft - k].r = HALF_OF(f1k.r - tw.r); + freqdata[ncfft - k].i = HALF_OF(tw.i - f1k.i); + } +} + +void kiss_fftri(kiss_fftr_cfg st, const kiss_fft_cpx *freqdata, + kiss_fft_scalar *timedata) { + /* input buffer timedata is stored row-wise */ + int k, ncfft; + + assert(st->substate->inverse == 1); + + ncfft = st->substate->nfft; + + st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r; + st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r; + C_FIXDIV(st->tmpbuf[0], 2); + + for (k = 1; k <= ncfft / 2; ++k) { + kiss_fft_cpx fk, fnkc, fek, fok, tmp; + fk = freqdata[k]; + fnkc.r = freqdata[ncfft - k].r; + fnkc.i = -freqdata[ncfft - k].i; + C_FIXDIV(fk, 2); + C_FIXDIV(fnkc, 2); + + C_ADD(fek, fk, fnkc); + C_SUB(tmp, fk, fnkc); + C_MUL(fok, tmp, st->super_twiddles[k - 1]); + C_ADD(st->tmpbuf[k], fek, fok); + C_SUB(st->tmpbuf[ncfft - k], fek, fok); +#ifdef USE_SIMD + st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0); +#else + st->tmpbuf[ncfft - k].i *= -1; +#endif + } + kiss_fft(st->substate, st->tmpbuf, (kiss_fft_cpx *)timedata); +} diff --git a/src/kiss_fftr.h b/src/kiss_fftr.h new file mode 100644 index 0000000..4ab52db --- /dev/null +++ b/src/kiss_fftr.h @@ -0,0 +1,47 @@ +#ifndef KISS_FTR_H +#define KISS_FTR_H + +#include "kiss_fft.h" +#ifdef __cplusplus +extern "C" { +#endif + +/* + + Real optimized version can save about 45% cpu time vs. complex fft of a real + seq. + + + + */ + +typedef struct kiss_fftr_state *kiss_fftr_cfg; + +kiss_fftr_cfg kiss_fftr_alloc(int nfft, int inverse_fft, void *mem, + size_t *lenmem); +/* + nfft must be even + + If you don't care to allocate space, use mem = lenmem = NULL +*/ + +void kiss_fftr(kiss_fftr_cfg cfg, const kiss_fft_scalar *timedata, + kiss_fft_cpx *freqdata); +/* + input timedata has nfft scalar points + output freqdata has nfft/2+1 complex points +*/ + +void kiss_fftri(kiss_fftr_cfg cfg, const kiss_fft_cpx *freqdata, + kiss_fft_scalar *timedata); +/* + input freqdata has nfft/2+1 complex points + output timedata has nfft scalar points +*/ + +#define kiss_fftr_free free + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/lpc.c b/src/lpc.c new file mode 100644 index 0000000..3117a1a --- /dev/null +++ b/src/lpc.c @@ -0,0 +1,277 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lpc.c + AUTHOR......: David Rowe + DATE CREATED: 30 Sep 1990 (!) + + Linear Prediction functions written in C. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009-2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#define LPC_MAX_N 512 /* maximum no. of samples in frame */ +#define PI 3.141592654 /* mathematical constant */ + +#define ALPHA 1.0 +#define BETA 0.94 + +#include "lpc.h" + +#include <assert.h> +#include <math.h> + +#include "defines.h" + +/*---------------------------------------------------------------------------*\ + + pre_emp() + + Pre-emphasise (high pass filter with zero close to 0 Hz) a frame of + speech samples. Helps reduce dynamic range of LPC spectrum, giving + greater weight and hence a better match to low energy formants. + + Should be balanced by de-emphasis of the output speech. + +\*---------------------------------------------------------------------------*/ + +void pre_emp(float Sn_pre[], /* output frame of speech samples */ + float Sn[], /* input frame of speech samples */ + float *mem, /* Sn[-1]single sample memory */ + int Nsam /* number of speech samples to use */ +) { + int i; + + for (i = 0; i < Nsam; i++) { + Sn_pre[i] = Sn[i] - ALPHA * mem[0]; + mem[0] = Sn[i]; + } +} + +/*---------------------------------------------------------------------------*\ + + de_emp() + + De-emphasis filter (low pass filter with a pole close to 0 Hz). + +\*---------------------------------------------------------------------------*/ + +void de_emp(float Sn_de[], /* output frame of speech samples */ + float Sn[], /* input frame of speech samples */ + float *mem, /* Sn[-1]single sample memory */ + int Nsam /* number of speech samples to use */ +) { + int i; + + for (i = 0; i < Nsam; i++) { + Sn_de[i] = Sn[i] + BETA * mem[0]; + mem[0] = Sn_de[i]; + } +} + +/*---------------------------------------------------------------------------*\ + + hanning_window() + + Hanning windows a frame of speech samples. + +\*---------------------------------------------------------------------------*/ + +void hanning_window(float Sn[], /* input frame of speech samples */ + float Wn[], /* output frame of windowed samples */ + int Nsam /* number of samples */ +) { + int i; /* loop variable */ + + for (i = 0; i < Nsam; i++) + Wn[i] = Sn[i] * (0.5 - 0.5 * cosf(2 * PI * (float)i / (Nsam - 1))); +} + +/*---------------------------------------------------------------------------*\ + + autocorrelate() + + Finds the first P autocorrelation values of an array of windowed speech + samples Sn[]. + +\*---------------------------------------------------------------------------*/ + +void autocorrelate(float Sn[], /* frame of Nsam windowed speech samples */ + float Rn[], /* array of P+1 autocorrelation coefficients */ + int Nsam, /* number of windowed samples to use */ + int order /* order of LPC analysis */ +) { + int i, j; /* loop variables */ + + for (j = 0; j < order + 1; j++) { + Rn[j] = 0.0; + for (i = 0; i < Nsam - j; i++) Rn[j] += Sn[i] * Sn[i + j]; + } +} + +/*---------------------------------------------------------------------------*\ + + levinson_durbin() + + Given P+1 autocorrelation coefficients, finds P Linear Prediction Coeff. + (LPCs) where P is the order of the LPC all-pole model. The Levinson-Durbin + algorithm is used, and is described in: + + J. Makhoul + "Linear prediction, a tutorial review" + Proceedings of the IEEE + Vol-63, No. 4, April 1975 + +\*---------------------------------------------------------------------------*/ + +void levinson_durbin(float R[], /* order+1 autocorrelation coeff */ + float lpcs[], /* order+1 LPC's */ + int order /* order of the LPC analysis */ +) { + float a[order + 1][order + 1]; + float sum, e, k; + int i, j; /* loop variables */ + + e = R[0]; /* Equation 38a, Makhoul */ + + for (i = 1; i <= order; i++) { + sum = 0.0; + for (j = 1; j <= i - 1; j++) sum += a[i - 1][j] * R[i - j]; + k = -1.0 * (R[i] + sum) / e; /* Equation 38b, Makhoul */ + if (fabsf(k) > 1.0) k = 0.0; + + a[i][i] = k; + + for (j = 1; j <= i - 1; j++) + a[i][j] = a[i - 1][j] + k * a[i - 1][i - j]; /* Equation 38c, Makhoul */ + + e *= (1 - k * k); /* Equation 38d, Makhoul */ + } + + for (i = 1; i <= order; i++) lpcs[i] = a[order][i]; + lpcs[0] = 1.0; +} + +/*---------------------------------------------------------------------------*\ + + inverse_filter() + + Inverse Filter, A(z). Produces an array of residual samples from an array + of input samples and linear prediction coefficients. + + The filter memory is stored in the first order samples of the input array. + +\*---------------------------------------------------------------------------*/ + +void inverse_filter(float Sn[], /* Nsam input samples */ + float a[], /* LPCs for this frame of samples */ + int Nsam, /* number of samples */ + float res[], /* Nsam residual samples */ + int order /* order of LPC */ +) { + int i, j; /* loop variables */ + + for (i = 0; i < Nsam; i++) { + res[i] = 0.0; + for (j = 0; j <= order; j++) res[i] += Sn[i - j] * a[j]; + } +} + +/*---------------------------------------------------------------------------*\ + + synthesis_filter() + + C version of the Speech Synthesis Filter, 1/A(z). Given an array of + residual or excitation samples, and the the LP filter coefficients, this + function will produce an array of speech samples. This filter structure is + IIR. + + The synthesis filter has memory as well, this is treated in the same way + as the memory for the inverse filter (see inverse_filter() notes above). + The difference is that the memory for the synthesis filter is stored in + the output array, whereas the memory of the inverse filter is stored in the + input array. + + Note: the calling function must update the filter memory. + +\*---------------------------------------------------------------------------*/ + +void synthesis_filter( + float res[], /* Nsam input residual (excitation) samples */ + float a[], /* LPCs for this frame of speech samples */ + int Nsam, /* number of speech samples */ + int order, /* LPC order */ + float Sn_[] /* Nsam output synthesised speech samples */ +) { + int i, j; /* loop variables */ + + /* Filter Nsam samples */ + + for (i = 0; i < Nsam; i++) { + Sn_[i] = res[i] * a[0]; + for (j = 1; j <= order; j++) Sn_[i] -= Sn_[i - j] * a[j]; + } +} + +/*---------------------------------------------------------------------------*\ + + find_aks() + + This function takes a frame of samples, and determines the linear + prediction coefficients for that frame of samples. + +\*---------------------------------------------------------------------------*/ + +void find_aks(float Sn[], /* Nsam samples with order sample memory */ + float a[], /* order+1 LPCs with first coeff 1.0 */ + int Nsam, /* number of input speech samples */ + int order, /* order of the LPC analysis */ + float *E /* residual energy */ +) { + float Wn[LPC_MAX_N]; /* windowed frame of Nsam speech samples */ + float R[order + 1]; /* order+1 autocorrelation values of Sn[] */ + int i; + + assert(Nsam < LPC_MAX_N); + + hanning_window(Sn, Wn, Nsam); + autocorrelate(Wn, R, Nsam, order); + levinson_durbin(R, a, order); + + *E = 0.0; + for (i = 0; i <= order; i++) *E += a[i] * R[i]; + if (*E < 0.0) *E = 1E-12; +} + +/*---------------------------------------------------------------------------*\ + + weight() + + Weights a vector of LPCs. + +\*---------------------------------------------------------------------------*/ + +void weight(float ak[], /* vector of order+1 LPCs */ + float gamma, /* weighting factor */ + int order, /* num LPCs (excluding leading 1.0) */ + float akw[] /* weighted vector of order+1 LPCs */ +) { + int i; + + for (i = 1; i <= order; i++) akw[i] = ak[i] * powf(gamma, (float)i); +} diff --git a/src/lpc.h b/src/lpc.h new file mode 100644 index 0000000..8efbe9c --- /dev/null +++ b/src/lpc.h @@ -0,0 +1,43 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lpc.h + AUTHOR......: David Rowe + DATE CREATED: 24/8/09 + + Linear Prediction functions written in C. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009-2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __LPC__ +#define __LPC__ + +#define LPC_MAX_ORDER 20 + +void pre_emp(float Sn_pre[], float Sn[], float *mem, int Nsam); +void de_emp(float Sn_se[], float Sn[], float *mem, int Nsam); +void hanning_window(float Sn[], float Wn[], int Nsam); +void autocorrelate(float Sn[], float Rn[], int Nsam, int order); +void levinson_durbin(float R[], float lpcs[], int order); +void inverse_filter(float Sn[], float a[], int Nsam, float res[], int order); +void synthesis_filter(float res[], float a[], int Nsam, int order, float Sn_[]); +void find_aks(float Sn[], float a[], int Nsam, int order, float *E); +void weight(float ak[], float gamma, int order, float akw[]); + +#endif diff --git a/src/lpcnet_freq.c b/src/lpcnet_freq.c new file mode 100644 index 0000000..015b075 --- /dev/null +++ b/src/lpcnet_freq.c @@ -0,0 +1,96 @@ +/* + lpcnet_freq.c + + freq.c from LPCnet project, I think this code originally came from + Opus. +*/ + +/* Copyright (c) 2017-2018 Mozilla */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "lpcnet_freq.h" + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> + +#include "comp.h" + +#define SQUARE(x) ((x) * (x)) + +/* FFT bin index of centre of each band, assuming an 80 sample time + domain window (5ms at 16 kHz), which results in 40 samples in the + positive freq side of the FFT. TODO - refactor this to something more + generic */ +static float eband5ms[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, + 10, 12, 14, 16, 20, 24, 28, 34, 40}; + +/* bandE[i] is the sum of energy in a triangular window centred on + eband5ms[i], with adjustments for first and last band */ +int lpcnet_compute_band_energy(float *bandE, float *bandCentrekHz, COMP *X, + float Fs, int Nfft) { + float sum[LPCNET_FREQ_MAX_BANDS] = {0}; + int nb_bands; + float scale; + + assert((Fs == 8000) || (Fs == 16000)); + if (Fs == 8000) + nb_bands = 14; + else + nb_bands = 18; + + /* map eband5ms[] bins to our FFT size and Fs */ + scale = ((float)Nfft / 2) / eband5ms[nb_bands - 1]; + + /* sum energy from either side of band centre */ + for (int i = 0; i < nb_bands - 1; i++) { + int band_size; + band_size = (eband5ms[i + 1] - eband5ms[i]) * scale; + // fprintf(stderr, "band: %d band_size: %d offset: %d scale: %f\n", i, + // band_size, (int)(eband5ms[i]*scale), scale); + for (int j = 0; j < band_size; j++) { + float tmp; + float frac = (float)j / band_size; + int bin = eband5ms[i] * scale; + assert((bin + j) < Nfft / 2); + tmp = SQUARE(X[bin + j].real); + tmp += SQUARE(X[bin + j].imag); + sum[i] += (1 - frac) * tmp; + sum[i + 1] += frac * tmp; + } + } + + /* first and last band only summed from half of triangular window */ + sum[0] *= 2; + sum[nb_bands - 1] *= 2; + for (int i = 0; i < nb_bands; i++) { + bandCentrekHz[i] = eband5ms[i] * Fs / 40.0 / 1000.0; + bandE[i] = 10.0 * log10(sum[i]); + } + + return nb_bands; +} diff --git a/src/lpcnet_freq.h b/src/lpcnet_freq.h new file mode 100644 index 0000000..af406d8 --- /dev/null +++ b/src/lpcnet_freq.h @@ -0,0 +1,44 @@ +/* + lpcnet_freq.h + + freq.c from LPCnet project, I think this code originally came from + Opus. +*/ + +/* Copyright (c) 2017-2018 Mozilla */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef __LPCNET_FREQ__ +#define __LPCNET_FREQ__ + +#define LPCNET_FREQ_MAX_BANDS 18 + +#include "comp.h" + +int lpcnet_compute_band_energy(float *bandE, float *bandCentrekHz, COMP *Sw, + float Fs, int Nfft); + +#endif diff --git a/src/lsp.c b/src/lsp.c new file mode 100644 index 0000000..aa7bac3 --- /dev/null +++ b/src/lsp.c @@ -0,0 +1,313 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lsp.c + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + + This file contains functions for LPC to LSP conversion and LSP to + LPC conversion. Note that the LSP coefficients are not in radians + format but in the x domain of the unit circle. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "lsp.h" + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> + +#include "defines.h" + +/*---------------------------------------------------------------------------*\ + + Introduction to Line Spectrum Pairs (LSPs) + ------------------------------------------ + + LSPs are used to encode the LPC filter coefficients {ak} for + transmission over the channel. LSPs have several properties (like + less sensitivity to quantisation noise) that make them superior to + direct quantisation of {ak}. + + A(z) is a polynomial of order lpcrdr with {ak} as the coefficients. + + A(z) is transformed to P(z) and Q(z) (using a substitution and some + algebra), to obtain something like: + + A(z) = 0.5[P(z)(z+z^-1) + Q(z)(z-z^-1)] (1) + + As you can imagine A(z) has complex zeros all over the z-plane. P(z) + and Q(z) have the very neat property of only having zeros _on_ the + unit circle. So to find them we take a test point z=exp(jw) and + evaluate P (exp(jw)) and Q(exp(jw)) using a grid of points between 0 + and pi. + + The zeros (roots) of P(z) also happen to alternate, which is why we + swap coefficients as we find roots. So the process of finding the + LSP frequencies is basically finding the roots of 5th order + polynomials. + + The root so P(z) and Q(z) occur in symmetrical pairs at +/-w, hence + the name Line Spectrum Pairs (LSPs). + + To convert back to ak we just evaluate (1), "clocking" an impulse + thru it lpcrdr times gives us the impulse response of A(z) which is + {ak}. + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cheb_poly_eva() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function evaluates a series of chebyshev polynomials + + FIXME: performing memory allocation at run time is very inefficient, + replace with stack variables of MAX_P size. + +\*---------------------------------------------------------------------------*/ + +static float cheb_poly_eva(float *coef, float x, int order) +/* float coef[] coefficients of the polynomial to be evaluated */ +/* float x the point where polynomial is to be evaluated */ +/* int order order of the polynomial */ +{ + int i; + float *t, *u, *v, sum; + float T[(order / 2) + 1]; + + /* Initialise pointers */ + + t = T; /* T[i-2] */ + *t++ = 1.0; + u = t--; /* T[i-1] */ + *u++ = x; + v = u--; /* T[i] */ + + /* Evaluate chebyshev series formulation using iterative approach */ + + for (i = 2; i <= order / 2; i++) + *v++ = (2 * x) * (*u++) - *t++; /* T[i] = 2*x*T[i-1] - T[i-2] */ + + sum = 0.0; /* initialise sum to zero */ + t = T; /* reset pointer */ + + /* Evaluate polynomial and return value also free memory space */ + + for (i = 0; i <= order / 2; i++) sum += coef[(order / 2) - i] * *t++; + + return sum; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: lpc_to_lsp() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function converts LPC coefficients to LSP coefficients. + +\*---------------------------------------------------------------------------*/ + +int lpc_to_lsp(float *a, int order, float *freq, int nb, float delta) +/* float *a lpc coefficients */ +/* int order order of LPC coefficients (10) */ +/* float *freq LSP frequencies in radians */ +/* int nb number of sub-intervals (4) */ +/* float delta grid spacing interval (0.02) */ +{ + float psuml, psumr, psumm, temp_xr, xl, xr, xm = 0; + float temp_psumr; + int i, j, m, flag, k; + float *px; /* ptrs of respective P'(z) & Q'(z) */ + float *qx; + float *p; + float *q; + float *pt; /* ptr used for cheb_poly_eval() + whether P' or Q' */ + int roots = 0; /* number of roots found */ + float Q[order + 1]; + float P[order + 1]; + + flag = 1; + m = order / 2; /* order of P'(z) & Q'(z) polynimials */ + + /* Allocate memory space for polynomials */ + + /* determine P'(z)'s and Q'(z)'s coefficients where + P'(z) = P(z)/(1 + z^(-1)) and Q'(z) = Q(z)/(1-z^(-1)) */ + + px = P; /* initilaise ptrs */ + qx = Q; + p = px; + q = qx; + *px++ = 1.0; + *qx++ = 1.0; + for (i = 1; i <= m; i++) { + *px++ = a[i] + a[order + 1 - i] - *p++; + *qx++ = a[i] - a[order + 1 - i] + *q++; + } + px = P; + qx = Q; + for (i = 0; i < m; i++) { + *px = 2 * *px; + *qx = 2 * *qx; + px++; + qx++; + } + px = P; /* re-initialise ptrs */ + qx = Q; + + /* Search for a zero in P'(z) polynomial first and then alternate to Q'(z). + Keep alternating between the two polynomials as each zero is found */ + + xr = 0; /* initialise xr to zero */ + xl = 1.0; /* start at point xl = 1 */ + + for (j = 0; j < order; j++) { + if (j % 2) /* determines whether P' or Q' is eval. */ + pt = qx; + else + pt = px; + + psuml = cheb_poly_eva(pt, xl, order); /* evals poly. at xl */ + flag = 1; + while (flag && (xr >= -1.0)) { + xr = xl - delta; /* interval spacing */ + psumr = cheb_poly_eva(pt, xr, order); /* poly(xl-delta_x) */ + temp_psumr = psumr; + temp_xr = xr; + + /* if no sign change increment xr and re-evaluate + poly(xr). Repeat til sign change. if a sign change has + occurred the interval is bisected and then checked again + for a sign change which determines in which interval the + zero lies in. If there is no sign change between poly(xm) + and poly(xl) set interval between xm and xr else set + interval between xl and xr and repeat till root is located + within the specified limits */ + + if (((psumr * psuml) < 0.0) || (psumr == 0.0)) { + roots++; + + psumm = psuml; + for (k = 0; k <= nb; k++) { + xm = (xl + xr) / 2; /* bisect the interval */ + psumm = cheb_poly_eva(pt, xm, order); + if (psumm * psuml > 0.) { + psuml = psumm; + xl = xm; + } else { + psumr = psumm; + xr = xm; + } + } + + /* once zero is found, reset initial interval to xr */ + freq[j] = (xm); + xl = xm; + flag = 0; /* reset flag for next search */ + } else { + psuml = temp_psumr; + xl = temp_xr; + } + } + } + + /* convert from x domain to radians */ + + for (i = 0; i < order; i++) { + freq[i] = acosf(freq[i]); + } + + return (roots); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: lsp_to_lpc() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function converts LSP coefficients to LPC coefficients. In the + Speex code we worked out a way to simplify this significantly. + +\*---------------------------------------------------------------------------*/ + +void lsp_to_lpc(float *lsp, float *ak, int order) +/* float *freq array of LSP frequencies in radians */ +/* float *ak array of LPC coefficients */ +/* int order order of LPC coefficients */ + +{ + int i, j; + float xout1, xout2, xin1, xin2; + float *pw, *n1, *n2, *n3, *n4 = 0; + float freq[order]; + float Wp[(order * 4) + 2]; + + /* convert from radians to the x=cos(w) domain */ + + for (i = 0; i < order; i++) freq[i] = cosf(lsp[i]); + + pw = Wp; + + /* initialise contents of array */ + + for (i = 0; i <= 4 * (order / 2) + 1; i++) { /* set contents of buffer to 0 */ + *pw++ = 0.0; + } + + /* Set pointers up */ + + pw = Wp; + xin1 = 1.0; + xin2 = 1.0; + + /* reconstruct P(z) and Q(z) by cascading second order polynomials + in form 1 - 2xz(-1) +z(-2), where x is the LSP coefficient */ + + for (j = 0; j <= order; j++) { + for (i = 0; i < (order / 2); i++) { + n1 = pw + (i * 4); + n2 = n1 + 1; + n3 = n2 + 1; + n4 = n3 + 1; + xout1 = xin1 - 2 * (freq[2 * i]) * *n1 + *n2; + xout2 = xin2 - 2 * (freq[2 * i + 1]) * *n3 + *n4; + *n2 = *n1; + *n4 = *n3; + *n1 = xin1; + *n3 = xin2; + xin1 = xout1; + xin2 = xout2; + } + xout1 = xin1 + *(n4 + 1); + xout2 = xin2 - *(n4 + 2); + ak[j] = (xout1 + xout2) * 0.5; + *(n4 + 1) = xin1; + *(n4 + 2) = xin2; + + xin1 = 0.0; + xin2 = 0.0; + } +} diff --git a/src/lsp.h b/src/lsp.h new file mode 100644 index 0000000..d473e18 --- /dev/null +++ b/src/lsp.h @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lsp.c + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + + This file contains functions for LPC to LSP conversion and LSP to + LPC conversion. Note that the LSP coefficients are not in radians + format but in the x domain of the unit circle. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __LSP__ +#define __LSP__ + +int lpc_to_lsp(float *a, int lpcrdr, float *freq, int nb, float delta); +void lsp_to_lpc(float *freq, float *ak, int lpcrdr); + +#endif diff --git a/src/machdep.h b/src/machdep.h new file mode 100644 index 0000000..e17b5fa --- /dev/null +++ b/src/machdep.h @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: machdep.h + AUTHOR......: David Rowe + DATE CREATED: May 2 2013 + + Machine dependent functions, e.g. profiling that requires access to a clock + counter register. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __MACHDEP__ +#define __MACHDEP__ + +#ifdef PROFILE +#define PROFILE_VAR(...) unsigned int __VA_ARGS__ +#define PROFILE_SAMPLE(timestamp) timestamp = machdep_profile_sample() +#define PROFILE_SAMPLE_AND_LOG(timestamp, prev_timestamp, label) \ + timestamp = machdep_profile_sample_and_log(prev_timestamp, label) +#define PROFILE_SAMPLE_AND_LOG2(prev_timestamp, label) \ + machdep_profile_sample_and_log(prev_timestamp, label) +#else +#define PROFILE_VAR(...) +#define PROFILE_SAMPLE(timestamp) +#define PROFILE_SAMPLE_AND_LOG(timestamp, prev_timestamp, label) +#define PROFILE_SAMPLE_AND_LOG2(prev_timestamp, label) +#endif + +void machdep_profile_init(void); +void machdep_profile_reset(void); +unsigned int machdep_profile_sample(void); +unsigned int machdep_profile_sample_and_log(unsigned int start, char s[]); +void machdep_profile_print_logged_samples(void); + +#endif diff --git a/src/mbest.c b/src/mbest.c new file mode 100644 index 0000000..9c1a6c5 --- /dev/null +++ b/src/mbest.c @@ -0,0 +1,191 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: mbest.c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Multistage vector quantiser search algorithm that keeps multiple + candidates from each stage. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "mbest.h" + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +struct MBEST *mbest_create(int entries) { + int i, j; + struct MBEST *mbest; + + assert(entries > 0); + mbest = (struct MBEST *)malloc(sizeof(struct MBEST)); + assert(mbest != NULL); + + mbest->entries = entries; + mbest->list = + (struct MBEST_LIST *)malloc(entries * sizeof(struct MBEST_LIST)); + assert(mbest->list != NULL); + + for (i = 0; i < mbest->entries; i++) { + for (j = 0; j < MBEST_STAGES; j++) mbest->list[i].index[j] = 0; + mbest->list[i].error = 1E32; + } + + return mbest; +} + +void mbest_destroy(struct MBEST *mbest) { + assert(mbest != NULL); + free(mbest->list); + free(mbest); +} + +/* apply weighting to VQ for efficient VQ search */ + +void mbest_precompute_weight(float cb[], float w[], int k, int m) { + for (int j = 0; j < m; j++) { + for (int i = 0; i < k; i++) cb[k * j + i] *= w[i]; + } +} + +/*---------------------------------------------------------------------------*\ + + mbest_insert + + Insert the results of a vector to codebook entry comparison. The + list is ordered in order of error, so those entries with the + smallest error will be first on the list. + +\*---------------------------------------------------------------------------*/ + +void mbest_insert(struct MBEST *mbest, int index[], float error) { + int i, found; + struct MBEST_LIST *list = mbest->list; + int entries = mbest->entries; + + found = 0; + for (i = 0; i < entries && !found; i++) + if (error < list[i].error) { + found = 1; + memmove(&list[i + 1], &list[i], + sizeof(struct MBEST_LIST) * (entries - i - 1)); + memcpy(&list[i].index[0], &index[0], sizeof(int) * MBEST_STAGES); + list[i].error = error; + } +} + +void mbest_print(char title[], struct MBEST *mbest) { + int i, j; + + fprintf(stderr, "%s\n", title); + for (i = 0; i < mbest->entries; i++) { + for (j = 0; j < MBEST_STAGES; j++) + fprintf(stderr, " %4d ", mbest->list[i].index[j]); + fprintf(stderr, " %f\n", (double)mbest->list[i].error); + } +} + +/*---------------------------------------------------------------------------*\ + + mbest_search + + Searches vec[] to a codebbook of vectors, and maintains a list of the mbest + closest matches. + +\*---------------------------------------------------------------------------*/ + +void mbest_search(const float *cb, /* VQ codebook to search */ + float vec[], /* target vector */ + int k, /* dimension of vector */ + int m, /* number on entries in codebook */ + struct MBEST *mbest, /* list of closest matches */ + int index[] /* indexes that lead us here */ +) { + int j; + + /* note weighting can be applied externally by modifying cb[] and vec: + + float e = 0.0; + for(i=0; i<k; i++) + e += pow(w[i]*(cb[j*k+i] - vec[i]),2.0) + + | + \|/ + + for(i=0; i<k; i++) + e += pow(w[i]*cb[j*k+i] - w[i]*vec[i]),2.0) + + | + \|/ + + for(i=0; i<k; i++) + e += pow(cb1[j*k+i] - vec1[i]),2.0) + + where cb1[j*k+i] = w[i]*cb[j*k+i], and vec1[i] = w[i]*vec[i] + */ + + for (j = 0; j < m; j++) { + float e = 0.0; + for (int i = 0; i < k; i++) { + float diff = *cb++ - vec[i]; + e += diff * diff; + } + + index[0] = j; + if (e < mbest->list[mbest->entries - 1].error) + mbest_insert(mbest, index, e); + } +} + +/*---------------------------------------------------------------------------*\ + + mbest_search450 + + Searches vec[] to a codebbook of vectors, and maintains a list of the mbest + closest matches. Only searches the first NewAmp2_K Vectors + +\*---------------------------------------------------------------------------*/ + +void mbest_search450(const float *cb, float vec[], float w[], int k, + int shorterK, int m, struct MBEST *mbest, int index[]) + +{ + float e; + int i, j; + float diff; + + for (j = 0; j < m; j++) { + e = 0.0; + for (i = 0; i < k; i++) { + // Only search first NEWAMP2_K Vectors + if (i < shorterK) { + diff = cb[j * k + i] - vec[i]; + e += diff * w[i] * diff * w[i]; + } + } + index[0] = j; + mbest_insert(mbest, index, e); + } +} diff --git a/src/mbest.h b/src/mbest.h new file mode 100644 index 0000000..2851fb9 --- /dev/null +++ b/src/mbest.h @@ -0,0 +1,56 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: mbest.h + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Multistage vector quantiser search algorithm that keeps multiple + candidates from each stage. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + +*/ + +#ifndef __MBEST__ +#define __MBEST__ + +#define MBEST_STAGES 4 + +struct MBEST_LIST { + int index[MBEST_STAGES]; /* index of each stage that lead us to this error */ + float error; +}; + +struct MBEST { + int entries; /* number of entries in mbest list */ + struct MBEST_LIST *list; +}; + +struct MBEST *mbest_create(int entries); +void mbest_destroy(struct MBEST *mbest); +void mbest_precompute_weight(float cb[], float w[], int k, int m); +void mbest_insert(struct MBEST *mbest, int index[], float error); +void mbest_search(const float *cb, float vec[], int k, int m, + struct MBEST *mbest, int index[]); +void mbest_search450(const float *cb, float vec[], float w[], int k, + int shorterK, int m, struct MBEST *mbest, int index[]); + +void mbest_print(char title[], struct MBEST *mbest); + +#endif diff --git a/src/mpdecode_core.h b/src/mpdecode_core.h new file mode 100644 index 0000000..95ead46 --- /dev/null +++ b/src/mpdecode_core.h @@ -0,0 +1,61 @@ +/* + FILE...: mpdecode_core.h + AUTHOR.: David Rowe + CREATED: Sep 2016 + + C-callable core functions for MpDecode, so they can be used for + Octave and C programs. Also some convenience functions to help use + the C-callable LDPC decoder in C programs. +*/ + +#ifndef __MPDECODE_CORE__ +#define __MPDECODE_CORE__ + +#include <stdint.h> + +#include "comp.h" + +struct LDPC { + char name[32]; + int max_iter; + int dec_type; + int q_scale_factor; + int r_scale_factor; + int CodeLength; + int NumberParityBits; + int NumberRowsHcols; + int max_row_weight; + int max_col_weight; + + uint16_t *H_rows; + uint16_t *H_cols; + + /* these two are fixed to code params */ + int ldpc_data_bits_per_frame; + int ldpc_coded_bits_per_frame; + + /* support for partial use of data bits in codeword and unequal protection + * schemes */ + int protection_mode; + int data_bits_per_frame; + int coded_bits_per_frame; +}; + +void encode(struct LDPC *ldpc, unsigned char ibits[], unsigned char pbits[]); + +int run_ldpc_decoder(struct LDPC *ldpc, uint8_t out_char[], float input[], + int *parityCheckCount); + +void sd_to_llr(float llr[], float sd[], int n); +void Demod2D(float symbol_likelihood[], COMP r[], COMP S_matrix[], float EsNo, + float fading[], float mean_amp, int number_symbols); +void Somap(float bit_likelihood[], float symbol_likelihood[], int M, int bps, + int number_symbols); +void symbols_to_llrs(float llr[], COMP rx_qpsk_symbols[], float rx_amps[], + float EsNo, float mean_amp, int nsyms); +void fsk_rx_filt_to_llrs(float llr[], float rx_filt[], float v_est, + float SNRest, int M, int nsyms); + +void ldpc_print_info(struct LDPC *ldpc); + +#endif diff --git a/src/newamp1.c b/src/newamp1.c new file mode 100644 index 0000000..3ba2de0 --- /dev/null +++ b/src/newamp1.c @@ -0,0 +1,656 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: newamp1.c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Quantisation functions for the sinusoidal coder, using "newamp1" + algorithm that resamples variable rate L [Am} to a fixed rate K then + VQs. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "newamp1.h" + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "defines.h" +#include "mbest.h" +#include "phase.h" +#include "quantise.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_para() + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + General 2nd order parabolic interpolator. Used splines originally, + but this is much simpler and we don't need much accuracy. Given two + vectors of points xp and yp, find interpolated values y at points x. + +\*---------------------------------------------------------------------------*/ + +void interp_para(float y[], float xp[], float yp[], int np, float x[], int n) { + assert(np >= 3); + + int k, i; + float xi, x1, y1, x2, y2, x3, y3, a, b; + + k = 0; + for (i = 0; i < n; i++) { + xi = x[i]; + + /* k is index into xp of where we start 3 points used to form parabola */ + + while ((xp[k + 1] < xi) && (k < (np - 3))) k++; + + x1 = xp[k]; + y1 = yp[k]; + x2 = xp[k + 1]; + y2 = yp[k + 1]; + x3 = xp[k + 2]; + y3 = yp[k + 2]; + + // printf("k: %d np: %d i: %d xi: %f x1: %f y1: %f\n", k, np, i, xi, x1, + // y1); + + a = ((y3 - y2) / (x3 - x2) - (y2 - y1) / (x2 - x1)) / (x3 - x1); + b = ((y3 - y2) / (x3 - x2) * (x2 - x1) + + (y2 - y1) / (x2 - x1) * (x3 - x2)) / + (x3 - x1); + + y[i] = a * (xi - x2) * (xi - x2) + b * (xi - x2) + y2; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: ftomel() + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Non linear sampling of frequency axis, reducing the "rate" is a + first step before VQ + +\*---------------------------------------------------------------------------*/ + +float ftomel(float fHz) { + float mel = floorf(2595.0 * log10f(1.0 + fHz / 700.0) + 0.5); + return mel; +} + +void mel_sample_freqs_kHz(float rate_K_sample_freqs_kHz[], int K, + float mel_start, float mel_end) { + float step = (mel_end - mel_start) / (K - 1); + float mel; + int k; + + mel = mel_start; + for (k = 0; k < K; k++) { + rate_K_sample_freqs_kHz[k] = 0.7 * (POW10F(mel / 2595.0) - 1.0); + mel += step; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: resample_const_rate_f() + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Resample Am from time-varying rate L=floor(pi/Wo) to fixed rate K. + +\*---------------------------------------------------------------------------*/ + +void resample_const_rate_f(C2CONST *c2const, MODEL *model, float rate_K_vec[], + float rate_K_sample_freqs_kHz[], int K) { + int m; + float AmdB[MAX_AMP + 1], rate_L_sample_freqs_kHz[MAX_AMP + 1], AmdB_peak; + + /* convert rate L=pi/Wo amplitude samples to fixed rate K */ + + AmdB_peak = -100.0; + for (m = 1; m <= model->L; m++) { + AmdB[m] = 20.0 * log10f(model->A[m] + 1E-16); + if (AmdB[m] > AmdB_peak) { + AmdB_peak = AmdB[m]; + } + rate_L_sample_freqs_kHz[m] = m * model->Wo * (c2const->Fs / 2000.0) / M_PI; + // printf("m: %d AmdB: %f AmdB_peak: %f sf: %f\n", m, AmdB[m], AmdB_peak, + // rate_L_sample_freqs_kHz[m]); + } + + /* clip between peak and peak -50dB, to reduce dynamic range */ + + for (m = 1; m <= model->L; m++) { + if (AmdB[m] < (AmdB_peak - 50.0)) { + AmdB[m] = AmdB_peak - 50.0; + } + } + + interp_para(rate_K_vec, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, + rate_K_sample_freqs_kHz, K); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: rate_K_mbest_encode + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Two stage rate K newamp1 VQ quantiser using mbest search. + +\*---------------------------------------------------------------------------*/ + +float rate_K_mbest_encode(int *indexes, float *x, float *xq, int ndim, + int mbest_entries) { + int i, j, n1, n2; + const float *codebook1 = newamp1vq_cb[0].cb; + const float *codebook2 = newamp1vq_cb[1].cb; + struct MBEST *mbest_stage1, *mbest_stage2; + float target[ndim]; + int index[MBEST_STAGES]; + float mse, tmp; + + /* codebook is compiled for a fixed K */ + + assert(ndim == newamp1vq_cb[0].k); + + mbest_stage1 = mbest_create(mbest_entries); + mbest_stage2 = mbest_create(mbest_entries); + for (i = 0; i < MBEST_STAGES; i++) index[i] = 0; + + /* Stage 1 */ + + mbest_search(codebook1, x, ndim, newamp1vq_cb[0].m, mbest_stage1, index); + + /* Stage 2 */ + + for (j = 0; j < mbest_entries; j++) { + index[1] = n1 = mbest_stage1->list[j].index[0]; + for (i = 0; i < ndim; i++) target[i] = x[i] - codebook1[ndim * n1 + i]; + mbest_search(codebook2, target, ndim, newamp1vq_cb[1].m, mbest_stage2, + index); + } + + n1 = mbest_stage2->list[0].index[1]; + n2 = mbest_stage2->list[0].index[0]; + mse = 0.0; + for (i = 0; i < ndim; i++) { + tmp = codebook1[ndim * n1 + i] + codebook2[ndim * n2 + i]; + mse += (x[i] - tmp) * (x[i] - tmp); + xq[i] = tmp; + } + + mbest_destroy(mbest_stage1); + mbest_destroy(mbest_stage2); + + indexes[0] = n1; + indexes[1] = n2; + + return mse; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: post_filter + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Post Filter, has a big impact on speech quality after VQ. When used + on a mean removed rate K vector, it raises formants, and suppresses + anti-formants. As it manipulates amplitudes, we normalise energy to + prevent clipping or large level variations. pf_gain of 1.2 to 1.5 + (dB) seems to work OK. Good area for further investigations and + improvements in speech quality. + +\*---------------------------------------------------------------------------*/ + +void post_filter_newamp1(float vec[], float sample_freq_kHz[], int K, + float pf_gain) { + int k; + + /* + vec is rate K vector describing spectrum of current frame lets + pre-emp before applying PF. 20dB/dec over 300Hz. Postfilter + affects energy of frame so we measure energy before and after + and normalise. Plenty of room for experimentation here. + */ + + float pre[K]; + float e_before = 0.0; + float e_after = 0.0; + for (k = 0; k < K; k++) { + pre[k] = 20.0 * log10f(sample_freq_kHz[k] / 0.3); + vec[k] += pre[k]; + e_before += POW10F(vec[k] / 10.0); + vec[k] *= pf_gain; + e_after += POW10F(vec[k] / 10.0); + } + + float gain = e_after / e_before; + float gaindB = 10 * log10f(gain); + + for (k = 0; k < K; k++) { + vec[k] -= gaindB; + vec[k] -= pre[k]; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo_v + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Decoder side interpolation of Wo and voicing, to go from 25 Hz + sample rate used over channel to 100Hz internal sample rate of Codec 2. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo_v(float Wo_[], int L_[], int voicing_[], float Wo1, float Wo2, + int voicing1, int voicing2) { + int i; + int M = 4; /* interpolation rate */ + + for (i = 0; i < M; i++) voicing_[i] = 0; + + if (!voicing1 && !voicing2) { + for (i = 0; i < M; i++) Wo_[i] = 2.0 * M_PI / 100.0; + } + + if (voicing1 && !voicing2) { + Wo_[0] = Wo_[1] = Wo1; + Wo_[2] = Wo_[3] = 2.0 * M_PI / 100.0; + voicing_[0] = voicing_[1] = 1; + } + + if (!voicing1 && voicing2) { + Wo_[0] = Wo_[1] = 2.0 * M_PI / 100.0; + Wo_[2] = Wo_[3] = Wo2; + voicing_[2] = voicing_[3] = 1; + } + + if (voicing1 && voicing2) { + float c; + for (i = 0, c = 1.0; i < M; i++, c -= 1.0 / M) { + Wo_[i] = Wo1 * c + Wo2 * (1.0 - c); + voicing_[i] = 1; + } + } + + for (i = 0; i < M; i++) { + L_[i] = floorf(M_PI / Wo_[i]); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: resample_rate_L + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Decoder side conversion of rate K vector back to rate L. + +\*---------------------------------------------------------------------------*/ + +void resample_rate_L(C2CONST *c2const, MODEL *model, float rate_K_vec[], + float rate_K_sample_freqs_kHz[], int K) { + float rate_K_vec_term[K + 2], rate_K_sample_freqs_kHz_term[K + 2]; + float AmdB[MAX_AMP + 1], rate_L_sample_freqs_kHz[MAX_AMP + 1]; + int m, k; + + /* terminate either end of the rate K vecs with 0dB points */ + + rate_K_vec_term[0] = rate_K_vec_term[K + 1] = 0.0; + rate_K_sample_freqs_kHz_term[0] = 0.0; + rate_K_sample_freqs_kHz_term[K + 1] = 4.0; + + for (k = 0; k < K; k++) { + rate_K_vec_term[k + 1] = rate_K_vec[k]; + rate_K_sample_freqs_kHz_term[k + 1] = rate_K_sample_freqs_kHz[k]; + // printf("k: %d f: %f rate_K: %f\n", k, rate_K_sample_freqs_kHz[k], + // rate_K_vec[k]); + } + + for (m = 1; m <= model->L; m++) { + rate_L_sample_freqs_kHz[m] = m * model->Wo * (c2const->Fs / 2000.0) / M_PI; + } + + interp_para(&AmdB[1], rate_K_sample_freqs_kHz_term, rate_K_vec_term, K + 2, + &rate_L_sample_freqs_kHz[1], model->L); + for (m = 1; m <= model->L; m++) { + model->A[m] = POW10F(AmdB[m] / 20.0); + // printf("m: %d f: %f AdB: %f A: %f\n", m, rate_L_sample_freqs_kHz[m], + // AmdB[m], model->A[m]); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: determine_phase + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Given a magnitude spectrum determine a phase spectrum, used for + phase synthesis with newamp1. + +\*---------------------------------------------------------------------------*/ + +void determine_phase(C2CONST *c2const, COMP H[], MODEL *model, int Nfft, + codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg) { + int i, m, b; + int Ns = Nfft / 2 + 1; + float Gdbfk[Ns], sample_freqs_kHz[Ns], phase[Ns]; + float AmdB[MAX_AMP + 1], rate_L_sample_freqs_kHz[MAX_AMP + 1]; + + for (m = 1; m <= model->L; m++) { + assert(model->A[m] != 0.0); + AmdB[m] = 20.0 * log10f(model->A[m]); + rate_L_sample_freqs_kHz[m] = + (float)m * model->Wo * (c2const->Fs / 2000.0) / M_PI; + } + + for (i = 0; i < Ns; i++) { + sample_freqs_kHz[i] = (c2const->Fs / 1000.0) * (float)i / Nfft; + } + + interp_para(Gdbfk, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, + sample_freqs_kHz, Ns); + mag_to_phase(phase, Gdbfk, Nfft, fwd_cfg, inv_cfg); + + for (m = 1; m <= model->L; m++) { + b = floorf(0.5 + m * model->Wo * Nfft / (2.0 * M_PI)); + H[m].real = cosf(phase[b]); + H[m].imag = sinf(phase[b]); + } +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: determine_autoc + AUTHOR......: David Rowe + DATE CREATED: April 2020 + + Determine autocorrelation coefficients from model params, for machine + learning experiments. + +\*---------------------------------------------------------------------------*/ + +void determine_autoc(C2CONST *c2const, float Rk[], int order, MODEL *model, + int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg) { + int i, m; + int Ns = Nfft / 2 + 1; + float Gdbfk[Ns], sample_freqs_kHz[Ns]; + float AmdB[MAX_AMP + 1], rate_L_sample_freqs_kHz[MAX_AMP + 1]; + + /* interpolate in the log domain */ + for (m = 1; m <= model->L; m++) { + assert(model->A[m] != 0.0); + AmdB[m] = 20.0 * log10f(model->A[m]); + rate_L_sample_freqs_kHz[m] = + (float)m * model->Wo * (c2const->Fs / 2000.0) / M_PI; + } + + for (i = 0; i < Ns; i++) { + sample_freqs_kHz[i] = (c2const->Fs / 1000.0) * (float)i / Nfft; + } + + interp_para(Gdbfk, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, + sample_freqs_kHz, Ns); + + COMP S[Nfft], R[Nfft]; + + /* install negative frequency components, convert to mag squared of spectrum + */ + S[0].real = pow(10.0, Gdbfk[0] / 10.0); + S[0].imag = 0.0; + for (i = 1; i < Ns; i++) { + S[i].real = S[Nfft - i].real = pow(10.0, Gdbfk[i] / 10.0); + S[i].imag = S[Nfft - i].imag = 0.0; + } + + /* IDFT of mag squared is autocorrelation function */ + codec2_fft(inv_cfg, S, R); + for (int k = 0; k < order + 1; k++) Rk[k] = R[k].real; +} + +/* update and optionally run "front eq" equaliser on before VQ */ +void newamp1_eq(float rate_K_vec_no_mean[], float eq[], int K, int eq_en) { + static float ideal[] = {8, 10, 12, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, -20}; + float gain = 0.02; + float update; + + for (int k = 0; k < K; k++) { + update = rate_K_vec_no_mean[k] - ideal[k]; + eq[k] = (1.0 - gain) * eq[k] + gain * update; + if (eq[k] < 0.0) eq[k] = 0.0; + if (eq_en) rate_K_vec_no_mean[k] -= eq[k]; + } +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: newamp1_model_to_indexes + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + newamp1 encoder for amplitdues {Am}. Given the rate L model + parameters, outputs VQ and energy quantiser indexes. + +\*---------------------------------------------------------------------------*/ + +void newamp1_model_to_indexes(C2CONST *c2const, int indexes[], MODEL *model, + float rate_K_vec[], + float rate_K_sample_freqs_kHz[], int K, + float *mean, float rate_K_vec_no_mean[], + float rate_K_vec_no_mean_[], float *se, float *eq, + int eq_en) { + int k; + + /* convert variable rate L to fixed rate K */ + resample_const_rate_f(c2const, model, rate_K_vec, rate_K_sample_freqs_kHz, K); + + /* remove mean */ + float sum = 0.0; + for (k = 0; k < K; k++) sum += rate_K_vec[k]; + *mean = sum / K; + for (k = 0; k < K; k++) rate_K_vec_no_mean[k] = rate_K_vec[k] - *mean; + + /* update and optionally run "front eq" equaliser on before VQ */ + newamp1_eq(rate_K_vec_no_mean, eq, K, eq_en); + + /* two stage VQ */ + rate_K_mbest_encode(indexes, rate_K_vec_no_mean, rate_K_vec_no_mean_, K, + NEWAMP1_VQ_MBEST_DEPTH); + + /* running sum of squared error for variance calculation */ + for (k = 0; k < K; k++) + *se += (float)pow(rate_K_vec_no_mean[k] - rate_K_vec_no_mean_[k], 2.0); + + /* scalar quantise mean (effectively the frame energy) */ + float w[1] = {1.0}; + float se_mean; + indexes[2] = + quantise(newamp1_energy_cb[0].cb, mean, w, newamp1_energy_cb[0].k, + newamp1_energy_cb[0].m, &se_mean); + + /* scalar quantise Wo. We steal the smallest Wo index to signal + an unvoiced frame */ + if (model->voiced) { + int index = encode_log_Wo(c2const, model->Wo, 6); + if (index == 0) { + index = 1; + } + indexes[3] = index; + } else { + indexes[3] = 0; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: newamp1_interpolate + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + +\*---------------------------------------------------------------------------*/ + +void newamp1_interpolate(float interpolated_surface_[], float left_vec[], + float right_vec[], int K) { + int i, k; + int M = 4; + float c; + + /* (linearly) interpolate 25Hz amplitude vectors back to 100Hz */ + + for (i = 0, c = 1.0; i < M; i++, c -= 1.0 / M) { + for (k = 0; k < K; k++) { + interpolated_surface_[i * K + k] = + left_vec[k] * c + right_vec[k] * (1.0 - c); + } + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: newamp1_indexes_to_rate_K_vec + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + newamp1 decoder for amplitudes {Am}. Given the rate K VQ and energy + indexes, outputs rate K vector. + +\*---------------------------------------------------------------------------*/ + +void newamp1_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], int K, + float *mean_, int indexes[], + float user_rate_K_vec_no_mean_[], + int post_filter_en) { + int k; + const float *codebook1 = newamp1vq_cb[0].cb; + const float *codebook2 = newamp1vq_cb[1].cb; + int n1 = indexes[0]; + int n2 = indexes[1]; + + if (user_rate_K_vec_no_mean_ == NULL) { + /* normal operation */ + for (k = 0; k < K; k++) { + rate_K_vec_no_mean_[k] = codebook1[K * n1 + k] + codebook2[K * n2 + k]; + } + } else { + /* for development we can optionally inject the quantised rate K vector here + */ + for (k = 0; k < K; k++) + rate_K_vec_no_mean_[k] = user_rate_K_vec_no_mean_[k]; + } + + if (post_filter_en) + post_filter_newamp1(rate_K_vec_no_mean_, rate_K_sample_freqs_kHz, K, 1.5); + + *mean_ = newamp1_energy_cb[0].cb[indexes[2]]; + + for (k = 0; k < K; k++) { + rate_K_vec_[k] = rate_K_vec_no_mean_[k] + *mean_; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: newamp1_indexes_to_model + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + newamp1 decoder. + +\*---------------------------------------------------------------------------*/ + +void newamp1_indexes_to_model(C2CONST *c2const, MODEL model_[], COMP H[], + float *interpolated_surface_, + float prev_rate_K_vec_[], float *Wo_left, + int *voicing_left, + float rate_K_sample_freqs_kHz[], int K, + codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg, + int indexes[], float user_rate_K_vec_no_mean_[], + int post_filter_en) { + float rate_K_vec_[K], rate_K_vec_no_mean_[K], mean_, Wo_right; + int voicing_right, k; + int M = 4; + + /* extract latest rate K vector */ + + newamp1_indexes_to_rate_K_vec(rate_K_vec_, rate_K_vec_no_mean_, + rate_K_sample_freqs_kHz, K, &mean_, indexes, + user_rate_K_vec_no_mean_, post_filter_en); + + /* decode latest Wo and voicing */ + + if (indexes[3]) { + Wo_right = decode_log_Wo(c2const, indexes[3], 6); + voicing_right = 1; + } else { + Wo_right = 2.0 * M_PI / 100.0; + voicing_right = 0; + } + + /* interpolate 25Hz rate K vec back to 100Hz */ + + float *left_vec = prev_rate_K_vec_; + float *right_vec = rate_K_vec_; + newamp1_interpolate(interpolated_surface_, left_vec, right_vec, K); + + /* interpolate 25Hz v and Wo back to 100Hz */ + + float aWo_[M]; + int avoicing_[M], aL_[M], i; + + interp_Wo_v(aWo_, aL_, avoicing_, *Wo_left, Wo_right, *voicing_left, + voicing_right); + + /* back to rate L amplitudes, synthesise phase for each frame */ + + for (i = 0; i < M; i++) { + model_[i].Wo = aWo_[i]; + model_[i].L = aL_[i]; + model_[i].voiced = avoicing_[i]; + + resample_rate_L(c2const, &model_[i], &interpolated_surface_[K * i], + rate_K_sample_freqs_kHz, K); + determine_phase(c2const, &H[(MAX_AMP + 1) * i], &model_[i], + NEWAMP1_PHASE_NFFT, fwd_cfg, inv_cfg); + } + + /* update memories for next time */ + + for (k = 0; k < K; k++) { + prev_rate_K_vec_[k] = rate_K_vec_[k]; + } + *Wo_left = Wo_right; + *voicing_left = voicing_right; +} diff --git a/src/newamp1.h b/src/newamp1.h new file mode 100644 index 0000000..476f51b --- /dev/null +++ b/src/newamp1.h @@ -0,0 +1,86 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: newamp1.h + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Quantisation functions for the sinusoidal coder, using "newamp1" + algorithm that resamples variable rate L [Am} to a fixed rate K then + VQs. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __NEWAMP1__ +#define __NEWAMP1__ + +#define NEWAMP1_N_INDEXES \ + 4 /* Number of indexes to pack: vq1, vq2, energy, Wo */ +#define NEWAMP1_PHASE_NFFT \ + 128 /* size of FFT used for phase synthesis */ +#define NEWAMP1_K 20 /* rate K vector length */ +#define NEWAMP1_VQ_MBEST_DEPTH \ + 5 /* how many candidates we keep for each stage of mbest search */ + +#include "codec2_fft.h" +#include "comp.h" + +void interp_para(float y[], float xp[], float yp[], int np, float x[], int n); +float ftomel(float fHz); +void mel_sample_freqs_kHz(float rate_K_sample_freqs_kHz[], int K, + float mel_start, float mel_end); +void resample_const_rate_f(C2CONST *c2const, MODEL *model, float rate_K_vec[], + float rate_K_sample_freqs_kHz[], int K); +float rate_K_mbest_encode(int *indexes, float *x, float *xq, int ndim, + int mbest_entries); +void post_filter_newamp1(float vec[], float sample_freq_kHz[], int K, + float pf_gain); +void interp_Wo_v(float Wo_[], int L_[], int voicing_[], float Wo1, float Wo2, + int voicing1, int voicing2); +void resample_rate_L(C2CONST *c2const, MODEL *model, float rate_K_vec[], + float rate_K_sample_freqs_kHz[], int K); +void determine_phase(C2CONST *c2const, COMP H[], MODEL *model, int Nfft, + codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg); +void determine_autoc(C2CONST *c2const, float Rk[], int order, MODEL *model, + int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg); +void newamp1_model_to_indexes(C2CONST *c2const, int indexes[], MODEL *model, + float rate_K_vec[], + float rate_K_sample_freqs_kHz[], int K, + float *mean, float rate_K_vec_no_mean[], + float rate_K_vec_no_mean_[], float *se, float *eq, + int eq_en); +void newamp1_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], int K, + float *mean_, int indexes[], + float user_rate_K_vec_no_mean_[], + int post_filter_en); +void newamp1_interpolate(float interpolated_surface_[], float left_vec[], + float right_vec[], int K); +void newamp1_eq(float rate_K_vec_no_mean[], float eq[], int K, int eq_en); +void newamp1_indexes_to_model(C2CONST *c2const, MODEL model_[], COMP H[], + float interpolated_surface_[], + float prev_rate_K_vec_[], float *Wo_left, + int *voicing_left, + float rate_K_sample_freqs_kHz[], int K, + codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg, + int indexes[], float user_rate_K_vec_no_mean_[], + int post_filter_en); + +#endif diff --git a/src/nlp.c b/src/nlp.c new file mode 100644 index 0000000..ee244b9 --- /dev/null +++ b/src/nlp.c @@ -0,0 +1,462 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: nlp.c + AUTHOR......: David Rowe + DATE CREATED: 23/3/93 + + Non Linear Pitch (NLP) estimation functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "nlp.h" + +#include "codec2_fft.h" +#include "defines.h" +#undef PROFILE +#include <assert.h> +#include <math.h> +#include <stdlib.h> + +#include "machdep.h" +#include "os.h" + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define PMAX_M 320 /* maximum NLP analysis window size */ +#define COEFF 0.95 /* notch filter parameter */ +#define PE_FFT_SIZE 512 /* DFT size for pitch estimation */ +#define DEC 5 /* decimation factor */ +#define SAMPLE_RATE 8000 +#define PI 3.141592654 /* mathematical constant */ +#define T 0.1 /* threshold for local minima candidate */ +#define F0_MAX 500 +#define CNLP 0.3 /* post processor constant */ +#define NLP_NTAP 48 /* Decimation LPF order */ + +/* 8 to 16 kHz sample rate conversion */ + +#define FDMDV_OS 2 /* oversampling rate */ +#define FDMDV_OS_TAPS_16K 48 /* number of OS filter taps at 16kHz */ +#define FDMDV_OS_TAPS_8K \ + (FDMDV_OS_TAPS_16K / FDMDV_OS) /* number of OS filter taps at 8kHz */ + +/*---------------------------------------------------------------------------*\ + + GLOBALS + +\*---------------------------------------------------------------------------*/ + +/* 48 tap 600Hz low pass FIR filter coefficients */ + +const float nlp_fir[] = { + -1.0818124e-03, -1.1008344e-03, -9.2768838e-04, -4.2289438e-04, + 5.5034190e-04, 2.0029849e-03, 3.7058509e-03, 5.1449415e-03, + 5.5924666e-03, 4.3036754e-03, 8.0284511e-04, -4.8204610e-03, + -1.1705810e-02, -1.8199275e-02, -2.2065282e-02, -2.0920610e-02, + -1.2808831e-02, 3.2204775e-03, 2.6683811e-02, 5.5520624e-02, + 8.6305944e-02, 1.1480192e-01, 1.3674206e-01, 1.4867556e-01, + 1.4867556e-01, 1.3674206e-01, 1.1480192e-01, 8.6305944e-02, + 5.5520624e-02, 2.6683811e-02, 3.2204775e-03, -1.2808831e-02, + -2.0920610e-02, -2.2065282e-02, -1.8199275e-02, -1.1705810e-02, + -4.8204610e-03, 8.0284511e-04, 4.3036754e-03, 5.5924666e-03, + 5.1449415e-03, 3.7058509e-03, 2.0029849e-03, 5.5034190e-04, + -4.2289438e-04, -9.2768838e-04, -1.1008344e-03, -1.0818124e-03}; + +typedef struct { + int Fs; /* sample rate in Hz */ + int m; + float w[PMAX_M / DEC]; /* DFT window */ + float sq[PMAX_M]; /* squared speech samples */ + float mem_x, mem_y; /* memory for notch filter */ + float mem_fir[NLP_NTAP]; /* decimation FIR filter memory */ + codec2_fft_cfg fft_cfg; /* kiss FFT config */ + float *Sn16k; /* Fs=16kHz input speech vector */ + FILE *f; +} NLP; + +float post_process_sub_multiples(COMP Fw[], int pmin, int pmax, float gmax, + int gmax_bin, float *prev_f0); +static void fdmdv_16_to_8(float out8k[], float in16k[], int n); + +/*---------------------------------------------------------------------------*\ + + nlp_create() + + Initialisation function for NLP pitch estimator. + +\*---------------------------------------------------------------------------*/ + +void *nlp_create(C2CONST *c2const) { + NLP *nlp; + int i; + int m = c2const->m_pitch; + int Fs = c2const->Fs; + + nlp = (NLP *)malloc(sizeof(NLP)); + if (nlp == NULL) return NULL; + + assert((Fs == 8000) || (Fs == 16000)); + nlp->Fs = Fs; + + nlp->m = m; + + /* if running at 16kHz allocate storage for decimating filter memory */ + + if (Fs == 16000) { + nlp->Sn16k = + (float *)malloc(sizeof(float) * (FDMDV_OS_TAPS_16K + c2const->n_samp)); + for (i = 0; i < FDMDV_OS_TAPS_16K; i++) { + nlp->Sn16k[i] = 0.0; + } + if (nlp->Sn16k == NULL) { + free(nlp); + return NULL; + } + + /* most processing occurs at 8 kHz sample rate so halve m */ + + m /= 2; + } + + assert(m <= PMAX_M); + + for (i = 0; i < m / DEC; i++) { + nlp->w[i] = 0.5 - 0.5 * cosf(2 * PI * i / (m / DEC - 1)); + } + + for (i = 0; i < PMAX_M; i++) nlp->sq[i] = 0.0; + nlp->mem_x = 0.0; + nlp->mem_y = 0.0; + for (i = 0; i < NLP_NTAP; i++) nlp->mem_fir[i] = 0.0; + + nlp->fft_cfg = codec2_fft_alloc(PE_FFT_SIZE, 0, NULL, NULL); + assert(nlp->fft_cfg != NULL); + + return (void *)nlp; +} + +/*---------------------------------------------------------------------------*\ + + nlp_destroy() + + Shut down function for NLP pitch estimator. + +\*---------------------------------------------------------------------------*/ + +void nlp_destroy(void *nlp_state) { + NLP *nlp; + assert(nlp_state != NULL); + nlp = (NLP *)nlp_state; + + codec2_fft_free(nlp->fft_cfg); + if (nlp->Fs == 16000) { + free(nlp->Sn16k); + } + free(nlp_state); +} + +/*---------------------------------------------------------------------------*\ + + nlp() + + Determines the pitch in samples using the Non Linear Pitch (NLP) + algorithm [1]. Returns the fundamental in Hz. Note that the actual + pitch estimate is for the centre of the M sample Sn[] vector, not + the current N sample input vector. This is (I think) a delay of 2.5 + frames with N=80 samples. You should align further analysis using + this pitch estimate to be centred on the middle of Sn[]. + + Two post processors have been tried, the MBE version (as discussed + in [1]), and a post processor that checks sub-multiples. Both + suffer occasional gross pitch errors (i.e. neither are perfect). In + the presence of background noise the sub-multiple algorithm tends + towards low F0 which leads to better sounding background noise than + the MBE post processor. + + A good way to test and develop the NLP pitch estimator is using the + tnlp (codec2/unittest) and the codec2/octave/plnlp.m Octave script. + + A pitch tracker searching a few frames forward and backward in time + would be a useful addition. + + References: + + [1] http://rowetel.com/downloads/1997_rowe_phd_thesis.pdf Chapter 4 + +\*---------------------------------------------------------------------------*/ + +float nlp( + void *nlp_state, float Sn[], /* input speech vector */ + int n, /* frames shift (no. new samples in Sn[]) */ + float *pitch, /* estimated pitch period in samples at current Fs */ + COMP Sw[], /* Freq domain version of Sn[] */ + float W[], /* Freq domain window */ + float *prev_f0 /* previous pitch f0 in Hz, memory for pitch tracking */ +) { + NLP *nlp; + float notch; /* current notch filter output */ + COMP Fw[PE_FFT_SIZE]; /* DFT of squared signal (input/output) */ + float gmax; + int gmax_bin; + int m, i, j; + float best_f0; + PROFILE_VAR(start, tnotch, filter, peakpick, window, fft, magsq, shiftmem); + + assert(nlp_state != NULL); + nlp = (NLP *)nlp_state; + m = nlp->m; + + /* Square, notch filter at DC, and LP filter vector */ + + /* If running at 16 kHz decimate to 8 kHz, as NLP ws designed for + Fs = 8kHz. The decimating filter introduces about 3ms of delay, + that shouldn't be a problem as pitch changes slowly. */ + + if (nlp->Fs == 8000) { + /* Square latest input samples */ + + for (i = m - n; i < m; i++) { + nlp->sq[i] = Sn[i] * Sn[i]; + } + } else { + assert(nlp->Fs == 16000); + + /* re-sample at 8 KHz */ + + for (i = 0; i < n; i++) { + nlp->Sn16k[FDMDV_OS_TAPS_16K + i] = Sn[m - n + i]; + } + + m /= 2; + n /= 2; + + float Sn8k[n]; + fdmdv_16_to_8(Sn8k, &nlp->Sn16k[FDMDV_OS_TAPS_16K], n); + + /* Square latest input samples */ + + for (i = m - n, j = 0; i < m; i++, j++) { + nlp->sq[i] = Sn8k[j] * Sn8k[j]; + } + assert(j <= n); + } + // fprintf(stderr, "n: %d m: %d\n", n, m); + + PROFILE_SAMPLE(start); + + for (i = m - n; i < m; i++) { /* notch filter at DC */ + notch = nlp->sq[i] - nlp->mem_x; + notch += COEFF * nlp->mem_y; + nlp->mem_x = nlp->sq[i]; + nlp->mem_y = notch; + nlp->sq[i] = notch + 1.0; /* With 0 input vectors to codec, + kiss_fft() would take a long + time to execute when running in + real time. Problem was traced + to kiss_fft function call in + this function. Adding this small + constant fixed problem. Not + exactly sure why. */ + } + + PROFILE_SAMPLE_AND_LOG(tnotch, start, " square and notch"); + + for (i = m - n; i < m; i++) { /* FIR filter vector */ + + for (j = 0; j < NLP_NTAP - 1; j++) nlp->mem_fir[j] = nlp->mem_fir[j + 1]; + nlp->mem_fir[NLP_NTAP - 1] = nlp->sq[i]; + + nlp->sq[i] = 0.0; + for (j = 0; j < NLP_NTAP; j++) nlp->sq[i] += nlp->mem_fir[j] * nlp_fir[j]; + } + + PROFILE_SAMPLE_AND_LOG(filter, tnotch, " filter"); + + /* Decimate and DFT */ + + for (i = 0; i < PE_FFT_SIZE; i++) { + Fw[i].real = 0.0; + Fw[i].imag = 0.0; + } + for (i = 0; i < m / DEC; i++) { + Fw[i].real = nlp->sq[i * DEC] * nlp->w[i]; + } + PROFILE_SAMPLE_AND_LOG(window, filter, " window"); + + // FIXME: check if this can be converted to a real fft + // since all imag inputs are 0 + codec2_fft_inplace(nlp->fft_cfg, Fw); + PROFILE_SAMPLE_AND_LOG(fft, window, " fft"); + + for (i = 0; i < PE_FFT_SIZE; i++) + Fw[i].real = Fw[i].real * Fw[i].real + Fw[i].imag * Fw[i].imag; + + PROFILE_SAMPLE_AND_LOG(magsq, fft, " mag sq"); + + /* todo: express everything in f0, as pitch in samples is dep on Fs */ + + int pmin = floor(SAMPLE_RATE * P_MIN_S); + int pmax = floor(SAMPLE_RATE * P_MAX_S); + + /* find global peak */ + + gmax = 0.0; + gmax_bin = PE_FFT_SIZE * DEC / pmax; + for (i = PE_FFT_SIZE * DEC / pmax; i <= PE_FFT_SIZE * DEC / pmin; i++) { + if (Fw[i].real > gmax) { + gmax = Fw[i].real; + gmax_bin = i; + } + } + + PROFILE_SAMPLE_AND_LOG(peakpick, magsq, " peak pick"); + + best_f0 = post_process_sub_multiples(Fw, pmin, pmax, gmax, gmax_bin, prev_f0); + + PROFILE_SAMPLE_AND_LOG(shiftmem, peakpick, " post process"); + + /* Shift samples in buffer to make room for new samples */ + + for (i = 0; i < m - n; i++) nlp->sq[i] = nlp->sq[i + n]; + + /* return pitch period in samples and F0 estimate */ + + *pitch = (float)nlp->Fs / best_f0; + + PROFILE_SAMPLE_AND_LOG2(shiftmem, " shift mem"); + + PROFILE_SAMPLE_AND_LOG2(start, " nlp int"); + + *prev_f0 = best_f0; + + return (best_f0); +} + +/*---------------------------------------------------------------------------*\ + + post_process_sub_multiples() + + Given the global maximma of Fw[] we search integer submultiples for + local maxima. If local maxima exist and they are above an + experimentally derived threshold (OK a magic number I pulled out of + the air) we choose the submultiple as the F0 estimate. + + The rational for this is that the lowest frequency peak of Fw[] + should be F0, as Fw[] can be considered the autocorrelation function + of Sw[] (the speech spectrum). However sometimes due to phase + effects the lowest frequency maxima may not be the global maxima. + + This works OK in practice and favours low F0 values in the presence + of background noise which means the sinusoidal codec does an OK job + of synthesising the background noise. High F0 in background noise + tends to sound more periodic introducing annoying artifacts. + +\*---------------------------------------------------------------------------*/ + +float post_process_sub_multiples(COMP Fw[], int pmin, int pmax, float gmax, + int gmax_bin, float *prev_f0) { + int min_bin, cmax_bin; + int mult; + float thresh, best_f0; + int b, bmin, bmax, lmax_bin; + float lmax; + int prev_f0_bin; + + /* post process estimate by searching submultiples */ + + mult = 2; + min_bin = PE_FFT_SIZE * DEC / pmax; + cmax_bin = gmax_bin; + prev_f0_bin = *prev_f0 * (PE_FFT_SIZE * DEC) / SAMPLE_RATE; + + while (gmax_bin / mult >= min_bin) { + b = gmax_bin / mult; /* determine search interval */ + bmin = 0.8 * b; + bmax = 1.2 * b; + if (bmin < min_bin) bmin = min_bin; + + /* lower threshold to favour previous frames pitch estimate, + this is a form of pitch tracking */ + + if ((prev_f0_bin > bmin) && (prev_f0_bin < bmax)) + thresh = CNLP * 0.5 * gmax; + else + thresh = CNLP * gmax; + + lmax = 0; + lmax_bin = bmin; + for (b = bmin; b <= bmax; b++) /* look for maximum in interval */ + if (Fw[b].real > lmax) { + lmax = Fw[b].real; + lmax_bin = b; + } + + if (lmax > thresh) + if ((lmax > Fw[lmax_bin - 1].real) && (lmax > Fw[lmax_bin + 1].real)) { + cmax_bin = lmax_bin; + } + + mult++; + } + + best_f0 = (float)cmax_bin * SAMPLE_RATE / (PE_FFT_SIZE * DEC); + + return best_f0; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_16_to_8() + AUTHOR......: David Rowe + DATE CREATED: 9 May 2012 + + Changes the sample rate of a signal from 16 to 8 kHz. + + n is the number of samples at the 8 kHz rate, there are FDMDV_OS*n + samples at the 48 kHz rate. As above however a memory of + FDMDV_OS_TAPS samples is reqd for in16k[] (see t16_8.c unit test as example). + + Low pass filter the 16 kHz signal at 4 kHz using the same filter as + the upsampler, then just output every FDMDV_OS-th filtered sample. + + Note: this function copied from fdmdv.c, included in nlp.c as a convenience + to avoid linking with another source file. + +\*---------------------------------------------------------------------------*/ + +static void fdmdv_16_to_8(float out8k[], float in16k[], int n) { + float acc; + int i, j, k; + + for (i = 0, k = 0; k < n; i += FDMDV_OS, k++) { + acc = 0.0; + for (j = 0; j < FDMDV_OS_TAPS_16K; j++) + acc += fdmdv_os_filter[j] * in16k[i - j]; + out8k[k] = acc; + } + + /* update filter memory */ + + for (i = -FDMDV_OS_TAPS_16K; i < 0; i++) in16k[i] = in16k[i + n * FDMDV_OS]; +} diff --git a/src/nlp.h b/src/nlp.h new file mode 100644 index 0000000..4b56c4f --- /dev/null +++ b/src/nlp.h @@ -0,0 +1,39 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: nlp.c + AUTHOR......: David Rowe + DATE CREATED: 23/3/93 + + Non Linear Pitch (NLP) estimation functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __NLP__ +#define __NLP__ + +#include "comp.h" +#include "defines.h" + +void *nlp_create(C2CONST *c2const); +void nlp_destroy(void *nlp_state); +float nlp(void *nlp_state, float Sn[], int n, float *pitch_samples, COMP Sw[], + float W[], float *prev_f0); + +#endif diff --git a/src/optparse.h b/src/optparse.h new file mode 100644 index 0000000..6f7ced0 --- /dev/null +++ b/src/optparse.h @@ -0,0 +1,361 @@ +/* Optparse --- portable, reentrant, embeddable, getopt-like option parser + * + * This is free and unencumbered software released into the public domain. + * + * To get the implementation, define OPTPARSE_IMPLEMENTATION. + * Optionally define OPTPARSE_API to control the API's visibility + * and/or linkage (static, __attribute__, __declspec). + * + * The POSIX getopt() option parser has three fatal flaws. These flaws + * are solved by Optparse. + * + * 1) Parser state is stored entirely in global variables, some of + * which are static and inaccessible. This means only one thread can + * use getopt(). It also means it's not possible to recursively parse + * nested sub-arguments while in the middle of argument parsing. + * Optparse fixes this by storing all state on a local struct. + * + * 2) The POSIX standard provides no way to properly reset the parser. + * This means for portable code that getopt() is only good for one + * run, over one argv with one option string. It also means subcommand + * options cannot be processed with getopt(). Most implementations + * provide a method to reset the parser, but it's not portable. + * Optparse provides an optparse_arg() function for stepping over + * subcommands and continuing parsing of options with another option + * string. The Optparse struct itself can be passed around to + * subcommand handlers for additional subcommand option parsing. A + * full reset can be achieved by with an additional optparse_init(). + * + * 3) Error messages are printed to stderr. This can be disabled with + * opterr, but the messages themselves are still inaccessible. + * Optparse solves this by writing an error message in its errmsg + * field. The downside to Optparse is that this error message will + * always be in English rather than the current locale. + * + * Optparse should be familiar with anyone accustomed to getopt(), and + * it could be a nearly drop-in replacement. The option string is the + * same and the fields have the same names as the getopt() global + * variables (optarg, optind, optopt). + * + * Optparse also supports GNU-style long options with optparse_long(). + * The interface is slightly different and simpler than getopt_long(). + * + * By default, argv is permuted as it is parsed, moving non-option + * arguments to the end. This can be disabled by setting the `permute` + * field to 0 after initialization. + */ +#ifndef OPTPARSE_H +#define OPTPARSE_H + +#ifndef OPTPARSE_API +#define OPTPARSE_API +#endif + +struct optparse { + char **argv; + int permute; + int optind; + int optopt; + char *optarg; + char errmsg[64]; + int subopt; +}; + +enum optparse_argtype { OPTPARSE_NONE, OPTPARSE_REQUIRED, OPTPARSE_OPTIONAL }; + +struct optparse_long { + const char *longname; + int shortname; + enum optparse_argtype argtype; +}; + +/** + * Initializes the parser state. + */ +OPTPARSE_API +void optparse_init(struct optparse *options, char **argv); + +/** + * Read the next option in the argv array. + * @param optstring a getopt()-formatted option string. + * @return the next option character, -1 for done, or '?' for error + * + * Just like getopt(), a character followed by no colons means no + * argument. One colon means the option has a required argument. Two + * colons means the option takes an optional argument. + */ +OPTPARSE_API +int optparse(struct optparse *options, const char *optstring); + +/** + * Handles GNU-style long options in addition to getopt() options. + * This works a lot like GNU's getopt_long(). The last option in + * longopts must be all zeros, marking the end of the array. The + * longindex argument may be NULL. + */ +OPTPARSE_API +int optparse_long(struct optparse *options, + const struct optparse_long *longopts, int *longindex); + +/** + * Used for stepping over non-option arguments. + * @return the next non-option argument, or NULL for no more arguments + * + * Argument parsing can continue with optparse() after using this + * function. That would be used to parse the options for the + * subcommand returned by optparse_arg(). This function allows you to + * ignore the value of optind. + */ +OPTPARSE_API +char *optparse_arg(struct optparse *options); + +/* Implementation */ +#ifdef OPTPARSE_IMPLEMENTATION + +#define OPTPARSE_MSG_INVALID "invalid option" +#define OPTPARSE_MSG_MISSING "option requires an argument" +#define OPTPARSE_MSG_TOOMANY "option takes no arguments" + +static int optparse_error(struct optparse *options, const char *msg, + const char *data) { + unsigned p = 0; + const char *sep = " -- '"; + while (*msg) options->errmsg[p++] = *msg++; + while (*sep) options->errmsg[p++] = *sep++; + while (p < sizeof(options->errmsg) - 2 && *data) + options->errmsg[p++] = *data++; + options->errmsg[p++] = '\''; + options->errmsg[p++] = '\0'; + return '?'; +} + +OPTPARSE_API +void optparse_init(struct optparse *options, char **argv) { + options->argv = argv; + options->permute = 1; + options->optind = 1; + options->subopt = 0; + options->optarg = 0; + options->errmsg[0] = '\0'; +} + +static int optparse_is_dashdash(const char *arg) { + return arg != 0 && arg[0] == '-' && arg[1] == '-' && arg[2] == '\0'; +} + +static int optparse_is_shortopt(const char *arg) { + return arg != 0 && arg[0] == '-' && arg[1] != '-' && arg[1] != '\0'; +} + +static int optparse_is_longopt(const char *arg) { + return arg != 0 && arg[0] == '-' && arg[1] == '-' && arg[2] != '\0'; +} + +static void optparse_permute(struct optparse *options, int index) { + char *nonoption = options->argv[index]; + int i; + for (i = index; i < options->optind - 1; i++) + options->argv[i] = options->argv[i + 1]; + options->argv[options->optind - 1] = nonoption; +} + +static int optparse_argtype(const char *optstring, char c) { + int count = OPTPARSE_NONE; + if (c == ':') return -1; + for (; *optstring && c != *optstring; optstring++) + ; + if (!*optstring) return -1; + if (optstring[1] == ':') count += optstring[2] == ':' ? 2 : 1; + return count; +} + +OPTPARSE_API +int optparse(struct optparse *options, const char *optstring) { + int type; + char *next; + char *option = options->argv[options->optind]; + options->errmsg[0] = '\0'; + options->optopt = 0; + options->optarg = 0; + if (option == 0) { + return -1; + } else if (optparse_is_dashdash(option)) { + options->optind++; /* consume "--" */ + return -1; + } else if (!optparse_is_shortopt(option)) { + if (options->permute) { + int index = options->optind++; + int r = optparse(options, optstring); + optparse_permute(options, index); + options->optind--; + return r; + } else { + return -1; + } + } + option += options->subopt + 1; + options->optopt = option[0]; + type = optparse_argtype(optstring, option[0]); + next = options->argv[options->optind + 1]; + switch (type) { + case -1: { + char str[2] = {0, 0}; + str[0] = option[0]; + options->optind++; + return optparse_error(options, OPTPARSE_MSG_INVALID, str); + } + case OPTPARSE_NONE: + if (option[1]) { + options->subopt++; + } else { + options->subopt = 0; + options->optind++; + } + return option[0]; + case OPTPARSE_REQUIRED: + options->subopt = 0; + options->optind++; + if (option[1]) { + options->optarg = option + 1; + } else if (next != 0) { + options->optarg = next; + options->optind++; + } else { + char str[2] = {0, 0}; + str[0] = option[0]; + options->optarg = 0; + return optparse_error(options, OPTPARSE_MSG_MISSING, str); + } + return option[0]; + case OPTPARSE_OPTIONAL: + options->subopt = 0; + options->optind++; + if (option[1]) + options->optarg = option + 1; + else + options->optarg = 0; + return option[0]; + } + return 0; +} + +OPTPARSE_API +char *optparse_arg(struct optparse *options) { + char *option = options->argv[options->optind]; + options->subopt = 0; + if (option != 0) options->optind++; + return option; +} + +static int optparse_longopts_end(const struct optparse_long *longopts, int i) { + return !longopts[i].longname && !longopts[i].shortname; +} + +static void optparse_from_long(const struct optparse_long *longopts, + char *optstring) { + char *p = optstring; + int i; + for (i = 0; !optparse_longopts_end(longopts, i); i++) { + if (longopts[i].shortname) { + int a; + *p++ = longopts[i].shortname; + for (a = 0; a < (int)longopts[i].argtype; a++) *p++ = ':'; + } + } + *p = '\0'; +} + +/* Unlike strcmp(), handles options containing "=". */ +static int optparse_longopts_match(const char *longname, const char *option) { + const char *a = option, *n = longname; + if (longname == 0) return 0; + for (; *a && *n && *a != '='; a++, n++) + if (*a != *n) return 0; + return *n == '\0' && (*a == '\0' || *a == '='); +} + +/* Return the part after "=", or NULL. */ +static char *optparse_longopts_arg(char *option) { + for (; *option && *option != '='; option++) + ; + if (*option == '=') + return option + 1; + else + return 0; +} + +static int optparse_long_fallback(struct optparse *options, + const struct optparse_long *longopts, + int *longindex) { + int result; + char optstring[96 * 3 + 1]; /* 96 ASCII printable characters */ + optparse_from_long(longopts, optstring); + result = optparse(options, optstring); + if (longindex != 0) { + *longindex = -1; + if (result != -1) { + int i; + for (i = 0; !optparse_longopts_end(longopts, i); i++) + if (longopts[i].shortname == options->optopt) *longindex = i; + } + } + return result; +} + +OPTPARSE_API +int optparse_long(struct optparse *options, + const struct optparse_long *longopts, int *longindex) { + int i; + char *option = options->argv[options->optind]; + if (option == 0) { + return -1; + } else if (optparse_is_dashdash(option)) { + options->optind++; /* consume "--" */ + return -1; + } else if (optparse_is_shortopt(option)) { + return optparse_long_fallback(options, longopts, longindex); + } else if (!optparse_is_longopt(option)) { + if (options->permute) { + int index = options->optind++; + int r = optparse_long(options, longopts, longindex); + optparse_permute(options, index); + options->optind--; + return r; + } else { + return -1; + } + } + + /* Parse as long option. */ + options->errmsg[0] = '\0'; + options->optopt = 0; + options->optarg = 0; + option += 2; /* skip "--" */ + options->optind++; + for (i = 0; !optparse_longopts_end(longopts, i); i++) { + const char *name = longopts[i].longname; + if (optparse_longopts_match(name, option)) { + char *arg; + if (longindex) *longindex = i; + options->optopt = longopts[i].shortname; + arg = optparse_longopts_arg(option); + if (longopts[i].argtype == OPTPARSE_NONE && arg != 0) { + return optparse_error(options, OPTPARSE_MSG_TOOMANY, name); + } + if (arg != 0) { + options->optarg = arg; + } else if (longopts[i].argtype == OPTPARSE_REQUIRED) { + options->optarg = options->argv[options->optind]; + if (options->optarg == 0) + return optparse_error(options, OPTPARSE_MSG_MISSING, name); + else + options->optind++; + } + return options->optopt; + } + } + return optparse_error(options, OPTPARSE_MSG_INVALID, option); +} + +#endif /* OPTPARSE_IMPLEMENTATION */ +#endif /* OPTPARSE_H */ diff --git a/src/os.h b/src/os.h new file mode 100644 index 0000000..261f664 --- /dev/null +++ b/src/os.h @@ -0,0 +1,35 @@ +/* Generate using fir1(47,1/2) in Octave */ + +static const float fdmdv_os_filter[] = { + -0.0008215855034550382, -0.0007833023901802921, 0.001075563790768233, + 0.001199092367787555, -0.001765309502928316, -0.002055372115328064, + 0.002986877604154257, 0.003462567920638414, -0.004856570111126334, + -0.005563143845031497, 0.007533613299748122, 0.008563932468880897, + -0.01126857129039911, -0.01280782411693687, 0.01651443896361847, + 0.01894875110322284, -0.02421604439474981, -0.02845107338464062, + 0.03672973563400258, 0.04542046150312214, -0.06189165826716491, + -0.08721876380763803, 0.1496157094199961, 0.4497962274137046, + 0.4497962274137046, 0.1496157094199961, -0.08721876380763803, + -0.0618916582671649, 0.04542046150312216, 0.03672973563400257, + -0.02845107338464062, -0.02421604439474984, 0.01894875110322284, + 0.01651443896361848, -0.01280782411693687, -0.0112685712903991, + 0.008563932468880899, 0.007533613299748123, -0.005563143845031501, + -0.004856570111126346, 0.003462567920638419, 0.002986877604154259, + -0.002055372115328063, -0.001765309502928318, 0.001199092367787557, + 0.001075563790768233, -0.0007833023901802925, -0.0008215855034550383}; + +/* Generate using fir1(47,1/6) in Octave */ + +static const float fdmdv_os_filter48[] = { + -3.55606818e-04, -8.98615286e-04, -1.40119781e-03, -1.71713852e-03, + -1.56471179e-03, -6.28128960e-04, 1.24522223e-03, 3.83138676e-03, + 6.41309478e-03, 7.85893186e-03, 6.93514929e-03, 2.79361991e-03, + -4.51051400e-03, -1.36671853e-02, -2.21034939e-02, -2.64084653e-02, + -2.31425052e-02, -9.84218694e-03, 1.40648474e-02, 4.67316298e-02, + 8.39615986e-02, 1.19925275e-01, 1.48381174e-01, 1.64097819e-01, + 1.64097819e-01, 1.48381174e-01, 1.19925275e-01, 8.39615986e-02, + 4.67316298e-02, 1.40648474e-02, -9.84218694e-03, -2.31425052e-02, + -2.64084653e-02, -2.21034939e-02, -1.36671853e-02, -4.51051400e-03, + 2.79361991e-03, 6.93514929e-03, 7.85893186e-03, 6.41309478e-03, + 3.83138676e-03, 1.24522223e-03, -6.28128960e-04, -1.56471179e-03, + -1.71713852e-03, -1.40119781e-03, -8.98615286e-04, -3.55606818e-04}; diff --git a/src/pack.c b/src/pack.c new file mode 100644 index 0000000..3181223 --- /dev/null +++ b/src/pack.c @@ -0,0 +1,130 @@ +/* + Copyright (C) 2010 Perens LLC <[email protected]> + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include <stdio.h> + +#include "defines.h" +#include "quantise.h" + +/* Compile-time constants */ +/* Size of unsigned char in bits. Assumes 8 bits-per-char. */ +static const unsigned int WordSize = 8; + +/* Mask to pick the bit component out of bitIndex. */ +static const unsigned int IndexMask = 0x7; + +/* Used to pick the word component out of bitIndex. */ +static const unsigned int ShiftRight = 3; + +/** Pack a bit field into a bit string, encoding the field in Gray code. + * + * The output is an array of unsigned char data. The fields are efficiently + * packed into the bit string. The Gray coding is a naive attempt to reduce + * the effect of single-bit errors, we expect to do a better job as the + * codec develops. + * + * This code would be simpler if it just set one bit at a time in the string, + * but would hit the same cache line more often. I'm not sure the complexity + * gains us anything here. + * + * Although field is currently of int type rather than unsigned for + * compatibility with the rest of the code, indices are always expected to + * be >= 0. + */ +void pack(unsigned char* bitArray, /* The output bit string. */ + unsigned int* bitIndex, /* Index into the string in BITS, not bytes.*/ + int field, /* The bit field to be packed. */ + unsigned int fieldWidth /* Width of the field in BITS, not bytes. */ +) { + pack_natural_or_gray(bitArray, bitIndex, field, fieldWidth, 1); +} + +void pack_natural_or_gray( + unsigned char* bitArray, /* The output bit string. */ + unsigned int* bitIndex, /* Index into the string in BITS, not bytes.*/ + int field, /* The bit field to be packed. */ + unsigned int fieldWidth, /* Width of the field in BITS, not bytes. */ + unsigned int gray /* non-zero for gray coding */ +) { + if (gray) { + /* Convert the field to Gray code */ + field = (field >> 1) ^ field; + } + + do { + unsigned int bI = *bitIndex; + unsigned int bitsLeft = WordSize - (bI & IndexMask); + unsigned int sliceWidth = bitsLeft < fieldWidth ? bitsLeft : fieldWidth; + unsigned int wordIndex = bI >> ShiftRight; + + bitArray[wordIndex] |= ((unsigned char)((field >> (fieldWidth - sliceWidth)) + << (bitsLeft - sliceWidth))); + + *bitIndex = bI + sliceWidth; + fieldWidth -= sliceWidth; + } while (fieldWidth != 0); +} + +/** Unpack a field from a bit string, converting from Gray code to binary. + * + */ +int unpack( + const unsigned char* bitArray, /* The input bit string. */ + unsigned int* bitIndex, /* Index into the string in BITS, not bytes.*/ + unsigned int fieldWidth /* Width of the field in BITS, not bytes. */ +) { + return unpack_natural_or_gray(bitArray, bitIndex, fieldWidth, 1); +} + +/** Unpack a field from a bit string, to binary, optionally using + * natural or Gray code. + * + */ +int unpack_natural_or_gray( + const unsigned char* bitArray, /* The input bit string. */ + unsigned int* bitIndex, /* Index into the string in BITS, not bytes.*/ + unsigned int fieldWidth, /* Width of the field in BITS, not bytes. */ + unsigned int gray /* non-zero for Gray coding */ +) { + unsigned int field = 0; + unsigned int t; + + do { + unsigned int bI = *bitIndex; + unsigned int bitsLeft = WordSize - (bI & IndexMask); + unsigned int sliceWidth = bitsLeft < fieldWidth ? bitsLeft : fieldWidth; + + field |= (((bitArray[bI >> ShiftRight] >> (bitsLeft - sliceWidth)) & + ((1 << sliceWidth) - 1)) + << (fieldWidth - sliceWidth)); + + *bitIndex = bI + sliceWidth; + fieldWidth -= sliceWidth; + } while (fieldWidth != 0); + + if (gray) { + /* Convert from Gray code to binary. Works for maximum 8-bit fields. */ + t = field ^ (field >> 8); + t ^= (t >> 4); + t ^= (t >> 2); + t ^= (t >> 1); + } else { + t = field; + } + + return t; +} diff --git a/src/phase.c b/src/phase.c new file mode 100644 index 0000000..dec8793 --- /dev/null +++ b/src/phase.c @@ -0,0 +1,275 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phase.c + AUTHOR......: David Rowe + DATE CREATED: 1/2/09 + + Functions for modelling and synthesising phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see <http://www.gnu.org/licenses/>. +*/ + +#include "phase.h" + +#include <assert.h> +#include <ctype.h> +#include <math.h> +#include <stdlib.h> +#include <string.h> + +#include "comp.h" +#include "comp_prim.h" +#include "defines.h" +#include "kiss_fft.h" +#include "sine.h" + +/*---------------------------------------------------------------------------*\ + + sample_phase() + + Samples phase at centre of each harmonic from and array of FFT_ENC + DFT samples. + +\*---------------------------------------------------------------------------*/ + +void sample_phase(MODEL *model, COMP H[], + COMP A[] /* LPC analysis filter in freq domain */ +) { + int m, b; + float r; + + r = TWO_PI / (FFT_ENC); + + /* Sample phase at harmonics */ + + for (m = 1; m <= model->L; m++) { + b = (int)(m * model->Wo / r + 0.5); + H[m] = + cconj(A[b]); /* synth filter 1/A is opposite phase to analysis filter */ + } +} + +/*---------------------------------------------------------------------------*\ + + phase_synth_zero_order() + + Synthesises phases based on SNR and a rule based approach. No phase + parameters are required apart from the SNR (which can be reduced to a + 1 bit V/UV decision per frame). + + The phase of each harmonic is modelled as the phase of a synthesis + filter excited by an impulse. In many Codec 2 modes the synthesis + filter is a LPC filter. Unlike the first order model the position + of the impulse is not transmitted, so we create an excitation pulse + train using a rule based approach. + + Consider a pulse train with a pulse starting time n=0, with pulses + repeated at a rate of Wo, the fundamental frequency. A pulse train + in the time domain is equivalent to harmonics in the frequency + domain. We can make an excitation pulse train using a sum of + sinsusoids: + + for(m=1; m<=L; m++) + ex[n] = cos(m*Wo*n) + + Note: the Octave script ../octave/phase.m is an example of this if + you would like to try making a pulse train. + + The phase of each excitation harmonic is: + + arg(E[m]) = mWo + + where E[m] are the complex excitation (freq domain) samples, + arg(x), just returns the phase of a complex sample x. + + As we don't transmit the pulse position for this model, we need to + synthesise it. Now the excitation pulses occur at a rate of Wo. + This means the phase of the first harmonic advances by N_SAMP samples + over a synthesis frame of N_SAMP samples. For example if Wo is pi/20 + (200 Hz), then over a 10ms frame (N_SAMP=80 samples), the phase of the + first harmonic would advance (pi/20)*80 = 4*pi or two complete + cycles. + + We generate the excitation phase of the fundamental (first + harmonic): + + arg[E[1]] = Wo*N_SAMP; + + We then relate the phase of the m-th excitation harmonic to the + phase of the fundamental as: + + arg(E[m]) = m*arg(E[1]) + + This E[m] then gets passed through the LPC synthesis filter to + determine the final harmonic phase. + + Comparing to speech synthesised using original phases: + + - Through headphones speech synthesised with this model is not as + good. Through a loudspeaker it is very close to original phases. + + - If there are voicing errors, the speech can sound clicky or + staticy. If V speech is mistakenly declared UV, this model tends to + synthesise impulses or clicks, as there is usually very little shift or + dispersion through the LPC synthesis filter. + + - When combined with LPC amplitude modelling there is an additional + drop in quality. I am not sure why, theory is interformant energy + is raised making any phase errors more obvious. + + NOTES: + + 1/ This synthesis model is effectively the same as a simple LPC-10 + vocoders, and yet sounds much better. Why? Conventional wisdom + (AMBE, MELP) says mixed voicing is required for high quality + speech. + + 2/ I am pretty sure the Lincoln Lab sinusoidal coding guys (like xMBE + also from MIT) first described this zero phase model, I need to look + up the paper. + + 3/ Note that this approach could cause some discontinuities in + the phase at the edge of synthesis frames, as no attempt is made + to make sure that the phase tracks are continuous (the excitation + phases are continuous, but not the final phases after filtering + by the LPC spectra). Technically this is a bad thing. However + this may actually be a good thing, disturbing the phase tracks a + bit. More research needed, e.g. test a synthesis model that adds + a small delta-W to make phase tracks line up for voiced + harmonics. + +\*---------------------------------------------------------------------------*/ + +void phase_synth_zero_order( + int n_samp, MODEL *model, + float *ex_phase, /* excitation phase of fundamental */ + COMP H[] /* L synthesis filter freq domain samples */ + +) { + int m; + float new_phi; + COMP Ex[MAX_AMP + 1]; /* excitation samples */ + COMP A_[MAX_AMP + 1]; /* synthesised harmonic samples */ + + /* + Update excitation fundamental phase track, this sets the position + of each pitch pulse during voiced speech. After much experiment + I found that using just this frame's Wo improved quality for UV + sounds compared to interpolating two frames Wo like this: + + ex_phase[0] += (*prev_Wo+model->Wo)*N_SAMP/2; + */ + + ex_phase[0] += (model->Wo) * n_samp; + ex_phase[0] -= TWO_PI * floorf(ex_phase[0] / TWO_PI + 0.5); + + for (m = 1; m <= model->L; m++) { + /* generate excitation */ + + if (model->voiced) { + Ex[m].real = cosf(ex_phase[0] * m); + Ex[m].imag = sinf(ex_phase[0] * m); + } else { + /* When a few samples were tested I found that LPC filter + phase is not needed in the unvoiced case, but no harm in + keeping it. + */ + float phi = TWO_PI * (float)codec2_rand() / CODEC2_RAND_MAX; + Ex[m].real = cosf(phi); + Ex[m].imag = sinf(phi); + } + + /* filter using LPC filter */ + + A_[m].real = H[m].real * Ex[m].real - H[m].imag * Ex[m].imag; + A_[m].imag = H[m].imag * Ex[m].real + H[m].real * Ex[m].imag; + + /* modify sinusoidal phase */ + + new_phi = atan2f(A_[m].imag, A_[m].real + 1E-12); + model->phi[m] = new_phi; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: mag_to_phase + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Algorithm for http://www.dsprelated.com/showcode/20.php ported to C. See + also Octave function mag_to_phase.m + + Given a magnitude spectrum in dB, returns a minimum-phase phase + spectra. + +\*---------------------------------------------------------------------------*/ + +void mag_to_phase( + float phase[], /* Nfft/2+1 output phase samples in radians */ + float Gdbfk[], /* Nfft/2+1 positive freq amplitudes samples in dB */ + int Nfft, codec2_fft_cfg fft_fwd_cfg, codec2_fft_cfg fft_inv_cfg) { + COMP Sdb[Nfft], c[Nfft], cf[Nfft], Cf[Nfft]; + int Ns = Nfft / 2 + 1; + int i; + + /* install negative frequency components, 1/Nfft takes into + account kiss fft lack of scaling on ifft */ + + Sdb[0].real = Gdbfk[0]; + Sdb[0].imag = 0.0; + for (i = 1; i < Ns; i++) { + Sdb[i].real = Sdb[Nfft - i].real = Gdbfk[i]; + Sdb[i].imag = Sdb[Nfft - i].imag = 0.0; + } + + /* compute real cepstrum from log magnitude spectrum */ + + codec2_fft(fft_inv_cfg, Sdb, c); + for (i = 0; i < Nfft; i++) { + c[i].real /= (float)Nfft; + c[i].imag /= (float)Nfft; + } + + /* Fold cepstrum to reflect non-min-phase zeros inside unit circle */ + + cf[0] = c[0]; + for (i = 1; i < Ns - 1; i++) { + cf[i] = cadd(c[i], c[Nfft - i]); + } + cf[Ns - 1] = c[Ns - 1]; + for (i = Ns; i < Nfft; i++) { + cf[i].real = 0.0; + cf[i].imag = 0.0; + } + + /* Cf = dB_magnitude + j * minimum_phase */ + + codec2_fft(fft_fwd_cfg, cf, Cf); + + /* The maths says we are meant to be using log(x), not 20*log10(x), + so we need to scale the phase to account for this: + log(x) = 20*log10(x)/scale */ + + float scale = (20.0 / logf(10.0)); + + for (i = 0; i < Ns; i++) { + phase[i] = Cf[i].imag / scale; + } +} diff --git a/src/phase.h b/src/phase.h new file mode 100644 index 0000000..b7f0413 --- /dev/null +++ b/src/phase.h @@ -0,0 +1,41 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phase.h + AUTHOR......: David Rowe + DATE CREATED: 1/2/09 + + Functions for modelling phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __PHASE__ +#define __PHASE__ + +#include "codec2_fft.h" +#include "comp.h" + +void sample_phase(MODEL *model, COMP filter_phase[], COMP A[]); +void phase_synth_zero_order(int n_samp, MODEL *model, float *ex_phase, + COMP filter_phase[]); + +void mag_to_phase(float phase[], float Gdbfk[], int Nfft, + codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg); + +#endif diff --git a/src/phi0.c b/src/phi0.c new file mode 100644 index 0000000..51582a0 --- /dev/null +++ b/src/phi0.c @@ -0,0 +1,290 @@ + +// phi0.c +// +// An approximation of the function +// +// This file is generated by the gen_phi0 scripts +// Any changes should be made to that file, not this one + +#include <stdint.h> + +#define SI16(f) ((int32_t)(f * (1 << 16))) + +float phi0(float xf) { + int32_t x = SI16(xf); + + if (x >= SI16(10.0f)) + return (0.0f); + else { + if (x >= SI16(5.0f)) { + int i = 19 - (x >> 15); + switch (i) { + case 0: + return (0.000116589f); // (9.5) + case 1: + return (0.000192223f); // (9.0) + case 2: + return (0.000316923f); // (8.5) + case 3: + return (0.000522517f); // (8.0) + case 4: + return (0.000861485f); // (7.5) + case 5: + return (0.001420349f); // (7.0) + case 6: + return (0.002341760f); // (6.5) + case 7: + return (0.003860913f); // (6.0) + case 8: + return (0.006365583f); // (5.5) + case 9: + return (0.010495133f); // (5.0) + } + } else { + if (x >= SI16(1.0f)) { + int i = 79 - (x >> 12); + switch (i) { + case 0: + return (0.013903889f); // (4.9375) + case 1: + return (0.014800644f); // (4.8750) + case 2: + return (0.015755242f); // (4.8125) + case 3: + return (0.016771414f); // (4.7500) + case 4: + return (0.017853133f); // (4.6875) + case 5: + return (0.019004629f); // (4.6250) + case 6: + return (0.020230403f); // (4.5625) + case 7: + return (0.021535250f); // (4.5000) + case 8: + return (0.022924272f); // (4.4375) + case 9: + return (0.024402903f); // (4.3750) + case 10: + return (0.025976926f); // (4.3125) + case 11: + return (0.027652501f); // (4.2500) + case 12: + return (0.029436184f); // (4.1875) + case 13: + return (0.031334956f); // (4.1250) + case 14: + return (0.033356250f); // (4.0625) + case 15: + return (0.035507982f); // (4.0000) + case 16: + return (0.037798579f); // (3.9375) + case 17: + return (0.040237016f); // (3.8750) + case 18: + return (0.042832850f); // (3.8125) + case 19: + return (0.045596260f); // (3.7500) + case 20: + return (0.048538086f); // (3.6875) + case 21: + return (0.051669874f); // (3.6250) + case 22: + return (0.055003924f); // (3.5625) + case 23: + return (0.058553339f); // (3.5000) + case 24: + return (0.062332076f); // (3.4375) + case 25: + return (0.066355011f); // (3.3750) + case 26: + return (0.070637993f); // (3.3125) + case 27: + return (0.075197917f); // (3.2500) + case 28: + return (0.080052790f); // (3.1875) + case 29: + return (0.085221814f); // (3.1250) + case 30: + return (0.090725463f); // (3.0625) + case 31: + return (0.096585578f); // (3.0000) + case 32: + return (0.102825462f); // (2.9375) + case 33: + return (0.109469985f); // (2.8750) + case 34: + return (0.116545700f); // (2.8125) + case 35: + return (0.124080967f); // (2.7500) + case 36: + return (0.132106091f); // (2.6875) + case 37: + return (0.140653466f); // (2.6250) + case 38: + return (0.149757747f); // (2.5625) + case 39: + return (0.159456024f); // (2.5000) + case 40: + return (0.169788027f); // (2.4375) + case 41: + return (0.180796343f); // (2.3750) + case 42: + return (0.192526667f); // (2.3125) + case 43: + return (0.205028078f); // (2.2500) + case 44: + return (0.218353351f); // (2.1875) + case 45: + return (0.232559308f); // (2.1250) + case 46: + return (0.247707218f); // (2.0625) + case 47: + return (0.263863255f); // (2.0000) + case 48: + return (0.281099022f); // (1.9375) + case 49: + return (0.299492155f); // (1.8750) + case 50: + return (0.319127030f); // (1.8125) + case 51: + return (0.340095582f); // (1.7500) + case 52: + return (0.362498271f); // (1.6875) + case 53: + return (0.386445235f); // (1.6250) + case 54: + return (0.412057648f); // (1.5625) + case 55: + return (0.439469363f); // (1.5000) + case 56: + return (0.468828902f); // (1.4375) + case 57: + return (0.500301872f); // (1.3750) + case 58: + return (0.534073947f); // (1.3125) + case 59: + return (0.570354566f); // (1.2500) + case 60: + return (0.609381573f); // (1.1875) + case 61: + return (0.651427083f); // (1.1250) + case 62: + return (0.696805010f); // (1.0625) + case 63: + return (0.745880827f); // (1.0000) + } + } else { + if (x > SI16(0.007812f)) { + if (x > SI16(0.088388f)) { + if (x > SI16(0.250000f)) { + if (x > SI16(0.500000f)) { + if (x > SI16(0.707107f)) { + return (0.922449644f); + } else { + return (1.241248638f); + } + } else { + if (x > SI16(0.353553f)) { + return (1.573515241f); + } else { + return (1.912825912f); + } + } + } else { + if (x > SI16(0.125000f)) { + if (x > SI16(0.176777f)) { + return (2.255740095f); + } else { + return (2.600476919f); + } + } else { + return (2.946130351f); + } + } + } else { + if (x > SI16(0.022097f)) { + if (x > SI16(0.044194f)) { + if (x > SI16(0.062500f)) { + return (3.292243417f); + } else { + return (3.638586634f); + } + } else { + if (x > SI16(0.031250f)) { + return (3.985045009f); + } else { + return (4.331560985f); + } + } + } else { + if (x > SI16(0.011049f)) { + if (x > SI16(0.015625f)) { + return (4.678105767f); + } else { + return (5.024664952f); + } + } else { + return (5.371231340f); + } + } + } + } else { + if (x > SI16(0.000691f)) { + if (x > SI16(0.001953f)) { + if (x > SI16(0.003906f)) { + if (x > SI16(0.005524f)) { + return (5.717801329f); + } else { + return (6.064373119f); + } + } else { + if (x > SI16(0.002762f)) { + return (6.410945809f); + } else { + return (6.757518949f); + } + } + } else { + if (x > SI16(0.000977f)) { + if (x > SI16(0.001381f)) { + return (7.104092314f); + } else { + return (7.450665792f); + } + } else { + return (7.797239326f); + } + } + } else { + if (x > SI16(0.000173f)) { + if (x > SI16(0.000345f)) { + if (x > SI16(0.000488f)) { + return (8.143812888f); + } else { + return (8.490386464f); + } + } else { + if (x > SI16(0.000244f)) { + return (8.836960047f); + } else { + return (9.183533634f); + } + } + } else { + if (x > SI16(0.000086f)) { + if (x > SI16(0.000122f)) { + return (9.530107222f); + } else { + return (9.876680812f); + } + } else { + return (10.000000000f); + } + } + } + } + } + } + } + return (10.0f); +} diff --git a/src/phi0.h b/src/phi0.h new file mode 100644 index 0000000..79e942d --- /dev/null +++ b/src/phi0.h @@ -0,0 +1,7 @@ +// phi0.h +#ifndef PHI0_H +#define PHI0_H + +extern float phi0(float xf); + +#endif diff --git a/src/postfilter.c b/src/postfilter.c new file mode 100644 index 0000000..d45dce1 --- /dev/null +++ b/src/postfilter.c @@ -0,0 +1,134 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: postfilter.c + AUTHOR......: David Rowe + DATE CREATED: 13/09/09 + + Postfilter to improve sound quality for speech with high levels of + background noise. Unlike mixed-excitation models requires no bits + to be transmitted to handle background noise. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "postfilter.h" + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> + +#include "comp.h" +#include "defines.h" +#include "sine.h" + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define BG_THRESH 40.0 /* only consider low levels signals for bg_est */ +#define BG_BETA 0.1 /* averaging filter constant */ +#define BG_MARGIN \ + 6.0 /* harmonics this far above BG noise are \ + randomised. Helped make bg noise less \ + spikey (impulsive) for mmt1, but speech was \ + perhaps a little rougher. \ + */ + +/*---------------------------------------------------------------------------*\ + + postfilter() + + The post filter is designed to help with speech corrupted by + background noise. The zero phase model tends to make speech with + background noise sound "clicky". With high levels of background + noise the low level inter-formant parts of the spectrum will contain + noise rather than speech harmonics, so modelling them as voiced + (i.e. a continuous, non-random phase track) is inaccurate. + + Some codecs (like MBE) have a mixed voicing model that breaks the + spectrum into voiced and unvoiced regions. Several bits/frame + (5-12) are required to transmit the frequency selective voicing + information. Mixed excitation also requires accurate voicing + estimation (parameter estimators always break occasionally under + exceptional conditions). + + In our case we use a post filter approach which requires no + additional bits to be transmitted. The decoder measures the average + level of the background noise during unvoiced frames. If a harmonic + is less than this level it is made unvoiced by randomising it's + phases. + + This idea is rather experimental. Some potential problems that may + happen: + + 1/ If someone says "aaaaaaaahhhhhhhhh" will background estimator track + up to speech level? This would be a bad thing. + + 2/ If background noise suddenly disappears from the source speech does + estimate drop quickly? What is noise suddenly re-appears? + + 3/ Background noise with a non-flat sepctrum. Current algorithm just + comsiders scpetrum as a whole, but this could be broken up into + bands, each with their own estimator. + + 4/ Males and females with the same level of background noise. Check + performance the same. Changing Wo affects width of each band, may + affect bg energy estimates. + + 5/ Not sure what happens during long periods of voiced speech + e.g. "sshhhhhhh" + +\*---------------------------------------------------------------------------*/ + +void postfilter(MODEL *model, float *bg_est) { + int m, uv; + float e, thresh; + + /* determine average energy across spectrum */ + + e = 1E-12; + for (m = 1; m <= model->L; m++) e += model->A[m] * model->A[m]; + + assert(e > 0.0); + e = 10.0 * log10f(e / model->L); + + /* If beneath threshold, update bg estimate. The idea + of the threshold is to prevent updating during high level + speech. */ + + if ((e < BG_THRESH) && !model->voiced) + *bg_est = *bg_est * (1.0 - BG_BETA) + e * BG_BETA; + + /* now mess with phases during voiced frames to make any harmonics + less then our background estimate unvoiced. + */ + + uv = 0; + thresh = POW10F((*bg_est + BG_MARGIN) / 20.0); + if (model->voiced) + for (m = 1; m <= model->L; m++) + if (model->A[m] < thresh) { + model->phi[m] = (TWO_PI / CODEC2_RAND_MAX) * (float)codec2_rand(); + uv++; + } + +} diff --git a/src/postfilter.h b/src/postfilter.h new file mode 100644 index 0000000..ecf7f39 --- /dev/null +++ b/src/postfilter.h @@ -0,0 +1,35 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: postfilter.h + AUTHOR......: David Rowe + DATE CREATED: 13/09/09 + + Postfilter header file. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __POSTFILTER__ +#define __POSTFILTER__ + +#include "defines.h" + +void postfilter(MODEL *model, float *bg_est); + +#endif diff --git a/src/quantise.c b/src/quantise.c new file mode 100644 index 0000000..b27afd0 --- /dev/null +++ b/src/quantise.c @@ -0,0 +1,1118 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: quantise.c + AUTHOR......: David Rowe + DATE CREATED: 31/5/92 + + Quantisation functions for the sinusoidal coder. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + +*/ + +#include "quantise.h" + +#include <assert.h> +#include <ctype.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "codec2_fft.h" +#include "defines.h" +#include "lpc.h" +#include "lsp.h" +#include "mbest.h" +#include "phase.h" + +#undef PROFILE +#include "machdep.h" + +#define LSP_DELTA1 0.01 /* grid spacing for LSP root searches */ + +/*---------------------------------------------------------------------------*\ + + FUNCTION HEADERS + +\*---------------------------------------------------------------------------*/ + +float speech_to_uq_lsps(float lsp[], float ak[], float Sn[], float w[], + int m_pitch, int order); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +int lsp_bits(int i) { return lsp_cb[i].log2m; } + +int lspd_bits(int i) { return lsp_cbd[i].log2m; } + +int lsp_pred_vq_bits(int i) { return lsp_cbjmv[i].log2m; } + +/*---------------------------------------------------------------------------*\ + + quantise + + Quantises vec by choosing the nearest vector in codebook cb, and + returns the vector index. The squared error of the quantised vector + is added to se. + +\*---------------------------------------------------------------------------*/ + +long quantise(const float *cb, float vec[], float w[], int k, int m, float *se) +/* float cb[][K]; current VQ codebook */ +/* float vec[]; vector to quantise */ +/* float w[]; weighting vector */ +/* int k; dimension of vectors */ +/* int m; size of codebook */ +/* float *se; accumulated squared error */ +{ + float e; /* current error */ + long besti; /* best index so far */ + float beste; /* best error so far */ + long j; + int i; + float diff; + + besti = 0; + beste = 1E32; + for (j = 0; j < m; j++) { + e = 0.0; + for (i = 0; i < k; i++) { + diff = cb[j * k + i] - vec[i]; + e += (diff * w[i] * diff * w[i]); + } + if (e < beste) { + beste = e; + besti = j; + } + } + + *se += beste; + + return (besti); +} + +/*---------------------------------------------------------------------------*\ + + encode_lspds_scalar() + + Scalar/VQ LSP difference-in-frequency quantiser. + +\*---------------------------------------------------------------------------*/ + +void encode_lspds_scalar(int indexes[], float lsp[], int order) { + int i, k, m; + float lsp_hz[order]; + float lsp__hz[order]; + float dlsp[order]; + float dlsp_[order]; + float wt[order]; + const float *cb; + float se; + + for (i = 0; i < order; i++) { + wt[i] = 1.0; + } + + /* convert from radians to Hz so we can use human readable + frequencies */ + + for (i = 0; i < order; i++) lsp_hz[i] = (4000.0 / PI) * lsp[i]; + + wt[0] = 1.0; + for (i = 0; i < order; i++) { + /* find difference from previous quantised lsp */ + + if (i) + dlsp[i] = lsp_hz[i] - lsp__hz[i - 1]; + else + dlsp[0] = lsp_hz[0]; + + k = lsp_cbd[i].k; + m = lsp_cbd[i].m; + cb = lsp_cbd[i].cb; + indexes[i] = quantise(cb, &dlsp[i], wt, k, m, &se); + dlsp_[i] = cb[indexes[i] * k]; + + if (i) + lsp__hz[i] = lsp__hz[i - 1] + dlsp_[i]; + else + lsp__hz[0] = dlsp_[0]; + } +} + +void decode_lspds_scalar(float lsp_[], int indexes[], int order) { + int i, k; + float lsp__hz[order]; + float dlsp_[order]; + const float *cb; + + for (i = 0; i < order; i++) { + k = lsp_cbd[i].k; + cb = lsp_cbd[i].cb; + dlsp_[i] = cb[indexes[i] * k]; + + if (i) + lsp__hz[i] = lsp__hz[i - 1] + dlsp_[i]; + else + lsp__hz[0] = dlsp_[0]; + + lsp_[i] = (PI / 4000.0) * lsp__hz[i]; + } +} + +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX_ENTRIES 16384 + +void compute_weights(const float *x, float *w, int ndim) { + int i; + w[0] = MIN(x[0], x[1] - x[0]); + for (i = 1; i < ndim - 1; i++) w[i] = MIN(x[i] - x[i - 1], x[i + 1] - x[i]); + w[ndim - 1] = MIN(x[ndim - 1] - x[ndim - 2], PI - x[ndim - 1]); + + for (i = 0; i < ndim; i++) w[i] = 1. / (.01 + w[i]); +} + +int find_nearest(const float *codebook, int nb_entries, float *x, int ndim) { + int i, j; + float min_dist = 1e15; + int nearest = 0; + + for (i = 0; i < nb_entries; i++) { + float dist = 0; + for (j = 0; j < ndim; j++) + dist += (x[j] - codebook[i * ndim + j]) * (x[j] - codebook[i * ndim + j]); + if (dist < min_dist) { + min_dist = dist; + nearest = i; + } + } + return nearest; +} + +int find_nearest_weighted(const float *codebook, int nb_entries, float *x, + const float *w, int ndim) { + int i, j; + float min_dist = 1e15; + int nearest = 0; + + for (i = 0; i < nb_entries; i++) { + float dist = 0; + for (j = 0; j < ndim; j++) + dist += w[j] * (x[j] - codebook[i * ndim + j]) * + (x[j] - codebook[i * ndim + j]); + if (dist < min_dist) { + min_dist = dist; + nearest = i; + } + } + return nearest; +} + +void lspjmv_quantise(float *x, float *xq, int order) { + int i, n1, n2, n3; + float err[order], err2[order], err3[order]; + float w[order], w2[order], w3[order]; + const float *codebook1 = lsp_cbjmv[0].cb; + const float *codebook2 = lsp_cbjmv[1].cb; + const float *codebook3 = lsp_cbjmv[2].cb; + + w[0] = MIN(x[0], x[1] - x[0]); + for (i = 1; i < order - 1; i++) w[i] = MIN(x[i] - x[i - 1], x[i + 1] - x[i]); + w[order - 1] = MIN(x[order - 1] - x[order - 2], PI - x[order - 1]); + + compute_weights(x, w, order); + + n1 = find_nearest(codebook1, lsp_cbjmv[0].m, x, order); + + for (i = 0; i < order; i++) { + xq[i] = codebook1[order * n1 + i]; + err[i] = x[i] - xq[i]; + } + for (i = 0; i < order / 2; i++) { + err2[i] = err[2 * i]; + err3[i] = err[2 * i + 1]; + w2[i] = w[2 * i]; + w3[i] = w[2 * i + 1]; + } + n2 = find_nearest_weighted(codebook2, lsp_cbjmv[1].m, err2, w2, order / 2); + n3 = find_nearest_weighted(codebook3, lsp_cbjmv[2].m, err3, w3, order / 2); + + for (i = 0; i < order / 2; i++) { + xq[2 * i] += codebook2[order * n2 / 2 + i]; + xq[2 * i + 1] += codebook3[order * n3 / 2 + i]; + } +} + +int check_lsp_order(float lsp[], int order) { + int i; + float tmp; + int swaps = 0; + + for (i = 1; i < order; i++) + if (lsp[i] < lsp[i - 1]) { + // fprintf(stderr, "swap %d\n",i); + swaps++; + tmp = lsp[i - 1]; + lsp[i - 1] = lsp[i] - 0.1; + lsp[i] = tmp + 0.1; + i = 1; /* start check again, as swap may have caused out of order */ + } + + return swaps; +} + +void force_min_lsp_dist(float lsp[], int order) { + int i; + + for (i = 1; i < order; i++) + if ((lsp[i] - lsp[i - 1]) < 0.01) { + lsp[i] += 0.01; + } +} + +/*---------------------------------------------------------------------------*\ + + lpc_post_filter() + + Applies a post filter to the LPC synthesis filter power spectrum + Pw, which suppresses the inter-formant energy. + + The algorithm is from p267 (Section 8.6) of "Digital Speech", + edited by A.M. Kondoz, 1994 published by Wiley and Sons. Chapter 8 + of this text is on the MBE vocoder, and this is a freq domain + adaptation of post filtering commonly used in CELP. + + I used the Octave simulation lpcpf.m to get an understanding of the + algorithm. + + Requires two more FFTs which is significantly more MIPs. However + it should be possible to implement this more efficiently in the + time domain. Just not sure how to handle relative time delays + between the synthesis stage and updating these coeffs. A smaller + FFT size might also be acceptable to save CPU. + + TODO: + [ ] sync var names between Octave and C version + [ ] doc gain normalisation + [ ] I think the first FFT is not rqd as we do the same + thing in aks_to_M2(). + +\*---------------------------------------------------------------------------*/ + +void lpc_post_filter(codec2_fftr_cfg fftr_fwd_cfg, float Pw[], float ak[], + int order, int dump, float beta, float gamma, + int bass_boost, float E) { + int i; + float x[FFT_ENC]; /* input to FFTs */ + COMP Ww[FFT_ENC / 2 + 1]; /* weighting spectrum */ + float Rw[FFT_ENC / 2 + 1]; /* R = WA */ + float e_before, e_after, gain; + float Pfw; + float max_Rw, min_Rw; + float coeff; + PROFILE_VAR(tstart, tfft1, taw, tfft2, tww, tr); + + PROFILE_SAMPLE(tstart); + + /* Determine weighting filter spectrum W(exp(jw)) ---------------*/ + + for (i = 0; i < FFT_ENC; i++) { + x[i] = 0.0; + } + + x[0] = ak[0]; + coeff = gamma; + for (i = 1; i <= order; i++) { + x[i] = ak[i] * coeff; + coeff *= gamma; + } + codec2_fftr(fftr_fwd_cfg, x, Ww); + + PROFILE_SAMPLE_AND_LOG(tfft2, taw, " fft2"); + + for (i = 0; i < FFT_ENC / 2; i++) { + Ww[i].real = Ww[i].real * Ww[i].real + Ww[i].imag * Ww[i].imag; + } + + PROFILE_SAMPLE_AND_LOG(tww, tfft2, " Ww"); + + /* Determined combined filter R = WA ---------------------------*/ + + max_Rw = 0.0; + min_Rw = 1E32; + for (i = 0; i < FFT_ENC / 2; i++) { + Rw[i] = sqrtf(Ww[i].real * Pw[i]); + if (Rw[i] > max_Rw) max_Rw = Rw[i]; + if (Rw[i] < min_Rw) min_Rw = Rw[i]; + } + + PROFILE_SAMPLE_AND_LOG(tr, tww, " R"); + + /* create post filter mag spectrum and apply ------------------*/ + + /* measure energy before post filtering */ + + e_before = 1E-4; + for (i = 0; i < FFT_ENC / 2; i++) e_before += Pw[i]; + + /* apply post filter and measure energy */ + + e_after = 1E-4; + for (i = 0; i < FFT_ENC / 2; i++) { + Pfw = powf(Rw[i], beta); + Pw[i] *= Pfw * Pfw; + e_after += Pw[i]; + } + gain = e_before / e_after; + + /* apply gain factor to normalise energy, and LPC Energy */ + + gain *= E; + for (i = 0; i < FFT_ENC / 2; i++) { + Pw[i] *= gain; + } + + if (bass_boost) { + /* add 3dB to first 1 kHz to account for LP effect of PF */ + + for (i = 0; i < FFT_ENC / 8; i++) { + Pw[i] *= 1.4 * 1.4; + } + } + + PROFILE_SAMPLE_AND_LOG2(tr, " filt"); +} + +/*---------------------------------------------------------------------------*\ + + aks_to_M2() + + Transforms the linear prediction coefficients to spectral amplitude + samples. This function determines A(m) from the average energy per + band using an FFT. + +\*---------------------------------------------------------------------------*/ + +void aks_to_M2(codec2_fftr_cfg fftr_fwd_cfg, float ak[], /* LPC's */ + int order, + MODEL *model, /* sinusoidal model parameters for this frame */ + float E, /* energy term */ + float *snr, /* signal to noise ratio for this frame in dB */ + int dump, /* true to dump sample to dump file */ + int sim_pf, /* true to simulate a post filter */ + int pf, /* true to enable actual LPC post filter */ + int bass_boost, /* enable LPC filter 0-1kHz 3dB boost */ + float beta, float gamma, /* LPC post filter parameters */ + COMP Aw[] /* output power spectrum */ +) { + int i, m; /* loop variables */ + int am, bm; /* limits of current band */ + float r; /* no. rads/bin */ + float Em; /* energy in band */ + float Am; /* spectral amplitude sample */ + float signal, noise; + PROFILE_VAR(tstart, tfft, tpw, tpf); + + PROFILE_SAMPLE(tstart); + + r = TWO_PI / (FFT_ENC); + + /* Determine DFT of A(exp(jw)) --------------------------------------------*/ + { + float a[FFT_ENC]; /* input to FFT for power spectrum */ + + for (i = 0; i < FFT_ENC; i++) { + a[i] = 0.0; + } + + for (i = 0; i <= order; i++) a[i] = ak[i]; + codec2_fftr(fftr_fwd_cfg, a, Aw); + } + PROFILE_SAMPLE_AND_LOG(tfft, tstart, " fft"); + + /* Determine power spectrum P(w) = E/(A(exp(jw))^2 ------------------------*/ + + float Pw[FFT_ENC / 2]; + +#ifndef FDV_ARM_MATH + for (i = 0; i < FFT_ENC / 2; i++) { + Pw[i] = 1.0 / (Aw[i].real * Aw[i].real + Aw[i].imag * Aw[i].imag + 1E-6); + } +#else + // this difference may seem strange, but the gcc for STM32F4 generates almost + // 5 times faster code with the two loops: 1120 ms -> 242 ms so please leave + // it as is or improve further since this code is called 4 times it results in + // almost 4ms gain (21ms -> 17ms per audio frame decode @ 1300 ) + + for (i = 0; i < FFT_ENC / 2; i++) { + Pw[i] = Aw[i].real * Aw[i].real + Aw[i].imag * Aw[i].imag + 1E-6; + } + for (i = 0; i < FFT_ENC / 2; i++) { + Pw[i] = 1.0 / (Pw[i]); + } +#endif + + PROFILE_SAMPLE_AND_LOG(tpw, tfft, " Pw"); + + if (pf) + lpc_post_filter(fftr_fwd_cfg, Pw, ak, order, dump, beta, gamma, bass_boost, + E); + else { + for (i = 0; i < FFT_ENC / 2; i++) { + Pw[i] *= E; + } + } + + PROFILE_SAMPLE_AND_LOG(tpf, tpw, " LPC post filter"); + + /* Determine magnitudes from P(w) ----------------------------------------*/ + + /* when used just by decoder {A} might be all zeroes so init signal + and noise to prevent log(0) errors */ + + signal = 1E-30; + noise = 1E-32; + + for (m = 1; m <= model->L; m++) { + am = (int)((m - 0.5) * model->Wo / r + 0.5); + bm = (int)((m + 0.5) * model->Wo / r + 0.5); + + // FIXME: With arm_rfft_fast_f32 we have to use this + // otherwise sometimes a to high bm is calculated + // which causes trouble later in the calculation + // chain + // it seems for some reason model->Wo is calculated somewhat too high + if (bm > FFT_ENC / 2) { + bm = FFT_ENC / 2; + } + Em = 0.0; + + for (i = am; i < bm; i++) Em += Pw[i]; + Am = sqrtf(Em); + + signal += model->A[m] * model->A[m]; + noise += (model->A[m] - Am) * (model->A[m] - Am); + + /* This code significantly improves perf of LPC model, in + particular when combined with phase0. The LPC spectrum tends + to track just under the peaks of the spectral envelope, and + just above nulls. This algorithm does the reverse to + compensate - raising the amplitudes of spectral peaks, while + attenuating the null. This enhances the formants, and + suppresses the energy between formants. */ + + if (sim_pf) { + if (Am > model->A[m]) Am *= 0.7; + if (Am < model->A[m]) Am *= 1.4; + } + model->A[m] = Am; + } + *snr = 10.0 * log10f(signal / noise); + + PROFILE_SAMPLE_AND_LOG2(tpf, " rec"); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes Wo using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_Wo(C2CONST *c2const, float Wo, int bits) { + int index, Wo_levels = 1 << bits; + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float norm; + + norm = (Wo - Wo_min) / (Wo_max - Wo_min); + index = floorf(Wo_levels * norm + 0.5); + if (index < 0) index = 0; + if (index > (Wo_levels - 1)) index = Wo_levels - 1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes Wo using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +float decode_Wo(C2CONST *c2const, int index, int bits) { + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float step; + float Wo; + int Wo_levels = 1 << bits; + + step = (Wo_max - Wo_min) / Wo_levels; + Wo = Wo_min + step * (index); + + return Wo; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_log_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes Wo in the log domain using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_log_Wo(C2CONST *c2const, float Wo, int bits) { + int index, Wo_levels = 1 << bits; + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float norm; + + norm = (log10f(Wo) - log10f(Wo_min)) / (log10f(Wo_max) - log10f(Wo_min)); + index = floorf(Wo_levels * norm + 0.5); + if (index < 0) index = 0; + if (index > (Wo_levels - 1)) index = Wo_levels - 1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_log_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes Wo using a WO_LEVELS quantiser in the log domain. + +\*---------------------------------------------------------------------------*/ + +float decode_log_Wo(C2CONST *c2const, int index, int bits) { + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float step; + float Wo; + int Wo_levels = 1 << bits; + + step = (log10f(Wo_max) - log10f(Wo_min)) / Wo_levels; + Wo = log10f(Wo_min) + step * (index); + + return POW10F(Wo); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: speech_to_uq_lsps() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Analyse a windowed frame of time domain speech to determine LPCs + which are the converted to LSPs for quantisation and transmission + over the channel. + +\*---------------------------------------------------------------------------*/ + +float speech_to_uq_lsps(float lsp[], float ak[], float Sn[], float w[], + int m_pitch, int order) { + int i, roots; + float Wn[m_pitch]; + float R[order + 1]; + float e, E; + + e = 0.0; + for (i = 0; i < m_pitch; i++) { + Wn[i] = Sn[i] * w[i]; + e += Wn[i] * Wn[i]; + } + + /* trap 0 energy case as LPC analysis will fail */ + + if (e == 0.0) { + for (i = 0; i < order; i++) lsp[i] = (PI / order) * (float)i; + return 0.0; + } + + autocorrelate(Wn, R, m_pitch, order); + levinson_durbin(R, ak, order); + + E = 0.0; + for (i = 0; i <= order; i++) E += ak[i] * R[i]; + + /* 15 Hz BW expansion as I can't hear the difference and it may help + help occasional fails in the LSP root finding. Important to do this + after energy calculation to avoid -ve energy values. + */ + + for (i = 0; i <= order; i++) ak[i] *= powf(0.994, (float)i); + + roots = lpc_to_lsp(ak, order, lsp, 5, LSP_DELTA1); + if (roots != order) { + /* if root finding fails use some benign LSP values instead */ + for (i = 0; i < order; i++) lsp[i] = (PI / order) * (float)i; + } + + return E; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_lsps_scalar() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Scalar LSP quantiser. From a vector of unquantised (floating point) + LSPs finds the quantised LSP indexes. + +\*---------------------------------------------------------------------------*/ + +void encode_lsps_scalar(int indexes[], float lsp[], int order) { + int i, k, m; + float wt[1]; + float lsp_hz[order]; + const float *cb; + float se; + + /* convert from radians to Hz so we can use human readable + frequencies */ + + for (i = 0; i < order; i++) lsp_hz[i] = (4000.0 / PI) * lsp[i]; + + /* scalar quantisers */ + + wt[0] = 1.0; + for (i = 0; i < order; i++) { + k = lsp_cb[i].k; + m = lsp_cb[i].m; + cb = lsp_cb[i].cb; + indexes[i] = quantise(cb, &lsp_hz[i], wt, k, m, &se); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_lsps_scalar() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + From a vector of quantised LSP indexes, returns the quantised + (floating point) LSPs. + +\*---------------------------------------------------------------------------*/ + +void decode_lsps_scalar(float lsp[], int indexes[], int order) { + int i, k; + float lsp_hz[order]; + const float *cb; + + for (i = 0; i < order; i++) { + k = lsp_cb[i].k; + cb = lsp_cb[i].cb; + lsp_hz[i] = cb[indexes[i] * k]; + } + + /* convert back to radians */ + + for (i = 0; i < order; i++) lsp[i] = (PI / 4000.0) * lsp_hz[i]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_lsps_vq() + AUTHOR......: David Rowe + DATE CREATED: 15 Feb 2012 + + Multi-stage VQ LSP quantiser developed by Jean-Marc Valin. + +\*---------------------------------------------------------------------------*/ + +void encode_lsps_vq(int *indexes, float *x, float *xq, int order) { + int i, n1, n2, n3; + float err[order], err2[order], err3[order]; + float w[order], w2[order], w3[order]; + const float *codebook1 = lsp_cbjmv[0].cb; + const float *codebook2 = lsp_cbjmv[1].cb; + const float *codebook3 = lsp_cbjmv[2].cb; + + w[0] = MIN(x[0], x[1] - x[0]); + for (i = 1; i < order - 1; i++) w[i] = MIN(x[i] - x[i - 1], x[i + 1] - x[i]); + w[order - 1] = MIN(x[order - 1] - x[order - 2], PI - x[order - 1]); + + compute_weights(x, w, order); + + n1 = find_nearest(codebook1, lsp_cbjmv[0].m, x, order); + + for (i = 0; i < order; i++) { + xq[i] = codebook1[order * n1 + i]; + err[i] = x[i] - xq[i]; + } + for (i = 0; i < order / 2; i++) { + err2[i] = err[2 * i]; + err3[i] = err[2 * i + 1]; + w2[i] = w[2 * i]; + w3[i] = w[2 * i + 1]; + } + n2 = find_nearest_weighted(codebook2, lsp_cbjmv[1].m, err2, w2, order / 2); + n3 = find_nearest_weighted(codebook3, lsp_cbjmv[2].m, err3, w3, order / 2); + + indexes[0] = n1; + indexes[1] = n2; + indexes[2] = n3; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_lsps_vq() + AUTHOR......: David Rowe + DATE CREATED: 15 Feb 2012 + +\*---------------------------------------------------------------------------*/ + +void decode_lsps_vq(int *indexes, float *xq, int order, int stages) { + int i, n1, n2, n3; + const float *codebook1 = lsp_cbjmv[0].cb; + const float *codebook2 = lsp_cbjmv[1].cb; + const float *codebook3 = lsp_cbjmv[2].cb; + + n1 = indexes[0]; + n2 = indexes[1]; + n3 = indexes[2]; + + for (i = 0; i < order; i++) { + xq[i] = codebook1[order * n1 + i]; + } + + if (stages != 1) { + for (i = 0; i < order / 2; i++) { + xq[2 * i] += codebook2[order * n2 / 2 + i]; + xq[2 * i + 1] += codebook3[order * n3 / 2 + i]; + } + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: bw_expand_lsps() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Applies Bandwidth Expansion (BW) to a vector of LSPs. Prevents any + two LSPs getting too close together after quantisation. We know + from experiment that LSP quantisation errors < 12.5Hz (25Hz step + size) are inaudible so we use that as the minimum LSP separation. + +\*---------------------------------------------------------------------------*/ + +void bw_expand_lsps(float lsp[], int order, float min_sep_low, + float min_sep_high) { + int i; + + for (i = 1; i < 4; i++) { + if ((lsp[i] - lsp[i - 1]) < min_sep_low * (PI / 4000.0)) + lsp[i] = lsp[i - 1] + min_sep_low * (PI / 4000.0); + } + + /* As quantiser gaps increased, larger BW expansion was required + to prevent twinkly noises. This may need more experiment for + different quanstisers. + */ + + for (i = 4; i < order; i++) { + if (lsp[i] - lsp[i - 1] < min_sep_high * (PI / 4000.0)) + lsp[i] = lsp[i - 1] + min_sep_high * (PI / 4000.0); + } +} + +void bw_expand_lsps2(float lsp[], int order) { + int i; + + for (i = 1; i < 4; i++) { + if ((lsp[i] - lsp[i - 1]) < 100.0 * (PI / 4000.0)) + lsp[i] = lsp[i - 1] + 100.0 * (PI / 4000.0); + } + + /* As quantiser gaps increased, larger BW expansion was required + to prevent twinkly noises. This may need more experiment for + different quanstisers. + */ + + for (i = 4; i < order; i++) { + if (lsp[i] - lsp[i - 1] < 200.0 * (PI / 4000.0)) + lsp[i] = lsp[i - 1] + 200.0 * (PI / 4000.0); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: apply_lpc_correction() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Apply first harmonic LPC correction at decoder. This helps improve + low pitch males after LPC modelling, like hts1a and morig. + +\*---------------------------------------------------------------------------*/ + +void apply_lpc_correction(MODEL *model) { + if (model->Wo < (PI * 150.0 / 4000)) { + model->A[1] *= 0.032; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_energy() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes LPC energy using an E_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_energy(float e, int bits) { + int index, e_levels = 1 << bits; + float e_min = E_MIN_DB; + float e_max = E_MAX_DB; + float norm; + + e = 10.0 * log10f(e); + norm = (e - e_min) / (e_max - e_min); + index = floorf(e_levels * norm + 0.5); + if (index < 0) index = 0; + if (index > (e_levels - 1)) index = e_levels - 1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_energy() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes energy using a E_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +float decode_energy(int index, int bits) { + float e_min = E_MIN_DB; + float e_max = E_MAX_DB; + float step; + float e; + int e_levels = 1 << bits; + + step = (e_max - e_min) / e_levels; + e = e_min + step * (index); + e = POW10F(e / 10.0); + + return e; +} + +static float ge_coeff[2] = {0.8, 0.9}; + +void compute_weights2(const float *x, const float *xp, float *w) { + w[0] = 30; + w[1] = 1; + if (x[1] < 0) { + w[0] *= .6; + w[1] *= .3; + } + if (x[1] < -10) { + w[0] *= .3; + w[1] *= .3; + } + /* Higher weight if pitch is stable */ + if (fabsf(x[0] - xp[0]) < .2) { + w[0] *= 2; + w[1] *= 1.5; + } else if (fabsf(x[0] - xp[0]) > .5) /* Lower if not stable */ + { + w[0] *= .5; + } + + /* Lower weight for low energy */ + if (x[1] < xp[1] - 10) { + w[1] *= .5; + } + if (x[1] < xp[1] - 20) { + w[1] *= .5; + } + + // w[0] = 30; + // w[1] = 1; + + /* Square the weights because it's applied on the squared error */ + w[0] *= w[0]; + w[1] *= w[1]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: quantise_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 29 Feb 2012 + + Experimental joint Wo and LPC energy vector quantiser developed by + Jean-Marc Valin. Exploits correlations between the difference in + the log pitch and log energy from frame to frame. For example + both the pitch and energy tend to only change by small amounts + during voiced speech, however it is important that these changes be + coded carefully. During unvoiced speech they both change a lot but + the ear is less sensitive to errors so coarser quantisation is OK. + + The ear is sensitive to log energy and loq pitch so we quantise in + these domains. That way the error measure used to quantise the + values is close to way the ear senses errors. + + See http://jmspeex.livejournal.com/10446.html + +\*---------------------------------------------------------------------------*/ + +void quantise_WoE(C2CONST *c2const, MODEL *model, float *e, float xq[]) { + int i, n1; + float x[2]; + float err[2]; + float w[2]; + const float *codebook1 = ge_cb[0].cb; + int nb_entries = ge_cb[0].m; + int ndim = ge_cb[0].k; + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float Fs = c2const->Fs; + + /* VQ is only trained for Fs = 8000 Hz */ + + assert(Fs == 8000); + + x[0] = log10f((model->Wo / PI) * 4000.0 / 50.0) / log10f(2); + x[1] = 10.0 * log10f(1e-4 + *e); + + compute_weights2(x, xq, w); + for (i = 0; i < ndim; i++) err[i] = x[i] - ge_coeff[i] * xq[i]; + n1 = find_nearest_weighted(codebook1, nb_entries, err, w, ndim); + + for (i = 0; i < ndim; i++) { + xq[i] = ge_coeff[i] * xq[i] + codebook1[ndim * n1 + i]; + err[i] -= codebook1[ndim * n1 + i]; + } + + /* + x = log2(4000*Wo/(PI*50)); + 2^x = 4000*Wo/(PI*50) + Wo = (2^x)*(PI*50)/4000; + */ + + model->Wo = powf(2.0, xq[0]) * (PI * 50.0) / 4000.0; + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (model->Wo > Wo_max) model->Wo = Wo_max; + if (model->Wo < Wo_min) model->Wo = Wo_min; + + model->L = PI / model->Wo; /* if we quantise Wo re-compute L */ + + *e = POW10F(xq[1] / 10.0); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 11 May 2012 + + Joint Wo and LPC energy vector quantiser developed my Jean-Marc + Valin. Returns index, and updated states xq[]. + +\*---------------------------------------------------------------------------*/ + +int encode_WoE(MODEL *model, float e, float xq[]) { + int i, n1; + float x[2]; + float err[2]; + float w[2]; + const float *codebook1 = ge_cb[0].cb; + int nb_entries = ge_cb[0].m; + int ndim = ge_cb[0].k; + + assert((1 << WO_E_BITS) == nb_entries); + + if (e < 0.0) + e = 0; /* occasional small negative energies due LPC round off I guess */ + + x[0] = log10f((model->Wo / PI) * 4000.0 / 50.0) / log10f(2); + x[1] = 10.0 * log10f(1e-4 + e); + + compute_weights2(x, xq, w); + for (i = 0; i < ndim; i++) err[i] = x[i] - ge_coeff[i] * xq[i]; + n1 = find_nearest_weighted(codebook1, nb_entries, err, w, ndim); + + for (i = 0; i < ndim; i++) { + xq[i] = ge_coeff[i] * xq[i] + codebook1[ndim * n1 + i]; + err[i] -= codebook1[ndim * n1 + i]; + } + + // printf("enc: %f %f (%f)(%f) \n", xq[0], xq[1], e, 10.0*log10(1e-4 + e)); + return n1; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 11 May 2012 + + Joint Wo and LPC energy vector quantiser developed my Jean-Marc + Valin. Given index and states xq[], returns Wo & E, and updates + states xq[]. + +\*---------------------------------------------------------------------------*/ + +void decode_WoE(C2CONST *c2const, MODEL *model, float *e, float xq[], int n1) { + int i; + const float *codebook1 = ge_cb[0].cb; + int ndim = ge_cb[0].k; + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + + for (i = 0; i < ndim; i++) { + xq[i] = ge_coeff[i] * xq[i] + codebook1[ndim * n1 + i]; + } + + // printf("dec: %f %f\n", xq[0], xq[1]); + model->Wo = powf(2.0, xq[0]) * (PI * 50.0) / 4000.0; + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (model->Wo > Wo_max) model->Wo = Wo_max; + if (model->Wo < Wo_min) model->Wo = Wo_min; + + model->L = PI / model->Wo; /* if we quantise Wo re-compute L */ + + *e = POW10F(xq[1] / 10.0); +} diff --git a/src/quantise.h b/src/quantise.h new file mode 100644 index 0000000..08d5532 --- /dev/null +++ b/src/quantise.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: quantise.h + AUTHOR......: David Rowe + DATE CREATED: 31/5/92 + + Quantisation functions for the sinusoidal coder. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __QUANTISE__ +#define __QUANTISE__ + +#include "codec2_fft.h" +#include "comp.h" + +#define WO_BITS 7 +#define WO_LEVELS (1 << WO_BITS) +#define WO_DT_BITS 3 + +#define E_BITS 5 +#define E_LEVELS (1 << E_BITS) +#define E_MIN_DB -10.0 +#define E_MAX_DB 40.0 + +#define LSP_SCALAR_INDEXES 10 +#define LSPD_SCALAR_INDEXES 10 +#define LSP_PRED_VQ_INDEXES 3 + +#define WO_E_BITS 8 + +#define LPCPF_GAMMA 0.5 +#define LPCPF_BETA 0.2 + +float lpc_model_amplitudes(float Sn[], float w[], MODEL *model, int order, + int lsp, float ak[]); +void aks_to_M2(codec2_fftr_cfg fftr_fwd_cfg, float ak[], int order, + MODEL *model, float E, float *snr, int dump, int sim_pf, int pf, + int bass_boost, float beta, float gamma, COMP Aw[]); + +int encode_Wo(C2CONST *c2const, float Wo, int bits); +float decode_Wo(C2CONST *c2const, int index, int bits); +int encode_log_Wo(C2CONST *c2const, float Wo, int bits); +float decode_log_Wo(C2CONST *c2const, int index, int bits); +void encode_lsps_scalar(int indexes[], float lsp[], int order); +void decode_lsps_scalar(float lsp[], int indexes[], int order); +void encode_lspds_scalar(int indexes[], float lsp[], int order); +void decode_lspds_scalar(float lsp[], int indexes[], int order); + +void encode_lsps_vq(int *indexes, float *x, float *xq, int order); +void decode_lsps_vq(int *indexes, float *xq, int order, int stages); + +long quantise(const float *cb, float vec[], float w[], int k, int m, float *se); +void lspvq_quantise(float lsp[], float lsp_[], int order); +void lspjmv_quantise(float lsps[], float lsps_[], int order); + +void quantise_WoE(C2CONST *c2const, MODEL *model, float *e, float xq[]); +int encode_WoE(MODEL *model, float e, float xq[]); +void decode_WoE(C2CONST *c2const, MODEL *model, float *e, float xq[], int n1); + +int encode_energy(float e, int bits); +float decode_energy(int index, int bits); + +void pack(unsigned char *bits, unsigned int *nbit, int index, + unsigned int index_bits); +void pack_natural_or_gray(unsigned char *bits, unsigned int *nbit, int index, + unsigned int index_bits, unsigned int gray); +int unpack(const unsigned char *bits, unsigned int *nbit, + unsigned int index_bits); +int unpack_natural_or_gray(const unsigned char *bits, unsigned int *nbit, + unsigned int index_bits, unsigned int gray); + +int lsp_bits(int i); +int lspd_bits(int i); +int lsp_pred_vq_bits(int i); + +void apply_lpc_correction(MODEL *model); +float speech_to_uq_lsps(float lsp[], float ak[], float Sn[], float w[], + int m_pitch, int order); +int check_lsp_order(float lsp[], int lpc_order); +void bw_expand_lsps(float lsp[], int order, float min_sep_low, + float min_sep_high); +void bw_expand_lsps2(float lsp[], int order); +void locate_lsps_jnd_steps(float lsp[], int order); +float decode_amplitudes(MODEL *model, float ak[], int lsp_indexes[], + int energy_index, float lsps[], float *e); + +#endif diff --git a/src/sine.c b/src/sine.c new file mode 100644 index 0000000..7193883 --- /dev/null +++ b/src/sine.c @@ -0,0 +1,658 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sine.c + AUTHOR......: David Rowe + DATE CREATED: 19/8/2010 + + Sinusoidal analysis and synthesis functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 1990-2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include "sine.h" + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> + +#include "defines.h" +#include "kiss_fft.h" + +#define HPF_BETA 0.125 + +/*---------------------------------------------------------------------------*\ + + HEADERS + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, + float pstep); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +C2CONST c2const_create(int Fs, float framelength_s) { + C2CONST c2const; + + assert((Fs == 8000) || (Fs == 16000)); + c2const.Fs = Fs; + c2const.n_samp = round(Fs * framelength_s); + c2const.max_amp = floor(Fs * P_MAX_S / 2); + c2const.p_min = floor(Fs * P_MIN_S); + c2const.p_max = floor(Fs * P_MAX_S); + c2const.m_pitch = floor(Fs * M_PITCH_S); + c2const.Wo_min = TWO_PI / c2const.p_max; + c2const.Wo_max = TWO_PI / c2const.p_min; + + if (Fs == 8000) { + c2const.nw = 279; + } else { + c2const.nw = 511; /* actually a bit shorter in time but lets us maintain + constant FFT size */ + } + + c2const.tw = Fs * TW_S; + + /* + fprintf(stderr, "max_amp: %d m_pitch: %d\n", c2const.n_samp, c2const.m_pitch); + fprintf(stderr, "p_min: %d p_max: %d\n", c2const.p_min, c2const.p_max); + fprintf(stderr, "Wo_min: %f Wo_max: %f\n", c2const.Wo_min, c2const.Wo_max); + fprintf(stderr, "nw: %d tw: %d\n", c2const.nw, c2const.tw); + */ + + return c2const; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_analysis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the time domain analysis window and it's DFT. + +\*---------------------------------------------------------------------------*/ + +void make_analysis_window(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, + float w[], float W[]) { + float m; + COMP wshift[FFT_ENC]; + int i, j; + int m_pitch = c2const->m_pitch; + int nw = c2const->nw; + + /* + Generate Hamming window centered on M-sample pitch analysis window + + 0 M/2 M-1 + |-------------|-------------| + |-------|-------| + nw samples + + All our analysis/synthsis is centred on the M/2 sample. + */ + + m = 0.0; + for (i = 0; i < m_pitch / 2 - nw / 2; i++) w[i] = 0.0; + for (i = m_pitch / 2 - nw / 2, j = 0; i < m_pitch / 2 + nw / 2; i++, j++) { + w[i] = 0.5 - 0.5 * cosf(TWO_PI * j / (nw - 1)); + m += w[i] * w[i]; + } + for (i = m_pitch / 2 + nw / 2; i < m_pitch; i++) w[i] = 0.0; + + /* Normalise - makes freq domain amplitude estimation straight + forward */ + + m = 1.0 / sqrtf(m * FFT_ENC); + for (i = 0; i < m_pitch; i++) { + w[i] *= m; + } + + /* + Generate DFT of analysis window, used for later processing. Note + we modulo FFT_ENC shift the time domain window w[], this makes the + imaginary part of the DFT W[] equal to zero as the shifted w[] is + even about the n=0 time axis if nw is odd. Having the imag part + of the DFT W[] makes computation easier. + + 0 FFT_ENC-1 + |-------------------------| + + ----\ /---- + \ / + \ / <- shifted version of window w[n] + \ / + \ / + ------- + + |---------| |---------| + nw/2 nw/2 + */ + + COMP temp[FFT_ENC]; + + for (i = 0; i < FFT_ENC; i++) { + wshift[i].real = 0.0; + wshift[i].imag = 0.0; + } + for (i = 0; i < nw / 2; i++) wshift[i].real = w[i + m_pitch / 2]; + for (i = FFT_ENC - nw / 2, j = m_pitch / 2 - nw / 2; i < FFT_ENC; i++, j++) + wshift[i].real = w[j]; + + codec2_fft(fft_fwd_cfg, wshift, temp); + + /* + Re-arrange W[] to be symmetrical about FFT_ENC/2. Makes later + analysis convenient. + + Before: + + + 0 FFT_ENC-1 + |----------|---------| + __ _ + \ / + \_______________/ + + After: + + 0 FFT_ENC-1 + |----------|---------| + ___ + / \ + ________/ \_______ + + */ + + for (i = 0; i < FFT_ENC / 2; i++) { + W[i] = temp[i + FFT_ENC / 2].real; + W[i + FFT_ENC / 2] = temp[i].real; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: hpf + AUTHOR......: David Rowe + DATE CREATED: 16 Nov 2010 + + High pass filter with a -3dB point of about 160Hz. + + y(n) = -HPF_BETA*y(n-1) + x(n) - x(n-1) + +\*---------------------------------------------------------------------------*/ + +float hpf(float x, float states[]) { + states[0] = -HPF_BETA * states[0] + x - states[1]; + states[1] = x; + + return states[0]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: dft_speech + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Finds the DFT of the current speech input speech frame. + +\*---------------------------------------------------------------------------*/ + +// TODO: we can either go for a faster FFT using fftr and some stack usage +// or we can reduce stack usage to almost zero on STM32 by switching to +// fft_inplace +#if 1 +void dft_speech(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, COMP Sw[], + float Sn[], float w[]) { + int i; + int m_pitch = c2const->m_pitch; + int nw = c2const->nw; + + for (i = 0; i < FFT_ENC; i++) { + Sw[i].real = 0.0; + Sw[i].imag = 0.0; + } + + /* Centre analysis window on time axis, we need to arrange input + to FFT this way to make FFT phases correct */ + + /* move 2nd half to start of FFT input vector */ + + for (i = 0; i < nw / 2; i++) + Sw[i].real = Sn[i + m_pitch / 2] * w[i + m_pitch / 2]; + + /* move 1st half to end of FFT input vector */ + + for (i = 0; i < nw / 2; i++) + Sw[FFT_ENC - nw / 2 + i].real = + Sn[i + m_pitch / 2 - nw / 2] * w[i + m_pitch / 2 - nw / 2]; + + codec2_fft_inplace(fft_fwd_cfg, Sw); +} +#else +void dft_speech(codec2_fftr_cfg fftr_fwd_cfg, COMP Sw[], float Sn[], + float w[]) { + int i; + float sw[FFT_ENC]; + + for (i = 0; i < FFT_ENC; i++) { + sw[i] = 0.0; + } + + /* Centre analysis window on time axis, we need to arrange input + to FFT this way to make FFT phases correct */ + + /* move 2nd half to start of FFT input vector */ + + for (i = 0; i < nw / 2; i++) sw[i] = Sn[i + m_pitch / 2] * w[i + m_pitch / 2]; + + /* move 1st half to end of FFT input vector */ + + for (i = 0; i < nw / 2; i++) + sw[FFT_ENC - nw / 2 + i] = + Sn[i + m_pitch / 2 - nw / 2] * w[i + m_pitch / 2 - nw / 2]; + + codec2_fftr(fftr_fwd_cfg, sw, Sw); +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: two_stage_pitch_refinement + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Refines the current pitch estimate using the harmonic sum pitch + estimation technique. + +\*---------------------------------------------------------------------------*/ + +void two_stage_pitch_refinement(C2CONST *c2const, MODEL *model, COMP Sw[]) { + float pmin, pmax, pstep; /* pitch refinement minimum, maximum and step */ + + /* Coarse refinement */ + + pmax = TWO_PI / model->Wo + 5; + pmin = TWO_PI / model->Wo - 5; + pstep = 1.0; + hs_pitch_refinement(model, Sw, pmin, pmax, pstep); + + /* Fine refinement */ + + pmax = TWO_PI / model->Wo + 1; + pmin = TWO_PI / model->Wo - 1; + pstep = 0.25; + hs_pitch_refinement(model, Sw, pmin, pmax, pstep); + + /* Limit range */ + + if (model->Wo < TWO_PI / c2const->p_max) model->Wo = TWO_PI / c2const->p_max; + if (model->Wo > TWO_PI / c2const->p_min) model->Wo = TWO_PI / c2const->p_min; + + model->L = floorf(PI / model->Wo); + + /* trap occasional round off issues with floorf() */ + if (model->Wo * model->L >= 0.95 * PI) { + model->L--; + } + assert(model->Wo * model->L < PI); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: hs_pitch_refinement + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Harmonic sum pitch refinement function. + + pmin pitch search range minimum + pmax pitch search range maximum + step pitch search step size + model current pitch estimate in model.Wo + + model refined pitch estimate in model.Wo + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, + float pstep) { + int m; /* loop variable */ + int b; /* bin for current harmonic centre */ + float E; /* energy for current pitch*/ + float Wo; /* current "test" fundamental freq. */ + float Wom; /* Wo that maximises E */ + float Em; /* mamimum energy */ + float r, one_on_r; /* number of rads/bin */ + float p; /* current pitch */ + + /* Initialisation */ + + model->L = PI / model->Wo; /* use initial pitch est. for L */ + Wom = model->Wo; + Em = 0.0; + r = TWO_PI / FFT_ENC; + one_on_r = 1.0 / r; + + /* Determine harmonic sum for a range of Wo values */ + + for (p = pmin; p <= pmax; p += pstep) { + E = 0.0; + Wo = TWO_PI / p; + + float bFloat = Wo * one_on_r; + float currentBFloat = bFloat; + + /* Sum harmonic magnitudes */ + for (m = 1; m <= model->L; m++) { + b = (int)(currentBFloat + 0.5); + E += Sw[b].real * Sw[b].real + Sw[b].imag * Sw[b].imag; + currentBFloat += bFloat; + } + /* Compare to see if this is a maximum */ + + if (E > Em) { + Em = E; + Wom = Wo; + } + } + + model->Wo = Wom; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: estimate_amplitudes + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Estimates the complex amplitudes of the harmonics. + +\*---------------------------------------------------------------------------*/ + +void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase) { + int i, m; /* loop variables */ + int am, bm; /* bounds of current harmonic */ + float den; /* denominator of amplitude expression */ + + float r = TWO_PI / FFT_ENC; + float one_on_r = 1.0 / r; + + for (m = 1; m <= model->L; m++) { + /* Estimate ampltude of harmonic */ + + den = 0.0; + am = (int)((m - 0.5) * model->Wo * one_on_r + 0.5); + bm = (int)((m + 0.5) * model->Wo * one_on_r + 0.5); + + for (i = am; i < bm; i++) { + den += Sw[i].real * Sw[i].real + Sw[i].imag * Sw[i].imag; + } + + model->A[m] = sqrtf(den); + + if (est_phase) { + int b = (int)(m * model->Wo / r + + 0.5); /* DFT bin of centre of current harmonic */ + + /* Estimate phase of harmonic, this is expensive in CPU for + embedded devicesso we make it an option */ + + model->phi[m] = atan2f(Sw[b].imag, Sw[b].real); + } + } +} + +/*---------------------------------------------------------------------------*\ + + est_voicing_mbe() + + Returns the error of the MBE cost function for a fiven F0. + + Note: I think a lot of the operations below can be simplified as + W[].imag = 0 and has been normalised such that den always equals 1. + +\*---------------------------------------------------------------------------*/ + +float est_voicing_mbe(C2CONST *c2const, MODEL *model, COMP Sw[], float W[]) { + int l, al, bl, m; /* loop variables */ + COMP Am; /* amplitude sample for this band */ + int offset; /* centers Hw[] about current harmonic */ + float den; /* denominator of Am expression */ + float error; /* accumulated error between original and synthesised */ + float Wo; + float sig, snr; + float elow, ehigh, eratio; + float sixty; + COMP Ew; + Ew.real = 0; + Ew.imag = 0; + + int l_1000hz = model->L * 1000.0 / (c2const->Fs / 2); + sig = 1E-4; + for (l = 1; l <= l_1000hz; l++) { + sig += model->A[l] * model->A[l]; + } + + Wo = model->Wo; + error = 1E-4; + + /* Just test across the harmonics in the first 1000 Hz */ + + for (l = 1; l <= l_1000hz; l++) { + Am.real = 0.0; + Am.imag = 0.0; + den = 0.0; + al = ceilf((l - 0.5) * Wo * FFT_ENC / TWO_PI); + bl = ceilf((l + 0.5) * Wo * FFT_ENC / TWO_PI); + + /* Estimate amplitude of harmonic assuming harmonic is totally voiced */ + + offset = FFT_ENC / 2 - l * Wo * FFT_ENC / TWO_PI + 0.5; + for (m = al; m < bl; m++) { + Am.real += Sw[m].real * W[offset + m]; + Am.imag += Sw[m].imag * W[offset + m]; + den += W[offset + m] * W[offset + m]; + } + + Am.real = Am.real / den; + Am.imag = Am.imag / den; + + /* Determine error between estimated harmonic and original */ + + for (m = al; m < bl; m++) { + Ew.real = Sw[m].real - Am.real * W[offset + m]; + Ew.imag = Sw[m].imag - Am.imag * W[offset + m]; + error += Ew.real * Ew.real; + error += Ew.imag * Ew.imag; + } + } + + snr = 10.0 * log10f(sig / error); + if (snr > V_THRESH) + model->voiced = 1; + else + model->voiced = 0; + + /* post processing, helps clean up some voicing errors ------------------*/ + + /* + Determine the ratio of low frequency to high frequency energy, + voiced speech tends to be dominated by low frequency energy, + unvoiced by high frequency. This measure can be used to + determine if we have made any gross errors. + */ + + int l_2000hz = model->L * 2000.0 / (c2const->Fs / 2); + int l_4000hz = model->L * 4000.0 / (c2const->Fs / 2); + elow = ehigh = 1E-4; + for (l = 1; l <= l_2000hz; l++) { + elow += model->A[l] * model->A[l]; + } + for (l = l_2000hz; l <= l_4000hz; l++) { + ehigh += model->A[l] * model->A[l]; + } + eratio = 10.0 * log10f(elow / ehigh); + + /* Look for Type 1 errors, strongly V speech that has been + accidentally declared UV */ + + if (model->voiced == 0) + if (eratio > 10.0) model->voiced = 1; + + /* Look for Type 2 errors, strongly UV speech that has been + accidentally declared V */ + + if (model->voiced == 1) { + if (eratio < -10.0) model->voiced = 0; + + /* A common source of Type 2 errors is the pitch estimator + gives a low (50Hz) estimate for UV speech, which gives a + good match with noise due to the close harmoonic spacing. + These errors are much more common than people with 50Hz3 + pitch, so we have just a small eratio threshold. */ + + sixty = 60.0 * TWO_PI / c2const->Fs; + if ((eratio < -4.0) && (model->Wo <= sixty)) model->voiced = 0; + } + // printf(" v: %d snr: %f eratio: %3.2f %f\n",model->voiced,snr,eratio,dF0); + + return snr; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_synthesis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the trapezoidal (Parzen) synthesis window. + +\*---------------------------------------------------------------------------*/ + +void make_synthesis_window(C2CONST *c2const, float Pn[]) { + int i; + float win; + int n_samp = c2const->n_samp; + int tw = c2const->tw; + + /* Generate Parzen window in time domain */ + + win = 0.0; + for (i = 0; i < n_samp / 2 - tw; i++) Pn[i] = 0.0; + win = 0.0; + for (i = n_samp / 2 - tw; i < n_samp / 2 + tw; win += 1.0 / (2 * tw), i++) + Pn[i] = win; + for (i = n_samp / 2 + tw; i < 3 * n_samp / 2 - tw; i++) Pn[i] = 1.0; + win = 1.0; + for (i = 3 * n_samp / 2 - tw; i < 3 * n_samp / 2 + tw; + win -= 1.0 / (2 * tw), i++) + Pn[i] = win; + for (i = 3 * n_samp / 2 + tw; i < 2 * n_samp; i++) Pn[i] = 0.0; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: synthesise + AUTHOR......: David Rowe + DATE CREATED: 20/2/95 + + Synthesise a speech signal in the frequency domain from the + sinusodal model parameters. Uses overlap-add with a trapezoidal + window to smoothly interpolate between frames. + +\*---------------------------------------------------------------------------*/ + +void synthesise(int n_samp, codec2_fftr_cfg fftr_inv_cfg, + float Sn_[], /* time domain synthesised signal */ + MODEL *model, /* ptr to model parameters for this frame */ + float Pn[], /* time domain Parzen window */ + int shift /* flag used to handle transition frames */ +) { + int i, l, j, b; /* loop variables */ + COMP Sw_[FFT_DEC / 2 + 1]; /* DFT of synthesised signal */ + float sw_[FFT_DEC]; /* synthesised signal */ + + if (shift) { + /* Update memories */ + for (i = 0; i < n_samp - 1; i++) { + Sn_[i] = Sn_[i + n_samp]; + } + Sn_[n_samp - 1] = 0.0; + } + + for (i = 0; i < FFT_DEC / 2 + 1; i++) { + Sw_[i].real = 0.0; + Sw_[i].imag = 0.0; + } + + /* Now set up frequency domain synthesised speech */ + + for (l = 1; l <= model->L; l++) { + b = (int)(l * model->Wo * FFT_DEC / TWO_PI + 0.5); + if (b > ((FFT_DEC / 2) - 1)) { + b = (FFT_DEC / 2) - 1; + } + Sw_[b].real = model->A[l] * cosf(model->phi[l]); + Sw_[b].imag = model->A[l] * sinf(model->phi[l]); + } + + /* Perform inverse DFT */ + + codec2_fftri(fftr_inv_cfg, Sw_, sw_); + + /* Overlap add to previous samples */ + +#ifdef USE_KISS_FFT +#define FFTI_FACTOR ((float)1.0) +#else +#define FFTI_FACTOR ((float32_t)FFT_DEC) +#endif + + for (i = 0; i < n_samp - 1; i++) { + Sn_[i] += sw_[FFT_DEC - n_samp + 1 + i] * Pn[i] * FFTI_FACTOR; + } + + if (shift) + for (i = n_samp - 1, j = 0; i < 2 * n_samp; i++, j++) + Sn_[i] = sw_[j] * Pn[i] * FFTI_FACTOR; + else + for (i = n_samp - 1, j = 0; i < 2 * n_samp; i++, j++) + Sn_[i] += sw_[j] * Pn[i] * FFTI_FACTOR; +} + +/* todo: this should probably be in some states rather than a static */ +static unsigned long next = 1; + +int codec2_rand(void) { + next = next * 1103515245 + 12345; + return ((unsigned)(next / 65536) % 32768); +} diff --git a/src/sine.h b/src/sine.h new file mode 100644 index 0000000..3f709b2 --- /dev/null +++ b/src/sine.h @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sine.h + AUTHOR......: David Rowe + DATE CREATED: 1/11/94 + + Header file for sinusoidal analysis and synthesis functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __SINE__ +#define __SINE__ + +#include "codec2_fft.h" +#include "comp.h" +#include "defines.h" + +C2CONST c2const_create(int Fs, float framelength_ms); + +void make_analysis_window(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, + float w[], float W[]); +float hpf(float x, float states[]); +void dft_speech(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, COMP Sw[], + float Sn[], float w[]); +void two_stage_pitch_refinement(C2CONST *c2const, MODEL *model, COMP Sw[]); +void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase); +float est_voicing_mbe(C2CONST *c2const, MODEL *model, COMP Sw[], float W[]); +void make_synthesis_window(C2CONST *c2const, float Pn[]); +void synthesise(int n_samp, codec2_fftr_cfg fftr_inv_cfg, float Sn_[], + MODEL *model, float Pn[], int shift); + +#define CODEC2_RAND_MAX 32767 +int codec2_rand(void); + +#endif |
