From 8b4f3ad6b2cdd53266b5d1633713aa52379fd6d7 Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Mon, 13 Feb 2023 10:28:50 +0100 Subject: [PATCH 01/39] [software] Add kernel for MIMO MMSE estimation --- software/apps/axb_f16/axb_f16.h | 180 +++++++++ software/apps/axb_f16/data_axb.h.tpl | 25 ++ software/apps/axb_f16/data_axb.py | 114 ++++++ software/apps/axb_f16/main.c | 112 ++++++ software/apps/choldec_f16/choldec_f16.h | 80 ++++ software/apps/choldec_f16/data_choldec.h.tpl | 23 ++ software/apps/choldec_f16/data_choldec.py | 98 +++++ software/apps/choldec_f16/main.c | 74 ++++ .../apps/mimo_mmse_f16/data_mimo_mmse.h.tpl | 39 ++ software/apps/mimo_mmse_f16/data_mimo_mmse.py | 138 +++++++ software/apps/mimo_mmse_f16/main.c | 190 +++++++++ software/apps/mimo_mmse_f16/mimo_mmse_f16.h | 371 +++++++++++++++++ .../apps/mimo_mmse_f32/data_mimo_mmse.h.tpl | 39 ++ software/apps/mimo_mmse_f32/data_mimo_mmse.py | 139 +++++++ software/apps/mimo_mmse_f32/main.c | 125 ++++++ software/apps/mimo_mmse_f32/mimo_mmse_f32.h | 375 ++++++++++++++++++ software/apps/mimo_zf_f16/data_mimo_zf.h.tpl | 37 ++ software/apps/mimo_zf_f16/data_mimo_zf.py | 138 +++++++ software/apps/mimo_zf_f16/data_mimo_zf_f16.h | 78 ++++ software/apps/mimo_zf_f16/main.c | 127 ++++++ software/apps/mimo_zf_f16/mimo_zf_f16.h | 338 ++++++++++++++++ software/apps/mimo_zf_f32/data_mimo_zf.h.tpl | 39 ++ software/apps/mimo_zf_f32/data_mimo_zf.py | 138 +++++++ software/apps/mimo_zf_f32/data_mimo_zf_f32.h | 78 ++++ software/apps/mimo_zf_f32/main.c | 119 ++++++ software/apps/mimo_zf_f32/mimo_zf_f32.h | 342 ++++++++++++++++ 26 files changed, 3556 insertions(+) create mode 100644 software/apps/axb_f16/axb_f16.h create mode 100644 software/apps/axb_f16/data_axb.h.tpl create mode 100644 software/apps/axb_f16/data_axb.py create mode 100644 software/apps/axb_f16/main.c create mode 100644 software/apps/choldec_f16/choldec_f16.h create mode 100644 software/apps/choldec_f16/data_choldec.h.tpl create mode 100644 software/apps/choldec_f16/data_choldec.py create mode 100644 software/apps/choldec_f16/main.c create mode 100644 software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl create mode 100644 software/apps/mimo_mmse_f16/data_mimo_mmse.py create mode 100644 software/apps/mimo_mmse_f16/main.c create mode 100644 software/apps/mimo_mmse_f16/mimo_mmse_f16.h create mode 100644 software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl create mode 100644 software/apps/mimo_mmse_f32/data_mimo_mmse.py create mode 100644 software/apps/mimo_mmse_f32/main.c create mode 100644 software/apps/mimo_mmse_f32/mimo_mmse_f32.h create mode 100644 software/apps/mimo_zf_f16/data_mimo_zf.h.tpl create mode 100644 software/apps/mimo_zf_f16/data_mimo_zf.py create mode 100644 software/apps/mimo_zf_f16/data_mimo_zf_f16.h create mode 100644 software/apps/mimo_zf_f16/main.c create mode 100644 software/apps/mimo_zf_f16/mimo_zf_f16.h create mode 100644 software/apps/mimo_zf_f32/data_mimo_zf.h.tpl create mode 100644 software/apps/mimo_zf_f32/data_mimo_zf.py create mode 100644 software/apps/mimo_zf_f32/data_mimo_zf_f32.h create mode 100644 software/apps/mimo_zf_f32/main.c create mode 100644 software/apps/mimo_zf_f32/mimo_zf_f32.h diff --git a/software/apps/axb_f16/axb_f16.h b/software/apps/axb_f16/axb_f16.h new file mode 100644 index 000000000..dfc2f7b03 --- /dev/null +++ b/software/apps/axb_f16/axb_f16.h @@ -0,0 +1,180 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ab, bb; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * (i * n + i)]; + ab = in[2U * i]; + bb = in[2U * i + 1]; + asm volatile ( + "fsub.h %[ax], %[ab], %[as];" + "fsub.h %[bx], %[bb], %[bs];" + "fdiv.h %[ax], %[ax], %[diag];" + "fdiv.h %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ab, bb; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + ab = in[2 * (n - i - 1)]; + bb = in[2 * (n - i - 1) + 1]; + asm volatile ( + "fsub.h %[ax], %[ab], %[as];" + "fsub.h %[bx], %[bb], %[bs];" + "fdiv.h %[ax], %[ax], %[diag];" + "fdiv.h %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + + diff --git a/software/apps/axb_f16/data_axb.h.tpl b/software/apps/axb_f16/data_axb.h.tpl new file mode 100644 index 000000000..7366e9d32 --- /dev/null +++ b/software/apps/axb_f16/data_axb.h.tpl @@ -0,0 +1,25 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) + +__fp16 In_G[${2 * N_tx * N_rx}] = ${array_to_cstr(G)}; +__fp16 In_b[${2 * N_tx * N_rx}] = ${array_to_cstr(b)}; + +__fp16 Out_L[${2 * N_tx * N_rx}] = ${array_to_cstr(L)}; +__fp16 Out_x[${2 * N_tx * N_rx}] = ${array_to_cstr(x)}; diff --git a/software/apps/axb_f16/data_axb.py b/software/apps/axb_f16/data_axb.py new file mode 100644 index 000000000..8020d84d5 --- /dev/null +++ b/software/apps/axb_f16/data_axb.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import pathlib +from scipy.linalg import solve_triangular +from mako.template import Template + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_axb.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=4, + help='First dimension.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + + # Create hermitian matrix + H = np.random.rand(N_rx, N_tx) + 1.j * np.random.rand(N_tx, N_rx) + # Matrix to be inverted + G = H*(np.asmatrix(H).H) + # Cholesky decomposition + L = np.linalg.cholesky(G) + + # Create input vector + b = np.random.rand(N_tx) + 1.j * np.random.rand(N_tx) + y = solve_triangular(L, b, lower=True) + x = solve_triangular(np.transpose(L), y) + + G = np.reshape(G, (N_tx*N_rx, -1), order='C') + L = np.reshape(L, (N_tx*N_rx, -1), order='C') + G_RI = np.zeros(2*N_tx*N_rx) + L_RI = np.zeros(2*N_tx*N_rx) + b_RI = np.zeros(2*N_tx) + x_RI = np.zeros(2*N_tx) + + for i in range(N_tx*N_rx): + G_RI[2*i] = G[i].real + G_RI[2*i+1] = G[i].imag + L_RI[2*i] = L[i].real + L_RI[2*i+1] = L[i].imag + for i in range(N_tx): + b_RI[2*i] = b[i].real + b_RI[2*i+1] = b[i].imag + x_RI[2*i] = x[i].real + x_RI[2*i+1] = x[i].imag + + G_RI = G_RI.astype(np.float16) + L_RI = L_RI.astype(np.float16) + b_RI = b_RI.astype(np.float16) + x_RI = x_RI.astype(np.float16) + print("Input matrix in (Re, Im) format:\n", G_RI) + print("Output matrix in (Re, Im) format:\n", L_RI) + print("Input vector in (Re, Im) format:\n", b_RI) + print("Output vector in (Re, Im) format:\n", x_RI) + + + kwargs = {'name': 'axb_f16', 'G': G_RI, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/apps/axb_f16/main.c b/software/apps/axb_f16/main.c new file mode 100644 index 000000000..37f3d6b42 --- /dev/null +++ b/software/apps/axb_f16/main.c @@ -0,0 +1,112 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "axb_f16.h" + +/* DATA */ +#include "data_axb_f16.h" + +dump(res,1); + +__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); +__fp16 b[2 * N_RX] __attribute__((section(".l1"))); + +__fp16 s[2 * N_TX] __attribute__((section(".l1"))); +__fp16 x[2 * N_TX] __attribute__((section(".l1"))); +__fp16 y[2 * N_TX] __attribute__((section(".l1"))); + +void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = data[i]; + } + mempool_barrier(num_cores); + return; +} + +void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = (__fp16) (0x0000); + } + mempool_barrier(num_cores); + return; +} + +void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + __fp16 error; + __fp16 exp = pExp[i]; + __fp16 res = pRes[i]; + asm volatile( + "fsub.h %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + : ); + if (*(int32_t*)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + } + } + } +} + +void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + + __fp16 in = pRes[i]; + // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ + float cvt_out; + asm volatile( + "fcvt.h.s %[cvt_out], %[in];" + : [cvt_out] "=&r"(cvt_out) + : [in] "r" (in) + : ); + dump_res(*(uint32_t*)&cvt_out); + + } + } +} + +// Driver program +void single_core_axb() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + /* Initialize matrices */ + initialize(in_matrix, In_G, N_TX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(b, In_b, N_TX, core_id, num_cores); + initialize_zeros(y, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores);// + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); + mempool_Ltrisol_f16s(out_matrix, b, y, N_TX); + mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + verify_result(out_matrix, Out_L, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + +int main() { + single_core_axb(); + return 0; +} diff --git a/software/apps/choldec_f16/choldec_f16.h b/software/apps/choldec_f16/choldec_f16.h new file mode 100644 index 000000000..d47001730 --- /dev/null +++ b/software/apps/choldec_f16/choldec_f16.h @@ -0,0 +1,80 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} diff --git a/software/apps/choldec_f16/data_choldec.h.tpl b/software/apps/choldec_f16/data_choldec.h.tpl new file mode 100644 index 000000000..8851c8fc4 --- /dev/null +++ b/software/apps/choldec_f16/data_choldec.h.tpl @@ -0,0 +1,23 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) + +__fp16 In_G[${2 * N_tx * N_rx}] = ${array_to_cstr(G)}; + +__fp16 Out_L[${2 * N_tx * N_rx}] = ${array_to_cstr(L)}; diff --git a/software/apps/choldec_f16/data_choldec.py b/software/apps/choldec_f16/data_choldec.py new file mode 100644 index 000000000..6d9211616 --- /dev/null +++ b/software/apps/choldec_f16/data_choldec.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import pathlib +from scipy.linalg import solve_triangular +from mako.template import Template + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_axb.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=4, + help='First dimension.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + + # Create hermitian matrix + H = np.random.rand(N_rx, N_tx) + 1.j * np.random.rand(N_tx, N_rx) + # Matrix to be inverted + G = H*(np.asmatrix(H).H) + # Cholesky decomposition + L = np.linalg.cholesky(G) + + G = np.reshape(G, (N_tx*N_rx, -1), order='C') + L = np.reshape(L, (N_tx*N_rx, -1), order='C') + G_RI = np.zeros(2*N_tx*N_rx) + L_RI = np.zeros(2*N_tx*N_rx) + + for i in range(N_tx*N_rx): + G_RI[2*i] = G[i].real + G_RI[2*i+1] = G[i].imag + L_RI[2*i] = L[i].real + L_RI[2*i+1] = L[i].imag + + G_RI = G_RI.astype(np.float16) + L_RI = L_RI.astype(np.float16) + print("Input matrix in (Re, Im) format:\n", G_RI) + print("Output matrix in (Re, Im) format:\n", L_RI) + + + kwargs = {'name': 'choldec_f16', 'G': G_RI, 'L' : L_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/apps/choldec_f16/main.c b/software/apps/choldec_f16/main.c new file mode 100644 index 000000000..0fbe03d39 --- /dev/null +++ b/software/apps/choldec_f16/main.c @@ -0,0 +1,74 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "choldecf16.h" +#include "data_choldecf16.h" +__fp16 in_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +__fp16 out_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); + +void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { +void initialize(__fp16 *in_matrix, __fp16 *out_matrix, __fp16 *In, + uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = (__fp16) (0x0000); + } + mempool_barrier(num_cores); + return; +} + +void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + __fp16 error; + __fp16 exp = pExp[i]; + __fp16 res = pRes[i]; + asm volatile( + "fsub.h %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + : ); + if (*(int32_t*)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + } + } + } +} + + +// Driver program +void single_core() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize + /* Initialize matrices */ + initialize(in_matrix, In_G, N_RX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_RX*N_TX, core_id, num_cores); + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); + mempool_Ltrisol_f16s(out_matrix, b, y, N_TX); + mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + verify_result(out_matrix, Out_L, N_TX * N_RX, core_id); + mempool_barrier(num_cores); + return; +} + + +int main() { + single_core(); + return 0; +} diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl b/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl new file mode 100644 index 000000000..b737ce901 --- /dev/null +++ b/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl @@ -0,0 +1,39 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) + +// Inputs + +__fp16 In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; + +__fp16 In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; + +__fp16 In_b[${2 * N_rx}] = ${array_to_cstr(b)}; + +__fp16 In_sigma[${N_tx}] = ${array_to_cstr(sigma)}; + +// Outputs + +__fp16 Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; + +__fp16 Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; + +__fp16 Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; + +__fp16 Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.py b/software/apps/mimo_mmse_f16/data_mimo_mmse.py new file mode 100644 index 000000000..68133dd73 --- /dev/null +++ b/software/apps/mimo_mmse_f16/data_mimo_mmse.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + + # Create channel matrix + H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float16) + # Create input vector + b = np.random.rand(N_rx).astype(np.float16) + 1.j * np.random.rand(N_rx).astype(np.float16) + # Generate noise variance + sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float16)) + + # Matrix to be inverted in MMSE estimator + H_h = (np.asmatrix(H).H) + G = H_h * H + G = G + np.diag(sigma) + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Linear system solution + s = np.transpose(np.dot(H_h, b)) + y = solve_triangular(L, s, lower=True) + x = solve_triangular(np.transpose(L), y) + + H = np.reshape(H, (N_tx*N_rx, -1), order='C') + G = np.reshape(G, (N_tx*N_tx, -1), order='C') + L = np.reshape(L, (N_tx*N_tx, -1), order='C') + H_RI = np.zeros(2*N_tx*N_rx) + G_RI = np.zeros(2*N_tx*N_tx) + L_RI = np.zeros(2*N_tx*N_tx) + b_RI = np.zeros(2*N_rx) + s_RI = np.zeros(2*N_tx) + x_RI = np.zeros(2*N_tx) + y_RI = np.zeros(2*N_tx) + + for i in range(N_tx*N_rx): + H_RI[2*i] = H[i].real + H_RI[2*i+1] = H[i].imag + for i in range(N_tx*N_tx): + G_RI[2*i] = G[i].real + G_RI[2*i+1] = G[i].imag + L_RI[2*i] = L[i].real + L_RI[2*i+1] = L[i].imag + + for i in range(N_rx): + b_RI[2*i] = b[i].real + b_RI[2*i+1] = b[i].imag + for i in range(N_tx): + s_RI[2*i] = s[i].real + s_RI[2*i+1] = s[i].imag + x_RI[2*i] = x[i].real + x_RI[2*i+1] = x[i].imag + y_RI[2*i] = y[i].real + y_RI[2*i+1] = y[i].imag + + sigma = sigma.astype(np.float16) + H_RI = H_RI.astype(np.float16) + G_RI = G_RI.astype(np.float16) + L_RI = L_RI.astype(np.float16) + b_RI = b_RI.astype(np.float16) + x_RI = x_RI.astype(np.float16) + y_RI = y_RI.astype(np.float16) + s_RI = s_RI.astype(np.float16) + print("Channel matrix in (Re, Im) format:\n", H_RI) + print("Hermitian matrix in (Re, Im) format:\n", G_RI) + print("Cholesky dec. in (Re, Im) format:\n", L_RI) + print("Input vector in (Re, Im) format:\n", b_RI) + print("Output vector in (Re, Im) format:\n", x_RI) + + + kwargs = {'name': 'mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/mimo_mmse_f16/main.c new file mode 100644 index 000000000..1a0746afd --- /dev/null +++ b/software/apps/mimo_mmse_f16/main.c @@ -0,0 +1,190 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "mimo_mmse_f16.h" + +/* DATA */ +//#include "data_choldec_f16.h" +//#include "data_Axb_f16.h" +#include "data_mimo_mmse_f16.h" + +dump(res,1); + +__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); +__fp16 b[2 * N_RX] __attribute__((section(".l1"))); + +__fp16 s[2 * N_TX] __attribute__((section(".l1"))); +__fp16 x[2 * N_TX] __attribute__((section(".l1"))); +__fp16 y[2 * N_TX] __attribute__((section(".l1"))); + +void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = data[i]; + } + mempool_barrier(num_cores); + return; +} + +void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = (__fp16) (0x0000); + } + mempool_barrier(num_cores); + return; +} + +void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + __fp16 error; + __fp16 exp = pExp[i]; + __fp16 res = pRes[i]; + asm volatile( + "fsub.h %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + : ); + if (*(int32_t*)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + } + } + } +} + +void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + + __fp16 in = pRes[i]; + // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ + float cvt_out; + asm volatile( + "fcvt.h.s %[cvt_out], %[in];" + : [cvt_out] "=&r"(cvt_out) + : [in] "r" (in) + : ); + dump_res(*(uint32_t*)&cvt_out); + + } + } +} + + +// // Driver program +// void single_core_cholesky() { +// uint32_t core_id = mempool_get_core_id(); +// uint32_t num_cores = mempool_get_core_count(); +// mempool_barrier_init(core_id); // Initialize barrier and synchronize +// /* Initialize matrices */ +// initialize(in_matrix, In_G, N_RX*N_TX, core_id, num_cores); +// initialize_zeros(out_matrix, N_RX*N_TX, core_id, num_cores); +// /* Benchmark */ +// if (core_id == 0) { +// mempool_start_benchmark(); +// mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); +// mempool_stop_benchmark(); +// } +// mempool_barrier(num_cores); +// verify_result(out_matrix, Out_L, N_TX * N_RX, core_id); +// mempool_barrier(num_cores); +// return; +// } + +// // Driver program +// void single_core_Axb() { +// uint32_t core_id = mempool_get_core_id(); +// uint32_t num_cores = mempool_get_core_count(); +// mempool_barrier_init(core_id); // Initialize barrier and synchronize// +// /* Initialize matrices */ +// initialize(in_matrix, In_G, N_TX*N_TX, core_id, num_cores); +// initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); +// /* Initialize vectors */ +// initialize(b, Out_y, N_TX, core_id, num_cores); +// initialize_zeros(y, N_TX, core_id, num_cores); +// initialize_zeros(x, N_TX, core_id, num_cores);// +// /* Benchmark */ +// if (core_id == 0) { +// mempool_start_benchmark(); +// mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); +// mempool_Ltrisol_f16s(out_matrix, b, y, N_TX); +// mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); +// mempool_stop_benchmark(); +// } +// mempool_barrier(num_cores); +// // verify_result(x, Out_x, N_TX, core_id); +// mempool_barrier(num_cores); +// return; +// } + +// Driver program +void single_core_mimo_mmse() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(sigma, In_sigma, N_TX, core_id, num_cores); + initialize(b, In_b, N_RX, core_id, num_cores); + + initialize_zeros(s, N_TX, core_id, num_cores); + initialize_zeros(y, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores); + + + /* Benchmark */ + if (core_id == 0) { + /* Computation of the Hermitian matrix */ + mempool_start_benchmark(); + mempool_hermitian_f16s(ch_matrix, in_matrix, sigma, N_RX, N_TX); + mempool_stop_benchmark(); + /* Computation of the H^H*b vector */ + mempool_start_benchmark(); + mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX); + mempool_stop_benchmark(); + /* Cholesky decomposition */ + mempool_start_benchmark(); + mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); + mempool_stop_benchmark(); + /* Solution of L*y = s */ + mempool_start_benchmark(); + mempool_Ltrisol_f16s(out_matrix, s, y, N_TX); + mempool_stop_benchmark(); + /* Solution of L^T*s = b */ + mempool_start_benchmark(); + mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + //verify_result(in_matrix, In_G, N_TX*N_TX, core_id); + //verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); + verify_result(s, Out_s, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + + +int main() { + // single_core_cholesky(); + // single_core_Axb(); + single_core_mimo_mmse(); + return 0; +} diff --git a/software/apps/mimo_mmse_f16/mimo_mmse_f16.h b/software/apps/mimo_mmse_f16/mimo_mmse_f16.h new file mode 100644 index 000000000..b611ef7f1 --- /dev/null +++ b/software/apps/mimo_mmse_f16/mimo_mmse_f16.h @@ -0,0 +1,371 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx); +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + __fp16 a; + __fp16 b; + __fp16 c0, c1, c2, c3; + __fp16 d0, d1, d2, d3; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.h %[as0], %[a], %[c0], %[as0];" + "fmadd.h %[as1], %[a], %[c1], %[as1];" + "fmadd.h %[as2], %[a], %[c2], %[as2];" + "fmadd.h %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.h %[bs0], %[a], %[d0], %[bs0];" + "fmadd.h %[bs1], %[a], %[d3], %[bs1];" + "fmadd.h %[bs2], %[a], %[d2], %[bs2];" + "fmadd.h %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.h %[as0], %[b], %[d0], %[as0];" + "fmadd.h %[as1], %[b], %[d1], %[as1];" + "fmadd.h %[as2], %[b], %[d2], %[as2];" + "fmadd.h %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile ( + "fadd.h %[as0], %[as0], %[sigma];" + : [as0] "+&r" (as0) + : [sigma] "r" (sigma[i]) + :); + bs0 = (__fp16)0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.h %[as1], %[as1], %[sigma];" + : [as1] "+&r" (as1) + : [sigma] "r" (sigma[i]) + :); + bs1 = (__fp16)0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.h %[as2], %[as2], %[sigma];" + : [as2] "+&r" (as2) + : [sigma] "r" (sigma[i]) + :); + bs2 = (__fp16)0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.h %[as3], %[as3], %[sigma];" + : [as3] "+&r" (as3) + : [sigma] "r" (sigma[i]) + :); + bs3 = (__fp16)0.0f; + } + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + j += 4; + } while (j < (n_tx >> 2U)); + } + return; +} + +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j; + __fp16 a0, a1, a2, a3; + __fp16 b0, b1, b2, b3; + __fp16 c, d; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.h %[as0], %[a0], %[c], %[as0];" + "fmadd.h %[as1], %[a1], %[c], %[as1];" + "fmadd.h %[as2], %[a2], %[c], %[as2];" + "fmadd.h %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.h %[bs0], %[a0], %[d], %[bs0];" + "fmadd.h %[bs1], %[a1], %[d], %[bs1];" + "fmadd.h %[bs2], %[a2], %[d], %[bs2];" + "fmadd.h %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.h %[as0], %[b0], %[d], %[as0];" + "fmadd.h %[as1], %[b1], %[d], %[as1];" + "fmadd.h %[as2], %[b2], %[d], %[as2];" + "fmadd.h %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } while (i < (n_tx >> 4U)); + return; +} + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ab, bb; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * (i * n + i)]; + ab = in[2U * i]; + bb = in[2U * i + 1]; + asm volatile ( + "fsub.h %[ax], %[ab], %[as];" + "fsub.h %[bx], %[bb], %[bs];" + "fdiv.h %[ax], %[ax], %[diag];" + "fdiv.h %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ab, bb; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + ab = in[2 * (n - i - 1)]; + bb = in[2 * (n - i - 1) + 1]; + asm volatile ( + "fsub.h %[ax], %[ab], %[as];" + "fsub.h %[bx], %[bb], %[bs];" + "fdiv.h %[ax], %[ax], %[diag];" + "fdiv.h %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl b/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl new file mode 100644 index 000000000..fc8b71a7e --- /dev/null +++ b/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl @@ -0,0 +1,39 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) + +// Inputs + +float In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; + +float In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; + +float In_b[${2 * N_rx}] = ${array_to_cstr(b)}; + +float In_sigma[${N_tx}] = ${array_to_cstr(sigma)}; + +// Outputs + +float Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; + +float Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; + +float Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; + +float Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.py b/software/apps/mimo_mmse_f32/data_mimo_mmse.py new file mode 100644 index 000000000..297702545 --- /dev/null +++ b/software/apps/mimo_mmse_f32/data_mimo_mmse.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + + # Create channel matrix + H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float32) + # Create input vector + b = np.random.rand(N_rx).astype(np.float32) + 1.j * np.random.rand(N_rx).astype(np.float32) + # Generate noise variance + sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float32)) + + # Matrix to be inverted in MMSE estimator + H_h = np.asmatrix(H).H + + G = H_h * H + G = G + np.diag(sigma) + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Linear system solution + s = np.transpose(np.dot(H_h, b)) + y = solve_triangular(L, s, lower=True) + x = solve_triangular(np.transpose(L), y) + + H = np.reshape(H, (N_tx*N_rx, -1), order='C') + G = np.reshape(G, (N_tx*N_tx, -1), order='C') + L = np.reshape(L, (N_tx*N_tx, -1), order='C') + H_RI = np.zeros(2*N_tx*N_rx) + G_RI = np.zeros(2*N_tx*N_tx) + L_RI = np.zeros(2*N_tx*N_tx) + b_RI = np.zeros(2*N_rx) + s_RI = np.zeros(2*N_tx) + x_RI = np.zeros(2*N_tx) + y_RI = np.zeros(2*N_tx) + + for i in range(N_tx*N_rx): + H_RI[2*i] = H[i].real + H_RI[2*i+1] = H[i].imag + for i in range(N_tx*N_tx): + G_RI[2*i] = G[i].real + G_RI[2*i+1] = G[i].imag + L_RI[2*i] = L[i].real + L_RI[2*i+1] = L[i].imag + + for i in range(N_rx): + b_RI[2*i] = b[i].real + b_RI[2*i+1] = b[i].imag + for i in range(N_tx): + s_RI[2*i] = s[i].real + s_RI[2*i+1] = s[i].imag + x_RI[2*i] = x[i].real + x_RI[2*i+1] = x[i].imag + y_RI[2*i] = y[i].real + y_RI[2*i+1] = y[i].imag + + sigma = sigma.astype(np.float32) + H_RI = H_RI.astype(np.float32) + G_RI = G_RI.astype(np.float32) + L_RI = L_RI.astype(np.float32) + b_RI = b_RI.astype(np.float32) + x_RI = x_RI.astype(np.float32) + y_RI = y_RI.astype(np.float32) + s_RI = s_RI.astype(np.float32) + print("Channel matrix in (Re, Im) format:\n", H_RI) + print("Hermitian matrix in (Re, Im) format:\n", G_RI) + print("Cholesky dec. in (Re, Im) format:\n", L_RI) + print("Input vector in (Re, Im) format:\n", b_RI) + print("Output vector in (Re, Im) format:\n", x_RI) + + + kwargs = {'name': 'mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c new file mode 100644 index 000000000..650829108 --- /dev/null +++ b/software/apps/mimo_mmse_f32/main.c @@ -0,0 +1,125 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "mimo_mmse_f32.h" + +/* DATA */ +//#include "data_choldec_f32.h" +//#include "data_Axb_f32.h" +#include "data_mimo_mmse_f32.h" + +dump(res,1); + +float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +float sigma[2 * N_TX] __attribute__((section(".l1"))); +float b[2 * N_RX] __attribute__((section(".l1"))); + +float s[2 * N_TX] __attribute__((section(".l1"))); +float x[2 * N_TX] __attribute__((section(".l1"))); +float y[2 * N_TX] __attribute__((section(".l1"))); + +void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = data[i]; + } + mempool_barrier(num_cores); + return; +} + +void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = 0.0f; + } + mempool_barrier(num_cores); + return; +} + +void verify_result(float *pRes, float *pExp, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + float error; + float exp = pExp[i]; + float res = pRes[i]; + asm volatile( + "fsub.s %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + : ); + if (*(int32_t*)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + } + } + } +} + +void write_result(float *pRes, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + + float in = pRes[i]; + dump_res(*(uint32_t*)&in); + + } + } +} + +// Driver program +void single_core_mimo_mmse() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(sigma, In_sigma, N_TX, core_id, num_cores); + initialize(b, In_b, N_RX, core_id, num_cores); + + initialize_zeros(s, N_TX, core_id, num_cores); + initialize_zeros(y, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores); + + + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); + + mempool_cholesky_f32s(in_matrix, out_matrix, N_TX); + mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); + mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); + // verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); + // verify_result(s, Out_s, N_TX, core_id); + // verify_result(y, Out_y, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + + +int main() { + // single_core_cholesky(); + // single_core_Axb(); + single_core_mimo_mmse(); + return 0; +} diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h new file mode 100644 index 000000000..aa50eef54 --- /dev/null +++ b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h @@ -0,0 +1,375 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + + +dump(results,1); + +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx); +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + float a; + float b; + float c0, c1, c2, c3; + float d0, d1, d2, d3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.s %[as0], %[a], %[c0], %[as0];" + "fmadd.s %[as1], %[a], %[c1], %[as1];" + "fmadd.s %[as2], %[a], %[c2], %[as2];" + "fmadd.s %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.s %[bs0], %[a], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a], %[d1], %[bs1];" + "fmadd.s %[bs2], %[a], %[d2], %[bs2];" + "fmadd.s %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.s %[as0], %[b], %[d0], %[as0];" + "fmadd.s %[as1], %[b], %[d1], %[as1];" + "fmadd.s %[as2], %[b], %[d2], %[as2];" + "fmadd.s %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile ( + "fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r" (as0) + : [sigma] "r" (sigma[i]) + :); + bs0 = 0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r" (as1) + : [sigma] "r" (sigma[i]) + :); + bs1 = 0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r" (as2) + : [sigma] "r" (sigma[i]) + :); + bs2 = 0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r" (as3) + : [sigma] "r" (sigma[i]) + :); + bs3 = 0.0f; + } + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + j += 4; + } while (j < (n_tx >> 2U)); + } + return; +} + +void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j; + float a0, a1, a2, a3; + float b0, b1, b2, b3; + float c, d; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.s %[as0], %[a0], %[c], %[as0];" + "fmadd.s %[as1], %[a1], %[c], %[as1];" + "fmadd.s %[as2], %[a2], %[c], %[as2];" + "fmadd.s %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.s %[bs0], %[a0], %[d], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d], %[bs1];" + "fmadd.s %[bs2], %[a2], %[d], %[bs2];" + "fmadd.s %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.s %[as0], %[b0], %[d], %[as0];" + "fmadd.s %[as1], %[b1], %[d], %[as1];" + "fmadd.s %[as2], %[b2], %[d], %[as2];" + "fmadd.s %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } while (i < (n_tx >> 4U)); + return; +} + +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { + + register float sum; + float a, b; + float c, d; + float diag; // Diagonal element + float ap, bp; // Pivot element + float as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.s %[sum], %[a], %[a], %[sum];" + "fmadd.s %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.s %[ap], %[ap], %[sum];" + "fsqrt.s %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = 0.0f; + bs = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.s %[ap], %[ap], %[as];" + "fsub.s %[bp], %[bp], %[bs];" + "fdiv.s %[ap], %[ap], %[diag];" + "fdiv.s %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + + +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ab, bb; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = 0.0f; + bs = 0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * (i * n + i)]; + ab = in[2U * i]; + bb = in[2U * i + 1]; + asm volatile ( + "fsub.s %[ax], %[ab], %[as];" + "fsub.s %[bx], %[bb], %[bs];" + "fdiv.s %[ax], %[ax], %[diag];" + "fdiv.s %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ab, bb; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = 0.0f; + bs = 0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + ab = in[2 * (n - i - 1)]; + bb = in[2 * (n - i - 1) + 1]; + asm volatile ( + "fsub.s %[ax], %[ab], %[as];" + "fsub.s %[bx], %[bb], %[bs];" + "fdiv.s %[ax], %[ax], %[diag];" + "fdiv.s %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + diff --git a/software/apps/mimo_zf_f16/data_mimo_zf.h.tpl b/software/apps/mimo_zf_f16/data_mimo_zf.h.tpl new file mode 100644 index 000000000..9dd2719a6 --- /dev/null +++ b/software/apps/mimo_zf_f16/data_mimo_zf.h.tpl @@ -0,0 +1,37 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) + +// Inputs + +__fp16 In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; + +__fp16 In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; + +__fp16 In_b[${2 * N_rx}] = ${array_to_cstr(b)}; + +// Outputs + +__fp16 Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; + +__fp16 Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; + +__fp16 Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; + +__fp16 Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; diff --git a/software/apps/mimo_zf_f16/data_mimo_zf.py b/software/apps/mimo_zf_f16/data_mimo_zf.py new file mode 100644 index 000000000..87d19b655 --- /dev/null +++ b/software/apps/mimo_zf_f16/data_mimo_zf.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_mimo_zf.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + + # Create channel matrix + H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float16) + # Create input vector + b = np.random.rand(N_rx).astype(np.float16) + 1.j * np.random.rand(N_rx).astype(np.float16) + + # Matrix to be inverted in ZF estimator + H_h = (np.asmatrix(H).H) + G = H_h * H + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Linear system solution + s = np.transpose(np.dot(H_h, b)) + y = solve_triangular(L, s, lower=True) + x = solve_triangular(np.transpose(L), y) + + s = np.transpose(np.dot(np.asmatrix(H).H, b)) + y = solve_triangular(L, s, lower=True) + x = solve_triangular(np.transpose(L), y) + + H = np.reshape(H, (N_tx*N_rx, -1), order='C') + G = np.reshape(G, (N_tx*N_tx, -1), order='C') + L = np.reshape(L, (N_tx*N_tx, -1), order='C') + H_RI = np.zeros(2*N_tx*N_rx) + G_RI = np.zeros(2*N_tx*N_tx) + L_RI = np.zeros(2*N_tx*N_tx) + b_RI = np.zeros(2*N_rx) + s_RI = np.zeros(2*N_tx) + x_RI = np.zeros(2*N_tx) + y_RI = np.zeros(2*N_tx) + + for i in range(N_tx*N_rx): + H_RI[2*i] = H[i].real + H_RI[2*i+1] = H[i].imag + for i in range(N_tx*N_tx): + G_RI[2*i] = G[i].real + G_RI[2*i+1] = G[i].imag + L_RI[2*i] = L[i].real + L_RI[2*i+1] = L[i].imag + + for i in range(N_rx): + b_RI[2*i] = b[i].real + b_RI[2*i+1] = b[i].imag + for i in range(N_tx): + s_RI[2*i] = s[i].real + s_RI[2*i+1] = s[i].imag + x_RI[2*i] = x[i].real + x_RI[2*i+1] = x[i].imag + y_RI[2*i] = y[i].real + y_RI[2*i+1] = y[i].imag + + H_RI = H_RI.astype(np.float16) + G_RI = G_RI.astype(np.float16) + L_RI = L_RI.astype(np.float16) + b_RI = b_RI.astype(np.float16) + x_RI = x_RI.astype(np.float16) + y_RI = y_RI.astype(np.float16) + s_RI = s_RI.astype(np.float16) + print("Channel matrix in (Re, Im) format:\n", H_RI) + print("Hermitian matrix in (Re, Im) format:\n", G_RI) + print("Cholesky dec. in (Re, Im) format:\n", L_RI) + print("Input vector in (Re, Im) format:\n", b_RI) + print("Output vector in (Re, Im) format:\n", x_RI) + + + kwargs = {'name': 'mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/apps/mimo_zf_f16/data_mimo_zf_f16.h b/software/apps/mimo_zf_f16/data_mimo_zf_f16.h new file mode 100644 index 000000000..a7340c52c --- /dev/null +++ b/software/apps/mimo_zf_f16/data_mimo_zf_f16.h @@ -0,0 +1,78 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#define N_TX (4) +#define N_RX (32) + +// Inputs + +__fp16 In_H[256] = { +0.486328125f, 0.2607421875f, 0.55078125f, 0.15478515625f, 0.68505859375f, 0.1087646484375f, 0.81494140625f, 0.98291015625f, +0.34326171875f, 0.55517578125f, 0.88232421875f, 0.82666015625f, 0.625f, 0.0963134765625f, 0.67919921875f, 0.06829833984375f, +0.371826171875f, 0.63232421875f, 0.1622314453125f, 0.303466796875f, 0.88916015625f, 0.5693359375f, 0.2685546875f, 0.98828125f, +0.83447265625f, 0.71240234375f, 0.09796142578125f, 0.74951171875f, 0.071044921875f, 0.34326171875f, 0.701171875f, 0.1416015625f, +0.1551513671875f, 0.47314453125f, 0.1959228515625f, 0.1688232421875f, 0.94970703125f, 0.384765625f, 0.41552734375f, 0.80712890625f, +0.0760498046875f, 0.681640625f, 0.7861328125f, 0.81884765625f, 0.61083984375f, 0.52490234375f, 0.312744140625f, 0.0546875f, +0.765625f, 0.468994140625f, 0.39892578125f, 0.2408447265625f, 0.328125f, 0.44189453125f, 0.1298828125f, 0.054595947265625f, +0.67529296875f, 0.42431640625f, 0.382568359375f, 0.42138671875f, 0.43310546875f, 0.041595458984375f, 0.94580078125f, 0.05682373046875f, +0.54150390625f, 0.19091796875f, 0.7109375f, 0.8828125f, 0.6455078125f, 0.01959228515625f, 0.199462890625f, 0.160888671875f, +0.9541015625f, 0.20947265625f, 0.26953125f, 0.81591796875f, 0.350341796875f, 0.89599609375f, 0.1773681640625f, 0.420654296875f, +0.720703125f, 0.350341796875f, 0.69580078125f, 0.93310546875f, 0.61767578125f, 0.62890625f, 0.69775390625f, 0.88037109375f, +0.865234375f, 0.923828125f, 0.5263671875f, 0.7548828125f, 0.31396484375f, 0.8798828125f, 0.88232421875f, 0.97705078125f, +0.87451171875f, 0.1300048828125f, 0.08160400390625f, 0.6376953125f, 0.80712890625f, 0.650390625f, 0.56005859375f, 0.83935546875f, +0.136962890625f, 0.9365234375f, 0.8486328125f, 0.927734375f, 0.7431640625f, 0.8720703125f, 0.3857421875f, 0.060760498046875f, +0.5068359375f, 0.859375f, 0.89111328125f, 0.56640625f, 0.0009298324584960938f, 0.491943359375f, 0.08587646484375f, 0.7529296875f, +0.032806396484375f, 0.401123046875f, 0.78662109375f, 0.8662109375f, 0.52392578125f, 0.59033203125f, 0.77490234375f, 0.7744140625f, +0.75048828125f, 0.405517578125f, 0.07562255859375f, 0.978515625f, 0.96630859375f, 0.1373291015625f, 0.2354736328125f, 0.77294921875f, +0.96923828125f, 0.0382080078125f, 0.5166015625f, 0.66943359375f, 0.222412109375f, 0.0236663818359375f, 0.1715087890625f, 0.701171875f, +0.8271484375f, 0.31005859375f, 0.1357421875f, 0.2137451171875f, 0.25537109375f, 0.06292724609375f, 0.64013671875f, 0.8505859375f, +0.31494140625f, 0.59716796875f, 0.51708984375f, 0.8056640625f, 0.06427001953125f, 0.196533203125f, 0.5400390625f, 0.82666015625f, +0.45703125f, 0.99755859375f, 0.00197601318359375f, 0.484619140625f, 0.136962890625f, 0.321533203125f, 0.0987548828125f, 0.0845947265625f, +0.5498046875f, 0.80224609375f, 0.2181396484375f, 0.92626953125f, 0.255126953125f, 0.505859375f, 0.1473388671875f, 0.61865234375f, +0.95458984375f, 0.1343994140625f, 0.93994140625f, 0.206787109375f, 0.96142578125f, 0.69677734375f, 0.306396484375f, 0.9072265625f, +0.5986328125f, 0.52197265625f, 0.681640625f, 0.438720703125f, 0.1802978515625f, 0.9072265625f, 0.321533203125f, 0.80615234375f, +0.5361328125f, 0.47216796875f, 0.775390625f, 0.607421875f, 0.39453125f, 0.97314453125f, 0.206298828125f, 0.5380859375f, +0.54541015625f, 0.9560546875f, 0.900390625f, 0.64599609375f, 0.2161865234375f, 0.92626953125f, 0.159912109375f, 0.8642578125f, +0.52783203125f, 0.57275390625f, 0.31298828125f, 0.1982421875f, 0.98193359375f, 0.6328125f, 0.9296875f, 0.62744140625f, +0.027008056640625f, 0.0230865478515625f, 0.6708984375f, 0.42431640625f, 0.8017578125f, 0.1444091796875f, 0.28125f, 0.8798828125f, +0.841796875f, 0.34228515625f, 0.0726318359375f, 0.68603515625f, 0.86474609375f, 0.3125f, 0.943359375f, 0.4677734375f, +0.1356201171875f, 0.2071533203125f, 0.46923828125f, 0.58056640625f, 0.319580078125f, 0.54248046875f, 0.7490234375f, 0.67578125f, +0.796875f, 0.37890625f, 0.623046875f, 0.92578125f, 0.73388671875f, 0.1502685546875f, 0.206787109375f, 0.89990234375f, +0.998046875f, 0.67626953125f, 0.302978515625f, 0.87109375f, 0.0245361328125f, 0.78271484375f, 0.55224609375f, 0.044677734375f,}; + +__fp16 In_G[32] = { +23.6875f, 0.0f, 17.984375f, 3.66015625f, 16.796875f, 1.79296875f, 16.546875f, 3.775390625f, +17.984375f, -3.66015625f, 25.015625f, 0.0f, 17.03125f, -1.55859375f, 17.375f, 0.46826171875f, +16.796875f, -1.79296875f, 17.03125f, 1.55859375f, 21.125f, 0.0f, 16.578125f, 3.55859375f, +16.546875f, -3.775390625f, 17.375f, -0.46826171875f, 16.578125f, -3.55859375f, 23.9375f, 0.0f,}; + +__fp16 In_b[64] = { +0.94921875f, 0.853515625f, 0.413818359375f, 0.1746826171875f, 0.5927734375f, 0.419189453125f, 0.79638671875f, 0.56396484375f, +0.251953125f, 0.6005859375f, 0.1702880859375f, 0.66064453125f, 0.7001953125f, 0.810546875f, 0.7568359375f, 0.9443359375f, +0.7431640625f, 0.19482421875f, 0.131591796875f, 0.397705078125f, 0.65771484375f, 0.33251953125f, 0.94921875f, 0.3486328125f, +0.39453125f, 0.315673828125f, 0.462890625f, 0.2034912109375f, 0.229736328125f, 0.241455078125f, 0.057586669921875f, 0.88671875f, +0.83203125f, 0.5849609375f, 0.66064453125f, 0.943359375f, 0.54638671875f, 0.08807373046875f, 0.97900390625f, 0.7822265625f, +0.8037109375f, 0.92041015625f, 0.947265625f, 0.56884765625f, 0.038665771484375f, 0.61572265625f, 0.53955078125f, 0.420654296875f, +0.6689453125f, 0.97998046875f, 0.36083984375f, 0.673828125f, 0.28564453125f, 0.26513671875f, 0.26806640625f, 0.1317138671875f, +0.0416259765625f, 0.78271484375f, 0.68701171875f, 0.139892578125f, 0.0189208984375f, 0.87841796875f, 0.285888671875f, 0.38134765625f,}; + +__fp16 In_sigma[4] = { +0.320556640625f, 0.3251953125f, 0.83544921875f, 0.3818359375f}; + +// Outputs + +__fp16 Out_L[32] = { +4.8671875f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, +3.6953125f, -0.751953125f, 3.287109375f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, +3.44921875f, -0.3681640625f, 1.220703125f, 0.0989990234375f, 2.75390625f, 0.0f, 0.0f, 0.0f, +3.400390625f, -0.77587890625f, 1.2861328125f, -0.048431396484375f, 1.087890625f, -0.70703125f, 2.904296875f, 0.0f,}; + +__fp16 Out_x[8] = { +0.376708984375f, 0.06390380859375f, 0.26708984375f, -0.1295166015625f, -0.04095458984375f, 0.308837890625f, 0.293701171875f, -0.046783447265625f,}; + +__fp16 Out_s[8] = { +17.796875f, 1.5859375f, 17.609375f, -1.962890625f, 14.65625f, 1.3701171875f, 17.28125f, -1.822265625f,}; + +__fp16 Out_y[8] = { +3.658203125f, 0.32568359375f, 1.1728515625f, -0.126708984375f, 0.173583984375f, 0.59228515625f, 0.85302734375f, -0.1358642578125f,}; diff --git a/software/apps/mimo_zf_f16/main.c b/software/apps/mimo_zf_f16/main.c new file mode 100644 index 000000000..00038e40c --- /dev/null +++ b/software/apps/mimo_zf_f16/main.c @@ -0,0 +1,127 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "mimo_zf_f16.h" + +/* DATA */ +//#include "data_choldec_f16.h" +//#include "data_Axb_f16.h" +#include "data_mimo_zf_f16.h" + +dump(res,1); + +__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 b[2 * N_RX] __attribute__((section(".l1"))); + +__fp16 s[2 * N_TX] __attribute__((section(".l1"))); +__fp16 x[2 * N_TX] __attribute__((section(".l1"))); +__fp16 y[2 * N_TX] __attribute__((section(".l1"))); + +void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = data[i]; + } + mempool_barrier(num_cores); + return; +} + +void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = (__fp16) (0x0000); + } + mempool_barrier(num_cores); + return; +} + +void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + __fp16 error; + __fp16 exp = pExp[i]; + __fp16 res = pRes[i]; + asm volatile( + "fsub.h %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + : ); + if (*(int32_t*)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + } + } + } +} + +void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + + __fp16 in = pRes[i]; + // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ + float cvt_out; + asm volatile( + "fcvt.h.s %[cvt_out], %[in];" + : [cvt_out] "=&r"(cvt_out) + : [in] "r" (in) + : ); + dump_res(*(uint32_t*)&cvt_out); + + } + } +} + +// Driver program +void single_core_zf_mmse() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(b, In_b, N_RX, core_id, num_cores); + + initialize_zeros(s, N_TX, core_id, num_cores); + initialize_zeros(y, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores); + + + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + + mempool_hermitian_f16s(ch_matrix, in_matrix, N_RX, N_TX); + mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX); + + mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); + mempool_Ltrisol_f16s(out_matrix, s, y, N_TX); + mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + + +int main() { + // single_core_cholesky(); + // single_core_Axb(); + single_core_mimo_mmse(); + return 0; +} diff --git a/software/apps/mimo_zf_f16/mimo_zf_f16.h b/software/apps/mimo_zf_f16/mimo_zf_f16.h new file mode 100644 index 000000000..08b5e96c1 --- /dev/null +++ b/software/apps/mimo_zf_f16/mimo_zf_f16.h @@ -0,0 +1,338 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx); +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); + +/* Computes the Hermitian matrix G = (H'*H) */ +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + __fp16 a; + __fp16 b; + __fp16 c0, c1, c2, c3; + __fp16 d0, d1, d2, d3; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.h %[as0], %[a], %[c0], %[as0];" + "fmadd.h %[as1], %[a], %[c1], %[as1];" + "fmadd.h %[as2], %[a], %[c2], %[as2];" + "fmadd.h %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.h %[bs0], %[a], %[d0], %[bs0];" + "fmadd.h %[bs1], %[a], %[d3], %[bs1];" + "fmadd.h %[bs2], %[a], %[d2], %[bs2];" + "fmadd.h %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.h %[as0], %[b], %[d0], %[as0];" + "fmadd.h %[as1], %[b], %[d1], %[as1];" + "fmadd.h %[as2], %[b], %[d2], %[as2];" + "fmadd.h %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + j += 4; + } while (j < (n_tx >> 2U)); + } + return; +} + +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j; + __fp16 a0, a1, a2, a3; + __fp16 b0, b1, b2, b3; + __fp16 c, d; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.h %[as0], %[a0], %[c], %[as0];" + "fmadd.h %[as1], %[a1], %[c], %[as1];" + "fmadd.h %[as2], %[a2], %[c], %[as2];" + "fmadd.h %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.h %[bs0], %[a0], %[d], %[bs0];" + "fmadd.h %[bs1], %[a1], %[d], %[bs1];" + "fmadd.h %[bs2], %[a2], %[d], %[bs2];" + "fmadd.h %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.h %[as0], %[b0], %[d], %[as0];" + "fmadd.h %[as1], %[b1], %[d], %[as1];" + "fmadd.h %[as2], %[b2], %[d], %[as2];" + "fmadd.h %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } while (i < (n_tx >> 4U)); + return; +} + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ab, bb; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * (i * n + i)]; + ab = in[2U * i]; + bb = in[2U * i + 1]; + asm volatile ( + "fsub.h %[ax], %[ab], %[as];" + "fsub.h %[bx], %[bb], %[bs];" + "fdiv.h %[ax], %[ax], %[diag];" + "fdiv.h %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ab, bb; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + ab = in[2 * (n - i - 1)]; + bb = in[2 * (n - i - 1) + 1]; + asm volatile ( + "fsub.h %[ax], %[ab], %[as];" + "fsub.h %[bx], %[bb], %[bs];" + "fdiv.h %[ax], %[ax], %[diag];" + "fdiv.h %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + diff --git a/software/apps/mimo_zf_f32/data_mimo_zf.h.tpl b/software/apps/mimo_zf_f32/data_mimo_zf.h.tpl new file mode 100644 index 000000000..fc8b71a7e --- /dev/null +++ b/software/apps/mimo_zf_f32/data_mimo_zf.h.tpl @@ -0,0 +1,39 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) + +// Inputs + +float In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; + +float In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; + +float In_b[${2 * N_rx}] = ${array_to_cstr(b)}; + +float In_sigma[${N_tx}] = ${array_to_cstr(sigma)}; + +// Outputs + +float Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; + +float Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; + +float Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; + +float Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; diff --git a/software/apps/mimo_zf_f32/data_mimo_zf.py b/software/apps/mimo_zf_f32/data_mimo_zf.py new file mode 100644 index 000000000..edbdbea5e --- /dev/null +++ b/software/apps/mimo_zf_f32/data_mimo_zf.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import numpy as np +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_mimo_zf.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + + # Create channel matrix + H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float32) + # Create input vector + b = np.random.rand(N_rx).astype(np.float32) + 1.j * np.random.rand(N_rx).astype(np.float32) + # Generate noise variance + sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float32)) + + # Matrix to be inverted in MMSE estimator + H_h = (np.asmatrix(H).H) + G = H_h * H + G = G + np.diag(sigma) + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Linear system solution + s = np.transpose(np.dot(H_h, b)) + y = solve_triangular(L, s, lower=True) + x = solve_triangular(np.transpose(L), y) + + H = np.reshape(H, (N_tx*N_rx, -1), order='C') + G = np.reshape(G, (N_tx*N_tx, -1), order='C') + L = np.reshape(L, (N_tx*N_tx, -1), order='C') + H_RI = np.zeros(2*N_tx*N_rx) + G_RI = np.zeros(2*N_tx*N_tx) + L_RI = np.zeros(2*N_tx*N_tx) + b_RI = np.zeros(2*N_rx) + s_RI = np.zeros(2*N_tx) + x_RI = np.zeros(2*N_tx) + y_RI = np.zeros(2*N_tx) + + for i in range(N_tx*N_rx): + H_RI[2*i] = H[i].real + H_RI[2*i+1] = H[i].imag + for i in range(N_tx*N_tx): + G_RI[2*i] = G[i].real + G_RI[2*i+1] = G[i].imag + L_RI[2*i] = L[i].real + L_RI[2*i+1] = L[i].imag + + for i in range(N_rx): + b_RI[2*i] = b[i].real + b_RI[2*i+1] = b[i].imag + for i in range(N_tx): + s_RI[2*i] = s[i].real + s_RI[2*i+1] = s[i].imag + x_RI[2*i] = x[i].real + x_RI[2*i+1] = x[i].imag + y_RI[2*i] = y[i].real + y_RI[2*i+1] = y[i].imag + + sigma = sigma.astype(np.float32) + H_RI = H_RI.astype(np.float32) + G_RI = G_RI.astype(np.float32) + L_RI = L_RI.astype(np.float32) + b_RI = b_RI.astype(np.float32) + x_RI = x_RI.astype(np.float32) + y_RI = y_RI.astype(np.float32) + s_RI = s_RI.astype(np.float32) + print("Channel matrix in (Re, Im) format:\n", H_RI) + print("Hermitian matrix in (Re, Im) format:\n", G_RI) + print("Cholesky dec. in (Re, Im) format:\n", L_RI) + print("Input vector in (Re, Im) format:\n", b_RI) + print("Output vector in (Re, Im) format:\n", x_RI) + + + kwargs = {'name': 'mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/apps/mimo_zf_f32/data_mimo_zf_f32.h b/software/apps/mimo_zf_f32/data_mimo_zf_f32.h new file mode 100644 index 000000000..d0930ddff --- /dev/null +++ b/software/apps/mimo_zf_f32/data_mimo_zf_f32.h @@ -0,0 +1,78 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#define N_TX (4) +#define N_RX (32) + +// Inputs + +float In_H[256] = { +0.6897557377815247f, 0.9375356435775757f, 0.10870859771966934f, 0.7795871496200562f, 0.36894166469573975f, 0.7750101685523987f, 0.9160564541816711f, 0.17034123837947845f, +0.7056236863136292f, 0.27334508299827576f, 0.11579038202762604f, 0.6301944255828857f, 0.8777735233306885f, 0.4031212627887726f, 0.16747084259986877f, 0.08119920641183853f, +0.8847065567970276f, 0.2667674124240875f, 0.45241329073905945f, 0.13887004554271698f, 0.3745780289173126f, 0.31820598244667053f, 0.06127072870731354f, 0.6448251605033875f, +0.08859016746282578f, 0.832530677318573f, 0.14670366048812866f, 0.41125568747520447f, 0.5908426642417908f, 0.15285778045654297f, 0.12690463662147522f, 0.7779843807220459f, +0.7191795706748962f, 0.19999703764915466f, 0.8902764320373535f, 0.7238638401031494f, 0.9212520122528076f, 0.05499245971441269f, 0.5841647982597351f, 0.7354506254196167f, +0.3933694660663605f, 0.23663489520549774f, 0.10011333972215652f, 0.9983391165733337f, 0.44988447427749634f, 0.4403333365917206f, 0.8582252264022827f, 0.45730090141296387f, +0.5152258276939392f, 0.9973276257514954f, 0.17053824663162231f, 0.5374223589897156f, 0.5782082080841064f, 0.7768956422805786f, 0.26673752069473267f, 0.990588366985321f, +0.5027029514312744f, 0.2988073229789734f, 0.3256685733795166f, 0.06763900816440582f, 0.8348881602287292f, 0.6752308011054993f, 0.6536000370979309f, 0.2972516417503357f, +0.30210447311401367f, 0.42418965697288513f, 0.3848784863948822f, 0.942064642906189f, 0.4612175226211548f, 0.4401791989803314f, 0.7007406949996948f, 0.27294859290122986f, +0.8886638283729553f, 0.8026995062828064f, 0.6569862961769104f, 0.6011823415756226f, 0.30776262283325195f, 0.2230992466211319f, 0.18612661957740784f, 0.24618412554264069f, +0.8978050351142883f, 0.10150571167469025f, 0.7967559099197388f, 0.6299114227294922f, 0.09753811359405518f, 0.9603077173233032f, 0.04111746326088905f, 0.609610378742218f, +0.9992632269859314f, 0.5774734616279602f, 0.4679752290248871f, 0.6053263545036316f, 0.35806185007095337f, 0.1269548386335373f, 0.07291553169488907f, 0.06622314453125f, +0.7965883612632751f, 0.9495334625244141f, 0.660209596157074f, 0.016442935913801193f, 0.30878376960754395f, 0.005198406055569649f, 0.3548679053783417f, 0.42843592166900635f, +0.07762084901332855f, 0.9672970175743103f, 0.9423888921737671f, 0.1554131656885147f, 0.36317968368530273f, 0.24138855934143066f, 0.8689433932304382f, 0.8843641877174377f, +0.46789461374282837f, 0.7064928412437439f, 0.5725688338279724f, 0.6684339046478271f, 0.8895378708839417f, 0.049572233110666275f, 0.9692845344543457f, 0.13912451267242432f, +0.44184356927871704f, 0.4346783459186554f, 0.8803675770759583f, 0.8083904385566711f, 0.5910122990608215f, 0.21286213397979736f, 0.02254577912390232f, 0.7622904777526855f, +0.09437636286020279f, 0.4349789321422577f, 0.9496524930000305f, 0.2050684690475464f, 0.6889544725418091f, 0.12707267701625824f, 0.9470899105072021f, 0.8238529562950134f, +0.7702485918998718f, 0.3393433392047882f, 0.8587484955787659f, 0.9145575761795044f, 0.02471528947353363f, 0.6608330607414246f, 0.9423571228981018f, 0.19534248113632202f, +0.20729772746562958f, 0.46567320823669434f, 0.3595926761627197f, 0.17177632451057434f, 0.7940476536750793f, 0.9702233076095581f, 0.9400234222412109f, 0.31777530908584595f, +0.5900509357452393f, 0.3770889937877655f, 0.07090768963098526f, 0.6194389462471008f, 0.6601574420928955f, 0.0046559288166463375f, 0.8538184762001038f, 0.6262005567550659f, +0.8612818121910095f, 0.22162140905857086f, 0.7087401747703552f, 0.3004414737224579f, 0.07500012964010239f, 0.7666949033737183f, 0.5386490821838379f, 0.010200037620961666f, +0.029416149482131004f, 0.5284409523010254f, 0.4974640905857086f, 0.5397548079490662f, 0.2807556092739105f, 0.5129676461219788f, 0.7969377636909485f, 0.9361082911491394f, +0.5516034364700317f, 0.2685200870037079f, 0.4497321546077728f, 0.39106276631355286f, 0.8146396279335022f, 0.7131213545799255f, 0.7893998622894287f, 0.22323215007781982f, +0.9454063177108765f, 0.37871137261390686f, 0.15809187293052673f, 0.7792906761169434f, 0.6577600836753845f, 0.13144618272781372f, 0.9307937026023865f, 0.7527522444725037f, +0.979400634765625f, 0.14301803708076477f, 0.4216887056827545f, 0.02089082822203636f, 0.5287796258926392f, 0.210629403591156f, 0.8205571174621582f, 0.006929468363523483f, +0.1672324389219284f, 0.30972301959991455f, 0.41427892446517944f, 0.7197050452232361f, 0.6161407232284546f, 0.5662662386894226f, 0.7796007990837097f, 0.40706464648246765f, +0.8663144111633301f, 0.6405160427093506f, 0.4213223457336426f, 0.6278231143951416f, 0.27279362082481384f, 0.7468312382698059f, 0.5566102862358093f, 0.8310881853103638f, +0.8967872858047485f, 0.8528995513916016f, 0.9224050641059875f, 0.22050093114376068f, 0.06963960081338882f, 0.18302348256111145f, 0.47623223066329956f, 0.24480661749839783f, +0.13007594645023346f, 0.903130054473877f, 0.9736942648887634f, 0.2995285391807556f, 0.20108923316001892f, 0.48618343472480774f, 0.940943717956543f, 0.5837796330451965f, +0.4986701011657715f, 0.2912686765193939f, 0.18400995433330536f, 0.7026422619819641f, 0.18747784197330475f, 0.5563307404518127f, 0.33490902185440063f, 0.7021719217300415f, +0.3413770794868469f, 0.951179027557373f, 0.9150703549385071f, 0.9375289678573608f, 0.07147141546010971f, 0.6759666204452515f, 0.8945677876472473f, 0.8893424272537231f, +0.40491998195648193f, 0.42193523049354553f, 0.1483861804008484f, 0.9507951736450195f, 0.9218059778213501f, 0.0817909985780716f, 0.2722267210483551f, 0.012310515157878399f,}; + +float In_G[32] = { +24.25750732421875f, 0.0f, 17.349925994873047f, 0.5557441711425781f, 14.420886039733887f, -0.07548666000366211f, 17.74555206298828f, -2.6107892990112305f, +17.349925994873047f, -0.5557441711425781f, 23.721651077270508f, 0.0f, 13.834211349487305f, -1.6208009719848633f, 17.85639190673828f, -1.9040422439575195f, +14.420886039733887f, 0.07548666000366211f, 13.834211349487305f, 1.6208009719848633f, 18.477989196777344f, 0.0f, 15.409793853759766f, -1.2391786575317383f, +17.74555206298828f, 2.6107892990112305f, 17.85639190673828f, 1.9040422439575195f, 15.409793853759766f, 1.2391786575317383f, 24.90799331665039f, 0.0f,}; + +float In_b[64] = { +0.6690350770950317f, 0.8770641684532166f, 0.8081755638122559f, 0.5595823526382446f, 0.34648895263671875f, 0.7148478031158447f, 0.6602845788002014f, 0.7828576564788818f, +0.5714698433876038f, 0.37840455770492554f, 0.44473519921302795f, 0.07128163427114487f, 0.000651157577522099f, 0.61905837059021f, 0.9758675694465637f, 0.9353494048118591f, +0.24781666696071625f, 0.5510500073432922f, 0.3525501787662506f, 0.4439324140548706f, 0.22235047817230225f, 0.4755472242832184f, 0.09723395109176636f, 0.5387508869171143f, +0.5852324366569519f, 0.45369061827659607f, 0.4790390431880951f, 0.6127111315727234f, 0.49991247057914734f, 0.8593834638595581f, 0.7690622210502625f, 0.6138290762901306f, +0.3485807180404663f, 0.37408146262168884f, 0.6353916525840759f, 0.8206998109817505f, 0.5631452202796936f, 0.7861683368682861f, 0.8243831396102905f, 0.42831605672836304f, +0.7609893679618835f, 0.0559641569852829f, 0.4057948887348175f, 0.6814903616905212f, 0.21642974019050598f, 0.16290532052516937f, 0.38927870988845825f, 0.04039851576089859f, +0.3550775647163391f, 0.8469221591949463f, 0.07768834382295609f, 0.9962507486343384f, 0.6816981434822083f, 0.15270540118217468f, 0.07283550500869751f, 0.6096854209899902f, +0.24860939383506775f, 0.9116551280021667f, 0.40090224146842957f, 0.18256144225597382f, 0.5174822211265564f, 0.1793946623802185f, 0.7341713905334473f, 0.1344316154718399f,}; + +float In_sigma[4] = { +0.5048574209213257f, 0.7969616651535034f, 0.626442551612854f, 0.3913288712501526f}; + +// Outputs + +float Out_L[32] = { +4.9251909255981445f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, +3.522691011428833f, -0.11283707618713379f, 3.361482858657837f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, +2.927985191345215f, 0.015326646156609058f, 1.0476192235946655f, 0.36782118678092957f, 2.9448020458221436f, 0.0f, 0.0f, 0.0f, +3.603018045425415f, 0.5300889611244202f, 1.5540423393249512f, -0.11002621799707413f, 1.108567476272583f, 0.14574278891086578f, 2.8227546215057373f, 0.0f,}; + +float Out_x[8] = { +0.34475764632225037f, 0.013116016983985901f, 0.07680277526378632f, -0.055382680147886276f, 0.35594642162323f, 0.11056525260210037f, 0.14906658232212067f, -0.0037779947742819786f,}; + +float Out_s[8] = { +17.44455337524414f, 1.2580506801605225f, 15.267782211303711f, 0.6289433240890503f, 14.788368225097656f, 2.154991626739502f, 16.390758514404297f, 3.294201135635376f,}; + +float Out_y[8] = { +3.5419039726257324f, 0.2554318606853485f, 0.821639358997345f, 0.03831460699439049f, 1.213992714881897f, 0.3431299924850464f, 0.4207783639431f, -0.010664352215826511f,}; diff --git a/software/apps/mimo_zf_f32/main.c b/software/apps/mimo_zf_f32/main.c new file mode 100644 index 000000000..698796397 --- /dev/null +++ b/software/apps/mimo_zf_f32/main.c @@ -0,0 +1,119 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "mimo_zf_f32.h" + +/* DATA */ +//#include "data_choldec_f32.h" +//#include "data_Axb_f32.h" +#include "data_mimo_zf_f32.h" + +dump(res,1); + +float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +float b[2 * N_RX] __attribute__((section(".l1"))); + +float s[2 * N_TX] __attribute__((section(".l1"))); +float x[2 * N_TX] __attribute__((section(".l1"))); +float y[2 * N_TX] __attribute__((section(".l1"))); + +void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = data[i]; + } + mempool_barrier(num_cores); + return; +} + +void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i++) { + matrix[i] = 0.0f; + } + mempool_barrier(num_cores); + return; +} + +void verify_result(float *pRes, float *pExp, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + float error; + float exp = pExp[i]; + float res = pRes[i]; + asm volatile( + "fsub.s %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + : ); + if (*(int32_t*)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + } + } + } +} + +void write_result(float *pRes, uint32_t dim, uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + + float in = pRes[i]; + dump_res(*(uint32_t*)&in); + + } + } +} + +// Driver program +void single_core_mimo_zf_cholesky() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(b, In_b, N_RX, core_id, num_cores); + + initialize_zeros(s, N_TX, core_id, num_cores); + initialize_zeros(y, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores); + + + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_hermitian_f32s(ch_matrix, in_matrix, N_RX, N_TX); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); + + mempool_cholesky_f32s(in_matrix, out_matrix, N_TX); + mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); + mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + + +int main() { + // single_core_cholesky(); + // single_core_Axb(); + single_core_mimo_mmse(); + return 0; +} diff --git a/software/apps/mimo_zf_f32/mimo_zf_f32.h b/software/apps/mimo_zf_f32/mimo_zf_f32.h new file mode 100644 index 000000000..0e1cd5811 --- /dev/null +++ b/software/apps/mimo_zf_f32/mimo_zf_f32.h @@ -0,0 +1,342 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + + +dump(results,1); + +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx); +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); + +/* Computes the Hermitian matrix G = (H'*H) */ +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + float a; + float b; + float c0, c1, c2, c3; + float d0, d1, d2, d3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.s %[as0], %[a], %[c0], %[as0];" + "fmadd.s %[as1], %[a], %[c1], %[as1];" + "fmadd.s %[as2], %[a], %[c2], %[as2];" + "fmadd.s %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.s %[bs0], %[a], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a], %[d3], %[bs1];" + "fmadd.s %[bs2], %[a], %[d2], %[bs2];" + "fmadd.s %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.s %[as0], %[b], %[d0], %[as0];" + "fmadd.s %[as1], %[b], %[d1], %[as1];" + "fmadd.s %[as2], %[b], %[d2], %[as2];" + "fmadd.s %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + j += 4; + } while (j < (n_tx >> 2U)); + } + return; +} + +void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j; + float a0, a1, a2, a3; + float b0, b1, b2, b3; + float c, d; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.s %[as0], %[a0], %[c], %[as0];" + "fmadd.s %[as1], %[a1], %[c], %[as1];" + "fmadd.s %[as2], %[a2], %[c], %[as2];" + "fmadd.s %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.s %[bs0], %[a0], %[d], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d], %[bs1];" + "fmadd.s %[bs2], %[a2], %[d], %[bs2];" + "fmadd.s %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.s %[as0], %[b0], %[d], %[as0];" + "fmadd.s %[as1], %[b1], %[d], %[as1];" + "fmadd.s %[as2], %[b2], %[d], %[as2];" + "fmadd.s %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } while (i < (n_tx >> 4U)); + return; +} + +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { + + register float sum; + float a, b; + float c, d; + float diag; // Diagonal element + float ap, bp; // Pivot element + float as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.s %[sum], %[a], %[a], %[sum];" + "fmadd.s %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.s %[ap], %[ap], %[sum];" + "fsqrt.s %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = 0.0f; + bs = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.s %[ap], %[ap], %[as];" + "fsub.s %[bp], %[bp], %[bs];" + "fdiv.s %[ap], %[ap], %[diag];" + "fdiv.s %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + + +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ab, bb; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = 0.0f; + bs = 0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * (i * n + i)]; + ab = in[2U * i]; + bb = in[2U * i + 1]; + asm volatile ( + "fsub.s %[ax], %[ab], %[as];" + "fsub.s %[bx], %[bb], %[bs];" + "fdiv.s %[ax], %[ax], %[diag];" + "fdiv.s %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ab, bb; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = 0.0f; + bs = 0.0f; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + ab = in[2 * (n - i - 1)]; + bb = in[2 * (n - i - 1) + 1]; + asm volatile ( + "fsub.s %[ax], %[ab], %[as];" + "fsub.s %[bx], %[bb], %[bs];" + "fdiv.s %[ax], %[ax], %[diag];" + "fdiv.s %[bx], %[bx], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [ab] "r" (ab), [bb] "r" (bb), + [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + From 17f5936f37104bc6d32ea54ce31072367f4e3bdf Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Fri, 17 Mar 2023 16:46:16 +0100 Subject: [PATCH 02/39] [software] Add Ax=b solution with Jacobi --- software/apps/mimo_mmse_f32/main.c | 56 +++++++- software/apps/mimo_mmse_f32/mimo_mmse_f32.h | 86 +++++++++++++ software/apps/mimo_zf_f32/main.c | 38 +++++- software/apps/mimo_zf_f32/mimo_zf_f32.h | 135 +++++++++++++++++++- 4 files changed, 304 insertions(+), 11 deletions(-) diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c index 650829108..87b328a5e 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/mimo_mmse_f32/main.c @@ -11,12 +11,13 @@ #include "mimo_mmse_f32.h" /* DATA */ -//#include "data_choldec_f32.h" -//#include "data_Axb_f32.h" #include "data_mimo_mmse_f32.h" dump(res,1); + +#define CHOLESKY + float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); @@ -75,7 +76,7 @@ void write_result(float *pRes, uint32_t dim, uint32_t core_id) { } // Driver program -void single_core_mimo_mmse() { +void single_core_mimo_mmse_cholesky() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); @@ -116,10 +117,53 @@ void single_core_mimo_mmse() { return; } +// Driver program +void single_core_mimo_mmse_jacobi() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(sigma, In_sigma, N_TX, core_id, num_cores); + initialize(b, In_b, N_RX, core_id, num_cores); + initialize_zeros(s, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores); + + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX); + mempool_stop_benchmark(); + mempool_start_benchmark(); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); + mempool_stop_benchmark(); + + mempool_start_benchmark(); + mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); + // verify_result(s, Out_s, N_TX, core_id); + // verify_result(y, Out_y, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + int main() { - // single_core_cholesky(); - // single_core_Axb(); - single_core_mimo_mmse(); + + #if defined(CHOLESKY) + single_core_mimo_mmse_cholesky(); + #elif defined(JACOBI) + single_core_mimo_mmse_jacobi(); + #endif + return 0; } diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h index aa50eef54..260b719ea 100644 --- a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h +++ b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h @@ -373,3 +373,89 @@ void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { return; } +void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32_t n, const uint32_t max_iter) +{ + + uint32_t i, j, k; + float diff, error, den; + float as, bs; + float ab, bb; + float a, b; + float c, d; + + for (k = 0; k < max_iter; k++) { + // Initialize the diff variable + diff = 0.0f; + + /* COMPUTE THE SUM */ + for (i = 0; i < n; i++) { + as = 0.0f; + bs = 0.0f; + ab = in[2U * i]; + bb = in[2U * i + 1]; + den = pA[2U * (i * n + i)]; + // Compute the output + for (j = 0; j < n; j++) { + if (j != i) { + a = pA[2U * (i * n + j)]; + b = pA[2U * (i * n + j) + 1U]; + c = x[2U * j]; + d = x[2U * j + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + } + + /* COMPUTE THE NEW DATA */ + asm volatile ( + // subtract the sum from the input vector + "fsub.s %[as], %[ab], %[as];" + "fsub.s %[bs], %[bb], %[bs];" + // divide the result by the pivot + "fdiv.s %[as], %[as], %[den];" + "fdiv.s %[bs], %[bs], %[den];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [ab] "r" (ab), [bb] "r" (bb), [den] "r" (den) + :); + + /* COMPUTE THE DIFFERENCE */ + // Load the previous result + a = x[2U * i]; + b = x[2U * i + 1]; + // Compute diff + asm volatile ( + "fsub.s %[a], %[a], %[as];" + "fsub.s %[b], %[b], %[bs];" + : [a] "+&r" (a), [b] "+&r" (b) + : [as] "r" (as), [bs] "r" (bs) + :); + a = (a > 0.0f) ? a : (-a); + b = (b > 0.0f) ? b : (-b); + asm volatile ( + "fadd.s %[diff], %[a], %[diff];" + "fadd.s %[diff], %[b], %[diff];" + : [diff] "+&r" (diff) + : [a] "r" (a), [b] "r" (b) + :); + + /* STORE THE RESULT */ + x[2U * i] = as; + x[2U * i + 1U] = bs; + + } + /* COMPUTE THE ERROR */ + error = diff / (2.0f * (float)n); + if (error < tol){ + break; + } + } + return; +} + diff --git a/software/apps/mimo_zf_f32/main.c b/software/apps/mimo_zf_f32/main.c index 698796397..ea285d9ff 100644 --- a/software/apps/mimo_zf_f32/main.c +++ b/software/apps/mimo_zf_f32/main.c @@ -111,9 +111,41 @@ void single_core_mimo_zf_cholesky() { } +void single_core_mimo_zf_jacobi() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + /* Initialize vectors */ + initialize(b, In_b, N_RX, core_id, num_cores); + + initialize_zeros(s, N_TX, core_id, num_cores); + initialize_zeros(y, N_TX, core_id, num_cores); + initialize_zeros(x, N_TX, core_id, num_cores); + + + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_hermitian_f32s(ch_matrix, in_matrix, N_RX, N_TX); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); + + mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + verify_result(x, Out_x, N_TX, core_id); + mempool_barrier(num_cores); + return; +} + int main() { - // single_core_cholesky(); - // single_core_Axb(); - single_core_mimo_mmse(); + single_core_mimo_zf_jacobi(); return 0; } diff --git a/software/apps/mimo_zf_f32/mimo_zf_f32.h b/software/apps/mimo_zf_f32/mimo_zf_f32.h index 0e1cd5811..d43c0a3f7 100644 --- a/software/apps/mimo_zf_f32/mimo_zf_f32.h +++ b/software/apps/mimo_zf_f32/mimo_zf_f32.h @@ -7,13 +7,13 @@ dump(results,1); -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx); +void mempool_hermitian_f32s(float *pH, float *pG, const uint32_t n_rx, const uint32_t n_tx); void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); /* Computes the Hermitian matrix G = (H'*H) */ -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx) { +void mempool_hermitian_f32s(float *pH, float *pG, const uint32_t n_rx, const uint32_t n_tx) { uint32_t i, j, k; float a; @@ -340,3 +340,134 @@ void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { return; } +void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32_t n, const uint32_t max_iter) { + uint32_t i, j, k; + float diff, error, den; + float register as0, as1; + float register bs0, bs1; + float ab, bb; + float a0, a1; + float b0, b1; + float c0, c1; + float d0, d1; + for (k = 0; k < max_iter; k++) { + // Initialize the diff variable + diff = 0.0f; + /* COMPUTE THE SUM */ + for (i = 0; i < n; i++) { + as0 = 0.0f; + as1 = 0.0f; + bs0 = 0.0f; + bs1 = 0.0f; + /* COMPUTE OUTPUT */ + for(j = 0U; j < n; j += 2) { + if (i == j) { + a0 = pA[2U * (i * n + j + 1U)]; + b0 = pA[2U * (i * n + j + 1U) + 1U]; + c0 = x[2U * (j + 1U)]; + d0 = x[2U * (j + 1U) + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fmadd.s %[as0], %[a0], %[c0], %[as0];" + "fmadd.s %[bs0], %[a0], %[d0], %[bs0];" + "fnmsub.s %[as0], %[b0], %[d0], %[as0];" + "fmadd.s %[bs0], %[b0], %[c0], %[bs0];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) + :); + } else if(i == (j + 1U)) { + a0 = pA[2U * (i * n + j)]; + b0 = pA[2U * (i * n + j) + 1U]; + c0 = x[2U * j]; + d0 = x[2U * j + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fmadd.s %[as0], %[a0], %[c0], %[as0];" + "fmadd.s %[bs0], %[a0], %[d0], %[bs0];" + "fnmsub.s %[as0], %[b0], %[d0], %[as0];" + "fmadd.s %[bs0], %[b0], %[c0], %[bs0];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) + :); + } else { + a0 = pA[2U * (i * n + j)]; + a1 = pA[2U * (i * n + j + 1U)]; + b0 = pA[2U * (i * n + j) + 1U]; + b1 = pA[2U * (i * n + j + 1U) + 1U]; + c0 = x[2U * j]; + c1 = x[2U * (j + 1U)]; + d0 = x[2U * j + 1U]; + d1 = x[2U * (j + 1U) + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fmadd.s %[as0], %[a0], %[c0], %[as0];" + "fmadd.s %[as1], %[a1], %[c1], %[as1];" + "fmadd.s %[bs0], %[a0], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d1], %[bs1];" + "fnmsub.s %[as0], %[b0], %[d0], %[as0];" + "fnmsub.s %[as1], %[b1], %[d1], %[as1];" + "fmadd.s %[bs0], %[b0], %[c0], %[bs0];" + "fmadd.s %[bs1], %[b1], %[c1], %[bs1];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1) + : [a0] "r" (a0), [a1] "r" (a1), + [b0] "r" (b0), [b1] "r" (b1), + [c0] "r" (c0), [c1] "r" (c1), + [d0] "r" (d0), [d1] "r" (d1) + :); + } + } + // Partial sums + asm volatile ( + "fadd.s %[as0], %[as1], %[as0];" + "fadd.s %[bs0], %[as1], %[bs0];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [as1] "r" (as1), [bs1] "r" (bs1) + :); + ab = in[2U * i]; + bb = in[2U * i + 1]; + den = pA[2U * (i * n + i)]; + + /* COMPUTE THE NEW DATA */ + asm volatile ( + // subtract the sum from the input vector + "fsub.s %[as0], %[ab], %[as0];" + "fsub.s %[bs0], %[bb], %[bs0];" + // divide the result by the pivot + "fdiv.s %[as0], %[as0], %[den];" + "fdiv.s %[bs0], %[bs0], %[den];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [ab] "r" (ab), [bb] "r" (bb), [den] "r" (den) + :); + /* COMPUTE THE DIFFERENCE */ + // Load the previous result + a0 = x[2U * i]; + b0 = x[2U * i + 1]; + // Compute diff + asm volatile ( + "fsub.s %[a0], %[a0], %[as0];" + "fsub.s %[b0], %[b0], %[bs0];" + : [a0] "+&r" (a0), [b0] "+&r" (b0) + : [as0] "r" (as0), [bs0] "r" (bs0) + :); + a0 = (a0 > 0.0f) ? a0 : (-a0); + b0 = (b0 > 0.0f) ? b0 : (-b0); + asm volatile ( + "fadd.s %[diff], %[a0], %[diff];" + "fadd.s %[diff], %[b0], %[diff];" + : [diff] "+&r" (diff) + : [a0] "r" (a0), [b0] "r" (b0) + :); + /* STORE THE RESULT */ + x[2U * i] = as0; + x[2U * i + 1U] = bs0; + } + /* COMPUTE THE ERROR */ + error = diff / (2.0f * (float)n); + if (error < tol){ + break; + } + } + return; +} + From d231e4b87e05b8ebfd01ac598fbc67ce0b714b84 Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Tue, 4 Apr 2023 17:25:27 +0200 Subject: [PATCH 03/39] [software] Fix LTx=y solution --- software/apps/mimo_mmse_f16/data_mimo_mmse.py | 2 +- software/apps/mimo_mmse_f16/main.c | 52 ++----------------- software/apps/mimo_mmse_f16/mimo_mmse_f16.h | 51 +++++++----------- software/apps/mimo_mmse_f32/data_mimo_mmse.py | 2 +- software/apps/mimo_mmse_f32/main.c | 7 +-- software/apps/mimo_mmse_f32/mimo_mmse_f32.h | 49 +++++++---------- 6 files changed, 47 insertions(+), 116 deletions(-) diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.py b/software/apps/mimo_mmse_f16/data_mimo_mmse.py index 68133dd73..194b840d6 100644 --- a/software/apps/mimo_mmse_f16/data_mimo_mmse.py +++ b/software/apps/mimo_mmse_f16/data_mimo_mmse.py @@ -83,7 +83,7 @@ def main(): # Linear system solution s = np.transpose(np.dot(H_h, b)) y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.transpose(L), y) + x = solve_triangular(np.asmatrix(L).H, y) H = np.reshape(H, (N_tx*N_rx, -1), order='C') G = np.reshape(G, (N_tx*N_tx, -1), order='C') diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/mimo_mmse_f16/main.c index 1a0746afd..b3338e0c2 100644 --- a/software/apps/mimo_mmse_f16/main.c +++ b/software/apps/mimo_mmse_f16/main.c @@ -68,7 +68,7 @@ void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { for (uint32_t i = 0; i < 2 * dim; i++) { __fp16 in = pRes[i]; - // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ +// uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ float cvt_out; asm volatile( "fcvt.h.s %[cvt_out], %[in];" @@ -81,53 +81,6 @@ void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { } } - -// // Driver program -// void single_core_cholesky() { -// uint32_t core_id = mempool_get_core_id(); -// uint32_t num_cores = mempool_get_core_count(); -// mempool_barrier_init(core_id); // Initialize barrier and synchronize -// /* Initialize matrices */ -// initialize(in_matrix, In_G, N_RX*N_TX, core_id, num_cores); -// initialize_zeros(out_matrix, N_RX*N_TX, core_id, num_cores); -// /* Benchmark */ -// if (core_id == 0) { -// mempool_start_benchmark(); -// mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); -// mempool_stop_benchmark(); -// } -// mempool_barrier(num_cores); -// verify_result(out_matrix, Out_L, N_TX * N_RX, core_id); -// mempool_barrier(num_cores); -// return; -// } - -// // Driver program -// void single_core_Axb() { -// uint32_t core_id = mempool_get_core_id(); -// uint32_t num_cores = mempool_get_core_count(); -// mempool_barrier_init(core_id); // Initialize barrier and synchronize// -// /* Initialize matrices */ -// initialize(in_matrix, In_G, N_TX*N_TX, core_id, num_cores); -// initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); -// /* Initialize vectors */ -// initialize(b, Out_y, N_TX, core_id, num_cores); -// initialize_zeros(y, N_TX, core_id, num_cores); -// initialize_zeros(x, N_TX, core_id, num_cores);// -// /* Benchmark */ -// if (core_id == 0) { -// mempool_start_benchmark(); -// mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); -// mempool_Ltrisol_f16s(out_matrix, b, y, N_TX); -// mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); -// mempool_stop_benchmark(); -// } -// mempool_barrier(num_cores); -// // verify_result(x, Out_x, N_TX, core_id); -// mempool_barrier(num_cores); -// return; -// } - // Driver program void single_core_mimo_mmse() { @@ -175,8 +128,9 @@ void single_core_mimo_mmse() { //verify_result(in_matrix, In_G, N_TX*N_TX, core_id); //verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); - verify_result(s, Out_s, N_TX, core_id); + //verify_result(s, Out_s, N_TX, core_id); verify_result(x, Out_x, N_TX, core_id); + //write_result(x, N_TX, core_id); mempool_barrier(num_cores); return; } diff --git a/software/apps/mimo_mmse_f16/mimo_mmse_f16.h b/software/apps/mimo_mmse_f16/mimo_mmse_f16.h index b611ef7f1..b6f85250b 100644 --- a/software/apps/mimo_mmse_f16/mimo_mmse_f16.h +++ b/software/apps/mimo_mmse_f16/mimo_mmse_f16.h @@ -284,8 +284,9 @@ void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - as = (__fp16)0.0f; - bs = (__fp16)0.0f; + diag = pL[2 * (i * n + i)]; + as = (__fp16)in[2U * i]; + bs = (__fp16)in[2U * i + 1]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { a = pL[2U * (i * n + j)]; @@ -293,26 +294,20 @@ void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { c = x[2U * j]; d = x[2U * j + 1]; asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" : [as] "+&r" (as), [bs] "+&r" (bs) : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) :); } // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * (i * n + i)]; - ab = in[2U * i]; - bb = in[2U * i + 1]; asm volatile ( - "fsub.h %[ax], %[ab], %[as];" - "fsub.h %[bx], %[bb], %[bs];" - "fdiv.h %[ax], %[ax], %[diag];" - "fdiv.h %[bx], %[bx], %[diag];" + "fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) :); x[2U * i] = ax; x[2U * i + 1] = bx; @@ -327,14 +322,14 @@ void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) __fp16 c, d; __fp16 as, bs; - __fp16 ab, bb; __fp16 ax, bx; __fp16 diag; // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - as = (__fp16)0.0f; - bs = (__fp16)0.0f; + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = (__fp16)in[2 * (n - i - 1)]; + bs = (__fp16)in[2 * (n - i - 1) + 1]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; @@ -342,26 +337,20 @@ void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) c = x[2U * (n - 1 - j)]; d = x[2U * (n - 1 - j) + 1]; asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" : [as] "+&r" (as), [bs] "+&r" (bs) : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) :); } // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - ab = in[2 * (n - i - 1)]; - bb = in[2 * (n - i - 1) + 1]; asm volatile ( - "fsub.h %[ax], %[ab], %[as];" - "fsub.h %[bx], %[bb], %[bs];" - "fdiv.h %[ax], %[ax], %[diag];" - "fdiv.h %[bx], %[bx], %[diag];" + "fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) :); x[2U * (n - i - 1)] = ax; x[2U * (n - i - 1) + 1] = bx; diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.py b/software/apps/mimo_mmse_f32/data_mimo_mmse.py index 297702545..e47c30b14 100644 --- a/software/apps/mimo_mmse_f32/data_mimo_mmse.py +++ b/software/apps/mimo_mmse_f32/data_mimo_mmse.py @@ -84,7 +84,7 @@ def main(): # Linear system solution s = np.transpose(np.dot(H_h, b)) y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.transpose(L), y) + x = solve_triangular(np.asmatrix(L).H, y) H = np.reshape(H, (N_tx*N_rx, -1), order='C') G = np.reshape(G, (N_tx*N_tx, -1), order='C') diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c index 87b328a5e..c16310d40 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/mimo_mmse_f32/main.c @@ -17,6 +17,7 @@ dump(res,1); #define CHOLESKY +//#define JACOBI float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); @@ -112,7 +113,8 @@ void single_core_mimo_mmse_cholesky() { // verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); // verify_result(s, Out_s, N_TX, core_id); // verify_result(y, Out_y, N_TX, core_id); - verify_result(x, Out_x, N_TX, core_id); + // verify_result(x, Out_x, N_TX, core_id); + write_result(x, N_TX, core_id); mempool_barrier(num_cores); return; } @@ -141,7 +143,6 @@ void single_core_mimo_mmse_jacobi() { mempool_start_benchmark(); mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); mempool_stop_benchmark(); - mempool_start_benchmark(); mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); mempool_stop_benchmark(); @@ -151,7 +152,7 @@ void single_core_mimo_mmse_jacobi() { // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); // verify_result(s, Out_s, N_TX, core_id); // verify_result(y, Out_y, N_TX, core_id); - verify_result(x, Out_x, N_TX, core_id); + // verify_result(x, Out_x, N_TX, core_id); mempool_barrier(num_cores); return; } diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h index 260b719ea..7ee7975fb 100644 --- a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h +++ b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h @@ -282,14 +282,14 @@ void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { float c, d; float as, bs; - float ab, bb; float ax, bx; float diag; // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - as = 0.0f; - bs = 0.0f; + as = in[2U * i]; + bs = in[2U * i + 1]; + diag = pL[2 * (i * n + i)]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { a = pL[2U * (i * n + j)]; @@ -297,26 +297,20 @@ void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { c = x[2U * j]; d = x[2U * j + 1]; asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[b], %[c], %[bs];" : [as] "+&r" (as), [bs] "+&r" (bs) : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) :); } // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * (i * n + i)]; - ab = in[2U * i]; - bb = in[2U * i + 1]; asm volatile ( - "fsub.s %[ax], %[ab], %[as];" - "fsub.s %[bx], %[bb], %[bs];" - "fdiv.s %[ax], %[ax], %[diag];" - "fdiv.s %[bx], %[bx], %[diag];" + "fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) :); x[2U * i] = ax; x[2U * i + 1] = bx; @@ -331,14 +325,14 @@ void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { float c, d; float as, bs; - float ab, bb; float ax, bx; float diag; // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - as = 0.0f; - bs = 0.0f; + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = in[2 * (n - i - 1)]; + bs = in[2 * (n - i - 1) + 1]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; @@ -346,26 +340,20 @@ void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { c = x[2U * (n - 1 - j)]; d = x[2U * (n - 1 - j) + 1]; asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[a], %[c], %[as];" "fnmsub.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[a], %[d], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" "fmadd.s %[bs], %[b], %[c], %[bs];" : [as] "+&r" (as), [bs] "+&r" (bs) : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) :); } // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - ab = in[2 * (n - i - 1)]; - bb = in[2 * (n - i - 1) + 1]; asm volatile ( - "fsub.s %[ax], %[ab], %[as];" - "fsub.s %[bx], %[bb], %[bs];" - "fdiv.s %[ax], %[ax], %[diag];" - "fdiv.s %[bx], %[bx], %[diag];" + "fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) :); x[2U * (n - i - 1)] = ax; x[2U * (n - i - 1) + 1] = bx; @@ -458,4 +446,3 @@ void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32 } return; } - From e53943b18cc8cc733e5a2290e4dc415fbbb7a976 Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Tue, 25 Apr 2023 09:01:43 +0200 Subject: [PATCH 04/39] [software] Add parallel MIMO MMSE estimation --- .../apps/mimo_mmse_f16/data_mimo_mmse.h.tpl | 17 +- software/apps/mimo_mmse_f16/data_mimo_mmse.py | 136 +- software/apps/mimo_mmse_f16/main.c | 134 +- software/apps/mimo_mmse_f16/mimo_mmse_f16.h | 360 - software/apps/mimo_mmse_f16/mimo_mmse_f16s.h | 670 + .../apps/mimo_mmse_f32/data_mimo_mmse.h.tpl | 17 +- software/apps/mimo_mmse_f32/data_mimo_mmse.py | 130 +- .../apps/mimo_mmse_f32/data_mimo_mmse_f32.h | 11669 ++++++++++++++++ software/apps/mimo_mmse_f32/main.c | 181 +- software/apps/mimo_mmse_f32/mimo_mmse_f32.h | 448 - software/apps/mimo_mmse_f32/mimo_mmse_f32p.h | 216 + software/apps/mimo_mmse_f32/mimo_mmse_f32s.h | 703 + 12 files changed, 13709 insertions(+), 972 deletions(-) delete mode 100644 software/apps/mimo_mmse_f16/mimo_mmse_f16.h create mode 100644 software/apps/mimo_mmse_f16/mimo_mmse_f16s.h create mode 100644 software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h delete mode 100644 software/apps/mimo_mmse_f32/mimo_mmse_f32.h create mode 100644 software/apps/mimo_mmse_f32/mimo_mmse_f32p.h create mode 100644 software/apps/mimo_mmse_f32/mimo_mmse_f32s.h diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl b/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl index b737ce901..5f0ebf26b 100644 --- a/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl +++ b/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl @@ -17,23 +17,18 @@ #define N_TX (${N_tx}) #define N_RX (${N_rx}) +#define N_ITR (${N_itr}) // Inputs -__fp16 In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; +__fp16 In_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; -__fp16 In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; +__fp16 In_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; -__fp16 In_b[${2 * N_rx}] = ${array_to_cstr(b)}; +__fp16 In_b[${2 * N_rx * N_itr}] = ${array_to_cstr(b)}; -__fp16 In_sigma[${N_tx}] = ${array_to_cstr(sigma)}; +__fp16 In_sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; // Outputs -__fp16 Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; - -__fp16 Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; - -__fp16 Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; - -__fp16 Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; +__fp16 Out_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.py b/software/apps/mimo_mmse_f16/data_mimo_mmse.py index 194b840d6..49c07f21f 100644 --- a/software/apps/mimo_mmse_f16/data_mimo_mmse.py +++ b/software/apps/mimo_mmse_f16/data_mimo_mmse.py @@ -21,52 +21,7 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), ** with file.open('w') as f: f.write(template.render(**kwargs)) -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path.cwd(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='First dimension.' - ) - - args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers - +def gen_input_data(N_rx, N_tx): # Create channel matrix H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float16) # Create input vector @@ -76,6 +31,7 @@ def main(): # Matrix to be inverted in MMSE estimator H_h = (np.asmatrix(H).H) + G = H_h * H G = G + np.diag(sigma) # Cholesky decomposition @@ -124,14 +80,90 @@ def main(): x_RI = x_RI.astype(np.float16) y_RI = y_RI.astype(np.float16) s_RI = s_RI.astype(np.float16) - print("Channel matrix in (Re, Im) format:\n", H_RI) - print("Hermitian matrix in (Re, Im) format:\n", G_RI) - print("Cholesky dec. in (Re, Im) format:\n", L_RI) - print("Input vector in (Re, Im) format:\n", b_RI) - print("Output vector in (Re, Im) format:\n", x_RI) + # print("Channel matrix in (Re, Im) format:\n", H_RI) + # print("Hermitian matrix in (Re, Im) format:\n", G_RI) + # print("Cholesky dec. in (Re, Im) format:\n", L_RI) + # print("Input vector in (Re, Im) format:\n", b_RI) + # print("Output vector in (Re, Im) format:\n", x_RI) + + return sigma, H_RI, G_RI, b_RI, x_RI + +def main(): + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + parser.add_argument( + "-k", + "--iterations", + type=int, + required=False, + default=256, + help='Iterations.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + itr=args.iterations + + sigma = np.zeros([itr, N_tx]) + H_RI = np.zeros([itr, 2*N_tx*N_rx]) + G_RI = np.zeros([itr, 2*N_tx*N_tx]) + b_RI = np.zeros([itr, 2*N_rx]) + x_RI = np.zeros([itr, 2*N_tx]) + for k in range(itr): + sigma[k,:], H_RI[k,:], G_RI[k,:], b_RI[k,:], x_RI[k,:] = gen_input_data(N_rx, N_tx) + + sigma = np.reshape(sigma, (N_tx*itr)) + H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)) + G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)) + b_RI = np.reshape(b_RI, (2*N_rx*itr)) + x_RI = np.reshape(x_RI, (2*N_tx*itr)) + + sigma = sigma.astype(np.float16) + H_RI = H_RI.astype(np.float16) + G_RI = G_RI.astype(np.float16) + b_RI = b_RI.astype(np.float16) + x_RI = x_RI.astype(np.float16) - kwargs = {'name': 'mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + kwargs = {'name': 'mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) if __name__ == "__main__": diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/mimo_mmse_f16/main.c index b3338e0c2..129955e35 100644 --- a/software/apps/mimo_mmse_f16/main.c +++ b/software/apps/mimo_mmse_f16/main.c @@ -8,15 +8,24 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "mimo_mmse_f16.h" + +typedef signed short v2s __attribute__((vector_size(4))); +typedef __fp16 v2f16 __attribute__((vector_size(4))); +typedef union { + float f32; + v2f16 vec; +} v2h; + +#include "mimo_mmse_f16s.h" /* DATA */ -//#include "data_choldec_f16.h" -//#include "data_Axb_f16.h" #include "data_mimo_mmse_f16.h" -dump(res,1); +//#define SINGLE +#define PARALLEL +#define FOLDED +#ifdef SINGLE __fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); __fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); __fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); @@ -26,10 +35,23 @@ __fp16 b[2 * N_RX] __attribute__((section(".l1"))); __fp16 s[2 * N_TX] __attribute__((section(".l1"))); __fp16 x[2 * N_TX] __attribute__((section(".l1"))); __fp16 y[2 * N_TX] __attribute__((section(".l1"))); +#endif + +#ifdef PARALLEL +__fp16 ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1"))); +__fp16 b[2 * N_RX * N_ITR] __attribute__((section(".l1"))); +__fp16 sigma[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); + +__fp16 in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 s[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); +__fp16 x[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); +__fp16 y[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); +#endif void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { + for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = data[i]; } mempool_barrier(num_cores); @@ -38,8 +60,9 @@ void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, ui void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = (__fp16) (0x0000); + __fp16 zero = (__fp16) (0x0000); + for (i = core_id; i < 2 * dim; i += num_cores) { + matrix[i] = zero; } mempool_barrier(num_cores); return; @@ -75,7 +98,6 @@ void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { : [cvt_out] "=&r"(cvt_out) : [in] "r" (in) : ); - dump_res(*(uint32_t*)&cvt_out); } } @@ -95,32 +117,18 @@ void single_core_mimo_mmse() { /* Initialize vectors */ initialize(sigma, In_sigma, N_TX, core_id, num_cores); initialize(b, In_b, N_RX, core_id, num_cores); - + /* Initialize results */ initialize_zeros(s, N_TX, core_id, num_cores); initialize_zeros(y, N_TX, core_id, num_cores); initialize_zeros(x, N_TX, core_id, num_cores); - /* Benchmark */ if (core_id == 0) { - /* Computation of the Hermitian matrix */ - mempool_start_benchmark(); - mempool_hermitian_f16s(ch_matrix, in_matrix, sigma, N_RX, N_TX); - mempool_stop_benchmark(); - /* Computation of the H^H*b vector */ - mempool_start_benchmark(); - mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX); - mempool_stop_benchmark(); - /* Cholesky decomposition */ mempool_start_benchmark(); + mempool_hermitian_f16s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); + mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX, 0); mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); - mempool_stop_benchmark(); - /* Solution of L*y = s */ - mempool_start_benchmark(); mempool_Ltrisol_f16s(out_matrix, s, y, N_TX); - mempool_stop_benchmark(); - /* Solution of L^T*s = b */ - mempool_start_benchmark(); mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); mempool_stop_benchmark(); } @@ -135,10 +143,82 @@ void single_core_mimo_mmse() { return; } +// Driver program +void parallel_mimo_mmse_cholesky() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX*N_ITR, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); + /* Initialize vectors */ + uint32_t i = 0; + for (i = core_id; i < (N_TX*N_ITR); i += num_cores) { + sigma[2 * i] = In_sigma[i]; + } + mempool_barrier(num_cores); + initialize(b, In_b, N_RX*N_ITR, core_id, num_cores); + /* Initialize results */ + initialize_zeros(s, N_TX*N_ITR, core_id, num_cores); + initialize_zeros(y, N_TX*N_ITR, core_id, num_cores); + initialize_zeros(x, N_TX*N_ITR, core_id, num_cores); + dump_res1(core_id); + + /* Benchmark */ +#ifdef FOLDED + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp16* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; + __fp16* sigma_ptr = sigma + 2*N_TX * itr; + __fp16* b_ptr = b + 2*N_RX * itr; + __fp16* in_matrix_ptr = in_matrix + itr * 2*N_TX + (itr / num_cores) * (N_TX * N_BANKS); + __fp16* out_matrix_ptr = out_matrix + itr * 2*N_TX + (itr / num_cores) * (N_TX * N_BANKS); + __fp16* s_ptr = s + itr * 2*N_TX + (itr / num_cores) * (N_BANKS); + __fp16* y_ptr = y + itr * 2*N_TX + (itr / num_cores) * (N_BANKS); + __fp16* x_ptr = x + 2*N_TX * itr; + mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); + mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); + mempool_cholesky_folded_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); + mempool_Ltrisol_folded_f16s(out_matrix_ptr, s_ptr, y_ptr, N_TX); + mempool_Lttrisol_folded_f16s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + } + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); +#else + // Each iteration is assigned to a processor + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp16* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; + __fp16* sigma_ptr = sigma + 2*N_TX * itr; + __fp16* b_ptr = b + 2*N_RX * itr; + __fp16* in_matrix_ptr = in_matrix + 2*N_TX*N_TX * itr; + __fp16* out_matrix_ptr = out_matrix + 2*N_TX*N_TX * itr; + __fp16* s_ptr = s + 2*N_TX * itr; + __fp16* y_ptr = y + 2*N_TX * itr; + __fp16* x_ptr = x + 2*N_TX * itr; + mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); + mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); + mempool_cholesky_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); + mempool_Ltrisol_f16s(out_matrix_ptr, s_ptr, y_ptr, N_TX); + mempool_Lttrisol_f16s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + } + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); +#endif + mempool_barrier(num_cores); + //verify_result(x, Out_x, N_TX, core_id); + //mempool_barrier(num_cores); + return; +} int main() { - // single_core_cholesky(); - // single_core_Axb(); + #ifdef SINGLE single_core_mimo_mmse(); + #elif defined(PARALLEL) + parallel_mimo_mmse_cholesky(); + #endif return 0; } diff --git a/software/apps/mimo_mmse_f16/mimo_mmse_f16.h b/software/apps/mimo_mmse_f16/mimo_mmse_f16.h deleted file mode 100644 index b6f85250b..000000000 --- a/software/apps/mimo_mmse_f16/mimo_mmse_f16.h +++ /dev/null @@ -1,360 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx); -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j, k; - __fp16 a; - __fp16 b; - __fp16 c0, c1, c2, c3; - __fp16 d0, d1, d2, d3; - __fp16 as0, as1, as2, as3; - __fp16 bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = (__fp16)0.0f; - as1 = (__fp16)0.0f; - as2 = (__fp16)0.0f; - as3 = (__fp16)0.0f; - // Initialize the imag part of sums - bs0 = (__fp16)0.0f; - bs1 = (__fp16)0.0f; - bs2 = (__fp16)0.0f; - bs3 = (__fp16)0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.h %[as0], %[a], %[c0], %[as0];" - "fmadd.h %[as1], %[a], %[c1], %[as1];" - "fmadd.h %[as2], %[a], %[c2], %[as2];" - "fmadd.h %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.h %[bs0], %[a], %[d0], %[bs0];" - "fmadd.h %[bs1], %[a], %[d3], %[bs1];" - "fmadd.h %[bs2], %[a], %[d2], %[bs2];" - "fmadd.h %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.h %[as0], %[b], %[d0], %[as0];" - "fmadd.h %[as1], %[b], %[d1], %[as1];" - "fmadd.h %[as2], %[b], %[d2], %[as2];" - "fmadd.h %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Compute diagonal elements - if (i == j) { - asm volatile ( - "fadd.h %[as0], %[as0], %[sigma];" - : [as0] "+&r" (as0) - : [sigma] "r" (sigma[i]) - :); - bs0 = (__fp16)0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.h %[as1], %[as1], %[sigma];" - : [as1] "+&r" (as1) - : [sigma] "r" (sigma[i]) - :); - bs1 = (__fp16)0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.h %[as2], %[as2], %[sigma];" - : [as2] "+&r" (as2) - : [sigma] "r" (sigma[i]) - :); - bs2 = (__fp16)0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.h %[as3], %[as3], %[sigma];" - : [as3] "+&r" (as3) - : [sigma] "r" (sigma[i]) - :); - bs3 = (__fp16)0.0f; - } - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - j += 4; - } while (j < (n_tx >> 2U)); - } - return; -} - -void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j; - __fp16 a0, a1, a2, a3; - __fp16 b0, b1, b2, b3; - __fp16 c, d; - __fp16 as0, as1, as2, as3; - __fp16 bs0, bs1, bs2, bs3; - - i = 0; - do { - // Initialize the real part of sums - as0 = (__fp16)0.0f; - as1 = (__fp16)0.0f; - as2 = (__fp16)0.0f; - as3 = (__fp16)0.0f; - // Initialize the imag part of sums - bs0 = (__fp16)0.0f; - bs1 = (__fp16)0.0f; - bs2 = (__fp16)0.0f; - bs3 = (__fp16)0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.h %[as0], %[a0], %[c], %[as0];" - "fmadd.h %[as1], %[a1], %[c], %[as1];" - "fmadd.h %[as2], %[a2], %[c], %[as2];" - "fmadd.h %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.h %[bs0], %[a0], %[d], %[bs0];" - "fmadd.h %[bs1], %[a1], %[d], %[bs1];" - "fmadd.h %[bs2], %[a2], %[d], %[bs2];" - "fmadd.h %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.h %[as0], %[b0], %[d], %[as0];" - "fmadd.h %[as1], %[b1], %[d], %[as1];" - "fmadd.h %[as2], %[b2], %[d], %[as2];" - "fmadd.h %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } while (i < (n_tx >> 4U)); - return; -} - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ab, bb; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * (i * n + i)]; - as = (__fp16)in[2U * i]; - bs = (__fp16)in[2U * i + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = (__fp16)in[2 * (n - i - 1)]; - bs = (__fp16)in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - diff --git a/software/apps/mimo_mmse_f16/mimo_mmse_f16s.h b/software/apps/mimo_mmse_f16/mimo_mmse_f16s.h new file mode 100644 index 000000000..57f6f1545 --- /dev/null +++ b/software/apps/mimo_mmse_f16/mimo_mmse_f16s.h @@ -0,0 +1,670 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +dump(res1,1); +dump(res2,2); +dump(res3,3); + +#pragma once +#define N_BANKS (NUM_CORES * 4) + +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded); +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded); +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { + + uint32_t i, j, k; + __fp16 a; + __fp16 b; + __fp16 c0, c1, c2, c3; + __fp16 d0, d1, d2, d3; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + for (j = 0; j < n_tx; j +=4) { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.h %[as0], %[a], %[c0], %[as0];" + "fmadd.h %[as1], %[a], %[c1], %[as1];" + "fmadd.h %[as2], %[a], %[c2], %[as2];" + "fmadd.h %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.h %[bs0], %[a], %[d0], %[bs0];" + "fmadd.h %[bs1], %[a], %[d3], %[bs1];" + "fmadd.h %[bs2], %[a], %[d2], %[bs2];" + "fmadd.h %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.h %[as0], %[b], %[d0], %[as0];" + "fmadd.h %[as1], %[b], %[d1], %[as1];" + "fmadd.h %[as2], %[b], %[d2], %[as2];" + "fmadd.h %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile ( + "fadd.h %[as0], %[as0], %[sigma];" + : [as0] "+&r" (as0) + : [sigma] "r" (sigma[2 * i]) + :); + bs0 = (__fp16)0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.h %[as1], %[as1], %[sigma];" + : [as1] "+&r" (as1) + : [sigma] "r" (sigma[2 * i]) + :); + bs1 = (__fp16)0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.h %[as2], %[as2], %[sigma];" + : [as2] "+&r" (as2) + : [sigma] "r" (sigma[2 * i]) + :); + bs2 = (__fp16)0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.h %[as3], %[as3], %[sigma];" + : [as3] "+&r" (as3) + : [sigma] "r" (sigma[2 * i]) + :); + bs3 = (__fp16)0.0f; + } + if (!folded) { + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + } else { + //uint32_t addr = i * (n_tx / 4) * N_BANKS + (j / 4) * N_BANKS; + uint32_t addr = i * N_BANKS; + // Store + pG[addr] = as0; + pG[addr + 1U] = bs0; + pG[addr + 2U] = as1; + pG[addr + 3U] = bs1; + pG[addr + 4U] = as2; + pG[addr + 5U] = bs2; + pG[addr + 6U] = as3; + pG[addr + 7U] = bs3; + } + } + } + return; +} + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + v2h ab; + v2h cd0, cd1, cd2, cd3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + ab = ( *(v2h*)&pH[2U * (k * n_tx + i)] ); + // inputs from matrix H + cd0 = ( *(v2h*)&pH[2U * (k * n_tx + j)] ); + cd1 = ( *(v2h*)&pH[2U * (k * n_tx + j + 1U)] ); + cd2 = ( *(v2h*)&pH[2U * (k * n_tx + j + 2U)] ); + cd3 = ( *(v2h*)&pH[2U * (k * n_tx + j + 3U)] ); + + uint32_t ndc0, ndc1, ndc2, ndc3; + const uint32_t val = 0x3C00BC00; + const uint32_t mask = 0x00010002; + + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + b * d + "vfdotpex.s.h %[as0], %[ab], %[cd0];" + "vfdotpex.s.h %[as1], %[ab], %[cd1];" + "vfdotpex.s.h %[as2], %[ab], %[cd2];" + "vfdotpex.s.h %[as3], %[ab], %[cd3];" + // + "pv.shuffle2.h %[ndc0], %[cd0], %[mask];" + "pv.shuffle2.h %[ndc1], %[cd1], %[mask];" + "pv.shuffle2.h %[ndc2], %[cd2], %[mask];" + "pv.shuffle2.h %[ndc3], %[cd3], %[mask];" + // + "vfmul.h %[ndc0], %[val], %[ndc0];" + "vfmul.h %[ndc1], %[val], %[ndc1];" + "vfmul.h %[ndc2], %[val], %[ndc2];" + "vfmul.h %[ndc3], %[val], %[ndc3];" + // a * d - b * c + "vfdotpex.s.h %[as0], %[ab], %[ndc0];" + "vfdotpex.s.h %[as1], %[ab], %[ndc1];" + "vfdotpex.s.h %[as2], %[ab], %[ndc2];" + "vfdotpex.s.h %[as3], %[ab], %[ndc3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3), + [ndc0] "+r" (ndc0), [ndc1] "+r" (ndc1), [ndc2] "+r" (ndc2), [ndc3] "+r" (ndc3) + : [ab] "r" (ab), [val] "r" (val), [mask] "r" (mask), + [cd0] "r" (cd0), [cd1] "r" (cd1), [cd2] "r" (cd2), [cd3] "r" (cd3) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile ( + "fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r" (as0) + : [sigma] "r" (sigma[2 * i]) + :); + bs0 = 0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r" (as1) + : [sigma] "r" (sigma[2 * i]) + :); + bs1 = 0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r" (as2) + : [sigma] "r" (sigma[2 * i]) + :); + bs2 = 0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r" (as3) + : [sigma] "r" (sigma[2 * i]) + :); + bs3 = 0.0f; + } + // Store + v2h res0, res1, res2, res3; + asm volatile( + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r" (res0), [res1] "=&r" (res1), [res2] "=&r" (res2), [res3] "=&r" (res3) + : [as0] "r" (as0), [as1] "r" (as1), [as2] "r" (as2), [as3] "r" (as3), + [bs0] "r" (bs0), [bs1] "r" (bs1), [bs2] "r" (bs2), [bs3] "r" (bs3) + : + ); + ( *(v2h*)&pG[2 * (i * n_tx + j)] ) = res0; + ( *(v2h*)&pG[2 * (i * n_tx + j + 1U)] ) = res1; + ( *(v2h*)&pG[2 * (i * n_tx + j + 2U)] ) = res2; + ( *(v2h*)&pG[2 * (i * n_tx + j + 3U)] ) = res3; + j += 4; + } while (j < (n_tx >> 2U)); + } + return; +} + +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { + + uint32_t i, j; + __fp16 a0, a1, a2, a3; + __fp16 b0, b1, b2, b3; + __fp16 c, d; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.h %[as0], %[a0], %[c], %[as0];" + "fmadd.h %[as1], %[a1], %[c], %[as1];" + "fmadd.h %[as2], %[a2], %[c], %[as2];" + "fmadd.h %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.h %[bs0], %[a0], %[d], %[bs0];" + "fmadd.h %[bs1], %[a1], %[d], %[bs1];" + "fmadd.h %[bs2], %[a2], %[d], %[bs2];" + "fmadd.h %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.h %[as0], %[b0], %[d], %[as0];" + "fmadd.h %[as1], %[b1], %[d], %[as1];" + "fmadd.h %[as2], %[b2], %[d], %[as2];" + "fmadd.h %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + if (!folded) { + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } else { + // Store + uint32_t addr = (i / 4) * N_BANKS; + py[addr] = as0; + py[addr + 1U] = bs0; + py[addr + 2U] = as1; + py[addr + 3U] = bs1; + py[addr + 4U] = as2; + py[addr + 5U] = bs2; + py[addr + 6U] = as3; + py[addr + 7U] = bs3; + i += 4; + } + + } while (i < n_tx); + return; +} + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * (i * n + i)]; + as = (__fp16)in[2U * i]; + bs = (__fp16)in[2U * i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = (__fp16)in[2 * (n - i - 1)]; + bs = (__fp16)in[2 * (n - i - 1) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + +void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[j * N_BANKS + 2 * j]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[j * N_BANKS + 2 * k]; + b = pL[j * N_BANKS + 2 * k + 1]; + asm volatile( + "fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[j * N_BANKS + 2 * j] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[i * N_BANKS + 2 * j]; + bp = pSrc[i * N_BANKS + 2 * j + 1]; + // Diag + diag = pL[j * N_BANKS + 2 * j]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[i * N_BANKS + 2 * k]; + b = pL[i * N_BANKS + 2 * k + 1]; + c = pL[j * N_BANKS + 2 * k]; + d = pL[j * N_BANKS + 2 * k + 1]; + asm volatile ( + "fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[i * N_BANKS + 2 * j] = ap; + pL[i * N_BANKS + 2 * j + 1] = bp; + } + + } + return; +} + +void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[i * N_BANKS + 2 * i]; + as = (__fp16)in[2U * i]; + bs = (__fp16)in[2U * i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[i * N_BANKS + 2 * j]; + b = pL[i * N_BANKS + 2 * j + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + uint32_t rev_i = (n - 1 - i); + diag = pL[rev_i * N_BANKS + 2 * rev_i]; + as = (__fp16)in[2 * rev_i]; + bs = (__fp16)in[2 * rev_i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + uint32_t rev_j = (n - 1 - j); + a = pL[rev_j * N_BANKS + 2 * rev_i]; + b = pL[rev_j * N_BANKS + 2 * rev_i + 1]; + c = x[2U * rev_j]; + d = x[2U * rev_j + 1]; + asm volatile ( + "fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * rev_i] = ax; + x[2U * rev_i + 1] = bx; + } + return; +} diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl b/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl index fc8b71a7e..9ad05570d 100644 --- a/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl +++ b/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl @@ -17,23 +17,18 @@ #define N_TX (${N_tx}) #define N_RX (${N_rx}) +#define N_ITR (${N_itr}) // Inputs -float In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; +float In_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; -float In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; +float In_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; -float In_b[${2 * N_rx}] = ${array_to_cstr(b)}; +float In_b[${2 * N_rx * N_itr}] = ${array_to_cstr(b)}; -float In_sigma[${N_tx}] = ${array_to_cstr(sigma)}; +float In_sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; // Outputs -float Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; - -float Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; - -float Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; - -float Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; +float Out_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.py b/software/apps/mimo_mmse_f32/data_mimo_mmse.py index e47c30b14..6a46e2c40 100644 --- a/software/apps/mimo_mmse_f32/data_mimo_mmse.py +++ b/software/apps/mimo_mmse_f32/data_mimo_mmse.py @@ -21,51 +21,8 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), ** with file.open('w') as f: f.write(template.render(**kwargs)) -def main(): - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path.cwd(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='First dimension.' - ) - - args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers +def gen_input_data(N_rx, N_tx): # Create channel matrix H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float32) @@ -78,6 +35,7 @@ def main(): H_h = np.asmatrix(H).H G = H_h * H + print(sigma) G = G + np.diag(sigma) # Cholesky decomposition L = np.linalg.cholesky(G) @@ -125,14 +83,86 @@ def main(): x_RI = x_RI.astype(np.float32) y_RI = y_RI.astype(np.float32) s_RI = s_RI.astype(np.float32) - print("Channel matrix in (Re, Im) format:\n", H_RI) - print("Hermitian matrix in (Re, Im) format:\n", G_RI) - print("Cholesky dec. in (Re, Im) format:\n", L_RI) - print("Input vector in (Re, Im) format:\n", b_RI) - print("Output vector in (Re, Im) format:\n", x_RI) + # print("Channel matrix in (Re, Im) format:\n", H_RI) + # print("Hermitian matrix in (Re, Im) format:\n", G_RI) + # print("Cholesky dec. in (Re, Im) format:\n", L_RI) + # print("Input vector in (Re, Im) format:\n", b_RI) + # print("Output vector in (Re, Im) format:\n", x_RI) + + return sigma, H_RI, G_RI, b_RI, x_RI + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path.cwd(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='Second dimension.' + ) + parser.add_argument( + "-k", + "--iterations", + type=int, + required=False, + default=256, + help='Iterations.' + ) + + args = parser.parse_args() + N_tx=args.transmitters + N_rx=args.receivers + itr=args.iterations + + sigma = np.zeros([itr, N_tx]) + H_RI = np.zeros([itr, 2*N_tx*N_rx]) + G_RI = np.zeros([itr, 2*N_tx*N_tx]) + b_RI = np.zeros([itr, 2*N_rx]) + x_RI = np.zeros([itr, 2*N_tx]) + for k in range(itr): + sigma[k,:], H_RI[k,:], G_RI[k,:], b_RI[k,:], x_RI[k,:] = gen_input_data(N_rx, N_tx) + + sigma = np.reshape(sigma, (N_tx*itr)) + H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)) + G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)) + b_RI = np.reshape(b_RI, (2*N_rx*itr)) + x_RI = np.reshape(x_RI, (2*N_tx*itr)) - kwargs = {'name': 'mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + kwargs = {'name': 'mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) if __name__ == "__main__": diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h b/software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h new file mode 100644 index 000000000..5322f38a6 --- /dev/null +++ b/software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h @@ -0,0 +1,11669 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +#define N_TX (4) +#define N_RX (32) +#define N_ITR (256) + +// Inputs + +float In_H[65536] = { +0.4038008451461792f, 0.6173248291015625f, 0.5107765793800354f, 0.1460779905319214f, 0.5043531656265259f, 0.06418585032224655f, 0.7084245085716248f, 0.39431414008140564f, +0.7955120801925659f, 0.44033658504486084f, 0.5438223481178284f, 0.8306044936180115f, 0.001210413291119039f, 0.3128393292427063f, 0.42008545994758606f, 0.09440236538648605f, +0.5720314383506775f, 0.34024885296821594f, 0.8237878084182739f, 0.37966856360435486f, 0.05407728627324104f, 0.6888185143470764f, 0.46532002091407776f, 0.2960030734539032f, +0.7215996980667114f, 0.9310985803604126f, 0.028908787295222282f, 0.8760971426963806f, 0.18658870458602905f, 0.8332364559173584f, 0.58184415102005f, 0.6589711308479309f, +0.6449862122535706f, 0.40234774351119995f, 0.5163814425468445f, 0.057923104614019394f, 0.7017018795013428f, 0.8487687706947327f, 0.08686386793851852f, 0.7683120965957642f, +0.673364520072937f, 0.16476097702980042f, 0.3091551661491394f, 0.8145793676376343f, 0.5650898218154907f, 0.4070320129394531f, 0.22323794662952423f, 0.19947892427444458f, +0.6555288434028625f, 0.48187896609306335f, 0.43883016705513f, 0.8316453695297241f, 0.40346449613571167f, 0.7768478989601135f, 0.5870890617370605f, 0.6466290950775146f, +0.9095276594161987f, 0.9982682466506958f, 0.12767910957336426f, 0.6573766469955444f, 0.6696211099624634f, 0.8278431296348572f, 0.7250009775161743f, 0.4389420747756958f, +0.03271617367863655f, 0.4669024348258972f, 0.06675206124782562f, 0.13014139235019684f, 0.35484275221824646f, 0.03628074377775192f, 0.08319918066263199f, 0.08432038128376007f, +0.3809218108654022f, 0.5209614038467407f, 0.6798951029777527f, 0.9367861747741699f, 0.8742104768753052f, 0.8930763602256775f, 0.21545785665512085f, 0.6832006573677063f, +0.6729230880737305f, 0.9920696020126343f, 0.9182525873184204f, 0.8270814418792725f, 0.1410100758075714f, 0.5718618035316467f, 0.236687570810318f, 0.08896446973085403f, +0.7807153463363647f, 0.6463040709495544f, 0.09377460181713104f, 0.6409379243850708f, 0.8647860288619995f, 0.6110950708389282f, 0.691181480884552f, 0.873837411403656f, +0.7277462482452393f, 0.7493805885314941f, 0.9704478979110718f, 0.9538936018943787f, 0.1965647041797638f, 0.44163286685943604f, 0.005829260218888521f, 0.6230819821357727f, +0.9988417029380798f, 0.5992085933685303f, 0.5552159547805786f, 0.7446780800819397f, 0.5730373859405518f, 0.6293004751205444f, 0.22471891343593597f, 0.14788590371608734f, +0.9800208806991577f, 0.6864814162254333f, 0.09602656215429306f, 0.6587615013122559f, 0.9064176678657532f, 0.22667436301708221f, 0.0749938040971756f, 0.5938957929611206f, +0.9706774353981018f, 0.3235556185245514f, 0.48175686597824097f, 0.182091623544693f, 0.9470621347427368f, 0.8519145846366882f, 0.7906496524810791f, 0.4088228642940521f, +0.30293095111846924f, 0.7883467078208923f, 0.45358729362487793f, 0.8509730100631714f, 0.9398403763771057f, 0.9110036492347717f, 0.7330203056335449f, 0.3786163032054901f, +0.37025463581085205f, 0.7404962778091431f, 0.29091405868530273f, 0.9469988346099854f, 0.16437241435050964f, 0.30221694707870483f, 0.0005268790991976857f, 0.7492226362228394f, +0.6225520968437195f, 0.017933040857315063f, 0.6054339408874512f, 0.8072811365127563f, 0.5451026558876038f, 0.48694688081741333f, 0.8165363669395447f, 0.483970582485199f, +0.8129370808601379f, 0.7666851282119751f, 0.4091738164424896f, 0.6820945739746094f, 0.07455933839082718f, 0.41375532746315f, 0.4828552305698395f, 0.13230684399604797f, +0.224823996424675f, 0.5472673773765564f, 0.41761890053749084f, 0.5327231884002686f, 0.12046654522418976f, 0.19256815314292908f, 0.837169349193573f, 0.36334556341171265f, +0.4305964708328247f, 0.23973576724529266f, 0.719364583492279f, 0.7333202362060547f, 0.16436539590358734f, 0.6159131526947021f, 0.9326565861701965f, 0.02904396876692772f, +0.8871706128120422f, 0.8578182458877563f, 0.1403864324092865f, 0.25414732098579407f, 0.6747291684150696f, 0.3137810230255127f, 0.9170466065406799f, 0.8209288716316223f, +0.5995940566062927f, 0.22055654227733612f, 0.8539385795593262f, 0.4681205451488495f, 0.9959939122200012f, 0.8039447069168091f, 0.0007057275506667793f, 0.6582226753234863f, +0.7780123949050903f, 0.20103280246257782f, 0.477359414100647f, 0.8522371053695679f, 0.41163840889930725f, 0.7971829175949097f, 0.31538593769073486f, 0.1108694076538086f, +0.7028176188468933f, 0.9050687551498413f, 0.17204317450523376f, 0.17603665590286255f, 0.2716582119464874f, 0.3517414927482605f, 0.595378041267395f, 0.9880095720291138f, +0.3213639557361603f, 0.24104948341846466f, 0.15182726085186005f, 0.9198322296142578f, 0.02022220753133297f, 0.25000637769699097f, 0.9475390911102295f, 0.9714106917381287f, +0.7307815551757812f, 0.2673451602458954f, 0.6388694643974304f, 0.7323508262634277f, 0.42398738861083984f, 0.706953763961792f, 0.4688495695590973f, 0.9860943555831909f, +0.937563419342041f, 0.6813467144966125f, 0.5287520289421082f, 0.8696683645248413f, 0.5269515514373779f, 0.7488188147544861f, 0.28836187720298767f, 0.26796966791152954f, +0.6869212985038757f, 0.4543153643608093f, 0.8559163212776184f, 0.4089205265045166f, 0.8802772164344788f, 0.6540223360061646f, 0.8404666781425476f, 0.8911178112030029f, +0.33209046721458435f, 0.7455626130104065f, 0.6228201985359192f, 0.6714975237846375f, 0.0624462366104126f, 0.749582827091217f, 0.22969751060009003f, 0.16806384921073914f, +0.7853042483329773f, 0.8364361524581909f, 0.9051796197891235f, 0.7347776889801025f, 0.8239062428474426f, 0.33568519353866577f, 0.4621071517467499f, 0.9977510571479797f, +0.2236720621585846f, 0.8158451318740845f, 0.40563759207725525f, 0.2607764005661011f, 0.47628721594810486f, 0.22875110805034637f, 0.2829097509384155f, 0.07204850763082504f, +0.896275520324707f, 0.8502523303031921f, 0.6023401618003845f, 0.5758042335510254f, 0.164246067404747f, 0.5368783473968506f, 0.7923163771629333f, 0.3806174695491791f, +0.11505113542079926f, 0.8054330348968506f, 0.5496359467506409f, 0.1419110894203186f, 0.21056528389453888f, 0.0858304426074028f, 0.07660073786973953f, 0.10988783091306686f, +0.8411141633987427f, 0.8112995028495789f, 0.25021761655807495f, 0.6392019391059875f, 0.23768344521522522f, 0.006639790255576372f, 0.7887653112411499f, 0.726469099521637f, +0.5297747850418091f, 0.8873420357704163f, 0.970978319644928f, 0.8582863211631775f, 0.9611812233924866f, 0.21383266150951385f, 0.2744409739971161f, 0.5805203318595886f, +0.8268503546714783f, 0.11864553391933441f, 0.21256645023822784f, 0.471638947725296f, 0.9617676138877869f, 0.41079390048980713f, 0.9664630889892578f, 0.791283369064331f, +0.604118287563324f, 0.750210165977478f, 0.2567608952522278f, 0.48915234208106995f, 0.06708459556102753f, 0.6943570971488953f, 0.4274960160255432f, 0.10281238704919815f, +0.9893459677696228f, 0.987058162689209f, 0.03417766094207764f, 0.5655078887939453f, 0.8917734026908875f, 0.21631473302841187f, 0.6361753344535828f, 0.7665709853172302f, +0.8925094604492188f, 0.30190494656562805f, 0.5428469181060791f, 0.29032865166664124f, 0.8735240697860718f, 0.2899599075317383f, 0.14414367079734802f, 0.16481386125087738f, +0.2511381506919861f, 0.003423642134293914f, 0.7357789278030396f, 0.7147493362426758f, 0.9722854495048523f, 0.5305964350700378f, 0.044335152953863144f, 0.812271773815155f, +0.9572027921676636f, 0.6212048530578613f, 0.8472774624824524f, 0.4352010190486908f, 0.9756060838699341f, 0.7027126550674438f, 0.1404779553413391f, 0.31558895111083984f, +0.3236110806465149f, 0.6053635478019714f, 0.16214556992053986f, 0.9111859798431396f, 0.796992301940918f, 0.15350107848644257f, 0.18588677048683167f, 0.9108716249465942f, +0.9162441492080688f, 0.2253263145685196f, 0.07627786695957184f, 0.4876940846443176f, 0.0008666978101246059f, 0.8155022859573364f, 0.39986827969551086f, 0.9236415028572083f, +0.24375773966312408f, 0.20587211847305298f, 0.10152994096279144f, 0.03380850702524185f, 0.5444380640983582f, 0.7236935496330261f, 0.007570034824311733f, 0.319342702627182f, +0.07033758610486984f, 0.607696533203125f, 0.43373674154281616f, 0.6549728512763977f, 0.860161304473877f, 0.6692878603935242f, 0.7362455725669861f, 0.44764649868011475f, +0.013390322215855122f, 0.25070568919181824f, 0.602091372013092f, 0.5395238995552063f, 0.18774792551994324f, 0.8643114566802979f, 0.9824128150939941f, 0.8575636744499207f, +0.9586789011955261f, 0.27897217869758606f, 0.42813095450401306f, 0.1375235915184021f, 0.33755287528038025f, 0.4846070408821106f, 0.2616393268108368f, 0.04956001043319702f, +0.7553493976593018f, 0.7497186064720154f, 0.19613105058670044f, 0.9669169187545776f, 0.6325827836990356f, 0.972079873085022f, 0.43503859639167786f, 0.5789327621459961f, +0.14500193297863007f, 0.6639429926872253f, 0.7154638171195984f, 0.911987841129303f, 0.40799757838249207f, 0.2815764546394348f, 0.516660749912262f, 0.4365593492984772f, +0.4407232105731964f, 0.5826596617698669f, 0.33357441425323486f, 0.6642404794692993f, 0.5447126030921936f, 0.46021223068237305f, 0.3604213297367096f, 0.9086015820503235f, +0.6767811179161072f, 0.6350775957107544f, 0.7798640727996826f, 0.6245513558387756f, 0.3486948311328888f, 0.7746884226799011f, 0.17957139015197754f, 0.0798448845744133f, +0.953296959400177f, 0.21812479197978973f, 0.9121734499931335f, 0.183176189661026f, 0.8957120180130005f, 0.7742944955825806f, 0.0057313088327646255f, 0.3412402272224426f, +0.9081753492355347f, 0.5909342765808105f, 0.8850290179252625f, 0.22903893887996674f, 0.8322344422340393f, 0.05029794201254845f, 0.8091513514518738f, 0.3439735770225525f, +0.6511635184288025f, 0.6322695016860962f, 0.1758347600698471f, 0.723848283290863f, 0.5750062465667725f, 0.7120471000671387f, 0.9800039529800415f, 0.892017662525177f, +0.43064045906066895f, 0.7683447599411011f, 0.6042857766151428f, 0.7428677678108215f, 0.35976409912109375f, 0.5952857732772827f, 0.3509039580821991f, 0.7300918102264404f, +0.6633567214012146f, 0.974700927734375f, 0.27493271231651306f, 0.9453086256980896f, 0.6334176659584045f, 0.051995083689689636f, 0.8318513631820679f, 0.10869158059358597f, +0.02258594147861004f, 0.5216464996337891f, 0.6441355347633362f, 0.7188768982887268f, 0.9641885161399841f, 0.3423616290092468f, 0.5083031058311462f, 0.6049621105194092f, +0.4474163055419922f, 0.09401427209377289f, 0.0460597425699234f, 0.9367678165435791f, 0.8681971430778503f, 0.022508876398205757f, 0.48997101187705994f, 0.7671323418617249f, +0.25562191009521484f, 0.5368454456329346f, 0.6791978478431702f, 0.5856485962867737f, 0.9753760695457458f, 0.20079901814460754f, 0.15294848382472992f, 0.34197115898132324f, +0.4482836127281189f, 0.8979939222335815f, 0.4282113015651703f, 0.9982740879058838f, 0.9162984490394592f, 0.6814658641815186f, 0.7527796626091003f, 0.35990217328071594f, +0.9623938202857971f, 0.375276118516922f, 0.6705772876739502f, 0.39392662048339844f, 0.3103500008583069f, 0.456575870513916f, 0.8158798813819885f, 0.4354647994041443f, +0.9695246815681458f, 0.5543639063835144f, 0.32080888748168945f, 0.2653619647026062f, 0.8748108744621277f, 0.8341066241264343f, 0.07356052845716476f, 0.9299525022506714f, +0.34407055377960205f, 0.5528655052185059f, 0.5249475836753845f, 0.3182297348976135f, 0.7291650176048279f, 0.26824167370796204f, 0.5031522512435913f, 0.717647910118103f, +0.2549307644367218f, 0.11139272153377533f, 0.21345868706703186f, 0.19663579761981964f, 0.6423426866531372f, 0.48599302768707275f, 0.05520268529653549f, 0.21658039093017578f, +0.26289477944374084f, 0.03891615942120552f, 0.1778952181339264f, 0.8701794743537903f, 0.04061054810881615f, 0.8349348306655884f, 0.1905297189950943f, 0.836197555065155f, +0.992072582244873f, 0.45624348521232605f, 0.6222002506256104f, 0.014750600792467594f, 0.12363412231206894f, 0.07593085616827011f, 0.9877384901046753f, 0.20442862808704376f, +0.25778719782829285f, 0.03302798420190811f, 0.25124984979629517f, 0.9406927227973938f, 0.3704623579978943f, 0.19262731075286865f, 0.50537109375f, 0.9867780208587646f, +0.5816930532455444f, 0.03570723906159401f, 0.7633745670318604f, 0.44253087043762207f, 0.7523005604743958f, 0.9007593989372253f, 0.3407193720340729f, 0.9752737879753113f, +0.7845664620399475f, 0.33191096782684326f, 0.816961407661438f, 0.11940871924161911f, 0.5921015739440918f, 0.506059467792511f, 0.39622634649276733f, 0.43731412291526794f, +0.6270533204078674f, 0.3668718636035919f, 0.3787367641925812f, 0.869227409362793f, 0.2922556400299072f, 0.514864444732666f, 0.47367051243782043f, 0.12820182740688324f, +0.9524329900741577f, 0.017813239246606827f, 0.64204341173172f, 0.6261521577835083f, 0.9745805859565735f, 0.42077165842056274f, 0.783892035484314f, 0.9974766969680786f, +0.5111983418464661f, 0.5879312753677368f, 0.1091308742761612f, 0.8575202226638794f, 0.8198674321174622f, 0.37479037046432495f, 0.08982344716787338f, 0.7549384236335754f, +0.39479124546051025f, 0.20943917334079742f, 0.058026719838380814f, 0.5203288197517395f, 0.1443040370941162f, 0.6757243871688843f, 0.6840780973434448f, 0.2168327420949936f, +0.9979744553565979f, 0.9774198532104492f, 0.14252214133739471f, 0.41886842250823975f, 0.24888862669467926f, 0.4531658887863159f, 0.5305812358856201f, 0.3975133001804352f, +0.9972975850105286f, 0.4871402680873871f, 0.9795539975166321f, 0.8048341274261475f, 0.6459767818450928f, 0.7751482129096985f, 0.5355363488197327f, 0.8710025548934937f, +0.41116195917129517f, 0.6591435074806213f, 0.005528569221496582f, 0.3740944266319275f, 0.46392977237701416f, 0.885549008846283f, 0.7023278474807739f, 0.6206203103065491f, +0.456095814704895f, 0.7015979886054993f, 0.2133687287569046f, 0.4369044303894043f, 0.6075477004051208f, 0.8520315289497375f, 0.5990886092185974f, 0.20289075374603271f, +0.9720621705055237f, 0.8770979046821594f, 0.7166780829429626f, 0.46844613552093506f, 0.24475982785224915f, 0.15371043980121613f, 0.027225065976381302f, 0.5266590118408203f, +0.8029122352600098f, 0.25858283042907715f, 0.005070050712674856f, 0.8323395252227783f, 0.24126514792442322f, 0.7584813237190247f, 0.6354752779006958f, 0.305867463350296f, +0.9533195495605469f, 0.5107483267784119f, 0.5042592883110046f, 0.7031418681144714f, 0.4823998212814331f, 0.6182818412780762f, 0.1852988302707672f, 0.2868100106716156f, +0.7902080416679382f, 0.7095887064933777f, 0.236963152885437f, 0.603965699672699f, 0.2228451669216156f, 0.834987461566925f, 0.4683404564857483f, 0.4246814548969269f, +0.7350913286209106f, 0.5167381167411804f, 0.042391616851091385f, 0.9830536842346191f, 0.696902334690094f, 0.9533034563064575f, 0.17755171656608582f, 0.3204118311405182f, +0.9992097020149231f, 0.8040647506713867f, 0.7871402502059937f, 0.7650965452194214f, 0.7003965973854065f, 0.19106881320476532f, 0.39432650804519653f, 0.9008608460426331f, +0.14340929687023163f, 0.41363051533699036f, 0.1355314552783966f, 0.2132045328617096f, 0.8274447321891785f, 0.06218286231160164f, 0.6020572185516357f, 0.1900583803653717f, +0.49826914072036743f, 0.5290828347206116f, 0.9563583135604858f, 0.2944870591163635f, 0.6458893418312073f, 0.9724088907241821f, 0.2319880574941635f, 0.04907523840665817f, +0.7518948912620544f, 0.6168137788772583f, 0.4435807466506958f, 0.16814278066158295f, 0.24166138470172882f, 0.7298534512519836f, 0.3787272274494171f, 0.9694621562957764f, +0.5691134333610535f, 0.12990829348564148f, 0.8431991934776306f, 0.4462374746799469f, 0.7553721070289612f, 0.5610243082046509f, 0.3858260214328766f, 0.12424712628126144f, +0.7660791873931885f, 0.7202019691467285f, 0.6091572046279907f, 0.5484327673912048f, 0.14605259895324707f, 0.674640417098999f, 0.9124699234962463f, 0.4578760266304016f, +0.1341683566570282f, 0.5776897668838501f, 0.06637489795684814f, 0.05708745867013931f, 0.2550904452800751f, 0.3927345871925354f, 0.588829755783081f, 0.8906244039535522f, +0.5924310684204102f, 0.8835069537162781f, 0.1764705330133438f, 0.8500655293464661f, 0.8475945591926575f, 0.5196871757507324f, 0.8233088254928589f, 0.31459248065948486f, +0.9599975347518921f, 0.07415231317281723f, 0.932571530342102f, 0.7890575528144836f, 0.40832003951072693f, 0.13386400043964386f, 0.16912032663822174f, 0.23051896691322327f, +0.48028403520584106f, 0.4269631505012512f, 0.6261872053146362f, 0.4080004394054413f, 0.01954115554690361f, 0.6834607124328613f, 0.7160469889640808f, 0.2521931231021881f, +0.42680203914642334f, 0.14680075645446777f, 0.9098132252693176f, 0.6848029494285583f, 0.5220187902450562f, 0.6929498910903931f, 0.6502159833908081f, 0.9154860377311707f, +0.04229097440838814f, 0.9342242479324341f, 0.12335517257452011f, 0.1349264681339264f, 0.2657362222671509f, 0.5027443170547485f, 0.8388557434082031f, 0.21128450334072113f, +0.604132890701294f, 0.031855542212724686f, 0.7395219802856445f, 0.9979146718978882f, 0.2436923086643219f, 0.6734309196472168f, 0.10507804900407791f, 0.4227162003517151f, +0.12049931287765503f, 0.8651747107505798f, 0.011011654511094093f, 0.3812532424926758f, 0.2901940941810608f, 0.8497999906539917f, 0.04323306679725647f, 0.029702521860599518f, +0.28469377756118774f, 0.8806503415107727f, 0.4329036772251129f, 0.07007066905498505f, 0.6226766705513f, 0.7074038982391357f, 0.010624448768794537f, 0.743405818939209f, +0.5971864461898804f, 0.07259450852870941f, 0.4477456510066986f, 0.6874161958694458f, 0.6151353120803833f, 0.32621654868125916f, 0.7891626358032227f, 0.8368787169456482f, +0.7238761782646179f, 0.970390796661377f, 0.32233726978302f, 0.8740213513374329f, 0.6128212809562683f, 0.5598103404045105f, 0.5262055397033691f, 0.7185714244842529f, +0.297342449426651f, 0.7524820566177368f, 0.27335524559020996f, 0.5990568995475769f, 0.9881353974342346f, 0.132586270570755f, 0.896625280380249f, 0.7569987773895264f, +0.7622183561325073f, 0.35304519534111023f, 0.5201383233070374f, 0.20898622274398804f, 0.18783508241176605f, 0.9901275634765625f, 0.6008115410804749f, 0.42943936586380005f, +0.697616696357727f, 0.4039026200771332f, 0.12065009772777557f, 0.9106840491294861f, 0.10324184596538544f, 0.5162100791931152f, 0.01313314400613308f, 0.3208296298980713f, +0.35974830389022827f, 0.012764985673129559f, 0.34169676899909973f, 0.3292010724544525f, 0.07477813214063644f, 0.1997598260641098f, 0.8019096255302429f, 0.9507997632026672f, +0.9659827947616577f, 0.9693688154220581f, 0.08888378739356995f, 0.7604982852935791f, 0.3041057884693146f, 0.7568978667259216f, 0.6257233619689941f, 0.8547502756118774f, +0.8502286076545715f, 0.558427631855011f, 0.1758124977350235f, 0.9549395442008972f, 0.30189549922943115f, 0.6110517382621765f, 0.9124147891998291f, 0.40371158719062805f, +0.9094021916389465f, 0.2615388333797455f, 0.8916113376617432f, 0.862790048122406f, 0.7079054713249207f, 0.5952940583229065f, 0.3985186815261841f, 0.5692133903503418f, +0.6841224431991577f, 0.8442018032073975f, 0.09339064359664917f, 0.36726534366607666f, 0.2504575550556183f, 0.9449877738952637f, 0.30472302436828613f, 0.390432745218277f, +0.10379936546087265f, 0.7088719606399536f, 0.04900166392326355f, 0.9326753616333008f, 0.7249475121498108f, 0.6357792019844055f, 0.29568976163864136f, 0.5025238394737244f, +0.4522526264190674f, 0.8619301319122314f, 0.2935083508491516f, 0.2416599541902542f, 0.11460178345441818f, 0.8771856427192688f, 0.25447019934654236f, 0.530114471912384f, +0.15019723773002625f, 0.24940438568592072f, 0.40536800026893616f, 0.6750154495239258f, 0.9904710054397583f, 0.5125382542610168f, 0.241010382771492f, 0.1258048266172409f, +0.7946727871894836f, 0.3695266842842102f, 0.21277543902397156f, 0.6327676177024841f, 0.4713174104690552f, 0.4220590591430664f, 0.05630657076835632f, 0.9616613984107971f, +0.258323073387146f, 0.8257670998573303f, 0.24354641139507294f, 0.5697969198226929f, 0.9085783362388611f, 0.48695966601371765f, 0.30030468106269836f, 0.4447028636932373f, +0.6289662718772888f, 0.7155400514602661f, 0.4283978044986725f, 0.018818968906998634f, 0.5479245185852051f, 0.24654492735862732f, 0.5889907479286194f, 0.3669295907020569f, +0.3548247516155243f, 0.11888378113508224f, 0.7100120782852173f, 0.46215617656707764f, 0.26342782378196716f, 0.3614104390144348f, 0.5580580830574036f, 0.25590652227401733f, +0.6771543622016907f, 0.6564838290214539f, 0.4043053090572357f, 0.8610690236091614f, 0.9938013553619385f, 0.08831272274255753f, 0.06569593399763107f, 0.3186834454536438f, +0.9738202691078186f, 0.5811177492141724f, 0.6324065327644348f, 0.45318910479545593f, 0.7544018626213074f, 0.37514910101890564f, 0.7357104420661926f, 0.4658891260623932f, +0.9457717537879944f, 0.17730896174907684f, 0.655107319355011f, 0.2077244073152542f, 0.9230954051017761f, 0.6289580464363098f, 0.7410279512405396f, 0.40685757994651794f, +0.1574360728263855f, 0.40768539905548096f, 0.33743810653686523f, 0.9281395077705383f, 0.5944134593009949f, 0.27994564175605774f, 0.566735565662384f, 0.16405346989631653f, +0.9326213598251343f, 0.9417843222618103f, 0.9210550785064697f, 0.8537810444831848f, 0.5565312504768372f, 0.3209660053253174f, 0.31082361936569214f, 0.6361640095710754f, +0.5467991232872009f, 0.4456123113632202f, 0.8550904989242554f, 0.8222294449806213f, 0.02819088287651539f, 0.3756231367588043f, 0.4313218295574188f, 0.15903103351593018f, +0.2987709641456604f, 0.9712275862693787f, 0.9577268958091736f, 0.27989038825035095f, 0.599882185459137f, 0.7109502553939819f, 0.6589823961257935f, 0.34365910291671753f, +0.5761561393737793f, 0.04243135452270508f, 0.7953044772148132f, 0.24721671640872955f, 0.7932955622673035f, 0.9574152827262878f, 0.30924370884895325f, 0.205701544880867f, +0.5643843412399292f, 0.7040565609931946f, 0.4620008170604706f, 0.8017503023147583f, 0.8964993357658386f, 0.3592988848686218f, 0.07772044092416763f, 0.6712867617607117f, +0.300188809633255f, 0.9162359833717346f, 0.9763498306274414f, 0.8713567852973938f, 0.40085792541503906f, 0.7243505120277405f, 0.5187148451805115f, 0.6672974824905396f, +0.3751969635486603f, 0.563930332660675f, 0.8798332810401917f, 0.9371258020401001f, 0.527320384979248f, 0.8165835738182068f, 0.9400210976600647f, 0.8713887929916382f, +0.506681501865387f, 0.9430877566337585f, 0.13213187456130981f, 0.2941829562187195f, 0.8098886609077454f, 0.43033990263938904f, 0.8029703497886658f, 0.39520713686943054f, +0.5548492074012756f, 0.601239800453186f, 0.3256020247936249f, 0.7218040823936462f, 0.563919723033905f, 0.34806516766548157f, 0.6261191964149475f, 0.43764156103134155f, +0.7499706149101257f, 0.7785638570785522f, 0.4913691282272339f, 0.9064134359359741f, 0.14433464407920837f, 0.054461464285850525f, 0.583003044128418f, 0.5089849829673767f, +0.3319993019104004f, 0.9238489270210266f, 0.677304208278656f, 0.0233667753636837f, 0.06596208363771439f, 0.35255590081214905f, 0.592656135559082f, 0.40857380628585815f, +0.16196031868457794f, 0.6717977523803711f, 0.8118371963500977f, 0.792678713798523f, 0.48418933153152466f, 0.6150592565536499f, 0.35214531421661377f, 0.3409119248390198f, +0.6497361063957214f, 0.41917115449905396f, 0.23363636434078217f, 0.1738341897726059f, 0.4562826454639435f, 0.4905064105987549f, 0.4625667333602905f, 0.2374267578125f, +0.3272619843482971f, 0.23156507313251495f, 0.11704130470752716f, 0.3879474103450775f, 0.09819057583808899f, 0.6661377549171448f, 0.10253797471523285f, 0.1805604100227356f, +0.13736923038959503f, 0.6369966864585876f, 0.1848640739917755f, 0.6490429043769836f, 0.0665251836180687f, 0.7683920860290527f, 0.6712520122528076f, 0.21311040222644806f, +0.8067677021026611f, 0.006591446697711945f, 0.3326423168182373f, 0.8853175640106201f, 0.37239283323287964f, 0.23707503080368042f, 0.14608164131641388f, 0.5006018280982971f, +0.2865481376647949f, 0.09852267056703568f, 0.6591965556144714f, 0.5396541357040405f, 0.35972145199775696f, 0.23518608510494232f, 0.4940027892589569f, 0.9753645062446594f, +0.9289149641990662f, 0.6122633814811707f, 0.2477654069662094f, 0.9380113482475281f, 0.8874983787536621f, 0.6107684969902039f, 0.6907516121864319f, 0.10238790512084961f, +0.5272772312164307f, 0.7666522264480591f, 0.3789973556995392f, 0.13179586827754974f, 0.7800381779670715f, 0.7735700607299805f, 0.05232976749539375f, 0.01434215996414423f, +0.542676568031311f, 0.809868335723877f, 0.6346302628517151f, 0.6906660199165344f, 0.38542473316192627f, 0.5134126543998718f, 0.5956386923789978f, 0.06169137731194496f, +0.5036953687667847f, 0.18360018730163574f, 0.43812069296836853f, 0.30370771884918213f, 0.017084328457713127f, 0.30285879969596863f, 0.9152987003326416f, 0.6878378987312317f, +0.9473727941513062f, 0.763750433921814f, 0.0705687627196312f, 0.7290058135986328f, 0.46892306208610535f, 0.36562106013298035f, 0.49348604679107666f, 0.12039142847061157f, +0.3023204207420349f, 0.020682265982031822f, 0.6824755668640137f, 0.27559489011764526f, 0.9783381223678589f, 0.4036865830421448f, 0.45169201493263245f, 0.6166940331459045f, +0.9314141273498535f, 0.9227129817008972f, 0.44970548152923584f, 0.527391254901886f, 0.47859928011894226f, 0.3426186144351959f, 0.6565946936607361f, 0.9708790183067322f, +0.5616151094436646f, 0.8222653865814209f, 0.8017277121543884f, 0.2922569215297699f, 0.9949058294296265f, 0.36035582423210144f, 0.547057569026947f, 0.5297660231590271f, +0.07375975698232651f, 0.2397247552871704f, 0.3049796223640442f, 0.5002681016921997f, 0.7370891571044922f, 0.8021836876869202f, 0.026400616392493248f, 0.025220442563295364f, +0.21253986656665802f, 0.8098782896995544f, 0.2637675106525421f, 0.2658112049102783f, 0.4200013279914856f, 0.9406137466430664f, 0.9151204824447632f, 0.5459005832672119f, +0.05745897814631462f, 0.4294215142726898f, 0.8795196413993835f, 0.8368030786514282f, 0.7698915600776672f, 0.6831247806549072f, 0.5500710606575012f, 0.5563063025474548f, +0.9618794322013855f, 0.42121708393096924f, 0.2814069092273712f, 0.16400198638439178f, 0.8317022323608398f, 0.22326038777828217f, 0.12755385041236877f, 0.9573701620101929f, +0.45478588342666626f, 0.491497278213501f, 0.18918348848819733f, 0.7249332070350647f, 0.2737029492855072f, 0.17908956110477448f, 0.5245621800422668f, 0.8450114727020264f, +0.781822144985199f, 0.5290300846099854f, 0.203523650765419f, 0.10224119573831558f, 0.3406001031398773f, 0.8302140831947327f, 0.35269224643707275f, 0.8434866070747375f, +0.6181958913803101f, 0.17384488880634308f, 0.025117723271250725f, 0.6952447891235352f, 0.12009480595588684f, 0.8143219351768494f, 0.2475905865430832f, 0.04040404036641121f, +0.5292538404464722f, 0.4371492564678192f, 0.4741192162036896f, 0.31316712498664856f, 0.7418057322502136f, 0.961754560470581f, 0.31223246455192566f, 0.8355333209037781f, +0.028386106714606285f, 0.4279876947402954f, 0.6890415549278259f, 0.5343059301376343f, 0.116696797311306f, 0.9488131999969482f, 0.5517303347587585f, 0.2096361666917801f, +0.703264594078064f, 0.5335289239883423f, 0.3459514081478119f, 0.7733539938926697f, 0.8107888698577881f, 0.21875716745853424f, 0.5003461837768555f, 0.4652518033981323f, +0.3898852467536926f, 0.5736117362976074f, 0.9314404726028442f, 0.20103418827056885f, 0.7875267267227173f, 0.37474367022514343f, 0.27072685956954956f, 0.56101393699646f, +0.6099086403846741f, 0.043797027319669724f, 0.8473706245422363f, 0.8708891868591309f, 0.4421731233596802f, 0.22118492424488068f, 0.5853447318077087f, 0.898216187953949f, +0.04275256022810936f, 0.9422290325164795f, 0.5679838061332703f, 0.372746080160141f, 0.36005276441574097f, 0.7912144660949707f, 0.5530272722244263f, 0.8368468284606934f, +0.2925649583339691f, 0.2115991711616516f, 0.23250336945056915f, 0.13850916922092438f, 0.055798109620809555f, 0.07147785276174545f, 0.6813966631889343f, 0.5345316529273987f, +0.65407794713974f, 0.8319506049156189f, 0.05472654476761818f, 0.5431139469146729f, 0.7619543671607971f, 0.11111540347337723f, 0.6007270216941833f, 0.6981271505355835f, +0.26564422249794006f, 0.11839510500431061f, 0.7376317977905273f, 0.6780796647071838f, 0.4066937565803528f, 0.09205574542284012f, 0.43611791729927063f, 0.5712471008300781f, +0.5996711850166321f, 0.342645525932312f, 0.5956647396087646f, 0.34222933650016785f, 0.4366762936115265f, 0.14150646328926086f, 0.9288716316223145f, 0.9795441031455994f, +0.9925452470779419f, 0.953700065612793f, 0.030728088691830635f, 0.8130418658256531f, 0.06091918423771858f, 0.3762485980987549f, 0.25359389185905457f, 0.49817946553230286f, +0.3135921359062195f, 0.43249842524528503f, 0.22588227689266205f, 0.8488891124725342f, 0.11683795601129532f, 0.9781375527381897f, 0.8232319355010986f, 0.7664070129394531f, +0.2303706556558609f, 0.041316673159599304f, 0.5333737134933472f, 0.3280186057090759f, 0.6173511147499084f, 0.10346301645040512f, 0.774391233921051f, 0.8500477075576782f, +0.554644763469696f, 0.3018467426300049f, 0.5436915755271912f, 0.973315954208374f, 0.24460051953792572f, 0.4902331829071045f, 0.7067998647689819f, 0.09451178461313248f, +0.8704524636268616f, 0.9175478219985962f, 0.39957135915756226f, 0.37298673391342163f, 0.5550247430801392f, 0.8949134349822998f, 0.053345732390880585f, 0.19666923582553864f, +0.7367434501647949f, 0.6522281765937805f, 0.4602593779563904f, 0.4976655840873718f, 0.8429313898086548f, 0.129431813955307f, 0.5285847187042236f, 0.12571269273757935f, +0.6284417510032654f, 0.3975485563278198f, 0.8545519709587097f, 0.4872403144836426f, 0.12859128415584564f, 0.776788055896759f, 0.17611463367938995f, 0.5472591519355774f, +0.050207577645778656f, 0.8246087431907654f, 0.1452493518590927f, 0.5170005559921265f, 0.29978492856025696f, 0.9013137221336365f, 0.8646536469459534f, 0.5416975617408752f, +0.3277865946292877f, 0.7491884827613831f, 0.5544734597206116f, 0.7944162487983704f, 0.9721811413764954f, 0.3077841103076935f, 0.40542837977409363f, 0.7726930379867554f, +0.12231512367725372f, 0.9665787220001221f, 0.05919118970632553f, 0.06488899141550064f, 0.2849285900592804f, 0.29202935099601746f, 0.6153157949447632f, 0.7314201593399048f, +0.8298563957214355f, 0.6640784740447998f, 0.06662776321172714f, 0.40029358863830566f, 0.9463953375816345f, 0.4599170684814453f, 0.48512667417526245f, 0.861438512802124f, +0.5844041705131531f, 0.6401755809783936f, 0.4841322600841522f, 0.024796877056360245f, 0.09532219171524048f, 0.5148053765296936f, 0.9015516638755798f, 0.8791541457176208f, +0.14384126663208008f, 0.443922758102417f, 0.53609299659729f, 0.913934588432312f, 0.7600474953651428f, 0.2550753057003021f, 0.8317636847496033f, 0.2661088705062866f, +0.5125953555107117f, 0.009227761067450047f, 0.5700452327728271f, 0.9264189004898071f, 0.8666379451751709f, 0.9986007213592529f, 0.773659348487854f, 0.2367023229598999f, +0.887024462223053f, 0.3276175260543823f, 0.5251724123954773f, 0.3037237524986267f, 0.7006178498268127f, 0.9763983488082886f, 0.17871344089508057f, 0.8191037774085999f, +0.8116938471794128f, 0.031841572374105453f, 0.5593281984329224f, 0.5592151880264282f, 0.8014705181121826f, 0.9431124329566956f, 0.7742196321487427f, 0.08233281224966049f, +0.8573870062828064f, 0.5719550251960754f, 0.09797456115484238f, 0.8066827058792114f, 0.13621416687965393f, 0.20714063942432404f, 0.08268114179372787f, 0.3497881293296814f, +0.8968016505241394f, 0.6575902700424194f, 0.2601996660232544f, 0.17650021612644196f, 0.2464839369058609f, 0.4671144187450409f, 0.9203736186027527f, 0.21797588467597961f, +0.41943976283073425f, 0.22612668573856354f, 0.0603628046810627f, 0.6757798194885254f, 0.2531050443649292f, 0.29722151160240173f, 0.0842481404542923f, 0.19455070793628693f, +0.28522053360939026f, 0.02413354441523552f, 0.6302512288093567f, 0.5033922791481018f, 0.6187443733215332f, 0.16156704723834991f, 0.6482844352722168f, 0.8432731032371521f, +0.9254773259162903f, 0.9749739766120911f, 0.9351069927215576f, 0.19669154286384583f, 0.8035788536071777f, 0.6645980477333069f, 0.2653003931045532f, 0.5175701975822449f, +0.6130249500274658f, 0.6896916031837463f, 0.5589861869812012f, 0.7284337282180786f, 0.6376381516456604f, 0.7572173476219177f, 0.6949199438095093f, 0.8775386214256287f, +0.6887714862823486f, 0.2681714594364166f, 0.7563194632530212f, 0.3872111141681671f, 0.02609078399837017f, 0.9814525246620178f, 0.22146396338939667f, 0.4330427348613739f, +0.6554110050201416f, 0.8877934813499451f, 0.8640739917755127f, 0.29140013456344604f, 0.16906648874282837f, 0.6147862672805786f, 0.7981180548667908f, 0.8952439427375793f, +0.6350316405296326f, 0.6268996000289917f, 0.8264955282211304f, 0.06448262929916382f, 0.562912106513977f, 0.23593401908874512f, 0.14185594022274017f, 0.45707204937934875f, +0.5065716505050659f, 0.171289324760437f, 0.8775440454483032f, 0.9242829084396362f, 0.8631795048713684f, 0.8453612923622131f, 0.04549374058842659f, 0.40692970156669617f, +0.9407156705856323f, 0.6426548957824707f, 0.9289692640304565f, 0.8073089718818665f, 0.9360499382019043f, 0.17443501949310303f, 0.1530180722475052f, 0.7152965068817139f, +0.9724699258804321f, 0.8816050291061401f, 0.6589141488075256f, 0.38804468512535095f, 0.14566852152347565f, 0.10043658316135406f, 0.256494402885437f, 0.2704109847545624f, +0.2143763303756714f, 0.38811466097831726f, 0.05495338514447212f, 0.40376976132392883f, 0.6676177382469177f, 0.12811093032360077f, 0.1726524978876114f, 0.55476313829422f, +0.12867499887943268f, 0.6186318397521973f, 0.8540384769439697f, 0.8935428857803345f, 0.9191356897354126f, 0.23800507187843323f, 0.5737044215202332f, 0.5304794907569885f, +0.639931857585907f, 0.15812364220619202f, 0.865633487701416f, 0.37882930040359497f, 0.8351945281028748f, 0.3325510323047638f, 0.18533773720264435f, 0.8055465221405029f, +0.2628161907196045f, 0.25750932097435f, 0.7483437061309814f, 0.9068357944488525f, 0.574678361415863f, 0.03827941417694092f, 0.7071875929832458f, 0.059244781732559204f, +0.2377321571111679f, 0.08824903517961502f, 0.365315318107605f, 0.8977789878845215f, 0.22808921337127686f, 0.19427892565727234f, 0.008614534512162209f, 0.30112141370773315f, +0.4219447374343872f, 0.8431180119514465f, 0.9039799571037292f, 0.43683385848999023f, 0.4777008593082428f, 0.15300747752189636f, 0.8740872144699097f, 0.6013580560684204f, +0.09079950302839279f, 0.43560591340065f, 0.597014307975769f, 0.29315897822380066f, 0.723807692527771f, 0.6633944511413574f, 0.7906978130340576f, 0.5456422567367554f, +0.5748966336250305f, 0.4255816340446472f, 0.8307361602783203f, 0.42529159784317017f, 0.5057696104049683f, 0.4117552936077118f, 0.10739269852638245f, 0.7027945518493652f, +0.3269158899784088f, 0.6749441623687744f, 0.2153674066066742f, 0.6658101677894592f, 0.507026195526123f, 0.05117180570960045f, 0.5422491431236267f, 0.7571777105331421f, +0.882809579372406f, 0.7312765121459961f, 0.7650193572044373f, 0.08348193019628525f, 0.6374784111976624f, 0.8523854613304138f, 0.675951361656189f, 0.7073398232460022f, +0.3991304337978363f, 0.6236636638641357f, 0.26737305521965027f, 0.7956748008728027f, 0.2798708379268646f, 0.33021050691604614f, 0.8129793405532837f, 0.28476858139038086f, +0.5753512382507324f, 0.6120730042457581f, 0.25348836183547974f, 0.5527686476707458f, 0.7855913043022156f, 0.21740393340587616f, 0.19528323411941528f, 0.6055927872657776f, +0.9754027128219604f, 0.8532917499542236f, 0.6195632219314575f, 0.7502372860908508f, 0.9208462834358215f, 0.18427996337413788f, 0.4846001863479614f, 0.713146448135376f, +0.9832860827445984f, 0.4014149606227875f, 0.06767023354768753f, 0.35535329580307007f, 0.3685566484928131f, 0.6189659237861633f, 0.43275561928749084f, 0.8622802495956421f, +0.5359161496162415f, 0.3287905752658844f, 0.48882079124450684f, 0.39015668630599976f, 0.16833770275115967f, 0.011966993100941181f, 0.3405369222164154f, 0.7502809762954712f, +0.8112705945968628f, 0.7647001147270203f, 0.08044836670160294f, 0.3765701949596405f, 0.3405163288116455f, 0.0926673635840416f, 0.09146496653556824f, 0.011300303041934967f, +0.818842351436615f, 0.8350003361701965f, 0.15693172812461853f, 0.0021568306256085634f, 0.7353554964065552f, 0.9173839688301086f, 0.962618350982666f, 0.6918390393257141f, +0.5518525838851929f, 0.889204204082489f, 0.8245977759361267f, 0.9535345435142517f, 0.7269699573516846f, 0.1879560500383377f, 0.09593922644853592f, 0.5344751477241516f, +0.11045094579458237f, 0.31051912903785706f, 0.5831382870674133f, 0.04841148853302002f, 0.6533284187316895f, 0.45097580552101135f, 0.4865398406982422f, 0.019865505397319794f, +0.7276056408882141f, 0.10318335145711899f, 0.8506371974945068f, 0.7786239981651306f, 0.11184370517730713f, 0.01301974430680275f, 0.1305973380804062f, 0.9592481851577759f, +0.7530809044837952f, 0.28379344940185547f, 0.6746054291725159f, 0.6477633118629456f, 0.7062335014343262f, 0.9885810613632202f, 0.09361013770103455f, 0.44940775632858276f, +0.7996503710746765f, 0.6202777624130249f, 0.7836864590644836f, 0.3424076735973358f, 0.9096884727478027f, 0.12146296352148056f, 0.7946091890335083f, 0.7831739187240601f, +0.9271678924560547f, 0.18483878672122955f, 0.967677652835846f, 0.28324607014656067f, 0.9529985785484314f, 0.12874020636081696f, 0.5076702237129211f, 0.4629865288734436f, +0.7347506880760193f, 0.8834892511367798f, 0.952856183052063f, 0.02006492018699646f, 0.7187304496765137f, 0.5827726125717163f, 0.7524625062942505f, 0.39904916286468506f, +0.5688199996948242f, 0.6952483057975769f, 0.3291538953781128f, 0.09647246450185776f, 0.3410313129425049f, 0.9744184017181396f, 0.8914033770561218f, 0.9825778603553772f, +0.012605175375938416f, 0.31832215189933777f, 0.4819110631942749f, 0.01585654728114605f, 0.9293444156646729f, 0.2674931287765503f, 0.5578027963638306f, 0.9234645366668701f, +0.6275621652603149f, 0.9179702401161194f, 0.9005942344665527f, 0.830413281917572f, 0.7911098599433899f, 0.7191097140312195f, 0.41292983293533325f, 0.7389200329780579f, +0.6718766093254089f, 0.5726444125175476f, 0.18030929565429688f, 0.3323686718940735f, 0.5378212928771973f, 0.32772359251976013f, 0.840602457523346f, 0.20132315158843994f, +0.9203819036483765f, 0.0669952929019928f, 0.26972171664237976f, 0.2765814960002899f, 0.13474662601947784f, 0.08092452585697174f, 0.15293696522712708f, 0.16572974622249603f, +0.5428364276885986f, 0.40264374017715454f, 0.3738572299480438f, 0.7932856678962708f, 0.6883641481399536f, 0.33395513892173767f, 0.1310761570930481f, 0.4313279986381531f, +0.5186395049095154f, 0.40494781732559204f, 0.7529438138008118f, 0.5739639401435852f, 0.009734777733683586f, 0.6770159006118774f, 0.8273091912269592f, 0.0442122220993042f, +0.7640420198440552f, 0.7427393794059753f, 0.8177905678749084f, 0.3791821002960205f, 0.47401759028434753f, 0.16847245395183563f, 0.07880064845085144f, 0.10166507214307785f, +0.6789286732673645f, 0.9849212169647217f, 0.7290462255477905f, 0.06422432512044907f, 0.7062622308731079f, 0.6109223961830139f, 0.06822193413972855f, 0.7116509675979614f, +0.3397926688194275f, 0.6563603281974792f, 0.4529629647731781f, 0.7499142289161682f, 0.43807417154312134f, 0.5388779044151306f, 0.141599640250206f, 0.7862890362739563f, +0.9364714622497559f, 0.5318143367767334f, 0.443887859582901f, 0.434388130903244f, 0.24238114058971405f, 0.2609880864620209f, 0.40390440821647644f, 0.08131470531225204f, +0.8639481067657471f, 0.9256031513214111f, 0.11836878955364227f, 0.035409461706876755f, 0.22575657069683075f, 0.7413455843925476f, 0.9497782588005066f, 0.35099756717681885f, +0.18416234850883484f, 0.3374882638454437f, 0.8966073393821716f, 0.17825965583324432f, 0.7568508982658386f, 0.29842182993888855f, 0.18165849149227142f, 0.7902745604515076f, +0.15374326705932617f, 0.3395799696445465f, 0.1296362280845642f, 0.9206568002700806f, 0.8215516209602356f, 0.45300349593162537f, 0.5845451951026917f, 0.8758558630943298f, +0.3492630124092102f, 0.13592879474163055f, 0.7408902049064636f, 0.3396992087364197f, 0.10982646048069f, 0.439864844083786f, 0.2101368010044098f, 0.09758585691452026f, +0.4056072235107422f, 0.9472672343254089f, 0.05354445055127144f, 0.6977166533470154f, 0.13049185276031494f, 0.6738755106925964f, 0.06706748902797699f, 0.2942731976509094f, +0.906185507774353f, 0.9150093793869019f, 0.04135216772556305f, 0.48367851972579956f, 0.4953581392765045f, 0.5511205196380615f, 0.6678562760353088f, 0.0018535945564508438f, +0.3284589648246765f, 0.5217759013175964f, 0.17035561800003052f, 0.3544638752937317f, 0.44072237610816956f, 0.17743603885173798f, 0.5956017971038818f, 0.5275219082832336f, +0.30020377039909363f, 0.25199267268180847f, 0.673706591129303f, 0.46326494216918945f, 0.0679473876953125f, 0.3859005272388458f, 0.9451090097427368f, 0.10728146880865097f, +0.5985642075538635f, 0.16365984082221985f, 0.507383406162262f, 0.8553304672241211f, 0.12379756569862366f, 0.7248778343200684f, 0.4636901319026947f, 0.23644712567329407f, +0.6206981539726257f, 0.825587272644043f, 0.7438041567802429f, 0.41783246397972107f, 0.3627680540084839f, 0.6532660126686096f, 0.8919661045074463f, 0.1168673112988472f, +0.2632496953010559f, 0.7440928816795349f, 0.22033700346946716f, 0.7395572662353516f, 0.8119232058525085f, 0.617368221282959f, 0.2592128813266754f, 0.9803826212882996f, +0.020306091755628586f, 0.4024711847305298f, 0.31995731592178345f, 0.09813838452100754f, 0.930126965045929f, 0.7239391207695007f, 0.053685035556554794f, 0.23200546205043793f, +0.8631276488304138f, 0.4166075885295868f, 0.275654673576355f, 0.9726216793060303f, 0.0485512912273407f, 0.4425389766693115f, 0.7480742335319519f, 0.9976475238800049f, +0.2237819880247116f, 0.13657915592193604f, 0.05103444308042526f, 0.4265020191669464f, 0.9794901013374329f, 0.7689271569252014f, 0.385407954454422f, 0.5098841190338135f, +0.6177133917808533f, 0.6333434581756592f, 0.0017799431225284934f, 0.8937757015228271f, 0.08634413778781891f, 0.7602112293243408f, 0.5504933595657349f, 0.5608672499656677f, +0.22374098002910614f, 0.029410848394036293f, 0.5155171751976013f, 0.37335532903671265f, 0.25916674733161926f, 0.23418809473514557f, 0.6040691137313843f, 0.5282865762710571f, +0.13211745023727417f, 0.33945366740226746f, 0.28099384903907776f, 0.4579901397228241f, 0.07942959666252136f, 0.26819679141044617f, 0.5702927112579346f, 0.12477663904428482f, +0.6712229251861572f, 0.8768649697303772f, 0.31273141503334045f, 0.8808464407920837f, 0.8308995962142944f, 0.04588260129094124f, 0.17635415494441986f, 0.8378504514694214f, +0.06507231295108795f, 0.3064173758029938f, 0.6862356066703796f, 0.6540646553039551f, 0.7975744605064392f, 0.252684623003006f, 0.8084518909454346f, 0.08837859332561493f, +0.7672826051712036f, 0.9225572347640991f, 0.7421898245811462f, 0.007559634745121002f, 0.27832677960395813f, 0.2595709264278412f, 0.3849569857120514f, 0.012017752975225449f, +0.47631368041038513f, 0.3423320949077606f, 0.010335690341889858f, 0.6599898934364319f, 0.25558412075042725f, 0.10340885072946548f, 0.23143841326236725f, 0.790258526802063f, +0.42538732290267944f, 0.15626513957977295f, 0.3704782724380493f, 0.15832597017288208f, 0.8976737856864929f, 0.6085277795791626f, 0.07051825523376465f, 0.03878407180309296f, +0.19470711052417755f, 0.3555401563644409f, 0.44812944531440735f, 0.060782432556152344f, 0.4291188716888428f, 0.8682312965393066f, 0.3984084129333496f, 0.763495683670044f, +0.9743981957435608f, 0.7163905501365662f, 0.48023295402526855f, 0.4263193607330322f, 0.3694438338279724f, 0.05957384780049324f, 0.16726288199424744f, 0.5321101546287537f, +0.460053026676178f, 0.6104678511619568f, 0.5914803743362427f, 0.6143425703048706f, 0.939152181148529f, 0.6676769256591797f, 0.33006104826927185f, 0.48328083753585815f, +0.3227638900279999f, 0.05428168177604675f, 0.26375463604927063f, 0.3338300585746765f, 0.47175514698028564f, 0.24780896306037903f, 0.3119949996471405f, 0.8562712669372559f, +0.8860064744949341f, 0.03717879578471184f, 0.6789237260818481f, 0.27531448006629944f, 0.31743481755256653f, 0.3647180497646332f, 0.3012501299381256f, 0.6588183045387268f, +0.432183176279068f, 0.03459784388542175f, 0.089142344892025f, 0.5457453727722168f, 0.04412245750427246f, 0.7984902858734131f, 0.07316780090332031f, 0.5304526090621948f, +0.2141617238521576f, 0.14131316542625427f, 0.34717875719070435f, 0.6625684499740601f, 0.7561714053153992f, 0.7031852602958679f, 0.13248592615127563f, 0.26591768860816956f, +0.7596672773361206f, 0.6413553357124329f, 0.32970479130744934f, 0.30784568190574646f, 0.19701674580574036f, 0.08952246606349945f, 0.9362338185310364f, 0.26174280047416687f, +0.7012841701507568f, 0.7889423966407776f, 0.8158165812492371f, 0.21192391216754913f, 0.42604973912239075f, 0.7188047170639038f, 0.758027970790863f, 0.24000471830368042f, +0.40247443318367004f, 0.6457247734069824f, 0.921432614326477f, 0.8528724908828735f, 0.8166099786758423f, 0.3614797294139862f, 0.9402487874031067f, 0.4707021415233612f, +0.8270338177680969f, 0.39625078439712524f, 0.6216071844100952f, 0.6532266139984131f, 0.6218100786209106f, 0.4944937527179718f, 0.06152965873479843f, 0.12896594405174255f, +0.2855348587036133f, 0.6474738717079163f, 0.07813700288534164f, 0.8575302958488464f, 0.957369863986969f, 0.8770041465759277f, 0.5223327279090881f, 0.4849742352962494f, +0.9429717063903809f, 0.39228174090385437f, 0.9032192826271057f, 0.02713168039917946f, 0.6582227349281311f, 0.5564001202583313f, 0.9271227121353149f, 0.660620927810669f, +0.9442515969276428f, 0.61958247423172f, 0.8711978793144226f, 0.8651898503303528f, 0.6681767106056213f, 0.9851297736167908f, 0.8094896078109741f, 0.7810819149017334f, +0.8867360949516296f, 0.7610051035881042f, 0.4370375871658325f, 0.5605738162994385f, 0.025969291105866432f, 0.1656072437763214f, 0.3669593632221222f, 0.8743677735328674f, +0.2532980442047119f, 0.5694180727005005f, 0.03904493898153305f, 0.3962854743003845f, 0.9929449558258057f, 0.274107426404953f, 0.14263713359832764f, 0.6454346179962158f, +0.4647265672683716f, 0.8798530697822571f, 0.29921063780784607f, 0.7460498213768005f, 0.2143430858850479f, 0.537165641784668f, 0.6267989277839661f, 0.9593795537948608f, +0.9772339463233948f, 0.8367632627487183f, 0.7530802488327026f, 0.3643462359905243f, 0.2232673168182373f, 0.910831093788147f, 0.903678834438324f, 0.593725860118866f, +0.47102877497673035f, 0.2499140202999115f, 0.9566985368728638f, 0.49329036474227905f, 0.37481170892715454f, 0.21506184339523315f, 0.6028867363929749f, 0.5567969083786011f, +0.6124699711799622f, 0.9162761569023132f, 0.10860511660575867f, 0.7381680011749268f, 0.5829280614852905f, 0.3116649091243744f, 0.15534861385822296f, 0.7231050133705139f, +0.1957118809223175f, 0.6845861673355103f, 0.789760947227478f, 0.1044761911034584f, 0.6172311305999756f, 0.11052820086479187f, 0.8046398162841797f, 0.16482819616794586f, +0.7083026766777039f, 0.8104063272476196f, 0.8143885731697083f, 0.24451462924480438f, 0.950645923614502f, 0.14645428955554962f, 0.4599320590496063f, 0.8057320713996887f, +0.9644134044647217f, 0.17930881679058075f, 0.4828612208366394f, 0.7124573588371277f, 0.9562886357307434f, 0.8766058087348938f, 0.9484097361564636f, 0.527515709400177f, +0.11465121805667877f, 0.7171856164932251f, 0.30292296409606934f, 0.7100882530212402f, 0.9368905425071716f, 0.41898220777511597f, 0.7728292942047119f, 0.9103571772575378f, +0.20420899987220764f, 0.4750189781188965f, 0.2633247375488281f, 0.9622131586074829f, 0.7902860641479492f, 0.2299404740333557f, 0.9542876482009888f, 0.6208515763282776f, +0.7080472111701965f, 0.4237794578075409f, 0.28622856736183167f, 0.3571811020374298f, 0.5095169544219971f, 0.30417969822883606f, 0.9115217924118042f, 0.9035351872444153f, +0.596123993396759f, 0.317291259765625f, 0.31571391224861145f, 0.693698525428772f, 0.3032674491405487f, 0.044681042432785034f, 0.5970906615257263f, 0.32190564274787903f, +0.25956201553344727f, 0.940984308719635f, 0.48830509185791016f, 0.9847293496131897f, 0.14201784133911133f, 0.7420325875282288f, 0.9069103002548218f, 0.2042747139930725f, +0.21100939810276031f, 0.6198246479034424f, 0.3481123447418213f, 0.9217789173126221f, 0.8163509964942932f, 0.7249855995178223f, 0.17895230650901794f, 0.7184246182441711f, +0.5048226714134216f, 0.5653295516967773f, 0.7197402119636536f, 0.3268016278743744f, 0.14998307824134827f, 0.9338038563728333f, 0.7003989219665527f, 0.2529696226119995f, +0.2272600680589676f, 0.36774420738220215f, 0.20269380509853363f, 0.0003133015998173505f, 0.36866921186447144f, 0.6134288907051086f, 0.9236811399459839f, 0.9035624265670776f, +0.45280346274375916f, 0.592960774898529f, 0.14980463683605194f, 0.7663917541503906f, 0.9601364135742188f, 0.40673133730888367f, 0.5886396765708923f, 0.9915207624435425f, +0.11403344571590424f, 0.2519032061100006f, 0.4336310029029846f, 0.6249912977218628f, 0.40264928340911865f, 0.12089487910270691f, 0.3550895154476166f, 0.18078210949897766f, +0.8406106233596802f, 0.2593833804130554f, 0.8407099843025208f, 0.30344510078430176f, 0.03586408495903015f, 0.07342008501291275f, 0.997322142124176f, 0.2864852845668793f, +0.7886729836463928f, 0.438564270734787f, 0.8631395101547241f, 0.8823963403701782f, 0.001526998239569366f, 0.6043614149093628f, 0.4671759009361267f, 0.28423798084259033f, +0.6483217477798462f, 0.26275625824928284f, 0.2274196445941925f, 0.46137505769729614f, 0.8962973356246948f, 0.7225577235221863f, 0.23967838287353516f, 0.9460627436637878f, +0.5898016095161438f, 0.4182835817337036f, 0.15611985325813293f, 0.8784141540527344f, 0.5970561504364014f, 0.966279149055481f, 0.9421433806419373f, 0.2461216300725937f, +0.8817152976989746f, 0.7239565253257751f, 0.20112866163253784f, 0.09547165781259537f, 0.3448859751224518f, 0.4563095271587372f, 0.5544530749320984f, 0.5065625905990601f, +0.6430532932281494f, 0.47393131256103516f, 0.8418793678283691f, 0.1644616723060608f, 0.6896112561225891f, 0.381165474653244f, 0.17743930220603943f, 0.7474741339683533f, +0.7999681234359741f, 0.9946305155754089f, 0.7283616662025452f, 0.3662089705467224f, 0.9229400753974915f, 0.7508653402328491f, 0.7280088067054749f, 0.10549046099185944f, +0.4036429524421692f, 0.21488669514656067f, 0.2961772084236145f, 0.11445774137973785f, 0.6815966963768005f, 0.7250193357467651f, 0.47270116209983826f, 0.5577702522277832f, +0.05132802203297615f, 0.7212799787521362f, 0.11301673203706741f, 0.36553528904914856f, 0.0047757127322256565f, 0.09651891142129898f, 0.25727105140686035f, 0.28320935368537903f, +0.5903169512748718f, 0.15684843063354492f, 0.7596150040626526f, 0.1043461263179779f, 0.6841555237770081f, 0.6288443803787231f, 0.5158550143241882f, 0.6917093396186829f, +0.6654718518257141f, 0.573089599609375f, 0.5357581377029419f, 0.7133358120918274f, 0.19734148681163788f, 0.8059125542640686f, 0.7743298411369324f, 0.4183366596698761f, +0.5039684772491455f, 0.6901958584785461f, 0.6492645740509033f, 0.16913363337516785f, 0.795392632484436f, 0.6613307595252991f, 0.9124503135681152f, 0.39558911323547363f, +0.728288471698761f, 0.4306832551956177f, 0.5748626589775085f, 0.6646712422370911f, 0.14538873732089996f, 0.5022467374801636f, 0.8846691250801086f, 0.053076568990945816f, +0.8901423215866089f, 0.058253660798072815f, 0.05038376897573471f, 0.24324938654899597f, 0.6955372095108032f, 0.3400779962539673f, 0.7505126595497131f, 0.7386541366577148f, +0.7486693263053894f, 0.32793769240379333f, 0.15343131124973297f, 0.21614432334899902f, 0.713736355304718f, 0.6668292880058289f, 0.12342250347137451f, 0.1567462980747223f, +0.3237452208995819f, 0.9249565005302429f, 0.8475679755210876f, 0.25570982694625854f, 0.7592624425888062f, 0.6129331588745117f, 0.6015100479125977f, 0.4991719722747803f, +0.648485541343689f, 0.2686459720134735f, 0.41535714268684387f, 0.6209187507629395f, 0.6832432150840759f, 0.881659984588623f, 0.4452309012413025f, 0.8109968304634094f, +0.5011301040649414f, 0.7591447830200195f, 0.2826001048088074f, 0.39330732822418213f, 0.16001757979393005f, 0.8089646697044373f, 0.09944295883178711f, 0.1609858125448227f, +0.21511122584342957f, 0.5825372934341431f, 0.00791970919817686f, 0.5295020341873169f, 0.8169975876808167f, 0.2792954444885254f, 0.6986541152000427f, 0.39025840163230896f, +0.30365851521492004f, 0.616468071937561f, 0.5106542110443115f, 0.928259551525116f, 0.2884484529495239f, 0.8744743466377258f, 0.22019033133983612f, 0.33774274587631226f, +0.7523866295814514f, 0.5829907059669495f, 0.30579712986946106f, 0.5002056360244751f, 0.25211694836616516f, 0.22804512083530426f, 0.7966975569725037f, 0.580460250377655f, +0.5485571622848511f, 0.1933152675628662f, 0.804595410823822f, 0.49782752990722656f, 0.8183291554450989f, 0.33100205659866333f, 0.08746682852506638f, 0.033768631517887115f, +0.7837328910827637f, 0.6709874272346497f, 0.22170935571193695f, 0.682453453540802f, 0.13215471804141998f, 0.3157775104045868f, 0.5085834860801697f, 0.3223922848701477f, +0.30420762300491333f, 0.3688586354255676f, 0.9632596373558044f, 0.4089218080043793f, 0.5527198314666748f, 0.887598991394043f, 0.020635396242141724f, 0.2927877902984619f, +0.5129067301750183f, 0.6705060005187988f, 0.07555323839187622f, 0.3037257790565491f, 0.83697909116745f, 0.2060588151216507f, 0.9341396689414978f, 0.5147665143013f, +0.5656434297561646f, 0.20319227874279022f, 0.8148306608200073f, 0.3019426465034485f, 0.649544894695282f, 0.586615800857544f, 0.34164997935295105f, 0.6596579551696777f, +0.5974178910255432f, 0.5867912769317627f, 0.3842301368713379f, 0.5990059971809387f, 0.858140230178833f, 0.6320047378540039f, 0.34559357166290283f, 0.9119530320167542f, +0.4221256375312805f, 0.35717079043388367f, 0.394058495759964f, 0.945401132106781f, 0.7330609560012817f, 0.8561903238296509f, 0.047716837376356125f, 0.2363825887441635f, +0.5079270005226135f, 0.18972042202949524f, 0.8960580825805664f, 0.5281332731246948f, 0.567939281463623f, 0.34141358733177185f, 0.34919124841690063f, 0.37951573729515076f, +0.8124500513076782f, 0.5213490128517151f, 0.815825343132019f, 0.5406738519668579f, 0.6367682218551636f, 0.2885606288909912f, 0.23651942610740662f, 0.6541053652763367f, +0.3424760401248932f, 0.2278100550174713f, 0.19108884036540985f, 0.8069961667060852f, 0.2830982804298401f, 0.6477438807487488f, 0.7216282486915588f, 0.5895755290985107f, +0.3537484407424927f, 0.5377271175384521f, 0.11059153825044632f, 0.5935180187225342f, 0.9689668416976929f, 0.25116196274757385f, 0.43629419803619385f, 0.07860293239355087f, +0.6549652218818665f, 0.5944486856460571f, 0.699701189994812f, 0.8061891794204712f, 0.5940237641334534f, 0.6247344613075256f, 0.8991647958755493f, 0.7589086294174194f, +0.6025434732437134f, 0.7923362851142883f, 0.06150044873356819f, 0.13965322077274323f, 0.021027522161602974f, 0.6022606492042542f, 0.32631590962409973f, 0.4128158688545227f, +0.27200376987457275f, 0.267660528421402f, 0.1896972954273224f, 0.5174869894981384f, 0.15653106570243835f, 0.025534600019454956f, 0.10824039578437805f, 0.5692610144615173f, +0.3570610582828522f, 0.5057882070541382f, 0.9457268714904785f, 0.432692289352417f, 0.27154695987701416f, 0.1928638517856598f, 0.0003673101600725204f, 0.07278576493263245f, +0.36039936542510986f, 0.7591413259506226f, 0.2029261589050293f, 0.8907095789909363f, 0.6076298356056213f, 0.9377709627151489f, 0.7334693670272827f, 0.283829927444458f, +0.3964257538318634f, 0.41611284017562866f, 0.3676881194114685f, 0.9139725565910339f, 0.3706882894039154f, 0.3475063741207123f, 0.8418834209442139f, 0.29238128662109375f, +0.1699504554271698f, 0.5672271251678467f, 0.5263125896453857f, 0.6343221068382263f, 0.7634344696998596f, 0.5330625772476196f, 0.7742788195610046f, 0.6282539367675781f, +0.1979716420173645f, 0.4816848039627075f, 0.5594350695610046f, 0.14459998905658722f, 0.6863922476768494f, 0.911773681640625f, 0.7102705836296082f, 0.8138708472251892f, +0.5441783666610718f, 0.5525435209274292f, 0.1725827008485794f, 0.42410707473754883f, 0.6538578271865845f, 0.37142717838287354f, 0.32640528678894043f, 0.8253224492073059f, +0.5369563102722168f, 0.25925448536872864f, 0.3878498077392578f, 0.18455858528614044f, 0.05846748128533363f, 0.8501424789428711f, 0.5716464519500732f, 0.7070767879486084f, +0.5587919354438782f, 0.5568777322769165f, 0.1859152764081955f, 0.5500078797340393f, 0.30256399512290955f, 0.10988137125968933f, 0.4644174575805664f, 0.06311586499214172f, +0.3134347200393677f, 0.5952994227409363f, 0.7863426208496094f, 0.48599138855934143f, 0.9994615912437439f, 0.09309348464012146f, 0.15462824702262878f, 0.17309992015361786f, +0.9364849925041199f, 0.11515212804079056f, 0.11608851701021194f, 0.23265936970710754f, 0.6550112962722778f, 0.8303188681602478f, 0.8256635069847107f, 0.4854241907596588f, +0.008035215549170971f, 0.36372140049934387f, 0.8986504673957825f, 0.6008424162864685f, 0.33880290389060974f, 0.9005831480026245f, 0.3116581439971924f, 0.7845483422279358f, +0.5028330087661743f, 0.039142537862062454f, 0.061310794204473495f, 0.29272764921188354f, 0.40662211179733276f, 0.5979650020599365f, 0.9081153869628906f, 0.0532769113779068f, +0.1852596402168274f, 0.7850123643875122f, 0.7845461964607239f, 0.552830159664154f, 0.09125730395317078f, 0.9613732099533081f, 0.6040982007980347f, 0.01945122703909874f, +0.9483736157417297f, 0.106742262840271f, 0.13837087154388428f, 0.4981932044029236f, 0.09314489364624023f, 0.4454066753387451f, 0.8006799817085266f, 0.13105615973472595f, +0.12389370799064636f, 0.26838573813438416f, 0.8298971652984619f, 0.5541223287582397f, 0.5857511162757874f, 0.3848268389701843f, 0.9562182426452637f, 0.49597302079200745f, +0.9044771790504456f, 0.08955545723438263f, 0.498544305562973f, 0.6081307530403137f, 0.7323569059371948f, 0.5822017788887024f, 0.2572779953479767f, 0.2890033423900604f, +0.7358339428901672f, 0.10552795231342316f, 0.43705281615257263f, 0.17304016649723053f, 0.3526625633239746f, 0.32500943541526794f, 0.2432151585817337f, 0.042821284383535385f, +0.16521531343460083f, 0.030556198209524155f, 0.15032587945461273f, 0.6249492764472961f, 0.319973886013031f, 0.8868379592895508f, 0.09663645178079605f, 0.7020467519760132f, +0.5879439115524292f, 0.9413977861404419f, 0.13034985959529877f, 0.884143054485321f, 0.3525847792625427f, 0.9934309124946594f, 0.3499792814254761f, 0.9662895798683167f, +0.620798647403717f, 0.35614362359046936f, 0.4917197823524475f, 0.8547738790512085f, 0.06924304366111755f, 0.43117979168891907f, 0.47636809945106506f, 0.5230548977851868f, +0.2980656027793884f, 0.16645146906375885f, 0.6807052493095398f, 0.3823353052139282f, 0.5735101699829102f, 0.10767396539449692f, 0.15878543257713318f, 0.14675137400627136f, +0.5904806852340698f, 0.7500377893447876f, 0.8684999346733093f, 0.6103236675262451f, 0.2654368281364441f, 0.018955161795020103f, 0.3917052447795868f, 0.8308903574943542f, +0.2569331228733063f, 0.3241194486618042f, 0.7095353007316589f, 0.4127275347709656f, 0.1136372908949852f, 0.5918357372283936f, 0.10517064481973648f, 0.3332481384277344f, +0.8329157829284668f, 0.12559689581394196f, 0.15951119363307953f, 0.9756889939308167f, 0.38038206100463867f, 0.20723143219947815f, 0.4369643032550812f, 0.44923076033592224f, +0.028886867687106133f, 0.677804708480835f, 0.981382429599762f, 0.08007488399744034f, 0.9672709703445435f, 0.712680459022522f, 0.3075808584690094f, 0.17344336211681366f, +0.5926640033721924f, 0.9090217351913452f, 0.22621510922908783f, 0.1805100291967392f, 0.24765051901340485f, 0.6141682863235474f, 0.45574644207954407f, 0.5427436232566833f, +0.15953931212425232f, 0.3270909786224365f, 0.8569471836090088f, 0.07127029448747635f, 0.9712995290756226f, 0.1801219880580902f, 0.2099241018295288f, 0.8746160268783569f, +0.21430322527885437f, 0.2987362742424011f, 0.8452674150466919f, 0.1605393886566162f, 0.5877381563186646f, 0.6223311424255371f, 0.42515382170677185f, 0.18485790491104126f, +0.495988130569458f, 0.20364591479301453f, 0.5182472467422485f, 0.41272395849227905f, 0.10520918667316437f, 0.9102841019630432f, 0.5678598880767822f, 0.7865689396858215f, +0.3108740746974945f, 0.6158797740936279f, 0.2735326886177063f, 0.9457553625106812f, 0.3584705889225006f, 0.49672430753707886f, 0.9883763194084167f, 0.4464401304721832f, +0.015128174796700478f, 0.5848013758659363f, 0.1148475855588913f, 0.35374629497528076f, 0.8399617671966553f, 0.3629366457462311f, 0.15017786622047424f, 0.6135421991348267f, +0.7115855813026428f, 0.3169126808643341f, 0.288034588098526f, 0.5870506763458252f, 0.40584295988082886f, 0.8466708660125732f, 0.9661356210708618f, 0.07686677575111389f, +0.1833188384771347f, 0.10915695130825043f, 0.10859870165586472f, 0.44529664516448975f, 0.34882640838623047f, 0.3555763065814972f, 0.871253490447998f, 0.714220404624939f, +0.014134400524199009f, 0.7689262628555298f, 0.1532209813594818f, 0.5226984024047852f, 0.8747126460075378f, 0.2042938768863678f, 0.8680497407913208f, 0.1244627833366394f, +0.18485692143440247f, 0.965451180934906f, 0.8883827924728394f, 0.7501847743988037f, 0.05214904621243477f, 0.033463045954704285f, 0.52422034740448f, 0.054897624999284744f, +0.5657328367233276f, 0.2318836897611618f, 0.8057908415794373f, 0.5487607717514038f, 0.9567484855651855f, 0.7525366544723511f, 0.23786398768424988f, 0.5137143731117249f, +0.8139376640319824f, 0.20295241475105286f, 0.4425172507762909f, 0.17070186138153076f, 0.4377325773239136f, 0.49124500155448914f, 0.298379510641098f, 0.8409863710403442f, +0.3216692805290222f, 0.5562945604324341f, 0.034248966723680496f, 0.04615955427289009f, 0.4218903183937073f, 0.8598933219909668f, 0.5996469259262085f, 0.15107950568199158f, +0.5145377516746521f, 0.027806686237454414f, 0.20879772305488586f, 0.13770870864391327f, 0.8254254460334778f, 0.06709735095500946f, 0.09801474213600159f, 0.08538150787353516f, +0.014454304240643978f, 0.565342903137207f, 0.9535089135169983f, 0.11566043645143509f, 0.19183464348316193f, 0.5581390261650085f, 0.3142947256565094f, 0.7332144975662231f, +0.29911336302757263f, 0.36771368980407715f, 0.42913126945495605f, 0.34915101528167725f, 0.33735257387161255f, 0.11600437760353088f, 0.8285375237464905f, 0.5029950141906738f, +0.389336496591568f, 0.5875796675682068f, 0.61209636926651f, 0.2844465970993042f, 0.2134968489408493f, 0.2676119804382324f, 0.6605322360992432f, 0.9600736498832703f, +0.27903684973716736f, 0.30257469415664673f, 0.10889268666505814f, 0.4188674986362457f, 0.6270806193351746f, 0.05274980887770653f, 0.1759418100118637f, 0.2748657763004303f, +0.384128600358963f, 0.00983345601707697f, 0.3290945589542389f, 0.2777175307273865f, 0.7530981302261353f, 0.16624724864959717f, 0.9228249788284302f, 0.4918295443058014f, +0.18354660272598267f, 0.36472320556640625f, 0.7239057421684265f, 0.7692118287086487f, 0.4881262481212616f, 0.25455033779144287f, 0.44086840748786926f, 0.36907413601875305f, +0.37704455852508545f, 0.6181092858314514f, 0.7287411093711853f, 0.09132063388824463f, 0.5320258140563965f, 0.4777005612850189f, 0.7405213117599487f, 0.26234370470046997f, +0.09871618449687958f, 0.7875109910964966f, 0.06965503096580505f, 0.594497799873352f, 0.25560712814331055f, 0.835028350353241f, 0.6833656430244446f, 0.09003954380750656f, +0.874681293964386f, 0.7893887758255005f, 0.580596923828125f, 0.4621317982673645f, 0.33375880122184753f, 0.8050760626792908f, 0.7262958288192749f, 0.0056852619163692f, +8.522067946614698e-05f, 0.9468386173248291f, 0.8745409250259399f, 0.46312323212623596f, 0.9381608963012695f, 0.5034547448158264f, 0.7147161960601807f, 0.20554226636886597f, +0.7254053950309753f, 0.12373971194028854f, 0.7857091426849365f, 0.8193238377571106f, 0.7977188229560852f, 0.606552004814148f, 0.10348479449748993f, 0.43713828921318054f, +0.08976049721240997f, 0.32394957542419434f, 0.3971615433692932f, 0.48099085688591003f, 0.6431126594543457f, 0.40168941020965576f, 0.5426186919212341f, 0.5631948709487915f, +0.7422848343849182f, 0.24500659108161926f, 0.4927881062030792f, 0.8001512885093689f, 0.39126473665237427f, 0.7801579833030701f, 0.6476401090621948f, 0.3863745331764221f, +0.5384172201156616f, 0.2780013680458069f, 0.25099727511405945f, 0.4624561369419098f, 0.08370359241962433f, 0.9996410012245178f, 0.21663962304592133f, 0.4316812753677368f, +0.5134245157241821f, 0.31275877356529236f, 0.3230094611644745f, 0.8208524584770203f, 0.8797621130943298f, 0.14233776926994324f, 0.10233078896999359f, 0.7955010533332825f, +0.3428725302219391f, 0.002291375771164894f, 0.8749321699142456f, 0.4196731746196747f, 0.8584619164466858f, 0.48237526416778564f, 0.34459879994392395f, 0.2461230307817459f, +0.666555643081665f, 0.11915207654237747f, 0.9738917350769043f, 0.3548967242240906f, 0.18569409847259521f, 0.4959207773208618f, 0.01729443483054638f, 0.5877076387405396f, +0.5593753457069397f, 0.9500259757041931f, 0.6251279711723328f, 0.5196704268455505f, 0.0571531243622303f, 0.8632880449295044f, 0.8806190490722656f, 0.7532396912574768f, +0.547285795211792f, 0.013722795993089676f, 0.38831135630607605f, 0.11129241436719894f, 0.3107358515262604f, 0.388655424118042f, 0.9428322911262512f, 0.9959595203399658f, +0.4202653765678406f, 0.42193567752838135f, 0.7702360153198242f, 0.4060624837875366f, 0.13391467928886414f, 0.00376236904412508f, 0.9612737894058228f, 0.8263800144195557f, +0.3655715584754944f, 0.2696514427661896f, 0.3714863955974579f, 0.12610803544521332f, 0.1982283592224121f, 0.9108706116676331f, 0.11334080994129181f, 0.09284926950931549f, +0.34609130024909973f, 0.45337021350860596f, 0.9113588929176331f, 0.9913930296897888f, 0.41132038831710815f, 0.17678973078727722f, 0.5273706316947937f, 0.7154493927955627f, +0.33652377128601074f, 0.7931405305862427f, 0.34535783529281616f, 0.859553337097168f, 0.4865076541900635f, 0.7209156155586243f, 0.14753620326519012f, 0.2752707898616791f, +0.7045042514801025f, 0.33379364013671875f, 0.33712512254714966f, 0.7641931176185608f, 0.7980566024780273f, 0.5941081643104553f, 0.9559729099273682f, 0.11502749472856522f, +0.3024997413158417f, 0.13948188722133636f, 0.9465914368629456f, 0.4592703580856323f, 0.17666694521903992f, 0.4723595976829529f, 0.028290018439292908f, 0.9238113164901733f, +0.23769527673721313f, 0.11139871180057526f, 0.7027263641357422f, 0.7957836389541626f, 0.7688342928886414f, 0.039178214967250824f, 0.2864169776439667f, 0.7756521105766296f, +0.10468140244483948f, 0.3025130033493042f, 0.9985041618347168f, 0.506382167339325f, 0.3955601751804352f, 0.1856289803981781f, 0.06476829200983047f, 0.035445742309093475f, +0.0016226769657805562f, 0.5399128198623657f, 0.8672431111335754f, 0.11013241112232208f, 0.015006412751972675f, 0.9833250641822815f, 0.9041955471038818f, 0.4384058713912964f, +0.30524951219558716f, 0.5789628028869629f, 0.9185100793838501f, 0.674202024936676f, 0.9145684838294983f, 0.466779500246048f, 0.7139545679092407f, 0.09772847592830658f, +0.267365038394928f, 0.6222442388534546f, 0.28264203667640686f, 0.6178073287010193f, 0.2465377300977707f, 0.3964201509952545f, 0.9368734359741211f, 0.9389320611953735f, +0.3758583664894104f, 0.5678788423538208f, 0.9495376944541931f, 0.29632407426834106f, 0.6668339967727661f, 0.29342707991600037f, 0.5339052677154541f, 0.06721775978803635f, +0.5426344871520996f, 0.5893215537071228f, 0.18631935119628906f, 0.66880863904953f, 0.4147438108921051f, 0.5988686680793762f, 0.01038556918501854f, 0.012758138589560986f, +0.23955616354942322f, 0.6083261966705322f, 0.06727665662765503f, 0.7132050395011902f, 0.4546889364719391f, 0.36346277594566345f, 0.5319516658782959f, 0.05516735836863518f, +0.21344980597496033f, 0.6139091849327087f, 0.1927485466003418f, 0.06381101906299591f, 0.47482702136039734f, 0.6853456497192383f, 0.18891435861587524f, 0.6641345024108887f, +0.13289609551429749f, 0.5353138446807861f, 0.7411894202232361f, 0.6521294116973877f, 0.34770023822784424f, 0.5760743021965027f, 0.335788369178772f, 0.1413922756910324f, +0.8421057462692261f, 0.4868747889995575f, 0.7374529838562012f, 0.6038800477981567f, 0.3611258268356323f, 0.08697094768285751f, 0.28520095348358154f, 0.7148807048797607f, +0.35902139544487f, 0.5744902491569519f, 0.9505127668380737f, 0.05174248293042183f, 0.6150411367416382f, 0.3478125333786011f, 0.8073176741600037f, 0.20430408418178558f, +0.7818329930305481f, 0.5547612309455872f, 0.271069198846817f, 0.18498334288597107f, 0.17720994353294373f, 0.03423572704195976f, 0.9893980026245117f, 0.5409281849861145f, +0.5512291193008423f, 0.9399360418319702f, 0.903595507144928f, 0.3001292049884796f, 0.7881808280944824f, 0.2253255695104599f, 0.41945818066596985f, 0.5170179009437561f, +0.17071983218193054f, 0.2889026701450348f, 0.8402559161186218f, 0.748436689376831f, 0.9516147971153259f, 0.8814380168914795f, 0.010519349947571754f, 0.9180424213409424f, +0.17752684652805328f, 0.3833576440811157f, 0.8962730765342712f, 0.7171403765678406f, 0.7889148592948914f, 0.7584956884384155f, 0.9873977899551392f, 0.7749497890472412f, +0.1913156807422638f, 0.9351325631141663f, 0.23550161719322205f, 0.1502232551574707f, 0.7905310392379761f, 0.9700342416763306f, 0.2200966477394104f, 0.17600178718566895f, +0.6082459092140198f, 0.8686137795448303f, 0.7830458879470825f, 0.09701687097549438f, 0.5948805212974548f, 0.19914615154266357f, 0.24842947721481323f, 0.6903128027915955f, +0.5554357767105103f, 0.650378406047821f, 0.7491511106491089f, 0.990791916847229f, 0.3895637094974518f, 0.30256783962249756f, 0.9303413033485413f, 0.8849108219146729f, +0.8549790382385254f, 0.6912819743156433f, 0.014553275890648365f, 0.6170448660850525f, 0.178275927901268f, 0.5665817856788635f, 0.19767700135707855f, 0.5429877638816833f, +0.2790389358997345f, 0.6270125508308411f, 0.09548074007034302f, 0.9816864728927612f, 0.8077005743980408f, 0.32391059398651123f, 0.8351517915725708f, 0.6972666382789612f, +0.2762218117713928f, 0.8428999781608582f, 0.7489238381385803f, 0.15494447946548462f, 0.8318427801132202f, 0.9259156584739685f, 0.7550310492515564f, 0.19608789682388306f, +0.5699983239173889f, 0.7850702404975891f, 0.5406543016433716f, 0.29216843843460083f, 0.3009277582168579f, 0.8646224737167358f, 0.8862894177436829f, 0.1638849675655365f, +0.9209457635879517f, 0.8881420493125916f, 0.17763586342334747f, 0.312907874584198f, 0.02083691395819187f, 0.6804907917976379f, 0.884349524974823f, 0.8067784309387207f, +0.5605829358100891f, 0.2525622844696045f, 0.11705434322357178f, 0.9732146263122559f, 0.30320367217063904f, 0.6142884492874146f, 0.7624046802520752f, 0.2887282073497772f, +0.16365492343902588f, 0.25544896721839905f, 0.23357728123664856f, 0.41172969341278076f, 0.4436946511268616f, 0.6965290904045105f, 0.05127004534006119f, 0.8863173127174377f, +0.5887587070465088f, 0.5858069658279419f, 0.5858833193778992f, 0.7040216326713562f, 0.5969430208206177f, 0.5753465294837952f, 0.7625756859779358f, 0.05507266893982887f, +0.44171443581581116f, 0.47779881954193115f, 0.8660895228385925f, 0.7754128575325012f, 0.00661457609385252f, 0.18816964328289032f, 0.4417679011821747f, 0.31410545110702515f, +0.925980806350708f, 0.2929478883743286f, 0.7191260457038879f, 0.20043347775936127f, 0.44435107707977295f, 0.6610074043273926f, 0.25048789381980896f, 0.3826643228530884f, +0.8121215105056763f, 0.6603088974952698f, 0.9263206124305725f, 0.9084402322769165f, 0.10682728886604309f, 0.4936213493347168f, 0.5749017596244812f, 0.39120912551879883f, +0.7411479949951172f, 0.1690216213464737f, 0.24655254185199738f, 0.1601189821958542f, 0.5297955870628357f, 0.3969332277774811f, 0.9423258900642395f, 0.30827486515045166f, +0.7108157873153687f, 0.3911011219024658f, 0.49130678176879883f, 0.5376534461975098f, 0.1313854157924652f, 0.9500258564949036f, 0.02405255287885666f, 0.3473118543624878f, +0.3166359066963196f, 0.36142241954803467f, 0.9958972930908203f, 0.29222455620765686f, 0.24207311868667603f, 0.5081063508987427f, 0.30636346340179443f, 0.5240061283111572f, +0.19644396007061005f, 0.684601902961731f, 0.00013040698831900954f, 0.4327877163887024f, 0.44383183121681213f, 0.13356851041316986f, 0.9175777435302734f, 0.5947603583335876f, +0.9731647372245789f, 0.6322186589241028f, 0.4536376893520355f, 0.8377768397331238f, 0.1624975949525833f, 0.17723065614700317f, 0.7718386650085449f, 0.6055142879486084f, +0.46633562445640564f, 0.36770638823509216f, 0.7460325956344604f, 0.21115462481975555f, 0.659542441368103f, 0.016786495223641396f, 0.697259783744812f, 0.6544352769851685f, +0.904412567615509f, 0.023095140233635902f, 0.18066704273223877f, 0.7267616391181946f, 0.7565190196037292f, 0.7297966480255127f, 0.08917008340358734f, 0.573890745639801f, +0.8135820031166077f, 0.1003139540553093f, 0.3169712424278259f, 0.7925975322723389f, 0.21560946106910706f, 0.1459117978811264f, 0.7080152034759521f, 0.8372363448143005f, +0.42827317118644714f, 0.46355748176574707f, 0.10187450051307678f, 0.10388631373643875f, 0.6931343078613281f, 0.337350994348526f, 0.47436800599098206f, 0.8320422172546387f, +0.4936680793762207f, 0.9662128686904907f, 0.48984551429748535f, 0.15235823392868042f, 0.5609894394874573f, 0.7371748685836792f, 0.2234572470188141f, 0.013523874804377556f, +0.19536332786083221f, 0.2964760661125183f, 0.9367980360984802f, 0.579454779624939f, 0.6059292554855347f, 0.6162516474723816f, 0.5394816398620605f, 0.9226816296577454f, +0.19816698133945465f, 0.5402039289474487f, 0.32315969467163086f, 0.6936261057853699f, 0.971220076084137f, 0.8989734649658203f, 0.38042283058166504f, 0.22952646017074585f, +0.9561716318130493f, 0.3999814987182617f, 0.5279417634010315f, 0.9533483386039734f, 0.7213928699493408f, 0.25703272223472595f, 0.24359767138957977f, 0.5685315728187561f, +0.03568053990602493f, 0.8359525799751282f, 0.03319120407104492f, 0.30280834436416626f, 0.896990954875946f, 0.28929466009140015f, 0.2154647260904312f, 0.22045162320137024f, +0.42962172627449036f, 0.5048544406890869f, 0.5305966138839722f, 0.10074760019779205f, 0.7365646958351135f, 0.36014324426651f, 0.35421279072761536f, 0.5485825538635254f, +0.9425368309020996f, 0.5671223402023315f, 0.70671147108078f, 0.7373631000518799f, 0.7831827998161316f, 0.12772251665592194f, 0.03657647594809532f, 0.5665220618247986f, +0.4957432746887207f, 0.4606536626815796f, 0.21913015842437744f, 0.5353264808654785f, 0.34800049662590027f, 0.528884768486023f, 0.7724188566207886f, 0.1043727919459343f, +0.9289717674255371f, 0.9139034152030945f, 0.7219170928001404f, 0.7932374477386475f, 0.4989236891269684f, 0.9029790163040161f, 0.7576987147331238f, 0.46788761019706726f, +0.7345986366271973f, 0.9297366142272949f, 0.2248556911945343f, 0.25671377778053284f, 0.6667760014533997f, 0.31124070286750793f, 0.48246708512306213f, 0.20418202877044678f, +0.8775317072868347f, 0.22542494535446167f, 0.4700208008289337f, 0.48815518617630005f, 0.15988175570964813f, 0.9950793981552124f, 0.3475766181945801f, 0.4474281370639801f, +0.2997736632823944f, 0.7101579904556274f, 0.06476441770792007f, 0.07624299079179764f, 0.08855491131544113f, 0.19424618780612946f, 0.4105829894542694f, 0.6442456245422363f, +0.007645107805728912f, 0.48139089345932007f, 0.9505025148391724f, 0.11251767724752426f, 0.7143411636352539f, 0.6788382530212402f, 0.104139044880867f, 0.7779840230941772f, +0.11261151731014252f, 0.6181279420852661f, 0.15702436864376068f, 0.5589639544487f, 0.2309306561946869f, 0.9233615398406982f, 0.5677622556686401f, 0.4766954183578491f, +0.3766248822212219f, 0.014587030746042728f, 0.7906220555305481f, 0.4046562910079956f, 0.7878217101097107f, 0.20621109008789062f, 0.0884021446108818f, 0.5910153388977051f, +0.9533434510231018f, 0.106191486120224f, 0.5130935311317444f, 0.06032562255859375f, 0.2773543894290924f, 0.47212955355644226f, 0.32888633012771606f, 0.03235732018947601f, +0.9492227435112f, 0.7950506210327148f, 0.08837547898292542f, 0.3255515992641449f, 0.5043670535087585f, 0.05613298341631889f, 0.6987093687057495f, 0.532356321811676f, +0.6728246212005615f, 0.5651310682296753f, 0.17542947828769684f, 0.6386197805404663f, 0.8724521398544312f, 0.8732621073722839f, 0.45852428674697876f, 0.743716835975647f, +0.7771663069725037f, 0.6220702528953552f, 0.0971020758152008f, 0.533462643623352f, 0.9057550430297852f, 0.46743303537368774f, 0.7439470887184143f, 0.5402064323425293f, +0.9068211913108826f, 0.7790853381156921f, 0.24523012340068817f, 0.2397328019142151f, 0.30084481835365295f, 0.6012808680534363f, 0.9725589752197266f, 0.5037594437599182f, +0.22816713154315948f, 0.22566008567810059f, 0.5680297613143921f, 0.8166463971138f, 0.33143556118011475f, 0.22334928810596466f, 0.9575173258781433f, 0.4843187928199768f, +0.12937267124652863f, 0.011565044522285461f, 0.3194776773452759f, 0.7197929620742798f, 0.8082089424133301f, 0.10220612585544586f, 0.41101887822151184f, 0.1896791011095047f, +0.45046550035476685f, 0.8430591225624084f, 0.5848661065101624f, 0.3733903765678406f, 0.16093988716602325f, 0.5063637495040894f, 0.3185483515262604f, 0.4475923180580139f, +0.6999130845069885f, 0.16672395169734955f, 0.34565746784210205f, 0.25927385687828064f, 0.13347944617271423f, 0.3017405569553375f, 0.6986687183380127f, 0.8586368560791016f, +0.8128480315208435f, 0.10988884419202805f, 0.7267149090766907f, 0.8422353267669678f, 0.6085345149040222f, 0.9667508006095886f, 0.8598407506942749f, 0.8450255990028381f, +0.9518347978591919f, 0.9172732830047607f, 0.26806971430778503f, 0.5508357882499695f, 0.519278347492218f, 0.52447909116745f, 0.13447438180446625f, 0.7202255725860596f, +0.4601544737815857f, 0.6979051828384399f, 0.21126948297023773f, 0.45729702711105347f, 0.6464310884475708f, 0.5251793265342712f, 0.5557675361633301f, 0.3745088279247284f, +0.2897360622882843f, 0.2944287955760956f, 0.46015504002571106f, 0.817548394203186f, 0.12284744530916214f, 0.5863747596740723f, 0.32991823554039f, 0.5031996965408325f, +0.05622907355427742f, 0.1760735958814621f, 0.2246469408273697f, 0.5876246094703674f, 0.13511520624160767f, 0.6807594895362854f, 0.12715454399585724f, 0.7485828995704651f, +0.1833730936050415f, 0.6663357615470886f, 0.11539223790168762f, 0.9907981753349304f, 0.9842891097068787f, 0.23990702629089355f, 0.7059021592140198f, 0.47121748328208923f, +0.07972352206707001f, 0.5246864557266235f, 0.7216373682022095f, 0.5291672348976135f, 0.4384186863899231f, 0.17429380118846893f, 0.7869807481765747f, 0.2761247754096985f, +0.7249945402145386f, 0.11407536268234253f, 0.6830346584320068f, 0.3318217098712921f, 0.8021230101585388f, 0.30291232466697693f, 0.12597061693668365f, 0.3969588577747345f, +0.8287729620933533f, 0.48716068267822266f, 0.7989177703857422f, 0.4657009243965149f, 0.30787113308906555f, 0.3788377046585083f, 0.4548652768135071f, 0.8102144598960876f, +0.35940834879875183f, 0.8706651926040649f, 0.11295252293348312f, 0.9937207102775574f, 0.09047125279903412f, 0.9901801943778992f, 0.8486202955245972f, 0.9090725779533386f, +0.9188598394393921f, 0.7865239381790161f, 0.19640767574310303f, 0.5724755525588989f, 0.9394136071205139f, 0.8616242408752441f, 0.3198116719722748f, 0.6566610932350159f, +0.7832059860229492f, 0.700056791305542f, 0.4623689353466034f, 0.7083050012588501f, 0.6422262191772461f, 0.4091138243675232f, 0.09631959348917007f, 0.9488685131072998f, +0.18035729229450226f, 0.5813424587249756f, 0.07463613152503967f, 0.0360586978495121f, 0.8280304074287415f, 0.8881244659423828f, 0.0774051621556282f, 0.259826123714447f, +0.6633962988853455f, 0.8991292715072632f, 0.3552396893501282f, 0.9834995865821838f, 0.33241111040115356f, 0.8200728893280029f, 0.599601686000824f, 0.7766788005828857f, +0.20281946659088135f, 0.4377296268939972f, 0.567941427230835f, 0.05284019559621811f, 0.5860788226127625f, 0.5832575559616089f, 0.19234153628349304f, 0.7520618438720703f, +0.9657233953475952f, 0.0068025062792003155f, 0.47001710534095764f, 0.4460664391517639f, 0.6646085381507874f, 0.633600115776062f, 0.939355731010437f, 0.25370967388153076f, +0.08453873544931412f, 0.31770238280296326f, 0.21591416001319885f, 0.0730687752366066f, 0.3501184284687042f, 0.34934914112091064f, 0.7306958436965942f, 0.3547256290912628f, +0.01824440248310566f, 0.8725616335868835f, 0.5138702392578125f, 0.5198224782943726f, 0.9592401385307312f, 0.35430797934532166f, 0.08683162927627563f, 0.2060517519712448f, +0.9921712875366211f, 0.9255408048629761f, 0.8642102479934692f, 0.9152927398681641f, 0.3875349462032318f, 0.7759502530097961f, 0.5523645281791687f, 0.1722227931022644f, +0.09799177199602127f, 0.8423635959625244f, 0.8294282555580139f, 0.5379571914672852f, 0.48113176226615906f, 0.37090545892715454f, 0.8052231073379517f, 0.5480886697769165f, +0.6436750888824463f, 0.19054590165615082f, 0.719245433807373f, 0.22335880994796753f, 0.8070111870765686f, 0.2743149697780609f, 0.5585901141166687f, 0.3575511574745178f, +0.40989500284194946f, 0.4953291118144989f, 0.5213326811790466f, 0.20592568814754486f, 0.4862409234046936f, 0.6700820326805115f, 0.7101775407791138f, 0.5195291042327881f, +0.6783599257469177f, 0.5607640743255615f, 0.26236042380332947f, 0.13844193518161774f, 0.22657443583011627f, 0.5755151510238647f, 0.09211315214633942f, 0.7199168801307678f, +0.8048844337463379f, 0.002547138836234808f, 0.2841855585575104f, 0.5290915966033936f, 0.3715193271636963f, 0.4746290147304535f, 0.6560752391815186f, 0.9331115484237671f, +0.16129717230796814f, 0.36519306898117065f, 0.577336847782135f, 0.07299495488405228f, 0.998651921749115f, 0.9354062676429749f, 0.19903649389743805f, 0.4218086898326874f, +0.8849695920944214f, 0.6234980821609497f, 0.22960130870342255f, 0.6104644536972046f, 0.2981488108634949f, 0.42490124702453613f, 0.9803891777992249f, 0.9923848509788513f, +0.822917103767395f, 0.47400787472724915f, 0.8808433413505554f, 0.39306625723838806f, 0.94321608543396f, 0.002172081731259823f, 0.765940248966217f, 0.6925156712532043f, +0.40753650665283203f, 0.674296498298645f, 0.7178621292114258f, 0.34934645891189575f, 0.5529840588569641f, 0.22336171567440033f, 0.6345239281654358f, 0.9670578837394714f, +0.4524666666984558f, 0.055645402520895004f, 0.5753577351570129f, 0.2697296738624573f, 0.7761832475662231f, 0.2486116588115692f, 0.5697056651115417f, 0.5098636746406555f, +0.4884897470474243f, 0.034820206463336945f, 0.15421001613140106f, 0.25578171014785767f, 0.8941871523857117f, 0.7755027413368225f, 0.28707224130630493f, 0.3490671217441559f, +0.9694890379905701f, 0.5169388651847839f, 0.258072167634964f, 0.6252174973487854f, 0.2992795705795288f, 0.6585943102836609f, 0.050493743270635605f, 0.30817750096321106f, +0.7341529726982117f, 0.9533141255378723f, 0.7121042609214783f, 0.8192691802978516f, 0.22257296741008759f, 0.7602116465568542f, 0.29650065302848816f, 0.7490074634552002f, +0.5812214016914368f, 0.8923603892326355f, 0.7861557602882385f, 0.9586642384529114f, 0.19541984796524048f, 0.09662990272045135f, 0.8731386065483093f, 0.10174376517534256f, +0.930387556552887f, 0.9797078967094421f, 0.9128400087356567f, 0.20971018075942993f, 0.4658214747905731f, 0.6187458038330078f, 0.9871437549591064f, 0.8716422915458679f, +0.7136589884757996f, 0.6115723848342896f, 0.7840063571929932f, 0.5293290615081787f, 0.49157440662384033f, 0.3331582546234131f, 0.15568745136260986f, 0.722266674041748f, +0.5534297227859497f, 0.5565237402915955f, 0.7567550539970398f, 0.654749870300293f, 0.6741788387298584f, 0.9966620206832886f, 0.3351599872112274f, 0.5191120505332947f, +0.5015886425971985f, 0.5251113772392273f, 0.25637251138687134f, 0.5616631507873535f, 0.6367181539535522f, 0.49974411725997925f, 0.05888473242521286f, 0.8198578953742981f, +0.21409361064434052f, 0.9045771956443787f, 0.15334437787532806f, 0.0780860036611557f, 0.6484158635139465f, 0.48872438073158264f, 0.6195063591003418f, 0.11621254682540894f, +0.8897954821586609f, 0.895772397518158f, 0.5489801168441772f, 0.8636371493339539f, 0.351863831281662f, 0.1849232316017151f, 0.06327610462903976f, 0.3096701502799988f, +0.035149022936820984f, 0.3679291605949402f, 0.9081852436065674f, 0.6933280229568481f, 0.5167716145515442f, 0.1456773579120636f, 0.20642709732055664f, 0.21176746487617493f, +0.779005765914917f, 0.7872098088264465f, 0.10956291854381561f, 0.7314224243164062f, 0.5685897469520569f, 0.6013403534889221f, 0.31984657049179077f, 0.798207700252533f, +0.3711566627025604f, 0.2597287595272064f, 0.2686583697795868f, 0.6397643089294434f, 0.05656246095895767f, 0.21281656622886658f, 0.3148881196975708f, 0.20445336401462555f, +0.3455786108970642f, 0.8420092463493347f, 0.3964776396751404f, 0.3930106461048126f, 0.3765244483947754f, 0.8444529175758362f, 0.62699294090271f, 0.9529404640197754f, +0.18126937747001648f, 0.9658858180046082f, 0.9334876537322998f, 0.866773247718811f, 0.36539074778556824f, 0.9529338479042053f, 0.5939745306968689f, 0.5471758246421814f, +0.08179724961519241f, 0.8685228824615479f, 0.12175707519054413f, 0.8354246616363525f, 0.7100112438201904f, 0.704472541809082f, 0.6332157254219055f, 0.4756885766983032f, +0.6304915547370911f, 0.02130095660686493f, 0.10080446302890778f, 0.14735844731330872f, 0.4230978190898895f, 0.5971233248710632f, 0.35255616903305054f, 0.8727929592132568f, +0.021852558478713036f, 0.1100989282131195f, 0.9331338405609131f, 0.7975557446479797f, 0.14344483613967896f, 0.5055399537086487f, 0.26587843894958496f, 0.9690847396850586f, +0.04502026364207268f, 0.7452706694602966f, 0.3926548957824707f, 0.9450727105140686f, 0.8969698548316956f, 0.4915788471698761f, 0.09145890176296234f, 0.048354800790548325f, +0.5232071280479431f, 0.27832651138305664f, 0.6102942228317261f, 0.8834465742111206f, 0.22804780304431915f, 0.7678345441818237f, 0.48095494508743286f, 0.2974359095096588f, +0.8733717203140259f, 0.7436947822570801f, 0.11580845713615417f, 0.37384510040283203f, 0.23599252104759216f, 0.2946755290031433f, 0.7408892512321472f, 0.49323853850364685f, +0.5949404239654541f, 0.9034027457237244f, 0.7027332186698914f, 0.6450827717781067f, 0.23602473735809326f, 0.37449291348457336f, 0.8052676320075989f, 0.331732839345932f, +0.9598324298858643f, 0.031160779297351837f, 0.1486249715089798f, 0.08494406193494797f, 0.7166247367858887f, 0.2648465037345886f, 0.8086945414543152f, 0.3205520212650299f, +0.045193541795015335f, 0.6979455351829529f, 0.9597851634025574f, 0.4676256775856018f, 0.8090991377830505f, 0.3750148415565491f, 0.17958438396453857f, 0.29644501209259033f, +0.5527663826942444f, 0.8365085124969482f, 0.4927520453929901f, 0.9911656975746155f, 0.9973148107528687f, 0.207881897687912f, 0.6684456467628479f, 0.9202921986579895f, +0.7460277080535889f, 0.45669716596603394f, 0.868746817111969f, 0.6493445038795471f, 0.04119698703289032f, 0.5027874112129211f, 0.8220138549804688f, 0.7887810468673706f, +0.5682967901229858f, 0.3377671539783478f, 0.8626102805137634f, 0.7806347012519836f, 0.5458148717880249f, 0.27042528986930847f, 0.8050341010093689f, 0.22400715947151184f, +0.1612728238105774f, 0.6199558973312378f, 0.8033937811851501f, 0.25038182735443115f, 0.6234559416770935f, 0.391958087682724f, 0.2853008806705475f, 0.5611289739608765f, +0.26831191778182983f, 0.6190592646598816f, 0.004978559445589781f, 0.9923131465911865f, 0.8684595823287964f, 0.9388958811759949f, 0.0008692420669831336f, 0.8653293251991272f, +0.6232073307037354f, 0.5478405356407166f, 0.26780468225479126f, 0.9619632363319397f, 0.4078580141067505f, 0.5718323588371277f, 0.1863134652376175f, 0.29028186202049255f, +0.5620702505111694f, 0.2487567812204361f, 0.8000158071517944f, 0.7991426587104797f, 0.34111297130584717f, 0.4398767352104187f, 0.12020214647054672f, 0.24893926084041595f, +0.9135380387306213f, 0.7959161996841431f, 0.30747249722480774f, 0.5071234107017517f, 0.7436555027961731f, 0.16945023834705353f, 0.014391820877790451f, 0.26366540789604187f, +0.4368404746055603f, 0.4355356991291046f, 0.7406141757965088f, 0.31791624426841736f, 0.5056673884391785f, 0.49071642756462097f, 0.3180290162563324f, 0.41354045271873474f, +0.8232571482658386f, 0.1544705629348755f, 0.9639379978179932f, 0.0658976212143898f, 0.9557032585144043f, 0.6898876428604126f, 0.9442200660705566f, 0.7895243763923645f, +0.20316436886787415f, 0.6187392473220825f, 0.6063239574432373f, 0.44395172595977783f, 0.8424717783927917f, 0.1569315791130066f, 0.7498900890350342f, 0.14653891324996948f, +0.4496597945690155f, 0.9857010245323181f, 0.8078277707099915f, 0.6900444626808167f, 0.07519613951444626f, 0.9265716075897217f, 0.050575632601976395f, 0.7551128268241882f, +0.9557055234909058f, 0.4715706706047058f, 0.4511657655239105f, 0.30314502120018005f, 0.45267388224601746f, 0.534774899482727f, 0.7543445229530334f, 0.23651643097400665f, +0.20475953817367554f, 0.3460122048854828f, 0.6360676884651184f, 0.12900634109973907f, 0.8873249292373657f, 0.7320078611373901f, 0.3002580404281616f, 0.03745171055197716f, +0.15436895191669464f, 0.4162486493587494f, 0.6839523315429688f, 0.5434301495552063f, 0.7567234039306641f, 0.8724046945571899f, 0.6641896367073059f, 0.9875015020370483f, +0.35806259512901306f, 0.23457196354866028f, 0.5767450928688049f, 0.6977556347846985f, 0.24528248608112335f, 0.01180648896843195f, 0.8607861399650574f, 0.25089991092681885f, +0.5447025895118713f, 0.0017172906082123518f, 0.6553578972816467f, 0.4702208340167999f, 0.8209154009819031f, 0.34401169419288635f, 0.6761459708213806f, 0.5634845495223999f, +0.0007956280605867505f, 0.6094160079956055f, 0.4172133207321167f, 0.33326825499534607f, 0.7640420794487f, 0.8893092274665833f, 0.6799551844596863f, 0.9769803881645203f, +0.9762127995491028f, 0.0965181216597557f, 0.3235474228858948f, 0.9107193946838379f, 0.39660224318504333f, 0.4753850996494293f, 0.042607858777046204f, 0.6775097250938416f, +0.3928969204425812f, 0.051809169352054596f, 0.3256523609161377f, 0.18042989075183868f, 0.33589357137680054f, 0.3564614951610565f, 0.14218558371067047f, 0.405885249376297f, +0.11515400558710098f, 0.04216178506612778f, 0.17857076227664948f, 0.609529972076416f, 0.9859456419944763f, 0.146432027220726f, 0.4888865053653717f, 0.045479677617549896f, +0.30852073431015015f, 0.8621349334716797f, 0.7472633719444275f, 0.9334129095077515f, 0.6993758678436279f, 0.0026966980658471584f, 0.3644043803215027f, 0.6361552476882935f, +0.8975532054901123f, 0.27066338062286377f, 0.19096459448337555f, 0.1146676242351532f, 0.9566205143928528f, 0.4976294934749603f, 0.8623738884925842f, 0.7061495780944824f, +0.039582543075084686f, 0.2821770906448364f, 0.46579670906066895f, 0.880769670009613f, 0.1605243682861328f, 0.19898337125778198f, 0.32331448793411255f, 0.10537968575954437f, +0.28825095295906067f, 0.7983684539794922f, 0.8547466993331909f, 0.23622049391269684f, 0.3944869637489319f, 0.7197492122650146f, 0.23157750070095062f, 0.28727081418037415f, +0.6660943627357483f, 0.1867602914571762f, 0.5656430721282959f, 0.6734779477119446f, 0.5480012893676758f, 0.984865128993988f, 0.7763351202011108f, 0.47277483344078064f, +0.13398320972919464f, 0.1989508718252182f, 0.09262382984161377f, 0.5487344264984131f, 0.8155933618545532f, 0.08506716042757034f, 0.8890672922134399f, 0.23783370852470398f, +0.13862279057502747f, 0.021754983812570572f, 0.729069709777832f, 0.23643554747104645f, 0.3606272339820862f, 0.49495309591293335f, 0.4704324007034302f, 0.4193328619003296f, +0.025001604110002518f, 0.9212488532066345f, 0.7179384827613831f, 0.39935535192489624f, 0.6217374801635742f, 0.12015612423419952f, 0.9678959250450134f, 0.8102121949195862f, +0.7509114742279053f, 0.8543091416358948f, 0.36507055163383484f, 0.018171945586800575f, 0.8304532170295715f, 0.04066278040409088f, 0.34336674213409424f, 0.38853755593299866f, +0.8815422654151917f, 0.49575161933898926f, 0.9244222640991211f, 0.10053443908691406f, 0.3650374114513397f, 0.9242021441459656f, 0.28180447220802307f, 0.5410817265510559f, +0.3110700845718384f, 0.7183904051780701f, 0.46725523471832275f, 0.5174275636672974f, 0.6071216464042664f, 0.2886231541633606f, 0.7547562122344971f, 0.9873534440994263f, +0.8826695084571838f, 0.6618391275405884f, 0.9591104388237f, 0.15677309036254883f, 0.7032001614570618f, 0.31540390849113464f, 0.0932692214846611f, 0.7064735293388367f, +0.09095755964517593f, 0.4624861478805542f, 0.9386569857597351f, 0.6301373839378357f, 0.41247454285621643f, 0.9848970174789429f, 0.4125277101993561f, 0.4977260231971741f, +0.7415398955345154f, 0.16939978301525116f, 0.4037931263446808f, 0.5466893911361694f, 0.042239077389240265f, 0.17356917262077332f, 0.8541186451911926f, 0.10255621373653412f, +0.32703477144241333f, 0.6905694603919983f, 0.16622307896614075f, 0.36148813366889954f, 0.08698637038469315f, 0.8626004457473755f, 0.23446784913539886f, 0.9808885455131531f, +0.73924320936203f, 0.6306418776512146f, 0.34436890482902527f, 0.49843865633010864f, 0.7006164789199829f, 0.40727362036705017f, 0.04978135600686073f, 0.7905585169792175f, +0.5565855503082275f, 0.9330605864524841f, 0.8705583810806274f, 0.16124092042446136f, 0.7642938494682312f, 0.6884873509407043f, 0.6843564510345459f, 0.8055490851402283f, +0.010200678370893002f, 0.7535067796707153f, 0.5046514868736267f, 0.708293616771698f, 0.2988264262676239f, 0.07084445655345917f, 0.35692697763442993f, 0.40933626890182495f, +0.8307340741157532f, 0.49647995829582214f, 0.30747848749160767f, 0.7861843705177307f, 0.9410814046859741f, 0.12234434485435486f, 0.7593690156936646f, 0.35965269804000854f, +0.14183194935321808f, 0.6414394378662109f, 0.9640830159187317f, 0.977994978427887f, 0.27849939465522766f, 0.801837146282196f, 0.16157466173171997f, 0.4199242889881134f, +0.41128867864608765f, 0.2586633265018463f, 0.7256239652633667f, 0.5030760169029236f, 0.9445741772651672f, 0.09574472904205322f, 0.5198894739151001f, 0.14269275963306427f, +0.022400446236133575f, 0.8067627549171448f, 0.00042003460112027824f, 0.7474603056907654f, 0.7535869479179382f, 0.8752155900001526f, 0.9894758462905884f, 0.6106433868408203f, +0.8676393628120422f, 0.705298662185669f, 0.09193479269742966f, 0.07413037121295929f, 0.42134949564933777f, 0.2861253023147583f, 0.46841996908187866f, 0.5016517043113708f, +0.5802480578422546f, 0.44801658391952515f, 0.6390365362167358f, 0.6108158230781555f, 0.9657997488975525f, 0.34527406096458435f, 0.6257665157318115f, 0.05786856636404991f, +0.6733192205429077f, 0.07310330867767334f, 0.3756372034549713f, 0.05170798301696777f, 0.8351738452911377f, 0.6356799006462097f, 0.2946872413158417f, 0.005537375807762146f, +0.9207311868667603f, 0.8819372653961182f, 0.9710317254066467f, 0.2939005494117737f, 0.5254340171813965f, 0.5473368167877197f, 0.21327902376651764f, 0.3067017197608948f, +0.6983990669250488f, 0.5030009150505066f, 0.24284450709819794f, 0.9064345359802246f, 0.20855022966861725f, 0.06231248006224632f, 0.43144750595092773f, 0.9820494651794434f, +0.11522595584392548f, 0.7013013362884521f, 0.7294034361839294f, 0.48704639077186584f, 0.9680665135383606f, 0.7517577409744263f, 0.6841603517532349f, 0.4232354760169983f, +0.06745918840169907f, 0.9548481702804565f, 0.36473581194877625f, 0.22477082908153534f, 0.9061847925186157f, 0.18765458464622498f, 0.7241305708885193f, 0.6246223449707031f, +0.6287861466407776f, 0.836050808429718f, 0.7408145666122437f, 0.5306512117385864f, 0.8839079737663269f, 0.5738396048545837f, 0.9950202703475952f, 0.4155791997909546f, +0.07846002280712128f, 0.09218230843544006f, 0.9813195466995239f, 0.6588312387466431f, 0.6906365156173706f, 0.7316705584526062f, 0.8612179756164551f, 0.33079978823661804f, +0.4750746786594391f, 0.1270586997270584f, 0.9003292322158813f, 0.013573934324085712f, 0.3890230655670166f, 0.8341103792190552f, 0.13858862221240997f, 0.07416662573814392f, +0.8267041444778442f, 0.5191872715950012f, 0.6807830929756165f, 0.1871061474084854f, 0.11250422149896622f, 0.2027403563261032f, 0.756618857383728f, 0.7919946908950806f, +0.9805011749267578f, 0.6561470627784729f, 0.8350899815559387f, 0.15429291129112244f, 0.15942580997943878f, 0.9022064805030823f, 0.2881109118461609f, 0.7430203557014465f, +0.7960774302482605f, 0.6279439926147461f, 0.16050930321216583f, 0.528791069984436f, 0.14806294441223145f, 0.4507334530353546f, 0.30735480785369873f, 0.07068843394517899f, +0.23770515620708466f, 0.4819371998310089f, 0.853140652179718f, 0.46459871530532837f, 0.004453951492905617f, 0.26903489232063293f, 0.7083107233047485f, 0.8516725301742554f, +0.45211341977119446f, 0.06925098598003387f, 0.28612667322158813f, 0.8245476484298706f, 0.3926933705806732f, 0.3941924571990967f, 0.8322264552116394f, 0.09233169257640839f, +0.01042476948350668f, 0.11057918518781662f, 0.521736204624176f, 0.1719944328069687f, 0.7272719144821167f, 0.736453652381897f, 0.006215883884578943f, 0.29315945506095886f, +0.9425166845321655f, 0.9918003678321838f, 0.6881418824195862f, 0.33003491163253784f, 0.35484805703163147f, 0.7945766448974609f, 0.4194556176662445f, 0.7203790545463562f, +0.2735257148742676f, 0.7926064133644104f, 0.5629410743713379f, 0.3465082347393036f, 0.37697890400886536f, 0.740039050579071f, 0.8009218573570251f, 0.2556014657020569f, +0.6612807512283325f, 0.6185857653617859f, 0.2923988401889801f, 0.9593185186386108f, 0.6324380040168762f, 0.8911986351013184f, 0.06137333810329437f, 0.8627144694328308f, +0.4766845107078552f, 0.8338459730148315f, 0.043505534529685974f, 0.010145474225282669f, 0.6165408492088318f, 0.6435409188270569f, 0.3732873797416687f, 0.41600361466407776f, +0.10343567281961441f, 0.011499077081680298f, 0.17520718276500702f, 0.5699409246444702f, 0.7660435438156128f, 0.6067270636558533f, 0.7692469358444214f, 0.698310375213623f, +0.8439944982528687f, 0.4764379858970642f, 0.30580854415893555f, 0.13844896852970123f, 0.38871437311172485f, 0.03156432509422302f, 0.6888605356216431f, 0.527824878692627f, +0.0786345973610878f, 0.4525373876094818f, 0.5280428528785706f, 0.7150149941444397f, 0.87117999792099f, 0.601839542388916f, 0.3772595524787903f, 0.3659537434577942f, +0.368686705827713f, 0.1863994151353836f, 0.26692211627960205f, 0.9579585194587708f, 0.033194828778505325f, 0.7702354192733765f, 0.9758193492889404f, 0.08127913624048233f, +0.6013615131378174f, 0.049968134611845016f, 0.7202715277671814f, 0.46828198432922363f, 0.6836409568786621f, 0.25438058376312256f, 0.960587739944458f, 0.8832993507385254f, +0.8154544234275818f, 0.446993887424469f, 0.18990877270698547f, 0.9408515095710754f, 0.9778488874435425f, 0.8168547749519348f, 0.5995678901672363f, 0.9790642857551575f, +0.9771955013275146f, 0.6051050424575806f, 0.977481484413147f, 0.41638752818107605f, 0.8373079299926758f, 0.3841460049152374f, 0.24213802814483643f, 0.23996137082576752f, +0.4275931119918823f, 0.28004249930381775f, 0.5900022983551025f, 0.5261992812156677f, 0.20070259273052216f, 0.3218938112258911f, 0.05173785239458084f, 0.39668557047843933f, +0.3437069356441498f, 0.9753469824790955f, 0.4050421416759491f, 0.442324697971344f, 0.23554232716560364f, 0.33416613936424255f, 0.5255969166755676f, 0.7165877223014832f, +0.5355947613716125f, 0.03428692743182182f, 0.07153341919183731f, 0.17117725312709808f, 0.6601689457893372f, 0.779703676700592f, 0.3463701605796814f, 0.8773254156112671f, +0.3697238862514496f, 0.1842930018901825f, 0.5436539053916931f, 0.261983186006546f, 0.041913650929927826f, 0.5697965621948242f, 0.7044073343276978f, 0.8737010955810547f, +0.15359395742416382f, 0.23076438903808594f, 0.44761019945144653f, 0.5070307850837708f, 0.9930422306060791f, 0.5388336777687073f, 0.6880856156349182f, 0.8885805010795593f, +0.08327964693307877f, 0.3159976005554199f, 0.7596839666366577f, 0.12660489976406097f, 0.7668198347091675f, 0.06447132676839828f, 0.1499125063419342f, 0.7285639047622681f, +0.7783761620521545f, 0.9573083519935608f, 0.43193674087524414f, 0.326223760843277f, 0.6234222054481506f, 0.824560821056366f, 0.5553333163261414f, 0.4219643771648407f, +0.486174613237381f, 0.49729567766189575f, 0.9288128614425659f, 0.30281364917755127f, 0.9763514995574951f, 0.3136120140552521f, 0.7324010133743286f, 0.23823988437652588f, +0.0750572681427002f, 0.8614629507064819f, 0.48373737931251526f, 0.05416453257203102f, 0.0945342481136322f, 0.25269874930381775f, 0.15625686943531036f, 0.7752213478088379f, +0.6008185148239136f, 0.9693965315818787f, 0.6077018976211548f, 0.19631099700927734f, 0.20810770988464355f, 0.2932945787906647f, 0.9712307453155518f, 0.3554973900318146f, +0.5825162529945374f, 0.43276622891426086f, 0.3912152945995331f, 0.16882087290287018f, 0.5972376465797424f, 0.572109043598175f, 0.5876023769378662f, 0.9773452877998352f, +0.7294124364852905f, 0.4359942376613617f, 0.4498803913593292f, 0.49421587586402893f, 0.9574316143989563f, 0.7554691433906555f, 0.5755292773246765f, 0.2124057412147522f, +0.009338371455669403f, 0.8304433822631836f, 0.020749563351273537f, 0.6577751040458679f, 0.21541641652584076f, 0.30028560757637024f, 0.15981557965278625f, 0.14225347340106964f, +0.047972578555345535f, 0.18687348067760468f, 0.8169100880622864f, 0.7504826784133911f, 0.5761627554893494f, 0.9615432024002075f, 0.26763495802879333f, 0.8608338236808777f, +0.9287960529327393f, 0.2689117193222046f, 0.07010975480079651f, 0.1703263521194458f, 0.022776858881115913f, 0.5525832772254944f, 0.360004723072052f, 0.725940465927124f, +0.5377305746078491f, 0.6671461462974548f, 0.6175861954689026f, 0.7377314567565918f, 0.0891837552189827f, 0.6918181777000427f, 0.17069081962108612f, 0.8885952830314636f, +0.4551192820072174f, 0.5367857813835144f, 0.47890791296958923f, 0.9461885690689087f, 0.9612498879432678f, 0.14177186787128448f, 0.9044542908668518f, 0.5151554346084595f, +0.413373738527298f, 0.5351126790046692f, 0.8995561599731445f, 0.3191351294517517f, 0.5385437607765198f, 0.9759212732315063f, 0.9719336032867432f, 0.3632403016090393f, +0.9235430955886841f, 0.13962619006633759f, 0.7455273866653442f, 0.023020392283797264f, 0.13440510630607605f, 0.18227338790893555f, 0.41970422863960266f, 0.12163093686103821f, +0.46985161304473877f, 0.17914249002933502f, 0.2657548487186432f, 0.8414669632911682f, 0.06265589594841003f, 0.17190998792648315f, 0.653444230556488f, 0.021008577197790146f, +0.8382667303085327f, 0.7338396906852722f, 0.7164390683174133f, 0.5899250507354736f, 0.8826301097869873f, 0.8900344371795654f, 0.5677748918533325f, 0.1850857436656952f, +0.7482209205627441f, 0.32078817486763f, 0.6756704449653625f, 0.1387738436460495f, 0.417959988117218f, 0.12372992932796478f, 0.250279039144516f, 0.7498807907104492f, +0.5864412188529968f, 0.7468445897102356f, 0.6649985313415527f, 0.3764737844467163f, 0.6869803071022034f, 0.5310028195381165f, 0.5265560150146484f, 0.7445670962333679f, +0.3439440429210663f, 0.9942619204521179f, 0.5263741612434387f, 0.6717716455459595f, 0.17350801825523376f, 0.07454485446214676f, 0.2792227268218994f, 0.5402880311012268f, +0.0677354633808136f, 0.9923604726791382f, 0.27171462774276733f, 0.5872626900672913f, 0.44089174270629883f, 0.484976589679718f, 0.712698221206665f, 0.25466403365135193f, +0.2810978591442108f, 0.21645306050777435f, 0.8598002791404724f, 0.14634275436401367f, 0.37511348724365234f, 0.07231500744819641f, 0.5499365925788879f, 0.6993637681007385f, +0.4101144075393677f, 0.8090676665306091f, 0.7105676531791687f, 0.24398930370807648f, 0.03905469551682472f, 0.6013409495353699f, 0.7996895909309387f, 0.6920961141586304f, +0.8648422956466675f, 0.6571129560470581f, 0.5579735636711121f, 0.47056514024734497f, 0.9690107703208923f, 0.6766915321350098f, 0.47952401638031006f, 0.11329696327447891f, +0.36413389444351196f, 0.5853347778320312f, 0.2258954495191574f, 0.595962405204773f, 0.0013921386562287807f, 0.9709766507148743f, 0.44585898518562317f, 0.8200893402099609f, +0.2637196481227875f, 0.6686633825302124f, 0.8980889916419983f, 0.5767809748649597f, 0.09639623761177063f, 0.13132858276367188f, 0.5910831689834595f, 0.6078184843063354f, +0.7907584309577942f, 0.8675627708435059f, 0.571536660194397f, 0.42524468898773193f, 0.483997642993927f, 0.46400535106658936f, 0.009455382823944092f, 0.306614488363266f, +0.06438735127449036f, 0.9444310665130615f, 0.6902361512184143f, 0.6039742231369019f, 0.8693973422050476f, 0.12582814693450928f, 0.9074525237083435f, 0.8409203290939331f, +0.2782018482685089f, 0.07540415972471237f, 0.5794351100921631f, 0.439647376537323f, 0.5249598026275635f, 0.6024683713912964f, 0.3366371691226959f, 0.420800119638443f, +0.0054331012070178986f, 0.6910070180892944f, 0.18684406578540802f, 0.9332931637763977f, 0.837380588054657f, 0.6748592257499695f, 0.9573593139648438f, 0.97430419921875f, +0.2535097599029541f, 0.12733350694179535f, 0.12766103446483612f, 0.7879038453102112f, 0.7846955060958862f, 0.7845568656921387f, 0.7168415188789368f, 0.9070437550544739f, +0.42277711629867554f, 0.4155086874961853f, 0.6541223526000977f, 0.5273309350013733f, 0.6455110311508179f, 0.6423474550247192f, 0.9122453927993774f, 0.15702828764915466f, +0.8576929569244385f, 0.8393531441688538f, 0.28552258014678955f, 0.8340270519256592f, 0.12392205744981766f, 0.8644583225250244f, 0.23979009687900543f, 0.973465085029602f, +0.9035550355911255f, 0.452548623085022f, 0.3043937683105469f, 0.8427074551582336f, 0.2165297120809555f, 0.8189377784729004f, 0.3931202292442322f, 0.9138897657394409f, +0.9145506024360657f, 0.4326128661632538f, 0.9646468162536621f, 0.8783077597618103f, 0.89385586977005f, 0.14395594596862793f, 0.045233093202114105f, 0.8072449564933777f, +0.932192862033844f, 0.4739166498184204f, 0.9702062606811523f, 0.11535392701625824f, 0.476867139339447f, 0.4304884672164917f, 0.06554869562387466f, 0.9795454740524292f, +0.175340935587883f, 0.5251146554946899f, 0.17289559543132782f, 0.8409253358840942f, 0.5850578546524048f, 0.3633680045604706f, 0.2996799647808075f, 0.47391360998153687f, +0.45534831285476685f, 0.3345106244087219f, 0.06630276143550873f, 0.6723254323005676f, 0.9745187163352966f, 0.039746060967445374f, 0.5972094535827637f, 0.2124968022108078f, +0.7847222089767456f, 0.3809731602668762f, 0.33898308873176575f, 0.06193273514509201f, 0.6982182264328003f, 0.9375013709068298f, 0.9632217884063721f, 0.18353794515132904f, +0.7944515943527222f, 0.8325371742248535f, 0.4843079149723053f, 0.2623663544654846f, 0.9817509651184082f, 0.4195713996887207f, 0.11505068838596344f, 0.9721336364746094f, +0.06837131083011627f, 0.47810691595077515f, 0.7961872816085815f, 0.2954815626144409f, 0.5808004140853882f, 0.023678990080952644f, 0.4165392518043518f, 0.5336354374885559f, +0.37433159351348877f, 0.24112214148044586f, 0.9465040564537048f, 0.5436174273490906f, 0.5756937265396118f, 0.007220624014735222f, 0.12223367393016815f, 0.16459845006465912f, +0.6918842196464539f, 0.1488250344991684f, 0.014984628185629845f, 0.8614698648452759f, 0.7363150715827942f, 0.8883854746818542f, 0.12595313787460327f, 0.12033703923225403f, +0.5492404103279114f, 0.9340962171554565f, 0.5266237258911133f, 0.24413207173347473f, 0.18960337340831757f, 0.2855583727359772f, 0.24836528301239014f, 0.9082263708114624f, +0.3032478392124176f, 0.028327032923698425f, 0.6427752375602722f, 0.08861403912305832f, 0.9228793978691101f, 0.5828797817230225f, 0.9932605624198914f, 0.9091103076934814f, +0.03608247637748718f, 0.2832272946834564f, 0.2606436610221863f, 0.10303355753421783f, 0.2857919931411743f, 0.059187859296798706f, 0.7454221248626709f, 0.22349199652671814f, +0.43867382407188416f, 0.013702857308089733f, 0.2121751457452774f, 0.6931135654449463f, 0.9344688653945923f, 0.08796947449445724f, 0.9522706270217896f, 0.1928379237651825f, +0.3605586588382721f, 0.623555600643158f, 0.4872640371322632f, 0.6387485861778259f, 0.3246900141239166f, 0.05938900634646416f, 0.8544521331787109f, 0.43295082449913025f, +0.10240700095891953f, 0.43699291348457336f, 0.05695462226867676f, 0.931603193283081f, 0.3260990083217621f, 0.698547899723053f, 0.859913170337677f, 0.4011439383029938f, +0.7515764236450195f, 0.8752765655517578f, 0.195108100771904f, 0.8463542461395264f, 0.9653753042221069f, 0.9330365657806396f, 0.6959038376808167f, 0.43204018473625183f, +0.9559813141822815f, 0.6846811771392822f, 0.46363306045532227f, 0.7242677211761475f, 0.9828121066093445f, 0.8802292943000793f, 0.5770742893218994f, 0.970037579536438f, +0.5733053684234619f, 0.033143721520900726f, 0.2370227724313736f, 0.07704367488622665f, 0.3429179787635803f, 0.018671220168471336f, 0.8367356657981873f, 0.8019074201583862f, +0.4485929012298584f, 0.4927806854248047f, 0.3007793426513672f, 0.6090525388717651f, 0.25485727190971375f, 0.5347379446029663f, 0.23670567572116852f, 0.9088606834411621f, +0.8118202686309814f, 0.8704895377159119f, 0.44611644744873047f, 0.25407645106315613f, 0.9434441924095154f, 0.73401939868927f, 0.4072805941104889f, 0.27757206559181213f, +0.18174289166927338f, 0.8695781230926514f, 0.057814646512269974f, 0.9734231233596802f, 0.32922452688217163f, 0.9818869233131409f, 0.7198984026908875f, 0.7988128662109375f, +0.48789793252944946f, 0.8059707283973694f, 0.8763560652732849f, 0.7219805717468262f, 0.6050239205360413f, 0.34142541885375977f, 0.872559130191803f, 0.3174822926521301f, +0.3635193109512329f, 0.5843555927276611f, 0.13956183195114136f, 0.1581532210111618f, 0.4190059304237366f, 0.9585590958595276f, 0.5028509497642517f, 0.834092378616333f, +0.05099815875291824f, 0.21546931564807892f, 0.6388731002807617f, 0.13651670515537262f, 0.6218708753585815f, 0.8492593765258789f, 0.864653468132019f, 0.5998292565345764f, +0.8724539875984192f, 0.9440115690231323f, 0.5690376162528992f, 0.8647421002388f, 0.8714722990989685f, 0.7893242239952087f, 0.26023614406585693f, 0.13284994661808014f, +0.1516438126564026f, 0.036243338137865067f, 0.8978299498558044f, 0.8358675837516785f, 0.5345872640609741f, 0.2376440316438675f, 0.17623721063137054f, 0.3588094711303711f, +0.2923905551433563f, 0.6397193670272827f, 0.5482962131500244f, 0.9356998205184937f, 0.8474464416503906f, 0.30161052942276f, 0.7146201133728027f, 0.27403825521469116f, +0.5140796303749084f, 0.3438940644264221f, 0.7107549905776978f, 0.1876976042985916f, 0.6821749210357666f, 0.16175797581672668f, 0.6640573143959045f, 0.3890308439731598f, +0.824303388595581f, 0.5234982371330261f, 0.4233979880809784f, 0.7562068104743958f, 0.727886438369751f, 0.6833208799362183f, 0.6039966940879822f, 0.6723765730857849f, +0.13412538170814514f, 0.6505095958709717f, 0.21527813374996185f, 0.9649890065193176f, 0.567449688911438f, 0.7402253746986389f, 0.3008999228477478f, 0.937004566192627f, +0.8929237127304077f, 0.3218511939048767f, 0.4124840199947357f, 0.9698336124420166f, 0.37594008445739746f, 0.13953760266304016f, 0.6861025094985962f, 0.658936083316803f, +0.3354683518409729f, 0.5838007926940918f, 0.3866603672504425f, 0.7315249443054199f, 0.7559936046600342f, 0.5871638059616089f, 0.8452692627906799f, 0.5770581960678101f, +0.8351085186004639f, 0.12263147532939911f, 0.5362861752510071f, 0.5288577675819397f, 0.7508598566055298f, 0.4141960144042969f, 0.10651607811450958f, 0.7700206637382507f, +0.6190858483314514f, 0.8843879103660583f, 0.15627099573612213f, 0.5687905550003052f, 0.42964932322502136f, 0.5223056674003601f, 0.4285505712032318f, 0.5513617992401123f, +0.3108402192592621f, 0.13838312029838562f, 0.4374365508556366f, 0.09320517629384995f, 0.09654781967401505f, 0.8257817625999451f, 0.8479154109954834f, 0.00490189716219902f, +0.2885276675224304f, 0.7096967697143555f, 0.6865493059158325f, 0.6991437673568726f, 0.770910382270813f, 0.8548567891120911f, 0.22191135585308075f, 0.3945867717266083f, +0.4268186092376709f, 0.41456642746925354f, 0.34117603302001953f, 0.927334725856781f, 0.015652552247047424f, 0.7259398698806763f, 0.8774449825286865f, 0.46291154623031616f, +0.1434122920036316f, 0.3774077296257019f, 0.26173752546310425f, 0.06423286348581314f, 0.10462391376495361f, 0.5822655558586121f, 0.38975948095321655f, 0.8807242512702942f, +0.547555148601532f, 0.8452512621879578f, 0.5432101488113403f, 0.1032896563410759f, 0.8231698274612427f, 0.733584463596344f, 0.6319178342819214f, 0.014470991678535938f, +0.3267536163330078f, 0.043436918407678604f, 0.3540628254413605f, 0.08556396514177322f, 0.31514281034469604f, 0.7188625335693359f, 0.9632051587104797f, 0.7893818020820618f, +0.5365380644798279f, 0.018717994913458824f, 0.715621292591095f, 0.18304915726184845f, 0.6321311593055725f, 0.09123545140028f, 0.846813440322876f, 0.8233123421669006f, +0.7634304761886597f, 0.8813508749008179f, 0.1612899899482727f, 0.2920757532119751f, 0.045564278960227966f, 0.2628573775291443f, 0.7173973321914673f, 0.8847271800041199f, +0.7315539717674255f, 0.11876188963651657f, 0.9772098660469055f, 0.19183145463466644f, 0.13991232216358185f, 0.578342616558075f, 0.435657262802124f, 0.12220537662506104f, +0.043933458626270294f, 0.5325586795806885f, 0.5840291380882263f, 0.09532591700553894f, 0.2719753384590149f, 0.9204474091529846f, 0.1073247492313385f, 0.5297631025314331f, +0.047069430351257324f, 0.4629117250442505f, 0.47489404678344727f, 0.26479455828666687f, 0.7114154696464539f, 0.5710015296936035f, 0.15470540523529053f, 0.2298317700624466f, +0.42230165004730225f, 0.04011409357190132f, 0.40484434366226196f, 0.5477829575538635f, 0.30858689546585083f, 0.8662770986557007f, 0.8929312229156494f, 0.5451228618621826f, +0.9094920754432678f, 0.948164165019989f, 0.5321204662322998f, 0.8017261624336243f, 0.7103633880615234f, 0.8902571797370911f, 0.4420454800128937f, 0.9576451182365417f, +0.5582895278930664f, 0.1631736010313034f, 0.40632665157318115f, 0.7195212244987488f, 0.7160694599151611f, 0.7002248167991638f, 0.6157683730125427f, 0.7006402015686035f, +0.5835666060447693f, 0.23531265556812286f, 0.5794551968574524f, 0.4086441993713379f, 0.36181962490081787f, 0.8451923727989197f, 0.8735992908477783f, 0.9137650728225708f, +0.27716779708862305f, 0.6585193276405334f, 0.15161484479904175f, 0.27622395753860474f, 0.9409904479980469f, 0.9436518549919128f, 0.26120030879974365f, 0.5001165270805359f, +0.3151765465736389f, 0.9116787910461426f, 0.21688634157180786f, 0.948016345500946f, 0.9278697967529297f, 0.6762374639511108f, 0.47957319021224976f, 0.3734024167060852f, +0.4950110614299774f, 0.626015305519104f, 0.5545667409896851f, 0.012324287556111813f, 0.991006076335907f, 0.12710270285606384f, 0.8083977699279785f, 0.35146546363830566f, +0.8916267156600952f, 0.3684707581996918f, 0.37453681230545044f, 0.46643561124801636f, 0.10037451982498169f, 0.8344841599464417f, 0.44493740797042847f, 0.4292536973953247f, +0.31600481271743774f, 0.9380260705947876f, 0.938576340675354f, 0.6674903631210327f, 0.7365953922271729f, 0.6862347722053528f, 0.024678301066160202f, 0.7410590648651123f, +0.8479830026626587f, 0.4551146924495697f, 0.8170590400695801f, 0.44058895111083984f, 0.6670103669166565f, 0.6912598013877869f, 0.8740000128746033f, 0.9049307107925415f, +0.8836899995803833f, 0.877484917640686f, 0.6775099039077759f, 0.18617740273475647f, 0.6357186436653137f, 0.06612001359462738f, 0.6270383596420288f, 0.003503676736727357f, +0.050778839737176895f, 0.19055905938148499f, 0.9526708126068115f, 0.9661926627159119f, 0.6345462799072266f, 0.41222473978996277f, 0.8977262377738953f, 0.00738124456256628f, +0.28774306178092957f, 0.4025898575782776f, 0.967975378036499f, 0.8884767889976501f, 0.49730411171913147f, 0.0975319892168045f, 0.7124921083450317f, 0.15878352522850037f, +0.7805293798446655f, 0.4919525980949402f, 0.4109269380569458f, 0.9502815008163452f, 0.020422453060746193f, 0.11477223038673401f, 0.6465705633163452f, 0.7149842977523804f, +0.28545817732810974f, 0.8850971460342407f, 0.7743722200393677f, 0.9453029036521912f, 0.38827547430992126f, 0.13435052335262299f, 0.44683828949928284f, 0.4469968378543854f, +0.25358471274375916f, 0.9906033277511597f, 0.8304179310798645f, 0.23630738258361816f, 0.19986404478549957f, 0.9812595248222351f, 0.7477895617485046f, 0.09091413021087646f, +0.08187685161828995f, 0.8555930256843567f, 0.5184136033058167f, 0.4567212164402008f, 0.6360307335853577f, 0.4833813011646271f, 0.2568337321281433f, 0.7613586187362671f, +0.026493608951568604f, 0.8119536638259888f, 0.8648841381072998f, 0.5115895867347717f, 0.5535330176353455f, 0.9492219090461731f, 0.05493294447660446f, 0.9338352680206299f, +0.7045207619667053f, 0.3029805123806f, 0.6022197604179382f, 0.9966744780540466f, 0.5826824903488159f, 0.1442698985338211f, 0.44636547565460205f, 0.018761418759822845f, +0.5321681499481201f, 0.5202006101608276f, 0.06184286251664162f, 0.2888616621494293f, 0.03116399236023426f, 0.6035085916519165f, 0.23602363467216492f, 0.8550743460655212f, +0.4351532459259033f, 0.006253192666918039f, 0.25348615646362305f, 0.47568321228027344f, 0.5652946829795837f, 0.7531019449234009f, 0.09485431015491486f, 0.6515979170799255f, +0.28987783193588257f, 0.5103525519371033f, 0.03565671294927597f, 0.01130343321710825f, 0.5105778574943542f, 0.6680818796157837f, 0.630953311920166f, 0.5534535646438599f, +0.6682696342468262f, 0.22774234414100647f, 0.2683418095111847f, 0.37180742621421814f, 0.8527811765670776f, 0.5369990468025208f, 0.1571330428123474f, 0.0019158830400556326f, +0.029322417452931404f, 0.5014950037002563f, 0.7941271662712097f, 0.9488233327865601f, 0.7821636199951172f, 0.6708524823188782f, 0.05319851636886597f, 0.5039704442024231f, +0.08235269784927368f, 0.04976046085357666f, 0.1264512538909912f, 0.9636113047599792f, 0.2761617600917816f, 0.7208712100982666f, 0.5594821572303772f, 0.3213728666305542f, +0.6921039819717407f, 0.516570508480072f, 0.21569089591503143f, 0.8249164819717407f, 0.7465562224388123f, 0.9229778051376343f, 0.40296491980552673f, 0.3689664602279663f, +0.5874041318893433f, 0.20326261222362518f, 0.0772462859749794f, 0.48190248012542725f, 0.8328826427459717f, 0.5593008399009705f, 0.1409703940153122f, 0.06926602870225906f, +0.8958600163459778f, 0.9809143543243408f, 0.4748481810092926f, 0.4521235227584839f, 0.14449800550937653f, 0.619702160358429f, 0.6720080971717834f, 0.4101230204105377f, +0.7544407844543457f, 0.16712990403175354f, 0.6014788150787354f, 0.5152092576026917f, 0.15391811728477478f, 0.4910077154636383f, 0.1818104237318039f, 0.24168282747268677f, +0.28643599152565f, 0.44686049222946167f, 0.9495946764945984f, 0.7257283329963684f, 0.9122672080993652f, 0.35095536708831787f, 0.14831577241420746f, 0.01839405484497547f, +0.04980664327740669f, 0.18324334919452667f, 0.5407652854919434f, 0.9762423038482666f, 0.7761498093605042f, 0.3412543535232544f, 0.6348609924316406f, 0.5604791045188904f, +0.809497058391571f, 0.9939899444580078f, 0.5741689801216125f, 0.374118834733963f, 0.5472496151924133f, 0.7452911734580994f, 0.09726619720458984f, 0.3761107623577118f, +0.9545592665672302f, 0.7457963824272156f, 0.7610496878623962f, 0.8822619915008545f, 0.9737228155136108f, 0.420195072889328f, 0.4439135193824768f, 0.39517274498939514f, +0.30932578444480896f, 0.47848865389823914f, 0.6742391586303711f, 0.07698823511600494f, 0.6628978848457336f, 0.1239200308918953f, 0.2562870681285858f, 0.5439774990081787f, +0.28611406683921814f, 0.8099706172943115f, 0.4452703893184662f, 0.7267224192619324f, 0.5753990411758423f, 0.19635705649852753f, 0.7774075865745544f, 0.6794096827507019f, +0.8917787075042725f, 0.15158601105213165f, 0.4130821228027344f, 0.15956322848796844f, 0.09927081316709518f, 0.3278440237045288f, 0.6808205246925354f, 0.39480096101760864f, +0.964278519153595f, 0.24008604884147644f, 0.3820765018463135f, 0.15333153307437897f, 0.27171969413757324f, 0.3886556327342987f, 0.7298768758773804f, 0.07246241718530655f, +0.031331807374954224f, 0.5530408620834351f, 0.4435316324234009f, 0.4956989586353302f, 0.6949076056480408f, 0.2773210406303406f, 0.2561773657798767f, 0.9350370168685913f, +0.5096345543861389f, 0.07565221190452576f, 0.15654373168945312f, 0.15200938284397125f, 0.5526428818702698f, 0.800188422203064f, 0.6322994828224182f, 0.7955998778343201f, +0.6534045338630676f, 0.37113866209983826f, 0.40484365820884705f, 0.07602337747812271f, 0.5667933821678162f, 0.3238019049167633f, 0.8907788991928101f, 0.33978164196014404f, +0.9758238196372986f, 0.9158121943473816f, 0.8197038769721985f, 0.7485503554344177f, 0.8532792329788208f, 0.7130071520805359f, 0.6186395883560181f, 0.07952355593442917f, +0.25218015909194946f, 0.9576842784881592f, 0.09384707361459732f, 0.42917442321777344f, 0.5171285271644592f, 0.014128897339105606f, 0.7629842162132263f, 0.0035759059246629477f, +0.5378696322441101f, 0.9987467527389526f, 0.4764719605445862f, 0.546616792678833f, 0.24524374306201935f, 0.9421350955963135f, 0.7039852738380432f, 0.3496355414390564f, +0.8597115874290466f, 0.6407512426376343f, 0.7695888876914978f, 0.5671234130859375f, 0.4670965075492859f, 0.1644202470779419f, 0.35594746470451355f, 0.5552588105201721f, +0.105324387550354f, 0.08025511354207993f, 0.438455730676651f, 0.4337659180164337f, 0.26173266768455505f, 0.8374314904212952f, 0.35618749260902405f, 0.5450355410575867f, +0.580467700958252f, 0.662723958492279f, 0.12883086502552032f, 0.6377599835395813f, 0.6368539929389954f, 0.5313829183578491f, 0.720264732837677f, 0.7111619114875793f, +0.9847860932350159f, 0.21528954803943634f, 0.036240749061107635f, 0.24667595326900482f, 0.7373657822608948f, 0.5410345792770386f, 0.08198460191488266f, 0.5730047821998596f, +0.6115132570266724f, 0.2643946707248688f, 0.3590298593044281f, 0.24182794988155365f, 0.011299469508230686f, 0.17367582023143768f, 0.7684285640716553f, 0.31976938247680664f, +0.5675042867660522f, 0.8580012321472168f, 0.6109883189201355f, 0.6209549307823181f, 0.026680978015065193f, 0.3334866762161255f, 0.4968257248401642f, 0.05182169750332832f, +0.5996573567390442f, 0.42737752199172974f, 0.47800394892692566f, 0.5965182185173035f, 0.3820469081401825f, 0.2678464651107788f, 0.35243475437164307f, 0.6530085206031799f, +0.7962362766265869f, 0.3893350660800934f, 0.025177625939249992f, 0.6899973750114441f, 0.6414045095443726f, 0.06671924889087677f, 0.35945892333984375f, 0.09979405254125595f, +0.6367905735969543f, 0.5523229837417603f, 0.38479721546173096f, 0.16074329614639282f, 0.0834784135222435f, 0.01739542931318283f, 0.901389479637146f, 0.5141044855117798f, +0.7290092706680298f, 0.7743654847145081f, 0.6166245937347412f, 0.6044555306434631f, 0.3614664673805237f, 0.0076781585812568665f, 0.8699424266815186f, 0.14259149134159088f, +0.07665770500898361f, 0.09960037469863892f, 0.8299102783203125f, 0.14389432966709137f, 0.4578971862792969f, 0.5535430908203125f, 0.17535409331321716f, 0.14964434504508972f, +0.4156661629676819f, 0.9609540700912476f, 0.8148326873779297f, 0.6643479466438293f, 0.7411706447601318f, 0.5666891932487488f, 0.28832507133483887f, 0.2934342324733734f, +0.8210205435752869f, 0.9328879117965698f, 0.8063549995422363f, 0.9954957365989685f, 0.841283917427063f, 0.2244499921798706f, 0.36307471990585327f, 0.808102011680603f, +0.3570268750190735f, 0.9196459054946899f, 0.01858084462583065f, 0.017121238633990288f, 0.6305601596832275f, 0.12971143424510956f, 0.09312378615140915f, 0.6079051494598389f, +0.37683966755867004f, 0.20241782069206238f, 0.9343684911727905f, 0.6791983842849731f, 0.2296287715435028f, 0.4493822753429413f, 0.26868554949760437f, 0.7867043018341064f, +0.1113341897726059f, 0.6748930811882019f, 0.671174168586731f, 0.6888540387153625f, 0.11246161162853241f, 0.10738656669855118f, 0.7333953380584717f, 0.5840392708778381f, +0.8658372759819031f, 0.8183010220527649f, 0.155425563454628f, 0.5262755751609802f, 0.6260839104652405f, 0.21034236252307892f, 0.7705858945846558f, 0.5815353393554688f, +0.9621298909187317f, 0.9423701763153076f, 0.7131168842315674f, 0.297859787940979f, 0.35391053557395935f, 0.01948024518787861f, 0.48326143622398376f, 0.6987259984016418f, +0.5714876651763916f, 0.09459695219993591f, 0.8403947949409485f, 0.316446989774704f, 0.7494286894798279f, 0.011787032708525658f, 0.13290317356586456f, 0.4367712438106537f, +0.8625248074531555f, 0.09602896869182587f, 0.04923101142048836f, 0.9344050288200378f, 0.1608077436685562f, 0.3316219449043274f, 0.1906425803899765f, 0.2907697856426239f, +0.7823002338409424f, 0.29281777143478394f, 0.6711602210998535f, 0.636533260345459f, 0.4353823959827423f, 0.9233216643333435f, 0.33466699719429016f, 0.35259756445884705f, +0.682536244392395f, 0.7039351463317871f, 0.5148518085479736f, 0.36920392513275146f, 0.34631678462028503f, 0.36925554275512695f, 0.5849317312240601f, 0.8496450185775757f, +0.43873339891433716f, 0.18103066086769104f, 0.8031437993049622f, 0.08140449225902557f, 0.9688681364059448f, 0.6389612555503845f, 0.4710928201675415f, 0.23149818181991577f, +0.5500116348266602f, 0.2702617645263672f, 0.1492726355791092f, 0.5179837942123413f, 0.34280407428741455f, 0.8470449447631836f, 0.7387889623641968f, 0.39893192052841187f, +0.002779717557132244f, 0.16017362475395203f, 0.9071924090385437f, 0.5725783109664917f, 0.15415483713150024f, 0.3480154871940613f, 0.2745051681995392f, 0.02261103130877018f, +0.8473067879676819f, 0.060379378497600555f, 0.12288957089185715f, 0.44874662160873413f, 0.6281374096870422f, 0.9122071862220764f, 0.6729599237442017f, 0.3466395139694214f, +0.9602195024490356f, 0.6263668537139893f, 0.8852882981300354f, 0.509385347366333f, 0.60634845495224f, 0.59552401304245f, 0.902184009552002f, 0.13569316267967224f, +0.06931812316179276f, 0.9790726900100708f, 0.007061601150780916f, 0.8237424492835999f, 0.0521807037293911f, 0.6920077204704285f, 0.705253005027771f, 0.2153245210647583f, +0.751915454864502f, 0.8267547488212585f, 0.8719605207443237f, 0.10577093064785004f, 0.45851394534111023f, 0.967786967754364f, 0.16218611598014832f, 0.2383808046579361f, +0.007864285260438919f, 0.9830762147903442f, 0.9187271595001221f, 0.3527775704860687f, 0.23006342351436615f, 0.5596051216125488f, 0.8146471977233887f, 0.7693493962287903f, +0.05888472869992256f, 0.5843233466148376f, 0.6883410811424255f, 0.3723313808441162f, 0.34357720613479614f, 0.10957058519124985f, 0.26786425709724426f, 0.8392313718795776f, +0.2176419496536255f, 0.2359585016965866f, 0.597195565700531f, 0.5974199175834656f, 0.6381065845489502f, 0.6386678814888f, 0.2258128672838211f, 0.14043232798576355f, +0.9232456088066101f, 0.8138437867164612f, 0.33901941776275635f, 0.40529969334602356f, 0.7383332252502441f, 0.2013617753982544f, 0.818102240562439f, 0.6312968730926514f, +0.3949429988861084f, 0.6485596895217896f, 0.5924468636512756f, 0.2061774581670761f, 0.6992800831794739f, 0.041663505136966705f, 0.6364017128944397f, 0.4209926724433899f, +0.661845862865448f, 0.8126587867736816f, 0.6430431008338928f, 0.8205421566963196f, 0.7626156210899353f, 0.2695026099681854f, 0.3720645606517792f, 0.486362099647522f, +0.3814254403114319f, 0.5035974979400635f, 0.3155551552772522f, 0.8974283933639526f, 0.6485607624053955f, 0.6619378328323364f, 0.3687478005886078f, 0.5327507853507996f, +0.4276840388774872f, 0.2013397514820099f, 0.7042897939682007f, 0.009412629529833794f, 0.149216428399086f, 0.7550733089447021f, 0.8239869475364685f, 0.14862121641635895f, +0.05751650407910347f, 0.8890376091003418f, 0.9750433564186096f, 0.4577800929546356f, 0.380950927734375f, 0.533096194267273f, 0.2726828455924988f, 0.8250836730003357f, +0.0914601981639862f, 0.4466922879219055f, 0.34328946471214294f, 0.2044306844472885f, 0.33630746603012085f, 0.34714627265930176f, 0.0637904703617096f, 0.5830858945846558f, +0.20476260781288147f, 0.4271112382411957f, 0.9691917896270752f, 0.8389036655426025f, 0.6859829425811768f, 0.895499050617218f, 0.1510341614484787f, 0.6366668939590454f, +0.3261301815509796f, 0.655645489692688f, 0.49578240513801575f, 0.9234028458595276f, 0.11998376250267029f, 0.39417678117752075f, 0.5244614481925964f, 0.4122943580150604f, +0.9642163515090942f, 0.6343045234680176f, 0.20526966452598572f, 0.3748992681503296f, 0.05340432748198509f, 0.10288223624229431f, 0.6044825911521912f, 0.5335469245910645f, +0.1320025622844696f, 0.8673973083496094f, 0.48717302083969116f, 0.13496793806552887f, 0.32822370529174805f, 0.8255426287651062f, 0.638382077217102f, 0.08810124546289444f, +0.5583387613296509f, 0.5798894762992859f, 0.28692612051963806f, 0.0843420997262001f, 0.33187368512153625f, 0.8177263140678406f, 0.9160926342010498f, 0.8770046234130859f, +0.06778184324502945f, 0.8839209675788879f, 0.5480854511260986f, 0.15172085165977478f, 0.9532967805862427f, 0.5834746360778809f, 0.9610961675643921f, 0.9579805135726929f, +0.08111528307199478f, 0.6260355710983276f, 0.968401312828064f, 0.21720784902572632f, 0.5198561549186707f, 0.48740968108177185f, 0.9544018507003784f, 0.7644021511077881f, +0.383084774017334f, 0.17238934338092804f, 0.31698843836784363f, 0.7075640559196472f, 0.770587682723999f, 0.30332982540130615f, 0.08803129196166992f, 0.511660099029541f, +0.5901322364807129f, 0.7940177917480469f, 0.6150833964347839f, 0.7969182133674622f, 0.7496682405471802f, 0.5437915325164795f, 0.8219250440597534f, 0.4767911434173584f, +0.9037120342254639f, 0.6268083453178406f, 0.9781647324562073f, 0.27230891585350037f, 0.6462268829345703f, 0.49929383397102356f, 0.20477737486362457f, 0.2653915584087372f, +0.7118844389915466f, 0.7556133270263672f, 0.8200377225875854f, 0.4546448588371277f, 0.9828261733055115f, 0.3453402519226074f, 0.4229184687137604f, 0.8139545917510986f, +0.8080664873123169f, 0.41187167167663574f, 0.6032685041427612f, 0.7444430589675903f, 0.958600640296936f, 0.9022495150566101f, 0.4042062759399414f, 0.5882136821746826f, +0.4816519618034363f, 0.856050431728363f, 0.4670434594154358f, 0.29907310009002686f, 0.6343153715133667f, 0.17377540469169617f, 0.11094584316015244f, 0.4460197687149048f, +0.46665552258491516f, 0.9923445582389832f, 0.08139059692621231f, 0.8852967023849487f, 0.06399451196193695f, 0.13824081420898438f, 0.18892605602741241f, 0.3750572204589844f, +0.39751362800598145f, 0.3687613904476166f, 0.6733573079109192f, 0.5585817694664001f, 0.17044545710086823f, 0.40130841732025146f, 0.6051463484764099f, 0.46201637387275696f, +0.45462146401405334f, 0.5265573859214783f, 0.4984643757343292f, 0.726812481880188f, 0.2744959890842438f, 0.37746262550354004f, 0.07747875154018402f, 0.34362104535102844f, +0.28261032700538635f, 0.5654228329658508f, 0.9506545066833496f, 0.43829646706581116f, 0.14666038751602173f, 0.4226081073284149f, 0.4748925566673279f, 0.5896501541137695f, +0.9862123131752014f, 0.8940030336380005f, 0.571513295173645f, 0.998132050037384f, 0.7016131281852722f, 0.8895058631896973f, 0.9094440340995789f, 0.27023836970329285f, +0.1296587735414505f, 0.6494210362434387f, 0.17609871923923492f, 0.25490912795066833f, 0.21698591113090515f, 0.1297668069601059f, 0.6650547385215759f, 0.22796356678009033f, +0.7849319577217102f, 0.8141461610794067f, 0.1214018166065216f, 0.847657322883606f, 0.7586032748222351f, 0.43445470929145813f, 0.9545917510986328f, 0.5879725217819214f, +0.1537739783525467f, 0.1322191059589386f, 0.2500702142715454f, 0.4123430550098419f, 0.4224681258201599f, 0.333119660615921f, 0.3939811587333679f, 0.4917779564857483f, +0.5068672299385071f, 0.890195906162262f, 0.3514207899570465f, 0.05902761220932007f, 0.13515466451644897f, 0.6156087517738342f, 0.3699208199977875f, 0.3666253387928009f, +0.6341322660446167f, 0.42557528614997864f, 0.10828785598278046f, 0.6048518419265747f, 0.8282368779182434f, 0.10212785005569458f, 0.4099222719669342f, 0.47729653120040894f, +0.8452025651931763f, 0.49564066529273987f, 0.4640980064868927f, 0.8817708492279053f, 0.9543477892875671f, 0.7668248414993286f, 0.30859285593032837f, 0.8892363905906677f, +0.3156445622444153f, 0.9945090413093567f, 0.5353585481643677f, 0.730088472366333f, 0.4845148026943207f, 0.8003159761428833f, 0.714784562587738f, 0.7273889183998108f, +0.4276716411113739f, 0.8761031627655029f, 0.6829586029052734f, 0.7444157004356384f, 0.23167818784713745f, 0.9993070960044861f, 0.5698577761650085f, 0.30273377895355225f, +0.47334691882133484f, 0.507408082485199f, 0.2935612201690674f, 0.36008957028388977f, 0.5592572689056396f, 0.07227665930986404f, 0.1611347496509552f, 0.5841059684753418f, +0.9632559418678284f, 0.6548427939414978f, 0.6679164171218872f, 0.9167056679725647f, 0.19040794670581818f, 0.9123945832252502f, 0.9983173608779907f, 0.10693993419408798f, +0.5707406997680664f, 0.6685577034950256f, 0.0867931917309761f, 0.7795290946960449f, 0.3329108953475952f, 0.4095555543899536f, 0.8179701566696167f, 0.14533255994319916f, +0.2580831050872803f, 0.886232852935791f, 0.07018902897834778f, 0.36586490273475647f, 0.24293380975723267f, 0.7273983359336853f, 0.9424827694892883f, 0.6886844635009766f, +0.8021658658981323f, 0.2976624667644501f, 0.5387685894966125f, 0.287534236907959f, 0.01568826474249363f, 0.11778281629085541f, 0.7832725048065186f, 0.503211259841919f, +0.705836832523346f, 0.4212161600589752f, 0.0036761534865945578f, 0.3181385099887848f, 0.9041118025779724f, 0.8349703550338745f, 0.040585245937108994f, 0.5184176564216614f, +0.6921501755714417f, 0.7020537853240967f, 0.9844626784324646f, 0.5115795731544495f, 0.5391727089881897f, 0.22503948211669922f, 0.5912030935287476f, 0.22295016050338745f, +0.506649374961853f, 0.4014226496219635f, 0.7016190886497498f, 0.22210846841335297f, 0.595496416091919f, 0.4829986095428467f, 0.5101401209831238f, 0.9577595591545105f, +0.5415515899658203f, 0.015462862327694893f, 0.15628650784492493f, 0.151792511343956f, 0.7945588827133179f, 0.007474078331142664f, 0.3123372197151184f, 0.74155592918396f, +0.8677003383636475f, 0.8391539454460144f, 0.06237458065152168f, 0.6866521835327148f, 0.8320257067680359f, 0.34861335158348083f, 0.0861843153834343f, 0.9571388959884644f, +0.35239076614379883f, 0.5454277396202087f, 0.9848974347114563f, 0.3243872821331024f, 0.1769770383834839f, 0.7248867154121399f, 0.5842835307121277f, 0.10608285665512085f, +0.3284318149089813f, 0.42880845069885254f, 0.44073787331581116f, 0.2671685814857483f, 0.8046640753746033f, 0.4307803809642792f, 0.9590597748756409f, 0.5423290133476257f, +0.5013844966888428f, 0.02320963330566883f, 0.5559019446372986f, 0.7498511075973511f, 0.2038412243127823f, 0.047756925225257874f, 0.5600276589393616f, 0.4616009593009949f, +0.11568006873130798f, 0.46897178888320923f, 0.4869793951511383f, 0.251956969499588f, 0.34492728114128113f, 0.7209280729293823f, 0.6956287026405334f, 0.49012497067451477f, +0.6359422206878662f, 0.2994442582130432f, 0.16905196011066437f, 0.6030740141868591f, 0.6416793465614319f, 0.5878323316574097f, 0.5415006279945374f, 0.4554300308227539f, +0.6406173706054688f, 0.28605958819389343f, 0.014756591990590096f, 0.5997401475906372f, 0.15705682337284088f, 0.6814115047454834f, 0.3314912021160126f, 0.24448174238204956f, +0.8126736283302307f, 0.6260672211647034f, 0.5465455055236816f, 0.9707791805267334f, 0.37754756212234497f, 0.6393641233444214f, 0.2548862397670746f, 0.993375837802887f, +0.5840427279472351f, 0.6510504484176636f, 0.4238450825214386f, 0.08359501510858536f, 0.37767794728279114f, 0.8867003917694092f, 0.8366444110870361f, 0.6098986268043518f, +0.5718590617179871f, 0.4418538212776184f, 0.18636628985404968f, 0.47919338941574097f, 0.18582099676132202f, 0.1129230335354805f, 0.46784839034080505f, 0.6685891151428223f, +0.09365545958280563f, 0.3738393187522888f, 0.050407443195581436f, 0.8616721034049988f, 0.14925242960453033f, 0.9748215675354004f, 0.5183027982711792f, 0.3843386769294739f, +0.08868778496980667f, 0.6081211566925049f, 0.29759514331817627f, 0.703894853591919f, 0.32345449924468994f, 0.9904527068138123f, 0.35206034779548645f, 0.1872926503419876f, +0.5494979619979858f, 0.8516981601715088f, 0.8672712445259094f, 0.8936721682548523f, 0.7610967755317688f, 0.8303029537200928f, 0.07791374623775482f, 0.2612118422985077f, +0.6009334921836853f, 0.9657078385353088f, 0.9538354277610779f, 0.02860383689403534f, 0.5353430509567261f, 0.33676302433013916f, 0.6411170363426208f, 0.22935274243354797f, +0.2683454751968384f, 0.9496244192123413f, 0.60225510597229f, 0.46493566036224365f, 0.9251976609230042f, 0.2738075852394104f, 0.8958336114883423f, 0.5489280819892883f, +0.36297985911369324f, 0.27773329615592957f, 0.18788652122020721f, 0.37325817346572876f, 0.4906688332557678f, 0.7391814589500427f, 0.10031910985708237f, 0.7546796202659607f, +0.09148599952459335f, 0.9814554452896118f, 0.7355309724807739f, 0.7909482717514038f, 0.5521534085273743f, 0.16482524573802948f, 0.4953477680683136f, 0.5946672558784485f, +0.7832619547843933f, 0.5720628499984741f, 0.3134728670120239f, 0.5906482934951782f, 0.12292224913835526f, 0.5789121985435486f, 0.6897242069244385f, 0.7211540937423706f, +0.9674708247184753f, 0.0097660468891263f, 0.18251971900463104f, 0.24797788262367249f, 0.43796399235725403f, 0.166632279753685f, 0.8423896431922913f, 0.07804763317108154f, +0.21747618913650513f, 0.8714485764503479f, 0.5887236595153809f, 0.9651796221733093f, 0.30517226457595825f, 0.20741423964500427f, 0.21238194406032562f, 0.7252448797225952f, +0.8057255148887634f, 0.1948353350162506f, 0.8967750668525696f, 0.4888342618942261f, 0.4289169907569885f, 0.4007517695426941f, 0.051160480827093124f, 0.07894020527601242f, +0.572173535823822f, 0.5128955245018005f, 0.03555450960993767f, 0.9188249111175537f, 0.46709662675857544f, 0.7899346351623535f, 0.4031122624874115f, 0.35450479388237f, +0.5430477857589722f, 0.23456458747386932f, 0.7320350408554077f, 0.8018631339073181f, 0.9739702343940735f, 0.4660198986530304f, 0.1715080291032791f, 0.35035446286201477f, +0.6471338868141174f, 0.7628153562545776f, 0.05814775824546814f, 0.23114070296287537f, 0.2957269549369812f, 0.3897912800312042f, 0.49808773398399353f, 0.6402567028999329f, +0.573085606098175f, 0.9148749709129333f, 0.7056313753128052f, 0.9419196844100952f, 0.2676509618759155f, 0.47055837512016296f, 0.1476306915283203f, 0.49470338225364685f, +0.8596229553222656f, 0.5094148516654968f, 0.1629740595817566f, 0.9042540192604065f, 0.6111771464347839f, 0.11587060987949371f, 0.9424970149993896f, 0.13548140227794647f, +0.1695072501897812f, 0.4498971104621887f, 0.5683783292770386f, 0.48175564408302307f, 0.05308596417307854f, 0.9767572283744812f, 0.3969559371471405f, 0.09570572525262833f, +0.6491532921791077f, 0.9228039383888245f, 0.896552562713623f, 0.5683242082595825f, 0.2881931662559509f, 0.072280153632164f, 0.4133375585079193f, 0.2692722976207733f, +0.2542303800582886f, 0.9878479838371277f, 0.22349141538143158f, 0.15495631098747253f, 0.013599532656371593f, 0.033821605145931244f, 0.1185629814863205f, 0.4771253764629364f, +0.35478708148002625f, 0.4189060926437378f, 0.40158945322036743f, 0.292647123336792f, 0.8381525874137878f, 0.7537775039672852f, 0.6541634202003479f, 0.36304473876953125f, +0.310156911611557f, 0.48945051431655884f, 0.09216050058603287f, 0.02920081838965416f, 0.03142493590712547f, 0.9439442157745361f, 0.1523369550704956f, 0.007001382764428854f, +0.8860765099525452f, 0.08206278085708618f, 0.31045255064964294f, 0.4112643599510193f, 0.3154691457748413f, 0.5144814252853394f, 0.18844397366046906f, 0.8056083917617798f, +0.2692554295063019f, 0.125447615981102f, 0.16872356832027435f, 0.3502079248428345f, 0.6043121814727783f, 0.9920836687088013f, 0.260447233915329f, 0.7616464495658875f, +0.14495664834976196f, 0.08152640610933304f, 0.32832440733909607f, 0.41875195503234863f, 0.4260617196559906f, 0.6155707240104675f, 0.8219495415687561f, 0.11092996597290039f, +0.7458065152168274f, 0.7309009432792664f, 0.3214394450187683f, 0.33174505829811096f, 0.147166445851326f, 0.6699274182319641f, 0.43006861209869385f, 0.18399345874786377f, +0.39474058151245117f, 0.24513688683509827f, 0.31246811151504517f, 0.8850945234298706f, 0.7686156630516052f, 0.2680426836013794f, 0.1341213881969452f, 0.13873133063316345f, +0.6606055498123169f, 0.6546286344528198f, 0.8330703973770142f, 0.6367431879043579f, 0.44205594062805176f, 0.012225119397044182f, 0.7336005568504333f, 0.8224018216133118f, +0.7179977893829346f, 0.07674752920866013f, 0.8032384514808655f, 0.3669555187225342f, 0.9225559830665588f, 0.7808228731155396f, 0.9437717199325562f, 0.6235071420669556f, +0.2671278417110443f, 0.25645527243614197f, 0.3168334364891052f, 0.27602019906044006f, 0.5316522717475891f, 0.050821516662836075f, 0.7997130155563354f, 0.7867912650108337f, +0.8404317498207092f, 0.44396746158599854f, 0.4109608829021454f, 0.20401206612586975f, 0.174332857131958f, 0.5319149494171143f, 0.5967133641242981f, 0.4629541337490082f, +0.973738968372345f, 0.6170344352722168f, 0.645918607711792f, 0.8053847551345825f, 0.7602871060371399f, 0.8205150961875916f, 0.616430938243866f, 0.6730228662490845f, +0.009399962611496449f, 0.05235667899250984f, 0.8616966605186462f, 0.11722099781036377f, 0.5224562287330627f, 0.6901691555976868f, 0.2548883259296417f, 0.8167197704315186f, +0.6761224865913391f, 0.8293777704238892f, 0.6916384696960449f, 0.3159938454627991f, 0.017396416515111923f, 0.717520534992218f, 0.9609164595603943f, 0.49428462982177734f, +0.28911295533180237f, 0.3921397924423218f, 0.8356850743293762f, 0.29283785820007324f, 0.9707318544387817f, 0.9366278648376465f, 0.54173344373703f, 0.6082454323768616f, +0.5812581777572632f, 0.9722946286201477f, 0.7368392944335938f, 0.11720536649227142f, 0.7352351546287537f, 0.6981863379478455f, 0.5698988437652588f, 0.6579632759094238f, +0.1660027951002121f, 0.22588211297988892f, 0.21519896388053894f, 0.1336396038532257f, 0.36481335759162903f, 0.2683623135089874f, 0.37132909893989563f, 0.5887144804000854f, +0.26166602969169617f, 0.41020891070365906f, 0.2889697551727295f, 0.699037492275238f, 0.6451650857925415f, 0.1378268301486969f, 0.8484174609184265f, 0.1359134167432785f, +0.5201404094696045f, 0.4611566662788391f, 0.5942937135696411f, 0.7779800891876221f, 0.4315931797027588f, 0.36226534843444824f, 0.5738216042518616f, 0.500691294670105f, +0.48510605096817017f, 0.4402931034564972f, 0.04816480726003647f, 0.4559806287288666f, 0.5359756350517273f, 0.5173609852790833f, 0.17918244004249573f, 0.057099349796772f, +0.1733921766281128f, 0.5845046639442444f, 0.206597238779068f, 0.7691154479980469f, 0.671889066696167f, 0.3461243212223053f, 0.6897175312042236f, 0.6251626014709473f, +0.4020669162273407f, 0.44424569606781006f, 0.9688522219657898f, 0.15178687870502472f, 0.2465701401233673f, 0.5105077028274536f, 0.06219020485877991f, 0.5474531054496765f, +0.8871448636054993f, 0.7188752293586731f, 0.408825546503067f, 0.8946083784103394f, 0.8052918910980225f, 0.3603895306587219f, 0.48153191804885864f, 0.3376544117927551f, +0.20302820205688477f, 0.34647366404533386f, 0.09656374156475067f, 0.04241200536489487f, 0.3264390230178833f, 0.6061529517173767f, 0.5052862167358398f, 0.034281887114048004f, +0.2934820055961609f, 0.45588919520378113f, 0.2587430775165558f, 0.8555045127868652f, 0.5217013955116272f, 0.4187152087688446f, 0.0478903166949749f, 0.8972070217132568f, +0.9716139435768127f, 0.1991509050130844f, 0.2680269181728363f, 0.8972600102424622f, 0.12410131096839905f, 0.3329821825027466f, 0.7917224168777466f, 0.21445566415786743f, +0.8959187269210815f, 0.2808155119419098f, 0.3326273560523987f, 0.8787420988082886f, 0.5446502566337585f, 0.8888002038002014f, 0.6472389101982117f, 0.6733896136283875f, +0.6751962304115295f, 0.12396614253520966f, 0.6252506375312805f, 0.07419932633638382f, 0.9223961234092712f, 0.9351361393928528f, 0.2046942561864853f, 0.890041172504425f, +0.015012466348707676f, 0.5764695405960083f, 0.3663025498390198f, 0.6778659224510193f, 0.5654621720314026f, 0.8141050338745117f, 0.017442109063267708f, 0.693564236164093f, +0.1629023402929306f, 0.6050973534584045f, 0.05821866914629936f, 0.4334779679775238f, 0.8506979942321777f, 0.6451903581619263f, 0.8163205981254578f, 0.15912580490112305f, +0.9285476207733154f, 0.8308848142623901f, 0.4458628296852112f, 0.7483882308006287f, 0.2385559231042862f, 0.6217160820960999f, 0.7127841114997864f, 0.569770872592926f, +0.7943235635757446f, 0.4350520074367523f, 0.25241032242774963f, 0.885701060295105f, 0.5380563139915466f, 0.5586575865745544f, 0.8553155064582825f, 0.863579511642456f, +0.8723586201667786f, 0.7762735486030579f, 0.731010913848877f, 0.6321383714675903f, 0.5325256586074829f, 0.6161860823631287f, 0.3022797703742981f, 0.9979968667030334f, +0.591035008430481f, 0.9891685843467712f, 0.7332747578620911f, 0.840653121471405f, 0.5799674987792969f, 0.7698490023612976f, 0.3041985034942627f, 0.6014705300331116f, +0.5458062291145325f, 0.8415687084197998f, 0.46507999300956726f, 0.6275382041931152f, 0.017250346019864082f, 0.5793502926826477f, 0.09597083926200867f, 0.22699794173240662f, +0.5913304686546326f, 0.8433831930160522f, 0.34442391991615295f, 0.13631941378116608f, 0.22401678562164307f, 0.7559524178504944f, 0.6893948912620544f, 0.23412130773067474f, +0.33571818470954895f, 0.79590904712677f, 0.5959923267364502f, 0.12315060198307037f, 0.7344634532928467f, 0.49171024560928345f, 0.2218426913022995f, 0.47437119483947754f, +0.6324979662895203f, 0.603969156742096f, 0.41687798500061035f, 0.07871836423873901f, 0.28502407670021057f, 0.9059790372848511f, 0.3331717848777771f, 0.9068330526351929f, +0.8870763778686523f, 0.5391880869865417f, 0.523947536945343f, 0.6373129487037659f, 0.8542620539665222f, 0.7183850407600403f, 0.6930392384529114f, 0.6088777184486389f, +0.45262619853019714f, 0.9774307012557983f, 0.3854694664478302f, 0.6639783382415771f, 0.41477715969085693f, 0.4502577483654022f, 0.6761590242385864f, 0.47070133686065674f, +0.38072389364242554f, 0.4272060692310333f, 0.32285404205322266f, 0.316984087228775f, 0.5197309255599976f, 0.6693316698074341f, 0.5614221692085266f, 0.38798293471336365f, +0.8914610743522644f, 0.18691815435886383f, 0.5807967185974121f, 0.7972794771194458f, 0.3866814076900482f, 0.6304647922515869f, 0.8497623205184937f, 0.8956632018089294f, +0.9104547500610352f, 0.14395466446876526f, 0.35301125049591064f, 0.12888818979263306f, 0.3869949281215668f, 0.12621991336345673f, 0.8391367793083191f, 0.6285653710365295f, +0.5806482434272766f, 0.13574166595935822f, 0.6639844179153442f, 0.10114898532629013f, 0.09756526350975037f, 0.5372257828712463f, 0.4800558388233185f, 0.7710247039794922f, +0.7725378274917603f, 0.6008206605911255f, 0.2813388705253601f, 0.6261834502220154f, 0.9264856576919556f, 0.4543781280517578f, 0.13838931918144226f, 0.3589033782482147f, +0.7786268591880798f, 0.9081957340240479f, 0.8886200785636902f, 0.13611827790737152f, 0.38119032979011536f, 0.9519096612930298f, 0.06616923213005066f, 0.945400595664978f, +0.7474876642227173f, 0.1491021364927292f, 0.24961990118026733f, 0.011086855083703995f, 0.3409261107444763f, 0.46861591935157776f, 0.29624080657958984f, 0.948784589767456f, +0.8523033261299133f, 0.4782157242298126f, 0.30735960602760315f, 0.9423933029174805f, 0.8421871066093445f, 0.06978951394557953f, 0.5941833257675171f, 0.3697092533111572f, +0.42460107803344727f, 0.83275306224823f, 0.015151807107031345f, 0.38563546538352966f, 0.7307240962982178f, 0.7264812588691711f, 0.16923150420188904f, 0.3054932653903961f, +0.7005466818809509f, 0.8055554628372192f, 0.15297745168209076f, 0.4378177225589752f, 0.6008782982826233f, 0.008582212962210178f, 0.6402838230133057f, 0.44388943910598755f, +0.4622602164745331f, 0.6974669098854065f, 0.6669383645057678f, 0.13230887055397034f, 0.9339419007301331f, 0.1726103276014328f, 0.44784659147262573f, 0.496827632188797f, +0.6841338276863098f, 0.5787538290023804f, 0.411135733127594f, 0.1030377745628357f, 0.14955325424671173f, 0.5908706784248352f, 0.875744104385376f, 0.5842710137367249f, +0.8465527296066284f, 0.2897420823574066f, 0.5204318165779114f, 0.3912915587425232f, 0.15279299020767212f, 0.15062125027179718f, 0.9895071387290955f, 0.9624801278114319f, +0.8138465285301208f, 0.6900840401649475f, 0.8193027377128601f, 0.8065388202667236f, 0.5608724355697632f, 0.9449055194854736f, 0.11213374882936478f, 0.7577176094055176f, +0.3367660641670227f, 0.44397416710853577f, 0.028941085562109947f, 0.6836451888084412f, 0.9465893507003784f, 0.343330442905426f, 0.07185324281454086f, 0.491552472114563f, +0.022771267220377922f, 0.6751955151557922f, 0.37090131640434265f, 0.02409658022224903f, 0.05351271852850914f, 0.8416901230812073f, 0.8268870711326599f, 0.11680042743682861f, +0.394363135099411f, 0.575164794921875f, 0.7362685203552246f, 0.9840351939201355f, 0.3169493079185486f, 0.5360380411148071f, 0.6774803400039673f, 0.20601239800453186f, +0.07052341103553772f, 0.7381152510643005f, 0.8298466205596924f, 0.9769152998924255f, 0.33536121249198914f, 0.4856358766555786f, 0.8308171629905701f, 0.1657489687204361f, +0.5910062789916992f, 0.3861970603466034f, 0.9756128191947937f, 0.12927113473415375f, 0.6141495704650879f, 0.5885608792304993f, 0.015684738755226135f, 0.36380526423454285f, +0.5915386080741882f, 0.992830753326416f, 0.1707286238670349f, 0.7545862793922424f, 0.9754076600074768f, 0.2088521271944046f, 0.24000832438468933f, 0.007356021087616682f, +0.02020697295665741f, 0.12563112378120422f, 0.7877632975578308f, 0.07974306493997574f, 0.31354090571403503f, 0.734086275100708f, 0.2213437706232071f, 0.4983319938182831f, +0.10562313348054886f, 0.8608531355857849f, 0.26023226976394653f, 0.5099274516105652f, 0.33731698989868164f, 0.06122317537665367f, 0.5739719867706299f, 0.01445327140390873f, +0.280446320772171f, 0.6938439011573792f, 0.026940586045384407f, 0.613168478012085f, 0.8581166863441467f, 0.6451530456542969f, 0.7807445526123047f, 0.9842509627342224f, +0.5019070506095886f, 0.27613016963005066f, 0.2703421115875244f, 0.7366480827331543f, 0.5582936406135559f, 0.2539546489715576f, 0.8436710238456726f, 0.6260722279548645f, +0.13986945152282715f, 0.692211389541626f, 0.9303761124610901f, 0.7866083979606628f, 0.43735814094543457f, 0.029254548251628876f, 0.833381175994873f, 0.1800367385149002f, +0.14686298370361328f, 0.787718653678894f, 0.08580375462770462f, 0.5750778913497925f, 0.13911069929599762f, 0.801397979259491f, 0.28675052523612976f, 0.887645423412323f, +0.8090874552726746f, 0.08667637407779694f, 0.6846989989280701f, 0.3782983720302582f, 0.559731662273407f, 0.04204150289297104f, 0.9912713766098022f, 0.5557731986045837f, +0.9642137289047241f, 0.20763429999351501f, 0.38259145617485046f, 0.22463087737560272f, 0.879237949848175f, 0.6079792976379395f, 0.281858891248703f, 0.5018784999847412f, +0.7863637208938599f, 0.3119705319404602f, 0.13311123847961426f, 0.7430872917175293f, 0.9423171877861023f, 0.3245771527290344f, 0.8750672340393066f, 0.8934561014175415f, +0.6465232968330383f, 0.7536333799362183f, 0.1028238981962204f, 0.1360965073108673f, 0.018645569682121277f, 0.21559616923332214f, 0.9960381984710693f, 0.1538868546485901f, +0.10706135630607605f, 0.440338134765625f, 0.35787925124168396f, 0.24771304428577423f, 0.7348887920379639f, 0.017529474571347237f, 0.7778617739677429f, 0.11065597087144852f, +0.035391826182603836f, 0.16828849911689758f, 0.45154672861099243f, 0.9559593200683594f, 0.840890109539032f, 0.00875248946249485f, 0.8766775131225586f, 0.8844020366668701f, +0.6820033192634583f, 0.17108571529388428f, 0.6784678101539612f, 0.9692748188972473f, 0.8126532435417175f, 0.016120953485369682f, 0.09650783985853195f, 0.6469448208808899f, +0.6160104274749756f, 0.9147658348083496f, 0.8425121903419495f, 0.48545148968696594f, 0.3434509336948395f, 0.8047739267349243f, 0.2084665298461914f, 0.4056878983974457f, +0.7157080173492432f, 0.06983114033937454f, 0.8613166213035583f, 0.7113490700721741f, 0.5046603083610535f, 0.23369678854942322f, 0.7563912272453308f, 0.6570121645927429f, +0.14573462307453156f, 0.6065647602081299f, 0.46497422456741333f, 0.32030078768730164f, 0.9135589599609375f, 0.6434326767921448f, 0.4896189570426941f, 0.4698728024959564f, +0.014368807896971703f, 0.05617395415902138f, 0.47681161761283875f, 0.13583233952522278f, 0.42280250787734985f, 0.4001280963420868f, 0.8472206592559814f, 0.5113768577575684f, +0.05066696181893349f, 0.4029232859611511f, 0.49732106924057007f, 0.731098473072052f, 0.16768434643745422f, 0.061244282871484756f, 0.38321614265441895f, 0.6886568069458008f, +0.7589578032493591f, 0.960818886756897f, 0.07640533149242401f, 0.9302157163619995f, 0.7741881012916565f, 0.2334143966436386f, 0.3765467405319214f, 0.9705699682235718f, +0.25245022773742676f, 0.6382057070732117f, 0.6065461039543152f, 0.7321680188179016f, 0.6498728394508362f, 0.2706824243068695f, 0.6818041801452637f, 0.684881865978241f, +0.20792005956172943f, 0.2518446445465088f, 0.5115960240364075f, 0.5875706672668457f, 0.0015945136547088623f, 0.9678141474723816f, 0.8204004168510437f, 0.12846191227436066f, +0.3398500680923462f, 0.08814361691474915f, 0.5228490233421326f, 0.38693296909332275f, 0.7384182214736938f, 0.8532713055610657f, 0.684701681137085f, 0.5623427033424377f, +0.8469403386116028f, 0.15881173312664032f, 0.9434098601341248f, 0.2861170172691345f, 0.02625126577913761f, 0.8123814463615417f, 0.4939841628074646f, 0.039801523089408875f, +0.681305468082428f, 0.9578779339790344f, 0.07215353846549988f, 0.8382697105407715f, 0.8291354775428772f, 0.5453226566314697f, 0.24925069510936737f, 0.6868228912353516f, +0.9772471189498901f, 0.7595397233963013f, 0.30916666984558105f, 0.19020749628543854f, 0.12084270268678665f, 0.05246087536215782f, 0.2352902591228485f, 0.14481639862060547f, +0.698460042476654f, 0.23543387651443481f, 0.20480705797672272f, 0.7743790745735168f, 0.5246204733848572f, 0.5268077850341797f, 0.9543050527572632f, 0.18108469247817993f, +0.3819250166416168f, 0.11383844912052155f, 0.09382248669862747f, 0.4697505831718445f, 0.5540333390235901f, 0.9117158651351929f, 0.5334683656692505f, 0.41485103964805603f, +0.7508777976036072f, 0.9180283546447754f, 0.16280950605869293f, 0.6631913781166077f, 0.05725979432463646f, 0.11327716708183289f, 0.6993952393531799f, 0.5501794815063477f, +0.2399294525384903f, 0.35053905844688416f, 0.8637846112251282f, 0.035397641360759735f, 0.7525389194488525f, 0.32698291540145874f, 0.08548368513584137f, 0.5894939303398132f, +0.07644812762737274f, 0.1755823940038681f, 0.7200202345848083f, 0.5896889567375183f, 0.7233990430831909f, 0.4660235345363617f, 0.8210646510124207f, 0.09686808288097382f, +0.09447543323040009f, 0.08908680826425552f, 0.3854169547557831f, 0.9278231859207153f, 0.7249743938446045f, 0.7978757619857788f, 0.8586177229881287f, 0.1865389049053192f, +0.1215633749961853f, 0.06601734459400177f, 0.18589472770690918f, 0.04467252641916275f, 0.29052066802978516f, 0.3112856447696686f, 0.3665211796760559f, 0.8675499558448792f, +0.16348029673099518f, 0.33324024081230164f, 0.7348864078521729f, 0.05441461130976677f, 0.3401245176792145f, 0.6124370098114014f, 0.9422961473464966f, 0.751793622970581f, +0.4718681871891022f, 0.5842434167861938f, 0.29723912477493286f, 0.03179366886615753f, 0.026690708473324776f, 0.22341598570346832f, 0.11095612496137619f, 0.7888443470001221f, +0.7443777918815613f, 0.37115123867988586f, 0.2909356355667114f, 0.3299248218536377f, 0.8123462200164795f, 0.10965783894062042f, 0.8762907385826111f, 0.6034754514694214f, +0.12402749806642532f, 0.6499686241149902f, 0.016113344579935074f, 0.8039372563362122f, 0.803676187992096f, 0.3691469132900238f, 0.30518025159835815f, 0.681918740272522f, +0.8646519780158997f, 0.6952401399612427f, 0.9330714344978333f, 0.9500056505203247f, 0.01719984970986843f, 0.2460976094007492f, 0.4557158946990967f, 0.053307533264160156f, +0.7680910229682922f, 0.4012519419193268f, 0.41044431924819946f, 0.4040667414665222f, 0.0430331714451313f, 0.8362687826156616f, 0.7692044377326965f, 0.03760282322764397f, +0.6265044212341309f, 0.2915477454662323f, 0.6195985078811646f, 0.9546384215354919f, 0.28019440174102783f, 0.1204022467136383f, 0.7250564098358154f, 0.29389843344688416f, +0.357265442609787f, 0.8678358793258667f, 0.7714189291000366f, 0.8294873237609863f, 0.5163659453392029f, 0.2653334438800812f, 0.9013981223106384f, 0.8993914723396301f, +0.2882014811038971f, 0.888900876045227f, 0.9817736148834229f, 0.08715841174125671f, 0.24204407632350922f, 0.6798022985458374f, 0.1256091445684433f, 0.487040638923645f, +0.2797626256942749f, 0.3665769398212433f, 0.25458672642707825f, 0.45118576288223267f, 0.7538848519325256f, 0.39821338653564453f, 0.38776928186416626f, 0.10272405296564102f, +0.6928116679191589f, 0.44941747188568115f, 0.16693995893001556f, 0.9882492423057556f, 0.8157927393913269f, 0.44642436504364014f, 0.6371885538101196f, 0.36384695768356323f, +0.9938790798187256f, 0.06565391272306442f, 0.9576180577278137f, 0.599393367767334f, 0.05909882113337517f, 0.16827020049095154f, 0.19258202612400055f, 0.5319112539291382f, +0.9753149151802063f, 0.8932906985282898f, 0.3975279927253723f, 0.3387168049812317f, 0.6846097707748413f, 0.726972222328186f, 0.028152629733085632f, 0.4064737856388092f, +0.9054557085037231f, 0.333917498588562f, 0.29049381613731384f, 0.32576945424079895f, 0.29341208934783936f, 0.2743530571460724f, 0.030110204592347145f, 0.33574557304382324f, +0.8410340547561646f, 0.07846761494874954f, 0.5757548809051514f, 0.2949777841567993f, 0.2653646171092987f, 0.31741753220558167f, 0.8736227750778198f, 0.764233410358429f, +0.004261202644556761f, 0.48483023047447205f, 0.6064908504486084f, 0.03178536146879196f, 0.0904252678155899f, 0.661498486995697f, 0.0547337606549263f, 0.5962700247764587f, +0.09664206951856613f, 0.7878332734107971f, 0.21612049639225006f, 0.46878963708877563f, 0.2019471973180771f, 0.584169328212738f, 0.07506929337978363f, 0.05691147223114967f, +0.011718325316905975f, 0.022990942001342773f, 0.3326694369316101f, 0.17307166755199432f, 0.6143528819084167f, 0.5843643546104431f, 0.8574801087379456f, 0.18452395498752594f, +0.9886630773544312f, 0.4951699376106262f, 0.7847302556037903f, 0.15955902636051178f, 0.3901109993457794f, 0.5239661335945129f, 0.45267045497894287f, 0.7645560503005981f, +0.7293862700462341f, 0.34460484981536865f, 0.7286633253097534f, 0.6333282589912415f, 0.6192722320556641f, 0.5719969868659973f, 0.8992289900779724f, 0.30917423963546753f, +0.4387415945529938f, 0.2536029517650604f, 0.4127064049243927f, 0.1029459536075592f, 0.4508047103881836f, 0.6264867782592773f, 0.7490586638450623f, 0.00044522082316689193f, +0.07876996695995331f, 0.07229279726743698f, 0.24446991086006165f, 0.37736257910728455f, 0.7302505373954773f, 0.8600875735282898f, 0.6049473881721497f, 0.20967362821102142f, +0.16413912177085876f, 0.5910777449607849f, 0.7513987421989441f, 0.2434724122285843f, 0.07494805008172989f, 0.7938293218612671f, 0.2746768891811371f, 0.2839697003364563f, +0.41134124994277954f, 0.9302577376365662f, 0.2907528579235077f, 0.8367817401885986f, 0.2918859124183655f, 0.7056486010551453f, 0.756663978099823f, 0.7518205046653748f, +0.04441794008016586f, 0.024313783273100853f, 0.7936238646507263f, 0.9356544613838196f, 0.9949756264686584f, 0.04418271780014038f, 0.7687793970108032f, 0.6317713260650635f, +0.633836567401886f, 0.048008378595113754f, 0.7925376892089844f, 0.8809179067611694f, 0.580185055732727f, 0.01693100668489933f, 0.9128137230873108f, 0.1478653848171234f, +0.31831496953964233f, 0.9872797131538391f, 0.8343746066093445f, 0.09138569235801697f, 0.819645881652832f, 0.12573207914829254f, 0.025429803878068924f, 0.13866132497787476f, +0.6148591637611389f, 0.08945561945438385f, 0.16213059425354004f, 0.912736713886261f, 0.008928083814680576f, 0.9728158712387085f, 0.3430372178554535f, 0.5222191214561462f, +0.4043010175228119f, 0.4360538125038147f, 0.03338021785020828f, 0.9730793833732605f, 0.7109244465827942f, 0.1922673135995865f, 0.913914144039154f, 0.45959293842315674f, +0.9097583293914795f, 0.2825094163417816f, 0.653275191783905f, 0.6910052299499512f, 0.6407898664474487f, 0.9563938975334167f, 0.9697856307029724f, 0.9494918584823608f, +0.7559135556221008f, 0.7932574152946472f, 0.010926038026809692f, 0.8447306752204895f, 0.7944088578224182f, 0.8302474617958069f, 0.7530674934387207f, 0.615116536617279f, +0.5772239565849304f, 0.6950237154960632f, 0.23082858324050903f, 0.47042784094810486f, 0.9661473035812378f, 0.0479196161031723f, 0.1949196457862854f, 0.355874627828598f, +0.1326022446155548f, 0.9429299831390381f, 0.6646465063095093f, 0.14183039963245392f, 0.0013514406746253371f, 0.8081908822059631f, 0.7433236241340637f, 0.32307520508766174f, +0.6366959810256958f, 0.6512961387634277f, 0.17329339683055878f, 0.48457491397857666f, 0.7462176084518433f, 0.6048629283905029f, 0.11190617829561234f, 0.29133719205856323f, +0.5283889770507812f, 0.6586004495620728f, 0.060168370604515076f, 0.31095820665359497f, 0.6969570517539978f, 0.09229233860969543f, 0.6454614400863647f, 0.5460754632949829f, +0.2625581920146942f, 0.6636191010475159f, 0.36589619517326355f, 0.9660513401031494f, 0.5615622997283936f, 0.7656242251396179f, 0.7854034900665283f, 0.5208446383476257f, +0.18494901061058044f, 0.8961705565452576f, 0.3100813329219818f, 0.6411224007606506f, 0.9506891369819641f, 0.8549437522888184f, 0.4536099135875702f, 0.8425559401512146f, +0.48329034447669983f, 0.8318986296653748f, 0.8563674688339233f, 0.3898284137248993f, 0.003971199970692396f, 0.14584918320178986f, 0.5094730854034424f, 0.6551792621612549f, +0.239803746342659f, 0.6711183786392212f, 0.1932075321674347f, 0.012179726734757423f, 0.29248711466789246f, 0.7782580852508545f, 0.42753610014915466f, 0.04769597947597504f, +0.782103419303894f, 0.3210279047489166f, 0.4390588700771332f, 0.8164588212966919f, 0.9745340943336487f, 0.4269304573535919f, 0.89360511302948f, 0.685167133808136f, +0.22993406653404236f, 0.9837560653686523f, 0.9503665566444397f, 0.7860239148139954f, 0.5016794800758362f, 0.12119849026203156f, 0.6765124201774597f, 0.06853128224611282f, +0.7908626794815063f, 0.7648348212242126f, 0.9224116206169128f, 0.7453915476799011f, 0.1248040571808815f, 0.338489830493927f, 0.005466115660965443f, 0.7590189576148987f, +0.6536048650741577f, 0.8383882641792297f, 0.3775761127471924f, 0.3811506927013397f, 0.036347731947898865f, 0.7614910006523132f, 0.7057132720947266f, 0.08409199863672256f, +0.3792632818222046f, 0.42578256130218506f, 0.29358986020088196f, 0.28011059761047363f, 0.23068934679031372f, 0.1833214908838272f, 0.962753415107727f, 0.9862561225891113f, +0.9349318742752075f, 0.4147696793079376f, 0.07879664748907089f, 0.9703137874603271f, 0.6927222609519958f, 0.13880307972431183f, 0.8299866318702698f, 0.2781723141670227f, +0.34876739978790283f, 0.49156996607780457f, 0.5831945538520813f, 0.8043099641799927f, 0.16785991191864014f, 0.3427107632160187f, 0.2132977545261383f, 0.753079354763031f, +0.35214942693710327f, 0.17792506515979767f, 0.09550837427377701f, 0.7522542476654053f, 0.042873360216617584f, 0.28373825550079346f, 0.25170499086380005f, 0.49257341027259827f, +0.07544311881065369f, 0.10113813728094101f, 0.666883111000061f, 0.34937724471092224f, 0.2578652501106262f, 0.5350415706634521f, 0.10065823048353195f, 0.7360466122627258f, +0.4773646593093872f, 0.6139238476753235f, 0.7845150232315063f, 0.9887815117835999f, 0.7722562551498413f, 0.9477426409721375f, 0.2849132716655731f, 0.6745068430900574f, +0.36855900287628174f, 0.5571718215942383f, 0.7576513886451721f, 0.44583654403686523f, 0.5158693194389343f, 0.6507378816604614f, 0.8087670803070068f, 0.6506879925727844f, +0.6065201759338379f, 0.8830757141113281f, 0.04145784676074982f, 0.3017190396785736f, 0.7616400122642517f, 0.3893744945526123f, 0.9482032060623169f, 0.397393137216568f, +0.4985250234603882f, 0.5843909978866577f, 0.5729082822799683f, 0.9785208702087402f, 0.32443442940711975f, 0.08439001441001892f, 0.2345762848854065f, 0.9306065440177917f, +0.8760730624198914f, 0.2668599486351013f, 0.9344630837440491f, 0.8472908735275269f, 0.3441047966480255f, 0.08237072080373764f, 0.8050748705863953f, 0.2781820595264435f, +0.6139042377471924f, 0.00251325243152678f, 0.04581348970532417f, 0.5735417604446411f, 0.19534672796726227f, 0.09424593299627304f, 0.6376262307167053f, 0.1991405040025711f, +0.7843648195266724f, 0.19025665521621704f, 0.9505061507225037f, 0.26177552342414856f, 0.8718026876449585f, 0.6779983639717102f, 0.09669486433267593f, 0.4044732451438904f, +0.6599526405334473f, 0.8551424145698547f, 0.8272367715835571f, 0.6279160976409912f, 0.029592247679829597f, 0.20126469433307648f, 0.09144553542137146f, 0.7689235806465149f, +0.47124168276786804f, 0.16494247317314148f, 0.662390947341919f, 0.510837972164154f, 0.4863013029098511f, 0.29969528317451477f, 0.08259015530347824f, 0.6908091902732849f, +0.4041944146156311f, 0.42881661653518677f, 0.11030358821153641f, 0.7374189496040344f, 0.7428267598152161f, 0.46497946977615356f, 0.27723926305770874f, 0.685286283493042f, +0.07158797979354858f, 0.9387043714523315f, 0.5761652588844299f, 0.9211223125457764f, 0.7945824861526489f, 0.36549052596092224f, 0.09877798706293106f, 0.2856936752796173f, +0.8666336536407471f, 0.880562961101532f, 0.4817078113555908f, 0.549951434135437f, 0.010050722397863865f, 0.9585617780685425f, 0.7369028925895691f, 0.6218491196632385f, +0.36469408869743347f, 0.17501309514045715f, 0.22229382395744324f, 0.13878461718559265f, 0.37703749537467957f, 0.9977836012840271f, 0.9599407911300659f, 0.16215409338474274f, +0.7624929547309875f, 0.9800527691841125f, 0.7310412526130676f, 0.5907729268074036f, 0.6286306977272034f, 0.08135642111301422f, 0.4875880181789398f, 0.045957598835229874f, +0.6933141946792603f, 0.9925216436386108f, 0.41376420855522156f, 0.0876423716545105f, 0.34669458866119385f, 0.9472181797027588f, 0.5338744521141052f, 0.44528651237487793f, +0.7503891587257385f, 0.9152927398681641f, 0.006490414496511221f, 0.31231722235679626f, 0.3887307643890381f, 0.9899675846099854f, 0.7979501485824585f, 0.04972056671977043f, +0.10585687309503555f, 0.18963250517845154f, 0.16771650314331055f, 0.32463574409484863f, 0.47997045516967773f, 0.15190666913986206f, 0.40399396419525146f, 0.1013464704155922f, +0.5287491083145142f, 0.6014146208763123f, 0.6827195882797241f, 0.5579774975776672f, 0.853084921836853f, 0.06979139894247055f, 0.3291938006877899f, 0.7092452645301819f, +0.021474968641996384f, 0.3988267779350281f, 0.5029582977294922f, 0.1587734818458557f, 0.23865020275115967f, 0.8058273792266846f, 0.6250009536743164f, 0.6788139343261719f, +0.9016357660293579f, 0.3864710032939911f, 0.8250013589859009f, 0.5383221507072449f, 0.11391173303127289f, 0.4870486259460449f, 0.29046913981437683f, 0.7137712240219116f, +0.055534690618515015f, 0.21877151727676392f, 0.2869572937488556f, 0.17214229702949524f, 0.0040009417571127415f, 0.4512249827384949f, 0.936072051525116f, 0.5476560592651367f, +0.1572716236114502f, 0.2733710706233978f, 0.9748493432998657f, 0.8283900022506714f, 0.8538063764572144f, 0.8064865469932556f, 0.2173033207654953f, 0.9257944822311401f, +0.9085962176322937f, 0.8332266807556152f, 0.6385510563850403f, 0.08703726530075073f, 0.6454296112060547f, 0.48393839597702026f, 0.5446107387542725f, 0.8481709957122803f, +0.5439651608467102f, 0.04114187881350517f, 0.7201175093650818f, 0.0025146203115582466f, 0.14570511877536774f, 0.21373304724693298f, 0.4795949161052704f, 0.6309976577758789f, +0.7579938769340515f, 0.9207116365432739f, 0.27804505825042725f, 0.8028856515884399f, 0.180619016289711f, 0.14646074175834656f, 0.7498683929443359f, 0.4075147807598114f, +0.17925485968589783f, 0.998699426651001f, 0.6653057932853699f, 0.005419089458882809f, 0.034842997789382935f, 0.8856325149536133f, 0.3016397953033447f, 0.8769355416297913f, +0.7335561513900757f, 0.11506237834692001f, 0.8577383160591125f, 0.9300954341888428f, 0.0005215726559981704f, 0.8924421072006226f, 0.40567919611930847f, 0.4888036251068115f, +0.9913859367370605f, 0.10000284016132355f, 0.6026101112365723f, 0.7278786897659302f, 0.9491415023803711f, 0.9653273820877075f, 0.18362440168857574f, 0.4623917043209076f, +0.7381437420845032f, 0.6458967328071594f, 0.03275468945503235f, 0.5454129576683044f, 0.5338274836540222f, 0.4264419376850128f, 0.10548180341720581f, 0.973400890827179f, +0.9203672409057617f, 0.44876357913017273f, 0.5820426344871521f, 0.5227457284927368f, 0.5179756879806519f, 0.6488329172134399f, 0.5271041989326477f, 0.6771373152732849f, +0.7210438847541809f, 0.9065301418304443f, 0.8826147317886353f, 0.3932361304759979f, 0.2478858232498169f, 0.24256743490695953f, 0.2646522521972656f, 0.8130378127098083f, +0.7624456882476807f, 0.7349118590354919f, 0.5959066152572632f, 0.8689310550689697f, 0.3795170783996582f, 0.9844340682029724f, 0.13203869760036469f, 0.18804684281349182f, +0.30880194902420044f, 0.9756155610084534f, 0.990665853023529f, 0.2674162685871124f, 0.7856917381286621f, 0.8879289627075195f, 0.525495171546936f, 0.9669732451438904f, +0.6018437743186951f, 0.8832491040229797f, 0.44382068514823914f, 0.6119584441184998f, 0.6953219175338745f, 0.3244391977787018f, 0.6383292078971863f, 0.3994210958480835f, +0.36288830637931824f, 0.4466867744922638f, 0.715302050113678f, 0.8694571852684021f, 0.31505054235458374f, 0.3343726694583893f, 0.01589365117251873f, 0.9262186884880066f, +0.6067675352096558f, 0.8414624333381653f, 0.3849424421787262f, 0.15704792737960815f, 0.5227499008178711f, 0.06420423090457916f, 0.566132664680481f, 0.7066459059715271f, +0.2223857343196869f, 0.03194793313741684f, 0.8835428953170776f, 0.9045809507369995f, 0.16342467069625854f, 0.3217795193195343f, 0.17710965871810913f, 0.5478730797767639f, +0.9368842244148254f, 0.6600053906440735f, 0.7756055593490601f, 0.4674818813800812f, 0.507188618183136f, 0.4346967935562134f, 0.40459027886390686f, 0.13388705253601074f, +0.2584279775619507f, 0.293306827545166f, 0.45464715361595154f, 0.6187553405761719f, 0.9444484710693359f, 0.6565865278244019f, 0.21863947808742523f, 0.9610964059829712f, +0.6373080015182495f, 0.49550071358680725f, 0.5492646098136902f, 0.1771032065153122f, 0.34116125106811523f, 0.09707531332969666f, 0.11891913414001465f, 0.4864026606082916f, +0.23359590768814087f, 0.9465281963348389f, 0.6005772948265076f, 0.7854273319244385f, 0.17442548274993896f, 0.773354709148407f, 0.8050458431243896f, 0.0834650918841362f, +0.043557845056056976f, 0.6025470495223999f, 0.5537768602371216f, 0.8268806338310242f, 0.7079809308052063f, 0.11260014027357101f, 0.05233815684914589f, 0.3198406994342804f, +0.05497858300805092f, 0.43899187445640564f, 0.24031221866607666f, 0.8047224283218384f, 0.2775653600692749f, 0.6109673380851746f, 0.5833351612091064f, 0.321729838848114f, +0.13425388932228088f, 0.862678587436676f, 0.9675652980804443f, 0.3993484377861023f, 0.46419236063957214f, 0.4285848140716553f, 0.06893576681613922f, 0.556414783000946f, +0.9572418928146362f, 0.9171788692474365f, 0.3371049761772156f, 0.05384732782840729f, 0.5084891319274902f, 0.512633204460144f, 0.6702267527580261f, 0.02337871678173542f, +0.7349480390548706f, 0.5341704487800598f, 0.5215824246406555f, 0.2732921242713928f, 0.4708387851715088f, 0.05068393796682358f, 0.02598799578845501f, 0.8701491355895996f, +0.2918263375759125f, 0.037079814821481705f, 0.721720278263092f, 0.9779706001281738f, 0.22863797843456268f, 0.9322694540023804f, 0.8676698803901672f, 0.6642686128616333f, +0.05278206989169121f, 0.9495232701301575f, 0.5988089442253113f, 0.6006585955619812f, 0.34216660261154175f, 0.9607924222946167f, 0.7394202351570129f, 0.2974722385406494f, +0.012667782604694366f, 0.3889263868331909f, 0.9688980579376221f, 0.437237948179245f, 0.9741547703742981f, 0.8684135675430298f, 0.2867984473705292f, 0.701504647731781f, +0.4587220847606659f, 0.4135758876800537f, 0.20340397953987122f, 0.9420310258865356f, 0.44362935423851013f, 0.34773361682891846f, 0.05237603560090065f, 0.8167245984077454f, +0.9165322184562683f, 0.6259825229644775f, 0.03332268446683884f, 0.030864708125591278f, 0.27135995030403137f, 0.38024306297302246f, 0.24873194098472595f, 0.4942443072795868f, +0.04870559647679329f, 0.1914152354001999f, 0.7168521285057068f, 0.42088577151298523f, 0.08819296211004257f, 0.035589590668678284f, 0.017620697617530823f, 0.31212854385375977f, +0.29654932022094727f, 0.22425895929336548f, 0.288164347410202f, 0.19002392888069153f, 0.333629846572876f, 0.4367729723453522f, 0.4365070164203644f, 0.629426896572113f, +0.7143768072128296f, 0.36611756682395935f, 0.5172514915466309f, 0.817193865776062f, 0.27662530541419983f, 0.7526592016220093f, 0.420512318611145f, 0.006228818092495203f, +0.6646748185157776f, 0.5873421430587769f, 0.5510156750679016f, 0.7608530521392822f, 0.9323219060897827f, 0.9798851013183594f, 0.09075550734996796f, 0.16258209943771362f, +0.8244577050209045f, 0.9183695316314697f, 0.62275630235672f, 0.09760156273841858f, 0.32650408148765564f, 0.20876766741275787f, 0.21256379783153534f, 0.4735081195831299f, +0.17987337708473206f, 0.2934572994709015f, 0.3740229308605194f, 0.5046547651290894f, 0.9277603626251221f, 0.43845346570014954f, 0.5469386577606201f, 0.2716142237186432f, +0.9713029265403748f, 0.41416609287261963f, 0.17717880010604858f, 0.3966935873031616f, 0.3467603921890259f, 0.9826468229293823f, 0.9239424467086792f, 0.8118666410446167f, +0.5863435864448547f, 0.4308364987373352f, 0.6675500273704529f, 0.12633351981639862f, 0.0366828627884388f, 0.5610260367393494f, 0.34004443883895874f, 0.8327739834785461f, +0.8639973402023315f, 0.6172688603401184f, 0.7601427435874939f, 0.6317766904830933f, 0.6536183953285217f, 0.8932687640190125f, 0.7266107797622681f, 0.5455693006515503f, +0.7336761355400085f, 0.12702538073062897f, 0.9498847723007202f, 0.7926077246665955f, 0.37291327118873596f, 0.06396453082561493f, 0.5437816381454468f, 0.9716270565986633f, +0.5615228414535522f, 0.05745137110352516f, 0.6014072299003601f, 0.7120459675788879f, 0.7103917598724365f, 0.9312072992324829f, 0.13516411185264587f, 0.8282627463340759f, +0.4460095763206482f, 0.09687962383031845f, 0.9032135605812073f, 0.16904668509960175f, 0.8088201880455017f, 0.973028302192688f, 0.9213247299194336f, 0.23215655982494354f, +0.8037599325180054f, 0.027256067842245102f, 0.767890453338623f, 0.06836600601673126f, 0.45621171593666077f, 0.16111813485622406f, 0.06254827976226807f, 0.6345580220222473f, +0.41803646087646484f, 0.11020034551620483f, 0.645626962184906f, 0.01883104257285595f, 0.49786755442619324f, 0.011359899304807186f, 0.47918951511383057f, 0.6795095205307007f, +0.4580113887786865f, 0.4201291501522064f, 0.12714308500289917f, 0.5752747058868408f, 0.9485316872596741f, 0.8299835920333862f, 0.9378663897514343f, 0.9747726917266846f, +0.21435576677322388f, 0.8528374433517456f, 0.5242013335227966f, 0.2978428304195404f, 0.8513256311416626f, 0.08136501908302307f, 0.2716643810272217f, 0.8224038481712341f, +0.4768540561199188f, 0.46470585465431213f, 0.42638522386550903f, 0.7910351157188416f, 0.5261111259460449f, 0.33041059970855713f, 0.4465606212615967f, 0.5737286806106567f, +0.013953810557723045f, 0.04466793313622475f, 0.04052199050784111f, 0.02981722168624401f, 0.8841931223869324f, 0.9766601324081421f, 0.5562344789505005f, 0.05444332957267761f, +0.6304769515991211f, 0.3675941526889801f, 0.24932615458965302f, 0.5078994035720825f, 0.19054678082466125f, 0.7986136674880981f, 0.24023742973804474f, 0.2750784158706665f, +0.5353006720542908f, 0.11075004935264587f, 0.03968311846256256f, 0.08950462937355042f, 0.1995040625333786f, 0.786311686038971f, 0.8520091772079468f, 0.010042225942015648f, +0.8703677654266357f, 0.6716063022613525f, 0.2722695767879486f, 0.04013777896761894f, 0.8538535833358765f, 0.030493296682834625f, 0.6658965945243835f, 0.46261531114578247f, +0.23514613509178162f, 0.22988055646419525f, 0.36666038632392883f, 0.800300121307373f, 0.3412182331085205f, 0.19157053530216217f, 0.5112529397010803f, 0.8357715606689453f, +0.7493805885314941f, 0.5181866884231567f, 0.8985675573348999f, 0.17562714219093323f, 0.39623814821243286f, 0.131174698472023f, 0.24772320687770844f, 0.1737988293170929f, +0.15636056661605835f, 0.061143659055233f, 0.6440856456756592f, 0.13842664659023285f, 0.2008061707019806f, 0.3076671063899994f, 0.3500361740589142f, 0.7710179686546326f, +0.2634086310863495f, 0.8677842617034912f, 0.907367467880249f, 0.8900479674339294f, 0.6105782389640808f, 0.5878465175628662f, 0.23712219297885895f, 0.06278617680072784f, +0.7179824709892273f, 0.9451614022254944f, 0.08619652688503265f, 0.12373146414756775f, 0.20042765140533447f, 0.42055806517601013f, 0.33286571502685547f, 0.36013004183769226f, +0.6836603283882141f, 0.5872382521629333f, 0.2014375776052475f, 0.06079413741827011f, 0.171397864818573f, 0.278994619846344f, 0.6115704774856567f, 0.5809871554374695f, +0.11881336569786072f, 0.6712685227394104f, 0.6580803990364075f, 0.6125351190567017f, 0.7885386347770691f, 0.4423608183860779f, 0.766860842704773f, 0.5036579370498657f, +0.33389657735824585f, 0.5293684005737305f, 0.038482364267110825f, 0.8863275647163391f, 0.9115337133407593f, 0.527835488319397f, 0.6861280202865601f, 0.36776003241539f, +0.18002676963806152f, 0.5173658728599548f, 0.0973282977938652f, 0.3612915873527527f, 0.6824605464935303f, 0.044325489550828934f, 0.8786062598228455f, 0.3002982437610626f, +0.07108943909406662f, 0.5145874619483948f, 0.07756256312131882f, 0.40954893827438354f, 0.17144426703453064f, 0.12799234688282013f, 0.41127899289131165f, 0.23838427662849426f, +0.9181967377662659f, 0.879147469997406f, 0.6688607931137085f, 0.3542763888835907f, 0.5723506808280945f, 0.39345690608024597f, 0.2866111993789673f, 0.32155972719192505f, +0.05645448714494705f, 0.30990898609161377f, 0.5600886940956116f, 0.815671980381012f, 0.014394175261259079f, 0.7990754842758179f, 0.7882946729660034f, 0.7146083116531372f, +0.5856119394302368f, 0.43640589714050293f, 0.029386507347226143f, 0.46932119131088257f, 0.6958363056182861f, 0.05313317850232124f, 0.75124192237854f, 0.07662643492221832f, +0.98370361328125f, 0.615498960018158f, 0.5519937872886658f, 0.14559897780418396f, 0.35684144496917725f, 0.768724262714386f, 0.7415106296539307f, 0.27903860807418823f, +0.9086636900901794f, 0.15073107182979584f, 0.12303995341062546f, 0.3651772439479828f, 0.10448141396045685f, 0.1827717125415802f, 0.9581353068351746f, 0.8511130809783936f, +0.00866237934678793f, 0.9018629193305969f, 0.28010478615760803f, 0.6597284078598022f, 0.054485470056533813f, 0.19134609401226044f, 0.0034586098045110703f, 0.025452515110373497f, +0.3873855471611023f, 0.18104137480258942f, 0.4606319069862366f, 0.541780948638916f, 0.7078660130500793f, 0.43827489018440247f, 0.9244052171707153f, 0.9730387330055237f, +0.915026068687439f, 0.5626338124275208f, 0.1391967236995697f, 0.3036551773548126f, 0.2467506378889084f, 0.5949694514274597f, 0.6336968541145325f, 0.551069438457489f, +0.5178200602531433f, 0.38137441873550415f, 0.11146840453147888f, 0.6773236393928528f, 0.37365227937698364f, 0.0007974741165526211f, 0.3478687107563019f, 0.9644007682800293f, +0.37234067916870117f, 0.30588123202323914f, 0.8719252943992615f, 0.6221988201141357f, 0.632462203502655f, 0.33807462453842163f, 0.10739551484584808f, 0.035846058279275894f, +0.028594132512807846f, 0.9089280366897583f, 0.2791672646999359f, 0.6912275552749634f, 0.16341643035411835f, 0.06194670498371124f, 0.03198746591806412f, 0.02114650048315525f, +0.3999820649623871f, 0.3385744094848633f, 0.48822495341300964f, 0.704428493976593f, 0.2668484151363373f, 0.7352273464202881f, 0.831195592880249f, 0.3042926490306854f, +0.9598326683044434f, 0.9993429183959961f, 0.8713042140007019f, 0.931380033493042f, 0.7650330066680908f, 0.3854674696922302f, 0.12496570497751236f, 0.23819296061992645f, +0.712018609046936f, 0.2165939211845398f, 0.6035711765289307f, 0.8069830536842346f, 0.20876537263393402f, 0.755961537361145f, 0.6039687991142273f, 0.331606388092041f, +0.24424462020397186f, 0.09918971359729767f, 0.5569429993629456f, 0.6764028668403625f, 0.8728955388069153f, 0.023114265874028206f, 0.5397131443023682f, 0.6466006636619568f, +0.4002063572406769f, 0.22084791958332062f, 0.5497082471847534f, 0.8603091835975647f, 0.31946083903312683f, 0.7093508839607239f, 0.7159234881401062f, 0.20458769798278809f, +0.6345570087432861f, 0.6824015974998474f, 0.3199262022972107f, 0.7677657604217529f, 0.5231610536575317f, 0.5059133172035217f, 0.1303415596485138f, 0.28298482298851013f, +0.7251383066177368f, 0.7548080086708069f, 0.17083017528057098f, 0.29095861315727234f, 0.7172895669937134f, 0.4919331669807434f, 0.6788785457611084f, 0.46764758229255676f, +0.5986668467521667f, 0.9072087407112122f, 0.813734233379364f, 0.3783164322376251f, 0.47036269307136536f, 0.9925896525382996f, 0.2748982012271881f, 0.8246249556541443f, +0.051040876656770706f, 0.2211427390575409f, 0.016888661310076714f, 0.6088048219680786f, 0.4730810225009918f, 0.515925943851471f, 0.19401000440120697f, 0.4295938014984131f, +0.17428523302078247f, 0.38889116048812866f, 0.7946352958679199f, 0.848594069480896f, 0.4280951917171478f, 0.023028234019875526f, 0.32429608702659607f, 0.5008863806724548f, +0.161228209733963f, 0.8901051878929138f, 0.044531114399433136f, 0.0737985223531723f, 0.4863181710243225f, 0.749483585357666f, 0.9790109992027283f, 0.40368345379829407f, +0.20976205170154572f, 0.06232644245028496f, 0.9170726537704468f, 0.005488025955855846f, 0.8742836713790894f, 0.10295163094997406f, 0.7377424836158752f, 0.2197878509759903f, +0.4429037868976593f, 0.33534926176071167f, 0.7591248750686646f, 0.5545022487640381f, 0.13153184950351715f, 0.23634886741638184f, 0.5434932708740234f, 0.9462414383888245f, +0.6076758503913879f, 0.30403390526771545f, 0.09076262265443802f, 0.744964063167572f, 0.0049162860959768295f, 0.7369107007980347f, 0.14363031089305878f, 0.9967119693756104f, +0.5103927254676819f, 0.15006089210510254f, 0.15037846565246582f, 0.6490258574485779f, 0.9015944600105286f, 0.1398557722568512f, 0.9739606380462646f, 0.6993315815925598f, +0.21468858420848846f, 0.8063620924949646f, 0.584922194480896f, 0.33877280354499817f, 0.6049248576164246f, 0.9651584625244141f, 0.4875258207321167f, 0.854967474937439f, +0.2795358896255493f, 0.2863442003726959f, 0.029966304078698158f, 0.7799837589263916f, 0.049194954335689545f, 0.6285830140113831f, 0.424304336309433f, 0.6468284130096436f, +0.5193585753440857f, 0.9199587106704712f, 0.23463748395442963f, 0.7488381862640381f, 0.9893834590911865f, 0.44169899821281433f, 0.8727304339408875f, 0.21476581692695618f, +0.7171489596366882f, 0.521247386932373f, 0.1035064309835434f, 0.0009757730294950306f, 0.5878786444664001f, 0.0748012363910675f, 0.4954972565174103f, 0.3366919457912445f, +0.4312301278114319f, 0.33575671911239624f, 0.18211263418197632f, 0.9193096160888672f, 0.28407925367355347f, 0.7502538561820984f, 0.5321775078773499f, 0.008986053057014942f, +0.4025987982749939f, 0.47307175397872925f, 0.5695226192474365f, 0.32466983795166016f, 0.662639319896698f, 0.5337893962860107f, 0.07863305509090424f, 0.20928409695625305f, +0.5968363285064697f, 0.9486231207847595f, 0.5282689332962036f, 0.6487128734588623f, 0.5795484185218811f, 0.20384785532951355f, 0.11040379852056503f, 0.1203836128115654f, +0.2233877182006836f, 0.09513305872678757f, 0.11999441683292389f, 0.20864689350128174f, 0.6813857555389404f, 0.3534015715122223f, 0.27288755774497986f, 0.5248751044273376f, +0.8976340293884277f, 0.06070314347743988f, 0.13224588334560394f, 0.7209995985031128f, 0.9659234881401062f, 0.5748832821846008f, 0.8223559856414795f, 0.5234672427177429f, +0.0859995037317276f, 0.7746442556381226f, 0.9503486752510071f, 0.14258502423763275f, 0.8903311491012573f, 0.5668653249740601f, 0.06798787415027618f, 0.992548406124115f, +0.54244464635849f, 0.29593685269355774f, 0.050144560635089874f, 0.6136807799339294f, 0.5437244176864624f, 0.7037314176559448f, 0.8214725852012634f, 0.796631932258606f, +0.6454946398735046f, 0.10758902877569199f, 0.5944193005561829f, 0.9027301073074341f, 0.08852066099643707f, 0.37996000051498413f, 0.29910075664520264f, 0.1712224781513214f, +0.18846741318702698f, 0.04258577898144722f, 0.6873080730438232f, 0.6947828531265259f, 0.1035447046160698f, 0.6256124377250671f, 0.33731919527053833f, 0.9253094792366028f, +0.8476178050041199f, 0.05284365639090538f, 0.13755792379379272f, 0.866783618927002f, 0.0031357151456177235f, 0.1780020296573639f, 0.35040152072906494f, 0.11702515929937363f, +0.7981326580047607f, 0.8110039830207825f, 0.22183598577976227f, 0.6991956830024719f, 0.7900024652481079f, 0.2134862244129181f, 0.14609287679195404f, 0.6658741235733032f, +0.7754583358764648f, 0.3818375766277313f, 0.7387558817863464f, 0.010944724082946777f, 0.3235340714454651f, 0.7286975979804993f, 0.09995219111442566f, 0.8966689109802246f, +0.0740266814827919f, 0.9908351302146912f, 0.17263074219226837f, 0.48641160130500793f, 0.30318933725357056f, 0.6863183379173279f, 0.7657597064971924f, 0.4830791652202606f, +0.0033567834179848433f, 0.02054254710674286f, 0.22635386884212494f, 0.31826743483543396f, 0.2343585342168808f, 0.3331945836544037f, 0.3741810619831085f, 0.11628556996583939f, +0.443527489900589f, 0.012798980809748173f, 0.977130115032196f, 0.778922975063324f, 0.8780348300933838f, 0.2764292359352112f, 0.6718190312385559f, 0.8549280762672424f, +0.6228219270706177f, 0.3320481479167938f, 0.14433491230010986f, 0.5843499898910522f, 0.6022672057151794f, 0.1010238379240036f, 0.5054509043693542f, 0.565884530544281f, +0.9264348149299622f, 0.0048343888483941555f, 0.9878028631210327f, 0.20137447118759155f, 0.3688364326953888f, 0.1920149177312851f, 0.5491610765457153f, 0.2821856141090393f, +0.5065242052078247f, 0.9885287284851074f, 0.9656903147697449f, 0.17383722960948944f, 0.7933351397514343f, 0.47575893998146057f, 0.7318665981292725f, 0.9763631820678711f, +0.3423798978328705f, 0.6752041578292847f, 0.04517406225204468f, 0.055322032421827316f, 0.8077290654182434f, 0.23812484741210938f, 0.2309282273054123f, 0.6743488311767578f, +0.5402691960334778f, 0.19247445464134216f, 0.940376877784729f, 0.2897488474845886f, 0.9923412203788757f, 0.8228470683097839f, 0.7770058512687683f, 0.579170823097229f, +0.8466499447822571f, 0.32162851095199585f, 0.781430721282959f, 0.6652041673660278f, 0.3788222670555115f, 0.10084675997495651f, 0.56421959400177f, 0.27184656262397766f, +0.8904532790184021f, 0.4381665587425232f, 0.2876928746700287f, 0.6043225526809692f, 0.1870211511850357f, 0.34220370650291443f, 0.5865172147750854f, 0.348795622587204f, +0.13029593229293823f, 0.3398073613643646f, 0.0606205128133297f, 0.1290922313928604f, 0.4603935778141022f, 0.5104222893714905f, 0.8543688654899597f, 0.10675061494112015f, +0.43680328130722046f, 0.23631174862384796f, 0.13825179636478424f, 0.7262546420097351f, 0.5515318512916565f, 0.9598795771598816f, 0.27684926986694336f, 0.08156324923038483f, +0.4367811977863312f, 0.34082457423210144f, 0.14699959754943848f, 0.804344892501831f, 0.5730154514312744f, 0.11836280673742294f, 0.3371753692626953f, 0.08860166370868683f, +0.8266354203224182f, 0.6188896298408508f, 0.11951463669538498f, 0.23224401473999023f, 0.508875846862793f, 0.8986866474151611f, 0.3674052953720093f, 0.7923593521118164f, +0.7744452953338623f, 0.15112972259521484f, 0.16225974261760712f, 0.9863560199737549f, 0.7212172150611877f, 0.42887452244758606f, 0.5585346221923828f, 0.5299484729766846f, +0.6193928122520447f, 0.2364741861820221f, 0.9019690155982971f, 0.6869876980781555f, 0.04063866287469864f, 0.3435862064361572f, 0.9552468657493591f, 0.11432331800460815f, +0.8600411415100098f, 0.932452917098999f, 0.24712330102920532f, 0.8656270503997803f, 0.8424462080001831f, 0.5562304258346558f, 0.7538925409317017f, 0.32498836517333984f, +0.4461856484413147f, 0.23122432827949524f, 0.4976823627948761f, 0.21673239767551422f, 0.47105684876441956f, 0.019671225920319557f, 0.8204006552696228f, 0.3945792019367218f, +0.7581186294555664f, 0.5635943412780762f, 0.23244276642799377f, 0.21512319147586823f, 0.2053288072347641f, 0.6621033549308777f, 0.8809362649917603f, 0.24662891030311584f, +0.24626994132995605f, 0.8897897601127625f, 0.7922726273536682f, 0.7329407930374146f, 0.9917234778404236f, 0.5573483109474182f, 0.819095253944397f, 0.3830276429653168f, +0.21054749190807343f, 0.16219335794448853f, 0.7913453578948975f, 0.17532576620578766f, 0.6017152070999146f, 0.6287684440612793f, 0.7777588367462158f, 0.3427661657333374f, +0.4237472414970398f, 0.4478555917739868f, 0.6673077344894409f, 0.34215694665908813f, 0.0709611177444458f, 0.8979319334030151f, 0.42296233773231506f, 0.47596386075019836f, +0.4338269531726837f, 0.8751614093780518f, 0.25866949558258057f, 0.29524093866348267f, 0.28542372584342957f, 0.6307626962661743f, 0.7280638217926025f, 0.5653235912322998f, +0.3932591378688812f, 0.4689616858959198f, 0.8965689539909363f, 0.3864342272281647f, 0.30104708671569824f, 0.5708969831466675f, 0.4766426980495453f, 0.43145424127578735f, +0.6826632618904114f, 0.10153532028198242f, 0.6727072596549988f, 0.7960666418075562f, 0.05650920420885086f, 0.029501741752028465f, 0.14812210202217102f, 0.5541500449180603f, +0.9213258028030396f, 0.7237659692764282f, 0.779100239276886f, 0.7216024994850159f, 0.7626216411590576f, 0.9064077138900757f, 0.869067370891571f, 0.14743122458457947f, +0.5938329100608826f, 0.5532617568969727f, 0.4146731197834015f, 0.5248888731002808f, 0.9686517715454102f, 0.6733002066612244f, 0.6171807646751404f, 0.5435484647750854f, +0.4962114989757538f, 0.9330986142158508f, 0.8418322205543518f, 0.1694672405719757f, 0.5009800791740417f, 0.5589043498039246f, 0.3839021921157837f, 0.5095014572143555f, +0.7671968340873718f, 0.9425151944160461f, 0.9121460914611816f, 0.7611616253852844f, 0.3949003517627716f, 0.7869425415992737f, 0.5159453749656677f, 0.353869765996933f, +0.09796354919672012f, 0.11211205273866653f, 0.8271550536155701f, 0.24330617487430573f, 0.5408795475959778f, 0.0001764174667187035f, 0.8898177742958069f, 0.7206181287765503f, +0.5596328377723694f, 0.21213291585445404f, 0.13200317323207855f, 0.9693681597709656f, 0.8045712113380432f, 0.827468752861023f, 0.5156468749046326f, 0.01732339709997177f, +0.16322839260101318f, 0.959412157535553f, 0.39510998129844666f, 0.6203076839447021f, 0.705350399017334f, 0.8646471500396729f, 0.8356266617774963f, 0.1431175321340561f, +0.23705187439918518f, 0.9180673956871033f, 0.5793291926383972f, 0.2160181850194931f, 0.49717774987220764f, 0.10756716132164001f, 0.09375211596488953f, 0.22437386214733124f, +0.6521756052970886f, 0.13371479511260986f, 0.13976925611495972f, 0.7714777588844299f, 0.5741217136383057f, 0.4316536784172058f, 0.8843638300895691f, 0.5472531914710999f, +0.19684290885925293f, 0.38675937056541443f, 0.8583083152770996f, 0.7151028513908386f, 0.254365473985672f, 0.5653918385505676f, 0.7804433107376099f, 0.15078333020210266f, +0.6770352125167847f, 0.9553616642951965f, 0.6690917611122131f, 0.8394330143928528f, 0.15464121103286743f, 0.26536744832992554f, 0.4460550546646118f, 0.5504419207572937f, +0.8891701698303223f, 0.5251583456993103f, 0.0027819820679724216f, 0.7627416849136353f, 0.4490964710712433f, 0.6716323494911194f, 0.05438699200749397f, 0.10275671631097794f, +0.4403013586997986f, 0.6102527379989624f, 0.05542979761958122f, 0.541450023651123f, 0.42222318053245544f, 0.24125808477401733f, 0.5815708637237549f, 0.40185531973838806f, +0.060458093881607056f, 0.7857876420021057f, 0.2813257873058319f, 0.7377610206604004f, 0.9568761587142944f, 0.5852439403533936f, 0.5432044267654419f, 0.07040871679782867f, +0.24703748524188995f, 0.17579883337020874f, 0.8495966196060181f, 0.34608498215675354f, 0.8280900716781616f, 0.6742631196975708f, 0.1660822182893753f, 0.01734362356364727f, +0.42674121260643005f, 0.587960958480835f, 0.16828855872154236f, 0.45275306701660156f, 0.0837491974234581f, 0.05176764354109764f, 0.3970326781272888f, 0.2994249165058136f, +0.5605229735374451f, 0.5375052094459534f, 0.8391225934028625f, 0.8762380480766296f, 0.2715645432472229f, 0.36593613028526306f, 0.23769178986549377f, 0.529590368270874f, +0.8530558943748474f, 0.5873739123344421f, 0.18072664737701416f, 0.584331750869751f, 0.508398711681366f, 0.6918764114379883f, 0.9345821142196655f, 0.5014802813529968f, +0.30197030305862427f, 0.6095182299613953f, 0.2709110975265503f, 0.6144899725914001f, 0.5774583220481873f, 0.05251414701342583f, 0.5077508687973022f, 0.3788277208805084f, +0.18349087238311768f, 0.13412874937057495f, 0.5106151103973389f, 0.10133116692304611f, 0.9434241652488708f, 0.7259334325790405f, 0.68369460105896f, 0.12150511890649796f, +0.12239764630794525f, 0.6563989520072937f, 0.47386065125465393f, 0.09896297752857208f, 0.7871431708335876f, 0.3328056037425995f, 0.24656742811203003f, 0.6251744031906128f, +0.9507815837860107f, 0.3874150216579437f, 0.06490515917539597f, 0.782503604888916f, 0.23296654224395752f, 0.5020354390144348f, 0.5142426490783691f, 0.6448692083358765f, +0.7250174283981323f, 0.24530671536922455f, 0.8317757844924927f, 0.07505191117525101f, 0.9040425419807434f, 0.12878131866455078f, 0.7861688733100891f, 0.4026041030883789f, +0.43246814608573914f, 0.9036163091659546f, 0.40133172273635864f, 0.9845190644264221f, 0.671190083026886f, 0.6100019216537476f, 0.07438310980796814f, 0.8337218165397644f, +0.8131446242332458f, 0.13465669751167297f, 0.6293392181396484f, 0.5869508981704712f, 0.528816282749176f, 0.6401023864746094f, 0.947963297367096f, 0.6912145018577576f, +0.15265710651874542f, 0.25462499260902405f, 0.9297110438346863f, 0.07230409979820251f, 0.4971509873867035f, 0.2909727692604065f, 0.11645007878541946f, 0.9601296186447144f, +0.9388741254806519f, 0.16885405778884888f, 0.11233352869749069f, 0.8441646695137024f, 0.17134280502796173f, 0.9998859763145447f, 0.1077527105808258f, 0.6928909420967102f, +0.6482724547386169f, 0.08423642814159393f, 0.1632307469844818f, 0.4496275782585144f, 0.7566572427749634f, 0.07173798978328705f, 0.49737033247947693f, 0.13025017082691193f, +0.6051062345504761f, 0.5794246196746826f, 0.12440524250268936f, 0.8503120541572571f, 0.7743875980377197f, 0.4231014847755432f, 0.8280916213989258f, 0.7531813383102417f, +0.6707231402397156f, 0.30316397547721863f, 0.3677036762237549f, 0.20605626702308655f, 0.4116660952568054f, 0.09240856021642685f, 0.2049865424633026f, 0.2506415545940399f, +0.406094491481781f, 0.08032572269439697f, 0.37658753991127014f, 0.8376707434654236f, 0.22238215804100037f, 0.49652332067489624f, 0.3440575897693634f, 0.42266008257865906f, +0.2622235417366028f, 0.0036478384863585234f, 0.6357195377349854f, 0.07824383676052094f, 0.9204529523849487f, 0.01346334908157587f, 0.09463923424482346f, 0.6595198512077332f, +0.7640081644058228f, 0.7588639855384827f, 0.6205329895019531f, 0.33306175470352173f, 0.46215710043907166f, 0.14419744908809662f, 0.5710590481758118f, 0.06431794166564941f, +0.3812755048274994f, 0.7457312941551208f, 0.03284202516078949f, 0.4679393470287323f, 0.7470027208328247f, 0.9031054973602295f, 0.00893600657582283f, 0.8622441291809082f, +0.9858035445213318f, 0.7221446633338928f, 0.48967745900154114f, 0.045434631407260895f, 0.7997800707817078f, 0.014057392254471779f, 0.7479516863822937f, 0.6488587856292725f, +0.5334420800209045f, 0.16978789865970612f, 0.3652445375919342f, 0.4604042172431946f, 0.3325761556625366f, 0.14658963680267334f, 0.2862284481525421f, 0.2625318169593811f, +0.5711275339126587f, 0.04474388062953949f, 0.33324846625328064f, 0.9172095656394958f, 0.07352622598409653f, 0.5796492099761963f, 0.07428502291440964f, 0.5547240376472473f, +0.4414125680923462f, 0.9060501456260681f, 0.016433462500572205f, 0.4237574636936188f, 0.8687945604324341f, 0.7896080613136292f, 0.1901794970035553f, 0.3055263161659241f, +0.23424263298511505f, 0.25138038396835327f, 0.4843596816062927f, 0.25696927309036255f, 0.6160048842430115f, 0.3350943624973297f, 0.3890087306499481f, 0.33694469928741455f, +0.37128376960754395f, 0.34672126173973083f, 0.4585573077201843f, 0.07009302824735641f, 0.8796280026435852f, 0.29210445284843445f, 0.9079347848892212f, 0.5976128578186035f, +0.2813500463962555f, 0.12796908617019653f, 0.8533591628074646f, 0.22476905584335327f, 0.7641550302505493f, 0.3730483949184418f, 0.0775875374674797f, 0.5731731653213501f, +0.9137699007987976f, 0.2760486900806427f, 0.6867868900299072f, 0.9618505239486694f, 0.31510332226753235f, 0.7863429188728333f, 0.6514946222305298f, 0.716856062412262f, +0.5448241829872131f, 0.7012338638305664f, 0.825994610786438f, 0.8947277069091797f, 0.8241710662841797f, 0.10921023786067963f, 0.36041736602783203f, 0.8259138464927673f, +0.5634876489639282f, 0.996167004108429f, 0.3253101706504822f, 0.06564424186944962f, 0.7106800675392151f, 0.17260286211967468f, 0.3209170401096344f, 0.5377916693687439f, +0.7064827680587769f, 0.07664007693529129f, 0.7313838601112366f, 0.42174920439720154f, 0.3888196349143982f, 0.9939143657684326f, 0.5256431698799133f, 0.3760077655315399f, +0.7003823518753052f, 0.48575302958488464f, 0.35147184133529663f, 0.7805061340332031f, 0.2548130452632904f, 0.8482778072357178f, 0.5164399147033691f, 0.28292056918144226f, +0.22226737439632416f, 0.6309193968772888f, 0.7622258067131042f, 0.0015667155385017395f, 0.8682144284248352f, 0.1909753978252411f, 0.025889934971928596f, 0.7980080842971802f, +0.8075098991394043f, 0.6281300783157349f, 0.42173102498054504f, 0.7390929460525513f, 0.3850805163383484f, 0.7885152697563171f, 0.6121938824653625f, 0.7762840986251831f, +0.7988966703414917f, 0.29924461245536804f, 0.9153200387954712f, 0.25235339999198914f, 0.8311370015144348f, 0.3372306227684021f, 0.24967919290065765f, 0.1822618991136551f, +0.9381331205368042f, 0.22695304453372955f, 0.3707755208015442f, 0.8938681483268738f, 0.7943732142448425f, 0.11322353780269623f, 0.2780134379863739f, 0.1893274039030075f, +0.47762951254844666f, 0.5703252553939819f, 0.4510647654533386f, 0.4699226915836334f, 0.5130221247673035f, 0.596299946308136f, 0.7066401839256287f, 0.616579532623291f, +0.6142849326133728f, 0.814304769039154f, 0.7992072701454163f, 0.11943238973617554f, 0.5010274648666382f, 0.723427414894104f, 0.0014379939530044794f, 0.5127531290054321f, +0.5186982154846191f, 0.5592237710952759f, 0.8210844397544861f, 0.27197375893592834f, 0.6404787302017212f, 0.5122054815292358f, 0.8790652751922607f, 0.1476326286792755f, +0.757398784160614f, 0.9457688927650452f, 0.7895115613937378f, 0.9927012324333191f, 0.422427773475647f, 0.025160012766718864f, 0.025954922661185265f, 0.8468954563140869f, +0.7802676558494568f, 0.3306821882724762f, 0.9553620219230652f, 0.1655934751033783f, 0.6374678611755371f, 0.6560636758804321f, 0.6439473032951355f, 0.23646652698516846f, +0.07862544804811478f, 0.6941717863082886f, 0.20484688878059387f, 0.3042440414428711f, 0.4211225211620331f, 0.5645585656166077f, 0.996726930141449f, 0.7583839893341064f, +0.28609585762023926f, 0.7852819561958313f, 0.05224068462848663f, 0.7372635006904602f, 0.9811303615570068f, 0.6195308566093445f, 0.04405304417014122f, 0.15165439248085022f, +0.45585596561431885f, 0.3072950541973114f, 0.7636917233467102f, 0.2604709565639496f, 0.5194170475006104f, 0.28061822056770325f, 0.051993828266859055f, 0.9034858345985413f, +0.10042726993560791f, 0.02605905570089817f, 0.1836126148700714f, 0.10668580234050751f, 0.7638569474220276f, 0.38341641426086426f, 0.06609940528869629f, 0.32919880747795105f, +0.14183509349822998f, 0.47085705399513245f, 0.27647313475608826f, 0.0604056678712368f, 0.9740817546844482f, 0.26553621888160706f, 0.20212183892726898f, 0.9788562655448914f, +0.4402373731136322f, 0.6633340716362f, 0.42257511615753174f, 0.24573388695716858f, 0.9217299818992615f, 0.21797485649585724f, 0.26366305351257324f, 0.43972569704055786f, +0.7501522898674011f, 0.028138890862464905f, 0.3979087471961975f, 0.37185344099998474f, 0.9351314902305603f, 0.19111919403076172f, 0.3647173047065735f, 0.7420439720153809f, +0.40444520115852356f, 0.8111885786056519f, 0.8059232831001282f, 0.5058568120002747f, 0.04761171340942383f, 0.635436475276947f, 0.5010581612586975f, 0.19703815877437592f, +0.015068480744957924f, 0.06609594821929932f, 0.25521278381347656f, 0.2393692135810852f, 0.16198936104774475f, 0.24175363779067993f, 0.9897102117538452f, 0.7165051102638245f, +0.8710904121398926f, 0.7749022841453552f, 0.556938886642456f, 0.7898240685462952f, 0.42756542563438416f, 0.9133867621421814f, 0.17953507602214813f, 0.7853204011917114f, +0.3357127606868744f, 0.900195837020874f, 0.6306670904159546f, 0.6632465124130249f, 0.5831716656684875f, 0.5535870790481567f, 0.3512325882911682f, 0.4052683413028717f, +0.5569394826889038f, 0.8734006285667419f, 0.7815701961517334f, 0.6208186149597168f, 0.07774686813354492f, 0.5863029360771179f, 0.6715930700302124f, 0.26293644309043884f, +0.7904278039932251f, 0.7740327715873718f, 0.14173854887485504f, 0.936372697353363f, 0.860126256942749f, 0.2997419834136963f, 0.7786676287651062f, 0.05989691615104675f, +0.6440743207931519f, 0.556871235370636f, 0.9574282169342041f, 0.5261527895927429f, 0.9950438737869263f, 0.13983877003192902f, 0.36520326137542725f, 0.44008907675743103f, +0.586887776851654f, 0.35092049837112427f, 0.46826446056365967f, 0.2950286269187927f, 0.41176435351371765f, 0.4078695476055145f, 0.13795457780361176f, 0.39150723814964294f, +0.323135644197464f, 0.6178715825080872f, 0.42705997824668884f, 0.6684396266937256f, 0.5863264799118042f, 0.9765188694000244f, 0.9714211821556091f, 0.5982887744903564f, +0.8751082420349121f, 0.13176609575748444f, 0.6816413402557373f, 0.04193820431828499f, 0.9454714059829712f, 0.28349539637565613f, 0.22195936739444733f, 0.5509061813354492f, +0.08035847544670105f, 0.7264361381530762f, 0.18583469092845917f, 0.3499530851840973f, 0.11765988171100616f, 0.2418355941772461f, 0.9834304451942444f, 0.4807366132736206f, +0.29173362255096436f, 0.13422192633152008f, 0.14044182002544403f, 0.5273834466934204f, 0.7647528648376465f, 0.8329893946647644f, 0.44533905386924744f, 0.46280455589294434f, +0.3414398431777954f, 0.8496655821800232f, 0.7980964779853821f, 0.48111245036125183f, 0.9724550247192383f, 0.0937030240893364f, 0.8376282453536987f, 0.37767481803894043f, +0.43265554308891296f, 0.031244946643710136f, 0.874688982963562f, 0.9380885362625122f, 0.147014319896698f, 0.9603604674339294f, 0.8963746428489685f, 0.1834852248430252f, +0.1398017704486847f, 0.15290775895118713f, 0.3929242789745331f, 0.17091698944568634f, 0.1293174773454666f, 0.4876161515712738f, 0.6608750224113464f, 0.45070880651474f, +0.6092520356178284f, 0.9453652501106262f, 0.29978615045547485f, 0.40759772062301636f, 0.08682993054389954f, 0.03535061329603195f, 0.40978994965553284f, 0.4542035162448883f, +0.6878035664558411f, 0.3020327091217041f, 0.1464979350566864f, 0.2623346745967865f, 0.5482989549636841f, 0.32688066363334656f, 0.6232460141181946f, 0.1699157953262329f, +0.7635619640350342f, 0.017601793631911278f, 0.27319303154945374f, 0.8258857131004333f, 0.7674591541290283f, 0.28209540247917175f, 0.4399057626724243f, 0.6060696840286255f, +0.3244445025920868f, 0.18807359039783478f, 0.4698779881000519f, 0.6083386540412903f, 0.7624818682670593f, 0.10112980753183365f, 0.8474307656288147f, 0.43141716718673706f, +0.31306836009025574f, 0.6677588820457458f, 0.05882086232304573f, 0.5573124885559082f, 0.8806268572807312f, 0.7140798568725586f, 0.11683939397335052f, 0.7095855474472046f, +0.13014081120491028f, 0.0891641303896904f, 0.8418102860450745f, 0.32796958088874817f, 0.940830409526825f, 0.9359841346740723f, 0.9350157976150513f, 0.6173340082168579f, +0.09438399225473404f, 0.680546224117279f, 0.3459235429763794f, 0.9043159484863281f, 0.8566704988479614f, 0.8246162533760071f, 0.04424465820193291f, 0.7466126680374146f, +0.7498493790626526f, 0.29243943095207214f, 0.6207408905029297f, 0.1330006867647171f, 0.6591858267784119f, 0.41276121139526367f, 0.6179147362709045f, 0.5735792517662048f, +0.30374351143836975f, 0.5822693109512329f, 0.056549325585365295f, 0.5809891819953918f, 0.3309490978717804f, 0.9360992908477783f, 0.25129133462905884f, 0.022894103080034256f, +0.9601922631263733f, 0.4568222761154175f, 0.5205095410346985f, 0.8580356240272522f, 0.5914896130561829f, 0.00437189219519496f, 0.4944611191749573f, 0.38335490226745605f, +0.8430500030517578f, 0.01831205189228058f, 0.44761666655540466f, 0.21235549449920654f, 0.8131818771362305f, 0.7615664601325989f, 0.6012088060379028f, 0.36332282423973083f, +0.5713092684745789f, 0.1136433482170105f, 0.20721818506717682f, 0.17848359048366547f, 0.7835085391998291f, 0.2409612238407135f, 0.6919939517974854f, 0.7571347951889038f, +0.6537569761276245f, 0.2860542833805084f, 0.6749857664108276f, 0.470061719417572f, 0.8858636617660522f, 0.5902721285820007f, 0.7661505937576294f, 0.4555932283401489f, +0.6406249403953552f, 0.2939240634441376f, 0.2522173523902893f, 0.3032872676849365f, 0.7978157997131348f, 0.38586926460266113f, 0.8372176289558411f, 0.9461727738380432f, +0.5171065330505371f, 0.9273203015327454f, 0.18653668463230133f, 0.11452445387840271f, 0.8750841617584229f, 0.3800191283226013f, 0.0461655929684639f, 0.18552832305431366f, +0.1474463790655136f, 0.09051304310560226f, 0.36980724334716797f, 0.5749183893203735f, 0.6628994345664978f, 0.1808997094631195f, 0.5841197967529297f, 0.6674081087112427f, +0.0701412707567215f, 0.03490966185927391f, 0.15961161255836487f, 0.621663510799408f, 0.5443741083145142f, 0.14831417798995972f, 0.0684451311826706f, 0.5477470755577087f, +0.23420663177967072f, 0.5230826735496521f, 0.67732173204422f, 0.0952211245894432f, 0.19793467223644257f, 0.7057607769966125f, 0.4212779998779297f, 0.1691461205482483f, +0.5512908697128296f, 0.8105851411819458f, 0.5803781151771545f, 0.523503839969635f, 0.8136389255523682f, 0.6111229062080383f, 0.8925759196281433f, 0.9280514717102051f, +0.9173856377601624f, 0.813251793384552f, 0.05020112171769142f, 0.5657572746276855f, 0.6298697590827942f, 0.8785464763641357f, 0.6876148581504822f, 0.6572733521461487f, +0.04783650487661362f, 0.5987495183944702f, 0.1944047510623932f, 0.3482910990715027f, 0.8989143371582031f, 0.10586327314376831f, 0.16384926438331604f, 0.6531624794006348f, +0.9626067280769348f, 0.05466204136610031f, 0.7020445466041565f, 0.0931597426533699f, 0.08224229514598846f, 0.43506717681884766f, 0.6700360774993896f, 0.8793132305145264f, +0.9773428440093994f, 0.8238548636436462f, 0.6083353161811829f, 0.7263290286064148f, 0.9933424592018127f, 0.09167159348726273f, 0.7574949860572815f, 0.5680955052375793f, +0.893237292766571f, 0.3593143820762634f, 0.20340187847614288f, 0.3610815107822418f, 0.10978399217128754f, 0.07883092015981674f, 0.25333961844444275f, 0.37020984292030334f, +0.9262658357620239f, 0.5264632105827332f, 0.9011409878730774f, 0.08513419330120087f, 0.863746166229248f, 0.15915429592132568f, 0.12369116395711899f, 0.1546015739440918f, +0.934124767780304f, 0.36756813526153564f, 0.5346865057945251f, 0.24592317640781403f, 0.5178475379943848f, 0.036275263875722885f, 0.570976972579956f, 0.3913310468196869f, +0.39770805835723877f, 0.6691051721572876f, 0.7459820508956909f, 0.459006667137146f, 0.3628813922405243f, 0.5844622850418091f, 0.17415742576122284f, 0.19588585197925568f, +0.8573251962661743f, 0.3950466811656952f, 0.24943341314792633f, 0.966732919216156f, 0.7262531518936157f, 0.16992756724357605f, 0.6745694875717163f, 0.7156274914741516f, +0.08475309610366821f, 0.11699627339839935f, 0.3178330957889557f, 0.38254424929618835f, 0.30228617787361145f, 0.5750757455825806f, 0.8528327941894531f, 0.04277584329247475f, +0.9380794167518616f, 0.5833346247673035f, 0.18142546713352203f, 0.10393363237380981f, 0.36557722091674805f, 0.930534839630127f, 0.3679130971431732f, 0.7766725420951843f, +0.7280730605125427f, 0.01974550075829029f, 0.8717384934425354f, 0.979210376739502f, 0.9113878607749939f, 0.9263419508934021f, 0.9936822056770325f, 0.34559276700019836f, +0.4462892413139343f, 0.015945930033922195f, 0.14451131224632263f, 0.43857547640800476f, 0.5189041495323181f, 0.719301700592041f, 0.8416227698326111f, 0.07512795180082321f, +0.12154418975114822f, 0.4710143804550171f, 0.019861111417412758f, 0.46379274129867554f, 0.3670288622379303f, 0.22313331067562103f, 0.7694295048713684f, 0.9533361196517944f, +0.9550142288208008f, 0.3818299472332001f, 0.9345715641975403f, 0.949793815612793f, 0.6526310443878174f, 0.523160994052887f, 0.7987882494926453f, 0.08037971705198288f, +0.8454010486602783f, 0.4725438058376312f, 0.5269051194190979f, 0.5741038918495178f, 0.5789977312088013f, 0.28887778520584106f, 0.6901552081108093f, 0.25861626863479614f, +0.5648419260978699f, 0.4173499345779419f, 0.46498939394950867f, 0.8157679438591003f, 0.7249428629875183f, 0.9216979742050171f, 0.45182517170906067f, 0.20226873457431793f, +0.46096259355545044f, 0.5383614897727966f, 0.6907527446746826f, 0.46322134137153625f, 0.32727712392807007f, 0.18355444073677063f, 0.6636332273483276f, 0.48052293062210083f, +0.9536860585212708f, 0.2487017661333084f, 0.3677400052547455f, 0.7476263046264648f, 0.6975071430206299f, 0.6626871824264526f, 0.3714176118373871f, 0.28342926502227783f, +0.9320542812347412f, 0.8966355323791504f, 0.6720280647277832f, 0.6861220598220825f, 0.22036685049533844f, 0.7358630895614624f, 0.36843371391296387f, 0.1870514154434204f, +0.3409642279148102f, 0.3782327473163605f, 0.5203996896743774f, 0.7899832129478455f, 0.15949252247810364f, 0.9061360359191895f, 0.7288281321525574f, 0.917802095413208f, +0.38318535685539246f, 0.3401845097541809f, 0.5973889231681824f, 0.10756220668554306f, 0.682956337928772f, 0.15252543985843658f, 0.34037333726882935f, 0.5809358954429626f, +0.30781349539756775f, 0.04664599895477295f, 0.6548880338668823f, 0.9814667105674744f, 0.5200088620185852f, 0.6724210381507874f, 0.11685099452733994f, 0.026335498318076134f, +0.3428601920604706f, 0.811578094959259f, 0.15760193765163422f, 0.3160771131515503f, 0.36428210139274597f, 0.5397879481315613f, 0.5873528718948364f, 0.9470418691635132f, +0.4069148898124695f, 0.21268656849861145f, 0.023120246827602386f, 0.12909185886383057f, 0.25779011845588684f, 0.06908193975687027f, 0.9646469354629517f, 0.05043894425034523f, +0.7209428548812866f, 0.2337961196899414f, 0.6962738037109375f, 0.09079000353813171f, 0.02675354667007923f, 0.157928004860878f, 0.1274791806936264f, 0.03670159727334976f, +0.9912242889404297f, 0.6185291409492493f, 0.23649834096431732f, 0.6871291995048523f, 0.5091373920440674f, 0.8604987263679504f, 0.948204517364502f, 0.7843597531318665f, +0.3378441035747528f, 0.08353811502456665f, 0.8735753297805786f, 0.9511599540710449f, 0.38584962487220764f, 0.5801587104797363f, 0.9684303402900696f, 0.0825364887714386f, +0.10083726048469543f, 0.4632684290409088f, 0.0503988191485405f, 0.5650115013122559f, 0.8924956321716309f, 0.5715227127075195f, 0.3276626169681549f, 0.12169047445058823f, +0.10700491070747375f, 0.5798882246017456f, 0.49909302592277527f, 0.9816557168960571f, 0.7760840654373169f, 0.8201953172683716f, 0.5248595476150513f, 0.2933362126350403f, +0.3653492331504822f, 0.673714280128479f, 0.8590591549873352f, 0.2435264140367508f, 0.1820041686296463f, 0.7603379487991333f, 0.9223947525024414f, 0.2976189851760864f, +0.8231931328773499f, 0.9717633128166199f, 0.1527881771326065f, 0.8572736382484436f, 0.6376819610595703f, 0.5742033123970032f, 0.16262932121753693f, 0.40804624557495117f, +0.26261600852012634f, 0.7513774633407593f, 0.9548883438110352f, 0.9449247717857361f, 0.14985346794128418f, 0.48419368267059326f, 0.4555070698261261f, 0.0077447243966162205f, +0.21917688846588135f, 0.5557618141174316f, 0.06720542162656784f, 0.6733049154281616f, 0.6958056092262268f, 0.3709907531738281f, 0.6572045087814331f, 0.2887066602706909f, +0.8280749320983887f, 0.7561812996864319f, 0.4895867109298706f, 0.007925248704850674f, 0.6539292335510254f, 0.7691933512687683f, 0.67494136095047f, 0.14761364459991455f, +0.2783573567867279f, 0.4686932861804962f, 0.2124679982662201f, 0.4944491684436798f, 0.01686178520321846f, 0.5363098978996277f, 0.5082172155380249f, 0.4369114935398102f, +0.3474882245063782f, 0.5160895586013794f, 0.8450490236282349f, 0.9113929867744446f, 0.6912066340446472f, 0.6850122809410095f, 0.9965628385543823f, 0.07800524681806564f, +0.5018560886383057f, 0.11016709357500076f, 0.041385021060705185f, 0.12633836269378662f, 0.5262442827224731f, 0.2816285789012909f, 0.9388906955718994f, 0.4156152904033661f, +0.9618091583251953f, 0.7870112061500549f, 0.24137389659881592f, 0.23788923025131226f, 0.7203952074050903f, 0.5082002878189087f, 0.964799165725708f, 0.14567524194717407f, +0.5128884315490723f, 0.809697151184082f, 0.14907045662403107f, 0.28702735900878906f, 0.9894312620162964f, 0.07854948192834854f, 0.1071736067533493f, 0.6914005875587463f, +0.09840204566717148f, 0.16470688581466675f, 0.7275229096412659f, 0.20324760675430298f, 0.10995108634233475f, 0.8394739031791687f, 0.08558216691017151f, 0.4961884617805481f, +0.2164430022239685f, 0.8349753022193909f, 0.804892897605896f, 0.2619834542274475f, 0.2559952139854431f, 0.07753611356019974f, 0.3737407922744751f, 0.7006453275680542f, +0.13683409988880157f, 0.9991135597229004f, 0.6432271003723145f, 0.49450021982192993f, 0.24358178675174713f, 0.38438987731933594f, 0.793343722820282f, 0.19939474761486053f, +0.03475191444158554f, 0.7689857482910156f, 0.29206356406211853f, 0.014067474752664566f, 0.9677929282188416f, 0.0179707370698452f, 0.47464171051979065f, 0.4032948911190033f, +0.3237287402153015f, 0.31309932470321655f, 0.7187210917472839f, 0.04445737972855568f, 0.9397051930427551f, 0.46593397855758667f, 0.9509856700897217f, 0.7235790491104126f, +0.3640342950820923f, 0.4025927782058716f, 0.7125635147094727f, 0.036090947687625885f, 0.32503026723861694f, 0.6239899396896362f, 0.2219102531671524f, 0.8407334685325623f, +0.1623571664094925f, 0.2719685137271881f, 0.7611007690429688f, 0.9917917847633362f, 0.6731760501861572f, 0.5179622173309326f, 0.9140809178352356f, 0.8363737463951111f, +0.6283339262008667f, 0.015213527716696262f, 0.6237291097640991f, 0.7337059378623962f, 0.7631626129150391f, 0.8842177987098694f, 0.8241905570030212f, 0.01042654737830162f, +0.04073511064052582f, 0.851584792137146f, 0.5743383169174194f, 0.920632541179657f, 0.07864301651716232f, 0.11139173805713654f, 0.5165722966194153f, 0.5821059942245483f, +0.42405638098716736f, 0.43524491786956787f, 0.002327493391931057f, 0.9423938393592834f, 0.8933197259902954f, 0.50345379114151f, 0.13134092092514038f, 0.03256580978631973f, +0.7489518523216248f, 0.5611950159072876f, 0.3083365559577942f, 0.9251125454902649f, 0.6961314678192139f, 0.27952101826667786f, 0.3092057406902313f, 0.4636193513870239f, +0.8015255331993103f, 0.5078799724578857f, 0.5610325336456299f, 0.5517920851707458f, 0.583707332611084f, 0.8614058494567871f, 0.43705886602401733f, 0.25516533851623535f, +0.9982225894927979f, 0.8247429132461548f, 0.09255887567996979f, 0.9182067513465881f, 0.9565734267234802f, 0.42055341601371765f, 0.5832176804542542f, 0.8309271931648254f, +0.9010401368141174f, 0.1657421588897705f, 0.056237250566482544f, 0.3626226484775543f, 0.5938571095466614f, 0.103876493871212f, 0.07947014272212982f, 0.6119602918624878f, +0.7080764770507812f, 0.22917523980140686f, 0.6558681726455688f, 0.17689481377601624f, 0.3198329210281372f, 0.981334388256073f, 0.9192710518836975f, 0.346921443939209f, +0.2448299378156662f, 0.6245225071907043f, 0.8612201809883118f, 0.06232438236474991f, 0.17057591676712036f, 0.038848377764225006f, 0.035363368690013885f, 0.9078094363212585f, +0.021584121510386467f, 0.8863641023635864f, 0.3811509311199188f, 0.9669645428657532f, 0.3673817813396454f, 0.36070558428764343f, 0.40629151463508606f, 0.5323919057846069f, +0.2749864161014557f, 0.47716081142425537f, 0.7435001730918884f, 0.5386732220649719f, 0.035394202917814255f, 0.023497581481933594f, 0.058184269815683365f, 0.16094434261322021f, +0.8361648917198181f, 0.4238731563091278f, 0.6551564931869507f, 0.573240339756012f, 0.42297035455703735f, 0.13881973922252655f, 0.5460287928581238f, 0.8657719492912292f, +0.7219069600105286f, 0.6357828378677368f, 0.7597285509109497f, 0.05505925416946411f, 0.043684449046850204f, 0.48854154348373413f, 0.08985696732997894f, 0.1671317219734192f, +0.6203793287277222f, 0.29668909311294556f, 0.37436410784721375f, 0.6093950867652893f, 0.41790148615837097f, 0.9436718225479126f, 0.09663762897253036f, 0.3057214319705963f, +0.1853148192167282f, 0.5411760807037354f, 0.1760275661945343f, 0.05512020364403725f, 0.8730118274688721f, 0.8077052235603333f, 0.5182381868362427f, 0.4464779496192932f, +0.399064838886261f, 0.28219154477119446f, 0.8993975520133972f, 0.6258983612060547f, 0.008892464451491833f, 0.755934476852417f, 0.351035475730896f, 0.7982578873634338f, +0.13290603458881378f, 0.6853673458099365f, 0.5297993421554565f, 0.5657583475112915f, 0.9940822720527649f, 0.3831906020641327f, 0.2738570272922516f, 0.8132495880126953f, +0.47251594066619873f, 0.4480907917022705f, 0.7092936038970947f, 0.7492340207099915f, 0.40730994939804077f, 0.8672156929969788f, 0.5787542462348938f, 0.8884903192520142f, +0.06013372913002968f, 0.5178620219230652f, 0.42524346709251404f, 0.8048490881919861f, 0.6339240670204163f, 0.01079569198191166f, 0.4893714189529419f, 0.24469846487045288f, +0.6327950954437256f, 0.8218230605125427f, 0.8207972645759583f, 0.3336487412452698f, 0.4593111276626587f, 0.03072393499314785f, 0.5913267135620117f, 0.8600824475288391f, +0.6019376516342163f, 0.7396206855773926f, 0.5942234396934509f, 0.8758151531219482f, 0.6558181047439575f, 0.32226473093032837f, 0.9353155493736267f, 0.956195592880249f, +0.5369265079498291f, 0.7149597406387329f, 0.5853279829025269f, 0.30953463912010193f, 0.07993520796298981f, 0.7108910083770752f, 0.8277974128723145f, 0.3143633306026459f, +0.2550690174102783f, 0.6533227562904358f, 0.14349713921546936f, 0.6964913010597229f, 0.7853599190711975f, 0.2850463390350342f, 0.3714907765388489f, 0.5137249827384949f, +0.7500565648078918f, 0.5836462378501892f, 0.7581977844238281f, 0.7112277150154114f, 0.8407976627349854f, 0.4273443818092346f, 0.6589823365211487f, 0.24819476902484894f, +0.5869380831718445f, 0.40503227710723877f, 0.6353170871734619f, 0.1042579784989357f, 0.8574079871177673f, 0.595026433467865f, 0.6638342142105103f, 0.5086881518363953f, +0.8645468950271606f, 0.1846165657043457f, 0.7781116962432861f, 0.5309751033782959f, 0.187907874584198f, 0.39550113677978516f, 0.15358658134937286f, 0.08069047331809998f, +0.7315266132354736f, 0.6910072565078735f, 0.6367267966270447f, 0.06856873631477356f, 0.989578127861023f, 0.030087711289525032f, 0.36327773332595825f, 0.2985922396183014f, +0.9306514859199524f, 0.6290112137794495f, 0.5385008454322815f, 0.03613157197833061f, 0.16706427931785583f, 0.446208119392395f, 0.5294972658157349f, 0.03992445394396782f, +0.8095602989196777f, 0.1694285273551941f, 0.42402130365371704f, 0.06621649116277695f, 0.2632233798503876f, 0.9587469100952148f, 0.4354529082775116f, 0.3195329010486603f, +0.8095452189445496f, 0.004188301507383585f, 0.5596587061882019f, 0.152929425239563f, 0.2880631983280182f, 0.9781356453895569f, 0.11568181961774826f, 0.28057950735092163f, +0.8692836165428162f, 0.008277051150798798f, 0.8335809111595154f, 0.0033330887090414762f, 0.753945529460907f, 0.3451564311981201f, 0.29611900448799133f, 0.36618268489837646f, +0.28993016481399536f, 0.3983887732028961f, 0.8511261343955994f, 0.4160894453525543f, 0.8479738831520081f, 0.8276199698448181f, 0.46884825825691223f, 0.8339059948921204f, +0.19785600900650024f, 0.40755075216293335f, 0.3864762485027313f, 0.49344688653945923f, 0.1327676624059677f, 0.8684574365615845f, 0.20447951555252075f, 0.9783039689064026f, +0.5072811245918274f, 0.5701789855957031f, 0.03991365805268288f, 0.5767472982406616f, 0.6066148281097412f, 0.6417751908302307f, 0.5817533135414124f, 0.8908191919326782f, +0.6160405278205872f, 0.25044190883636475f, 0.9106303453445435f, 0.1229173094034195f, 0.9629696607589722f, 0.9581865668296814f, 0.17883668839931488f, 0.5648040175437927f, +0.9955464005470276f, 0.5347766280174255f, 0.1453096568584442f, 0.541915774345398f, 0.005385738797485828f, 0.06923667341470718f, 0.46762901544570923f, 0.9104759097099304f, +0.8131183385848999f, 0.31016671657562256f, 0.7450246810913086f, 0.8541684746742249f, 0.3995538353919983f, 0.720149040222168f, 0.7066617608070374f, 0.03054000437259674f, +0.8352057933807373f, 0.40925344824790955f, 0.5321799516677856f, 0.4080974757671356f, 0.9312665462493896f, 0.10604427009820938f, 0.9900105595588684f, 0.843613862991333f, +0.3097416162490845f, 0.8215510845184326f, 0.4663882553577423f, 0.6073383688926697f, 0.342715322971344f, 0.3174467384815216f, 0.6454222798347473f, 0.6262491941452026f, +0.22658133506774902f, 0.5091012716293335f, 0.0319104827940464f, 0.26395219564437866f, 0.935294508934021f, 0.15488725900650024f, 0.5018302798271179f, 0.630538284778595f, +0.7533600926399231f, 0.7265266180038452f, 0.6476641297340393f, 0.41852012276649475f, 0.8390586972236633f, 0.31898778676986694f, 0.04579818993806839f, 0.045634038746356964f, +0.09207208454608917f, 0.23606792092323303f, 0.16338127851486206f, 0.7673648595809937f, 0.03556381165981293f, 0.6781521439552307f, 0.5059640407562256f, 0.23397296667099f, +0.9417804479598999f, 0.3987676799297333f, 0.5365005135536194f, 0.8669267892837524f, 0.15011587738990784f, 0.1295343041419983f, 0.295058012008667f, 0.7370127439498901f, +0.6203159093856812f, 0.12966182827949524f, 0.7129448056221008f, 0.004038085229694843f, 0.6235306262969971f, 0.33255526423454285f, 0.06752392649650574f, 0.2573474049568176f, +0.8027192950248718f, 0.4613279700279236f, 0.27806901931762695f, 0.22760041058063507f, 0.38335782289505005f, 0.8143102526664734f, 0.4788471758365631f, 0.408031702041626f, +0.3920114040374756f, 0.5786086320877075f, 0.42142078280448914f, 0.07340990006923676f, 0.06595417112112045f, 0.5884991884231567f, 0.2174822837114334f, 0.4315519332885742f, +0.8619025349617004f, 0.4414479732513428f, 0.4089498817920685f, 0.8691167235374451f, 0.7729117274284363f, 0.2839664816856384f, 0.5464566349983215f, 0.7981524467468262f, +0.2485545426607132f, 0.019006023183465004f, 0.8161908984184265f, 0.3318066895008087f, 0.45619073510169983f, 0.09200038760900497f, 0.33333826065063477f, 0.6411334872245789f, +0.5084690451622009f, 0.8616982698440552f, 0.46802252531051636f, 0.8392528891563416f, 0.09686115384101868f, 0.657860279083252f, 0.44151487946510315f, 0.9101101160049438f, +0.18422408401966095f, 0.6499603390693665f, 0.03232225775718689f, 0.4938910901546478f, 0.7979732155799866f, 0.0810278132557869f, 0.3783728778362274f, 0.2568538188934326f, +0.6203891634941101f, 0.08352901041507721f, 0.8518289923667908f, 0.4422295093536377f, 0.7173213362693787f, 0.9649056196212769f, 0.8918251991271973f, 0.43014371395111084f, +0.31346479058265686f, 0.5914687514305115f, 0.7310128808021545f, 0.27511268854141235f, 0.40381768345832825f, 0.5965587496757507f, 0.20262978971004486f, 0.8840353488922119f, +0.8556353449821472f, 0.9684962630271912f, 0.4309908449649811f, 0.6590073704719543f, 0.17757229506969452f, 0.5114563703536987f, 0.4917415976524353f, 0.5535287261009216f, +0.3426435887813568f, 0.7557920217514038f, 0.6606401205062866f, 0.30005425214767456f, 0.7229439616203308f, 0.2572927474975586f, 0.14345350861549377f, 0.907598614692688f, +0.9873174428939819f, 0.580206573009491f, 0.8819021582603455f, 0.13909727334976196f, 0.029848629608750343f, 0.686021089553833f, 0.17774075269699097f, 0.7450459599494934f, +0.2569354474544525f, 0.8351953029632568f, 0.6187970042228699f, 0.1731952428817749f, 0.6771947741508484f, 0.1579369306564331f, 0.1913468986749649f, 0.6243929862976074f, +0.3820827305316925f, 0.6608994007110596f, 0.33608487248420715f, 0.20823904871940613f, 0.5206336379051208f, 0.8024721741676331f, 0.8660778999328613f, 0.4154505729675293f, +0.9159260988235474f, 0.6125186681747437f, 0.5114850401878357f, 0.8648240566253662f, 0.7683377265930176f, 0.5226654410362244f, 0.357869029045105f, 0.44060051441192627f, +0.5284935235977173f, 0.2178288698196411f, 0.5650953650474548f, 0.8388622403144836f, 0.09691374003887177f, 0.5826603770256042f, 0.0967312678694725f, 0.2566756308078766f, +0.9150639176368713f, 0.0819472074508667f, 0.1940140724182129f, 0.8006022572517395f, 0.7181276082992554f, 0.6273919343948364f, 0.2699277698993683f, 0.693295419216156f, +0.6076579093933105f, 0.6425363421440125f, 0.030435558408498764f, 0.8859351277351379f, 0.004655599128454924f, 0.7185767292976379f, 0.3496748208999634f, 0.5468084812164307f, +0.3772006630897522f, 0.3083566427230835f, 0.978841245174408f, 0.25531792640686035f, 0.8684549927711487f, 0.2354462891817093f, 0.8525858521461487f, 0.7390661239624023f, +0.08139216899871826f, 0.964652419090271f, 0.6593028903007507f, 0.9215630292892456f, 0.4140201210975647f, 0.457830548286438f, 0.7455326318740845f, 0.9000779390335083f, +0.6730058789253235f, 0.4409474730491638f, 0.7770770192146301f, 0.6751492023468018f, 0.5132147073745728f, 0.06514368951320648f, 0.693218469619751f, 0.34963831305503845f, +0.18634915351867676f, 0.09073060005903244f, 0.8503032922744751f, 0.7336671352386475f, 0.631583571434021f, 0.8453983664512634f, 0.07675538212060928f, 0.2773713171482086f, +0.8153941631317139f, 0.6405200958251953f, 0.6137471199035645f, 0.8268430233001709f, 0.3912840485572815f, 0.49360841512680054f, 0.6047500967979431f, 0.09428258240222931f, +0.8206762671470642f, 0.36079415678977966f, 0.08530129492282867f, 0.4438689351081848f, 0.27955329418182373f, 0.9881277680397034f, 0.07284872233867645f, 0.4843429625034332f, +0.8940842747688293f, 0.20229081809520721f, 0.6042996048927307f, 0.7383556365966797f, 0.9543159604072571f, 0.9955739974975586f, 0.7962261438369751f, 0.09501729905605316f, +0.5505077242851257f, 0.29973912239074707f, 0.44741934537887573f, 0.23488466441631317f, 0.573201596736908f, 0.8620246052742004f, 0.6492069363594055f, 0.6846566200256348f, +0.9318141937255859f, 0.40173983573913574f, 0.6332918405532837f, 0.7167457342147827f, 0.4895903468132019f, 0.343450665473938f, 0.49915677309036255f, 0.4889249801635742f, +0.7374246716499329f, 0.4567285478115082f, 0.9602248072624207f, 0.2056027501821518f, 0.15280641615390778f, 0.41134828329086304f, 0.7706488370895386f, 0.3365615904331207f, +0.8495153784751892f, 0.9404517412185669f, 0.3322761654853821f, 0.19205932319164276f, 0.47775784134864807f, 0.4931354522705078f, 0.5366388559341431f, 0.4125850200653076f, +0.13694554567337036f, 0.38198670744895935f, 0.9328906536102295f, 0.25861653685569763f, 0.39843279123306274f, 0.9953756928443909f, 0.7587354779243469f, 0.7151719927787781f, +0.44524624943733215f, 0.6350484490394592f, 0.2149694263935089f, 0.47492706775665283f, 0.7814738154411316f, 0.4385691285133362f, 0.1143328920006752f, 0.9365313649177551f, +0.8439844846725464f, 0.3243440091609955f, 0.1699761152267456f, 0.23061510920524597f, 0.8724352121353149f, 0.8425463438034058f, 0.4118535816669464f, 0.21768157184123993f, +0.4317726492881775f, 0.9771653413772583f, 0.3451952338218689f, 0.24800778925418854f, 0.5371003150939941f, 0.4660133123397827f, 0.6473106741905212f, 0.28234001994132996f, +0.044027410447597504f, 0.873559832572937f, 0.612707793712616f, 0.4916096329689026f, 0.041675545275211334f, 0.42572563886642456f, 0.4506150782108307f, 0.5888721942901611f, +0.09843311458826065f, 0.2752680778503418f, 0.5279374718666077f, 0.23582035303115845f, 0.35575321316719055f, 0.981088399887085f, 0.7610732316970825f, 0.9455270171165466f, +0.03381222113966942f, 0.33809641003608704f, 0.25704696774482727f, 0.19432397186756134f, 0.7981923222541809f, 0.7488216757774353f, 0.6732786893844604f, 0.4045684337615967f, +0.9115123152732849f, 0.8893822431564331f, 0.3915926516056061f, 0.3256974518299103f, 0.020023971796035767f, 0.033152248710393906f, 0.6557334661483765f, 0.49898189306259155f, +0.3825543522834778f, 0.8233612775802612f, 0.04615294560790062f, 0.9260727167129517f, 0.7296820878982544f, 0.9337559938430786f, 0.8397743105888367f, 0.9834030270576477f, +0.8599247336387634f, 0.9792895317077637f, 0.08220771700143814f, 0.12261144071817398f, 0.1502351611852646f, 0.5750548243522644f, 0.6668426990509033f, 0.9840387105941772f, +0.6688019037246704f, 0.8528687357902527f, 0.5380674600601196f, 0.013179032132029533f, 0.5835694670677185f, 0.997993528842926f, 0.9252545237541199f, 0.3670775294303894f, +0.7266075611114502f, 0.6969476938247681f, 0.05109557881951332f, 0.9275750517845154f, 0.22848330438137054f, 0.14355240762233734f, 0.844386637210846f, 0.014828985556960106f, +0.02549469843506813f, 0.7883356213569641f, 0.3474053740501404f, 0.13603541254997253f, 0.027357175946235657f, 0.565761387348175f, 0.13401363790035248f, 0.0960962325334549f, +0.2958148121833801f, 0.40797728300094604f, 0.14104805886745453f, 0.7030057907104492f, 0.828317403793335f, 0.7892536520957947f, 0.9677333831787109f, 0.9223495721817017f, +0.30233076214790344f, 0.376327782869339f, 0.9090990424156189f, 0.04138318449258804f, 0.6699589490890503f, 0.7156184315681458f, 0.9952136874198914f, 0.4237346649169922f, +0.3830633759498596f, 0.9480306506156921f, 0.2922641932964325f, 0.5060248970985413f, 0.2198827862739563f, 0.36010709404945374f, 0.012618286535143852f, 0.28446322679519653f, +0.8453727960586548f, 0.2690747082233429f, 0.10165783762931824f, 0.910050094127655f, 0.4973866939544678f, 0.11752329766750336f, 0.10572567582130432f, 0.718950629234314f, +0.686555027961731f, 0.5152896642684937f, 0.4477459192276001f, 0.340131938457489f, 0.8158649802207947f, 0.9458644390106201f, 0.41645547747612f, 0.3937780559062958f, +0.24939170479774475f, 0.6684609651565552f, 0.3652074337005615f, 0.6793227791786194f, 0.4731096029281616f, 0.7480837106704712f, 0.06071494519710541f, 0.7758261561393738f, +0.9412553906440735f, 0.38392552733421326f, 0.6147660613059998f, 0.1482921987771988f, 0.8223103880882263f, 0.5087275505065918f, 0.6711465716362f, 0.5655121207237244f, +0.14790743589401245f, 0.4499753415584564f, 0.020346280187368393f, 0.9840866327285767f, 0.5078645944595337f, 0.5952122211456299f, 0.40953177213668823f, 0.8753945827484131f, +0.9331981539726257f, 0.5874833464622498f, 0.23154956102371216f, 0.6696971654891968f, 0.9502584338188171f, 0.8432057499885559f, 0.4295211434364319f, 0.6285157203674316f, +0.12678468227386475f, 0.9242821335792542f, 0.04759030416607857f, 0.23497746884822845f, 0.1687064915895462f, 0.7594125270843506f, 0.7041102051734924f, 0.4713467061519623f, +0.45711472630500793f, 0.5046074986457825f, 0.5477257370948792f, 0.7425950765609741f, 0.7374889850616455f, 0.6443914771080017f, 0.8028759956359863f, 0.9377401471138f, +0.9503666758537292f, 0.44410836696624756f, 0.5476207733154297f, 0.39001157879829407f, 0.12151726335287094f, 0.843457043170929f, 0.5619527101516724f, 0.6016311049461365f, +0.8652631044387817f, 0.9712691307067871f, 0.6321903467178345f, 0.12890803813934326f, 0.16462205350399017f, 0.3660728633403778f, 0.9905378818511963f, 0.4088961184024811f, +0.18210864067077637f, 0.3752565085887909f, 0.27586400508880615f, 0.9161996841430664f, 0.9368333220481873f, 0.32567211985588074f, 0.14462339878082275f, 0.870373010635376f, +0.2567906677722931f, 0.26624351739883423f, 0.5600040555000305f, 0.9667791128158569f, 0.647666871547699f, 0.3848077356815338f, 0.5635318160057068f, 0.9811528325080872f, +0.9795542359352112f, 0.7551512122154236f, 0.9262166619300842f, 0.24848774075508118f, 0.6176735162734985f, 0.5082674026489258f, 0.4550871253013611f, 0.0017186589539051056f, +0.9238222241401672f, 0.857769787311554f, 0.4092034697532654f, 0.9329676032066345f, 0.29650670289993286f, 0.4228384494781494f, 0.14349651336669922f, 0.8966846466064453f, +0.26619529724121094f, 0.5248494744300842f, 0.17940303683280945f, 0.6897193193435669f, 0.5811992287635803f, 0.18835952877998352f, 0.30841538310050964f, 0.8430464267730713f, +0.6633108854293823f, 0.027997074648737907f, 0.35901954770088196f, 0.38765883445739746f, 0.7822633981704712f, 0.17196163535118103f, 0.4349079430103302f, 0.9532802104949951f, +0.3656238317489624f, 0.8056285381317139f, 0.4023022949695587f, 0.5188239216804504f, 0.08834047615528107f, 0.4283314645290375f, 0.6889843344688416f, 0.46032917499542236f, +0.48473408818244934f, 0.3598054051399231f, 0.20530903339385986f, 0.9024220108985901f, 0.5869323015213013f, 0.49413976073265076f, 0.579652726650238f, 0.2731660008430481f, +0.29962992668151855f, 0.21262188255786896f, 0.4203774034976959f, 0.9976848363876343f, 0.08240877091884613f, 0.452985018491745f, 0.16103139519691467f, 0.7076653838157654f, +0.6797041296958923f, 0.030659900978207588f, 0.7214644551277161f, 0.6992015838623047f, 0.437028169631958f, 0.5873903036117554f, 0.49870842695236206f, 0.8265390992164612f, +0.16844508051872253f, 0.6773028373718262f, 0.9644144177436829f, 0.08944718539714813f, 0.9546667337417603f, 0.09533591568470001f, 0.37018486857414246f, 0.6342716813087463f, +0.04851317033171654f, 0.43860945105552673f, 0.7451298832893372f, 0.6263648867607117f, 0.5096325278282166f, 0.19047357141971588f, 0.24934819340705872f, 0.9042690396308899f, +0.02492043562233448f, 0.19026631116867065f, 0.1929493248462677f, 0.10513588786125183f, 0.6173728704452515f, 0.9187978506088257f, 0.745195746421814f, 0.5843327641487122f, +0.3546556532382965f, 0.39778080582618713f, 0.21065998077392578f, 0.003571445355191827f, 0.18724414706230164f, 0.6054643988609314f, 0.7072094082832336f, 0.19061905145645142f, +0.567924439907074f, 0.26690298318862915f, 0.193197563290596f, 0.6492878198623657f, 0.009201975539326668f, 0.9991967678070068f, 0.6541296243667603f, 0.40925881266593933f, +0.6892213821411133f, 0.7258977890014648f, 0.24618175625801086f, 0.6230909824371338f, 0.5900692939758301f, 0.8866453170776367f, 0.2922132611274719f, 0.54243004322052f, +0.1238737627863884f, 0.5210744142532349f, 0.14012886583805084f, 0.13491763174533844f, 0.7695505619049072f, 0.5619688630104065f, 0.47135311365127563f, 0.8427259922027588f, +0.09456643462181091f, 0.3817180097103119f, 0.227951318025589f, 0.0975155383348465f, 0.7872061729431152f, 0.43129244446754456f, 0.35992810130119324f, 0.5698361992835999f, +0.10717564076185226f, 0.5346404910087585f, 0.7163136005401611f, 0.5116448402404785f, 0.18227136135101318f, 0.29951855540275574f, 0.2086554765701294f, 0.9703963994979858f, +0.9025452136993408f, 0.2556431293487549f, 0.04812046140432358f, 0.9343152046203613f, 0.25556641817092896f, 0.19369260966777802f, 0.4817003011703491f, 0.4032602310180664f, +0.41811883449554443f, 0.23562785983085632f, 0.3699010908603668f, 0.553666353225708f, 0.500874936580658f, 0.020766831934452057f, 0.3058857023715973f, 0.4355584979057312f, +0.7847687005996704f, 0.338707834482193f, 0.0793912410736084f, 0.6032118797302246f, 0.8473798036575317f, 0.4854852259159088f, 0.01562913879752159f, 0.8972524404525757f, +0.2848634719848633f, 0.06968799978494644f, 0.4894583225250244f, 0.27574625611305237f, 0.47017577290534973f, 0.35992559790611267f, 0.15814006328582764f, 0.7123738527297974f, +0.7940488457679749f, 0.7155424356460571f, 0.2134842574596405f, 0.5987862348556519f, 0.7853646874427795f, 0.051086846739053726f, 0.49046632647514343f, 0.1973547637462616f, +0.5528591871261597f, 0.5206928253173828f, 0.5921162366867065f, 0.059524569660425186f, 0.5717939138412476f, 0.6253294944763184f, 0.22378019988536835f, 0.8278894424438477f, +0.646213173866272f, 0.9777218103408813f, 0.5024810433387756f, 0.047509968280792236f, 0.8804755210876465f, 0.8141072988510132f, 0.3194723427295685f, 0.06454712897539139f, +0.6665217280387878f, 0.8225351572036743f, 0.1895831823348999f, 0.42601776123046875f, 0.4739382565021515f, 0.6053363084793091f, 0.35705551505088806f, 0.14765116572380066f, +0.761991024017334f, 0.7270752787590027f, 0.46449902653694153f, 0.07541564106941223f, 0.17971761524677277f, 0.5297791957855225f, 0.5530514121055603f, 0.8784781098365784f, +0.9111239910125732f, 0.2166677713394165f, 0.8460136651992798f, 0.8840638995170593f, 0.21377554535865784f, 0.14306823909282684f, 0.5240922570228577f, 0.8152891397476196f, +0.33443543314933777f, 0.004651273135095835f, 0.41377025842666626f, 0.7874172925949097f, 0.2410653978586197f, 0.5896340012550354f, 0.43245548009872437f, 0.6603100299835205f, +0.227731853723526f, 0.9444952607154846f, 0.12372398376464844f, 0.24967683851718903f, 0.3212614357471466f, 0.9952637553215027f, 0.12214218080043793f, 0.31375229358673096f, +0.37030813097953796f, 0.9224810004234314f, 0.8475870490074158f, 0.3657020628452301f, 0.8212537169456482f, 0.6418882608413696f, 0.2579200565814972f, 0.773076593875885f, +0.03168584033846855f, 0.6302703022956848f, 0.07705305516719818f, 0.27894723415374756f, 0.9991269707679749f, 0.18684275448322296f, 0.49031487107276917f, 0.557786226272583f, +0.12478535622358322f, 0.18925678730010986f, 0.39605584740638733f, 0.3818759024143219f, 0.805030882358551f, 0.6157228350639343f, 0.09014319628477097f, 0.2768011689186096f, +0.3612124025821686f, 0.9110502004623413f, 0.35048922896385193f, 0.19694383442401886f, 0.9075772762298584f, 0.8009371161460876f, 0.5952638983726501f, 0.7712147235870361f, +0.6806657314300537f, 0.884647011756897f, 0.602588415145874f, 0.6697497963905334f, 0.3303036093711853f, 0.6204453110694885f, 0.4163973927497864f, 0.09683799743652344f, +0.8450637459754944f, 0.7015509605407715f, 0.009022468701004982f, 0.5581763982772827f, 0.942035973072052f, 0.03156647831201553f, 0.06230742856860161f, 0.35507920384407043f, +0.09305247664451599f, 0.38375821709632874f, 0.9611042737960815f, 0.23746274411678314f, 0.9536464214324951f, 0.11205710470676422f, 0.2249448001384735f, 0.25318509340286255f, +0.2287224531173706f, 0.7796110510826111f, 0.14476007223129272f, 0.8350087404251099f, 0.7499152421951294f, 0.3952752351760864f, 0.33574429154396057f, 0.3402099013328552f, +0.08973445743322372f, 0.4076668918132782f, 0.08723858743906021f, 0.596921443939209f, 0.430490642786026f, 0.759307861328125f, 0.8198477029800415f, 0.0016387967625632882f, +0.861068844795227f, 0.4428532123565674f, 0.06727530807256699f, 0.35333287715911865f, 0.5503181219100952f, 0.9305813908576965f, 0.6237729787826538f, 0.7895531058311462f, +0.20863252878189087f, 0.5278217792510986f, 0.6023715734481812f, 0.2067151665687561f, 0.709719181060791f, 0.7608098983764648f, 0.2272564172744751f, 0.08758331835269928f, +0.6354442834854126f, 0.45812371373176575f, 0.8605117201805115f, 0.1257534772157669f, 0.27485910058021545f, 0.7629145979881287f, 0.4700362980365753f, 0.9277548789978027f, +0.06834074854850769f, 0.8316466808319092f, 0.6762939691543579f, 0.6695857048034668f, 0.05739183351397514f, 0.8766545057296753f, 0.4855664372444153f, 0.2284272015094757f, +0.7730681896209717f, 0.12758807837963104f, 0.3921012878417969f, 0.22506824135780334f, 0.012751098722219467f, 0.2119014412164688f, 0.127090185880661f, 0.10301806032657623f, +0.4093461334705353f, 0.7299976944923401f, 0.23863957822322845f, 0.30220192670822144f, 0.8406552672386169f, 0.49375906586647034f, 0.6471197605133057f, 0.3178248107433319f, +0.00498032895848155f, 0.03633435443043709f, 0.1019728034734726f, 0.25006231665611267f, 0.18796193599700928f, 0.33665066957473755f, 0.5178396701812744f, 0.05988053232431412f, +0.38537493348121643f, 0.4665834903717041f, 0.4936163127422333f, 0.781143844127655f, 0.7603862285614014f, 0.3342079818248749f, 0.28970593214035034f, 0.5812533497810364f, +0.7468873858451843f, 0.6634902954101562f, 0.7597251534461975f, 0.3262484669685364f, 0.38250279426574707f, 0.698506772518158f, 0.17513898015022278f, 0.3935869336128235f, +0.3075689971446991f, 0.07685162127017975f, 0.851015031337738f, 0.8477169275283813f, 0.5214725136756897f, 0.6913495063781738f, 0.7137263417243958f, 0.7222574353218079f, +0.568805992603302f, 0.8020893335342407f, 0.8078992366790771f, 0.7464096546173096f, 0.9139852523803711f, 0.10540846735239029f, 0.6082600951194763f, 0.6152072548866272f, +0.7508472800254822f, 0.6938042640686035f, 0.3760819435119629f, 0.6422790884971619f, 0.7901634573936462f, 0.773797869682312f, 0.5065876245498657f, 0.7659039497375488f, +0.6284306049346924f, 0.8533292412757874f, 0.41605186462402344f, 0.22831234335899353f, 0.4404436945915222f, 0.7047907114028931f, 0.8302577137947083f, 0.46832096576690674f, +0.15465416014194489f, 0.03724214807152748f, 0.5803340077400208f, 0.3126233220100403f, 0.4984820485115051f, 0.6608049273490906f, 0.08386661857366562f, 0.08177182078361511f, +0.17692312598228455f, 0.5749034285545349f, 0.16016720235347748f, 0.062137670814991f, 0.9325548410415649f, 0.21897652745246887f, 0.5511041283607483f, 0.9822200536727905f, +0.33382242918014526f, 0.2606654465198517f, 0.9454173445701599f, 0.6568217873573303f, 0.5445854663848877f, 0.8945003747940063f, 0.47526371479034424f, 0.750912070274353f, +0.21514378488063812f, 0.242791548371315f, 0.08641846477985382f, 0.6175581216812134f, 0.7702314853668213f, 0.6443010568618774f, 0.11775911599397659f, 0.6265606880187988f, +0.7440059185028076f, 0.755477786064148f, 0.348746657371521f, 0.7227867245674133f, 0.06246703490614891f, 0.3668910264968872f, 0.801277220249176f, 0.856941819190979f, +0.04777450114488602f, 0.20885838568210602f, 0.3463837802410126f, 0.7453016042709351f, 0.4338513910770416f, 0.22334307432174683f, 0.8930790424346924f, 0.06335262954235077f, +0.5603479743003845f, 0.6093140244483948f, 0.30574437975883484f, 0.3190944790840149f, 0.12256044149398804f, 0.4912371337413788f, 0.946010410785675f, 0.7207451462745667f, +0.2455330789089203f, 0.40561091899871826f, 0.9469804167747498f, 0.46227148175239563f, 0.5514028072357178f, 0.6743417978286743f, 0.27146804332733154f, 0.3146372139453888f, +0.9074419736862183f, 0.715146005153656f, 0.01484664436429739f, 0.3712964653968811f, 0.42668089270591736f, 0.1133752092719078f, 0.56899094581604f, 0.6409051418304443f, +0.5752043724060059f, 0.042544834315776825f, 0.9151741862297058f, 0.05750301480293274f, 0.82132887840271f, 0.720565915107727f, 0.4141711890697479f, 0.04631859436631203f, +0.9005511999130249f, 0.9898145794868469f, 0.2042560875415802f, 0.2733168303966522f, 0.8947914242744446f, 0.3727281391620636f, 0.9108739495277405f, 0.5247958302497864f, +0.4795185923576355f, 0.2124667465686798f, 0.09643155336380005f, 0.9041243195533752f, 0.16570819914340973f, 0.1350194215774536f, 0.9509334564208984f, 0.5642811059951782f, +0.7961574196815491f, 0.5643187761306763f, 0.8212574124336243f, 0.942865252494812f, 0.8000935912132263f, 0.38493284583091736f, 0.3531663715839386f, 0.707103431224823f, +0.8736405372619629f, 0.2505660355091095f, 0.46141761541366577f, 0.1797264665365219f, 0.42137473821640015f, 0.7668136358261108f, 0.13700459897518158f, 0.9013174772262573f, +0.849094569683075f, 0.9403210878372192f, 0.5692933201789856f, 0.4524804353713989f, 0.6172123551368713f, 0.1570468693971634f, 0.09256851673126221f, 0.014620608650147915f, +0.7252015471458435f, 0.32695525884628296f, 0.09625214338302612f, 0.9764528274536133f, 0.5454203486442566f, 0.19102293252944946f, 0.33679527044296265f, 0.7799587249755859f, +0.7761371731758118f, 0.23946210741996765f, 0.05466074496507645f, 0.17307107150554657f, 0.08183880895376205f, 0.7850400805473328f, 0.5548168420791626f, 0.8037267923355103f, +0.14334920048713684f, 0.3251708447933197f, 0.7469639182090759f, 0.7972116470336914f, 0.8140605092048645f, 0.11846229434013367f, 0.16654834151268005f, 0.5949932336807251f, +0.8064867854118347f, 0.7769237756729126f, 0.08639725297689438f, 0.1567661613225937f, 0.03331096097826958f, 0.29228341579437256f, 0.39019110798835754f, 0.8652606010437012f, +0.35424959659576416f, 0.2922704219818115f, 0.5717611312866211f, 0.6279465556144714f, 0.175101175904274f, 0.5681974291801453f, 0.3690745234489441f, 0.6503063440322876f, +0.8638039827346802f, 0.0024241080973297358f, 0.4988367557525635f, 0.3352709114551544f, 0.6872291564941406f, 0.3592331111431122f, 0.9623264074325562f, 0.877225935459137f, +0.5654943585395813f, 0.2931913137435913f, 0.9844763278961182f, 0.10415539145469666f, 0.575401782989502f, 0.31796035170555115f, 0.8216972351074219f, 0.1135791540145874f, +0.6024373769760132f, 0.3238334655761719f, 0.674620509147644f, 0.8310064673423767f, 0.9201759099960327f, 0.5215440988540649f, 0.033311180770397186f, 0.546949565410614f, +0.9586880803108215f, 0.6006872653961182f, 0.22855953872203827f, 0.687721312046051f, 0.2441156804561615f, 0.12157773226499557f, 0.9272242784500122f, 0.6707192063331604f, +0.901197612285614f, 0.44740086793899536f, 0.5831069350242615f, 0.8504982590675354f, 0.6149203777313232f, 0.7105507254600525f, 0.9566721320152283f, 0.7218207120895386f, +0.5972160696983337f, 0.89731764793396f, 0.10054276138544083f, 0.8935773372650146f, 0.9790770411491394f, 0.810017466545105f, 0.5516380667686462f, 0.5237100124359131f, +0.303691565990448f, 0.2771814167499542f, 0.9940546154975891f, 0.7417945861816406f, 0.1209292784333229f, 0.3339335322380066f, 0.6706032156944275f, 0.6994925737380981f, +0.5778716802597046f, 0.8595400452613831f, 0.4960578978061676f, 0.10925470292568207f, 0.9230396747589111f, 0.12868086993694305f, 0.47540879249572754f, 0.08013070374727249f, +0.3581334352493286f, 0.375236451625824f, 0.32588380575180054f, 0.9437692761421204f, 0.25332438945770264f, 0.2530105710029602f, 0.4257631003856659f, 0.22970834374427795f, +0.7723160982131958f, 0.4889332950115204f, 0.3202594518661499f, 0.9350025653839111f, 0.43723955750465393f, 0.10251783579587936f, 0.8892764449119568f, 0.30335474014282227f, +0.2181335836648941f, 0.5615662336349487f, 0.1824684590101242f, 0.07563111931085587f, 0.7447878122329712f, 0.7073338031768799f, 0.12659072875976562f, 0.02239621803164482f, +0.9506872892379761f, 0.3561205267906189f, 0.3482678234577179f, 0.27703261375427246f, 0.9592002034187317f, 0.04405001178383827f, 0.16440114378929138f, 0.019237160682678223f, +0.5115227103233337f, 0.15017186105251312f, 0.893369734287262f, 0.6982315182685852f, 0.8103554844856262f, 0.1790643334388733f, 0.9475645422935486f, 0.2873513996601105f, +0.532685399055481f, 0.7348163723945618f, 0.9836439490318298f, 0.43107014894485474f, 0.5796734094619751f, 0.4307692050933838f, 0.9915741086006165f, 0.004019829910248518f, +0.5657997131347656f, 0.8531895279884338f, 0.9051396250724792f, 0.5104951858520508f, 0.17194348573684692f, 0.4200695753097534f, 0.24138301610946655f, 0.20223337411880493f, +0.0734180137515068f, 0.6321029663085938f, 0.6868468523025513f, 0.512195348739624f, 0.04479174315929413f, 0.46040064096450806f, 0.3805720806121826f, 0.9029945731163025f, +0.8111303448677063f, 0.040082260966300964f, 0.7217167615890503f, 0.09412378817796707f, 0.21042779088020325f, 0.4235887825489044f, 0.5495970845222473f, 0.30408716201782227f, +0.036212850362062454f, 0.5597394108772278f, 0.7720192074775696f, 0.8978760242462158f, 0.3320528566837311f, 0.23972266912460327f, 0.8756974935531616f, 0.8370741605758667f, +0.5803937315940857f, 0.28153231739997864f, 0.7027397155761719f, 0.3200094401836395f, 0.5147771239280701f, 0.4730047285556793f, 0.0701785534620285f, 0.6125888824462891f, +0.646942675113678f, 0.7398315072059631f, 0.7202162742614746f, 0.7873981595039368f, 0.1517760306596756f, 0.2774089276790619f, 0.5791327953338623f, 0.11507689952850342f, +0.8001915812492371f, 0.9688352942466736f, 0.6828681230545044f, 0.8043481707572937f, 0.723675012588501f, 0.6442019939422607f, 0.5353146195411682f, 0.1514108031988144f, +0.6508307456970215f, 0.505147397518158f, 0.4671180546283722f, 0.5459703207015991f, 0.40531405806541443f, 0.43938833475112915f, 0.048535313457250595f, 0.3121073842048645f, +0.45965680480003357f, 0.9250693917274475f, 0.27320194244384766f, 0.4327588975429535f, 0.3479841947555542f, 0.9889681339263916f, 0.700347363948822f, 0.7243090271949768f, +0.3660930097103119f, 0.9999242424964905f, 0.703520655632019f, 0.7442247271537781f, 0.8410292267799377f, 0.8856375217437744f, 0.8513802886009216f, 0.1274832934141159f, +0.7183151245117188f, 0.8230993151664734f, 0.8057849407196045f, 0.4294513463973999f, 0.7965636849403381f, 0.8421260714530945f, 0.23203925788402557f, 0.9428507089614868f, +0.358977347612381f, 0.0681973323225975f, 0.07040758430957794f, 0.5007579922676086f, 0.7766970992088318f, 0.48799097537994385f, 0.5540602803230286f, 0.7488722801208496f, +0.9608093500137329f, 0.4179679751396179f, 0.22259946167469025f, 0.5143275260925293f, 0.6353704929351807f, 0.8134697079658508f, 0.11665091663599014f, 0.590826153755188f, +0.6124261021614075f, 0.9709682464599609f, 0.19499549269676208f, 0.5888071060180664f, 0.8743812441825867f, 0.41753509640693665f, 0.8281273245811462f, 0.02969171479344368f, +0.6371867656707764f, 0.9524084329605103f, 0.2999098598957062f, 0.544387936592102f, 0.1969558298587799f, 0.7682284116744995f, 0.6700018644332886f, 0.1306726038455963f, +0.02728499472141266f, 0.8050402402877808f, 0.34079036116600037f, 0.2691003382205963f, 0.066084124147892f, 0.9550820589065552f, 0.5747416019439697f, 0.7136020064353943f, +0.2922693192958832f, 0.7290678024291992f, 0.8500008583068848f, 0.9977044463157654f, 0.9767054319381714f, 0.7382741570472717f, 0.2590298056602478f, 0.4554353952407837f, +0.18328876793384552f, 0.709255039691925f, 0.2716417908668518f, 0.5094354748725891f, 0.4377102851867676f, 0.9521934986114502f, 0.6706352829933167f, 0.4275701940059662f, +0.9926151037216187f, 0.47742801904678345f, 0.20505285263061523f, 0.31853654980659485f, 0.7800358533859253f, 0.49995580315589905f, 0.21092846989631653f, 0.7346888184547424f, +0.7162367701530457f, 0.41193702816963196f, 0.37555116415023804f, 0.9896920919418335f, 0.8276985287666321f, 0.1246015876531601f, 0.7866051197052002f, 0.24408313632011414f, +0.11563834547996521f, 0.4893096387386322f, 0.7444707155227661f, 0.29007917642593384f, 0.5769553184509277f, 0.9667129516601562f, 0.36455342173576355f, 0.4804050922393799f, +0.15273453295230865f, 0.8188793659210205f, 0.03238175809383392f, 0.05063266307115555f, 0.7910774946212769f, 0.8233226537704468f, 0.27534130215644836f, 0.712035596370697f, +0.09186610579490662f, 0.1044418066740036f, 0.8412436246871948f, 0.5575408339500427f, 0.9738261103630066f, 0.9157575368881226f, 0.6007510423660278f, 0.9297468662261963f, +0.5395050644874573f, 0.9320007562637329f, 0.689466118812561f, 0.1624428629875183f, 0.04083749279379845f, 0.7270215153694153f, 0.8297290802001953f, 0.6838142275810242f, +0.9106537103652954f, 0.6241403222084045f, 0.7849963903427124f, 0.2704348564147949f, 0.905605673789978f, 0.30575570464134216f, 0.9904605746269226f, 0.6834301948547363f, +0.8607726097106934f, 0.6538728475570679f, 0.2321290224790573f, 0.13629326224327087f, 0.8779155611991882f, 0.40975868701934814f, 0.11867080628871918f, 0.35703369975090027f, +0.18594257533550262f, 0.5408129096031189f, 0.8390741944313049f, 0.30185666680336f, 0.3953359127044678f, 0.026083314791321754f, 0.7748509645462036f, 0.241948664188385f, +0.6405664682388306f, 0.5050848126411438f, 0.07314293831586838f, 0.39012449979782104f, 0.7718076705932617f, 0.16587015986442566f, 0.9483358263969421f, 0.007815907709300518f, +0.8946390748023987f, 0.2305462658405304f, 0.08739933371543884f, 0.6383523344993591f, 0.8062261343002319f, 0.8901523947715759f, 0.6978263258934021f, 0.47904351353645325f, +0.2696971297264099f, 0.7008125185966492f, 0.7391533255577087f, 0.5894094705581665f, 0.9828044772148132f, 0.18060429394245148f, 0.09459761530160904f, 0.818983793258667f, +0.2683776319026947f, 0.863469123840332f, 0.8998939394950867f, 0.7026583552360535f, 0.9771005511283875f, 0.2662563920021057f, 0.6447330713272095f, 0.28405049443244934f, +0.25420328974723816f, 0.5330795645713806f, 0.4852778911590576f, 0.6135847568511963f, 0.2981141209602356f, 0.020778266713023186f, 0.9279466271400452f, 0.773786187171936f, +0.5693131685256958f, 0.12094578146934509f, 0.978581964969635f, 0.786858320236206f, 0.16689534485340118f, 0.6584563851356506f, 0.7364379167556763f, 0.008214827626943588f, +0.7353644967079163f, 0.4470650553703308f, 0.9360529184341431f, 0.7089064717292786f, 0.2995879054069519f, 0.6560347080230713f, 0.7369953393936157f, 0.46788179874420166f, +0.3795519769191742f, 0.944185733795166f, 0.9352753162384033f, 0.7628702521324158f, 0.26808077096939087f, 0.3064277470111847f, 0.5452984571456909f, 0.5685325860977173f, +0.20022813975811005f, 0.35819804668426514f, 0.7515762448310852f, 0.06913019716739655f, 0.17524589598178864f, 0.08772691339254379f, 0.49355679750442505f, 0.6518611907958984f, +0.12844261527061462f, 0.24222813546657562f, 0.09030061960220337f, 0.24560746550559998f, 0.6493409276008606f, 0.5034507513046265f, 0.5861884355545044f, 0.4393053352832794f, +0.3229106366634369f, 0.4696204960346222f, 0.7061737179756165f, 0.8620076179504395f, 0.04725632444024086f, 0.8006207942962646f, 0.7374510765075684f, 0.6367809176445007f, +0.6417512893676758f, 0.19580039381980896f, 0.34693634510040283f, 0.3762191832065582f, 0.8143042325973511f, 0.6763134002685547f, 0.6483334302902222f, 0.27801352739334106f, +0.6099042296409607f, 0.14116862416267395f, 0.9030699133872986f, 0.12265648692846298f, 0.9187377095222473f, 0.4834881126880646f, 0.47972434759140015f, 0.5334503054618835f, +0.6280720829963684f, 0.6065356135368347f, 0.4437105655670166f, 0.7123874425888062f, 0.3248799741268158f, 0.22278793156147003f, 0.3259297013282776f, 0.9147382974624634f, +0.3696366548538208f, 0.010772031731903553f, 0.5081811547279358f, 0.2807265520095825f, 0.690259575843811f, 0.46727097034454346f, 0.050553686916828156f, 0.2627774477005005f, +0.3710681200027466f, 0.07612494379281998f, 0.2608453929424286f, 0.6831154823303223f, 0.7467156648635864f, 0.6719473600387573f, 0.06736962497234344f, 0.9017684459686279f, +0.893338680267334f, 0.15491460263729095f, 0.3807359039783478f, 0.43202388286590576f, 0.993644118309021f, 0.46692025661468506f, 0.4230923354625702f, 0.042245786637067795f, +0.17283304035663605f, 0.4153536856174469f, 0.5120987296104431f, 0.2679014801979065f, 0.5079781413078308f, 0.41871023178100586f, 0.37443795800209045f, 0.8622614145278931f, +0.05941769853234291f, 0.3405458927154541f, 0.8582770228385925f, 0.3379022181034088f, 0.5598767995834351f, 0.8359050750732422f, 0.8931460380554199f, 0.40685179829597473f, +0.258689820766449f, 0.7411997318267822f, 0.34837689995765686f, 0.7421672344207764f, 0.06933010369539261f, 0.37022024393081665f, 0.6986542344093323f, 0.7533187866210938f, +0.7173088788986206f, 0.888042688369751f, 0.3495572805404663f, 0.8117273449897766f, 0.44836360216140747f, 0.7028586268424988f, 0.1909523904323578f, 0.841254472732544f, +0.9115331768989563f, 0.33400431275367737f, 0.4841563403606415f, 0.539556086063385f, 0.8452308773994446f, 0.7841998934745789f, 0.8766857385635376f, 0.7719994783401489f, +0.9558908939361572f, 0.8406186103820801f, 0.14606383442878723f, 0.5906294584274292f, 0.6546831727027893f, 0.21449227631092072f, 0.2599431574344635f, 0.19421108067035675f, +0.7975698709487915f, 0.371046781539917f, 0.5226749777793884f, 0.009972936473786831f, 0.6007036566734314f, 0.7061339616775513f, 0.5165976881980896f, 0.6886878609657288f, +0.6393975615501404f, 0.22398744523525238f, 0.46415895223617554f, 0.041699811816215515f, 0.408194363117218f, 0.5166777968406677f, 0.315067321062088f, 0.23071803152561188f, +0.7625645399093628f, 0.3216651380062103f, 0.9171137809753418f, 0.5824769139289856f, 0.4504373073577881f, 0.9761196970939636f, 0.5298740863800049f, 0.5155377388000488f, +0.7198992371559143f, 0.8235176801681519f, 0.8201784491539001f, 0.548279345035553f, 0.31189218163490295f, 0.27854710817337036f, 0.01409476064145565f, 0.5089935064315796f, +0.05975870043039322f, 0.12430489808320999f, 0.7397159337997437f, 0.7473401427268982f, 0.9537031650543213f, 0.47672903537750244f, 0.01023129653185606f, 0.07527627050876617f, +0.12111686170101166f, 0.31525951623916626f, 0.7709798216819763f, 0.5660597085952759f, 0.6135739088058472f, 0.18106143176555634f, 0.5351414084434509f, 0.540463924407959f, +0.1919216513633728f, 0.6302972435951233f, 0.6180647015571594f, 0.7897171974182129f, 0.35058754682540894f, 0.7743269205093384f, 0.39517152309417725f, 0.013095240108668804f, +0.7439889311790466f, 0.9004721641540527f, 0.933556318283081f, 0.24652667343616486f, 0.03512980043888092f, 0.8955162167549133f, 0.8993682265281677f, 0.4722258448600769f, +0.6835593581199646f, 0.16203846037387848f, 0.521621823310852f, 0.8206445574760437f, 0.9666661024093628f, 0.8464353680610657f, 0.30999594926834106f, 0.4762706756591797f, +0.8981562256813049f, 0.4943036735057831f, 0.4134664535522461f, 0.15108650922775269f, 0.2466040551662445f, 0.7893961071968079f, 0.09782734513282776f, 0.4226778447628021f, +0.20377406477928162f, 0.8702628016471863f, 0.4571021497249603f, 0.8927941918373108f, 0.6995804309844971f, 0.85813969373703f, 0.8490941524505615f, 0.5788679718971252f, +0.3202323019504547f, 0.9435814619064331f, 0.9800128936767578f, 0.25756725668907166f, 0.005611129105091095f, 0.03029262088239193f, 0.36041322350502014f, 0.8371034860610962f, +0.3848966658115387f, 0.12532687187194824f, 0.45479562878608704f, 0.7473822236061096f, 0.4435344636440277f, 0.8760912418365479f, 0.8124014139175415f, 0.08713670074939728f, +0.4896494448184967f, 0.8037298321723938f, 0.10568523406982422f, 0.1426461637020111f, 0.3601076602935791f, 0.8742914795875549f, 0.48358190059661865f, 0.702258825302124f, +0.29981857538223267f, 0.18346726894378662f, 0.7637507915496826f, 0.2671671509742737f, 0.7737765908241272f, 0.022686956450343132f, 0.49251869320869446f, 0.9488649368286133f, +0.07907785475254059f, 0.8327277898788452f, 0.5891520977020264f, 0.07147342711687088f, 0.19287532567977905f, 0.3352382779121399f, 0.3493490517139435f, 0.6935898065567017f, +0.38686785101890564f, 0.17480593919754028f, 0.783780038356781f, 0.9980517625808716f, 0.855204701423645f, 0.16062042117118835f, 0.37084394693374634f, 0.7000672817230225f, +0.6427374482154846f, 0.34507378935813904f, 0.33010900020599365f, 0.7635141015052795f, 0.1554621458053589f, 0.1778322458267212f, 0.5791277885437012f, 0.7772766351699829f, +0.21101336181163788f, 0.6126310229301453f, 0.7844752073287964f, 0.1889132708311081f, 0.3285830020904541f, 0.7266878485679626f, 0.35706827044487f, 0.037789374589920044f, +0.9563949108123779f, 0.1715124249458313f, 0.5954167246818542f, 0.6274344325065613f, 0.7971465587615967f, 0.5015425682067871f, 0.04568934068083763f, 0.6478670835494995f, +0.8446945548057556f, 0.11064260452985764f, 0.6301912665367126f, 0.1289617270231247f, 0.48648616671562195f, 0.8421220183372498f, 0.3781060576438904f, 0.3305322527885437f, +0.42140376567840576f, 0.9646320343017578f, 0.14746613800525665f, 0.21046248078346252f, 0.6486122012138367f, 0.24796532094478607f, 0.6869811415672302f, 0.3816556930541992f, +0.27848803997039795f, 0.23906706273555756f, 0.07216347008943558f, 0.1088140532374382f, 0.9655151963233948f, 0.46225810050964355f, 0.8878049254417419f, 0.48724523186683655f, +0.17797356843948364f, 0.6462572813034058f, 0.07978072762489319f, 0.04574936628341675f, 0.08390713483095169f, 0.327197402715683f, 0.42039865255355835f, 0.27378779649734497f, +0.05959368497133255f, 0.40311098098754883f, 0.3875345289707184f, 0.7431374192237854f, 0.049736425280570984f, 0.8758926391601562f, 0.5387388467788696f, 0.0186444241553545f, +0.04797131195664406f, 0.5100393891334534f, 0.11595926433801651f, 0.4222709536552429f, 0.7844825387001038f, 0.9394957423210144f, 0.9370837807655334f, 0.7479697465896606f, +0.6469495296478271f, 0.9584077000617981f, 0.4463430345058441f, 0.17069731652736664f, 0.29305610060691833f, 0.8753182888031006f, 0.13033117353916168f, 0.8455733060836792f, +0.7328014969825745f, 0.4272148311138153f, 0.5030490756034851f, 0.7996070981025696f, 0.5076717138290405f, 0.015225935727357864f, 0.3721773326396942f, 0.06372877210378647f, +0.07203032821416855f, 0.4284544587135315f, 0.5893986821174622f, 0.9088473320007324f, 0.8135601878166199f, 0.167277991771698f, 0.9488809108734131f, 0.834805965423584f, +0.39925485849380493f, 0.032444048672914505f, 0.26503774523735046f, 0.2392868995666504f, 0.48430168628692627f, 0.5779551863670349f, 0.11921309679746628f, 0.36397069692611694f, +0.024076681584119797f, 0.5206741094589233f, 0.6199760437011719f, 0.9643304347991943f, 0.49481961131095886f, 0.7969567775726318f, 0.20367243885993958f, 0.5390767455101013f, +0.21881575882434845f, 0.982814371585846f, 0.06500986963510513f, 0.5550639033317566f, 0.4858236014842987f, 0.9155523180961609f, 0.3812010586261749f, 0.5945838093757629f, +0.9225109219551086f, 0.9866366386413574f, 0.8891627192497253f, 0.6951850652694702f, 0.33835723996162415f, 0.8031914830207825f, 0.24772672355175018f, 0.6457895636558533f, +0.3367460370063782f, 0.8287025094032288f, 0.24931977689266205f, 0.02521469071507454f, 0.4026395380496979f, 0.8187665343284607f, 0.5362242460250854f, 0.48046875f, +0.498760849237442f, 0.3987598419189453f, 0.2461286336183548f, 0.7968040108680725f, 0.5773125886917114f, 0.16877666115760803f, 0.5339105725288391f, 0.935313880443573f, +0.7601966857910156f, 0.9901518225669861f, 0.40440818667411804f, 0.0796264111995697f, 0.26015958189964294f, 0.9626433849334717f, 0.9485886693000793f, 0.7716334462165833f, +0.7581858038902283f, 0.9254281520843506f, 0.678945004940033f, 0.422781378030777f, 0.9012545347213745f, 0.47954463958740234f, 0.13776668906211853f, 0.7424529790878296f, +0.667056143283844f, 0.63001549243927f, 0.19331109523773193f, 0.21383558213710785f, 0.7047697305679321f, 0.628326416015625f, 0.5955111384391785f, 0.4535601735115051f, +0.5720632076263428f, 0.943769097328186f, 0.28477710485458374f, 0.01309783011674881f, 0.015318106859922409f, 0.7457844018936157f, 0.4753853380680084f, 0.599681556224823f, +0.6793677806854248f, 0.22971977293491364f, 0.03273126855492592f, 0.7796636819839478f, 0.9613867402076721f, 0.4378257989883423f, 0.0705452710390091f, 0.8288443088531494f, +0.4576205611228943f, 0.35364487767219543f, 0.6047002077102661f, 0.35953783988952637f, 0.6507227420806885f, 0.05703909695148468f, 0.1534298062324524f, 0.8890737891197205f, +0.8749484419822693f, 0.5289803147315979f, 0.939166784286499f, 0.3573051393032074f, 0.29478996992111206f, 0.4955681562423706f, 0.9241779446601868f, 0.04208793118596077f, +0.5741328597068787f, 0.11701112240552902f, 0.6404640674591064f, 0.6535393595695496f, 0.09620177745819092f, 0.2842932641506195f, 0.8253545165061951f, 0.6202232837677002f, +0.9257827997207642f, 0.5241797566413879f, 0.7980908155441284f, 0.811438798904419f, 0.18055765330791473f, 0.3427201211452484f, 0.2621484398841858f, 0.13119253516197205f, +0.03476186469197273f, 0.1126040518283844f, 0.4473303258419037f, 0.5055592656135559f, 0.8666898012161255f, 0.923499584197998f, 0.8777970671653748f, 0.2643110454082489f, +0.1530059576034546f, 0.1875869333744049f, 0.5690355896949768f, 0.4956680238246918f, 0.7000299096107483f, 0.18416231870651245f, 0.5300823450088501f, 0.7758013010025024f, +0.4034263491630554f, 0.983344554901123f, 0.3520504832267761f, 0.8467376232147217f, 0.669725775718689f, 0.10161779820919037f, 0.13855864107608795f, 0.29959678649902344f, +0.24523551762104034f, 0.5788182616233826f, 0.7823728919029236f, 0.47238340973854065f, 0.19030781090259552f, 0.2322588413953781f, 0.39476630091667175f, 0.18241125345230103f, +0.8267762064933777f, 0.6515896916389465f, 0.8911784291267395f, 0.21217262744903564f, 0.4060608744621277f, 0.898591935634613f, 0.3044930398464203f, 0.299401193857193f, +0.4242965579032898f, 0.026610950008034706f, 0.9244611859321594f, 0.20651541650295258f, 0.17196457087993622f, 0.9818812012672424f, 0.5791153907775879f, 0.8230843544006348f, +0.13162006437778473f, 0.39262598752975464f, 0.7933586835861206f, 0.4767022430896759f, 0.11000499129295349f, 0.9720761775970459f, 0.4656168520450592f, 0.5587961077690125f, +0.43529176712036133f, 0.8795414566993713f, 0.8110752105712891f, 0.33635836839675903f, 0.7636903524398804f, 0.6712701916694641f, 0.23661024868488312f, 0.5943132638931274f, +0.06613226979970932f, 0.04849995672702789f, 0.5739995837211609f, 0.44583338499069214f, 0.7395660877227783f, 0.8097615838050842f, 0.10816944390535355f, 0.5971312522888184f, +0.04924719035625458f, 0.08480623364448547f, 0.7133296728134155f, 0.1681259572505951f, 0.28336188197135925f, 0.6074507832527161f, 0.7429460883140564f, 0.9964545965194702f, +0.49253296852111816f, 0.6295465230941772f, 0.5015478730201721f, 0.09672419726848602f, 0.22034543752670288f, 0.18083488941192627f, 0.42598438262939453f, 0.9233558773994446f, +0.5386771559715271f, 0.9699063897132874f, 0.3860939145088196f, 0.9973949193954468f, 0.30726903676986694f, 0.7592288851737976f, 0.935753583908081f, 0.7727692127227783f, +0.03853868320584297f, 0.484060138463974f, 0.8585340976715088f, 0.008463818579912186f, 0.9703558683395386f, 0.9691047668457031f, 0.5599489212036133f, 0.5126900672912598f, +0.5462148785591125f, 0.2337639480829239f, 0.3859920799732208f, 0.18701951205730438f, 0.2621040940284729f, 0.06153440475463867f, 0.3632729947566986f, 0.7168328762054443f, +0.02158156968653202f, 0.49988123774528503f, 0.899064838886261f, 0.769946277141571f, 0.3775607645511627f, 0.9854969382286072f, 0.3391757905483246f, 0.1531614363193512f, +0.2181282490491867f, 0.3190276324748993f, 0.07842688262462616f, 0.20492355525493622f, 0.880203366279602f, 0.9406561851501465f, 0.05020209029316902f, 0.33762672543525696f, +0.3154745399951935f, 0.4671918749809265f, 0.9742250442504883f, 0.9455762505531311f, 0.36576247215270996f, 0.16805103421211243f, 0.6938987374305725f, 0.8996235132217407f, +0.5567163825035095f, 0.4593384265899658f, 0.5580974817276001f, 0.6966037154197693f, 0.8627561330795288f, 0.9810308814048767f, 0.8562144637107849f, 0.7249159216880798f, +0.476773202419281f, 0.6676039695739746f, 0.6090381741523743f, 0.6844716668128967f, 0.3784453570842743f, 0.01969815418124199f, 0.20767274498939514f, 0.4094223380088806f, +0.885869026184082f, 0.29939523339271545f, 0.1220574826002121f, 0.43930700421333313f, 0.926637589931488f, 0.9816750884056091f, 0.453218549489975f, 0.9406862258911133f, +0.6298463344573975f, 0.8595163822174072f, 0.20419347286224365f, 0.7095339298248291f, 0.6778115034103394f, 0.8457879424095154f, 0.13508249819278717f, 0.5309525728225708f, +0.06813623756170273f, 0.8794236183166504f, 0.5614801645278931f, 0.2509033679962158f, 0.7157549262046814f, 0.0959913432598114f, 0.33230388164520264f, 0.06503626704216003f, +0.9471966028213501f, 0.33378154039382935f, 0.6604868173599243f, 0.1079387217760086f, 0.20833534002304077f, 0.2492547482252121f, 0.8753893375396729f, 0.2430710792541504f, +0.8868503570556641f, 0.7268944978713989f, 0.8190329074859619f, 0.48431408405303955f, 0.5599201917648315f, 0.35304781794548035f, 0.8269953727722168f, 0.17184971272945404f, +0.9430452585220337f, 0.16399571299552917f, 0.19025969505310059f, 0.9004191756248474f, 0.5589548349380493f, 0.6531519889831543f, 0.37200096249580383f, 0.5262866616249084f, +0.9103702902793884f, 0.6964074373245239f, 0.8080938458442688f, 0.7335888743400574f, 0.9311173558235168f, 0.09539416432380676f, 0.18654385209083557f, 0.050573788583278656f, +0.6914500594139099f, 0.7525279521942139f, 0.5465195775032043f, 0.5948522686958313f, 0.6417641043663025f, 0.7054075598716736f, 0.5536646246910095f, 0.30783528089523315f, +0.6688405275344849f, 0.8636226058006287f, 0.5603682994842529f, 0.4748625159263611f, 0.3727303445339203f, 0.2610403001308441f, 0.9103529453277588f, 0.41682517528533936f, +0.9147400856018066f, 0.8681711554527283f, 0.5252787470817566f, 0.16991208493709564f, 0.9114633202552795f, 0.1416674554347992f, 0.7869411706924438f, 0.6836716532707214f, +0.8769689202308655f, 0.5530033707618713f, 0.004998008720576763f, 0.03414991497993469f, 0.23435747623443604f, 0.628661036491394f, 0.259872168302536f, 0.008854934945702553f, +0.19289395213127136f, 0.19524012506008148f, 0.33419567346572876f, 0.34699249267578125f, 0.3543674051761627f, 0.5944761633872986f, 0.3491224944591522f, 0.24079416692256927f, +0.6351489424705505f, 0.46629369258880615f, 0.6659866571426392f, 0.5479398369789124f, 0.6113620400428772f, 0.525357723236084f, 0.8262682557106018f, 0.7669296264648438f, +0.24177391827106476f, 0.7462493777275085f, 0.36643552780151367f, 0.8820178508758545f, 0.37536510825157166f, 0.43907761573791504f, 0.28916746377944946f, 0.7807132601737976f, +0.5337035655975342f, 0.8972933888435364f, 0.016176901757717133f, 0.5319651365280151f, 0.9121288657188416f, 0.47747042775154114f, 0.7067989706993103f, 0.0038802814669907093f, +0.4849574863910675f, 0.061037782579660416f, 0.7153933048248291f, 0.569226086139679f, 0.8817145824432373f, 0.7516274452209473f, 0.7811353206634521f, 0.4038753807544708f, +0.05955885350704193f, 0.5240216851234436f, 0.18908177316188812f, 0.8062152862548828f, 0.8156912326812744f, 0.8387554883956909f, 0.04107941687107086f, 0.3617725372314453f, +0.7825663089752197f, 0.3226613700389862f, 0.5948442220687866f, 0.6488914489746094f, 0.7480144500732422f, 0.5779772996902466f, 0.3884846568107605f, 0.7362082004547119f, +0.264808714389801f, 0.697559654712677f, 0.6146076321601868f, 0.387539267539978f, 0.1411980241537094f, 0.07352419942617416f, 0.27112331986427307f, 0.899230420589447f, +0.7363948225975037f, 0.7313724160194397f, 0.85395348072052f, 0.44630110263824463f, 0.5812656879425049f, 0.6292763352394104f, 0.006607091054320335f, 0.6336178183555603f, +0.9948086738586426f, 0.7631881237030029f, 0.8675966858863831f, 0.5245418548583984f, 0.3512071371078491f, 0.560992419719696f, 0.37723734974861145f, 0.3299311697483063f, +0.685847818851471f, 0.845264732837677f, 0.11113312095403671f, 0.15978382527828217f, 0.4037379026412964f, 0.221955344080925f, 0.9266073703765869f, 0.7698199152946472f, +0.11221969872713089f, 0.43768778443336487f, 0.4219151437282562f, 0.5014216303825378f, 0.1821804642677307f, 0.8034970164299011f, 0.48157548904418945f, 0.8069199323654175f, +0.8384896516799927f, 0.5494069457054138f, 0.4973307251930237f, 0.00568411173298955f, 0.3222176432609558f, 0.29984378814697266f, 0.8104376792907715f, 0.8801630735397339f, +0.07242803275585175f, 0.9939119219779968f, 0.5320971012115479f, 0.009916556067764759f, 0.2360963225364685f, 0.009907789528369904f, 0.6654072403907776f, 0.44390520453453064f, +0.24597349762916565f, 0.2142062932252884f, 0.9277939796447754f, 0.6683176159858704f, 0.2942220866680145f, 0.5343906283378601f, 0.12569423019886017f, 0.7718812823295593f, +0.37069010734558105f, 0.1051424890756607f, 0.8243435025215149f, 0.7752169966697693f, 0.8877426981925964f, 0.6880349516868591f, 0.1105494275689125f, 0.3088802099227905f, +0.8133771419525146f, 0.5425064563751221f, 0.039140842854976654f, 0.8795574307441711f, 0.7902451753616333f, 0.029061177745461464f, 0.259672075510025f, 0.8391740322113037f, +0.19271016120910645f, 0.5990452766418457f, 0.515252947807312f, 0.6315569877624512f, 0.6871163249015808f, 0.9530165195465088f, 0.32384994626045227f, 0.3673437237739563f, +0.7739472389221191f, 0.48000210523605347f, 0.3209459185600281f, 0.23768438398838043f, 0.038369450718164444f, 0.7988195419311523f, 0.03488913178443909f, 0.7233985066413879f, +0.9102632999420166f, 0.15453524887561798f, 0.48025283217430115f, 0.5824107527732849f, 0.9744049906730652f, 0.415408194065094f, 0.6072706580162048f, 0.1004650816321373f, +0.3204706311225891f, 0.8276224136352539f, 0.18706271052360535f, 0.37309950590133667f, 0.6925906538963318f, 0.05786783620715141f, 0.4948326051235199f, 0.8845416307449341f, +0.425960510969162f, 0.5664833784103394f, 0.25128525495529175f, 0.44786497950553894f, 0.008099140599370003f, 0.24245025217533112f, 0.653708815574646f, 0.299407035112381f, +0.14172831177711487f, 0.9546895027160645f, 0.8191869854927063f, 0.6043813228607178f, 0.23965492844581604f, 0.06889097392559052f, 0.5017678737640381f, 0.5074108839035034f, +0.917916476726532f, 0.551459550857544f, 0.4912695586681366f, 0.7003723978996277f, 0.003213144838809967f, 0.048208385705947876f, 0.9640570282936096f, 0.11799200624227524f, +0.8167043924331665f, 0.2707340717315674f, 0.12268876284360886f, 0.2845507264137268f, 0.23741962015628815f, 0.6215278506278992f, 0.47081857919692993f, 0.3393958508968353f, +0.14571735262870789f, 0.5865076184272766f, 0.3252512216567993f, 0.31363728642463684f, 0.9625831246376038f, 0.9122138023376465f, 0.23770512640476227f, 0.23219141364097595f, +0.22449398040771484f, 0.011602132581174374f, 0.011813241057097912f, 0.5165804028511047f, 0.14670182764530182f, 0.08186272531747818f, 0.9957797527313232f, 0.7005782723426819f, +0.977790117263794f, 0.11835690587759018f, 0.5841489434242249f, 0.8978205919265747f, 0.0035182444844394922f, 0.1566663682460785f, 0.14218243956565857f, 0.6715070605278015f, +0.37349018454551697f, 0.6178377270698547f, 0.09208520501852036f, 0.058507636189460754f, 0.9513803720474243f, 0.21955806016921997f, 0.2638395428657532f, 0.374121755361557f, +0.8749815821647644f, 0.7651337385177612f, 0.6714226007461548f, 0.42522889375686646f, 0.18035514652729034f, 0.945410966873169f, 0.5588957071304321f, 0.5134769082069397f, +0.585224449634552f, 0.9207895994186401f, 0.6801855564117432f, 0.46408510208129883f, 0.11844982206821442f, 0.903702974319458f, 0.838640570640564f, 0.024558722972869873f, +0.36925163865089417f, 0.0016661870758980513f, 0.6958061456680298f, 0.48691320419311523f, 0.696917712688446f, 0.936718225479126f, 0.34069663286209106f, 0.9658029079437256f, +0.5082279443740845f, 0.5049556493759155f, 0.7760319709777832f, 0.36559367179870605f, 0.3894868791103363f, 0.5450354814529419f, 0.9332537055015564f, 0.4154260754585266f, +0.6839767694473267f, 0.24084261059761047f, 0.2775286138057709f, 0.4372713565826416f, 0.1262751817703247f, 0.6463139057159424f, 0.20959605276584625f, 0.7099626064300537f, +0.25633329153060913f, 0.5005509853363037f, 0.9838062524795532f, 0.325647234916687f, 0.0900128111243248f, 0.47811034321784973f, 0.525766909122467f, 0.7650443315505981f, +0.3927544951438904f, 0.620729386806488f, 0.571805477142334f, 0.4607967138290405f, 0.679297685623169f, 0.7812127470970154f, 0.40625450015068054f, 0.2704688608646393f, +0.8443835377693176f, 0.28927361965179443f, 0.28119659423828125f, 0.6786113381385803f, 0.5396168231964111f, 0.2770082950592041f, 0.14766469597816467f, 0.5536301136016846f, +0.1576324999332428f, 0.7818159461021423f, 0.4231337904930115f, 0.8945560455322266f, 0.9229299426078796f, 0.4798342287540436f, 0.23448385298252106f, 0.3832084536552429f, +0.8104473352432251f, 0.5867611169815063f, 0.11105404049158096f, 0.03931007906794548f, 0.32728517055511475f, 0.27955755591392517f, 0.20994801819324493f, 0.8642482161521912f, +0.02852361649274826f, 0.3398790657520294f, 0.26331406831741333f, 0.7973106503486633f, 0.371640145778656f, 0.06966307014226913f, 0.9270057082176208f, 0.5910483598709106f, +0.8654130697250366f, 0.8865521550178528f, 0.8003056645393372f, 0.8980110287666321f, 0.008840229362249374f, 0.2362980842590332f, 0.5289849042892456f, 0.7924148440361023f, +0.4806968867778778f, 0.8187989592552185f, 0.5024069547653198f, 0.4277770221233368f, 0.9107376337051392f, 0.326703816652298f, 0.6380307078361511f, 0.6356552243232727f, +0.6165462732315063f, 0.3978024125099182f, 0.6271229982376099f, 0.32519659399986267f, 0.6278194785118103f, 0.2607033848762512f, 0.9722840785980225f, 0.24170427024364471f, +0.7126600742340088f, 0.21702677011489868f, 0.7323829531669617f, 0.1827218383550644f, 0.7992646098136902f, 0.73284912109375f, 0.042426079511642456f, 0.09336978942155838f, +0.596123993396759f, 0.8754305243492126f, 0.1791788637638092f, 0.2196488082408905f, 0.046813346445560455f, 0.06266183406114578f, 0.7566540241241455f, 0.15331262350082397f, +0.19348575174808502f, 0.8132328391075134f, 0.7542982697486877f, 0.3587406575679779f, 0.9736934900283813f, 0.3787117302417755f, 0.2862572968006134f, 0.7149850726127625f, +0.42747995257377625f, 0.6410321593284607f, 0.7555782794952393f, 0.7815792560577393f, 0.08539675176143646f, 0.5377488732337952f, 0.9557621479034424f, 0.5055461525917053f, +0.05474540591239929f, 0.4984417259693146f, 0.5381335020065308f, 0.3388095498085022f, 0.04047912731766701f, 0.18413960933685303f, 0.24129080772399902f, 0.13887396454811096f, +0.921943724155426f, 0.8914285898208618f, 0.6293297410011292f, 0.5684582591056824f, 0.5365409851074219f, 0.4754084348678589f, 0.8404077291488647f, 0.5718269348144531f, +0.45153871178627014f, 0.5128698348999023f, 0.10275770723819733f, 0.8472486734390259f, 0.7007560133934021f, 0.2268943190574646f, 0.4477267861366272f, 0.47218218445777893f, +0.5744351744651794f, 0.9561738967895508f, 0.3354330062866211f, 0.39012274146080017f, 0.2555372416973114f, 0.0016264321748167276f, 0.9478281736373901f, 0.37795376777648926f, +0.6067607402801514f, 0.3389005959033966f, 0.65498948097229f, 0.544719934463501f, 0.9805127382278442f, 0.281901478767395f, 0.36354243755340576f, 0.1822708696126938f, +0.03287944197654724f, 0.809231698513031f, 0.5364634394645691f, 0.7883051633834839f, 0.02297724224627018f, 0.7773784399032593f, 0.6739249229431152f, 0.6473700404167175f, +0.4818275570869446f, 0.20332841575145721f, 0.7797746062278748f, 0.8302324414253235f, 0.25700122117996216f, 0.2071349024772644f, 0.4118662178516388f, 0.30862677097320557f, +0.2511257827281952f, 0.9371126294136047f, 0.6645498275756836f, 0.1288233995437622f, 0.8525919914245605f, 0.6082934737205505f, 0.5305095911026001f, 0.2736281156539917f, +0.5387933254241943f, 0.12778763473033905f, 0.3091167211532593f, 0.012607134878635406f, 0.8381320238113403f, 0.6148157715797424f, 0.4997369945049286f, 0.3280014097690582f, +0.40690669417381287f, 0.9905074834823608f, 0.9678939580917358f, 0.15993471443653107f, 0.15816913545131683f, 0.9473568797111511f, 0.09258925914764404f, 0.9133391976356506f, +0.438190221786499f, 0.048383936285972595f, 0.6832211017608643f, 0.6715747117996216f, 0.26776260137557983f, 0.29959556460380554f, 0.6340351700782776f, 0.8649344444274902f, +0.10952959954738617f, 0.3165106177330017f, 0.5352869629859924f, 0.6432580947875977f, 0.5672939419746399f, 0.06487235426902771f, 0.6514614224433899f, 0.4706211984157562f, +0.2577264606952667f, 0.015055459924042225f, 0.040655940771102905f, 0.607265293598175f, 0.49893519282341003f, 0.3770850896835327f, 0.0021709532011300325f, 0.933255672454834f, +0.6263852715492249f, 0.05955081433057785f, 0.7542683482170105f, 0.4779810905456543f, 0.06991168111562729f, 0.6366071105003357f, 0.14235590398311615f, 0.8595159649848938f, +0.13628248870372772f, 0.34982240200042725f, 0.958461344242096f, 0.5621548891067505f, 0.9759673476219177f, 0.08871238678693771f, 0.5703557133674622f, 0.5667257905006409f, +0.5633310675621033f, 0.9188233613967896f, 0.8372640013694763f, 0.4764903783798218f, 0.8040387034416199f, 0.4859609603881836f, 0.0405789390206337f, 0.20141208171844482f, +0.22876568138599396f, 0.3801298141479492f, 0.9209476113319397f, 0.5401619672775269f, 0.3729633390903473f, 0.617638349533081f, 0.34846994280815125f, 0.06923089176416397f, +0.7601391673088074f, 0.5812899470329285f, 0.42726296186447144f, 0.01289442926645279f, 0.273965448141098f, 0.06161079555749893f, 0.05167807266116142f, 0.33863797783851624f, +0.3217564523220062f, 0.15809780359268188f, 0.6536017656326294f, 0.579082190990448f, 0.8735101222991943f, 0.9159366488456726f, 0.5958870053291321f, 0.7749385237693787f, +0.6353418231010437f, 0.20871348679065704f, 0.7628622055053711f, 0.9221130013465881f, 0.4442824721336365f, 0.8241260051727295f, 0.6947681903839111f, 0.05456206947565079f, +0.25673070549964905f, 0.25205114483833313f, 0.8939968943595886f, 0.5216691493988037f, 0.9712163209915161f, 0.3001747727394104f, 0.6580327153205872f, 0.7470890879631042f, +0.35359302163124084f, 0.46696558594703674f, 0.23809297382831573f, 0.8700403571128845f, 0.3046593964099884f, 0.1391030251979828f, 0.7588454484939575f, 0.27497872710227966f, +0.678303062915802f, 0.18279463052749634f, 0.32840701937675476f, 0.9463333487510681f, 0.2613823115825653f, 0.2867922782897949f, 0.9230840802192688f, 0.7085409164428711f, +0.7825241088867188f, 0.44394955039024353f, 0.6069748401641846f, 0.042938459664583206f, 0.19092868268489838f, 0.2463923841714859f, 0.9007198214530945f, 0.021814817562699318f, +0.5196966528892517f, 0.2622338831424713f, 0.5773731470108032f, 0.9351106882095337f, 0.7915634512901306f, 0.8898773193359375f, 0.8411157727241516f, 0.9313283562660217f, +0.5412706136703491f, 0.2955892086029053f, 0.2775856852531433f, 0.15737870335578918f, 0.44404175877571106f, 0.711283802986145f, 0.5865153074264526f, 0.6487711071968079f, +0.6152107119560242f, 0.10228799283504486f, 0.8006904125213623f, 0.8292861580848694f, 0.3234984278678894f, 0.5603846311569214f, 0.9019166231155396f, 0.3956604599952698f, +0.9654427170753479f, 0.41068997979164124f, 0.13518363237380981f, 0.10089432448148727f, 0.9864150881767273f, 0.6186332702636719f, 0.8569084405899048f, 0.3037472367286682f, +0.8327888250350952f, 0.3032974302768707f, 0.06492843478918076f, 0.4073507785797119f, 0.4068966209888458f, 0.082337386906147f, 0.4182966649532318f, 0.38238924741744995f, +0.5356393456459045f, 0.7487006187438965f, 0.8641542196273804f, 0.4880821108818054f, 0.47524139285087585f, 0.6277479529380798f, 0.46338313817977905f, 0.8642103672027588f, +0.24152450263500214f, 0.8510134220123291f, 0.8162897825241089f, 0.34125155210494995f, 0.8091797232627869f, 0.0332413949072361f, 0.710167407989502f, 0.8079835772514343f, +0.03921230509877205f, 0.8351860642433167f, 0.6477697491645813f, 0.8646817803382874f, 0.9788170456886292f, 0.9253438711166382f, 0.0020590978674590588f, 0.1276979297399521f, +0.1576727032661438f, 0.4173297584056854f, 0.5612521767616272f, 0.32539817690849304f, 0.5578720569610596f, 0.5483851432800293f, 0.700857937335968f, 0.3067063093185425f, +0.3938777446746826f, 0.06162085756659508f, 0.3427524268627167f, 0.7585145831108093f, 0.6245091557502747f, 0.7020404934883118f, 0.3071664571762085f, 0.2699612081050873f, +0.5022978782653809f, 0.244257390499115f, 0.22084690630435944f, 0.22675356268882751f, 0.5586540699005127f, 0.48830512166023254f, 0.9133228063583374f, 0.8291506171226501f, +0.7473087906837463f, 0.44672414660453796f, 0.6182674169540405f, 0.7250903248786926f, 0.17919893562793732f, 0.7798101305961609f, 0.0047039249911904335f, 0.9510230422019958f, +0.1889062076807022f, 0.44251975417137146f, 0.04419731721282005f, 0.021030893549323082f, 0.961135983467102f, 0.32027167081832886f, 0.2139265388250351f, 0.16040173172950745f, +0.18573294579982758f, 0.6606243252754211f, 0.18911390006542206f, 0.0026820835191756487f, 0.7517188787460327f, 0.11588121205568314f, 0.20663540065288544f, 0.6765635013580322f, +0.454242080450058f, 0.43295127153396606f, 0.528467059135437f, 0.6426334381103516f, 0.42652627825737f, 0.7160484790802002f, 0.47276800870895386f, 0.08646880090236664f, +0.19297204911708832f, 0.6866942644119263f, 0.2050432711839676f, 0.03991534933447838f, 0.5916661024093628f, 0.670062780380249f, 0.7734032273292542f, 0.08686400204896927f, +0.07020848989486694f, 0.3785005807876587f, 0.5769898891448975f, 0.4322892725467682f, 0.356850802898407f, 0.2797730565071106f, 0.601021409034729f, 0.8216813206672668f, +0.7775482535362244f, 0.887356698513031f, 0.015591169707477093f, 0.15408720076084137f, 0.29575836658477783f, 0.9905058741569519f, 0.7748116254806519f, 0.7008248567581177f, +0.6646081209182739f, 0.954590380191803f, 0.7855246067047119f, 0.5087692141532898f, 0.3368779122829437f, 0.9232786297798157f, 0.15761004388332367f, 0.861812949180603f, +0.061685021966695786f, 0.9241916537284851f, 0.6205100417137146f, 0.9763492345809937f, 0.3651334047317505f, 0.7409932613372803f, 0.07137203216552734f, 0.2425290197134018f, +0.3906627893447876f, 0.5809389352798462f, 0.11115852743387222f, 0.38650354743003845f, 0.5062469244003296f, 0.23707623779773712f, 0.9629796743392944f, 0.7833746671676636f, +0.4439777135848999f, 0.9688477516174316f, 0.7231343984603882f, 0.9197982549667358f, 0.9272449016571045f, 0.45810893177986145f, 0.9192230105400085f, 0.2014196813106537f, +0.8700417280197144f, 0.13883793354034424f, 0.41978079080581665f, 0.9135292768478394f, 0.8126493096351624f, 0.04610683023929596f, 0.15569967031478882f, 0.6578022241592407f, +0.16982805728912354f, 0.7141500115394592f, 0.2917137145996094f, 0.837846577167511f, 0.6298165321350098f, 0.9872027039527893f, 0.3783004879951477f, 0.18701687455177307f, +0.0011277582962065935f, 0.0724763423204422f, 0.6302055716514587f, 0.9181770086288452f, 0.603455662727356f, 0.14548859000205994f, 0.027611758559942245f, 0.9366119503974915f, +0.3842877149581909f, 0.5613253712654114f, 0.9619826078414917f, 0.6963545083999634f, 0.6181048154830933f, 0.38430750370025635f, 0.17199960350990295f, 0.8811128735542297f, +0.6614646911621094f, 0.407166451215744f, 0.32122698426246643f, 0.8575189709663391f, 0.22549542784690857f, 0.542267382144928f, 0.0469500906765461f, 0.8564711213111877f, +0.8862619996070862f, 0.7052718997001648f, 0.5516305565834045f, 0.9703276753425598f, 0.9538066983222961f, 0.963339626789093f, 0.22411991655826569f, 0.0049109142273664474f, +0.18223203718662262f, 0.15517282485961914f, 0.6419276595115662f, 0.9002151489257812f, 0.6054328083992004f, 0.12446307390928268f, 0.9528920650482178f, 0.3236229419708252f, +0.9460150003433228f, 0.4088519811630249f, 0.7308881878852844f, 0.6988528966903687f, 0.3496190011501312f, 0.6655849814414978f, 0.1588231921195984f, 0.80741286277771f, +0.06034625321626663f, 0.8706017732620239f, 0.6985388994216919f, 0.0009118266752921045f, 0.3795318007469177f, 0.9974249601364136f, 0.5821566581726074f, 0.16816595196723938f, +0.8657814860343933f, 0.644421398639679f, 0.6795912384986877f, 0.11808715760707855f, 0.5643410682678223f, 0.4298326075077057f, 0.614531934261322f, 0.9252768754959106f, +0.308489590883255f, 0.4266239404678345f, 0.8054547309875488f, 0.9955222606658936f, 0.03950605168938637f, 0.7381595373153687f, 0.27836260199546814f, 0.9698251485824585f, +0.1703810840845108f, 0.1891806721687317f, 0.3301416039466858f, 0.8769330978393555f, 0.6698101162910461f, 0.9301506280899048f, 0.6356351375579834f, 0.6377316117286682f, +0.07081342488527298f, 0.17299602925777435f, 0.9371086359024048f, 0.5519812107086182f, 0.6995261311531067f, 0.0877242162823677f, 0.4967972934246063f, 0.8908548355102539f, +0.8633397221565247f, 0.02497243322432041f, 0.353525310754776f, 0.8568832874298096f, 0.9236020445823669f, 0.521291196346283f, 0.9679954051971436f, 0.532447874546051f, +0.27544474601745605f, 0.5198265314102173f, 0.3312476873397827f, 0.920464813709259f, 0.09228654950857162f, 0.3572537899017334f, 0.6777480840682983f, 0.9669642448425293f, +0.6343472599983215f, 0.5786816477775574f, 0.9356985688209534f, 0.7914524674415588f, 0.9554285407066345f, 0.6909747123718262f, 0.8066301345825195f, 0.7433843016624451f, +0.9324567317962646f, 0.16695468127727509f, 0.6677006483078003f, 0.6194729208946228f, 0.5133019089698792f, 0.8844609260559082f, 0.3178258538246155f, 0.4515480101108551f, +0.8164159655570984f, 0.441409707069397f, 0.6295788288116455f, 0.9483464360237122f, 0.5991895198822021f, 0.3774697780609131f, 0.11243269592523575f, 0.06252631545066833f, +0.27946290373802185f, 0.4166097044944763f, 0.33913207054138184f, 0.4999193549156189f, 0.3173021376132965f, 0.1892971694469452f, 0.7021823525428772f, 0.03917985036969185f, +0.11722353845834732f, 0.8999365568161011f, 0.9073235392570496f, 0.3309096097946167f, 0.8063836097717285f, 0.8177704811096191f, 0.08166489750146866f, 0.9212014079093933f, +0.10079614073038101f, 0.6132789254188538f, 0.726828396320343f, 0.6955903768539429f, 0.9591151475906372f, 0.13434913754463196f, 0.57199627161026f, 0.5649867653846741f, +0.8284542560577393f, 0.308773934841156f, 0.12818670272827148f, 0.488707959651947f, 0.686822235584259f, 0.32057270407676697f, 0.06062278524041176f, 0.2025676816701889f, +0.6242576241493225f, 0.12252405285835266f, 0.383661150932312f, 0.29773572087287903f, 0.6245941519737244f, 0.36016228795051575f, 0.4424024522304535f, 0.8486515283584595f, +0.14870846271514893f, 0.3023446500301361f, 0.3552164137363434f, 0.8636777997016907f, 0.3129495680332184f, 0.32987964153289795f, 0.014217612333595753f, 0.6346150040626526f, +0.6147540807723999f, 0.09688249975442886f, 0.9340182542800903f, 0.49803730845451355f, 0.8607807159423828f, 0.779222309589386f, 0.8697476387023926f, 0.17081618309020996f, +0.5251673460006714f, 0.2745319902896881f, 0.5141861438751221f, 0.4413442015647888f, 0.36181557178497314f, 0.022292084991931915f, 0.47613275051116943f, 0.41888123750686646f, +0.4756057858467102f, 0.9992407560348511f, 0.1881628781557083f, 0.6528970003128052f, 0.6642721891403198f, 0.03982074558734894f, 0.9784036874771118f, 0.062255389988422394f, +0.6071507334709167f, 0.6886504292488098f, 0.5311115384101868f, 0.51641446352005f, 0.39406394958496094f, 0.7468159794807434f, 0.049259401857852936f, 0.7698203921318054f, +0.8787469863891602f, 0.8993214964866638f, 0.969070553779602f, 0.9274696111679077f, 0.7271041870117188f, 0.7288404107093811f, 0.8660353422164917f, 0.9273079633712769f, +0.9577144980430603f, 0.9060932397842407f, 0.02539508417248726f, 0.034486956894397736f, 0.8601793646812439f, 0.4161074459552765f, 0.16620022058486938f, 0.8614345192909241f, +0.43809908628463745f, 0.6030964851379395f, 0.4204423725605011f, 0.8951352834701538f, 0.574187695980072f, 0.4162156283855438f, 0.760049045085907f, 0.2794862687587738f, +0.9391196966171265f, 0.6433303952217102f, 0.8099455833435059f, 0.8183708190917969f, 0.46755215525627136f, 0.961249053478241f, 0.4011058509349823f, 0.5839749574661255f, +0.9054117798805237f, 0.04070884734392166f, 0.5723254680633545f, 0.09755879640579224f, 0.3279675543308258f, 0.15102963149547577f, 0.15787017345428467f, 0.996127188205719f, +0.39042386412620544f, 0.3940868675708771f, 0.30955639481544495f, 0.9446166157722473f, 0.21424365043640137f, 0.2789422869682312f, 0.5174834728240967f, 0.3975215554237366f, +0.11879073828458786f, 0.17797613143920898f, 0.7848310470581055f, 0.6793209910392761f, 0.16737954318523407f, 0.9400531053543091f, 0.8748876452445984f, 0.5324404835700989f, +0.9304373264312744f, 0.5359554290771484f, 0.27794936299324036f, 0.7745428681373596f, 0.4064997136592865f, 0.302681565284729f, 0.22618640959262848f, 0.524472713470459f, +0.8935640454292297f, 0.25989437103271484f, 0.9569293856620789f, 0.4298802316188812f, 0.9623500108718872f, 0.6758571267127991f, 0.6618871688842773f, 0.42209386825561523f, +0.9731661677360535f, 0.46698692440986633f, 0.7179856896400452f, 0.5392918586730957f, 0.1685984581708908f, 0.4222778379917145f, 0.28208547830581665f, 0.42045149207115173f, +0.7026668787002563f, 0.9538904428482056f, 0.6054723858833313f, 0.18255192041397095f, 0.8972110748291016f, 0.9954649209976196f, 0.5675415396690369f, 0.8359251618385315f, +0.07659370452165604f, 0.8477851748466492f, 0.5768004059791565f, 0.7407287359237671f, 0.7759389877319336f, 0.534870445728302f, 0.7988259196281433f, 0.28294697403907776f, +0.637071430683136f, 0.3589612543582916f, 0.3858056664466858f, 0.072257861495018f, 0.15756456553936005f, 0.5016670823097229f, 0.04590115323662758f, 0.44810670614242554f, +0.5150830745697021f, 0.5178655385971069f, 0.7950919270515442f, 0.2072233408689499f, 0.20783253014087677f, 0.6603925228118896f, 0.42485952377319336f, 0.6329214572906494f, +0.08101128786802292f, 0.07257729768753052f, 0.8200110793113708f, 0.4809240698814392f, 0.5204634070396423f, 0.8702986836433411f, 0.7202004790306091f, 0.4882960021495819f, +0.27167049050331116f, 0.4142420291900635f, 0.5336354374885559f, 0.7477253675460815f, 0.4814209043979645f, 0.9144323468208313f, 0.7032313346862793f, 0.08584735542535782f, +0.30205318331718445f, 0.035684410482645035f, 0.31081515550613403f, 0.6029736995697021f, 0.6258441209793091f, 0.10367070883512497f, 0.28535541892051697f, 0.6521870493888855f, +0.03363383188843727f, 0.5011154413223267f, 0.191068634390831f, 0.6675857901573181f, 0.32887402176856995f, 0.6575809121131897f, 0.916649580001831f, 0.7882685661315918f, +0.2831968665122986f, 0.5511769652366638f, 0.37316063046455383f, 0.4292934834957123f, 0.6373752951622009f, 0.7394635677337646f, 0.06143923103809357f, 0.07362107932567596f, +0.36559805274009705f, 0.14094781875610352f, 0.6072874069213867f, 0.15631446242332458f, 0.10712052881717682f, 0.894069254398346f, 0.39345356822013855f, 0.5448822379112244f, +0.7979488968849182f, 0.7765420079231262f, 0.39262858033180237f, 0.5741602182388306f, 0.37876641750335693f, 0.4752857983112335f, 0.2853831648826599f, 0.6606851816177368f, +0.16323748230934143f, 0.5639951825141907f, 0.49130308628082275f, 0.1729862242937088f, 0.6126982569694519f, 0.11630085855722427f, 0.3293808698654175f, 0.8913552165031433f, +0.5002416372299194f, 0.21050818264484406f, 0.08678247779607773f, 0.3650769293308258f, 0.5423306226730347f, 0.8477681279182434f, 0.5016502737998962f, 0.4170909821987152f, +0.7419902682304382f, 0.88785719871521f, 0.8249770402908325f, 0.8604937195777893f, 0.24629391729831696f, 0.7549604773521423f, 0.5330644249916077f, 0.015988994389772415f, +0.6588684320449829f, 0.2191964089870453f, 0.01819099485874176f, 0.06042128801345825f, 0.4216374456882477f, 0.5927625894546509f, 0.9179853200912476f, 0.271687388420105f, +0.24839861690998077f, 0.3072563409805298f, 0.2602516710758209f, 0.7215870022773743f, 0.6010447144508362f, 0.428608775138855f, 0.3761577308177948f, 0.4691983461380005f, +0.7582601308822632f, 0.5964633226394653f, 0.7201600074768066f, 0.8393223881721497f, 0.3955395817756653f, 0.4631068706512451f, 0.980338990688324f, 0.013883671723306179f, +0.8280118703842163f, 0.9870029091835022f, 0.41273918747901917f, 0.9706955552101135f, 0.2957228124141693f, 0.2633299231529236f, 0.5715712308883667f, 0.8563257455825806f, +0.4056214988231659f, 0.839909017086029f, 0.40716463327407837f, 0.8793319463729858f, 0.38149529695510864f, 0.60481196641922f, 0.7237743139266968f, 0.5619637370109558f, +0.013235398568212986f, 0.22510278224945068f, 0.8049729466438293f, 0.04988021031022072f, 0.6697704792022705f, 0.061539556831121445f, 0.4746103882789612f, 0.7249882221221924f, +0.6539497971534729f, 0.6811684370040894f, 0.6045066118240356f, 0.3056333065032959f, 0.5259822010993958f, 0.9362925291061401f, 0.22314682602882385f, 0.5131101608276367f, +0.19437837600708008f, 0.15752293169498444f, 0.6591984033584595f, 0.9512067437171936f, 0.7167921662330627f, 0.37610116600990295f, 0.5002170205116272f, 0.7356219291687012f, +0.9996771216392517f, 0.2461041510105133f, 0.717126190662384f, 0.4245232939720154f, 0.5161256790161133f, 0.8060639500617981f, 0.8656934499740601f, 0.5962143540382385f, +0.5388940572738647f, 0.430324912071228f, 0.7219606637954712f, 0.3222062587738037f, 0.7314228415489197f, 0.13501833379268646f, 0.3050663471221924f, 0.04752093926072121f, +0.34413766860961914f, 0.08897601813077927f, 0.42378196120262146f, 0.7440177798271179f, 0.3953395485877991f, 0.7720502614974976f, 0.09533575177192688f, 0.823346734046936f, +0.8304653763771057f, 0.15057343244552612f, 0.17782016098499298f, 0.06285151094198227f, 0.7322462797164917f, 0.9752517938613892f, 0.2889399230480194f, 0.5491576194763184f, +0.980974555015564f, 0.5993697643280029f, 0.28192493319511414f, 0.6767492294311523f, 0.8119259476661682f, 0.49841073155403137f, 0.5000166296958923f, 0.11979702115058899f, +0.08918150514364243f, 0.8637426495552063f, 0.403439998626709f, 0.17466042935848236f, 0.4003397524356842f, 0.9228733777999878f, 0.09078119695186615f, 0.40070754289627075f, +0.25973886251449585f, 0.5921636819839478f, 0.523902177810669f, 0.5211495161056519f, 0.9606727361679077f, 0.3916522264480591f, 0.21400174498558044f, 0.3314599394798279f, +0.08192885667085648f, 0.967858612537384f, 0.6554742455482483f, 0.23107357323169708f, 0.42212456464767456f, 0.9133533835411072f, 0.5725111961364746f, 0.39602401852607727f, +0.30062490701675415f, 0.9946382641792297f, 0.011290768161416054f, 0.15550944209098816f, 0.11663677543401718f, 0.284715473651886f, 0.08487269282341003f, 0.7311835885047913f, +0.14266535639762878f, 0.39443811774253845f, 0.6264910101890564f, 0.7649731040000916f, 0.8366255760192871f, 0.381332129240036f, 0.5837832689285278f, 0.7368402481079102f, +0.5458778738975525f, 0.6902825832366943f, 0.0873844176530838f, 0.18725912272930145f, 0.8632140159606934f, 0.43517670035362244f, 0.8299917578697205f, 0.25646835565567017f, +0.6225188970565796f, 0.941036581993103f, 0.461923211812973f, 0.5970525145530701f, 0.5743564963340759f, 0.5161263346672058f, 0.32807791233062744f, 0.23521116375923157f, +0.3120119273662567f, 0.12860822677612305f, 0.9770714640617371f, 0.6347535252571106f, 0.8954899907112122f, 0.41534706950187683f, 0.9310324192047119f, 0.7481645345687866f, +0.948969304561615f, 0.6741135716438293f, 0.6452339887619019f, 0.697234034538269f, 0.432142972946167f, 0.029898913577198982f, 0.23530541360378265f, 0.49885666370391846f, +0.9118918180465698f, 0.7137000560760498f, 0.22691158950328827f, 0.2659718096256256f, 0.9857680797576904f, 0.6545388698577881f, 0.9223415851593018f, 0.8014532923698425f, +0.09052234888076782f, 0.09718639403581619f, 0.5515756011009216f, 0.0930292084813118f, 0.8807957768440247f, 0.33678844571113586f, 0.7123733162879944f, 0.7959496974945068f, +0.46394169330596924f, 0.12826046347618103f, 0.7344489693641663f, 0.8079171180725098f, 0.9032436609268188f, 0.23393362760543823f, 0.0849335789680481f, 0.028819816187024117f, +0.5212732553482056f, 0.5777975916862488f, 0.14865680038928986f, 0.8559839725494385f, 0.1466771811246872f, 0.3205518126487732f, 0.4250863194465637f, 0.17939618229866028f, +0.5907772183418274f, 0.7688435912132263f, 0.5104073882102966f, 0.7294270992279053f, 0.7152422666549683f, 0.6191809773445129f, 0.13122154772281647f, 0.5045508146286011f, +0.6204419732093811f, 0.0017806192627176642f, 0.08496128022670746f, 0.038527172058820724f, 0.6477400660514832f, 0.4340575933456421f, 0.24799984693527222f, 0.9709015488624573f, +0.735663890838623f, 0.1652866005897522f, 0.5817975401878357f, 0.8759350180625916f, 0.13110846281051636f, 0.9379919767379761f, 0.4999566972255707f, 0.07966727763414383f, +0.877062201499939f, 0.5875148773193359f, 0.3832138478755951f, 0.7208573222160339f, 0.7700827717781067f, 0.3654944896697998f, 0.9112752676010132f, 0.8553023338317871f, +0.8820070624351501f, 0.3867551386356354f, 0.24606572091579437f, 0.6478461623191833f, 0.7673803567886353f, 0.9089292883872986f, 0.7374443411827087f, 0.7280483841896057f, +0.4956219792366028f, 0.7489749193191528f, 0.41237643361091614f, 0.6723405718803406f, 0.16773845255374908f, 0.8298079967498779f, 0.03449087217450142f, 0.9093791246414185f, +0.3978249430656433f, 0.409004807472229f, 0.9989405870437622f, 0.8603475689888f, 0.8240804076194763f, 0.5156434178352356f, 0.574566125869751f, 0.054919615387916565f, +0.6202499270439148f, 0.49362611770629883f, 0.9833568930625916f, 0.23586565256118774f, 0.2767401933670044f, 0.9798162579536438f, 0.35285618901252747f, 0.6825038194656372f, +0.05188680812716484f, 0.6302458643913269f, 0.3428569734096527f, 0.17413470149040222f, 0.45915380120277405f, 0.6491093039512634f, 0.6647477746009827f, 0.7651820182800293f, +0.5885677337646484f, 0.5676196813583374f, 0.9897397756576538f, 0.23880447447299957f, 0.09990610927343369f, 0.2921386957168579f, 0.6679852604866028f, 0.5545558929443359f, +0.60599285364151f, 0.17785069346427917f, 0.12157052755355835f, 0.18230020999908447f, 0.8063779473304749f, 0.0699157863855362f, 0.9545525908470154f, 0.021232156082987785f, +0.663221538066864f, 0.7996393442153931f, 0.3286159634590149f, 0.2857363224029541f, 0.34289032220840454f, 0.7984939813613892f, 0.059904079884290695f, 0.8618441224098206f, +0.9303385615348816f, 0.9463258981704712f, 0.265651136636734f, 0.9431519508361816f, 0.9380291104316711f, 0.907925546169281f, 0.9006449580192566f, 0.7075076103210449f, +0.5782892107963562f, 0.20293352007865906f, 0.9937611222267151f, 0.2727678120136261f, 0.2115253210067749f, 0.45429864525794983f, 0.23801705241203308f, 0.7112724781036377f, +0.5521109104156494f, 0.45811378955841064f, 0.8284187316894531f, 0.29685765504837036f, 0.824678361415863f, 0.22538910806179047f, 0.6632634997367859f, 0.2731128931045532f, +0.8120974898338318f, 0.5533139109611511f, 0.3226732909679413f, 0.4253401458263397f, 0.4078829884529114f, 0.8153353333473206f, 0.7849650979042053f, 0.8786647319793701f, +0.8547857403755188f, 0.41408252716064453f, 0.9425647854804993f, 0.9515156745910645f, 0.44376230239868164f, 0.8969382047653198f, 0.4886052906513214f, 0.6469270586967468f, +0.0653318464756012f, 0.026331255212426186f, 0.5658653378486633f, 0.9710065126419067f, 0.11849784106016159f, 0.9554137587547302f, 0.9050561189651489f, 0.39994028210639954f, +0.753038763999939f, 0.7724601626396179f, 0.2110249549150467f, 0.2874462902545929f, 0.7131916284561157f, 0.5915380120277405f, 0.10073591023683548f, 0.6193108558654785f, +0.20199483633041382f, 0.2962588667869568f, 0.12341032177209854f, 0.8306940197944641f, 0.6591901779174805f, 0.6966819167137146f, 0.024811582639813423f, 0.7857562303543091f, +0.568986713886261f, 0.5320004820823669f, 0.6154755353927612f, 0.09421832859516144f, 0.5787178874015808f, 0.31355610489845276f, 0.8103981614112854f, 0.575201690196991f, +0.21588034927845f, 0.5372095108032227f, 0.35363155603408813f, 0.39811971783638f, 0.8624044060707092f, 0.5087131857872009f, 0.8300310373306274f, 0.36593809723854065f, +0.42367392778396606f, 0.3115014433860779f, 0.08592156320810318f, 0.41002458333969116f, 0.7133165001869202f, 0.4927496314048767f, 0.06669232994318008f, 0.43268927931785583f, +0.2670727074146271f, 0.8977527022361755f, 0.14734530448913574f, 0.8961290717124939f, 0.308827668428421f, 0.15906742215156555f, 0.5155662894248962f, 0.2900759279727936f, +0.6053717732429504f, 0.10920456796884537f, 0.5051991939544678f, 0.4652152359485626f, 0.8491814732551575f, 0.5173233151435852f, 0.2508529722690582f, 0.5944001078605652f, +0.44041213393211365f, 0.13891594111919403f, 0.6157460808753967f, 0.5289347767829895f, 0.6159846782684326f, 0.39948970079421997f, 0.7625687122344971f, 0.09514454752206802f, +0.506289541721344f, 0.5685026049613953f, 0.5408414602279663f, 0.5643022060394287f, 0.23239284753799438f, 0.20554792881011963f, 0.5585443377494812f, 0.450460284948349f, +0.6688448786735535f, 0.8998993039131165f, 0.3461960256099701f, 0.6907151341438293f, 0.9911410808563232f, 0.3769420385360718f, 0.14596904814243317f, 0.4884375035762787f, +0.1412731558084488f, 0.11430232971906662f, 0.3114927113056183f, 0.8566482067108154f, 0.890663743019104f, 0.11676899343729019f, 0.8443052172660828f, 0.8090234994888306f, +0.44772300124168396f, 0.5440807938575745f, 0.35618463158607483f, 0.4900359809398651f, 0.48726126551628113f, 0.7625546455383301f, 0.18885554373264313f, 0.8753058910369873f, +0.5983404517173767f, 0.6521201133728027f, 0.677757203578949f, 0.2808185815811157f, 0.7207753658294678f, 0.872707724571228f, 0.194549560546875f, 0.45984745025634766f, +0.8167155385017395f, 0.5366674661636353f, 0.12470617890357971f, 0.45363616943359375f, 0.743007242679596f, 0.28004366159439087f, 0.5115725994110107f, 0.5984835028648376f, +0.5543760061264038f, 0.9116950631141663f, 0.5483152270317078f, 0.3281014859676361f, 0.8832617998123169f, 0.0221303291618824f, 0.6860143542289734f, 0.3189725875854492f, +0.5546800494194031f, 0.9955506324768066f, 0.015533768571913242f, 0.6297677159309387f, 0.3634706139564514f, 0.3218989968299866f, 0.8907623291015625f, 0.3192087709903717f, +0.8311365246772766f, 0.1440148651599884f, 0.1710696518421173f, 0.07057067006826401f, 0.9732903838157654f, 0.8719549775123596f, 0.303291380405426f, 0.6471080183982849f, +0.7797466516494751f, 0.8530577421188354f, 0.10041266679763794f, 0.1868533343076706f, 0.2717101275920868f, 0.051648788154125214f, 0.13235758244991302f, 0.664722204208374f, +0.47787541151046753f, 0.14578907191753387f, 0.7339702844619751f, 0.45604830980300903f, 0.7161210179328918f, 0.09997671097517014f, 0.15180210769176483f, 0.24730846285820007f, +0.2910257875919342f, 0.7570492625236511f, 0.9090099334716797f, 0.8226875066757202f, 0.6310852766036987f, 0.019035253673791885f, 0.5845835208892822f, 0.05446847528219223f, +0.655282199382782f, 0.11196491867303848f, 0.19873425364494324f, 0.31514787673950195f, 0.041164182126522064f, 0.9617456793785095f, 0.9226673245429993f, 0.04562624916434288f, +0.6353216171264648f, 0.5448214411735535f, 0.5454877614974976f, 0.11326097697019577f, 0.30455508828163147f, 0.5181491374969482f, 0.049191754311323166f, 0.42067235708236694f, +0.13962414860725403f, 0.03892205283045769f, 0.9742793440818787f, 0.43470531702041626f, 0.4234696924686432f, 0.5857940912246704f, 0.8254252672195435f, 0.41992995142936707f, +0.273125022649765f, 0.15641571581363678f, 0.9148302674293518f, 0.6037716269493103f, 0.8576107025146484f, 0.8868223428726196f, 0.21785227954387665f, 0.710502564907074f, +0.6705735921859741f, 0.8144428730010986f, 0.4175541400909424f, 0.33538246154785156f, 0.5024579167366028f, 0.2827816605567932f, 0.4341205358505249f, 0.6069480180740356f, +0.18444131314754486f, 0.864378809928894f, 0.5524086952209473f, 0.9191980957984924f, 0.016319748014211655f, 0.07358837872743607f, 0.8281199336051941f, 0.7497269511222839f, +0.9827877283096313f, 0.38823947310447693f, 0.5648701786994934f, 0.5530095100402832f, 0.24113738536834717f, 0.4634290039539337f, 0.01511263009160757f, 0.708010733127594f, +0.8462137579917908f, 0.5926382541656494f, 0.03600212559103966f, 0.19625620543956757f, 0.3312658667564392f, 0.905205488204956f, 0.7065527439117432f, 0.3726596236228943f, +0.48545902967453003f, 0.014637961983680725f, 0.9608190059661865f, 0.2979380488395691f, 0.26455414295196533f, 0.036958351731300354f, 0.3569968342781067f, 0.44515180587768555f, +0.3060038089752197f, 0.8039587736129761f, 0.09591066092252731f, 0.4883654713630676f, 0.129191592335701f, 0.5965046882629395f, 0.6335320472717285f, 0.682556688785553f, +0.7790451645851135f, 0.7750684022903442f, 0.01266133226454258f, 0.906800389289856f, 0.7544551491737366f, 0.6573173403739929f, 0.4393043518066406f, 0.10228710621595383f, +0.9783257246017456f, 0.8258422613143921f, 0.16822725534439087f, 0.7521511912345886f, 0.6008104681968689f, 0.47179222106933594f, 0.3144506514072418f, 0.009861290454864502f, +0.26599934697151184f, 0.12537425756454468f, 0.9086581468582153f, 0.4267858862876892f, 0.4053488075733185f, 0.22619640827178955f, 0.631440281867981f, 0.4583982229232788f, +0.19365167617797852f, 0.3855571448802948f, 0.33250853419303894f, 0.48878324031829834f, 0.5985289216041565f, 0.2664608657360077f, 0.8618472814559937f, 0.6357462406158447f, +0.8888583779335022f, 0.9536294937133789f, 0.8751773238182068f, 0.3916631042957306f, 0.30812713503837585f, 0.04756563529372215f, 0.4280718266963959f, 0.8871962428092957f, +0.2550734877586365f, 0.6033104062080383f, 0.03980119526386261f, 0.9038243293762207f, 0.2905411422252655f, 0.26097163558006287f, 0.987346887588501f, 0.37860429286956787f, +0.9921301007270813f, 0.7127262353897095f, 0.5768391489982605f, 0.6137235164642334f, 0.9053151607513428f, 0.45410266518592834f, 0.588896632194519f, 0.2097441405057907f, +0.16717810928821564f, 0.14525780081748962f, 0.7889949083328247f, 0.17155981063842773f, 0.9136633276939392f, 0.0362793430685997f, 0.14522838592529297f, 0.9065960645675659f, +0.8820643424987793f, 0.285506933927536f, 0.9638975262641907f, 0.7815591096878052f, 0.7841461300849915f, 0.7188349366188049f, 0.5750679969787598f, 0.7646360397338867f, +0.6498486995697021f, 0.22266703844070435f, 0.775888979434967f, 0.3982332944869995f, 0.40138301253318787f, 0.24345597624778748f, 0.6802246570587158f, 0.5150250196456909f, +0.9206234216690063f, 0.8883543014526367f, 0.3231927752494812f, 0.014306831173598766f, 0.38426753878593445f, 0.8748792409896851f, 0.41633889079093933f, 0.9922409653663635f, +0.38556763529777527f, 0.7685505747795105f, 0.3120202422142029f, 0.025576617568731308f, 0.014454813674092293f, 0.6355235576629639f, 0.5183648467063904f, 0.14995764195919037f, +0.6243398785591125f, 0.20263546705245972f, 0.30913829803466797f, 0.8583033084869385f, 0.32384926080703735f, 0.4688001275062561f, 0.32764941453933716f, 0.6823689341545105f, +0.10866474360227585f, 0.1409788876771927f, 0.9380996823310852f, 0.6281797885894775f, 0.06518001854419708f, 0.36231356859207153f, 0.1008562445640564f, 0.38724565505981445f, +0.20760971307754517f, 0.41449815034866333f, 0.6520717144012451f, 0.32864680886268616f, 0.36638715863227844f, 0.6854449510574341f, 0.2296772003173828f, 0.6615619659423828f, +0.7509119510650635f, 0.6746981739997864f, 0.5962074398994446f, 0.1256122887134552f, 0.16707833111286163f, 0.33684295415878296f, 0.8500556349754333f, 0.6638229489326477f, +0.6419312357902527f, 0.06278424710035324f, 0.9875798225402832f, 0.3979518711566925f, 0.4241109788417816f, 0.007576948497444391f, 0.5411335229873657f, 0.1821666955947876f, +0.8955134749412537f, 0.7828841805458069f, 0.2789331376552582f, 0.44218218326568604f, 0.46133244037628174f, 0.5546800494194031f, 0.4336167871952057f, 0.28257840871810913f, +0.3602290153503418f, 0.5894958972930908f, 0.06715723127126694f, 0.11874202638864517f, 0.16824142634868622f, 0.5052385926246643f, 0.9528868794441223f, 0.34140947461128235f, +0.6195513010025024f, 0.2568146288394928f, 0.762307345867157f, 0.757011353969574f, 0.42101338505744934f, 0.5365892052650452f, 0.8860247135162354f, 0.8853518962860107f, +0.7800318002700806f, 0.9277148842811584f, 0.789807915687561f, 0.9427254796028137f, 0.024277452379465103f, 0.40416568517684937f, 0.8463730216026306f, 0.05003577098250389f, +0.43034544587135315f, 0.9962338805198669f, 0.8641099333763123f, 0.043505337089300156f, 0.0696534737944603f, 0.11353126168251038f, 0.193092942237854f, 0.7943512797355652f, +0.19017250835895538f, 0.3320291042327881f, 0.13655222952365875f, 0.6296330094337463f, 0.8521804213523865f, 0.7938870787620544f, 0.41690608859062195f, 0.9538715481758118f, +0.17549316585063934f, 0.9376001954078674f, 0.014083243906497955f, 0.20040319859981537f, 0.2765845060348511f, 0.1634928286075592f, 0.52569580078125f, 0.36794382333755493f, +0.5011605620384216f, 0.6178894639015198f, 0.1338903307914734f, 0.9320346117019653f, 0.27046290040016174f, 0.3886329233646393f, 0.6014553904533386f, 0.2992759346961975f, +0.3895407021045685f, 0.6092590689659119f, 0.653435230255127f, 0.8422946333885193f, 0.9936986565589905f, 0.8176150321960449f, 0.06685927510261536f, 0.043662916868925095f, +0.16724805533885956f, 0.8534308671951294f, 0.8968550562858582f, 0.13667456805706024f, 0.6928503513336182f, 0.20875173807144165f, 0.5083904266357422f, 0.14549942314624786f, +0.7561034560203552f, 0.8647934198379517f, 0.5138643980026245f, 0.25521448254585266f, 0.46144935488700867f, 0.028219817206263542f, 0.8121287226676941f, 0.8861587643623352f, +0.39925268292427063f, 0.6642664074897766f, 0.4747186005115509f, 0.6204966902732849f, 0.8146539926528931f, 0.27598699927330017f, 0.375384122133255f, 0.6172034740447998f, +0.8841845989227295f, 0.12842734158039093f, 0.6089659333229065f, 0.509285032749176f, 0.058063022792339325f, 0.9493873715400696f, 0.34813737869262695f, 0.08534989506006241f, +0.47427719831466675f, 0.6214865446090698f, 0.13909420371055603f, 0.3169286251068115f, 0.5028496980667114f, 0.8869462609291077f, 0.49458417296409607f, 0.4382408559322357f, +0.9265244007110596f, 0.6304371953010559f, 0.4486297070980072f, 0.6089558601379395f, 0.8371502161026001f, 0.4135717451572418f, 0.246536523103714f, 0.8207536339759827f, +0.40208899974823f, 0.07439278811216354f, 0.48625949025154114f, 0.6359370946884155f, 0.6870478987693787f, 0.9354309439659119f, 0.7016733288764954f, 0.045011501759290695f, +0.5840330719947815f, 0.5561285018920898f, 0.2007518857717514f, 0.9615201354026794f, 0.5321490168571472f, 0.6130013465881348f, 0.4837707281112671f, 0.7037702202796936f, +0.8009846806526184f, 0.5277281403541565f, 0.840344250202179f, 0.9523444771766663f, 0.3944694399833679f, 0.5010694265365601f, 0.03832947462797165f, 0.7979871034622192f, +0.10596616566181183f, 0.4903523921966553f, 0.5778331756591797f, 0.004014319274574518f, 0.6000168919563293f, 0.09531975537538528f, 0.1781844049692154f, 0.7279185056686401f, +0.7390218377113342f, 0.5167940855026245f, 0.34088677167892456f, 0.4135981500148773f, 0.1644396185874939f, 0.15591375529766083f, 0.3587683439254761f, 0.5274369716644287f, +0.6719204783439636f, 0.618735671043396f, 0.2893068194389343f, 0.661437451839447f, 0.6500439643859863f, 0.9655999541282654f, 0.5828163623809814f, 0.9599658846855164f, +0.7152648568153381f, 0.2613404095172882f, 0.5532465577125549f, 0.48020702600479126f, 0.6964492797851562f, 0.001710627693682909f, 0.8117525577545166f, 0.74954754114151f, +0.6092060804367065f, 0.7404499650001526f, 0.08592616021633148f, 0.15914973616600037f, 0.25258955359458923f, 0.43946489691734314f, 0.5574948191642761f, 0.5083672404289246f, +0.43983376026153564f, 0.7428169846534729f, 0.3904828429222107f, 0.02178773283958435f, 0.3924410343170166f, 0.6449987888336182f, 0.21004587411880493f, 0.4183998703956604f, +0.4200092852115631f, 0.17651276290416718f, 0.11282870173454285f, 0.6426283121109009f, 0.7336658239364624f, 0.43487632274627686f, 0.9729347229003906f, 0.6642205715179443f, +0.45651745796203613f, 0.7648372650146484f, 0.21165984869003296f, 0.5886141061782837f, 0.3976234793663025f, 0.8689084649085999f, 0.7740580439567566f, 0.11522474884986877f, +0.4015434980392456f, 0.44341713190078735f, 0.28498542308807373f, 0.2879607379436493f, 0.7176828384399414f, 0.6951340436935425f, 0.07788956165313721f, 0.2610306739807129f, +0.6833682656288147f, 0.6342335939407349f, 0.589996337890625f, 0.26333490014076233f, 0.4029056429862976f, 0.07124422490596771f, 0.8842845559120178f, 0.6619667410850525f, +0.5356490612030029f, 0.6087079644203186f, 0.2827938497066498f, 0.29590892791748047f, 0.7396688461303711f, 0.16857117414474487f, 0.5133193135261536f, 0.9776549935340881f, +0.48126912117004395f, 0.8094542026519775f, 0.6528902649879456f, 0.6107155680656433f, 0.8016625642776489f, 0.08244645595550537f, 0.771321713924408f, 0.3350827097892761f, +0.9678395390510559f, 0.24735531210899353f, 0.13440421223640442f, 0.7874352335929871f, 0.6297671794891357f, 0.33399179577827454f, 0.9616477489471436f, 0.6922546625137329f, +0.5969665050506592f, 0.901253342628479f, 0.8164471387863159f, 0.5291999578475952f, 0.5763421058654785f, 0.9193772673606873f, 0.7471936345100403f, 0.46666136384010315f, +0.5424433350563049f, 0.9980921745300293f, 0.4907451570034027f, 0.6067240834236145f, 0.12760046124458313f, 0.8454582095146179f, 0.455108106136322f, 0.08591488003730774f, +0.8132005333900452f, 0.23041418194770813f, 0.5140314698219299f, 0.12789422273635864f, 0.2700554430484772f, 0.4637937843799591f, 0.06945488601922989f, 0.8011279106140137f, +0.694476842880249f, 0.017460230737924576f, 0.24768194556236267f, 0.7460048198699951f, 0.4476523995399475f, 0.9592738151550293f, 0.9334706664085388f, 0.8563166856765747f, +0.02405701018869877f, 0.8748052716255188f, 0.4899097681045532f, 0.5378128290176392f, 0.47078561782836914f, 0.6065688133239746f, 0.8950450420379639f, 0.532412052154541f, +0.132672980427742f, 0.7580535411834717f, 0.1406157910823822f, 0.2856210768222809f, 0.4800311326980591f, 0.5233913660049438f, 0.3767487406730652f, 0.9431273937225342f, +0.5762190818786621f, 0.4711723327636719f, 0.4671941101551056f, 0.7251744270324707f, 0.7089536786079407f, 0.3252106010913849f, 0.7813483476638794f, 0.39447009563446045f, +0.17307248711585999f, 0.5062205791473389f, 0.9249699711799622f, 0.37228718400001526f, 0.9014802575111389f, 0.8665159940719604f, 0.08106740564107895f, 0.12190553545951843f, +0.469309002161026f, 0.28385305404663086f, 0.5811827182769775f, 0.7964622974395752f, 0.5622434020042419f, 0.615023136138916f, 0.5195460915565491f, 0.9482694268226624f, +0.7116723656654358f, 0.10531140118837357f, 0.15621612966060638f, 0.3068212866783142f, 0.9556033611297607f, 0.26398858428001404f, 0.8996900916099548f, 0.039823565632104874f, +0.7479028701782227f, 0.8953718543052673f, 0.8566228151321411f, 0.36208534240722656f, 0.7751792669296265f, 0.8827390074729919f, 0.04727251082658768f, 0.2329840213060379f, +0.8741352558135986f, 0.7999948859214783f, 0.17011238634586334f, 0.7739590406417847f, 0.9018125534057617f, 0.7533838152885437f, 0.11229125410318375f, 0.3280375897884369f, +0.36496487259864807f, 0.07771746814250946f, 0.004569546785205603f, 0.31555992364883423f, 0.8932161331176758f, 0.22337272763252258f, 0.17820920050144196f, 0.45057985186576843f, +0.16484655439853668f, 0.8045949935913086f, 0.3430064916610718f, 0.00036959646968171f, 0.8219940066337585f, 0.5831577777862549f, 0.8775773048400879f, 0.5804205536842346f, +0.6422590613365173f, 0.1684848964214325f, 0.7034308314323425f, 0.05035693943500519f, 0.07295598834753036f, 0.458224892616272f, 0.9127123355865479f, 0.7087920904159546f, +0.7888811826705933f, 0.701108455657959f, 0.8567612171173096f, 0.24637627601623535f, 0.297721266746521f, 0.2578884959220886f, 0.7286907434463501f, 0.9049035906791687f, +0.7118013501167297f, 0.04872909560799599f, 0.9327389001846313f, 0.3606192469596863f, 0.9401946663856506f, 0.8799317479133606f, 0.7039596438407898f, 0.5551322102546692f, +0.6177365779876709f, 0.2945564091205597f, 0.6997566819190979f, 0.34418946504592896f, 0.7328773140907288f, 0.5218751430511475f, 0.2993859350681305f, 0.27977806329727173f, +0.3626372516155243f, 0.7627553939819336f, 0.7553734183311462f, 0.03888775035738945f, 0.12905147671699524f, 0.7660199999809265f, 0.8292693495750427f, 0.44332408905029297f, +0.6026004552841187f, 0.38885298371315f, 0.6450401544570923f, 0.1598948985338211f, 0.9825895428657532f, 0.28701722621917725f, 0.9602426290512085f, 0.6754673719406128f, +0.3565007448196411f, 0.0297166109085083f, 0.5989707112312317f, 0.12777146697044373f, 0.579458475112915f, 0.32835260033607483f, 0.8133782148361206f, 0.4893706142902374f, +0.8600282669067383f, 0.8508809804916382f, 0.2711431682109833f, 0.1689789742231369f, 0.39984869956970215f, 0.8859416842460632f, 0.0754973515868187f, 0.3294084966182709f, +0.7729540467262268f, 0.28358694911003113f, 0.11594494432210922f, 0.74229896068573f, 0.9247230291366577f, 0.8914769887924194f, 0.8738072514533997f, 0.7371338605880737f, +0.504396378993988f, 0.6688611507415771f, 0.7871521711349487f, 0.44628429412841797f, 0.1831922084093094f, 0.9404731392860413f, 0.5125551819801331f, 0.24774041771888733f, +0.5526072382926941f, 0.19059176743030548f, 0.10470312088727951f, 0.7881410121917725f, 0.8421450257301331f, 0.1821689009666443f, 0.8616220355033875f, 0.667272686958313f, +0.5835682153701782f, 0.5558242797851562f, 0.2920060157775879f, 0.21300731599330902f, 0.8631241917610168f, 0.9666324853897095f, 0.3287161886692047f, 0.7155569195747375f, +0.5076180100440979f, 0.5999135375022888f, 0.5505269169807434f, 0.9665152430534363f, 0.6944489479064941f, 0.3898542523384094f, 0.5372393131256104f, 0.6704214215278625f, +0.03565569594502449f, 0.9114417433738708f, 0.5372726321220398f, 0.6165907382965088f, 0.40276092290878296f, 0.342377245426178f, 0.8599420785903931f, 0.5474615693092346f, +0.12359052151441574f, 0.5576699376106262f, 0.0724806860089302f, 0.23054462671279907f, 0.6257238984107971f, 0.6096906661987305f, 0.8046605587005615f, 0.42081183195114136f, +0.07734845578670502f, 0.38889625668525696f, 0.5239826440811157f, 0.5588279962539673f, 0.2588449716567993f, 0.17301826179027557f, 0.4677811861038208f, 0.35012227296829224f, +0.5921913385391235f, 0.5606292486190796f, 0.3753122091293335f, 0.9221010804176331f, 0.7848991751670837f, 0.6898760199546814f, 0.014839508570730686f, 0.5337058305740356f, +0.6504946947097778f, 0.6196128726005554f, 0.8787601590156555f, 0.5098540782928467f, 0.5640305876731873f, 0.757814884185791f, 0.6623452305793762f, 0.4636453092098236f, +0.22138291597366333f, 0.5527657866477966f, 0.07306565344333649f, 0.17063266038894653f, 0.3079855740070343f, 0.5538101196289062f, 0.05945511534810066f, 0.2672727108001709f, +0.6210417151451111f, 0.7392823696136475f, 0.8129575848579407f, 0.4812772572040558f, 0.7076038122177124f, 0.04405512660741806f, 0.6298726797103882f, 0.26540929079055786f, +0.6150272488594055f, 0.9756981134414673f, 0.4371036887168884f, 0.9767159223556519f, 0.7692124247550964f, 0.7758411169052124f, 0.7079969048500061f, 0.17860904335975647f, +0.1375948041677475f, 0.060482557862997055f, 0.4243655502796173f, 0.297219455242157f, 0.3753655254840851f, 0.22854626178741455f, 0.24535708129405975f, 0.8478183150291443f, +0.04314964637160301f, 0.7202558517456055f, 0.32556357979774475f, 0.7577293515205383f, 0.14511501789093018f, 0.18765923380851746f, 0.46126091480255127f, 0.9985043406486511f, +0.42720916867256165f, 0.5867698192596436f, 0.6771236062049866f, 0.19831569492816925f, 0.024957651272416115f, 0.5642791390419006f, 0.4451841115951538f, 0.3854886293411255f, +0.07443784922361374f, 0.3924124240875244f, 0.5719414353370667f, 0.8731484413146973f, 0.8653736114501953f, 0.72737056016922f, 0.8166077136993408f, 0.4890635013580322f, +0.8462246060371399f, 0.23459254205226898f, 0.34476587176322937f, 0.8681560158729553f, 0.8973720073699951f, 0.11900568753480911f, 0.7450494766235352f, 0.6498982310295105f, +0.7061951160430908f, 0.5108964443206787f, 0.4499428868293762f, 0.3507477045059204f, 0.9841734170913696f, 0.738440990447998f, 0.23444660007953644f, 0.8871872425079346f, +0.38274744153022766f, 0.626654863357544f, 0.725433886051178f, 0.6055929064750671f, 0.752227246761322f, 0.8169966340065002f, 0.7437977194786072f, 0.7290552258491516f, +0.08987953513860703f, 0.28578343987464905f, 0.49753305315971375f, 0.6699801683425903f, 0.3902170956134796f, 0.45924296975135803f, 0.2185877114534378f, 0.9589265584945679f, +0.12850521504878998f, 0.7919471263885498f, 0.5389032959938049f, 0.8786743879318237f, 0.44939902424812317f, 0.2132100760936737f, 0.3073723316192627f, 0.7340798377990723f, +0.830446183681488f, 0.8688352108001709f, 0.04907132685184479f, 0.8102662563323975f, 0.6955304741859436f, 0.9050179719924927f, 0.850845992565155f, 0.4186190366744995f, +0.9250835180282593f, 0.8700835704803467f, 0.4012622535228729f, 0.3029974400997162f, 0.6595343351364136f, 0.2902436852455139f, 0.5285696387290955f, 0.585321843624115f, +0.9589243531227112f, 0.6288328766822815f, 0.9511527419090271f, 0.9607029557228088f, 0.054414212703704834f, 0.761611819267273f, 0.5897927284240723f, 0.3742433488368988f, +0.2939223051071167f, 0.4608215093612671f, 0.39916500449180603f, 0.5032185316085815f, 0.45719093084335327f, 0.20819348096847534f, 0.4508039057254791f, 0.6959587931632996f, +0.6465801000595093f, 0.29918479919433594f, 0.9350070953369141f, 0.5182090997695923f, 0.4404326379299164f, 0.2356446534395218f, 0.5253742337226868f, 0.08417563885450363f, +0.3914887011051178f, 0.17866696417331696f, 0.6453613042831421f, 0.7731786370277405f, 0.46054086089134216f, 0.08360981196165085f, 0.8644188642501831f, 0.07036742568016052f, +0.7471668124198914f, 0.19372820854187012f, 0.44920340180397034f, 0.1745065152645111f, 0.6643243432044983f, 0.6374220252037048f, 0.5472181439399719f, 0.3215833008289337f, +0.9773266315460205f, 0.6903449892997742f, 0.057986121624708176f, 0.5459688305854797f, 0.0626724511384964f, 0.5855710506439209f, 0.17192094027996063f, 0.7061382532119751f, +0.9402459859848022f, 0.24739007651805878f, 0.6795639991760254f, 0.7969395518302917f, 0.09729722142219543f, 0.8566197156906128f, 0.8557777404785156f, 0.6644040942192078f, +0.18561913073062897f, 0.18993547558784485f, 0.33467406034469604f, 0.9320047497749329f, 0.8916237950325012f, 0.7411384582519531f, 0.5829344987869263f, 0.9331136345863342f, +0.5154609680175781f, 0.2722175121307373f, 0.2943427264690399f, 0.6142815351486206f, 0.7029716372489929f, 0.1530679613351822f, 0.9483012557029724f, 0.6884393095970154f, +0.8897523880004883f, 0.02261209487915039f, 0.09492183476686478f, 0.05962901934981346f, 0.9063421487808228f, 0.020502272993326187f, 0.6819989085197449f, 0.33825865387916565f, +0.2423991858959198f, 0.013578654266893864f, 0.4697764217853546f, 0.8123241662979126f, 0.9242332577705383f, 0.47251299023628235f, 0.030344301834702492f, 0.667769730091095f, +0.9890044331550598f, 0.0451396219432354f, 0.4596938192844391f, 0.46932128071784973f, 0.5532691478729248f, 0.6952988505363464f, 0.9579592943191528f, 0.5810869932174683f, +0.039789289236068726f, 0.5643244981765747f, 0.34116682410240173f, 0.9935877323150635f, 0.15467962622642517f, 0.28310415148735046f, 0.6768655180931091f, 0.9332503080368042f, +0.5541363954544067f, 0.7776606678962708f, 0.5545363426208496f, 0.7405745983123779f, 0.5434438586235046f, 0.8110389709472656f, 0.5062107443809509f, 0.2828051745891571f, +0.2533399164676666f, 0.5089954733848572f, 0.8829477429389954f, 0.4478719234466553f, 0.9437466859817505f, 0.29255911707878113f, 0.587721586227417f, 0.8880100250244141f, +0.45667722821235657f, 0.9662802219390869f, 0.44437462091445923f, 0.9047298431396484f, 0.5936996936798096f, 0.7082849740982056f, 0.7483503818511963f, 0.1143917441368103f, +0.06080246716737747f, 0.8122029900550842f, 0.8431393504142761f, 0.5869064331054688f, 0.4458550214767456f, 0.26463782787323f, 0.7150306701660156f, 0.4705078601837158f, +0.4957997500896454f, 0.08245730400085449f, 0.39287909865379333f, 0.5609111785888672f, 0.6404134631156921f, 0.7202422618865967f, 0.3901757299900055f, 0.8346697688102722f, +0.34894299507141113f, 0.7530266046524048f, 0.14549073576927185f, 0.6638315916061401f, 0.3552674353122711f, 0.9728140830993652f, 0.437276154756546f, 0.721710205078125f, +0.4446592926979065f, 0.44616076350212097f, 0.4765523076057434f, 0.35160696506500244f, 0.20731724798679352f, 0.529298722743988f, 0.5213706493377686f, 0.18161672353744507f, +0.7488033175468445f, 0.6713526248931885f, 0.4578465521335602f, 0.27345436811447144f, 0.5220915079116821f, 0.8089575171470642f, 0.39643239974975586f, 0.9365876913070679f, +0.4243626594543457f, 0.07193654030561447f, 0.5343090891838074f, 0.4997310936450958f, 0.9774930477142334f, 0.8487306833267212f, 0.7054070830345154f, 0.9774702787399292f, +0.6773715019226074f, 0.2208886593580246f, 0.797924816608429f, 0.1521104872226715f, 0.42071297764778137f, 0.9201852083206177f, 0.11449120193719864f, 0.5447098612785339f, +0.23658163845539093f, 0.9458504319190979f, 0.357706218957901f, 0.5421566367149353f, 0.0449189767241478f, 0.7320505976676941f, 0.42542269825935364f, 0.7691534161567688f, +0.7101292014122009f, 0.39009085297584534f, 0.755530834197998f, 0.26973822712898254f, 0.08865944296121597f, 0.16282381117343903f, 0.15378551185131073f, 0.9532721042633057f, +0.9053204655647278f, 0.46894529461860657f, 0.8601903915405273f, 0.8506554365158081f, 0.5257097482681274f, 0.7367250919342041f, 0.9065684676170349f, 0.005981490481644869f, +0.19151440262794495f, 0.5335626006126404f, 0.5150024890899658f, 0.043054502457380295f, 0.37079352140426636f, 0.360252320766449f, 0.5494816303253174f, 0.7224209904670715f, +0.26644667983055115f, 0.44499534368515015f, 0.27272260189056396f, 0.383100688457489f, 0.137282595038414f, 0.9853568077087402f, 0.7847217917442322f, 0.8345896005630493f, +0.6042003631591797f, 0.6369667053222656f, 0.8890992403030396f, 0.48347237706184387f, 0.7232027649879456f, 0.22190353274345398f, 0.2366141974925995f, 0.06954775005578995f, +0.1566208302974701f, 0.9068636894226074f, 0.9685680270195007f, 0.984794020652771f, 0.9793655276298523f, 0.9191639423370361f, 0.6466361284255981f, 0.7491574287414551f, +0.7613306641578674f, 0.9425565600395203f, 0.08232554793357849f, 0.7267315983772278f, 0.4054759740829468f, 0.017839031293988228f, 0.7504187226295471f, 0.806672215461731f, +0.6575583815574646f, 0.634870707988739f, 0.46099984645843506f, 0.22235123813152313f, 0.6004477143287659f, 0.277504026889801f, 0.8869279623031616f, 0.5516669750213623f, +0.20600271224975586f, 0.1704959273338318f, 0.3242221176624298f, 0.9475549459457397f, 0.7107790112495422f, 0.3204421401023865f, 0.2691721022129059f, 0.4474305510520935f, +0.33389362692832947f, 0.45810890197753906f, 0.488151490688324f, 0.1566302329301834f, 0.7718855142593384f, 0.12975937128067017f, 0.1264336258172989f, 0.3191518485546112f, +0.019475048407912254f, 0.2829691767692566f, 0.3731861412525177f, 0.3503236174583435f, 0.10001193732023239f, 0.6835283041000366f, 0.00045938792754895985f, 0.970020592212677f, +0.8875191807746887f, 0.9727120995521545f, 0.19024139642715454f, 0.1736091673374176f, 0.16926053166389465f, 0.9905165433883667f, 0.6909801363945007f, 0.16090808808803558f, +0.4555824398994446f, 0.5370879769325256f, 0.6473139524459839f, 0.6702296137809753f, 0.5493699908256531f, 0.801182746887207f, 0.7099994421005249f, 0.696937084197998f, +0.8501425981521606f, 0.40232694149017334f, 0.5781128406524658f, 0.5609517097473145f, 0.3586926758289337f, 0.5875291228294373f, 0.5870425701141357f, 0.15120886266231537f, +0.6352200508117676f, 0.6450927257537842f, 0.5125245451927185f, 0.4174916446208954f, 0.1355157047510147f, 0.5186161398887634f, 0.42236635088920593f, 0.8279153108596802f, +0.2997542917728424f, 0.041968949139118195f, 0.23045377433300018f, 0.04522327333688736f, 0.31312116980552673f, 0.036939751356840134f, 0.6379767060279846f, 0.702001690864563f, +0.8922322392463684f, 0.24708107113838196f, 0.22931142151355743f, 0.5365448594093323f, 0.6036836504936218f, 0.6985759735107422f, 0.806715190410614f, 0.7702175378799438f, +0.4469258785247803f, 0.3381221294403076f, 0.03980643302202225f, 0.4859953820705414f, 0.9722622632980347f, 0.2400510460138321f, 0.06344188749790192f, 0.041467003524303436f, +0.8215810060501099f, 0.9690914154052734f, 0.4056061804294586f, 0.39939799904823303f, 0.05238385125994682f, 0.20762109756469727f, 0.981421172618866f, 0.560953676700592f, +0.944010853767395f, 0.4129273593425751f, 0.5214564800262451f, 0.5895150303840637f, 0.8554610013961792f, 0.6596611142158508f, 0.7415406107902527f, 0.7983670234680176f, +0.9827355742454529f, 0.8990867137908936f, 0.1275169998407364f, 0.5647302269935608f, 0.29510951042175293f, 0.8838865756988525f, 0.3314986526966095f, 0.8789060115814209f, +0.18567423522472382f, 0.05602726340293884f, 0.8846105337142944f, 0.7100982069969177f, 0.8898619413375854f, 0.07362251728773117f, 0.15525290369987488f, 0.7962710857391357f, +0.9640716910362244f, 0.12426703423261642f, 0.8926885724067688f, 0.022831158712506294f, 0.911953330039978f, 0.0704045444726944f, 0.759833574295044f, 0.7941198945045471f, +0.39290693402290344f, 0.5918909907341003f, 0.651500940322876f, 0.742051362991333f, 0.9480991363525391f, 0.6818175315856934f, 0.3240054249763489f, 0.8130648732185364f, +0.4256460964679718f, 0.6652555465698242f, 0.9024021625518799f, 0.024928420782089233f, 0.6851176619529724f, 0.2952532470226288f, 0.07291899621486664f, 0.4302487075328827f, +0.9876348376274109f, 0.5664462447166443f, 0.533241331577301f, 0.08854915201663971f, 0.2737753391265869f, 0.831906795501709f, 0.14389313757419586f, 0.27785900235176086f, +0.5561011433601379f, 0.4910045266151428f, 0.6147041320800781f, 0.1566670686006546f, 0.9311637878417969f, 0.5379307270050049f, 0.31778156757354736f, 0.339180588722229f, +0.43672093749046326f, 0.5768997669219971f, 0.34570184350013733f, 0.2768162786960602f, 0.7558488845825195f, 0.7635282278060913f, 0.0946057140827179f, 0.6535192728042603f, +0.8908346891403198f, 0.5835133790969849f, 0.5424901247024536f, 0.8054603338241577f, 0.20536771416664124f, 0.3109109699726105f, 0.16513684391975403f, 0.29651057720184326f, +0.3965870141983032f, 0.21517199277877808f, 0.14377981424331665f, 0.17266041040420532f, 0.26443177461624146f, 0.6975381374359131f, 0.8542569875717163f, 0.23131553828716278f, +0.8058295845985413f, 0.10924158990383148f, 0.6068158149719238f, 0.9362894296646118f, 0.8864644169807434f, 0.8489164710044861f, 0.01748461276292801f, 0.23118409514427185f, +0.4302023649215698f, 0.5410777926445007f, 0.5695695877075195f, 0.08361789584159851f, 0.40077221393585205f, 0.8485974669456482f, 0.9009702205657959f, 0.07876475900411606f, +0.9793270230293274f, 0.9105011820793152f, 0.4461742043495178f, 0.46794530749320984f, 0.03413771092891693f, 0.4441238343715668f, 0.6133241057395935f, 0.6711961030960083f, +0.021496545523405075f, 0.2776033282279968f, 0.3518507480621338f, 0.8367632627487183f, 0.7642127871513367f, 0.885451078414917f, 0.9263898134231567f, 0.9680028557777405f, +0.40751808881759644f, 0.8769844174385071f, 0.7064304351806641f, 0.43238765001296997f, 0.8956096768379211f, 0.4328215420246124f, 0.4301082193851471f, 0.7986930012702942f, +0.02781580202281475f, 0.0909804254770279f, 0.7807135581970215f, 0.2897838056087494f, 0.2731890380382538f, 0.3168872892856598f, 0.9906745553016663f, 0.42437925934791565f, +0.39559924602508545f, 0.7707259654998779f, 0.6423315405845642f, 0.6591423749923706f, 0.2403661459684372f, 0.8655169010162354f, 0.2666156589984894f, 0.9902834892272949f, +0.014098351821303368f, 0.8471586108207703f, 0.5437783598899841f, 0.46935662627220154f, 0.9289140105247498f, 0.3935394585132599f, 0.20189595222473145f, 0.4743833839893341f, +0.774181067943573f, 0.7631738185882568f, 0.480621874332428f, 0.5660600662231445f, 0.21941177546977997f, 0.6359030604362488f, 0.46067118644714355f, 0.003149067983031273f, +0.9866541028022766f, 0.4925748407840729f, 0.1699354648590088f, 0.057642918080091476f, 0.6860424280166626f, 0.0418238490819931f, 0.8693996071815491f, 0.33410120010375977f, +0.5419802069664001f, 0.9796639084815979f, 0.4733956456184387f, 0.5616741180419922f, 0.3894979655742645f, 0.6138827800750732f, 0.7641692161560059f, 0.3959338665008545f, +0.8969154953956604f, 0.8368306159973145f, 0.6656016707420349f, 0.39492905139923096f, 0.8291516900062561f, 0.458199143409729f, 0.6070823669433594f, 0.5206794738769531f, +0.15134648978710175f, 0.896747350692749f, 0.15738804638385773f, 0.24108897149562836f, 0.28541815280914307f, 0.27807825803756714f, 0.09158546477556229f, 0.5098901987075806f, +0.27426740527153015f, 0.12664194405078888f, 0.41969266533851624f, 0.14290139079093933f, 0.16028711199760437f, 0.5968775153160095f, 0.5655363202095032f, 0.17694763839244843f, +0.3405744433403015f, 0.12657050788402557f, 0.9752622246742249f, 0.8703333735466003f, 0.5673854947090149f, 0.21886025369167328f, 0.02424200065433979f, 0.2507234215736389f, +0.9801497459411621f, 0.3171066343784332f, 0.6599130630493164f, 0.9797523617744446f, 0.009179994463920593f, 0.4879445731639862f, 0.6525533199310303f, 0.28413328528404236f, +0.6157984733581543f, 0.9366381168365479f, 0.07749463617801666f, 0.6613272428512573f, 0.5576891303062439f, 0.38746964931488037f, 0.42337802052497864f, 0.6288875341415405f, +0.10037843137979507f, 0.30130836367607117f, 0.5890751481056213f, 0.1901112049818039f, 0.023544833064079285f, 0.19061234593391418f, 0.376132994890213f, 0.15710295736789703f, +0.3225157558917999f, 0.47909095883369446f, 0.10354138165712357f, 0.8411222696304321f, 0.7650653123855591f, 0.9377370476722717f, 0.9224215149879456f, 0.0885915607213974f, +0.6745469570159912f, 0.17313838005065918f, 0.7161040902137756f, 0.9760866165161133f, 0.9473286867141724f, 0.8053717613220215f, 0.5845953822135925f, 0.2646171748638153f, +0.614714503288269f, 0.674559473991394f, 0.6058165431022644f, 0.6377378106117249f, 0.132485032081604f, 0.46913862228393555f, 0.9384961724281311f, 0.46004384756088257f, +0.40517815947532654f, 0.12222146987915039f, 0.3313239812850952f, 0.17672383785247803f, 0.4374222457408905f, 0.03864951804280281f, 0.06769069284200668f, 0.5876254439353943f, +0.42968133091926575f, 0.6465604305267334f, 0.47751620411872864f, 0.14579422771930695f, 0.2823539674282074f, 0.16953401267528534f, 0.4450641870498657f, 0.507892906665802f, +0.17903485894203186f, 0.3284381628036499f, 0.2980603873729706f, 0.2649471163749695f, 0.13460856676101685f, 0.23689676821231842f, 0.6956908106803894f, 0.5786927938461304f, +0.41183844208717346f, 0.17163026332855225f, 0.15097306668758392f, 0.9842211008071899f, 0.7804497480392456f, 0.42779305577278137f, 0.17812608182430267f, 0.0002599241561256349f, +0.09584254026412964f, 0.31754523515701294f, 0.5968770980834961f, 0.9685821533203125f, 0.34547680616378784f, 0.05071377381682396f, 0.1427646279335022f, 0.0612667016685009f, +0.8032445311546326f, 0.7175624370574951f, 0.25585734844207764f, 0.016263047233223915f, 0.7283207178115845f, 0.20810547471046448f, 0.03189733624458313f, 0.5927711129188538f, +0.22640635073184967f, 0.8034831285476685f, 0.5244079232215881f, 0.5324054956436157f, 0.12003157287836075f, 0.7885212302207947f, 0.810421884059906f, 0.7582865357398987f, +0.498405784368515f, 0.37732911109924316f, 0.30890974402427673f, 0.565230667591095f, 0.5709097981452942f, 0.4790186583995819f, 0.9930906891822815f, 0.28899863362312317f, +0.7410882711410522f, 0.1559494137763977f, 0.15207529067993164f, 0.42067280411720276f, 0.20962102711200714f, 0.6121886372566223f, 0.060233913362026215f, 0.5167848467826843f, +0.08856027573347092f, 0.8041704297065735f, 0.30947646498680115f, 0.09024401009082794f, 0.821458101272583f, 0.7544309496879578f, 0.43328988552093506f, 0.9406808614730835f, +0.8717347979545593f, 0.0639505460858345f, 0.9856494069099426f, 0.23560836911201477f, 0.38342612981796265f, 0.17347504198551178f, 0.41942116618156433f, 0.4608573317527771f, +0.14226451516151428f, 0.2955934405326843f, 0.22284983098506927f, 0.5465992093086243f, 0.5398176908493042f, 0.7885376811027527f, 0.9752711057662964f, 0.12449044734239578f, +0.3328235447406769f, 0.4164164364337921f, 0.22333283722400665f, 0.08712631464004517f, 0.8021121025085449f, 0.3632434606552124f, 0.34821009635925293f, 0.20519188046455383f, +0.6761670112609863f, 0.7212013006210327f, 0.12313487380743027f, 0.20991121232509613f, 0.5808674097061157f, 0.2914283573627472f, 0.517288327217102f, 0.6072707772254944f, +0.37153342366218567f, 0.23553910851478577f, 0.45316430926322937f, 0.11623229086399078f, 0.760115921497345f, 0.9282549619674683f, 0.6590517163276672f, 0.8614678382873535f, +0.6413300037384033f, 0.10288772732019424f, 0.5197694301605225f, 0.8450396656990051f, 0.46462172269821167f, 0.6483225226402283f, 0.504074215888977f, 0.6390416026115417f, +0.25073370337486267f, 0.6462201476097107f, 0.44884130358695984f, 0.533173143863678f, 0.37521952390670776f, 0.8245481252670288f, 0.9689756631851196f, 0.4806315004825592f, +0.26043111085891724f, 0.23636144399642944f, 0.6965393424034119f, 0.37951335310935974f, 0.8561241626739502f, 0.1218055784702301f, 0.9275966882705688f, 0.7844882607460022f, +0.5283527374267578f, 0.5786282420158386f, 0.2387721985578537f, 0.13449878990650177f, 0.527057945728302f, 0.6884918808937073f, 0.6898478269577026f, 0.5848707556724548f, +0.4810789227485657f, 0.973711371421814f, 0.5539513230323792f, 0.31003835797309875f, 0.9068326354026794f, 0.2968836724758148f, 0.31101930141448975f, 0.4494730234146118f, +0.861461877822876f, 0.5721254944801331f, 0.7996217012405396f, 0.5524200201034546f, 0.4696176052093506f, 0.5013044476509094f, 0.5486635565757751f, 0.7158207893371582f, +0.4144507348537445f, 0.0671963021159172f, 0.872673749923706f, 0.44636207818984985f, 0.0890437513589859f, 0.6506329774856567f, 0.5512224435806274f, 0.17118118703365326f, +0.8521059155464172f, 0.012758449651300907f, 0.8642054200172424f, 0.2144598811864853f, 0.011195873841643333f, 0.33813798427581787f, 0.6008507013320923f, 0.433647096157074f, +0.5595262050628662f, 0.874528706073761f, 0.8923969864845276f, 0.22700951993465424f, 0.6851800084114075f, 0.8210734128952026f, 0.588947594165802f, 0.8002244830131531f, +0.5072178244590759f, 0.4845779836177826f, 0.46273326873779297f, 0.07095424085855484f, 0.24847981333732605f, 0.7921620607376099f, 0.4553191661834717f, 0.5465638041496277f, +0.9234278202056885f, 0.646521270275116f, 0.2540918290615082f, 0.7541524767875671f, 0.9903644919395447f, 0.0433482825756073f, 0.1288575977087021f, 0.07917777448892593f, +0.532878577709198f, 0.46028661727905273f, 0.9236312508583069f, 0.9968207478523254f, 0.05098749324679375f, 0.3192683458328247f, 0.029597483575344086f, 0.7158625721931458f, +0.2190663069486618f, 0.015018164180219173f, 0.9079572558403015f, 0.8534047603607178f, 0.17873495817184448f, 0.2576795518398285f, 0.3917451500892639f, 0.5713755488395691f, +0.8132254481315613f, 0.0420355387032032f, 0.39726516604423523f, 0.6228246092796326f, 0.45500198006629944f, 0.5040225982666016f, 0.4476810693740845f, 0.7203686237335205f, +0.6892238259315491f, 0.3161042332649231f, 0.1197037398815155f, 0.6797038912773132f, 0.9990723729133606f, 0.2049897313117981f, 0.23188133537769318f, 0.9438063502311707f, +0.9003333449363708f, 0.191987544298172f, 0.3396430015563965f, 0.43422216176986694f, 0.6007048487663269f, 0.513161301612854f, 0.43233466148376465f, 0.6099578142166138f, +0.8141569495201111f, 0.8728110790252686f, 0.43586793541908264f, 0.813911497592926f, 0.8832884430885315f, 0.6695850491523743f, 0.5420873761177063f, 0.42155417799949646f, +0.6710149049758911f, 0.6525400280952454f, 0.7434831261634827f, 0.19411009550094604f, 0.3458646237850189f, 0.3498792350292206f, 0.6424415111541748f, 0.31181979179382324f, +0.2215678095817566f, 0.4672599136829376f, 0.22326311469078064f, 0.7186362743377686f, 0.8717520236968994f, 0.5325424671173096f, 0.41509777307510376f, 0.8416181802749634f, +0.8891468048095703f, 0.5068631172180176f, 0.6609809994697571f, 0.20293979346752167f, 0.29395073652267456f, 0.4632584750652313f, 0.5672935843467712f, 0.49893349409103394f, +0.33322662115097046f, 0.4343646466732025f, 0.8266933560371399f, 0.31454864144325256f, 0.8961934447288513f, 0.37341997027397156f, 0.7709542512893677f, 0.4137808382511139f, +0.85628342628479f, 0.6591991782188416f, 0.1411525458097458f, 0.3736635446548462f, 0.5430601835250854f, 0.4571554958820343f, 0.17568257451057434f, 0.739980936050415f, +0.8639200925827026f, 0.3655080795288086f, 0.35327255725860596f, 0.9234334826469421f, 0.2057614028453827f, 0.8865212798118591f, 0.3756508529186249f, 0.7121757864952087f, +0.7194817066192627f, 0.5532860159873962f, 0.5777426362037659f, 0.4276513457298279f, 0.5737208724021912f, 0.44690608978271484f, 0.3789008855819702f, 0.302653968334198f, +0.006055793259292841f, 0.8096420168876648f, 0.8733126521110535f, 0.849640965461731f, 0.19333603978157043f, 0.528940737247467f, 0.13978128135204315f, 0.6624525785446167f, +0.6419429779052734f, 0.6249298453330994f, 0.6600709557533264f, 0.8797832727432251f, 0.10256069153547287f, 0.13075847923755646f, 0.7677807211875916f, 0.5329908132553101f, +0.8553346395492554f, 0.2564346492290497f, 0.1055261567234993f, 0.437075674533844f, 0.038327354937791824f, 0.20983542501926422f, 0.776443362236023f, 0.7529756426811218f, +0.3363896608352661f, 0.1827436089515686f, 0.8320543169975281f, 0.5903573036193848f, 0.11202044785022736f, 0.6542656421661377f, 0.03857988864183426f, 0.17912258207798004f, +0.7938888669013977f, 0.9865708351135254f, 0.8618100881576538f, 0.3366219401359558f, 0.6245690584182739f, 0.5820906758308411f, 0.46763452887535095f, 0.0015874386299401522f, +0.1388501673936844f, 0.09248799830675125f, 0.09596309065818787f, 0.5638045072555542f, 0.17818447947502136f, 0.23041848838329315f, 0.19895866513252258f, 0.9811155796051025f, +0.4776383340358734f, 0.04072517156600952f, 0.27706170082092285f, 0.5693767070770264f, 0.01816197857260704f, 0.10546718537807465f, 0.39832937717437744f, 0.42641547322273254f, +0.1106448769569397f, 0.9176843166351318f, 0.8916680216789246f, 0.8838919401168823f, 0.6639178991317749f, 0.11735400557518005f, 0.6211603879928589f, 0.8091189861297607f, +0.7563676834106445f, 0.16327457129955292f, 0.9098986387252808f, 0.3828692138195038f, 0.692934513092041f, 0.2992340326309204f, 0.09320522099733353f, 0.9120890498161316f, +0.5673311352729797f, 0.5316146612167358f, 0.8877757787704468f, 0.16062286496162415f, 0.31390437483787537f, 0.6017469763755798f, 0.3013593852519989f, 0.46820348501205444f, +0.9409611821174622f, 0.7094521522521973f, 0.09158171713352203f, 0.9116836190223694f, 0.757343053817749f, 0.49843963980674744f, 0.4816369414329529f, 0.9474183917045593f, +0.5954670906066895f, 0.7366247773170471f, 0.33476608991622925f, 0.5609773993492126f, 0.2671639919281006f, 0.3680673837661743f, 0.7426515221595764f, 0.37782424688339233f, +0.17175783216953278f, 0.13238537311553955f, 0.8612858057022095f, 0.8940066695213318f, 0.46092501282691956f, 0.13402359187602997f, 0.1774541288614273f, 0.5923395752906799f, +0.4070625305175781f, 0.10327564924955368f, 0.9493145942687988f, 0.5029041767120361f, 0.27274930477142334f, 0.11331499367952347f, 0.4666348397731781f, 0.4081171751022339f, +0.1896386444568634f, 0.6927674412727356f, 0.08855724334716797f, 0.07562442868947983f, 0.5918343663215637f, 0.5136390328407288f, 0.8977653980255127f, 0.5323644280433655f, +0.3758719265460968f, 0.37000495195388794f, 0.8320191502571106f, 0.7270020246505737f, 0.03307529166340828f, 0.28744369745254517f, 0.16695325076580048f, 0.47657641768455505f, +0.361660897731781f, 0.0663970559835434f, 0.8471579551696777f, 0.5895298719406128f, 0.2123139500617981f, 0.1379859298467636f, 0.6522750854492188f, 0.27618277072906494f, +0.04509982839226723f, 0.6158717274665833f, 0.4999724328517914f, 0.7362933158874512f, 0.05098237842321396f, 0.9014360308647156f, 0.39379382133483887f, 0.9927893877029419f, +0.48802846670150757f, 0.49769365787506104f, 0.3018453121185303f, 0.22028082609176636f, 0.9387693405151367f, 0.18404686450958252f, 0.2832549214363098f, 0.4701821506023407f, +0.023087259382009506f, 0.41424113512039185f, 0.8185198903083801f, 0.067610003054142f, 0.7119458913803101f, 0.23997625708580017f, 0.9211059808731079f, 0.3064051866531372f, +0.058159731328487396f, 0.6368368864059448f, 0.0686504989862442f, 0.7311335206031799f, 0.06815365701913834f, 0.4899028539657593f, 0.667169988155365f, 0.016707642003893852f, +0.8041982650756836f, 0.7991337180137634f, 0.08620568364858627f, 0.3473470211029053f, 0.5868231058120728f, 0.31276217103004456f, 0.4702310264110565f, 0.7493916749954224f, +0.17381827533245087f, 0.4066622257232666f, 0.8517535328865051f, 0.8970351815223694f, 0.3721867501735687f, 0.02402612380683422f, 0.6056381464004517f, 0.41699308156967163f, +0.9640112519264221f, 0.24201181530952454f, 0.05363086238503456f, 0.9500297904014587f, 0.6740962266921997f, 0.30178704857826233f, 0.8501377105712891f, 0.9356464147567749f, +0.03126265108585358f, 0.7530966997146606f, 0.8572747111320496f, 0.3322966694831848f, 0.49597030878067017f, 0.05950532108545303f, 0.6893213391304016f, 0.6498290300369263f, +0.18357941508293152f, 0.42642268538475037f, 0.3676927089691162f, 0.6567625999450684f, 0.7693088054656982f, 0.4132336676120758f, 0.31218767166137695f, 0.12819352746009827f, +0.4462841749191284f, 0.2686539590358734f, 0.020927967503666878f, 0.2622028887271881f, 0.7527452707290649f, 0.4188247323036194f, 0.48240676522254944f, 0.8189795613288879f, +0.5815649628639221f, 0.14437705278396606f, 0.11036078631877899f, 0.9722802042961121f, 0.7922705411911011f, 0.8968050479888916f, 0.6980888247489929f, 0.1557687520980835f, +0.3324775993824005f, 0.823405921459198f, 0.9368442893028259f, 0.23905049264431f, 0.4970788061618805f, 0.2493857890367508f, 0.36122044920921326f, 0.5478509664535522f, +0.7130815386772156f, 0.4748830497264862f, 0.7441094517707825f, 0.5219476222991943f, 0.10572553426027298f, 0.35974037647247314f, 0.9513842463493347f, 0.062183815985918045f, +0.44596025347709656f, 0.718475341796875f, 0.5516037344932556f, 0.17372676730155945f, 0.13898120820522308f, 0.8122368454933167f, 0.10613775253295898f, 0.150663360953331f, +0.647042989730835f, 0.48125991225242615f, 0.6020302176475525f, 0.39166584610939026f, 0.9808068871498108f, 0.8327566385269165f, 0.06474434584379196f, 0.18035100400447845f, +0.5243127346038818f, 0.3528226912021637f, 0.4005407989025116f, 0.02309150993824005f, 0.683445930480957f, 0.2774941325187683f, 0.7903522253036499f, 0.2605917751789093f, +0.4891970455646515f, 0.6492682099342346f, 0.5868442058563232f, 0.7311937808990479f, 0.8969143629074097f, 0.008442229591310024f, 0.17906948924064636f, 0.3489856719970703f, +0.4460768699645996f, 0.23082265257835388f, 0.5201033353805542f, 0.9667374491691589f, 0.5301028490066528f, 0.8444393873214722f, 0.2632462680339813f, 0.38448259234428406f, +0.08198442310094833f, 0.5766255855560303f, 0.9689621329307556f, 0.5286241769790649f, 0.4477129578590393f, 0.3442431390285492f, 0.16374367475509644f, 0.13263201713562012f, +0.887606680393219f, 0.6485695838928223f, 0.9186394810676575f, 0.8972692489624023f, 0.009010168723762035f, 0.4561598300933838f, 0.2336394339799881f, 0.855533242225647f, +0.3631756901741028f, 0.46864110231399536f, 0.5770856142044067f, 0.23706749081611633f, 0.621712863445282f, 0.6503604054450989f, 0.1892458200454712f, 0.8888723254203796f, +0.12168920785188675f, 0.7738128304481506f, 0.13733385503292084f, 0.22673679888248444f, 0.07809838652610779f, 0.5569273233413696f, 0.46199432015419006f, 0.010776927694678307f, +0.3990131914615631f, 0.08955731242895126f, 0.2016066163778305f, 0.4206831455230713f, 0.3159182667732239f, 0.4915710985660553f, 0.6276708841323853f, 0.36295706033706665f, +0.23849038779735565f, 0.4189951717853546f, 0.27694520354270935f, 0.7221187353134155f, 0.8758705854415894f, 0.4191020131111145f, 0.8289573788642883f, 0.11751299351453781f, +0.556159496307373f, 0.26233959197998047f, 0.25565865635871887f, 0.2005089372396469f, 0.4975779354572296f, 0.6613612174987793f, 0.4228804409503937f, 0.779152512550354f, +0.8531427979469299f, 0.6954020857810974f, 0.9811431765556335f, 0.29903820157051086f, 0.6264497637748718f, 0.6041965484619141f, 0.30261632800102234f, 0.05551804229617119f, +0.2592238485813141f, 0.6652004718780518f, 0.23960188031196594f, 0.7575351595878601f, 0.4864307940006256f, 0.7366333603858948f, 0.6955482363700867f, 0.29779618978500366f, +0.5672158002853394f, 0.7060990929603577f, 0.14703676104545593f, 0.08888115733861923f, 0.45821869373321533f, 0.42536818981170654f, 0.7104238867759705f, 0.5436373353004456f, +0.09112171083688736f, 0.8902118802070618f, 0.782704770565033f, 0.209570974111557f, 0.14374873042106628f, 0.46610531210899353f, 0.32957303524017334f, 0.5030180215835571f, +0.13211357593536377f, 0.7289311289787292f, 0.5734390616416931f, 0.0028991391882300377f, 0.4176967144012451f, 0.31825190782546997f, 0.10017692297697067f, 0.22339875996112823f, +0.2872445583343506f, 0.1752632111310959f, 0.7916463613510132f, 0.5381937623023987f, 0.5020725727081299f, 0.9031427502632141f, 0.5843856334686279f, 0.3215121626853943f, +0.8078352212905884f, 0.7589109539985657f, 0.4584324359893799f, 0.8413088917732239f, 0.4206244945526123f, 0.9370453357696533f, 0.2573961019515991f, 0.4230831265449524f, +0.42950209975242615f, 0.5701965093612671f, 0.011232852935791016f, 0.8582757711410522f, 0.07869552075862885f, 0.2629362940788269f, 0.6027747988700867f, 0.8012639880180359f, +0.9530969262123108f, 0.23922263085842133f, 0.4483601748943329f, 0.3051358163356781f, 0.01811157539486885f, 0.3623538315296173f, 0.24827289581298828f, 0.12810634076595306f, +0.18889541923999786f, 0.2819916903972626f, 0.9642817974090576f, 0.29479995369911194f, 0.004324791021645069f, 0.532343327999115f, 0.5184310078620911f, 0.18372127413749695f, +0.6726821660995483f, 0.714678168296814f, 0.7950736880302429f, 0.3391644358634949f, 0.9702789783477783f, 0.26796308159828186f, 0.45032456517219543f, 0.4385218918323517f, +0.21284182369709015f, 0.13840720057487488f, 0.9214203357696533f, 0.2917100191116333f, 0.9662370681762695f, 0.35929417610168457f, 0.21140536665916443f, 0.7880827188491821f, +0.5477024912834167f, 0.5696209073066711f, 0.7498396635055542f, 0.26157647371292114f, 0.8891568183898926f, 0.04079877585172653f, 0.041022222489118576f, 0.14881746470928192f, +0.6780574321746826f, 0.3902330696582794f, 0.21835990250110626f, 0.8110114932060242f, 0.4388861358165741f, 0.5441102981567383f, 0.4765765070915222f, 0.2418326884508133f, +0.7998430132865906f, 0.7638059258460999f, 0.03878026828169823f, 0.5135422945022583f, 0.9970567226409912f, 0.9142061471939087f, 0.15113644301891327f, 0.20648738741874695f, +0.26492756605148315f, 0.15015631914138794f, 0.10431712120771408f, 0.7676723003387451f, 0.6773360371589661f, 0.5024279356002808f, 0.7835705876350403f, 0.47652512788772583f, +0.06207593157887459f, 0.8982295989990234f, 0.011157670058310032f, 0.6515341401100159f, 0.9090481996536255f, 0.17529331147670746f, 0.8611599802970886f, 0.8164889812469482f, +0.7073983550071716f, 0.19473975896835327f, 0.6468791365623474f, 0.6642683148384094f, 0.3120277225971222f, 0.580047070980072f, 0.2647470533847809f, 0.7377103567123413f, +0.29434657096862793f, 0.6729650497436523f, 0.04667164757847786f, 0.040820203721523285f, 0.8280194997787476f, 0.12334908545017242f, 0.5951160788536072f, 0.17392480373382568f, +0.45335298776626587f, 0.5635015368461609f, 0.9246650338172913f, 0.1755191683769226f, 0.5174639821052551f, 0.2290051132440567f, 0.17366990447044373f, 0.989203155040741f, +0.5701516270637512f, 0.1614162027835846f, 0.21980488300323486f, 0.28954818844795227f, 0.6213700175285339f, 0.18673455715179443f, 0.6485103964805603f, 0.002870157826691866f, +0.4761044979095459f, 0.46666663885116577f, 0.2875359356403351f, 0.4941263198852539f, 0.8344258666038513f, 0.2214217633008957f, 0.025962291285395622f, 0.30683863162994385f, +0.32465213537216187f, 0.12355966120958328f, 0.5534707903862f, 0.37366804480552673f, 0.357041597366333f, 0.5137718319892883f, 0.8372032642364502f, 0.917726993560791f, +0.43570658564567566f, 0.13486604392528534f, 0.03159470483660698f, 0.976153552532196f, 0.004711450543254614f, 0.9236726760864258f, 0.8396737575531006f, 0.036801088601350784f, +0.011033788323402405f, 0.0958515852689743f, 0.367537260055542f, 0.7777201533317566f, 0.06740812212228775f, 0.8798770308494568f, 0.24276946485042572f, 0.49429333209991455f, +0.008881271816790104f, 0.25040099024772644f, 0.09529144316911697f, 0.36713284254074097f, 0.35540807247161865f, 0.49969056248664856f, 0.16694225370883942f, 0.7746255993843079f, +0.20266665518283844f, 0.6670543551445007f, 0.15373587608337402f, 0.20325639843940735f, 0.2789326608181f, 0.9348565340042114f, 0.6736755967140198f, 0.3513872027397156f, +0.07791256159543991f, 0.835046112537384f, 0.33059772849082947f, 0.15271152555942535f, 0.3840142488479614f, 0.6616803407669067f, 0.860743522644043f, 0.49116405844688416f, +0.749025821685791f, 0.540976345539093f, 0.21314240992069244f, 0.5178476572036743f, 0.3263627290725708f, 0.43319839239120483f, 0.2899889051914215f, 0.15271499752998352f, +0.4175993800163269f, 0.9592414498329163f, 0.3847772181034088f, 0.3102540671825409f, 0.8448436856269836f, 0.1600961983203888f, 0.6061751246452332f, 0.7127313017845154f, +0.3290940821170807f, 0.23722463846206665f, 0.3187788426876068f, 0.26750648021698f, 0.5055186152458191f, 0.3265540897846222f, 0.7065741419792175f, 0.8918367028236389f, +0.7468113303184509f, 0.8539137840270996f, 0.9310542941093445f, 0.4266258478164673f, 0.3322504758834839f, 0.8877111077308655f, 0.8227424621582031f, 0.1685594916343689f, +0.14829161763191223f, 0.24942147731781006f, 0.9706882834434509f, 0.44964489340782166f, 0.8885484933853149f, 0.36396318674087524f, 0.0797026976943016f, 0.961715817451477f, +0.7907803058624268f, 0.13192926347255707f, 0.14133135974407196f, 0.6815189719200134f, 0.4527865946292877f, 0.7617341876029968f, 0.8689406514167786f, 0.6563331484794617f, +0.4643993377685547f, 0.30865341424942017f, 0.6564526557922363f, 0.4793529212474823f, 0.8751580119132996f, 0.7492164373397827f, 0.6393170952796936f, 0.5113721489906311f, +0.28239020705223083f, 0.9837228059768677f, 0.8315169811248779f, 0.3326730728149414f, 0.18066050112247467f, 0.5555816292762756f, 0.09670553356409073f, 0.2998490035533905f, +0.4153403639793396f, 0.06147533282637596f, 0.17099620401859283f, 0.07920876890420914f, 0.6292083859443665f, 0.6717577576637268f, 0.3449908494949341f, 0.8813826441764832f, +0.817550778388977f, 0.03739001974463463f, 0.403362900018692f, 0.6909117102622986f, 0.40630295872688293f, 0.16240505874156952f, 0.7741235494613647f, 0.3613853454589844f, +0.8006685972213745f, 0.08739199489355087f, 0.014238547533750534f, 0.01503271795809269f, 0.6231167912483215f, 0.08171113580465317f, 0.17237095534801483f, 0.3321879804134369f, +0.9164125919342041f, 0.9938949942588806f, 0.8366432189941406f, 0.4286426603794098f, 0.47979992628097534f, 0.1343594491481781f, 0.5200250148773193f, 0.3517991602420807f, +0.5301833748817444f, 0.8217167258262634f, 0.0670986995100975f, 0.25051483511924744f, 0.9096887111663818f, 0.7657599449157715f, 0.5903799533843994f, 0.2919500172138214f, +0.7749961018562317f, 0.8319080471992493f, 0.15698547661304474f, 0.11696039885282516f, 0.09326591342687607f, 0.9077181220054626f, 0.4201695919036865f, 0.28382620215415955f, +0.9317796230316162f, 0.26804041862487793f, 0.9603222608566284f, 0.9387221336364746f, 0.5386497378349304f, 0.18004776537418365f, 0.2164350301027298f, 0.16525882482528687f, +0.28623881936073303f, 0.5066006779670715f, 0.27899301052093506f, 0.7974123954772949f, 0.5285886526107788f, 0.40267425775527954f, 0.21985864639282227f, 0.5292621850967407f, +0.2386799305677414f, 0.7099565863609314f, 0.6146807074546814f, 0.8220148086547852f, 0.37796247005462646f, 0.4669123888015747f, 0.3855981230735779f, 0.27425822615623474f, +0.2877587080001831f, 0.3766637444496155f, 0.5989320874214172f, 0.5614867210388184f, 0.2841842770576477f, 0.7748682498931885f, 0.9012104868888855f, 0.9206628799438477f, +0.1381264477968216f, 0.870814859867096f, 0.7071250677108765f, 0.5374722480773926f, 0.5459705591201782f, 0.2025081366300583f, 0.14533977210521698f, 0.361624538898468f, +0.9787424206733704f, 0.22157107293605804f, 0.5538569688796997f, 0.3865329325199127f, 0.9357782602310181f, 0.13304726779460907f, 0.4613798260688782f, 0.43701601028442383f, +0.49226823449134827f, 0.4576845169067383f, 0.30274906754493713f, 0.621306300163269f, 0.24164874851703644f, 0.6021150350570679f, 0.19788941740989685f, 0.7215229868888855f, +0.04733246937394142f, 0.15559446811676025f, 0.8404727578163147f, 0.627970814704895f, 0.006533220876008272f, 0.8052012920379639f, 0.13067133724689484f, 0.3116632103919983f, +0.13008327782154083f, 0.2218550145626068f, 0.7120707035064697f, 0.8131387829780579f, 0.6124904751777649f, 0.22320523858070374f, 0.8409242033958435f, 0.9204336404800415f, +0.967700719833374f, 0.8619982600212097f, 0.9645836353302002f, 0.28453701734542847f, 0.7071581482887268f, 0.341429203748703f, 0.42448854446411133f, 0.12571044266223907f, +0.6522096991539001f, 0.7166430950164795f, 0.7135162949562073f, 0.767968475818634f, 0.7564042210578918f, 0.44973376393318176f, 0.05226006358861923f, 0.6655228734016418f, +0.6706516146659851f, 0.02839936874806881f, 0.4429425597190857f, 0.04707065597176552f, 0.4027802050113678f, 0.23916837573051453f, 0.8068237900733948f, 0.5912355184555054f, +0.4504297971725464f, 0.43928518891334534f, 0.528558075428009f, 0.27719053626060486f, 0.07841756939888f, 0.1920754462480545f, 0.48838233947753906f, 0.6580685973167419f, +0.7294557690620422f, 0.00460861437022686f, 0.2457796037197113f, 0.5632413625717163f, 0.20063720643520355f, 0.9480932354927063f, 0.4751167595386505f, 0.5515716671943665f, +0.8817451000213623f, 0.9125573039054871f, 0.5733680129051208f, 0.7826153635978699f, 0.7172992825508118f, 0.9848762154579163f, 0.25306254625320435f, 0.23554116487503052f, +0.018606120720505714f, 0.7426652312278748f, 0.3116294741630554f, 0.23110270500183105f, 0.7670119404792786f, 0.3864651620388031f, 0.13763727247714996f, 0.653793215751648f, +0.9327593445777893f, 0.26216742396354675f, 0.7501253485679626f, 0.39093518257141113f, 0.7882879972457886f, 0.31695088744163513f, 0.2927855849266052f, 0.8911882042884827f, +0.20590472221374512f, 0.9797767996788025f, 0.055941514670848846f, 0.14853288233280182f, 0.15500013530254364f, 0.7745370864868164f, 0.14451321959495544f, 0.8375918865203857f, +0.13300296664237976f, 0.45090892910957336f, 0.8740070462226868f, 0.06602218002080917f, 0.8776103258132935f, 0.9056901931762695f, 0.21009781956672668f, 0.12911421060562134f, +0.37058812379837036f, 0.23418313264846802f, 0.5159732699394226f, 0.022002164274454117f, 0.8658028841018677f, 0.7609526515007019f, 0.9296817183494568f, 0.44458550214767456f, +0.2946910560131073f, 0.22273823618888855f, 0.9139385223388672f, 0.666692852973938f, 0.8531242609024048f, 0.03588195517659187f, 0.4304713010787964f, 0.09713339060544968f, +0.7188554406166077f, 0.7192872762680054f, 0.2801877558231354f, 0.2106439620256424f, 0.8309152126312256f, 0.48948079347610474f, 0.8293695449829102f, 0.5235876441001892f, +0.5699601769447327f, 0.23195044696331024f, 0.9204521179199219f, 0.23591409623622894f, 0.8914528489112854f, 0.9499147534370422f, 0.9409085512161255f, 0.6423215866088867f, +0.5073315501213074f, 0.026083098724484444f, 0.18021678924560547f, 0.22517962753772736f, 0.37905749678611755f, 0.7155607342720032f, 0.8422001004219055f, 0.9969623684883118f, +0.6110266447067261f, 0.43039560317993164f, 0.4900505244731903f, 0.08634203672409058f, 0.7120556235313416f, 0.4952358603477478f, 0.014526985585689545f, 0.8711845874786377f, +0.2356063723564148f, 0.08710091561079025f, 0.022124171257019043f, 0.3958354890346527f, 0.11782637238502502f, 0.5577272176742554f, 0.2788480520248413f, 0.030144188553094864f, +0.030905958265066147f, 0.9411370754241943f, 0.4976344108581543f, 0.7199728488922119f, 0.44854018092155457f, 0.1812162548303604f, 0.5204698443412781f, 0.5935083627700806f, +0.7244624495506287f, 0.9188945293426514f, 0.3529190123081207f, 0.8023055195808411f, 0.8573505878448486f, 0.6875354051589966f, 0.013709685765206814f, 0.5214580297470093f, +0.20943765342235565f, 0.37227916717529297f, 0.08524779975414276f, 0.9731224775314331f, 0.6852123141288757f, 0.5530176758766174f, 0.9749290943145752f, 0.15493151545524597f, +0.8446871638298035f, 0.4333445727825165f, 0.9263744354248047f, 0.13028870522975922f, 0.6708149313926697f, 0.314521461725235f, 0.5756807923316956f, 0.07503744959831238f, +0.4573715925216675f, 0.9309681057929993f, 0.48284655809402466f, 0.4547679126262665f, 0.3632102310657501f, 0.36584728956222534f, 0.23345929384231567f, 0.4488392770290375f, +0.23649391531944275f, 0.6740921139717102f, 0.9783922433853149f, 0.9934000372886658f, 0.564905047416687f, 0.6179444789886475f, 0.3729303181171417f, 0.014409901574254036f, +0.6588114500045776f, 0.6575924754142761f, 0.2258504182100296f, 0.8878110647201538f, 0.08625449240207672f, 0.0975114032626152f, 0.46354737877845764f, 0.482733815908432f, +0.177728071808815f, 0.9056043028831482f, 0.34191957116127014f, 0.447083055973053f, 0.5854672789573669f, 0.6999818086624146f, 0.2735729217529297f, 0.041393108665943146f, +0.33681267499923706f, 0.8138250112533569f, 0.37429529428482056f, 0.9083776473999023f, 0.3834368586540222f, 0.7484782338142395f, 0.12981180846691132f, 0.25653183460235596f, +0.7441051006317139f, 0.9817482233047485f, 0.8494285941123962f, 0.48084309697151184f, 0.6290395259857178f, 0.2032930999994278f, 0.6663334369659424f, 0.6162163019180298f, +0.7208817005157471f, 0.25491246581077576f, 0.2496979832649231f, 0.6507595777511597f, 0.6374655961990356f, 0.8308921456336975f, 0.155710369348526f, 0.2943534851074219f, +0.6809955835342407f, 0.05527111515402794f, 0.3941746950149536f, 0.20650748908519745f, 0.06993329524993896f, 0.16616062819957733f, 0.22680002450942993f, 0.46824029088020325f, +0.6327599287033081f, 0.7699246406555176f, 0.5669257044792175f, 0.12057733535766602f, 0.38876327872276306f, 0.4733194410800934f, 0.7692233324050903f, 0.19223330914974213f, +0.0686778873205185f, 0.0964265838265419f, 0.5884895920753479f, 0.89692223072052f, 0.2790544629096985f, 0.5134150385856628f, 0.2672226130962372f, 0.8402762413024902f, +0.26483792066574097f, 0.1716570407152176f, 0.28810954093933105f, 0.9404467940330505f, 0.9976669549942017f, 0.4308534562587738f, 0.009770560078322887f, 0.5657275915145874f, +0.48587074875831604f, 0.8421579003334045f, 0.19512268900871277f, 0.6075118780136108f, 0.584054172039032f, 0.7641963958740234f, 0.922571063041687f, 0.5361303687095642f, +0.3971797227859497f, 0.023124856874346733f, 0.9501526951789856f, 0.9704363942146301f, 0.9037246108055115f, 0.6572282314300537f, 0.2114483118057251f, 0.5759683847427368f, +0.4328819513320923f, 0.13550977408885956f, 0.060035355389118195f, 0.2533602714538574f, 0.23719289898872375f, 0.7822566628456116f, 0.1575579196214676f, 0.7586755156517029f, +0.9355947375297546f, 0.4054903984069824f, 0.38723400235176086f, 0.8849648833274841f, 0.7090241312980652f, 0.4922632873058319f, 0.7629578113555908f, 0.8505520820617676f, +0.1599837690591812f, 0.1378646194934845f, 0.1130867525935173f, 0.5729784369468689f, 0.5967937111854553f, 0.31415271759033203f, 0.4914575219154358f, 0.42117223143577576f, +0.2994636297225952f, 0.8612774014472961f, 0.5018224716186523f, 0.35584962368011475f, 0.8813732862472534f, 0.31304851174354553f, 0.9457957744598389f, 0.20202574133872986f, +0.7914569973945618f, 0.37891170382499695f, 0.09314851462841034f, 0.13582327961921692f, 0.9376453161239624f, 0.32610490918159485f, 0.9581441879272461f, 0.7946649789810181f, +0.49319902062416077f, 0.27391523122787476f, 0.7164339423179626f, 0.7314870953559875f, 0.562695324420929f, 0.8946805596351624f, 0.43358588218688965f, 0.1909439116716385f, +0.4403674006462097f, 0.6665763258934021f, 0.0582975372672081f, 0.5786737203598022f, 0.27881285548210144f, 0.5434039235115051f, 0.25353744626045227f, 0.8371391296386719f, +0.1174260750412941f, 0.9616680145263672f, 0.06845512241125107f, 0.21584904193878174f, 0.4330059289932251f, 0.28957080841064453f, 0.887337863445282f, 0.27001646161079407f, +0.06824120134115219f, 0.4159878194332123f, 0.012054122984409332f, 0.1018071323633194f, 0.8843235969543457f, 0.057658903300762177f, 0.4578312039375305f, 0.0468565858900547f, +0.22703373432159424f, 0.8125855922698975f, 0.6524340510368347f, 0.4532836973667145f, 0.80708247423172f, 0.4306764006614685f, 0.7877143025398254f, 0.015440811403095722f, +0.4787195920944214f, 0.48024246096611023f, 0.43799737095832825f, 0.994544506072998f, 0.4171772301197052f, 0.07543722540140152f, 0.24560368061065674f, 0.3684298098087311f, +0.7435777187347412f, 0.4223043918609619f, 0.19493956863880157f, 0.5342535972595215f, 0.2802044153213501f, 0.8116028308868408f, 0.1308259218931198f, 0.8950024247169495f, +0.8675112724304199f, 0.9731941223144531f, 0.9418253302574158f, 0.846869945526123f, 0.9056533575057983f, 0.5092349052429199f, 0.5679657459259033f, 0.47333911061286926f, +0.3059166967868805f, 0.42689400911331177f, 0.9169937372207642f, 0.8689156174659729f, 0.30648812651634216f, 0.6814216375350952f, 0.38338056206703186f, 0.2873271703720093f, +0.2552385628223419f, 0.45620185136795044f, 0.9770811796188354f, 0.37840786576271057f, 0.619360625743866f, 0.018848160281777382f, 0.03166332095861435f, 0.9128813147544861f, +0.35464680194854736f, 0.698483407497406f, 0.6379043459892273f, 0.7359635829925537f, 0.5516904592514038f, 0.27735650539398193f, 0.5244506001472473f, 0.31374257802963257f, +0.7993144989013672f, 0.8443015217781067f, 0.08306953310966492f, 0.7594419121742249f, 0.21034449338912964f, 0.9951146245002747f, 0.937840461730957f, 0.28707918524742126f, +0.42358043789863586f, 0.1088729277253151f, 0.5423852205276489f, 0.2869563400745392f, 0.708899199962616f, 0.8776443004608154f, 0.5155898332595825f, 0.3712281584739685f, +0.9130184650421143f, 0.8088033199310303f, 0.4135722815990448f, 0.29116368293762207f, 0.6539098620414734f, 0.9210817217826843f, 0.8889526724815369f, 0.8964150547981262f, +0.6579165458679199f, 0.3622499406337738f, 0.08260201662778854f, 0.8450440764427185f, 0.3542061448097229f, 0.03270610421895981f, 0.31025224924087524f, 0.3793033957481384f, +0.0687033012509346f, 0.9627789855003357f, 0.38529133796691895f, 0.0075727710500359535f, 0.6026995182037354f, 0.2763656973838806f, 0.11956384778022766f, 0.003469287184998393f, +0.49287375807762146f, 0.4599299728870392f, 0.3301788568496704f, 0.2102041393518448f, 0.9556521773338318f, 0.3696548342704773f, 0.4270368218421936f, 0.7446635961532593f, +0.03425825759768486f, 0.7734557390213013f, 0.60029536485672f, 0.810886561870575f, 0.0046299416571855545f, 0.30213385820388794f, 0.8752975463867188f, 0.43466776609420776f, +0.33511054515838623f, 0.46883007884025574f, 0.2718832492828369f, 0.8679692149162292f, 0.9575137495994568f, 0.3770918846130371f, 0.40884050726890564f, 0.8826388716697693f, +0.8886852264404297f, 0.7844046354293823f, 0.16181479394435883f, 0.565423309803009f, 0.3268459439277649f, 0.9324617981910706f, 0.22051328420639038f, 0.25861039757728577f, +0.9750482439994812f, 0.19108347594738007f, 0.8053340911865234f, 0.17403563857078552f, 0.5304776430130005f, 0.3082726299762726f, 0.048205286264419556f, 0.7541306018829346f, +0.5903505086898804f, 0.5195092558860779f, 0.15119525790214539f, 0.9708764553070068f, 0.5698174834251404f, 0.7193416357040405f, 0.06902693212032318f, 0.8866438269615173f, +0.8913615345954895f, 0.7784222364425659f, 0.8003820776939392f, 0.4569813907146454f, 0.4389837682247162f, 0.2245836704969406f, 0.6532548666000366f, 0.23779068887233734f, +0.4795328676700592f, 0.720058023929596f, 0.29919034242630005f, 0.13058039546012878f, 0.6718866229057312f, 0.2358090728521347f, 0.6805419325828552f, 0.7708072066307068f, +0.5361786484718323f, 0.1567806750535965f, 0.7764227390289307f, 0.9946203231811523f, 0.3679531216621399f, 0.23141653835773468f, 0.1987285166978836f, 0.6475546956062317f, +0.7040508985519409f, 0.7612618803977966f, 0.782385528087616f, 0.33317163586616516f, 0.06517556309700012f, 0.29333770275115967f, 0.5661720633506775f, 0.3063250482082367f, +0.34707292914390564f, 0.051737312227487564f, 0.954688310623169f, 0.517981231212616f, 0.07227861136198044f, 0.5409760475158691f, 0.08430848270654678f, 0.33276426792144775f, +0.016029972583055496f, 0.3172706663608551f, 0.08604994416236877f, 0.12452560663223267f, 0.09424560517072678f, 0.6109061241149902f, 0.6550461053848267f, 0.5733766555786133f, +0.7981088161468506f, 0.4220934808254242f, 0.5552318096160889f, 0.052524764090776443f, 0.9292771816253662f, 0.4966868758201599f, 0.15330514311790466f, 0.010299638845026493f, +0.6166800856590271f, 0.4562109410762787f, 0.15635381639003754f, 0.5062832236289978f, 0.5983542799949646f, 0.30014902353286743f, 0.8157406449317932f, 0.059385936707258224f, +0.36704570055007935f, 0.9696339964866638f, 0.2290426343679428f, 0.24512581527233124f, 0.8549486398696899f, 0.004019741900265217f, 0.3332984447479248f, 0.17460347712039948f, +0.5267359614372253f, 0.45883047580718994f, 0.36523640155792236f, 0.9577573537826538f, 0.16916440427303314f, 0.2946668863296509f, 0.9399417638778687f, 0.17074695229530334f, +0.553763210773468f, 0.4025968909263611f, 0.5001398324966431f, 0.4122488796710968f, 0.24649052321910858f, 0.690895676612854f, 0.6146170496940613f, 0.9332599639892578f, +0.7543907165527344f, 0.212344229221344f, 0.0893787369132042f, 0.3273673951625824f, 0.2716914117336273f, 0.8298662900924683f, 0.07801960408687592f, 0.2060096561908722f, +0.2067904770374298f, 0.02607548236846924f, 0.7021626234054565f, 0.9463087916374207f, 0.2132309079170227f, 0.9282857179641724f, 0.6187259554862976f, 0.57452791929245f, +0.7975798845291138f, 0.2050297111272812f, 0.5900529623031616f, 0.4175373613834381f, 0.03784032538533211f, 0.6834486722946167f, 0.5818188786506653f, 0.2911745309829712f, +0.11394680291414261f, 0.20135672390460968f, 0.6491945385932922f, 0.9281231164932251f, 0.8917953372001648f, 0.337105393409729f, 0.1359015852212906f, 0.16469790041446686f, +0.8463048934936523f, 0.19239972531795502f, 0.15193888545036316f, 0.7955711483955383f, 0.7953750491142273f, 0.8619517087936401f, 0.2474280297756195f, 0.42368361353874207f, +0.3433798551559448f, 0.7564342617988586f, 0.4283266067504883f, 0.5996331572532654f, 0.5280118584632874f, 0.43479353189468384f, 0.6794372797012329f, 0.8201031684875488f, +0.42674392461776733f, 0.2185199111700058f, 0.996270477771759f, 0.7470143437385559f, 0.32390472292900085f, 0.3977951407432556f, 0.015744570642709732f, 0.45043718814849854f, +0.4944102168083191f, 0.3165137767791748f, 0.5541877746582031f, 0.42440807819366455f, 0.809860110282898f, 0.3482888638973236f, 0.617342472076416f, 0.4892527163028717f, +0.8052732348442078f, 0.14826926589012146f, 0.8475712537765503f, 0.7432125806808472f, 0.7516224384307861f, 0.8488552570343018f, 0.5063426494598389f, 0.4131450951099396f, +0.16873914003372192f, 0.34516847133636475f, 0.2593882381916046f, 0.9911344051361084f, 0.8953922986984253f, 0.04302230104804039f, 0.49583789706230164f, 0.9116426110267639f, +0.5860093832015991f, 0.6633701324462891f, 0.5401735901832581f, 0.2725786864757538f, 0.9850562214851379f, 0.09892921149730682f, 0.7317473888397217f, 0.5457730293273926f, +0.9671192169189453f, 0.5501194596290588f, 0.7628991007804871f, 0.4793241620063782f, 0.5554706454277039f, 0.4967558681964874f, 0.7189275622367859f, 0.6710252165794373f, +0.12707790732383728f, 0.7422632575035095f, 0.7076006531715393f, 0.15562601387500763f, 0.14717859029769897f, 0.34939679503440857f, 0.3683183193206787f, 0.32374128699302673f, +0.06075650453567505f, 0.9748130440711975f, 0.27208518981933594f, 0.12241001427173615f, 0.7481294870376587f, 0.3187728822231293f, 0.5275235176086426f, 0.9109904766082764f, +0.6773015260696411f, 0.6634901165962219f, 0.5968091487884521f, 0.0731939971446991f, 0.7795572280883789f, 0.78508061170578f, 0.8774799704551697f, 0.5167418718338013f, +0.20512522757053375f, 0.8132057785987854f, 0.9112575054168701f, 0.2590920627117157f, 0.9985716938972473f, 0.9682145714759827f, 0.1540503203868866f, 0.2817167639732361f, +0.7759769558906555f, 0.5455993413925171f, 0.9593790769577026f, 0.18511773645877838f, 0.0873359814286232f, 0.716407060623169f, 0.7124171257019043f, 0.8239198327064514f, +0.1092524453997612f, 0.19461366534233093f, 0.10802222788333893f, 0.44447916746139526f, 0.8675888180732727f, 0.0922439694404602f, 0.780673623085022f, 0.5078483819961548f, +0.24600818753242493f, 0.614500105381012f, 0.807904839515686f, 0.821271538734436f, 0.9437059164047241f, 0.5979880094528198f, 0.5970944166183472f, 0.6634161472320557f, +0.5801121592521667f, 0.8657075762748718f, 0.622144877910614f, 0.2517518699169159f, 0.7700166702270508f, 0.19039835035800934f, 0.12637533247470856f, 0.8758681416511536f, +0.732480525970459f, 0.7727395296096802f, 0.22191700339317322f, 0.870209813117981f, 0.856910765171051f, 0.6228302121162415f, 0.992672324180603f, 0.4044516682624817f, +0.8783655166625977f, 0.3994646668434143f, 0.21094448864459991f, 0.07484477013349533f, 0.721238911151886f, 0.1987677663564682f, 0.3604685366153717f, 0.6514667868614197f, +0.29973942041397095f, 0.9852453470230103f, 0.506338894367218f, 0.31471335887908936f, 0.6156202554702759f, 0.32482340931892395f, 0.7588207721710205f, 0.383007675409317f, +0.5107603073120117f, 0.3484267592430115f, 0.04874943196773529f, 0.9188473224639893f, 0.367328405380249f, 0.7258967161178589f, 0.6923775672912598f, 0.44648537039756775f, +0.4266502261161804f, 0.5818361043930054f, 0.37146997451782227f, 0.29894623160362244f, 0.370767742395401f, 0.9126896858215332f, 0.8617753386497498f, 0.454296737909317f, +0.9517240524291992f, 0.37017861008644104f, 0.6021130084991455f, 0.5015835165977478f, 0.8612624406814575f, 0.5281098484992981f, 0.953734278678894f, 0.24529199302196503f, +0.40387678146362305f, 0.34099557995796204f, 0.17940068244934082f, 0.3374844491481781f, 0.3199175298213959f, 0.6987120509147644f, 0.5349817276000977f, 0.11329832673072815f, +0.32354310154914856f, 0.34545156359672546f, 0.49655118584632874f, 0.8375716805458069f, 0.8451811075210571f, 0.2475646585226059f, 0.1031114012002945f, 0.5532541275024414f, +0.8663719892501831f, 0.6428638696670532f, 0.2618693709373474f, 0.10295948386192322f, 0.9817463755607605f, 0.5933944582939148f, 0.37382766604423523f, 0.35117220878601074f, +0.4869810938835144f, 0.47219690680503845f, 0.5719674825668335f, 0.28420892357826233f, 0.1574525237083435f, 0.6569662094116211f, 0.21679718792438507f, 0.7524964809417725f, +0.2509385943412781f, 0.2651195228099823f, 0.37319207191467285f, 0.7577337622642517f, 0.2909635901451111f, 0.1978994905948639f, 0.18648993968963623f, 0.5178026556968689f, +0.5968193411827087f, 0.7479197978973389f, 0.7614104151725769f, 0.18079788982868195f, 0.7159412503242493f, 0.5898625254631042f, 0.5506936311721802f, 0.8231931328773499f, +0.202944815158844f, 0.11854857206344604f, 0.6545153856277466f, 0.8953240513801575f, 0.8019385933876038f, 0.857129693031311f, 0.6784530878067017f, 0.6191121935844421f, +0.17647111415863037f, 0.3762128949165344f, 0.3113422095775604f, 0.39193764328956604f, 0.6911156177520752f, 0.6866047382354736f, 0.8751506209373474f, 0.7212127447128296f, +0.38546785712242126f, 0.1162480041384697f, 0.32569628953933716f, 0.6940087080001831f, 0.5551033020019531f, 0.7751149535179138f, 0.8775731921195984f, 0.9562240242958069f, +0.9420426487922668f, 0.6513087153434753f, 0.5316483974456787f, 0.08672279864549637f, 0.9918019771575928f, 0.25141656398773193f, 0.8643980622291565f, 0.3101353943347931f, +0.09720771759748459f, 0.4123217463493347f, 0.5740790367126465f, 0.7638790011405945f, 0.6722713708877563f, 0.16347409784793854f, 0.759700357913971f, 0.338091105222702f, +0.09785225242376328f, 0.2838483452796936f, 0.9740880131721497f, 0.435711532831192f, 0.5523244142532349f, 0.6314138174057007f, 0.16806139051914215f, 0.701496422290802f, +0.48209521174430847f, 0.48309168219566345f, 0.20576609671115875f, 0.6310926675796509f, 0.4806123375892639f, 0.4352276921272278f, 0.5769246220588684f, 0.2352253645658493f, +0.4508539140224457f, 0.3632282018661499f, 0.06258831918239594f, 0.5784202814102173f, 0.29984357953071594f, 0.016713498160243034f, 0.5295052528381348f, 0.9513523578643799f, +0.548417866230011f, 0.2268751859664917f, 0.4731479585170746f, 0.6957689523696899f, 0.6481766104698181f, 0.7040045261383057f, 0.25051775574684143f, 0.012079867534339428f, +0.8266410827636719f, 0.6048925518989563f, 0.056994494050741196f, 0.8458043932914734f, 0.14382266998291016f, 0.5051673054695129f, 0.18636444211006165f, 0.49911409616470337f, +0.07723692804574966f, 0.8991679549217224f, 0.8619704842567444f, 0.4745004177093506f, 0.23449192941188812f, 0.5096450448036194f, 0.9305101037025452f, 0.43756839632987976f, +0.31484511494636536f, 0.38985535502433777f, 0.12303155660629272f, 0.7584595084190369f, 0.6063210964202881f, 0.03353365138173103f, 0.820473849773407f, 0.42951950430870056f, +0.7538846135139465f, 0.20067399740219116f, 0.9108507633209229f, 0.9368587136268616f, 0.26146408915519714f, 0.7547444105148315f, 0.44028985500335693f, 0.08632796257734299f, +0.3273424506187439f, 0.7724995613098145f, 0.7730609178543091f, 0.9627286791801453f, 0.12927277386188507f, 0.485411137342453f, 0.5912275314331055f, 0.7152729034423828f, +0.927213728427887f, 0.460521399974823f, 0.5746170878410339f, 0.8645201921463013f, 0.32449206709861755f, 0.5748761296272278f, 0.4514629542827606f, 0.5738746523857117f, +0.30676209926605225f, 0.8959732055664062f, 0.25288471579551697f, 0.59064120054245f, 0.5254284739494324f, 0.6326992511749268f, 0.14145751297473907f, 0.49758100509643555f, +0.5040464997291565f, 0.24863409996032715f, 0.4753056466579437f, 0.6506956219673157f, 0.43964847922325134f, 0.776139497756958f, 0.6563149690628052f, 0.139691561460495f, +0.6628936529159546f, 0.40465807914733887f, 0.6615532040596008f, 0.9805894494056702f, 0.764091432094574f, 0.7037357687950134f, 0.2555839419364929f, 0.21286189556121826f, +0.5748335123062134f, 0.6953637599945068f, 0.5368756055831909f, 0.17492209374904633f, 0.739646852016449f, 0.6815091967582703f, 0.4101237654685974f, 0.32564228773117065f, +0.9226045608520508f, 0.7878067493438721f, 0.1804993599653244f, 0.9465967416763306f, 0.5434688329696655f, 0.7852627635002136f, 0.5587875247001648f, 0.7051458954811096f, +0.3048701584339142f, 0.9747357368469238f, 0.05074641853570938f, 0.4122564494609833f, 0.16912147402763367f, 0.7761132121086121f, 0.44276559352874756f, 0.6001430749893188f, +0.18628741800785065f, 0.42966872453689575f, 0.6542267799377441f, 0.4729101061820984f, 0.5121181607246399f, 0.25151121616363525f, 0.7931031584739685f, 0.5826677083969116f, +0.7614617347717285f, 0.15005086362361908f, 0.2426973283290863f, 0.7110112905502319f, 0.38770103454589844f, 0.7972857356071472f, 0.24381205439567566f, 0.5183828473091125f, +0.24410636723041534f, 0.2662820816040039f, 0.745678186416626f, 0.8873725533485413f, 0.04304312542080879f, 0.6288785934448242f, 0.009382358752191067f, 0.9446987509727478f, +0.9415190815925598f, 0.4857405126094818f, 0.10260137170553207f, 0.6506504416465759f, 0.7474590539932251f, 0.6591751575469971f, 0.24184876680374146f, 0.8370532393455505f, +0.20473498106002808f, 0.6804748177528381f, 0.9949788451194763f, 0.28843259811401367f, 0.29219910502433777f, 0.7921472787857056f, 0.24921968579292297f, 0.2779786288738251f, +0.6743242740631104f, 0.6892544031143188f, 0.17135877907276154f, 0.7607136964797974f, 0.8450353145599365f, 0.8937785029411316f, 0.8176372647285461f, 0.5987029075622559f, +0.7719714641571045f, 0.7732353806495667f, 0.011795295402407646f, 0.7934415936470032f, 0.9969044923782349f, 0.1023741066455841f, 0.6471801996231079f, 0.14735698699951172f, +0.006399938836693764f, 0.43988236784935f, 0.4705727994441986f, 0.8712778091430664f, 0.6805765628814697f, 0.5086028575897217f, 0.9989738464355469f, 0.06694889068603516f, +0.21931013464927673f, 0.05466656759381294f, 0.48533985018730164f, 0.5587661862373352f, 0.35423779487609863f, 0.6126895546913147f, 0.9343199133872986f, 0.832282543182373f, +0.7234646677970886f, 0.7183346748352051f, 0.8095521926879883f, 0.7633732557296753f, 0.1343962699174881f, 0.6979185342788696f, 0.7355890274047852f, 0.6622878909111023f, +0.9376912117004395f, 0.6607747077941895f, 0.48890167474746704f, 0.3916482627391815f, 0.9555940628051758f, 0.7253923416137695f, 0.4857766032218933f, 0.96128910779953f, +0.36352401971817017f, 0.8191223740577698f, 0.6335353255271912f, 0.180928036570549f, 0.6685084700584412f, 0.954343318939209f, 0.818780779838562f, 0.21048162877559662f, +0.5316951274871826f, 0.3511981964111328f, 0.2019708901643753f, 0.9113085269927979f, 0.6813578605651855f, 0.3057164251804352f, 0.7264248728752136f, 0.16140826046466827f, +0.34109318256378174f, 0.20158199965953827f, 0.5794447660446167f, 0.7453880906105042f, 0.08767053484916687f, 0.7614191770553589f, 0.431557834148407f, 0.6657788157463074f, +0.4367709755897522f, 0.2618759870529175f, 0.557790994644165f, 0.38468682765960693f, 0.2782423794269562f, 0.6749582886695862f, 0.8381218314170837f, 0.08370961993932724f, +0.6238558888435364f, 0.19294823706150055f, 0.01327848806977272f, 0.09265664964914322f, 0.25547152757644653f, 0.9243564605712891f, 0.36596593260765076f, 0.8928214311599731f, +0.7712591290473938f, 0.2641690671443939f, 0.4287053048610687f, 0.47533801198005676f, 0.6371734142303467f, 0.6067285537719727f, 0.5207467675209045f, 0.7056165337562561f, +0.28775346279144287f, 0.8841924071311951f, 0.8809574842453003f, 0.7861031889915466f, 0.30667629837989807f, 0.6888304948806763f, 0.5787044763565063f, 0.3432126045227051f, +0.47818523645401f, 0.13931186497211456f, 0.07490485161542892f, 0.5078020095825195f, 0.33599257469177246f, 0.38307371735572815f, 0.03135930374264717f, 0.40500926971435547f, +0.12010007351636887f, 0.5372878909111023f, 0.9852116107940674f, 0.9676926732063293f, 0.6900773048400879f, 0.49780258536338806f, 0.49427202343940735f, 0.06259378790855408f, +0.30571871995925903f, 0.738063633441925f, 0.4991668462753296f, 0.7721170783042908f, 0.39595505595207214f, 0.7583163976669312f, 0.6565560102462769f, 0.05372015759348869f, +0.8857539296150208f, 0.09041038155555725f, 0.8634676337242126f, 0.8428789973258972f, 0.7209274768829346f, 0.8284698128700256f, 0.8164633512496948f, 0.6152098774909973f, +0.6611422300338745f, 0.45810410380363464f, 0.6406548023223877f, 0.5195103287696838f, 0.9597479701042175f, 0.25223755836486816f, 0.535911500453949f, 0.1886625736951828f, +0.6788238883018494f, 0.8780650496482849f, 0.8469952344894409f, 0.508054256439209f, 0.8723411560058594f, 0.1896304041147232f, 0.24998977780342102f, 0.8059297204017639f, +0.14194145798683167f, 0.7172614932060242f, 0.9204587340354919f, 0.8316839337348938f, 0.014585676603019238f, 0.2617383599281311f, 0.9409610629081726f, 0.9464892148971558f, +0.36917710304260254f, 0.11856482923030853f, 0.38768160343170166f, 0.415122389793396f, 0.011132695712149143f, 0.45047998428344727f, 0.48652184009552f, 0.7133572697639465f, +0.056932125240564346f, 0.9546455144882202f, 0.8828530311584473f, 0.4052664637565613f, 0.712436318397522f, 0.8428722620010376f, 0.777594804763794f, 0.3550110459327698f, +0.839474618434906f, 0.5785256624221802f, 0.5927845239639282f, 0.017003213986754417f, 0.9684289693832397f, 0.33627796173095703f, 0.56700599193573f, 0.738196611404419f, +0.35443952679634094f, 0.5109207034111023f, 0.27125251293182373f, 0.18282219767570496f, 0.20692592859268188f, 0.37798675894737244f, 0.7182353734970093f, 0.9889036417007446f, +0.7806824445724487f, 0.24504460394382477f, 0.5769919753074646f, 0.45928487181663513f, 0.38701310753822327f, 0.7163721919059753f, 0.43120163679122925f, 0.569329559803009f, +0.8471683263778687f, 0.45330435037612915f, 0.727845311164856f, 0.7532005906105042f, 0.432723730802536f, 0.5090743899345398f, 0.8915972113609314f, 0.4395911395549774f, +0.14350691437721252f, 0.7116051316261292f, 0.47584068775177f, 0.4609779417514801f, 0.9177359938621521f, 0.9747999906539917f, 0.2979161739349365f, 0.03221890702843666f, +0.8749604225158691f, 0.3655252158641815f, 0.08924832940101624f, 0.3713840842247009f, 0.4312901198863983f, 0.10505779832601547f, 0.9984862804412842f, 0.6913985013961792f, +0.3037587106227875f, 0.5390008687973022f, 0.21596071124076843f, 0.29042768478393555f, 0.0303110983222723f, 0.534233808517456f, 0.29403722286224365f, 0.1551366150379181f, +0.05101710557937622f, 0.6929324865341187f, 0.6603105068206787f, 0.1161847710609436f, 0.42971134185791016f, 0.6055371761322021f, 0.7103705406188965f, 0.10589537769556046f, +0.9112865328788757f, 0.8740816712379456f, 0.40197664499282837f, 0.0324152335524559f, 0.8650059103965759f, 0.8082781434059143f, 0.16554823517799377f, 0.10784005373716354f, +0.020520860329270363f, 0.03733439743518829f, 0.47882673144340515f, 0.1785164624452591f, 0.4827440083026886f, 0.2612764239311218f, 0.6198235154151917f, 0.16984987258911133f, +0.834954023361206f, 0.5532395839691162f, 0.22755120694637299f, 0.6485683917999268f, 0.7474194765090942f, 0.2165348082780838f, 0.6836975812911987f, 0.7181708812713623f, +0.6295499205589294f, 0.6752920150756836f, 0.09465740621089935f, 0.6743357181549072f, 0.9743132591247559f, 0.06987465918064117f, 0.9071958661079407f, 0.3171885013580322f, +0.5233432054519653f, 0.8696213960647583f, 0.11714096367359161f, 0.7083911299705505f, 0.8128572702407837f, 0.6227899193763733f, 0.5966023206710815f, 0.02427331730723381f, +0.6557590365409851f, 0.8340919017791748f, 0.8453158736228943f, 0.5571975111961365f, 0.056256067007780075f, 0.6184428930282593f, 0.3833022713661194f, 0.49177733063697815f, +0.8194442987442017f, 0.32136666774749756f, 0.3655700385570526f, 0.94183748960495f, 0.774259090423584f, 0.9469360709190369f, 0.3082836866378784f, 0.6934536099433899f, +0.9357541799545288f, 0.6024598479270935f, 0.8636246919631958f, 0.0754120796918869f, 0.8920586109161377f, 0.7249780297279358f, 0.5596754550933838f, 0.9842198491096497f, +0.9748439192771912f, 0.9978852868080139f, 0.5623146295547485f, 0.43283408880233765f, 0.976493775844574f, 0.815410852432251f, 0.3279508650302887f, 0.01582387089729309f, +0.35988450050354004f, 0.5339992642402649f, 0.780782163143158f, 0.01387811079621315f, 0.1939193606376648f, 0.49836060404777527f, 0.835912823677063f, 0.9075528383255005f, +0.41718992590904236f, 0.6188115477561951f, 0.15108023583889008f, 0.9707783460617065f, 0.6810989379882812f, 0.6842206716537476f, 0.023525649681687355f, 0.03179524466395378f, +0.4299938976764679f, 0.3072126805782318f, 0.19552068412303925f, 0.33198481798171997f, 0.2826805114746094f, 0.1687115728855133f, 0.366790771484375f, 0.28437766432762146f, +0.13313914835453033f, 0.9887477159500122f, 0.3642860949039459f, 0.4194713532924652f, 0.5258866548538208f, 0.29802796244621277f, 0.3906620144844055f, 0.3792678117752075f, +0.11774247884750366f, 0.5109013915061951f, 0.1928858458995819f, 0.9413356184959412f, 0.7706526517868042f, 0.6280111074447632f, 0.6187840104103088f, 0.9478690028190613f, +0.0232095867395401f, 0.14808057248592377f, 0.4873705804347992f, 0.10160714387893677f, 0.7827232480049133f, 0.4095906615257263f, 0.17640140652656555f, 0.7127394676208496f, +0.4262595772743225f, 0.6453838348388672f, 0.1774497628211975f, 0.2914062738418579f, 0.46630793809890747f, 0.5708163380622864f, 0.027409933507442474f, 0.3081721365451813f, +0.8033055067062378f, 0.09666655957698822f, 0.6269485354423523f, 0.06071293726563454f, 0.581787645816803f, 0.1094646006822586f, 0.2813379168510437f, 0.37931233644485474f, +0.5883137583732605f, 0.5844560265541077f, 0.5724856853485107f, 0.9234864711761475f, 0.9328126907348633f, 0.7414591908454895f, 0.20550967752933502f, 0.23635932803153992f, +0.6312636137008667f, 0.8235453963279724f, 0.4484422504901886f, 0.7506192922592163f, 0.460812509059906f, 0.8447248935699463f, 0.2727973163127899f, 0.5693610310554504f, +0.6965473294258118f, 0.13794958591461182f, 0.004455802496522665f, 0.9045485258102417f, 0.13689346611499786f, 0.2689788341522217f, 0.6780331134796143f, 0.6388814449310303f, +0.29694151878356934f, 0.7742082476615906f, 0.5463674068450928f, 0.030213626101613045f, 0.25614964962005615f, 0.4982187747955322f, 0.5488798022270203f, 0.1671399623155594f, +0.40418151021003723f, 0.3885907530784607f, 0.1602887064218521f, 0.37851646542549133f, 0.695648729801178f, 0.5767422318458557f, 0.5825603604316711f, 0.7199307084083557f, +0.9904960989952087f, 0.6506299376487732f, 0.9875284433364868f, 0.782872200012207f, 0.4780937433242798f, 0.9530528783798218f, 0.3405267894268036f, 0.5024201273918152f, +0.5036082863807678f, 0.646651029586792f, 0.5919353365898132f, 0.8940028548240662f, 0.9740772843360901f, 0.27637574076652527f, 0.7951588034629822f, 0.11658211052417755f, +0.3702464997768402f, 0.9532597661018372f, 0.28102561831474304f, 0.39246878027915955f, 0.2607680559158325f, 0.9286248087882996f, 0.43029800057411194f, 0.7392871379852295f, +0.5018674731254578f, 0.5828195810317993f, 0.3235098421573639f, 0.628177285194397f, 0.9329535961151123f, 0.9496006369590759f, 0.2981414794921875f, 0.6116676330566406f, +0.2186942845582962f, 0.42077580094337463f, 0.006467492785304785f, 0.041721172630786896f, 0.06820549815893173f, 0.36181560158729553f, 0.5711138844490051f, 0.9791950583457947f, +0.9267167448997498f, 0.813691258430481f, 0.6777283549308777f, 0.44780194759368896f, 0.20604321360588074f, 0.5869336724281311f, 0.7677092552185059f, 0.43634533882141113f, +0.4762759506702423f, 0.3164922893047333f, 0.9215336441993713f, 0.6760039925575256f, 0.27037525177001953f, 0.3767324388027191f, 0.4953334331512451f, 0.6087929010391235f, +0.020054787397384644f, 0.6122746467590332f, 0.149786576628685f, 0.648946225643158f, 0.4050130248069763f, 0.8390921354293823f, 0.034163471311330795f, 0.8613834381103516f, +0.07844435423612595f, 0.30949437618255615f, 0.9497601985931396f, 0.23626892268657684f, 0.817538857460022f, 0.6971801519393921f, 0.040269866585731506f, 0.6753272414207458f, +0.6587221026420593f, 0.7105944752693176f, 0.9611751437187195f, 0.9358671307563782f, 0.398337721824646f, 0.8263176679611206f, 0.7056615352630615f, 0.07779049873352051f, +0.27192196249961853f, 0.10355101525783539f, 0.6080450415611267f, 0.7596902251243591f, 0.6348345875740051f, 0.806840717792511f, 0.913567841053009f, 0.11817292869091034f, +0.21043476462364197f, 0.24281571805477142f, 0.7986416816711426f, 0.3486495912075043f, 0.3105126619338989f, 0.9333900213241577f, 0.12549296021461487f, 0.5968257784843445f, +0.4331820607185364f, 0.5105759501457214f, 0.12307821959257126f, 0.668448269367218f, 0.5892918705940247f, 0.30489078164100647f, 0.4909147322177887f, 0.16642418503761292f, +0.8709826469421387f, 0.10958026349544525f, 0.955344557762146f, 0.43754932284355164f, 0.48505160212516785f, 0.30772730708122253f, 0.9999691247940063f, 0.1905144602060318f, +0.8962683081626892f, 0.5126334428787231f, 0.1910465657711029f, 0.6325972080230713f, 0.4569868743419647f, 0.6158699989318848f, 0.4858947992324829f, 0.7960962057113647f, +0.8253582119941711f, 0.4701724350452423f, 0.6126796007156372f, 0.6578205823898315f, 0.06973845511674881f, 0.7169721126556396f, 0.5279459953308105f, 0.9462646842002869f, +0.8577713370323181f, 0.20560289919376373f, 0.9068694114685059f, 0.5313517451286316f, 0.9256479144096375f, 0.7302111387252808f, 0.8480902910232544f, 0.41765284538269043f, +0.08423011749982834f, 0.8530387282371521f, 0.8938209414482117f, 0.2800271213054657f, 0.35174909234046936f, 0.015382266603410244f, 0.7624648809432983f, 0.2623447775840759f, +0.7990629076957703f, 0.2932257056236267f, 0.3694598972797394f, 0.5780710577964783f, 0.05545510724186897f, 0.3465450406074524f, 0.3806533217430115f, 0.7350676655769348f, +0.020244278013706207f, 0.8138416409492493f, 0.6041850447654724f, 0.5083774924278259f, 0.00506464671343565f, 0.08485560864210129f, 0.41333335638046265f, 0.18053986132144928f, +0.026864109560847282f, 0.6360440850257874f, 0.39116838574409485f, 0.6860900521278381f, 0.06133952736854553f, 0.13790032267570496f, 0.3252149224281311f, 0.1456948220729828f, +0.07135120034217834f, 0.15866760909557343f, 0.16364677250385284f, 0.9469892978668213f, 0.49556487798690796f, 0.1853097826242447f, 0.9301142692565918f, 0.791886031627655f, +0.7623022794723511f, 0.23694714903831482f, 0.7900668978691101f, 0.7980331182479858f, 0.23384854197502136f, 0.7705411911010742f, 0.5204025506973267f, 0.4737190902233124f, +0.5161663293838501f, 0.645763635635376f, 0.7639007568359375f, 0.1238391324877739f, 0.7309743762016296f, 0.6149532794952393f, 0.2960977256298065f, 0.6619189977645874f, +0.052916232496500015f, 0.12541191279888153f, 0.5726012587547302f, 0.6924370527267456f, 0.16292689740657806f, 0.8537866473197937f, 0.0343162938952446f, 0.24716779589653015f, +0.48479264974594116f, 0.05761309340596199f, 0.2517603635787964f, 0.9899635314941406f, 0.5732844471931458f, 0.289139062166214f, 0.3664892315864563f, 0.4773517847061157f, +0.0758066475391388f, 0.16276155412197113f, 0.628610372543335f, 0.7189992666244507f, 0.33492085337638855f, 0.7245046496391296f, 0.5387532711029053f, 0.1008613109588623f, +0.3119015395641327f, 0.005400338675826788f, 0.3398286700248718f, 0.3419038653373718f, 0.7480577230453491f, 0.40266284346580505f, 0.9675846099853516f, 0.7374320030212402f, +0.06852489709854126f, 0.6771625280380249f, 0.8834402561187744f, 0.8741129636764526f, 0.9640485644340515f, 0.6801837682723999f, 0.719150185585022f, 0.6336182951927185f, +0.20654742419719696f, 0.8820586204528809f, 0.5977901220321655f, 0.6483811140060425f, 0.040288109332323074f, 0.9406665563583374f, 0.22653929889202118f, 0.857342004776001f, +0.12208240479230881f, 0.13695091009140015f, 0.7699580788612366f, 0.6188163161277771f, 0.00972399115562439f, 0.5591570138931274f, 0.29845818877220154f, 0.18091298639774323f, +0.6740522384643555f, 0.22773993015289307f, 0.8939959406852722f, 0.2208278626203537f, 0.5195240378379822f, 0.07295913994312286f, 0.38003432750701904f, 0.7330315113067627f, +0.49371305108070374f, 0.6369953155517578f, 0.04497312009334564f, 0.19772092998027802f, 0.7776428461074829f, 0.4071437120437622f, 0.8162722587585449f, 0.09698865562677383f, +0.6191313862800598f, 0.2477368414402008f, 0.5109699368476868f, 0.9703420400619507f, 0.6360378265380859f, 0.043840713798999786f, 0.6679540872573853f, 0.21102656424045563f, +0.19136221706867218f, 0.6863782405853271f, 0.6167455911636353f, 0.9039707183837891f, 0.06843414157629013f, 0.38509416580200195f, 0.6773894429206848f, 0.7695633769035339f, +0.029163004830479622f, 0.5978575348854065f, 0.3959111273288727f, 0.5071203708648682f, 0.28742995858192444f, 0.7614781856536865f, 0.22674302756786346f, 0.4597499966621399f, +0.903154194355011f, 0.3229166269302368f, 0.90566486120224f, 0.1096026673913002f, 0.28077369928359985f, 0.928206205368042f, 0.8750103116035461f, 0.07116813212633133f, +0.6551937460899353f, 0.1434909999370575f, 0.6896508932113647f, 0.47127243876457214f, 0.7058337926864624f, 0.794497013092041f, 0.4825679659843445f, 0.6062861084938049f, +0.6844139695167542f, 0.31247252225875854f, 0.2932172417640686f, 0.8971425294876099f, 0.3335084319114685f, 0.08411083370447159f, 0.3168075978755951f, 0.6745714545249939f, +0.9704251885414124f, 0.938637375831604f, 0.7872390747070312f, 0.8204362392425537f, 0.45099666714668274f, 0.915100634098053f, 0.7145248055458069f, 0.049396734684705734f, +0.6127545833587646f, 0.7473770380020142f, 0.07592304795980453f, 0.20187439024448395f, 0.7769826650619507f, 0.018946358934044838f, 0.559262752532959f, 0.21226780116558075f, +0.40805065631866455f, 0.43610328435897827f, 0.04915700852870941f, 0.35721471905708313f, 0.5911471247673035f, 0.1600753515958786f, 0.5493666529655457f, 0.4696893095970154f, +0.42944827675819397f, 0.36507245898246765f, 0.9070496559143066f, 0.5757470726966858f, 0.7073960900306702f, 0.6813288331031799f, 0.5026404857635498f, 0.3829249441623688f, +0.4965762197971344f, 0.9220874905586243f, 0.28927651047706604f, 0.9274119734764099f, 0.5703991651535034f, 0.9135783910751343f, 0.8214319348335266f, 0.9632395505905151f, +0.07509838044643402f, 0.1268298178911209f, 0.04875031113624573f, 0.5599533915519714f, 0.24352514743804932f, 0.10623753815889359f, 0.4642540216445923f, 0.41367581486701965f, +0.4806077480316162f, 0.23051361739635468f, 0.757484495639801f, 0.44907432794570923f, 0.9146111607551575f, 0.37395432591438293f, 0.8525166511535645f, 0.5332443714141846f, +0.8367478251457214f, 0.27843454480171204f, 0.806515634059906f, 0.2660224437713623f, 0.6180469989776611f, 0.03236279636621475f, 0.9404042959213257f, 0.7693419456481934f, +0.623222827911377f, 0.5565884113311768f, 0.36454182863235474f, 0.6114023327827454f, 0.7096590995788574f, 0.9738978147506714f, 0.2210526168346405f, 0.012801581993699074f, +0.9001460075378418f, 0.7768153548240662f, 0.24081268906593323f, 0.9411236047744751f, 0.2556566298007965f, 0.11808367073535919f, 0.20264111459255219f, 0.3930875062942505f, +0.28359007835388184f, 0.37568995356559753f, 0.1203627735376358f, 0.1512158364057541f, 0.21435485780239105f, 0.31525692343711853f, 0.5953835844993591f, 0.3517104387283325f, +0.18734534084796906f, 0.7877190113067627f, 0.5668391585350037f, 0.6770181059837341f, 0.7430495619773865f, 0.08710229396820068f, 0.5321570634841919f, 0.7802199125289917f, +0.8519982695579529f, 0.005866779945790768f, 0.05558120459318161f, 0.3395126461982727f, 0.9761285185813904f, 0.9781147837638855f, 0.29462045431137085f, 0.48231834173202515f, +0.07979501038789749f, 0.71628338098526f, 0.583385169506073f, 0.16915194690227509f, 0.3556919991970062f, 0.5103157162666321f, 0.23718932271003723f, 0.02989714965224266f, +0.6631006598472595f, 0.7488466501235962f, 0.35575076937675476f, 0.8623586297035217f, 0.2267860621213913f, 0.1743796169757843f, 0.9297637343406677f, 0.6773303747177124f, +0.39161092042922974f, 0.8990998268127441f, 0.9092032313346863f, 0.6773858666419983f, 0.1972552239894867f, 0.14613211154937744f, 0.8749746680259705f, 0.5070095062255859f, +0.5933070182800293f, 0.8272294402122498f, 0.024811187759041786f, 0.127931147813797f, 0.010390125215053558f, 0.05189955234527588f, 0.44300520420074463f, 0.8419147729873657f, +0.8458194732666016f, 0.29705584049224854f, 0.8582937717437744f, 0.3518436849117279f, 0.2648809254169464f, 0.19914354383945465f, 0.7924613952636719f, 0.7913232445716858f, +0.60811448097229f, 0.3661099076271057f, 0.5971283912658691f, 0.6631913781166077f, 0.4141249656677246f, 0.7533894181251526f, 0.7227662801742554f, 0.7482525706291199f, +0.5977746844291687f, 0.7088261246681213f, 0.598160445690155f, 0.017699239775538445f, 0.46339768171310425f, 0.9916101098060608f, 0.931372880935669f, 0.8982666730880737f, +0.42931100726127625f, 0.47833338379859924f, 0.3602297902107239f, 0.7620266675949097f, 0.7110917568206787f, 0.5472627878189087f, 0.07369683682918549f, 0.8948986530303955f, +0.8404770493507385f, 0.10012225806713104f, 0.5642121434211731f, 0.8309308886528015f, 0.6902474164962769f, 0.7679475545883179f, 0.10687903314828873f, 0.7063480615615845f, +0.13452096283435822f, 0.8075939416885376f, 0.967900276184082f, 0.34023675322532654f, 0.10326458513736725f, 0.21857906877994537f, 0.14232753217220306f, 0.4214921295642853f, +0.8497536182403564f, 0.7851979732513428f, 0.927878737449646f, 0.15882481634616852f, 0.890694797039032f, 0.3955964148044586f, 0.9923628568649292f, 0.8262554407119751f, +0.39380186796188354f, 0.9020671844482422f, 0.3001914918422699f, 0.5421823263168335f, 0.5730393528938293f, 0.6624204516410828f, 0.6015557050704956f, 0.059564344584941864f, +0.07203655689954758f, 0.87333083152771f, 8.88484573806636e-05f, 0.9476097822189331f, 0.9511879086494446f, 0.014178682118654251f, 0.9781673550605774f, 0.7479382157325745f, +0.2080940157175064f, 0.3521188497543335f, 0.6611534953117371f, 0.9413266181945801f, 0.8236852884292603f, 0.4732016921043396f, 0.1605699360370636f, 0.3175133466720581f, +0.8606458902359009f, 0.7036030888557434f, 0.431959331035614f, 0.9303763508796692f, 0.863741934299469f, 0.050415731966495514f, 0.41885289549827576f, 0.34817835688591003f, +0.5392239093780518f, 0.7555371522903442f, 0.08419615775346756f, 0.15119974315166473f, 0.14491762220859528f, 0.3275810480117798f, 0.6967682242393494f, 0.540704607963562f, +0.1242407038807869f, 0.42481184005737305f, 0.088539719581604f, 0.8014217615127563f, 0.6929215788841248f, 0.6527777314186096f, 0.8889777660369873f, 0.20323951542377472f, +0.016884738579392433f, 0.7965341806411743f, 0.11942924559116364f, 0.7841569781303406f, 0.5657631158828735f, 0.20230664312839508f, 0.6569953560829163f, 0.6523152589797974f, +0.7999456524848938f, 0.5872356295585632f, 0.5454949140548706f, 0.04693504422903061f, 0.3304493725299835f, 0.9975693821907043f, 0.4167879819869995f, 0.5930319428443909f, +0.9465017318725586f, 0.4249001443386078f, 0.7831619381904602f, 0.2781986594200134f, 0.8792813420295715f, 0.11217231303453445f, 0.12527813017368317f, 0.5234584808349609f, +0.22257918119430542f, 0.8387895822525024f, 0.5338990688323975f, 0.030288197100162506f, 0.46320226788520813f, 0.5587241053581238f, 0.5025948286056519f, 0.7508853673934937f, +0.9323919415473938f, 0.6918306350708008f, 0.5164028406143188f, 0.2356111854314804f, 0.24399864673614502f, 0.23878873884677887f, 0.2678571939468384f, 0.9925124049186707f, +0.09160944074392319f, 0.7732088565826416f, 0.8311678171157837f, 0.9407837986946106f, 0.19343894720077515f, 0.974084198474884f, 0.025965608656406403f, 0.5948208570480347f, +0.1775224357843399f, 0.9169226288795471f, 0.8727908134460449f, 0.12645301222801208f, 0.3818829357624054f, 0.07631418108940125f, 0.3361451327800751f, 0.37052926421165466f, +0.8198350667953491f, 0.814132809638977f, 0.8922801613807678f, 0.7362250685691833f, 0.10165612399578094f, 0.7104467749595642f, 0.48051413893699646f, 0.10175306349992752f, +0.5623646974563599f, 0.8037598133087158f, 0.6788733005523682f, 0.9654994606971741f, 0.5991250276565552f, 0.26688387989997864f, 0.8086358308792114f, 0.9229440689086914f, +0.6099114418029785f, 0.6198728680610657f, 0.7938781976699829f, 0.9614227414131165f, 0.5791057348251343f, 0.3542589843273163f, 0.622957706451416f, 0.3024725914001465f, +0.541984498500824f, 0.5485737919807434f, 0.3805139660835266f, 0.1682608276605606f, 0.8841057419776917f, 0.21630613505840302f, 0.14437349140644073f, 0.42521238327026367f, +0.6382145285606384f, 0.12829868495464325f, 0.07719185948371887f, 0.7256166934967041f, 0.021491194143891335f, 0.7249746322631836f, 0.9615417122840881f, 0.9078976511955261f, +0.9939789772033691f, 0.11809694766998291f, 0.39507657289505005f, 0.6732536554336548f, 0.20562325417995453f, 0.6947347521781921f, 0.19183896481990814f, 0.9652838110923767f, +0.1672016680240631f, 0.1185508593916893f, 0.7720498442649841f, 0.9143908619880676f, 0.5814752578735352f, 0.42405828833580017f, 0.13031576573848724f, 0.3642311990261078f, +0.18111611902713776f, 0.15817564725875854f, 0.48208001255989075f, 0.27021580934524536f, 0.9715560674667358f, 0.3388589918613434f, 0.5415457487106323f, 0.5681191682815552f, +0.14450371265411377f, 0.3362516164779663f, 0.5059646368026733f, 0.20654267072677612f, 0.6589854955673218f, 0.9522148966789246f, 0.99283766746521f, 0.3102260231971741f, +0.21962937712669373f, 0.41134196519851685f, 0.5184564590454102f, 0.08008234202861786f, 0.7812398672103882f, 0.6801874041557312f, 0.6560950875282288f, 0.6417209506034851f, +0.5397397875785828f, 0.44554686546325684f, 0.9594000577926636f, 0.4271038770675659f, 0.8694396018981934f, 0.737312912940979f, 0.21765831112861633f, 0.4849114418029785f, +0.2650175094604492f, 0.3676624000072479f, 0.7871279120445251f, 0.2645673453807831f, 0.3753017783164978f, 0.7479394674301147f, 0.9869672656059265f, 0.5288779139518738f, +0.36375200748443604f, 0.7014821171760559f, 0.16284145414829254f, 0.7274001240730286f, 0.25568094849586487f, 0.9347272515296936f, 0.6768128275871277f, 0.8849278092384338f, +0.3291480839252472f, 0.3510547876358032f, 0.0211088377982378f, 0.6455041170120239f, 0.46775591373443604f, 0.6205494999885559f, 0.47195395827293396f, 0.24983762204647064f, +0.8892661333084106f, 0.23861752450466156f, 0.1963481605052948f, 0.7004125118255615f, 0.9548524022102356f, 0.3395528793334961f, 0.4043896496295929f, 0.025926843285560608f, +0.05692017078399658f, 0.2690628170967102f, 0.6176096796989441f, 0.793891191482544f, 0.3490068018436432f, 0.6704052090644836f, 0.6412636041641235f, 0.6684189438819885f, +0.9006863832473755f, 0.3578090965747833f, 0.10973045229911804f, 0.38241687417030334f, 0.12968075275421143f, 0.6276845335960388f, 0.3045029938220978f, 0.011977343820035458f, +0.9219078421592712f, 0.7694852352142334f, 0.05958034470677376f, 0.3184319734573364f, 0.35184961557388306f, 0.7674364447593689f, 0.38087406754493713f, 0.4778544008731842f, +0.9389557242393494f, 0.16270722448825836f, 0.06972945481538773f, 0.946250319480896f, 0.792088508605957f, 0.9605680108070374f, 0.14753879606723785f, 0.8843326568603516f, +0.4541495740413666f, 0.44197091460227966f, 0.1888960301876068f, 0.7027363777160645f, 0.02241262048482895f, 0.4321477711200714f, 0.16785579919815063f, 0.9491940140724182f, +0.4674956202507019f, 0.802241325378418f, 0.8131659030914307f, 0.7240335941314697f, 0.9281805157661438f, 0.20760484039783478f, 0.7122980952262878f, 0.0609864816069603f, +0.6150280237197876f, 0.34039297699928284f, 0.7242344617843628f, 0.032757725566625595f, 0.19046376645565033f, 0.823412299156189f, 0.5472224354743958f, 0.7393499612808228f, +0.5777449607849121f, 0.7135425209999084f, 0.6538051962852478f, 0.6572478413581848f, 0.7384632229804993f, 0.799087643623352f, 0.7371928691864014f, 0.40709057450294495f, +0.09874209761619568f, 0.41272255778312683f, 0.4989645481109619f, 0.6562166810035706f, 0.9393930435180664f, 0.3927031457424164f, 0.7025595307350159f, 0.8093633055686951f, +0.45705580711364746f, 0.06219002604484558f, 0.13411998748779297f, 0.9243720173835754f, 0.8057580590248108f, 0.9309765100479126f, 0.18744030594825745f, 0.6793667674064636f, +0.4552702307701111f, 0.7118163108825684f, 0.16601860523223877f, 0.8916284441947937f, 0.8402737975120544f, 0.2444937527179718f, 0.18924936652183533f, 0.474899560213089f, +0.32842817902565f, 0.4163675308227539f, 0.45254063606262207f, 0.13053135573863983f, 0.06084296107292175f, 0.2486911118030548f, 0.15770867466926575f, 0.23724035918712616f, +0.40925633907318115f, 0.06283368170261383f, 0.7759745717048645f, 0.46659600734710693f, 0.7546229362487793f, 0.09395608305931091f, 0.13932515680789948f, 0.9896610975265503f, +0.6115543842315674f, 0.5548034906387329f, 0.35168421268463135f, 0.7014065980911255f, 0.9716764688491821f, 0.19752804934978485f, 0.7574331760406494f, 0.8524338603019714f, +0.22964923083782196f, 0.5487749576568604f, 0.3830564618110657f, 0.36005380749702454f, 0.6784379482269287f, 0.8767085075378418f, 0.4523873031139374f, 0.6811938285827637f, +0.16996504366397858f, 0.6068663001060486f, 0.1482403427362442f, 0.07278362661600113f, 0.6047201156616211f, 0.6144509315490723f, 0.9722623825073242f, 0.4826486110687256f, +0.33722513914108276f, 0.6144455671310425f, 0.739441990852356f, 0.7385537624359131f, 0.3108316659927368f, 0.6627236604690552f, 0.8933303356170654f, 0.24445755779743195f, +0.06679317355155945f, 0.8764848113059998f, 0.8873816728591919f, 0.5813596844673157f, 0.16544969379901886f, 0.7786160707473755f, 0.7827453017234802f, 0.40346747636795044f, +0.09564919769763947f, 0.4828554093837738f, 0.9695823788642883f, 0.18554919958114624f, 0.9396530985832214f, 0.28030455112457275f, 0.5642122626304626f, 0.38784343004226685f, +0.3330119252204895f, 0.30856117606163025f, 0.9749622941017151f, 0.6209394335746765f, 0.44124940037727356f, 0.555585503578186f, 0.9212573766708374f, 0.08231675624847412f, +0.405545711517334f, 0.48172426223754883f, 0.8202176690101624f, 0.05462874844670296f, 0.3452755808830261f, 0.7981306910514832f, 0.999005913734436f, 0.6226414442062378f, +0.0022350167855620384f, 0.05379996821284294f, 0.5581695437431335f, 0.8423044085502625f, 0.050054192543029785f, 0.6013273596763611f, 0.7383575439453125f, 0.7372073531150818f, +0.8706385493278503f, 0.7794334292411804f, 0.9912745356559753f, 0.19369691610336304f, 0.2236141711473465f, 0.7719239592552185f, 0.4587444067001343f, 0.553881049156189f, +0.9544936418533325f, 0.364531010389328f, 0.6565258502960205f, 0.958333432674408f, 0.6795428395271301f, 0.6075471043586731f, 0.4010319411754608f, 0.13640253245830536f, +0.22906054556369781f, 0.9746471643447876f, 0.6108114123344421f, 0.4547373950481415f, 0.48496881127357483f, 0.17655619978904724f, 0.9131925106048584f, 0.7513889670372009f, +0.053975459188222885f, 0.05596838891506195f, 0.15108662843704224f, 0.023524824529886246f, 0.5193073749542236f, 0.19061464071273804f, 0.8681290745735168f, 0.32886427640914917f, +0.19846923649311066f, 0.0025057573802769184f, 0.23322440683841705f, 0.6615521311759949f, 0.217499241232872f, 0.1439347267150879f, 0.1677447259426117f, 0.3359758257865906f, +0.5072392821311951f, 0.060399845242500305f, 0.7791162729263306f, 0.4307463467121124f, 0.6353666186332703f, 0.3851586580276489f, 0.8213269710540771f, 0.6541191339492798f, +0.6295045018196106f, 0.08041875809431076f, 0.9555318355560303f, 0.9279731512069702f, 0.07858765870332718f, 0.12623922526836395f, 0.21096935868263245f, 0.943916380405426f, +0.8761102557182312f, 0.4126954972743988f, 0.14867958426475525f, 0.7267875671386719f, 0.5449945330619812f, 0.2874772846698761f, 0.16503070294857025f, 0.48461273312568665f, +0.046671122312545776f, 0.7778088450431824f, 0.10148074477910995f, 0.13290923833847046f, 0.35959431529045105f, 0.09755711257457733f, 0.7019975185394287f, 0.7901310324668884f, +0.6582596898078918f, 0.04411217197775841f, 0.1723899245262146f, 0.01900263875722885f, 0.9264549016952515f, 0.20474092662334442f, 0.7851800322532654f, 0.6463190913200378f, +0.4125288128852844f, 0.4296484887599945f, 0.21740955114364624f, 0.12277353554964066f, 0.7610742449760437f, 0.4372994005680084f, 0.4898042380809784f, 0.5359944105148315f, +0.3021770715713501f, 0.5454652905464172f, 0.1677272617816925f, 0.08660700917243958f, 0.5653232336044312f, 0.6844581365585327f, 0.09092243015766144f, 0.8487614393234253f, +0.597007691860199f, 0.7138767242431641f, 0.8843560218811035f, 0.27794286608695984f, 0.12216528505086899f, 0.48320910334587097f, 0.8742911219596863f, 0.5000233054161072f, +0.923042893409729f, 0.6994839906692505f, 0.13866572082042694f, 0.0397200807929039f, 0.8880651593208313f, 0.5121050477027893f, 0.9680263996124268f, 0.947187066078186f, +0.20728151500225067f, 0.9256002902984619f, 0.2891882359981537f, 0.2535500228404999f, 0.7600666284561157f, 0.40753504633903503f, 0.13523422181606293f, 0.4955105781555176f, +0.8228147029876709f, 0.4190906584262848f, 0.7370719313621521f, 0.13957959413528442f, 0.2763596773147583f, 0.9075056314468384f, 0.39484503865242004f, 0.6279091835021973f, +0.5926638841629028f, 0.23716385662555695f, 0.009492049925029278f, 0.08213885873556137f, 0.25971662998199463f, 0.1214563250541687f, 0.8372905254364014f, 0.07881339639425278f, +0.8203582167625427f, 0.25146764516830444f, 0.2189926952123642f, 0.1765291541814804f, 0.28736960887908936f, 0.9706841111183167f, 0.16516587138175964f, 0.14070208370685577f, +0.2740756571292877f, 0.5791264176368713f, 0.763798177242279f, 0.74978107213974f, 0.9575866460800171f, 0.7116414308547974f, 0.5718472003936768f, 0.03535866364836693f, +0.1799132525920868f, 0.7980133891105652f, 0.7805466651916504f, 0.7610531449317932f, 0.4885410666465759f, 0.9642494916915894f, 0.2722945809364319f, 0.7542040944099426f, +0.30033358931541443f, 0.46256524324417114f, 0.721546471118927f, 0.3425354063510895f, 0.8035427331924438f, 0.36466026306152344f, 0.6649078726768494f, 0.13744120299816132f, +0.49596548080444336f, 0.9703194499015808f, 0.6438102722167969f, 0.5302454233169556f, 0.5889075398445129f, 0.5492508411407471f, 0.755184531211853f, 0.03225963935256004f, +0.6184496283531189f, 0.041384462267160416f, 0.5935570597648621f, 0.3076047897338867f, 0.3624489903450012f, 0.6605754494667053f, 0.926724374294281f, 0.5511395931243896f, +0.2349744439125061f, 0.19689741730690002f, 0.5032317042350769f, 0.58822101354599f, 0.7456368207931519f, 0.5351340174674988f, 0.6494439244270325f, 0.44928988814353943f, +0.15064848959445953f, 0.20683740079402924f, 0.7671653628349304f, 0.6125577688217163f, 0.7287676334381104f, 0.9244104623794556f, 0.09026285260915756f, 0.8894758224487305f, +0.7567499876022339f, 0.7151765823364258f, 0.19439852237701416f, 0.22954031825065613f, 0.09164967387914658f, 0.5671141743659973f, 0.34099727869033813f, 0.6345542073249817f, +0.21240803599357605f, 0.6260671019554138f, 0.00737762963399291f, 0.5386686325073242f, 0.6258710622787476f, 0.7133932113647461f, 0.8769161105155945f, 0.35147878527641296f, +0.8441406488418579f, 0.7431811690330505f, 0.060700416564941406f, 0.49973440170288086f, 0.42697834968566895f, 0.010183816775679588f, 0.9573721289634705f, 0.6073621511459351f, +0.9522772431373596f, 0.03887638449668884f, 0.29490000009536743f, 0.19509422779083252f, 0.4067612886428833f, 0.4827563464641571f, 0.34632667899131775f, 0.8696251511573792f, +0.5408807396888733f, 0.6307380795478821f, 0.5761252045631409f, 0.19135382771492004f, 0.9295797348022461f, 0.5261229872703552f, 0.6761908531188965f, 0.7518772482872009f, +0.9474136233329773f, 0.057174935936927795f, 0.26550233364105225f, 0.8111686706542969f, 0.446520060300827f, 0.07970812916755676f, 0.18694187700748444f, 0.3215083181858063f, +0.42127537727355957f, 0.07283252477645874f, 0.8170835375785828f, 0.48144033551216125f, 0.7544031739234924f, 0.21558570861816406f, 0.3507988154888153f, 0.3263222277164459f, +0.842705249786377f, 0.7365831136703491f, 0.006335023790597916f, 0.011878829449415207f, 0.07562794536352158f, 0.3639732301235199f, 0.4776831865310669f, 0.7694523930549622f, +0.22818943858146667f, 0.8669463396072388f, 0.36033299565315247f, 0.13736452162265778f, 0.6545999050140381f, 0.1836937814950943f, 0.6026290655136108f, 0.21092930436134338f, +0.4243624210357666f, 0.6191445589065552f, 0.7121462225914001f, 0.18353217840194702f, 0.21101459860801697f, 0.32499656081199646f, 0.5558251142501831f, 0.9462792873382568f, +0.06088343635201454f, 0.36700382828712463f, 0.13947513699531555f, 0.3523658215999603f, 0.06081187725067139f, 0.24681530892848969f, 0.9593338370323181f, 0.26310375332832336f, +0.42245474457740784f, 0.6726236343383789f, 0.058715078979730606f, 0.475033164024353f, 0.6882018446922302f, 0.5845237970352173f, 0.31700992584228516f, 0.4723869264125824f, +0.4223083257675171f, 0.1588830202817917f, 0.23770643770694733f, 0.5536705255508423f, 0.9380304217338562f, 0.5007466077804565f, 0.2949158549308777f, 0.8359551429748535f, +0.6465005278587341f, 0.6897106170654297f, 0.4736332595348358f, 0.7451198101043701f, 0.8272035121917725f, 0.8524219989776611f, 0.5354454517364502f, 0.9522824883460999f, +0.8985389471054077f, 0.3445979058742523f, 0.072663314640522f, 0.0846496969461441f, 0.5153026580810547f, 0.3350929021835327f, 0.8479252457618713f, 0.23240064084529877f, +0.37798309326171875f, 0.18611322343349457f, 0.9665858745574951f, 0.002296478021889925f, 0.621040403842926f, 0.8520824909210205f, 0.11307451128959656f, 0.13798506557941437f, +0.6077550649642944f, 0.6914376616477966f, 0.06906155496835709f, 0.1659131497144699f, 0.5359664559364319f, 0.07135854661464691f, 0.7438799142837524f, 0.8948891162872314f, +0.4239727854728699f, 0.09942075610160828f, 0.048093318939208984f, 0.4973132014274597f, 0.6057071685791016f, 0.47096961736679077f, 0.7796064615249634f, 0.720529317855835f, +0.7329536080360413f, 0.27709364891052246f, 0.5056376457214355f, 0.17309355735778809f, 0.7530646324157715f, 0.4557555317878723f, 0.32180801033973694f, 0.7238460183143616f, +0.04907417669892311f, 0.29896870255470276f, 0.30244067311286926f, 0.9357057213783264f, 0.828761637210846f, 0.7814491987228394f, 0.9007179141044617f, 0.8870907425880432f, +0.553270697593689f, 0.7168906331062317f, 0.6753124594688416f, 0.005433805752545595f, 0.8889656662940979f, 0.44464191794395447f, 0.10097391903400421f, 0.9961822628974915f, +0.23240673542022705f, 0.7910746932029724f, 0.4197184145450592f, 0.8983937501907349f, 0.23160980641841888f, 0.03570801019668579f, 0.4111135005950928f, 0.037227872759103775f, +0.115587018430233f, 0.34902089834213257f, 0.18724030256271362f, 0.5768592953681946f, 0.34005007147789f, 0.42540329694747925f, 0.95499587059021f, 0.9430616497993469f, +0.5592679977416992f, 0.9079381227493286f, 0.2958902418613434f, 0.5102056860923767f, 0.13059327006340027f, 0.9035246968269348f, 0.995597243309021f, 0.3916358947753906f, +0.10549544543027878f, 0.6972934603691101f, 0.65995192527771f, 0.27917683124542236f, 0.34791305661201477f, 0.7802373170852661f, 0.4995919466018677f, 0.5376228094100952f, +0.3497745394706726f, 0.6633704900741577f, 0.7773168683052063f, 0.8244999051094055f, 0.5066443681716919f, 0.31385308504104614f, 0.7648000121116638f, 0.5519710779190063f, +0.7775660753250122f, 0.5764263272285461f, 0.9462200403213501f, 0.8148752450942993f, 0.14531788229942322f, 0.01712344028055668f, 0.6274967789649963f, 0.46960923075675964f, +0.3320728540420532f, 0.255176305770874f, 0.5208634734153748f, 0.5129836797714233f, 0.9275440573692322f, 0.2579389810562134f, 0.7651371955871582f, 0.053310178220272064f, +0.6227353811264038f, 0.43547263741493225f, 0.22188150882720947f, 0.965945303440094f, 0.3226892650127411f, 0.3320194184780121f, 0.475956529378891f, 0.6374903321266174f, +0.01028013601899147f, 0.405813068151474f, 0.4604327976703644f, 0.9233105778694153f, 0.8233079314231873f, 0.8517606258392334f, 0.8523431420326233f, 0.954348623752594f, +0.7595904469490051f, 0.35628145933151245f, 0.22752046585083008f, 0.9864690899848938f, 0.26881277561187744f, 0.0830930694937706f, 0.057443443685770035f, 0.8249444961547852f, +0.028991209343075752f, 0.9062796235084534f, 0.08211862295866013f, 0.3522597551345825f, 0.9994632005691528f, 0.13997186720371246f, 0.8622220158576965f, 0.5370686054229736f, +0.03272196277976036f, 0.8808343410491943f, 0.9037409424781799f, 0.4417351484298706f, 0.8185827732086182f, 0.1858120560646057f, 0.769089937210083f, 0.8348661065101624f, +0.9527451395988464f, 0.3578283190727234f, 0.10637696087360382f, 0.9058464765548706f, 0.6810385584831238f, 0.8429881930351257f, 0.6288058757781982f, 0.3288853168487549f, +0.5769570469856262f, 0.2582117021083832f, 0.7966971397399902f, 0.5443671345710754f, 0.43237048387527466f, 0.535528302192688f, 0.11208206415176392f, 0.192819282412529f, +0.3972724378108978f, 0.5105235576629639f, 0.1315750628709793f, 0.1455964297056198f, 0.01737949065864086f, 0.5894827246665955f, 0.21832554042339325f, 0.5856133699417114f, +0.2236536145210266f, 0.5804303884506226f, 0.5996055006980896f, 0.4191311299800873f, 0.661297619342804f, 0.5215650200843811f, 0.20951293408870697f, 0.7773056030273438f, +0.17088940739631653f, 0.9320173859596252f, 0.6697171926498413f, 0.8379414081573486f, 0.20087391138076782f, 0.3772154450416565f, 0.6886621713638306f, 0.534768283367157f, +0.008424090221524239f, 0.8955100178718567f, 0.9770122170448303f, 0.22922982275485992f, 0.4660593569278717f, 0.5793001651763916f, 0.05483466759324074f, 0.33350056409835815f, +0.356389582157135f, 0.5744380950927734f, 0.6031159162521362f, 0.7370100617408752f, 0.5526152849197388f, 0.3133525252342224f, 0.7635736465454102f, 0.321066290140152f, +0.6513893008232117f, 0.6233655214309692f, 0.18074704706668854f, 0.7535838484764099f, 0.43457144498825073f, 0.4369654953479767f, 0.836533784866333f, 0.02864188514649868f, +0.37878817319869995f, 0.6073963642120361f, 0.5974938273429871f, 0.9280333518981934f, 0.8557884693145752f, 0.8524648547172546f, 0.08969027549028397f, 0.955818772315979f, +0.4792589247226715f, 0.4393135905265808f, 0.4886428415775299f, 0.5308229327201843f, 0.10700194537639618f, 0.1367095708847046f, 0.9236359000205994f, 0.8979591727256775f, +0.8724532723426819f, 0.035848379135131836f, 0.8212755918502808f, 0.8559420108795166f, 0.5211493372917175f, 0.8309463262557983f, 0.5098932981491089f, 0.19731806218624115f, +0.7433242201805115f, 0.3283577859401703f, 0.2786038815975189f, 0.6474904417991638f, 0.9979334473609924f, 0.44351431727409363f, 0.4860382080078125f, 0.2272089570760727f, +0.459726482629776f, 0.7596396803855896f, 0.08548915386199951f, 0.2555079758167267f, 0.9248895049095154f, 0.5363814830780029f, 0.06389304995536804f, 0.37074947357177734f, +0.3235526978969574f, 0.8750060200691223f, 0.5181780457496643f, 0.8907021880149841f, 0.6814836859703064f, 0.8365218639373779f, 0.522227942943573f, 0.06845688074827194f, +0.2756771147251129f, 0.11166749149560928f, 0.8395023941993713f, 0.7322914600372314f, 0.8109531402587891f, 0.4036441445350647f, 0.824535608291626f, 0.458610475063324f, +0.8968544602394104f, 0.3483794033527374f, 0.297446608543396f, 0.25469574332237244f, 0.6745685935020447f, 0.04904454946517944f, 0.37421271204948425f, 0.8666275143623352f, +0.06075394153594971f, 0.7076255679130554f, 0.13466115295886993f, 0.06592907756567001f, 0.44335320591926575f, 0.14072932302951813f, 0.9931964874267578f, 0.6486124992370605f, +0.7099825143814087f, 0.713697075843811f, 0.25092291831970215f, 0.014829803258180618f, 0.6520475149154663f, 0.49026089906692505f, 0.6570820808410645f, 0.99357008934021f, +0.7539388537406921f, 0.05028117075562477f, 0.19857941567897797f, 0.4390406608581543f, 0.3212425410747528f, 0.08032652735710144f, 0.2828011214733124f, 0.6513709425926208f, +0.9947670698165894f, 0.10216581076383591f, 0.3149046003818512f, 0.30023446679115295f, 0.5570588707923889f, 0.7957265973091125f, 0.17457953095436096f, 0.11986919492483139f, +0.7616661190986633f, 0.7649126052856445f, 0.0761338472366333f, 0.3141256868839264f, 0.4794914126396179f, 0.8315961360931396f, 0.9908794164657593f, 0.09657090902328491f, +0.34077078104019165f, 0.6348515748977661f, 0.7356851100921631f, 0.6791514158248901f, 0.6670516729354858f, 0.8456035852432251f, 0.3933885097503662f, 0.28672897815704346f, +0.9963642954826355f, 0.9349406957626343f, 0.8577883839607239f, 0.41573646664619446f, 0.015268849208950996f, 0.8215065002441406f, 0.8088065385818481f, 0.8312507271766663f, +0.5697031617164612f, 0.8313194513320923f, 0.7703467607498169f, 0.7868388891220093f, 0.8909124135971069f, 0.19881080090999603f, 0.9647579193115234f, 0.5982316732406616f, +0.973152756690979f, 0.12039989978075027f, 0.8134725689888f, 0.8114556670188904f, 0.26705166697502136f, 0.010237826965749264f, 0.4802294075489044f, 0.9136332869529724f, +0.9549710750579834f, 0.6802114248275757f, 0.18048615753650665f, 0.7059755325317383f, 0.05087413266301155f, 0.4610554873943329f, 0.6283688545227051f, 0.3978673219680786f, +0.06709978729486465f, 0.9871305227279663f, 0.4623042643070221f, 0.9390439987182617f, 0.26147130131721497f, 0.7813928723335266f, 0.3149060904979706f, 0.3409830927848816f, +0.29092156887054443f, 0.43966925144195557f, 0.9496521949768066f, 0.567759096622467f, 0.8919530510902405f, 0.14790284633636475f, 0.9250773191452026f, 0.38514259457588196f, +0.6594533920288086f, 0.3751342296600342f, 0.8723578453063965f, 0.3399806022644043f, 0.08520809561014175f, 0.3360217213630676f, 0.2977985441684723f, 0.8864404559135437f, +0.8165264129638672f, 0.2835230529308319f, 0.9056947231292725f, 0.3576407730579376f, 0.9522749185562134f, 0.16508391499519348f, 0.44934433698654175f, 0.6550940275192261f, +0.6119014024734497f, 0.19374583661556244f, 0.9267792105674744f, 0.9344940185546875f, 0.7341889142990112f, 0.0663171336054802f, 0.16158120334148407f, 0.34207966923713684f, +0.11122671514749527f, 0.012621160596609116f, 0.6513075828552246f, 0.2701713442802429f, 0.34726765751838684f, 0.27736425399780273f, 0.44963783025741577f, 0.7790867686271667f, +0.972800076007843f, 0.8583784103393555f, 0.40074989199638367f, 0.19702203571796417f, 0.6803663969039917f, 0.9942384958267212f, 0.9294256567955017f, 0.04835846647620201f, +0.30365654826164246f, 0.1311129927635193f, 0.1482909768819809f, 0.5076549053192139f, 0.9951936602592468f, 0.3629623055458069f, 0.942331075668335f, 0.8376534581184387f, +0.2890091836452484f, 0.24207977950572968f, 0.07685384899377823f, 0.991188645362854f, 0.6549155116081238f, 0.6567047238349915f, 0.1296560913324356f, 0.7838839292526245f, +0.09528249502182007f, 0.4126642942428589f, 0.05490763485431671f, 0.39220306277275085f, 0.6535824537277222f, 0.4558592140674591f, 0.34300485253334045f, 0.11383798718452454f, +0.8747297525405884f, 0.3250669240951538f, 0.6973647475242615f, 0.671653151512146f, 0.6977242231369019f, 0.2576218843460083f, 0.3256268799304962f, 0.6730823516845703f, +0.928657591342926f, 0.7529006600379944f, 0.1999479979276657f, 0.09109169244766235f, 0.3230440318584442f, 0.47561028599739075f, 0.40320122241973877f, 0.6014516949653625f, +0.3049686551094055f, 0.35972392559051514f, 0.9453364610671997f, 0.2650628983974457f, 0.07589497417211533f, 0.7949711680412292f, 0.6360994577407837f, 0.6082742810249329f, +0.46468886733055115f, 0.4643104076385498f, 0.5964094400405884f, 0.7033678889274597f, 0.13589291274547577f, 0.8118336796760559f, 0.6377806067466736f, 0.8189021348953247f, +0.2628714144229889f, 0.7974801659584045f, 0.347843199968338f, 0.2646867036819458f, 0.8296465873718262f, 0.7883257269859314f, 0.6814864277839661f, 0.7403626441955566f, +0.6557578444480896f, 0.4745402932167053f, 0.11780340224504471f, 0.8008965849876404f, 0.5239484310150146f, 0.3740341067314148f, 0.11064226925373077f, 0.5735353231430054f, +0.2122429460287094f, 0.23316355049610138f, 0.6948198080062866f, 0.6588327884674072f, 0.7961225509643555f, 0.4030976891517639f, 0.9168605804443359f, 0.6492248177528381f, +0.6335004568099976f, 0.8284423351287842f, 0.3077720105648041f, 0.6469661593437195f, 0.28205379843711853f, 0.27927395701408386f, 0.36363595724105835f, 0.7074312567710876f, +0.19806425273418427f, 0.06375603377819061f, 0.8653183579444885f, 0.35723602771759033f, 0.8483303189277649f, 0.19035373628139496f, 0.5812743306159973f, 0.4743516147136688f, +0.8530013561248779f, 0.31802499294281006f, 0.8741948008537292f, 0.4771896302700043f, 0.7763125896453857f, 0.09832420200109482f, 0.6076751947402954f, 0.34757208824157715f, +0.30600178241729736f, 0.5884850025177002f, 0.16867263615131378f, 0.38768982887268066f, 0.32801553606987f, 0.21046969294548035f, 0.9720969200134277f, 0.8787654638290405f, +0.40993374586105347f, 0.98848557472229f, 0.8930138349533081f, 0.5653001070022583f, 0.4377014935016632f, 0.8938916325569153f, 0.966055691242218f, 0.10723011195659637f, +0.3518950641155243f, 0.8384108543395996f, 0.8328797221183777f, 0.39210981130599976f, 0.06425231695175171f, 0.03921903297305107f, 0.09050595015287399f, 0.9624609351158142f, +0.8355586528778076f, 0.5903403759002686f, 0.06496589630842209f, 0.5308747291564941f, 0.2211237996816635f, 0.912830650806427f, 0.3913666009902954f, 0.33552008867263794f, +0.8567676544189453f, 0.08189528435468674f, 0.4210885167121887f, 0.2072695940732956f, 0.4746870696544647f, 0.382915735244751f, 0.5285869836807251f, 0.7994335889816284f, +0.7955350875854492f, 0.874383270740509f, 0.9121365547180176f, 0.817671000957489f, 0.9293030500411987f, 0.4659094512462616f, 0.48812294006347656f, 0.03867868706583977f, +0.9927375912666321f, 0.7381436228752136f, 0.7309112548828125f, 0.05531146749854088f, 0.9149882197380066f, 0.10574463754892349f, 0.8983901143074036f, 0.7146670818328857f, +0.38952043652534485f, 0.8821471929550171f, 0.602336585521698f, 0.5212693214416504f, 0.8819068074226379f, 0.8073463439941406f, 0.9357222318649292f, 0.2906804084777832f, +0.4736487865447998f, 0.6913447380065918f, 0.32960188388824463f, 0.2978615462779999f, 0.6048224568367004f, 0.6343649625778198f, 0.017427688464522362f, 0.3258625864982605f, +0.32307907938957214f, 0.09148906916379929f, 0.7786264419555664f, 0.11879906803369522f, 0.16351814568042755f, 0.9705894589424133f, 0.5582830309867859f, 0.3369669020175934f, +0.8103969693183899f, 0.7050167918205261f, 0.7062381505966187f, 0.3137601912021637f, 0.6332038044929504f, 0.17048870027065277f, 0.7492449283599854f, 0.6990647315979004f, +0.2344704419374466f, 0.4228031635284424f, 0.2126915007829666f, 0.7192325592041016f, 0.6022688746452332f, 0.03135328367352486f, 0.6947964429855347f, 0.40795212984085083f, +0.19585274159908295f, 0.15804199874401093f, 0.7342334389686584f, 0.9971185922622681f, 0.5317658185958862f, 0.990462601184845f, 0.3573853671550751f, 0.4346109926700592f, +0.31973814964294434f, 0.4839191436767578f, 0.36002475023269653f, 0.954522967338562f, 0.20450416207313538f, 0.5655564665794373f, 0.4974878132343292f, 0.700401246547699f, +0.6695301532745361f, 0.5688667297363281f, 0.27314186096191406f, 0.2094798982143402f, 0.4243338108062744f, 0.3649483025074005f, 0.508134126663208f, 0.0374707467854023f, +0.21527105569839478f, 0.2030380219221115f, 0.8271117210388184f, 0.7241455912590027f, 0.6042900681495667f, 0.34430110454559326f, 0.6202287673950195f, 0.4570613205432892f, +0.5804638862609863f, 0.11366996169090271f, 0.3699513077735901f, 0.8279399275779724f, 0.4698736071586609f, 0.3821369707584381f, 0.584767758846283f, 0.45637109875679016f, +0.7986502051353455f, 0.8006606101989746f, 0.8592642545700073f, 0.013687513768672943f, 0.807155966758728f, 0.8397234678268433f, 0.890876054763794f, 0.7842086553573608f, +0.4399213492870331f, 0.09672649949789047f, 0.8224396109580994f, 0.7208048105239868f, 0.014055815525352955f, 0.10697223991155624f, 0.8965482711791992f, 0.8686040043830872f, +0.23860402405261993f, 0.8206117153167725f, 0.33428093791007996f, 0.2591477334499359f, 0.15285110473632812f, 0.7251129746437073f, 0.8124920725822449f, 0.18693578243255615f, +0.45109492540359497f, 0.07840488851070404f, 0.23928479850292206f, 0.45385244488716125f, 0.433767706155777f, 0.020211823284626007f, 0.596167802810669f, 0.7811502814292908f, +0.6728254556655884f, 0.5649111270904541f, 0.12444388121366501f, 0.6190189123153687f, 0.8463510870933533f, 0.49254268407821655f, 0.22386611998081207f, 0.6969649791717529f, +0.9997266530990601f, 0.3310575783252716f, 0.6773116588592529f, 0.5841906070709229f, 0.6585373282432556f, 0.40533342957496643f, 0.8535231351852417f, 0.32822227478027344f, +0.9737302660942078f, 0.9822299480438232f, 0.24295739829540253f, 0.15122587978839874f, 0.05160192400217056f, 0.7457766532897949f, 0.601118803024292f, 0.40156272053718567f, +0.5979711413383484f, 0.4363988935947418f, 0.8172310590744019f, 0.39189139008522034f, 0.7558155059814453f, 0.16974520683288574f, 0.318148136138916f, 0.5432105660438538f, +0.540900707244873f, 0.24127164483070374f, 0.8114629983901978f, 0.5864877700805664f, 0.48171859979629517f, 0.7810697555541992f, 0.29259833693504333f, 0.2540073096752167f, +0.681921124458313f, 0.4966408908367157f, 0.17379553616046906f, 0.27185437083244324f, 0.9905750751495361f, 0.634907603263855f, 0.7481163740158081f, 0.8546186685562134f, +0.4443117380142212f, 0.5368461608886719f, 0.3055487275123596f, 0.40812140703201294f, 0.8074285387992859f, 0.3676891624927521f, 0.25643542408943176f, 0.8687207698822021f, +0.4461764097213745f, 0.8544299602508545f, 0.19220925867557526f, 0.5895619988441467f, 0.6270193457603455f, 0.2332826405763626f, 0.8184774518013f, 0.8467797040939331f, +0.10467884689569473f, 0.8040856719017029f, 0.30162397027015686f, 0.32072123885154724f, 0.3741143047809601f, 0.6250866651535034f, 0.7947326898574829f, 0.6137285232543945f, +0.7599850296974182f, 0.028043366968631744f, 0.5385348200798035f, 0.48656171560287476f, 0.8533463478088379f, 0.4670378565788269f, 0.18717822432518005f, 0.4428540766239166f, +0.6780552268028259f, 0.2941395938396454f, 0.4520241618156433f, 0.18588198721408844f, 0.8089282512664795f, 0.7506281137466431f, 0.2361171841621399f, 0.2514839768409729f, +0.39200231432914734f, 0.7112984657287598f, 0.6027497053146362f, 0.4958242177963257f, 0.8537523746490479f, 0.9984222650527954f, 0.7186997532844543f, 0.08688747137784958f, +0.9114126563072205f, 0.12262600660324097f, 0.9835212230682373f, 0.9341004490852356f, 0.001701713539659977f, 0.8349961638450623f, 0.4915919005870819f, 0.8215764760971069f, +0.6992809772491455f, 0.05442125350236893f, 0.7167952656745911f, 0.5564568638801575f, 0.3553590178489685f, 0.7270873188972473f, 0.22570502758026123f, 0.14302249252796173f, +0.5848103761672974f, 0.4914005696773529f, 0.7776689529418945f, 0.9432279467582703f, 0.9370170831680298f, 0.03817734867334366f, 0.21469733119010925f, 0.5023507475852966f, +0.9545832872390747f, 0.5221189260482788f, 0.9846305251121521f, 0.39862900972366333f, 0.6810651421546936f, 0.4999472200870514f, 0.7567670941352844f, 0.8573620319366455f, +0.8356005549430847f, 0.8669877052307129f, 0.386704683303833f, 0.41229724884033203f, 0.4142243266105652f, 0.1920740157365799f, 0.82952880859375f, 0.5865820050239563f, +0.016762839630246162f, 0.15736271440982819f, 0.3487846851348877f, 0.2307685911655426f, 0.7904929518699646f, 0.3015766143798828f, 0.31503576040267944f, 0.7485158443450928f, +0.354788601398468f, 0.5434504747390747f, 0.8120304346084595f, 0.738000750541687f, 0.8372034430503845f, 0.8903629779815674f, 0.7603938579559326f, 0.9734774231910706f, +0.9550075531005859f, 0.48780909180641174f, 0.6430408954620361f, 0.5041855573654175f, 0.06504186242818832f, 0.581784188747406f, 0.32564228773117065f, 0.3532741367816925f, +0.733622133731842f, 0.30730587244033813f, 0.9310135245323181f, 0.003121408401057124f, 0.5642487406730652f, 0.6886924505233765f, 0.9516181945800781f, 0.9778813123703003f, +0.9812124371528625f, 0.9523764848709106f, 0.7245237827301025f, 0.19504466652870178f, 0.6861010789871216f, 0.8687511682510376f, 0.6317071318626404f, 0.8586059808731079f, +0.6271195411682129f, 0.041302505880594254f, 0.13776101171970367f, 0.9982560873031616f, 0.9333196878433228f, 0.47116073966026306f, 0.6548131108283997f, 0.5294590592384338f, +0.19100400805473328f, 0.9554646611213684f, 0.029612457379698753f, 0.12854228913784027f, 0.09492230415344238f, 0.4851119816303253f, 0.8601868152618408f, 0.3510374426841736f, +0.7857020497322083f, 0.22066986560821533f, 0.7929891347885132f, 0.9551934003829956f, 0.7656645774841309f, 0.5423875451087952f, 0.9946726560592651f, 0.42987778782844543f, +0.7623476982116699f, 0.7085015177726746f, 0.422565758228302f, 0.21956892311573029f, 0.19065000116825104f, 0.7900413274765015f, 0.10913780331611633f, 0.5901052355766296f, +0.6468187570571899f, 0.1692950427532196f, 0.5431228280067444f, 0.46871447563171387f, 0.8820863962173462f, 0.09100326895713806f, 0.2321506142616272f, 0.782964289188385f, +0.1438324898481369f, 0.838342010974884f, 0.9938483834266663f, 0.046949129551649094f, 0.16978514194488525f, 0.7137942910194397f, 0.0317525714635849f, 0.5672420859336853f, +0.3659333288669586f, 0.2058519423007965f, 0.48119255900382996f, 0.3836929500102997f, 0.11054471135139465f, 0.38978224992752075f, 0.8748157620429993f, 0.6766340136528015f, +0.3967452645301819f, 0.12075166404247284f, 0.6969872713088989f, 0.43397846817970276f, 0.5796958804130554f, 0.5509028434753418f, 0.14620515704154968f, 0.5277485251426697f, +0.18917791545391083f, 0.6126484870910645f, 0.1192287728190422f, 0.11841845512390137f, 0.47148558497428894f, 0.4310251772403717f, 0.5622012615203857f, 0.981524646282196f, +0.9374864101409912f, 0.7524102330207825f, 0.17392344772815704f, 0.1700618714094162f, 0.7882283329963684f, 0.9902452826499939f, 0.04321220889687538f, 0.29723912477493286f, +0.018072117120027542f, 0.2775934934616089f, 0.38443225622177124f, 0.4361473619937897f, 0.9605723023414612f, 0.4917488098144531f, 0.5103060007095337f, 0.02299915999174118f, +0.015670109540224075f, 0.9137781858444214f, 0.7532418370246887f, 0.018310610204935074f, 0.41085565090179443f, 0.6702522039413452f, 0.8837723135948181f, 0.4635959565639496f, +0.5810527205467224f, 0.31792309880256653f, 0.693916916847229f, 0.10713092237710953f, 0.49777650833129883f, 0.0017137061804533005f, 0.1550961136817932f, 0.9402611255645752f, +0.7230667471885681f, 0.3058741092681885f, 0.865681529045105f, 0.5081979036331177f, 0.24110880494117737f, 0.6661933660507202f, 0.8492878079414368f, 0.7868361473083496f, +0.05003504455089569f, 0.8070210218429565f, 0.34392914175987244f, 0.8481739163398743f, 0.9817697405815125f, 0.5415489673614502f, 0.014193721115589142f, 0.8458203077316284f, +0.8275434374809265f, 0.897250235080719f, 0.662330687046051f, 0.2842507064342499f, 0.7723881006240845f, 0.8158900141716003f, 0.8449577689170837f, 0.7517149448394775f, +0.15000714361667633f, 0.8003903031349182f, 0.7597424387931824f, 0.6028500199317932f, 0.1366930603981018f, 0.3287769854068756f, 0.7043705582618713f, 0.1127750426530838f, +0.23551571369171143f, 0.9923906326293945f, 0.6986587643623352f, 0.43121427297592163f, 0.7396387457847595f, 0.05983271449804306f, 0.8330563306808472f, 0.3738326132297516f, +0.4003632962703705f, 0.7360066175460815f, 0.30487436056137085f, 0.14803877472877502f, 0.6661909222602844f, 0.4211364686489105f, 0.23648084700107574f, 0.3340548872947693f, +0.9678226113319397f, 0.13748237490653992f, 0.20018747448921204f, 0.24067969620227814f, 0.007253838237375021f, 0.8982585072517395f, 0.5408313870429993f, 0.49064841866493225f, +0.004407841246575117f, 0.031819794327020645f, 0.008667812682688236f, 0.2621961236000061f, 0.8784472346305847f, 0.5119643211364746f, 0.8994767069816589f, 0.08399324864149094f, +0.8702698349952698f, 0.5227741003036499f, 0.8537302017211914f, 0.8850197792053223f, 0.9985864162445068f, 0.7470629811286926f, 0.0610441118478775f, 0.4519599378108978f, +0.8471142053604126f, 0.06572826206684113f, 0.4259277582168579f, 0.5352294445037842f, 0.34847357869148254f, 0.4343964457511902f, 0.9918969869613647f, 0.9006354808807373f, +0.16018261015415192f, 0.6501558423042297f, 0.07137538492679596f, 0.884026825428009f, 0.9097590446472168f, 0.22135919332504272f, 0.08519988507032394f, 0.5688000917434692f, +0.8010138869285583f, 0.5883246660232544f, 0.9766235947608948f, 0.012665319256484509f, 0.04277382418513298f, 0.22800500690937042f, 0.21445681154727936f, 0.8729077577590942f, +0.9167338013648987f, 0.8495886325836182f, 0.08803310245275497f, 0.9367020726203918f, 0.8322381973266602f, 0.3658757209777832f, 0.10653802007436752f, 0.6374240517616272f, +0.9790050983428955f, 0.992295503616333f, 0.04284217208623886f, 0.418335497379303f, 0.7329328060150146f, 0.7083978652954102f, 0.9985383152961731f, 0.3122660517692566f, +0.692548930644989f, 0.012674209661781788f, 0.2329198271036148f, 0.10882988572120667f, 0.4622671902179718f, 0.5824663043022156f, 0.20273061096668243f, 0.30423134565353394f, +0.8578803539276123f, 0.0815262570977211f, 0.9462544322013855f, 0.7405062913894653f, 0.03727444261312485f, 0.4110732078552246f, 0.2535937428474426f, 0.5265026688575745f, +0.9827515482902527f, 0.6466314792633057f, 0.5309784412384033f, 0.879764974117279f, 0.9570038318634033f, 0.4376445412635803f, 0.7846986651420593f, 0.21406148374080658f, +0.49972671270370483f, 0.3163204491138458f, 0.7673792243003845f, 0.5961553454399109f, 0.7338145971298218f, 0.18001525104045868f, 0.07776093482971191f, 0.050475236028432846f, +0.3457180857658386f, 0.2608973979949951f, 0.22109946608543396f, 0.8897652626037598f, 0.1690831184387207f, 0.8030218482017517f, 0.8378056287765503f, 0.22894318401813507f, +0.7362642884254456f, 0.22529417276382446f, 0.27028799057006836f, 0.6145716905593872f, 0.261884480714798f, 0.13001109659671783f, 0.6544486284255981f, 0.5641818046569824f, +0.6376294493675232f, 0.9907711744308472f, 0.29073432087898254f, 0.49131837487220764f, 0.38150155544281006f, 0.5561037063598633f, 0.8627744317054749f, 0.023275813087821007f, +0.0026517610531300306f, 0.3964223563671112f, 0.7177939414978027f, 0.47064149379730225f, 0.44035401940345764f, 0.49149733781814575f, 0.1486484855413437f, 0.05458132177591324f, +0.3150099217891693f, 0.16251429915428162f, 0.8991709351539612f, 0.7678459882736206f, 0.743368923664093f, 0.7182289361953735f, 0.27287691831588745f, 0.9986646771430969f, +0.43064022064208984f, 0.9956974983215332f, 0.5053346753120422f, 0.08243387937545776f, 0.5149266719818115f, 0.042062174528837204f, 0.9255226254463196f, 0.7858346104621887f, +0.9812442660331726f, 0.319378137588501f, 0.7015552520751953f, 0.9708049893379211f, 0.029882600530982018f, 0.246241956949234f, 0.12782108783721924f, 0.6070808172225952f, +0.16161665320396423f, 0.2087469846010208f, 0.4997738301753998f, 0.759044349193573f, 0.8601779937744141f, 0.315143883228302f, 0.2637718617916107f, 0.6537017822265625f, +0.7470476627349854f, 0.8159675002098083f, 0.6570550203323364f, 0.6507676839828491f, 0.03155156970024109f, 0.9077262878417969f, 0.07118117064237595f, 0.09690520912408829f, +0.9834427833557129f, 0.46211832761764526f, 0.9662456512451172f, 0.37487560510635376f, 0.5351315140724182f, 0.520129382610321f, 0.816665768623352f, 0.1849634200334549f, +0.7302005290985107f, 0.5396607518196106f, 0.07633236795663834f, 0.6355259418487549f, 0.22092564404010773f, 0.6859322190284729f, 0.7124609351158142f, 0.6100464463233948f, +0.6024386882781982f, 0.7151587605476379f, 0.815228283405304f, 0.3150571882724762f, 0.6452547311782837f, 0.5802504420280457f, 0.03161944821476936f, 0.01771288551390171f, +0.1450548768043518f, 0.8155802488327026f, 0.640329122543335f, 0.8587051033973694f, 0.28141385316848755f, 0.7487977147102356f, 0.7246535420417786f, 0.1583249270915985f, +0.38057276606559753f, 0.507861316204071f, 0.29830965399742126f, 0.5470091104507446f, 0.5675508379936218f, 0.9944486618041992f, 0.45797091722488403f, 0.8615837693214417f, +0.077416330575943f, 0.5167428851127625f, 0.4032311737537384f, 0.15181584656238556f, 0.03878570720553398f, 0.4402015507221222f, 0.6157577037811279f, 0.3341422975063324f, +0.2515515387058258f, 0.997917890548706f, 0.9596710205078125f, 0.9675130248069763f, 0.9868080019950867f, 0.8944506645202637f, 0.716106653213501f, 0.487608939409256f, +0.15129321813583374f, 0.7150234580039978f, 0.29845160245895386f, 0.7752057313919067f, 0.6872819662094116f, 0.26398158073425293f, 0.8712502121925354f, 0.7452178597450256f, +0.8202650547027588f, 0.8702675700187683f, 0.559006929397583f, 0.42870283126831055f, 0.10203913599252701f, 0.20809051394462585f, 0.4196685254573822f, 0.19406165182590485f, +0.5725063681602478f, 0.8816217184066772f, 0.5392343997955322f, 0.2526302933692932f, 0.5446266531944275f, 0.6933771967887878f, 0.8335169553756714f, 0.8008777499198914f, +0.1623774617910385f, 0.16458630561828613f, 0.39876440167427063f, 0.038294266909360886f, 0.838060200214386f, 0.2673133313655853f, 0.8958942890167236f, 0.056392569094896317f, +0.20013371109962463f, 0.6438551545143127f, 0.12746109068393707f, 0.6153685450553894f, 0.9280247092247009f, 0.11678434908390045f, 0.4743956923484802f, 0.4132160246372223f, +0.18207651376724243f, 0.9227055907249451f, 0.296530157327652f, 0.7587119936943054f, 0.04882630705833435f, 0.05180498957633972f, 0.7494004368782043f, 0.032798219472169876f, +0.536342203617096f, 0.11867852509021759f, 0.08922971040010452f, 0.8330346345901489f, 0.13564608991146088f, 0.2227773815393448f, 0.5483101606369019f, 0.4853462874889374f, +0.8581737875938416f, 0.8142383694648743f, 0.017284179106354713f, 0.4692608416080475f, 0.10796947032213211f, 0.18852992355823517f, 0.4084450602531433f, 0.42374157905578613f, +0.34576207399368286f, 0.6512562036514282f, 0.4529231786727905f, 0.2037210911512375f, 0.6151713728904724f, 0.36610618233680725f, 0.2048189789056778f, 0.26326891779899597f, +0.36395737528800964f, 0.09223395586013794f, 0.21808114647865295f, 0.7323015332221985f, 0.3226816952228546f, 0.3143102824687958f, 0.2813202142715454f, 0.6932123899459839f, +0.38418468832969666f, 0.5268425345420837f, 0.38631877303123474f, 0.5608934164047241f, 0.07805102318525314f, 0.12280987203121185f, 0.09925372153520584f, 0.13305965065956116f, +0.7324445843696594f, 0.4924689531326294f, 0.6677669286727905f, 0.5843303203582764f, 0.3392271101474762f, 0.9041394591331482f, 0.35466957092285156f, 0.7151671648025513f, +0.6504361629486084f, 0.9268357753753662f, 0.5117616057395935f, 0.043618086725473404f, 0.6245524883270264f, 0.8786904811859131f, 0.8203111290931702f, 0.18440009653568268f, +0.06467137485742569f, 0.1008363589644432f, 0.30255740880966187f, 0.09037282317876816f, 0.3867427110671997f, 0.12684056162834167f, 0.27576473355293274f, 0.3160868287086487f, +0.452249675989151f, 0.47878706455230713f, 0.6314866542816162f, 0.3666805028915405f, 0.637378454208374f, 0.16177062690258026f, 0.6570076942443848f, 0.5739585161209106f, +0.7316887378692627f, 0.30612650513648987f, 0.5738125443458557f, 0.2063293308019638f, 0.4093517065048218f, 0.6711300611495972f, 0.7084825038909912f, 0.4467356204986572f, +0.54289311170578f, 0.36047106981277466f, 0.3603348135948181f, 0.7289673089981079f, 0.5811859965324402f, 0.9236676096916199f, 0.7469334602355957f, 0.5251469612121582f, +0.8024210929870605f, 0.4331738352775574f, 0.6877397298812866f, 0.622155487537384f, 0.3598482608795166f, 0.2069009691476822f, 0.40071773529052734f, 0.03855275735259056f, +0.2235487848520279f, 0.0019632724579423666f, 0.4062311351299286f, 0.6174327731132507f, 0.26121896505355835f, 0.4304516911506653f, 0.06235015392303467f, 0.9354302287101746f, +0.22703616321086884f, 0.3390108048915863f, 0.03278736025094986f, 0.3918784260749817f, 0.24543780088424683f, 0.38832318782806396f, 0.2626369595527649f, 0.3967646658420563f, +0.9308816194534302f, 0.1178780049085617f, 0.4728636145591736f, 0.15684185922145844f, 0.15069043636322021f, 0.43219026923179626f, 0.706893265247345f, 0.45351895689964294f, +0.47645217180252075f, 0.8328886032104492f, 0.2802426517009735f, 0.14386296272277832f, 0.9646798968315125f, 0.5487999320030212f, 0.8519083261489868f, 0.6596031785011292f, +0.457514226436615f, 0.1973791867494583f, 0.9307781457901001f, 0.2830911874771118f, 0.8440433144569397f, 0.15163668990135193f, 0.013360687531530857f, 0.12598508596420288f, +0.7758015394210815f, 0.6920357346534729f, 0.5935720205307007f, 0.6623631119728088f, 0.3354934751987457f, 0.09463720768690109f, 0.5680890679359436f, 0.9872734546661377f, +0.8754746317863464f, 0.5194082260131836f, 0.9250634908676147f, 0.6841109991073608f, 0.19015388190746307f, 0.2927422821521759f, 0.804101824760437f, 0.17417997121810913f, +0.5726282596588135f, 0.7149136662483215f, 0.1795823574066162f, 0.25974294543266296f, 0.24832193553447723f, 0.19075806438922882f, 0.8663184642791748f, 0.019879067316651344f, +0.38510432839393616f, 0.5541227459907532f, 0.01220850832760334f, 0.39768171310424805f, 0.8278859257698059f, 0.1789609044790268f, 0.5181308388710022f, 0.420429527759552f, +0.64220130443573f, 0.9302255511283875f, 0.8206514716148376f, 0.8030610084533691f, 0.25985994935035706f, 0.24337196350097656f, 0.6682469248771667f, 0.5885043740272522f, +0.5745753645896912f, 0.6671499609947205f, 0.2423732876777649f, 0.31411096453666687f, 0.04688190296292305f, 0.18834969401359558f, 0.14862078428268433f, 0.5199750065803528f, +0.40581557154655457f, 0.10125063359737396f, 0.7321484684944153f, 0.7771991491317749f, 0.2520061135292053f, 0.22014907002449036f, 0.10814125835895538f, 0.5728609561920166f, +0.8214101195335388f, 0.8239344358444214f, 0.5934537649154663f, 0.7923957705497742f, 0.6348292231559753f, 0.5882918238639832f, 0.2145708054304123f, 0.40610170364379883f, +0.275333434343338f, 0.6337766647338867f, 0.4002061188220978f, 0.552596390247345f, 0.5236643552780151f, 0.41587427258491516f, 0.6905860900878906f, 0.5489606261253357f, +0.03762660548090935f, 0.4611912667751312f, 0.7468123435974121f, 0.5066848993301392f, 0.40793782472610474f, 0.8925964832305908f, 0.885284960269928f, 0.2588016986846924f, +0.9062799215316772f, 0.8523505330085754f, 0.7851427793502808f, 0.38296857476234436f, 0.3507843017578125f, 0.4311441481113434f, 0.731526792049408f, 0.13418178260326385f, +0.19432272017002106f, 0.35377442836761475f, 0.6990384459495544f, 0.17130275070667267f, 0.02016330324113369f, 0.7495093941688538f, 0.5853162407875061f, 0.576353907585144f, +0.9079017639160156f, 0.04564426466822624f, 0.08558785170316696f, 0.9652184247970581f, 0.35048744082450867f, 0.4968163073062897f, 0.4728133976459503f, 0.4186938405036926f, +0.1696414202451706f, 0.9045847058296204f, 0.6330599188804626f, 0.4648991525173187f, 0.9227473735809326f, 0.8115041851997375f, 0.5820794701576233f, 0.8595941066741943f, +0.48826882243156433f, 0.9412888288497925f, 0.0656609758734703f, 0.7366513013839722f, 0.5407475233078003f, 0.02552037127315998f, 0.4639304578304291f, 0.7616723775863647f, +0.8701801300048828f, 0.005686136428266764f, 0.46892863512039185f, 0.7280920743942261f, 0.106391541659832f, 0.2083861380815506f, 0.05222141742706299f, 0.5523714423179626f, +0.20736749470233917f, 0.1638200581073761f, 0.10390832275152206f, 0.5812866687774658f, 0.90354323387146f, 0.5894603133201599f, 0.3169253468513489f, 0.2151455581188202f, +0.7687835097312927f, 0.3234304189682007f, 0.32082200050354004f, 0.12776640057563782f, 0.017336342483758926f, 0.16313455998897552f, 0.00010261873831041157f, 0.6214319467544556f, +0.2864243984222412f, 0.05214553698897362f, 0.03632243722677231f, 0.42809829115867615f, 0.0033510371576994658f, 0.35468313097953796f, 0.3054268956184387f, 0.8409971594810486f, +0.22624559700489044f, 0.010599623434245586f, 0.48339200019836426f, 0.2458251565694809f, 0.5727415084838867f, 0.835329532623291f, 0.5874089002609253f, 0.7271360754966736f, +0.08145229518413544f, 0.1812642216682434f, 0.5822628140449524f, 0.5449788570404053f, 0.02976652979850769f, 0.12138763070106506f, 0.8149394989013672f, 0.7209303379058838f, +0.024127556011080742f, 0.7508950233459473f, 0.15864329040050507f, 0.894601047039032f, 0.08995411545038223f, 0.8679575324058533f, 0.3574671447277069f, 0.13679708540439606f, +0.20762842893600464f, 0.11534212529659271f, 0.6198108196258545f, 0.1111542284488678f, 0.17049050331115723f, 0.804276168346405f, 0.9416916966438293f, 0.04573700949549675f, +0.6216703057289124f, 0.8932657241821289f, 0.4344153106212616f, 0.6028128266334534f, 0.5760946869850159f, 0.7472690939903259f, 0.9501760005950928f, 0.814731240272522f, +0.350659042596817f, 0.4467182457447052f, 0.8096315860748291f, 0.5051215291023254f, 0.9229854941368103f, 0.16187067329883575f, 0.10029100626707077f, 0.6739335656166077f, +0.9937719106674194f, 0.12694278359413147f, 0.6699720621109009f, 0.8334599733352661f, 0.8292117714881897f, 0.9881569743156433f, 0.7620177268981934f, 0.8817244172096252f, +0.31809017062187195f, 0.7283843755722046f, 0.3399045467376709f, 0.19282928109169006f, 0.8337053060531616f, 0.6775728464126587f, 0.16352145373821259f, 0.33873799443244934f, +0.5969336628913879f, 0.638514518737793f, 0.10655145347118378f, 0.4154394865036011f, 0.8237099647521973f, 0.6703922152519226f, 0.6221184134483337f, 0.23145857453346252f, +0.4648250639438629f, 0.2998490333557129f, 0.48372671008110046f, 0.7456002235412598f, 0.7741169929504395f, 0.5443742275238037f, 0.6653097867965698f, 0.7808489799499512f, +0.9627623558044434f, 0.5680886507034302f, 0.9076253771781921f, 0.022526465356349945f, 0.3555968105792999f, 0.3956892192363739f, 0.978661060333252f, 0.9412407279014587f, +0.2440752387046814f, 0.037660446017980576f, 0.42755597829818726f, 0.5467312932014465f, 0.9226272106170654f, 0.4791727066040039f, 0.5862120389938354f, 0.03673591837286949f, +0.565789520740509f, 0.37159186601638794f, 0.32986995577812195f, 0.5066454410552979f, 0.7534660696983337f, 0.12024173140525818f, 0.5552784204483032f, 0.3409826457500458f, +0.3634718954563141f, 0.20305296778678894f, 0.7420845031738281f, 0.5582351684570312f, 0.45836859941482544f, 0.6464532017707825f, 0.07059548795223236f, 0.28679904341697693f, +0.24120670557022095f, 0.054870765656232834f, 0.15838511288166046f, 0.5902981162071228f, 0.16985666751861572f, 0.6385887265205383f, 0.8606009483337402f, 0.15896397829055786f, +0.5617508292198181f, 0.5427520871162415f, 0.4647197723388672f, 0.7733465433120728f, 0.7696434259414673f, 0.9913131594657898f, 0.0018456956604495645f, 0.10514911264181137f, +0.912326455116272f, 0.8602949976921082f, 0.33786630630493164f, 0.4405438005924225f, 0.9528399705886841f, 0.8633893728256226f, 0.03649841994047165f, 0.2198854237794876f, +0.5050463080406189f, 0.8130427002906799f, 0.2237403392791748f, 0.2801978588104248f, 0.5513589382171631f, 0.5703752636909485f, 0.9202191829681396f, 0.22587209939956665f, +0.6899226903915405f, 0.2970098555088043f, 0.3504455089569092f, 0.8262298703193665f, 0.07421660423278809f, 0.9553250670433044f, 0.0892234742641449f, 0.7268542051315308f, +0.10622537136077881f, 0.7056354284286499f, 0.7007420063018799f, 0.5206674337387085f, 0.9353412985801697f, 0.7334275841712952f, 0.5485455989837646f, 0.8731225728988647f, +0.3838958144187927f, 0.1588630974292755f, 0.5858865976333618f, 0.5056222677230835f, 0.43374860286712646f, 0.31526505947113037f, 0.5891598463058472f, 0.10357402265071869f, +0.03570318594574928f, 0.012896339409053326f, 0.43153488636016846f, 0.8194704055786133f, 0.6458523869514465f, 0.6649771928787231f, 0.8927266001701355f, 0.5247898697853088f, +0.6209049224853516f, 0.38894835114479065f, 0.1686275601387024f, 0.09533558040857315f, 0.13597051799297333f, 0.9692128896713257f, 0.15176621079444885f, 0.16230179369449615f, +0.3281639814376831f, 0.37731459736824036f, 0.804117739200592f, 0.6059314608573914f, 0.9878140687942505f, 0.9454982280731201f, 0.6276066899299622f, 0.029846854507923126f, +0.25205084681510925f, 0.6929375529289246f, 0.14452232420444489f, 0.19296501576900482f, 0.0770609974861145f, 0.7934648394584656f, 0.9151789546012878f, 0.9264030456542969f, +0.791484534740448f, 0.9793626070022583f, 0.5345384478569031f, 0.10343343019485474f, 0.704630970954895f, 0.3652842044830322f, 0.14144644141197205f, 0.4478837251663208f, +0.5592654347419739f, 0.22298941016197205f, 0.7274271249771118f, 0.7349168658256531f, 0.41008460521698f, 0.08234955370426178f, 0.2071581929922104f, 0.3790299892425537f, +0.935069739818573f, 0.11016574501991272f, 0.2286538928747177f, 0.6427139043807983f, 0.5496360063552856f, 0.596991777420044f, 0.383786678314209f, 0.8102611899375916f, +0.34771209955215454f, 0.6151383519172668f, 0.9343859553337097f, 0.7884564399719238f, 0.6531988382339478f, 0.6663116216659546f, 0.31475943326950073f, 0.1473150998353958f, +0.44802144169807434f, 0.6806209087371826f, 0.5794930458068848f, 0.5707606673240662f, 0.9290196895599365f, 0.38460254669189453f, 0.4065571427345276f, 0.01666758768260479f, +0.15988624095916748f, 0.7666635513305664f, 0.9774938821792603f, 0.7126474380493164f, 0.7816197872161865f, 0.34023913741111755f, 0.02447493188083172f, 0.05615343153476715f, +0.5661140084266663f, 0.5901467204093933f, 0.17520736157894135f, 0.5007683634757996f, 0.491831511259079f, 0.7693057060241699f, 0.05439168959856033f, 0.879618227481842f, +0.8221060037612915f, 0.7294249534606934f, 0.4782027006149292f, 0.45322802662849426f, 0.5622527599334717f, 0.9215291738510132f, 0.11516831815242767f, 0.5105880498886108f, +0.8212286233901978f, 0.7502680420875549f, 0.4874657690525055f, 0.34764352440834045f, 0.89214026927948f, 0.18188728392124176f, 0.5626022219657898f, 0.09306040406227112f, +0.8899430632591248f, 0.5181828141212463f, 0.05688156187534332f, 0.9657887816429138f, 0.22868938744068146f, 0.21997588872909546f, 0.08919287472963333f, 0.12978143990039825f, +0.42796212434768677f, 0.11827585846185684f, 0.8072947859764099f, 0.7399965524673462f, 0.9756134748458862f, 0.512799859046936f, 0.328814297914505f, 0.7008500695228577f, +0.5460719466209412f, 0.678844153881073f, 0.6706998944282532f, 0.8586233854293823f, 0.2875577509403229f, 0.8045256733894348f, 0.6869686841964722f, 0.5427576899528503f, +0.4564148485660553f, 0.4337009787559509f, 0.3996713161468506f, 0.43147313594818115f, 0.2738613486289978f, 0.07286401838064194f, 0.07314500957727432f, 0.059512000530958176f, +0.630113959312439f, 0.298645943403244f, 0.9153906106948853f, 0.42747169733047485f, 0.44726359844207764f, 0.7185347676277161f, 0.6427905559539795f, 0.28151920437812805f, +0.5910523533821106f, 0.1931638866662979f, 0.92490154504776f, 0.5362138152122498f, 0.2389540821313858f, 0.09379623830318451f, 0.264482319355011f, 0.10802958905696869f, +0.8816936612129211f, 0.3287293016910553f, 0.602033257484436f, 0.022117361426353455f, 0.19513997435569763f, 0.7822300791740417f, 0.3939691483974457f, 0.2144245207309723f, +0.056692421436309814f, 0.866756796836853f, 0.8737897276878357f, 0.7969488501548767f, 0.6183643341064453f, 0.5660255551338196f, 0.6797913312911987f, 0.7846488952636719f, +0.28888094425201416f, 0.5300099849700928f, 0.8381209373474121f, 0.8289458155632019f, 0.7803078889846802f, 0.929506778717041f, 0.4348173439502716f, 0.6664862036705017f, +0.5126640200614929f, 0.5769713521003723f, 0.7130825519561768f, 0.5568819642066956f, 0.613243043422699f, 0.2770439088344574f, 0.6247284412384033f, 0.3277386724948883f, +0.987246036529541f, 0.020958902314305305f, 0.7395734190940857f, 0.6397125124931335f, 0.21337538957595825f, 0.0019488997058942914f, 0.035123735666275024f, 0.2129625827074051f, +0.630914568901062f, 0.9209345579147339f, 0.0797470435500145f, 0.02300059236586094f, 0.7130316495895386f, 0.08267462253570557f, 0.9837373495101929f, 0.7019394040107727f, +0.8367444276809692f, 0.5714505910873413f, 0.7689171433448792f, 0.6056004762649536f, 0.6530755758285522f, 0.05065274238586426f, 0.15512780845165253f, 0.6790703535079956f, +0.7741583585739136f, 0.4572487771511078f, 0.2643604278564453f, 0.3886479139328003f, 0.11270242184400558f, 0.23239555954933167f, 0.27829545736312866f, 0.6079933643341064f, +0.20404163002967834f, 0.9232142567634583f, 0.07946204394102097f, 0.4969088137149811f, 0.04740330949425697f, 0.28828564286231995f, 0.328330934047699f, 0.11422071605920792f, +0.6735289096832275f, 0.8216170072555542f, 0.771711528301239f, 0.1681559979915619f, 0.684516966342926f, 0.6194123029708862f, 0.3133259117603302f, 0.34783175587654114f, +0.5711782574653625f, 0.5824155211448669f, 0.7639502286911011f, 0.016778383404016495f, 0.3939332664012909f, 0.6690095663070679f, 0.5917571187019348f, 0.2584098279476166f, +0.6594053506851196f, 0.9660422205924988f, 0.38707825541496277f, 0.2863183915615082f, 0.5383671522140503f, 0.6565276384353638f, 0.7989168167114258f, 0.3951442241668701f, +0.43149325251579285f, 0.06214074045419693f, 0.008622300811111927f, 0.542248547077179f, 0.5751798748970032f, 0.10132569074630737f, 0.7524504661560059f, 0.19146671891212463f, +0.9594932198524475f, 0.8629535436630249f, 0.28372320532798767f, 0.8364467024803162f, 0.5529394149780273f, 0.4940773546695709f, 0.15539495646953583f, 0.5910914540290833f, +0.9010016322135925f, 0.6454170346260071f, 0.28409501910209656f, 0.37735486030578613f, 0.17707301676273346f, 0.4721198081970215f, 0.011276268400251865f, 0.3096064329147339f, +0.5438294410705566f, 0.15184786915779114f, 0.4768795669078827f, 0.8361476063728333f, 0.38650161027908325f, 0.5738208889961243f, 0.8160883188247681f, 0.7620823383331299f, +0.8230097889900208f, 0.855629563331604f, 0.7694106698036194f, 0.9067745208740234f, 0.09465385228395462f, 0.2342296540737152f, 0.5173768997192383f, 0.44868242740631104f, +0.22418741881847382f, 0.4862666130065918f, 0.5812405347824097f, 0.28203085064888f, 0.8747447729110718f, 0.7304053902626038f, 0.4503907859325409f, 0.7409040927886963f, +0.21820589900016785f, 0.07907550781965256f, 0.7472289204597473f, 0.7639864683151245f, 0.7936809659004211f, 0.9714910984039307f, 0.5928109288215637f, 0.06589826196432114f, +0.42386388778686523f, 0.214954674243927f, 0.8747215270996094f, 0.5511977672576904f, 0.7807478308677673f, 0.38431763648986816f, 0.7703543305397034f, 0.437823086977005f, +0.3302746117115021f, 0.14430902898311615f, 0.6360167264938354f, 0.7237898707389832f, 0.49755948781967163f, 0.01101212203502655f, 0.22242963314056396f, 0.68391352891922f, +0.7232568860054016f, 0.884023904800415f, 0.1672619730234146f, 0.7011706829071045f, 0.11756067723035812f, 0.19831889867782593f, 0.04825148731470108f, 0.2733207046985626f, +0.47510039806365967f, 0.5234118700027466f, 0.3926773965358734f, 0.5778123736381531f, 0.31105709075927734f, 0.5623745322227478f, 0.8528093099594116f, 0.8590177297592163f, +0.12442375719547272f, 0.6837648749351501f, 0.7786216735839844f, 0.9746618866920471f, 0.4341997504234314f, 0.6239043474197388f, 0.6404370069503784f, 0.4858109652996063f, +0.4119016230106354f, 0.47540146112442017f, 0.4111778736114502f, 0.07629669457674026f, 0.1825336217880249f, 0.8428712487220764f, 0.2644551694393158f, 0.9897710680961609f, +0.9165295362472534f, 0.015102876350283623f, 0.5979112982749939f, 0.5062680244445801f, 0.5505514144897461f, 0.4082323908805847f, 0.6840636730194092f, 0.4041096866130829f, +0.55550217628479f, 0.5539863705635071f, 0.11381971836090088f, 0.07259140908718109f, 0.8967429399490356f, 0.8412059545516968f, 0.6704506874084473f, 0.4789009988307953f, +0.33873552083969116f, 0.8104623556137085f, 0.72829669713974f, 0.9041542410850525f, 0.28114554286003113f, 0.9428683519363403f, 0.27808019518852234f, 0.22572176158428192f, +0.3095572590827942f, 0.5240360498428345f, 0.027860570698976517f, 0.1934749186038971f, 0.6872509121894836f, 0.49602076411247253f, 0.5367442965507507f, 0.3547520041465759f, +0.7804019451141357f, 0.5710052847862244f, 0.47345811128616333f, 0.628859281539917f, 0.5283031463623047f, 0.7807890772819519f, 0.9425023198127747f, 0.5941347479820251f, +0.4596463441848755f, 0.8245487809181213f, 0.717393159866333f, 0.22487200796604156f, 0.23761367797851562f, 0.36900293827056885f, 0.9601718187332153f, 0.9072479605674744f, +0.1019497811794281f, 0.3192945122718811f, 0.8345690965652466f, 0.693038284778595f, 0.18481162190437317f, 0.31497010588645935f, 0.659653902053833f, 0.7624695301055908f, +0.6179977655410767f, 0.7050207257270813f, 0.9900324940681458f, 0.3388582170009613f, 0.2621583342552185f, 0.9389408826828003f, 0.11168696731328964f, 0.1826135367155075f, +0.9108186364173889f, 0.04682062193751335f, 0.2192191630601883f, 0.5362083911895752f, 0.43743687868118286f, 0.6565529108047485f, 0.8130041360855103f, 0.6345351934432983f, +0.3225410282611847f, 0.1365465670824051f, 0.22350291907787323f, 0.8561453223228455f, 0.605172872543335f, 0.6631137132644653f, 0.12485742568969727f, 0.1670757234096527f, +0.6705370545387268f, 0.05494147166609764f, 0.6450680494308472f, 0.0719381719827652f, 0.4131665825843811f, 0.9960361123085022f, 0.39733850955963135f, 0.018181931227445602f, +0.7942865490913391f, 0.5379371047019958f, 0.19811657071113586f, 0.13302721083164215f, 0.28691262006759644f, 0.7694534063339233f, 0.5122085809707642f, 0.11929434537887573f, +0.9846410155296326f, 0.9611042737960815f, 0.6713037490844727f, 0.7448294162750244f, 0.6316269636154175f, 0.414079874753952f, 0.569664478302002f, 0.301920086145401f, +0.013207130134105682f, 0.8823721408843994f, 0.28728753328323364f, 0.6825703978538513f, 0.30291691422462463f, 0.5994154810905457f, 0.4093932807445526f, 0.5237187743186951f, +0.22978882491588593f, 0.27989324927330017f, 0.12804315984249115f, 0.9932255148887634f, 0.07654235512018204f, 0.9414254426956177f, 0.3852406442165375f, 0.7463411688804626f, +0.1702931523323059f, 0.09747796505689621f, 0.4274079501628876f, 0.5013397336006165f, 0.6402186155319214f, 0.7503973841667175f, 0.1576867699623108f, 0.4300323724746704f, +0.9649708271026611f, 0.3850709795951843f, 0.5665972828865051f, 0.340556800365448f, 0.2678285241127014f, 0.5077134370803833f, 0.5946779847145081f, 0.3325638175010681f, +0.18467414379119873f, 0.24351084232330322f, 0.9934863448143005f, 0.749546468257904f, 0.6405780911445618f, 0.5188236236572266f, 0.6652931571006775f, 0.894536554813385f, +0.3500713109970093f, 0.6211731433868408f, 0.516358494758606f, 0.6791483759880066f, 0.40005651116371155f, 0.7282511591911316f, 0.334696501493454f, 0.40771815180778503f, +0.1539294570684433f, 0.8668839931488037f, 0.04623793438076973f, 0.11895668506622314f, 0.18411117792129517f, 0.6343410015106201f, 0.1620515137910843f, 0.1654185652732849f, +0.400224506855011f, 0.7446869015693665f, 0.5806577801704407f, 0.9186732769012451f, 0.7735646367073059f, 0.7967799305915833f, 0.8360699415206909f, 0.9168779253959656f, +0.16612207889556885f, 0.754655659198761f, 0.3482803404331207f, 0.9646174311637878f, 0.3929036259651184f, 0.12218047678470612f, 0.8122715353965759f, 0.10666456818580627f, +0.9999820590019226f, 0.2209617644548416f, 0.02687358669936657f, 0.9336271286010742f, 0.7199875712394714f, 0.1536073237657547f, 0.17849700152873993f, 0.04989836737513542f, +0.11560114473104477f, 0.4552648663520813f, 0.2140292525291443f, 0.5690813064575195f, 0.7931565642356873f, 0.07937930524349213f, 0.32086649537086487f, 0.3165661692619324f, +0.7935940027236938f, 0.8170679807662964f, 0.7981404066085815f, 0.38670653104782104f, 0.9911417961120605f, 0.9290438294410706f, 0.5719544887542725f, 0.8841861486434937f, +0.6934797167778015f, 0.31666579842567444f, 0.20060639083385468f, 0.8730525970458984f, 0.8563557863235474f, 0.8687097430229187f, 0.5889284610748291f, 0.38330700993537903f, +0.3441317677497864f, 0.7950615882873535f, 0.42697596549987793f, 0.3619535565376282f, 0.496295690536499f, 0.34764617681503296f, 0.7430425882339478f, 0.01318352110683918f, +0.7817400693893433f, 0.15670613944530487f, 0.1286766082048416f, 0.38110288977622986f, 0.33547377586364746f, 0.9430974125862122f, 0.6607500314712524f, 0.35372352600097656f, +0.0811120942234993f, 0.8398792147636414f, 0.8632355332374573f, 0.8281887173652649f, 0.45885777473449707f, 0.20482751727104187f, 0.8195705413818359f, 0.8755202293395996f, +0.0837278813123703f, 0.82038414478302f, 0.39629921317100525f, 0.7244907021522522f, 0.9139997959136963f, 0.899094820022583f, 0.7016562223434448f, 0.6666678786277771f, +0.33385100960731506f, 0.08934907615184784f, 0.15231375396251678f, 0.9484643936157227f, 0.3202144205570221f, 0.9741666316986084f, 0.3603312075138092f, 0.20053958892822266f, +0.6988248825073242f, 0.7011213898658752f, 0.7421191930770874f, 0.7285082936286926f, 0.5671788454055786f, 0.10400169342756271f, 0.7047780156135559f, 0.5710700750350952f, +0.11134679615497589f, 0.6675248146057129f, 0.33658385276794434f, 0.021065162494778633f, 0.0656542256474495f, 0.4492936134338379f, 0.1920713186264038f, 0.7707703709602356f, +0.7128848433494568f, 0.29539698362350464f, 0.7714506387710571f, 0.779707133769989f, 0.3504783809185028f, 0.1672319620847702f, 0.8207275867462158f, 0.07969556003808975f, +0.6859754323959351f, 0.16700418293476105f, 0.6370922327041626f, 0.9412628412246704f, 0.5110791921615601f, 0.5028166770935059f, 0.2786794900894165f, 0.4411325752735138f, +0.10141810774803162f, 0.993000864982605f, 0.10444770008325577f, 0.8257023692131042f, 0.20591770112514496f, 0.7097940444946289f, 0.5530646443367004f, 0.23921537399291992f, +0.08644464612007141f, 0.3016408681869507f, 0.08800628036260605f, 0.5929059386253357f, 0.08652481436729431f, 0.8046175837516785f, 0.615770161151886f, 0.45897573232650757f, +0.7348425388336182f, 0.49462422728538513f, 0.13663937151432037f, 0.008269059471786022f, 0.9614781737327576f, 0.5067549347877502f, 0.8204185366630554f, 0.1240730807185173f, +0.016659913584589958f, 0.12541288137435913f, 0.11066694557666779f, 0.01771487481892109f, 0.3290734589099884f, 0.10205775499343872f, 0.50125652551651f, 0.8777769207954407f, +0.03380332514643669f, 0.27870336174964905f, 0.5926467180252075f, 0.5591856241226196f, 0.46373632550239563f, 0.3037359416484833f, 0.5430523157119751f, 0.8069555163383484f, +0.784541666507721f, 0.4389880895614624f, 0.8280707001686096f, 0.9783501029014587f, 0.09478224068880081f, 0.7180055975914001f, 0.17885459959506989f, 0.3802911043167114f, +0.934336245059967f, 0.8866152167320251f, 0.4083269536495209f, 0.13559620082378387f, 0.5328042507171631f, 0.4098276197910309f, 0.347217857837677f, 0.798713207244873f, +0.8245806097984314f, 0.5181147456169128f, 0.7931937575340271f, 0.41026484966278076f, 0.3856710195541382f, 0.373583048582077f, 0.11136917769908905f, 0.7456255555152893f, +0.9853510856628418f, 0.15695978701114655f, 0.5570114254951477f, 0.9288700222969055f, 0.9244402050971985f, 0.00845795962959528f, 0.48026442527770996f, 0.00970788486301899f, +0.24416224658489227f, 0.3167271018028259f, 0.7748854756355286f, 0.06836779415607452f, 0.6267104148864746f, 0.11237563192844391f, 0.1840934455394745f, 0.8230218887329102f, +0.6467193365097046f, 0.7145395278930664f, 0.466351181268692f, 0.49258291721343994f, 0.28130149841308594f, 0.7418172955513f, 0.7672199606895447f, 0.9032040238380432f, +0.9031092524528503f, 0.6340506076812744f, 0.9461755156517029f, 0.588697075843811f, 0.54493647813797f, 0.7733676433563232f, 0.5608630776405334f, 0.35184812545776367f, +0.7605381011962891f, 0.641713559627533f, 0.754248321056366f, 0.5728342533111572f, 0.3062114715576172f, 0.8331708908081055f, 0.6855723857879639f, 0.8622698783874512f, +0.8337864875793457f, 0.798251748085022f, 0.566192090511322f, 0.7910361289978027f, 0.8763003349304199f, 0.33885717391967773f, 0.48742055892944336f, 0.09396817535161972f, +0.38339516520500183f, 0.6597850322723389f, 0.954533040523529f, 0.8496317267417908f, 0.3106779158115387f, 0.7934276461601257f, 0.6323543787002563f, 0.08664020895957947f, +0.6476525664329529f, 0.4291464686393738f, 0.1340765655040741f, 0.4815170168876648f, 0.5670095086097717f, 0.611595630645752f, 0.19573669135570526f, 0.28130781650543213f, +0.8743016719818115f, 0.3835296630859375f, 0.2748565971851349f, 0.21253396570682526f, 0.22749434411525726f, 0.3049834966659546f, 0.6572960019111633f, 0.4998962879180908f, +0.883074164390564f, 0.3071363866329193f, 0.7384701371192932f, 0.5924251079559326f, 0.03915597125887871f, 0.9743248224258423f, 0.49376773834228516f, 0.9118658900260925f, +0.4700604975223541f, 0.8920497894287109f, 0.4160010516643524f, 0.408297598361969f, 0.21141229569911957f, 0.11620836704969406f, 0.4105437994003296f, 0.5320114493370056f, +0.18856528401374817f, 0.5203372240066528f, 0.1807139813899994f, 0.0984998494386673f, 0.3709790110588074f, 0.41370025277137756f, 0.6511335372924805f, 0.12397836893796921f, +0.4255707561969757f, 0.9413118362426758f, 0.9159054756164551f, 0.6220860481262207f, 0.5769557356834412f, 0.17454537749290466f, 0.19819463789463043f, 0.976449728012085f, +0.6540547013282776f, 0.1360311508178711f, 0.28656962513923645f, 0.7834668159484863f, 0.4697988033294678f, 0.3359377384185791f, 0.07025076448917389f, 0.852911651134491f, +0.45579004287719727f, 0.7997028827667236f, 0.6003413796424866f, 0.6714098453521729f, 0.26274535059928894f, 0.6996769309043884f, 0.8637390732765198f, 0.9208822250366211f, +0.8148113489151001f, 0.2873149812221527f, 0.018533959984779358f, 0.40454721450805664f, 0.5324529409408569f, 0.6682968139648438f, 0.47746366262435913f, 0.7204135060310364f, +0.42841145396232605f, 0.5437923669815063f, 0.5602938532829285f, 0.27324268221855164f, 0.6377982497215271f, 0.260315477848053f, 0.5094169974327087f, 0.9166826605796814f, +0.16779720783233643f, 0.20200219750404358f, 0.47560834884643555f, 0.8062894344329834f, 0.9247194528579712f, 0.057654909789562225f, 0.07243754714727402f, 0.5193215012550354f, +0.4947398900985718f, 0.8203086256980896f, 0.4755927622318268f, 0.6012746095657349f, 0.4660547077655792f, 0.6490349769592285f, 0.8458938002586365f, 0.8652030825614929f, +0.08100073784589767f, 0.8445545434951782f, 0.7983452677726746f, 0.07294666022062302f, 0.5709821581840515f, 0.9265316724777222f, 0.5232241153717041f, 0.12652789056301117f, +0.9519023299217224f, 0.3355737626552582f, 0.96397465467453f, 0.49118489027023315f, 0.2783639132976532f, 0.14995646476745605f, 0.9762477874755859f, 0.337082177400589f, +0.45969370007514954f, 0.8225656151771545f, 0.845990002155304f, 0.5804345607757568f, 0.8694254159927368f, 0.4723188281059265f, 0.5079865455627441f, 0.7348557114601135f, +0.18301692605018616f, 0.37971431016921997f, 0.8136418461799622f, 0.15287908911705017f, 0.06579675525426865f, 0.08292166888713837f, 0.525653064250946f, 0.21008993685245514f, +0.10069660097360611f, 0.2669326961040497f, 0.04162199795246124f, 0.9423916339874268f, 0.4298986792564392f, 0.015383011661469936f, 0.20238851010799408f, 0.898056149482727f, +0.10652489215135574f, 0.6823959350585938f, 0.229584738612175f, 0.9882104992866516f, 0.41418421268463135f, 0.693964421749115f, 0.4961169958114624f, 0.7355911135673523f, +0.7573095560073853f, 0.00693438621237874f, 0.030813630670309067f, 0.3031596541404724f, 0.4849148988723755f, 0.4988643229007721f, 0.460254967212677f, 0.5301849246025085f, +0.27341288328170776f, 0.9410977363586426f, 0.37409090995788574f, 0.7762331366539001f, 0.18974174559116364f, 0.9752545952796936f, 0.830712080001831f, 0.4036361277103424f, +0.008925854228436947f, 0.6130003333091736f, 0.6014279127120972f, 0.11456998437643051f, 0.5912208557128906f, 0.7005008459091187f, 0.9232271313667297f, 0.5139895081520081f, +0.40460893511772156f, 0.5481821298599243f, 0.6461566686630249f, 0.03301868587732315f, 0.11347122490406036f, 0.9233617186546326f, 0.152518168091774f, 0.06813520193099976f, +0.9883592128753662f, 0.9151728749275208f, 0.6647768020629883f, 0.9075598120689392f, 0.5973328948020935f, 0.38738855719566345f, 0.10965053737163544f, 0.11807610839605331f, +0.410892516374588f, 0.1346031129360199f, 0.8399239778518677f, 0.7115781307220459f, 0.7153276801109314f, 0.28138431906700134f, 0.10955223441123962f, 0.29542940855026245f, +0.0199463851749897f, 0.513244092464447f, 0.7012351155281067f, 0.5820218324661255f, 0.5617906451225281f, 0.5269310474395752f, 0.32011890411376953f, 0.17699040472507477f, +0.4224364161491394f, 0.39432331919670105f, 0.4573318660259247f, 0.012459998950362206f, 0.4555487334728241f, 0.4259980618953705f, 0.8197453618049622f, 0.9412519335746765f, +0.29996639490127563f, 0.8311909437179565f, 0.33359095454216003f, 0.32857051491737366f, 0.6106536388397217f, 0.28302425146102905f, 0.43622058629989624f, 0.7710690498352051f, +0.8024534583091736f, 0.40372467041015625f, 0.7885494232177734f, 0.34697234630584717f, 0.24525511264801025f, 0.709457278251648f, 0.4752657115459442f, 0.40311625599861145f, +0.4828716218471527f, 0.8347325921058655f, 0.6762062907218933f, 0.8902520537376404f, 0.3497407138347626f, 0.7683879137039185f, 0.050267208367586136f, 0.11203885823488235f, +0.14805981516838074f, 0.42444103956222534f, 0.9598730206489563f, 0.5300918221473694f, 0.09945408999919891f, 0.7959142327308655f, 0.6177681684494019f, 0.413650244474411f, +0.6493286490440369f, 0.1142529770731926f, 0.07898908108472824f, 0.5237118005752563f, 0.1583205759525299f, 0.3160630464553833f, 0.369340717792511f, 0.005779657047241926f, +0.07413844019174576f, 0.3333490788936615f, 0.28202223777770996f, 0.11516982316970825f, 0.33353856205940247f, 0.7127359509468079f, 0.2253948152065277f, 0.8921172022819519f, +0.09445054084062576f, 0.6665833592414856f, 0.86155766248703f, 0.6336362957954407f, 0.09162380546331406f, 0.5061410069465637f, 0.7415611147880554f, 0.04654885455965996f, +0.8863176703453064f, 0.4213959276676178f, 0.20928779244422913f, 0.2791801393032074f, 0.38519206643104553f, 0.4409542679786682f, 0.8238697052001953f, 0.4709222614765167f, +0.9994170665740967f, 0.11013639718294144f, 0.9624192714691162f, 0.6911085247993469f, 0.25524836778640747f, 0.11537157744169235f, 0.0546974241733551f, 0.02731388621032238f, +0.4646587073802948f, 0.9595848321914673f, 0.034754592925310135f, 0.4831598997116089f, 0.5038207769393921f, 0.3850284516811371f, 0.08211974799633026f, 0.07774893194437027f, +0.4005559980869293f, 0.054622504860162735f, 0.6388478875160217f, 0.9854564070701599f, 0.4763551652431488f, 0.14461852610111237f, 0.43487149477005005f, 0.4785396456718445f, +0.517910361289978f, 0.8358681797981262f, 0.061636053025722504f, 0.9936400055885315f, 0.5935869812965393f, 0.1829226315021515f, 0.6234460473060608f, 0.692903995513916f, +0.31641438603401184f, 0.7378981113433838f, 0.7066237330436707f, 0.518663763999939f, 0.41772782802581787f, 0.6477614641189575f, 0.9239951372146606f, 0.6281599402427673f, +0.08379462361335754f, 0.48246824741363525f, 0.17297498881816864f, 0.15558385848999023f, 0.0898166224360466f, 0.2569980323314667f, 0.7896630167961121f, 0.1937466710805893f, +0.5759076476097107f, 0.4961196184158325f, 0.28931301832199097f, 0.013825787231326103f, 0.06129488721489906f, 0.12200658768415451f, 0.11845704913139343f, 0.5606785416603088f, +0.12478005141019821f, 0.03258177265524864f, 0.3776131868362427f, 0.7763128876686096f, 0.526127278804779f, 0.6839362978935242f, 0.7629942893981934f, 0.798098623752594f, +0.7388646006584167f, 0.27554404735565186f, 0.07084129750728607f, 0.507230281829834f, 0.6355627775192261f, 0.06489421427249908f, 0.09648265689611435f, 0.666388750076294f, +0.49250397086143494f, 0.6262591481208801f, 0.828015148639679f, 0.3933068513870239f, 0.43509748578071594f, 0.8482102751731873f, 0.2880594730377197f, 0.32999303936958313f, +0.10599210858345032f, 0.2913596034049988f, 0.36520683765411377f, 0.9326965808868408f, 0.8756411671638489f, 0.9534146189689636f, 0.8304978609085083f, 0.08254648000001907f, +0.01429942436516285f, 0.5047227144241333f, 0.866072416305542f, 0.9550105333328247f, 0.10363693535327911f, 0.40797412395477295f, 0.6211974024772644f, 0.4314241409301758f, +0.13354071974754333f, 0.9007981419563293f, 0.3732118308544159f, 0.7657490968704224f, 0.3081587553024292f, 0.3155788779258728f, 0.5903704762458801f, 0.6538416743278503f, +0.06597071886062622f, 0.8785164952278137f, 0.9442983865737915f, 0.5695474743843079f, 0.7861875295639038f, 0.8407166600227356f, 0.7587346434593201f, 0.3910781741142273f, +0.7411223649978638f, 0.025593917816877365f, 0.6022129654884338f, 0.7765277624130249f, 0.6026601791381836f, 0.12238750606775284f, 0.21633313596248627f, 0.6221901178359985f, +0.11173634231090546f, 0.02294248901307583f, 0.6678111553192139f, 0.7557833790779114f, 0.8082269430160522f, 0.3412841856479645f, 0.9771556854248047f, 0.23449110984802246f, +0.672619640827179f, 0.954516589641571f, 0.928536593914032f, 0.6188720464706421f, 0.9300125241279602f, 0.013745740987360477f, 0.9692131280899048f, 0.3043588697910309f, +0.05793431028723717f, 0.092820905148983f, 0.35839971899986267f, 0.10247908532619476f, 0.4317786991596222f, 0.17998994886875153f, 0.30980098247528076f, 0.45847633481025696f, +0.58791583776474f, 0.6976773738861084f, 0.9643348455429077f, 0.10354944318532944f, 0.7357712984085083f, 0.8988492488861084f, 0.4315457344055176f, 0.3226333558559418f, +0.6827950477600098f, 0.18216446042060852f, 0.6392117738723755f, 0.9396191835403442f, 0.7955552339553833f, 0.3705807328224182f, 0.07600590586662292f, 0.9371936917304993f, +0.903762698173523f, 0.3143598139286041f, 0.35902494192123413f, 0.402582585811615f, 0.9764310717582703f, 0.24897538125514984f, 0.3958474397659302f, 0.9405158162117004f, +0.7456753849983215f, 0.154984250664711f, 0.8522884249687195f, 0.7331743240356445f, 0.6066828966140747f, 0.28963136672973633f, 0.8271174430847168f, 0.6345546245574951f, +0.03368115797638893f, 0.8554050326347351f, 0.11593925207853317f, 0.7204561233520508f, 0.6885776519775391f, 0.7938138842582703f, 0.798760175704956f, 0.46550729870796204f, +0.1862531304359436f, 0.18288955092430115f, 0.6128473877906799f, 0.3886403441429138f, 0.5021353363990784f, 0.44303250312805176f, 0.23198360204696655f, 0.7042872309684753f, +0.01563834771513939f, 0.7065073847770691f, 0.31689831614494324f, 0.4950468838214874f, 0.36772745847702026f, 0.6304661631584167f, 0.8715285658836365f, 0.5367538332939148f, +0.3990761339664459f, 0.4247378408908844f, 0.8302890062332153f, 0.8612078428268433f, 0.6606297492980957f, 0.5401303768157959f, 0.3473518192768097f, 0.28175482153892517f, +0.9988607168197632f, 0.9457630515098572f, 0.29648134112358093f, 0.24130669236183167f, 0.9615662097930908f, 0.592602550983429f, 0.7167761921882629f, 0.35948634147644043f, +0.9181398153305054f, 0.6211276650428772f, 0.41269269585609436f, 0.2352580726146698f, 0.1254066526889801f, 0.7836343050003052f, 0.042384788393974304f, 0.6604835987091064f, +0.24692672491073608f, 0.3216858208179474f, 0.6702503561973572f, 0.42996758222579956f, 0.8211050033569336f, 0.6408615112304688f, 0.018819568678736687f, 0.7995181679725647f, +0.8751874566078186f, 0.9315544366836548f, 0.8254736065864563f, 0.3227740526199341f, 0.07228787988424301f, 0.13323892652988434f, 0.9273582696914673f, 0.02472880482673645f, +0.6116037964820862f, 0.858211100101471f, 0.6017765998840332f, 0.3445821702480316f, 0.19947358965873718f, 0.681469738483429f, 0.289979487657547f, 0.5292341709136963f, +0.6622585654258728f, 0.26427164673805237f, 0.8017955422401428f, 0.6459928154945374f, 0.35985618829727173f, 0.7878826260566711f, 0.11169370263814926f, 0.6844793558120728f, +0.6211872696876526f, 0.13172510266304016f, 0.2581871747970581f, 0.26538124680519104f, 0.7719117999076843f, 0.5447769165039062f, 0.1394077092409134f, 0.8602968454360962f, +0.8721170425415039f, 0.9479935169219971f, 0.4401629567146301f, 0.3609939217567444f, 0.48263975977897644f, 0.9453785419464111f, 0.9713846445083618f, 0.5741676092147827f, +0.7259726524353027f, 0.8086374998092651f, 0.6649003028869629f, 0.6263236403465271f, 0.2087559998035431f, 0.9926341772079468f, 0.015073558315634727f, 0.3843969702720642f, +0.29518261551856995f, 0.5891230702400208f, 0.9877641797065735f, 0.15991924703121185f, 0.2540220022201538f, 0.7318342924118042f, 0.7703856229782104f, 0.18767011165618896f, +0.584303081035614f, 0.19470886886119843f, 0.49668481945991516f, 0.49927818775177f, 0.4054120182991028f, 0.9333070516586304f, 0.5469200015068054f, 0.2769310474395752f, +0.08903832733631134f, 0.2079744189977646f, 0.6976343393325806f, 0.46172189712524414f, 0.4277840256690979f, 0.7468886971473694f, 0.7881622910499573f, 0.8619484305381775f, +0.5560230016708374f, 0.21221409738063812f, 0.8579829931259155f, 0.203148752450943f, 0.0014260773314163089f, 0.9102857708930969f, 0.5442507863044739f, 0.6612255573272705f, +0.07216430455446243f, 0.04265602305531502f, 0.6176335215568542f, 0.2820618152618408f, 0.5968285202980042f, 0.9594003558158875f, 0.46295857429504395f, 0.22060751914978027f, +0.93421471118927f, 0.6198104023933411f, 0.9592890739440918f, 0.047314055263996124f, 0.9632927179336548f, 0.283861368894577f, 0.6004738807678223f, 0.39464306831359863f, +0.7442575693130493f, 0.6335207223892212f, 0.9329321384429932f, 0.87264084815979f, 0.316421240568161f, 0.5232948660850525f, 0.17973895370960236f, 0.8896143436431885f, +0.22407206892967224f, 0.5006771087646484f, 0.5990402102470398f, 0.8767343163490295f, 0.4212596118450165f, 0.871325671672821f, 0.24401560425758362f, 0.7375674247741699f, +0.14338363707065582f, 0.8941770792007446f, 0.14849168062210083f, 0.3130738139152527f, 0.2591792047023773f, 0.5836896300315857f, 0.9150106310844421f, 0.3472922742366791f, +0.20156799256801605f, 0.19581568241119385f, 0.5609209537506104f, 0.011394036933779716f, 0.6691949963569641f, 0.19285449385643005f, 0.8221989870071411f, 0.2503623068332672f, +0.16539503633975983f, 0.2831535041332245f, 0.06847771257162094f, 0.8497394323348999f, 0.2713828980922699f, 0.43774139881134033f, 0.8395959138870239f, 0.12146678566932678f, +0.9949431419372559f, 0.6171038746833801f, 0.8910729289054871f, 0.36825308203697205f, 0.4021243453025818f, 0.7874592542648315f, 0.6897642612457275f, 0.5238743424415588f, +0.46815958619117737f, 0.9761747121810913f, 0.28623849153518677f, 0.3344619572162628f, 0.9265837669372559f, 0.1298314779996872f, 0.7922342419624329f, 0.30019551515579224f, +0.3696347177028656f, 0.6376219391822815f, 0.1906311959028244f, 0.8641852140426636f, 0.46151453256607056f, 0.8167998194694519f, 0.49314114451408386f, 0.31874001026153564f, +0.0655454620718956f, 0.6068906784057617f, 0.8730157017707825f, 0.4310432970523834f, 0.3395732343196869f, 0.2663499116897583f, 0.8203319311141968f, 0.6734212040901184f, +0.6644091606140137f, 0.2342272400856018f, 0.9012300968170166f, 0.048783671110868454f, 0.695155680179596f, 0.5148458480834961f, 0.8182777166366577f, 0.01306549645960331f, +0.3045329749584198f, 0.26653456687927246f, 0.8602606654167175f, 0.11331972479820251f, 0.17923802137374878f, 0.2535744309425354f, 0.64164799451828f, 0.7359617948532104f, +0.9049506783485413f, 0.9237626791000366f, 0.7972397208213806f, 0.5805189609527588f, 0.46275410056114197f, 0.09744288772344589f, 0.7521579265594482f, 0.9940513372421265f, +0.41795405745506287f, 0.09818294644355774f, 0.5522040128707886f, 0.20466116070747375f, 0.9099730849266052f, 0.3373175859451294f, 0.9530532360076904f, 0.619966447353363f, +0.8407560586929321f, 0.7741836905479431f, 0.25529494881629944f, 0.10631759464740753f, 0.8466027975082397f, 0.055116571485996246f, 0.9826256036758423f, 0.43109646439552307f, +0.7883049249649048f, 0.558485209941864f, 0.45147383213043213f, 0.46206122636795044f, 0.30036279559135437f, 0.4069038927555084f, 0.5262694954872131f, 0.7038315534591675f, +0.403573215007782f, 0.10089157521724701f, 0.6660589575767517f, 0.6895902156829834f, 0.488260418176651f, 0.30772942304611206f, 0.14399079978466034f, 0.11170220375061035f, +0.8992359638214111f, 0.25198155641555786f, 0.07868361473083496f, 0.9747737646102905f, 0.8480831980705261f, 0.3034217953681946f, 0.5236170887947083f, 0.8772394061088562f, +0.9232836961746216f, 0.25751471519470215f, 0.9777259230613708f, 0.43278399109840393f, 0.8648332357406616f, 0.4213023781776428f, 0.8418986797332764f, 0.6531408429145813f, +0.3129957318305969f, 0.8110479116439819f, 0.6645045280456543f, 0.7398321628570557f, 0.09291839599609375f, 0.20955084264278412f, 0.8827852606773376f, 0.3810119926929474f, +0.7615617513656616f, 0.9969717860221863f, 0.26591238379478455f, 0.8714447617530823f, 0.2424941211938858f, 0.8500034213066101f, 0.7416344285011292f, 0.6954221725463867f, +0.7465283870697021f, 0.23475365340709686f, 0.8677878379821777f, 0.2109764963388443f, 0.44122472405433655f, 0.5282690525054932f, 0.4050186276435852f, 0.5047649145126343f, +0.6915481090545654f, 0.9655858278274536f, 0.13721255958080292f, 0.32490479946136475f, 0.5612497925758362f, 0.1518552601337433f, 0.23502635955810547f, 0.10927096009254456f, +0.24524670839309692f, 0.11507613211870193f, 0.28388383984565735f, 0.40168488025665283f, 0.013063541613519192f, 0.08027047663927078f, 0.6248405575752258f, 0.614680826663971f, +0.9881605505943298f, 0.6617161631584167f, 0.6392874717712402f, 0.5079889893531799f, 0.9546558856964111f, 0.03509266674518585f, 0.12979258596897125f, 0.737791895866394f, +0.956970751285553f, 0.9853312373161316f, 0.3427862226963043f, 0.3792991638183594f, 0.3886089026927948f, 0.762086033821106f, 0.5297601222991943f, 0.8212588429450989f, +0.4048910140991211f, 0.6957205533981323f, 0.19319535791873932f, 0.8472160696983337f, 0.0315709188580513f, 0.806018054485321f, 0.2648499608039856f, 0.13785505294799805f, +0.787320077419281f, 0.3584090769290924f, 0.9174367189407349f, 0.08867167681455612f, 0.5269787311553955f, 0.17995446920394897f, 0.5067721605300903f, 0.1511850655078888f, +0.7439827919006348f, 0.12793156504631042f, 0.15623125433921814f, 0.9789940714836121f, 0.9437990784645081f, 0.4441514015197754f, 0.8346974849700928f, 0.5602847933769226f, +0.1627902090549469f, 0.6663910150527954f, 0.4338098168373108f, 0.7410517930984497f, 0.29611438512802124f, 0.6151582598686218f, 0.38692420721054077f, 0.061012156307697296f, +0.6667279601097107f, 0.7679318189620972f, 0.38812148571014404f, 0.3701811730861664f, 0.9101846814155579f, 0.08293933421373367f, 0.7664819955825806f, 0.11633492261171341f, +0.74760901927948f, 0.004263983108103275f, 0.92148357629776f, 0.2153126746416092f, 0.7510402798652649f, 0.950914740562439f, 0.30018362402915955f, 0.7003219723701477f, +0.2416999191045761f, 0.8764957189559937f, 0.23458431661128998f, 0.15198540687561035f, 0.5359652042388916f, 0.799979567527771f, 0.0845700055360794f, 0.860568642616272f, +0.34921810030937195f, 0.7676643133163452f, 0.6491870284080505f, 0.9619361162185669f, 0.9848409295082092f, 0.9693207740783691f, 0.32163169980049133f, 0.45136597752571106f, +0.8977629542350769f, 0.6249802112579346f, 0.5905187726020813f, 0.9022172093391418f, 0.5623435378074646f, 0.38295015692710876f, 0.4596315622329712f, 0.7405049204826355f, +0.33213260769844055f, 0.1867848038673401f, 0.505077064037323f, 0.05444416403770447f, 0.1707421839237213f, 0.2874520719051361f, 0.6503887176513672f, 0.12238400429487228f, +0.36702239513397217f, 0.8406921029090881f, 0.35129910707473755f, 0.17982825636863708f, 0.8744916319847107f, 0.9648523926734924f, 0.788057804107666f, 0.7599930167198181f, +0.3503512442111969f, 0.8087756037712097f, 0.31318849325180054f, 0.009901778772473335f, 0.20010262727737427f, 0.16116781532764435f, 0.5254855751991272f, 0.14596931636333466f, +0.057407356798648834f, 0.6809573769569397f, 0.439752459526062f, 0.9946645498275757f, 0.5435055494308472f, 0.725226879119873f, 0.2156447470188141f, 0.2640155255794525f, +0.5193167924880981f, 0.595082700252533f, 0.05638929083943367f, 0.584405779838562f, 0.8677568435668945f, 0.6149603724479675f, 0.30104929208755493f, 0.721737265586853f, +0.8921446800231934f, 0.4675838053226471f, 0.6639330983161926f, 0.11774782836437225f, 0.28965863585472107f, 0.1954650580883026f, 0.355337530374527f, 0.17442476749420166f, +0.6273512840270996f, 0.8599639534950256f, 0.7170019149780273f, 0.7297012209892273f, 0.20555514097213745f, 0.552720844745636f, 0.8064215183258057f, 0.15565364062786102f, +0.37503933906555176f, 0.8369659185409546f, 0.8669872879981995f, 0.31984657049179077f, 0.11765076220035553f, 0.9918588399887085f, 0.15771937370300293f, 0.9144057631492615f, +0.3235912024974823f, 0.6629010438919067f, 0.056677475571632385f, 0.11002695560455322f, 0.21752940118312836f, 0.07179030030965805f, 0.2883276045322418f, 0.5759541392326355f, +0.6372010707855225f, 0.6420190334320068f, 0.13327278196811676f, 0.7995483875274658f, 0.041188161820173264f, 0.48157450556755066f, 0.5005348920822144f, 0.5030037760734558f, +0.7571049332618713f, 0.996755063533783f, 0.4696432650089264f, 0.9045993685722351f, 0.5295789241790771f, 0.9077165722846985f, 0.15683813393115997f, 0.255439817905426f, +0.40165627002716064f, 0.9527212977409363f, 0.09121022373437881f, 0.8033525943756104f, 0.4441911280155182f, 0.5008941292762756f, 0.8825255632400513f, 0.3605731129646301f, +0.6701581478118896f, 0.05547160655260086f, 0.9759179949760437f, 0.8450019955635071f, 0.6641969084739685f, 0.2252500355243683f, 0.021426089107990265f, 0.5218903422355652f, +0.2613483965396881f, 0.5640990734100342f, 0.5425491333007812f, 0.30252718925476074f, 0.7069452404975891f, 0.32729363441467285f, 0.23671475052833557f, 0.6186963319778442f, +0.37853366136550903f, 0.44330456852912903f, 0.5852874517440796f, 0.20569536089897156f, 0.23712322115898132f, 0.37627580761909485f, 0.13656185567378998f, 0.15649837255477905f, +0.9071074724197388f, 0.8851686120033264f, 0.6298452019691467f, 0.2998923659324646f, 0.43353572487831116f, 0.8894169926643372f, 0.27133244276046753f, 0.5109109282493591f, +0.9188361763954163f, 0.6576882004737854f, 0.45623213052749634f, 0.8066568970680237f, 0.48107632994651794f, 0.4030013680458069f, 0.2688012421131134f, 0.0503869466483593f, +0.22386351227760315f, 0.19220493733882904f, 0.9998496770858765f, 0.4852096438407898f, 0.29877185821533203f, 0.3934405446052551f, 0.7141159176826477f, 0.10885825753211975f, +0.9943127036094666f, 0.8303973078727722f, 0.12212654948234558f, 0.2928909361362457f, 0.10890685021877289f, 0.1322995275259018f, 0.6613433361053467f, 0.696942150592804f, +0.20106689631938934f, 0.958639919757843f, 0.297679603099823f, 0.9060731530189514f, 0.32537519931793213f, 0.7319023609161377f, 0.2698710262775421f, 0.2483459711074829f, +0.48559749126434326f, 0.30843761563301086f, 0.5791342854499817f, 0.8723186254501343f, 0.3724954426288605f, 0.30085915327072144f, 0.9381599426269531f, 0.0877138078212738f, +0.6483923196792603f, 0.29325246810913086f, 0.4205971360206604f, 0.2857415974140167f, 0.2574368417263031f, 0.28995850682258606f, 0.5522850155830383f, 0.39361080527305603f, +0.3056158721446991f, 0.1267586350440979f, 0.5797008872032166f, 0.4117470383644104f, 0.2992078363895416f, 0.04905223101377487f, 0.8608720302581787f, 0.1911674439907074f, +0.0337311252951622f, 0.05716941878199577f, 0.5147520899772644f, 0.01762934774160385f, 0.0015902591403573751f, 0.2456277757883072f, 0.7720967531204224f, 0.8965550661087036f, +0.0841866061091423f, 0.8686405420303345f, 0.7331650257110596f, 0.3177855610847473f, 0.7376785278320312f, 0.986275315284729f, 0.751591145992279f, 0.37550416588783264f, +0.9978925585746765f, 0.2806253135204315f, 0.4466690719127655f, 0.93732088804245f, 0.7433355450630188f, 0.20734232664108276f, 0.2878016531467438f, 0.5444427132606506f, +0.412389874458313f, 0.3355221748352051f, 0.9661913514137268f, 0.48197296261787415f, 0.2605549395084381f, 0.9628284573554993f, 0.9825571179389954f, 0.26852113008499146f, +0.8116364479064941f, 0.15626803040504456f, 0.1925319880247116f, 0.5270895957946777f, 0.6981474161148071f, 0.907904863357544f, 0.686885416507721f, 0.6945272088050842f, +0.22835759818553925f, 0.37963157892227173f, 0.046815864741802216f, 0.5982253551483154f, 0.6001048684120178f, 0.776883065700531f, 0.16460442543029785f, 0.01748681254684925f, +0.3429003357887268f, 0.589046835899353f, 0.24039101600646973f, 0.48047226667404175f, 0.8475649952888489f, 0.21322980523109436f, 0.22910404205322266f, 0.6128541827201843f, +0.3221002519130707f, 0.7056020498275757f, 0.9307419657707214f, 0.3951186239719391f, 0.5290430188179016f, 0.02150852605700493f, 0.9387052059173584f, 0.8596096038818359f, +0.8058806657791138f, 0.6046236753463745f, 0.6911448240280151f, 0.42596882581710815f, 0.9322170615196228f, 0.7449386119842529f, 0.3720351457595825f, 0.7509231567382812f, +0.014653516001999378f, 0.5522019863128662f, 0.9664014577865601f, 0.6224545836448669f, 0.22985683381557465f, 0.5720829367637634f, 0.8626929521560669f, 0.1426069140434265f, +0.38297510147094727f, 0.2081989347934723f, 0.37272322177886963f, 0.5751729011535645f, 0.8864657878875732f, 0.8293857574462891f, 0.2123837172985077f, 0.03069806843996048f, +0.03952446207404137f, 0.22272488474845886f, 0.4728885293006897f, 0.8279077410697937f, 0.21706783771514893f, 0.5505533814430237f, 0.45116034150123596f, 0.9870542287826538f, +0.38378196954727173f, 0.3617563545703888f, 0.4341539442539215f, 0.42774876952171326f, 0.33415067195892334f, 0.7503829598426819f, 0.3287278115749359f, 0.871131956577301f, +0.8932732343673706f, 0.2953779399394989f, 0.6043586730957031f, 0.8079859018325806f, 0.6981144547462463f, 0.9866360425949097f, 0.046766385436058044f, 0.8975428938865662f, +0.12789620459079742f, 0.6555418372154236f, 0.7558274269104004f, 0.06729929894208908f, 0.12037663161754608f, 0.21799160540103912f, 0.3994172215461731f, 0.15424466133117676f, +0.05732070282101631f, 0.8375729918479919f, 0.9992215037345886f, 0.49286791682243347f, 0.5903722643852234f, 0.6501914262771606f, 0.8643896579742432f, 0.9217404127120972f, +0.05991965904831886f, 0.3536646068096161f, 0.7028996348381042f, 0.9103108048439026f, 0.15193991363048553f, 0.3741985857486725f, 0.7297923564910889f, 0.9826868772506714f, +0.3142128586769104f, 0.3908431828022003f, 0.9154449701309204f, 0.4841044545173645f, 0.341341495513916f, 0.8822973966598511f, 0.39885202050209045f, 0.7418305277824402f, +0.3183230757713318f, 0.8603256344795227f, 0.2124634087085724f, 0.14808155596256256f, 0.8915233016014099f, 0.15872983634471893f, 0.5986233949661255f, 0.05697786435484886f, +0.12405295670032501f, 0.7692000269889832f, 0.14155806601047516f, 0.930129885673523f, 0.21099334955215454f, 0.8279332518577576f, 0.8897152543067932f, 0.7737302184104919f, +0.7220988869667053f, 0.17812182009220123f, 0.08894242346286774f, 0.3890228569507599f, 0.8260707259178162f, 0.26011815667152405f, 0.4601847529411316f, 0.10397948324680328f, +0.13323035836219788f, 0.37271103262901306f, 0.002710179192945361f, 0.4242062568664551f, 0.3059524595737457f, 0.3005809783935547f, 0.14687693119049072f, 0.008333912119269371f, +0.38189709186553955f, 0.020953036844730377f, 0.6521888971328735f, 0.6589439511299133f, 0.906968355178833f, 0.024040227755904198f, 0.6378615498542786f, 0.9480423927307129f, +0.6481318473815918f, 0.12697286903858185f, 0.4336959719657898f, 0.7241360545158386f, 0.8707826137542725f, 0.7920971512794495f, 0.2870766222476959f, 0.6825985312461853f, +0.9385056495666504f, 0.5320359468460083f, 0.9448765516281128f, 0.8049640655517578f, 0.8989481925964355f, 0.08528602123260498f, 0.205366313457489f, 0.8237550854682922f, +0.28310272097587585f, 0.6187649965286255f, 0.4676693081855774f, 0.7800388932228088f, 0.48069292306900024f, 0.8727925419807434f, 0.5406463742256165f, 0.043684862554073334f, +0.7940405607223511f, 0.7776786088943481f, 0.38798850774765015f, 0.9636895060539246f, 0.43188032507896423f, 0.697583019733429f, 0.049277134239673615f, 0.968029797077179f, +0.6806850433349609f, 0.4362410604953766f, 0.6425647139549255f, 0.9670255184173584f, 0.9780343770980835f, 0.06515812873840332f, 0.8592169284820557f, 0.26453202962875366f, +0.39224594831466675f, 0.21566124260425568f, 0.5301984548568726f, 0.8825157880783081f, 0.9234338402748108f, 0.5320540070533752f, 0.32565975189208984f, 0.6343507170677185f, +0.1109059676527977f, 0.574160635471344f, 0.13296587765216827f, 0.9018316864967346f, 0.5688161253929138f, 0.43655046820640564f, 0.6994112133979797f, 0.35886457562446594f, +0.7365073561668396f, 0.46971237659454346f, 0.4443962872028351f, 0.6460726261138916f, 0.8415731191635132f, 0.9269930124282837f, 0.591148853302002f, 0.8145018219947815f, +0.6014907360076904f, 0.20646218955516815f, 0.518303394317627f, 0.6760032773017883f, 0.6472018361091614f, 0.057544857263565063f, 0.015988022089004517f, 0.5029685497283936f, +0.08250493556261063f, 0.29067450761795044f, 0.32210761308670044f, 0.12022492289543152f, 0.2470802217721939f, 0.354261577129364f, 0.9291468858718872f, 0.9260110259056091f, +0.4306906461715698f, 0.9055190682411194f, 0.42322927713394165f, 0.19105392694473267f, 0.5226914882659912f, 0.8537940979003906f, 0.6336831450462341f, 0.8504210114479065f, +0.3353462219238281f, 0.6168761849403381f, 0.06020846217870712f, 0.07600845396518707f, 0.9800004363059998f, 0.12283428758382797f, 0.549239993095398f, 0.30757632851600647f, +0.7638946175575256f, 0.7865796685218811f, 0.01465314906090498f, 0.5957459807395935f, 0.13168230652809143f, 0.673198401927948f, 0.3184095025062561f, 0.08066394180059433f, +0.3201299011707306f, 0.1541946530342102f, 0.4491015076637268f, 0.5092358589172363f, 0.8692843317985535f, 0.859748899936676f, 0.7541651725769043f, 0.7439422011375427f, +0.9231047034263611f, 0.8894770741462708f, 0.8530313968658447f, 0.8135825991630554f, 0.24425852298736572f, 0.5871891379356384f, 0.5469972491264343f, 0.08029017597436905f, +0.8482852578163147f, 0.8629912734031677f, 0.2697204053401947f, 0.7952772378921509f, 0.9467086791992188f, 0.18852190673351288f, 0.6913992166519165f, 0.834727942943573f, +0.9912371635437012f, 0.4447990953922272f, 0.07562123239040375f, 0.9170410633087158f, 0.17254184186458588f, 0.8692681789398193f, 0.14908166229724884f, 0.01268179900944233f, +0.5882204174995422f, 0.2928040027618408f, 0.9023088216781616f, 0.24827761948108673f, 0.20135633647441864f, 0.18908846378326416f, 0.04161985218524933f, 0.685034990310669f, +0.7901329398155212f, 0.08941122889518738f, 0.27603012323379517f, 0.9117317795753479f, 0.30440792441368103f, 0.06247791647911072f, 0.6174769997596741f, 0.5810073018074036f, +0.5840834379196167f, 0.2992589473724365f, 0.27895262837409973f, 0.47697997093200684f, 0.5592089891433716f, 0.05821941792964935f, 0.9468029141426086f, 0.9642845988273621f, +0.5269272327423096f, 0.43833887577056885f, 0.4467412829399109f, 0.7587758302688599f, 0.41631701588630676f, 0.19755473732948303f, 0.49746233224868774f, 0.3634263873100281f, +0.9582734704017639f, 0.5576706528663635f, 0.8625293374061584f, 0.0852573812007904f, 0.3829641044139862f, 0.7110127806663513f, 0.6637140512466431f, 0.032761771231889725f, +0.2065727263689041f, 0.17351192235946655f, 0.6931246519088745f, 0.8023019433021545f, 0.9950640797615051f, 0.0014781201025471091f, 0.5902861952781677f, 0.6843980550765991f, +0.3796055018901825f, 0.7744323015213013f, 0.9633086919784546f, 0.9609535336494446f, 0.990933358669281f, 0.8937370181083679f, 0.44185611605644226f, 0.41022101044654846f, +0.9724262356758118f, 0.35984253883361816f, 0.0017585002351552248f, 0.10243210196495056f, 0.7663994431495667f, 0.5955460667610168f, 0.48203662037849426f, 0.8583953380584717f, +0.3250900208950043f, 0.2992374897003174f, 0.4439338743686676f, 0.3272952139377594f, 0.9199041724205017f, 0.701744794845581f, 0.07294254004955292f, 0.7615912556648254f, +0.6568779349327087f, 0.5773929953575134f, 0.4684869050979614f, 0.8655313849449158f, 0.3252388834953308f, 0.723703920841217f, 0.5397276878356934f, 0.1262511909008026f, +0.49639859795570374f, 0.7330117225646973f, 0.6165671348571777f, 0.42476171255111694f, 0.08251085877418518f, 0.8422832489013672f, 0.6213581562042236f, 0.1764046549797058f, +0.3531774878501892f, 0.6972469687461853f, 0.4918070435523987f, 0.7047173380851746f, 0.47288352251052856f, 0.6920251846313477f, 0.6949927806854248f, 0.3888739049434662f, +0.18786542117595673f, 0.0506928376853466f, 0.3081478774547577f, 0.24291928112506866f, 0.8484292030334473f, 0.7502049803733826f, 0.7877904772758484f, 0.8223394751548767f, +0.9420867562294006f, 0.4930473268032074f, 0.6538440585136414f, 0.05623745545744896f, 0.2180124819278717f, 0.4099156856536865f, 0.07076122611761093f, 0.8950555920600891f, +0.9265369176864624f, 0.35778161883354187f, 0.5800959467887878f, 0.494147390127182f, 0.6572495698928833f, 0.7231204509735107f, 0.1960982084274292f, 0.3870161175727844f, +0.1263730376958847f, 0.5374763607978821f, 0.15792813897132874f, 0.712493360042572f, 0.05586128309369087f, 0.8915008306503296f, 0.4192187786102295f, 0.3728117346763611f, +0.9631701707839966f, 0.767774760723114f, 0.06238870695233345f, 0.7189014554023743f, 0.8150330781936646f, 0.08465985953807831f, 0.7600553035736084f, 0.36219143867492676f, +0.33250612020492554f, 0.6053124070167542f, 0.7389784455299377f, 0.4562002718448639f, 0.03517691418528557f, 0.3673893213272095f, 0.7301834225654602f, 0.004493572749197483f, +0.24908196926116943f, 0.1410229206085205f, 0.07152071595191956f, 0.3022385537624359f, 0.3836750388145447f, 0.9935259819030762f, 0.3506718575954437f, 0.39111143350601196f, +0.3227382302284241f, 0.0016191666945815086f, 0.7449867129325867f, 0.3465649485588074f, 0.6828774809837341f, 0.6018246412277222f, 0.2575244605541229f, 0.7921215295791626f, +0.11354345828294754f, 0.79552161693573f, 0.5069249868392944f, 0.3593067526817322f, 0.7164254188537598f, 0.5356458425521851f, 0.575870931148529f, 0.8996071815490723f, +0.2295277863740921f, 0.013797162100672722f, 0.6257302761077881f, 0.5427382588386536f, 0.6698080897331238f, 0.42511042952537537f, 0.7426242232322693f, 0.058919768780469894f, +0.834260106086731f, 0.6530179977416992f, 0.3292534351348877f, 0.3154662251472473f, 0.9381086230278015f, 0.20410767197608948f, 0.18707279860973358f, 0.8126471042633057f, +0.3523629605770111f, 0.07862962782382965f, 0.3640306890010834f, 0.020911473780870438f, 0.5063567757606506f, 0.4081230163574219f, 0.15156592428684235f, 0.801247239112854f, +0.3236306309700012f, 0.5196754336357117f, 0.5732837319374084f, 0.012595818378031254f, 0.4702182710170746f, 0.9728786945343018f, 0.9843611121177673f, 0.45863473415374756f, +0.48318302631378174f, 0.7455740571022034f, 0.9766472578048706f, 0.1943710297346115f, 0.25262993574142456f, 0.6119558215141296f, 0.2372118979692459f, 0.2626838684082031f, +0.69432133436203f, 0.9896538257598877f, 0.403213769197464f, 0.19644607603549957f, 0.2567533850669861f, 0.45829251408576965f, 0.9901021122932434f, 0.9470375776290894f, +0.9825393557548523f, 0.9092210531234741f, 0.9772028923034668f, 0.26596131920814514f, 0.7384533286094666f, 0.6457648277282715f, 0.44226697087287903f, 0.3154626190662384f, +0.06683558970689774f, 0.24812129139900208f, 0.011178774759173393f, 0.31760939955711365f, 0.14057131111621857f, 0.5890153646469116f, 0.7321844100952148f, 0.2204936146736145f, +0.47417402267456055f, 0.17864488065242767f, 0.2517032325267792f, 0.14916491508483887f, 0.057831913232803345f, 0.8800539970397949f, 0.03591521456837654f, 0.3002088665962219f, +0.8887231349945068f, 0.5657685995101929f, 0.8471734523773193f, 0.8068514466285706f, 0.020612815394997597f, 0.3523499071598053f, 0.04631650447845459f, 0.42858797311782837f, +0.3892003893852234f, 0.15306277573108673f, 0.9933003783226013f, 0.37263983488082886f, 0.32101303339004517f, 0.702405571937561f, 0.12630867958068848f, 0.9787499904632568f, +0.7703548073768616f, 0.8389214873313904f, 0.07198543846607208f, 0.4211859703063965f, 0.12251060456037521f, 0.8662732839584351f, 0.817354679107666f, 0.878930389881134f, +0.8299947381019592f, 0.4211319088935852f, 0.7734254002571106f, 0.9168877601623535f, 0.01438058726489544f, 0.795996367931366f, 0.522448718547821f, 0.18086384236812592f, +0.7328550219535828f, 0.06336317956447601f, 0.7271295189857483f, 0.40785616636276245f, 0.6756390333175659f, 0.2192845642566681f, 0.3469781279563904f, 0.3405124247074127f, +0.2999340295791626f, 0.46807727217674255f, 0.8703572154045105f, 0.34142860770225525f, 0.701223611831665f, 0.9523027539253235f, 0.5044273138046265f, 0.12308702617883682f, +0.7034080028533936f, 0.19048941135406494f, 0.7293766140937805f, 0.13779960572719574f, 0.27325934171676636f, 0.690116286277771f, 0.6512118577957153f, 0.7342364192008972f, +0.5479070544242859f, 0.6180860996246338f, 0.09576866775751114f, 0.84699946641922f, 0.3002205491065979f, 0.7711268663406372f, 0.8530663251876831f, 0.7560414671897888f, +0.5167146325111389f, 0.028851529583334923f, 0.9529917240142822f, 0.4702768623828888f, 0.7476068139076233f, 0.3109476864337921f, 0.9018705487251282f, 0.13337425887584686f, +0.7372015714645386f, 0.2909424602985382f, 0.8207889795303345f, 0.5794481635093689f, 0.7863816022872925f, 0.9381285905838013f, 0.2697434723377228f, 0.4768868088722229f, +0.3167046010494232f, 0.005721201188862324f, 0.2577938735485077f, 0.9345535039901733f, 0.6765194535255432f, 0.06257711350917816f, 0.393530011177063f, 0.9635814428329468f, +0.8156911134719849f, 0.45842844247817993f, 0.6758660674095154f, 0.34621328115463257f, 0.8534374833106995f, 0.8356568217277527f, 0.525516927242279f, 0.09442596137523651f, +0.645244836807251f, 0.6898002624511719f, 0.4159514009952545f, 0.8526154160499573f, 0.48746246099472046f, 0.7124136090278625f, 0.6219274401664734f, 0.5100529193878174f, +0.24025416374206543f, 0.5143436193466187f, 0.7778511047363281f, 0.2633451223373413f, 0.8729451298713684f, 0.667363703250885f, 0.11897198855876923f, 0.8945607542991638f, +0.6999271512031555f, 0.26257848739624023f, 0.4510381817817688f, 0.780704915523529f, 0.5954321026802063f, 0.6014936566352844f, 0.036174315959215164f, 0.042144209146499634f, +0.5799720883369446f, 0.9078604578971863f, 0.02697613462805748f, 0.7835837006568909f, 0.9513658285140991f, 0.4000023305416107f, 0.42930126190185547f, 0.16090472042560577f, +0.7322884202003479f, 0.9502310752868652f, 0.23232346773147583f, 0.6098822951316833f, 0.07562693953514099f, 0.9836245179176331f, 0.2907206118106842f, 0.32781982421875f, +0.7815368175506592f, 0.26448333263397217f, 0.5419425368309021f, 0.9448872804641724f, 0.975286602973938f, 0.1973162442445755f, 0.18936878442764282f, 0.7666527628898621f, +0.8192943930625916f, 0.5753176212310791f, 0.7220736145973206f, 0.5380356907844543f, 0.7760536670684814f, 0.11792400479316711f, 0.44381335377693176f, 0.21018780767917633f, +0.9399087429046631f, 0.38282766938209534f, 0.6841317415237427f, 0.11663094162940979f, 0.8218046426773071f, 0.2605915367603302f, 0.4003916382789612f, 0.7573870420455933f, +0.24580775201320648f, 0.1826891005039215f, 0.6927310824394226f, 0.49349159002304077f, 0.7270998954772949f, 0.11495024710893631f, 0.4858814775943756f, 0.04188001528382301f, +0.5420323610305786f, 0.21003501117229462f, 0.08245697617530823f, 0.7969885468482971f, 0.7400672435760498f, 0.8392943739891052f, 0.3898865580558777f, 0.7862509489059448f, +0.14249718189239502f, 0.7369590401649475f, 0.6000670194625854f, 0.6654218435287476f, 0.10495324432849884f, 0.9554861783981323f, 0.4865725636482239f, 0.21281743049621582f, +0.01989348605275154f, 0.0483294352889061f, 0.6825946569442749f, 0.09779015183448792f, 0.4711710214614868f, 0.4006771445274353f, 0.6339776515960693f, 0.18884879350662231f, +0.34647393226623535f, 0.8398820161819458f, 0.6316810846328735f, 0.7373176217079163f, 0.7384556531906128f, 0.19085721671581268f, 0.2058320939540863f, 0.865280032157898f, +0.9332506656646729f, 0.7108270525932312f, 0.6657335162162781f, 0.18934699892997742f, 0.7957866787910461f, 0.5824907422065735f, 0.17394377291202545f, 0.7530060410499573f, +0.8945919871330261f, 0.15846166014671326f, 0.00971499178558588f, 0.5923409461975098f, 0.5069420337677002f, 0.2549794316291809f, 0.31643450260162354f, 0.7914447784423828f, +0.46804314851760864f, 0.6696497201919556f, 0.7215604186058044f, 0.04533740133047104f, 0.5200772881507874f, 0.07125519216060638f, 0.9293013215065002f, 0.04898807033896446f, +0.5964076519012451f, 0.35966652631759644f, 0.5498558878898621f, 0.7155109643936157f, 0.05427718535065651f, 0.43460381031036377f, 0.9211729764938354f, 0.5766322612762451f, +0.7172203063964844f, 0.6798092722892761f, 0.8827467560768127f, 0.5536670088768005f, 0.8901135921478271f, 0.6956885457038879f, 0.7480291724205017f, 0.3659687638282776f, +0.295169472694397f, 0.07144948840141296f, 0.9793951511383057f, 0.3130967915058136f, 0.5567444562911987f, 0.025519125163555145f, 0.08874261379241943f, 0.3808027505874634f, +0.8734635710716248f, 0.9093502759933472f, 0.500512957572937f, 0.9070951342582703f, 0.16423733532428741f, 0.6916522979736328f, 0.4262479543685913f, 0.2230689525604248f, +0.2527484893798828f, 0.9649089574813843f, 0.6318374872207642f, 0.9650604128837585f, 0.4106561243534088f, 0.017621420323848724f, 0.2963758409023285f, 0.008823653683066368f, +0.6429600715637207f, 0.846705436706543f, 0.9732060432434082f, 0.5321859121322632f, 0.574695885181427f, 0.8566172122955322f, 0.373982697725296f, 0.2349129021167755f, +0.8666837811470032f, 0.504971444606781f, 0.7965521216392517f, 0.46822628378868103f, 0.9488915205001831f, 0.48033127188682556f, 0.27764198184013367f, 0.2926288843154907f, +0.15181571245193481f, 0.09997806698083878f, 0.9959989190101624f, 0.8222100138664246f, 0.6993786096572876f, 0.07953136414289474f, 0.31690508127212524f, 0.8474339842796326f, +0.7398325800895691f, 0.7257754802703857f, 0.3364482820034027f, 0.09355079382658005f, 0.10359986871480942f, 0.6413685083389282f, 0.7808670401573181f, 0.6184114813804626f, +0.5584026575088501f, 0.9640134572982788f, 0.5009971857070923f, 0.08599529415369034f, 0.21771349012851715f, 0.9118973016738892f, 0.5336120128631592f, 0.7623555064201355f, +0.787677526473999f, 0.06939037144184113f, 0.3502340614795685f, 0.0008081454434432089f, 0.39979276061058044f, 0.11219709366559982f, 0.27008265256881714f, 0.2564159035682678f, +0.5447825193405151f, 0.491603821516037f, 0.18084575235843658f, 0.7774885892868042f, 0.39557042717933655f, 0.5624005198478699f, 0.2891331911087036f, 0.18092738091945648f, +0.20311003923416138f, 0.7252472639083862f, 0.624764621257782f, 0.016761384904384613f, 0.03645152226090431f, 0.3906906843185425f, 0.18491782248020172f, 0.5073743462562561f, +0.09918838739395142f, 0.5939717292785645f, 0.3750513195991516f, 0.6661867499351501f, 0.5002310276031494f, 0.741568922996521f, 0.30793389678001404f, 0.6142239570617676f, +0.944080114364624f, 0.6929060816764832f, 0.2667180299758911f, 0.03605471923947334f, 0.5029687881469727f, 0.8604825735092163f, 0.9743987917900085f, 0.5805802345275879f, +0.3897370994091034f, 0.047901496291160583f, 0.5571076273918152f, 0.15307928621768951f, 0.9132369756698608f, 0.5191807150840759f, 0.7434471845626831f, 0.33641424775123596f, +0.6729034781455994f, 0.5002120733261108f, 0.7373862862586975f, 0.9074085354804993f, 0.8213053941726685f, 0.03461793065071106f, 0.4830297827720642f, 0.8210756778717041f, +0.5100035071372986f, 0.9969193339347839f, 0.10539045929908752f, 0.2517381012439728f, 0.38817670941352844f, 0.09194637089967728f, 0.7361150979995728f, 0.785252034664154f, +0.37071889638900757f, 0.4045695662498474f, 0.9824291467666626f, 0.10613032430410385f, 0.48895812034606934f, 0.7798752188682556f, 0.1572055071592331f, 0.88156658411026f, +0.07068455964326859f, 0.23272758722305298f, 0.36021876335144043f, 0.1848899871110916f, 0.13165076076984406f, 0.36683347821235657f, 0.5039734840393066f, 0.5396592020988464f, +0.7678109407424927f, 0.8085659146308899f, 0.8054336905479431f, 0.8516414165496826f, 0.9514042139053345f, 0.399980753660202f, 0.8418750762939453f, 0.19323118031024933f, +0.3814204931259155f, 0.38941314816474915f, 0.10128913819789886f, 0.7301215529441833f, 0.43767091631889343f, 0.31926798820495605f, 0.18015216290950775f, 0.2161940187215805f, +0.15663784742355347f, 0.9481244683265686f, 0.2548125684261322f, 0.18101735413074493f, 0.048459623008966446f, 0.7322942018508911f, 0.8113926649093628f, 0.7409518957138062f, +0.2561960816383362f, 0.0036534692626446486f, 0.0074430485256016254f, 0.16114257276058197f, 0.8115869760513306f, 0.19553042948246002f, 0.44845542311668396f, 0.7302870154380798f, +0.2671283483505249f, 0.3387623429298401f, 0.7116662859916687f, 0.39683079719543457f, 0.3906329274177551f, 0.7642868161201477f, 0.8383406400680542f, 0.6529095768928528f, +0.21841251850128174f, 0.4570530951023102f, 0.649882972240448f, 0.4060545861721039f, 0.12225787341594696f, 0.8986129760742188f, 0.7477558851242065f, 0.9233649969100952f, +0.5561463832855225f, 0.5299481153488159f, 0.25158193707466125f, 0.40054067969322205f, 0.8130883574485779f, 0.9000774621963501f, 0.8956478238105774f, 0.15976721048355103f, +0.11559862643480301f, 0.7816242575645447f, 0.2238849699497223f, 0.059175483882427216f, 0.02593705989420414f, 0.9798725247383118f, 0.8630113005638123f, 0.5946632027626038f, +0.3270162045955658f, 0.6598746180534363f, 0.4395730495452881f, 0.5281118154525757f, 0.3040635287761688f, 0.42277026176452637f, 0.41819238662719727f, 0.4835304021835327f, +0.8049959540367126f, 0.5482285618782043f, 0.03360256552696228f, 0.4310809373855591f, 0.3065752685070038f, 0.8323973417282104f, 0.5008170008659363f, 0.9077177047729492f, +0.9143469929695129f, 0.9554517865180969f, 0.5267784595489502f, 0.471963107585907f, 0.36863693594932556f, 0.8857070803642273f, 0.47662463784217834f, 0.5948560237884521f, +0.14174111187458038f, 0.5343092679977417f, 0.002266878494992852f, 0.9040429592132568f, 0.16995364427566528f, 0.663605809211731f, 0.8657029867172241f, 0.03585032746195793f, +0.3350223898887634f, 0.6782559156417847f, 0.17074351012706757f, 0.5769646167755127f, 0.9065242409706116f, 0.7574099898338318f, 0.3718809485435486f, 0.2575570344924927f, +0.9845151901245117f, 0.8677229285240173f, 0.8530397415161133f, 0.4874482750892639f, 0.11350128054618835f, 0.6897880434989929f, 0.6846539378166199f, 0.43442240357398987f, +0.945733368396759f, 0.8453440070152283f, 0.9616429209709167f, 0.11384674161672592f, 0.2493453472852707f, 0.8480675220489502f, 0.833527147769928f, 0.835878849029541f, +0.789342999458313f, 0.2103295624256134f, 0.1478305459022522f, 0.17373929917812347f, 0.5214487910270691f, 0.6594905853271484f, 0.5636882781982422f, 0.21764503419399261f, +0.40220576524734497f, 0.8325750231742859f, 0.47666800022125244f, 0.7208366394042969f, 0.9633928537368774f, 0.31721052527427673f, 0.7862592935562134f, 0.1927807331085205f, +0.9481651782989502f, 0.7259020805358887f, 0.5727611184120178f, 0.3671380579471588f, 0.36212578415870667f, 0.394866019487381f, 0.18779034912586212f, 0.6736065149307251f, +0.5179552435874939f, 0.2881609797477722f, 0.2995147705078125f, 0.23230192065238953f, 0.46498915553092957f, 0.6851158142089844f, 0.3285496234893799f, 0.9531189203262329f, +0.9376148581504822f, 0.8338908553123474f, 0.894860029220581f, 0.5462207794189453f, 0.9030287861824036f, 0.514670193195343f, 0.9220023155212402f, 0.21256600320339203f, +0.16951854526996613f, 0.5446107387542725f, 0.8475713729858398f, 0.3646290600299835f, 0.9923233985900879f, 0.35749301314353943f, 0.05060947313904762f, 0.07440236210823059f, +0.5903186202049255f, 0.07611832022666931f, 0.7891684174537659f, 0.4165467917919159f, 0.8562824130058289f, 0.4273848533630371f, 0.06152566894888878f, 0.4197486937046051f, +0.9732921719551086f, 0.8623043298721313f, 0.5333186388015747f, 0.2628508508205414f, 0.3637881875038147f, 0.9259710907936096f, 0.5370128154754639f, 0.8624117374420166f, +0.8220005035400391f, 0.9940534830093384f, 0.05793985351920128f, 0.6502689719200134f, 0.42209210991859436f, 0.7822222113609314f, 0.8949398398399353f, 0.40254974365234375f, +0.8964766263961792f, 0.8164166212081909f, 0.7002978324890137f, 0.8186649680137634f, 0.29365092515945435f, 0.7294096350669861f, 0.874141275882721f, 0.9275861978530884f, +0.842782199382782f, 0.7879704833030701f, 0.46593981981277466f, 0.9638135433197021f, 0.7772975564002991f, 0.22403670847415924f, 0.8113394379615784f, 0.03450383245944977f, +0.09057919681072235f, 0.5024442672729492f, 0.39362332224845886f, 0.6229113936424255f, 0.1155877634882927f, 0.4239373207092285f, 0.5425839424133301f, 0.2928585708141327f, +0.8539450168609619f, 0.41937440633773804f, 0.13340549170970917f, 0.8897327780723572f, 0.5145988464355469f, 0.9380345344543457f, 0.7444042563438416f, 0.7215725183486938f, +0.902769923210144f, 0.9699739813804626f, 0.34040433168411255f, 0.5498762726783752f, 0.24392995238304138f, 0.7741461396217346f, 0.45956769585609436f, 0.9302864074707031f, +0.3905089199542999f, 0.6643845438957214f, 0.40086767077445984f, 0.6490750908851624f, 0.9787843227386475f, 0.4338560700416565f, 0.6886391043663025f, 0.40331578254699707f, +0.17090477049350739f, 0.3822140693664551f, 0.4659942090511322f, 0.24876300990581512f, 0.003109379205852747f, 0.5636481642723083f, 0.8364142179489136f, 0.6073921322822571f, +0.5111057758331299f, 0.25947582721710205f, 0.18419060111045837f, 0.9107294082641602f, 0.22529052197933197f, 0.5474758744239807f, 0.49324047565460205f, 0.8607977628707886f, +0.2635978162288666f, 0.572068989276886f, 0.5574241876602173f, 0.11985413730144501f, 0.935003399848938f, 0.5093207955360413f, 0.29598522186279297f, 0.17425067722797394f, +0.5570917129516602f, 0.9492963552474976f, 0.9716888070106506f, 0.7972239851951599f, 0.06839033216238022f, 0.6385146379470825f, 0.33058813214302063f, 0.4130968153476715f, +0.5782682299613953f, 0.5090876817703247f, 0.6993298530578613f, 0.8476294875144958f, 0.03531721606850624f, 0.20594345033168793f, 0.4206443428993225f, 0.30785760283470154f, +0.17403742671012878f, 0.5137488842010498f, 0.057210784405469894f, 0.11691907793283463f, 0.11476697027683258f, 0.09943987429141998f, 0.38549453020095825f, 0.584226131439209f, +0.9718912839889526f, 0.76457679271698f, 0.14563991129398346f, 0.17349952459335327f, 0.9088607430458069f, 0.4144786298274994f, 0.6274221539497375f, 0.19264592230319977f, +0.4925897717475891f, 0.9839274883270264f, 0.8766404390335083f, 0.24805927276611328f, 0.5756791830062866f, 0.018433380872011185f, 0.27865538001060486f, 0.6270867586135864f, +0.03016280010342598f, 0.7577951550483704f, 0.9548195004463196f, 0.7672468423843384f, 0.762125551700592f, 0.4231509864330292f, 0.4281834065914154f, 0.34565800428390503f, +0.7102309465408325f, 0.48849359154701233f, 0.12874631583690643f, 0.7028597593307495f, 0.7143552303314209f, 0.4919443130493164f, 0.29798951745033264f, 0.05977911129593849f, +0.3337843716144562f, 0.872505247592926f, 0.5492419600486755f, 0.715897262096405f, 0.07099982351064682f, 0.6579394340515137f, 0.4387541711330414f, 0.7458181977272034f, +0.9377562999725342f, 0.5084964036941528f, 0.5052834749221802f, 0.42792758345603943f, 0.6310713291168213f, 0.2291368544101715f, 0.036524202674627304f, 0.47499680519104004f, +0.5839069485664368f, 0.3040829002857208f, 0.5352731347084045f, 0.9429923295974731f, 0.030197469517588615f, 0.520656168460846f, 0.8171201944351196f, 0.6128524541854858f, +0.32454612851142883f, 0.536297619342804f, 0.13308773934841156f, 0.6012122631072998f, 0.14250776171684265f, 0.7318201661109924f, 0.870216429233551f, 0.3008359968662262f, +0.6645738482475281f, 0.6487786769866943f, 0.42854544520378113f, 0.009441751055419445f, 0.1842162162065506f, 0.7532262206077576f, 0.5578020811080933f, 0.8619926571846008f, +0.4865431487560272f, 0.5634554028511047f, 0.9166261553764343f, 0.7623153328895569f, 0.6381914615631104f, 0.5762360692024231f, 0.5835548043251038f, 0.12911178171634674f, +0.8762557506561279f, 0.6140825748443604f, 0.44769683480262756f, 0.40269356966018677f, 0.2720124125480652f, 0.08659665286540985f, 0.7844828963279724f, 0.9448928236961365f, +0.8198423981666565f, 0.1992732733488083f, 0.22337165474891663f, 0.8354431986808777f, 0.9671014547348022f, 0.20708343386650085f, 0.8696221709251404f, 0.4380056858062744f, +0.6285136938095093f, 0.5150378942489624f, 0.6589917540550232f, 0.22535215318202972f, 0.4937838613986969f, 0.9835681915283203f, 0.33521050214767456f, 0.7720932960510254f, +0.6912242770195007f, 0.4273936450481415f, 0.8148806691169739f, 0.5573092699050903f, 0.20583216845989227f, 0.9298247694969177f, 0.7527887225151062f, 0.33079373836517334f, +0.1115109771490097f, 0.09755820035934448f, 0.02338903583586216f, 0.6335987448692322f, 0.619392454624176f, 0.506381094455719f, 0.1949152797460556f, 0.7958926558494568f, +0.6133884191513062f, 0.41031414270401f, 0.566209614276886f, 0.8065422773361206f, 0.9630222916603088f, 0.4197615385055542f, 0.32493433356285095f, 0.33756110072135925f, +0.6925292611122131f, 0.7020444273948669f, 0.49486443400382996f, 0.009436212480068207f, 0.2697892189025879f, 0.8473039269447327f, 0.9739410877227783f, 0.43451449275016785f, +0.7231351733207703f, 0.32980868220329285f, 0.08304513990879059f, 0.21246759593486786f, 0.7827677130699158f, 0.6793961524963379f, 0.27789390087127686f, 0.6515805125236511f, +0.30899757146835327f, 0.12458716332912445f, 0.16556775569915771f, 0.6241073608398438f, 0.26561567187309265f, 0.3170701861381531f, 0.6746702790260315f, 0.8307318091392517f, +0.13776826858520508f, 0.6612840890884399f, 0.9233661890029907f, 0.6830783486366272f, 0.13112179934978485f, 0.5294524431228638f, 0.08519455790519714f, 0.11654596775770187f, +0.9384016394615173f, 0.6104586124420166f, 0.783136785030365f, 0.4905274510383606f, 0.10477613657712936f, 0.16677133738994598f, 0.4091341495513916f, 0.8473148345947266f, +0.8990002870559692f, 0.7024690508842468f, 0.006235724315047264f, 0.40851497650146484f, 0.19762283563613892f, 0.4844273328781128f, 0.5029885172843933f, 0.06899238377809525f, +0.6717476844787598f, 0.03977928310632706f, 0.7519128322601318f, 0.018612250685691833f, 0.07369022071361542f, 0.815853476524353f, 0.6829754114151001f, 0.42290201783180237f, +0.5344982147216797f, 0.02819162793457508f, 0.7782127261161804f, 0.10368649661540985f, 0.010795988142490387f, 0.7066565155982971f, 0.4690339267253876f, 0.6024826169013977f, +0.21200816333293915f, 0.5705068707466125f, 0.16368728876113892f, 0.8736882209777832f, 0.5484930872917175f, 0.6031513214111328f, 0.5348632335662842f, 0.9923921227455139f, +0.23387327790260315f, 0.09125056862831116f, 0.17903444170951843f, 0.8620765209197998f, 0.2888704240322113f, 0.3400005102157593f, 0.1133955642580986f, 0.9959433078765869f, +0.3782609701156616f, 0.7665411233901978f, 0.8145862221717834f, 0.8785721063613892f, 0.8934981226921082f, 0.2333846539258957f, 0.2562459111213684f, 0.2151322364807129f, +0.8931370377540588f, 0.35676294565200806f, 0.43094155192375183f, 0.13103435933589935f, 0.170680969953537f, 0.20717847347259521f, 0.7420116066932678f, 0.2971305549144745f, +0.04461777210235596f, 0.0756760910153389f, 0.1892947405576706f, 0.5164089202880859f, 0.6756570339202881f, 0.20494455099105835f, 0.8172062039375305f, 0.03968081250786781f, +0.03194775804877281f, 0.8893592953681946f, 0.018277760595083237f, 0.400881290435791f, 0.39801689982414246f, 0.5318244099617004f, 0.3861708343029022f, 0.3649846315383911f, +0.46578967571258545f, 0.037873122841119766f, 0.6699312925338745f, 0.31698206067085266f, 0.23354633152484894f, 0.6014474034309387f, 0.2458360344171524f, 0.12574979662895203f, +0.2875097692012787f, 0.7952837347984314f, 0.307013601064682f, 0.05027666687965393f, 0.006890789605677128f, 0.2658260762691498f, 0.24283510446548462f, 0.7702771425247192f, +0.2174188792705536f, 0.8674408793449402f, 0.4507789611816406f, 0.35915055871009827f, 0.11029992997646332f, 0.19593364000320435f, 0.022678887471556664f, 0.993559718132019f, +0.9592623710632324f, 0.9918233752250671f, 0.33801859617233276f, 0.36786943674087524f, 0.7165727615356445f, 0.6309090852737427f, 0.17471499741077423f, 0.30966201424598694f, +0.12497233599424362f, 0.14096595346927643f, 0.60985267162323f, 0.8583078384399414f, 0.005631584208458662f, 0.48651623725891113f, 0.8810874819755554f, 0.65977543592453f, +0.9864476323127747f, 0.6028304100036621f, 0.550166130065918f, 0.5557876229286194f, 0.8509979248046875f, 0.017861437052488327f, 0.6738723516464233f, 0.1657181680202484f, +0.04412328824400902f, 0.22506994009017944f, 0.4617314636707306f, 0.6902389526367188f, 0.33593863248825073f, 0.0016350859077647328f, 0.21240103244781494f, 0.4124610722064972f, +0.6588312983512878f, 0.6476274132728577f, 0.7231025099754333f, 0.514423131942749f, 0.8496972322463989f, 0.7744218707084656f, 0.5249308943748474f, 0.24148499965667725f, +0.8847430944442749f, 0.23325291275978088f, 0.320156455039978f, 0.35404419898986816f, 0.38546404242515564f, 0.5105699896812439f, 0.7315546870231628f, 0.760041356086731f, +0.6874627470970154f, 0.9866694808006287f, 0.13506117463111877f, 0.30883634090423584f, 0.9282501339912415f, 0.42860397696495056f, 0.476936012506485f, 0.7044151425361633f, +0.5887742638587952f, 0.15880799293518066f, 0.3937407433986664f, 0.4037875235080719f, 0.8967541456222534f, 0.7732842564582825f, 0.06408457458019257f, 0.23670265078544617f, +0.0877939909696579f, 0.5976595282554626f, 0.5903956890106201f, 0.21228370070457458f, 0.9995285868644714f, 0.41181227564811707f, 0.1670185625553131f, 0.21304142475128174f, +0.22728842496871948f, 0.2714166045188904f, 0.7553616762161255f, 0.551486611366272f, 0.2046627402305603f, 0.846795916557312f, 0.8350310921669006f, 0.684996485710144f, +0.15570123493671417f, 0.2804645597934723f, 0.6136696934700012f, 0.48009786009788513f, 0.5499900579452515f, 0.6619934439659119f, 0.6340556144714355f, 0.025071563199162483f, +0.29822707176208496f, 0.15812526643276215f, 0.9931057095527649f, 0.802044153213501f, 0.5353431105613708f, 0.5953086614608765f, 0.42122605443000793f, 0.21052047610282898f, +0.53802490234375f, 0.5434714555740356f, 0.024816716089844704f, 0.38065943121910095f, 0.9904264211654663f, 0.472024530172348f, 0.02938946895301342f, 0.28626489639282227f, +0.5273945331573486f, 0.011019972153007984f, 0.3118012845516205f, 0.26484236121177673f, 0.6423646807670593f, 0.0490897111594677f, 0.1492765247821808f, 0.7200826406478882f, +0.6249803900718689f, 0.7914420366287231f, 0.6799644231796265f, 0.348532497882843f, 0.30065640807151794f, 0.7958629131317139f, 0.33070382475852966f, 0.199365496635437f, +0.1662326455116272f, 0.46034976840019226f, 0.4098464548587799f, 0.37000125646591187f, 0.7133736610412598f, 0.21002687513828278f, 0.5940396785736084f, 0.7189812064170837f, +0.18427921831607819f, 0.9438139200210571f, 0.9553852081298828f, 0.2478598952293396f, 0.5953249335289001f, 0.3659074306488037f, 0.8684502243995667f, 0.2925896942615509f, +0.6494303345680237f, 0.02684422954916954f, 0.7100580930709839f, 0.13443322479724884f, 0.4831313192844391f, 0.363763689994812f, 0.8345851898193359f, 0.2071797400712967f, +0.04810374975204468f, 0.9444135427474976f, 0.6323080658912659f, 0.05765993520617485f, 0.8958672881126404f, 0.23337037861347198f, 0.9912437796592712f, 0.1495216339826584f, +0.264435350894928f, 0.4547335207462311f, 0.5704196691513062f, 0.5487553477287292f, 0.7930197715759277f, 0.17926926910877228f, 0.08991242200136185f, 0.9452490210533142f, +0.9290007948875427f, 0.3234957158565521f, 0.37982532382011414f, 0.39459720253944397f, 0.301223486661911f, 0.9375319480895996f, 0.8206888437271118f, 0.9727630615234375f, +0.611214816570282f, 0.06593701988458633f, 0.24722114205360413f, 0.9533549547195435f, 0.04941411688923836f, 0.26403751969337463f, 0.46119049191474915f, 0.18580438196659088f, +0.47764673829078674f, 0.8033403754234314f, 0.9705492854118347f, 0.19626666605472565f, 0.7510595321655273f, 0.885424017906189f, 0.73375403881073f, 0.7072511315345764f, +0.16019101440906525f, 0.9690775275230408f, 0.22133073210716248f, 0.9611921310424805f, 0.5884049534797668f, 0.7877441048622131f, 0.831277072429657f, 0.4384969472885132f, +0.3740001618862152f, 0.21862611174583435f, 0.7436392307281494f, 0.7104809284210205f, 0.5661182403564453f, 0.7578932046890259f, 0.16523897647857666f, 0.5589917898178101f, +0.6566990613937378f, 0.1502561867237091f, 0.9694215655326843f, 0.9453012943267822f, 0.454315185546875f, 0.08064443618059158f, 0.28907233476638794f, 0.38741448521614075f, +0.26804882287979126f, 0.8090448975563049f, 0.837427020072937f, 0.8209953904151917f, 0.24415472149848938f, 0.5123798847198486f, 0.23130996525287628f, 0.3109857141971588f, +0.5874025821685791f, 0.8122249245643616f, 0.6138858199119568f, 0.9131918549537659f, 0.720543384552002f, 0.14866620302200317f, 0.7747291326522827f, 0.7065228819847107f, +0.6844115257263184f, 0.054515291005373f, 0.11421189457178116f, 0.5360361337661743f, 0.3462434709072113f, 0.34481996297836304f, 0.9055117964744568f, 0.037947311997413635f, +0.4069212079048157f, 0.48536577820777893f, 0.4833521246910095f, 0.36308524012565613f, 0.177108496427536f, 0.9818484783172607f, 0.7414144277572632f, 0.8787909746170044f, +0.8264497518539429f, 0.31474894285202026f, 0.3906242251396179f, 0.8786593675613403f, 0.7897900342941284f, 0.5529066920280457f, 0.3412862718105316f, 0.47457656264305115f, +0.7719335556030273f, 0.6737387776374817f, 0.5963664650917053f, 0.3988725543022156f, 0.36601245403289795f, 0.18947634100914001f, 0.8297982215881348f, 0.1695348024368286f, +0.08486897498369217f, 0.25573015213012695f, 0.5914816856384277f, 0.5558606386184692f, 0.4108526408672333f, 0.5085985660552979f, 0.9231820702552795f, 0.5241642594337463f, +0.16787108778953552f, 0.02173679880797863f, 0.653664231300354f, 0.21234919130802155f, 0.3533603250980377f, 0.16377975046634674f, 0.89167320728302f, 0.3090333938598633f, +0.6194382905960083f, 0.5261535048484802f, 0.08727479726076126f, 0.12884995341300964f, 0.49121537804603577f, 0.23704129457473755f, 0.67491614818573f, 0.9554489254951477f, +0.43561050295829773f, 0.8539239764213562f, 0.20618601143360138f, 0.1063900962471962f, 0.09278889745473862f, 0.48468583822250366f, 0.00047219786210916936f, 0.3914828300476074f, +0.48617660999298096f, 0.5465205907821655f, 0.7628607749938965f, 0.5491355061531067f, 0.6934079527854919f, 0.3005061149597168f, 0.13648992776870728f, 0.0063376897014677525f, +0.6073758602142334f, 0.031721413135528564f, 0.7700510025024414f, 0.49631229043006897f, 0.29865702986717224f, 0.9784393310546875f, 0.479838490486145f, 0.2603704631328583f, +0.08102956414222717f, 0.4882776737213135f, 0.3069089651107788f, 0.1714426577091217f, 0.9061489105224609f, 0.3275659680366516f, 0.21527421474456787f, 0.7520322203636169f, +0.09361652284860611f, 0.5791473984718323f, 0.3471752107143402f, 0.966849684715271f, 0.8650578260421753f, 0.49381521344184875f, 0.05164608731865883f, 0.4209476113319397f, +0.8461459279060364f, 0.5890759229660034f, 0.6462993025779724f, 0.6047152876853943f, 0.44116008281707764f, 0.75663161277771f, 0.4487467408180237f, 0.3414299786090851f, +0.515078604221344f, 0.6455574631690979f, 0.3447525203227997f, 0.5569505095481873f, 0.655859649181366f, 0.7710274457931519f, 0.05328691378235817f, 0.8609042167663574f, +0.08464903384447098f, 0.7089830040931702f, 0.473885178565979f, 0.12708288431167603f, 0.8051374554634094f, 0.5575981736183167f, 0.27343612909317017f, 0.6281366944313049f, +0.6483380198478699f, 0.0633869394659996f, 0.3320918381214142f, 0.530802309513092f, 0.5899521112442017f, 0.24680952727794647f, 0.11599552631378174f, 0.5480436682701111f, +0.9482818841934204f, 0.8723905086517334f, 0.833685040473938f, 0.5077316164970398f, 0.0888238325715065f, 0.6677943468093872f, 0.20316162705421448f, 0.35759517550468445f, +0.42559507489204407f, 0.51739501953125f, 0.09014572203159332f, 0.6989580988883972f, 0.6250588297843933f, 0.07317379862070084f, 0.4308980703353882f, 0.7387874722480774f, +0.9895455241203308f, 0.22955527901649475f, 0.23798322677612305f, 0.8228382468223572f, 0.008995474316179752f, 0.45365267992019653f, 0.942065954208374f, 0.27948999404907227f, +0.4457786977291107f, 0.358839213848114f, 0.6702169179916382f, 0.9816985726356506f, 0.16913099586963654f, 0.6046497821807861f, 0.8526592254638672f, 0.24290220439434052f, +0.16495640575885773f, 0.3740544021129608f, 0.7702560424804688f, 0.31072840094566345f, 0.45540276169776917f, 0.2709084451198578f, 0.6133362054824829f, 0.8913413286209106f, +0.7728509902954102f, 0.9219152331352234f, 0.8590641021728516f, 0.20142000913619995f, 0.7495988011360168f, 0.33090370893478394f, 0.6487168073654175f, 0.9262773990631104f, +0.8809283375740051f, 0.2234848290681839f, 0.8347007036209106f, 0.577395498752594f, 0.4118899405002594f, 0.45486295223236084f, 0.2784463167190552f, 0.3968351483345032f, +0.9904143810272217f, 0.695062518119812f, 0.59722900390625f, 0.4007198214530945f, 0.18938544392585754f, 0.4244382679462433f, 0.28564104437828064f, 0.30589088797569275f, +0.9851652383804321f, 0.08359633386135101f, 0.048736292868852615f, 0.10531127452850342f, 0.2647840976715088f, 0.7737843990325928f, 0.6581946015357971f, 0.022057030349969864f, +0.5729715824127197f, 0.27720531821250916f, 0.2668572962284088f, 0.017281433567404747f, 0.9590826034545898f, 0.5033671855926514f, 0.35580548644065857f, 0.17730902135372162f, +0.6056245565414429f, 0.31728070974349976f, 0.4800446033477783f, 0.28866899013519287f, 0.7521399855613708f, 0.8306640982627869f, 0.4439472258090973f, 0.44413506984710693f, +0.7319558262825012f, 0.7637193202972412f, 0.30010735988616943f, 0.008586876094341278f, 0.6740075945854187f, 0.8685951828956604f, 0.41541165113449097f, 0.5898427963256836f, +0.37521156668663025f, 0.15266156196594238f, 0.8615013957023621f, 0.17838294804096222f, 0.9945680499076843f, 0.8615732192993164f, 0.10690975189208984f, 0.8562373518943787f, +0.5019879937171936f, 0.19708351790905f, 0.8317972421646118f, 0.30342867970466614f, 0.8689720630645752f, 0.4053124785423279f, 0.6236568689346313f, 0.0182744599878788f, +0.3289318382740021f, 0.7354621887207031f, 0.10539302974939346f, 0.5398092269897461f, 0.16172343492507935f, 0.6348288655281067f, 0.6172609925270081f, 0.05078096315264702f, +0.07129337638616562f, 0.8693591952323914f, 0.5621881484985352f, 0.9833127856254578f, 0.27217692136764526f, 0.8644669055938721f, 0.5531094074249268f, 0.6067617535591125f, +0.6878650784492493f, 0.23314911127090454f, 0.35681095719337463f, 0.31704506278038025f, 0.09264709055423737f, 0.6402730941772461f, 0.9315666556358337f, 0.20741727948188782f, +0.44989341497421265f, 0.9914031028747559f, 0.5582414269447327f, 0.22221310436725616f, 0.08350493013858795f, 0.25730037689208984f, 0.5294616222381592f, 0.6465800404548645f, +0.20847541093826294f, 0.9817613363265991f, 0.389283686876297f, 0.43614667654037476f, 0.964838445186615f, 0.929386556148529f, 0.9325239658355713f, 0.9398666024208069f, +0.7680257558822632f, 0.6447837948799133f, 0.5753151774406433f, 0.05352732166647911f, 0.38811981678009033f, 0.4964083433151245f, 0.7732695937156677f, 0.9503843784332275f, +0.17978057265281677f, 0.3560786247253418f, 0.5770525336265564f, 0.8349164724349976f, 0.3411196768283844f, 0.20170839130878448f, 0.9483910202980042f, 0.4998607933521271f, +0.21397924423217773f, 0.8570907711982727f, 0.4994219243526459f, 0.19376422464847565f, 0.9165491461753845f, 0.8302043676376343f, 0.6414017081260681f, 0.5147433876991272f, +0.0405411571264267f, 0.4212237298488617f, 0.98857182264328f, 0.3012082874774933f, 0.35751864314079285f, 0.40620940923690796f, 0.6585009694099426f, 0.7975993156433105f, +0.8537358641624451f, 0.9124047756195068f, 0.8952430486679077f, 0.43495339155197144f, 0.7895290851593018f, 0.5267171263694763f, 0.42987725138664246f, 0.34337180852890015f, +0.6422916054725647f, 0.4066201448440552f, 0.6696966886520386f, 0.6833367347717285f, 0.8398280739784241f, 0.15758700668811798f, 0.5718916654586792f, 0.9654130339622498f, +0.03319607675075531f, 0.15612925589084625f, 0.1300654113292694f, 0.06299212574958801f, 0.7986779808998108f, 0.3429484963417053f, 0.40371155738830566f, 0.4719697833061218f, +0.40535977482795715f, 0.0019219237146899104f, 0.678020179271698f, 0.512027382850647f, 0.31438878178596497f, 0.829369306564331f, 0.27044785022735596f, 0.47676077485084534f, +0.06388963758945465f, 0.5193498134613037f, 0.49714556336402893f, 0.371246874332428f, 0.09444550424814224f, 0.1821623593568802f, 0.9490556716918945f, 0.0245664045214653f, +0.7177625298500061f, 0.8291292786598206f, 0.5853493809700012f, 0.820962131023407f, 0.812204122543335f, 0.692550778388977f, 0.2973986268043518f, 0.6654303073883057f, +0.8262457847595215f, 0.17808495461940765f, 0.4437533915042877f, 0.6904022097587585f, 0.6829169988632202f, 0.885553777217865f, 0.2007569521665573f, 0.6481015682220459f, +0.03136071935296059f, 0.16296809911727905f, 0.18220701813697815f, 0.6288483142852783f, 0.9715272188186646f, 0.19024278223514557f, 0.16491304337978363f, 0.5718920826911926f, +0.8163048028945923f, 0.5597502589225769f, 0.6913527846336365f, 0.2460063397884369f, 0.7966251969337463f, 0.906544029712677f, 0.7958733439445496f, 0.14264142513275146f, +0.8805457353591919f, 0.30135154724121094f, 0.956951916217804f, 0.27867215871810913f, 0.44157737493515015f, 0.05476512759923935f, 0.4251956343650818f, 0.7601751089096069f, +0.8493848443031311f, 0.23035381734371185f, 0.36523428559303284f, 0.42113152146339417f, 0.8254643678665161f, 0.556628406047821f, 0.2909104824066162f, 0.22396141290664673f, +0.930821418762207f, 0.7102344036102295f, 0.42831504344940186f, 0.4448467195034027f, 0.38418179750442505f, 0.7501004934310913f, 0.4051344692707062f, 0.5263845920562744f, +0.06554587185382843f, 0.2847585678100586f, 0.19857342541217804f, 0.8495293259620667f, 0.8505091667175293f, 0.36818230152130127f, 0.40449899435043335f, 0.9077773690223694f, +0.966108500957489f, 0.5092926025390625f, 0.5033286809921265f, 0.8498461842536926f, 0.09254108369350433f, 0.6914638876914978f, 0.7890123724937439f, 0.16743135452270508f, +0.7180595993995667f, 0.6853142380714417f, 0.9999129772186279f, 0.28772708773612976f, 0.998946487903595f, 0.5115055441856384f, 0.31338629126548767f, 0.20593388378620148f, +0.9760140776634216f, 0.4716789126396179f, 0.2891062796115875f, 0.8020605444908142f, 0.8422637581825256f, 0.2536155581474304f, 0.7118483781814575f, 0.631348729133606f, +0.10337661951780319f, 0.27474552392959595f, 0.6922121644020081f, 0.1004943922162056f, 0.35608676075935364f, 0.9562610387802124f, 0.7573090195655823f, 0.7691593170166016f, +0.3969488739967346f, 0.7459669709205627f, 0.44367894530296326f, 0.1318325400352478f, 0.1254558116197586f, 0.574469268321991f, 0.5995946526527405f, 0.6003510355949402f, +0.055590447038412094f, 0.7145459651947021f, 0.645928144454956f, 0.3884691298007965f, 0.09979450702667236f, 0.5482760071754456f, 0.5396751761436462f, 0.3694385886192322f, +0.34850358963012695f, 0.9016052484512329f, 0.6772761344909668f, 0.2932179570198059f, 0.581640899181366f, 0.8505080938339233f, 0.7472463250160217f, 0.8005712032318115f, +0.2047225832939148f, 0.01041285041719675f, 0.010699586942791939f, 0.989941418170929f, 0.7698789834976196f, 0.17148800194263458f, 0.26784709095954895f, 0.9748218655586243f, +0.3403284549713135f, 0.789061427116394f, 0.9396002292633057f, 0.3456016182899475f, 0.5914620757102966f, 0.12289833277463913f, 0.8950477838516235f, 0.8510972857475281f, +0.12202072143554688f, 0.4443008005619049f, 0.7209018468856812f, 0.7421723008155823f, 0.12685246765613556f, 0.09214598685503006f, 0.17733584344387054f, 0.33213111758232117f, +0.5724008679389954f, 0.8697952032089233f, 0.5240011215209961f, 0.7983791828155518f, 0.25642046332359314f, 0.8032141327857971f, 0.10910170525312424f, 0.2203977108001709f, +0.14404265582561493f, 0.3310619294643402f, 0.3676661252975464f, 0.7415041923522949f, 0.8415567278862f, 0.9114106893539429f, 0.8330845832824707f, 0.5821347236633301f, +0.1732570081949234f, 0.5269287824630737f, 0.06875737011432648f, 0.8193994760513306f, 0.8354671597480774f, 0.3111630380153656f, 0.006763930898159742f, 0.2555614709854126f, +0.7732967138290405f, 0.9787930846214294f, 0.26210328936576843f, 0.6778006553649902f, 0.3848906457424164f, 0.9328038096427917f, 0.8023582696914673f, 0.22641190886497498f, +0.06193743273615837f, 0.38001877069473267f, 0.1490185707807541f, 0.23172159492969513f, 0.3815241754055023f, 0.18314193189144135f, 0.9381976127624512f, 0.6701768636703491f, +0.2521166503429413f, 0.18326295912265778f, 0.9979270696640015f, 0.6232414841651917f, 0.769061267375946f, 0.4582376778125763f, 0.5250652432441711f, 0.25977185368537903f, +0.5554300546646118f, 0.4324221611022949f, 0.9772067070007324f, 0.3220129609107971f, 0.7349507808685303f, 0.5669749975204468f, 0.5742639303207397f, 0.7912236452102661f, +0.10865636169910431f, 0.5793766379356384f, 0.3239891827106476f, 0.9840477705001831f, 0.252682626247406f, 0.3281051814556122f, 0.5985051989555359f, 0.006559949368238449f, +0.1264721006155014f, 0.2900770604610443f, 0.020832113921642303f, 0.9202184677124023f, 0.09535840898752213f, 0.8696869015693665f, 0.3417384624481201f, 0.6670767664909363f, +0.4025699496269226f, 0.9209638237953186f, 0.1574922651052475f, 0.6629573106765747f, 0.04612533748149872f, 0.298318088054657f, 0.22791685163974762f, 0.32500484585762024f, +0.4735568165779114f, 0.1360524743795395f, 0.24858547747135162f, 0.5013704895973206f, 0.2861195206642151f, 0.2066604197025299f, 0.3411915898323059f, 0.31057417392730713f, +0.6231677532196045f, 0.24595032632350922f, 0.029111184179782867f, 0.7430549263954163f, 0.6582192182540894f, 0.9767786264419556f, 0.05653078481554985f, 0.5962661504745483f, +0.32799097895622253f, 0.7924435138702393f, 0.7258055210113525f, 0.01811285689473152f, 0.49313804507255554f, 0.8726581931114197f, 0.8522465229034424f, 0.25358203053474426f, +0.8814881443977356f, 0.05418939143419266f, 0.5645227432250977f, 0.7705689668655396f, 0.25818467140197754f, 0.8954405188560486f, 0.5584715008735657f, 0.06394153833389282f, +0.012501776218414307f, 0.5822969079017639f, 0.23820681869983673f, 0.18296615779399872f, 0.6027433276176453f, 0.8194631338119507f, 0.6728438138961792f, 0.8558380603790283f, +0.5041235685348511f, 0.35762742161750793f, 0.5714879631996155f, 0.35302820801734924f, 0.8884764909744263f, 0.5279331803321838f, 0.550813615322113f, 0.6944794654846191f, +0.150870680809021f, 0.27661314606666565f, 0.45505720376968384f, 0.05796796455979347f, 0.5936659574508667f, 0.8607522249221802f, 0.9410210847854614f, 0.07117196917533875f, +0.6800937056541443f, 0.5602547526359558f, 0.9087141156196594f, 0.04663322493433952f, 0.7080621719360352f, 0.9800638556480408f, 0.5147055387496948f, 0.20585830509662628f, +0.7372767329216003f, 0.11103887110948563f, 0.9118396043777466f, 0.3725014925003052f, 0.10639481246471405f, 0.21371540427207947f, 0.06717891991138458f, 0.2376765012741089f, +0.05195574462413788f, 0.9595634937286377f, 0.47980692982673645f, 0.6918528079986572f, 0.7048925757408142f, 0.7461848855018616f, 0.4934277832508087f, 0.4430857002735138f, +0.053938139230012894f, 0.4097277522087097f, 0.4607248902320862f, 0.30138787627220154f, 0.07348114252090454f, 0.08198711276054382f, 0.6028748154640198f, 0.342874139547348f, +0.6039133071899414f, 0.924285352230072f, 0.7445535659790039f, 0.025498198345303535f, 0.32840481400489807f, 0.3014020621776581f, 0.10744868963956833f, 0.534766435623169f, +0.31254443526268005f, 0.20012567937374115f, 0.3661649525165558f, 0.8052697777748108f, 0.0016074138693511486f, 0.11281079798936844f, 0.890802264213562f, 0.49972057342529297f, +0.1398940533399582f, 0.874254584312439f, 0.28417009115219116f, 0.4830402135848999f, 0.3873654007911682f, 0.27594250440597534f, 0.046213723719120026f, 0.8768733143806458f, +0.729935348033905f, 0.02188848704099655f, 0.7780598998069763f, 0.8864982724189758f, 0.11722417920827866f, 0.8784399032592773f, 0.18289344012737274f, 0.02013028785586357f, +0.42777004837989807f, 0.9902313351631165f, 0.666113018989563f, 0.8239928483963013f, 0.5139865875244141f, 0.2788376808166504f, 0.2621893882751465f, 0.3665785491466522f, +0.3485044538974762f, 0.8423803448677063f, 0.2738792300224304f, 0.9290550947189331f, 0.29674065113067627f, 0.535554051399231f, 0.8989009857177734f, 0.6611794829368591f, +0.6645896434783936f, 0.7697225213050842f, 0.7580803036689758f, 0.436178594827652f, 0.02465898171067238f, 0.618821382522583f, 0.42209872603416443f, 0.4411015808582306f, +0.19181136786937714f, 0.26399850845336914f, 0.18590448796749115f, 0.9101950526237488f, 0.675039529800415f, 0.8492478132247925f, 0.5006072521209717f, 0.9295083284378052f, +0.5160033702850342f, 0.9716203808784485f, 0.5764989852905273f, 0.8476373553276062f, 0.11591457575559616f, 0.6436840891838074f, 0.9668232798576355f, 0.1492445170879364f, +0.4813658893108368f, 0.4049540162086487f, 0.08102084696292877f, 0.3497243821620941f, 0.38816937804222107f, 0.31829187273979187f, 0.35673049092292786f, 0.452311247587204f, +0.5355079174041748f, 0.7305692434310913f, 0.4612129032611847f, 0.6909831166267395f, 0.3900843858718872f, 0.5505803227424622f, 0.9240542650222778f, 0.7282214760780334f, +0.703680694103241f, 0.5931693911552429f, 0.11602528393268585f, 0.9065160155296326f, 0.2584509551525116f, 0.19189098477363586f, 0.5747808218002319f, 0.635741114616394f, +0.2776206135749817f, 0.06962985545396805f, 0.5123680233955383f, 0.8801896572113037f, 0.6409173607826233f, 0.8368821740150452f, 0.038637757301330566f, 0.08785523474216461f, +0.7766885161399841f, 0.6817798614501953f, 0.6926640272140503f, 0.2396276593208313f, 0.9200131297111511f, 0.44580790400505066f, 0.7022364735603333f, 0.9029130935668945f, +0.9342692494392395f, 0.9977774024009705f, 0.15024127066135406f, 0.601391613483429f, 0.07098525762557983f, 0.49605488777160645f, 0.7917298078536987f, 0.2922031879425049f, +0.08922469615936279f, 0.26952967047691345f, 0.6465463042259216f, 0.9564558863639832f, 0.725755512714386f, 0.6829241514205933f, 0.20492590963840485f, 0.3242625594139099f, +0.7909817099571228f, 0.14447733759880066f, 0.4664060175418854f, 0.04785722866654396f, 0.8483087420463562f, 0.6731708645820618f, 0.23312225937843323f, 0.7983750104904175f, +0.9258161187171936f, 0.9234640598297119f, 0.0276456531137228f, 0.13269992172718048f, 0.9790228605270386f, 0.3925642967224121f, 0.9435615539550781f, 0.8288720846176147f, +0.8975656628608704f, 0.5856754183769226f, 0.7964468598365784f, 0.5681218504905701f, 0.04334249347448349f, 0.9879015684127808f, 0.8092640042304993f, 0.8080934882164001f, +0.9635249376296997f, 0.7516718506813049f, 0.6973423957824707f, 0.9299173951148987f, 0.7463095784187317f, 0.9516242742538452f, 0.2788097560405731f, 0.8242694735527039f, +0.8920149803161621f, 0.6012747287750244f, 0.3953979015350342f, 0.5942972898483276f, 0.579519510269165f, 0.8172877430915833f, 0.7196824550628662f, 0.5987420678138733f, +0.9036490321159363f, 0.5726607441902161f, 0.32628554105758667f, 0.991720974445343f, 0.3219039738178253f, 0.16202571988105774f, 0.7645185589790344f, 0.7974689602851868f, +0.038317590951919556f, 0.235117569565773f, 0.10225073993206024f, 0.309025377035141f, 0.2828369140625f, 0.7676451206207275f, 0.28046324849128723f, 0.4859888553619385f, +0.9844574332237244f, 0.38226863741874695f, 0.44761690497398376f, 0.10046818107366562f, 0.24271540343761444f, 0.2392687350511551f, 0.761222779750824f, 0.9974168539047241f, +0.4800969958305359f, 0.5812432169914246f, 0.9762976169586182f, 0.3169664442539215f, 0.4667968153953552f, 0.06165790557861328f, 0.6438472270965576f, 0.4262148439884186f, +0.1586076319217682f, 0.6469537019729614f, 0.9546976685523987f, 0.21160024404525757f, 0.24520722031593323f, 0.14949974417686462f, 0.23793305456638336f, 0.2441142052412033f, +0.5775181651115417f, 0.9097344279289246f, 0.4929521083831787f, 0.23500566184520721f, 0.23185761272907257f, 0.833324134349823f, 0.7460309863090515f, 0.7505491971969604f, +0.3046407103538513f, 0.8874509334564209f, 0.853240430355072f, 0.025824429467320442f, 0.5309377312660217f, 0.307349294424057f, 0.5040934085845947f, 0.1304577887058258f, +0.9912045001983643f, 0.6928184032440186f, 0.7040227055549622f, 0.6911301612854004f, 0.674720823764801f, 0.7519454956054688f, 0.09072022140026093f, 0.7128710746765137f, +0.6833035349845886f, 0.6449859142303467f, 0.4446164071559906f, 0.47474420070648193f, 0.7665147185325623f, 0.7403727769851685f, 0.9262488484382629f, 0.09575039148330688f, +0.35635673999786377f, 0.04360417276620865f, 0.4607813060283661f, 0.3270915150642395f, 0.7633643746376038f, 0.7560318112373352f, 0.20625296235084534f, 0.4600083827972412f, +0.27570945024490356f, 0.8549793362617493f, 0.7527502775192261f, 0.4305895268917084f, 0.9760633707046509f, 0.8598251938819885f, 0.16955287754535675f, 0.7169482707977295f, +0.9816792607307434f, 0.5196791887283325f, 0.7580168843269348f, 0.09181135147809982f, 0.07989317923784256f, 0.6020978093147278f, 0.025593236088752747f, 0.48240479826927185f, +0.4091431796550751f, 0.09109903872013092f, 0.28996536135673523f, 0.6527930498123169f, 0.3626387417316437f, 0.3713933229446411f, 0.6219826936721802f, 0.33843961358070374f, +0.8037163615226746f, 0.4506087899208069f, 0.36244678497314453f, 0.7659187316894531f, 0.6356000304222107f, 0.9835702180862427f, 0.2650213837623596f, 0.10134037584066391f, +0.037078019231557846f, 0.7523444294929504f, 0.7430980205535889f, 0.30491045117378235f, 0.3348901569843292f, 0.246844083070755f, 0.6933766603469849f, 0.6414551138877869f, +0.842724621295929f, 0.1551564633846283f, 0.136764258146286f, 0.12944911420345306f, 0.07798950374126434f, 0.978691816329956f, 0.6427578926086426f, 0.06786885112524033f, +0.19751879572868347f, 0.2986404299736023f, 0.3627510964870453f, 0.8792117238044739f, 0.7392432689666748f, 0.8451374769210815f, 0.4851287603378296f, 0.8972732424736023f, +0.19054876267910004f, 0.23617888987064362f, 0.7224985361099243f, 0.17184612154960632f, 0.22205528616905212f, 0.6684339046478271f, 0.5394150018692017f, 0.8624641299247742f, +0.16457132995128632f, 0.6549584865570068f, 0.5067428350448608f, 0.36541080474853516f, 0.48266589641571045f, 0.39009132981300354f, 0.8112714886665344f, 0.24261511862277985f, +0.1502278596162796f, 0.48709025979042053f, 0.3746710419654846f, 0.7987730503082275f, 0.5324534773826599f, 0.7606622576713562f, 0.0001364214112982154f, 0.7726423144340515f, +0.14793308079242706f, 0.06353259831666946f, 0.17096878588199615f, 0.1486288160085678f, 0.43677818775177f, 0.3762510418891907f, 0.7972798943519592f, 0.18323643505573273f, +0.6353750228881836f, 0.7629829049110413f, 0.9442721009254456f, 0.8809760212898254f, 0.6133682131767273f, 0.22384445369243622f, 0.6428160667419434f, 0.7309018969535828f, +0.7196786403656006f, 0.1622915416955948f, 0.7602627277374268f, 0.14379456639289856f, 0.12448416650295258f, 0.986130952835083f, 0.8902947306632996f, 0.21874843537807465f, +0.19265887141227722f, 0.9769498109817505f, 0.12882429361343384f, 0.17542752623558044f, 0.6580223441123962f, 0.09280475974082947f, 0.9764995574951172f, 0.31225675344467163f, +0.2998768091201782f, 0.060303058475255966f, 0.2816012501716614f, 0.37972164154052734f, 0.8752331733703613f, 0.664716362953186f, 0.12619884312152863f, 0.8225199580192566f, +0.8250950574874878f, 0.1244087889790535f, 0.4396677017211914f, 0.6557883620262146f, 0.052129823714494705f, 0.9661304354667664f, 0.8538249135017395f, 0.9480207562446594f, +0.7856617569923401f, 0.9510024785995483f, 0.552731454372406f, 0.6569341421127319f, 0.18405725061893463f, 0.7619855999946594f, 0.9794353246688843f, 0.6570194959640503f, +0.6691845655441284f, 0.5134425163269043f, 0.8127147555351257f, 0.680942177772522f, 0.4752146899700165f, 0.9782357811927795f, 0.06652458757162094f, 0.9806376695632935f, +0.9216577410697937f, 0.5034422278404236f, 0.8438079357147217f, 0.14088688790798187f, 0.9185671210289001f, 0.7920917272567749f, 0.3206186890602112f, 0.17829905450344086f, +0.12261287122964859f, 0.4201618731021881f, 0.4688921570777893f, 0.9147254228591919f, 0.7092875838279724f, 0.1683913618326187f, 0.7199706435203552f, 0.7106906175613403f, +0.5110941529273987f, 0.5393465161323547f, 0.6930219531059265f, 0.48020294308662415f, 0.5008389353752136f, 0.0991738885641098f, 0.007200522348284721f, 0.7345117926597595f, +0.6909193396568298f, 0.7998381853103638f, 0.9494526982307434f, 0.3994086980819702f, 0.7445770502090454f, 0.05993472784757614f, 0.13954584300518036f, 0.5298604369163513f, +0.019899822771549225f, 0.2151394933462143f, 0.5308759808540344f, 0.858102560043335f, 0.19989141821861267f, 0.07572769373655319f, 0.5185877084732056f, 0.5758095383644104f, +0.592085599899292f, 0.3843232989311218f, 0.3524748384952545f, 0.5371063351631165f, 0.79947429895401f, 0.8072534203529358f, 0.9941834211349487f, 0.46271058917045593f, +0.8512960076332092f, 0.4904755651950836f, 0.7818201184272766f, 0.8486849665641785f, 0.3062902092933655f, 0.7412577271461487f, 0.00522993877530098f, 0.8207802176475525f, +0.25105151534080505f, 0.42963629961013794f, 0.0013421098701655865f, 0.6776370406150818f, 0.4804477393627167f, 0.3807762563228607f, 0.30710187554359436f, 0.8306540846824646f, +0.630393385887146f, 0.5918360948562622f, 0.8432130217552185f, 0.7956360578536987f, 0.04544010013341904f, 0.7728127837181091f, 0.1427161693572998f, 0.8918297290802002f, +0.981327474117279f, 0.5484439134597778f, 0.817455530166626f, 0.6148414015769958f, 0.05667819827795029f, 0.37501052021980286f, 0.6681243181228638f, 0.08071155846118927f, +0.7371551394462585f, 0.7618935704231262f, 0.1815795749425888f, 0.310170978307724f, 0.9878233075141907f, 0.010649620555341244f, 0.5548585057258606f, 0.4113292694091797f, +0.1030610203742981f, 0.04144345596432686f, 0.13490059971809387f, 0.9699437618255615f, 0.9268993139266968f, 0.9780731797218323f, 0.7002174258232117f, 0.2858772575855255f, +0.6518640518188477f, 0.4308839738368988f, 0.5253178477287292f, 0.8322375416755676f, 0.5298154950141907f, 0.8813503384590149f, 0.8818692564964294f, 0.561253011226654f, +0.7490543127059937f, 0.15336589515209198f, 0.8429654240608215f, 0.08584904670715332f, 0.9094710350036621f, 0.8194215297698975f, 0.9037240147590637f, 0.14561957120895386f, +0.9962972402572632f, 0.8098398447036743f, 0.06346913427114487f, 0.32094794511795044f, 0.9365588426589966f, 0.567080557346344f, 0.48827433586120605f, 0.4019230008125305f, +0.9993489980697632f, 0.8258777260780334f, 0.7371675968170166f, 0.008551189675927162f, 0.0020578266121447086f, 0.026744410395622253f, 0.012474719434976578f, 0.4809657335281372f, +0.8539042472839355f, 0.8005157113075256f, 0.23748718202114105f, 0.8679115176200867f, 0.9214052557945251f, 0.3623470067977905f, 0.807026207447052f, 0.8236849308013916f, +0.8223171234130859f, 0.23279064893722534f, 0.16926518082618713f, 0.05480487644672394f, 0.06098942086100578f, 0.9698732495307922f, 0.2396102249622345f, 0.623416006565094f, +0.8330224752426147f, 0.7179116010665894f, 0.9072619080543518f, 0.6492346525192261f, 0.805309534072876f, 0.00761366356164217f, 0.33055660128593445f, 0.15578536689281464f, +0.9058619737625122f, 0.07612264901399612f, 0.4155750572681427f, 0.12635180354118347f, 0.42669814825057983f, 0.46571266651153564f, 0.6877544522285461f, 0.32996854186058044f, +0.7253644466400146f, 0.3185655474662781f, 0.6361001133918762f, 0.8620615005493164f, 0.5782126188278198f, 0.9560472369194031f, 0.6778263449668884f, 0.36976709961891174f, +0.9688014984130859f, 0.8949726223945618f, 0.9722172021865845f, 0.8190303444862366f, 0.2765468657016754f, 0.2141604870557785f, 0.28716859221458435f, 0.6403501629829407f, +0.23000912368297577f, 0.15391376614570618f, 0.3356947898864746f, 0.4080931842327118f, 0.08650007098913193f, 0.0619061142206192f, 0.3383042812347412f, 0.7159287929534912f, +0.04782934859395027f, 0.7151762843132019f, 0.9351925849914551f, 0.33096498250961304f, 0.2531254291534424f, 0.8951820731163025f, 0.9382893443107605f, 0.07657827436923981f, +0.6709719896316528f, 0.36712366342544556f, 0.5424723029136658f, 0.58217853307724f, 0.6691267490386963f, 0.9254321455955505f, 0.6301239132881165f, 0.11813070625066757f, +0.09583964198827744f, 0.24608148634433746f, 0.6392087340354919f, 0.6383166313171387f, 0.3992099463939667f, 0.2534189522266388f, 0.09488970786333084f, 0.5582386255264282f, +0.18703559041023254f, 0.03927186131477356f, 0.14728499948978424f, 0.23612818121910095f, 0.295528769493103f, 0.16215269267559052f, 0.04205423966050148f, 0.3260939419269562f, +0.17749738693237305f, 0.9330450296401978f, 0.4586620330810547f, 0.6630018353462219f, 0.6071492433547974f, 0.5638163089752197f, 0.859891951084137f, 0.7054095268249512f, +0.6399174928665161f, 0.5947858691215515f, 0.3330133855342865f, 0.3233121335506439f, 0.3996712565422058f, 0.2401926964521408f, 0.2096283882856369f, 0.19099266827106476f, +0.7472410202026367f, 0.6712928414344788f, 0.3456292748451233f, 0.6381232738494873f, 0.1300879567861557f, 0.013765865936875343f, 0.6207457780838013f, 0.5539290308952332f, +0.9522562623023987f, 0.05065903067588806f, 0.9766431450843811f, 0.22234772145748138f, 0.2419556975364685f, 0.5378559231758118f, 0.7559086680412292f, 0.10903701186180115f, +0.6206161975860596f, 0.41756781935691833f, 0.9117467403411865f, 0.242579847574234f, 0.6026285886764526f, 0.34613940119743347f, 0.5465449094772339f, 0.6552530527114868f, +0.8955833315849304f, 0.20215627551078796f, 0.15056343376636505f, 0.4582787752151489f, 0.27379536628723145f, 0.028406137600541115f, 0.21692058444023132f, 0.3175756633281708f, +0.3975653648376465f, 0.24487565457820892f, 0.9865399599075317f, 0.7933229207992554f, 0.40393659472465515f, 0.757151186466217f, 0.7370879650115967f, 0.6229510307312012f, +0.898936927318573f, 0.19767002761363983f, 0.33024078607559204f, 0.46889275312423706f, 0.639221727848053f, 0.09030602127313614f, 0.22398510575294495f, 0.004325282759964466f, +0.7654393911361694f, 0.4959871470928192f, 0.4709198474884033f, 0.5605990290641785f, 0.08365737646818161f, 0.351421058177948f, 0.933454155921936f, 0.4060383439064026f, +0.9710267782211304f, 0.5432710647583008f, 0.354732483625412f, 0.32332518696784973f, 0.8638662099838257f, 0.9592711925506592f, 0.7815713882446289f, 0.38007164001464844f, +0.865258514881134f, 0.7491937279701233f, 0.8906434774398804f, 0.8672636151313782f, 0.27482613921165466f, 0.45723846554756165f, 0.579009473323822f, 0.37843793630599976f, +0.9528473019599915f, 0.3248059153556824f, 0.23809270560741425f, 0.18257105350494385f, 0.4534550607204437f, 0.3475179076194763f, 0.44397521018981934f, 0.9436627626419067f, +0.7972155809402466f, 0.4785064160823822f, 0.7343838810920715f, 0.39229270815849304f, 0.36810505390167236f, 0.3941343426704407f, 0.3559952974319458f, 0.23117667436599731f, +0.22539961338043213f, 0.5388550758361816f, 0.4444984793663025f, 0.6882035732269287f, 0.3339512050151825f, 0.367963582277298f, 0.33331066370010376f, 0.853386640548706f, +0.6963661313056946f, 0.6545628309249878f, 0.22654341161251068f, 0.07745581120252609f, 0.28477466106414795f, 0.1493842601776123f, 0.9261190891265869f, 0.2051987648010254f, +0.5362809300422668f, 0.707110583782196f, 0.5922465324401855f, 0.08115056157112122f, 0.727975606918335f, 0.26200294494628906f, 0.9006071090698242f, 0.22294586896896362f, +0.7043771147727966f, 0.40669652819633484f, 0.5708062052726746f, 0.14777657389640808f, 0.4950633943080902f, 0.07075387984514236f, 0.936249315738678f, 0.36112621426582336f, +0.008476819843053818f, 0.5126668810844421f, 0.8915421366691589f, 0.11350634694099426f, 0.09497033804655075f, 0.9863245487213135f, 0.5228267908096313f, 0.7792633175849915f, +0.051074229180812836f, 0.8466572761535645f, 0.4554423689842224f, 0.42451196908950806f, 0.6754006147384644f, 0.5069758296012878f, 0.9637853503227234f, 0.666098952293396f, +0.09292007237672806f, 0.5675390958786011f, 0.354206919670105f, 0.9369181394577026f, 0.1651991456747055f, 0.5929559469223022f, 0.04778796434402466f, 0.7544323205947876f, +0.5202406644821167f, 0.40682661533355713f, 0.4108559489250183f, 0.19418074190616608f, 0.06492610275745392f, 0.9859040379524231f, 0.8101534843444824f, 0.3841579258441925f, +0.12001954019069672f, 0.2580038011074066f, 0.8732996582984924f, 0.056604981422424316f, 0.4066244661808014f, 0.6466514468193054f, 0.4245634973049164f, 0.6177628040313721f, +0.20908161997795105f, 0.6449398398399353f, 0.3628159463405609f, 0.9497570395469666f, 0.23506692051887512f, 0.5465313196182251f, 0.025617409497499466f, 0.36522629857063293f, +0.07234051078557968f, 0.910822331905365f, 0.46945396065711975f, 0.9079207181930542f, 0.2759198844432831f, 0.002880472457036376f, 0.807325541973114f, 0.8982290029525757f, +0.027960946783423424f, 0.37559768557548523f, 0.11477614939212799f, 0.31224143505096436f, 0.6625634431838989f, 0.9155867695808411f, 0.21411198377609253f, 0.648903489112854f, +0.40874019265174866f, 0.07583703100681305f, 0.17603906989097595f, 0.5498891472816467f, 0.135728120803833f, 0.05543103069067001f, 0.3060016930103302f, 0.9712080359458923f, +0.2837165296077728f, 0.902795135974884f, 0.6245695352554321f, 0.08038964122533798f, 0.18887893855571747f, 0.9654741883277893f, 0.9386513233184814f, 0.31433573365211487f, +0.3847990334033966f, 0.8546366691589355f, 0.391989529132843f, 0.8635010719299316f, 0.14502666890621185f, 0.7251186370849609f, 0.5687109231948853f, 0.8115909695625305f, +0.030405554920434952f, 0.2749958336353302f, 0.42253679037094116f, 0.27376896142959595f, 0.5427888035774231f, 0.047986771911382675f, 0.04909714683890343f, 0.18982236087322235f, +0.2857204079627991f, 0.7959339022636414f, 0.8493020534515381f, 0.8836749792098999f, 0.4884352385997772f, 0.9336434602737427f, 0.3185715675354004f, 0.43959489464759827f, +0.975470244884491f, 0.6381034851074219f, 0.5907570123672485f, 0.17063899338245392f, 0.5143518447875977f, 0.2771933078765869f, 0.8019450306892395f, 0.4895399808883667f, +0.9668228030204773f, 0.7808511257171631f, 0.15554708242416382f, 0.6939932107925415f, 0.2544357180595398f, 0.7693967819213867f, 0.8916966915130615f, 0.4517015516757965f, +0.5035438537597656f, 0.2187850922346115f, 0.4733298122882843f, 0.15365634858608246f, 0.22016377747058868f, 0.37053340673446655f, 0.21210713684558868f, 0.267221063375473f, +0.4747847616672516f, 0.1553269624710083f, 0.4177701473236084f, 0.4211408197879791f, 0.8844760656356812f, 0.9387562870979309f, 0.38649845123291016f, 0.730426549911499f, +0.3450113534927368f, 0.07276743650436401f, 0.8900771737098694f, 0.8329645395278931f, 0.7742264866828918f, 0.7252048850059509f, 0.769372820854187f, 0.050221581012010574f, +0.08912134170532227f, 0.1888108104467392f, 0.04593195766210556f, 0.7903573513031006f, 0.8735907673835754f, 0.10363902151584625f, 0.029153848066926003f, 0.3157058656215668f, +0.8106839656829834f, 0.17914222180843353f, 0.4552542567253113f, 0.06016674265265465f, 0.6630744934082031f, 0.706524133682251f, 0.3164002597332001f, 0.3920079171657562f, +0.048116639256477356f, 0.16964936256408691f, 0.2683260440826416f, 0.938315749168396f, 0.8734388947486877f, 0.45423609018325806f, 0.9482793807983398f, 0.1934940665960312f, +0.3461028039455414f, 0.000940227007959038f, 0.51148921251297f, 0.14582177996635437f, 0.05629704147577286f, 0.727868378162384f, 0.31825631856918335f, 0.07242871820926666f, +0.9986907243728638f, 0.48326078057289124f, 0.15377317368984222f, 0.46553632616996765f, 0.4475000202655792f, 0.2275603860616684f, 0.5643784999847412f, 0.30849596858024597f, +0.6722480654716492f, 0.16973842680454254f, 0.49838945269584656f, 0.8817036747932434f, 0.3285324275493622f, 0.741958498954773f, 0.49570780992507935f, 0.7401301860809326f, +0.16914141178131104f, 0.7208046317100525f, 0.11837422847747803f, 0.2783738970756531f, 0.9220954775810242f, 0.790206253528595f, 0.1294993907213211f, 0.9661474823951721f, +0.5778738856315613f, 0.7857490181922913f, 0.9714425206184387f, 0.9217056632041931f, 0.28470563888549805f, 0.7436535954475403f, 0.14267462491989136f, 0.4345599114894867f, +0.3027852773666382f, 0.5754218101501465f, 0.23348531126976013f, 0.25316622853279114f, 0.5641770362854004f, 0.6125534176826477f, 0.749321460723877f, 0.20862875878810883f, +0.35982608795166016f, 0.24504907429218292f, 0.29244035482406616f, 0.9058955907821655f, 0.5905328989028931f, 0.18999753892421722f, 0.585506796836853f, 0.5042831301689148f, +0.40529701113700867f, 0.7462205290794373f, 0.7031925320625305f, 0.8654110431671143f, 0.4743732810020447f, 0.1820131242275238f, 0.14200948178768158f, 0.8841310143470764f, +0.8686608076095581f, 0.1685875654220581f, 0.5700473785400391f, 0.105486199259758f, 0.943594217300415f, 0.7970139980316162f, 0.13925229012966156f, 0.6297168135643005f, +0.7532787322998047f, 0.6269559860229492f, 0.09021440893411636f, 0.6790042519569397f, 0.4140830934047699f, 0.7353591322898865f, 0.6071420907974243f, 0.6672383546829224f, +0.8854030966758728f, 0.46956947445869446f, 0.5614851117134094f, 0.637709379196167f, 0.4431565999984741f, 0.6536794304847717f, 0.21905966103076935f, 0.06014333665370941f, +0.11591655761003494f, 0.2959144115447998f, 0.4215066432952881f, 0.09380894154310226f, 0.6834323406219482f, 0.8342395424842834f, 0.5129322409629822f, 0.13820603489875793f, +0.22760893404483795f, 0.6051031351089478f, 0.9961485266685486f, 0.690081775188446f, 0.8386476039886475f, 0.7515558004379272f, 0.03251982480287552f, 0.9858605861663818f, +0.2948015630245209f, 0.9862213134765625f, 0.10487060248851776f, 0.5172841548919678f, 0.2824570834636688f, 0.12539136409759521f, 0.5189659595489502f, 0.009832639247179031f, +0.29745861887931824f, 0.12600338459014893f, 0.4068109095096588f, 0.2529255449771881f, 0.47930341958999634f, 0.3480648398399353f, 0.03353644534945488f, 0.32536911964416504f, +0.7589764595031738f, 0.44086652994155884f, 0.2636762857437134f, 0.34730008244514465f, 0.830132782459259f, 0.4449950158596039f, 0.04796777293086052f, 0.18835559487342834f, +0.8155950903892517f, 0.7712684869766235f, 0.2194594442844391f, 0.9714905023574829f, 0.43043482303619385f, 0.5797613263130188f, 0.8251067399978638f, 0.8377664685249329f, +0.4232122600078583f, 0.13054628670215607f, 0.9100258946418762f, 0.4927730858325958f, 0.11517762392759323f, 0.27743181586265564f, 0.3596639633178711f, 0.6111584901809692f, +0.33927804231643677f, 0.09697192162275314f, 0.44217169284820557f, 0.7951989769935608f, 0.31118497252464294f, 0.5932741165161133f, 0.5539286136627197f, 0.21683527529239655f, +0.8479442596435547f, 0.5556548237800598f, 0.19777517020702362f, 0.8946126103401184f, 0.30928945541381836f, 0.4567728340625763f, 0.9975693821907043f, 0.9099357724189758f, +0.21814632415771484f, 0.8464170098304749f, 0.8807467818260193f, 0.10087739676237106f, 0.08119162917137146f, 0.7969595193862915f, 0.4392207860946655f, 0.8075885772705078f, +0.19227714836597443f, 0.7866947650909424f, 0.5896238088607788f, 0.9074782729148865f, 0.6411193609237671f, 0.41817429661750793f, 0.7672841548919678f, 0.5706689357757568f, +0.0004010988341178745f, 0.1152598187327385f, 0.5359805822372437f, 0.06146455928683281f, 0.7999177575111389f, 0.46325060725212097f, 0.347507119178772f, 0.5030959248542786f, +0.6632710695266724f, 0.737104594707489f, 0.1633082777261734f, 0.37590840458869934f, 0.013044580817222595f, 0.6017210483551025f, 0.27953940629959106f, 0.05752435326576233f, +0.4798031449317932f, 0.2378607839345932f, 0.23707444965839386f, 0.15476536750793457f, 0.3304118514060974f, 0.8635396361351013f, 0.7023770809173584f, 0.12038981914520264f, +0.8370131850242615f, 0.7159117460250854f, 0.19025178253650665f, 0.17927496135234833f, 0.40496623516082764f, 0.5851877331733704f, 0.1346285492181778f, 0.4498593211174011f, +0.48023882508277893f, 0.1848725527524948f, 0.4505358040332794f, 0.6877673864364624f, 0.3540288209915161f, 0.9750900864601135f, 0.31481316685676575f, 0.8056265711784363f, +0.8849716186523438f, 0.3770792782306671f, 0.04496317729353905f, 0.8600876331329346f, 0.2393622249364853f, 0.7084568738937378f, 0.44876766204833984f, 0.4536663889884949f, +0.37663450837135315f, 0.07755321264266968f, 0.03821581229567528f, 0.3104543685913086f, 0.7742990851402283f, 0.588126540184021f, 0.09171324968338013f, 0.8084211945533752f, +0.35961052775382996f, 0.7756255269050598f, 0.2506004869937897f, 0.017197776585817337f, 0.29503217339515686f, 0.3354906439781189f, 0.09925425052642822f, 0.5595736503601074f, +0.40747272968292236f, 0.5401390790939331f, 0.7559458017349243f, 0.7323471307754517f, 0.7876639366149902f, 0.5192499160766602f, 0.5634477138519287f, 0.5482356548309326f, +0.5241571068763733f, 0.49597325921058655f, 0.2769729197025299f, 0.6898642778396606f, 0.5250300168991089f, 0.19905073940753937f, 0.13679254055023193f, 0.48648563027381897f, +0.9460087418556213f, 0.6635103225708008f, 0.04769066721200943f, 0.9389727115631104f, 0.1666131317615509f, 0.7679092884063721f, 0.23815928399562836f, 0.05106911435723305f, +0.027741115540266037f, 0.1436661034822464f, 0.578304648399353f, 0.5122665166854858f, 0.8655325174331665f, 0.5100126266479492f, 0.3570556044578552f, 0.32937920093536377f, +0.16179411113262177f, 0.08213400840759277f, 0.8235787749290466f, 0.6764708757400513f, 0.6972485184669495f, 0.6339990496635437f, 0.08798980712890625f, 0.430983304977417f, +0.6578080058097839f, 0.039852894842624664f, 0.7794025540351868f, 0.5830854773521423f, 0.6732408404350281f, 0.7242538928985596f, 0.6968618035316467f, 0.8420792818069458f, +0.014441374689340591f, 0.44536837935447693f, 0.5798866152763367f, 0.12120107561349869f, 0.14360621571540833f, 0.9138954281806946f, 0.5503101348876953f, 0.06993419677019119f, +0.4483610689640045f, 0.49444401264190674f, 0.36164554953575134f, 0.03188261017203331f, 0.08751793205738068f, 0.012558440677821636f, 0.9148881435394287f, 0.879999041557312f, +0.7583984136581421f, 0.9788627624511719f, 0.3130732476711273f, 0.5233158469200134f, 0.4578743577003479f, 0.6841422915458679f, 0.7004146575927734f, 0.44746285676956177f, +0.4475809335708618f, 0.8230920433998108f, 0.9718331694602966f, 0.6463328003883362f, 0.2765553295612335f, 0.6533960103988647f, 0.20272691547870636f, 0.6962459087371826f, +0.5090042948722839f, 0.018095018342137337f, 0.050057630985975266f, 0.05253662168979645f, 0.6567042469978333f, 0.952953040599823f, 0.4624786972999573f, 0.05252183601260185f, +0.5480210781097412f, 0.6741757392883301f, 0.3983522951602936f, 0.9614754319190979f, 0.8168814182281494f, 0.13296309113502502f, 0.0028349575586616993f, 0.6683267951011658f, +0.39183592796325684f, 0.9540113806724548f, 0.06372900307178497f, 0.2885805368423462f, 0.748945415019989f, 0.9900226593017578f, 0.10285871475934982f, 0.6844251155853271f, +0.07730254530906677f, 0.1612314134836197f, 0.4248311519622803f, 0.07940907031297684f, 0.34175094962120056f, 0.4581860303878784f, 0.198409765958786f, 0.3265751898288727f, +0.256501168012619f, 0.7688357830047607f, 0.512937068939209f, 0.4277113080024719f, 0.42434588074684143f, 0.9341727495193481f, 0.14876489341259003f, 0.9351179003715515f, +0.5644823312759399f, 0.12773510813713074f, 0.06361141800880432f, 0.8665883541107178f, 0.6656553149223328f, 0.4490491449832916f, 0.009633731096982956f, 0.44168373942375183f, +0.3541507124900818f, 0.9288020730018616f, 0.7084948420524597f, 0.008468789048492908f, 0.8049022555351257f, 0.26085707545280457f, 0.6873499751091003f, 0.04647611826658249f, +0.7923862934112549f, 0.06992964446544647f, 0.629441499710083f, 0.4672895669937134f, 0.0020901544485241175f, 0.9350376725196838f, 0.20430368185043335f, 0.11437342315912247f, +0.8159857988357544f, 0.5927274227142334f, 0.021435195580124855f, 0.6537076830863953f, 0.5069971084594727f, 0.7061331868171692f, 0.9616955518722534f, 0.3658858835697174f, +0.814801037311554f, 0.8861988186836243f, 0.458010733127594f, 0.8842244744300842f, 0.2896896004676819f, 0.41269198060035706f, 0.7000483274459839f, 0.922209620475769f, +0.4782446324825287f, 0.8526979684829712f, 0.9767212271690369f, 0.2512723207473755f, 0.46679386496543884f, 0.6440516114234924f, 0.49130943417549133f, 0.8116934895515442f, +0.10763590782880783f, 0.7344856262207031f, 0.9077714681625366f, 0.6507005095481873f, 0.02970234677195549f, 0.5201928019523621f, 0.9503298401832581f, 0.09698650240898132f, +0.704718291759491f, 0.9479995965957642f, 0.6799901127815247f, 0.7295342087745667f, 0.7259117364883423f, 0.6679782867431641f, 0.6203404068946838f, 0.4444032609462738f, +0.9630061984062195f, 0.2114311307668686f, 0.002780607668682933f, 0.024689851328730583f, 0.37819477915763855f, 0.8933408856391907f, 0.09749525040388107f, 0.7529385685920715f, +0.5120521187782288f, 0.4985257387161255f, 0.6308256387710571f, 0.23426443338394165f, 0.29079246520996094f, 0.8599469065666199f, 0.4711499810218811f, 0.6304063200950623f, +0.8782622218132019f, 0.36874517798423767f, 0.7919462323188782f, 0.4591958522796631f, 0.42137202620506287f, 0.30995333194732666f, 0.0284190122038126f, 0.6739462614059448f, +0.518388569355011f, 0.48315367102622986f, 0.3761574327945709f, 0.9076200723648071f, 0.15828238427639008f, 0.4595755338668823f, 0.5814226269721985f, 0.29841822385787964f, +0.47386762499809265f, 0.4324425756931305f, 0.07744754105806351f, 0.5667301416397095f, 0.8211491703987122f, 0.6095400452613831f, 0.7806777358055115f, 0.29725202918052673f, +0.4982928931713104f, 0.9427886009216309f, 0.42935118079185486f, 0.3314588963985443f, 0.9121160507202148f, 0.1774633526802063f, 0.07088851928710938f, 0.5151680707931519f, +0.023337924852967262f, 0.31670841574668884f, 0.5959896445274353f, 0.317923903465271f, 0.8565654754638672f, 0.6290469765663147f, 0.3330366015434265f, 0.23103295266628265f, +0.7902374863624573f, 0.36277520656585693f, 0.4483228325843811f, 0.6301594972610474f, 0.3506041467189789f, 0.49802669882774353f, 0.6179144382476807f, 0.9545730352401733f, +0.040090978145599365f, 0.09120103716850281f, 0.7989528179168701f, 0.4144046902656555f, 0.1916193813085556f, 0.905068576335907f, 0.07558728009462357f, 0.876531183719635f, +0.705959677696228f, 0.3096439242362976f, 0.3076646327972412f, 0.9329801797866821f, 0.08181362599134445f, 0.18709921836853027f, 0.9123807549476624f, 0.9148482084274292f, +0.9329662322998047f, 0.1295928806066513f, 0.2852630019187927f, 0.8876718282699585f, 0.6751736402511597f, 0.34720346331596375f, 0.6187822818756104f, 0.028381744399666786f, +0.7636876106262207f, 0.4656466245651245f, 0.2796437442302704f, 0.025005599483847618f, 0.01091369055211544f, 0.7947790026664734f, 0.10164812207221985f, 0.11446435004472733f, +0.9700531959533691f, 0.8244809508323669f, 0.7749660611152649f, 0.7544474005699158f, 0.6765903234481812f, 0.0065141902305185795f, 0.5678808093070984f, 0.08277042955160141f, +0.5813987255096436f, 0.39247196912765503f, 0.8231649398803711f, 0.6579397320747375f, 0.4176236689090729f, 0.40528443455696106f, 0.996113657951355f, 0.5173190832138062f, +0.6978773474693298f, 0.9216814041137695f, 0.20472094416618347f, 0.8018783330917358f, 0.12100863456726074f, 0.7537968754768372f, 0.8354878425598145f, 0.5941768884658813f, +0.8734698295593262f, 0.18515250086784363f, 0.3800066113471985f, 0.42525437474250793f, 0.8968426585197449f, 0.08258086442947388f, 0.4492036700248718f, 0.9954866170883179f, +0.0964229479432106f, 0.7983531355857849f, 0.14429903030395508f, 0.325795441865921f, 0.7426354289054871f, 0.3565046787261963f, 0.929943323135376f, 0.798939049243927f, +0.771360456943512f, 0.4692058265209198f, 0.08277492225170135f, 0.7374017238616943f, 0.8747340440750122f, 0.1239713802933693f, 0.9334874153137207f, 0.19149546325206757f, +0.2655468285083771f, 0.08293166756629944f, 0.5434187650680542f, 0.3309219181537628f, 0.7116981744766235f, 0.4065549075603485f, 0.5917365550994873f, 0.2814953923225403f, +0.05464014410972595f, 0.4161573350429535f, 0.07486418634653091f, 0.7799698114395142f, 0.24234354496002197f, 0.4812498092651367f, 0.19398410618305206f, 0.48885291814804077f, +0.26262080669403076f, 0.625494122505188f, 0.05377839878201485f, 0.3657417297363281f, 0.9173396229743958f, 0.6513818502426147f, 0.016271980479359627f, 0.4577604830265045f, +0.02580445632338524f, 0.04796160012483597f, 0.0871945321559906f, 0.7392399907112122f, 0.9282801151275635f, 0.7865298390388489f, 0.8395862579345703f, 0.9795173406600952f, +0.2603546380996704f, 0.10279883444309235f, 0.6904399394989014f, 0.19414447247982025f, 0.9928819537162781f, 0.8679126501083374f, 0.906673789024353f, 0.20367000997066498f, +0.5869901180267334f, 0.9834204912185669f, 0.42316552996635437f, 0.8114650845527649f, 0.06138390302658081f, 0.6734783053398132f, 0.005090366117656231f, 0.20937833189964294f, +0.24230390787124634f, 0.5893834829330444f, 0.07453283667564392f, 0.6138355135917664f, 0.5591519474983215f, 0.10652673244476318f, 0.9558145403862f, 0.7175421714782715f, +0.3314123749732971f, 0.6891644597053528f, 0.4974406659603119f, 0.6455916166305542f, 0.8897937536239624f, 0.9291983246803284f, 0.42719003558158875f, 0.10084622353315353f, +0.895182192325592f, 0.7984734177589417f, 0.22423748672008514f, 0.18139980733394623f, 0.9111961126327515f, 0.8468161225318909f, 0.21329163014888763f, 0.06302977353334427f, +0.33292603492736816f, 0.9086056351661682f, 0.7192855477333069f, 0.7943524122238159f, 0.621201753616333f, 0.43071797490119934f, 0.4586479365825653f, 0.5888814926147461f, +0.2850654125213623f, 0.10988249629735947f, 0.6926595568656921f, 0.8620486855506897f, 0.3196997046470642f, 0.8976781368255615f, 0.23678448796272278f, 0.2002578228712082f, +0.2062159776687622f, 0.11755578964948654f, 0.6329647898674011f, 0.20576618611812592f, 0.8549295663833618f, 0.283090204000473f, 0.27117234468460083f, 0.3757580816745758f, +0.32380908727645874f, 0.7093048691749573f, 0.8331642746925354f, 0.5721822381019592f, 0.8974040746688843f, 0.3111088275909424f, 0.8167053461074829f, 0.17171569168567657f, +0.7699295282363892f, 0.4578414559364319f, 0.462040513753891f, 0.0066787912510335445f, 0.4411165714263916f, 0.8264000415802002f, 0.1346266120672226f, 0.8648207187652588f, +0.890018105506897f, 0.046149060130119324f, 0.49271804094314575f, 0.6843058466911316f, 0.35730522871017456f, 0.37400585412979126f, 0.7773075699806213f, 0.22664140164852142f, +0.8746980428695679f, 0.6524196267127991f, 0.6091398000717163f, 0.3053930699825287f, 0.17475806176662445f, 0.66270911693573f, 0.49381396174430847f, 0.29339784383773804f, +0.9789276123046875f, 0.9803923964500427f, 0.03675033152103424f, 0.3447827398777008f, 0.04599202424287796f, 0.8163677453994751f, 0.7786769866943359f, 0.5229527950286865f, +0.6564829349517822f, 0.4415198564529419f, 0.19805727899074554f, 0.9981576800346375f, 0.6849742531776428f, 0.9690917730331421f, 0.55842125415802f, 0.33105704188346863f, +0.8162609934806824f, 0.19510610401630402f, 0.3707737624645233f, 0.06408347934484482f, 0.22416995465755463f, 0.4945058226585388f, 0.8410181999206543f, 0.48184657096862793f, +0.10852764546871185f, 0.15078164637088776f, 0.9983089566230774f, 0.07083623856306076f, 0.16226191818714142f, 0.8235589861869812f, 0.41169416904449463f, 0.913079559803009f, +0.8117125034332275f, 0.9694818258285522f, 0.75721675157547f, 0.7216575741767883f, 0.5311806201934814f, 0.1476856917142868f, 0.19567255675792694f, 0.936255931854248f, +0.33468568325042725f, 0.9832174777984619f, 0.24712225794792175f, 0.4520624577999115f, 0.9430416822433472f, 0.1560051143169403f, 0.004241825081408024f, 0.43619054555892944f, +0.14402681589126587f, 0.534106433391571f, 0.759381115436554f, 0.40432026982307434f, 0.594858705997467f, 0.6630298495292664f, 0.06283657997846603f, 0.03368794918060303f, +0.6192169785499573f, 0.3900500237941742f, 0.13640376925468445f, 0.14919544756412506f, 0.6664336323738098f, 0.4018527865409851f, 0.38619816303253174f, 0.19495780766010284f, +0.5908392071723938f, 0.6915780305862427f, 0.7790831923484802f, 0.9412636160850525f, 0.6030304431915283f, 0.35742273926734924f, 0.6753796935081482f, 0.09233275800943375f, +0.8586652874946594f, 0.8626931309700012f, 0.58103346824646f, 0.9694607257843018f, 0.5016675591468811f, 0.5762854814529419f, 0.6252138018608093f, 0.927125871181488f, +0.8618747591972351f, 0.9174321293830872f, 0.6527827978134155f, 0.9344456791877747f, 0.1006830707192421f, 0.4750686287879944f, 0.597193717956543f, 0.3644532561302185f, +0.8708304762840271f, 0.6062145829200745f, 0.1006544977426529f, 0.7107487320899963f, 0.6289030909538269f, 0.8166599869728088f, 0.601671040058136f, 0.513123631477356f, +0.22227329015731812f, 0.3605075180530548f, 0.3458985686302185f, 0.5682852268218994f, 0.5888585448265076f, 0.9004151225090027f, 0.039005097001791f, 0.9120679497718811f, +0.7271935939788818f, 0.8765775561332703f, 0.41508713364601135f, 0.3492782413959503f, 0.17387303709983826f, 0.4353453814983368f, 0.9175996780395508f, 0.4528505504131317f, +0.28972673416137695f, 0.8543779850006104f, 0.8761434555053711f, 0.24124562740325928f, 0.8743346333503723f, 0.11936238408088684f, 0.992048978805542f, 0.6608076095581055f, +0.27960214018821716f, 0.37437203526496887f, 0.3110707104206085f, 0.14864882826805115f, 0.5812954306602478f, 0.9719281196594238f, 0.5823668241500854f, 0.6845861077308655f, +0.5550265312194824f, 0.7893396615982056f, 0.7452213764190674f, 0.08575978875160217f, 0.25871363282203674f, 0.1277589201927185f, 0.3195076882839203f, 0.26072970032691956f, +0.7999759316444397f, 0.5254610180854797f, 0.9628555774688721f, 0.6967372894287109f, 0.2677426338195801f, 0.5411489605903625f, 0.635084867477417f, 0.9192890524864197f, +0.8245854377746582f, 0.9960355162620544f, 0.5278162956237793f, 0.198527529835701f, 0.16599710285663605f, 0.6554795503616333f, 0.2842789888381958f, 0.20426201820373535f, +0.49705633521080017f, 0.896577775478363f, 0.09197258204221725f, 0.6876367330551147f, 0.6568629741668701f, 0.8628242611885071f, 0.9219138622283936f, 0.47885867953300476f, +0.1249745562672615f, 0.3917294144630432f, 0.9300874471664429f, 0.412832111120224f, 0.3388819098472595f, 0.05687683820724487f, 0.9606654644012451f, 0.28101009130477905f, +0.01671794056892395f, 0.7291354537010193f, 0.9396887421607971f, 0.3832525908946991f, 0.9964730143547058f, 0.7570905685424805f, 0.39963510632514954f, 0.6357243657112122f, +0.39005282521247864f, 0.7051287889480591f, 0.08361075073480606f, 0.5459464192390442f, 0.5674508213996887f, 0.3311697244644165f, 0.3517933189868927f, 0.9307668209075928f, +0.7648155093193054f, 0.806413471698761f, 0.7917253375053406f, 0.2651872932910919f, 0.14031973481178284f, 0.2416098266839981f, 0.17955268919467926f, 0.8375376462936401f, +0.909651517868042f, 0.10350493341684341f, 0.02323017828166485f, 0.5085310339927673f, 0.7421451807022095f, 0.22480805218219757f, 0.9435009956359863f, 0.09817099571228027f, +0.09775953739881516f, 0.9736524224281311f, 0.823189377784729f, 0.7355177998542786f, 0.6304232478141785f, 0.42748740315437317f, 0.16465111076831818f, 0.8680493831634521f, +0.10780376195907593f, 0.6900416612625122f, 0.5734936594963074f, 0.47629234194755554f, 0.9947890043258667f, 0.12133366614580154f, 0.39995288848876953f, 0.4210413992404938f, +0.15661099553108215f, 0.42952078580856323f, 0.5248149037361145f, 0.8678749799728394f, 0.42065325379371643f, 0.5758377313613892f, 0.09125813841819763f, 0.1801339089870453f, +0.02564803510904312f, 0.4437575042247772f, 0.8668684363365173f, 0.49004995822906494f, 0.7942729592323303f, 0.18306541442871094f, 0.22493834793567657f, 0.2171775996685028f, +0.12269392609596252f, 0.6353181600570679f, 0.0990922600030899f, 0.3299580514431f, 0.759364128112793f, 0.650206446647644f, 0.06093230098485947f, 0.3256477117538452f, +0.01590617373585701f, 0.8958163857460022f, 0.857554018497467f, 0.9141848087310791f, 0.7678455114364624f, 0.3886874318122864f, 0.39114633202552795f, 0.22325491905212402f, +0.7926153540611267f, 0.2799931466579437f, 0.8460150361061096f, 0.7726966142654419f, 0.7629765868186951f, 0.5362239480018616f, 0.8112188577651978f, 0.6414257287979126f, +0.6726288199424744f, 0.513164222240448f, 0.18624724447727203f, 0.14163300395011902f, 0.22615821659564972f, 0.3455566465854645f, 0.8983526229858398f, 0.4757823348045349f, +0.8303082585334778f, 0.13325800001621246f, 0.39751923084259033f, 0.20650409162044525f, 0.31380966305732727f, 0.35739412903785706f, 0.6646026372909546f, 0.1555148959159851f, +0.03945565223693848f, 0.9417543411254883f, 0.5741653442382812f, 0.8165904879570007f, 0.9571883082389832f, 0.02150649018585682f, 0.7356064319610596f, 0.8629142045974731f, +0.7497262954711914f, 0.6488533020019531f, 0.009299477562308311f, 0.36729615926742554f, 0.8872995376586914f, 0.8882614970207214f, 0.060987621545791626f, 0.20446327328681946f, +0.4689551889896393f, 0.4813368022441864f, 0.4344065189361572f, 0.8527385592460632f, 0.9003974199295044f, 0.40031763911247253f, 0.6243799924850464f, 0.6409673690795898f, +0.6496862173080444f, 0.9431684017181396f, 0.12753863632678986f, 0.9967572093009949f, 0.5155500769615173f, 0.12690873444080353f, 0.30892401933670044f, 0.33922111988067627f, +0.428401917219162f, 0.5889803171157837f, 0.3388160467147827f, 0.9294505715370178f, 0.9222037196159363f, 0.09265206754207611f, 0.6758279800415039f, 0.1839723289012909f, +0.965957522392273f, 0.18664175271987915f, 0.16799597442150116f, 0.2857961058616638f, 0.9285343289375305f, 0.4602203965187073f, 0.10855240374803543f, 0.4836224317550659f, +0.8127831220626831f, 0.5684154629707336f, 0.058552518486976624f, 0.34994614124298096f, 0.27373215556144714f, 0.7750016450881958f, 0.23065556585788727f, 0.9269821643829346f, +0.40081921219825745f, 0.6308311820030212f, 0.544748842716217f, 0.48166683316230774f, 0.07594642043113708f, 0.8047330975532532f, 0.18018586933612823f, 0.9700949192047119f, +0.08297690004110336f, 0.7506175637245178f, 0.37385648488998413f, 0.9076524972915649f, 0.8571788668632507f, 0.21974872052669525f, 0.27400368452072144f, 0.8935869336128235f, +0.3673410713672638f, 0.21083304286003113f, 0.28476521372795105f, 0.5424573421478271f, 0.009094350039958954f, 0.713745653629303f, 0.71310955286026f, 0.885013222694397f, +0.9043408036231995f, 0.40792226791381836f, 0.9247392416000366f, 0.6740391254425049f, 0.06737639009952545f, 0.16349084675312042f, 0.014684437774121761f, 0.006484470330178738f, +0.2850079834461212f, 0.6922030448913574f, 0.8861485719680786f, 0.6015477776527405f, 0.12227082997560501f, 0.7154315114021301f, 0.6911073923110962f, 0.28357434272766113f, +0.055136557668447495f, 0.11216510832309723f, 0.2332213670015335f, 0.007618896197527647f, 0.6821309924125671f, 0.7592487931251526f, 0.22575441002845764f, 0.6283423900604248f, +0.6607435345649719f, 0.18923555314540863f, 0.3031526803970337f, 0.5677884817123413f, 0.7123379111289978f, 0.44270411133766174f, 0.7403097152709961f, 0.10768453776836395f, +0.025559745728969574f, 0.5107122659683228f, 0.4641115367412567f, 0.7436976432800293f, 0.31585636734962463f, 0.6856188178062439f, 0.13399027287960052f, 0.1963345855474472f, +0.05362636223435402f, 0.6905140280723572f, 0.44913145899772644f, 0.8215577006340027f, 0.688916802406311f, 0.18080654740333557f, 0.34159180521965027f, 0.22417648136615753f, +0.48500141501426697f, 0.20840013027191162f, 0.841159999370575f, 0.7144265174865723f, 0.7278634905815125f, 0.11381477117538452f, 0.1846107393503189f, 0.9591460227966309f, +0.9837046265602112f, 0.2894805669784546f, 0.5686793327331543f, 0.2510039210319519f, 0.7701175808906555f, 0.2982338070869446f, 0.24409949779510498f, 0.12177850306034088f, +0.6745226383209229f, 0.2609543204307556f, 0.8976567387580872f, 0.31293991208076477f, 0.6855008602142334f, 0.8096410036087036f, 0.8732315301895142f, 0.7372477054595947f, +0.5898901224136353f, 0.849271297454834f, 0.09252920001745224f, 0.33562329411506653f, 0.12082502245903015f, 0.6892740726470947f, 0.9372288584709167f, 0.9844986796379089f, +0.31669971346855164f, 0.2906709611415863f, 0.5939869284629822f, 0.550486147403717f, 0.7643661499023438f, 0.563957154750824f, 0.8762628436088562f, 0.16295568645000458f, +0.8457837104797363f, 0.9241160154342651f, 0.3673003017902374f, 0.3813105821609497f, 0.4867531359195709f, 0.2529485523700714f, 0.30308669805526733f, 0.6987059712409973f, +0.5424379110336304f, 0.33916860818862915f, 0.26567402482032776f, 0.43126487731933594f, 0.2944619953632355f, 0.36008554697036743f, 0.3035660982131958f, 0.32656073570251465f, +0.45916876196861267f, 0.6750890016555786f, 0.3489469289779663f, 0.4249192774295807f, 0.559899628162384f, 0.22167247533798218f, 0.7562468647956848f, 0.465279221534729f, +0.8655000925064087f, 0.9601519107818604f, 0.9468885660171509f, 0.2073407620191574f, 0.5178113579750061f, 0.44900426268577576f, 0.3219912052154541f, 0.3845549523830414f, +0.49693289399147034f, 0.8011423349380493f, 0.6611756682395935f, 0.09737877547740936f, 0.11815358698368073f, 0.16572001576423645f, 0.7079306840896606f, 0.2481347620487213f, +0.12630152702331543f, 0.4784919321537018f, 0.0016754035605117679f, 0.4552266001701355f, 0.5852712392807007f, 0.7011396884918213f, 0.2710877060890198f, 0.3530965745449066f, +0.17369160056114197f, 0.8440536856651306f, 0.6758414506912231f, 0.6016039848327637f, 0.9126378297805786f, 0.7470175623893738f, 0.7235041856765747f, 0.5151270031929016f, +0.7413712739944458f, 0.4440406560897827f, 0.4286329746246338f, 0.5252554416656494f, 0.04358166456222534f, 0.6438264846801758f, 0.8149546384811401f, 0.6403496861457825f, +0.41090646386146545f, 0.0883939191699028f, 0.569286048412323f, 0.2557412385940552f, 0.4178285002708435f, 0.12927579879760742f, 0.5539112687110901f, 0.11073066294193268f, +0.07655803114175797f, 0.8371602296829224f, 0.09602361917495728f, 0.13728441298007965f, 0.6326887607574463f, 0.24303080141544342f, 0.9679518938064575f, 0.07254358381032944f, +0.08385374397039413f, 0.8684040307998657f, 0.7132601141929626f, 0.720390796661377f, 0.4469427466392517f, 0.5538361072540283f, 0.3076171278953552f, 0.8224702477455139f, +0.08227302134037018f, 0.9612975716590881f, 0.633665144443512f, 0.9231676459312439f, 0.1756860315799713f, 0.2745995819568634f, 0.5621321201324463f, 0.8537796139717102f, +0.6555911898612976f, 0.041764385998249054f, 0.4187797009944916f, 0.9148240685462952f, 0.7684349417686462f, 0.6273493766784668f, 0.6229406595230103f, 0.3404700756072998f, +0.37935543060302734f, 0.976550281047821f, 0.8227263689041138f, 0.16593797504901886f, 0.3462187945842743f, 0.4871348738670349f, 0.9404013156890869f, 0.08363417536020279f, +0.1287672221660614f, 0.6844508051872253f, 0.8449923992156982f, 0.9373670220375061f, 0.0946040153503418f, 0.3459379971027374f, 0.8464142084121704f, 0.647133469581604f, +0.270802766084671f, 0.5576959848403931f, 0.9117850661277771f, 0.08363300561904907f, 0.7759185433387756f, 0.7920106649398804f, 0.034983426332473755f, 0.26387137174606323f, +0.6693989634513855f, 0.5592203140258789f, 0.3192697763442993f, 0.04545693099498749f, 0.35282737016677856f, 0.46792471408843994f, 0.6573768854141235f, 0.5654168128967285f, +0.9705425500869751f, 0.35596928000450134f, 0.7961609363555908f, 0.7374656200408936f, 0.2230670005083084f, 0.9520291090011597f, 0.9841638207435608f, 0.7584847807884216f, +0.3611443340778351f, 0.23489315807819366f, 0.24198991060256958f, 0.33764147758483887f, 0.46691223978996277f, 0.793046772480011f, 0.8127099871635437f, 0.6640537977218628f, +0.5582485198974609f, 0.28450122475624084f, 0.8462432622909546f, 0.9333443641662598f, 0.6409127116203308f, 0.8849723935127258f, 0.5788201093673706f, 0.5500873923301697f, +0.4943992495536804f, 0.7236458659172058f, 0.7691282033920288f, 0.36135393381118774f, 0.6928625106811523f, 0.18919382989406586f, 0.36942213773727417f, 0.5546094179153442f, +0.8797121644020081f, 0.42520463466644287f, 0.18401886522769928f, 0.04507305845618248f, 0.18239830434322357f, 0.2205151915550232f, 0.4532729685306549f, 0.23454950749874115f, +0.8723581433296204f, 0.3350153863430023f, 0.7939462661743164f, 0.4658460319042206f, 0.29002755880355835f, 0.14680612087249756f, 0.4501017928123474f, 0.8647994995117188f, +0.6406159996986389f, 0.15781398117542267f, 0.9691412448883057f, 0.7997035384178162f, 0.6749915480613708f, 0.17258667945861816f, 0.682649552822113f, 0.04583410173654556f, +0.03846772015094757f, 0.349006325006485f, 0.9039595127105713f, 0.9845970869064331f, 0.19984984397888184f, 0.12661145627498627f, 0.45997923612594604f, 0.11786095052957535f, +0.8413671255111694f, 0.547067403793335f, 0.3934110999107361f, 0.724673867225647f, 0.2721313238143921f, 0.6467245817184448f, 0.9080004096031189f, 0.7217759490013123f, +0.837797224521637f, 0.6675623059272766f, 0.6747857928276062f, 0.043352603912353516f, 0.8780126571655273f, 0.28226229548454285f, 0.8033129572868347f, 0.42734745144844055f, +0.8143987059593201f, 0.632408082485199f, 0.4375849962234497f, 0.8084573149681091f, 0.28718265891075134f, 0.6917858123779297f, 0.7127849459648132f, 0.4990820586681366f, +0.7828923463821411f, 0.42034104466438293f, 0.4778001010417938f, 0.1473933756351471f, 0.2067977637052536f, 0.1338927000761032f, 0.37186580896377563f, 0.7046142220497131f, +0.8391563296318054f, 0.8900661468505859f, 0.7600237727165222f, 0.6255747675895691f, 0.6965195536613464f, 0.9132246971130371f, 0.8627706170082092f, 0.3410521149635315f, +0.4711076617240906f, 0.1860729604959488f, 0.3271503448486328f, 0.9428375363349915f, 0.9473742246627808f, 0.6525470018386841f, 0.1627112627029419f, 0.2674708068370819f, +0.7915828824043274f, 0.09271136671304703f, 0.7361083626747131f, 0.8619407415390015f, 0.8710571527481079f, 0.14189627766609192f, 0.24113154411315918f, 0.5954194068908691f, +0.3228954076766968f, 0.4256415367126465f, 0.3516960144042969f, 0.6590234041213989f, 0.9909094572067261f, 0.8649609684944153f, 0.09438099712133408f, 0.6162113547325134f, +0.5213442444801331f, 0.8716083765029907f, 0.32945096492767334f, 0.496185302734375f, 0.5361036062240601f, 0.3503744602203369f, 0.9961517453193665f, 0.08941011130809784f, +0.6484599113464355f, 0.48837971687316895f, 0.9414522647857666f, 0.9088823795318604f, 0.10893966257572174f, 0.04789455607533455f, 0.24183189868927002f, 0.4697778820991516f, +0.443170428276062f, 0.6778573393821716f, 0.24834686517715454f, 0.8167640566825867f, 0.6001344919204712f, 0.42589396238327026f, 0.7789468765258789f, 0.9346034526824951f, +0.04275340959429741f, 0.1991288810968399f, 0.6924257874488831f, 0.2881137728691101f, 0.616396963596344f, 0.8450077176094055f, 0.9858490228652954f, 0.19117723405361176f, +0.6084972620010376f, 0.7871056795120239f, 0.4194922149181366f, 0.8072115182876587f, 0.232412189245224f, 0.17235733568668365f, 0.017294391989707947f, 0.8041496276855469f, +0.9111849665641785f, 0.15389609336853027f, 0.7521823048591614f, 0.8040235042572021f, 0.586065948009491f, 0.14882318675518036f, 0.8159805536270142f, 0.9781651496887207f, +0.7558873891830444f, 0.5656195282936096f, 0.7684750556945801f, 0.5339491367340088f, 0.47192344069480896f, 0.6510041356086731f, 0.9666579365730286f, 0.28502944111824036f, +0.8961231708526611f, 0.10902798920869827f, 0.5085938572883606f, 0.3714636266231537f, 0.16380159556865692f, 0.8375502824783325f, 0.4718899428844452f, 0.8165096640586853f, +0.09730296581983566f, 0.5847142934799194f, 0.3088145852088928f, 0.05287907272577286f, 0.319782018661499f, 0.1268199235200882f, 0.7555964589118958f, 0.1075902059674263f, +0.9672850966453552f, 0.8566212058067322f, 0.39292189478874207f, 0.291610449552536f, 0.9270207285881042f, 0.9078058004379272f, 0.976004421710968f, 0.15112949907779694f, +0.14474262297153473f, 0.8387640118598938f, 0.8168760538101196f, 0.005177837330847979f, 0.7367753982543945f, 0.9069569110870361f, 0.4534400701522827f, 0.9379587769508362f, +0.9524520635604858f, 0.5721111297607422f, 0.4803713858127594f, 0.1888524740934372f, 0.23404961824417114f, 0.4551113247871399f, 0.3079749345779419f, 0.9693865180015564f, +0.808000922203064f, 0.43350350856781006f, 0.5480109453201294f, 0.09014047682285309f, 0.8264458179473877f, 0.23887549340724945f, 0.11156484484672546f, 0.09851469099521637f, +0.46088895201683044f, 0.694271445274353f, 0.5459176898002625f, 0.8373810648918152f, 0.41518935561180115f, 0.5987111926078796f, 0.3365407884120941f, 0.3727381229400635f, +0.572701632976532f, 0.9782775640487671f, 0.42664477229118347f, 0.728774905204773f, 0.7810642719268799f, 0.33411842584609985f, 0.32931798696517944f, 0.10125194489955902f, +0.31196892261505127f, 0.02265896648168564f, 0.34039515256881714f, 0.5668860077857971f, 0.6183294653892517f, 0.23443232476711273f, 0.18366847932338715f, 0.4836517572402954f, +0.14498832821846008f, 0.9834625720977783f, 0.9399606585502625f, 0.5854928493499756f, 0.326313853263855f, 0.9820814728736877f, 0.6239581108093262f, 0.6215041875839233f, +0.8424826264381409f, 0.7503342032432556f, 0.39861318469047546f, 0.9045019745826721f, 0.8517073392868042f, 0.49163490533828735f, 0.32343775033950806f, 0.538062334060669f, +0.5346395373344421f, 0.5220151543617249f, 0.8421036601066589f, 0.7382708191871643f, 0.6898077726364136f, 0.5317967534065247f, 0.9509987831115723f, 0.7149127721786499f, +0.3277544677257538f, 0.0715506374835968f, 0.5593999028205872f, 0.868598222732544f, 0.22104033827781677f, 0.19309915602207184f, 0.12132511287927628f, 0.1117926687002182f, +0.5790812969207764f, 0.12509247660636902f, 0.5624380707740784f, 0.40827304124832153f, 0.9346904158592224f, 0.17877696454524994f, 0.9619581699371338f, 0.8961393237113953f, +0.06542770564556122f, 0.47393444180488586f, 0.11388347297906876f, 0.978813111782074f, 0.32136452198028564f, 0.6235525608062744f, 0.7871607542037964f, 0.620328962802887f, +0.32515639066696167f, 0.346203088760376f, 0.01901438646018505f, 0.023161325603723526f, 0.9802848100662231f, 0.9852339029312134f, 0.28913718461990356f, 0.40665894746780396f, +0.194994255900383f, 0.1350124180316925f, 0.018706785514950752f, 0.9653154611587524f, 0.10227292776107788f, 0.4379866123199463f, 0.44148626923561096f, 0.043288808315992355f, +0.5609085559844971f, 0.9540665745735168f, 0.6497026681900024f, 0.4969228506088257f, 0.3338606357574463f, 0.6302682161331177f, 0.12883727252483368f, 0.815631091594696f, +0.3506653308868408f, 0.5296201705932617f, 0.28328779339790344f, 0.2888529896736145f, 0.633571445941925f, 0.2231605350971222f, 0.8696396350860596f, 0.440417617559433f, +0.7571228742599487f, 0.8350810408592224f, 0.3195662200450897f, 0.1594589650630951f, 0.5619506239891052f, 0.05276423692703247f, 0.546134352684021f, 0.19218723475933075f, +0.6574867367744446f, 0.5865893959999084f, 0.4795459508895874f, 0.8639801740646362f, 0.8386573791503906f, 0.9167623519897461f, 0.8544082045555115f, 0.5940340161323547f, +0.6494836211204529f, 0.6375734806060791f, 0.8612819314002991f, 0.35063454508781433f, 0.8892552256584167f, 0.18937063217163086f, 0.8283548355102539f, 0.16642458736896515f, +0.013733550906181335f, 0.37297776341438293f, 0.4426235258579254f, 0.09381797164678574f, 0.20426706969738007f, 0.2158864289522171f, 0.018761901184916496f, 0.9103838205337524f, +0.05694546923041344f, 0.036759160459041595f, 0.7596153020858765f, 0.6457990407943726f, 0.737494707107544f, 0.6941156387329102f, 0.6769853830337524f, 0.3805796205997467f, +0.8418927192687988f, 0.46255916357040405f, 0.4798177182674408f, 0.5669645667076111f, 0.7623076438903809f, 0.22870220243930817f, 0.07450491189956665f, 0.14404818415641785f, +0.6046022772789001f, 0.04154585674405098f, 0.7355191707611084f, 0.4589862525463104f, 0.5727096796035767f, 0.6585240364074707f, 0.5545608997344971f, 0.9056341648101807f, +0.5668179392814636f, 0.8068886399269104f, 0.7273958921432495f, 0.6424257755279541f, 0.8524369597434998f, 0.34905269742012024f, 0.19559049606323242f, 0.8820946216583252f, +0.5898945331573486f, 0.5970900058746338f, 0.5654643774032593f, 0.6034458875656128f, 0.3513489365577698f, 0.8293266892433167f, 0.15527527034282684f, 0.934282124042511f, +0.7925012707710266f, 0.9056612253189087f, 0.4910515248775482f, 0.6839771270751953f, 0.8514149188995361f, 0.218420147895813f, 0.608788013458252f, 0.9106059670448303f, +0.3892221748828888f, 0.01055300235748291f, 0.04352252557873726f, 0.48463383316993713f, 0.07626895606517792f, 0.43959933519363403f, 0.5967651009559631f, 0.666374146938324f, +0.941000759601593f, 0.8699889183044434f, 0.569049060344696f, 0.25736817717552185f, 0.4797729253768921f, 0.09096238762140274f, 0.31913912296295166f, 0.735748827457428f, +0.14712095260620117f, 0.3175134062767029f, 0.9737507700920105f, 0.8726694583892822f, 0.5853458046913147f, 0.07204369455575943f, 0.3649490475654602f, 0.27422627806663513f, +0.1437227576971054f, 0.9335148334503174f, 0.8615722060203552f, 0.8009343147277832f, 0.9159615635871887f, 0.5901170372962952f, 0.6955406665802002f, 0.4138268828392029f, +0.35031428933143616f, 0.35434484481811523f, 0.33394041657447815f, 0.3177418112754822f, 0.11585698276758194f, 0.5657684803009033f, 0.6944908499717712f, 0.4525323510169983f, +0.8447492718696594f, 0.8438023328781128f, 0.49491965770721436f, 0.6802406311035156f, 0.7467771768569946f, 0.11318644881248474f, 0.33585265278816223f, 0.5950025320053101f, +0.8842587471008301f, 0.060458529740571976f, 0.3336276710033417f, 0.3086779713630676f, 0.5969394445419312f, 0.5948282480239868f, 0.01174708642065525f, 0.15383853018283844f, +0.3003653883934021f, 0.14467279613018036f, 0.8836199045181274f, 0.8049367070198059f, 0.5381786227226257f, 0.8511708974838257f, 0.6808708906173706f, 0.22624677419662476f, +0.39674821496009827f, 0.9596908688545227f, 0.8770784139633179f, 0.795717179775238f, 0.15133807063102722f, 0.10492673516273499f, 0.8325409293174744f, 0.5701379776000977f, +0.12483330816030502f, 0.47216710448265076f, 0.2788814902305603f, 0.45732638239860535f, 0.7936761975288391f, 0.8082588315010071f, 0.34372711181640625f, 0.5397011041641235f, +0.4744202196598053f, 0.09903578460216522f, 0.012987335212528706f, 0.34760308265686035f, 0.4203946888446808f, 0.8481997847557068f, 0.39890873432159424f, 0.2919462323188782f, +0.5481598973274231f, 0.7576261162757874f, 0.65767502784729f, 0.9487118124961853f, 0.9770836234092712f, 0.6423355937004089f, 0.6203495860099792f, 0.7680906653404236f, +0.6454582214355469f, 0.10366687923669815f, 0.9573532938957214f, 0.17183803021907806f, 0.8998079895973206f, 0.4016832411289215f, 0.22918689250946045f, 0.595331609249115f, +0.3078024983406067f, 0.7379280924797058f, 0.37719613313674927f, 0.4487450122833252f, 0.7596803307533264f, 0.5378738641738892f, 0.41554924845695496f, 0.07663510739803314f, +0.6490235924720764f, 0.9975316524505615f, 0.8603821992874146f, 0.5187722444534302f, 0.8543211817741394f, 0.0810813382267952f, 0.6806600093841553f, 0.6740545034408569f, +0.6930246949195862f, 0.7507729530334473f, 0.5430638790130615f, 0.48831650614738464f, 0.3821444809436798f, 0.7396177649497986f, 0.7555691003799438f, 0.3157680034637451f, +0.16216978430747986f, 0.41145703196525574f, 0.8498453497886658f, 0.3002997636795044f, 0.2384137660264969f, 0.8572951555252075f, 0.7085416316986084f, 0.1917603462934494f, +0.19857680797576904f, 0.02536853775382042f, 0.2871490716934204f, 0.6526758670806885f, 0.571159839630127f, 0.565741777420044f, 0.09566330909729004f, 0.201053649187088f, +0.6133891344070435f, 0.41734760999679565f, 0.6780125498771667f, 0.137222558259964f, 0.2928280532360077f, 0.4169134199619293f, 0.4321191608905792f, 0.9302982091903687f, +0.35619741678237915f, 0.8848552703857422f, 0.19959256052970886f, 0.5169464349746704f, 0.6196813583374023f, 0.9486631751060486f, 0.8666016459465027f, 0.8272039294242859f, +0.7223175168037415f, 0.7754552364349365f, 0.7136975526809692f, 0.42274847626686096f, 0.972097635269165f, 0.4546155035495758f, 0.32475191354751587f, 0.06592077016830444f, +0.7861869931221008f, 0.0542663037776947f, 0.6093177795410156f, 0.19029755890369415f, 0.640821635723114f, 0.5486480593681335f, 0.7448166012763977f, 0.536881148815155f, +0.571326494216919f, 0.3850638270378113f, 0.2844342887401581f, 0.5538886189460754f, 0.780857264995575f, 0.9295697808265686f, 0.6512764096260071f, 0.10168985277414322f, +0.49977758526802063f, 0.23986834287643433f, 0.29027053713798523f, 0.764087975025177f, 0.47841882705688477f, 0.04560670256614685f, 0.1468077003955841f, 0.2179664969444275f, +0.8026308417320251f, 0.8132880926132202f, 0.25555625557899475f, 0.19571544229984283f, 0.9823535680770874f, 0.5579182505607605f, 0.9772424697875977f, 0.5651070475578308f, +0.16663728654384613f, 0.10260209441184998f, 0.5621121525764465f, 0.7282854914665222f, 0.689012885093689f, 0.5599919557571411f, 0.5146951079368591f, 0.9251806139945984f, +0.4631980359554291f, 0.45007655024528503f, 0.5302678346633911f, 0.9593169093132019f, 0.67149418592453f, 0.08636721223592758f, 0.0739462599158287f, 0.9236336946487427f, +0.978592038154602f, 0.2180410623550415f, 0.9033886790275574f, 0.004017371218651533f, 0.7723474502563477f, 0.7237837910652161f, 0.6414586901664734f, 0.743649423122406f, +0.6890329718589783f, 0.6153958439826965f, 0.44085177779197693f, 0.3015400767326355f, 0.5932666063308716f, 0.207272469997406f, 0.8558326363563538f, 0.8044650554656982f, +0.5817237496376038f, 0.9609249234199524f, 0.1726050227880478f, 0.6345056295394897f, 0.8222580552101135f, 0.5282889008522034f, 0.37281307578086853f, 0.42404669523239136f, +0.2388841211795807f, 0.3343963921070099f, 0.7831940650939941f, 0.021465443074703217f, 0.450962096452713f, 0.543942391872406f, 0.8019179701805115f, 0.059141576290130615f, +0.03438448905944824f, 0.585891842842102f, 0.9958832263946533f, 0.6029295325279236f, 0.8263872265815735f, 0.29804015159606934f, 0.1633589267730713f, 0.09893877059221268f, +0.48731353878974915f, 0.7583052515983582f, 0.17294269800186157f, 0.0049384660087525845f, 0.015979154035449028f, 0.7163466215133667f, 0.8428847789764404f, 0.7979581356048584f, +0.16637562215328217f, 0.5658549070358276f, 0.9296001195907593f, 0.7344208359718323f, 0.9009230732917786f, 0.03030925802886486f, 0.36221951246261597f, 0.046058591455221176f, +0.6298319101333618f, 0.18420511484146118f, 0.34328004717826843f, 0.5286803841590881f, 0.1593029797077179f, 0.40856385231018066f, 0.9157305955886841f, 0.5314626693725586f, +0.5525758266448975f, 0.1400044709444046f, 0.5074260830879211f, 0.22953081130981445f, 0.8183158040046692f, 0.8227508664131165f, 0.8028780817985535f, 0.8765757083892822f, +0.10186970978975296f, 0.7077849507331848f, 0.7384283542633057f, 0.5540648102760315f, 0.9553717374801636f, 0.9578167796134949f, 0.9106877446174622f, 0.9777970314025879f, +0.800599217414856f, 0.580310046672821f, 0.8165706992149353f, 0.3787723183631897f, 0.5544465780258179f, 0.5883464217185974f, 0.9562356472015381f, 0.7275526523590088f, +0.9562231302261353f, 0.42272841930389404f, 0.29840075969696045f, 0.125940203666687f, 0.3440247178077698f, 0.3640460968017578f, 0.7136870622634888f, 0.7599141597747803f, +0.8531108498573303f, 0.547722339630127f, 0.6501573920249939f, 0.12654641270637512f, 0.39818188548088074f, 0.34436142444610596f, 0.05057952553033829f, 0.5157154202461243f, +0.6191403865814209f, 0.912054717540741f, 0.6562516093254089f, 0.5041925311088562f, 0.28382566571235657f, 0.7402653098106384f, 0.9223166704177856f, 0.7440967559814453f, +0.41509518027305603f, 0.6099956631660461f, 0.059428419917821884f, 0.5971365571022034f, 0.22959274053573608f, 0.2759808897972107f, 0.8725630640983582f, 0.5417957305908203f, +0.32506775856018066f, 0.9540033340454102f, 0.8539900779724121f, 0.5671975016593933f, 0.5626959800720215f, 0.07635512202978134f, 0.8576594591140747f, 0.2591150999069214f, +0.458728164434433f, 0.9651968479156494f, 0.9800368547439575f, 0.6998807191848755f, 0.7768673896789551f, 0.4564052224159241f, 0.38651201128959656f, 0.29385873675346375f, +0.7667909860610962f, 0.05659199878573418f, 0.8292171955108643f, 0.29586267471313477f, 0.37468859553337097f, 0.7833823561668396f, 0.2524982690811157f, 0.5630500316619873f, +0.3497062027454376f, 0.6755569577217102f, 0.5479681491851807f, 0.28523001074790955f, 0.5490294694900513f, 0.2660149037837982f, 0.10739157348871231f, 0.7316622734069824f, +0.13701285421848297f, 0.9765061736106873f, 0.07669790089130402f, 0.9666189551353455f, 0.33110854029655457f, 0.24687395989894867f, 0.7588509321212769f, 0.42907610535621643f, +0.29995089769363403f, 0.43747678399086f, 0.44371452927589417f, 0.846091628074646f, 0.4709945619106293f, 0.19668009877204895f, 0.2645486295223236f, 0.5084923505783081f, +0.04048556834459305f, 0.3931306302547455f, 0.35510510206222534f, 0.422793984413147f, 0.12145668268203735f, 0.5429190397262573f, 0.7451192736625671f, 0.973275363445282f, +0.8742004632949829f, 0.26679283380508423f, 0.6579141616821289f, 0.6983384490013123f, 0.14860956370830536f, 0.14784152805805206f, 0.25818532705307007f, 0.3450820744037628f, +0.45070892572402954f, 0.9427591562271118f, 0.8346372246742249f, 0.4181073307991028f, 0.17233312129974365f, 0.41661086678504944f, 0.7062559723854065f, 0.26070818305015564f, +0.9412517547607422f, 0.3770790696144104f, 0.7604717016220093f, 0.5653793811798096f, 0.16075558960437775f, 0.49451032280921936f, 0.9166377186775208f, 0.09207021445035934f, +0.10551856458187103f, 0.04863479360938072f, 0.045464616268873215f, 0.8202808499336243f, 0.5052435398101807f, 0.8127766251564026f, 0.9981480836868286f, 0.3454056978225708f, +0.5598047971725464f, 0.16579608619213104f, 0.9927023649215698f, 0.8091564774513245f, 0.41793712973594666f, 0.452513188123703f, 0.17844940721988678f, 0.23161637783050537f, +0.022252090275287628f, 0.21484127640724182f, 0.7666813135147095f, 0.2580610513687134f, 0.09434821456670761f, 0.685324490070343f, 0.15576590597629547f, 0.9326278567314148f, +0.553534746170044f, 0.49864551424980164f, 0.49640917778015137f, 0.5968117117881775f, 0.5164402723312378f, 0.23866555094718933f, 0.7962774038314819f, 0.9065167307853699f, +0.12787438929080963f, 0.6244819760322571f, 0.2682982385158539f, 0.9008007049560547f, 0.41399139165878296f, 0.46647462248802185f, 0.30455338954925537f, 0.4032699465751648f, +0.9561032652854919f, 0.2609896659851074f, 0.5425817370414734f, 0.817126452922821f, 0.6753510236740112f, 0.2084358185529709f, 0.37061184644699097f, 0.707943320274353f, +0.22237518429756165f, 0.23681361973285675f, 0.07172146439552307f, 0.5802664756774902f, 0.5197915434837341f, 0.9160407781600952f, 0.7138373851776123f, 0.7510772347450256f, +0.04869654402136803f, 0.33610060811042786f, 0.36637037992477417f, 0.46625274419784546f, 0.11012620478868484f, 0.004532214719802141f, 0.5285487771034241f, 0.9125214219093323f, +0.9884007573127747f, 0.7421707510948181f, 0.38351166248321533f, 0.8699132204055786f, 0.5915073752403259f, 0.5858888626098633f, 0.5984307527542114f, 0.6845172643661499f, +0.5892966389656067f, 0.1273488849401474f, 0.1919488161802292f, 0.3425922691822052f, 0.5207251906394958f, 0.8938520550727844f, 0.49853456020355225f, 0.935312032699585f, +0.890602707862854f, 0.23840169608592987f, 0.6514185667037964f, 0.5116173624992371f, 0.5187777280807495f, 0.7179705500602722f, 0.33574816584587097f, 0.4690755009651184f, +0.6188321113586426f, 0.2941298186779022f, 0.8675827383995056f, 0.11472784727811813f, 0.5470029711723328f, 0.24644599854946136f, 0.010438049212098122f, 0.22649402916431427f, +0.23323401808738708f, 0.7740039825439453f, 0.03188768029212952f, 0.2896498441696167f, 0.147780179977417f, 0.3733876049518585f, 0.36437463760375977f, 0.13910530507564545f, +0.19808922708034515f, 0.48388978838920593f, 0.8276761770248413f, 0.5002532005310059f, 0.6573771238327026f, 0.034651029855012894f, 0.28301697969436646f, 0.8341266512870789f, +0.1553972065448761f, 0.2693963050842285f, 0.2851014733314514f, 0.2979046702384949f, 0.1479121446609497f, 0.6826395988464355f, 0.08813443034887314f, 0.15467259287834167f, +0.17856036126613617f, 0.3059455454349518f, 0.08193431794643402f, 0.36286798119544983f, 0.5007749795913696f, 0.20314958691596985f, 0.5360244512557983f, 0.693983793258667f, +0.44061076641082764f, 0.6155683398246765f, 0.45020225644111633f, 0.7424858808517456f, 0.7631123065948486f, 0.6182618141174316f, 0.45699355006217957f, 0.6510027647018433f, +0.21839971840381622f, 0.560548722743988f, 0.3287801146507263f, 0.6319026947021484f, 0.8752661943435669f, 0.35789191722869873f, 0.022872652858495712f, 0.6655635237693787f, +0.9945999979972839f, 0.01981404796242714f, 0.05657126009464264f, 0.15427955985069275f, 0.6638613343238831f, 0.07047072798013687f, 0.6691403985023499f, 0.08762049674987793f, +0.387270450592041f, 0.844571053981781f, 0.7250718474388123f, 0.2325059175491333f, 0.8436790704727173f, 0.9834647178649902f, 0.7031375765800476f, 0.8233503699302673f, +0.09331440180540085f, 0.7597438097000122f, 0.9445589184761047f, 0.08469418436288834f, 0.7770610451698303f, 0.20358753204345703f, 0.19653566181659698f, 0.4490779638290405f, +0.013311345130205154f, 0.48363590240478516f, 0.4226865768432617f, 0.9200101494789124f, 0.2939800024032593f, 0.5971664190292358f, 0.3385125696659088f, 0.3217419981956482f, +0.2429058998823166f, 0.3126446604728699f, 0.19909535348415375f, 0.48307475447654724f, 0.052244171500205994f, 0.9921363592147827f, 0.6385849714279175f, 0.12082074582576752f, +0.8357197642326355f, 0.28416743874549866f, 0.20697857439517975f, 0.3937024772167206f, 0.7852540016174316f, 0.05847735330462456f, 0.2923603355884552f, 0.786628007888794f, +0.8869121074676514f, 0.3351006507873535f, 0.9281889200210571f, 0.427543044090271f, 0.5222486853599548f, 0.8326805233955383f, 0.5490161180496216f, 0.07690534740686417f, +0.7615965604782104f, 0.6369633078575134f, 0.7308168411254883f, 0.1394374668598175f, 0.002514466643333435f, 0.290514200925827f, 0.03267771750688553f, 0.4663524925708771f, +0.09657903015613556f, 0.4217448830604553f, 0.3092300295829773f, 0.08718132227659225f, 0.6058720350265503f, 0.7452613115310669f, 0.8195725083351135f, 0.017832200974225998f, +0.31500446796417236f, 0.37617114186286926f, 0.46546003222465515f, 0.9915533065795898f, 0.09614045917987823f, 0.9595932960510254f, 0.47347292304039f, 0.2794913649559021f, +0.33475005626678467f, 0.10124499350786209f, 0.4656095802783966f, 0.4790011942386627f, 0.29735422134399414f, 0.9617979526519775f, 0.25736141204833984f, 0.5402342081069946f, +0.5947325825691223f, 0.6557981371879578f, 0.8535703420639038f, 0.6667965054512024f, 0.06802774965763092f, 0.9019110798835754f, 0.010148895904421806f, 0.5157342553138733f, +0.1932734251022339f, 0.5898855328559875f, 0.19535863399505615f, 0.6119667291641235f, 0.9775914549827576f, 0.12799431383609772f, 0.8645601868629456f, 0.26462501287460327f, +0.43855246901512146f, 0.9213702082633972f, 0.6329778432846069f, 0.8033270835876465f, 0.2117508202791214f, 0.021357960999011993f, 0.2283305674791336f, 0.4971681535243988f, +0.20045815408229828f, 0.08725006878376007f, 0.3675575256347656f, 0.24164284765720367f, 0.4845649003982544f, 0.7093554735183716f, 0.8341127038002014f, 0.6347561478614807f, +0.767730176448822f, 0.567736804485321f, 0.09911534935235977f, 0.5065085291862488f, 0.7346622943878174f, 0.21845032274723053f, 0.136243999004364f, 0.9109355211257935f, +0.30950358510017395f, 0.7308454513549805f, 0.7965331077575684f, 0.6564999222755432f, 0.38102957606315613f, 0.4450811743736267f, 0.8645416498184204f, 0.09755702316761017f, +0.04221469163894653f, 0.6049732565879822f, 0.04598597437143326f, 0.13441050052642822f, 0.8548550009727478f, 0.34382179379463196f, 0.33407777547836304f, 0.016983166337013245f, +0.031871676445007324f, 0.4876440763473511f, 0.7642459869384766f, 0.023069551214575768f, 0.21006283164024353f, 0.7748590707778931f, 0.25412413477897644f, 0.16579808294773102f, +0.1141936331987381f, 0.9996858835220337f, 0.5651909112930298f, 0.5906991958618164f, 0.6568933129310608f, 0.9563372731208801f, 0.7809664011001587f, 0.37565526366233826f, +0.22806484997272491f, 0.5793979167938232f, 0.6893762946128845f, 0.29954391717910767f, 0.17811359465122223f, 0.13685913383960724f, 0.38732635974884033f, 0.42297154664993286f, +0.6105256676673889f, 0.26687392592430115f, 0.011402620002627373f, 0.801663875579834f, 0.21504367887973785f, 0.06319010257720947f, 0.939606249332428f, 0.6895385980606079f, +0.5135305523872375f, 0.5043131709098816f, 0.6599707007408142f, 0.6499229073524475f, 0.22539454698562622f, 0.5120095014572144f, 0.7519488334655762f, 0.27420327067375183f, +0.008371531963348389f, 0.7443520426750183f, 0.157077357172966f, 0.15494641661643982f, 0.10060235112905502f, 0.25977733731269836f, 0.515404224395752f, 0.6712545156478882f, +0.8195123076438904f, 0.45420700311660767f, 0.4707471430301666f, 0.5884284973144531f, 0.6444569826126099f, 0.21689777076244354f, 0.8228161931037903f, 0.38015055656433105f, +0.24873502552509308f, 0.8226260542869568f, 0.41383862495422363f, 0.3985957205295563f, 0.5778418183326721f, 0.5875564217567444f, 0.6476314663887024f, 0.16371071338653564f, +0.253955602645874f, 0.7163568139076233f, 0.4252803921699524f, 0.30493685603141785f, 0.349560409784317f, 0.15914848446846008f, 0.7852895259857178f, 0.9585908651351929f, +0.7784723043441772f, 0.04625065252184868f, 0.016710961237549782f, 0.8029348850250244f, 0.029198287054896355f, 0.8379709124565125f, 0.357573539018631f, 0.29631003737449646f, +0.6201075315475464f, 0.11883977800607681f, 0.031382717192173004f, 0.8344253301620483f, 0.9467401504516602f, 0.15463373064994812f, 0.9213812351226807f, 0.734005868434906f, +0.1088055893778801f, 0.3075142502784729f, 0.8146933913230896f, 0.6064997315406799f, 0.6614122986793518f, 0.9767274260520935f, 0.6857179403305054f, 0.40818294882774353f, +0.7716557383537292f, 0.46427643299102783f, 0.3376457393169403f, 0.41984957456588745f, 0.018055634573101997f, 0.7942578196525574f, 0.2729538381099701f, 0.7820062041282654f, +0.4343554675579071f, 0.1992618590593338f, 0.8842148780822754f, 0.05145271122455597f, 0.8353388905525208f, 0.09412477165460587f, 0.5177263021469116f, 0.1822623312473297f, +0.5869091153144836f, 0.43297842144966125f, 0.40838971734046936f, 0.5846019387245178f, 0.2772391438484192f, 0.6147730946540833f, 0.7844535112380981f, 0.9389476776123047f, +0.2453455775976181f, 0.9746426939964294f, 0.5659788250923157f, 0.7877557277679443f, 0.48725825548171997f, 0.6660171151161194f, 0.48968005180358887f, 0.8128915429115295f, +0.5430408120155334f, 0.8900361657142639f, 0.7909623980522156f, 0.8216084241867065f, 0.9554109573364258f, 0.36893749237060547f, 0.03310086205601692f, 0.6217030882835388f, +0.43187078833580017f, 0.6093645095825195f, 0.7524925470352173f, 0.7966594099998474f, 0.6129021048545837f, 0.2938077449798584f, 0.6568275690078735f, 0.3016669452190399f, +0.8229682445526123f, 0.6020894646644592f, 0.7352709770202637f, 0.14533212780952454f, 0.7739270329475403f, 0.3178347647190094f, 0.74189293384552f, 0.4970003068447113f, +0.0442868247628212f, 0.07682159543037415f, 0.8898542523384094f, 0.2341502159833908f, 0.009924894198775291f, 0.5574576258659363f, 0.8638818264007568f, 0.3990887403488159f, +0.7998144626617432f, 0.4602653682231903f, 0.06554021686315536f, 0.8552647233009338f, 0.45515021681785583f, 0.7551124095916748f, 0.22067628800868988f, 0.6143247485160828f, +0.014869308099150658f, 0.4086717665195465f, 0.9866605997085571f, 0.8201406598091125f, 0.4452897906303406f, 0.8870790004730225f, 0.6549956798553467f, 0.09220132231712341f, +0.749200701713562f, 0.629309892654419f, 0.6397115588188171f, 0.04561769217252731f, 0.790913462638855f, 0.8558219075202942f, 0.9261177182197571f, 0.4361434876918793f, +0.574977695941925f, 0.617507815361023f, 0.1338505744934082f, 0.9763814210891724f, 0.1743459403514862f, 0.652425229549408f, 0.6560846567153931f, 0.9382926225662231f, +0.9042579531669617f, 0.6282464861869812f, 0.9090076088905334f, 0.8503795862197876f, 0.8707733750343323f, 0.47029274702072144f, 0.3513791859149933f, 0.6304794549942017f, +0.015415294095873833f, 0.6885669827461243f, 0.3893386125564575f, 0.25600290298461914f, 0.31459376215934753f, 0.5317378640174866f, 0.22493869066238403f, 0.31818559765815735f, +0.5448722839355469f, 0.17692479491233826f, 0.6677927374839783f, 0.3552677631378174f, 0.7322791218757629f, 0.38481611013412476f, 0.459546834230423f, 0.385276198387146f, +0.7334826588630676f, 0.5934941172599792f, 0.23996123671531677f, 0.2120659202337265f, 0.6573072671890259f, 0.8753529191017151f, 0.968497097492218f, 0.4460807740688324f, +0.38495877385139465f, 0.5997920036315918f, 0.5430586338043213f, 0.09297885745763779f, 0.27016589045524597f, 0.39139533042907715f, 0.21714580059051514f, 0.40008050203323364f, +0.6985281109809875f, 0.1823732554912567f, 0.6283516883850098f, 0.024006493389606476f, 0.169626846909523f, 0.9378196597099304f, 0.22611384093761444f, 0.17320223152637482f, +0.7714921236038208f, 0.462204247713089f, 0.4723072648048401f, 0.3123026192188263f, 0.5344440937042236f, 0.8297295570373535f, 0.6148020029067993f, 0.8696753978729248f, +0.08517199009656906f, 0.9355615973472595f, 0.3066116273403168f, 0.5585065484046936f, 0.07051846385002136f, 0.8932825326919556f, 0.7698503732681274f, 0.9732434153556824f, +0.31726783514022827f, 0.35429027676582336f, 0.12045486271381378f, 0.5572668313980103f, 0.4340326189994812f, 0.22424565255641937f, 0.8580123782157898f, 0.9074723124504089f, +0.1670699268579483f, 0.023375513032078743f, 0.005829703528434038f, 0.9129470586776733f, 0.5226494073867798f, 0.48055538535118103f, 0.2105925977230072f, 0.9963451027870178f, +0.8952671885490417f, 0.6032847762107849f, 0.07149660587310791f, 0.7768651247024536f, 0.06131930649280548f, 0.4523938000202179f, 0.09893789887428284f, 0.7527331709861755f, +0.19567295908927917f, 0.26869043707847595f, 0.5149948000907898f, 0.9748107194900513f, 0.3099454343318939f, 0.6969453692436218f, 0.010542700998485088f, 0.6621844172477722f, +0.4993211627006531f, 0.9017418026924133f, 0.5229533910751343f, 0.07114505767822266f, 0.4018796980381012f, 0.3726721704006195f, 0.039436474442481995f, 0.18218104541301727f, +0.14667169749736786f, 0.13327254354953766f, 0.22524212300777435f, 0.3030979335308075f, 0.049741942435503006f, 0.5965562462806702f, 0.25408506393432617f, 0.016300508752465248f, +0.1641092747449875f, 0.5749256014823914f, 0.03282511979341507f, 0.9774221777915955f, 0.42521604895591736f, 0.9187307357788086f, 0.40962621569633484f, 0.4096074402332306f, +0.5374189019203186f, 0.913317859172821f, 0.5673277974128723f, 0.6569012999534607f, 0.869742751121521f, 0.46190014481544495f, 0.36870554089546204f, 0.21890194714069366f, +0.4419272541999817f, 0.9692065715789795f, 0.5162498950958252f, 0.5685682892799377f, 0.015411161817610264f, 0.5410330295562744f, 0.28345105051994324f, 0.5714081525802612f, +0.07840001583099365f, 0.7473624348640442f, 0.6028253436088562f, 0.35458609461784363f, 0.863727867603302f, 0.8567834496498108f, 0.1426127851009369f, 0.019281582906842232f, +0.9574796557426453f, 0.44533759355545044f, 0.49796271324157715f, 0.16964830458164215f, 0.9406083822250366f, 0.5040054321289062f, 0.421532541513443f, 0.576648473739624f, +0.6706634163856506f, 0.6798522472381592f, 0.6378399133682251f, 0.7727358341217041f, 0.5629021525382996f, 0.058401890099048615f, 0.1304151564836502f, 0.3478527069091797f, +0.8756484389305115f, 0.7953497767448425f, 0.5949314832687378f, 0.5822330117225647f, 0.5361485481262207f, 0.578433096408844f, 0.6781120300292969f, 0.5267541408538818f, +0.065127432346344f, 0.6297270059585571f, 0.7494972944259644f, 0.4126569330692291f, 0.7958983182907104f, 0.0568879060447216f, 0.20789051055908203f, 0.08811938017606735f, +0.42904385924339294f, 0.7027654647827148f, 0.6115458607673645f, 0.3114224076271057f, 0.7808285355567932f, 0.39625024795532227f, 0.42172566056251526f, 0.6219984889030457f, +0.1200011670589447f, 0.18748699128627777f, 0.24797558784484863f, 0.1414991170167923f, 0.6958195567131042f, 0.35028520226478577f, 0.3876505196094513f, 0.4909755289554596f, +0.21665839850902557f, 0.7808777093887329f, 0.04029321298003197f, 0.7381937503814697f, 0.699905514717102f, 0.6787438988685608f, 0.6507581472396851f, 0.396870493888855f, +0.9550904035568237f, 0.7097867131233215f, 0.6462947130203247f, 0.23031073808670044f, 0.03576081991195679f, 0.5806544423103333f, 0.63916015625f, 0.0838427022099495f, +0.149383082985878f, 0.595340371131897f, 0.16265960037708282f, 0.3954910337924957f, 0.8139365315437317f, 0.9397068619728088f, 0.6181126832962036f, 0.16088472306728363f, +0.13041208684444427f, 0.7272637486457825f, 0.9839509129524231f, 0.4615451395511627f, 0.08771773427724838f, 0.648904025554657f, 0.30334052443504333f, 0.43503764271736145f, +0.34125542640686035f, 0.44326984882354736f, 0.05509583279490471f, 0.30046167969703674f, 0.45343098044395447f, 0.44127190113067627f, 0.21412603557109833f, 0.49714088439941406f, +0.40331366658210754f, 0.7589098215103149f, 0.7237369418144226f, 0.8355899453163147f, 0.2087763398885727f, 0.07501780241727829f, 0.6454891562461853f, 0.8710755109786987f, +0.40875789523124695f, 0.7604044675827026f, 0.17876239120960236f, 0.8344573378562927f, 0.5406169295310974f, 0.4131917357444763f, 0.5444881319999695f, 0.7976641654968262f, +0.7912575602531433f, 0.21216829121112823f, 0.12292136996984482f, 0.5166784524917603f, 0.3492618203163147f, 0.5423621535301208f, 0.3150249123573303f, 0.09279699623584747f, +0.7944507002830505f, 0.36441999673843384f, 0.11476896703243256f, 0.46584317088127136f, 0.9178310632705688f, 0.4644983112812042f, 0.5081011056900024f, 0.8264354467391968f, +0.2732446491718292f, 0.19777743518352509f, 0.9551512598991394f, 0.30916017293930054f, 0.9864633679389954f, 0.9696825742721558f, 0.21960949897766113f, 0.050759706646203995f, +0.47064822912216187f, 0.8398041129112244f, 0.6431854963302612f, 0.3562360107898712f, 0.6596785187721252f, 0.2122497409582138f, 0.5320772528648376f, 0.6483961343765259f, +0.44588178396224976f, 0.13615600764751434f, 0.5055800676345825f, 0.4374461770057678f, 0.6359736919403076f, 0.292374849319458f, 0.08170706033706665f, 0.35488036274909973f, +0.021561628207564354f, 0.19006645679473877f, 0.09057524800300598f, 0.5963505506515503f, 0.9993888139724731f, 0.8737936019897461f, 0.0888693705201149f, 0.75076824426651f, +0.4572288990020752f, 0.5926324725151062f, 0.6758850812911987f, 0.8647615313529968f, 0.6170743703842163f, 0.422921359539032f, 0.05660717561841011f, 0.3374280333518982f, +0.9945685863494873f, 0.7481607794761658f, 0.7231476902961731f, 0.4154372811317444f, 0.4458261728286743f, 0.26965856552124023f, 0.7295532822608948f, 0.09520049393177032f, +0.9426208138465881f, 0.13568736612796783f, 0.5576450824737549f, 0.8290243744850159f, 0.19478635489940643f, 0.3137006163597107f, 0.8307012915611267f, 0.2157413810491562f, +0.4132857322692871f, 0.8360196948051453f, 0.18835139274597168f, 0.9657498598098755f, 0.8361114859580994f, 0.2756466567516327f, 0.024818969890475273f, 0.0027443573344498873f, +0.38214316964149475f, 0.819202184677124f, 0.1516541689634323f, 0.7574657201766968f, 0.8453144431114197f, 0.40309011936187744f, 0.25501227378845215f, 0.041482195258140564f, +0.6124917268753052f, 0.12077409029006958f, 0.6866743564605713f, 0.3627359867095947f, 0.13380646705627441f, 0.5890852212905884f, 0.7407841086387634f, 0.5440883040428162f, +0.4661741256713867f, 0.25503799319267273f, 0.12735897302627563f, 0.2833976447582245f, 0.911687433719635f, 0.47519832849502563f, 0.16906560957431793f, 0.40087613463401794f, +0.5481018424034119f, 0.7079694867134094f, 0.9055728912353516f, 0.04845406860113144f, 0.8781169056892395f, 0.40423765778541565f, 0.27327942848205566f, 0.7458196878433228f, +0.800559937953949f, 0.12268011271953583f, 0.6921689510345459f, 0.8501626253128052f, 0.007867220789194107f, 0.3449597656726837f, 0.7592018246650696f, 0.8623772263526917f, +0.6889387369155884f, 0.08553656935691833f, 0.1120724305510521f, 0.19636988639831543f, 0.6411614418029785f, 0.1527501344680786f, 0.038069043308496475f, 0.08129770308732986f, +0.3569895327091217f, 0.3337584137916565f, 0.2761353850364685f, 0.01676192693412304f, 0.3595006763935089f, 0.8286221623420715f, 0.11462618410587311f, 0.5306154489517212f, +0.3653380274772644f, 0.1975909173488617f, 0.15577393770217896f, 0.877387285232544f, 0.05367960035800934f, 0.567310094833374f, 0.12285345792770386f, 0.9507032632827759f, +0.8125550746917725f, 0.26318109035491943f, 0.2490662783384323f, 0.3518819510936737f, 0.9440258145332336f, 0.6562062501907349f, 0.4191533327102661f, 0.5656295418739319f, +0.5235134363174438f, 0.8047582507133484f, 0.9125440120697021f, 0.42598506808280945f, 0.2273314744234085f, 0.6973357796669006f, 0.2546786367893219f, 0.1398061066865921f, +0.4568498432636261f, 0.44183048605918884f, 0.01071904320269823f, 0.47749629616737366f, 0.47135475277900696f, 0.6133410334587097f, 0.4900275468826294f, 0.09416335076093674f, +0.06514633446931839f, 0.22700996696949005f, 0.14199019968509674f, 0.715603768825531f, 0.14258311688899994f, 0.022603105753660202f, 0.4081127345561981f, 0.2318286895751953f, +0.13364602625370026f, 0.9547637701034546f, 0.0212416872382164f, 0.8605378270149231f, 0.8186411261558533f, 0.8348776698112488f, 0.6645104885101318f, 0.9505473375320435f, +0.5913138389587402f, 0.05117795616388321f, 0.05038702115416527f, 0.7347308993339539f, 0.4525873363018036f, 0.8238128423690796f, 0.7975826859474182f, 0.02417704649269581f, +0.5030921697616577f, 0.011222146451473236f, 0.9791391491889954f, 0.5629008412361145f, 0.6039721369743347f, 0.14075203239917755f, 0.7138895988464355f, 0.7478355765342712f, +0.5943285822868347f, 0.5311577916145325f, 0.6839660406112671f, 0.5928083658218384f, 0.03259582072496414f, 0.8620595335960388f, 0.18312223255634308f, 0.4982852041721344f, +0.05283990502357483f, 0.8667044639587402f, 0.5802772641181946f, 0.01351192407310009f, 0.5928527116775513f, 0.4914059042930603f, 0.7796770930290222f, 0.7267748713493347f, +0.2784041464328766f, 0.917339563369751f, 0.07917994260787964f, 0.4591641128063202f, 0.505443274974823f, 0.49223431944847107f, 0.9755482077598572f, 0.2155337631702423f, +0.4673527777194977f, 0.2818102240562439f, 0.030223244801163673f, 0.10452285408973694f, 0.43434661626815796f, 0.28461185097694397f, 0.07135612517595291f, 0.12196151912212372f, +0.7059363722801208f, 0.7337434887886047f, 0.4050200283527374f, 0.3613796532154083f, 0.8322113752365112f, 0.3622269630432129f, 0.024333512410521507f, 0.8625353574752808f, +0.5758901238441467f, 0.08995811641216278f, 0.9011985063552856f, 0.9975745677947998f, 0.6657969355583191f, 0.5841735005378723f, 0.06516890972852707f, 0.06831428408622742f, +0.7013012766838074f, 0.9085066914558411f, 0.5249353051185608f, 0.11745718866586685f, 0.285333514213562f, 0.5958430767059326f, 0.9527171850204468f, 0.6078888177871704f, +0.6593550443649292f, 0.5978918671607971f, 0.3344598412513733f, 0.27267682552337646f, 0.21708063781261444f, 0.3406975269317627f, 0.3906852602958679f, 0.2694500982761383f, +0.973895788192749f, 0.6107914447784424f, 0.5278735160827637f, 0.24771565198898315f, 0.3222702145576477f, 0.7202987670898438f, 0.6658678650856018f, 0.5596429109573364f, +0.939044177532196f, 0.6416250467300415f, 0.5804696679115295f, 0.26815342903137207f, 0.648818850517273f, 0.6591957211494446f, 0.17739224433898926f, 0.26152437925338745f, +0.10823995620012283f, 0.8677722215652466f, 0.6364566683769226f, 0.1399688571691513f, 0.042525723576545715f, 0.9437466859817505f, 0.9020317792892456f, 0.5327423214912415f, +0.1183299645781517f, 0.964774489402771f, 0.2891153395175934f, 0.6231315732002258f, 0.06241022050380707f, 0.8380143642425537f, 0.4872163236141205f, 0.9677347540855408f, +0.8858006596565247f, 0.05061962082982063f, 0.4865442216396332f, 0.6694040298461914f, 0.08202385902404785f, 0.9804871082305908f, 0.9702462553977966f, 0.5269064903259277f, +0.2191186398267746f, 0.04534239321947098f, 0.9812413454055786f, 0.31654661893844604f, 0.4995279014110565f, 0.30242207646369934f, 0.0714382529258728f, 0.5783684253692627f, +0.8381806015968323f, 0.7389525771141052f, 0.7655229568481445f, 0.8390331864356995f, 0.9685980677604675f, 0.2891215682029724f, 0.9036178588867188f, 0.3458488881587982f, +0.14999280869960785f, 0.33422383666038513f, 0.14800295233726501f, 0.5416836142539978f, 0.8613149523735046f, 0.28565144538879395f, 0.6650139093399048f, 0.7835116386413574f, +0.24371154606342316f, 0.18931688368320465f, 0.7129859924316406f, 0.3647417724132538f, 0.8189460039138794f, 0.33796238899230957f, 0.18656674027442932f, 0.09693854302167892f, +0.5183601379394531f, 0.013749287463724613f, 0.033091142773628235f, 0.01882622390985489f, 0.8015996217727661f, 0.39396482706069946f, 0.6455643177032471f, 0.39944007992744446f, +0.9064040780067444f, 0.8547985553741455f, 0.8368915915489197f, 0.9536107182502747f, 0.5907731056213379f, 0.676893949508667f, 0.9973596334457397f, 0.17096489667892456f, +0.5521183609962463f, 0.7070504426956177f, 0.36052000522613525f, 0.07212429493665695f, 0.21406906843185425f, 0.8811119198799133f, 0.403940349817276f, 0.48128291964530945f, +0.6671767830848694f, 0.07077563554048538f, 0.8714585304260254f, 0.8337085843086243f, 0.17201460897922516f, 0.296118825674057f, 0.3538476526737213f, 0.30895712971687317f, +0.8342952728271484f, 0.17972785234451294f, 0.043647076934576035f, 0.4676039516925812f, 0.7262374758720398f, 0.2699752449989319f, 0.7384724020957947f, 0.2515278160572052f, +0.2886689305305481f, 0.20454254746437073f, 0.7680227160453796f, 0.017544372007250786f, 0.1758810430765152f, 0.6048486232757568f, 0.15645891427993774f, 0.6925740242004395f, +0.5775827169418335f, 0.8102414011955261f, 0.1320473700761795f, 0.5062366127967834f, 0.39037057757377625f, 0.6551806926727295f, 0.578109622001648f, 0.13248588144779205f, +0.8462768197059631f, 0.49582183361053467f, 0.49973493814468384f, 0.7783365249633789f, 0.44223183393478394f, 0.8930637836456299f, 0.0143373291939497f, 0.2970232665538788f, +0.3554936647415161f, 0.47536516189575195f, 0.9034615159034729f, 0.24181720614433289f, 0.4830892086029053f, 0.42457881569862366f, 0.7942586541175842f, 0.34068071842193604f, +0.8485503196716309f, 0.847213625907898f, 0.00028493895661085844f, 0.26627278327941895f, 0.01493625994771719f, 0.15868905186653137f, 0.39646628499031067f, 0.45512068271636963f, +0.27188029885292053f, 0.4713763892650604f, 0.4883042573928833f, 0.6028802990913391f, 0.4756224751472473f, 0.4543202221393585f, 0.8172831535339355f, 0.7616668343544006f, +0.34957194328308105f, 0.36702850461006165f, 0.2266688346862793f, 0.663027822971344f, 0.06445258855819702f, 0.4596445858478546f, 0.21574920415878296f, 0.2920711934566498f, +0.24698954820632935f, 0.17211362719535828f, 0.411425918340683f, 0.4452768862247467f, 0.24487189948558807f, 0.3272576928138733f, 0.25363579392433167f, 0.9016926884651184f, +0.9052233695983887f, 0.9436159729957581f, 0.30900871753692627f, 0.9976465702056885f, 0.14474357664585114f, 0.8693176507949829f, 0.44344034790992737f, 0.25975796580314636f, +0.29497116804122925f, 0.38955968618392944f, 0.5711030960083008f, 0.41468822956085205f, 0.568455159664154f, 0.2546637952327728f, 0.8164005279541016f, 0.8723140954971313f, +0.7268623113632202f, 0.43066251277923584f, 0.4566937983036041f, 0.5367550849914551f, 0.7085674405097961f, 0.5670899152755737f, 0.7729302644729614f, 0.7322848439216614f, +0.6446900367736816f, 0.5059552192687988f, 0.7282719016075134f, 0.691901445388794f, 0.32471963763237f, 0.11400822550058365f, 0.7197796702384949f, 0.2646063566207886f, +0.7484192848205566f, 0.7344132661819458f, 0.9246203303337097f, 0.47906777262687683f, 0.6107216477394104f, 0.7567223906517029f, 0.2776002883911133f, 0.42238202691078186f, +0.338581919670105f, 0.7048711776733398f, 0.7247509360313416f, 0.35854583978652954f, 0.7172719240188599f, 0.02701086923480034f, 0.4989759922027588f, 0.37416139245033264f, +0.9454524517059326f, 0.7272323369979858f, 0.030885402113199234f, 0.8309367299079895f, 0.5742493271827698f, 0.3031870126724243f, 0.8572216033935547f, 0.8426511883735657f, +0.10798775404691696f, 0.35407203435897827f, 0.7517939209938049f, 0.6670063138008118f, 0.22912736237049103f, 0.7392468452453613f, 0.9293457865715027f, 0.681085467338562f, +0.4705382287502289f, 0.8498907089233398f, 0.07970558106899261f, 0.43845340609550476f, 0.7585096955299377f, 0.23946057260036469f, 0.11968211084604263f, 0.3568497598171234f, +0.9257818460464478f, 0.8729246258735657f, 0.7273591160774231f, 0.8958113193511963f, 0.964748203754425f, 0.33470264077186584f, 0.3811333477497101f, 0.7440683245658875f, +0.04585205391049385f, 0.22665606439113617f, 0.38371342420578003f, 0.022561486810445786f, 0.9454577565193176f, 0.3826218247413635f, 0.05693786218762398f, 0.5588026642799377f, +0.12477292865514755f, 0.4979560971260071f, 0.2492906004190445f, 0.3511444926261902f, 0.9965897798538208f, 0.021007858216762543f, 0.5612763166427612f, 0.5646694898605347f, +0.2665305435657501f, 0.7594227194786072f, 0.5363712906837463f, 0.22533981502056122f, 0.15526889264583588f, 0.4229157567024231f, 0.5851037502288818f, 0.04826745390892029f, +0.1179359182715416f, 0.3368561267852783f, 0.424507737159729f, 0.769402027130127f, 0.3479260802268982f, 0.00919985119253397f, 0.8204460740089417f, 0.1414218246936798f, +0.08615895360708237f, 0.6591918468475342f, 0.41126078367233276f, 0.6145492196083069f, 0.5460386872291565f, 0.4671664237976074f, 0.579930305480957f, 0.4637300372123718f, +0.6484242677688599f, 0.9671593308448792f, 0.3520597219467163f, 0.8537496328353882f, 0.38519781827926636f, 0.30484893918037415f, 0.40989425778388977f, 0.8482250571250916f, +0.3078107535839081f, 0.5078858137130737f, 0.7644492387771606f, 0.1674892157316208f, 0.27392247319221497f, 0.5181412696838379f, 0.35835057497024536f, 0.08414816856384277f, +0.6268779635429382f, 0.011239382438361645f, 0.48150715231895447f, 0.8837683796882629f, 0.21175436675548553f, 0.8332299590110779f, 0.03857475519180298f, 0.8034984469413757f, +0.35405316948890686f, 0.5546971559524536f, 0.3335670828819275f, 0.3205941617488861f, 0.18627266585826874f, 0.022667640820145607f, 0.8090994358062744f, 0.5605264902114868f, +0.3830839693546295f, 0.941475510597229f, 0.9941936135292053f, 0.7092800140380859f, 0.15142899751663208f, 0.4118812382221222f, 0.429703027009964f, 0.12376030534505844f, +0.013255451805889606f, 0.39169472455978394f, 0.7240994572639465f, 0.9122769832611084f, 0.7799520492553711f, 0.5002619624137878f, 0.17282584309577942f, 0.686981737613678f, +0.15473560988903046f, 0.9658717513084412f, 0.9971224665641785f, 0.12511174380779266f, 0.3665570914745331f, 0.41177240014076233f, 0.6810212731361389f, 0.6325497031211853f, +0.65863436460495f, 0.05041184648871422f, 0.2511084973812103f, 0.8989523649215698f, 0.7969578504562378f, 0.04592103883624077f, 0.39277639985084534f, 0.2501462996006012f, +0.7773315906524658f, 0.26837900280952454f, 0.5767156481742859f, 0.9806299805641174f, 0.8513436317443848f, 0.2887527346611023f, 0.4373528063297272f, 0.5156379342079163f, +0.1417648047208786f, 0.44970911741256714f, 0.4261557459831238f, 0.4807536005973816f, 0.7727843523025513f, 0.6566081643104553f, 0.7805473208427429f, 0.46537134051322937f, +0.41243746876716614f, 0.5044002532958984f, 0.2642858624458313f, 0.11196110397577286f, 0.07397046685218811f, 0.5943901538848877f, 0.878903329372406f, 0.5863185524940491f, +0.31457245349884033f, 0.9984798431396484f, 0.5432153940200806f, 0.46712663769721985f, 0.3223642110824585f, 0.47486817836761475f, 0.20913062989711761f, 0.4714132845401764f, +0.6438313722610474f, 0.5407165884971619f, 0.021219579502940178f, 0.4055587351322174f, 0.03361175209283829f, 0.9934346079826355f, 0.38928675651550293f, 0.7884813547134399f, +0.9668828845024109f, 0.12113199383020401f, 0.1426762193441391f, 0.8663025498390198f, 0.8732476830482483f, 0.4445004463195801f, 0.4218846261501312f, 0.10726503282785416f, +0.1950547844171524f, 0.12606029212474823f, 0.9774017930030823f, 0.46641817688941956f, 0.9227265119552612f, 0.6658572554588318f, 0.09692046046257019f, 0.20821884274482727f, +0.292724609375f, 0.051532428711652756f, 0.830589771270752f, 0.7585253119468689f, 0.4827381372451782f, 0.15788201987743378f, 0.39267581701278687f, 0.9489816427230835f, +0.8839859962463379f, 0.3378267288208008f, 0.6310445666313171f, 0.34860360622406006f, 0.17178067564964294f, 0.03893701359629631f, 0.8813800811767578f, 0.6257457137107849f, +0.9876512289047241f, 0.7483140826225281f, 0.8685299158096313f, 0.9192180633544922f, 0.47534435987472534f, 0.5231711864471436f, 0.1926458179950714f, 0.019321832805871964f, +0.03836726024746895f, 0.9340930581092834f, 0.4329109787940979f, 0.8679236769676208f, 0.15612435340881348f, 0.7002968192100525f, 0.8011676669120789f, 0.9225367903709412f, +0.19270530343055725f, 0.5663388967514038f, 0.8200154304504395f, 0.6666884422302246f, 0.26582658290863037f, 0.2313385009765625f, 0.6528120040893555f, 0.03775133565068245f, +0.8008703589439392f, 0.34303542971611023f, 0.2266470491886139f, 0.8677593469619751f, 0.9549827575683594f, 0.9572351574897766f, 0.9061740636825562f, 0.5038570761680603f, +0.06163667514920235f, 0.1925395280122757f, 0.00774642638862133f, 0.7875379920005798f, 0.6663299202919006f, 0.9982012510299683f, 0.9943870902061462f, 0.6267213225364685f, +0.3950819969177246f, 0.3390563130378723f, 0.5297670960426331f, 0.3478206396102905f, 0.37288278341293335f, 0.16237026453018188f, 0.1402900218963623f, 0.04053357243537903f, +0.05004938691854477f, 0.1243935152888298f, 0.2301199734210968f, 0.36394545435905457f, 0.28494566679000854f, 0.6292767524719238f, 0.932515561580658f, 0.36972394585609436f, +0.8697963953018188f, 0.7542570233345032f, 0.6447027325630188f, 0.9673635363578796f, 0.7472339272499084f, 0.8412820100784302f, 0.20258545875549316f, 0.20913547277450562f, +0.6417856812477112f, 0.5732734203338623f, 0.16374333202838898f, 0.13157621026039124f, 0.6033344268798828f, 0.7639254331588745f, 0.010114333592355251f, 0.2909977436065674f, +0.5558221340179443f, 0.29670077562332153f, 0.4900730848312378f, 0.7831056118011475f, 0.027019592002034187f, 0.7727911472320557f, 0.9750553369522095f, 0.49521276354789734f, +0.633176863193512f, 0.5157322287559509f, 0.6399803757667542f, 0.22430260479450226f, 0.47176557779312134f, 0.297199010848999f, 0.5658372044563293f, 0.1996673196554184f, +0.9775893092155457f, 0.09457021951675415f, 0.8904250264167786f, 0.275644987821579f, 0.9416215419769287f, 0.8605055212974548f, 0.7561608552932739f, 0.9053369164466858f, +0.038629088550806046f, 0.07609455287456512f, 0.44859442114830017f, 0.39623191952705383f, 0.9733183979988098f, 0.5980339646339417f, 0.590361475944519f, 0.3132740557193756f, +0.23079365491867065f, 0.13292378187179565f, 0.8414338231086731f, 0.4580563008785248f, 0.22159844636917114f, 0.6476268768310547f, 0.7084150314331055f, 0.9315027594566345f, +0.5904114246368408f, 0.17429184913635254f, 0.286556601524353f, 0.22351312637329102f, 0.8871809840202332f, 0.7621434926986694f, 0.25867244601249695f, 0.3093072175979614f, +0.06853039562702179f, 0.44521859288215637f, 0.9328976273536682f, 0.15083466470241547f, 0.6237279772758484f, 0.9783839583396912f, 0.1943569928407669f, 0.284678190946579f, +0.7366509437561035f, 0.5894444584846497f, 0.701958179473877f, 0.09300215542316437f, 0.6340581178665161f, 0.0915788933634758f, 0.9884628653526306f, 0.9714219570159912f, +0.3384705185890198f, 0.821520984172821f, 0.7523596286773682f, 0.7190125584602356f, 0.14122864603996277f, 0.7697578072547913f, 0.3646417260169983f, 0.18577535450458527f, +0.07970602810382843f, 0.7176031470298767f, 0.7306300401687622f, 0.7984692454338074f, 0.9280053973197937f, 0.6038626432418823f, 0.9266368746757507f, 0.6493854522705078f, +0.13428018987178802f, 0.9289843440055847f, 0.258087158203125f, 0.8470433354377747f, 0.2002800852060318f, 0.37043246626853943f, 0.815829873085022f, 0.4706588387489319f, +0.5720000267028809f, 0.1622636765241623f, 0.03235804662108421f, 0.7055075764656067f, 0.6482402086257935f, 0.9466394782066345f, 0.17123311758041382f, 0.5494840741157532f, +0.860987663269043f, 0.10361012816429138f, 0.15740971267223358f, 0.17791125178337097f, 0.5116934180259705f, 0.5181965827941895f, 0.2575255334377289f, 0.8878380060195923f, +0.2310839295387268f, 0.7402544021606445f, 0.391212522983551f, 0.5204917192459106f, 0.5311657786369324f, 0.8752933740615845f, 0.29602229595184326f, 0.34963715076446533f, +0.5208508372306824f, 0.2034848928451538f, 0.6831521391868591f, 0.8106855750083923f, 0.33187422156333923f, 0.38588497042655945f, 0.4484993517398834f, 0.3497059941291809f, +0.42520326375961304f, 0.8469862341880798f, 0.2340088039636612f, 0.2811846435070038f, 0.34947657585144043f, 0.42621755599975586f, 0.2997463345527649f, 0.3062954843044281f, +0.5769904255867004f, 0.5851696133613586f, 0.17304278910160065f, 0.8046548366546631f, 0.7947982549667358f, 0.1893899291753769f, 0.2064565122127533f, 0.7973220348358154f, +0.8992711901664734f, 0.07811161875724792f, 0.3639068603515625f, 0.47353121638298035f, 0.3548324406147003f, 0.2511727809906006f, 0.5943740606307983f, 0.8688438534736633f, +0.6344490647315979f, 0.6450708508491516f, 0.25638654828071594f, 0.9837442636489868f, 0.4759633243083954f, 0.0544801689684391f, 0.03737751767039299f, 0.9206336140632629f, +0.5032801032066345f, 0.6417168974876404f, 0.9083157777786255f, 0.4112520217895508f, 0.45590633153915405f, 0.46868419647216797f, 0.5204451680183411f, 0.8785086274147034f, +0.41934695839881897f, 0.44692230224609375f, 0.09691943228244781f, 0.7248910665512085f, 0.7572018504142761f, 0.02540079690515995f, 0.47572988271713257f, 0.3111925721168518f, +0.45721134543418884f, 0.9738987684249878f, 0.11482542753219604f, 0.29767507314682007f, 0.04597141593694687f, 0.5331369042396545f, 0.23322799801826477f, 0.42664602398872375f, +0.44114944338798523f, 0.34087419509887695f, 0.7841855883598328f, 0.2557581663131714f, 0.7480978965759277f, 0.45815417170524597f, 0.2462017685174942f, 0.2858295440673828f, +0.4573144018650055f, 0.9952889680862427f, 0.4563782811164856f, 0.7939286828041077f, 0.5241610407829285f, 0.4244363307952881f, 0.8507025837898254f, 0.35898178815841675f, +0.5369986891746521f, 0.7744920253753662f, 0.13249467313289642f, 0.08721452206373215f, 0.7445864081382751f, 0.6549901366233826f, 0.4029693901538849f, 0.9553594589233398f, +0.4269818663597107f, 0.3232268989086151f, 0.4429692029953003f, 0.6813588738441467f, 0.20862384140491486f, 0.7105647921562195f, 0.9243482351303101f, 0.3360845744609833f, +0.545258641242981f, 0.1222299113869667f, 0.5221955180168152f, 0.5206576585769653f, 0.7017532587051392f, 0.5204159617424011f, 0.8407676219940186f, 0.6425126791000366f, +0.12963001430034637f, 0.8480867743492126f, 0.7174088954925537f, 0.8462285399436951f, 0.5667020678520203f, 0.4121035933494568f, 0.3162873685359955f, 0.6780503988265991f, +0.3822040557861328f, 0.7063775658607483f, 0.4313020706176758f, 0.2237725704908371f, 0.6947845816612244f, 0.2973652482032776f, 0.7127487063407898f, 0.7627550363540649f, +0.08205347508192062f, 0.5394781827926636f, 0.6787774562835693f, 0.6461648344993591f, 0.5056236386299133f, 0.9608848094940186f, 0.30269017815589905f, 0.45124363899230957f, +0.20383037626743317f, 0.6524989604949951f, 0.13377951085567474f, 0.21528086066246033f, 0.6499632596969604f, 0.987331211566925f, 0.853660523891449f, 0.3024277985095978f, +0.020159585401415825f, 0.9112796783447266f, 0.8562846183776855f, 0.3357033133506775f, 0.5954826474189758f, 0.724608302116394f, 0.9316444993019104f, 0.15722261369228363f, +0.4643472135066986f, 0.14591775834560394f, 0.9037349820137024f, 0.45535093545913696f, 0.7096764445304871f, 0.7643343806266785f, 0.8915576338768005f, 0.06897877901792526f, +0.02097162790596485f, 0.6054970026016235f, 0.2865349054336548f, 0.021489161998033524f, 0.7589945793151855f, 0.9950699806213379f, 0.907640814781189f, 0.11289875209331512f, +0.8532453775405884f, 0.8812112212181091f, 0.871798038482666f, 0.5005189776420593f, 0.14014367759227753f, 0.08491957187652588f, 0.9134561419487f, 0.1740913689136505f, +0.8648759722709656f, 0.6700441837310791f, 0.9131290912628174f, 0.1988467425107956f, 0.3965538442134857f, 0.49990397691726685f, 0.29645583033561707f, 0.6445833444595337f, +0.0229587871581316f, 0.9639635682106018f, 0.29564720392227173f, 0.4321339428424835f, 0.5329552292823792f, 0.7288673520088196f, 0.7107374668121338f, 0.22609645128250122f, +0.3302415907382965f, 0.6391828656196594f, 0.19586920738220215f, 0.26197072863578796f, 0.06162617355585098f, 0.8308209180831909f, 0.641459047794342f, 0.05746491253376007f, +0.8386222720146179f, 0.1083197221159935f, 0.0843082070350647f, 0.890559196472168f, 0.34073400497436523f, 0.3697753846645355f, 0.269072562456131f, 0.920852780342102f, +0.24273627996444702f, 0.746744692325592f, 0.5659509897232056f, 0.20488810539245605f, 0.2147890329360962f, 0.2667594850063324f, 0.07236674427986145f, 0.2658344805240631f, +0.8394709229469299f, 0.6124916076660156f, 0.3668728470802307f, 0.4241044223308563f, 0.5484573245048523f, 0.880395233631134f, 0.3110032379627228f, 0.0036787681747227907f, +0.4884248673915863f, 0.16553296148777008f, 0.2050197571516037f, 0.6081820726394653f, 0.5283691883087158f, 0.8168280124664307f, 0.24715936183929443f, 0.00880558229982853f, +0.34786033630371094f, 0.599123477935791f, 0.32009053230285645f, 0.17677590250968933f, 0.6324827075004578f, 0.7266175746917725f, 0.02218882367014885f, 0.6258788704872131f, +0.7376405596733093f, 0.1958022117614746f, 0.6880795955657959f, 0.8445165753364563f, 0.9747859835624695f, 0.3039701581001282f, 0.09590122103691101f, 0.009450215846300125f, +0.4839852452278137f, 0.8928187489509583f, 0.4097904860973358f, 0.005334998946636915f, 0.7028831243515015f, 0.23537567257881165f, 0.3437839448451996f, 0.4557740390300751f, +0.09666699171066284f, 0.5393470525741577f, 0.04225583374500275f, 0.532070517539978f, 0.0889548510313034f, 0.704243540763855f, 0.5018322467803955f, 0.17345531284809113f, +0.7563541531562805f, 0.3880041539669037f, 0.5781568288803101f, 0.32719165086746216f, 0.31523042917251587f, 0.8327775597572327f, 0.02957351878285408f, 0.49899789690971375f, +0.8051798939704895f, 0.1923934370279312f, 0.8749380111694336f, 0.4235667288303375f, 0.9641748666763306f, 0.6158350110054016f, 0.8918182849884033f, 0.7732304334640503f, +0.42189696431159973f, 0.6926324367523193f, 0.2753116488456726f, 0.6766369938850403f, 0.7817671895027161f, 0.1496986299753189f, 0.4517945349216461f, 0.5846266746520996f, +0.9222012162208557f, 0.013569170609116554f, 0.6623305678367615f, 0.05809563770890236f, 0.4964127242565155f, 0.4719637334346771f, 0.9548100233078003f, 0.7643404006958008f, +0.3712819814682007f, 0.30676114559173584f, 0.04113881289958954f, 0.9600538611412048f, 0.33604544401168823f, 0.8523902893066406f, 0.5188127756118774f, 0.5498620867729187f, +0.4652702212333679f, 0.5063067078590393f, 0.5652542114257812f, 0.5372863411903381f, 0.2873437702655792f, 0.10394486039876938f, 0.7508255243301392f, 0.4096277952194214f, +0.4985736906528473f, 0.25718674063682556f, 0.7528268694877625f, 0.3028580844402313f, 0.9404021501541138f, 0.8055821657180786f, 0.952875554561615f, 0.9652875661849976f, +0.2521505653858185f, 0.4171450734138489f, 0.044238679111003876f, 0.8875125050544739f, 0.3360469937324524f, 0.06677445024251938f, 0.7220527529716492f, 0.3544466495513916f, +0.17727473378181458f, 0.45299795269966125f, 0.3502626121044159f, 0.2009745091199875f, 0.6778216361999512f, 0.4756288230419159f, 0.4010891914367676f, 0.8656895756721497f, +0.27079570293426514f, 0.2226899266242981f, 0.12925536930561066f, 0.7366558313369751f, 0.9898875951766968f, 0.5349563956260681f, 0.5391998887062073f, 0.404769629240036f, +0.85657799243927f, 0.8759817481040955f, 0.04244634881615639f, 0.35506799817085266f, 0.610988974571228f, 0.4469606280326843f, 0.6703288555145264f, 0.9803907871246338f, +0.4315129220485687f, 0.2687636613845825f, 0.8500992655754089f, 0.7857012152671814f, 0.601652204990387f, 0.36525604128837585f, 0.9014002680778503f, 0.21973492205142975f, +0.23100142180919647f, 0.5378580689430237f, 0.6199426651000977f, 0.16439199447631836f, 0.4685743451118469f, 0.9958102703094482f, 0.23936504125595093f, 0.5495176315307617f, +0.6381919980049133f, 0.8233972787857056f, 0.5683494806289673f, 0.9273194074630737f, 0.905889093875885f, 0.5360301733016968f, 0.19374287128448486f, 0.20883889496326447f, +0.12813451886177063f, 0.8115655779838562f, 0.09651155769824982f, 0.7039064168930054f, 0.018432097509503365f, 0.030667908489704132f, 0.7498494982719421f, 0.17672009766101837f, +0.010755036026239395f, 0.46594423055648804f, 0.14501187205314636f, 0.17687369883060455f, 0.8233295679092407f, 0.5737418532371521f, 0.6003881692886353f, 0.5050594806671143f, +0.4340960681438446f, 0.7129352688789368f, 0.3367617726325989f, 0.35147687792778015f, 0.8480964303016663f, 0.529690146446228f, 0.9321401715278625f, 0.9860198497772217f, +0.530516505241394f, 0.2587187886238098f, 0.529471755027771f, 0.3108244240283966f, 0.14959678053855896f, 0.45362013578414917f, 0.2289152592420578f, 0.19879209995269775f, +0.17272593080997467f, 0.9392351508140564f, 0.8130757808685303f, 0.26500266790390015f, 0.4546630084514618f, 0.9480554461479187f, 0.5064085125923157f, 0.11720263957977295f, +0.07589066028594971f, 0.6498408317565918f, 0.1493978351354599f, 0.07582055032253265f, 0.6523956060409546f, 0.909940779209137f, 0.8980166912078857f, 0.7775181531906128f, +0.0301774051040411f, 0.20177210867404938f, 0.985480010509491f, 0.5407167077064514f, 0.2577366828918457f, 0.42200955748558044f, 0.9748528003692627f, 0.11330349743366241f, +0.5719009041786194f, 0.35193997621536255f, 0.2368432581424713f, 0.05226816236972809f, 0.28615790605545044f, 0.9618993997573853f, 0.093022920191288f, 0.9428563714027405f, +0.6634396910667419f, 0.38143467903137207f, 0.2701667547225952f, 0.8242222666740417f, 0.7468047142028809f, 0.9697278738021851f, 0.5791534781455994f, 0.26139530539512634f, +0.35676309466362f, 0.08333948999643326f, 0.2616302967071533f, 0.5764269232749939f, 0.3896441161632538f, 0.7951319217681885f, 0.4432894289493561f, 0.39549654722213745f, +0.08471965789794922f, 0.9549102187156677f, 0.0849214419722557f, 0.6567127108573914f, 0.9790566563606262f, 0.5148583650588989f, 0.6759212017059326f, 0.982138454914093f, +0.4599747061729431f, 0.955058217048645f, 0.25013604760169983f, 0.8246423602104187f, 0.9174319505691528f, 0.07375305891036987f, 0.8481263518333435f, 0.5536609888076782f, +0.12582401931285858f, 0.561945378780365f, 0.6728574633598328f, 0.05542049556970596f, 0.2542708218097687f, 0.21682295203208923f, 0.5826498866081238f, 0.2486421912908554f, +0.4298580288887024f, 0.27473652362823486f, 0.8791984915733337f, 0.49278366565704346f, 0.1915612816810608f, 0.4985893666744232f, 0.2820497155189514f, 0.47192469239234924f, +0.8117519021034241f, 0.2865210771560669f, 0.4365423917770386f, 0.6223505735397339f, 0.5188080072402954f, 0.9160342216491699f, 0.36494648456573486f, 0.12727054953575134f, +0.46696022152900696f, 0.27054083347320557f, 0.8948140740394592f, 0.10575059056282043f, 0.8389483094215393f, 0.016836589202284813f, 0.4005233943462372f, 0.622309684753418f, +0.18626052141189575f, 0.8335582613945007f, 0.3168562352657318f, 0.9502975344657898f, 0.3503137230873108f, 0.8411795496940613f, 0.09350837767124176f, 0.016515852883458138f, +0.654650092124939f, 0.3931862413883209f, 0.13163749873638153f, 0.6584778428077698f, 0.5732296705245972f, 0.09589793533086777f, 0.7456266283988953f, 0.5007337331771851f, +0.04437128081917763f, 0.23743879795074463f, 0.041287925094366074f, 0.06775684654712677f, 0.6393285989761353f, 0.10238262265920639f, 0.08998952060937881f, 0.900812029838562f, +0.7655840516090393f, 0.24160709977149963f, 0.46397727727890015f, 0.9996955990791321f, 0.776462197303772f, 0.20556458830833435f, 0.7928156852722168f, 0.07116421312093735f, +0.10690519958734512f, 0.18878793716430664f, 0.6127982139587402f, 0.9826339483261108f, 0.7574803829193115f, 0.3635067939758301f, 0.9468554854393005f, 0.8933969140052795f, +0.15763726830482483f, 0.4323351979255676f, 0.6592699289321899f, 0.45380914211273193f, 0.10898836702108383f, 0.9591783285140991f, 0.501211941242218f, 0.6799278259277344f, +0.4930381178855896f, 0.9932897686958313f, 0.853386640548706f, 0.7026985883712769f, 0.623587965965271f, 0.7324370741844177f, 0.7619137763977051f, 0.636894702911377f, +0.42119714617729187f, 0.03586424142122269f, 0.05857525020837784f, 0.3143930733203888f, 0.19609586894512177f, 0.9040132164955139f, 0.15906815230846405f, 0.22382484376430511f, +0.18080447614192963f, 0.3578656017780304f, 0.6128409504890442f, 0.1584038883447647f, 0.9661482572555542f, 0.45585212111473083f, 0.02598484791815281f, 0.699561357498169f, +0.7364090085029602f, 0.5046483278274536f, 0.9411197304725647f, 0.27313554286956787f, 0.3909330666065216f, 0.7848176956176758f, 0.5905792117118835f, 0.08937999606132507f, +0.8675217032432556f, 0.6750701069831848f, 0.9651059508323669f, 0.9049789905548096f, 0.28579673171043396f, 0.2261103391647339f, 0.11343792080879211f, 0.9738718271255493f, +0.22182181477546692f, 0.4262336492538452f, 0.4027944803237915f, 0.35947662591934204f, 0.16700834035873413f, 0.3456331789493561f, 0.41904574632644653f, 0.32237252593040466f, +0.6327586770057678f, 0.3225076198577881f, 0.7855257987976074f, 0.2806232273578644f, 0.1425391286611557f, 0.8036461472511292f, 0.3425998389720917f, 0.6175026297569275f, +0.05847559869289398f, 0.9561954140663147f, 0.47789326310157776f, 0.7625539898872375f, 0.3050664961338043f, 0.29648876190185547f, 0.2917289733886719f, 0.17975862324237823f, +0.7020731568336487f, 0.9013985395431519f, 0.8711678385734558f, 0.28929781913757324f, 0.5521906018257141f, 0.015009730122983456f, 0.14610081911087036f, 0.7697171568870544f, +0.5765363574028015f, 0.6771954894065857f, 0.0817580446600914f, 0.6781864762306213f, 0.33271217346191406f, 0.8840441703796387f, 0.8112481832504272f, 0.9822280406951904f, +0.7922574281692505f, 0.7946273684501648f, 0.18248233199119568f, 0.7111208438873291f, 0.6807355284690857f, 0.5396272540092468f, 0.13228167593479156f, 0.9000591039657593f, +0.494578093290329f, 0.09116596728563309f, 0.00896462518721819f, 0.9123103618621826f, 0.3237290680408478f, 0.6341441869735718f, 0.0807110071182251f, 0.9173051118850708f, +0.1258217692375183f, 0.0007838416495360434f, 0.7411322593688965f, 0.01164007093757391f, 0.20946530997753143f, 0.3558003008365631f, 0.521432638168335f, 0.18634116649627686f, +0.9064692854881287f, 0.5071955323219299f, 0.5374454855918884f, 0.8258160948753357f, 0.5779698491096497f, 0.1547132283449173f, 0.7838048338890076f, 0.6621567010879517f, +0.7283915877342224f, 0.6767477989196777f, 0.3329986333847046f, 0.47876814007759094f, 0.10171061754226685f, 0.24838410317897797f, 0.2984222173690796f, 0.8116021752357483f, +0.06388183683156967f, 0.46728330850601196f, 0.0207746010273695f, 0.9480386972427368f, 0.47214993834495544f, 0.007463115267455578f, 0.6229239702224731f, 0.9692777395248413f, +0.2762543559074402f, 0.22908611595630646f, 0.30396950244903564f, 0.5731948018074036f, 0.12156113982200623f, 0.3346444070339203f, 0.0855308324098587f, 0.21116410195827484f, +0.8475596308708191f, 0.054280634969472885f, 0.14557574689388275f, 0.8429498076438904f, 0.9695600271224976f, 0.27560052275657654f, 0.13139961659908295f, 0.08193199336528778f, +0.8322218060493469f, 0.8684750199317932f, 0.7475084066390991f, 0.44096872210502625f, 0.3333197236061096f, 0.2583439350128174f, 0.23048028349876404f, 0.5107651352882385f, +0.5565460324287415f, 0.648324191570282f, 0.9917296171188354f, 0.20260219275951385f, 0.009763306006789207f, 0.22706042230129242f, 0.08352389186620712f, 0.7542645335197449f, +0.34367451071739197f, 0.6684656739234924f, 0.14953413605690002f, 0.3921699523925781f, 0.6547715663909912f, 0.5559660196304321f, 0.3442941904067993f, 0.651157021522522f, +0.9081818461418152f, 0.21864181756973267f, 0.4833698868751526f, 0.004058755002915859f, 0.26926490664482117f, 0.4577925503253937f, 0.4617128372192383f, 0.9823752641677856f, +0.832184910774231f, 0.6427454352378845f, 0.4060444235801697f, 0.05930726230144501f, 0.2344817966222763f, 0.07276167720556259f, 0.08286130428314209f, 0.38921642303466797f, +0.5965839624404907f, 0.2270609438419342f, 0.690414309501648f, 0.6093534827232361f, 0.9796188473701477f, 0.3177630603313446f, 0.6022523045539856f, 0.6043108701705933f, +0.9366940855979919f, 0.01544793602079153f, 0.2957460582256317f, 0.555077075958252f, 0.4326821267604828f, 0.8420554995536804f, 0.6595340967178345f, 0.7487021088600159f, +0.5330079197883606f, 0.22193464636802673f, 0.3391730487346649f, 0.48830145597457886f, 0.5494571924209595f, 0.6516194939613342f, 0.32403749227523804f, 0.5438770055770874f, +0.13843707740306854f, 0.8421611189842224f, 0.7232145071029663f, 0.022174624726176262f, 0.4432353675365448f, 0.9939529895782471f, 0.8030136823654175f, 0.5857791304588318f, +0.6748896837234497f, 0.024741804227232933f, 0.8182404637336731f, 0.5578576922416687f, 0.532795786857605f, 0.04513975977897644f, 0.32596537470817566f, 0.06930481642484665f, +0.9524587988853455f, 0.5206530690193176f, 0.5475634932518005f, 0.8196038603782654f, 0.6124514937400818f, 0.7165676951408386f, 0.6872714161872864f, 0.4490668773651123f, +0.04233763739466667f, 0.43820589780807495f, 0.004446199629455805f, 0.19576653838157654f, 0.11172723770141602f, 0.12894147634506226f, 0.8216140866279602f, 0.39030134677886963f, +0.4382425546646118f, 0.14714059233665466f, 0.665786862373352f, 0.7700603008270264f, 0.473284512758255f, 0.6894498467445374f, 0.11166216433048248f, 0.8992038369178772f, +0.6751723289489746f, 0.725256085395813f, 0.7320267558097839f, 0.40798163414001465f, 0.009012352675199509f, 0.9511246085166931f, 0.5084532499313354f, 0.5951330661773682f, +0.6841533184051514f, 0.2566092014312744f, 0.7518296241760254f, 0.4097823202610016f, 0.7454982995986938f, 0.5304445624351501f, 0.27320900559425354f, 0.2821768522262573f, +0.49658551812171936f, 0.25339335203170776f, 0.4792870283126831f, 0.9192187786102295f, 0.8401005864143372f, 0.9560965895652771f, 0.13863390684127808f, 0.12533007562160492f, +0.2239660620689392f, 0.8712157011032104f, 0.7208171486854553f, 0.9909030199050903f, 0.024205174297094345f, 0.42219874262809753f, 0.4932610094547272f, 0.07354319840669632f, +0.3286074697971344f, 0.468310683965683f, 0.6997582316398621f, 0.7134997248649597f, 0.7906695604324341f, 0.30763429403305054f, 0.5101741552352905f, 0.6714828014373779f, +0.4951631426811218f, 0.6876668930053711f, 0.48338377475738525f, 0.8991976380348206f, 0.7036334276199341f, 0.24579009413719177f, 0.5721808671951294f, 0.6887859106063843f, +0.4136820137500763f, 0.10560432821512222f, 0.3633033335208893f, 0.2863008975982666f, 0.8455132842063904f, 0.9591155648231506f, 0.30250832438468933f, 0.7654536962509155f, +0.6351255774497986f, 0.11314479261636734f, 0.11036116629838943f, 0.7016534209251404f, 0.45401132106781006f, 0.043453507125377655f, 0.31653469800949097f, 0.10535469651222229f, +0.8019876480102539f, 0.3489285707473755f, 0.8760397434234619f, 0.5995849370956421f, 0.20223267376422882f, 0.36664319038391113f, 0.6401366591453552f, 0.9008789658546448f, +0.16236844658851624f, 0.7346416115760803f, 0.2444668859243393f, 0.3818260133266449f, 0.5568416118621826f, 0.5752328038215637f, 0.49177446961402893f, 0.32281920313835144f, +0.7899287343025208f, 0.4520872235298157f, 0.9969499111175537f, 0.5052056908607483f, 0.06392190605401993f, 0.3094944953918457f, 0.5666970610618591f, 0.6171514987945557f, +0.2628958523273468f, 0.25416144728660583f, 0.34000149369239807f, 0.10847268998622894f, 0.10644108802080154f, 0.5029589533805847f, 0.36004313826560974f, 0.29013243317604065f, +0.6977707147598267f, 0.3769455552101135f, 0.3152955174446106f, 0.9565456509590149f, 0.6393994092941284f, 0.18539294600486755f, 0.6249165534973145f, 0.7505317330360413f, +0.6286114454269409f, 0.7396957278251648f, 0.19325046241283417f, 0.6647769212722778f, 0.3585841655731201f, 0.9251715540885925f, 0.16671836376190186f, 0.6002312302589417f, +0.13590365648269653f, 0.3469280004501343f, 0.4733069837093353f, 0.8414196372032166f, 0.9709331393241882f, 0.3829466700553894f, 0.430682510137558f, 0.5888708829879761f, +0.7903270721435547f, 0.8139210939407349f, 0.42291340231895447f, 0.2460094839334488f, 0.9731041193008423f, 0.8003431558609009f, 0.20905813574790955f, 0.2447892427444458f, +0.9311978816986084f, 0.14134064316749573f, 0.16965477168560028f, 0.6841517686843872f, 0.7660045027732849f, 0.6809929609298706f, 0.18786779046058655f, 0.8081908226013184f, +0.019869215786457062f, 0.5301581621170044f, 0.7860199809074402f, 0.4369385242462158f, 0.9823477268218994f, 0.43952107429504395f, 0.2974449098110199f, 0.8617845773696899f, +0.5364749431610107f, 0.9141088724136353f, 0.8261948227882385f, 0.7436478734016418f, 0.6140726804733276f, 0.728053092956543f, 0.11047963798046112f, 0.921711802482605f, +0.22696855664253235f, 0.5358686447143555f, 0.04311523959040642f, 0.20691809058189392f, 0.3552456498146057f, 0.21674565970897675f, 0.5999317169189453f, 0.028325609862804413f, +0.31242460012435913f, 0.7300243377685547f, 0.15843074023723602f, 0.07263879477977753f, 0.07223117351531982f, 0.029240576550364494f, 0.6327087879180908f, 0.07318909466266632f, +0.8035412430763245f, 0.9924060702323914f, 0.38351497054100037f, 0.7883786559104919f, 0.0337718240916729f, 0.467413067817688f, 0.23592224717140198f, 0.4880194664001465f, +0.4046626687049866f, 0.7102497220039368f, 0.4004446268081665f, 0.15470585227012634f, 0.951457679271698f, 0.28144407272338867f, 0.8073594570159912f, 0.13325510919094086f, +0.5288628339767456f, 0.089516781270504f, 0.37991151213645935f, 0.21707689762115479f, 0.18010284006595612f, 0.35246706008911133f, 0.644786536693573f, 0.7316376566886902f, +0.42832690477371216f, 0.15430273115634918f, 0.8174893856048584f, 0.601940393447876f, 0.7923216223716736f, 0.32978925108909607f, 0.8409305810928345f, 0.9152829051017761f, +0.8315926194190979f, 0.7157814502716064f, 0.28002727031707764f, 0.12347794324159622f, 0.9225850701332092f, 0.14227981865406036f, 0.5899637341499329f, 0.24093617498874664f, +0.4336302876472473f, 0.6489095091819763f, 0.9551835656166077f, 0.3025895357131958f, 0.2205122411251068f, 0.6985950469970703f, 0.5517397522926331f, 0.061476413160562515f, +0.6275856494903564f, 0.41915494203567505f, 0.5031588673591614f, 0.8683112859725952f, 0.24864889681339264f, 0.37140411138534546f, 0.06194497272372246f, 0.2217901647090912f, +0.9982573390007019f, 0.7484900951385498f, 0.8079437017440796f, 0.3747757375240326f, 0.828933596611023f, 0.7393784523010254f, 0.38992181420326233f, 0.7834439873695374f, +0.9646286964416504f, 0.6983054876327515f, 0.4252227246761322f, 0.24797847867012024f, 0.26807281374931335f, 0.5946770310401917f, 0.5286142826080322f, 0.5084397792816162f, +0.6100232601165771f, 0.3036675751209259f, 0.16218329966068268f, 0.32200226187705994f, 0.6125907301902771f, 0.7468511462211609f, 0.5463789105415344f, 0.8847496509552002f, +0.9916860461235046f, 0.7270771265029907f, 0.18234698474407196f, 0.3415102958679199f, 0.6593968272209167f, 0.9223819971084595f, 0.6648727059364319f, 0.6046757698059082f, +0.5050835013389587f, 0.9139278531074524f, 0.7998493313789368f, 0.6691511273384094f, 0.21014778316020966f, 0.9836529493331909f, 0.531673014163971f, 0.5695310831069946f, +0.5504001975059509f, 0.9993723034858704f, 0.2794986963272095f, 0.22575689852237701f, 0.21086183190345764f, 0.8233810663223267f, 0.8912575840950012f, 0.17415568232536316f, +0.3190632462501526f, 0.5335731506347656f, 0.8376070261001587f, 0.6892250776290894f, 0.4655936658382416f, 0.21886639297008514f, 0.6962947249412537f, 0.5936211347579956f, +0.5642417669296265f, 0.30975136160850525f, 0.6604390740394592f, 0.6512485146522522f, 0.5065417885780334f, 0.7334088683128357f, 0.9633904099464417f, 0.45186808705329895f, +0.09021467715501785f, 0.13957716524600983f, 0.5006042718887329f, 0.44165822863578796f, 0.30566155910491943f, 0.30843859910964966f, 0.013949332758784294f, 0.8990923166275024f, +0.24357786774635315f, 0.25038039684295654f, 0.28925666213035583f, 0.9611153602600098f, 0.23421579599380493f, 0.08114318549633026f, 0.2960517406463623f, 0.8221947550773621f, +0.3719935715198517f, 0.2662281095981598f, 0.7781785130500793f, 0.9293131232261658f, 0.7853548526763916f, 0.28298407793045044f, 0.9360784888267517f, 0.84873366355896f, +0.1002064198255539f, 0.4005160331726074f, 0.17080363631248474f, 0.03708287328481674f, 0.790492057800293f, 0.10900884866714478f, 0.9293902516365051f, 0.2935734987258911f, +0.7736580967903137f, 0.2698441445827484f, 0.20419327914714813f, 0.5306872725486755f, 0.8555410504341125f, 0.24970081448554993f, 0.06146209314465523f, 0.8752709627151489f, +0.717068076133728f, 0.6543054580688477f, 0.966372013092041f, 0.3582671284675598f, 0.9204273223876953f, 0.947613000869751f, 0.9897927641868591f, 0.2914729416370392f, +0.2875630259513855f, 0.5631552338600159f, 0.31765660643577576f, 0.8268606662750244f, 0.23812486231327057f, 0.9729340076446533f, 0.12158443033695221f, 0.15905295312404633f, +0.5511109828948975f, 0.3180561065673828f, 0.7353650331497192f, 0.48313406109809875f, 0.5507939457893372f, 0.21708610653877258f, 0.40592390298843384f, 0.159956157207489f, +0.5074528455734253f, 0.2298615723848343f, 0.03341313824057579f, 0.02771441824734211f, 0.2588081657886505f, 0.19656239449977875f, 0.20251061022281647f, 0.561013400554657f, +0.8971746563911438f, 0.7726226449012756f, 0.13081049919128418f, 0.6785510778427124f, 0.18264329433441162f, 0.4382723271846771f, 0.7763738036155701f, 0.8611577749252319f, +0.7358916401863098f, 0.06512387096881866f, 0.5471451282501221f, 0.8408572673797607f, 0.9700459837913513f, 0.32379812002182007f, 0.23282663524150848f, 0.3591565191745758f, +0.014318923465907574f, 0.8352154493331909f, 0.7187632918357849f, 0.16228224337100983f, 0.4158598482608795f, 0.15505489706993103f, 0.2973381280899048f, 0.5574766993522644f, +0.038148488849401474f, 0.2044644057750702f, 0.4595582187175751f, 0.6792212128639221f, 0.46675291657447815f, 0.4953262507915497f, 0.008941782638430595f, 0.8887830376625061f, +0.037842798978090286f, 0.08339324593544006f, 0.24353115260601044f, 0.8310431838035583f, 0.22972461581230164f, 0.18181531131267548f, 0.3749913275241852f, 0.6695075631141663f, +0.7592554688453674f, 0.2740764915943146f, 0.5574080944061279f, 0.49508073925971985f, 0.2495645433664322f, 0.6499559283256531f, 0.41760849952697754f, 0.42967119812965393f, +0.8696377873420715f, 0.5860385298728943f, 0.3110939562320709f, 0.511600911617279f, 0.85983806848526f, 0.6822413206100464f, 0.643578827381134f, 0.7810512185096741f, +0.600814163684845f, 0.3867134749889374f, 0.6323843002319336f, 0.14769968390464783f, 0.7303892970085144f, 0.943001389503479f, 0.6445093154907227f, 0.30844229459762573f, +0.8361515998840332f, 0.7310155034065247f, 0.5046492218971252f, 0.557178258895874f, 0.23462313413619995f, 0.670870304107666f, 0.14306041598320007f, 0.36595475673675537f, +0.7061768770217896f, 0.5600144863128662f, 0.08982747048139572f, 0.6522244215011597f, 0.41365742683410645f, 0.1383524239063263f, 0.6657601594924927f, 0.13106177747249603f, +0.7567325234413147f, 0.2996996343135834f, 0.6470378637313843f, 0.9787167906761169f, 0.7882773876190186f, 0.6986240148544312f, 0.512978732585907f, 0.21871528029441833f, +0.5833810567855835f, 0.2025212198495865f, 0.44172731041908264f, 0.2115176022052765f, 0.932880699634552f, 0.5554172992706299f, 0.6615010499954224f, 0.8377779126167297f, +0.4315497577190399f, 0.32316654920578003f, 0.9119052886962891f, 0.7258097529411316f, 0.0748438760638237f, 0.13641133904457092f, 0.3597413897514343f, 0.1541486531496048f, +0.717914879322052f, 0.6926581263542175f, 0.36565613746643066f, 0.3399198055267334f, 0.9282596111297607f, 0.07291606813669205f, 0.4516598880290985f, 0.14599484205245972f, +0.4461199641227722f, 0.22970569133758545f, 0.0203566811978817f, 0.33852100372314453f, 0.903770923614502f, 0.8124459981918335f, 0.7040055394172668f, 0.2639431357383728f, +0.5416466593742371f, 0.3361254930496216f, 0.5660873651504517f, 0.3117433488368988f, 0.3365252912044525f, 0.534623384475708f, 0.23984146118164062f, 0.47922423481941223f, +0.6029635071754456f, 0.7398233413696289f, 0.6118142604827881f, 0.666912317276001f, 0.02380157634615898f, 0.023264558985829353f, 0.870114803314209f, 0.1104937493801117f, +0.3087451457977295f, 0.8186345100402832f, 0.4538775682449341f, 0.9766642451286316f, 0.010360467247664928f, 0.8195041418075562f, 0.7882665991783142f, 0.16683490574359894f, +0.24433284997940063f, 0.06889567524194717f, 0.8367651104927063f, 0.2450312376022339f, 0.25914236903190613f, 0.8665857911109924f, 0.47329390048980713f, 0.730063796043396f, +0.4456033706665039f, 0.07357173413038254f, 0.3971918523311615f, 0.5348520278930664f, 0.12221100926399231f, 0.31439152359962463f, 0.17360344529151917f, 0.010711362585425377f, +0.4402429163455963f, 0.7759625911712646f, 0.04226735234260559f, 0.8106247186660767f, 0.8194819688796997f, 0.3157045543193817f, 0.24272726476192474f, 0.4102168083190918f, +0.4755900204181671f, 0.9755038619041443f, 0.5175928473472595f, 0.2850617468357086f, 0.6268668174743652f, 0.3982282876968384f, 0.704905092716217f, 0.07707473635673523f, +0.8283491134643555f, 0.4290889501571655f, 0.7504658102989197f, 0.3393879532814026f, 0.07043998688459396f, 0.020488787442445755f, 0.12659339606761932f, 0.4422357380390167f, +0.06243142858147621f, 0.223670095205307f, 0.7388098239898682f, 0.8008903861045837f, 0.5487006306648254f, 0.3467162251472473f, 0.3593532145023346f, 0.06196919083595276f, +0.2772211730480194f, 0.11898665875196457f, 0.9013203978538513f, 0.038237255066633224f, 0.22402189671993256f, 0.42689600586891174f, 0.04139566421508789f, 0.9694862961769104f, +0.33423012495040894f, 0.3208984136581421f, 0.07137805223464966f, 0.7030258774757385f, 0.8519940376281738f, 0.6680073738098145f, 0.8061862587928772f, 0.77138751745224f, +0.42777368426322937f, 0.4527019262313843f, 0.4452088475227356f, 0.6496046185493469f, 0.8944332003593445f, 0.7800140976905823f, 0.7960849404335022f, 0.351628839969635f, +0.6474839448928833f, 0.9891530871391296f, 0.3318120241165161f, 0.2159629613161087f, 0.9865155220031738f, 0.9482553005218506f, 0.20239488780498505f, 0.9511345624923706f, +0.17116719484329224f, 0.6895133256912231f, 0.08993184566497803f, 0.7664440870285034f, 0.18473529815673828f, 0.8711977005004883f, 0.4295549988746643f, 0.4574061334133148f, +0.2849118113517761f, 0.770728588104248f, 0.8158960938453674f, 0.8896552324295044f, 0.34374597668647766f, 0.7179747223854065f, 0.8675769567489624f, 0.9939098954200745f, +0.6904375553131104f, 0.326713889837265f, 0.8642971515655518f, 0.9370332360267639f, 0.7352054119110107f, 0.8226646184921265f, 0.9062042236328125f, 0.4971298575401306f, +0.3994215130805969f, 0.3158074915409088f, 0.9047670364379883f, 0.8210129737854004f, 0.8294722437858582f, 0.9896811842918396f, 0.9486945271492004f, 0.30981001257896423f, +0.7136912941932678f, 0.8223385214805603f, 0.28153350949287415f, 0.28956449031829834f, 0.9922322630882263f, 0.2916771471500397f, 0.9365285038948059f, 0.8349144458770752f, +0.1124279722571373f, 0.810545027256012f, 0.09548847377300262f, 0.1797383427619934f, 0.2624363899230957f, 0.8167358040809631f, 0.04169157147407532f, 0.6839852333068848f, +0.7273472547531128f, 0.634071409702301f, 0.6459649205207825f, 0.45068126916885376f, 0.6004704236984253f, 0.21081623435020447f, 0.623612105846405f, 0.4828396141529083f, +0.9501892328262329f, 0.7355466485023499f, 0.6273952722549438f, 0.07223280519247055f, 0.15772698819637299f, 0.13320477306842804f, 0.9413062334060669f, 0.8880720138549805f, +0.7609084248542786f, 0.08278308808803558f, 0.6754040718078613f, 0.16790671646595f, 0.8557825684547424f, 0.35773226618766785f, 0.42216357588768005f, 0.1861204355955124f, +0.6555624008178711f, 0.351734459400177f, 0.10797431319952011f, 0.9458757042884827f, 0.3878132402896881f, 0.7410046458244324f, 0.04995676502585411f, 0.42277857661247253f, +0.1400427371263504f, 0.857278048992157f, 0.44466355443000793f, 0.7372856140136719f, 0.3129720091819763f, 0.6690477728843689f, 0.46637046337127686f, 0.2510649263858795f, +0.22207370400428772f, 0.7048923373222351f, 0.37048786878585815f, 0.5923693776130676f, 0.3301129639148712f, 0.9466001391410828f, 0.4427426755428314f, 0.24886807799339294f, +0.09502854198217392f, 0.5336188673973083f, 0.9298677444458008f, 0.3370848298072815f, 0.9798545241355896f, 0.8007960915565491f, 0.9206538796424866f, 0.07064935564994812f, +0.09498931467533112f, 0.12542477250099182f, 0.028421001508831978f, 0.5220159888267517f, 0.46555426716804504f, 0.5623615384101868f, 0.3906913697719574f, 0.802889883518219f, +0.06117190048098564f, 0.5281882882118225f, 0.446157842874527f, 0.5921306610107422f, 0.06955065578222275f, 0.5965591669082642f, 0.3402770459651947f, 0.9856573939323425f, +0.14991937577724457f, 0.6336951851844788f, 0.32308894395828247f, 0.5255821347236633f, 0.8558223247528076f, 0.03581039607524872f, 0.3886922001838684f, 0.4453420639038086f, +0.3870595693588257f, 0.14245590567588806f, 0.7350552082061768f, 0.11321039497852325f, 0.5735008120536804f, 0.35671576857566833f, 0.5901896953582764f, 0.4183037281036377f, +0.03577965497970581f, 0.5245057344436646f, 0.08627132326364517f, 0.19502608478069305f, 0.9282714128494263f, 0.507305920124054f, 0.3170657455921173f, 0.2857438027858734f, +0.8169098496437073f, 0.046475302428007126f, 0.07100245356559753f, 0.6728788018226624f, 0.5737357139587402f, 0.2779805064201355f, 0.6984549760818481f, 0.3565644919872284f, +0.2979969084262848f, 0.7539869546890259f, 0.671930193901062f, 0.5185304284095764f, 0.8315635919570923f, 0.400461345911026f, 0.021020961925387383f, 0.2586250305175781f, +0.6297250986099243f, 0.07306546717882156f, 0.2714574337005615f, 0.5725510716438293f, 0.3143346607685089f, 0.7461822628974915f, 0.3288523554801941f, 0.6904898285865784f, +0.00420060008764267f, 0.5726943016052246f, 0.2903765141963959f, 0.6507969498634338f, 0.9802058935165405f, 0.5858554840087891f, 0.48991432785987854f, 0.9548555612564087f, +0.6623603701591492f, 0.06307084858417511f, 0.7047266364097595f, 0.678963303565979f, 0.3693154454231262f, 0.23271235823631287f, 0.4683115780353546f, 0.363511860370636f, +0.7455058693885803f, 0.016592418774962425f, 0.5275694727897644f, 0.2699981927871704f, 0.4703438878059387f, 0.5484850406646729f, 0.5205414891242981f, 0.9856333136558533f, +0.006558012217283249f, 0.887441098690033f, 0.7959167957305908f, 0.33178797364234924f, 0.265231192111969f, 0.8663814067840576f, 0.8562757968902588f, 0.40063920617103577f, +0.8707262277603149f, 0.6755101680755615f, 0.47749805450439453f, 0.5823104381561279f, 0.9758129119873047f, 0.9241567254066467f, 0.1420036405324936f, 0.2325950562953949f, +0.28011205792427063f, 0.010430561378598213f, 0.3969857394695282f, 0.3252618908882141f, 0.9826428890228271f, 0.24181342124938965f, 0.6402348875999451f, 0.43777212500572205f, +0.5706987977027893f, 0.48585113883018494f, 0.9199040532112122f, 0.660267174243927f, 0.9089730381965637f, 0.20467005670070648f, 0.9297597408294678f, 0.6179773807525635f, +0.3839261829853058f, 0.5141823291778564f, 0.4138256311416626f, 0.9561923146247864f, 0.9252978563308716f, 0.49191728234291077f, 0.03641865774989128f, 0.34406599402427673f, +0.15123578906059265f, 0.8635458946228027f, 0.24445131421089172f, 0.3581703007221222f, 0.27994751930236816f, 0.9000564217567444f, 0.7260122895240784f, 0.11682037264108658f, +0.1135900691151619f, 0.7984004020690918f, 0.044519346207380295f, 0.6716601848602295f, 0.07820989936590195f, 0.16138386726379395f, 0.9271359443664551f, 0.5806356072425842f, +0.5334423184394836f, 0.11757883429527283f, 0.02806737832725048f, 0.0023395090829581022f, 0.15151594579219818f, 0.21411101520061493f, 0.7856576442718506f, 0.9528596997261047f, +0.7915459871292114f, 0.5368552803993225f, 0.4295269846916199f, 0.17545421421527863f, 0.5891209244728088f, 0.5119518041610718f, 0.5963066220283508f, 0.732342004776001f, +0.29789862036705017f, 0.010825248435139656f, 0.9401662349700928f, 0.8685292601585388f, 0.3048619329929352f, 0.2928064465522766f, 0.6082512736320496f, 0.329446405172348f, +0.13044600188732147f, 0.9909996390342712f, 0.30281633138656616f, 0.2777341306209564f, 0.4791511595249176f, 0.5889505743980408f, 0.6935154795646667f, 0.4774518609046936f, +0.1369909942150116f, 0.7275018692016602f, 0.3334725797176361f, 0.8129111528396606f, 0.5065328478813171f, 0.5956737995147705f, 0.5048596262931824f, 0.8740737438201904f, +0.15971700847148895f, 0.2526090145111084f, 0.8046221733093262f, 0.12398108839988708f, 0.5282185077667236f, 0.11353635042905807f, 0.7131919264793396f, 0.16011887788772583f, +0.7600829601287842f, 0.6496555209159851f, 0.6234109997749329f, 0.2060772031545639f, 0.476904958486557f, 0.516372799873352f, 0.41471412777900696f, 0.7579601407051086f, +0.4143616557121277f, 0.33931565284729004f, 0.9118471741676331f, 0.64104163646698f, 0.6278387308120728f, 0.49810707569122314f, 0.6538493037223816f, 0.37762874364852905f, +0.17195658385753632f, 0.5404389500617981f, 0.533765435218811f, 0.3813837766647339f, 0.05597894266247749f, 0.06137986481189728f, 0.44662827253341675f, 0.20475786924362183f, +0.01335496362298727f, 0.16446572542190552f, 0.9684725403785706f, 0.3414343297481537f, 0.24614444375038147f, 0.1507318615913391f, 0.4256065785884857f, 0.19894355535507202f, +0.5186823010444641f, 0.5050492286682129f, 0.0066929953172802925f, 0.7738257646560669f, 0.6395884156227112f, 0.8889954686164856f, 0.18129588663578033f, 0.7161238193511963f, +0.9079116582870483f, 0.7157001495361328f, 0.228682279586792f, 0.10229501873254776f, 0.7527469396591187f, 0.8793184757232666f, 0.815441906452179f, 0.16447751224040985f, +0.6911047697067261f, 0.18888619542121887f, 0.6874290704727173f, 0.30130594968795776f, 0.06695639342069626f, 0.20971502363681793f, 0.2604256570339203f, 0.20131708681583405f, +0.1276184469461441f, 0.5123385190963745f, 0.6240889430046082f, 0.20029211044311523f, 0.9493135809898376f, 0.17903167009353638f, 0.5042605400085449f, 0.3205757141113281f, +0.059154096990823746f, 0.7103747129440308f, 0.2852382957935333f, 0.8801781535148621f, 0.365852028131485f, 0.8432976603507996f, 0.2801840603351593f, 0.14674867689609528f, +0.9708359241485596f, 0.129043310880661f, 0.37474414706230164f, 0.20343218743801117f, 0.07895705848932266f, 0.1191571056842804f, 0.951492428779602f, 0.7124094367027283f, +0.06959757208824158f, 0.8000116348266602f, 0.9772346019744873f, 0.3466237783432007f, 0.04107113927602768f, 0.7905629873275757f, 0.823020339012146f, 0.47158077359199524f, +0.7539021372795105f, 0.8718048930168152f, 0.8462989926338196f, 0.37513816356658936f, 0.13985832035541534f, 0.5674196481704712f, 0.09795378148555756f, 0.18779180943965912f, +0.5873010158538818f, 0.06591101735830307f, 0.6837477684020996f, 0.5786332488059998f, 0.5131651759147644f, 0.6728609800338745f, 0.06984397768974304f, 0.7912238836288452f, +0.5123411417007446f, 0.5484815239906311f, 0.08910776674747467f, 0.7038499116897583f, 0.22476845979690552f, 0.37628427147865295f, 0.023214273154735565f, 0.8917950987815857f, +0.0012315429048612714f, 0.4810636043548584f, 0.25682660937309265f, 0.7124268412590027f, 0.5857983827590942f, 0.6877121925354004f, 0.1935959905385971f, 0.32685229182243347f, +0.9744149446487427f, 0.4573109745979309f, 0.766252338886261f, 0.9120500087738037f, 0.8322474956512451f, 0.332174688577652f, 0.02634557895362377f, 0.6567147970199585f, +0.06181842461228371f, 0.31649279594421387f, 0.24713867902755737f, 0.28699588775634766f, 0.5067818760871887f, 0.33884161710739136f, 0.39847010374069214f, 0.8929684162139893f, +0.27429676055908203f, 0.08830918371677399f, 0.25542905926704407f, 0.5030395984649658f, 0.2754587233066559f, 0.35949695110321045f, 0.15295861661434174f, 0.33277469873428345f, +0.923913836479187f, 0.38449934124946594f, 0.6245399117469788f, 0.24798642098903656f, 0.9066970348358154f, 0.42034509778022766f, 0.44105833768844604f, 0.21525269746780396f, +0.33728083968162537f, 0.6525714993476868f, 0.03259652853012085f, 0.7976900339126587f, 0.5023762583732605f, 0.08409390598535538f, 0.05126142501831055f, 0.4288504123687744f, +0.8340663909912109f, 0.44266873598098755f, 0.18205681443214417f, 0.2265411913394928f, 0.2203417271375656f, 0.8397945761680603f, 0.9622684717178345f, 0.5126599073410034f, +0.9355233907699585f, 0.42824387550354004f, 0.051824335008859634f, 0.3588641881942749f, 0.36898332834243774f, 0.28540247678756714f, 0.2810010612010956f, 0.6087971329689026f, +0.7944757342338562f, 0.1352684199810028f, 0.41312921047210693f, 0.603381872177124f, 0.6352071166038513f, 0.023453429341316223f, 0.8556925654411316f, 0.815653383731842f, +0.7298507690429688f, 0.8569904565811157f, 0.3057527542114258f, 0.32696035504341125f, 0.20889483392238617f, 0.476168155670166f, 0.24121549725532532f, 0.8138872385025024f, +0.9593313932418823f, 0.7744131684303284f, 0.6396651268005371f, 0.31898659467697144f, 0.2112724781036377f, 0.5473967790603638f, 0.2856123149394989f, 0.2933333218097687f, +0.03160310909152031f, 0.7405330538749695f, 0.49883371591567993f, 0.2036440074443817f, 0.8359489440917969f, 0.8821344375610352f, 0.1551656424999237f, 0.9897886514663696f, +0.07141133397817612f, 0.14969150722026825f, 0.8919869661331177f, 0.30094587802886963f, 0.19101592898368835f, 0.2222779393196106f, 0.7660427689552307f, 0.5651304125785828f, +0.6034494638442993f, 0.3456595242023468f, 0.5076646208763123f, 0.5518657565116882f, 0.40464192628860474f, 0.2794484496116638f, 0.45566996932029724f, 0.5495609641075134f, +0.6313809752464294f, 0.5137726068496704f, 0.5714420676231384f, 0.20776571333408356f, 0.7301151752471924f, 0.38653048872947693f, 0.27541422843933105f, 0.06715666502714157f, +0.879839301109314f, 0.944616436958313f, 0.995404839515686f, 0.7023824453353882f, 0.063730388879776f, 0.6741400957107544f, 0.5738700032234192f, 0.5783268809318542f, +0.3576923906803131f, 0.3526303172111511f, 0.7022441625595093f, 0.37130892276763916f, 0.371820867061615f, 0.614610493183136f, 0.1882360279560089f, 0.3235631287097931f, +0.03359467163681984f, 0.761612594127655f, 0.9914688467979431f, 0.19474373757839203f, 0.24345017969608307f, 0.7143008708953857f, 0.9238582253456116f, 0.4567902386188507f, +0.5798501968383789f, 0.1588570475578308f, 0.9831440448760986f, 0.8874426484107971f, 0.796143651008606f, 0.336725115776062f, 0.2530423104763031f, 0.8276792764663696f, +0.7366170287132263f, 0.06825517117977142f, 0.7510483860969543f, 0.8052472472190857f, 0.4724271297454834f, 0.8645830154418945f, 0.7362255454063416f, 0.8609382510185242f, +0.9355127811431885f, 0.6777389049530029f, 0.16630326211452484f, 0.07999838888645172f, 0.09498489648103714f, 0.36383768916130066f, 0.6171978712081909f, 0.884334146976471f, +0.007650136481970549f, 0.641927182674408f, 0.18598420917987823f, 0.40833553671836853f, 0.27128326892852783f, 0.5902209877967834f, 0.5288811922073364f, 0.47224053740501404f, +0.07383178174495697f, 0.46452581882476807f, 0.2644480764865875f, 0.5330985188484192f, 0.4422498643398285f, 0.725627064704895f, 0.1990833878517151f, 0.07419238984584808f, +0.3708282709121704f, 0.24273554980754852f, 0.17597423493862152f, 0.0791097953915596f, 0.21316705644130707f, 0.06900474429130554f, 0.23982633650302887f, 0.9282726049423218f, +0.24769435822963715f, 0.7667573690414429f, 0.15021584928035736f, 0.023306269198656082f, 0.4847556948661804f, 0.5158091187477112f, 0.5806645154953003f, 0.4396478533744812f, +0.25206050276756287f, 0.17362435162067413f, 0.19143329560756683f, 0.3011816740036011f, 0.24135521054267883f, 0.8044136762619019f, 0.23005686700344086f, 0.08304014801979065f, +0.06131920590996742f, 0.02430836483836174f, 0.8017265200614929f, 0.4745575785636902f, 0.20865099132061005f, 0.2041800618171692f, 0.5043924450874329f, 0.1594894677400589f, +0.5175229907035828f, 0.35169678926467896f, 0.8260440826416016f, 0.6599069237709045f, 0.01866699941456318f, 0.6729202270507812f, 0.679662823677063f, 0.3044257164001465f, +0.67866051197052f, 0.21342545747756958f, 0.8438052535057068f, 0.48669999837875366f, 0.06192297115921974f, 0.5769873857498169f, 0.030100097879767418f, 0.7162250280380249f, +0.6884337663650513f, 0.8811260461807251f, 0.21232599020004272f, 0.43001478910446167f, 0.27182459831237793f, 0.4264953136444092f, 0.4865899384021759f, 0.08075277507305145f, +0.43618258833885193f, 0.7187606692314148f, 0.018893327564001083f, 0.10389482229948044f, 0.9762924909591675f, 0.46819189190864563f, 0.8718813061714172f, 0.6243248581886292f, +0.2948562204837799f, 0.05320574715733528f, 0.6093525290489197f, 0.058433596044778824f, 0.8426879644393921f, 0.22241708636283875f, 0.9815271496772766f, 0.11751660704612732f, +0.8465355634689331f, 0.11134642362594604f, 0.7803115844726562f, 0.46306025981903076f, 0.1492454558610916f, 0.46576595306396484f, 0.6023808121681213f, 0.7898734211921692f, +0.08260679244995117f, 0.01659579575061798f, 0.6986461877822876f, 0.5555770993232727f, 0.5488408803939819f, 0.7478358149528503f, 0.9682579040527344f, 0.8512323498725891f, +0.09369783103466034f, 0.8237338066101074f, 0.9418249130249023f, 0.15363536775112152f, 0.634414792060852f, 0.10646765679121017f, 0.19522692263126373f, 0.2272414267063141f, +0.002890191273763776f, 0.23169027268886566f, 0.3647681772708893f, 0.38067811727523804f, 0.886247456073761f, 0.8460949659347534f, 0.7836971879005432f, 0.7889523506164551f, +0.03602556139230728f, 0.3297537565231323f, 0.6926409006118774f, 0.795737624168396f, 0.1675138771533966f, 0.09344635158777237f, 0.9882815480232239f, 0.6679984927177429f, +0.5849872827529907f, 0.7784003019332886f, 0.8478856682777405f, 0.29352670907974243f, 0.6045506000518799f, 0.2645438611507416f, 0.5631431937217712f, 0.9030202627182007f, +0.49858754873275757f, 0.6617743968963623f, 0.6219804883003235f, 0.6726211905479431f, 0.11124483495950699f, 0.7492474913597107f, 0.4945896565914154f, 0.37190279364585876f, +0.852044939994812f, 0.49590301513671875f, 0.7590908408164978f, 0.77937251329422f, 0.572507917881012f, 0.7656670808792114f, 0.28836265206336975f, 0.925093412399292f, +0.5065951347351074f, 0.8429446220397949f, 0.9149578213691711f, 0.3108464479446411f, 0.8940805792808533f, 0.5532998442649841f, 0.9648550152778625f, 0.3635876774787903f, +0.011607982218265533f, 0.24621927738189697f, 0.9166836142539978f, 0.7054242491722107f, 0.6694196462631226f, 0.8288902640342712f, 0.01438141893595457f, 0.7834815979003906f, +0.30315297842025757f, 0.343787282705307f, 0.9311694502830505f, 0.20901569724082947f, 0.03163444250822067f, 0.3374660909175873f, 0.19144579768180847f, 0.787857711315155f, +0.8772508502006531f, 0.019687511026859283f, 0.7186130285263062f, 0.4151565134525299f, 0.5524119138717651f, 0.5511173605918884f, 0.15443240106105804f, 0.07157111167907715f, +0.5371878147125244f, 0.07474317401647568f, 0.1890295147895813f, 0.5113049745559692f, 0.20761175453662872f, 0.9918082356452942f, 0.45350736379623413f, 0.7689892649650574f, +0.8108172416687012f, 0.06834615021944046f, 0.10309352725744247f, 0.6994638442993164f, 0.9233081936836243f, 0.842613935470581f, 0.7306557893753052f, 0.08591291308403015f, +0.2543862760066986f, 0.6757669448852539f, 0.3334727883338928f, 0.3141815960407257f, 0.6865306496620178f, 0.44583386182785034f, 0.030016733333468437f, 0.6685934662818909f, +0.7179939150810242f, 0.551457405090332f, 0.08727549761533737f, 0.592344343662262f, 0.946656346321106f, 0.36807140707969666f, 0.788834810256958f, 0.7350102066993713f, +0.22958073019981384f, 0.16038978099822998f, 0.7733519077301025f, 0.4241805970668793f, 0.938801646232605f, 0.5152682662010193f, 0.7016167640686035f, 0.17849068343639374f, +0.26654547452926636f, 0.2721807658672333f, 0.47795507311820984f, 0.7346274852752686f, 0.9110202789306641f, 0.5490556359291077f, 0.08564358949661255f, 0.8049623370170593f, +0.9964652061462402f, 0.5699772238731384f, 0.24794186651706696f, 0.7018424272537231f, 0.04913261532783508f, 0.9011610746383667f, 0.12914824485778809f, 0.2025708258152008f, +0.6221342086791992f, 0.9996219873428345f, 0.1839059442281723f, 0.6072368621826172f, 0.41025081276893616f, 0.8251518607139587f, 0.2876962721347809f, 0.2485370635986328f, +0.32667380571365356f, 0.4687412977218628f, 0.1805250197649002f, 0.8628572821617126f, 0.3778517246246338f, 0.48793354630470276f, 0.8408243656158447f, 0.43974819779396057f, +0.6695202589035034f, 0.8919663429260254f, 0.7569398283958435f, 0.2153547704219818f, 0.47375860810279846f, 0.8212502002716064f, 0.5780112743377686f, 0.6174365282058716f, +0.6393510699272156f, 0.4698233902454376f, 0.8077614903450012f, 0.2736038565635681f, 0.6151328682899475f, 0.11210910230875015f, 0.47040659189224243f, 0.6066508889198303f, +0.6372498273849487f, 0.20890218019485474f, 0.07838974893093109f, 0.3537690043449402f, 0.25618287920951843f, 0.711003839969635f, 0.6685885787010193f, 0.889720618724823f, +0.515397310256958f, 0.16747325658798218f, 0.20433899760246277f, 0.24510331451892853f, 0.5622668862342834f, 0.14497660100460052f, 0.7957016825675964f, 0.4715547561645508f, +0.6947348713874817f, 0.5881384611129761f, 0.2209203988313675f, 0.2519475817680359f, 0.8177295923233032f, 0.5878086686134338f, 0.3591487407684326f, 0.881898820400238f, +0.021396229043602943f, 0.12294017523527145f, 0.043913424015045166f, 0.37616902589797974f, 0.4094470739364624f, 0.6461416482925415f, 0.7243949770927429f, 0.5817341208457947f, +0.582251250743866f, 0.3593549132347107f, 0.014340977184474468f, 0.6562785506248474f, 0.1270696222782135f, 0.22407400608062744f, 0.5634948015213013f, 0.06197506934404373f, +0.21825049817562103f, 0.5233862400054932f, 0.9017668962478638f, 0.3165607154369354f, 0.021450357511639595f, 0.875942587852478f, 0.030885476619005203f, 0.8726959824562073f, +0.11255159229040146f, 0.5837392807006836f, 0.9089059829711914f, 0.12913456559181213f, 0.28756704926490784f, 0.2140323966741562f, 0.3131519556045532f, 0.578076183795929f, +0.39085304737091064f, 0.4311429262161255f, 0.5526436567306519f, 0.49821895360946655f, 0.8460825085639954f, 0.32327237725257874f, 0.7199528217315674f, 0.6768356561660767f, +0.03667352721095085f, 0.9383607506752014f, 0.6627063155174255f, 0.09251082688570023f, 0.3371576964855194f, 0.9712247252464294f, 0.1346926987171173f, 0.17737232148647308f, +0.982562243938446f, 0.9695571660995483f, 0.8509716391563416f, 0.8927572965621948f, 0.12954168021678925f, 0.626775324344635f, 0.0675712525844574f, 0.3093441426753998f, +0.9981232285499573f, 0.7867425084114075f, 0.38259270787239075f, 0.2730534076690674f, 0.9601092338562012f, 0.12445731461048126f, 0.30084747076034546f, 0.4120347797870636f, +0.9581021666526794f, 0.305184006690979f, 0.1541977971792221f, 0.5748429894447327f, 0.618529200553894f, 0.3450320363044739f, 0.5540919899940491f, 0.3028991222381592f, +0.7240110635757446f, 0.09460745751857758f, 0.3566308319568634f, 0.27213239669799805f, 0.5972344875335693f, 0.6818827986717224f, 0.3483409285545349f, 0.5481618642807007f, +0.33366987109184265f, 0.989543080329895f, 0.027021003887057304f, 0.2902771234512329f, 0.856401264667511f, 0.39970844984054565f, 0.4337981641292572f, 0.058030448853969574f, +0.5352057218551636f, 0.7707526683807373f, 0.07804610580205917f, 0.4266733229160309f, 0.5810091495513916f, 0.23988302052021027f, 0.49268919229507446f, 0.3159509003162384f, +0.11218326538801193f, 0.3447572886943817f, 0.04230888932943344f, 0.0029914064798504114f, 0.5986618995666504f, 0.6213657259941101f, 0.7596821188926697f, 0.36301466822624207f, +0.27580466866493225f, 0.7269449830055237f, 0.9150973558425903f, 0.43682894110679626f, 0.07993876188993454f, 0.5405641794204712f, 0.7320513725280762f, 0.5479242205619812f, +0.5079942941665649f, 0.06558667868375778f, 0.623618483543396f, 0.06928163766860962f, 0.3158867061138153f, 0.9341907501220703f, 0.827805757522583f, 0.044489212334156036f, +0.7094587087631226f, 0.7323400974273682f, 0.4250940978527069f, 0.5722609758377075f, 0.08376237004995346f, 0.7181273102760315f, 0.5181013941764832f, 0.9864031672477722f, +0.8138813376426697f, 0.4875813126564026f, 0.7706190347671509f, 0.8672002553939819f, 0.21627044677734375f, 0.2735655605792999f, 0.05761905014514923f, 0.38821372389793396f, +0.7508622407913208f, 0.8620738983154297f, 0.8543381094932556f, 0.4461043179035187f, 0.07306385785341263f, 0.9659711718559265f, 0.035707026720047f, 0.9196047186851501f, +0.4579145312309265f, 0.2390071451663971f, 0.039659298956394196f, 0.07121697068214417f, 0.05260620266199112f, 0.8870981931686401f, 0.4915403723716736f, 0.9435128569602966f, +0.8088255524635315f, 0.7611140608787537f, 0.02446291409432888f, 0.41300371289253235f, 0.4991230070590973f, 0.4918166995048523f, 0.7286627888679504f, 0.1190524771809578f, +0.1642870008945465f, 0.9401220083236694f, 0.2835507392883301f, 0.3109196126461029f, 0.2953626215457916f, 0.1373773217201233f, 0.1907418817281723f, 0.018955940380692482f, +0.5850769877433777f, 0.28414463996887207f, 0.2500634789466858f, 0.06293409317731857f, 0.1828301101922989f, 0.7568896412849426f, 0.12789268791675568f, 0.9784479737281799f, +0.3787476420402527f, 0.03613610938191414f, 0.38545820116996765f, 0.26659753918647766f, 0.6716180443763733f, 0.36139798164367676f, 0.9990758299827576f, 0.8836432695388794f, +0.8857089281082153f, 0.4692755341529846f, 0.5891709923744202f, 0.09828638285398483f, 0.475411981344223f, 0.2973167300224304f, 0.9372856020927429f, 0.09688366204500198f, +0.7833572626113892f, 0.7324462532997131f, 0.6679421067237854f, 0.6439416408538818f, 0.6045898199081421f, 0.8910754919052124f, 0.19740039110183716f, 0.7247869372367859f, +0.7544324398040771f, 0.30057963728904724f, 0.3293069303035736f, 0.6991744637489319f, 0.8441499471664429f, 0.42249783873558044f, 0.9804831147193909f, 0.13358046114444733f, +0.05347807705402374f, 0.8339612483978271f, 0.04955323785543442f, 0.29330700635910034f, 0.4176426827907562f, 0.8991380333900452f, 0.5810479521751404f, 0.7047156691551208f, +0.4515124559402466f, 0.6190942525863647f, 0.19994357228279114f, 0.3569151759147644f, 0.11691555380821228f, 0.5109258890151978f, 0.002103495877236128f, 0.7366765141487122f, +0.3812560737133026f, 0.30075448751449585f, 0.7458950281143188f, 0.16429424285888672f, 0.8649501800537109f, 0.7319382429122925f, 0.8360223770141602f, 0.2848505675792694f, +0.469548761844635f, 0.8437161445617676f, 0.9901449680328369f, 0.019633140414953232f, 0.5165451765060425f, 0.8702456951141357f, 0.036574311554431915f, 0.2982325553894043f, +0.8520745635032654f, 0.45923396944999695f, 0.044684916734695435f, 0.8584467172622681f, 0.790010392665863f, 0.3001932203769684f, 0.50410395860672f, 0.19123263657093048f, +0.12163330614566803f, 0.7908264398574829f, 0.9985623359680176f, 0.26364004611968994f, 0.35037657618522644f, 0.2526565194129944f, 0.30122628808021545f, 0.748308539390564f, +0.6282336115837097f, 0.24680902063846588f, 0.3890484869480133f, 0.4817659556865692f, 0.5143810510635376f, 0.7311301827430725f, 0.9822348952293396f, 0.709623396396637f, +0.3108370006084442f, 0.7334948182106018f, 0.6199811697006226f, 0.7595679759979248f, 0.8889960646629333f, 0.3838682472705841f, 0.898160457611084f, 0.9930683374404907f, +0.2211810201406479f, 0.9840863943099976f, 0.7692766785621643f, 0.2710705101490021f, 0.07777215540409088f, 0.22730757296085358f, 0.8120085597038269f, 0.9981943368911743f, +0.4502356946468353f, 0.182204931974411f, 0.7314128875732422f, 0.9079766273498535f, 0.9648684859275818f, 0.17598804831504822f, 0.8872012495994568f, 0.1842181384563446f, +0.28481122851371765f, 0.24095870554447174f, 0.39342138171195984f, 0.7529118061065674f, 0.49897098541259766f, 0.9208551645278931f, 0.4404255151748657f, 0.8985962271690369f, +0.8431458473205566f, 0.7906520962715149f, 0.3014572560787201f, 0.7205560803413391f, 0.621608316898346f, 0.8388971090316772f, 0.17793990671634674f, 0.11045975983142853f, +0.8603841662406921f, 0.09695392102003098f, 0.13274313509464264f, 0.3723464906215668f, 0.9542103409767151f, 0.8940310478210449f, 0.2777183949947357f, 0.5529214143753052f, +0.1338357776403427f, 0.7901126146316528f, 0.1474047303199768f, 0.3004383444786072f, 0.21079611778259277f, 0.15621264278888702f, 0.2755606174468994f, 0.32015740871429443f, +0.6026579737663269f, 0.5759261250495911f, 0.27714863419532776f, 0.3623771369457245f, 0.591622531414032f, 0.2192573845386505f, 0.7895900011062622f, 0.6631714701652527f, +0.37245234847068787f, 0.18676570057868958f, 0.5086419582366943f, 0.09073431044816971f, 0.2156856805086136f, 0.5654429197311401f, 0.14353437721729279f, 0.1975679099559784f, +0.4457787871360779f, 0.16961556673049927f, 0.06751056760549545f, 0.2744520902633667f, 0.3834483325481415f, 0.4624060094356537f, 0.04402588680386543f, 0.696986198425293f, +0.9784624576568604f, 0.07901662588119507f, 0.008712285198271275f, 0.366759330034256f, 0.2059580534696579f, 0.19423650205135345f, 0.3880442678928375f, 0.023787153884768486f, +0.27691417932510376f, 0.2855020761489868f, 0.9481924772262573f, 0.07236888259649277f, 0.7339503765106201f, 0.3710402548313141f, 0.1913982629776001f, 0.5739847421646118f, +0.5404015779495239f, 0.41767507791519165f, 0.922250509262085f, 0.3158651888370514f, 0.49957913160324097f, 0.6765637397766113f, 0.34187644720077515f, 0.7898913025856018f, +0.0718044564127922f, 0.5190258622169495f, 0.9280303716659546f, 0.31672531366348267f, 0.49268996715545654f, 0.2952626943588257f, 0.34879621863365173f, 0.8767579197883606f, +0.8928529620170593f, 0.6296870112419128f, 0.13339033722877502f, 0.2743018865585327f, 0.7036749124526978f, 0.3902137875556946f, 0.2031456083059311f, 0.9974954128265381f, +0.05260002240538597f, 0.27026864886283875f, 0.930843710899353f, 0.7506945133209229f, 0.513475775718689f, 0.9936524033546448f, 0.16291029751300812f, 0.11593944579362869f, +0.4410337209701538f, 0.8287772536277771f, 0.7003839612007141f, 0.2805783748626709f, 0.615525484085083f, 0.30458077788352966f, 0.03934458643198013f, 0.757737398147583f, +0.19560113549232483f, 0.409323126077652f, 0.2160756140947342f, 0.6909145712852478f, 0.6684888601303101f, 0.635475218296051f, 0.08679692447185516f, 0.15582604706287384f, +0.1270751953125f, 0.8590400218963623f, 0.7781832814216614f, 0.8974502086639404f, 0.5819793939590454f, 0.23803368210792542f, 0.04227512329816818f, 0.14249230921268463f, +0.8773056268692017f, 0.8082444071769714f, 0.1248205155134201f, 0.27269041538238525f, 0.7455902695655823f, 0.46525174379348755f, 0.6285213232040405f, 0.5862853527069092f, +0.4583170711994171f, 0.9334164261817932f, 0.9712169766426086f, 0.3854079246520996f, 0.1929229497909546f, 0.3693482279777527f, 0.04355276748538017f, 0.4633778929710388f, +0.06082805246114731f, 0.8669633865356445f, 0.04868202283978462f, 0.38619038462638855f, 0.960212230682373f, 0.08168698847293854f, 0.5844712853431702f, 0.4545578956604004f, +0.900104284286499f, 0.8385890126228333f, 0.7153081893920898f, 0.35749706625938416f, 0.32435235381126404f, 0.9983905553817749f, 0.38674619793891907f, 0.7219309210777283f, +0.665869414806366f, 0.9192535281181335f, 0.5158875584602356f, 0.9156631231307983f, 0.031749848276376724f, 0.7354605197906494f, 0.8479849100112915f, 0.07958336174488068f, +0.3974558413028717f, 0.35564756393432617f, 0.3984565734863281f, 0.20238207280635834f, 0.5976213216781616f, 0.9798260927200317f, 0.4747878313064575f, 0.48889321088790894f, +0.4367660582065582f, 0.5626810193061829f, 0.7965846657752991f, 0.5844014883041382f, 0.03049435466527939f, 0.09400736540555954f, 0.9139723181724548f, 0.9175982475280762f, +0.42526787519454956f, 0.6669188737869263f, 0.155279278755188f, 0.27571919560432434f, 0.917189359664917f, 0.3665276765823364f, 0.6891955137252808f, 0.4195615351200104f, +0.7898486852645874f, 0.570287823677063f, 0.7952296733856201f, 0.8897441029548645f, 0.3348119258880615f, 0.6252914071083069f, 0.9236165285110474f, 0.25989431142807007f, +0.9273573160171509f, 0.29422926902770996f, 0.22125451266765594f, 0.7705805897712708f, 0.035689376294612885f, 0.5905158519744873f, 0.45423784852027893f, 0.23743487894535065f, +0.5312442183494568f, 0.32727235555648804f, 0.9593839645385742f, 0.06695403903722763f, 0.3520269989967346f, 0.01270472351461649f, 0.4525761008262634f, 0.38637879490852356f, +0.6682471632957458f, 0.5612847208976746f, 0.7908957004547119f, 0.7849839329719543f, 0.28283461928367615f, 0.7831971049308777f, 0.2414444386959076f, 0.42365896701812744f, +0.8988508582115173f, 0.9475301504135132f, 0.6572872996330261f, 0.0325995534658432f, 0.7706236839294434f, 0.4403219223022461f, 0.9234016537666321f, 0.910656213760376f, +0.4274269640445709f, 0.9601342082023621f, 0.8142226934432983f, 0.6112731695175171f, 0.18500228226184845f, 0.8968204259872437f, 0.8725782036781311f, 0.5040290951728821f, +0.7008283138275146f, 0.1469268500804901f, 0.9331091046333313f, 0.8449792861938477f, 0.3757284879684448f, 0.8620151281356812f, 0.27644360065460205f, 0.9813668131828308f, +0.5408294200897217f, 0.918728232383728f, 0.48711252212524414f, 0.8287350535392761f, 0.049515921622514725f, 0.7446660995483398f, 0.2677364945411682f, 0.6829983592033386f, +0.10432271659374237f, 0.563334584236145f, 0.5109773278236389f, 0.1114903911948204f, 0.18005114793777466f, 0.6602199673652649f, 0.8251546621322632f, 0.46968919038772583f, +0.09688439965248108f, 0.9547668695449829f, 0.6040931344032288f, 0.4552604854106903f, 0.19106397032737732f, 0.6452281475067139f, 0.30181026458740234f, 0.32611531019210815f, +0.22867751121520996f, 0.6442216634750366f, 0.7742848992347717f, 0.3040635585784912f, 0.834697425365448f, 0.17591112852096558f, 0.9564913511276245f, 0.2943313419818878f, +0.7360348105430603f, 0.01779766194522381f, 0.4541270136833191f, 0.6810733675956726f, 0.07545506954193115f, 0.9989390969276428f, 0.4267001152038574f, 0.20165720582008362f, +0.8882248997688293f, 0.9003507494926453f, 0.5370545983314514f, 0.15752075612545013f, 0.7125276327133179f, 0.6127645969390869f, 0.8398033380508423f, 0.3856160342693329f, +0.8338125944137573f, 0.6324543952941895f, 0.36705711483955383f, 0.643197774887085f, 0.7350969314575195f, 0.941743016242981f, 0.7264806628227234f, 0.28612977266311646f, +0.02949356473982334f, 0.09510542452335358f, 0.8570318818092346f, 0.897141695022583f, 0.5074977278709412f, 0.7793298959732056f, 0.0496818944811821f, 0.5376997590065002f, +0.364944726228714f, 0.05366247519850731f, 0.6806990504264832f, 0.33233633637428284f, 0.5341593027114868f, 0.43096575140953064f, 0.2547605335712433f, 0.7828775644302368f, +0.5023358464241028f, 0.8299338221549988f, 0.3525664210319519f, 0.6467911005020142f, 0.866820216178894f, 0.560322642326355f, 0.9399440288543701f, 0.6216250658035278f, +0.7617981433868408f, 0.2646304666996002f, 0.025964293628931046f, 0.5727476477622986f, 0.8749298453330994f, 0.005557444412261248f, 0.7935081720352173f, 0.15759211778640747f, +0.24657581746578217f, 0.29859456419944763f, 0.21264058351516724f, 0.08009370416402817f, 0.4936467111110687f, 0.16847415268421173f, 0.07826104760169983f, 0.8789875507354736f, +0.4665766656398773f, 0.920598566532135f, 0.46349677443504333f, 0.6919680833816528f, 0.6054619550704956f, 0.8874859809875488f, 0.8981916904449463f, 0.2769310474395752f, +0.8925811648368835f, 0.1449979543685913f, 0.3831627666950226f, 0.4630964696407318f, 0.01505066454410553f, 0.7855311632156372f, 0.6130115985870361f, 0.22855475544929504f, +0.591688334941864f, 0.607666552066803f, 0.43440988659858704f, 0.5966001152992249f, 0.8681831955909729f, 0.5765267014503479f, 0.9171448945999146f, 0.7056381106376648f, +0.3323950469493866f, 0.4971923530101776f, 0.14164556562900543f, 0.1855659931898117f, 0.5316653847694397f, 0.13160790503025055f, 0.5188389420509338f, 0.19202439486980438f, +0.8418950438499451f, 0.8554749488830566f, 0.49751362204551697f, 0.10819432884454727f, 0.37885430455207825f, 0.608906626701355f, 0.4411388039588928f, 0.34953537583351135f, +0.5999792814254761f, 0.8548124432563782f, 0.7580438256263733f, 0.3923238515853882f, 0.6012825965881348f, 0.5184241533279419f, 0.6045368909835815f, 0.898377001285553f, +0.8040817379951477f, 0.04608343541622162f, 0.17025339603424072f, 0.12941493093967438f, 0.3743678033351898f, 0.041844442486763f, 0.6952731013298035f, 0.03697677329182625f, +0.718549370765686f, 0.2802489995956421f, 0.32186031341552734f, 0.5408422350883484f, 0.19409306347370148f, 0.2341959923505783f, 0.27650922536849976f, 0.6086140871047974f, +0.6499473452568054f, 0.3488626480102539f, 0.021908599883317947f, 0.24189794063568115f, 0.2970775365829468f, 0.7017696499824524f, 0.9229640364646912f, 0.737134575843811f, +0.2963205873966217f, 0.190961092710495f, 0.6349189877510071f, 0.17626260221004486f, 0.9720255732536316f, 0.5652452707290649f, 0.617363691329956f, 0.40948912501335144f, +0.12041541934013367f, 0.9816982746124268f, 0.5357421636581421f, 0.7206700444221497f, 0.8854501843452454f, 0.12397732585668564f, 0.5724208950996399f, 0.7353929877281189f, +0.9372245073318481f, 0.20242398977279663f, 0.9328790903091431f, 0.021578095853328705f, 0.013153139501810074f, 0.4568987786769867f, 0.6758053302764893f, 0.9662733674049377f, +0.23867836594581604f, 0.21078833937644958f, 0.3624916970729828f, 0.47332486510276794f, 0.5813540816307068f, 0.5675532221794128f, 0.4080396890640259f, 0.3395008444786072f, +0.22668753564357758f, 0.010311695747077465f, 0.7820968627929688f, 0.409637987613678f, 0.2966823875904083f, 0.2655046582221985f, 0.8679233193397522f, 0.6748051047325134f, +0.9878333210945129f, 0.0009995171567425132f, 0.5162041783332825f, 0.3840506076812744f, 0.9792672991752625f, 0.8322229385375977f, 0.6581446528434753f, 0.7480389475822449f, +0.9581149816513062f, 0.5249365568161011f, 0.7742303609848022f, 0.6936571598052979f, 0.15626639127731323f, 0.5904139876365662f, 0.7475051879882812f, 0.7182372808456421f, +0.8351176381111145f, 0.7950302958488464f, 0.6927241086959839f, 0.025883756577968597f, 0.7636055946350098f, 0.6192069053649902f, 0.6432370543479919f, 0.12228994816541672f, +0.4578900933265686f, 0.8386763334274292f, 0.3990514278411865f, 0.46071723103523254f, 0.13802731037139893f, 0.40640854835510254f, 0.3625544309616089f, 0.6803394556045532f, +0.13991788029670715f, 0.6543972492218018f, 0.614884078502655f, 0.9878351092338562f, 0.2663015127182007f, 0.42997631430625916f, 0.9380136728286743f, 0.7456470131874084f, +0.7569973468780518f, 0.38309764862060547f, 0.16460327804088593f, 0.2074136584997177f, 0.8545089364051819f, 0.003929798491299152f, 0.5417223572731018f, 0.2667487859725952f, +0.6121549010276794f, 0.3346337080001831f, 0.24027390778064728f, 0.934942901134491f, 0.3792584538459778f, 0.7759948968887329f, 0.9126526713371277f, 0.23145928978919983f, +0.2971913814544678f, 0.6120193004608154f, 0.03306465595960617f, 0.027326850220561028f, 0.7039435505867004f, 0.21133948862552643f, 0.5873256921768188f, 0.31238508224487305f, +0.5827713012695312f, 0.0944298580288887f, 0.27882814407348633f, 0.663525402545929f, 0.596032440662384f, 0.3077148199081421f, 0.9977859258651733f, 0.29184359312057495f, +0.17271935939788818f, 0.8506672382354736f, 0.008344528265297413f, 0.3649138808250427f, 0.8817725777626038f, 0.5815324187278748f, 0.9471594095230103f, 0.16020533442497253f, +0.6045829057693481f, 0.07140357047319412f, 0.8130833506584167f, 0.008872699923813343f, 0.8921626806259155f, 0.4892973005771637f, 0.7892907857894897f, 0.9014286994934082f, +0.3621843457221985f, 0.8263819813728333f, 0.9237194657325745f, 0.08551690727472305f, 0.23621836304664612f, 0.8212858438491821f, 0.8871012330055237f, 0.9951843023300171f, +0.30428528785705566f, 0.42104318737983704f, 0.25728434324264526f, 0.5395596027374268f, 0.3556424081325531f, 0.7256873846054077f, 0.4353509843349457f, 0.6835750341415405f, +0.9133396744728088f, 0.11772459000349045f, 0.44263333082199097f, 0.470832496881485f, 0.8758931756019592f, 0.2256428450345993f, 0.3925136625766754f, 0.2797432839870453f, +0.18129056692123413f, 0.5048123598098755f, 0.3314325511455536f, 0.8188539147377014f, 0.6599600315093994f, 0.9256216287612915f, 0.7225265502929688f, 0.6523318290710449f, +0.3085877597332001f, 0.2858545780181885f, 0.41256117820739746f, 0.3306209146976471f, 0.1917559802532196f, 0.510397732257843f, 0.8673489093780518f, 0.5083721280097961f, +0.9293779730796814f, 0.832906186580658f, 0.6600126624107361f, 0.7885426878929138f, 0.5083682537078857f, 0.7804587483406067f, 0.9711667895317078f, 0.9341732859611511f, +0.7567885518074036f, 0.19518470764160156f, 0.501413106918335f, 0.794040858745575f, 0.48987075686454773f, 0.7848455905914307f, 0.4977274239063263f, 0.9442598223686218f, +0.9357163906097412f, 0.27411919832229614f, 0.22282756865024567f, 0.7463782429695129f, 0.6707057952880859f, 0.10607316344976425f, 0.7416541576385498f, 0.45387184619903564f, +0.13412728905677795f, 0.9676707983016968f, 0.8804501295089722f, 0.38914594054222107f, 0.5927761197090149f, 0.7452418208122253f, 0.4368624687194824f, 0.6022335886955261f, +0.7986619472503662f, 0.02174622006714344f, 0.34566530585289f, 0.7936260104179382f, 0.26191115379333496f, 0.365605890750885f, 0.2728256285190582f, 0.42086315155029297f, +0.4614507853984833f, 0.8055439591407776f, 0.46007412672042847f, 0.9623234272003174f, 0.6577586531639099f, 0.8859506249427795f, 0.7782798409461975f, 0.8401535749435425f, +0.9729214906692505f, 0.21712295711040497f, 0.7189800143241882f, 0.13196174800395966f, 0.9975947737693787f, 0.09733985364437103f, 0.9047946333885193f, 0.2257545292377472f, +0.32408320903778076f, 0.8007678389549255f, 0.8629552721977234f, 0.3510390818119049f, 0.539074182510376f, 0.056151989847421646f, 0.09285987168550491f, 0.7342820763587952f, +0.6359429955482483f, 0.8607731461524963f, 0.23097139596939087f, 0.31459206342697144f, 0.5424831509590149f, 0.5512003898620605f, 0.07945115864276886f, 0.4813055992126465f, +0.17882832884788513f, 0.5740710496902466f, 0.8562504053115845f, 0.9259157180786133f, 0.6239043474197388f, 0.24804362654685974f, 0.9472310543060303f, 0.46499478816986084f, +0.7130338549613953f, 0.9162270426750183f, 0.5538663268089294f, 0.5839828848838806f, 0.5573958158493042f, 0.924978494644165f, 0.24861371517181396f, 0.6412385106086731f, +0.8842841386795044f, 0.40002983808517456f, 0.1801733523607254f, 0.40647637844085693f, 0.6396904587745667f, 0.6666064262390137f, 0.3718838691711426f, 0.502200186252594f, +0.7299097776412964f, 0.06478989869356155f, 0.20852090418338776f, 0.4415574073791504f, 0.9293724298477173f, 0.08813481032848358f, 0.4099293351173401f, 0.7573805451393127f, +0.5820389986038208f, 0.6162617206573486f, 0.2795253098011017f, 0.031486447900533676f, 0.21183690428733826f, 0.6012778878211975f, 0.6750587821006775f, 0.18023474514484406f, +0.9667750597000122f, 0.3220099210739136f, 0.6550283432006836f, 0.9392325282096863f, 0.6678884625434875f, 0.07481079548597336f, 0.6543365120887756f, 0.21281415224075317f, +0.7605246901512146f, 0.4298371970653534f, 0.910841703414917f, 0.07454534620046616f, 0.53702712059021f, 0.10208197683095932f, 0.680138885974884f, 0.16424888372421265f, +0.08113893866539001f, 0.8799451589584351f, 0.816035270690918f, 0.7046423554420471f, 0.4927513897418976f, 0.17561444640159607f, 0.8236799240112305f, 0.8264367580413818f, +0.620945930480957f, 0.35737699270248413f, 0.9913866519927979f, 0.7193199992179871f, 0.6319969296455383f, 0.05140504613518715f, 0.06581291556358337f, 0.4371846318244934f, +0.8877448439598083f, 0.7431769967079163f, 0.5316871404647827f, 0.6810835599899292f, 0.9743124842643738f, 0.963657557964325f, 0.08533898741006851f, 0.0628245621919632f, +0.805252194404602f, 0.06569113582372665f, 0.5069155097007751f, 0.7635108232498169f, 0.7883887887001038f, 0.920667827129364f, 0.8327913880348206f, 0.04362229257822037f, +0.9773795008659363f, 0.11578171700239182f, 0.23088081181049347f, 0.3597413897514343f, 0.14138782024383545f, 0.7795767188072205f, 0.920731246471405f, 0.5594196319580078f, +0.925033450126648f, 0.7345218658447266f, 0.503506600856781f, 0.5367988348007202f, 0.010608697310090065f, 0.4062248766422272f, 0.8753417134284973f, 0.5436288714408875f, +0.8017826080322266f, 0.07347838580608368f, 0.4338362514972687f, 0.07733264565467834f, 0.0801984891295433f, 0.3199264109134674f, 0.5648439526557922f, 0.8935258984565735f, +0.24741989374160767f, 0.9762441515922546f, 0.12658141553401947f, 0.9108783602714539f, 0.04889227822422981f, 0.1259952187538147f, 0.038642704486846924f, 0.794116199016571f, +0.44953396916389465f, 0.8744425773620605f, 0.00622154725715518f, 0.40179479122161865f, 0.3944626450538635f, 0.599364697933197f, 0.8711247444152832f, 0.06100212410092354f, +0.5463660955429077f, 0.7826619148254395f, 0.515078067779541f, 0.7652891278266907f, 0.22105416655540466f, 0.6066440343856812f, 0.25577864050865173f, 0.6877878904342651f, +0.5680989027023315f, 0.8769969344139099f, 0.3398197591304779f, 0.04063747078180313f, 0.46773067116737366f, 0.4790322482585907f, 0.9420682787895203f, 0.19459064304828644f, +0.17758241295814514f, 0.7069278955459595f, 0.22949601709842682f, 0.20614509284496307f, 0.9516443014144897f, 0.2887978255748749f, 0.7986418604850769f, 0.5358546376228333f, +0.3603057563304901f, 0.012241637334227562f, 0.18840371072292328f, 0.1155792698264122f, 0.2606218755245209f, 0.7414966225624084f, 0.6027279496192932f, 0.5978645086288452f, +0.04355168342590332f, 0.14059780538082123f, 0.43307673931121826f, 0.5737596154212952f, 0.37674635648727417f, 0.11355647444725037f, 0.42484259605407715f, 0.5505791902542114f, +0.5043653845787048f, 0.984415590763092f, 0.38005590438842773f, 0.49786365032196045f, 0.6672791242599487f, 0.20999297499656677f, 0.3205336332321167f, 0.41771745681762695f, +0.3174888491630554f, 0.9778887033462524f, 0.9124601483345032f, 0.020953426137566566f, 0.2672605514526367f, 0.0010934534948319197f, 0.047773413360118866f, 0.38090747594833374f, +0.8884645700454712f, 0.30287694931030273f, 0.04833825305104256f, 0.18881411850452423f, 0.5979518294334412f, 0.399602472782135f, 0.17844945192337036f, 0.7882108092308044f, +0.677011251449585f, 0.8854313492774963f, 0.45342352986335754f, 0.44960567355155945f, 0.3298324644565582f, 0.052069589495658875f, 0.8119701147079468f, 0.5004726052284241f, +0.48004040122032166f, 0.15387000143527985f, 0.6655570268630981f, 0.7057616114616394f, 0.6684484481811523f, 0.9254857301712036f, 0.744014322757721f, 0.7026520371437073f, +0.8460713624954224f, 0.415122926235199f, 0.32672396302223206f, 0.2627194821834564f, 0.5217466354370117f, 0.19178913533687592f, 0.6349411606788635f, 0.8891187906265259f, +0.7440120577812195f, 0.3091934025287628f, 0.4263080358505249f, 0.9750504493713379f, 0.6826819777488708f, 0.8390824794769287f, 0.15991587936878204f, 0.3694080710411072f, +0.45558011531829834f, 0.8702945113182068f, 0.23215538263320923f, 0.9695906639099121f, 0.6097503304481506f, 0.9129814505577087f, 0.4736965298652649f, 0.3686486482620239f, +0.9296082854270935f, 0.6556851863861084f, 0.5548489093780518f, 0.004961545113474131f, 0.6717697381973267f, 0.1636216938495636f, 0.6075683832168579f, 0.9762537479400635f, +0.5228412747383118f, 0.16435839235782623f, 0.12992294132709503f, 0.4129725992679596f, 0.9182024598121643f, 0.7942736744880676f, 0.11258400976657867f, 0.5019041895866394f, +0.28664129972457886f, 0.03616790100932121f, 0.9722540378570557f, 0.5383954048156738f, 0.3356129229068756f, 0.48911669850349426f, 0.5281747579574585f, 0.7078421115875244f, +0.22735589742660522f, 0.45776987075805664f, 0.3195208013057709f, 0.7947978973388672f, 0.8533415198326111f, 0.9819122552871704f, 0.6028856039047241f, 0.6914821267127991f, +0.7636749744415283f, 0.7396550178527832f, 0.676313579082489f, 0.9343567490577698f, 0.34509456157684326f, 0.9981910586357117f, 0.3973073661327362f, 0.4229264259338379f, +0.8339991569519043f, 0.8953326940536499f, 0.6004531383514404f, 0.7345399260520935f, 0.2783049941062927f, 0.3783283233642578f, 0.3645496964454651f, 0.874805212020874f, +0.10884057730436325f, 0.18363234400749207f, 0.030484676361083984f, 0.2547590136528015f, 0.24082928895950317f, 0.11872278153896332f, 0.7448253631591797f, 0.798912525177002f, +0.933461606502533f, 0.26085835695266724f, 0.606980562210083f, 0.2861309051513672f, 0.23156456649303436f, 0.10583823174238205f, 0.7068204879760742f, 0.03734228014945984f, +0.042175132781267166f, 0.47357234358787537f, 0.5789156556129456f, 0.45286282896995544f, 0.2553878128528595f, 0.13594235479831696f, 0.07519525289535522f, 0.22167550027370453f, +0.16825780272483826f, 0.5727728009223938f, 0.9648455381393433f, 0.9725069999694824f, 0.1268131285905838f, 0.044792503118515015f, 0.3026411533355713f, 0.6727039813995361f, +0.4103625416755676f, 0.8215592503547668f, 0.3681996762752533f, 0.2313917577266693f, 0.0856224074959755f, 0.9730495810508728f, 0.5759740471839905f, 0.02660706266760826f, +0.06831255555152893f, 0.7057955265045166f, 0.33627018332481384f, 0.005357303190976381f, 0.44391191005706787f, 0.1340789496898651f, 0.5037074685096741f, 0.9535462260246277f, +0.7010871767997742f, 0.1054338589310646f, 0.7260611057281494f, 0.3896530270576477f, 0.0991886630654335f, 0.822773277759552f, 0.385873019695282f, 0.18796907365322113f, +0.6044596433639526f, 0.004040034022182226f, 0.862147331237793f, 0.8154231905937195f, 0.40174126625061035f, 0.10041078180074692f, 0.9442459344863892f, 0.16961249709129333f, +0.09166145324707031f, 0.15878458321094513f, 0.9637563824653625f, 0.4942142367362976f, 0.3061305284500122f, 0.3092150092124939f, 0.3976037800312042f, 0.8350924253463745f, +0.39813265204429626f, 0.6903368234634399f, 0.24681584537029266f, 0.06657544523477554f, 0.21150046586990356f, 0.1504402905702591f, 0.8427525162696838f, 0.46036383509635925f, +0.13827213644981384f, 0.5056079030036926f, 0.27298712730407715f, 0.9317548871040344f, 0.5449494123458862f, 0.8320332169532776f, 0.1620180457830429f, 0.2599216401576996f, +0.6704519391059875f, 0.3784875273704529f, 0.17294034361839294f, 0.2472543716430664f, 0.07147185504436493f, 0.88451087474823f, 0.6105734705924988f, 0.671800434589386f, +0.31106480956077576f, 0.061839405447244644f, 0.24210825562477112f, 0.7443496584892273f, 0.7372599840164185f, 0.1784939467906952f, 0.7548832893371582f, 0.46927356719970703f, +0.9519345760345459f, 0.167883962392807f, 0.4695723056793213f, 0.30838218331336975f, 0.7427016496658325f, 0.6073893308639526f, 0.020394153892993927f, 0.8634133338928223f, +0.2812332808971405f, 0.26214712858200073f, 0.8402667045593262f, 0.2711954116821289f, 0.7528697848320007f, 0.5795671343803406f, 0.43920546770095825f, 0.2091776728630066f, +0.444214791059494f, 0.3225474953651428f, 0.4212943911552429f, 0.7573381066322327f, 0.9821791648864746f, 0.7489244341850281f, 0.5347012877464294f, 0.18138134479522705f, +0.6270077228546143f, 0.7433095574378967f, 0.571861982345581f, 0.8675987720489502f, 0.42338988184928894f, 0.5377568006515503f, 0.9828140735626221f, 0.0568833202123642f, +0.9784805774688721f, 0.5070590972900391f, 0.40654951333999634f, 0.899846076965332f, 0.05688188225030899f, 0.4159352779388428f, 0.7509909272193909f, 0.8344524502754211f, +0.2696057856082916f, 0.5614613890647888f, 0.564357340335846f, 0.7834069728851318f, 0.363766074180603f, 0.052602365612983704f, 0.6403591632843018f, 0.2770768702030182f, +0.6130605936050415f, 0.1933237463235855f, 0.2667737305164337f, 0.909964382648468f, 0.0520508736371994f, 0.17801648378372192f, 0.6711950898170471f, 0.006274364423006773f, +0.8097144365310669f, 0.31527626514434814f, 0.7886291742324829f, 0.1496567726135254f, 0.12478365749120712f, 0.2728341519832611f, 0.6466277241706848f, 0.17396089434623718f, +0.35590535402297974f, 0.1949932724237442f, 0.7502039074897766f, 0.37593647837638855f, 0.6119386553764343f, 0.6154927015304565f, 0.6442830562591553f, 0.5875287055969238f, +0.771926999092102f, 0.189151331782341f, 0.846223771572113f, 0.7605885863304138f, 0.9594102501869202f, 0.6157747507095337f, 0.5411314368247986f, 0.3586638569831848f, +0.4225858151912689f, 0.8007842898368835f, 0.8070949912071228f, 0.408685564994812f, 0.6200571060180664f, 0.7012749910354614f, 0.6471378207206726f, 0.34390789270401f, +0.40557628870010376f, 0.4711100459098816f, 0.5219687819480896f, 0.3036375045776367f, 0.43855786323547363f, 0.5188291072845459f, 0.6622838973999023f, 0.1956409364938736f, +0.03612777590751648f, 0.6365073919296265f, 0.07221536338329315f, 0.5265085697174072f, 0.5973765254020691f, 0.3703961968421936f, 0.6563400030136108f, 0.16667254269123077f, +0.7403810620307922f, 0.7970815896987915f, 0.855979323387146f, 0.6003948450088501f, 0.8240017890930176f, 0.300899475812912f, 0.20029839873313904f, 0.3849489390850067f, +0.10787457972764969f, 0.8102700114250183f, 0.6488688588142395f, 0.505339503288269f, 0.29028815031051636f, 0.8658586740493774f, 0.9763928055763245f, 0.28194427490234375f, +0.1622023731470108f, 0.3139665424823761f, 0.8651318550109863f, 0.16491729021072388f, 0.7057092785835266f, 0.21198727190494537f, 0.8400357365608215f, 0.7909098863601685f, +0.3800571858882904f, 0.09037519991397858f, 0.8390635848045349f, 0.1650354564189911f, 0.5484389066696167f, 0.9864218235015869f, 0.6221427321434021f, 0.5218956470489502f, +0.7369908690452576f, 0.4158875048160553f, 0.7111475467681885f, 0.8155312538146973f, 0.54631507396698f, 0.8095486760139465f, 0.23364458978176117f, 0.9963705539703369f, +0.20014972984790802f, 0.764026403427124f, 0.16618014872074127f, 0.42977985739707947f, 0.5815058350563049f, 0.4922531247138977f, 0.15924513339996338f, 0.09451059252023697f, +0.8166179656982422f, 0.37239739298820496f, 0.14779305458068848f, 0.2800319790840149f, 0.7146039605140686f, 0.8448958992958069f, 0.32562968134880066f, 0.45240628719329834f, +0.6535614728927612f, 0.07263819873332977f, 0.9060655832290649f, 0.05295175686478615f, 0.3056860864162445f, 0.4304581880569458f, 0.9155386686325073f, 0.6722220778465271f, +0.4931163787841797f, 0.5672985911369324f, 0.4126390814781189f, 0.4613344073295593f, 0.35270845890045166f, 0.188294917345047f, 0.49973106384277344f, 0.6081303358078003f, +0.4307006597518921f, 0.139271080493927f, 0.43204036355018616f, 0.49851199984550476f, 0.35897836089134216f, 0.7799381613731384f, 0.620146632194519f, 0.2954597771167755f, +0.05694473534822464f, 0.7771864533424377f, 0.6036203503608704f, 0.7773945927619934f, 0.6737391352653503f, 0.6233006119728088f, 0.26410338282585144f, 0.06965098530054092f, +0.9696862697601318f, 0.7019414305686951f, 0.4374959468841553f, 0.10002098232507706f, 0.5967272520065308f, 0.5985307097434998f, 0.6067307591438293f, 0.1653425097465515f, +0.4807882308959961f, 0.29357853531837463f, 0.7427284717559814f, 0.07313022762537003f, 0.35720130801200867f, 0.7125546932220459f, 0.8820313811302185f, 0.44647061824798584f, +0.5536918640136719f, 0.584549605846405f, 0.8171143531799316f, 0.6710662245750427f, 0.06236039847135544f, 0.1417052447795868f, 0.9016069769859314f, 0.8484759330749512f, +0.34083810448646545f, 0.8402182459831238f, 0.8405411243438721f, 0.9666323661804199f, 0.5430439114570618f, 0.31219831109046936f, 0.5826084613800049f, 0.20848052203655243f, +0.48914578557014465f, 0.6062551736831665f, 0.3665560781955719f, 0.9611678123474121f, 0.9785478711128235f, 0.38634929060935974f, 0.2358333170413971f, 0.28737205266952515f, +0.4276410639286041f, 0.6685083508491516f, 0.11594510823488235f, 0.33120331168174744f, 0.282571405172348f, 0.8801300525665283f, 0.9111378788948059f, 0.3324480652809143f, +0.7587385773658752f, 0.09080538153648376f, 0.8407865166664124f, 0.3387264907360077f, 0.11774978786706924f, 0.46513012051582336f, 0.3404694199562073f, 0.6337873935699463f, +0.26892393827438354f, 0.8005001544952393f, 0.22360634803771973f, 0.8865064978599548f, 0.8743777275085449f, 0.18919631838798523f, 0.1981177031993866f, 0.03829490765929222f, +0.6500483155250549f, 0.009306036867201328f, 0.36411067843437195f, 0.08266031742095947f, 0.008345386013388634f, 0.20643627643585205f, 0.24354341626167297f, 0.9744816422462463f, +0.591185986995697f, 0.17402905225753784f, 0.9930526614189148f, 0.834691047668457f, 0.6547896265983582f, 0.646658182144165f, 0.459536075592041f, 0.15848363935947418f, +0.0775170847773552f, 0.48274436593055725f, 0.07832619547843933f, 0.060361821204423904f, 0.9787558913230896f, 0.23891140520572662f, 0.17265906929969788f, 0.48986631631851196f, +0.6932051181793213f, 0.5480526089668274f, 0.32976117730140686f, 0.9454007148742676f, 0.6797250509262085f, 0.19496260583400726f, 0.9705747961997986f, 0.679559051990509f, +0.39672526717185974f, 0.9894019365310669f, 0.20265938341617584f, 0.012506116181612015f, 0.626293420791626f, 0.2579537332057953f, 0.29380711913108826f, 0.7925621271133423f, +0.7605714797973633f, 0.8575484156608582f, 0.8613255620002747f, 0.821451723575592f, 0.9636286497116089f, 0.8372161388397217f, 0.9465959668159485f, 0.9620690941810608f, +0.5698416829109192f, 0.6589148640632629f, 0.7875661849975586f, 0.1332598477602005f, 0.31462034583091736f, 0.7254146337509155f, 0.555766224861145f, 0.2723972797393799f, +0.8879386782646179f, 0.8858312368392944f, 0.5856109857559204f, 0.6003392934799194f, 0.6061743497848511f, 0.6208295822143555f, 0.5039701461791992f, 0.5671778917312622f, +0.31351438164711f, 0.049646276980638504f, 0.6547864675521851f, 0.44449740648269653f, 0.36434048414230347f, 0.9203580021858215f, 0.8385347723960876f, 0.27131912112236023f, +0.833776593208313f, 0.7851735949516296f, 0.14119577407836914f, 0.20868200063705444f, 0.5986679196357727f, 0.5099581480026245f, 0.9017301201820374f, 0.6835969686508179f, +0.28509852290153503f, 0.16739468276500702f, 0.7900598049163818f, 0.3022211790084839f, 0.003612080356106162f, 0.942133367061615f, 0.9444113373756409f, 0.5084627270698547f, +0.2711412310600281f, 0.31727755069732666f, 0.4730336666107178f, 0.6640883684158325f, 0.19137395918369293f, 0.6538465619087219f, 0.11244332045316696f, 0.7322019934654236f, +0.5865882039070129f, 0.7861281633377075f, 0.4172727167606354f, 0.26177167892456055f, 0.44965845346450806f, 0.19200560450553894f, 0.18018148839473724f, 0.653134286403656f, +0.5594053268432617f, 0.19627287983894348f, 0.30752959847450256f, 0.9157074093818665f, 0.7477438449859619f, 0.0357174351811409f, 0.25804275274276733f, 0.42643460631370544f, +0.46987858414649963f, 0.54471355676651f, 0.8103408813476562f, 0.3974602222442627f, 0.46077960729599f, 0.8055732846260071f, 0.6391441822052002f, 0.4835341274738312f, +0.7419247627258301f, 0.6453018188476562f, 0.9842287302017212f, 0.01614964008331299f, 0.6276238560676575f, 0.192473903298378f, 0.44265690445899963f, 0.5579695105552673f, +0.2968972623348236f, 0.08195628225803375f, 0.4404749870300293f, 0.026951564475893974f, 0.20701175928115845f, 0.002376160118728876f, 0.6919177770614624f, 0.041785016655921936f, +0.010352949611842632f, 0.19518987834453583f, 0.9315083026885986f, 0.17270606756210327f, 0.5326797366142273f, 0.7444002628326416f, 0.6073132157325745f, 0.574566125869751f, +0.41895586252212524f, 0.4723639488220215f, 0.6665677428245544f, 0.28984516859054565f, 0.6220017671585083f, 0.28956079483032227f, 0.989417314529419f, 0.35670384764671326f, +0.7365808486938477f, 0.04337253049015999f, 0.19016671180725098f, 0.6427275538444519f, 0.82119220495224f, 0.4333341121673584f, 0.9795956611633301f, 0.5371379852294922f, +0.3717711567878723f, 0.2683793306350708f, 0.061247386038303375f, 0.7400310635566711f, 0.5975325703620911f, 0.25433236360549927f, 0.659572958946228f, 0.530849039554596f, +0.5623186230659485f, 0.694451093673706f, 0.4186108112335205f, 0.4181889295578003f, 0.16288621723651886f, 0.2826220989227295f, 0.3992467522621155f, 0.3148164451122284f, +0.508137047290802f, 0.2875794470310211f, 0.7093746662139893f, 0.9709956645965576f, 0.957690954208374f, 0.8447457551956177f, 0.3302139937877655f, 0.8378944396972656f, +0.271803081035614f, 0.8896716237068176f, 0.47795233130455017f, 0.11445415019989014f, 0.4652661979198456f, 0.21483442187309265f, 0.1365843117237091f, 0.36807385087013245f, +0.46811792254447937f, 0.3319743573665619f, 0.05963486060500145f, 0.014498576521873474f, 0.19276967644691467f, 0.8914100527763367f, 0.1175195500254631f, 0.6544328331947327f, +0.9305487871170044f, 0.543941855430603f, 0.17878739535808563f, 0.5389502644538879f, 0.5424853563308716f, 0.8428041338920593f, 0.10739333927631378f, 0.3330216109752655f, +0.42435944080352783f, 0.31902459263801575f, 0.2806607186794281f, 0.3417472243309021f, 0.8838842511177063f, 0.15976767241954803f, 0.4624760150909424f, 0.10116183757781982f, +0.1632988303899765f, 0.23951108753681183f, 0.3673311173915863f, 0.25919464230537415f, 0.45742514729499817f, 0.34233948588371277f, 0.975583553314209f, 0.03313435986638069f, +0.14791084825992584f, 0.2618393898010254f, 0.5636170506477356f, 0.14243823289871216f, 0.5926543474197388f, 0.4845777451992035f, 0.2057686150074005f, 0.2723183035850525f, +0.07713396847248077f, 0.6501951217651367f, 0.4723261296749115f, 0.5070583820343018f, 0.0122066056355834f, 0.3739427328109741f, 0.48710593581199646f, 0.4480968415737152f, +0.725607693195343f, 0.7692540884017944f, 0.11878605931997299f, 0.5225552320480347f, 0.5671935677528381f, 0.9961999654769897f, 0.0046299719251692295f, 0.18890711665153503f, +0.9625911116600037f, 0.41956284642219543f, 0.32376164197921753f, 0.9687389135360718f, 0.27799192070961f, 0.7932300567626953f, 0.2655269205570221f, 0.7263429760932922f, +0.8415409326553345f, 0.21565741300582886f, 0.2944166958332062f, 0.23240827023983002f, 0.40368780493736267f, 0.5965874791145325f, 0.2714657783508301f, 0.11942894011735916f, +0.6954628825187683f, 0.8338169455528259f, 0.903730571269989f, 0.23529234528541565f, 0.15558314323425293f, 0.09863317757844925f, 0.6679170727729797f, 0.27559491991996765f, +0.533854067325592f, 0.08792231231927872f, 0.9098185300827026f, 0.8387643098831177f, 0.8855341076850891f, 0.5365930199623108f, 0.8137586712837219f, 0.05904344841837883f, +0.9490351676940918f, 0.106611467897892f, 0.6834071278572083f, 0.013851548545062542f, 0.5999789237976074f, 0.40691787004470825f, 0.3971283733844757f, 0.4962903559207916f, +0.4969898760318756f, 0.03646503761410713f, 0.14552202820777893f, 0.4389643669128418f, 0.7045755386352539f, 0.7927735447883606f, 0.44864749908447266f, 0.41113150119781494f, +0.9388030767440796f, 0.746080219745636f, 0.8314694166183472f, 0.17704688012599945f, 0.4988608956336975f, 0.011550895869731903f, 0.7552914023399353f, 0.7213106751441956f, +0.7692390084266663f, 0.1532304435968399f, 0.9078415632247925f, 0.8234134912490845f, 0.13231976330280304f, 0.8756661415100098f, 0.914150595664978f, 0.4906480312347412f, +0.3873414397239685f, 0.512150764465332f, 0.11356320232152939f, 0.254444420337677f, 0.12637832760810852f, 0.08721303194761276f, 0.47592124342918396f, 0.6783040761947632f, +0.11591894179582596f, 0.31397417187690735f, 0.8670220971107483f, 0.7367643117904663f, 0.9072322845458984f, 0.009866297245025635f, 0.5598684549331665f, 0.8836888670921326f, +0.32538479566574097f, 0.07624677568674088f, 0.43853509426116943f, 0.7146497964859009f, 0.16533197462558746f, 0.5492109656333923f, 0.9672976136207581f, 0.6703537106513977f, +0.3609055280685425f, 0.6670821309089661f, 0.24820172786712646f, 0.5049997568130493f, 0.49510857462882996f, 0.9712989330291748f, 0.2897821068763733f, 0.8983100056648254f, +0.7678384780883789f, 0.4258418381214142f, 0.9942665100097656f, 0.43650224804878235f, 0.5328734517097473f, 0.12242831289768219f, 0.11055599898099899f, 0.1967138797044754f, +0.7831255197525024f, 0.4721035957336426f, 0.6201961040496826f, 0.9441260099411011f, 0.16278605163097382f, 0.6849381923675537f, 0.2083233892917633f, 0.06350357085466385f, +0.4771919846534729f, 0.5592228174209595f, 0.8268187642097473f, 0.2838377058506012f, 0.6088436245918274f, 0.0295572429895401f, 0.27473342418670654f, 0.40977898240089417f, +0.026430221274495125f, 0.22365613281726837f, 0.6673274040222168f, 0.49230891466140747f, 0.29827070236206055f, 0.8623630404472351f, 0.31082862615585327f, 0.5807880759239197f, +0.20767934620380402f, 0.15611419081687927f, 0.4044099450111389f, 0.4057665765285492f, 0.3867378830909729f, 0.6662331819534302f, 0.22749538719654083f, 0.3076525628566742f, +0.045047368854284286f, 0.7326507568359375f, 0.29942062497138977f, 0.9883783459663391f, 0.28427132964134216f, 0.7665137052536011f, 0.7767525315284729f, 0.6407413482666016f, +0.9373775124549866f, 0.645383894443512f, 0.9654213190078735f, 0.8145126104354858f, 0.9058122634887695f, 0.7650815844535828f, 0.3009765148162842f, 0.18720801174640656f, +0.48547443747520447f, 0.8568910956382751f, 0.7338923215866089f, 0.7821584939956665f, 0.42395099997520447f, 0.996785044670105f, 0.9837014079093933f, 0.16228090226650238f, +0.4528074562549591f, 0.5096973180770874f, 0.01049781870096922f, 0.7369263768196106f, 0.879584550857544f, 0.2852100431919098f, 0.759349524974823f, 0.8254513144493103f, +0.31243833899497986f, 0.3203682005405426f, 0.5354220867156982f, 0.16285178065299988f, 0.18431924283504486f, 0.17036683857440948f, 0.15172845125198364f, 0.635032594203949f, +0.6154482960700989f, 0.40875470638275146f, 0.3277050256729126f, 0.5189419984817505f, 0.4102509617805481f, 0.10382197052240372f, 0.9597969055175781f, 0.5113727450370789f, +0.8751571774482727f, 0.13302040100097656f, 0.7699622511863708f, 0.3846089243888855f, 0.9059504270553589f, 0.22646458446979523f, 0.5394835472106934f, 0.6173216700553894f, +0.5549989938735962f, 0.26676344871520996f, 0.9730051159858704f, 0.13597631454467773f, 0.790206789970398f, 0.2818346619606018f, 0.7440823912620544f, 0.961972177028656f, +0.43168219923973083f, 0.8462859988212585f, 0.7293583154678345f, 0.20174163579940796f, 0.9849982261657715f, 0.2141706347465515f, 0.053350552916526794f, 0.8837271332740784f, +0.8582066297531128f, 0.30339327454566956f, 0.34211644530296326f, 0.09037452936172485f, 0.9211709499359131f, 0.7114402055740356f, 0.15407222509384155f, 0.4327465891838074f, +0.6343165636062622f, 0.28452035784721375f, 0.6811808347702026f, 0.06718824058771133f, 0.721792995929718f, 0.8237798810005188f, 0.777059018611908f, 0.42129063606262207f, +0.4303091764450073f, 0.36162689328193665f, 0.24955178797245026f, 0.7637889981269836f, 0.04019307717680931f, 0.6044999361038208f, 0.7824038863182068f, 0.2683103084564209f, +0.07094312459230423f, 0.040061358362436295f, 0.6104920506477356f, 0.8361243009567261f, 0.42135241627693176f, 0.4460994005203247f, 0.2622123956680298f, 0.2773819863796234f, +0.29204219579696655f, 0.9354509115219116f, 0.24904337525367737f, 0.3919526934623718f, 0.44829726219177246f, 0.3891877830028534f, 0.3771398961544037f, 0.7463217973709106f, +0.6670991778373718f, 0.7177572250366211f, 0.5647544264793396f, 0.10663682967424393f, 0.173178032040596f, 0.8799243569374084f, 0.7203376889228821f, 0.7598806023597717f, +0.3540756404399872f, 0.31471532583236694f, 0.7853214144706726f, 0.5133505463600159f, 0.43388766050338745f, 0.6293902397155762f, 0.8638110160827637f, 0.24166013300418854f, +0.7787125706672668f, 0.21291996538639069f, 0.3370414078235626f, 0.21501481533050537f, 0.5400713682174683f, 0.4472717046737671f, 0.18745207786560059f, 0.849463939666748f, +0.9098230004310608f, 0.4078634977340698f, 0.14641764760017395f, 0.38237467408180237f, 0.7045917510986328f, 0.39147046208381653f, 0.13310085237026215f, 0.15966859459877014f, +0.0020451790187507868f, 0.3762141466140747f, 0.2515047490596771f, 0.7684207558631897f, 0.07031052559614182f, 0.5253793597221375f, 0.18483546376228333f, 0.42077264189720154f, +0.3275842070579529f, 0.717688262462616f, 0.9664614796638489f, 0.6322778463363647f, 0.1523241549730301f, 0.9796088337898254f, 0.5943257808685303f, 0.11061930656433105f, +0.7366321086883545f, 0.8852916955947876f, 0.15822452306747437f, 0.6990863084793091f, 0.6548894643783569f, 0.8937229514122009f, 0.6167212128639221f, 0.4006587564945221f, +0.4887903928756714f, 0.11436726897954941f, 0.7275571823120117f, 0.8332988619804382f, 0.9280864000320435f, 0.7521601915359497f, 0.32867008447647095f, 0.746923565864563f, +0.02886440046131611f, 0.03162917494773865f, 0.5147776007652283f, 0.7170936465263367f, 0.12445762753486633f, 0.9191029667854309f, 0.4909229874610901f, 0.2883457839488983f, +0.32708197832107544f, 0.407015323638916f, 0.08724937587976456f, 0.03839118033647537f, 0.7973744869232178f, 0.8031807541847229f, 0.1797371357679367f, 0.6593557000160217f, +0.3936898112297058f, 0.5641061067581177f, 0.7524095773696899f, 0.16857106983661652f, 0.9034513831138611f, 0.5293136239051819f, 0.14893083274364471f, 0.5431944131851196f, +0.7685979008674622f, 0.84193354845047f, 0.8363696336746216f, 0.07782135158777237f, 0.6193323135375977f, 0.9122920036315918f, 0.1485666185617447f, 0.9173501133918762f, +0.7151166796684265f, 0.13094587624073029f, 0.4497372508049011f, 0.9983950853347778f, 0.6769167184829712f, 0.5371173620223999f, 0.45148059725761414f, 0.286952942609787f, +0.3555085361003876f, 0.8425437211990356f, 0.47560444474220276f, 0.042200908064842224f, 0.013451792299747467f, 0.55763840675354f, 0.38838979601860046f, 0.4195408523082733f, +0.6299232244491577f, 0.6189432740211487f, 0.4319162964820862f, 0.624313473701477f, 0.07324018329381943f, 0.325261652469635f, 0.42146381735801697f, 0.6797844767570496f, +0.321650892496109f, 0.7232906222343445f, 0.5865238308906555f, 0.832703709602356f, 0.782405436038971f, 0.6188379526138306f, 0.8468232154846191f, 0.9514217376708984f, +0.3992912769317627f, 0.5516430735588074f, 0.8443314433097839f, 0.7187729477882385f, 0.28574466705322266f, 0.41176837682724f, 0.07823063433170319f, 0.10066080838441849f, +0.25602397322654724f, 0.7570359706878662f, 0.7638077735900879f, 0.7707843780517578f, 0.5059436559677124f, 0.6163693070411682f, 0.9212321639060974f, 0.8608729839324951f, +0.8104157447814941f, 0.1979411095380783f, 0.8056418299674988f, 0.22195561230182648f, 0.7515477538108826f, 0.5638439059257507f, 0.6609368324279785f, 0.9935469627380371f, +0.7613050937652588f, 0.472176730632782f, 0.15197859704494476f, 0.11034458130598068f, 0.24870122969150543f, 0.6061882972717285f, 0.3315753638744354f, 0.43108147382736206f, +0.8935296535491943f, 0.6876591444015503f, 0.9031840562820435f, 0.5248892903327942f, 0.5746605396270752f, 0.9435732960700989f, 0.3538028597831726f, 0.2747742533683777f, +0.7936022877693176f, 0.7067095041275024f, 0.5968209505081177f, 0.548354983329773f, 0.5139041543006897f, 0.538430392742157f, 0.4031567871570587f, 0.516243040561676f, +0.9020471572875977f, 0.9787185788154602f, 0.28990498185157776f, 0.38040614128112793f, 0.0687013790011406f, 0.7468912601470947f, 0.3508344888687134f, 0.1439666599035263f, +0.712916910648346f, 0.08311526477336884f, 0.9091669321060181f, 0.5176464915275574f, 0.2557835876941681f, 0.3339179754257202f, 0.31729811429977417f, 0.21087761223316193f, +0.7610986232757568f, 0.34836530685424805f, 0.5885502099990845f, 0.5773335695266724f, 0.5263015627861023f, 0.618472158908844f, 0.15282000601291656f, 0.16412830352783203f, +0.15619686245918274f, 0.4045253098011017f, 0.15869764983654022f, 0.645826518535614f, 0.6367990374565125f, 0.029707716777920723f, 0.9832934141159058f, 0.9595430493354797f, +0.6040931940078735f, 0.5881825685501099f, 0.8517171144485474f, 0.13486818969249725f, 0.5606174468994141f, 0.23510119318962097f, 0.9508532881736755f, 0.20676474273204803f, +0.5088498592376709f, 0.22566573321819305f, 0.09663791209459305f, 0.8043265342712402f, 0.7464483380317688f, 0.11581666767597198f, 0.17666244506835938f, 0.6208200454711914f, +0.41152721643447876f, 0.30306488275527954f, 0.312014102935791f, 0.977575957775116f, 0.6019393801689148f, 0.05982254445552826f, 0.6322872042655945f, 0.8261440396308899f, +0.6012784242630005f, 0.11126933991909027f, 0.07094410061836243f, 0.727690577507019f, 0.8254415988922119f, 0.5253117084503174f, 0.31656455993652344f, 0.6618501543998718f, +0.9037137031555176f, 0.4268539249897003f, 0.32236385345458984f, 0.06421594321727753f, 0.5196459889411926f, 0.2389390468597412f, 0.47386983036994934f, 0.429914653301239f, +0.937793493270874f, 0.34301334619522095f, 0.8779095411300659f, 0.280508428812027f, 0.792792558670044f, 0.10860254615545273f, 0.15102580189704895f, 0.9452743530273438f, +0.15582014620304108f, 0.19286061823368073f, 0.2131875604391098f, 0.8281524777412415f, 0.36936718225479126f, 0.4777294397354126f, 0.2775583267211914f, 0.05469357594847679f, +0.007924930192530155f, 0.679827868938446f, 0.4976731836795807f, 0.8417321443557739f, 0.7528247833251953f, 0.14627544581890106f, 0.37701770663261414f, 0.07393688708543777f, +0.8723589181900024f, 0.6130373477935791f, 0.7220580577850342f, 0.03408433124423027f, 0.5813632607460022f, 0.05327282473444939f, 0.4354342818260193f, 0.21724513173103333f, +0.44628751277923584f, 0.4865526854991913f, 0.6898394227027893f, 0.681554913520813f, 0.90875244140625f, 0.10277178883552551f, 0.9936130046844482f, 0.2917270064353943f, +0.9620303511619568f, 0.06987801194190979f, 0.24362649023532867f, 0.0051720342598855495f, 0.018798453733325005f, 0.4625922739505768f, 0.0975336879491806f, 0.002521490678191185f, +0.4112262725830078f, 0.5781759023666382f, 0.18558473885059357f, 0.43671727180480957f, 0.08701248466968536f, 0.10452698916196823f, 0.4962802529335022f, 0.6307324767112732f, +0.06618747860193253f, 0.0763457641005516f, 0.5470539927482605f, 0.25188833475112915f, 0.6294328570365906f, 0.612337052822113f, 0.35938146710395813f, 0.609495222568512f, +0.18825657665729523f, 0.24114584922790527f, 0.5355756282806396f, 0.09968645870685577f, 0.39902347326278687f, 0.13672444224357605f, 0.5192623138427734f, 0.2228262722492218f, +0.9435741901397705f, 0.6620460152626038f, 0.942135751247406f, 0.21953287720680237f, 0.814332127571106f, 0.032558638602495193f, 0.3215864896774292f, 0.625695526599884f, +0.46263477206230164f, 0.7415019869804382f, 0.1551731675863266f, 0.8049419522285461f, 0.8020268678665161f, 0.0402999110519886f, 0.23799008131027222f, 0.1844903975725174f, +0.6826640963554382f, 0.23227038979530334f, 0.7851903438568115f, 0.2686779499053955f, 0.2893185615539551f, 0.14502805471420288f, 0.6664957404136658f, 0.9198636412620544f, +0.8177050352096558f, 0.07128112018108368f, 0.8127525448799133f, 0.8604788184165955f, 0.9057804346084595f, 0.2625100910663605f, 0.565430223941803f, 0.20368091762065887f, +0.7418215274810791f, 0.4499324858188629f, 0.11380617320537567f, 0.9111624360084534f, 0.517171323299408f, 0.6952924132347107f, 0.07918299734592438f, 0.5716907382011414f, +0.2943904399871826f, 0.8322389125823975f, 0.5454317927360535f, 0.7463439106941223f, 0.6031607389450073f, 0.6603768467903137f, 0.8731411099433899f, 0.43748924136161804f, +0.49857020378112793f, 0.18975642323493958f, 0.44316262006759644f, 6.983755883993581e-05f, 0.5347565412521362f, 0.07904060184955597f, 0.8665599226951599f, 0.7552735805511475f, +0.9146917462348938f, 0.7973113656044006f, 0.7299874424934387f, 0.8492687940597534f, 0.5147866010665894f, 0.2967103123664856f, 0.7858167290687561f, 0.5519353747367859f, +0.5978220701217651f, 0.415010929107666f, 0.45898452401161194f, 0.48814278841018677f, 0.9492637515068054f, 0.69685959815979f, 0.5907543897628784f, 0.1498403549194336f, +0.9768056273460388f, 0.6638128757476807f, 0.32596147060394287f, 0.2108166366815567f, 0.4474639892578125f, 0.0439152754843235f, 0.6473573446273804f, 0.47416844964027405f, +0.8716512322425842f, 0.09022573381662369f, 0.3957134187221527f, 0.5531327724456787f, 0.09010428190231323f, 0.5733087658882141f, 0.4537200927734375f, 0.8653227090835571f, +0.11637737601995468f, 0.6185105443000793f, 0.429426372051239f, 0.006324832793325186f, 0.14795291423797607f, 0.9536460638046265f, 0.34291666746139526f, 0.0962425023317337f, +0.0955052599310875f, 0.7849918007850647f, 0.6299272775650024f, 0.7917014956474304f, 0.7618094682693481f, 0.03001175820827484f, 0.4414806663990021f, 0.19607166945934296f, +0.4245377480983734f, 0.9065585136413574f, 0.608715295791626f, 0.09212422370910645f, 0.5721312761306763f, 0.7020981907844543f, 0.2726181149482727f, 0.5911906361579895f, +0.8716753125190735f, 0.3453006446361542f, 0.12624874711036682f, 0.39290323853492737f, 0.9924445152282715f, 0.3453010618686676f, 0.9737502336502075f, 0.7283230423927307f, +0.07748351991176605f, 0.3311690390110016f, 0.8444952964782715f, 0.768478274345398f, 0.4317629933357239f, 0.5326514840126038f, 0.8280099630355835f, 0.8525687456130981f, +0.6260990500450134f, 0.9049381613731384f, 0.7743730545043945f, 0.7781369686126709f, 0.4082120656967163f, 0.14284846186637878f, 0.9536294341087341f, 0.7076330184936523f, +0.009453379549086094f, 0.24937258660793304f, 0.01748669706285f, 0.3226032555103302f, 0.1847710907459259f, 0.5583891272544861f, 0.17181263864040375f, 0.7925004363059998f, +0.6771546006202698f, 0.4291827380657196f, 0.36306604743003845f, 0.4323495924472809f, 0.16527332365512848f, 0.20120052993297577f, 0.11553840339183807f, 0.18321414291858673f, +0.2782846987247467f, 0.5452118515968323f, 0.8906779289245605f, 0.9583532810211182f, 0.8549636602401733f, 0.8893537521362305f, 0.8444620370864868f, 0.9646369814872742f, +0.47390541434288025f, 0.5972217321395874f, 0.7260549068450928f, 0.9564580917358398f, 0.4345371723175049f, 0.9936200976371765f, 0.3188203275203705f, 0.7372522354125977f, +0.5645861625671387f, 0.37963107228279114f, 0.37037530541419983f, 0.8223256468772888f, 0.22346194088459015f, 0.6288712024688721f, 0.3486076295375824f, 0.5827873945236206f, +0.6019104719161987f, 0.7610504031181335f, 0.6173200011253357f, 0.9740142822265625f, 0.8347939252853394f, 0.9850879907608032f, 0.6982242465019226f, 0.7994252443313599f, +0.08928888291120529f, 0.7853718400001526f, 0.8158285021781921f, 0.34392422437667847f, 0.9465630650520325f, 0.4196957051753998f, 0.25832876563072205f, 0.6052114367485046f, +0.16211064159870148f, 0.35370972752571106f, 0.33953410387039185f, 0.07125074416399002f, 0.5515926480293274f, 0.30111628770828247f, 0.8807748556137085f, 0.8056603670120239f, +0.5859729647636414f, 0.98881596326828f, 0.35196778178215027f, 0.16132311522960663f, 0.5128595232963562f, 0.11772632598876953f, 0.5774839520454407f, 0.5195878744125366f, +0.21304845809936523f, 0.2782920300960541f, 0.49115291237831116f, 0.06923556327819824f, 0.36917126178741455f, 0.44713422656059265f, 0.4524507224559784f, 0.8425262570381165f, +0.5461336374282837f, 0.3951931893825531f, 0.7843275666236877f, 0.9072834253311157f, 0.7976458668708801f, 0.773577094078064f, 0.45875996351242065f, 0.22829429805278778f, +0.24269235134124756f, 0.8309483528137207f, 0.47714313864707947f, 0.889731228351593f, 0.1883239448070526f, 0.22382700443267822f, 0.16481080651283264f, 0.03061469830572605f, +0.9060672521591187f, 0.39122965931892395f, 0.09189539402723312f, 0.10115744918584824f, 0.2448529750108719f, 0.7740107774734497f, 0.48527270555496216f, 0.13956333696842194f, +0.5743991732597351f, 0.8423774838447571f, 0.05358710139989853f, 0.40231460332870483f, 0.8718671798706055f, 0.6695539355278015f, 0.6447123289108276f, 0.14035528898239136f, +0.28247034549713135f, 0.6007376313209534f, 0.6599444150924683f, 0.25515681505203247f, 0.01638444885611534f, 0.31387192010879517f, 0.8016302585601807f, 0.5425150394439697f, +0.05795341730117798f, 0.44276535511016846f, 0.7976782321929932f, 0.530193030834198f, 0.49087485671043396f, 0.903365969657898f, 0.630344808101654f, 0.7220096588134766f, +0.619716227054596f, 0.5418136715888977f, 0.24659617245197296f, 0.5241878032684326f, 0.7486638426780701f, 0.19274842739105225f, 0.8359627723693848f, 0.5646980404853821f, +0.47638624906539917f, 0.292743444442749f, 0.4593885838985443f, 0.05324866250157356f, 0.452149361371994f, 0.30466949939727783f, 0.09031698107719421f, 0.5941102504730225f, +0.8069412112236023f, 0.0909104123711586f, 0.9859325885772705f, 0.17478087544441223f, 0.25581514835357666f, 0.796945333480835f, 0.5249836444854736f, 0.7166033387184143f, +0.2877085506916046f, 0.5617570281028748f, 0.4081679582595825f, 0.13945706188678741f, 0.681065559387207f, 0.786535918712616f, 0.5745649337768555f, 0.40158340334892273f, +0.3357584476470947f, 0.0077507030218839645f, 0.3870251178741455f, 0.2688267230987549f, 0.989449143409729f, 0.10330340266227722f, 0.6958611011505127f, 0.5440212488174438f, +0.8224202394485474f, 0.866252601146698f, 0.28362250328063965f, 0.6215625405311584f, 0.7212023735046387f, 0.5417895913124084f, 0.6805511713027954f, 0.740726113319397f, +0.8824375867843628f, 0.9704214334487915f, 0.2582492530345917f, 0.9548056721687317f, 0.15473103523254395f, 0.06813963502645493f, 0.3479475677013397f, 0.36107921600341797f, +0.40697672963142395f, 0.2710305154323578f, 0.41956210136413574f, 0.1770663857460022f, 0.7528901100158691f, 0.1278880387544632f, 0.8394837975502014f, 0.0934775248169899f, +0.8693529963493347f, 0.13390719890594482f, 0.6237444877624512f, 0.7818486094474792f, 0.3861686885356903f, 0.3697202205657959f, 0.5313715934753418f, 0.6897152662277222f, +0.19891147315502167f, 0.03879109397530556f, 0.9777467846870422f, 0.08724596351385117f, 0.5363439917564392f, 0.5319249033927917f, 0.5531821250915527f, 0.7295069098472595f, +0.7650759816169739f, 0.6299216151237488f, 0.406861275434494f, 0.8154638409614563f, 0.20705139636993408f, 0.1754792034626007f, 0.540041983127594f, 0.04508998990058899f, +0.36031386256217957f, 0.09632265567779541f, 0.678512454032898f, 0.8617214560508728f, 0.2733471095561981f, 0.8067993521690369f, 0.8873754143714905f, 0.8712619543075562f, +0.5611567497253418f, 0.5818712115287781f, 0.07824041694402695f, 0.5106337070465088f, 0.3729077875614166f, 0.8776640295982361f, 0.11725163459777832f, 0.5692316293716431f, +0.953792929649353f, 0.39240747690200806f, 0.1984146684408188f, 0.7099588513374329f, 0.8039830327033997f, 0.09104447811841965f, 0.7821099758148193f, 0.3733728528022766f, +0.4878755211830139f, 0.01198353711515665f, 0.7394906878471375f, 0.7228403687477112f, 0.9164584875106812f, 0.2317718118429184f, 0.18703699111938477f, 0.8750327229499817f, +0.5950536131858826f, 0.45884808897972107f, 0.06945383548736572f, 0.35290423035621643f, 0.7969561219215393f, 0.10286454856395721f, 0.866247832775116f, 0.6006062030792236f, +0.09943794459104538f, 0.744617760181427f, 0.6155154705047607f, 0.6238817572593689f, 0.13190960884094238f, 0.9976221919059753f, 0.4253352880477905f, 0.5461997389793396f, +0.18589650094509125f, 0.5067728757858276f, 0.3203522264957428f, 0.8296865224838257f, 0.22297421097755432f, 0.788659930229187f, 0.5949655771255493f, 0.7130817174911499f, +0.9956533908843994f, 0.21493007242679596f, 0.5553392171859741f, 0.5541546940803528f, 0.8083146214485168f, 0.24627268314361572f, 0.24104024469852448f, 0.42105624079704285f, +0.5869736075401306f, 0.7511434555053711f, 0.404193639755249f, 0.34571951627731323f, 0.48544031381607056f, 0.7384282946586609f, 0.11739248037338257f, 0.3551366329193115f, +0.2054719179868698f, 0.16062945127487183f, 0.3815939128398895f, 0.745781421661377f, 0.3803005516529083f, 0.910424530506134f, 0.7066053152084351f, 0.7027694582939148f, +0.4953709840774536f, 0.44554081559181213f, 0.9344726204872131f, 0.02750244550406933f, 0.6879798173904419f, 0.8510589599609375f, 0.08609112352132797f, 0.9393426179885864f, +0.8594370484352112f, 0.8162423372268677f, 0.3371943533420563f, 0.15501737594604492f, 0.8258843421936035f, 0.06284255534410477f, 0.03759938105940819f, 0.7148444652557373f, +0.450255423784256f, 0.7645806074142456f, 0.631844162940979f, 0.3389911949634552f, 0.6841591000556946f, 0.38084664940834045f, 0.5907280445098877f, 0.3646399676799774f, +0.3142799437046051f, 0.3199954926967621f, 0.23236174881458282f, 0.5800133943557739f, 0.9816415905952454f, 0.6498857736587524f, 0.14079077541828156f, 0.10489685833454132f, +0.46550077199935913f, 0.16944055259227753f, 0.37969663739204407f, 0.6779192090034485f, 0.4468561112880707f, 0.17321215569972992f, 0.3040425777435303f, 0.8195855021476746f, +0.2604721486568451f, 0.3296975791454315f, 0.34123679995536804f, 0.36118707060813904f, 0.4575856029987335f, 0.8175377249717712f, 0.8091602921485901f, 0.9030141830444336f, +0.7032922506332397f, 0.3191712200641632f, 0.000341095554176718f, 0.6103507876396179f, 0.9538896083831787f, 0.15996967256069183f, 0.43841060996055603f, 0.6019168496131897f, +0.25709882378578186f, 0.8801308870315552f, 0.941105306148529f, 0.8739894032478333f, 0.3440089523792267f, 0.2767378091812134f, 0.7691581845283508f, 0.26375553011894226f, +0.14882375299930573f, 0.6937806606292725f, 0.3029627501964569f, 0.7373985648155212f, 0.7732890248298645f, 0.2230478823184967f, 0.8414122462272644f, 0.14646176993846893f, +0.575310468673706f, 0.25331977009773254f, 0.33835169672966003f, 0.1114068478345871f, 0.5624164342880249f, 0.7118048667907715f, 0.33422645926475525f, 0.28996461629867554f, +0.880600094795227f, 0.08449819684028625f, 0.5055862069129944f, 0.4333864748477936f, 0.012839633971452713f, 0.5276995897293091f, 0.5849465131759644f, 0.4380248486995697f, +0.1154121533036232f, 0.05256691202521324f, 0.9121941924095154f, 0.6448869109153748f, 0.7270945310592651f, 0.1504988819360733f, 0.877301037311554f, 0.2727334499359131f, +0.17006708681583405f, 0.9651954174041748f, 0.6778701543807983f, 0.1574157029390335f, 0.7295137047767639f, 0.8788651823997498f, 0.6780194640159607f, 0.4324224293231964f, +0.9811031222343445f, 0.9336912631988525f, 0.17816585302352905f, 0.974938690662384f, 0.9900010228157043f, 0.4262349009513855f, 0.45526525378227234f, 0.8830282688140869f, +0.0847315639257431f, 0.5635290741920471f, 0.6880021095275879f, 0.970391571521759f, 0.4513353407382965f, 0.6973375678062439f, 0.44070732593536377f, 0.5671721696853638f, +0.09486944228410721f, 0.6908659338951111f, 0.8629666566848755f, 0.31924664974212646f, 0.9229938983917236f, 0.005577606614679098f, 0.32559874653816223f, 0.8876293897628784f, +0.7547886967658997f, 0.6963673830032349f, 0.14264921844005585f, 0.8059678673744202f, 0.677915632724762f, 0.598057210445404f, 0.6374203562736511f, 0.9995225667953491f, +0.025576673448085785f, 0.8356475234031677f, 0.10049678385257721f, 0.6277806162834167f, 0.8446578979492188f, 0.747154951095581f, 0.9849759340286255f, 0.4257746636867523f, +0.555391788482666f, 0.12848806381225586f, 0.4958812892436981f, 0.7057282328605652f, 0.4667394757270813f, 0.4264875650405884f, 0.7079384326934814f, 0.21150222420692444f, +0.9012676477432251f, 0.4678589701652527f, 0.14636042714118958f, 0.7948680520057678f, 0.8853469491004944f, 0.1660560816526413f, 0.403734028339386f, 0.5716443061828613f, +0.028789078816771507f, 0.7509702444076538f, 0.6810948848724365f, 0.34404256939888f, 0.12400750815868378f, 0.061153095215559006f, 0.009197061881422997f, 0.14611667394638062f, +0.5289410948753357f, 0.5822890996932983f, 0.5387926697731018f, 0.7750629186630249f, 0.053427085280418396f, 0.7776257395744324f, 0.16390888392925262f, 0.8552708029747009f, +0.8756377100944519f, 0.2572818994522095f, 0.3201913833618164f, 0.8883915543556213f, 0.6604008674621582f, 0.0777478888630867f, 0.5476941466331482f, 0.012489750981330872f, +0.9896881580352783f, 0.4937047064304352f, 0.0027301947120577097f, 0.9956791400909424f, 0.10775022208690643f, 0.31396397948265076f, 0.888135552406311f, 0.28055477142333984f, +0.38965749740600586f, 0.9795490503311157f, 0.27668625116348267f, 0.5509010553359985f, 0.124854177236557f, 0.9976965188980103f, 0.9717606902122498f, 0.6793277263641357f, +0.5125095844268799f, 0.9103071689605713f, 0.3432224988937378f, 0.3461343050003052f, 0.04100802168250084f, 0.7121938467025757f, 0.296980082988739f, 0.9065248966217041f, +0.7708389163017273f, 0.12717613577842712f, 0.30693870782852173f, 0.9004336595535278f, 0.16635262966156006f, 0.2957082986831665f, 0.6539150476455688f, 0.7506757974624634f, +0.7224403023719788f, 0.003404472256079316f, 0.031668033450841904f, 0.6432466506958008f, 0.19881561398506165f, 0.8143000602722168f, 0.49173328280448914f, 0.049232758581638336f, +0.12461427599191666f, 0.44680777192115784f, 0.7667660117149353f, 0.8594464063644409f, 0.5973219871520996f, 0.7249794602394104f, 0.14379066228866577f, 0.019831033423542976f, +0.7026041746139526f, 0.3347070813179016f, 0.7748610973358154f, 0.8660156726837158f, 0.7223536968231201f, 0.5585921406745911f, 0.49507108330726624f, 0.4675212800502777f, +0.8833733797073364f, 0.2892324924468994f, 0.9492325782775879f, 0.3157903552055359f, 0.08916300535202026f, 0.9925848841667175f, 0.14416193962097168f, 0.9287934899330139f, +0.8034802675247192f, 0.8109250664710999f, 0.6465789079666138f, 0.3902494013309479f, 0.7140994668006897f, 0.27650582790374756f, 0.6447917819023132f, 0.21397614479064941f, +0.8874156475067139f, 0.6323829293251038f, 0.7479973435401917f, 0.8095611333847046f, 0.23939289152622223f, 0.5617871880531311f, 0.741220235824585f, 0.5570691227912903f, +0.05888182297348976f, 0.4892392158508301f, 0.6545977592468262f, 0.592948317527771f, 0.3875872492790222f, 0.05168677493929863f, 0.8270453214645386f, 0.34167182445526123f, +0.27877116203308105f, 0.5016136169433594f, 0.31259313225746155f, 0.6886532306671143f, 0.3652629256248474f, 0.5139300227165222f, 0.20565783977508545f, 0.7182579040527344f, +0.38149353861808777f, 0.9239805936813354f, 0.004082588944584131f, 0.19890360534191132f, 0.6451380252838135f, 0.5356205701828003f, 0.1667386293411255f, 0.8040964007377625f, +0.6773591637611389f, 0.43357256054878235f, 0.43252450227737427f, 0.05147971585392952f, 0.1543145626783371f, 0.5924859046936035f, 0.8176112771034241f, 0.6313911080360413f, +0.812270998954773f, 0.14266492426395416f, 0.31615743041038513f, 0.4678249657154083f, 0.937034547328949f, 0.764889121055603f, 0.36713340878486633f, 0.9207326173782349f, +0.8266327381134033f, 0.12432663887739182f, 0.6528604030609131f, 0.9471820592880249f, 0.4985440969467163f, 0.6333796977996826f, 0.99062180519104f, 0.36672714352607727f, +0.5407466292381287f, 0.4010886549949646f, 0.4476568400859833f, 0.9790998101234436f, 0.38501545786857605f, 0.44023895263671875f, 0.8881924152374268f, 0.11870887130498886f, +0.3691818416118622f, 0.5664764046669006f, 0.2986762821674347f, 0.6249340176582336f, 0.9356926679611206f, 0.4259076714515686f, 0.732915997505188f, 0.09205542504787445f, +0.7703642845153809f, 0.5818997025489807f, 0.8502858877182007f, 0.5938451886177063f, 0.8573288917541504f, 0.178553506731987f, 0.01381558645516634f, 0.35879579186439514f, +0.6696009039878845f, 0.6523882746696472f, 0.23305922746658325f, 0.03800027072429657f, 0.8537224531173706f, 0.47447308897972107f, 0.4152829349040985f, 0.1894872635602951f, +0.36555951833724976f, 0.8992308974266052f, 0.4898283779621124f, 0.6739324927330017f, 0.23566165566444397f, 0.09069619327783585f, 0.46653932332992554f, 0.3783430755138397f, +0.8399925827980042f, 0.7041966915130615f, 0.1531023383140564f, 0.6371184587478638f, 0.18062059581279755f, 0.6961144804954529f, 0.6590582132339478f, 0.34156283736228943f, +0.5975109934806824f, 0.9983004331588745f, 0.8482440710067749f, 0.06952996551990509f, 0.6186106204986572f, 0.14766764640808105f, 0.7447496652603149f, 0.5768963694572449f, +0.7068055272102356f, 0.541756808757782f, 0.36735743284225464f, 0.33926907181739807f, 0.22000211477279663f, 0.9931629300117493f, 0.9401588439941406f, 0.823198676109314f, +0.6672641634941101f, 0.005398323759436607f, 0.5269225835800171f, 0.06546410918235779f, 0.19677123427391052f, 0.5841323137283325f, 0.6445091366767883f, 0.6480821371078491f, +0.784743070602417f, 0.4656243324279785f, 0.9268310070037842f, 0.39955934882164f, 0.8589759469032288f, 0.47467073798179626f, 0.9182717204093933f, 0.9689192771911621f, +0.2772842347621918f, 0.05680583417415619f, 0.9428519606590271f, 0.812343418598175f, 0.5332831144332886f, 0.3608133792877197f, 0.024375328794121742f, 0.6556554436683655f, +0.6908876299858093f, 0.24383161962032318f, 0.45154646039009094f, 0.40516915917396545f, 0.20267286896705627f, 0.7944217324256897f, 0.4737238585948944f, 0.43789809942245483f, +0.6003583073616028f, 0.30643168091773987f, 0.6462506055831909f, 0.8228254914283752f, 0.2885405421257019f, 0.8070845007896423f, 0.9875894784927368f, 0.40427038073539734f, +0.7154867053031921f, 0.2913540303707123f, 0.3342723548412323f, 0.004153707530349493f, 0.7068467736244202f, 0.9073240160942078f, 0.969099223613739f, 0.11867652088403702f, +0.40752464532852173f, 0.7649590373039246f, 0.17511698603630066f, 0.11660953611135483f, 0.8677133917808533f, 0.48487821221351624f, 0.8086408972740173f, 0.05848432332277298f, +0.15208286046981812f, 0.04139900207519531f, 0.6126111149787903f, 0.4034119248390198f, 0.7636808156967163f, 0.041633035987615585f, 0.3445882797241211f, 0.08738434314727783f, +0.4685080349445343f, 0.05433408543467522f, 0.053579770028591156f, 0.15831443667411804f, 0.1821662336587906f, 0.7601040005683899f, 0.6321256756782532f, 0.02009870857000351f, +0.19675281643867493f, 0.7614274621009827f, 0.7234383225440979f, 0.14782875776290894f, 0.3740658760070801f, 0.8295186758041382f, 0.6691678166389465f, 0.7126930952072144f, +0.7604465484619141f, 0.9908906817436218f, 0.9547745585441589f, 0.6415308117866516f, 0.6141220927238464f, 0.07570167630910873f, 0.846929132938385f, 0.4486221671104431f, +0.5919157266616821f, 0.9461131691932678f, 0.8287991285324097f, 0.339245468378067f, 0.2868049442768097f, 0.770814061164856f, 0.7412123680114746f, 0.7000530362129211f, +0.6995154619216919f, 0.7410442233085632f, 0.5030609369277954f, 0.08174297213554382f, 0.12884077429771423f, 0.1401926577091217f, 0.5764939785003662f, 0.429586261510849f, +0.30416321754455566f, 0.3095327615737915f, 0.14068672060966492f, 0.8307084441184998f, 0.9551011919975281f, 0.9663581848144531f, 0.12078291922807693f, 0.24973054230213165f, +0.9122723937034607f, 0.8885928988456726f, 0.5948247313499451f, 0.03396625071763992f, 0.7281215190887451f, 0.44910651445388794f, 0.4994751811027527f, 0.09574701637029648f, +0.6992459297180176f, 0.04939480498433113f, 0.4434335231781006f, 0.6447380185127258f, 0.7181873917579651f, 0.9745090007781982f, 0.6615013480186462f, 0.7166027426719666f, +0.024532288312911987f, 0.8607122302055359f, 0.2756635248661041f, 0.9827849268913269f, 0.1466778665781021f, 0.6729894280433655f, 0.59437096118927f, 0.9900925159454346f, +0.9275571703910828f, 0.7989718914031982f, 0.12883654236793518f, 0.805274486541748f, 0.22592905163764954f, 0.3449271023273468f, 0.3104754388332367f, 0.5318022966384888f, +0.5152270793914795f, 0.42017051577568054f, 0.04957260563969612f, 0.06457217037677765f, 0.7184571027755737f, 0.047726333141326904f, 0.9886648654937744f, 0.815446138381958f, +0.2272728979587555f, 0.8915484547615051f, 0.7642360925674438f, 0.21704277396202087f, 0.5381373167037964f, 0.6284278035163879f, 0.31728529930114746f, 0.18081091344356537f, +0.8599395751953125f, 0.7817064523696899f, 0.5805741548538208f, 0.07705429196357727f, 0.24709580838680267f, 0.27599039673805237f, 0.6973515152931213f, 0.5408116579055786f, +0.3554159700870514f, 0.08453505486249924f, 0.2618814706802368f, 0.25160273909568787f, 0.9839062094688416f, 0.5918498039245605f, 0.40555599331855774f, 0.6147164106369019f, +0.7509455680847168f, 0.9699158072471619f, 0.01720569096505642f, 0.36745133996009827f, 0.454200804233551f, 0.10501503944396973f, 0.1639639288187027f, 0.8086798191070557f, +0.5519586205482483f, 0.9524710178375244f, 0.14922107756137848f, 0.16064752638339996f, 0.24336284399032593f, 0.4597272574901581f, 0.34478598833084106f, 0.45106568932533264f, +0.9316025972366333f, 0.1681870073080063f, 0.4505406618118286f, 0.25429680943489075f, 0.5805848240852356f, 0.3339466154575348f, 0.6074861884117126f, 0.891034722328186f, +0.2915099263191223f, 0.7940891981124878f, 0.9180241227149963f, 0.4551801383495331f, 0.1716613471508026f, 0.1045721247792244f, 0.30257612466812134f, 0.7031441926956177f, +0.5615015625953674f, 0.5615136027336121f, 0.7457023859024048f, 0.1648615598678589f, 0.5555208921432495f, 0.9655007123947144f, 0.21972590684890747f, 0.31123363971710205f, +0.9385337829589844f, 0.3439059853553772f, 0.887579083442688f, 0.9766606688499451f, 0.3999704420566559f, 0.6262324452400208f, 0.06195235252380371f, 0.5651359558105469f, +0.06932353228330612f, 0.02067694067955017f, 0.5065999031066895f, 0.9407038688659668f, 0.4286517798900604f, 0.7800402641296387f, 0.9214192032814026f, 0.5345248579978943f, +0.5278276205062866f, 0.5302437543869019f, 0.4528139531612396f, 0.895175039768219f, 0.21394433081150055f, 0.5015261769294739f, 0.1591571420431137f, 0.5260874032974243f, +0.3145538568496704f, 0.5881122350692749f, 0.9762848019599915f, 0.4746265709400177f, 0.17543430626392365f, 0.53664231300354f, 0.7296833992004395f, 0.038481008261442184f, +0.9922879338264465f, 0.12550199031829834f, 0.01548281405121088f, 0.15855927765369415f, 0.6893773674964905f, 0.7881089448928833f, 0.05685422569513321f, 0.6482856273651123f, +0.6378992199897766f, 0.4053555130958557f, 0.640527069568634f, 0.6125614047050476f, 0.24669978022575378f, 0.9301769733428955f, 0.7810829281806946f, 0.14400096237659454f, +0.6391356587409973f, 0.12035133689641953f, 0.936598002910614f, 0.8646037578582764f, 0.8205286860466003f, 0.33612293004989624f, 0.8964592218399048f, 0.9923372268676758f, +0.389046847820282f, 0.403739333152771f, 0.1029653549194336f, 0.5525373816490173f, 0.8543006777763367f, 0.20695894956588745f, 0.013555333018302917f, 0.15435723960399628f, +0.17260436713695526f, 0.16086769104003906f, 0.7947986125946045f, 0.6923990845680237f, 0.47765594720840454f, 0.3180760145187378f, 0.326786607503891f, 0.6948397159576416f, +0.8675757050514221f, 0.2744790315628052f, 0.3517114222049713f, 0.7543752193450928f, 0.7711362838745117f, 0.9469327330589294f, 0.6369824409484863f, 0.3343900442123413f, +0.5334033966064453f, 0.04404490068554878f, 0.6759152412414551f, 0.6625367999076843f, 0.06829804927110672f, 0.396707683801651f, 0.4577946960926056f, 0.3502489924430847f, +0.28227487206459045f, 0.13857220113277435f, 0.05300053581595421f, 0.9147611260414124f, 0.04756763577461243f, 0.033351290971040726f, 0.6371238231658936f, 0.21438346803188324f, +0.07086629420518875f, 0.8775402307510376f, 0.29581326246261597f, 0.09109769016504288f, 0.7397406697273254f, 0.06358736753463745f, 0.8205204606056213f, 0.7349339127540588f, +0.9667542576789856f, 0.9031577110290527f, 0.8505868911743164f, 0.8494804501533508f, 0.6514735817909241f, 0.02888241969048977f, 0.8406327366828918f, 0.8735141754150391f, +0.9046912789344788f, 0.13579313457012177f, 0.23598800599575043f, 0.3710155487060547f, 0.2714608311653137f, 0.19910062849521637f, 0.710128128528595f, 0.256549596786499f, +0.911281406879425f, 0.6932957172393799f, 0.4813399314880371f, 0.038901276886463165f, 0.5639439225196838f, 0.8757312893867493f, 0.7887092232704163f, 0.4965929090976715f, +0.8531497716903687f, 0.1347714364528656f, 0.7478471398353577f, 0.3667818307876587f, 0.6700737476348877f, 0.24955147504806519f, 0.848624587059021f, 0.08820115774869919f, +0.6598376631736755f, 0.06726708263158798f, 0.4024765193462372f, 0.1904914379119873f, 0.22888101637363434f, 0.6892081499099731f, 0.9730727076530457f, 0.4007990062236786f, +0.6162058115005493f, 0.11256460100412369f, 0.522565484046936f, 0.09141048043966293f, 0.5814000368118286f, 0.41222089529037476f, 0.39861947298049927f, 0.673370897769928f, +0.8348118662834167f, 0.8475124835968018f, 0.9434541463851929f, 0.3240227997303009f, 0.13705305755138397f, 0.5912235975265503f, 0.5513601303100586f, 0.6142779588699341f, +0.8113373517990112f, 0.7232314944267273f, 0.6806574463844299f, 0.8309138417243958f, 0.5166325569152832f, 0.576686680316925f, 0.3092016875743866f, 0.1880403459072113f, +0.48959362506866455f, 0.6243846416473389f, 0.7445568442344666f, 0.13929857313632965f, 0.7640812993049622f, 0.4329265058040619f, 0.6420682072639465f, 0.7353877425193787f, +0.9041160345077515f, 0.37527790665626526f, 0.7867057919502258f, 0.8896756172180176f, 0.36397573351860046f, 0.7836901545524597f, 0.6592962741851807f, 0.3345969617366791f, +0.8983370065689087f, 0.4876171350479126f, 0.2568352520465851f, 0.7047891616821289f, 0.2085384726524353f, 0.2892420291900635f, 0.1488374024629593f, 0.41520440578460693f, +0.9050756692886353f, 0.030157487839460373f, 0.37567970156669617f, 0.1065400019288063f, 0.4051585793495178f, 0.785572350025177f, 0.13841038942337036f, 0.9658467173576355f, +0.9964156150817871f, 0.8927555680274963f, 0.7173246741294861f, 0.5087875127792358f, 0.8243860006332397f, 0.33084309101104736f, 0.5819961428642273f, 0.16759298741817474f, +0.9915720820426941f, 0.8067285418510437f, 0.8940203189849854f, 0.015688346698880196f, 0.5760545134544373f, 0.12770630419254303f, 0.15877892076969147f, 0.1047377660870552f, +0.7234990000724792f, 0.5260272026062012f, 0.07728378474712372f, 0.14665181934833527f, 0.7230839133262634f, 0.7716710567474365f, 0.8212485909461975f, 0.9272600412368774f, +0.2266577184200287f, 0.8590753674507141f, 0.23926205933094025f, 0.8510795831680298f, 0.7335338592529297f, 0.6991729140281677f, 0.5060652494430542f, 0.005111233331263065f, +0.7829078435897827f, 0.5016671419143677f, 0.06528753787279129f, 0.4934081733226776f, 0.3195931017398834f, 0.9004999995231628f, 0.8108497262001038f, 0.39539891481399536f, +0.2726075053215027f, 0.4903615117073059f, 0.17049358785152435f, 0.17324060201644897f, 0.4163163900375366f, 0.3176482915878296f, 0.5493969917297363f, 0.2359922230243683f, +0.4365030527114868f, 0.010878562927246094f, 0.6627322435379028f, 0.2977438271045685f, 0.9117284417152405f, 0.9567847847938538f, 0.4545128047466278f, 0.4754830300807953f, +0.28550073504447937f, 0.8885498642921448f, 0.7657763361930847f, 0.9812650084495544f, 0.04940054938197136f, 0.3328360915184021f, 0.6785821318626404f, 0.45161139965057373f, +0.4098942279815674f, 0.9265449047088623f, 0.13342154026031494f, 0.9627760052680969f, 0.061155982315540314f, 0.18871261179447174f, 0.6368939876556396f, 0.983329713344574f, +0.3126853406429291f, 0.5399633049964905f, 0.4559852182865143f, 0.950201153755188f, 0.48213282227516174f, 0.8454851508140564f, 0.312095582485199f, 0.19226811826229095f, +0.26122501492500305f, 0.47661474347114563f, 0.2360604703426361f, 0.21567535400390625f, 0.20958296954631805f, 0.221705824136734f, 0.048638131469488144f, 0.23999540507793427f, +0.7051072120666504f, 0.3554335832595825f, 0.1451377123594284f, 0.5590836405754089f, 0.5329970717430115f, 0.012603041715919971f, 0.7485321164131165f, 0.9549525380134583f, +0.16420681774616241f, 0.6933947205543518f, 0.12957561016082764f, 0.5776898264884949f, 0.1742178499698639f, 0.6364599466323853f, 0.5355567932128906f, 0.3738376498222351f, +0.40049049258232117f, 0.7421424984931946f, 0.5084964036941528f, 0.49674180150032043f, 0.0463537871837616f, 0.09525849670171738f, 0.3219534754753113f, 0.4918396770954132f, +0.010921580716967583f, 0.5613406896591187f, 0.29056107997894287f, 0.1386936753988266f, 0.7625772953033447f, 0.32371002435684204f, 0.6458648443222046f, 0.6838658452033997f, +0.1549079269170761f, 0.3481045961380005f, 0.5607970356941223f, 0.09865996241569519f, 0.8953478932380676f, 0.1891118288040161f, 0.08448584377765656f, 0.6824145317077637f, +0.15039364993572235f, 0.34003013372421265f, 0.9359164237976074f, 0.9839939475059509f, 0.1951717734336853f, 0.4381883442401886f, 0.7974062561988831f, 0.8784236907958984f, +0.1946176290512085f, 0.3883168399333954f, 0.9291514754295349f, 0.42585188150405884f, 0.5822921991348267f, 0.9641762375831604f, 0.36298272013664246f, 0.7545475959777832f, +0.7987940311431885f, 0.08636884391307831f, 0.8435553908348083f, 0.9281630516052246f, 0.43002647161483765f, 0.8935110569000244f, 0.1519247442483902f, 0.1849452257156372f, +0.9419882297515869f, 0.04295816272497177f, 0.9612911343574524f, 0.08386974036693573f, 0.5241042375564575f, 0.09058039635419846f, 0.2370527982711792f, 0.042031846940517426f, +0.508815348148346f, 0.6085156798362732f, 0.5991590023040771f, 0.2604529857635498f, 0.021256690844893456f, 0.7069776654243469f, 0.1039874479174614f, 0.43779152631759644f, +0.2136520892381668f, 0.6238812208175659f, 0.9441138505935669f, 0.5342090725898743f, 0.6052948236465454f, 0.38313814997673035f, 0.9607057571411133f, 0.17274218797683716f, +0.7401219010353088f, 0.18776284158229828f, 0.26395052671432495f, 0.962197482585907f, 0.13303914666175842f, 0.07813576608896255f, 0.8158083558082581f, 0.8412047624588013f, +0.3479447364807129f, 0.7992771863937378f, 0.09708770364522934f, 0.8588336110115051f, 0.6606152057647705f, 0.5869061946868896f, 0.3821367025375366f, 0.44262757897377014f, +0.22602520883083344f, 0.3533326983451843f, 0.7274686098098755f, 0.18946313858032227f, 0.2034388929605484f, 0.330596387386322f, 0.39647698402404785f, 0.3214511275291443f, +0.5025119781494141f, 0.5862865447998047f, 0.12179635465145111f, 0.8969322443008423f, 0.8869150876998901f, 0.1645512580871582f, 0.7362858653068542f, 0.2752062678337097f, +0.2908483147621155f, 0.6492133736610413f, 0.9862722158432007f, 0.7652477622032166f, 0.39182230830192566f, 0.6558084487915039f, 0.3591890335083008f, 0.5753031373023987f, +0.5673952102661133f, 0.9039931297302246f, 0.9681723117828369f, 0.663158118724823f, 0.417377233505249f, 0.4817817509174347f, 0.6123960614204407f, 0.7074647545814514f, +0.3050924241542816f, 0.7238611578941345f, 0.7862903475761414f, 0.49128544330596924f, 0.22984866797924042f, 0.1707826405763626f, 0.49936121702194214f, 0.9042518138885498f, +0.45055916905403137f, 0.13695412874221802f, 0.317286878824234f, 0.6780105829238892f, 0.9804973006248474f, 0.3038252294063568f, 0.49530351161956787f, 0.6190460324287415f, +0.6885323524475098f, 0.7409029603004456f, 0.49067220091819763f, 0.6884167790412903f, 0.7577952146530151f, 0.59488445520401f, 0.4033855199813843f, 0.7226436734199524f, +0.8417633771896362f, 0.9334734678268433f, 0.1640302687883377f, 0.26526522636413574f, 0.7931151986122131f, 0.15571479499340057f, 0.8250517845153809f, 0.18813703954219818f, +0.2791084051132202f, 0.36071938276290894f, 0.400958776473999f, 0.24134626984596252f, 0.11534910649061203f, 0.6269100308418274f, 0.001256757415831089f, 0.21833838522434235f, +0.2775944769382477f, 0.5177215337753296f, 0.22220702469348907f, 0.09634268283843994f, 0.751552939414978f, 0.6642023921012878f, 0.8439618349075317f, 0.658633828163147f, +0.9601231217384338f, 0.8713873624801636f, 0.3932928740978241f, 0.9036904573440552f, 0.43879565596580505f, 0.35696306824684143f, 0.8133607506752014f, 0.39999160170555115f, +0.6498238444328308f, 0.5745041966438293f, 0.8366757035255432f, 0.1298190802335739f, 0.4958805739879608f, 0.15505601465702057f, 0.009699421003460884f, 0.7778832912445068f, +0.533866822719574f, 0.121702179312706f, 0.5230792164802551f, 0.843227207660675f, 0.712168276309967f, 0.9798588752746582f, 0.8829266428947449f, 0.4365798532962799f, +0.9560376405715942f, 0.7159687280654907f, 0.7014780640602112f, 0.3394189476966858f, 0.7789750099182129f, 0.2008274495601654f, 0.31152623891830444f, 0.42292165756225586f, +0.5754998922348022f, 0.5497663617134094f, 0.37522462010383606f, 0.18414220213890076f, 0.03269113600254059f, 0.427275151014328f, 0.6751976013183594f, 0.4224676787853241f, +0.4705742597579956f, 0.29952213168144226f, 0.13536176085472107f, 0.7389308214187622f, 0.16264638304710388f, 0.8598836660385132f, 0.8474772572517395f, 0.7968056797981262f, +0.9709455966949463f, 0.2786126434803009f, 0.5465440154075623f, 0.6808867454528809f, 0.5469766855239868f, 0.1939748376607895f, 0.38255175948143005f, 0.807894229888916f, +0.873069703578949f, 0.0832587406039238f, 0.2843330204486847f, 0.2693554759025574f, 0.3920132517814636f, 0.717160701751709f, 0.040850769728422165f, 0.927808403968811f, +0.24761147797107697f, 0.4014740586280823f, 0.7461647391319275f, 0.2810559570789337f, 0.0415622852742672f, 0.039035387337207794f, 0.557427167892456f, 0.8321005702018738f, +0.6812009215354919f, 0.3869459331035614f, 0.19038504362106323f, 0.060074955224990845f, 0.30453523993492126f, 0.39624902606010437f, 0.2506827712059021f, 0.5410889387130737f, +0.12629690766334534f, 0.286379873752594f, 0.915403425693512f, 0.6837299466133118f, 0.8530269861221313f, 0.11057674884796143f, 0.3533717095851898f, 0.11013063043355942f, +0.45886939764022827f, 0.8684743642807007f, 0.6921112537384033f, 0.9136165380477905f, 0.6355336308479309f, 0.9928012490272522f, 0.03173685818910599f, 0.9008411765098572f, +0.09818407148122787f, 0.895086944103241f, 0.40064820647239685f, 0.37985944747924805f, 0.18375858664512634f, 0.09205622971057892f, 0.9461623430252075f, 0.14943675696849823f, +0.6475902795791626f, 0.4802597761154175f, 0.5193300843238831f, 0.12213966250419617f, 0.8000688552856445f, 0.5958932638168335f, 0.7228089570999146f, 0.4295611083507538f, +0.15483766794204712f, 0.5400691032409668f, 0.2146807610988617f, 0.24852201342582703f, 0.019074993208050728f, 0.9075049757957458f, 0.8682606816291809f, 0.43777385354042053f, +0.4542645215988159f, 0.8875735402107239f, 0.14703494310379028f, 0.03550338372588158f, 0.6502776145935059f, 0.5127357244491577f, 0.20750315487384796f, 0.34880658984184265f, +0.5169851779937744f, 0.4132079482078552f, 0.3164976239204407f, 0.11652672290802002f, 0.62558513879776f, 0.33311283588409424f, 0.5202757716178894f, 0.38679689168930054f, +0.002728915074840188f, 0.23230788111686707f, 0.201194629073143f, 0.2789579927921295f, 0.49287500977516174f, 0.682437002658844f, 0.7325343489646912f, 0.4132267236709595f, +0.871999204158783f, 0.9269272089004517f, 0.7783948183059692f, 0.6152552962303162f, 0.8734900951385498f, 0.4388236403465271f, 0.9884518980979919f, 0.6539275050163269f, +0.8955410122871399f, 0.651756763458252f, 0.24363788962364197f, 0.8721140623092651f, 0.2895912230014801f, 0.3461073637008667f, 0.402645081281662f, 0.10743037611246109f, +0.6022489666938782f, 0.29450222849845886f, 0.961442232131958f, 0.8548393249511719f, 0.46596813201904297f, 0.6208292841911316f, 0.7524641752243042f, 0.1945410966873169f, +0.18263593316078186f, 0.8696495890617371f, 0.0752178281545639f, 0.4296002984046936f, 0.7584073543548584f, 0.7181925177574158f, 0.1260867863893509f, 0.8862569332122803f, +0.7776638865470886f, 0.2618105113506317f, 0.773320734500885f, 0.7424293756484985f, 0.08441786468029022f, 0.7588907480239868f, 0.5411592721939087f, 0.6218657493591309f, +0.8746126890182495f, 0.09674224257469177f, 0.6733546257019043f, 0.8048838376998901f, 0.5497344136238098f, 0.7012168169021606f, 0.7706672549247742f, 0.7142792344093323f, +0.04918060451745987f, 0.749841034412384f, 0.8972081542015076f, 0.22844426333904266f, 0.7018308043479919f, 0.4963489770889282f, 0.9357761740684509f, 0.16032001376152039f, +0.5792621970176697f, 0.3278968930244446f, 0.9304185509681702f, 0.2625233829021454f, 0.8138962388038635f, 0.5282374620437622f, 0.6324379444122314f, 0.19579441845417023f, +0.8415753841400146f, 0.41232648491859436f, 0.11884600669145584f, 0.7414440512657166f, 0.03823054954409599f, 0.7150318622589111f, 0.9469173550605774f, 0.45123371481895447f, +0.20934218168258667f, 0.3539365530014038f, 0.9110342264175415f, 0.8021716475486755f, 0.19355633854866028f, 0.467924028635025f, 0.565794050693512f, 0.3955400586128235f, +0.3084738850593567f, 0.5483986735343933f, 0.11977148801088333f, 0.9836058616638184f, 0.9384028315544128f, 0.9986987709999084f, 0.645750880241394f, 0.0605643056333065f, +0.20484748482704163f, 0.48211541771888733f, 0.8674463033676147f, 0.43137478828430176f, 0.07805150747299194f, 0.13409923017024994f, 0.9186595678329468f, 0.6954293847084045f, +0.7766766548156738f, 0.6608179807662964f, 0.5150750875473022f, 0.7165483832359314f, 0.2608734369277954f, 0.491773396730423f, 0.017415698617696762f, 0.30723056197166443f, +0.495648592710495f, 0.44629764556884766f, 0.28842851519584656f, 0.37623757123947144f, 0.9658911824226379f, 0.2832755446434021f, 0.4317346215248108f, 0.5532484650611877f, +0.3872896432876587f, 0.23800629377365112f, 0.6334507465362549f, 0.7862723469734192f, 0.7801320552825928f, 0.15973499417304993f, 0.24789130687713623f, 0.05120539665222168f, +0.9001429080963135f, 0.963145911693573f, 0.7451936602592468f, 0.16640430688858032f, 0.20697952806949615f, 0.6880804300308228f, 0.044303178787231445f, 0.5879225730895996f, +0.6549526453018188f, 0.8188637495040894f, 0.700238049030304f, 0.838671863079071f, 0.1921015977859497f, 0.6948384642601013f, 0.15403735637664795f, 0.44408679008483887f, +0.41105860471725464f, 0.11085812002420425f, 0.9599835872650146f, 0.17621999979019165f, 0.945296585559845f, 0.8866705298423767f, 0.006622188724577427f, 0.7342132329940796f, +0.5399069786071777f, 0.7612489461898804f, 0.1518380492925644f, 0.9375191330909729f, 0.9630802273750305f, 0.3714708089828491f, 0.7238702178001404f, 0.32155609130859375f, +0.841580867767334f, 0.495847225189209f, 0.5877698659896851f, 0.3754110336303711f, 0.2974899709224701f, 0.37513965368270874f, 0.6195447444915771f, 0.2227540910243988f, +0.6788145899772644f, 0.11264271289110184f, 0.44027888774871826f, 0.47529032826423645f, 0.23033709824085236f, 0.3900220990180969f, 0.8812339305877686f, 0.9353894591331482f, +0.6115545034408569f, 0.421451210975647f, 0.0507383719086647f, 0.6762838363647461f, 0.01786169223487377f, 0.06961070746183395f, 0.13355478644371033f, 0.4840070903301239f, +0.28847700357437134f, 0.11744589358568192f, 0.06768595427274704f, 0.6919218301773071f, 0.6551365256309509f, 0.7198601365089417f, 0.04872717708349228f, 0.42889153957366943f, +0.7117154002189636f, 0.6025447249412537f, 0.3976508378982544f, 0.331184059381485f, 0.3490471839904785f, 0.5489289164543152f, 0.4589938521385193f, 0.05166223272681236f, +0.5940329432487488f, 0.8546459674835205f, 0.19834573566913605f, 0.39296042919158936f, 0.1430230289697647f, 0.8205055594444275f, 0.847845196723938f, 0.9072352051734924f, +0.03712446242570877f, 0.6428880095481873f, 0.3421383202075958f, 0.449365496635437f, 0.6606783866882324f, 0.8369714021682739f, 0.21036525070667267f, 0.03610047698020935f, +0.6175118088722229f, 0.37718597054481506f, 0.6668025851249695f, 0.541941225528717f, 0.6482390761375427f, 0.9516400098800659f, 0.2573772966861725f, 0.6759936213493347f, +0.9916340112686157f, 0.6173250675201416f, 0.25328779220581055f, 0.712656557559967f, 0.6097128391265869f, 0.3930477201938629f, 0.4314936697483063f, 0.9049229621887207f, +0.4046151638031006f, 0.5228598117828369f, 0.5630527138710022f, 0.7976044416427612f, 0.6066973805427551f, 0.925612211227417f, 0.012150511145591736f, 0.31424978375434875f, +0.21819204092025757f, 0.5792139172554016f, 0.9439706206321716f, 0.5902773141860962f, 0.4898759126663208f, 0.7873744368553162f, 0.41322025656700134f, 0.10230153053998947f, +0.18388815224170685f, 0.28740012645721436f, 0.4986484944820404f, 0.9825742840766907f, 0.3105465769767761f, 0.4841642677783966f, 0.9354446530342102f, 0.7854213118553162f, +0.6910917162895203f, 0.08224062621593475f, 0.5548055171966553f, 0.7973762154579163f, 0.8149477243423462f, 0.2636759877204895f, 0.4080032408237457f, 0.8040527105331421f, +0.2938854694366455f, 0.833778440952301f, 0.9902840852737427f, 0.0029551011975854635f, 0.5589485764503479f, 0.7020373344421387f, 0.12320037186145782f, 0.40083011984825134f, +0.673477053642273f, 0.032502662390470505f, 0.5158311128616333f, 0.21406465768814087f, 0.07314480096101761f, 0.5419561862945557f, 0.8119232654571533f, 0.11208542436361313f, +0.31117692589759827f, 0.6173633337020874f, 0.38520705699920654f, 0.04936036467552185f, 0.7747545838356018f, 0.19585733115673065f, 0.03694653883576393f, 0.8621004223823547f, +0.24495592713356018f, 0.4956050515174866f, 0.3594091832637787f, 0.8929274678230286f, 0.357383131980896f, 0.3763147294521332f, 0.3961414694786072f, 0.46327322721481323f, +0.7855424880981445f, 0.12762440741062164f, 0.5858439207077026f, 0.26740777492523193f, 0.6605316996574402f, 0.1447567492723465f, 0.8689097166061401f, 0.7946014404296875f, +0.3898536264896393f, 0.0020311942789703608f, 0.9248934388160706f, 0.6494950652122498f, 0.967574417591095f, 0.9785016179084778f, 0.4767763912677765f, 0.6907351016998291f, +0.26313555240631104f, 0.8482000231742859f, 0.43509483337402344f, 0.37557607889175415f, 0.1810425966978073f, 0.8531154990196228f, 0.6476980447769165f, 0.18097421526908875f, +0.9883592128753662f, 0.3826931416988373f, 0.027731625363230705f, 0.6708442568778992f, 0.8958496451377869f, 0.33869341015815735f, 0.5603029727935791f, 0.6229135394096375f, +0.218708798289299f, 0.9813204407691956f, 0.961088240146637f, 0.3719449043273926f, 0.08739225566387177f, 0.37977147102355957f, 0.6257171034812927f, 0.27212637662887573f, +0.46901950240135193f, 0.7158763408660889f, 0.9691244959831238f, 0.54908287525177f, 0.7975504994392395f, 0.8391512036323547f, 0.5636736750602722f, 0.15852749347686768f, +0.5031101107597351f, 0.44839906692504883f, 0.8324055075645447f, 0.6019351482391357f, 0.04175151139497757f, 0.29752951860427856f, 0.9463603496551514f, 0.3760203421115875f, +0.21701884269714355f, 0.759697437286377f, 0.7756156325340271f, 0.2657548487186432f, 0.17316536605358124f, 0.9018288254737854f, 0.15306223928928375f, 0.551310122013092f, +0.2243117392063141f, 0.510899543762207f, 0.9725614786148071f, 0.3307679295539856f, 0.4611845016479492f, 0.44556233286857605f, 0.003947418183088303f, 0.9510647058486938f, +0.607415497303009f, 0.01136865559965372f, 0.4222613275051117f, 0.9868600368499756f, 0.5357815623283386f, 0.7254189252853394f, 0.9514076709747314f, 0.3925112783908844f, +0.007777532562613487f, 0.6520833969116211f, 0.16340631246566772f, 0.6837939620018005f, 0.31009289622306824f, 0.30894434452056885f, 0.014918484725058079f, 0.6510624885559082f, +0.5595836639404297f, 0.7624285221099854f, 0.19347314536571503f, 0.6676853895187378f, 0.49555766582489014f, 0.546543538570404f, 0.2766449749469757f, 0.03720185533165932f, +0.7099671959877014f, 0.4448891878128052f, 0.7832029461860657f, 0.350302129983902f, 0.6769861578941345f, 0.031083302572369576f, 0.655971109867096f, 0.04959506168961525f, +0.7582138180732727f, 0.9726129174232483f, 0.028011955320835114f, 0.2519211769104004f, 0.4972204566001892f, 0.4418123960494995f, 0.7430997490882874f, 0.23017051815986633f, +0.8917436599731445f, 0.2674081027507782f, 0.8000820279121399f, 0.2599489688873291f, 0.11161307990550995f, 0.8513209223747253f, 0.4791162312030792f, 0.2629877030849457f, +0.8915493488311768f, 0.6754859089851379f, 0.0021353410556912422f, 0.4758095145225525f, 0.021155312657356262f, 0.3943853974342346f, 0.8313748240470886f, 0.0032636846881359816f, +0.7205235362052917f, 0.988365113735199f, 0.7607941031455994f, 0.6047651767730713f, 0.48086416721343994f, 0.2883665859699249f, 0.269356369972229f, 0.5849512815475464f, +0.6230580806732178f, 0.09361723810434341f, 0.7223215699195862f, 0.1148950606584549f, 0.17920547723770142f, 0.5447251200675964f, 0.823210597038269f, 0.38423898816108704f, +0.5568151473999023f, 0.8432204127311707f, 0.3583156168460846f, 0.5149145126342773f, 0.8504390716552734f, 0.2409631907939911f, 0.23156091570854187f, 0.5025146007537842f, +0.7888534069061279f, 0.5453885197639465f, 0.9227812886238098f, 0.7095359563827515f, 0.5274432301521301f, 0.13628403842449188f, 0.820164680480957f, 0.5315058827400208f, +0.6797677278518677f, 0.14257581532001495f, 0.6664245128631592f, 0.14873339235782623f, 0.6003360152244568f, 0.5588635802268982f, 0.35187333822250366f, 0.6558818221092224f, +0.25262972712516785f, 0.6443325281143188f, 0.15888142585754395f, 0.7356659173965454f, 0.32536381483078003f, 0.4213862419128418f, 0.054270777851343155f, 0.6593993902206421f, +0.34508559107780457f, 0.677112877368927f, 0.5531525015830994f, 0.6018171906471252f, 0.7435880303382874f, 0.9329378008842468f, 0.8484265804290771f, 0.7336880564689636f, +0.5616175532341003f, 0.3151552081108093f, 0.2502535581588745f, 0.5015808939933777f, 0.12493181228637695f, 0.5339244604110718f, 0.47727417945861816f, 0.31076672673225403f, +0.4038277864456177f, 0.36101198196411133f, 0.592239499092102f, 0.5507514476776123f, 0.22726646065711975f, 0.9730595350265503f, 0.22602716088294983f, 0.546532928943634f, +0.9134078621864319f, 0.21508921682834625f, 0.21273274719715118f, 0.3477347791194916f, 0.33148738741874695f, 0.42903390526771545f, 0.9008448719978333f, 0.35097283124923706f, +0.6535636186599731f, 0.5032427310943604f, 0.9948516488075256f, 0.8169650435447693f, 0.9384531378746033f, 0.3034573197364807f, 0.20736123621463776f, 0.8630384802818298f, +0.6930658221244812f, 0.40400177240371704f, 0.7946355938911438f, 0.939969003200531f, 0.7337632179260254f, 0.2842102646827698f, 0.33680158853530884f, 0.5741771459579468f, +0.8117149472236633f, 0.6236798167228699f, 0.5312785506248474f, 0.061067771166563034f, 0.4536164104938507f, 0.43326762318611145f, 0.46799033880233765f, 0.5777156352996826f, +0.23588046431541443f, 0.2757384777069092f, 0.011198457330465317f, 0.21861815452575684f, 0.6858676671981812f, 0.27364471554756165f, 0.018844470381736755f, 0.28854039311408997f, +0.8991094827651978f, 0.01264351885765791f, 0.5119007229804993f, 0.9972274899482727f, 0.3284660875797272f, 0.6729960441589355f, 0.7886438369750977f, 0.4117498993873596f, +0.528037965297699f, 0.5636448264122009f, 0.5721585154533386f, 0.2104550153017044f, 0.16724669933319092f, 0.02263815887272358f, 0.9948727488517761f, 0.511417031288147f, +0.14070668816566467f, 0.7991015911102295f, 0.14088751375675201f, 0.6192178726196289f, 0.9973006844520569f, 0.8426337242126465f, 0.8887962698936462f, 0.7683138251304626f, +0.12151999026536942f, 0.869881272315979f, 0.5403245687484741f, 0.7777119278907776f, 0.19597561657428741f, 0.4887941777706146f, 0.1411861628293991f, 0.7337222099304199f, +0.4510733187198639f, 0.4644406735897064f, 0.6622631549835205f, 0.36723947525024414f, 0.11937768757343292f, 0.14629895985126495f, 0.775697648525238f, 0.5342355370521545f, +0.4910259246826172f, 0.80459064245224f, 0.7961825132369995f, 0.19699642062187195f, 0.8389145731925964f, 0.8851839303970337f, 0.5990914702415466f, 0.38511404395103455f, +0.03903184086084366f, 0.17987221479415894f, 0.6250771880149841f, 0.313412606716156f, 0.37645137310028076f, 0.5095506906509399f, 0.512826144695282f, 0.32807156443595886f, +0.9078131914138794f, 0.251923143863678f, 0.3144402503967285f, 0.6809813380241394f, 0.004425565246492624f, 0.4455896317958832f, 0.03763207048177719f, 0.09901171177625656f, +0.7056940793991089f, 0.521952748298645f, 0.7973572015762329f, 0.41640573740005493f, 0.28473803400993347f, 0.9464510083198547f, 0.6239585876464844f, 0.7428925633430481f, +0.3588840663433075f, 0.8500490188598633f, 0.8131201863288879f, 0.764038622379303f, 0.11944829672574997f, 0.4379526674747467f, 0.7050716280937195f, 0.6697850823402405f, +0.2567388713359833f, 0.22527408599853516f, 0.34424903988838196f, 0.11070093512535095f, 0.6890242099761963f, 0.7970025539398193f, 0.6549165844917297f, 0.5055155158042908f, +0.0318637490272522f, 0.9801427721977234f, 0.45378851890563965f, 0.13137732446193695f, 0.05288134887814522f, 0.7019830942153931f, 0.694731593132019f, 0.6170365810394287f, +0.43126797676086426f, 0.30575382709503174f, 0.3492889404296875f, 0.4337555766105652f, 0.11185141652822495f, 0.6728864312171936f, 0.470753014087677f, 0.4661966860294342f, +0.6994218826293945f, 0.75475013256073f, 0.02574123628437519f, 0.04989302530884743f, 0.6143804788589478f, 0.8688938617706299f, 0.8139298558235168f, 0.14704664051532745f, +0.5992111563682556f, 0.37154749035835266f, 0.7297682166099548f, 0.39444613456726074f, 0.6673941612243652f, 0.4504737854003906f, 0.5223122835159302f, 0.34146302938461304f, +0.263251394033432f, 0.38439053297042847f, 0.11583548039197922f, 0.4863998591899872f, 0.5499683618545532f, 0.5221050977706909f, 0.46255064010620117f, 0.9036579728126526f, +0.3939616084098816f, 0.38815033435821533f, 0.0790560394525528f, 0.9939942955970764f, 0.42705342173576355f, 0.9853265285491943f, 0.7909041047096252f, 0.8861450552940369f, +0.5930643081665039f, 0.326633095741272f, 0.10748019814491272f, 0.32255446910858154f, 0.45910993218421936f, 0.2044675052165985f, 0.578694760799408f, 0.686529278755188f, +0.6416405439376831f, 0.6429755091667175f, 0.9113243222236633f, 0.11178244650363922f, 0.04105544090270996f, 0.2447310835123062f, 0.48582693934440613f, 0.21261952817440033f, +0.9720439910888672f, 0.7153652906417847f, 0.3715413510799408f, 0.8452891111373901f, 0.42634034156799316f, 0.41089144349098206f, 0.9600129723548889f, 0.5102835297584534f, +0.411039263010025f, 0.5549745559692383f, 0.23781733214855194f, 0.9016844630241394f, 0.3383098840713501f, 0.4849197566509247f, 0.8001959323883057f, 0.18291333317756653f, +0.6910961866378784f, 0.9087791442871094f, 0.5757625102996826f, 0.2917768359184265f, 0.759909987449646f, 0.6343470215797424f, 0.14584748446941376f, 0.6006488800048828f, +0.9918164610862732f, 0.7941421866416931f, 0.31885263323783875f, 0.09440898150205612f, 0.42285919189453125f, 0.9742766618728638f, 0.5579175353050232f, 0.3401194214820862f, +0.18527454137802124f, 0.057903338223695755f, 0.49435827136039734f, 0.5321003198623657f, 0.3088870048522949f, 0.5634181499481201f, 0.46672317385673523f, 0.28585028648376465f, +0.042958714067935944f, 0.10187029093503952f, 0.6709461212158203f, 0.07742279767990112f, 0.45275604724884033f, 0.9383948445320129f, 0.3779710531234741f, 0.5598633885383606f, +0.3205997347831726f, 0.020319277420639992f, 0.8281957507133484f, 0.5726107954978943f, 0.7158854007720947f, 0.36881446838378906f, 0.8422334790229797f, 0.993685245513916f, +0.940681517124176f, 0.3214515447616577f, 0.9764996767044067f, 0.32112565636634827f, 0.8933855891227722f, 0.2767370343208313f, 0.7793962359428406f, 0.5574954152107239f, +0.7386738061904907f, 0.912372887134552f, 0.6333993673324585f, 0.3688358664512634f, 0.8203150629997253f, 0.854092538356781f, 0.009177792817354202f, 0.3152841031551361f, +0.2488335818052292f, 0.8747442364692688f, 0.714910089969635f, 0.8232973217964172f, 0.23143251240253448f, 0.6716678738594055f, 0.7471494078636169f, 0.3534189760684967f, +0.3720395267009735f, 0.99819016456604f, 0.2641577422618866f, 0.7823049426078796f, 0.6941710114479065f, 0.9725685119628906f, 0.6317628026008606f, 0.505038857460022f, +0.3173685371875763f, 0.5581347346305847f, 0.09284529089927673f, 0.6076827645301819f, 0.07713001221418381f, 0.912852942943573f, 0.732949435710907f, 0.4672936797142029f, +0.7414104342460632f, 0.328233540058136f, 0.22498305141925812f, 0.6011675000190735f, 0.5642027854919434f, 0.49910393357276917f, 0.8264779448509216f, 0.596471905708313f, +0.4311310648918152f, 0.10083417594432831f, 0.978992760181427f, 0.026635808870196342f, 0.05402315780520439f, 0.9450759887695312f, 0.6355590224266052f, 0.40155184268951416f, +0.00033851049374789f, 0.978334367275238f, 0.4881213307380676f, 0.5039921998977661f, 0.5413790345191956f, 0.7944074273109436f, 0.8415842056274414f, 0.8911025524139404f, +0.3395920395851135f, 0.4180156886577606f, 0.1343945413827896f, 0.9498234987258911f, 0.48859870433807373f, 0.7824907898902893f, 0.700507402420044f, 0.968540608882904f, +0.5928065776824951f, 0.6452232599258423f, 0.03038160689175129f, 0.03857066482305527f, 0.8102975487709045f, 0.6971736550331116f, 0.245255246758461f, 0.7876275181770325f, +0.9988546967506409f, 0.22617650032043457f, 0.4876577854156494f, 0.8706817626953125f, 0.6354286074638367f, 0.28252100944519043f, 0.8061498999595642f, 0.7438231110572815f, +0.06196402385830879f, 0.10589462518692017f, 0.5279601216316223f, 0.3784610331058502f, 0.5531695485115051f, 0.3120723068714142f, 0.08999843895435333f, 0.9553102254867554f, +0.6403915286064148f, 0.8628188371658325f, 0.1444208025932312f, 0.5030882954597473f, 0.039085350930690765f, 0.0032730656675994396f, 0.6445192098617554f, 0.17778509855270386f, +0.8379386067390442f, 0.5680922269821167f, 0.5853700637817383f, 0.48934659361839294f, 0.9541139602661133f, 0.4235089421272278f, 0.5085089802742004f, 0.04835781455039978f, +0.24250394105911255f, 0.546130359172821f, 0.8984467387199402f, 0.3282007873058319f, 0.23792903125286102f, 0.46538832783699036f, 0.35427549481391907f, 0.6177929043769836f, +0.3343798816204071f, 0.8691491484642029f, 0.8647617697715759f, 0.7625415325164795f, 0.5489886999130249f, 0.7676653265953064f, 0.31005188822746277f, 0.3156082034111023f, +0.8148763179779053f, 0.5858784317970276f, 0.5227562189102173f, 0.21804559230804443f, 0.19970928132534027f, 0.2727806866168976f, 0.5646699666976929f, 0.18280068039894104f, +0.41883373260498047f, 0.19087883830070496f, 0.5927631258964539f, 0.4589002728462219f, 0.2718782126903534f, 0.4597635567188263f, 0.7971633076667786f, 0.37230974435806274f, +0.3252195119857788f, 0.9399233460426331f, 0.8833945989608765f, 0.15708792209625244f, 0.850659966468811f, 0.6134131550788879f, 0.1489035040140152f, 0.54837566614151f, +0.9323443174362183f, 0.554311990737915f, 0.7757826447486877f, 0.4109954535961151f, 0.3414306938648224f, 0.7823795080184937f, 0.6669013500213623f, 0.22230400145053864f, +0.6564820408821106f, 0.703610897064209f, 0.5639722347259521f, 0.49439290165901184f, 0.07184784859418869f, 0.566703200340271f, 0.6772522926330566f, 0.2730795443058014f, +0.8907034993171692f, 0.48982736468315125f, 0.1865234375f, 0.9734280705451965f, 0.34394344687461853f, 0.3305606544017792f, 0.2597629129886627f, 0.7577617168426514f, +0.02747827209532261f, 0.9012739658355713f, 0.6826156377792358f, 0.1646997630596161f, 0.14056283235549927f, 0.06616438180208206f, 0.9520687460899353f, 0.9691961407661438f, +0.3700578808784485f, 0.47630321979522705f, 0.7962452173233032f, 0.10890582948923111f, 0.21720069646835327f, 0.22533239424228668f, 0.386040061712265f, 0.9259741902351379f, +0.7523926496505737f, 0.2821952998638153f, 0.0475054569542408f, 0.009004194289445877f, 0.39646729826927185f, 0.7004511952400208f, 0.9135146141052246f, 0.9689399600028992f, +0.7493451833724976f, 0.29060789942741394f, 0.42887675762176514f, 0.678846001625061f, 0.9398511052131653f, 0.491129994392395f, 0.024408694356679916f, 0.7321566939353943f, +0.21529947221279144f, 0.5508617758750916f, 0.06894044578075409f, 0.9416759014129639f, 0.2343924641609192f, 0.8713195323944092f, 0.43518105149269104f, 0.587354302406311f, +0.6495798826217651f, 0.387901246547699f, 0.5779147148132324f, 0.15849094092845917f, 0.9439818859100342f, 0.3955082595348358f, 0.5409319400787354f, 0.7785307765007019f, +0.3218832015991211f, 0.3078466057777405f, 0.947486937046051f, 0.02057129144668579f, 0.15042679011821747f, 0.7187546491622925f, 0.8614609241485596f, 0.49868905544281006f, +0.04630520939826965f, 0.22824005782604218f, 0.8166060447692871f, 0.269991010427475f, 0.9486919641494751f, 0.48077887296676636f, 0.6709114909172058f, 0.5954924821853638f, +0.2415921986103058f, 0.8182185292243958f, 0.6171020269393921f, 0.8300920128822327f, 0.5422816276550293f, 0.9161363840103149f, 0.7502590417861938f, 0.4060313403606415f, +0.07354763150215149f, 0.9663260579109192f, 0.9775665998458862f, 0.4956648647785187f, 0.9561920762062073f, 0.6174377202987671f, 0.9854886531829834f, 0.4584362506866455f, +0.29901736974716187f, 0.14230993390083313f, 0.04707539454102516f, 0.8179594278335571f, 0.6094068288803101f, 0.6637405157089233f, 0.8573020696640015f, 0.1761510819196701f, +0.2743138372898102f, 0.536353588104248f, 0.6946559548377991f, 0.7885762453079224f, 0.793677031993866f, 0.5596778988838196f, 0.4868287444114685f, 0.10591059178113937f, +0.9696892499923706f, 0.9816507697105408f, 0.162825807929039f, 0.933678925037384f, 0.5795013904571533f, 0.13322368264198303f, 0.4484764039516449f, 0.4768223166465759f, +0.8545216917991638f, 0.46594348549842834f, 0.37228119373321533f, 0.12229686975479126f, 0.279573917388916f, 0.5526161789894104f, 0.9060502052307129f, 0.36769312620162964f, +0.26348191499710083f, 0.1662985384464264f, 0.9570569396018982f, 0.484423965215683f, 0.23232480883598328f, 0.6688134074211121f, 0.37254953384399414f, 0.029082441702485085f, +0.3582812249660492f, 0.2501557469367981f, 0.9127258062362671f, 0.6620250344276428f, 0.08880660682916641f, 0.7458958625793457f, 0.05528826639056206f, 0.042973875999450684f, +0.8681711554527283f, 0.6615197062492371f, 0.05247792229056358f, 0.5448155999183655f, 0.8273253440856934f, 0.7876215577125549f, 0.7662035822868347f, 0.6515625715255737f, +0.8242449760437012f, 0.08240720629692078f, 0.1703425645828247f, 0.9522204995155334f, 0.48818373680114746f, 0.6384443640708923f, 0.45304709672927856f, 0.573180079460144f, +0.12092335522174835f, 0.5906388759613037f, 0.4990793466567993f, 0.3487766683101654f, 0.38301241397857666f, 0.6710188388824463f, 0.6529412269592285f, 0.4919586181640625f, +0.6614671349525452f, 0.396836519241333f, 0.7746855616569519f, 0.00154579384252429f, 0.23059220612049103f, 0.1436091512441635f, 0.8237431645393372f, 0.941624641418457f, +0.9235729575157166f, 0.7036295533180237f, 0.6159203052520752f, 0.6773555278778076f, 0.5212363600730896f, 0.10476525127887726f, 0.9807055592536926f, 0.9266853928565979f, +0.8557446599006653f, 0.23122000694274902f, 0.2075960487127304f, 0.5676155686378479f, 0.4410879909992218f, 0.10449018329381943f, 0.6542861461639404f, 0.010105437599122524f, +0.007010611239820719f, 0.36349597573280334f, 0.5270922780036926f, 0.5654985904693604f, 0.8876317143440247f, 0.7808433175086975f, 0.3536568284034729f, 0.5028886795043945f, +0.9624536037445068f, 0.39121174812316895f, 0.47245660424232483f, 0.6076129078865051f, 0.44653183221817017f, 0.3103793263435364f, 0.10057812929153442f, 0.29405656456947327f, +0.022621512413024902f, 0.8003830313682556f, 0.06607256084680557f, 0.6833706498146057f, 0.06475652009248734f, 0.7361893653869629f, 0.00905616208910942f, 0.7037296891212463f, +0.7835355401039124f, 0.8510939478874207f, 0.035822153091430664f, 0.032144058495759964f, 0.34822696447372437f, 0.19183014333248138f, 0.21804198622703552f, 0.6904819011688232f, +0.7813060879707336f, 0.39158129692077637f, 0.9151942133903503f, 0.1864602118730545f, 0.6356975436210632f, 0.9761688113212585f, 0.6963937878608704f, 0.08940163999795914f, +0.8818292617797852f, 0.5683690905570984f, 0.7206926345825195f, 0.38285642862319946f, 0.0074328952468931675f, 0.18974874913692474f, 0.9441437125205994f, 0.21819068491458893f, +0.9407623410224915f, 0.35572606325149536f, 0.49842944741249084f, 0.21343332529067993f, 0.6664732098579407f, 0.3653286099433899f, 0.6311365365982056f, 0.05431311950087547f, +0.9750624299049377f, 0.6365641355514526f, 0.10921715945005417f, 0.346069872379303f, 0.2979867458343506f, 0.6930037140846252f, 0.6893668174743652f, 0.3691021800041199f, +0.3308424651622772f, 0.13491575419902802f, 0.4030841290950775f, 0.8834056258201599f, 0.8514201641082764f, 0.5943145751953125f, 0.6127081513404846f, 0.17740662395954132f, +0.5501542091369629f, 0.5249462723731995f, 0.33383411169052124f, 0.7127383351325989f, 0.34000664949417114f, 0.9628931879997253f, 0.22605165839195251f, 0.1815614551305771f, +0.6060766577720642f, 0.5971636772155762f, 0.06926462799310684f, 0.2425689846277237f, 0.235321044921875f, 0.4820883572101593f, 0.5953893661499023f, 0.040558986365795135f, +0.06553857028484344f, 0.27702122926712036f, 0.8989065885543823f, 0.36571380496025085f, 0.29343491792678833f, 0.969441831111908f, 0.8059677481651306f, 0.8747466802597046f, +0.17368768155574799f, 0.4076087176799774f, 0.544511616230011f, 0.9869614243507385f, 0.2661213278770447f, 0.7873492240905762f, 0.6034727692604065f, 0.6741252541542053f, +0.16738225519657135f, 0.03801204264163971f, 0.25885674357414246f, 0.5979043841362f, 0.3941510319709778f, 0.6196851134300232f, 0.5496000647544861f, 0.45036637783050537f, +0.2856711745262146f, 0.452374666929245f, 0.6123458743095398f, 0.061193183064460754f, 0.6730969548225403f, 0.6742287278175354f, 0.5823202133178711f, 0.6187453269958496f, +0.6102795600891113f, 0.3227536976337433f, 0.6646022796630859f, 0.44903936982154846f, 0.2755565345287323f, 0.20817703008651733f, 0.7955211997032166f, 0.9556249380111694f, +0.6165446043014526f, 0.7138726115226746f, 0.7333407998085022f, 0.4993847608566284f, 0.7498002052307129f, 0.3861660659313202f, 0.21729625761508942f, 0.7418412566184998f, +0.6914823651313782f, 0.30943164229393005f, 0.43941226601600647f, 0.6828984618186951f, 0.6571303009986877f, 0.18562579154968262f, 0.504555344581604f, 0.6022331118583679f, +0.779855489730835f, 0.7061077952384949f, 0.7473083734512329f, 0.5589010119438171f, 0.2209440916776657f, 0.6369757652282715f, 0.10795988887548447f, 0.766606867313385f, +0.9800021648406982f, 0.9000152349472046f, 0.5290818214416504f, 0.789116621017456f, 0.11936856806278229f, 0.8743138313293457f, 0.756686270236969f, 0.9798862338066101f, +0.9506279230117798f, 0.5816612839698792f, 0.870024561882019f, 0.3538784980773926f, 0.36674025654792786f, 0.8734074234962463f, 0.7246421575546265f, 0.9268219470977783f, +0.27072644233703613f, 0.5579131841659546f, 0.0763065442442894f, 0.4460434019565582f, 0.570756196975708f, 0.3542068600654602f, 0.28944554924964905f, 0.892817497253418f, +0.7545653581619263f, 0.6910479664802551f, 0.6448726654052734f, 0.6186347007751465f, 0.8423311114311218f, 0.30785903334617615f, 0.1656344085931778f, 0.6167271137237549f, +0.8375853896141052f, 0.7874917387962341f, 0.6298646926879883f, 0.07798536866903305f, 0.7208012342453003f, 0.340768963098526f, 0.895153284072876f, 0.24580179154872894f, +0.7079744338989258f, 0.10539406538009644f, 0.11039374768733978f, 0.8569270968437195f, 0.6247096657752991f, 0.09419187158346176f, 0.3905353248119354f, 0.4871200919151306f, +0.8413856625556946f, 0.23790684342384338f, 0.3401293158531189f, 0.469855397939682f, 0.18193846940994263f, 0.8280137181282043f, 0.19507792592048645f, 0.11369103938341141f, +0.766128420829773f, 0.09861426800489426f, 0.9204860925674438f, 0.06777800619602203f, 0.8841347098350525f, 0.37915629148483276f, 0.5345479846000671f, 0.075715072453022f, +0.5725312232971191f, 0.2375519573688507f, 0.11643155664205551f, 0.015230044722557068f, 0.18519361317157745f, 0.1647600531578064f, 0.4142778515815735f, 0.9477543830871582f, +0.17193350195884705f, 0.7567763924598694f, 0.8149558901786804f, 0.10189642757177353f, 0.9256594181060791f, 0.5578469038009644f, 0.8554946184158325f, 0.9599983096122742f, +0.9384986162185669f, 0.7992315292358398f, 0.48827746510505676f, 0.5404868125915527f, 0.09512587636709213f, 0.23075386881828308f, 0.4279228746891022f, 0.7507192492485046f, +0.06215781718492508f, 0.868758499622345f, 0.28486141562461853f, 0.661521852016449f, 0.28890329599380493f, 0.07870263606309891f, 0.4804648756980896f, 0.17188099026679993f, +0.06413721293210983f, 0.29591524600982666f, 0.8975363969802856f, 0.17307612299919128f, 0.6652193069458008f, 0.9029558897018433f, 0.7124038934707642f, 0.3733043670654297f, +0.3460340201854706f, 0.3275063633918762f, 0.7913082838058472f, 0.5769861936569214f, 0.5336520671844482f, 0.0874340832233429f, 0.879476010799408f, 0.3618776500225067f, +0.7107082009315491f, 0.26420632004737854f, 0.6305332779884338f, 0.5329316854476929f, 0.39990779757499695f, 0.7315101623535156f, 0.7059481143951416f, 0.217033252120018f, +0.38423827290534973f, 0.4539608359336853f, 0.06483414024114609f, 0.8625178933143616f, 0.9889082312583923f, 0.3268572688102722f, 0.5576281547546387f, 0.8545910120010376f, +0.4809595048427582f, 0.26016154885292053f, 0.42823418974876404f, 0.8921815156936646f, 0.5526517033576965f, 0.2937602996826172f, 0.659456729888916f, 0.2619764506816864f, +0.7032216787338257f, 0.4791017770767212f, 0.31435537338256836f, 0.9985946416854858f, 0.017426013946533203f, 0.07981108129024506f, 0.9777697324752808f, 0.7297348976135254f, +0.508898913860321f, 0.8023326396942139f, 0.5083048939704895f, 0.5338966846466064f, 0.21607047319412231f, 0.5646133422851562f, 0.5836161375045776f, 0.47522300481796265f, +0.040089212357997894f, 0.1836414486169815f, 0.4079347252845764f, 0.771300733089447f, 0.9248839616775513f, 0.5412924289703369f, 0.46933305263519287f, 0.46646490693092346f, +0.6630681157112122f, 0.6089784502983093f, 0.6900715231895447f, 0.5291547179222107f, 0.27619707584381104f, 0.9391583800315857f, 0.5003044009208679f, 0.9093749523162842f, +0.7839392423629761f, 0.917289137840271f, 0.4602172076702118f, 0.3166711926460266f, 0.4673771262168884f, 0.17448720335960388f, 0.6314738988876343f, 0.3531448543071747f, +0.4010876417160034f, 0.46035388112068176f, 0.29989710450172424f, 0.9247516393661499f, 0.7489041090011597f, 0.06674816459417343f, 0.6987163424491882f, 0.029443107545375824f, +0.05625617504119873f, 0.04517735168337822f, 0.43978407979011536f, 0.1493803709745407f, 0.5489813685417175f, 0.8970956206321716f, 0.1679859459400177f, 0.2579326927661896f, +0.7194654941558838f, 0.5774125456809998f, 0.1927989274263382f, 0.8863256573677063f, 0.4080135226249695f, 0.20909075438976288f, 0.9001119136810303f, 0.5732938051223755f, +0.7699151039123535f, 0.561984121799469f, 0.6905825138092041f, 0.23926177620887756f, 0.7202742099761963f, 0.07996369898319244f, 0.30797964334487915f, 0.19435915350914001f, +0.12107875943183899f, 0.517173707485199f, 0.25065723061561584f, 0.25831547379493713f, 0.06249811127781868f, 0.6817488074302673f, 0.2129332572221756f, 0.7287029027938843f, +0.3885374963283539f, 0.7685390710830688f, 0.11172769218683243f, 0.767819881439209f, 0.9099597930908203f, 0.926260232925415f, 0.28791749477386475f, 0.6788247227668762f, +0.7194720506668091f, 0.6961343884468079f, 0.5274182558059692f, 0.8803186416625977f, 0.7613384127616882f, 0.8306698799133301f, 0.22107891738414764f, 0.7365537881851196f, +0.32261449098587036f, 0.10110078006982803f, 0.3060525953769684f, 0.20876552164554596f, 0.0526941642165184f, 0.7470219731330872f, 0.9423542022705078f, 0.7444265484809875f, +0.5155850052833557f, 0.5026993751525879f, 0.11813772469758987f, 0.8662256002426147f, 0.7091996669769287f, 0.4450969696044922f, 0.5131310820579529f, 0.4705874025821686f, +0.5604768991470337f, 0.9771803021430969f, 0.6208159327507019f, 0.22964493930339813f, 0.7568234205245972f, 0.10694491863250732f, 0.13391193747520447f, 0.09025469422340393f, +0.4162980020046234f, 0.26428937911987305f, 0.6308416724205017f, 0.8196126818656921f, 0.8970203399658203f, 0.38211193680763245f, 0.013533503748476505f, 0.7788004875183105f, +0.5363409519195557f, 0.3285026252269745f, 0.7519382238388062f, 0.05765222758054733f, 0.427580863237381f, 0.5536032915115356f, 0.39723557233810425f, 0.10099383443593979f, +0.6551689505577087f, 0.9894604086875916f, 0.2515029311180115f, 0.6420024633407593f, 0.37080761790275574f, 0.02103389799594879f, 0.7110357284545898f, 0.9261355996131897f, +0.045269813388586044f, 0.9386844038963318f, 0.15741828083992004f, 0.00945335254073143f, 0.7189447283744812f, 0.20602352917194366f, 0.5478336215019226f, 0.9020267724990845f, +0.22458501160144806f, 0.6216718554496765f, 0.2601163983345032f, 0.9431588649749756f, 0.1695498675107956f, 0.3821162283420563f, 0.215028777718544f, 0.5109632015228271f, +0.8794366121292114f, 0.8072901964187622f, 0.11234168708324432f, 0.8892294764518738f, 0.40974992513656616f, 0.07301272451877594f, 0.8304972052574158f, 0.46331945061683655f, +0.9707668423652649f, 0.5115623474121094f, 0.6576913595199585f, 0.9658113718032837f, 0.16336245834827423f, 0.6608157753944397f, 0.16798637807369232f, 0.18825189769268036f, +0.8608551025390625f, 0.2104770839214325f, 0.5349326729774475f, 0.41853541135787964f, 0.8463390469551086f, 0.5877770185470581f, 0.648734450340271f, 0.842232346534729f, +0.1161390170454979f, 0.01397657860070467f, 0.18559260666370392f, 0.764542281627655f, 0.853341817855835f, 0.42070329189300537f, 0.041403234004974365f, 0.537939190864563f, +0.9320420026779175f, 0.1559373289346695f, 0.9074157476425171f, 0.05746212974190712f, 0.48751920461654663f, 0.3716600835323334f, 0.8373782634735107f, 0.4258347153663635f, +0.8977605700492859f, 0.8744047284126282f, 0.09765394777059555f, 0.09796161949634552f, 0.9691612720489502f, 0.05231155455112457f, 0.24743658304214478f, 0.7704868316650391f, +0.4950806796550751f, 0.12889060378074646f, 0.798984169960022f, 0.7729818820953369f, 0.19802899658679962f, 0.7141467332839966f, 0.7776866555213928f, 0.9788478016853333f, +0.16571640968322754f, 0.7309814691543579f, 0.378447949886322f, 0.3444053828716278f, 0.3786919116973877f, 0.08381740748882294f, 0.25455912947654724f, 0.0015865244204178452f, +0.1785447895526886f, 0.2645795941352844f, 0.11763889342546463f, 0.18338803946971893f, 0.971906304359436f, 0.8329254984855652f, 0.568318247795105f, 0.8884168863296509f, +0.4409007132053375f, 0.6949998736381531f, 0.7808368802070618f, 0.7424048185348511f, 0.13701124489307404f, 0.9294226765632629f, 0.19593165814876556f, 0.513351321220398f, +0.3925747871398926f, 0.9307478070259094f, 0.8775085806846619f, 0.41440796852111816f, 0.25597667694091797f, 0.01069521252065897f, 0.7036816477775574f, 0.20208564400672913f, +0.676354169845581f, 0.7748802900314331f, 0.842191755771637f, 0.5421608090400696f, 0.15927129983901978f, 0.744728684425354f, 0.7881850600242615f, 0.5889186859130859f, +0.13502788543701172f, 0.9133435487747192f, 0.30142492055892944f, 0.6144492626190186f, 0.18713510036468506f, 0.8589633107185364f, 0.4989674687385559f, 0.12112889438867569f, +0.2678641080856323f, 0.7022020816802979f, 0.6628212332725525f, 0.43742531538009644f, 0.34369349479675293f, 0.5358575582504272f, 0.9740193486213684f, 0.3255751132965088f, +0.27050697803497314f, 0.7701396346092224f, 0.0879712924361229f, 0.31761500239372253f, 0.2675335705280304f, 0.31528744101524353f, 0.4502004086971283f, 0.5082440972328186f, +0.501560628414154f, 0.9354714751243591f, 0.422674298286438f, 0.3394322395324707f, 0.018658608198165894f, 0.8901993632316589f, 0.8819093108177185f, 0.4628710448741913f, +0.21591374278068542f, 0.946265697479248f, 0.9388832449913025f, 0.5294329524040222f, 0.17625394463539124f, 0.9847299456596375f, 0.5872012972831726f, 0.8303890228271484f, +0.8107028007507324f, 0.389682799577713f, 0.9946613907814026f, 0.8741269111633301f, 0.8142005801200867f, 0.3331783413887024f, 0.0848413035273552f, 0.21983888745307922f, +0.9595906734466553f, 0.4478398263454437f, 0.9050512909889221f, 0.35715410113334656f, 0.8422778248786926f, 0.28716304898262024f, 0.1154603362083435f, 0.08691664040088654f, +0.79843670129776f, 0.7402071356773376f, 0.856908917427063f, 0.3654607832431793f, 0.0542064905166626f, 0.8810041546821594f, 0.06481281667947769f, 0.9153907299041748f, +0.0075549413450062275f, 0.6126909852027893f, 0.733334481716156f, 0.39906105399131775f, 0.2156164050102234f, 0.8317331671714783f, 0.27297985553741455f, 0.40190139412879944f, +0.9787377715110779f, 0.17839978635311127f, 0.09260707348585129f, 0.5143088698387146f, 0.4566955864429474f, 0.9782191514968872f, 0.3459201455116272f, 0.04165533930063248f, +0.6262428164482117f, 0.5360924601554871f, 0.7121527791023254f, 0.3735312819480896f, 0.7111036777496338f, 0.38903185725212097f, 0.42755839228630066f, 0.04859112575650215f, +0.3986940383911133f, 0.0985424593091011f, 0.6071227788925171f, 0.017021531239151955f, 0.23359204828739166f, 0.3987477123737335f, 0.3794216215610504f, 0.6212815642356873f, +0.1067725270986557f, 0.6998281478881836f, 0.8525787591934204f, 0.8194635510444641f, 0.5156749486923218f, 0.6309813261032104f, 0.14690053462982178f, 0.23481492698192596f, +0.6692904829978943f, 0.3331022262573242f, 0.9632400870323181f, 0.942275881767273f, 0.45787110924720764f, 0.37034982442855835f, 0.5990343689918518f, 0.3653930723667145f, +0.550219714641571f, 0.3775915503501892f, 0.649893581867218f, 0.45074567198753357f, 0.4521602988243103f, 0.33019161224365234f, 0.9200924634933472f, 0.6336539387702942f, +0.9913893938064575f, 0.6109431385993958f, 0.4626769423484802f, 0.3666764795780182f, 0.5438408255577087f, 0.21289697289466858f, 0.25773245096206665f, 0.23968647420406342f, +0.9278151988983154f, 0.6977630257606506f, 0.25890570878982544f, 0.9078007340431213f, 0.6964320540428162f, 0.011091473512351513f, 0.6072418093681335f, 0.02237027697265148f, +0.08842596411705017f, 0.2834007740020752f, 0.0992390364408493f, 0.06918155401945114f, 0.7911590337753296f, 0.3930562436580658f, 0.8224740028381348f, 0.6880872845649719f, +0.14500020444393158f, 0.9870249629020691f, 0.18044884502887726f, 0.4208804666996002f, 0.5684735178947449f, 0.31157881021499634f, 0.6373810768127441f, 0.44246986508369446f, +0.3219981789588928f, 0.312619149684906f, 0.8722897171974182f, 0.8076629638671875f, 0.7220999598503113f, 0.8560093641281128f, 0.2786513566970825f, 0.6014882326126099f, +0.13854065537452698f, 0.8760932683944702f, 0.012612669728696346f, 0.2580602169036865f, 0.848020613193512f, 0.16678263247013092f, 0.39494258165359497f, 0.02678084746003151f, +0.054726775735616684f, 0.5559869408607483f, 0.7213585376739502f, 0.7464368939399719f, 0.5622663497924805f, 0.10530909895896912f, 0.6843199729919434f, 0.6259945034980774f, +0.017614612355828285f, 0.8094946146011353f, 0.44718149304389954f, 0.1768752932548523f, 0.0853005200624466f, 0.29668721556663513f, 0.6685695648193359f, 0.839043140411377f, +0.3643515110015869f, 0.05469350889325142f, 0.3668299913406372f, 0.08471830934286118f, 0.01091979444026947f, 0.7689253687858582f, 0.3477800190448761f, 0.39740926027297974f, +0.4193771779537201f, 0.9908077716827393f, 0.7590086460113525f, 0.927154004573822f, 0.8556278347969055f, 0.031027507036924362f, 0.7517848014831543f, 0.8636539578437805f, +0.7878080010414124f, 0.3216811418533325f, 0.7154046893119812f, 0.09374283254146576f, 0.15191490948200226f, 0.7119295001029968f, 0.5632749795913696f, 0.7724762558937073f, +0.10086240619421005f, 0.27194109559059143f, 0.7986751794815063f, 0.09856276214122772f, 0.8566686511039734f, 0.43502041697502136f, 0.014369608834385872f, 0.6076424717903137f, +0.6878857016563416f, 0.07951764017343521f, 0.5980269908905029f, 0.6097196936607361f, 0.38860321044921875f, 0.6731060743331909f, 0.2613101005554199f, 0.06017011031508446f, +0.7392458915710449f, 0.686650812625885f, 0.2459191232919693f, 0.4951300323009491f, 0.5930199027061462f, 0.029237542301416397f, 0.4221394658088684f, 0.018714213743805885f, +0.517309308052063f, 0.3316619098186493f, 0.29545480012893677f, 0.7027825117111206f, 0.18456736207008362f, 0.9670054316520691f, 0.7567027807235718f, 0.3019777834415436f, +0.09695199877023697f, 0.1338140368461609f, 0.791449785232544f, 0.9699738621711731f, 0.09114599227905273f, 0.7624095678329468f, 0.5361694097518921f, 0.09182247519493103f, +0.28908616304397583f, 0.6787664294242859f, 0.03368707746267319f, 0.6969355940818787f, 0.5662027597427368f, 0.617324709892273f, 0.6210792660713196f, 0.6020500063896179f, +0.6978409290313721f, 0.36065036058425903f, 0.5212374925613403f, 0.9595285654067993f, 0.21460628509521484f, 0.48352184891700745f, 0.7621456384658813f, 0.5115317702293396f, +0.1606842279434204f, 0.3049049377441406f, 0.6834686994552612f, 0.19006694853305817f, 0.5350556373596191f, 0.5409301519393921f, 0.21875318884849548f, 0.49546560645103455f, +0.41126808524131775f, 0.8098549246788025f, 0.6383562684059143f, 0.02018802799284458f, 0.3857554793357849f, 0.2878815531730652f, 0.8775863647460938f, 0.6150847673416138f, +0.12718968093395233f, 0.1906416416168213f, 0.04951340705156326f, 0.39341747760772705f, 0.6462241411209106f, 0.5745751261711121f, 0.3416377902030945f, 0.5755965113639832f, +0.19807134568691254f, 0.7538582682609558f, 0.8889830112457275f, 0.8636934161186218f, 0.06778939068317413f, 0.08239584416151047f, 0.29686102271080017f, 0.8547099828720093f, +0.42768344283103943f, 0.2528081238269806f, 0.6681565642356873f, 0.7418393492698669f, 0.08164319396018982f, 0.7479462623596191f, 0.8115252256393433f, 0.7436510920524597f, +0.4447903037071228f, 0.28649547696113586f, 0.7202584743499756f, 0.018462693318724632f, 0.5547473430633545f, 0.8628146052360535f, 0.486209899187088f, 0.5466890931129456f, +0.5764071941375732f, 0.13320736587047577f, 0.4313037693500519f, 0.7920327186584473f, 0.7107272744178772f, 0.4345558285713196f, 0.8162958025932312f, 0.2573563754558563f, +0.9332738518714905f, 0.3965754210948944f, 0.06208106502890587f, 0.010586987249553204f, 0.9317112565040588f, 0.6569917798042297f, 0.4350057542324066f, 0.7270885705947876f, +0.23026277124881744f, 0.09640809148550034f, 0.7922936677932739f, 0.5791829824447632f, 0.6936526894569397f, 0.5299581289291382f, 0.5762085318565369f, 0.3187909424304962f, +0.5484635233879089f, 0.22135671973228455f, 0.32183897495269775f, 0.31184348464012146f, 0.0661095529794693f, 0.9902249574661255f, 0.34617185592651367f, 0.9226720929145813f, +0.21953287720680237f, 0.05037868395447731f, 0.8333597779273987f, 0.41406869888305664f, 0.7545977234840393f, 0.4709206819534302f, 0.16897346079349518f, 0.34772083163261414f, +0.5361233353614807f, 0.3737221658229828f, 0.9814756512641907f, 0.639661431312561f, 0.7116144895553589f, 0.4122391641139984f, 0.6798588037490845f, 0.051106102764606476f, +0.3979780673980713f, 0.44877660274505615f, 0.8885287642478943f, 0.11347301304340363f, 0.312938928604126f, 0.8172827363014221f, 0.5579470992088318f, 0.7907732129096985f, +0.3252505660057068f, 0.12208756804466248f, 0.8500216007232666f, 0.01585155725479126f, 0.20288445055484772f, 0.6657299399375916f, 0.12867958843708038f, 0.40491676330566406f, +0.38311058282852173f, 0.6950218081474304f, 0.6570680141448975f, 0.37365394830703735f, 0.6713294386863708f, 0.16182471811771393f, 0.8668895959854126f, 0.6813985705375671f, +0.030223235487937927f, 0.9227741360664368f, 0.9121068120002747f, 0.5595481395721436f, 0.5730186104774475f, 0.289378821849823f, 0.5740906000137329f, 0.2607540190219879f, +0.26725098490715027f, 0.20682285726070404f, 0.19818167388439178f, 0.5718388557434082f, 0.5648156404495239f, 0.28996506333351135f, 0.0014152841176837683f, 0.9720141291618347f, +0.6614707708358765f, 0.8660023808479309f, 0.4584815204143524f, 0.7686945796012878f, 0.578277587890625f, 0.6064056158065796f, 0.5514493584632874f, 0.7091630101203918f, +0.3194684088230133f, 0.15191440284252167f, 0.29456576704978943f, 0.22623121738433838f, 0.3501364290714264f, 0.020950570702552795f, 0.32959628105163574f, 0.4416596293449402f, +0.06803231686353683f, 0.8410183191299438f, 0.008292577229440212f, 0.15429890155792236f, 0.9850075244903564f, 0.7724277377128601f, 0.5576082468032837f, 0.9965870976448059f, +0.21293146908283234f, 0.2323429137468338f, 0.9496766328811646f, 0.3736704885959625f, 0.9818214774131775f, 0.6997653245925903f, 0.9746350049972534f, 0.19928571581840515f, +0.44806668162345886f, 0.17053812742233276f, 0.5854223370552063f, 0.7636781334877014f, 0.05979287996888161f, 0.024478673934936523f, 0.7320849895477295f, 0.43981385231018066f, +0.3585832118988037f, 0.9650896191596985f, 0.41818246245384216f, 0.8912603855133057f, 0.17540153861045837f, 0.7802974581718445f, 0.02628430910408497f, 0.9496892094612122f, +0.1189633458852768f, 0.12970639765262604f, 0.28208133578300476f, 0.016746757552027702f, 0.7859082221984863f, 0.9523947834968567f, 0.442699134349823f, 0.8763079047203064f, +0.3276914954185486f, 0.5691182613372803f, 0.03306714445352554f, 0.29971715807914734f, 0.4180509150028229f, 0.6940785050392151f, 0.15208324790000916f, 0.2797686755657196f, +0.2098878026008606f, 0.5007427930831909f, 0.3244757354259491f, 0.666161835193634f, 0.46747127175331116f, 0.2596801817417145f, 0.6885274648666382f, 0.4306353032588959f, +0.9557551145553589f, 0.04197562113404274f, 0.13027340173721313f, 0.48479554057121277f, 0.8990371227264404f, 0.25216126441955566f, 0.006152040790766478f, 0.6132809519767761f, +0.18006551265716553f, 0.675344705581665f, 0.6942197680473328f, 0.731023371219635f, 0.3882514536380768f, 0.34748372435569763f, 0.5562260150909424f, 0.13597571849822998f, +0.4837874472141266f, 0.21821293234825134f, 0.6761711239814758f, 0.5647134780883789f, 0.6646028757095337f, 0.8279608488082886f, 0.3047114312648773f, 0.598180890083313f, +0.16715483367443085f, 0.40504366159439087f, 0.7446907758712769f, 0.978287935256958f, 0.3305358290672302f, 0.30450430512428284f, 0.7735396027565002f, 0.20231600105762482f, +0.02924126759171486f, 0.07142455875873566f, 0.534968376159668f, 0.9442000985145569f, 0.8781101107597351f, 0.19963917136192322f, 0.029589921236038208f, 0.8294009566307068f, +0.3732461929321289f, 0.49663373827934265f, 0.7674719095230103f, 0.073756143450737f, 0.4335505962371826f, 0.7079633474349976f, 0.8259373307228088f, 0.019488710910081863f, +0.7935985326766968f, 0.08449067920446396f, 0.31851476430892944f, 0.8361495733261108f, 0.19041427969932556f, 0.3157324194908142f, 0.3367769122123718f, 0.23008094727993011f, +0.8915138840675354f, 0.3404487371444702f, 0.6281368732452393f, 0.9271761178970337f, 0.18325093388557434f, 0.07227087765932083f, 0.7130718231201172f, 0.4496075510978699f, +0.6078712344169617f, 0.23587636649608612f, 0.03774907812476158f, 0.5155775547027588f, 0.5708128213882446f, 0.7532306909561157f, 0.6647844910621643f, 0.9288338422775269f, +0.8040325045585632f, 0.03320466727018356f, 0.09162396937608719f, 0.6111520528793335f, 0.22394387423992157f, 0.03899578005075455f, 0.09350976347923279f, 0.4631883502006531f, +0.21415476500988007f, 0.9630467295646667f, 0.2598896324634552f, 0.9645819067955017f, 0.4068434238433838f, 0.02216530218720436f, 0.40197113156318665f, 0.33820128440856934f, +0.6482378840446472f, 0.0849258229136467f, 0.16617922484874725f, 0.5086949467658997f, 0.5366050004959106f, 0.11857938766479492f, 0.38030970096588135f, 0.8625600934028625f, +0.9168334007263184f, 0.9110574126243591f, 0.25697973370552063f, 0.05413932353258133f, 0.49402299523353577f, 0.09263437986373901f, 0.4209686517715454f, 0.4783099889755249f, +0.9728642106056213f, 0.8905662298202515f, 0.7498005628585815f, 0.5604617595672607f, 0.2798365354537964f, 0.20981095731258392f, 0.9163956642150879f, 0.5814818739891052f, +0.27059274911880493f, 0.8492231965065002f, 0.6648664474487305f, 0.9846417903900146f, 0.5565967559814453f, 0.97004634141922f, 0.26653021574020386f, 0.648116409778595f, +0.4758726954460144f, 0.9165980815887451f, 0.5001253485679626f, 0.4451143145561218f, 0.9689169526100159f, 0.6304513216018677f, 0.10524018853902817f, 0.7981559634208679f, +0.677851140499115f, 0.2004341334104538f, 0.6080682873725891f, 0.9788087010383606f, 0.18016372621059418f, 0.31943750381469727f, 0.439528226852417f, 0.6045070886611938f, +0.9834738969802856f, 0.17246825993061066f, 0.3475964367389679f, 0.577628493309021f, 0.7183694243431091f, 0.21382173895835876f, 0.48043185472488403f, 0.8205974698066711f, +0.20089173316955566f, 0.7753589153289795f, 0.5071290731430054f, 0.30927425622940063f, 0.4169940948486328f, 0.10481434315443039f, 0.6317101120948792f, 0.3360787630081177f, +0.19152571260929108f, 0.7430706024169922f, 0.21751464903354645f, 0.10585368424654007f, 0.740841269493103f, 0.8430477976799011f, 0.1250932663679123f, 0.05612439289689064f, +0.9577332735061646f, 0.7167832851409912f, 0.9957576394081116f, 0.006588407326489687f, 0.1825491040945053f, 0.35038211941719055f, 0.6901392340660095f, 0.915641188621521f, +0.6591182351112366f, 0.12975181639194489f, 0.2950376570224762f, 0.6346355676651001f, 0.9881988763809204f, 0.8729308247566223f, 0.12780539691448212f, 0.7554487586021423f, +0.05546732619404793f, 0.08252917230129242f, 0.8384830355644226f, 0.8371989727020264f, 0.9624392986297607f, 0.5308302640914917f, 0.4296092987060547f, 0.4176340103149414f, +0.3338634669780731f, 0.8070487380027771f, 0.6527805924415588f, 0.8911917805671692f, 0.4954097270965576f, 0.8181582093238831f, 0.3589875102043152f, 0.44754505157470703f, +0.4344668984413147f, 0.3537355959415436f, 0.5213349461555481f, 0.2941638231277466f, 0.9286671280860901f, 0.875968337059021f, 0.15883494913578033f, 0.4603377878665924f, +0.5562682151794434f, 0.9099859595298767f, 0.8975509405136108f, 0.12289776653051376f, 0.4054478108882904f, 0.009570809081196785f, 0.295061320066452f, 0.5860901474952698f, +0.07941581308841705f, 0.01513203326612711f, 0.42031437158584595f, 0.7325050830841064f, 0.5451654195785522f, 0.4586661756038666f, 0.4901959300041199f, 0.673590898513794f, +0.9588332772254944f, 0.5052648782730103f, 0.993757426738739f, 0.35226213932037354f, 0.4238780736923218f, 0.8801948428153992f, 0.7738646864891052f, 0.28653383255004883f, +0.8456802368164062f, 0.039699628949165344f, 0.4898070991039276f, 0.06425472348928452f, 0.03905373439192772f, 0.673221230506897f, 0.6513038873672485f, 0.5983673930168152f, +0.845553457736969f, 0.8013990521430969f, 0.7935695648193359f, 0.02240576408803463f, 0.32553666830062866f, 0.6741030812263489f, 0.6602820754051208f, 0.7082642912864685f, +0.22362664341926575f, 0.048080191016197205f, 0.896481990814209f, 0.11814334243535995f, 0.00898988638073206f, 0.0904543325304985f, 0.0033019117545336485f, 0.4633066654205322f, +0.40621981024742126f, 0.37200039625167847f, 0.8369619250297546f, 0.1787838190793991f, 0.4522396922111511f, 0.9300085306167603f, 0.8154387474060059f, 0.8625229001045227f, +0.42359039187431335f, 0.30059680342674255f, 0.9687580466270447f, 0.9839513301849365f, 0.4590100049972534f, 0.7234275341033936f, 0.5357480645179749f, 0.9705718159675598f, +0.8367967009544373f, 0.5362453460693359f, 0.4267219305038452f, 0.3306552767753601f, 0.9202241897583008f, 0.05806088447570801f, 0.3484857380390167f, 0.5453370809555054f, +0.22983931005001068f, 0.7622780799865723f, 0.22358164191246033f, 0.6340879201889038f, 0.6007121205329895f, 0.6460464596748352f, 0.008283022791147232f, 0.3836888074874878f, +0.049741972237825394f, 0.47991055250167847f, 0.28369441628456116f, 0.27492639422416687f, 0.8830851316452026f, 0.6539984941482544f, 0.7537190914154053f, 0.08028655499219894f, +0.8594200015068054f, 0.6103743314743042f, 0.5321940183639526f, 0.5371087193489075f, 0.0221384447067976f, 0.18081118166446686f, 0.7761903405189514f, 0.7477813959121704f, +0.9953823685646057f, 0.2715240716934204f, 0.46523743867874146f, 0.03723141923546791f, 0.7811445593833923f, 0.7763808369636536f, 0.860396146774292f, 0.17018917202949524f, +0.46739333868026733f, 0.038744498044252396f, 0.7799227833747864f, 0.864016056060791f, 0.4846195578575134f, 0.908868134021759f, 0.26628047227859497f, 0.5916927456855774f, +0.8178882002830505f, 0.9530433416366577f, 0.8697757720947266f, 0.23527634143829346f, 0.695941150188446f, 0.5908064246177673f, 0.5125755071640015f, 0.25303006172180176f, +0.6960205435752869f, 0.7529997229576111f, 0.2872960865497589f, 0.5782718658447266f, 0.3536209464073181f, 0.7259600162506104f, 0.7692898511886597f, 0.5413761138916016f, +0.5239277482032776f, 0.9061086773872375f, 0.6926467418670654f, 0.717857301235199f, 0.3584822416305542f, 0.032747380435466766f, 0.4520505368709564f, 0.011937541887164116f, +0.591895580291748f, 0.9633195400238037f, 0.2626534700393677f, 0.32145050168037415f, 0.3320077359676361f, 0.20548208057880402f, 0.4550568163394928f, 0.670590341091156f, +0.5602396726608276f, 0.6606017351150513f, 0.7885128259658813f, 0.3574523627758026f, 0.439168244600296f, 0.39672431349754333f, 0.17666760087013245f, 0.40059608221054077f, +0.7326012253761292f, 0.7814857363700867f, 0.870071530342102f, 0.9225850701332092f, 0.05975111946463585f, 0.02467554807662964f, 0.8509154319763184f, 0.3095104396343231f, +0.03065362758934498f, 0.9268482327461243f, 0.06257464736700058f, 0.6600292325019836f, 0.575607180595398f, 0.13222557306289673f, 0.8482028245925903f, 0.7091987133026123f, +0.15397638082504272f, 0.9300622344017029f, 0.02445727214217186f, 0.49895983934402466f, 0.20531287789344788f, 0.05337683483958244f, 0.2458208203315735f, 0.6020381450653076f, +0.18594615161418915f, 0.0462319552898407f, 0.47013941407203674f, 0.45315077900886536f, 0.2825959324836731f, 0.3574177622795105f, 0.45457687973976135f, 0.005002864170819521f, +0.1028461828827858f, 0.35699954628944397f, 0.35694780945777893f, 0.5093987584114075f, 0.5200936198234558f, 0.3804170787334442f, 0.9793781042098999f, 0.07634273916482925f, +0.09038320183753967f, 0.8240712285041809f, 0.9971902966499329f, 0.22709135711193085f, 0.7117510437965393f, 0.2979166805744171f, 0.4840947389602661f, 0.205315500497818f, +0.04394254833459854f, 0.3695394992828369f, 0.6529965996742249f, 0.233026921749115f, 0.9353073239326477f, 0.8053308725357056f, 0.25401780009269714f, 0.9427227973937988f, +0.5850463509559631f, 0.2019040733575821f, 0.7712884545326233f, 0.4657934606075287f, 0.7630996704101562f, 0.6308419108390808f, 0.5758159160614014f, 0.4829947054386139f, +0.9330980181694031f, 0.344066321849823f, 0.3955029845237732f, 0.007191067095845938f, 0.9787857532501221f, 0.019773269072175026f, 0.18028706312179565f, 0.8103294968605042f, +0.06819196790456772f, 0.09417317062616348f, 0.20017096400260925f, 0.4757063686847687f, 0.48213866353034973f, 0.8828403353691101f, 0.5890823602676392f, 0.3531567454338074f, +0.3266785144805908f, 0.5094590187072754f, 0.7856016755104065f, 0.7093802690505981f, 0.5805476903915405f, 0.7799642086029053f, 0.23321078717708588f, 0.5988847613334656f, +0.08350169658660889f, 0.8286000490188599f, 0.8331344723701477f, 0.20944716036319733f, 0.9725663661956787f, 0.6837334036827087f, 0.23563842475414276f, 0.1114652007818222f, +0.04127930849790573f, 0.861104428768158f, 0.5933923721313477f, 0.1255430281162262f, 0.8681300282478333f, 0.23394490778446198f, 0.06345301866531372f, 0.32500746846199036f, +0.6924082636833191f, 0.715977132320404f, 0.47562375664711f, 0.1581645905971527f, 0.6245629787445068f, 0.6350677013397217f, 0.47763270139694214f, 0.5218604207038879f, +0.44475314021110535f, 0.9883589148521423f, 0.17783720791339874f, 0.9691201448440552f, 0.7371574640274048f, 0.2799459397792816f, 0.9283799529075623f, 0.36883851885795593f, +0.5433052778244019f, 0.7339169383049011f, 0.7597161531448364f, 0.22232244908809662f, 0.13891564309597015f, 0.7162091135978699f, 0.10203736275434494f, 0.7863969802856445f, +0.09793758392333984f, 0.08272158354520798f, 0.06929411739110947f, 0.2876312732696533f, 0.2515351474285126f, 0.9781405329704285f, 0.32935619354248047f, 0.1514403522014618f, +0.7805795073509216f, 0.4396588206291199f, 0.5341600179672241f, 0.08043994009494781f, 0.9858793020248413f, 0.2872086465358734f, 0.5831618905067444f, 0.4913329482078552f, +0.7883275151252747f, 0.7289077639579773f, 0.37710174918174744f, 0.6398155689239502f, 0.5576426982879639f, 0.7587305307388306f, 0.04505342245101929f, 0.36055228114128113f, +0.744148313999176f, 0.2772783935070038f, 0.7646996974945068f, 0.947160542011261f, 0.1204896867275238f, 0.323166161775589f, 0.9931287169456482f, 0.6044021248817444f, +0.9083681106567383f, 0.4053356945514679f, 0.8335109353065491f, 0.5411781072616577f, 0.20381174981594086f, 0.4312644898891449f, 0.6042803525924683f, 0.1900952309370041f, +0.7421908974647522f, 0.07866600155830383f, 0.9772084951400757f, 0.10729260742664337f, 0.3923325538635254f, 0.30558812618255615f, 0.6701117157936096f, 0.10259649157524109f, +0.15463219583034515f, 0.9787874817848206f, 0.3725113868713379f, 0.4867554008960724f, 0.22860151529312134f, 0.6741013526916504f, 0.07522255182266235f, 0.29131880402565f, +0.29138243198394775f, 0.981066882610321f, 0.7853763699531555f, 0.363998144865036f, 0.3113759756088257f, 0.17099277675151825f, 0.630984365940094f, 0.25850027799606323f, +0.6338139772415161f, 0.33599594235420227f, 0.7729310393333435f, 0.14880292117595673f, 0.053806159645318985f, 0.1803968846797943f, 0.9053244590759277f, 0.6516568064689636f, +0.5603159070014954f, 0.7565913796424866f, 0.09029193222522736f, 0.7516254782676697f, 0.947889506816864f, 0.24501082301139832f, 0.0024814156349748373f, 0.19230793416500092f, +0.5961729288101196f, 0.14762242138385773f, 0.9469332098960876f, 0.12338552623987198f, 0.5497122406959534f, 0.11443574726581573f, 0.34186726808547974f, 0.9527332186698914f, +0.16946041584014893f, 0.7459638118743896f, 0.015064239501953125f, 0.8895142078399658f, 0.9841530323028564f, 0.6165193915367126f, 0.33437737822532654f, 0.9127079844474792f, +0.6325571537017822f, 0.04127494618296623f, 0.8817164897918701f, 0.16888146102428436f, 0.9997180104255676f, 0.9026392102241516f, 0.20863698422908783f, 0.03005531057715416f, +0.23853929340839386f, 0.11560818552970886f, 0.956473171710968f, 0.6068459749221802f, 0.6143065690994263f, 0.2270449846982956f, 0.35614848136901855f, 0.7474701404571533f, +0.07858150452375412f, 0.05161471664905548f, 0.26306551694869995f, 0.10198606550693512f, 0.6440097689628601f, 0.3985918462276459f, 0.7904298305511475f, 0.8966982960700989f, +0.8773238658905029f, 0.8574565649032593f, 0.1911626011133194f, 0.7461848855018616f, 0.03555966913700104f, 0.4398939311504364f, 0.3690841794013977f, 0.9846489429473877f, +0.4530359208583832f, 0.9525443315505981f, 0.43316325545310974f, 0.5978875756263733f, 0.044281914830207825f, 0.010294657200574875f, 0.5118671655654907f, 0.3299502730369568f, +0.34560325741767883f, 0.7431355714797974f, 0.16189169883728027f, 0.11572965234518051f, 0.4174138307571411f, 0.8396960496902466f, 0.9226711988449097f, 0.43295419216156006f, +0.29527124762535095f, 0.17102748155593872f, 0.7099395990371704f, 0.6492990255355835f, 0.28897103667259216f, 0.9431401491165161f, 0.22655336558818817f, 0.2505294680595398f, +0.6283953785896301f, 0.06544078886508942f, 0.6653873324394226f, 0.9790551662445068f, 0.7797723412513733f, 0.9112390875816345f, 0.2553825378417969f, 0.6322450041770935f, +0.9172882437705994f, 0.09674641489982605f, 0.44055017828941345f, 0.1896892786026001f, 0.5514092445373535f, 0.08990787714719772f, 0.12471486628055573f, 0.6913546323776245f, +0.808731198310852f, 0.3013533651828766f, 0.6439438462257385f, 0.02673383243381977f, 0.5422048568725586f, 0.9596866369247437f, 0.3315642178058624f, 0.6265388131141663f, +0.10990075767040253f, 0.8464183807373047f, 0.6865875720977783f, 0.6194475293159485f, 0.7739723324775696f, 0.3360387682914734f, 0.0033669525291770697f, 0.35966816544532776f, +0.8243694305419922f, 0.07249558717012405f, 0.5308659672737122f, 0.7415115237236023f, 0.0020250817760825157f, 0.8568634986877441f, 0.3402416408061981f, 0.128152534365654f, +0.8401597142219543f, 0.6921029090881348f, 0.44418400526046753f, 0.0409504733979702f, 0.018164362758398056f, 0.14996181428432465f, 0.8633564710617065f, 0.0010150889866054058f, +0.35746699571609497f, 0.8109773993492126f, 0.3259657621383667f, 0.7576730251312256f, 0.845468282699585f, 0.5775684118270874f, 0.7235901355743408f, 0.317489892244339f, +0.30024784803390503f, 0.3111768066883087f, 0.5002538561820984f, 0.7768069505691528f, 0.8330472707748413f, 0.09048303961753845f, 0.8227598071098328f, 0.6601259708404541f, +0.15504679083824158f, 0.7637980580329895f, 0.5476281642913818f, 0.8938215374946594f, 0.1730586439371109f, 0.04477756470441818f, 0.5679687857627869f, 0.24850967526435852f, +0.8574439287185669f, 0.6929284334182739f, 0.7570871710777283f, 0.3438096046447754f, 0.30186524987220764f, 0.06268260627985f, 0.21283912658691406f, 0.007709682919085026f, +0.49398353695869446f, 0.5130795240402222f, 0.12858633697032928f, 0.464261919260025f, 0.16043218970298767f, 0.34452757239341736f, 0.0983334481716156f, 0.6131796836853027f, +0.1774825006723404f, 0.27053529024124146f, 0.526723325252533f, 0.9321634769439697f, 0.6449347734451294f, 0.5338690280914307f, 0.4674304127693176f, 0.9044675827026367f, +0.8803032040596008f, 0.17467403411865234f, 0.31493085622787476f, 0.7168556451797485f, 0.9242559671401978f, 0.06698178499937057f, 0.7579479217529297f, 0.4964180886745453f, +0.07567304372787476f, 0.17318470776081085f, 0.9976656436920166f, 0.6644458174705505f, 0.11916586756706238f, 0.7191925644874573f, 0.4601004719734192f, 0.30081644654273987f, +0.238340362906456f, 0.8165369033813477f, 0.8614946007728577f, 0.4331308901309967f, 0.9734402298927307f, 0.5767503976821899f, 0.7054798603057861f, 0.5252938866615295f, +0.3334711492061615f, 0.11475207656621933f, 0.2163052260875702f, 0.6118928790092468f, 0.7187875509262085f, 0.9403335452079773f, 0.23637817800045013f, 0.47514808177948f, +0.8418305516242981f, 0.9157339334487915f, 0.03980730473995209f, 0.676824152469635f, 0.35316959023475647f, 0.42355677485466003f, 0.9473837614059448f, 0.28419235348701477f, +0.12595027685165405f, 0.43732205033302307f, 0.37932518124580383f, 0.851516842842102f, 0.016111008822917938f, 0.3775729835033417f, 0.27421459555625916f, 0.2697254717350006f, +0.3453596532344818f, 0.8282147645950317f, 0.4295634329319f, 0.7247188687324524f, 0.6988692283630371f, 0.10956746339797974f, 0.18902014195919037f, 0.8121922016143799f, +0.9029249548912048f, 0.812404215335846f, 0.9870736598968506f, 0.27518102526664734f, 0.3592652976512909f, 0.21303270757198334f, 0.26806318759918213f, 0.8404551148414612f, +0.5507922768592834f, 0.8745683431625366f, 0.5034745931625366f, 0.3640671968460083f, 0.812800407409668f, 0.1756354421377182f, 0.9284740090370178f, 0.21218648552894592f, +0.6234568953514099f, 0.9883828163146973f, 0.5667160153388977f, 0.1579606682062149f, 0.39175087213516235f, 0.9352291822433472f, 0.02487015165388584f, 0.5655571818351746f, +0.09625706076622009f, 0.48545488715171814f, 0.8140901923179626f, 0.014993988908827305f, 0.7003141641616821f, 0.8717542886734009f, 0.019631624221801758f, 0.23004359006881714f, +0.8287176489830017f, 0.3745889961719513f, 0.9129638075828552f, 0.29655537009239197f, 0.16667704284191132f, 0.2882205545902252f, 0.2457471638917923f, 0.4755256175994873f, +0.19242902100086212f, 0.1674318164587021f, 0.9696478247642517f, 0.2076265662908554f, 0.08173833042383194f, 0.15998078882694244f, 0.7736113667488098f, 0.9948217868804932f, +0.5494101047515869f, 0.8907313942909241f, 0.982116162776947f, 0.10621248930692673f, 0.001778686884790659f, 0.0874943658709526f, 0.38794028759002686f, 0.6642045974731445f, +0.4296030104160309f, 0.8748411536216736f, 0.0037987723480910063f, 0.6290530562400818f, 0.6686503291130066f, 0.8615908026695251f, 0.7633976936340332f, 0.7902849316596985f, +0.7051461935043335f, 0.8630889058113098f, 0.8981894254684448f, 0.20741824805736542f, 0.1331937164068222f, 0.6569769382476807f, 0.585060715675354f, 0.9908561110496521f, +0.9571760296821594f, 0.7663341760635376f, 0.7041684985160828f, 0.5783565044403076f, 0.15748091042041779f, 0.08793884515762329f, 0.05693185329437256f, 0.5571058392524719f, +0.5889347791671753f, 0.6177483201026917f, 0.9871569871902466f, 0.6346295475959778f, 0.04331241548061371f, 0.1513666957616806f, 0.28161120414733887f, 0.4371502995491028f, +0.9377087950706482f, 0.05490110442042351f, 0.7684541344642639f, 0.04954340308904648f, 0.43443384766578674f, 0.08285287767648697f, 0.5056812763214111f, 0.9844139218330383f, +0.3190193474292755f, 0.1482716202735901f, 0.896582841873169f, 0.6213997602462769f, 0.3383128046989441f, 0.3882858157157898f, 0.35635119676589966f, 0.6639356017112732f, +0.8500449657440186f, 0.6392898559570312f, 0.7431687712669373f, 0.6048014760017395f, 0.25406575202941895f, 0.024157611653208733f, 0.7228133678436279f, 0.6511399745941162f, +0.7114103436470032f, 0.3109871447086334f, 0.3777240216732025f, 0.21773886680603027f, 0.3779856562614441f, 0.414275586605072f, 0.3110393285751343f, 0.7931544184684753f, +0.7393930554389954f, 0.1414618194103241f, 0.42630934715270996f, 0.8678199648857117f, 0.9908139109611511f, 0.8100768327713013f, 0.6658908724784851f, 0.12196654081344604f, +0.04581572115421295f, 0.9646046161651611f, 0.12374953925609589f, 0.024327842518687248f, 0.2105521261692047f, 0.724763810634613f, 0.4683970808982849f, 0.4761485755443573f, +0.0991910770535469f, 0.3501300811767578f, 0.825579047203064f, 0.05584943667054176f, 0.12265858054161072f, 0.3222450017929077f, 0.5417388677597046f, 0.19493241608142853f, +0.5847507119178772f, 0.38511595129966736f, 0.9104032516479492f, 0.4814039468765259f, 0.2281709462404251f, 0.794228732585907f, 0.2510201036930084f, 0.6915052533149719f, +0.38462337851524353f, 0.2795434892177582f, 0.7267798781394958f, 0.977540135383606f, 0.4385823607444763f, 0.5602309703826904f, 0.11455684155225754f, 0.21045683324337006f, +0.19706295430660248f, 0.3734979033470154f, 0.7634388208389282f, 0.6782359480857849f, 0.7347209453582764f, 0.22459159791469574f, 0.7024070620536804f, 0.506697952747345f, +0.7459802031517029f, 0.8558850288391113f, 0.05113084241747856f, 0.6802550554275513f, 0.217670276761055f, 0.12920881807804108f, 0.7994658350944519f, 0.34682396054267883f, +0.9798486828804016f, 0.048965130001306534f, 0.08935940265655518f, 0.428041011095047f, 0.8925387859344482f, 0.8850874900817871f, 0.771973192691803f, 0.9652717113494873f, +0.35199636220932007f, 0.5060732960700989f, 0.39447110891342163f, 0.9106725454330444f, 0.8100168704986572f, 0.2666122019290924f, 0.29479488730430603f, 0.1854240596294403f, +0.5782670974731445f, 0.4006507992744446f, 0.910381019115448f, 0.7169237732887268f, 0.05059725418686867f, 0.6245540380477905f, 0.7150274515151978f, 0.8918170928955078f, +0.21765834093093872f, 0.11130653321743011f, 0.9728332161903381f, 0.29440635442733765f, 0.6446227431297302f, 0.983508825302124f, 0.4274592995643616f, 0.26320990920066833f, +0.8109613060951233f, 0.7824759483337402f, 0.1705089807510376f, 0.33200564980506897f, 0.8261623978614807f, 0.6082013249397278f, 0.07709168642759323f, 0.13338348269462585f, +0.9743919372558594f, 0.9666141867637634f, 0.7865148782730103f, 0.7435668706893921f, 0.9067660570144653f, 0.1703774631023407f, 0.06755080819129944f, 0.9835125803947449f, +0.9922998547554016f, 0.3070111870765686f, 0.23492807149887085f, 0.22708894312381744f, 0.5353682041168213f, 0.48867368698120117f, 0.543570876121521f, 0.24092452228069305f, +0.9786099195480347f, 0.7045390009880066f, 0.08128266781568527f, 0.49180567264556885f, 0.3501981198787689f, 0.3882890045642853f, 0.7953492403030396f, 0.7387325167655945f, +0.3803306818008423f, 0.41856974363327026f, 0.3312056064605713f, 0.7057884335517883f, 0.1116684153676033f, 0.7650250196456909f, 0.7151912450790405f, 0.16608496010303497f, +0.24174629151821136f, 0.5475298762321472f, 0.03225094452500343f, 0.9599409699440002f, 0.7637659311294556f, 0.6911613941192627f, 0.8343602418899536f, 0.476618230342865f, +0.9959296584129333f, 0.39752426743507385f, 0.7346381545066833f, 0.09867580980062485f, 0.5790196657180786f, 0.8483794927597046f, 0.7447617650032043f, 0.17154087126255035f, +0.8917225003242493f, 0.8335119485855103f, 0.9031344652175903f, 0.6833791136741638f, 0.37158963084220886f, 0.5186612010002136f, 0.23595312237739563f, 0.4304613769054413f, +0.1826440840959549f, 0.5474139451980591f, 0.5341535806655884f, 0.41355231404304504f, 0.40357235074043274f, 0.8325862884521484f, 0.8689221143722534f, 0.4797590374946594f, +0.529254674911499f, 0.9570884704589844f, 0.6383726000785828f, 0.2690768241882324f, 0.613798975944519f, 0.4929340183734894f, 0.2966861426830292f, 0.03547624126076698f, +0.9315043091773987f, 0.22942598164081573f, 0.715189516544342f, 0.25316768884658813f, 0.346926748752594f, 0.4821951389312744f, 0.8201841115951538f, 0.7808155417442322f, +0.5288724303245544f, 0.6555580496788025f, 0.3246077001094818f, 0.19930516183376312f, 0.07513915747404099f, 0.3546521067619324f, 0.3186289668083191f, 0.7491073608398438f, +0.2392406314611435f, 0.5215702652931213f, 0.3415420651435852f, 0.13504329323768616f, 0.708870530128479f, 0.44194260239601135f, 0.1813652366399765f, 0.05644096061587334f, +0.5169374942779541f, 0.14700236916542053f, 0.7697039246559143f, 0.11169978231191635f, 0.6905611157417297f, 0.926284670829773f, 0.3232102692127228f, 0.6539837121963501f, +0.09758280962705612f, 0.5185990929603577f, 0.3448781371116638f, 0.2789575457572937f, 0.4679048955440521f, 0.36683887243270874f, 0.9399113655090332f, 0.4949987828731537f, +0.9986100196838379f, 0.2571299970149994f, 0.39528021216392517f, 0.029897280037403107f, 0.5557231903076172f, 0.5847218036651611f, 0.29097381234169006f, 0.16529060900211334f, +0.4323456883430481f, 0.9577469825744629f, 0.06384365260601044f, 0.3420529067516327f, 0.5201932787895203f, 0.0591825470328331f, 0.8778191804885864f, 0.3784383237361908f, +0.4206010699272156f, 0.7521267533302307f, 0.628480076789856f, 0.38147369027137756f, 0.5572671294212341f, 0.3800983726978302f, 0.5379423499107361f, 0.46111321449279785f, +0.9381077885627747f, 0.3048907518386841f, 0.45253345370292664f, 0.1807892769575119f, 0.34845882654190063f, 0.7034409046173096f, 0.41797250509262085f, 0.7364615797996521f, +0.2665344476699829f, 0.45810168981552124f, 0.1781587153673172f, 0.06742869317531586f, 0.6846743822097778f, 0.2258179485797882f, 0.4173889756202698f, 0.6344704627990723f, +0.8653790354728699f, 0.4595865309238434f, 0.28982308506965637f, 0.6942111849784851f, 0.08190320432186127f, 0.08676232397556305f, 0.8002302050590515f, 0.9881100654602051f, +0.54543137550354f, 0.4576736390590668f, 0.2880699634552002f, 0.9134833812713623f, 0.8484151363372803f, 0.896285891532898f, 0.6007772088050842f, 0.43642836809158325f, +0.5162505507469177f, 0.9667873382568359f, 0.8877289295196533f, 0.819338858127594f, 0.18204744160175323f, 0.09406040608882904f, 0.6606918573379517f, 0.837020993232727f, +0.5074947476387024f, 0.7334137558937073f, 0.4876847267150879f, 0.2924369275569916f, 0.637001097202301f, 0.9889281988143921f, 0.4889375567436218f, 0.036442145705223083f, +0.9825100898742676f, 0.6623260974884033f, 0.9734707474708557f, 0.726101815700531f, 0.7849080562591553f, 0.9267266988754272f, 0.32133200764656067f, 0.9384958148002625f, +0.5488156676292419f, 0.018900969997048378f, 0.4148555397987366f, 0.339180052280426f, 0.48721203207969666f, 0.3076029419898987f, 0.8375768065452576f, 0.9466830492019653f, +0.7139059901237488f, 0.13999219238758087f, 0.15506350994110107f, 0.06924352049827576f, 0.1413123607635498f, 0.9552755355834961f, 0.4835107624530792f, 0.7355546355247498f, +0.5882468819618225f, 0.48836442828178406f, 0.3444642424583435f, 0.2881788909435272f, 0.20517900586128235f, 0.6427797675132751f, 0.9446759819984436f, 0.7761804461479187f, +0.14739108085632324f, 0.5731103420257568f, 0.2845308780670166f, 0.6723713874816895f, 0.585686206817627f, 0.9965376853942871f, 0.11818964034318924f, 0.12934766709804535f, +0.2824871242046356f, 0.7400326132774353f, 0.5658823847770691f, 0.638667106628418f, 0.05317236855626106f, 0.1272280216217041f, 0.8904669284820557f, 0.18141719698905945f, +0.7840419411659241f, 0.653518795967102f, 0.2942602038383484f, 0.01585291139781475f, 0.4398071765899658f, 0.7374216318130493f, 0.6871134042739868f, 0.25833794474601746f, +0.6889682412147522f, 0.45905593037605286f, 0.014185402542352676f, 0.07085683196783066f, 0.36396101117134094f, 0.5872927904129028f, 0.510975182056427f, 0.26608967781066895f, +0.835481584072113f, 0.6443755030632019f, 0.6641927361488342f, 0.5779001116752625f, 0.7406139373779297f, 0.272263765335083f, 0.9438633322715759f, 0.3299434781074524f, +0.06795020401477814f, 0.5021567344665527f, 0.48717552423477173f, 0.3049526810646057f, 0.5043078064918518f, 0.6855690479278564f, 0.31698304414749146f, 0.19008250534534454f, +0.6645886301994324f, 0.8883990049362183f, 0.028254453092813492f, 0.25954902172088623f, 0.8860825300216675f, 0.9365979433059692f, 0.6908591389656067f, 0.18394967913627625f, +0.3604640066623688f, 0.40255895256996155f, 0.3660016655921936f, 0.4668593108654022f, 0.6162444353103638f, 0.373351514339447f, 0.48459163308143616f, 0.6273176074028015f, +0.2253904789686203f, 0.8598783016204834f, 0.7039534449577332f, 0.5023987889289856f, 0.9329602718353271f, 0.3894284665584564f, 0.47323572635650635f, 0.21225106716156006f, +0.11298105865716934f, 0.27511724829673767f, 0.05848909169435501f, 0.7718849778175354f, 0.2610427737236023f, 0.682496190071106f, 0.3558754324913025f, 0.8670517206192017f, +0.5818347930908203f, 0.16745063662528992f, 0.2945123016834259f, 0.19211667776107788f, 0.7025032043457031f, 0.2808406352996826f, 0.3877062201499939f, 0.2210499495267868f, +0.4029708206653595f, 0.17342878878116608f, 0.07022125273942947f, 0.4358709156513214f, 0.17614856362342834f, 0.5498760938644409f, 0.4661034643650055f, 0.9200084209442139f, +0.8558159470558167f, 0.4758993089199066f, 0.22407513856887817f, 0.6517810821533203f, 0.013127394020557404f, 0.10774537920951843f, 0.03663843497633934f, 0.8542860746383667f, +0.023573054000735283f, 0.14554829895496368f, 0.24706679582595825f, 0.6331690549850464f, 0.20315909385681152f, 0.28887107968330383f, 0.6297813653945923f, 0.13113287091255188f, +0.05813336372375488f, 0.9527954459190369f, 0.12398870289325714f, 0.08923441916704178f, 0.15786680579185486f, 0.8818455338478088f, 0.8513501286506653f, 0.8103443384170532f, +0.3480818569660187f, 0.343325674533844f, 0.8392167091369629f, 0.7223827838897705f, 0.48770126700401306f, 0.5473963022232056f, 0.299828439950943f, 0.8817452788352966f, +0.2855061888694763f, 0.6001622676849365f, 0.3082297742366791f, 0.8107348680496216f, 0.19553899765014648f, 0.7411385774612427f, 0.3653106093406677f, 0.910393476486206f, +0.3259146213531494f, 0.11223195493221283f, 0.0517437569797039f, 0.15500368177890778f, 0.988706111907959f, 0.11853265762329102f, 0.9919508099555969f, 0.3268185555934906f, +0.7494823336601257f, 0.1589738428592682f, 0.7192877531051636f, 0.25710299611091614f, 0.2755254805088043f, 0.1573074460029602f, 0.624488890171051f, 0.049737121909856796f, +0.8356232047080994f, 0.5285147428512573f, 0.5185831189155579f, 0.005354111082851887f, 0.3127138614654541f, 0.4979606568813324f, 0.7567536234855652f, 0.03356173634529114f, +0.4151688814163208f, 0.8965929746627808f, 0.7640743255615234f, 0.30308178067207336f, 0.33184993267059326f, 0.9852491617202759f, 0.6427088975906372f, 0.36574575304985046f, +0.9625359177589417f, 0.4739421010017395f, 0.03169037029147148f, 0.10427181422710419f, 0.6463159918785095f, 0.5695490837097168f, 0.735745370388031f, 0.3779100477695465f, +0.5479508638381958f, 0.2019168585538864f, 0.9600893259048462f, 0.7175135612487793f, 0.4597524106502533f, 0.3053654730319977f, 0.4123269021511078f, 0.45673689246177673f, +0.021440627053380013f, 0.5082962512969971f, 0.26483696699142456f, 0.4727788269519806f, 0.35513079166412354f, 0.30937278270721436f, 0.2931603491306305f, 0.8768772482872009f, +0.914095401763916f, 0.22673459351062775f, 0.5341920256614685f, 0.24266065657138824f, 0.46388527750968933f, 0.8633202314376831f, 0.439822793006897f, 0.8147412538528442f, +0.3407946527004242f, 0.4466579258441925f, 0.09420696645975113f, 0.5966090559959412f, 0.0500764362514019f, 0.710999071598053f, 0.5844111442565918f, 0.2387557327747345f, +0.17825046181678772f, 0.4592718780040741f, 0.9459413886070251f, 0.6964555978775024f, 0.10864429175853729f, 0.9888266324996948f, 0.6983397603034973f, 0.6302070021629333f, +0.5193623304367065f, 0.043141089379787445f, 0.17445363104343414f, 0.730524480342865f, 0.3148508369922638f, 0.14566659927368164f, 0.9736533761024475f, 0.2976369261741638f, +0.47753021121025085f, 0.9040621519088745f, 0.40929290652275085f, 0.007858777418732643f, 0.48396167159080505f, 0.5989073514938354f, 0.055777911096811295f, 0.39970776438713074f, +0.5213000774383545f, 0.9437620043754578f, 0.7432425022125244f, 0.14979511499404907f, 0.9711641073226929f, 0.05661671236157417f, 0.34375065565109253f, 0.8778714537620544f, +0.6263278126716614f, 0.5621893405914307f, 0.8987444043159485f, 0.011341247707605362f, 0.8376885652542114f, 0.9989498257637024f, 0.8126841187477112f, 0.5241520404815674f, +0.988888680934906f, 0.4669898450374603f, 0.9896947145462036f, 0.1932811588048935f, 0.4937284290790558f, 0.448733925819397f, 0.582655131816864f, 0.24580618739128113f, +0.1157110258936882f, 0.7872593998908997f, 0.7206552624702454f, 0.015900293365120888f, 0.6019904017448425f, 0.8048116564750671f, 0.6179031729698181f, 0.4005945920944214f, +0.723080039024353f, 0.27375689148902893f, 0.19160443544387817f, 0.46320581436157227f, 0.5595651268959045f, 0.05035262554883957f, 0.9994059205055237f, 0.7250964641571045f, +0.7599532604217529f, 0.031158510595560074f, 0.9300909042358398f, 0.4840501844882965f, 0.5780322551727295f, 0.4587109088897705f, 0.6277647614479065f, 0.7849656343460083f, +0.5165801644325256f, 0.7071850895881653f, 0.8843383193016052f, 0.7540406584739685f, 0.6094167828559875f, 0.2835918962955475f, 0.5728673934936523f, 0.9099873900413513f, +0.9050901532173157f, 0.8854191899299622f, 0.3511918783187866f, 0.8230850696563721f, 0.4330216348171234f, 0.4420974850654602f, 0.58884596824646f, 0.9846676588058472f, +0.9016929864883423f, 0.7085610032081604f, 0.06531531363725662f, 0.8593168258666992f, 0.23104552924633026f, 0.9114857912063599f, 0.4349695146083832f, 0.5474914312362671f, +0.06991646438837051f, 0.1493748277425766f, 0.7754225730895996f, 0.30280521512031555f, 0.9213871359825134f, 0.5134472250938416f, 0.7677057981491089f, 0.8069981336593628f, +0.3010697066783905f, 0.13635729253292084f, 0.7763009667396545f, 0.9436987638473511f, 0.36651915311813354f, 0.47654280066490173f, 0.07915908843278885f, 0.9813902378082275f, +0.05146264284849167f, 0.8949364423751831f, 0.1543668508529663f, 0.48538699746131897f, 0.7874312996864319f, 0.21508605778217316f, 0.8436727523803711f, 0.6203471422195435f, +0.7495216727256775f, 0.9921746253967285f, 0.3349524140357971f, 0.00560269458219409f, 0.5094823837280273f, 0.9970042705535889f, 0.46316418051719666f, 0.5588059425354004f, +0.5424361824989319f, 0.7697128057479858f, 0.09190227091312408f, 0.31006526947021484f, 0.5972321033477783f, 0.4621506333351135f, 0.9184767603874207f, 0.9393681883811951f, +0.629880964756012f, 0.8242090344429016f, 0.3640112578868866f, 0.05539492517709732f, 0.04113023355603218f, 0.650606095790863f, 0.8625918626785278f, 0.340017169713974f, +0.7546627521514893f, 0.3440109193325043f, 0.07567662000656128f, 0.6355293989181519f, 0.9682151079177856f, 0.7072078585624695f, 0.3655910789966583f, 0.23064027726650238f, +0.8629796504974365f, 0.35650327801704407f, 0.36782538890838623f, 0.22905924916267395f, 0.5038815140724182f, 0.5949404239654541f, 0.9727893471717834f, 0.6190431118011475f, +0.05817774310708046f, 0.3391098976135254f, 0.9716842174530029f, 0.03867710381746292f, 0.2542649209499359f, 0.6624393463134766f, 0.6806166172027588f, 0.9671292304992676f, +0.4034777283668518f, 0.746256411075592f, 0.12140434980392456f, 0.38944244384765625f, 0.34484460949897766f, 0.07188353687524796f, 0.38536813855171204f, 0.9463135004043579f, +0.1517215371131897f, 0.28396037220954895f, 0.851151704788208f, 0.4353499710559845f, 0.31178006529808044f, 0.8195927739143372f, 0.48385798931121826f, 0.21285654604434967f, +0.7663375735282898f, 0.760084331035614f, 0.8074498772621155f, 0.7265948057174683f, 0.7375020384788513f, 0.2327592521905899f, 0.6229243874549866f, 0.9537950754165649f, +0.22290438413619995f, 0.7295404076576233f, 0.8942434191703796f, 0.46538349986076355f, 0.841502845287323f, 0.49228978157043457f, 0.32030805945396423f, 0.9531174898147583f, +0.4063880741596222f, 0.5047917366027832f, 0.8161521553993225f, 0.9336909651756287f, 0.2512437701225281f, 0.6947355270385742f, 0.08816293627023697f, 0.013546762987971306f, +0.18901461362838745f, 0.5414716601371765f, 0.6026292443275452f, 0.21280232071876526f, 0.6799728274345398f, 0.9298731088638306f, 0.7246900200843811f, 0.6443287134170532f, +0.24662452936172485f, 0.31060612201690674f, 0.7342087030410767f, 0.05203566327691078f, 0.8437542915344238f, 0.47800445556640625f, 0.016634490340948105f, 0.7599059343338013f, +0.6110976934432983f, 0.6487447619438171f, 0.6869655847549438f, 0.33786314725875854f, 0.10955774039030075f, 0.4876721203327179f, 0.6066879034042358f, 0.06973819434642792f, +0.7946414351463318f, 0.14796240627765656f, 0.05323733016848564f, 0.18227256834506989f, 0.9100520014762878f, 0.7499924302101135f, 0.9394859075546265f, 0.4947102665901184f, +0.5309549570083618f, 0.8504711985588074f, 0.3678010106086731f, 0.8787175416946411f, 0.18571139872074127f, 0.8619023561477661f, 0.9882094264030457f, 0.10349000990390778f, +0.0329047292470932f, 0.6410572528839111f, 0.32152411341667175f, 0.33353155851364136f, 0.9194386601448059f, 0.2798613905906677f, 0.20018932223320007f, 0.11387763172388077f, +0.37605246901512146f, 0.36472824215888977f, 0.10408088564872742f, 0.8302131295204163f, 0.012293769977986813f, 0.15851642191410065f, 0.15085269510746002f, 0.8758438229560852f, +0.571818470954895f, 0.7194640636444092f, 0.8909088969230652f, 0.8045870065689087f, 0.8018649220466614f, 0.24547597765922546f, 0.33759447932243347f, 0.14343273639678955f, +0.0556190200150013f, 0.15096287429332733f, 0.033765409141778946f, 0.7493781447410583f, 0.21357788145542145f, 0.3873034417629242f, 0.32695943117141724f, 0.5902461409568787f, +0.4842202067375183f, 0.06709249317646027f, 0.34582626819610596f, 0.22341574728488922f, 0.5892191529273987f, 0.0033962023444473743f, 0.024385841563344002f, 0.2035675346851349f, +0.20867852866649628f, 0.35444650053977966f, 0.32550036907196045f, 0.808758556842804f, 0.6448944211006165f, 0.22270981967449188f, 0.10140746086835861f, 0.7064827084541321f, +0.09764263778924942f, 0.8848534226417542f, 0.25651630759239197f, 0.29352685809135437f, 0.12646764516830444f, 0.7042242884635925f, 0.17598269879817963f, 0.7263413667678833f, +0.48129525780677795f, 0.6372392177581787f, 0.6741305589675903f, 0.3318341374397278f, 0.8322691321372986f, 0.3080469071865082f, 0.31976503133773804f, 0.331514447927475f, +0.19947709143161774f, 0.0234992615878582f, 0.13215294480323792f, 0.21126434206962585f, 0.5515610575675964f, 0.7256007790565491f, 0.3870263397693634f, 0.19672730565071106f, +0.33143410086631775f, 0.24879838526248932f, 0.730173647403717f, 0.36157846450805664f, 0.12406633049249649f, 0.29090380668640137f, 0.69327712059021f, 0.8571803569793701f, +0.6348157525062561f, 0.029040992259979248f, 0.9175081849098206f, 0.26051580905914307f, 0.29872286319732666f, 0.7315078973770142f, 0.5143455862998962f, 0.017854511737823486f, +0.0002676918520592153f, 0.647577702999115f, 0.6347270607948303f, 0.41108617186546326f, 0.5546989440917969f, 0.1258966028690338f, 0.8987825512886047f, 0.7863695025444031f, +0.6682043671607971f, 0.3817405700683594f, 0.3124729096889496f, 0.7720654606819153f, 0.6522710919380188f, 0.1842787116765976f, 0.7862498164176941f, 0.5299605131149292f, +0.19081653654575348f, 0.9553314447402954f, 0.8662393689155579f, 0.7238922715187073f, 0.9210658669471741f, 0.7528306245803833f, 0.456494003534317f, 0.7222118377685547f, +0.8648166060447693f, 0.7255398631095886f, 0.828810453414917f, 0.7827127575874329f, 0.25290292501449585f, 0.3668020963668823f, 0.6715342402458191f, 0.6540765166282654f, +0.7667117118835449f, 0.2271995097398758f, 0.7613409757614136f, 0.5444003343582153f, 0.3197871446609497f, 0.3711705207824707f, 0.20917478203773499f, 0.18343603610992432f, +0.1955125629901886f, 0.7292175889015198f, 0.8757918477058411f, 0.6759181022644043f, 0.20110252499580383f, 0.587132453918457f, 0.39720454812049866f, 0.34576037526130676f, +0.03666786849498749f, 0.6313024759292603f, 0.5150494575500488f, 0.09322290867567062f, 0.24166063964366913f, 0.10327117145061493f, 0.9391456246376038f, 0.48155757784843445f, +0.7414336800575256f, 0.9104629755020142f, 0.42995819449424744f, 0.0010277426335960627f, 0.2143203467130661f, 0.49158814549446106f, 0.33828794956207275f, 0.7754648327827454f, +0.7139025926589966f, 0.1562407910823822f, 0.027835117653012276f, 0.3183289170265198f, 0.6488693356513977f, 0.27057304978370667f, 0.7648173570632935f, 0.2671031653881073f, +0.12138083577156067f, 0.8149963617324829f, 0.35120877623558044f, 0.45077279210090637f, 0.42325344681739807f, 0.9416666030883789f, 0.4519672095775604f, 0.15497858822345734f, +0.7559527158737183f, 0.22777988016605377f, 0.9734833240509033f, 0.2977459728717804f, 0.4682045578956604f, 0.3599222004413605f, 0.7039474844932556f, 0.5878499746322632f, +0.7127700448036194f, 0.13568146526813507f, 0.4913834035396576f, 0.5310912132263184f, 0.3722993731498718f, 0.7863622903823853f, 0.7111296057701111f, 0.6326438784599304f, +0.6062636375427246f, 0.7036479115486145f, 0.3781820833683014f, 0.47113049030303955f, 0.6903636455535889f, 0.6297850608825684f, 0.7658517956733704f, 0.7038655877113342f, +0.5440247654914856f, 0.879278302192688f, 0.7671670317649841f, 0.7662820816040039f, 0.5417630672454834f, 0.7694547772407532f, 0.13040786981582642f, 0.9410582780838013f, +0.28609582781791687f, 0.7048253417015076f, 0.6117249727249146f, 0.7835062146186829f, 0.17237184941768646f, 0.5835525393486023f, 0.45062342286109924f, 0.9339377880096436f, +0.44236305356025696f, 0.10025761276483536f, 0.39801403880119324f, 0.3398490846157074f, 0.6193363070487976f, 0.46361076831817627f, 0.977083146572113f, 0.7495510578155518f, +0.11760320514440536f, 0.15428520739078522f, 0.366264671087265f, 0.04556268826127052f, 0.30315926671028137f, 0.7057875990867615f, 0.2523816227912903f, 0.8597102165222168f, +0.4169498383998871f, 0.12117329984903336f, 0.7156602740287781f, 0.7812526822090149f, 0.41419529914855957f, 0.8577988743782043f, 0.14206835627555847f, 0.78634113073349f, +0.3535793721675873f, 0.6577750444412231f, 0.8016871213912964f, 0.002964746206998825f, 0.9200723767280579f, 0.9566196203231812f, 0.9316881895065308f, 0.29011157155036926f, +0.8158155083656311f, 0.541752278804779f, 0.7117184996604919f, 0.3977401852607727f, 0.3101613521575928f, 0.8325381278991699f, 0.15764808654785156f, 0.5360379219055176f, +0.8270900249481201f, 0.5863285660743713f, 0.49558505415916443f, 0.16196905076503754f, 0.09928363561630249f, 0.3101240396499634f, 0.8096107840538025f, 0.5918489694595337f, +0.5219364762306213f, 0.7304325699806213f, 0.6868824362754822f, 0.9402250647544861f, 0.2648279666900635f, 0.8088849186897278f, 0.5601277947425842f, 0.7779151201248169f, +0.6843887567520142f, 0.7720911502838135f, 0.3900112509727478f, 0.08530694246292114f, 0.9120359420776367f, 0.1723727285861969f, 0.6843074560165405f, 0.4363715648651123f, +0.8192699551582336f, 0.6958197355270386f, 0.9668262004852295f, 0.17884360253810883f, 0.7847649455070496f, 0.12831009924411774f, 0.876076340675354f, 0.5201009511947632f, +0.984134316444397f, 0.9319061040878296f, 0.3179777264595032f, 0.8303607702255249f, 0.024836892262101173f, 0.3018474280834198f, 0.061106566339731216f, 0.20321989059448242f, +0.8837239146232605f, 0.3311009109020233f, 0.8697266578674316f, 0.2717079818248749f, 0.48245978355407715f, 0.438277006149292f, 0.2552794814109802f, 0.31510767340660095f, +0.9285585880279541f, 0.8215342164039612f, 0.8610844612121582f, 0.03539934754371643f, 0.9769427180290222f, 0.9636960625648499f, 0.41519835591316223f, 0.9797840118408203f, +0.6572094559669495f, 0.6968370079994202f, 0.5815551280975342f, 0.6969664096832275f, 0.41211411356925964f, 0.37220898270606995f, 0.3691917657852173f, 0.7714099287986755f, +0.9586343765258789f, 0.40246304869651794f, 0.9555169343948364f, 0.46739456057548523f, 0.26313135027885437f, 0.07521133124828339f, 0.22167634963989258f, 0.6563831567764282f, +0.12398041784763336f, 0.5523239970207214f, 0.45803481340408325f, 0.17453691363334656f, 0.5422658324241638f, 0.1757550686597824f, 0.6843830347061157f, 0.08493485301733017f, +0.6518310308456421f, 0.3320659399032593f, 0.8786889910697937f, 0.11037258058786392f, 0.43549251556396484f, 0.5041408538818359f, 0.2187807708978653f, 0.8229902982711792f, +0.350588321685791f, 0.6980882287025452f, 0.6188509464263916f, 0.39811697602272034f, 0.8868879079818726f, 0.8869336843490601f, 0.6477549076080322f, 0.46869832277297974f, +0.5958889126777649f, 0.18999707698822021f, 0.6233060956001282f, 0.9167136549949646f, 0.5922702550888062f, 0.4775437116622925f, 0.9008815884590149f, 0.5255796313285828f, +0.2763066589832306f, 0.37267497181892395f, 0.18987680971622467f, 0.8353481888771057f, 0.2766917645931244f, 0.10760877281427383f, 0.029666222631931305f, 0.5004929304122925f, +0.6995730400085449f, 0.1851378232240677f, 0.2816559374332428f, 0.725019633769989f, 0.9689465761184692f, 0.43844276666641235f, 0.35347598791122437f, 0.03831588104367256f, +0.40963461995124817f, 0.13555657863616943f, 0.2990448772907257f, 0.12486302107572556f, 0.9507332444190979f, 0.5965597629547119f, 0.845246434211731f, 0.9869403839111328f, +0.9762100577354431f, 0.8768737316131592f, 0.184370219707489f, 0.20250169932842255f, 0.7547457218170166f, 0.12089836597442627f, 0.7517726421356201f, 0.429147869348526f, +0.9265243411064148f, 0.48947057127952576f, 0.057680632919073105f, 0.8616635799407959f, 0.3755429685115814f, 0.11015773564577103f, 0.686357319355011f, 0.2230849266052246f, +0.28634658455848694f, 0.7600414156913757f, 0.5896090865135193f, 0.6514057517051697f, 0.19675803184509277f, 0.7793872952461243f, 0.307229220867157f, 0.8585519790649414f, +0.9732642769813538f, 0.4893120527267456f, 0.4210392236709595f, 0.2920076251029968f, 0.021093854680657387f, 0.35462287068367004f, 0.08032683283090591f, 0.650155246257782f, +0.5097086429595947f, 0.8145240545272827f, 0.7109321355819702f, 0.6445747017860413f, 0.44813308119773865f, 0.44126272201538086f, 0.9241923689842224f, 0.6250885128974915f, +0.21355405449867249f, 0.3086432218551636f, 0.7594895958900452f, 0.9564326405525208f, 0.7988640666007996f, 0.6435278058052063f, 0.12048038095235825f, 0.23020727932453156f, +0.782669723033905f, 0.755611777305603f, 0.9225190281867981f, 0.3063226640224457f, 0.19590941071510315f, 0.8283639550209045f, 0.23015429079532623f, 0.8416709899902344f, +0.21603509783744812f, 0.7229783535003662f, 0.20320889353752136f, 0.8752821087837219f, 0.09737684577703476f, 0.7418441772460938f, 0.6894479990005493f, 0.9282471537590027f, +0.3204803764820099f, 0.48309826850891113f, 0.25655755400657654f, 0.19680339097976685f, 0.5295873880386353f, 0.4973399043083191f, 0.8930984139442444f, 0.7469072341918945f, +0.46848195791244507f, 0.9064427614212036f, 0.11064647138118744f, 0.3861128091812134f, 0.11339724063873291f, 0.44586220383644104f, 0.3568688929080963f, 0.4405268728733063f, +0.486102819442749f, 0.9688639640808105f, 0.05401420220732689f, 0.3229633569717407f, 0.4943943917751312f, 0.18261373043060303f, 0.42950674891471863f, 0.12625904381275177f, +0.9185101985931396f, 0.7233799695968628f, 0.7218074798583984f, 0.04169226065278053f, 0.9019367098808289f, 0.7845746278762817f, 0.7641507983207703f, 0.725125253200531f, +0.33104342222213745f, 0.6918752789497375f, 0.7457718253135681f, 0.4204145669937134f, 0.09220518171787262f, 0.508782684803009f, 0.25776904821395874f, 0.509256899356842f, +0.08195739984512329f, 0.4312623143196106f, 0.4860217869281769f, 0.5470867156982422f, 0.5517807602882385f, 0.7113944292068481f, 0.37010353803634644f, 0.03660305216908455f, +0.9036111831665039f, 0.5765672922134399f, 0.1573701947927475f, 0.815629243850708f, 0.3270587921142578f, 0.4700891375541687f, 0.3338024914264679f, 0.571097195148468f, +0.7777212858200073f, 0.6046575903892517f, 0.6170949935913086f, 0.2212967425584793f, 0.761810302734375f, 0.7702925205230713f, 0.4840623140335083f, 0.4769728481769562f, +0.06208895519375801f, 0.16440872848033905f, 0.3699309527873993f, 0.2990706264972687f, 0.8893583416938782f, 0.6151874661445618f, 0.2878594994544983f, 0.3039468824863434f, +0.7801263332366943f, 0.14276224374771118f, 0.4685947000980377f, 0.16168834269046783f, 0.2637971043586731f, 0.6959521770477295f, 0.8383884429931641f, 0.330346018075943f, +0.9238286018371582f, 0.3183450400829315f, 0.9389427304267883f, 0.28034573793411255f, 0.011256778612732887f, 0.9963247179985046f, 0.8511782288551331f, 0.44626516103744507f, +0.9572124481201172f, 0.0026339564938098192f, 0.7376948595046997f, 0.7587968111038208f, 0.6926119327545166f, 0.6222218871116638f, 0.017096273601055145f, 0.3631225526332855f, +0.9772095084190369f, 0.2677801549434662f, 0.3011229634284973f, 0.5700396299362183f, 0.09079958498477936f, 0.21527989208698273f, 0.6589393019676208f, 0.044140830636024475f, +0.5867781043052673f, 0.2969778776168823f, 0.3424051105976105f, 0.8412889242172241f, 0.3476923704147339f, 0.5856343507766724f, 0.3637523055076599f, 0.4353492259979248f, +0.018035851418972015f, 0.563008189201355f, 0.8663560748100281f, 0.044629182666540146f, 0.2128557413816452f, 0.6928982734680176f, 0.26456189155578613f, 0.7816261053085327f, +0.8125942945480347f, 0.44008171558380127f, 0.4992736279964447f, 0.5361356735229492f, 0.9582170844078064f, 0.29379984736442566f, 0.4844898283481598f, 0.686829686164856f, +0.550034761428833f, 0.3705882430076599f, 0.6352890133857727f, 0.5121428370475769f, 0.6489577293395996f, 0.460027277469635f, 0.3194723427295685f, 0.45018333196640015f, +0.8806376457214355f, 0.5345243811607361f, 0.5070479512214661f, 0.2123715579509735f, 0.3148110806941986f, 0.202137291431427f, 0.9069859385490417f, 0.13823285698890686f, +0.4820746183395386f, 0.6763467788696289f, 0.34451138973236084f, 0.14181360602378845f, 0.42404693365097046f, 0.529766321182251f, 0.27797627449035645f, 0.8077515959739685f, +0.30556029081344604f, 0.061082616448402405f, 0.7556395530700684f, 0.43478110432624817f, 0.32404181361198425f, 0.3224963843822479f, 0.024490918964147568f, 0.4647318422794342f, +0.6173415184020996f, 0.6142597198486328f, 0.42176389694213867f, 0.9348520040512085f, 0.2703784704208374f, 0.25474977493286133f, 0.8104774355888367f, 0.31054678559303284f, +0.4070886969566345f, 0.6541657447814941f, 0.14522384107112885f, 0.022503256797790527f, 0.3660144805908203f, 0.21066327393054962f, 0.39957255125045776f, 0.43651196360588074f, +0.025930827483534813f, 0.7480810284614563f, 0.4948108196258545f, 0.4558276832103729f, 0.9508975148200989f, 0.884378969669342f, 0.08742170035839081f, 0.6684065461158752f, +0.28319141268730164f, 0.31961944699287415f, 0.28678521513938904f, 0.5183112621307373f, 0.67765873670578f, 0.09476657211780548f, 0.9447268843650818f, 0.7038382887840271f, +0.39638519287109375f, 0.016577595844864845f, 0.5110682845115662f, 0.7207525968551636f, 0.9827397465705872f, 0.8347522616386414f, 0.7702317833900452f, 0.5556901693344116f, +0.28906258940696716f, 0.8165848851203918f, 0.07591503113508224f, 0.3016688823699951f, 0.044197238981723785f, 0.07920525968074799f, 0.8995399475097656f, 0.09593174606561661f, +0.6405210494995117f, 0.889767587184906f, 0.8124973773956299f, 0.2646878659725189f, 0.5354773998260498f, 0.7544533014297485f, 0.06558410078287125f, 0.056339576840400696f, +0.24610525369644165f, 0.14032672345638275f, 0.09599511325359344f, 0.5839258432388306f, 0.2905132472515106f, 0.5887675881385803f, 0.915583610534668f, 0.3902556300163269f, +0.7070056796073914f, 0.17175142467021942f, 0.7764211893081665f, 0.6445932984352112f, 0.5952694416046143f, 0.8162336945533752f, 0.25790631771087646f, 0.3391668200492859f, +0.5823484659194946f, 0.742472767829895f, 0.7382535934448242f, 0.029668444767594337f, 0.9861273765563965f, 0.6467803120613098f, 0.6573857069015503f, 0.8396117091178894f, +0.8030793070793152f, 0.7791253328323364f, 0.6655319333076477f, 0.6986188292503357f, 0.6821920871734619f, 0.580215573310852f, 0.11814165860414505f, 0.1729472279548645f, +0.5261193513870239f, 0.07352038472890854f, 0.5301592946052551f, 0.5237782001495361f, 0.1873760223388672f, 0.07762026786804199f, 0.4993191063404083f, 0.21679873764514923f, +0.06037663295865059f, 0.4366457760334015f, 0.852308452129364f, 0.19351384043693542f, 0.5922400951385498f, 0.6186972856521606f, 0.08303754776716232f, 0.29227393865585327f, +0.5114816427230835f, 0.253414124250412f, 0.08981305360794067f, 0.17758440971374512f, 0.6302429437637329f, 0.22373269498348236f, 0.05098962038755417f, 0.5494340062141418f, +0.28848689794540405f, 0.8352060317993164f, 0.3196193277835846f, 0.07384809851646423f, 0.23078255355358124f, 0.6455860137939453f, 0.4782344698905945f, 0.828794538974762f, +0.5696857571601868f, 0.21903346478939056f, 0.20811906456947327f, 0.7109610438346863f, 0.49652615189552307f, 0.6996985077857971f, 0.7631798386573792f, 0.23080986738204956f, +0.31886032223701477f, 0.06708475202322006f, 0.7746379971504211f, 0.250415176153183f, 0.5436505675315857f, 0.18374545872211456f, 0.48568081855773926f, 0.7486367225646973f, +0.09868109226226807f, 0.7805618643760681f, 0.7295793890953064f, 0.3399854302406311f, 0.05914871022105217f, 0.5526702404022217f, 0.6638706922531128f, 0.4737265706062317f, +0.7939107418060303f, 0.6063975095748901f, 0.03892761096358299f, 0.03101355768740177f, 0.9009974598884583f, 0.096387580037117f, 0.784358561038971f, 0.48309043049812317f, +0.2579365670681f, 0.05207465961575508f, 0.5037409663200378f, 0.9773632287979126f, 0.8460107445716858f, 0.9674569964408875f, 0.12829995155334473f, 0.5675376653671265f, +0.2533676028251648f, 0.6751073002815247f, 0.9993156790733337f, 0.18103396892547607f, 0.7326700687408447f, 0.20552575588226318f, 0.9412979483604431f, 0.19869178533554077f, +0.354755163192749f, 0.6944071054458618f, 0.5023896098136902f, 0.30898958444595337f, 0.12305207550525665f, 0.653984546661377f, 0.6767479181289673f, 0.7949553728103638f, +0.3043694794178009f, 0.7454448938369751f, 0.8739668726921082f, 0.9560887217521667f, 0.04924478009343147f, 0.37775281071662903f, 0.7377285361289978f, 0.7083311080932617f, +0.09763529151678085f, 0.8120577335357666f, 0.5789755582809448f, 0.3428247570991516f, 0.3304189443588257f, 0.9018877148628235f, 0.7560070753097534f, 0.2028442770242691f, +0.32727116346359253f, 0.7494356632232666f, 0.7165935039520264f, 0.12127886712551117f, 0.5273754000663757f, 0.7380316853523254f, 0.4732634723186493f, 0.7258403897285461f, +0.8152164816856384f, 0.6683850288391113f, 0.6242105960845947f, 0.5739879012107849f, 0.24692830443382263f, 0.7061614394187927f, 0.30151379108428955f, 0.20141378045082092f, +0.18605975806713104f, 0.947475016117096f, 0.06347215920686722f, 0.974093496799469f, 0.8182504177093506f, 0.9781991243362427f, 0.5787135362625122f, 0.5735978484153748f, +0.4462350606918335f, 0.9129699468612671f, 0.8899863362312317f, 0.5731551647186279f, 0.6124703884124756f, 0.45542460680007935f, 0.12654896080493927f, 0.6074938178062439f, +0.5504327416419983f, 0.979925811290741f, 0.8188679218292236f, 0.7815542221069336f, 0.7287420034408569f, 0.12161735445261002f, 0.7519457340240479f, 0.5397940874099731f, +0.7784219980239868f, 0.260416179895401f, 0.45976048707962036f, 0.16660338640213013f, 0.06492137908935547f, 0.18566171824932098f, 0.013625523075461388f, 0.16122359037399292f, +0.9066387414932251f, 0.4649258852005005f, 0.5844216346740723f, 0.7577582001686096f, 0.9378345012664795f, 0.03406324237585068f, 0.13942641019821167f, 0.9670500159263611f, +0.8671335577964783f, 0.29631033539772034f, 0.8539339303970337f, 0.07100267708301544f, 0.4967029094696045f, 0.25275182723999023f, 0.6442353129386902f, 0.1307714283466339f, +0.12230183184146881f, 0.8201109766960144f, 0.9881486892700195f, 0.46437928080558777f, 0.9687958359718323f, 0.5513514876365662f, 0.06525224447250366f, 0.19577153027057648f, +0.023920459672808647f, 0.5755379796028137f, 0.1766342669725418f, 0.188079833984375f, 0.4952547252178192f, 0.1364215761423111f, 0.6811562180519104f, 0.4013126790523529f, +0.5829911231994629f, 0.608174204826355f, 0.9535220861434937f, 0.8624703288078308f, 0.5848492383956909f, 0.6067143678665161f, 0.35131409764289856f, 0.33903953433036804f, +0.5850235819816589f, 0.7023607492446899f, 0.5574580430984497f, 0.08093267679214478f, 0.4197314381599426f, 0.3397914171218872f, 0.6930273175239563f, 0.13862209022045135f, +0.9200441241264343f, 0.12491811066865921f, 0.4302830100059509f, 0.8462346792221069f, 0.6075916886329651f, 0.9282721877098083f, 0.567664623260498f, 0.3730413615703583f, +0.33351555466651917f, 0.44914233684539795f, 0.8269515037536621f, 0.8070984482765198f, 0.5888935923576355f, 0.5748498439788818f, 0.5817112922668457f, 0.1738109290599823f, +0.7736651301383972f, 0.44259557127952576f, 0.004815960768610239f, 0.7746941447257996f, 0.30163976550102234f, 0.5671252608299255f, 0.19958536326885223f, 0.32126179337501526f, +0.7840143442153931f, 0.3941914737224579f, 0.4797866940498352f, 0.5047035217285156f, 0.0172648373991251f, 0.8394589424133301f, 0.2872298061847687f, 0.9798084497451782f, +0.21198680996894836f, 0.26373299956321716f, 0.9703330397605896f, 0.7697359919548035f, 0.7671615481376648f, 0.6798362731933594f, 0.7459176182746887f, 0.2562805712223053f, +0.7973002791404724f, 0.4125918447971344f, 0.4555307924747467f, 0.13338908553123474f, 0.1283341944217682f, 0.7814480066299438f, 0.18915843963623047f, 0.5683167576789856f, +0.8581791520118713f, 0.4963443875312805f, 0.5932249426841736f, 0.5906263589859009f, 0.17865633964538574f, 0.3099304437637329f, 0.5159228444099426f, 0.5706068277359009f, +0.28626081347465515f, 0.39739760756492615f, 0.9051046967506409f, 0.8670539259910583f, 0.9947876930236816f, 0.16744737327098846f, 0.9642038941383362f, 0.009881505742669106f, +0.5629321932792664f, 0.8046558499336243f, 0.29417285323143005f, 0.5005360245704651f, 0.8788782954216003f, 0.4523864686489105f, 0.20428714156150818f, 0.7960546612739563f, +0.2803427577018738f, 0.8711560368537903f, 0.4944838881492615f, 0.1162230521440506f, 0.9248526096343994f, 0.7936246395111084f, 0.7430911064147949f, 0.09049185365438461f, +0.9327986240386963f, 0.10867913067340851f, 0.6362585425376892f, 0.8573193550109863f, 0.4005878269672394f, 0.34170418977737427f, 0.5729016661643982f, 0.04841935634613037f, +0.21313051879405975f, 0.6143697500228882f, 0.5445208549499512f, 0.16745387017726898f, 0.4950680434703827f, 0.388339638710022f, 0.7368473410606384f, 0.326479434967041f, +0.11570894718170166f, 0.46214231848716736f, 0.9546570181846619f, 0.6970744729042053f, 0.6497443318367004f, 0.22758536040782928f, 0.24260969460010529f, 0.2961758077144623f, +0.5386770367622375f, 0.12781879305839539f, 0.5003089904785156f, 0.2167333960533142f, 0.13702985644340515f, 0.5123655796051025f, 0.5145744681358337f, 0.9870998859405518f, +0.6204931139945984f, 0.8937201499938965f, 0.4916972219944f, 0.038207411766052246f, 0.7880768179893494f, 0.7235478758811951f, 0.8052986264228821f, 0.1971258670091629f, +0.8834447860717773f, 0.3512352406978607f, 0.11903712153434753f, 0.40530648827552795f, 0.5434322357177734f, 0.6175007224082947f, 0.13288500905036926f, 0.7394198775291443f, +0.6617303490638733f, 0.527642548084259f, 0.9791761636734009f, 0.5258107781410217f, 0.6638623476028442f, 0.7337943315505981f, 0.43835580348968506f, 0.32022804021835327f, +0.130057230591774f, 0.571217954158783f, 0.9689761996269226f, 0.9157943725585938f, 0.9851599931716919f, 0.834844172000885f, 0.0023132632486522198f, 0.6871779561042786f, +0.6879017949104309f, 0.2741418182849884f, 0.9996921420097351f, 0.41700756549835205f, 0.8811731934547424f, 0.11355187743902206f, 0.8728336691856384f, 0.11598354578018188f, +0.651154637336731f, 0.6571816205978394f, 0.24606400728225708f, 0.8363072872161865f, 0.11506235599517822f, 0.15666042268276215f, 0.9671286344528198f, 0.3565927743911743f, +0.8735180497169495f, 0.016397394239902496f, 0.7078765034675598f, 0.8060152530670166f, 0.5664067268371582f, 0.22179915010929108f, 0.9533355236053467f, 0.9530671238899231f, +0.2619509696960449f, 0.24183449149131775f, 0.8241388201713562f, 0.06652627885341644f, 0.7515947818756104f, 0.6563743948936462f, 0.4220286011695862f, 0.1689966917037964f, +0.5728515386581421f, 0.8524338006973267f, 0.8990445137023926f, 0.7502285838127136f, 0.7291437983512878f, 0.26931047439575195f, 0.95355623960495f, 0.4349973201751709f, +0.032639279961586f, 0.7458638548851013f, 0.9126630425453186f, 0.33612382411956787f, 0.719209611415863f, 0.9582226276397705f, 0.8723844885826111f, 0.1556202918291092f, +0.422156423330307f, 0.7993345260620117f, 0.3564305603504181f, 0.08133722841739655f, 0.5791655778884888f, 0.919888436794281f, 0.7318750023841858f, 0.936819314956665f, +0.5289539098739624f, 0.3249911665916443f, 0.21055588126182556f, 0.3438588082790375f, 0.4854280650615692f, 0.19423095881938934f, 0.7375938296318054f, 0.11540861427783966f, +0.3054908514022827f, 0.8933079242706299f, 0.8284708857536316f, 0.6071187257766724f, 0.3520466089248657f, 0.16962678730487823f, 0.8069698810577393f, 0.7945840954780579f, +0.07045712321996689f, 0.9500342011451721f, 0.00993375014513731f, 0.34965959191322327f, 0.13530337810516357f, 0.6456528306007385f, 0.6668753027915955f, 0.8024968504905701f, +0.7852611541748047f, 0.2449660748243332f, 0.6468738317489624f, 0.237071231007576f, 0.8555198907852173f, 0.7594578266143799f, 0.6875103116035461f, 0.4729454219341278f, +0.4499302804470062f, 0.9038523435592651f, 0.9518172740936279f, 0.78531414270401f, 0.18709176778793335f, 0.04596502333879471f, 0.73312908411026f, 0.6979863047599792f, +0.9506227374076843f, 0.01111435703933239f, 0.019640956073999405f, 0.3760083317756653f, 0.8061020374298096f, 0.783054530620575f, 0.7802320122718811f, 0.11259555071592331f, +0.3692895770072937f, 0.05617440864443779f, 0.9444665908813477f, 0.49596107006073f, 0.15758536756038666f, 0.7721176147460938f, 0.3639339804649353f, 0.6532335877418518f, +0.16572080552577972f, 0.11375558376312256f, 0.5415387749671936f, 0.13390648365020752f, 0.760696291923523f, 0.8025068044662476f, 0.8330434560775757f, 0.11015982180833817f, +0.8315518498420715f, 0.7827228307723999f, 0.9284933805465698f, 0.07606599479913712f, 0.02194802276790142f, 0.8250427842140198f, 0.4770953357219696f, 0.26606109738349915f, +0.2773720324039459f, 0.6171050071716309f, 0.5602074265480042f, 0.310320109128952f, 0.12167254835367203f, 0.8626371026039124f, 0.8341390490531921f, 0.11076754331588745f, +0.9915847182273865f, 0.7575728893280029f, 0.4444611966609955f, 0.35475805401802063f, 0.39391589164733887f, 0.3372107148170471f, 0.4209432601928711f, 0.6455011367797852f, +0.9506304264068604f, 0.05802709236741066f, 0.5926901698112488f, 0.43190333247184753f, 0.6507312059402466f, 0.8814119696617126f, 0.6394358277320862f, 0.7500373721122742f, +0.24510887265205383f, 0.1604614406824112f, 0.2710249722003937f, 0.030619869008660316f, 0.5632047653198242f, 0.09311731159687042f, 0.23730763792991638f, 0.8432347774505615f, +0.13739831745624542f, 0.797083854675293f, 0.2231856882572174f, 0.4898090362548828f, 0.3290492296218872f, 0.4779263138771057f, 0.5603559613227844f, 0.8978231549263f, +0.6517666578292847f, 0.6697944402694702f, 0.2607780396938324f, 0.2577872574329376f, 0.16425038874149323f, 0.44346755743026733f, 0.4965320825576782f, 0.9944202303886414f, +0.10503388196229935f, 0.46109169721603394f, 0.8924588561058044f, 0.9064931273460388f, 0.44794297218322754f, 0.37191522121429443f, 0.5915117859840393f, 0.38609451055526733f, +0.5458146929740906f, 0.8709153532981873f, 0.25860795378685f, 0.8753332495689392f, 0.07240092754364014f, 0.8593654632568359f, 0.6924927234649658f, 0.606839120388031f, +0.42319226264953613f, 0.11704476177692413f, 0.23712466657161713f, 0.5729160308837891f, 0.7306275963783264f, 0.32265228033065796f, 0.9298008680343628f, 0.35188013315200806f, +0.9900370836257935f, 0.4728459417819977f, 0.4155484735965729f, 0.8865453004837036f, 0.44523173570632935f, 0.8708046078681946f, 0.15227527916431427f, 0.09354590624570847f, +0.4901924729347229f, 0.4819895029067993f, 0.3400535583496094f, 0.7390618324279785f, 0.8243891000747681f, 0.9803535342216492f, 0.5582290291786194f, 0.40355926752090454f, +0.09764809906482697f, 0.12668919563293457f, 0.43968287110328674f, 0.14145569503307343f, 0.9779887795448303f, 0.2675991654396057f, 0.0450579859316349f, 0.6149032711982727f, +0.2877633571624756f, 0.1560356765985489f, 0.874112069606781f, 0.6648551225662231f, 0.8097832202911377f, 0.19382552802562714f, 0.5403223037719727f, 0.9374005198478699f, +0.3227653205394745f, 0.5581836700439453f, 0.13331985473632812f, 0.8931854963302612f, 0.7893394827842712f, 0.48350635170936584f, 0.0785662978887558f, 0.7147420048713684f, +0.13276365399360657f, 0.8135690093040466f, 0.45733189582824707f, 0.25390350818634033f, 0.9559639096260071f, 0.6189452409744263f, 0.5631141662597656f, 0.8724851012229919f, +0.4355151951313019f, 0.5275893807411194f, 0.05799226462841034f, 0.3670835793018341f, 0.4016866981983185f, 0.450832337141037f, 0.9946516752243042f, 0.4210653305053711f, +7.887715014476271e-07f, 0.8541030883789062f, 0.2160603255033493f, 0.7456720471382141f, 0.8124228119850159f, 0.3380959928035736f, 0.9837729930877686f, 0.22580140829086304f, +0.7103567123413086f, 0.4887848198413849f, 0.34382548928260803f, 0.5684952139854431f, 0.47933200001716614f, 0.4802161455154419f, 0.6869224309921265f, 0.8312517404556274f, +0.934639036655426f, 0.6697928309440613f, 0.9587077498435974f, 0.2900812029838562f, 0.9091918468475342f, 0.23299343883991241f, 0.6400840282440186f, 0.8585448861122131f, +0.18274539709091187f, 0.32746434211730957f, 0.27992501854896545f, 0.33372849225997925f, 0.8711749911308289f, 0.4681583046913147f, 0.8914896845817566f, 0.6872515678405762f, +0.4696442484855652f, 0.10438890755176544f, 0.8393059968948364f, 0.6653679013252258f, 0.12052567303180695f, 0.877636194229126f, 0.5143945217132568f, 0.2523535192012787f, +0.32636651396751404f, 0.6270347833633423f, 0.986610472202301f, 0.34975433349609375f, 0.22596561908721924f, 0.7814382910728455f, 0.5057170987129211f, 0.06352311372756958f, +0.4978863000869751f, 0.8028119206428528f, 0.47054025530815125f, 0.4747001528739929f, 0.2692789137363434f, 0.6716471910476685f, 0.12972958385944366f, 0.07009240984916687f, +0.8688809871673584f, 0.4880139231681824f, 0.3796076774597168f, 0.2547514736652374f, 0.6151097416877747f, 0.0027393850032240152f, 0.2823256552219391f, 0.07011841237545013f, +0.5427374839782715f, 0.8083158731460571f, 0.5136790871620178f, 0.662300169467926f, 0.8449565172195435f, 0.4629906713962555f, 0.8125270009040833f, 0.5958014726638794f, +0.03733392432332039f, 0.4368106424808502f, 0.08562129735946655f, 0.6770259141921997f, 0.7384071946144104f, 0.5720245242118835f, 0.4488380253314972f, 0.7992932200431824f, +0.6756013631820679f, 0.8400331735610962f, 0.482615202665329f, 0.5616896152496338f, 0.9739734530448914f, 0.8826647400856018f, 0.2443259209394455f, 0.7600107192993164f, +0.1736074686050415f, 0.9260071516036987f, 0.10023780167102814f, 0.19203713536262512f, 0.3900620937347412f, 0.8807796835899353f, 0.9341383576393127f, 0.17450197041034698f, +0.03830733522772789f, 0.467383474111557f, 0.9867992401123047f, 0.12918299436569214f, 0.22675339877605438f, 0.7625183463096619f, 0.38181746006011963f, 0.18854810297489166f, +0.4433615803718567f, 0.8599392771720886f, 0.22241930663585663f, 0.26387330889701843f, 0.7401047348976135f, 0.08752825111150742f, 0.3886156976222992f, 0.8862602710723877f, +0.10759468376636505f, 0.8065922856330872f, 0.4265038073062897f, 0.5665184259414673f, 0.9971442818641663f, 0.7255457639694214f, 0.3277241289615631f, 0.20892179012298584f, +0.35783249139785767f, 0.692800760269165f, 0.4424561560153961f, 0.32427558302879333f, 0.4699122905731201f, 0.44944441318511963f, 0.6367751955986023f, 0.8327056765556335f, +0.9190241694450378f, 0.829328179359436f, 0.11291816830635071f, 0.2404218316078186f, 0.3530678153038025f, 0.6548080444335938f, 0.15878050029277802f, 0.5504274964332581f, +0.6967619061470032f, 0.1611717939376831f, 0.9084367156028748f, 0.6198029518127441f, 0.788936197757721f, 0.9869368672370911f, 0.4250756502151489f, 0.837610125541687f, +0.6317463517189026f, 0.7586085796356201f, 0.04653555527329445f, 0.7962476015090942f, 0.0511687733232975f, 0.27939143776893616f, 0.12174186110496521f, 0.09042908251285553f, +0.8002265095710754f, 0.42782002687454224f, 0.7504333257675171f, 0.8085069060325623f, 0.7888425588607788f, 0.6831537485122681f, 0.4000309109687805f, 0.31494444608688354f, +0.8213080167770386f, 0.9347108006477356f, 0.9004940390586853f, 0.3027322292327881f, 0.31088346242904663f, 0.993689239025116f, 0.1992328017950058f, 0.7095020413398743f, +0.2836439907550812f, 0.994194507598877f, 0.32029175758361816f, 0.06786496937274933f, 0.0628569945693016f, 0.330678254365921f, 0.3369627296924591f, 0.018513992428779602f, +0.22201529145240784f, 0.10567035526037216f, 0.9576055407524109f, 0.1421731859445572f, 0.7952075004577637f, 0.849292516708374f, 0.44460803270339966f, 0.4581003189086914f, +0.7214530110359192f, 0.6745737791061401f, 0.13309849798679352f, 0.09414042532444f, 0.6303117275238037f, 0.3453865945339203f, 0.9494759440422058f, 0.3998498320579529f, +0.5565493702888489f, 0.6154808402061462f, 0.9229327440261841f, 0.006698463577777147f, 0.6401299834251404f, 0.824556827545166f, 0.24411432445049286f, 0.6145719885826111f, +0.7615832686424255f, 0.09702487289905548f, 0.9176321029663086f, 0.8952127695083618f, 0.7056573629379272f, 0.355533242225647f, 0.9431501030921936f, 0.413687527179718f, +0.9224329590797424f, 0.5856985449790955f, 0.5788895487785339f, 0.9155356287956238f, 0.29501616954803467f, 0.2194913923740387f, 0.5048999786376953f, 0.2739117741584778f, +0.9205869436264038f, 0.1703435629606247f, 0.22483205795288086f, 0.7968289256095886f, 0.21160882711410522f, 0.47389402985572815f, 0.7769662141799927f, 0.7457379102706909f, +0.26933449506759644f, 0.845477283000946f, 0.32645073533058167f, 0.9610139727592468f, 0.251259982585907f, 0.5882113575935364f, 0.3325682580471039f, 0.8934418559074402f, +0.48526468873023987f, 0.9903740286827087f, 0.9867384433746338f, 0.5972373485565186f, 0.1518140435218811f, 0.1770695149898529f, 0.7532751560211182f, 0.2654804587364197f, +0.8842892050743103f, 0.5759420394897461f, 0.8992088437080383f, 0.8714014291763306f, 0.13439473509788513f, 0.644649863243103f, 0.49163535237312317f, 0.33371374011039734f, +0.5067132115364075f, 0.7378621101379395f, 0.09788557142019272f, 0.33442336320877075f, 0.8652764558792114f, 0.1042202040553093f, 0.5450566411018372f, 0.47439688444137573f, +0.6101008057594299f, 0.42990827560424805f, 0.5321069955825806f, 0.6050556898117065f, 0.9298257231712341f, 0.3664095401763916f, 0.36866873502731323f, 0.6029641032218933f, +0.2644102871417999f, 0.6833905577659607f, 0.34953573346138f, 0.5286375880241394f, 0.08800871670246124f, 0.825134813785553f, 0.8203194737434387f, 0.3648400902748108f, +0.9169591665267944f, 0.49634936451911926f, 0.22286902368068695f, 0.2052152454853058f, 0.999752402305603f, 0.3202189803123474f, 0.6790066361427307f, 0.4110521078109741f, +0.5325661897659302f, 0.23516011238098145f, 0.07926274836063385f, 0.7427093982696533f, 0.9088380336761475f, 0.5048372149467468f, 0.7723916172981262f, 0.9181632399559021f, +0.9621235728263855f, 0.3224213719367981f, 0.7938879132270813f, 0.9905560612678528f, 0.6898850798606873f, 0.014251353219151497f, 0.8755464553833008f, 0.031353142112493515f, +0.0659395083785057f, 0.3625277578830719f, 0.9422827363014221f, 0.8754749894142151f, 0.8441401720046997f, 0.6408196091651917f, 0.038356710225343704f, 0.6780201196670532f, +0.7597671151161194f, 0.1563536375761032f, 0.8769651651382446f, 0.8034953474998474f, 0.9568591713905334f, 0.7946056723594666f, 0.9002170562744141f, 0.9596739411354065f, +0.6074454188346863f, 0.9542087912559509f, 0.5297446846961975f, 0.39090126752853394f, 0.9635128974914551f, 0.7405064702033997f, 0.3046647012233734f, 0.9377668499946594f, +0.15173065662384033f, 0.7840090990066528f, 0.7375208735466003f, 0.7420248985290527f, 0.20991943776607513f, 0.15176503360271454f, 0.08386190980672836f, 0.16946791112422943f, +0.9454197883605957f, 0.9573321342468262f, 0.28108975291252136f, 0.9203330874443054f, 0.04371753707528114f, 0.15269185602664948f, 0.7390394806861877f, 0.9166892766952515f, +0.9580532312393188f, 0.6860169172286987f, 0.08069466054439545f, 0.6800984144210815f, 0.06703665852546692f, 0.12249615043401718f, 0.9112727642059326f, 0.0019528549164533615f, +0.5358595252037048f, 0.8509142398834229f, 0.7215450406074524f, 0.9876553416252136f, 0.4294898211956024f, 0.3833039700984955f, 0.4721928834915161f, 0.32671836018562317f, +0.0798828974366188f, 0.38971540331840515f, 0.3816215991973877f, 0.797540009021759f, 0.6569390892982483f, 0.7284756898880005f, 0.6902892589569092f, 0.2094709426164627f, +0.6794593334197998f, 0.8641424179077148f, 0.0351957269012928f, 0.21014465391635895f, 0.42334869503974915f, 0.7885995507240295f, 0.7771583795547485f, 0.21999886631965637f, +0.33726078271865845f, 0.061223678290843964f, 0.19355157017707825f, 0.46073904633522034f, 0.9590259790420532f, 0.49381330609321594f, 0.28380540013313293f, 0.9256012439727783f, +0.5689176321029663f, 0.37741324305534363f, 0.31296440958976746f, 0.1492830365896225f, 0.06356851756572723f, 0.34800729155540466f, 0.694526195526123f, 0.1887173056602478f, +0.8906269073486328f, 0.4754449129104614f, 0.35915642976760864f, 0.09865672886371613f, 0.15012386441230774f, 0.7890955805778503f, 0.7627100348472595f, 0.4604949653148651f, +0.7396094799041748f, 0.11503728479146957f, 0.9728178381919861f, 0.4958116114139557f, 0.1202896386384964f, 0.5280640125274658f, 0.84732586145401f, 0.1127210333943367f, +0.8346748352050781f, 0.6678552031517029f, 0.7419292330741882f, 0.8236429691314697f, 0.8921271562576294f, 0.4653903841972351f, 0.43495458364486694f, 0.3398858904838562f, +0.8895378112792969f, 0.6935415863990784f, 0.5151411294937134f, 0.24598179757595062f, 0.007333091460168362f, 0.06392015516757965f, 0.6124187111854553f, 0.7916722893714905f, +0.9932228922843933f, 0.6331550478935242f, 0.03209998831152916f, 0.024868125095963478f, 0.3508923649787903f, 0.6904819011688232f, 0.3949164152145386f, 0.4598039388656616f, +0.1793266385793686f, 0.6620334982872009f, 0.11043562740087509f, 0.7833656072616577f, 0.4543698728084564f, 0.7666049599647522f, 0.1386057436466217f, 0.6542176008224487f, +0.7375099658966064f, 0.5273168683052063f, 0.49608537554740906f, 0.9166656136512756f, 0.5441379547119141f, 0.21812793612480164f, 0.6574749946594238f, 0.1441103219985962f, +0.888416588306427f, 0.8544769287109375f, 0.5188562870025635f, 0.4441152513027191f, 0.8473835587501526f, 0.6339836716651917f, 0.9446626901626587f, 0.43194419145584106f, +0.8873464465141296f, 0.08678117394447327f, 0.853364884853363f, 0.8090408444404602f, 0.7518602013587952f, 0.9697545766830444f, 0.39387303590774536f, 0.7579564452171326f, +0.9540557265281677f, 0.6903772950172424f, 0.4806625247001648f, 0.20673932135105133f, 0.5804774761199951f, 0.5610354542732239f, 0.09954587370157242f, 0.9512192606925964f, +0.5132060647010803f, 0.6418009400367737f, 0.8692879676818848f, 0.39628392457962036f, 0.8204253911972046f, 0.028668878600001335f, 0.9399124979972839f, 0.8985626101493835f, +0.6818106770515442f, 0.42003941535949707f, 0.8013480305671692f, 0.9985883831977844f, 0.9930201172828674f, 0.6519546508789062f, 0.018269997090101242f, 0.11311595886945724f, +0.4352565407752991f, 0.3040957748889923f, 0.8653754591941833f, 0.09436821937561035f, 0.5976957678794861f, 0.8868577480316162f, 0.8119410872459412f, 0.8002337217330933f, +0.3968881666660309f, 0.14075948297977448f, 0.6308742761611938f, 0.9083505272865295f, 0.31335797905921936f, 0.905208170413971f, 0.26880764961242676f, 0.4077860414981842f, +0.46080729365348816f, 0.8883296847343445f, 0.6165393590927124f, 0.510818362236023f, 0.3476409316062927f, 0.39605507254600525f, 0.9668956398963928f, 0.42855194211006165f, +0.8225723505020142f, 0.7947043180465698f, 0.8102980852127075f, 0.6875920295715332f, 0.026064494624733925f, 0.9292138814926147f, 0.37759506702423096f, 0.910612165927887f, +0.3439277112483978f, 0.322165310382843f, 0.4016299545764923f, 0.3618631660938263f, 0.609627366065979f, 0.6057024598121643f, 0.23508238792419434f, 0.9679921269416809f, +0.9155517816543579f, 0.12234237045049667f, 0.5270295739173889f, 0.028615009039640427f, 0.27442359924316406f, 0.29675984382629395f, 0.9671427011489868f, 0.5473060607910156f, +0.3932410776615143f, 0.4070417881011963f, 0.9893831610679626f, 0.5636894106864929f, 0.27340272068977356f, 0.09576454013586044f, 0.8613439798355103f, 0.29371392726898193f, +0.44903847575187683f, 0.16443899273872375f, 0.418624609708786f, 0.32949182391166687f, 0.31969818472862244f, 0.5701483488082886f, 0.41293537616729736f, 0.5480596423149109f, +0.983617901802063f, 0.089063860476017f, 0.4136318266391754f, 0.8449324369430542f, 0.37359127402305603f, 0.28205597400665283f, 0.4955946207046509f, 0.014512591063976288f, +0.5060608386993408f, 0.540215253829956f, 0.07456399500370026f, 0.8326571583747864f, 0.2277354747056961f, 0.5879802107810974f, 0.6071314215660095f, 0.8390501141548157f, +0.19313186407089233f, 0.8728315830230713f, 0.7319994568824768f, 0.27546483278274536f, 0.6483020186424255f, 0.736356258392334f, 0.35687586665153503f, 0.6362573504447937f, +0.8543369174003601f, 0.17810139060020447f, 0.07990249246358871f, 0.765532374382019f, 0.6994825005531311f, 0.7821560502052307f, 0.9114612936973572f, 0.5254482626914978f, +0.19407117366790771f, 0.6142780184745789f, 0.5553027987480164f, 0.87235027551651f, 0.9759262800216675f, 0.5900736451148987f, 0.5451834797859192f, 0.06427130103111267f, +0.5055491328239441f, 0.4138340353965759f, 0.9410112500190735f, 0.3618324398994446f, 0.257572203874588f, 0.06012037396430969f, 0.06739724427461624f, 0.4532567262649536f, +0.45117852091789246f, 0.8166263699531555f, 0.7774461507797241f, 0.29948893189430237f, 0.7983455061912537f, 0.9034301042556763f, 0.34650495648384094f, 0.686747133731842f, +0.2487306296825409f, 0.6915072798728943f, 0.17571547627449036f, 0.309741735458374f, 0.8662810325622559f, 0.41077741980552673f, 0.7633088827133179f, 0.7760803699493408f, +0.9268457293510437f, 0.544538140296936f, 0.11704976111650467f, 0.6246239542961121f, 0.9342882633209229f, 0.9967560768127441f, 0.2994381785392761f, 0.21850290894508362f, +0.14982759952545166f, 0.7049227952957153f, 0.3845650851726532f, 0.10011279582977295f, 0.2694336771965027f, 0.3178895115852356f, 0.7670944929122925f, 0.22044600546360016f, +0.9366405010223389f, 0.7310611605644226f, 0.6388814449310303f, 0.17463158071041107f, 0.37106558680534363f, 0.4239574074745178f, 0.5106035470962524f, 0.9199612736701965f, +0.8492192029953003f, 0.4557889401912689f, 0.0010895697632804513f, 0.7180312275886536f, 0.41943711042404175f, 0.7423214912414551f, 0.6517560482025146f, 0.9434961080551147f, +0.8061683773994446f, 0.8338288068771362f, 0.7504538297653198f, 0.7938638925552368f, 0.7227733135223389f, 0.9455616474151611f, 0.5128595232963562f, 0.031959328800439835f, +0.5221807956695557f, 0.7185001969337463f, 0.06618569791316986f, 0.3623272478580475f, 0.4606306552886963f, 0.5194317698478699f, 0.31136757135391235f, 0.7773078680038452f, +0.29924654960632324f, 0.835967481136322f, 0.7503537535667419f, 0.4612090289592743f, 0.708999514579773f, 0.2578631341457367f, 0.2383056879043579f, 0.2029794454574585f, +0.12016255408525467f, 0.6531091332435608f, 0.670815646648407f, 0.1510055810213089f, 0.17441879212856293f, 0.8076526522636414f, 0.5158957839012146f, 0.13179466128349304f, +0.6233305335044861f, 0.8064240217208862f, 0.2072640359401703f, 0.4167211651802063f, 0.07208359986543655f, 0.6585187315940857f, 0.2113998532295227f, 0.749744713306427f, +0.6928607225418091f, 0.9979594349861145f, 0.3814736008644104f, 0.9145328402519226f, 0.15142925083637238f, 0.3465781509876251f, 0.6792379021644592f, 0.8971709609031677f, +0.29360851645469666f, 0.04930815473198891f, 0.8803437948226929f, 0.16929438710212708f, 0.6544999480247498f, 0.15578968822956085f, 0.10776164382696152f, 0.7070832252502441f, +0.20927023887634277f, 0.9663387537002563f, 0.733451783657074f, 0.6102795004844666f, 0.9235005378723145f, 0.511393666267395f, 0.8513396382331848f, 0.4205035865306854f, +0.7686656713485718f, 0.6603308320045471f, 0.8578159213066101f, 0.6115368604660034f, 0.6571130752563477f, 0.4136389493942261f, 0.07184109091758728f, 0.7515209913253784f, +0.7224106192588806f, 0.9856852293014526f, 0.912735641002655f, 0.8173191547393799f, 0.8270341157913208f, 0.28097325563430786f, 0.5628630518913269f, 0.674513041973114f, +0.26607030630111694f, 0.7725901007652283f, 0.5698130130767822f, 0.8937820196151733f, 0.32933539152145386f, 0.7020376920700073f, 0.3279774785041809f, 0.8663572669029236f, +0.09438329935073853f, 0.6691603064537048f, 0.015575517900288105f, 0.59256911277771f, 0.23477396368980408f, 0.9032467007637024f, 0.06742169708013535f, 0.24021132290363312f, +0.2976648211479187f, 0.3845965564250946f, 0.6087207794189453f, 0.7543524503707886f, 0.2367815226316452f, 0.6509885191917419f, 0.7808366417884827f, 0.14618733525276184f, +0.6255315542221069f, 0.48752859234809875f, 0.7753377556800842f, 0.27028337121009827f, 0.6551175713539124f, 0.479621022939682f, 0.6514650583267212f, 0.5621250867843628f, +0.9649907946586609f, 0.3469281494617462f, 0.6550408601760864f, 0.11066647619009018f, 0.25758662819862366f, 0.31445029377937317f, 0.29422977566719055f, 0.6401029825210571f, +0.7870473265647888f, 0.37173885107040405f, 0.9605351686477661f, 0.7857712507247925f, 0.9342317581176758f, 0.1720503717660904f, 0.7364431619644165f, 0.4261755049228668f, +0.10382754355669022f, 0.2342127561569214f, 0.7576867938041687f, 0.2910572290420532f, 0.441358357667923f, 0.626763641834259f, 0.32997024059295654f, 0.6615156531333923f, +0.7040537595748901f, 0.8915985822677612f, 0.7936193943023682f, 0.717823326587677f, 0.5599850416183472f, 0.6644544005393982f, 0.8887106776237488f, 0.8691815733909607f, +0.8922967910766602f, 0.3241478204727173f, 0.5748348236083984f, 0.8921335339546204f, 0.7053458094596863f, 0.894144594669342f, 0.9697031378746033f, 0.5186036825180054f, +0.30067178606987f, 0.6881906986236572f, 0.9944108128547668f, 0.7520749568939209f, 0.1516459733247757f, 0.4452453851699829f, 0.24668952822685242f, 0.2339237630367279f, +0.9370078444480896f, 0.9178197979927063f, 0.8433088660240173f, 0.6019798517227173f, 0.22881625592708588f, 0.522382915019989f, 0.7711188793182373f, 0.24895022809505463f, +0.6053511500358582f, 0.5887079238891602f, 0.17650535702705383f, 0.010515542700886726f, 0.7131238579750061f, 0.26964515447616577f, 0.8239210247993469f, 0.9118587374687195f, +0.5473196506500244f, 0.9824828505516052f, 0.3322821855545044f, 0.5556163191795349f, 0.0348210372030735f, 0.5009533762931824f, 0.5962473154067993f, 0.1665692925453186f, +0.7790480852127075f, 0.16297456622123718f, 0.6379625201225281f, 0.0516546405851841f, 0.33851683139801025f, 0.10361547768115997f, 0.3637971878051758f, 0.769570529460907f, +0.7517220973968506f, 0.5201272964477539f, 0.047383859753608704f, 0.023880042135715485f, 0.243942528963089f, 0.0006813387153670192f, 0.44803574681282043f, 0.07465188205242157f, +0.15981565415859222f, 0.41611725091934204f, 0.11108271032571793f, 0.16403308510780334f, 0.9385270476341248f, 0.4742244780063629f, 0.554088830947876f, 0.11591747403144836f, +0.012466268613934517f, 0.9313414692878723f, 0.11418253928422928f, 0.8099555373191833f, 0.4535142481327057f, 0.9763150215148926f, 0.28183069825172424f, 0.48187732696533203f, +0.6466158032417297f, 0.06343511492013931f, 0.38814011216163635f, 0.3858523368835449f, 0.5262462496757507f, 0.05897613987326622f, 0.6136128306388855f, 0.5352391004562378f, +0.9027418494224548f, 0.9529982209205627f, 0.4565548598766327f, 0.1606408655643463f, 0.8679718971252441f, 0.7169548869132996f, 0.4936753809452057f, 0.1243978962302208f, +0.22138695418834686f, 0.07291459292173386f, 0.18948225677013397f, 0.006202835123986006f, 0.13777963817119598f, 0.4192446172237396f, 0.705320417881012f, 0.4690644145011902f, +0.47293081879615784f, 0.43105050921440125f, 0.9128726720809937f, 0.002929156180471182f, 0.5520408153533936f, 0.5679441690444946f, 0.9712805151939392f, 0.030546406283974648f, +0.45485183596611023f, 0.29578936100006104f, 0.7838848233222961f, 0.6154628992080688f, 0.7859814167022705f, 0.29208821058273315f, 0.7559449076652527f, 0.31131428480148315f, +0.5035984516143799f, 0.7649044990539551f, 0.781768798828125f, 0.4323013722896576f, 0.35560518503189087f, 0.6569026112556458f, 0.35001635551452637f, 0.6431300044059753f, +0.8236377835273743f, 0.45004385709762573f, 0.08940188586711884f, 0.45543304085731506f, 0.9162799119949341f, 0.2049531638622284f, 0.35953250527381897f, 0.7952048778533936f, +0.06880543380975723f, 0.40265846252441406f, 0.8823071122169495f, 0.3987633287906647f, 0.8957613110542297f, 0.04720596969127655f, 0.18355660140514374f, 0.9383682012557983f, +0.7220950722694397f, 0.06845705956220627f, 0.7291759848594666f, 0.161240354180336f, 0.2116161584854126f, 0.2965734302997589f, 0.542681872844696f, 0.5904130935668945f, +0.5739909410476685f, 0.4849373698234558f, 0.7428868412971497f, 0.4627327620983124f, 0.7150166630744934f, 0.010664097033441067f, 0.7464138865470886f, 0.07763678580522537f, +0.025492554530501366f, 0.8025948405265808f, 0.47811806201934814f, 0.994354784488678f, 0.049337711185216904f, 0.027134034782648087f, 0.03056679479777813f, 0.8664189577102661f, +0.10728238523006439f, 0.7495890259742737f, 0.5429883599281311f, 0.47212284803390503f, 0.5529829859733582f, 0.7273911237716675f, 0.3368346393108368f, 0.8170921206474304f, +0.6470485329627991f, 0.9689925312995911f, 0.3394399583339691f, 0.15921461582183838f, 0.6389007568359375f, 0.9096766710281372f, 0.14295662939548492f, 0.6136378645896912f, +0.3723721504211426f, 0.5930810570716858f, 0.6625620722770691f, 0.16653193533420563f, 0.17949694395065308f, 0.2514705955982208f, 0.23739926517009735f, 0.05678822100162506f, +0.023354575037956238f, 0.019361507147550583f, 0.8454242944717407f, 0.7843014597892761f, 0.8935830593109131f, 0.9719927906990051f, 0.4184721112251282f, 0.23417450487613678f, +0.9915633201599121f, 0.38607069849967957f, 0.38547760248184204f, 0.018606482073664665f, 0.1361943632364273f, 0.8951467871665955f, 0.06350988149642944f, 0.3145713210105896f, +0.8803032636642456f, 0.42700526118278503f, 0.12404194474220276f, 0.618507981300354f, 0.7229433655738831f, 0.6112266182899475f, 0.5647586584091187f, 0.9245401620864868f, +0.7191651463508606f, 0.7330725193023682f, 0.9021559357643127f, 0.8984072804450989f, 0.6982421278953552f, 0.5399530529975891f, 0.513623058795929f, 0.7786931395530701f, +0.9439848065376282f, 0.010513758286833763f, 0.3061787486076355f, 0.03625674918293953f, 0.09499358385801315f, 0.8966212868690491f, 0.5314120650291443f, 0.9911163449287415f, +0.6685444712638855f, 0.9268480539321899f, 0.7515220046043396f, 0.9965947866439819f, 0.5392356514930725f, 0.6661189198493958f, 0.600801408290863f, 0.36350002884864807f, +0.22271960973739624f, 0.09638461470603943f, 0.24822446703910828f, 0.6253341436386108f, 0.9112716913223267f, 0.11901429295539856f, 0.5570023655891418f, 0.02373410202562809f, +0.39532193541526794f, 0.29616907238960266f, 0.9405421614646912f, 0.6407197713851929f, 0.33353492617607117f, 0.8935286402702332f, 0.779824435710907f, 0.15848083794116974f, +0.10525475442409515f, 0.9742811918258667f, 0.8830500841140747f, 0.7445805668830872f, 0.9296378493309021f, 0.39434516429901123f, 0.18350256979465485f, 0.5309868454933167f, +0.9039579629898071f, 0.9796327352523804f, 0.5537498593330383f, 0.3297644555568695f, 0.5233463644981384f, 0.7386770248413086f, 0.4720460772514343f, 0.535220742225647f, +0.28591084480285645f, 0.2934725880622864f, 0.25150397419929504f, 0.9754921793937683f, 0.8410500288009644f, 0.48066285252571106f, 0.9462727904319763f, 0.8687577247619629f, +0.6764662265777588f, 0.9645603895187378f, 0.2878885567188263f, 0.114853635430336f, 0.33012595772743225f, 0.962824821472168f, 0.3364775776863098f, 0.05895392596721649f, +0.8453137874603271f, 0.12239005416631699f, 0.8456758856773376f, 0.550176203250885f, 0.19149811565876007f, 0.2075681835412979f, 0.7839028835296631f, 0.7056294679641724f, +0.2160443365573883f, 0.63116854429245f, 0.187175452709198f, 0.7601271271705627f, 0.9443473815917969f, 0.762348473072052f, 0.6665814518928528f, 0.8288101553916931f, +0.44426846504211426f, 0.5097441673278809f, 0.7188343405723572f, 0.1965547651052475f, 0.44298744201660156f, 0.1764513999223709f, 0.3955424726009369f, 0.7599759101867676f, +0.6065437197685242f, 0.09719786047935486f, 0.9230111241340637f, 0.2116234004497528f, 0.6106765866279602f, 0.8281345367431641f, 0.1967659294605255f, 0.6048552989959717f, +0.3798277974128723f, 0.5861218571662903f, 0.40000247955322266f, 0.15895646810531616f, 0.007615493610501289f, 0.0992257222533226f, 0.24480530619621277f, 0.6262526512145996f, +0.4474705755710602f, 0.23543491959571838f, 0.6851174235343933f, 0.8597662448883057f, 0.43370765447616577f, 0.14056967198848724f, 0.38241469860076904f, 0.5805016160011292f, +0.12321428954601288f, 0.2956579923629761f, 0.46441560983657837f, 0.3043314516544342f, 0.18991224467754364f, 0.33680588006973267f, 0.5511821508407593f, 0.44826817512512207f, +0.680637776851654f, 0.24552275240421295f, 0.15188470482826233f, 0.32563602924346924f, 0.18355800211429596f, 0.039246540516614914f, 0.7509446144104004f, 0.6882036328315735f, +0.41201984882354736f, 0.7266331315040588f, 0.02447059378027916f, 0.03945178911089897f, 0.4709547758102417f, 0.9140299558639526f, 0.2978115379810333f, 0.6624518036842346f, +0.9578478336334229f, 0.7780820727348328f, 0.13610054552555084f, 0.8035439252853394f, 0.9606345891952515f, 0.7614472508430481f, 0.8771713376045227f, 0.010891108773648739f, +0.4402046203613281f, 0.3952431082725525f, 0.4774108827114105f, 0.08803325146436691f, 0.2536296248435974f, 0.0719885528087616f, 0.11820362508296967f, 0.7308667898178101f, +0.45429015159606934f, 0.9960500597953796f, 0.8816133737564087f, 0.9975641965866089f, 0.4384614825248718f, 0.16834811866283417f, 0.4946043789386749f, 0.3721291720867157f, +0.48161616921424866f, 0.3806585371494293f, 0.13128066062927246f, 0.6165496706962585f, 0.38906365633010864f, 0.2735809087753296f, 0.9191251397132874f, 0.4406042993068695f, +0.37680336833000183f, 0.10620133578777313f, 0.40601232647895813f, 0.03029605560004711f, 0.24127110838890076f, 0.46875056624412537f, 0.42669665813446045f, 0.776666522026062f, +0.46304595470428467f, 0.692110538482666f, 0.18319782614707947f, 0.9026079773902893f, 0.7391995787620544f, 0.9706639051437378f, 0.9513877034187317f, 0.1330466866493225f, +0.11231746524572372f, 0.9179990291595459f, 0.3147898018360138f, 0.32937106490135193f, 0.9932311177253723f, 0.7408031225204468f, 0.8900637626647949f, 0.924409031867981f, +0.6342147588729858f, 0.12289255857467651f, 0.06028951704502106f, 0.19226719439029694f, 0.42370396852493286f, 0.1164657399058342f, 0.00783413928002119f, 0.006255065556615591f, +0.9855587482452393f, 0.36660656332969666f, 0.3502747118473053f, 0.13829579949378967f, 0.38831764459609985f, 0.8360559940338135f, 0.5371018052101135f, 0.5955231785774231f, +0.09017814695835114f, 0.908625602722168f, 0.1909511685371399f, 0.25123491883277893f, 0.5662052035331726f, 0.14225386083126068f, 0.8840245008468628f, 0.6901652812957764f, +0.2814413607120514f, 0.2960660755634308f, 0.5017788410186768f, 0.6451075077056885f, 0.6471735239028931f, 0.2712670862674713f, 0.6391137838363647f, 0.052824657410383224f, +0.7207028865814209f, 0.21219830214977264f, 0.18240083754062653f, 0.5657395720481873f, 0.4646962881088257f, 0.8947061896324158f, 0.04949196055531502f, 0.13570140302181244f, +0.08251038193702698f, 0.5592337846755981f, 0.8005596995353699f, 0.5580880045890808f, 0.37437868118286133f, 0.7795342803001404f, 0.04789803922176361f, 0.8522555828094482f, +0.45168280601501465f, 0.5132583975791931f, 0.7323704957962036f, 0.1989414393901825f, 0.7488516569137573f, 0.7264683842658997f, 0.35697314143180847f, 0.6201162338256836f, +0.4084659814834595f, 0.7128720879554749f, 0.7677019834518433f, 0.2219625562429428f, 0.25761592388153076f, 0.05120212957262993f, 0.7836692929267883f, 0.662602961063385f, +0.7128427624702454f, 0.8131890892982483f, 0.9865390062332153f, 0.7728313207626343f, 0.7059581875801086f, 0.4179782569408417f, 0.06201596558094025f, 0.6378312706947327f, +0.09165369719266891f, 0.12168444693088531f, 0.015100257471203804f, 0.6981127262115479f, 0.7130579948425293f, 0.41978922486305237f, 0.6919600367546082f, 0.17895719408988953f, +0.4074591398239136f, 0.7951354384422302f, 0.47307896614074707f, 0.9711909890174866f, 0.9773391485214233f, 0.3243231177330017f, 0.27081498503685f, 0.320928156375885f, +0.5830065011978149f, 0.49424678087234497f, 0.2878704071044922f, 0.32157233357429504f, 0.15764926373958588f, 0.9388132691383362f, 0.2583220601081848f, 0.7469217777252197f, +0.14471182227134705f, 0.8731279373168945f, 0.01604139246046543f, 0.6996643543243408f, 0.5684108138084412f, 0.4724445939064026f, 0.31656622886657715f, 0.6354278326034546f, +0.0050322809256613255f, 0.9274793267250061f, 0.19014348089694977f, 0.08944379538297653f, 0.8348603844642639f, 0.020085059106349945f, 0.5718381404876709f, 0.6214977502822876f, +0.11438089609146118f, 0.8014317750930786f, 0.09591557830572128f, 0.624247670173645f, 0.7472620606422424f, 0.5248727798461914f, 0.18622298538684845f, 0.7886335849761963f, +0.40891027450561523f, 0.9281556010246277f, 0.8461557626724243f, 0.653481125831604f, 0.7902247905731201f, 0.9100868701934814f, 0.33556491136550903f, 0.46211329102516174f, +0.6566188335418701f, 0.904302716255188f, 0.49800312519073486f, 0.9393705725669861f, 0.9349028468132019f, 0.08156721293926239f, 0.6611701250076294f, 0.2737158238887787f, +0.7246151566505432f, 0.2222864180803299f, 0.3848837912082672f, 0.8930621147155762f, 0.4259154498577118f, 0.5049743056297302f, 0.2283364236354828f, 0.8974868655204773f, +0.5906029343605042f, 0.025960834696888924f, 0.047388020902872086f, 0.4686320126056671f, 0.9244982600212097f, 0.20922251045703888f, 0.1472938060760498f, 0.14413335919380188f, +0.4563419818878174f, 0.07467273622751236f, 0.5172775387763977f, 0.5635762214660645f, 0.3330795466899872f, 0.7202821969985962f, 0.30944302678108215f, 0.048233773559331894f, +0.1571992039680481f, 0.9721686840057373f, 0.8730611205101013f, 0.2720188498497009f, 0.46012163162231445f, 0.7723011374473572f, 0.8384811282157898f, 0.23742446303367615f, +0.20873235166072845f, 0.7765307426452637f, 0.2406264990568161f, 0.8207266330718994f, 0.6732690334320068f, 0.47368112206459045f, 0.6600564122200012f, 0.8185783624649048f, +0.927765429019928f, 0.7640742659568787f, 0.12535135447978973f, 0.6090704202651978f, 0.4427940547466278f, 0.3420613706111908f, 0.13483300805091858f, 0.9146156311035156f, +0.9032776355743408f, 0.6299057006835938f, 0.4066922664642334f, 0.4727220833301544f, 0.19685770571231842f, 0.467403769493103f, 0.8374848961830139f, 0.7291898727416992f, +0.6571415066719055f, 0.6659154295921326f, 0.4953947067260742f, 0.9459915161132812f, 0.4161001443862915f, 0.09345211833715439f, 0.6190837025642395f, 0.4060819149017334f, +0.07272196561098099f, 0.2922919690608978f, 0.11816244572401047f, 0.014685530215501785f, 0.21891556680202484f, 0.11972032487392426f, 0.5046172142028809f, 0.6152116656303406f, +0.13984619081020355f, 0.840855598449707f, 0.713885486125946f, 0.2161128968000412f, 0.6881608963012695f, 0.5456091165542603f, 0.5432074666023254f, 0.12542441487312317f, +0.5963141322135925f, 0.6051096320152283f, 0.8661707639694214f, 0.938913106918335f, 0.8024850487709045f, 0.1250729113817215f, 0.6001134514808655f, 0.056638363748788834f, +0.5952355861663818f, 0.9470217823982239f, 0.8509771227836609f, 0.1552302986383438f, 0.5346503257751465f, 0.4314354956150055f, 0.5051530599594116f, 0.8500701785087585f, +0.1795949637889862f, 0.6807265281677246f, 0.2933811545372009f, 0.7436761856079102f, 0.26550552248954773f, 0.7776693105697632f, 0.9863681793212891f, 0.8263154029846191f, +0.7210137248039246f, 0.010126068256795406f, 0.5116108655929565f, 0.1545623242855072f, 0.7512754797935486f, 0.9476591348648071f, 0.6560224294662476f, 0.5559536814689636f, +0.17710350453853607f, 0.920525312423706f, 0.32837584614753723f, 0.5045743584632874f, 0.9098601937294006f, 0.2937660813331604f, 0.09626375138759613f, 0.7369382977485657f, +0.2614390552043915f, 0.1276726871728897f, 0.6643008589744568f, 0.7565915584564209f, 0.1352342814207077f, 0.5918404459953308f, 0.22427789866924286f, 0.11775331199169159f, +0.47529467940330505f, 0.6597480177879333f, 0.6681857705116272f, 0.06990042328834534f, 0.6328172087669373f, 0.4634284973144531f, 0.8241262435913086f, 0.8813496828079224f, +0.9193483591079712f, 0.05749839171767235f, 0.17215637862682343f, 0.29156792163848877f, 0.5869982838630676f, 0.6954888701438904f, 0.5858415961265564f, 0.11912721395492554f, +0.05826267600059509f, 0.48981356620788574f, 0.9869398474693298f, 0.1605357974767685f, 0.9013192057609558f, 0.5807241201400757f, 0.6614418029785156f, 0.18990831077098846f, +0.2528141438961029f, 0.7200369834899902f, 0.30691757798194885f, 0.7823469042778015f, 0.9233659505844116f, 0.9153579473495483f, 0.5461035370826721f, 0.5479515194892883f, +0.1185351237654686f, 0.808368980884552f, 0.4065375328063965f, 0.7343418598175049f, 0.6255055665969849f, 0.5140575170516968f, 0.8444969654083252f, 0.857014536857605f, +0.8715606927871704f, 0.7407775521278381f, 0.2752127945423126f, 0.4223769009113312f, 0.7091705203056335f, 0.8761881589889526f, 0.36792925000190735f, 0.9035210013389587f, +0.1346990466117859f, 0.3743870258331299f, 0.24982766807079315f, 0.8868088722229004f, 0.9954030513763428f, 0.028505392372608185f, 0.617039680480957f, 0.8338156938552856f, +0.38369911909103394f, 0.4881257116794586f, 0.5892663598060608f, 0.31406888365745544f, 0.20431235432624817f, 0.5543268322944641f, 0.6019948720932007f, 0.8373265266418457f, +0.18251600861549377f, 0.06618140637874603f, 0.20159544050693512f, 0.4536029100418091f, 0.08890121430158615f, 0.17546959221363068f, 0.012633916921913624f, 0.12775008380413055f, +0.5627694129943848f, 0.24354399740695953f, 0.17141194641590118f, 0.23006954789161682f, 0.3102613389492035f, 0.08768422156572342f, 0.0004200980765745044f, 0.1448296308517456f, +0.6812071800231934f, 0.7605481743812561f, 0.3928992748260498f, 0.8346197009086609f, 0.7342049479484558f, 0.6707897782325745f, 0.2760426104068756f, 0.8327244520187378f, +0.24206526577472687f, 0.5960180163383484f, 0.875304102897644f, 0.06060199439525604f, 0.843586802482605f, 0.1908808946609497f, 0.5377862453460693f, 0.26594939827919006f, +0.7439135313034058f, 0.2845594584941864f, 0.868575394153595f, 0.7774621248245239f, 0.15425996482372284f, 0.7628189325332642f, 0.5393264293670654f, 0.2945326864719391f, +0.9039642214775085f, 0.7309687733650208f, 0.8661210536956787f, 0.27359768748283386f, 0.17799854278564453f, 0.5008803606033325f, 0.31955763697624207f, 0.3182467222213745f, +0.58180832862854f, 0.9663501977920532f, 0.020875753834843636f, 0.01176028698682785f, 0.6492229700088501f, 0.8298657536506653f, 0.25017407536506653f, 0.45885875821113586f, +0.6136859059333801f, 0.044321224093437195f, 0.5526344776153564f, 0.2646613121032715f, 0.3663945198059082f, 0.9120883345603943f, 0.05708274617791176f, 0.9071598052978516f, +0.731268048286438f, 0.9718244075775146f, 0.7668494582176208f, 0.07375341653823853f, 0.7680211663246155f, 0.13130712509155273f, 0.7263690829277039f, 0.4269023835659027f, +0.30090513825416565f, 0.08750849962234497f, 0.054921966046094894f, 0.9914084076881409f, 0.6836538910865784f, 0.518713116645813f, 0.9661560654640198f, 0.48065289855003357f, +0.20734041929244995f, 0.6288772225379944f, 0.47931578755378723f, 0.33244335651397705f, 0.11166907846927643f, 0.03338529169559479f, 0.2964950203895569f, 0.339509516954422f, +0.81090247631073f, 0.9264026284217834f, 0.2847055494785309f, 0.5429268479347229f, 0.6649433970451355f, 0.36217188835144043f, 0.9393895864486694f, 0.7038547396659851f, +0.832446277141571f, 0.13372910022735596f, 0.6967410445213318f, 0.691938579082489f, 0.560077428817749f, 0.16460682451725006f, 0.21869242191314697f, 0.7275866866111755f, +0.6000016331672668f, 0.3560178875923157f, 0.2563895881175995f, 0.6897763013839722f, 0.24083054065704346f, 0.13180668652057648f, 0.6944037079811096f, 0.6345018744468689f, +0.4435221552848816f, 0.3818599283695221f, 0.6223254799842834f, 0.13631632924079895f, 0.35186928510665894f, 0.9500159621238708f, 0.9292505979537964f, 0.8609728217124939f, +0.8670525550842285f, 0.6601061224937439f, 0.029409779235720634f, 0.9636797904968262f, 0.2531996965408325f, 0.26008766889572144f, 0.7700565457344055f, 0.025262121111154556f, +0.7299379110336304f, 0.4760982096195221f, 0.7681010365486145f, 0.6189386248588562f, 0.4757686257362366f, 0.7484144568443298f, 0.3410695791244507f, 0.3344108760356903f, +0.15968942642211914f, 0.5010729432106018f, 0.5744949579238892f, 0.3018920421600342f, 0.8812851905822754f, 0.19090354442596436f, 0.5108181834220886f, 0.30272015929222107f, +0.855832576751709f, 0.01682019606232643f, 0.6725308895111084f, 0.513978898525238f, 0.7231558561325073f, 0.7457623481750488f, 0.7352665662765503f, 0.8589575290679932f, +0.15370328724384308f, 0.097968690097332f, 0.5470354557037354f, 0.1701967716217041f, 0.3980516493320465f, 0.09524642676115036f, 0.5233121514320374f, 0.020610623061656952f, +0.7475913763046265f, 0.059026047587394714f, 0.87472003698349f, 0.3477936089038849f, 0.5717546939849854f, 0.29943257570266724f, 0.33252450823783875f, 0.34259065985679626f, +0.1307266503572464f, 0.14911548793315887f, 0.9785605669021606f, 0.1898990422487259f, 0.4014125168323517f, 0.7917410731315613f, 0.9914776682853699f, 0.9470024704933167f, +0.06694343686103821f, 0.802141547203064f, 0.11816005408763885f, 0.8209700584411621f, 0.8046455383300781f, 0.5546182990074158f, 0.34096309542655945f, 0.10356909781694412f, +0.09289601445198059f, 0.27555134892463684f, 0.3731372654438019f, 0.35784488916397095f, 0.9301391243934631f, 0.9726642966270447f, 0.6266829967498779f, 0.30086132884025574f, +0.3984285891056061f, 0.2451000213623047f, 0.4810277223587036f, 0.3057732880115509f, 0.38395699858665466f, 0.1445024013519287f, 0.39977148175239563f, 0.009072547778487206f, +0.047196272760629654f, 0.09542988240718842f, 0.5055155158042908f, 0.2629089951515198f, 0.26813480257987976f, 0.8003388047218323f, 0.25782543420791626f, 0.14805097877979279f, +0.21617886424064636f, 0.651469886302948f, 0.04619525745511055f, 0.9382173418998718f, 0.39605557918548584f, 0.4766310155391693f, 0.3635139465332031f, 0.6277796626091003f, +0.5582244992256165f, 0.011674148961901665f, 0.3778867721557617f, 0.7347812056541443f, 0.3275909423828125f, 0.2524089515209198f, 0.6123921871185303f, 0.313350647687912f, +0.38531211018562317f, 0.9371435642242432f, 0.9971540570259094f, 0.8014906644821167f, 0.8904499411582947f, 0.10966166853904724f, 0.3910488784313202f, 0.7488356232643127f, +0.28191471099853516f, 0.2602645456790924f, 0.26360610127449036f, 0.6591086983680725f, 0.05643044039607048f, 0.8912011981010437f, 0.5764657855033875f, 0.6888786554336548f, +0.8199483752250671f, 0.7358336448669434f, 0.8000704646110535f, 0.4522779881954193f, 0.23414519429206848f, 0.3986351788043976f, 0.6169946789741516f, 0.27606508135795593f, +0.3404878079891205f, 0.7504263520240784f, 0.43130263686180115f, 0.680512011051178f, 0.1598081737756729f, 0.9438950419425964f, 0.4214193820953369f, 0.7106729745864868f, +0.2244635820388794f, 0.9566280245780945f, 0.4772648513317108f, 0.00860569067299366f, 0.8112910389900208f, 0.25959306955337524f, 0.34424492716789246f, 0.5691813826560974f, +0.8498429656028748f, 0.6574832201004028f, 0.3664867579936981f, 0.23811067640781403f, 0.5639883875846863f, 0.7253084182739258f, 0.529019296169281f, 0.8531491160392761f, +0.3755435347557068f, 0.9091315269470215f, 0.717705488204956f, 0.5003087520599365f, 0.8218762874603271f, 0.4184149205684662f, 0.6379798650741577f, 0.24824881553649902f, +0.8498408198356628f, 0.36653175950050354f, 0.290168821811676f, 0.1381906121969223f, 0.18360678851604462f, 0.3238220810890198f, 0.5738916397094727f, 0.1460181176662445f, +0.44306373596191406f, 0.7138555645942688f, 0.6805111765861511f, 0.5629780292510986f, 0.15327465534210205f, 0.5806712508201599f, 0.620064377784729f, 0.19826331734657288f, +0.03310873359441757f, 0.9495682120323181f, 0.13872574269771576f, 0.6499401926994324f, 0.044022221118211746f, 0.17829865217208862f, 0.13147220015525818f, 0.6321329474449158f, +0.16425393521785736f, 0.36918875575065613f, 0.1525997817516327f, 0.8980622291564941f, 0.6227561831474304f, 0.33493849635124207f, 0.5348947644233704f, 0.8713693618774414f, +0.1276431828737259f, 0.23796266317367554f, 0.9788485765457153f, 0.27766329050064087f, 0.6911447048187256f, 0.0729895681142807f, 0.008238544687628746f, 0.6565893292427063f, +0.8950185179710388f, 0.9465225338935852f, 0.04465162009000778f, 0.5272761583328247f, 0.1945713609457016f, 0.08023776113986969f, 0.9882856011390686f, 0.10570665448904037f, +0.017231104895472527f, 0.1961381435394287f, 0.8544827103614807f, 0.2661646902561188f, 0.10193924605846405f, 0.9788399934768677f, 0.508489727973938f, 0.00526279816403985f, +0.8364651203155518f, 0.008493051864206791f, 0.6340069770812988f, 0.27727681398391724f, 0.1852254420518875f, 0.8964882493019104f, 0.9138506054878235f, 0.3245462477207184f, +0.7644873857498169f, 0.3963848948478699f, 0.733256995677948f, 0.7597799897193909f, 0.10345931351184845f, 0.11297718435525894f, 0.2705014646053314f, 0.5685546398162842f, +0.5465238094329834f, 0.4824996590614319f, 0.8517687916755676f, 0.0675225481390953f, 0.48036515712738037f, 0.08381208032369614f, 0.25066184997558594f, 0.9994795322418213f, +0.9756842255592346f, 0.6248166561126709f, 0.4573745131492615f, 0.8627220392227173f, 0.7504269480705261f, 0.0696263462305069f, 0.7992243766784668f, 0.37001684308052063f, +0.31258586049079895f, 0.7522594332695007f, 0.8432745933532715f, 0.7058260440826416f, 0.999597430229187f, 0.5971941947937012f, 0.5094471573829651f, 0.6111138463020325f, +0.00859526451677084f, 0.3423653542995453f, 0.5699847936630249f, 0.02035381644964218f, 0.7792762517929077f, 0.26486754417419434f, 0.02963903546333313f, 0.7081286311149597f, +0.5412747859954834f, 0.40622973442077637f, 0.4763862192630768f, 0.25319623947143555f, 0.4532184898853302f, 0.7470301985740662f, 0.6268399953842163f, 0.6585128307342529f, +0.6282665133476257f, 0.6571022868156433f, 0.8814076781272888f, 0.6351767182350159f, 0.008085230365395546f, 0.8051799535751343f, 0.7337180376052856f, 0.3406299650669098f, +0.32629212737083435f, 0.4479820728302002f, 0.6894080638885498f, 0.8104581832885742f, 0.1689586639404297f, 0.18673370778560638f, 0.1218646839261055f, 0.6454970836639404f, +0.1362902671098709f, 0.7611746191978455f, 0.22897687554359436f, 0.7674141526222229f, 0.32386305928230286f, 0.514680802822113f, 0.11507764458656311f, 0.463783860206604f, +0.05839117243885994f, 0.1736578643321991f, 0.9634993076324463f, 0.06246181204915047f, 0.4285435974597931f, 0.8817585706710815f, 0.6656355857849121f, 0.1273033618927002f, +0.8168630003929138f, 0.058652590960264206f, 0.8519590497016907f, 0.7504180669784546f, 0.28106600046157837f, 0.5975583791732788f, 0.2872631847858429f, 0.600885808467865f, +0.5397189855575562f, 0.4786773920059204f, 0.07531861215829849f, 0.3884052336215973f, 0.5028911828994751f, 0.7205650806427002f, 0.5299140810966492f, 0.08490655571222305f, +0.7360885739326477f, 0.7116560935974121f, 0.3219931125640869f, 0.2901073098182678f, 0.055993951857089996f, 0.7497875690460205f, 0.9357072114944458f, 0.8967065811157227f, +0.763752818107605f, 0.3019894063472748f, 0.718966543674469f, 0.8273267149925232f, 0.11269308626651764f, 0.8655956387519836f, 0.4837299883365631f, 0.7921957969665527f, +0.036312080919742584f, 0.4438542127609253f, 0.7644456624984741f, 0.5098525881767273f, 0.8096886873245239f, 0.0901598334312439f, 0.13858211040496826f, 0.2009546309709549f, +0.06314581632614136f, 0.91472327709198f, 0.1600135713815689f, 0.6261599659919739f, 0.61641925573349f, 0.8604519963264465f, 0.4918613135814667f, 0.6094150543212891f, +0.684981107711792f, 0.945443332195282f, 0.7208923101425171f, 0.8101438879966736f, 0.6388096809387207f, 0.757826566696167f, 0.3468169569969177f, 0.039672624319791794f, +0.31801217794418335f, 0.3683360517024994f, 0.2815400958061218f, 0.8939177393913269f, 0.9494072794914246f, 0.5770612359046936f, 0.32395538687705994f, 0.2625291645526886f, +0.35465648770332336f, 0.5213935375213623f, 0.956351637840271f, 0.8212997913360596f, 0.1526707261800766f, 0.11852093040943146f, 0.10874094069004059f, 0.3347419202327728f, +0.5235441327095032f, 0.22166986763477325f, 0.6937387585639954f, 0.3143044412136078f, 0.5766142010688782f, 0.8288829922676086f, 0.25698569416999817f, 0.8507802486419678f, +0.37193551659584045f, 0.22580954432487488f, 0.853976309299469f, 0.44312962889671326f, 0.4873034358024597f, 0.4649302661418915f, 0.2054651826620102f, 0.9389467835426331f, +0.4288264513015747f, 0.3679085075855255f, 0.9263724684715271f, 0.9191169738769531f, 0.48183634877204895f, 0.6699249148368835f, 0.2602076530456543f, 0.26824790239334106f, +0.6311162710189819f, 0.37686604261398315f, 0.5676647424697876f, 0.7448882460594177f, 0.48302215337753296f, 0.4928364157676697f, 0.21424119174480438f, 0.08724778145551682f, +0.36940130591392517f, 0.6514480113983154f, 0.7076849341392517f, 0.7208107113838196f, 0.2726311683654785f, 0.7902769446372986f, 0.2274956852197647f, 0.6160095930099487f, +0.7293105125427246f, 0.6603074669837952f, 0.275064080953598f, 0.4701663553714752f, 0.9169285297393799f, 0.7150539755821228f, 0.3568819761276245f, 0.14766624569892883f, +0.041979286819696426f, 0.09019733220338821f, 0.5725971460342407f, 0.7754639387130737f, 0.5894076228141785f, 0.9792824983596802f, 0.7456132769584656f, 0.15305030345916748f, +0.5441170930862427f, 0.24569083750247955f, 0.23041664063930511f, 0.28891217708587646f, 0.9737464189529419f, 0.006431134417653084f, 0.48186972737312317f, 0.23027710616588593f, +0.039602816104888916f, 0.7802783250808716f, 0.14615054428577423f, 0.5415439009666443f, 0.761740505695343f, 0.8141151666641235f, 0.8614734411239624f, 0.3362327516078949f, +0.1406247764825821f, 0.6145464181900024f, 0.7242382168769836f, 0.918677031993866f, 0.5510053634643555f, 0.623396098613739f, 0.8726004958152771f, 0.2598295211791992f, +0.8027144074440002f, 0.7211681008338928f, 0.2740383446216583f, 0.9000723361968994f, 0.6900942921638489f, 0.29690176248550415f, 0.6063108444213867f, 0.7816162705421448f, +0.10917465388774872f, 0.24685709178447723f, 0.4007122814655304f, 0.5668666362762451f, 0.4584721624851227f, 0.93647700548172f, 0.9980688691139221f, 0.47564131021499634f, +0.8902285695075989f, 0.23314523696899414f, 0.9670830368995667f, 0.3169545531272888f, 0.5439472198486328f, 0.2100415974855423f, 0.9613769054412842f, 0.7707420587539673f, +0.8642554879188538f, 0.7604368925094604f, 0.5427983403205872f, 0.7394641041755676f, 0.7645577788352966f, 0.9107111096382141f, 0.9158008694648743f, 0.6578361988067627f, +0.4789242148399353f, 0.34665387868881226f, 0.08920182287693024f, 0.1596880853176117f, 0.05911737680435181f, 0.2908497750759125f, 0.15579809248447418f, 0.6464256644248962f, +0.2641558051109314f, 0.8235695362091064f, 0.045359063893556595f, 0.8105916976928711f, 0.09770447760820389f, 0.13608239591121674f, 0.3044452667236328f, 0.20681533217430115f, +0.7334978580474854f, 0.9760047793388367f, 0.3874240517616272f, 0.150523379445076f, 0.8990814089775085f, 0.3255769908428192f, 0.5126937627792358f, 0.37052014470100403f, +0.35804569721221924f, 0.5087688565254211f, 0.9414053559303284f, 0.08741389214992523f, 0.664091944694519f, 0.1492283046245575f, 0.6056227684020996f, 0.3105059862136841f, +0.6882418990135193f, 0.23193414509296417f, 0.4741823673248291f, 0.4121200442314148f, 0.8649951815605164f, 0.6697999238967896f, 0.16870391368865967f, 0.6975403428077698f, +0.3177304267883301f, 0.07133367657661438f, 0.2134525626897812f, 0.6214653849601746f, 0.09789023548364639f, 0.09051820635795593f, 0.7356042861938477f, 0.5260187387466431f, +0.8677350878715515f, 0.2310904562473297f, 0.6799161434173584f, 0.8327391147613525f, 0.7313752770423889f, 0.5930948853492737f, 0.8952397704124451f, 0.9682379961013794f, +0.017452610656619072f, 0.8231159448623657f, 0.3977448046207428f, 0.7989091873168945f, 0.8674840927124023f, 0.9549756050109863f, 0.7957454919815063f, 0.11032352596521378f, +0.6915755867958069f, 0.5938089489936829f, 0.3692536950111389f, 0.5266050696372986f, 0.7587047815322876f, 0.7927905321121216f, 0.5574981570243835f, 0.10064802318811417f, +0.5236501693725586f, 0.608356237411499f, 0.8670174479484558f, 0.8135973215103149f, 0.15079952776432037f, 0.6512184143066406f, 0.6761028170585632f, 0.5730655193328857f, +0.2015715092420578f, 0.7071123123168945f, 0.2637609541416168f, 0.2954899072647095f, 0.4651643931865692f, 0.8700369000434875f, 0.8602015972137451f, 0.7653390169143677f, +0.013911097310483456f, 0.27310070395469666f, 0.5510565042495728f, 0.7898263335227966f, 0.6384981274604797f, 0.9017696380615234f, 0.2586338520050049f, 0.826629102230072f, +0.2675137519836426f, 0.1780225783586502f, 0.6678904294967651f, 0.5043407082557678f, 0.8781993389129639f, 0.3559654951095581f, 0.211893692612648f, 0.6452958583831787f, +0.5325132012367249f, 0.011718629859387875f, 0.20981475710868835f, 0.7939326167106628f, 0.5838348269462585f, 0.11015857011079788f, 0.561355710029602f, 0.4356193244457245f, +0.6356310844421387f, 0.024307725951075554f, 0.8376628756523132f, 0.9442686438560486f, 0.4193347096443176f, 0.11734799295663834f, 0.5049760937690735f, 0.4821125268936157f, +0.5348940491676331f, 0.37032389640808105f, 0.718015193939209f, 0.1290174424648285f, 0.10870334506034851f, 0.11441036313772202f, 0.1928686499595642f, 0.30619025230407715f, +0.9615749716758728f, 0.3971867859363556f, 0.2927878201007843f, 0.2768006920814514f, 0.7377459406852722f, 0.9879685640335083f, 0.7314679622650146f, 0.06724771857261658f, +0.9222954511642456f, 0.2556686997413635f, 0.43419918417930603f, 0.1464882344007492f, 0.5155189633369446f, 0.9166248440742493f, 0.2932718098163605f, 0.2218017727136612f, +0.09410691261291504f, 0.26192691922187805f, 0.7963070869445801f, 0.2955492436885834f, 0.748132586479187f, 0.20535536110401154f, 0.4865565598011017f, 0.008651298470795155f, +0.43278923630714417f, 0.7985188961029053f, 0.1608806550502777f, 0.10816764086484909f, 0.3570184111595154f, 0.9582346677780151f, 0.2825400233268738f, 0.5934984087944031f, +0.9384073615074158f, 0.958225429058075f, 0.036693863570690155f, 0.30068060755729675f, 0.9045685529708862f, 0.30096498131752014f, 0.30064070224761963f, 0.30861249566078186f, +0.11464887112379074f, 0.5640683770179749f, 0.0008562649600207806f, 0.44492653012275696f, 0.3835830092430115f, 0.7498173117637634f, 0.7718920707702637f, 0.17056547105312347f, +0.038447026163339615f, 0.09513174742460251f, 0.3430221974849701f, 0.2615427076816559f, 0.39870452880859375f, 0.7056438326835632f, 0.1251922845840454f, 0.8077690005302429f, +0.01639156974852085f, 0.7095551490783691f, 0.24426893889904022f, 0.9087854623794556f, 0.05040924623608589f, 0.408217191696167f, 0.18423090875148773f, 0.21161238849163055f, +0.43543437123298645f, 0.6627578735351562f, 0.7146008610725403f, 0.6035900712013245f, 0.529333233833313f, 0.21340839564800262f, 0.8996151089668274f, 0.09386662393808365f, +0.2540862262248993f, 0.980165958404541f, 0.05390810966491699f, 0.7871012687683105f, 0.9074702858924866f, 0.2779761850833893f, 0.2004769891500473f, 0.9631006717681885f, +0.2806033492088318f, 0.4733009934425354f, 0.7789165377616882f, 0.6611096858978271f, 0.5042128562927246f, 0.3820691704750061f, 0.626338541507721f, 0.7811993956565857f, +0.6791056394577026f, 0.4821861982345581f, 0.9137478470802307f, 0.9918507933616638f, 0.9557873606681824f, 0.6202739477157593f, 0.4475477635860443f, 0.5761096477508545f, +0.6268888115882874f, 0.11185497790575027f, 0.959466814994812f, 0.16480134427547455f, 0.07352381944656372f, 0.19879421591758728f, 0.24810823798179626f, 0.4152156710624695f, +0.49357715249061584f, 0.6528423428535461f, 0.2859891355037689f, 0.5857186913490295f, 0.9987978339195251f, 0.730319619178772f, 0.43794646859169006f, 0.09959283471107483f, +0.24411262571811676f, 0.8150689005851746f, 0.4596823751926422f, 0.12228861451148987f, 0.6166091561317444f, 0.12531903386116028f, 0.6414034962654114f, 0.9573218822479248f, +0.8546504974365234f, 0.6751397848129272f, 0.3838517963886261f, 0.8683927655220032f, 0.07973464578390121f, 0.2179049253463745f, 0.9572743773460388f, 0.46801918745040894f, +0.8399494886398315f, 0.9681826233863831f, 0.66143399477005f, 0.7294362187385559f, 0.5193617343902588f, 0.7469568252563477f, 0.8567246198654175f, 0.33090299367904663f, +0.2288818359375f, 0.965274453163147f, 0.9835024476051331f, 0.9913169741630554f, 0.8859872817993164f, 0.44792261719703674f, 0.05869225040078163f, 0.6252506375312805f, +0.11327920854091644f, 0.5487222075462341f, 0.9073095321655273f, 0.6487051248550415f, 0.7844598293304443f, 0.4768316149711609f, 0.6877486705780029f, 0.7270609736442566f, +0.4481867849826813f, 0.23090021312236786f, 0.2683020234107971f, 0.5255069732666016f, 0.3224920332431793f, 0.382148802280426f, 0.18706415593624115f, 0.9204190969467163f, +0.015535577200353146f, 0.05500267073512077f, 0.2252250611782074f, 0.211472287774086f, 0.8297892808914185f, 0.23618873953819275f, 0.006582912057638168f, 0.8843339085578918f, +0.6393924355506897f, 0.8076550364494324f, 0.5183140635490417f, 0.26824337244033813f, 0.1480688601732254f, 0.39484676718711853f, 0.9487656354904175f, 0.7566969990730286f, +0.8432870507240295f, 0.02448856830596924f, 0.7658085227012634f, 0.9377791285514832f, 0.5420747399330139f, 0.6556604504585266f, 0.08747066557407379f, 0.5443596839904785f, +0.4052574038505554f, 0.3203507363796234f, 0.822787344455719f, 0.032003890722990036f, 0.6695392727851868f, 0.5446551442146301f, 0.6920169591903687f, 0.4448991119861603f, +0.06370392441749573f, 0.33296650648117065f, 0.6995439529418945f, 0.28529903292655945f, 0.7440990805625916f, 0.5105510950088501f, 0.7143868207931519f, 0.07066404074430466f, +0.385903537273407f, 0.5823546648025513f, 0.994720458984375f, 0.576806366443634f, 0.3940090537071228f, 0.3170064389705658f, 0.6699542999267578f, 0.19013872742652893f, +0.3893728256225586f, 0.7362281084060669f, 0.8920674920082092f, 0.7073817253112793f, 0.6037477850914001f, 0.6433694958686829f, 0.8289421200752258f, 0.035648733377456665f, +0.23307865858078003f, 0.6910347938537598f, 0.7364698648452759f, 0.11124001443386078f, 0.9497097730636597f, 0.2656404674053192f, 0.7701830863952637f, 0.6136803030967712f, +0.708391010761261f, 0.01412466075271368f, 0.577406644821167f, 0.4952826499938965f, 0.3777950406074524f, 0.7954854965209961f, 0.9261913299560547f, 0.7013722658157349f, +0.04999064654111862f, 0.3203633725643158f, 0.9947193264961243f, 0.6685425043106079f, 0.6150233745574951f, 0.2328808307647705f, 0.7066190838813782f, 0.5304735898971558f, +0.6411893367767334f, 0.9072098135948181f, 0.4077155292034149f, 0.6266298890113831f, 0.46517881751060486f, 0.5840455293655396f, 0.1599084734916687f, 0.5580611824989319f, +0.8466250896453857f, 0.7870544195175171f, 0.115798220038414f, 0.20253542065620422f, 0.4279564321041107f, 0.37540197372436523f, 0.3153150975704193f, 0.9703922867774963f, +0.19217200577259064f, 0.5648425817489624f, 0.09674515575170517f, 0.8675395846366882f, 0.7124395370483398f, 0.480272114276886f, 0.1501670777797699f, 0.1223861575126648f, +0.3021356761455536f, 0.7567285299301147f, 0.6520135402679443f, 0.24159522354602814f, 0.204560324549675f, 0.9165695905685425f, 0.31939250230789185f, 0.3525674045085907f, +0.7836206555366516f, 0.5017123222351074f, 0.006927590351551771f, 0.30687859654426575f, 0.11488955467939377f, 0.1854090690612793f, 0.24376583099365234f, 0.6002733111381531f, +0.40526220202445984f, 0.39353516697883606f, 0.9914536476135254f, 0.5037426948547363f, 0.4760286211967468f, 0.40774720907211304f, 0.5020732283592224f, 0.26212599873542786f, +0.09341031312942505f, 0.4905644655227661f, 0.6715548038482666f, 0.7712488174438477f, 0.5153745412826538f, 0.026756420731544495f, 0.5626112222671509f, 0.7768387794494629f, +0.7202670574188232f, 0.9843764901161194f, 0.19373257458209991f, 0.8554725646972656f, 0.4146493673324585f, 0.043504081666469574f, 0.6741847395896912f, 0.13825516402721405f, +0.8535534143447876f, 0.6937730312347412f, 0.3564263582229614f, 0.900119960308075f, 0.1355661302804947f, 0.5328006744384766f, 0.10197212547063828f, 0.7942118644714355f, +0.5651108622550964f, 0.5053865313529968f, 0.8503984212875366f, 0.01231599785387516f, 0.9142091274261475f, 0.15010766685009003f, 0.5202000737190247f, 0.46435636281967163f, +0.21617309749126434f, 0.004264758434146643f, 0.19209221005439758f, 0.4661063253879547f, 0.9118270874023438f, 0.38673850893974304f, 0.7500752806663513f, 0.16029423475265503f, +0.006145621184259653f, 0.9612389206886292f, 0.6962277293205261f, 0.6374860405921936f, 0.0933627188205719f, 0.5084052681922913f, 0.48220252990722656f, 0.5076528191566467f, +0.42093825340270996f, 0.8117958307266235f, 0.9111685156822205f, 0.2971266806125641f, 0.804532527923584f, 0.6563779711723328f, 0.4289886951446533f, 0.9603080749511719f, +0.6727513670921326f, 0.016241539269685745f, 0.9700590372085571f, 0.8172082901000977f, 0.4240187108516693f, 0.24469435214996338f, 0.05037347227334976f, 0.04742184281349182f, +0.38364163041114807f, 0.4397599697113037f, 0.7054752111434937f, 0.6870689392089844f, 0.28947657346725464f, 0.6738980412483215f, 0.1482684314250946f, 0.9846490025520325f, +0.35566970705986023f, 0.9052540063858032f, 0.773290753364563f, 0.08384224027395248f, 0.29624098539352417f, 0.22736598551273346f, 0.6411918997764587f, 0.5201940536499023f, +0.31900596618652344f, 0.7701492309570312f, 0.4361753761768341f, 0.92261803150177f, 0.4187772572040558f, 0.7681120038032532f, 0.6071146726608276f, 0.8849411010742188f, +0.6250904202461243f, 0.33532336354255676f, 0.5485544800758362f, 0.09889616072177887f, 0.7910281419754028f, 0.869133472442627f, 0.4044482707977295f, 0.6161046624183655f, +0.5378732085227966f, 0.7461917400360107f, 0.5541404485702515f, 0.8186034560203552f, 0.29536259174346924f, 0.327586829662323f, 0.21862228214740753f, 0.7868355512619019f, +0.06831581145524979f, 0.10693638771772385f, 0.9794858694076538f, 0.6168851256370544f, 0.625780463218689f, 0.3152378499507904f, 0.5503268241882324f, 0.8714452981948853f, +0.13587960600852966f, 0.02668643556535244f, 0.4368845224380493f, 0.32270509004592896f, 0.363224059343338f, 0.21380481123924255f, 0.768843948841095f, 0.133777916431427f, +0.14246666431427002f, 0.8847102522850037f, 0.9176287651062012f, 0.9171268939971924f, 0.8338689208030701f, 0.8515989780426025f, 0.5860781669616699f, 0.649692714214325f, +0.43401920795440674f, 0.569852352142334f, 0.10477466136217117f, 0.45109492540359497f, 0.0915578305721283f, 0.9149369597434998f, 0.16914333403110504f, 0.7073737382888794f, +0.7405987977981567f, 0.2897697985172272f, 0.23366416990756989f, 0.7129048109054565f, 0.8497933149337769f, 0.09334281831979752f, 0.14261764287948608f, 0.11232168972492218f, +0.5194309949874878f, 0.8770115971565247f, 0.6997612118721008f, 0.41989272832870483f, 0.006701534613966942f, 0.07158957421779633f, 0.5488724708557129f, 0.6789095401763916f, +0.5079797506332397f, 0.1910392940044403f, 0.8569587469100952f, 0.6905708909034729f, 0.4448414146900177f, 0.8031890392303467f, 0.18255019187927246f, 0.08394696563482285f, +0.7202576994895935f, 0.060032039880752563f, 0.14022915065288544f, 0.7460125088691711f, 0.7378683686256409f, 0.5510162711143494f, 0.44571125507354736f, 0.6370839476585388f, +0.9176910519599915f, 0.2984299957752228f, 0.6430026888847351f, 0.6238656044006348f, 0.4110470712184906f, 0.325793981552124f, 0.11117175221443176f, 0.6015374660491943f, +0.5517833828926086f, 0.12609638273715973f, 0.19085495173931122f, 0.9243777394294739f, 0.056373126804828644f, 0.6868749260902405f, 0.04444548860192299f, 0.008680449798703194f, +0.8110294938087463f, 0.38426440954208374f, 0.925113320350647f, 0.4869113564491272f, 0.38356414437294006f, 0.030035465955734253f, 0.050180330872535706f, 0.0036471823696047068f, +0.6445372104644775f, 0.7898935675621033f, 0.053584013134241104f, 0.6031231880187988f, 0.13457828760147095f, 0.08832281082868576f, 0.9330215454101562f, 0.9482473731040955f, +0.3624163269996643f, 0.004679799545556307f, 0.6188679933547974f, 0.49322953820228577f, 0.24209702014923096f, 0.2669011652469635f, 0.26405811309814453f, 0.5797443985939026f, +0.2851620614528656f, 0.7969651222229004f, 0.7816630601882935f, 0.007769216317683458f, 0.6522151827812195f, 0.3141825199127197f, 0.4911031126976013f, 0.32458817958831787f, +0.13677729666233063f, 0.6369267702102661f, 0.6397440433502197f, 0.7996035218238831f, 0.9710116982460022f, 0.42584341764450073f, 0.42546334862709045f, 0.3703427016735077f, +0.382591187953949f, 0.2484421283006668f, 0.11974845081567764f, 0.11404025554656982f, 0.8401291370391846f, 0.1401240974664688f, 0.8929972052574158f, 0.9942436814308167f, +0.6538568139076233f, 0.1783503293991089f, 0.767174482345581f, 0.9430117607116699f, 0.9849749803543091f, 0.43687111139297485f, 0.5201559066772461f, 0.18471813201904297f, +0.28158441185951233f, 0.8745139241218567f, 0.5279066562652588f, 0.020574364811182022f, 0.061986807733774185f, 0.9972028732299805f, 0.15948107838630676f, 0.6922028064727783f, +0.1952204555273056f, 0.2751502990722656f, 0.8873990178108215f, 0.33656084537506104f, 0.500852644443512f, 0.3003527522087097f, 0.8302664756774902f, 0.8108580708503723f, +0.31987321376800537f, 0.5984954833984375f, 0.8754511475563049f, 0.026963936164975166f, 0.29153627157211304f, 0.07258889079093933f, 0.2140178233385086f, 0.005140119232237339f, +0.9548718333244324f, 0.12547409534454346f, 0.07604391127824783f, 0.6667263507843018f, 0.9634590744972229f, 0.7385352253913879f, 0.2518521547317505f, 0.8992658853530884f, +0.6627513766288757f, 0.2979545295238495f, 0.7432037591934204f, 0.12519638240337372f, 0.9596320986747742f, 0.2638978362083435f, 0.31609827280044556f, 0.15316450595855713f, +0.1637657731771469f, 0.9772557020187378f, 0.28365761041641235f, 0.16771772503852844f, 0.08121037483215332f, 0.6655564308166504f, 0.7900506854057312f, 0.3919464945793152f, +0.40542125701904297f, 0.7182019948959351f, 0.4027900993824005f, 0.02943609282374382f, 0.6047344207763672f, 0.2595202922821045f, 0.22222471237182617f, 0.5052624344825745f, +0.0527794174849987f, 0.19468837976455688f, 0.7768763303756714f, 0.893054723739624f, 0.16386421024799347f, 0.6576530933380127f, 0.676825225353241f, 0.1079707220196724f, +0.40976405143737793f, 0.6181525588035583f, 0.842616856098175f, 0.7238441109657288f, 0.33888164162635803f, 0.13742245733737946f, 0.9008933305740356f, 0.5121082067489624f, +0.48709729313850403f, 0.041550006717443466f, 0.859318196773529f, 0.7564782500267029f, 0.22175750136375427f, 0.5469247102737427f, 0.09506642818450928f, 0.47149696946144104f, +0.7297288775444031f, 0.3460483253002167f, 0.07124141603708267f, 0.13049107789993286f, 0.24674734473228455f, 0.04640786349773407f, 0.29435744881629944f, 0.7441763877868652f, +0.6770779490470886f, 0.7957504987716675f, 0.676411509513855f, 0.6055048704147339f, 0.22792576253414154f, 0.8205337524414062f, 0.5172913670539856f, 0.9201855063438416f, +0.36456063389778137f, 0.8747440576553345f, 0.306564062833786f, 0.632875382900238f, 0.2421923577785492f, 0.1103879064321518f, 0.06829017400741577f, 0.9303755164146423f, +0.5233321785926819f, 0.7933428883552551f, 0.5025737881660461f, 0.44847458600997925f, 0.12457186728715897f, 0.47468727827072144f, 0.0009496762650087476f, 0.7442843317985535f, +0.6779741644859314f, 0.14771367609500885f, 0.48417821526527405f, 0.616725742816925f, 0.5811732411384583f, 0.9016885757446289f, 0.400730699300766f, 0.43372294306755066f, +0.7545782923698425f, 0.6026554703712463f, 0.9480524063110352f, 0.8154183030128479f, 0.09879112243652344f, 0.8041036128997803f, 0.4781009554862976f, 0.4869787096977234f, +0.7465505003929138f, 0.5283722281455994f, 0.38916128873825073f, 0.12342985719442368f, 0.810600996017456f, 0.2769741117954254f, 0.5049938559532166f, 0.7976837158203125f, +0.9056423902511597f, 0.9328929781913757f, 0.39615103602409363f, 0.7491140365600586f, 0.1310722827911377f, 0.2753143310546875f, 0.6224308609962463f, 0.49512243270874023f, +0.00449067447334528f, 0.9595667719841003f, 0.6340397596359253f, 0.9797345995903015f, 0.7734916806221008f, 0.8984467387199402f, 0.8886191248893738f, 0.47249162197113037f, +0.4393557012081146f, 0.6462767124176025f, 0.5933296084403992f, 0.42522722482681274f, 0.10916342586278915f, 0.08680140227079391f, 0.24664415419101715f, 0.47775715589523315f, +0.4855806231498718f, 0.6134840846061707f, 0.2898593246936798f, 0.8290701508522034f, 0.42900997400283813f, 0.49876919388771057f, 0.8487353920936584f, 0.319838285446167f, +0.23646484315395355f, 0.4137439429759979f, 0.6165494918823242f, 0.18418796360492706f, 0.8516511917114258f, 0.6952051520347595f, 0.046291109174489975f, 0.2549753487110138f, +0.0790400579571724f, 0.45487549901008606f, 0.6168434023857117f, 0.7066468596458435f, 0.017011823132634163f, 0.48776331543922424f, 0.6426578760147095f, 0.013052280992269516f, +0.6549369692802429f, 0.429256796836853f, 0.3049158453941345f, 0.6957093477249146f, 0.022187810391187668f, 0.03684202954173088f, 0.30731400847435f, 0.10517127811908722f, +0.26124000549316406f, 0.8894132971763611f, 0.8112437129020691f, 0.8357527852058411f, 0.9472554326057434f, 0.4329793155193329f, 0.6652222871780396f, 0.9298874139785767f, +0.6110408306121826f, 0.032409604638814926f, 0.08754116296768188f, 0.7463194727897644f, 0.5791641473770142f, 0.827066957950592f, 0.46519356966018677f, 0.5204598903656006f, +0.18158432841300964f, 0.3243331015110016f, 0.9342523813247681f, 0.15146799385547638f, 0.45928820967674255f, 0.8326301574707031f, 0.14005444943904877f, 0.09362005442380905f, +0.9953796863555908f, 0.7911762595176697f, 0.1267096996307373f, 0.34376588463783264f, 0.8510094881057739f, 0.46842941641807556f, 0.346457839012146f, 0.32749518752098083f, +0.18153725564479828f, 0.6782345771789551f, 0.4203369915485382f, 0.43732357025146484f, 0.6255802512168884f, 0.3704475462436676f, 0.20163412392139435f, 0.80680251121521f, +0.31801968812942505f, 0.4174995422363281f, 0.48962682485580444f, 0.06287279725074768f, 0.6986520290374756f, 0.6423591375350952f, 0.2377258539199829f, 0.4740665555000305f, +0.8590381741523743f, 0.39910250902175903f, 0.5029340386390686f, 0.8966150879859924f, 0.6496455669403076f, 0.5398135781288147f, 0.4770446717739105f, 0.788791298866272f, +0.8293825387954712f, 0.14845888316631317f, 0.9870501160621643f, 0.376336932182312f, 0.03848675638437271f, 0.9727913737297058f, 0.37619030475616455f, 0.42637157440185547f, +0.46650004386901855f, 0.7431149482727051f, 0.4175697863101959f, 0.640287458896637f, 0.568381130695343f, 0.2579547166824341f, 0.641636073589325f, 0.1478125900030136f, +0.31823575496673584f, 0.34915679693222046f, 0.18013985455036163f, 0.22360043227672577f, 0.04669598489999771f, 0.2913743555545807f, 0.6393958330154419f, 0.9391822218894958f, +0.11217108368873596f, 0.7453210949897766f, 0.9593744874000549f, 0.17173726856708527f, 0.9410608410835266f, 0.6299992799758911f, 0.8740059733390808f, 0.10466509312391281f, +0.17159409821033478f, 0.49536579847335815f, 0.9271700978279114f, 0.5727313756942749f, 0.957439661026001f, 0.839954674243927f, 0.5918412208557129f, 0.4700823426246643f, +0.1001657173037529f, 0.08427803963422775f, 0.03796070069074631f, 0.5527392029762268f, 0.7127602696418762f, 0.19607889652252197f, 0.7327172756195068f, 0.3460182845592499f, +0.620244562625885f, 0.6980122923851013f, 0.15063878893852234f, 0.8109145164489746f, 0.20532360672950745f, 0.8913280963897705f, 0.05896269530057907f, 0.3116239011287689f, +0.14898143708705902f, 0.8142029643058777f, 0.8496450781822205f, 0.4775434732437134f, 0.3105534017086029f, 0.5271511077880859f, 0.7324855923652649f, 0.05180090293288231f, +0.8541634678840637f, 0.31162986159324646f, 0.19724877178668976f, 0.3811572790145874f, 0.06359859555959702f, 0.04842301085591316f, 0.16851812601089478f, 0.516972005367279f, +0.32968616485595703f, 0.6283861398696899f, 0.3558507263660431f, 0.529520571231842f, 0.6685140132904053f, 0.00802494864910841f, 0.6823577284812927f, 0.4804893732070923f, +0.4705425500869751f, 0.7184487581253052f, 0.8632919192314148f, 0.7000611424446106f, 0.7056750655174255f, 0.8193451166152954f, 0.27268415689468384f, 0.4736228585243225f, +0.12253202497959137f, 0.3097652196884155f, 0.7067349553108215f, 0.8763047456741333f, 0.9348248243331909f, 0.37324681878089905f, 0.8631926774978638f, 0.0005795665783807635f, +0.16854460537433624f, 0.24294345080852509f, 0.5107361078262329f, 0.5216225981712341f, 0.5009351372718811f, 0.478626012802124f, 0.46375197172164917f, 0.7337203621864319f, +0.04044643044471741f, 0.36026376485824585f, 0.14224392175674438f, 0.8044446706771851f, 0.9371410012245178f, 0.0326550230383873f, 0.885744035243988f, 0.9980171322822571f, +0.7957698106765747f, 0.35966700315475464f, 0.4741291105747223f, 0.49295881390571594f, 0.7551672458648682f, 0.31813815236091614f, 0.9091549515724182f, 0.5421424508094788f, +0.8481045365333557f, 0.8547366261482239f, 0.013905303552746773f, 0.28406208753585815f, 0.3202040195465088f, 0.7735182046890259f, 0.08323010057210922f, 0.7832632064819336f, +0.18958406150341034f, 0.3535626530647278f, 0.568040132522583f, 0.8007280826568604f, 0.5416148900985718f, 0.6903647184371948f, 0.9646404981613159f, 0.7713019251823425f, +0.13623948395252228f, 0.8180462718009949f, 0.9199146628379822f, 0.9354081153869629f, 0.7662935256958008f, 0.9195414185523987f, 0.9703246355056763f, 0.7340379953384399f, +0.19422851502895355f, 0.6500479578971863f, 0.8765807747840881f, 0.6883804202079773f, 0.7623393535614014f, 0.027204981073737144f, 0.05161699652671814f, 0.41813552379608154f, +0.4538290500640869f, 0.2882668077945709f, 0.9704877138137817f, 0.15640610456466675f, 0.5917404890060425f, 0.8900675177574158f, 0.03289782628417015f, 0.32889458537101746f, +0.21154847741127014f, 0.13308213651180267f, 0.345159649848938f, 0.3570396900177002f, 0.06639862060546875f, 0.8183826804161072f, 0.30824461579322815f, 0.44301605224609375f, +0.6321741938591003f, 0.676125705242157f, 0.8871017098426819f, 0.3565536439418793f, 0.8391872048377991f, 0.14964871108531952f, 0.44758838415145874f, 0.3797122538089752f, +0.13498690724372864f, 0.07423631846904755f, 0.34774938225746155f, 0.9920380711555481f, 0.3515379726886749f, 0.0580490417778492f, 0.6425381302833557f, 0.7040601372718811f, +0.6312501430511475f, 0.1566656529903412f, 0.4331305921077728f, 0.6637678146362305f, 0.5297091603279114f, 0.7591109871864319f, 0.718058705329895f, 0.1331145018339157f, +0.34872937202453613f, 0.5667077302932739f, 0.009451565332710743f, 0.07611965388059616f, 0.6789050102233887f, 0.9318803548812866f, 0.3578347861766815f, 0.6367613077163696f, +0.08917607367038727f, 0.10701699554920197f, 0.07746382057666779f, 0.552294909954071f, 0.5610870718955994f, 0.0446443185210228f, 0.6468895077705383f, 0.787960946559906f, +0.2777068316936493f, 0.5759572386741638f, 0.4580576419830322f, 0.16439448297023773f, 0.7236723303794861f, 0.2549830675125122f, 0.010121823288500309f, 0.5820083618164062f, +0.8862976431846619f, 0.25246793031692505f, 0.47015830874443054f, 0.1000041514635086f, 0.11931253224611282f, 0.48751991987228394f, 0.06738389283418655f, 0.496472030878067f, +0.653569221496582f, 0.3714289963245392f, 0.4319644570350647f, 0.336825430393219f, 0.9956740736961365f, 0.42727360129356384f, 0.5465365648269653f, 0.5181028246879578f, +0.3833737075328827f, 0.19355764985084534f, 0.9675534963607788f, 0.06348181515932083f, 0.6089453101158142f, 0.3592234253883362f, 0.6000683307647705f, 0.061210520565509796f, +0.029101120308041573f, 0.5936784148216248f, 0.9095264077186584f, 0.2495739758014679f, 0.5873836874961853f, 0.1420622169971466f, 0.739567220211029f, 0.19578927755355835f, +0.7385765314102173f, 0.9067811965942383f, 0.8486055731773376f, 0.9837058186531067f, 0.29836440086364746f, 0.6877021193504333f, 0.5903028845787048f, 0.19642895460128784f, +0.8787137866020203f, 0.0841301903128624f, 0.7943556904792786f, 0.16527889668941498f, 0.8523125648498535f, 0.6870670914649963f, 0.6564018726348877f, 0.0742592066526413f, +0.1909959316253662f, 0.24246586859226227f, 0.1895219087600708f, 0.8358486890792847f, 0.0935959592461586f, 0.8047543168067932f, 0.15972061455249786f, 0.3503771126270294f, +0.1490609496831894f, 0.14397116005420685f, 0.26535898447036743f, 0.13074876368045807f, 0.27092283964157104f, 0.8563960790634155f, 0.46948665380477905f, 0.7743754982948303f, +0.7235698699951172f, 0.36247363686561584f, 0.3013670742511749f, 0.09727440029382706f, 0.8762600421905518f, 0.24587932229042053f, 0.40109652280807495f, 0.8649734258651733f, +0.9336647391319275f, 0.43708768486976624f, 0.6049294471740723f, 0.255655974149704f, 0.9328819513320923f, 0.2444666177034378f, 0.826948881149292f, 0.6702670454978943f, +0.6950446963310242f, 0.8281733989715576f, 0.08237987011671066f, 0.3642151951789856f, 0.1662401407957077f, 0.06372445076704025f, 0.006659379228949547f, 0.845617949962616f, +0.7541728615760803f, 0.9957898259162903f, 0.6618273258209229f, 0.9057500958442688f, 0.6916821599006653f, 0.5027392506599426f, 0.4648323655128479f, 0.3407818675041199f, +0.6749856472015381f, 0.03698443993926048f, 0.9009937047958374f, 0.10104287415742874f, 0.16467653214931488f, 0.9814313054084778f, 0.49538952112197876f, 0.3448074758052826f, +0.7691171169281006f, 0.3092241883277893f, 0.08165004849433899f, 0.2848353683948517f, 0.6640433073043823f, 0.19554990530014038f, 0.8237138390541077f, 0.5030222535133362f, +0.4206492602825165f, 0.25120389461517334f, 0.6046514511108398f, 0.07601730525493622f, 0.1330145299434662f, 0.6724989414215088f, 0.7874599099159241f, 0.14600715041160583f, +0.13476455211639404f, 0.3574252724647522f, 0.3986930847167969f, 0.7257353067398071f, 0.22837863862514496f, 0.7054581642150879f, 0.05976414680480957f, 0.3800572454929352f, +0.04882030561566353f, 0.05236385390162468f, 0.2687576711177826f, 0.6770342588424683f, 0.25999516248703003f, 0.0361470989882946f, 0.19319656491279602f, 0.8761172890663147f, +0.5444719791412354f, 0.8451128602027893f, 0.8813159465789795f, 0.4938143789768219f, 0.7055662870407104f, 0.8463300466537476f, 0.34398704767227173f, 0.11378219723701477f, +0.7325452566146851f, 0.1461954414844513f, 0.7555974125862122f, 0.7379223704338074f, 0.6819843053817749f, 0.7267434597015381f, 0.8767465353012085f, 0.2933420240879059f, +0.4890598952770233f, 0.0212069321423769f, 0.9891558289527893f, 0.4106234312057495f, 0.3450803756713867f, 0.1439986526966095f, 0.35904553532600403f, 0.3339088559150696f, +0.8315606713294983f, 0.21613307297229767f, 0.01344362460076809f, 0.5848115682601929f, 0.04564860463142395f, 0.7490732073783875f, 0.8253284096717834f, 0.4316701889038086f, +0.5979848504066467f, 0.44651979207992554f, 0.3943747878074646f, 0.5235708951950073f, 0.9926310777664185f, 0.29221388697624207f, 0.19680270552635193f, 0.6755350232124329f, +0.40159836411476135f, 0.987826406955719f, 0.745277464389801f, 0.9018792510032654f, 0.35084059834480286f, 0.20024383068084717f, 0.04896213114261627f, 0.49694904685020447f, +0.605735182762146f, 0.7954388856887817f, 0.19626253843307495f, 0.1956627070903778f, 0.5341795086860657f, 0.5024743676185608f, 0.014993392862379551f, 0.38540205359458923f, +0.5236415266990662f, 0.04877897724509239f, 0.6894568800926208f, 0.09259936958551407f, 0.23512321710586548f, 0.28606557846069336f, 0.9403725266456604f, 0.16200241446495056f, +0.009545564651489258f, 0.2548865079879761f, 0.6211538314819336f, 0.6058037877082825f, 0.11751123517751694f, 0.9841016530990601f, 0.868280827999115f, 0.6807576417922974f, +0.5288359522819519f, 0.7386897206306458f, 0.21845585107803345f, 0.8075259327888489f, 0.9664130210876465f, 0.7321689128875732f, 0.9266080260276794f, 0.28900957107543945f, +0.6708836555480957f, 0.5925166606903076f, 0.5760611891746521f, 0.6849597692489624f, 0.5411974787712097f, 0.5376175045967102f, 0.7623978853225708f, 0.2413891851902008f, +0.41113823652267456f, 0.06488040089607239f, 0.6999902725219727f, 0.15086820721626282f, 0.15376457571983337f, 0.9297424554824829f, 0.35885384678840637f, 0.7644932270050049f, +0.5517265200614929f, 0.8581104874610901f, 0.7613046169281006f, 0.37081804871559143f, 0.6909959316253662f, 0.75062495470047f, 0.6264210939407349f, 0.35734450817108154f, +0.41588640213012695f, 0.9325741529464722f, 0.1534324586391449f, 0.6147099137306213f, 0.2872954308986664f, 0.7505248785018921f, 0.34473681449890137f, 0.7266234755516052f, +0.3986111283302307f, 0.3822864890098572f, 0.1458597332239151f, 0.2963619530200958f, 0.5219767689704895f, 0.14067289233207703f, 0.5199370384216309f, 0.05432760342955589f, +0.8420214056968689f, 0.9314026236534119f, 0.5641862154006958f, 0.9931259751319885f, 0.2797068655490875f, 0.35241469740867615f, 0.44708967208862305f, 0.5367526412010193f, +0.9493468403816223f, 0.23425225913524628f, 0.08498836308717728f, 0.07983919978141785f, 0.7152637839317322f, 0.8234971165657043f, 0.3857296109199524f, 0.2826245129108429f, +0.2864370048046112f, 0.683264970779419f, 0.7781257629394531f, 0.4886723756790161f, 0.1549486368894577f, 0.2122451663017273f, 0.8452211022377014f, 0.2503514587879181f, +0.9887250065803528f, 0.9238770604133606f, 0.6595437526702881f, 0.48035746812820435f, 0.8619191646575928f, 0.9386931657791138f, 0.16051380336284637f, 0.9627431631088257f, +0.9744159579277039f, 0.941740095615387f, 0.10595807433128357f, 0.14068880677223206f, 0.35661211609840393f, 0.25669121742248535f, 0.6941850185394287f, 0.4722435772418976f, +0.603888750076294f, 0.4591353237628937f, 0.7980840802192688f, 0.013665251433849335f, 0.5599483251571655f, 0.38776999711990356f, 0.3471405804157257f, 0.8026894330978394f, +0.45743292570114136f, 0.21231234073638916f, 0.5065804719924927f, 0.14633575081825256f, 0.8950435519218445f, 0.5867763161659241f, 0.910106360912323f, 0.3098728060722351f, +0.9953082203865051f, 0.666747510433197f, 0.4353550374507904f, 0.8947281837463379f, 0.5719383358955383f, 0.7113384008407593f, 0.5519571900367737f, 0.5863171219825745f, +0.4874473214149475f, 0.1556743085384369f, 0.7369675636291504f, 0.925105631351471f, 0.19426105916500092f, 0.7343809604644775f, 0.961077094078064f, 0.05169342830777168f, +0.17810921370983124f, 0.7849077582359314f, 0.6843792796134949f, 0.35273537039756775f, 0.49280235171318054f, 0.12099360674619675f, 0.586336076259613f, 0.276228666305542f, +0.5898850560188293f, 0.7591930031776428f, 0.5276045799255371f, 0.31932228803634644f, 0.14917610585689545f, 0.9900056719779968f, 0.035668738186359406f, 0.8014650344848633f, +0.8675276041030884f, 0.2973172664642334f, 0.011039095930755138f, 0.14318662881851196f, 0.6018694043159485f, 0.18767878413200378f, 0.7140759229660034f, 0.04367468133568764f, +0.8636370301246643f, 0.4637971818447113f, 0.44434624910354614f, 0.3136444687843323f, 0.24275095760822296f, 0.7901705503463745f, 0.7493728995323181f, 0.712225615978241f, +0.617226243019104f, 0.4846939444541931f, 0.43818676471710205f, 0.14349178969860077f, 0.8476974368095398f, 0.9915418028831482f, 0.5379908084869385f, 0.5145414471626282f, +0.22534428536891937f, 0.177499920129776f, 0.05418362095952034f, 0.3038042187690735f, 0.890042245388031f, 0.7300527095794678f, 0.43033918738365173f, 0.9075498580932617f, +0.0817367359995842f, 0.5357419848442078f, 0.7102137804031372f, 0.4585888683795929f, 0.47434648871421814f, 0.31247830390930176f, 0.1745961308479309f, 0.7754708528518677f, +0.760891854763031f, 0.24993860721588135f, 0.127696231007576f, 0.16630099713802338f, 0.8305762410163879f, 0.34933575987815857f, 0.8312034010887146f, 0.13936792314052582f, +0.5457091927528381f, 0.9447354078292847f, 0.18837884068489075f, 0.12631545960903168f, 0.7557935118675232f, 0.20014186203479767f, 0.5930695533752441f, 0.6535324454307556f, +0.10266292840242386f, 0.4466666281223297f, 0.32241156697273254f, 0.8811149597167969f, 0.40873420238494873f, 0.10176324844360352f, 0.4897434413433075f, 0.6402870416641235f, +0.09185144305229187f, 0.9097386002540588f, 0.2922469973564148f, 0.3746076226234436f, 0.8549010753631592f, 0.5216160416603088f, 0.3484632968902588f, 0.3278653621673584f, +0.2106473594903946f, 0.8079742193222046f, 0.47818413376808167f, 0.15466813743114471f, 0.5743982791900635f, 0.8448567986488342f, 0.6751188039779663f, 0.07080978900194168f, +0.18363147974014282f, 0.6168310642242432f, 0.13339544832706451f, 0.8525232076644897f, 0.5058833360671997f, 0.42397794127464294f, 0.3505876660346985f, 0.9604939818382263f, +0.2642028331756592f, 0.37992793321609497f, 0.5808286666870117f, 0.8141929507255554f, 0.9258164167404175f, 0.9028341174125671f, 0.28576746582984924f, 0.6165903806686401f, +0.6079698801040649f, 0.8868979811668396f, 0.984846830368042f, 0.11293534189462662f, 0.9412662386894226f, 0.1541275531053543f, 0.8698506951332092f, 0.4054868519306183f, +0.6696673035621643f, 0.6919113397598267f, 0.5939169526100159f, 0.7070790529251099f, 0.10567263513803482f, 0.07390754669904709f, 0.2031622678041458f, 0.011950546875596046f, +0.9459242224693298f, 0.557091236114502f, 0.9020253419876099f, 0.8888943791389465f, 0.2947391867637634f, 0.09492527693510056f, 0.03916894271969795f, 0.24810683727264404f, +0.36396360397338867f, 0.8861457705497742f, 0.7965344190597534f, 0.23643285036087036f, 0.539009153842926f, 0.4458569288253784f, 0.20261484384536743f, 0.08120125532150269f, +0.3235679566860199f, 0.7854272127151489f, 0.2745527923107147f, 0.6078919172286987f, 0.24281729757785797f, 0.3804585337638855f, 0.5477403998374939f, 0.7534019351005554f, +0.8341045379638672f, 0.041788674890995026f, 0.31719809770584106f, 0.972295343875885f, 0.9705051779747009f, 0.1628628522157669f, 0.2669641673564911f, 0.6378756165504456f, +0.007693970110267401f, 0.48034048080444336f, 0.6566641926765442f, 0.1457960158586502f, 0.574688732624054f, 0.9541621804237366f, 0.4546724557876587f, 0.932988703250885f, +0.9245675206184387f, 0.3451533913612366f, 0.6417892575263977f, 0.44048336148262024f, 0.2965458929538727f, 0.20245221257209778f, 0.5818930864334106f, 0.8440730571746826f, +0.717804491519928f, 0.251512348651886f, 0.666396975517273f, 0.11559983342885971f, 0.13193731009960175f, 0.4154217839241028f, 0.4368267357349396f, 0.2550221085548401f, +0.546433687210083f, 0.8866614699363708f, 0.08191246539354324f, 0.6669028401374817f, 0.9791247844696045f, 0.9709983468055725f, 0.6143277287483215f, 0.5354726910591125f, +0.39897868037223816f, 0.3670482039451599f, 0.2712428867816925f, 0.1293182224035263f, 0.1646154373884201f, 0.0881526842713356f, 0.12815359234809875f, 0.41365504264831543f, +0.09762710332870483f, 0.25324270129203796f, 0.8131426572799683f, 0.25095656514167786f, 0.15666654706001282f, 0.15788330137729645f, 0.9365668296813965f, 0.4734070301055908f, +0.6768640279769897f, 0.046908847987651825f, 0.10930214822292328f, 0.6935444474220276f, 0.6828352212905884f, 0.12638987600803375f, 0.721992552280426f, 0.6756479740142822f, +0.33023473620414734f, 0.5741773843765259f, 0.7372897863388062f, 0.6733173131942749f, 0.6409128904342651f, 0.38033154606819153f, 0.5076431035995483f, 0.08001422882080078f, +0.032685380429029465f, 0.554818868637085f, 0.10047763586044312f, 0.10090874880552292f, 0.20586538314819336f, 0.23811626434326172f, 0.8398247957229614f, 0.23263637721538544f, +0.8982961773872375f, 0.4498746395111084f, 0.02213338017463684f, 0.7245732545852661f, 0.18894144892692566f, 0.5687286853790283f, 0.05452064052224159f, 0.7535034418106079f, +0.24626009166240692f, 0.515609622001648f, 0.6607335209846497f, 0.9440181851387024f, 0.6666401624679565f, 0.9391395449638367f, 0.5077047944068909f, 0.4204646348953247f, +0.5463350415229797f, 0.603030800819397f, 0.08892254531383514f, 0.7726907730102539f, 0.7363541126251221f, 0.06808415055274963f, 0.6957334280014038f, 0.9918890595436096f, +0.4092104136943817f, 0.861341118812561f, 0.5278350114822388f, 0.5429791808128357f, 0.8094887137413025f, 0.3691026568412781f, 0.7176559567451477f, 0.3797997534275055f, +0.037077128887176514f, 0.8268868327140808f, 0.6745821237564087f, 0.2963339686393738f, 0.5215017795562744f, 0.9377841353416443f, 0.3506775200366974f, 0.6761851906776428f, +0.9277333617210388f, 0.8971782326698303f, 0.25292110443115234f, 0.6078620553016663f, 0.2652546465396881f, 0.6661266684532166f, 0.4933360815048218f, 0.7067731022834778f, +0.7930018305778503f, 0.18984004855155945f, 0.09664733707904816f, 0.9106481075286865f, 0.4235892593860626f, 0.3733493983745575f, 0.9151094555854797f, 0.9574575424194336f, +0.09569920599460602f, 0.8420504331588745f, 0.6909136176109314f, 0.13545559346675873f, 0.8365452289581299f, 0.3395446836948395f, 0.5048313140869141f, 0.31063112616539f, +0.3375273048877716f, 0.7608191967010498f, 0.6526218056678772f, 0.6449888348579407f, 0.8752259016036987f, 0.8116570711135864f, 0.3017061650753021f, 0.48127180337905884f, +0.0490339919924736f, 0.36277881264686584f, 0.029885761439800262f, 0.3502733111381531f, 0.01064489409327507f, 0.2189999222755432f, 0.17385682463645935f, 0.9264314770698547f, +0.7102391123771667f, 0.4709911346435547f, 0.049544088542461395f, 0.05169917270541191f, 0.5023515820503235f, 0.6980788111686707f, 0.39642027020454407f, 0.5541932582855225f, +0.38103756308555603f, 0.6604898571968079f, 0.25120776891708374f, 0.1422131359577179f, 0.9153587222099304f, 0.10079639405012131f, 0.6642491221427917f, 0.13205602765083313f, +0.5378918051719666f, 0.5369938611984253f, 0.3311288058757782f, 0.39333394169807434f, 0.1961122453212738f, 0.2503056824207306f, 0.7321519255638123f, 0.7120757102966309f, +0.26968085765838623f, 0.4896053969860077f, 0.5828725099563599f, 0.8731486797332764f, 0.40951794385910034f, 0.5888460874557495f, 0.560192883014679f, 0.19731338322162628f, +0.44346219301223755f, 0.5832171440124512f, 0.8365072011947632f, 0.6300473809242249f, 0.14838984608650208f, 0.6930148005485535f, 0.25922253727912903f, 0.9826326966285706f, +0.5768308639526367f, 0.21410050988197327f, 0.7894343733787537f, 0.858282744884491f, 0.5488568544387817f, 0.10824324190616608f, 0.3466411530971527f, 0.5942052602767944f, +0.09315446019172668f, 0.479526162147522f, 0.483633816242218f, 0.9300212860107422f, 0.7830373644828796f, 0.36752572655677795f, 0.9860231876373291f, 0.11002332717180252f, +0.4585902690887451f, 0.27456042170524597f, 0.25441738963127136f, 0.4440583288669586f, 0.15981954336166382f, 0.08021632581949234f, 0.848548948764801f, 0.5581474304199219f, +0.8558072447776794f, 0.6878721714019775f, 0.3550647497177124f, 0.5066331028938293f, 0.6647652387619019f, 0.24956028163433075f, 0.02156021073460579f, 0.42487475275993347f, +0.7273074984550476f, 0.1519860327243805f, 0.320324569940567f, 0.782478392124176f, 0.3480818271636963f, 0.4853114187717438f, 0.5320809483528137f, 0.22358153760433197f, +0.4895569384098053f, 0.0805019736289978f, 0.32792770862579346f, 0.546891450881958f, 0.9876136183738708f, 0.703245997428894f, 0.284807413816452f, 0.4552628993988037f, +0.22630193829536438f, 0.40663206577301025f, 0.7898992896080017f, 0.459562748670578f, 0.6247838735580444f, 0.10018514096736908f, 0.6684134006500244f, 0.7139641046524048f, +0.9407328367233276f, 0.5798524022102356f, 0.9778851270675659f, 0.6712070107460022f, 0.3651317059993744f, 0.16025248169898987f, 0.41176989674568176f, 0.7949298024177551f, +0.02790662832558155f, 0.3318220376968384f, 0.9903255105018616f, 0.40104496479034424f, 0.07691575586795807f, 0.6623831391334534f, 0.9424975514411926f, 0.8333833813667297f, +0.4426030218601227f, 0.08652285486459732f, 0.8541547656059265f, 0.8526617884635925f, 0.409770667552948f, 0.8202263712882996f, 0.7143857479095459f, 0.22653530538082123f, +0.8036602139472961f, 0.5570456385612488f, 0.10643108934164047f, 0.7623821496963501f, 0.9085145592689514f, 0.23295366764068604f, 0.4527025520801544f, 0.049958355724811554f, +0.5537106394767761f, 0.3303345739841461f, 0.8835810422897339f, 0.7645825147628784f, 0.6098898649215698f, 0.723770260810852f, 0.6741186380386353f, 0.7277451753616333f, +0.41819027066230774f, 0.35524100065231323f, 0.5382643342018127f, 0.48375406861305237f, 0.06509391218423843f, 0.8670154213905334f, 0.44991177320480347f, 0.176230788230896f, +0.992196261882782f, 0.5325600504875183f, 0.8495878577232361f, 0.8498385548591614f, 0.35551875829696655f, 0.10933645069599152f, 0.7458608746528625f, 0.8718786835670471f, +0.9359868168830872f, 0.6083884239196777f, 0.506503701210022f, 0.4326796531677246f, 0.1999976634979248f, 0.6518645882606506f, 0.4355115592479706f, 0.6769134402275085f, +0.7504588961601257f, 0.10797321796417236f, 0.6228502988815308f, 0.38424843549728394f, 0.7148513793945312f, 0.06953305006027222f, 0.45669466257095337f, 0.060022301971912384f, +0.5564030408859253f, 0.5143964886665344f, 0.8678026795387268f, 0.8286373019218445f, 0.445830762386322f, 0.7358244061470032f, 0.3362480700016022f, 0.1812087744474411f, +0.44271743297576904f, 0.12033309787511826f, 0.325990229845047f, 0.055044058710336685f, 0.7029754519462585f, 0.6216760277748108f, 0.3363984227180481f, 0.02742784284055233f, +0.5106528401374817f, 0.35099175572395325f, 0.6231703162193298f, 0.8889961242675781f, 0.5041040778160095f, 0.8950603008270264f, 0.8489570021629333f, 0.09151620417833328f, +0.5116100907325745f, 0.37955793738365173f, 0.11838467419147491f, 0.2718537747859955f, 0.37925490736961365f, 0.9891994595527649f, 0.29833418130874634f, 0.19524477422237396f, +0.03274111449718475f, 0.6684471368789673f, 0.23304547369480133f, 0.7871783375740051f, 0.4240611791610718f, 0.7591089010238647f, 0.43611231446266174f, 0.6081869006156921f, +0.5224882364273071f, 0.8745976686477661f, 0.31391096115112305f, 0.27627038955688477f, 0.08618292957544327f, 0.06905623525381088f, 0.599532425403595f, 0.6902855634689331f, +0.09427240490913391f, 0.6545364260673523f, 0.42463260889053345f, 0.42722025513648987f, 0.3760266602039337f, 0.46181270480155945f, 0.3887801170349121f, 0.853600263595581f, +0.572342038154602f, 0.7150275707244873f, 0.65911865234375f, 0.17839790880680084f, 0.4749797582626343f, 0.6570034623146057f, 0.39376217126846313f, 0.7178229093551636f, +0.26442715525627136f, 0.5789557695388794f, 0.8399247527122498f, 0.8606277108192444f, 0.8570880889892578f, 0.5765933990478516f, 0.1599007099866867f, 0.07007572799921036f, +0.2320319265127182f, 0.9182584285736084f, 0.34612125158309937f, 0.12824296951293945f, 0.008818771690130234f, 0.6870012879371643f, 0.9464200735092163f, 0.19486334919929504f, +0.5482515692710876f, 0.8741905093193054f, 0.09999293833971024f, 0.20026718080043793f, 0.8771224021911621f, 0.24479348957538605f, 0.5007294416427612f, 0.8924708962440491f, +0.5325605273246765f, 0.3750086724758148f, 0.04341712221503258f, 0.17578347027301788f, 0.4798327684402466f, 0.4658958315849304f, 0.7551573514938354f, 0.040002837777137756f, +0.1988525390625f, 0.3836080729961395f, 0.5695306062698364f, 0.04553259164094925f, 0.8233017921447754f, 0.5205053687095642f, 0.5961462259292603f, 0.5336475968360901f, +0.026338927447795868f, 0.6117373108863831f, 0.0448208786547184f, 0.09197640419006348f, 0.7152290344238281f, 0.28065264225006104f, 0.6533054113388062f, 0.6635366678237915f, +0.34452709555625916f, 0.7216131091117859f, 0.39949193596839905f, 0.7840293645858765f, 0.20308828353881836f, 0.9969820380210876f, 0.8354828357696533f, 0.33814525604248047f, +0.6094691753387451f, 0.2842470407485962f, 0.09073427319526672f, 0.9237229228019714f, 0.9383808970451355f, 0.1932733952999115f, 0.9636887907981873f, 0.8879402875900269f, +0.7938163876533508f, 0.15728457272052765f, 0.7407130002975464f, 0.15618059039115906f, 0.036832161247730255f, 0.9110113978385925f, 0.517510712146759f, 0.02193748950958252f, +0.720331072807312f, 0.14084865152835846f, 0.02984820492565632f, 0.8724362850189209f, 0.0034287148155272007f, 0.027347764000296593f, 0.9975800514221191f, 0.8891942501068115f, +0.6979829668998718f, 0.7556827664375305f, 0.44628965854644775f, 0.8508198857307434f, 0.9762354493141174f, 0.21874713897705078f, 0.6013148427009583f, 0.8021357655525208f, +0.2770540714263916f, 0.8046837449073792f, 0.7514486312866211f, 0.515714704990387f, 0.5062435269355774f, 0.31842783093452454f, 0.080501489341259f, 0.6355966329574585f, +0.3547559082508087f, 0.9051510691642761f, 0.7093971371650696f, 0.019617829471826553f, 0.316661536693573f, 0.24828244745731354f, 0.3299453854560852f, 0.3613206148147583f, +0.7861557006835938f, 0.3016866147518158f, 0.846017062664032f, 0.5680771470069885f, 0.12001869827508926f, 0.7157798409461975f, 0.8276662826538086f, 0.7955881357192993f, +0.038620442152023315f, 0.06378243118524551f, 0.5852586627006531f, 0.13731420040130615f, 0.36775243282318115f, 0.6582111120223999f, 0.5286517143249512f, 0.7529075145721436f, +0.8703580498695374f, 0.6757429838180542f, 0.2862415015697479f, 0.6808806657791138f, 0.8398206830024719f, 0.7603329420089722f, 0.8953171968460083f, 0.22492891550064087f, +0.6778732538223267f, 0.3756856620311737f, 0.47237685322761536f, 0.7620033025741577f, 0.22512347996234894f, 0.9717448353767395f, 0.011926326900720596f, 0.7681434154510498f, +0.49656227231025696f, 0.8797814846038818f, 0.6952993869781494f, 0.6682776808738708f, 0.4113774001598358f, 0.5332358479499817f, 0.2452998161315918f, 0.10110023617744446f, +0.23814018070697784f, 0.6108277440071106f, 0.7930036187171936f, 0.9531936049461365f, 0.8671068549156189f, 0.631980836391449f, 0.7896178364753723f, 0.980977475643158f, +0.6013656258583069f, 0.8010143637657166f, 0.15508313477039337f, 0.6723225116729736f, 0.7369775772094727f, 0.5130260586738586f, 0.3495364487171173f, 0.6006545424461365f, +0.4741242527961731f, 0.046632010489702225f, 0.7651766538619995f, 0.5942623615264893f, 0.8387854099273682f, 0.373063325881958f, 0.9382030963897705f, 0.9757431149482727f, +0.15294994413852692f, 0.9043667912483215f, 0.9396803975105286f, 0.8900398015975952f, 0.3873211741447449f, 0.9107311367988586f, 0.9975069165229797f, 0.18321454524993896f, +0.3196714520454407f, 0.6756759285926819f, 0.6250665187835693f, 0.33264607191085815f, 0.07863347977399826f, 0.909110426902771f, 0.08573170751333237f, 0.26855456829071045f, +0.8767544031143188f, 0.2574629783630371f, 0.0005317803006619215f, 0.7693167328834534f, 0.44450604915618896f, 0.5296157002449036f, 0.7344702482223511f, 0.3719494044780731f, +0.08524391800165176f, 0.38506948947906494f, 0.2559145987033844f, 0.5218028426170349f, 0.5915688872337341f, 0.3247185945510864f, 0.11693836748600006f, 0.8932488560676575f, +0.9109140634536743f, 0.6224242448806763f, 0.9783322811126709f, 0.33886146545410156f, 0.30127641558647156f, 0.3195696473121643f, 0.9764009714126587f, 0.6527044177055359f, +0.4441547691822052f, 0.8732213377952576f, 0.46184852719306946f, 0.6144501566886902f, 0.6830255389213562f, 0.17869357764720917f, 0.8023977875709534f, 0.35826385021209717f, +0.893873929977417f, 0.45755448937416077f, 0.11095134913921356f, 0.6392453908920288f, 0.4293299615383148f, 0.7732008099555969f, 0.1079554632306099f, 0.6368362903594971f, +0.7132866978645325f, 0.5503641366958618f, 0.7558741569519043f, 0.8303778171539307f, 0.6058535575866699f, 0.22298665344715118f, 0.18454736471176147f, 0.14770348370075226f, +0.423056423664093f, 0.25665462017059326f, 0.09154161810874939f, 0.4157295823097229f, 0.033481042832136154f, 0.3825004994869232f, 0.5010682940483093f, 0.25852829217910767f, +0.559371829032898f, 0.12863780558109283f, 0.5646215081214905f, 0.010757002979516983f, 0.6997567415237427f, 0.5953899025917053f, 0.33987483382225037f, 0.9425778985023499f, +0.9525654315948486f, 0.5122256278991699f, 0.1531497985124588f, 0.7760136723518372f, 0.3884197771549225f, 0.6969675421714783f, 0.1047288328409195f, 0.889272153377533f, +0.8211045265197754f, 0.21103039383888245f, 0.6073434352874756f, 0.38904473185539246f, 0.1366620510816574f, 0.3592558801174164f, 0.12275779247283936f, 0.8271380066871643f, +0.4308004081249237f, 0.384325236082077f, 0.2599838376045227f, 0.4458942711353302f, 0.23434512317180634f, 0.47901225090026855f, 0.9724738001823425f, 0.6006140112876892f, +0.09934715926647186f, 0.15481151640415192f, 0.9775333404541016f, 0.042502857744693756f, 0.05163773149251938f, 0.5505097508430481f, 0.09058306366205215f, 0.15750089287757874f, +0.3928820490837097f, 0.4628291428089142f, 0.5629482269287109f, 0.12770870327949524f, 0.1869206428527832f, 0.039875201880931854f, 0.7597912549972534f, 0.805209755897522f, +0.8388697504997253f, 0.14351002871990204f, 0.27606120705604553f, 0.23201128840446472f, 0.49369627237319946f, 0.7591596245765686f, 0.769651472568512f, 0.05147520825266838f, +0.6566046476364136f, 0.9551059007644653f, 0.6784787178039551f, 0.4549998641014099f, 0.6688913702964783f, 0.5477402210235596f, 0.7628262042999268f, 0.6508806943893433f, +0.029603762552142143f, 0.8137189149856567f, 0.8111703395843506f, 0.5969607830047607f, 0.28925013542175293f, 0.8513815402984619f, 0.6257833242416382f, 0.7189033031463623f, +0.8821197152137756f, 0.9777650833129883f, 0.7207310795783997f, 0.9059339761734009f, 0.5930057168006897f, 0.22128282487392426f, 0.637529194355011f, 0.7730371356010437f, +0.9676164388656616f, 0.6414814591407776f, 0.2317180335521698f, 0.1693481206893921f, 0.30778437852859497f, 0.3853280246257782f, 0.6573169827461243f, 0.3459128737449646f, +0.33934348821640015f, 0.2464078664779663f, 0.7624453902244568f, 0.6106442809104919f, 0.9332108497619629f, 0.1397857815027237f, 0.05218008533120155f, 0.8606599569320679f, +0.12874238193035126f, 0.8773754239082336f, 0.10736633092164993f, 0.6756705641746521f, 0.08980050683021545f, 0.6690536141395569f, 0.4654780626296997f, 0.15202391147613525f, +0.3215864300727844f, 0.7764788866043091f, 0.7329744696617126f, 0.7185385227203369f, 0.5077691674232483f, 0.8035119771957397f, 0.39392998814582825f, 0.6056561470031738f, +0.04872054606676102f, 0.1132732555270195f, 0.5569062232971191f, 0.5457393527030945f, 0.7210847735404968f, 0.8074700236320496f, 0.8232975006103516f, 0.1086321771144867f, +0.9306393265724182f, 0.33325448632240295f, 0.48563989996910095f, 0.13312268257141113f, 0.352729856967926f, 0.00461895577609539f, 0.9949712753295898f, 0.8962917923927307f, +0.14059457182884216f, 0.2927376329898834f, 0.24321778118610382f, 0.07859116792678833f, 0.6867448091506958f, 0.4510015547275543f, 0.8773377537727356f, 0.9041028618812561f, +0.7227479219436646f, 0.7782629728317261f, 0.9712876677513123f, 0.45116126537323f, 0.7038934826850891f, 0.9853667616844177f, 0.9381389617919922f, 0.6217954754829407f, +0.7948276400566101f, 0.5645300149917603f, 0.6895213723182678f, 0.8479915857315063f, 0.3537923991680145f, 0.39519429206848145f, 0.5464913249015808f, 0.8366805911064148f, +0.47401127219200134f, 0.3365105092525482f, 0.62847501039505f, 0.41632089018821716f, 0.4431971311569214f, 0.22349287569522858f, 0.8722028136253357f, 0.6852238178253174f, +0.30757564306259155f, 0.28662988543510437f, 0.8340355753898621f, 0.5906062722206116f, 0.15296588838100433f, 0.1350877285003662f, 0.6604385375976562f, 0.05741661787033081f, +0.7567542791366577f, 0.8958142995834351f, 0.3143741488456726f, 0.34582817554473877f, 0.6032817959785461f, 0.9706339240074158f, 0.9807473421096802f, 0.7795408368110657f, +0.3446515202522278f, 0.45930829644203186f, 0.03493240848183632f, 0.1499815583229065f, 0.9148479700088501f, 0.36977922916412354f, 0.1064058393239975f, 0.19559024274349213f, +0.0998581200838089f, 0.38317424058914185f, 0.9174754619598389f, 0.5193679928779602f, 0.7578312158584595f, 0.713970959186554f, 0.7962563037872314f, 0.0039697010070085526f, +0.7514718174934387f, 0.1847594678401947f, 0.6325297951698303f, 0.1030801385641098f, 0.7122887372970581f, 0.40818533301353455f, 0.904939591884613f, 0.4448685050010681f, +0.024946216493844986f, 0.22246704995632172f, 0.7161776423454285f, 0.20076583325862885f, 0.1338380128145218f, 0.5355075597763062f, 0.36213448643684387f, 0.9704824090003967f, +0.015425745397806168f, 0.5144618153572083f, 0.8088392019271851f, 0.21244779229164124f, 0.28802016377449036f, 0.4783216714859009f, 0.1919523924589157f, 0.28284549713134766f, +0.9542834162712097f, 0.7230974435806274f, 0.723266065120697f, 0.6046608686447144f, 0.8107186555862427f, 0.9673299789428711f, 0.9483521580696106f, 0.5551886558532715f, +0.2067127227783203f, 0.5268499851226807f, 0.8562030792236328f, 0.7306550145149231f, 0.8111461400985718f, 0.09725182503461838f, 0.11374253779649734f, 0.3143535554409027f, +0.9909892678260803f, 0.4468109905719757f, 0.3421497344970703f, 0.20390285551548004f, 0.610725462436676f, 0.8973301649093628f, 0.8878032565116882f, 0.7018516659736633f, +0.913454532623291f, 0.45114660263061523f, 0.09306534379720688f, 0.8191595673561096f, 0.14514897763729095f, 0.7387875318527222f, 0.6801677942276001f, 0.5197777152061462f, +0.18038798868656158f, 0.6395491361618042f, 0.9985012412071228f, 0.09824063628911972f, 0.20881658792495728f, 0.845769464969635f, 0.721393346786499f, 0.6045709252357483f, +0.042908456176519394f, 0.03343719244003296f, 0.9229623675346375f, 0.040391433984041214f, 0.8507021069526672f, 0.5724685788154602f, 0.9574994444847107f, 0.9605609774589539f, +0.20834416151046753f, 0.9285430312156677f, 0.8424893021583557f, 0.7989919781684875f, 0.8770512342453003f, 0.45402249693870544f, 0.814994215965271f, 0.446805864572525f, +0.9830896854400635f, 0.08346068859100342f, 0.4486995339393616f, 0.8187926411628723f, 0.7686842083930969f, 0.28331759572029114f, 0.6841574311256409f, 0.2766795754432678f, +0.5353664755821228f, 0.9312995076179504f, 0.3612254559993744f, 0.24940505623817444f, 0.2047889083623886f, 0.037822987884283066f, 0.8138110637664795f, 0.8288482427597046f, +0.9913146495819092f, 0.5742608308792114f, 0.1858406364917755f, 0.12303704768419266f, 0.9842293858528137f, 0.7116801738739014f, 0.6655001044273376f, 0.6128020286560059f, +0.5044785737991333f, 0.08743476867675781f, 0.7419122457504272f, 0.5518147945404053f, 0.9284090399742126f, 0.8563547134399414f, 0.6871475577354431f, 0.6078091263771057f, +0.5633838176727295f, 0.6305198669433594f, 0.03566242381930351f, 0.857100784778595f, 0.8035311102867126f, 0.6083992719650269f, 0.4157586395740509f, 0.22304044663906097f, +0.8376439809799194f, 0.08274335414171219f, 0.7714594602584839f, 0.057178277522325516f, 0.5510745644569397f, 0.8761246800422668f, 0.8502876162528992f, 0.33856725692749023f, +0.9755787253379822f, 0.2373732179403305f, 0.27128928899765015f, 0.18162597715854645f, 0.032721567898988724f, 0.6057299375534058f, 0.9575737714767456f, 0.44453325867652893f, +0.2971247732639313f, 0.4566038250923157f, 0.2864784598350525f, 0.6323768496513367f, 0.3340752422809601f, 0.5155999064445496f, 0.41011741757392883f, 0.739654004573822f, +0.585935115814209f, 0.3374886214733124f, 0.10977756232023239f, 0.9858071804046631f, 0.8136922121047974f, 0.03934245556592941f, 0.2102304995059967f, 0.6704691052436829f, +0.5687127709388733f, 0.16026288270950317f, 0.9732903838157654f, 0.8860082030296326f, 0.04414355382323265f, 0.3661159574985504f, 0.16198554635047913f, 0.04616083204746246f, +0.6673576831817627f, 0.7647549510002136f, 0.5003604888916016f, 0.903540313243866f, 0.8841036558151245f, 0.996548056602478f, 0.5427283048629761f, 0.6886712908744812f, +0.7039667367935181f, 0.14485250413417816f, 0.009025190956890583f, 0.6983330845832825f, 0.29983583092689514f, 0.6032689213752747f, 0.9442793130874634f, 0.6708522439002991f, +0.24250498414039612f, 0.9477119445800781f, 0.9645832180976868f, 0.7027450799942017f, 0.014118577353656292f, 0.423955500125885f, 0.14938800036907196f, 0.26233839988708496f, +0.17616890370845795f, 0.09108108282089233f, 0.9638893008232117f, 0.3817029595375061f, 0.6002382636070251f, 0.007535201031714678f, 0.7808919548988342f, 0.9127117395401001f, +0.2369510680437088f, 0.514927327632904f, 0.7590769529342651f, 0.8481752276420593f, 0.08811453729867935f, 0.007157336920499802f, 0.3310653269290924f, 0.19866640865802765f, +0.11716976016759872f, 0.26918667554855347f, 0.9349493384361267f, 0.7276001572608948f, 0.2651275396347046f, 0.6959073543548584f, 0.6070328950881958f, 0.6220002174377441f, +0.9211285710334778f, 0.22494836151599884f, 0.9557855725288391f, 0.5475115776062012f, 0.6976746916770935f, 0.48630794882774353f, 0.865993082523346f, 0.2913392186164856f, +0.48289623856544495f, 0.09610999375581741f, 0.6319692730903625f, 0.7948591709136963f, 0.06546211242675781f, 0.766478419303894f, 0.3217979073524475f, 0.6060203909873962f, +0.16969327628612518f, 0.00491521367803216f, 0.2832395136356354f, 0.11096666753292084f, 0.8797050714492798f, 0.6811961531639099f, 0.8889905214309692f, 0.9935048818588257f, +0.26908984780311584f, 0.9907947182655334f, 0.4344026744365692f, 0.8098432421684265f, 0.9202736020088196f, 0.9034512042999268f, 0.5407631993293762f, 0.7550457715988159f, +0.3201233446598053f, 0.7905648350715637f, 0.9456155896186829f, 0.05413605645298958f, 0.11036445200443268f, 0.6147269010543823f, 0.6926757097244263f, 0.4449771046638489f, +0.9159889221191406f, 0.4600122570991516f, 0.47392576932907104f, 0.7959427237510681f, 0.6976642608642578f, 0.6664617657661438f, 0.2174452245235443f, 0.6960865259170532f, +0.8717775940895081f, 0.7303341031074524f, 0.9348641633987427f, 0.8973302245140076f, 0.5442581176757812f, 0.918400228023529f, 0.7128269076347351f, 0.3959946930408478f, +0.30866101384162903f, 0.6752097606658936f, 0.9654126167297363f, 0.5578235983848572f, 0.007246728055179119f, 0.46586060523986816f, 0.7609555125236511f, 0.7550605535507202f, +0.88303142786026f, 0.2343842089176178f, 0.018330665305256844f, 0.3785656988620758f, 0.07947449386119843f, 0.49638164043426514f, 0.37846100330352783f, 0.24600514769554138f, +0.2840862274169922f, 0.30637580156326294f, 0.06982944905757904f, 0.5021874904632568f, 0.7838940024375916f, 0.9204326272010803f, 0.8691641688346863f, 0.5096899271011353f, +0.5417361259460449f, 0.3536943197250366f, 0.06045740470290184f, 0.7956346273422241f, 0.04648903012275696f, 0.4163209795951843f, 0.33258169889450073f, 0.39959731698036194f, +0.8684490919113159f, 0.2877230942249298f, 0.627544105052948f, 0.4477761685848236f, 0.7577940821647644f, 0.3768470883369446f, 0.6327639818191528f, 0.14019253849983215f, +0.24855166673660278f, 0.19175536930561066f, 0.5014674067497253f, 0.7455834746360779f, 0.23544859886169434f, 0.7753332257270813f, 0.38619428873062134f, 0.276944100856781f, +0.9503690600395203f, 0.5324372053146362f, 0.8259367942810059f, 0.260375052690506f, 0.07509192079305649f, 0.9149211645126343f, 0.4719218909740448f, 0.7415463328361511f, +0.9957100749015808f, 0.26943719387054443f, 0.7066872119903564f, 0.17275243997573853f, 0.7584570050239563f, 0.36827531456947327f, 0.7360643744468689f, 0.4187202453613281f, +0.36013129353523254f, 0.20066122710704803f, 0.20838123559951782f, 0.41689690947532654f, 0.299686998128891f, 0.6431298851966858f, 0.20319117605686188f, 0.07774810492992401f, +0.6528030037879944f, 0.5921620726585388f, 0.5322174429893494f, 0.472768634557724f, 0.2553953230381012f, 0.8188716769218445f, 0.3986484408378601f, 0.6523889899253845f, +0.5148175358772278f, 0.27827292680740356f, 0.5616839528083801f, 0.29526790976524353f, 0.307503342628479f, 0.12122967094182968f, 0.6323279142379761f, 0.9695596098899841f, +0.9019704461097717f, 0.10840435326099396f, 0.3793989419937134f, 0.41084209084510803f, 0.7749930620193481f, 0.7309601306915283f, 0.2279362976551056f, 0.7642722725868225f, +0.9312896132469177f, 0.4593510627746582f, 0.27814728021621704f, 0.5709747672080994f, 0.40081921219825745f, 0.8979305028915405f, 0.7575047612190247f, 0.6177088618278503f, +0.49605998396873474f, 0.15913185477256775f, 0.10763601213693619f, 0.1305762529373169f, 0.40289565920829773f, 0.2599952220916748f, 0.7494314312934875f, 0.9596490859985352f, +0.4775046110153198f, 0.12172222137451172f, 0.3749174475669861f, 0.4384212791919708f, 0.8610798120498657f, 0.6715329885482788f, 0.8580382466316223f, 0.8837827444076538f, +0.867011547088623f, 0.3010965883731842f, 0.9380345940589905f, 0.6076131463050842f, 0.6031751036643982f, 0.526086151599884f, 0.26907068490982056f, 0.9765926003456116f, +0.6383601427078247f, 0.23284649848937988f, 0.5479863286018372f, 0.6487257480621338f, 0.33712342381477356f, 0.5726847052574158f, 0.7110127806663513f, 0.4075455367565155f, +0.8447532057762146f, 0.3807421326637268f, 0.926864743232727f, 0.9639424681663513f, 0.8335860371589661f, 0.18704795837402344f, 0.28174877166748047f, 0.9232895374298096f, +0.8518122434616089f, 0.8723942637443542f, 0.7440249919891357f, 0.3113434910774231f, 0.07014679163694382f, 0.6320801377296448f, 0.9721834659576416f, 0.2958389222621918f, +0.9899880886077881f, 0.28015273809432983f, 0.6701619029045105f, 0.9215591549873352f, 0.9513669013977051f, 0.5046969056129456f, 0.6892778873443604f, 0.05562473088502884f, +0.5742378830909729f, 0.6784007549285889f, 0.44935616850852966f, 0.8953295946121216f, 0.3592173755168915f, 0.4315917491912842f, 0.7659297585487366f, 0.275840163230896f, +0.37438446283340454f, 0.7156317234039307f, 0.8270437121391296f, 0.4998364746570587f, 0.02530284970998764f, 0.9367114305496216f, 0.5176697373390198f, 0.426770955324173f, +0.05662303417921066f, 0.5411436557769775f, 0.2977798283100128f, 0.21483658254146576f, 0.35634732246398926f, 0.22835677862167358f, 0.13168329000473022f, 0.012425078079104424f, +0.4041469097137451f, 0.6798292398452759f, 0.697068989276886f, 0.4485105276107788f, 0.9963545799255371f, 0.8223845362663269f, 0.13357295095920563f, 0.5890834927558899f, +0.748658299446106f, 0.821801483631134f, 0.9645285606384277f, 0.43656599521636963f, 0.8512595891952515f, 0.6685515642166138f, 0.6346368193626404f, 0.9077785015106201f, +0.6567128300666809f, 0.8412491679191589f, 0.17909027636051178f, 0.8022832870483398f, 0.7959365844726562f, 0.24984091520309448f, 0.5838943123817444f, 0.703170895576477f, +0.5278215408325195f, 0.5152245163917542f, 0.14510612189769745f, 0.2510916590690613f, 0.15137295424938202f, 0.31860196590423584f, 0.5108824372291565f, 0.9234541654586792f, +0.28629666566848755f, 0.6341835856437683f, 0.023167679086327553f, 0.733636200428009f, 0.7249231934547424f, 0.4657233655452728f, 0.3034360408782959f, 0.9029397964477539f, +0.48899945616722107f, 0.35820457339286804f, 0.5167754888534546f, 0.0983857661485672f, 0.8632006645202637f, 0.7371508479118347f, 0.056304048746824265f, 0.6424420475959778f, +0.7431307435035706f, 0.7225927710533142f, 0.8104196786880493f, 0.2735154628753662f, 0.8601329922676086f, 0.5296879410743713f, 0.9422160387039185f, 0.8763430118560791f, +0.009446523152291775f, 0.42571431398391724f, 0.8645026087760925f, 0.5954753160476685f, 0.6091187000274658f, 0.44635629653930664f, 0.2554641664028168f, 0.7719762325286865f, +0.03385046869516373f, 0.8952440023422241f, 0.34866538643836975f, 0.1981639713048935f, 0.9956116676330566f, 0.7024438977241516f, 0.38081786036491394f, 0.6877716779708862f, +0.4093041718006134f, 0.5602369904518127f, 0.33964014053344727f, 0.17153525352478027f, 0.029835190623998642f, 0.9522607922554016f, 0.8249517679214478f, 0.6582201719284058f, +0.972585916519165f, 0.46176379919052124f, 0.7293009161949158f, 0.9552901983261108f, 0.3445006012916565f, 0.81512451171875f, 0.9395172595977783f, 0.05070614442229271f, +0.10964390635490417f, 0.8262173533439636f, 0.8557229042053223f, 0.04672437906265259f, 0.12371256202459335f, 0.9976886510848999f, 0.5271507501602173f, 0.5968337059020996f, +0.9675321578979492f, 0.038063161075115204f, 0.5515777468681335f, 0.894267737865448f, 0.9678882360458374f, 0.44538888335227966f, 0.7507237195968628f, 0.6276279091835022f, +0.36343273520469666f, 0.9602980613708496f, 0.7963321208953857f, 0.6754871606826782f, 0.48426008224487305f, 0.2505757212638855f, 0.07192037999629974f, 0.743487536907196f, +0.6143540740013123f, 0.3770798444747925f, 0.5525672435760498f, 0.5374370813369751f, 0.630216121673584f, 0.5555043816566467f, 0.5014378428459167f, 0.4286201000213623f, +0.3688667118549347f, 0.6331983804702759f, 0.9577218294143677f, 0.0006682461826130748f, 0.5312002897262573f, 0.43462178111076355f, 0.6412337422370911f, 0.6700002551078796f, +0.9148932695388794f, 0.4491432011127472f, 0.9837546348571777f, 0.9457497596740723f, 0.7873235940933228f, 0.8990927934646606f, 0.7574506402015686f, 0.6166515350341797f, +0.9529327750205994f, 0.002293127356097102f, 0.5463166832923889f, 0.7736266255378723f, 0.45097804069519043f, 0.5239971280097961f, 0.8784290552139282f, 0.2713488042354584f, +0.05033933371305466f, 0.3049817681312561f, 0.2296534776687622f, 0.22325964272022247f, 0.4752686619758606f, 0.305662602186203f, 0.3301122188568115f, 0.42421552538871765f, +0.17592892050743103f, 0.5592299103736877f, 0.016510969027876854f, 0.9455240368843079f, 0.8268983960151672f, 0.8009055256843567f, 0.3450356423854828f, 0.5231825709342957f, +0.9909971952438354f, 0.8869367241859436f, 0.5049663782119751f, 0.758948802947998f, 0.6539322733879089f, 0.3182990849018097f, 0.6341833472251892f, 0.17150893807411194f, +0.3574969470500946f, 0.8019945621490479f, 0.723753809928894f, 0.3255978524684906f, 0.12255659699440002f, 0.01226789876818657f, 0.7919685244560242f, 0.06498675793409348f, +0.5968430042266846f, 0.21913430094718933f, 0.690750241279602f, 0.7437652349472046f, 0.7260442972183228f, 0.21389523148536682f, 0.9472689032554626f, 0.8594165444374084f, +0.6791732311248779f, 0.1314348429441452f, 0.0884917750954628f, 0.05478722229599953f, 0.6313697099685669f, 0.011419674381613731f, 0.9901469349861145f, 0.592887282371521f, +0.2535429894924164f, 0.9338556528091431f, 0.6093156933784485f, 0.17400021851062775f, 0.9079424142837524f, 0.33209121227264404f, 0.22224421799182892f, 0.3502602279186249f, +0.5413909554481506f, 0.5484564304351807f, 0.18339543044567108f, 0.7750393152236938f, 0.8126575946807861f, 0.15390092134475708f, 0.8048480749130249f, 0.41607749462127686f, +0.4968062937259674f, 0.5335316061973572f, 0.07949846237897873f, 0.8007310628890991f, 0.7200224995613098f, 0.35625335574150085f, 0.75433748960495f, 0.11109825223684311f, +0.8602502346038818f, 0.7052637338638306f, 0.5381062030792236f, 0.37052422761917114f, 0.5079168677330017f, 0.9649304747581482f, 0.012739305384457111f, 0.5286467671394348f, +0.703916072845459f, 0.27335456013679504f, 0.4071480929851532f, 0.20180746912956238f, 0.6145358681678772f, 0.41260868310928345f, 0.4141278862953186f, 0.9054768681526184f, +0.18651051819324493f, 0.2179078459739685f, 0.6260886192321777f, 0.19046616554260254f, 0.21339266002178192f, 0.6531323790550232f, 0.4836798906326294f, 0.23286139965057373f, +0.11363960057497025f, 0.10482563078403473f, 0.34136250615119934f, 0.7467058897018433f, 0.6500080227851868f, 0.6262098550796509f, 0.777948260307312f, 0.21677514910697937f, +0.8834183812141418f, 0.6587744355201721f, 0.8282718658447266f, 0.8647831082344055f, 0.7494906187057495f, 0.3758417069911957f, 0.33545130491256714f, 0.527656614780426f, +0.46979498863220215f, 0.5288849472999573f, 0.2980301082134247f, 0.8871885538101196f, 0.23230430483818054f, 0.6971616744995117f, 0.3593537211418152f, 0.0858883187174797f, +0.1223236694931984f, 0.6941242814064026f, 0.3479115962982178f, 0.2738812565803528f, 0.2436719834804535f, 0.9234733581542969f, 0.08806315064430237f, 0.9291527271270752f, +0.5819827318191528f, 0.9832672476768494f, 0.9068403840065002f, 0.5281804800033569f, 0.3609953820705414f, 0.28272169828414917f, 0.38234737515449524f, 0.7350556254386902f, +0.7785068154335022f, 0.5622876882553101f, 0.9918569922447205f, 0.5717543959617615f, 0.19422698020935059f, 0.1620587557554245f, 0.6589277982711792f, 0.9827947616577148f, +0.20880630612373352f, 0.9404321312904358f, 0.19299466907978058f, 0.6833294630050659f, 0.9017858505249023f, 0.1230887621641159f, 0.052198298275470734f, 0.7248196601867676f, +0.7470861673355103f, 0.6643120646476746f, 0.9316464066505432f, 0.6650326251983643f, 0.13274995982646942f, 0.45881912112236023f, 0.5114553570747375f, 0.8133028149604797f, +0.7217584848403931f, 0.9949097633361816f, 0.008722851052880287f, 0.7201312184333801f, 0.7852393984794617f, 0.3556274473667145f, 0.2603003978729248f, 0.20090781152248383f, +0.4685477614402771f, 0.08472888171672821f, 0.30825453996658325f, 0.7388415932655334f, 0.5474048256874084f, 0.711074948310852f, 0.2595856487751007f, 0.8045328259468079f, +0.8471150398254395f, 0.7804455161094666f, 0.5266507267951965f, 0.6636621952056885f, 0.1965191811323166f, 0.259916216135025f, 0.1315072923898697f, 0.4431953728199005f, +0.6219348907470703f, 0.4384540915489197f, 0.8480222225189209f, 0.8750519156455994f, 0.27549949288368225f, 0.7150961756706238f, 0.6509497165679932f, 0.8954421877861023f, +0.22512184083461761f, 0.03923637419939041f, 0.23660217225551605f, 0.24231581389904022f, 0.7818658947944641f, 0.607783317565918f, 0.995540976524353f, 0.001531111542135477f, +0.6602014899253845f, 0.04014154151082039f, 0.5314267873764038f, 0.8335944414138794f, 0.3923192620277405f, 0.05976869910955429f, 0.4291733205318451f, 0.5186637043952942f, +0.8102092146873474f, 0.44626978039741516f, 0.5324771404266357f, 0.24903742969036102f, 0.23577755689620972f, 0.6628642082214355f, 0.8948976397514343f, 0.9339426755905151f, +0.281825989484787f, 0.013897200115025043f, 0.8890209794044495f, 0.7995260953903198f, 0.4054073691368103f, 0.9600087404251099f, 0.3432188332080841f, 0.4468683898448944f, +0.20529095828533173f, 0.494557648897171f, 0.35917291045188904f, 0.8426930904388428f, 0.03430694714188576f, 0.5309574007987976f, 0.7160729765892029f, 0.16196061670780182f, +0.2857299745082855f, 0.6210113763809204f, 0.9468437433242798f, 0.1546618491411209f, 0.3106168806552887f, 0.2612750828266144f, 0.735420286655426f, 0.9391756057739258f, +0.38417109847068787f, 0.01545940712094307f, 0.9551305770874023f, 0.1143861636519432f, 0.31654495000839233f, 0.4640786051750183f, 0.293714314699173f, 0.30040407180786133f, +0.1632131189107895f, 0.25762638449668884f, 0.3738655745983124f, 0.6373353004455566f, 0.6063845753669739f, 0.5955920219421387f, 0.5048255324363708f, 0.4838704764842987f, +0.19423387944698334f, 0.898877739906311f, 0.40494897961616516f, 0.8626078963279724f, 0.17657579481601715f, 0.5701872110366821f, 0.824353814125061f, 0.13607147336006165f, +0.78316730260849f, 0.134770467877388f, 0.36323651671409607f, 0.6343511343002319f, 0.788781464099884f, 0.7815195918083191f, 0.8419547080993652f, 0.39452269673347473f, +0.24916571378707886f, 0.9085844159126282f, 0.3108423054218292f, 0.7126621603965759f, 0.8660742044448853f, 0.444569855928421f, 0.680525004863739f, 0.33914196491241455f, +0.18450215458869934f, 0.05382058769464493f, 0.8307873606681824f, 0.6294165253639221f, 0.2896615266799927f, 0.9298376441001892f, 0.10334955155849457f, 0.43316227197647095f, +0.7857722640037537f, 0.1965673714876175f, 0.7096876502037048f, 0.2983272969722748f, 0.18839427828788757f, 0.45120131969451904f, 0.09328941255807877f, 0.8785022497177124f, +0.6553847193717957f, 0.22590680420398712f, 0.9162073135375977f, 0.20038926601409912f, 0.9242610335350037f, 0.9673979878425598f, 0.30034878849983215f, 0.8976479172706604f, +0.4556541442871094f, 0.2836977541446686f, 0.9638945460319519f, 0.10042888671159744f, 0.22549153864383698f, 0.8527273535728455f, 0.8357393741607666f, 0.4293581247329712f, +0.5244467258453369f, 0.4449751079082489f, 0.01299598254263401f, 0.7491949200630188f, 0.1537310630083084f, 0.2705932855606079f, 0.8577218055725098f, 0.006974720396101475f, +0.1303303837776184f, 0.7396700382232666f, 0.6486045718193054f, 0.10766667872667313f, 0.9569745063781738f, 0.7830445170402527f, 0.7360118627548218f, 0.002489830367267132f, +0.13226255774497986f, 0.1478598713874817f, 0.5672105550765991f, 0.6617245078086853f, 0.19483806192874908f, 0.23053604364395142f, 0.538133442401886f, 0.4619283676147461f, +0.8587682843208313f, 0.7552186846733093f, 0.13271182775497437f, 0.8617205619812012f, 0.6774882078170776f, 0.32347214221954346f, 0.770860493183136f, 0.21085716784000397f, +0.5581300258636475f, 0.3437272012233734f, 0.06074150279164314f, 0.790026843547821f, 0.6665754914283752f, 0.45329704880714417f, 0.5595264434814453f, 0.30242371559143066f, +0.42388448119163513f, 0.6317212581634521f, 0.9338276982307434f, 0.8070067763328552f, 0.36843249201774597f, 0.7375654578208923f, 0.5757510662078857f, 0.9191681146621704f, +0.5304903984069824f, 0.9005082845687866f, 0.4657323956489563f, 0.168615460395813f, 0.7444961667060852f, 0.38045451045036316f, 0.4585951268672943f, 0.7285116314888f, +0.35339125990867615f, 0.1642724573612213f, 0.0047036330215632915f, 0.30405646562576294f, 0.7628235816955566f, 0.9453273415565491f, 0.9417745471000671f, 0.3162063658237457f, +0.8454365730285645f, 0.3344215154647827f, 0.5497786402702332f, 0.09069576859474182f, 0.04258517920970917f, 0.2228652983903885f, 0.26268744468688965f, 0.3471532166004181f, +0.7316282391548157f, 0.0367528460919857f, 0.41618460416793823f, 0.7842562794685364f, 0.8380981683731079f, 0.852325975894928f, 0.388251394033432f, 0.6781272888183594f, +0.09640275686979294f, 0.6460784077644348f, 0.9195218682289124f, 0.25551050901412964f, 0.6649413108825684f, 0.8284315466880798f, 0.5028055906295776f, 0.04895256459712982f, +0.5108769536018372f, 0.35089853405952454f, 0.6647348403930664f, 0.737023115158081f, 0.9567314982414246f, 0.10459847748279572f, 0.5581430196762085f, 0.9292016625404358f, +0.49000251293182373f, 0.8891557455062866f, 0.4546288251876831f, 0.3389221131801605f, 0.9510951638221741f, 0.7379727363586426f, 0.11694277077913284f, 0.7392750382423401f, +0.913534939289093f, 0.7515049576759338f, 0.9362069368362427f, 0.6345930099487305f, 0.7756669521331787f, 0.41646483540534973f, 0.6747717261314392f, 0.3555489480495453f, +0.8664533495903015f, 0.26331809163093567f, 0.6092929840087891f, 0.1703399121761322f, 0.07884924858808517f, 0.18191252648830414f, 0.0398084931075573f, 0.7719441056251526f, +0.9694722294807434f, 0.7943095564842224f, 0.01218261569738388f, 0.09572168439626694f, 0.8041671514511108f, 0.25490912795066833f, 0.49695369601249695f, 0.40040770173072815f, +0.9949111342430115f, 0.9471070170402527f, 0.7095869779586792f, 0.29842472076416016f, 0.05780057609081268f, 0.3726038634777069f, 0.9405673146247864f, 0.23233526945114136f, +0.23209461569786072f, 0.3309026062488556f, 0.38689541816711426f, 0.7507089376449585f, 0.19109947979450226f, 0.606445848941803f, 0.2886471152305603f, 0.7724235653877258f, +0.8716483116149902f, 0.48989322781562805f, 0.22010762989521027f, 0.12481638789176941f, 0.9758074879646301f, 0.001737001002766192f, 0.14825527369976044f, 0.9903921484947205f, +0.40513354539871216f, 0.7123857736587524f, 0.9667693972587585f, 0.5025437474250793f, 0.7334998250007629f, 0.1075938418507576f, 0.5984523296356201f, 0.6469193696975708f, +0.19638755917549133f, 0.2820534408092499f, 0.3103641867637634f, 0.5328770875930786f, 0.6691298484802246f, 0.4818776845932007f, 0.6895872354507446f, 0.700901985168457f, +0.6609440445899963f, 0.37479910254478455f, 0.029044020920991898f, 0.8595431447029114f, 0.5963095426559448f, 0.196661576628685f, 0.5726205706596375f, 0.012924357317388058f, +0.3758694529533386f, 0.6163020730018616f, 0.9168980717658997f, 0.6427534222602844f, 0.06950288265943527f, 0.15073688328266144f, 0.8791266083717346f, 0.9356991648674011f, +0.0056828586384654045f, 0.9139395952224731f, 0.2575838267803192f, 0.14340761303901672f, 0.7355185747146606f, 0.31460148096084595f, 0.02785368077456951f, 0.02497190795838833f, +0.6412166953086853f, 0.36041510105133057f, 0.16653399169445038f, 0.6873016357421875f, 0.7422190308570862f, 0.669548511505127f, 0.7879166603088379f, 0.3117032051086426f, +0.6001175045967102f, 0.3753640949726105f, 0.4121355712413788f, 0.2768390476703644f, 0.07232324033975601f, 0.6931626200675964f, 0.42211905121803284f, 0.8296990394592285f, +0.150676429271698f, 0.7927384972572327f, 0.1384475976228714f, 0.1380399763584137f, 0.11703130602836609f, 0.6836500763893127f, 0.2970035672187805f, 0.6624654531478882f, +0.21859462559223175f, 0.9043465852737427f, 0.24331872165203094f, 0.18824565410614014f, 0.8140929937362671f, 0.3336493968963623f, 0.42064300179481506f, 0.27172064781188965f, +0.5261943340301514f, 0.4660970866680145f, 0.22319182753562927f, 0.27227187156677246f, 0.28425735235214233f, 0.9226212501525879f, 0.9697425365447998f, 0.8443281054496765f, +0.02521015703678131f, 0.21308355033397675f, 0.4545953571796417f, 0.40408584475517273f, 0.18034029006958008f, 0.8647202849388123f, 0.433303564786911f, 0.7236074805259705f, +0.6227925419807434f, 0.9147005081176758f, 0.7465357184410095f, 0.5414436459541321f, 0.6358407139778137f, 0.23960331082344055f, 0.8091340661048889f, 0.24176235496997833f, +0.40837424993515015f, 0.9523812532424927f, 0.4648183286190033f, 0.18824905157089233f, 0.4263933598995209f, 0.00482573127374053f, 0.3349274694919586f, 0.5960267782211304f, +0.05401840806007385f, 0.6904950737953186f, 0.6425068974494934f, 0.34753793478012085f, 0.22425764799118042f, 0.06805922836065292f, 0.7584208846092224f, 0.047720737755298615f, +0.4381366968154907f, 0.4037100374698639f, 0.29558902978897095f, 0.02614188753068447f, 0.99174964427948f, 0.603954017162323f, 0.9753896594047546f, 0.6532032489776611f, +0.23467998206615448f, 0.1312124878168106f, 0.9184655547142029f, 0.7180514335632324f, 0.3310880661010742f, 0.5148598551750183f, 0.27781179547309875f, 0.4106866121292114f, +0.32349103689193726f, 0.2634592652320862f, 0.39980384707450867f, 0.528187096118927f, 0.9938582181930542f, 0.06590709090232849f, 0.004150870256125927f, 0.6843769550323486f, +0.04353739321231842f, 0.06577011197805405f, 0.1378924697637558f, 0.07646719366312027f, 0.8069848418235779f, 0.13661222159862518f, 0.889931857585907f, 0.2702482044696808f, +0.9454423189163208f, 0.4279058873653412f, 0.3728069067001343f, 0.9446166157722473f, 0.916491687297821f, 0.6685751676559448f, 0.9216980934143066f, 0.8803762197494507f, +0.12303705513477325f, 0.2939518094062805f, 0.3251921534538269f, 0.42222583293914795f, 0.3800838589668274f, 0.11827358603477478f, 0.8623957633972168f, 0.7563630938529968f, +0.7598099708557129f, 0.33132031559944153f, 0.12802501022815704f, 0.9924605488777161f, 0.13226646184921265f, 0.23409950733184814f, 0.9374352097511292f, 0.6602998375892639f, +0.421602725982666f, 0.15229962766170502f, 0.7338462471961975f, 0.44170212745666504f, 0.49151483178138733f, 0.10770256072282791f, 0.7690505385398865f, 0.5802888870239258f, +0.884482741355896f, 0.32211264967918396f, 0.9314882755279541f, 0.4001527428627014f, 0.5815477967262268f, 0.5191283226013184f, 0.7579115629196167f, 0.07354546338319778f, +0.8180201649665833f, 0.9014061689376831f, 0.5572209358215332f, 0.816368043422699f, 0.7056057453155518f, 0.19377338886260986f, 0.5202932953834534f, 0.20147237181663513f, +0.43685922026634216f, 0.8821878433227539f, 0.6937667727470398f, 0.6761592030525208f, 0.14377903938293457f, 0.4898832142353058f, 0.012562532909214497f, 0.3165320158004761f, +0.20079757273197174f, 0.1480884701013565f, 0.7148982286453247f, 0.453305721282959f, 0.27667438983917236f, 0.31566473841667175f, 0.4240211248397827f, 0.9500389695167542f, +0.7597892880439758f, 0.2747337222099304f, 0.938381016254425f, 0.45607367157936096f, 0.025639990344643593f, 0.5521294474601746f, 0.9150871634483337f, 0.9998987317085266f, +0.3637602627277374f, 0.6334837675094604f, 0.24593804776668549f, 0.07085557281970978f, 0.6126250624656677f, 0.6960261464118958f, 0.06337685883045197f, 0.817226231098175f, +0.048522286117076874f, 0.12567175924777985f, 0.9705779552459717f, 0.026457518339157104f, 0.1781870722770691f, 0.8608865141868591f, 0.7797741889953613f, 0.03180995583534241f, +0.06634954363107681f, 0.963784396648407f, 0.611225426197052f, 0.8738282322883606f, 0.1468476504087448f, 0.6706268787384033f, 0.4145299792289734f, 0.6438080668449402f, +0.43228790163993835f, 0.0757080465555191f, 0.7312192916870117f, 0.9022848606109619f, 0.7927120923995972f, 0.6249417066574097f, 0.8706899881362915f, 0.651115894317627f, +0.3931027352809906f, 0.791999101638794f, 0.6662787199020386f, 0.7126626372337341f, 0.17600825428962708f, 0.9914101362228394f, 0.2868220806121826f, 0.7298220992088318f, +0.5936115980148315f, 0.5938498973846436f, 0.13476169109344482f, 0.14511263370513916f, 0.36818426847457886f, 0.8802415132522583f, 0.5986102819442749f, 0.17154350876808167f, +0.4579024016857147f, 0.12022798508405685f, 0.6420391798019409f, 0.12860427796840668f, 0.7535989880561829f, 0.5408772826194763f, 0.3922906816005707f, 0.7342687249183655f, +0.9994257688522339f, 0.05007250979542732f, 0.6673775315284729f, 0.7992345690727234f, 0.45454564690589905f, 0.32813408970832825f, 0.8876968026161194f, 0.7922312617301941f, +0.5588912963867188f, 0.17809145152568817f, 0.0005913422792218626f, 0.45889005064964294f, 0.9574257135391235f, 0.14609716832637787f, 0.9328434467315674f, 0.5356998443603516f, +0.3763948082923889f, 0.9009709358215332f, 0.9861260652542114f, 0.3795395493507385f, 0.6252956390380859f, 0.8311404585838318f, 0.5075955390930176f, 0.6767555475234985f, +0.1716722548007965f, 0.6123384237289429f, 0.715898334980011f, 0.5884922742843628f, 0.6468710899353027f, 0.389512836933136f, 0.749606192111969f, 0.699306070804596f, +0.022008229047060013f, 0.7567429542541504f, 0.37565842270851135f, 0.29426300525665283f, 0.8046621084213257f, 0.5982944369316101f, 0.638808012008667f, 0.5323644280433655f, +0.1580299735069275f, 0.16704869270324707f, 0.4695805013179779f, 0.8827676177024841f, 0.502837598323822f, 0.9431726932525635f, 0.7132658362388611f, 0.2891847491264343f, +0.6059260368347168f, 0.6011334657669067f, 0.6996345520019531f, 0.7265007495880127f, 0.5309168696403503f, 0.08330516517162323f, 0.7215249538421631f, 0.7348156571388245f, +0.5582334995269775f, 0.9638331532478333f, 0.24309664964675903f, 0.3497503697872162f, 0.7775794863700867f, 0.5076946020126343f, 0.659552812576294f, 0.5883200168609619f, +0.6040177345275879f, 0.2649047374725342f, 0.09491478651762009f, 0.8327561020851135f, 0.8631116151809692f, 0.39812713861465454f, 0.9987000823020935f, 0.4728444516658783f, +0.2604425549507141f, 0.07319580763578415f, 0.8803784251213074f, 0.6236139535903931f, 0.06645488739013672f, 0.9001530408859253f, 0.901909351348877f, 0.9273833632469177f, +0.11708929389715195f, 0.3191380202770233f, 0.2855839133262634f, 0.18329085409641266f, 0.5482639670372009f, 0.7685087323188782f, 0.683128297328949f, 0.8253501057624817f, +0.7544650435447693f, 0.745614767074585f, 0.08042506128549576f, 0.798949122428894f, 0.25010761618614197f, 0.7835058569908142f, 0.01240797434002161f, 0.02851579710841179f, +0.18297579884529114f, 0.018852723762392998f, 0.5861648917198181f, 0.5893935561180115f, 0.30126532912254333f, 0.20812049508094788f, 0.8027144074440002f, 0.306340754032135f, +0.11212646216154099f, 0.8900507688522339f, 0.3115796446800232f, 0.22269682586193085f, 0.14160265028476715f, 0.9726541638374329f, 0.08885438740253448f, 0.374690443277359f, +0.07506370544433594f, 0.8187097907066345f, 0.950685977935791f, 0.5250310301780701f, 0.6387989521026611f, 0.011749778874218464f, 0.5740609765052795f, 0.6884390711784363f, +0.8573944568634033f, 0.5456916689872742f, 0.3298293650150299f, 0.6504356265068054f, 0.5906003713607788f, 0.011409998871386051f, 0.2105979174375534f, 0.6579597592353821f, +0.5102168917655945f, 0.5074188113212585f, 0.7559243440628052f, 0.007674126420170069f, 0.34405791759490967f, 0.15687021613121033f, 0.6188821196556091f, 0.32369840145111084f, +0.29172736406326294f, 0.8344177603721619f, 0.6640462875366211f, 0.921099841594696f, 0.8797847628593445f, 0.32464343309402466f, 0.7798641324043274f, 0.8068409562110901f, +0.23372238874435425f, 0.17780108749866486f, 0.012053816579282284f, 0.1725350320339203f, 0.9994097948074341f, 0.8361161947250366f, 0.6670166254043579f, 0.9958357214927673f, +0.6474374532699585f, 0.4099525511264801f, 0.8709437251091003f, 0.9109970331192017f, 0.2669084668159485f, 0.6475293636322021f, 0.2499506026506424f, 0.08861470222473145f, +0.6424916386604309f, 0.921134889125824f, 0.491838663816452f, 0.13940711319446564f, 0.12838253378868103f, 0.4071218967437744f, 0.6035711169242859f, 0.5518897771835327f, +0.32395434379577637f, 0.18008248507976532f, 0.7024235129356384f, 0.39357128739356995f, 0.9027884602546692f, 0.1152859479188919f, 0.8767822980880737f, 0.45457297563552856f, +0.2643769681453705f, 0.013377915136516094f, 0.2618071138858795f, 0.4815196692943573f, 0.27837637066841125f, 0.6781116724014282f, 0.46331873536109924f, 0.03340743109583855f, +0.3759555518627167f, 0.4370996952056885f, 0.5996848940849304f, 0.65096116065979f, 0.7303255796432495f, 0.19694916903972626f, 0.21506370604038239f, 0.6391711831092834f, +0.46855300664901733f, 0.1467827707529068f, 0.6727247834205627f, 0.7004778385162354f, 0.8924240469932556f, 0.9388634562492371f, 0.5914896130561829f, 0.6326204538345337f, +0.9763530492782593f, 0.3103146255016327f, 0.005357132293283939f, 0.7227360010147095f, 0.0489022359251976f, 0.08301350474357605f, 0.6002793908119202f, 0.11001197248697281f, +0.10883955657482147f, 0.8969624042510986f, 0.13411878049373627f, 0.4127636253833771f, 0.776948094367981f, 0.12376700341701508f, 0.8937339186668396f, 0.7925351858139038f, +0.38769209384918213f, 0.22180873155593872f, 0.9691826105117798f, 0.9549118280410767f, 0.23632487654685974f, 0.10668665170669556f, 0.03759784623980522f, 0.07586602121591568f, +0.18191929161548615f, 0.17097096145153046f, 0.7523255944252014f, 0.9629544615745544f, 0.978217363357544f, 0.0013290193164721131f, 0.4225204586982727f, 0.013883929699659348f, +0.38522306084632874f, 0.27618736028671265f, 0.19635061919689178f, 0.7245123386383057f, 0.5365189909934998f, 0.5704410672187805f, 0.2606392800807953f, 0.11814785748720169f, +0.34579214453697205f, 0.5976973176002502f, 0.3415590226650238f, 0.4012349843978882f, 0.6433846950531006f, 0.8842218518257141f, 0.1077926978468895f, 0.846373975276947f, +0.7600834369659424f, 0.711256742477417f, 0.904470682144165f, 0.34867170453071594f, 0.9496326446533203f, 0.9738163352012634f, 0.7376807332038879f, 0.684689998626709f, +0.9536866545677185f, 0.4087647497653961f, 0.3808711767196655f, 0.837454080581665f, 0.4984663128852844f, 0.15647339820861816f, 0.28385767340660095f, 0.49842071533203125f, +0.5655490159988403f, 0.6321134567260742f, 0.48660385608673096f, 0.8676222562789917f, 0.20956964790821075f, 0.8060823082923889f, 0.8478376865386963f, 0.5484328269958496f, +0.36017680168151855f, 0.09225580841302872f, 0.581139326095581f, 0.08849252760410309f, 0.8508648872375488f, 0.4510714113712311f, 0.09018164128065109f, 0.07747159898281097f, +0.3706352412700653f, 0.2852812707424164f, 0.5077770352363586f, 0.1550850123167038f, 0.5034259557723999f, 0.5746849179267883f, 0.3898797035217285f, 0.4206196665763855f, +0.7206194996833801f, 0.41834887862205505f, 0.7344006299972534f, 0.14607489109039307f, 0.42631375789642334f, 0.6556304693222046f, 0.17904727160930634f, 0.6766136288642883f, +0.19406110048294067f, 0.2406524419784546f, 0.17942480742931366f, 0.48083531856536865f, 0.26698121428489685f, 0.9597413539886475f, 0.19503536820411682f, 0.6652339100837708f, +0.3095211088657379f, 0.5248423218727112f, 0.6292746663093567f, 0.8424505591392517f, 0.8089560270309448f, 0.41929805278778076f, 0.32895877957344055f, 0.9011794924736023f, +0.3220996558666229f, 0.9962689280509949f, 0.915599524974823f, 0.6258321404457092f, 0.6240088939666748f, 0.5886769890785217f, 0.6270705461502075f, 0.7039200067520142f, +0.12215445190668106f, 0.732063353061676f, 0.8797100782394409f, 0.9710085988044739f, 0.18814116716384888f, 0.4274742901325226f, 0.851159930229187f, 0.5092177987098694f, +0.8980814814567566f, 0.3072432577610016f, 0.022659340873360634f, 0.7142468690872192f, 0.8678805232048035f, 0.4908098876476288f, 0.29085400700569153f, 0.5899925827980042f, +0.2656487822532654f, 0.8041359782218933f, 0.4059182107448578f, 0.11615210771560669f, 0.8547167778015137f, 0.5164147615432739f, 0.8180611729621887f, 0.04592100530862808f, +0.5120255351066589f, 0.4921623766422272f, 0.9874094724655151f, 0.661374568939209f, 0.4631957709789276f, 0.4623399078845978f, 0.6100829243659973f, 0.36802151799201965f, +0.5123931765556335f, 0.06452391296625137f, 0.8411259651184082f, 0.5903562903404236f, 0.7323795557022095f, 0.6354032754898071f, 0.7771496772766113f, 0.009139086119830608f, +0.2634497880935669f, 0.46135959029197693f, 0.05093565210700035f, 0.7471310496330261f, 0.8472092747688293f, 0.0924435406923294f, 0.15181894600391388f, 0.6325464248657227f, +0.13658171892166138f, 0.47527915239334106f, 0.0033942863810807467f, 0.8672570586204529f, 0.4863206446170807f, 0.905379593372345f, 0.20962345600128174f, 0.2077934294939041f, +0.7088032364845276f, 0.5872865319252014f, 0.5676897764205933f, 0.24487905204296112f, 0.7108381986618042f, 0.35753583908081055f, 0.37421315908432007f, 0.6327641010284424f, +0.6464446783065796f, 0.612452507019043f, 0.5137222409248352f, 0.8266171813011169f, 0.6604738831520081f, 0.682009756565094f, 0.05307679995894432f, 0.6086951494216919f, +0.8705718517303467f, 0.9478846192359924f, 0.04523850977420807f, 0.2938832938671112f, 0.5303419828414917f, 0.8904775977134705f, 0.5517228841781616f, 0.46300244331359863f, +0.1680186241865158f, 0.32427099347114563f, 0.9507001042366028f, 0.6936529278755188f, 0.7521001100540161f, 0.03757967799901962f, 0.8802232146263123f, 0.37531930208206177f, +0.6480273008346558f, 0.20249851047992706f, 0.8491779565811157f, 0.8453076481819153f, 0.23377077281475067f, 0.9011414051055908f, 0.6605890393257141f, 0.6626177430152893f, +0.3085109293460846f, 0.9161721467971802f, 0.057290252298116684f, 0.3963243067264557f, 0.6058439016342163f, 0.6233304142951965f, 0.4455447793006897f, 0.7026829719543457f, +0.6548274159431458f, 0.9335165619850159f, 0.4604884088039398f, 0.31538116931915283f, 0.09756875783205032f, 0.702044665813446f, 0.14867256581783295f, 0.631020188331604f, +0.948897123336792f, 0.15603463351726532f, 0.8115745782852173f, 0.8842867016792297f, 0.7267358303070068f, 0.9153817296028137f, 0.6434440016746521f, 0.23645025491714478f, +0.8380601406097412f, 0.575256884098053f, 0.668682873249054f, 0.8141114115715027f, 0.39054930210113525f, 0.3999587595462799f, 0.15031222999095917f, 0.5542188286781311f, +0.9159644246101379f, 0.6115137934684753f, 0.9582734704017639f, 0.8623583912849426f, 0.48424816131591797f, 0.9530035257339478f, 0.6883898377418518f, 0.9195133447647095f, +0.5235088467597961f, 0.1984763890504837f, 0.5630337595939636f, 0.1560564786195755f, 0.3269474506378174f, 0.37696346640586853f, 0.7445863485336304f, 0.3769642412662506f, +0.7180554866790771f, 0.6925472021102905f, 0.8113807439804077f, 0.5057851672172546f, 0.9312582612037659f, 0.1511586755514145f, 0.9119359850883484f, 0.5763038992881775f, +0.7357630729675293f, 0.8164611458778381f, 0.9918332695960999f, 0.7992156147956848f, 0.5826529264450073f, 0.9451660513877869f, 0.5010982751846313f, 0.8534886240959167f, +0.09677837789058685f, 0.46195700764656067f, 0.1631886512041092f, 0.5361619591712952f, 0.42026376724243164f, 0.42123234272003174f, 0.6973605155944824f, 0.3081471621990204f, +0.0928661972284317f, 0.9397026896476746f, 0.49792832136154175f, 0.9929203987121582f, 0.12149954587221146f, 0.5738222599029541f, 0.8248690962791443f, 0.8583927750587463f, +0.10473255068063736f, 0.9720054268836975f, 0.023930003866553307f, 0.2287077158689499f, 0.13186554610729218f, 0.5521939396858215f, 0.20844002068042755f, 0.34094053506851196f, +0.5385837554931641f, 0.4156711995601654f, 0.34128931164741516f, 0.09806852787733078f, 0.9658137559890747f, 0.03715034946799278f, 0.6620818376541138f, 0.07435820996761322f, +0.053868211805820465f, 0.724557638168335f, 0.3742399513721466f, 0.8336063623428345f, 0.7268776893615723f, 0.15470893681049347f, 0.42582380771636963f, 0.3958495259284973f, +0.5303125977516174f, 0.0899989977478981f, 0.2057734578847885f, 0.06417074054479599f, 0.23573502898216248f, 0.03300318121910095f, 0.9189570546150208f, 0.6848627328872681f, +0.9953303933143616f, 0.21843674778938293f, 0.0028283135034143925f, 0.6459667682647705f, 0.8278646469116211f, 0.6911270022392273f, 0.9491751790046692f, 0.9466667771339417f, +0.255785197019577f, 0.7749748229980469f, 0.20254993438720703f, 0.7885112762451172f, 0.8804710507392883f, 0.9947869777679443f, 0.69217848777771f, 0.3430640697479248f, +0.7194506525993347f, 0.7352939248085022f, 0.18990907073020935f, 0.7396179437637329f, 0.3137647807598114f, 0.013452406972646713f, 0.4047657549381256f, 0.5103721618652344f, +0.8073590993881226f, 0.5117344856262207f, 0.08372976630926132f, 0.8230308294296265f, 0.0880110040307045f, 0.24482759833335876f, 0.08170764893293381f, 0.14292795956134796f, +0.8286835551261902f, 0.9060487151145935f, 0.4098212718963623f, 0.8436718583106995f, 0.003640524810180068f, 0.1793203055858612f, 0.9782969355583191f, 0.6072483062744141f, +0.7159097790718079f, 0.9579094648361206f, 0.2019413858652115f, 0.8153513073921204f, 0.6220283508300781f, 0.23518425226211548f, 0.0928175076842308f, 0.8407275676727295f, +0.12475880980491638f, 0.28923413157463074f, 0.9518457055091858f, 0.4044106900691986f, 0.1661737710237503f, 0.4706701934337616f, 0.24697230756282806f, 0.8255764842033386f, +0.95651775598526f, 0.66843181848526f, 0.7056296467781067f, 0.5852400660514832f, 0.9264401197433472f, 0.5535321235656738f, 0.7520114779472351f, 0.9085343480110168f, +0.9286194443702698f, 0.6364472508430481f, 0.8361963033676147f, 0.25310230255126953f, 0.31081661581993103f, 0.11200880259275436f, 0.5792148113250732f, 0.7620754837989807f, +0.01713300496339798f, 0.8132001161575317f, 0.7742248773574829f, 0.680984616279602f, 0.9065360426902771f, 0.9357202053070068f, 0.8423483371734619f, 0.24971269071102142f, +0.2680943012237549f, 0.6888535618782043f, 0.715429425239563f, 0.8136537075042725f, 0.6245977282524109f, 0.502871572971344f, 0.4600231349468231f, 0.9779858589172363f, +0.9305253028869629f, 0.5131142735481262f, 0.4459194839000702f, 0.7433153390884399f, 0.4122483432292938f, 0.19531215727329254f, 0.11314757168292999f, 0.20767900347709656f, +0.6287128925323486f, 0.9836614727973938f, 0.9843947887420654f, 0.3122434616088867f, 0.5192176699638367f, 0.1762741655111313f, 0.019997436553239822f, 0.4425174295902252f, +0.3413539528846741f, 0.217861145734787f, 0.6935694813728333f, 0.5264921188354492f, 0.5728018283843994f, 0.944494366645813f, 0.5733996033668518f, 0.36299633979797363f, +0.918735682964325f, 0.3896719515323639f, 0.5639475584030151f, 0.22782427072525024f, 0.29171550273895264f, 0.06314029544591904f, 0.5437745451927185f, 0.6025647521018982f, +0.6530779004096985f, 0.11340921372175217f, 0.15931297838687897f, 0.8859219551086426f, 0.10476326942443848f, 0.3878239691257477f, 0.9796555638313293f, 0.23764696717262268f, +0.009339384734630585f, 0.6327117681503296f, 0.7177192568778992f, 0.9131103157997131f, 0.2186642587184906f, 0.23175694048404694f, 0.9613164663314819f, 0.2557537853717804f, +0.41095176339149475f, 0.04080921411514282f, 0.018096087500452995f, 0.912071943283081f, 0.27590426802635193f, 0.5443924069404602f, 0.601586103439331f, 0.7896128296852112f, +0.5409807562828064f, 0.644919216632843f, 0.5141023993492126f, 0.6645184755325317f, 0.3832707107067108f, 0.4711245000362396f, 0.4885990619659424f, 0.44739121198654175f, +0.8151643872261047f, 0.8397124409675598f, 0.03518925607204437f, 0.12020941823720932f, 0.41885268688201904f, 0.40908682346343994f, 0.8566334843635559f, 0.9009210467338562f, +0.5852878093719482f, 0.7591903209686279f, 0.4815216660499573f, 0.6150361895561218f, 0.002780772978439927f, 0.7090287208557129f, 0.2720402777194977f, 0.45701858401298523f, +0.7256922125816345f, 0.19050996005535126f, 0.0033321331720799208f, 0.14254771173000336f, 0.2390497773885727f, 0.3583844006061554f, 0.2590574026107788f, 0.5760293006896973f, +0.8745294809341431f, 0.7264587879180908f, 0.39833712577819824f, 0.4892517924308777f, 0.46461009979248047f, 0.27534812688827515f, 0.9784760475158691f, 0.5529805421829224f, +0.13837629556655884f, 0.6258798837661743f, 0.8802316188812256f, 0.6961367726325989f, 0.6867219805717468f, 0.39490166306495667f, 0.9281678199768066f, 0.5519179105758667f, +0.5776680111885071f, 0.39439985156059265f, 0.9282171130180359f, 0.1807888150215149f, 0.950588047504425f, 0.16663002967834473f, 0.5761595368385315f, 0.967328667640686f, +0.5946275591850281f, 0.8147463202476501f, 0.20593217015266418f, 0.9020094275474548f, 0.03908611834049225f, 0.4208827316761017f, 0.6010823845863342f, 0.992222011089325f, +0.3175388276576996f, 0.7569497227668762f, 0.14390341937541962f, 0.0888281837105751f, 0.10847306996583939f, 0.14829744398593903f, 0.1707635074853897f, 0.6393539309501648f, +0.12584508955478668f, 0.3668360412120819f, 0.6938067674636841f, 0.8901730179786682f, 0.221979022026062f, 0.8287132382392883f, 0.6781018376350403f, 0.034799519926309586f, +0.026113012805581093f, 0.24789199233055115f, 0.3031165599822998f, 0.30760011076927185f, 0.5554941296577454f, 0.6639075875282288f, 0.21357639133930206f, 0.34197038412094116f, +0.968994677066803f, 0.6488819718360901f, 0.9019933938980103f, 0.07573776692152023f, 0.5801653861999512f, 0.7980650663375854f, 0.4610859751701355f, 0.4558097720146179f, +0.19684302806854248f, 0.18616646528244019f, 0.23337583243846893f, 0.4990341067314148f, 0.7037010192871094f, 0.6436198353767395f, 0.24457307159900665f, 0.7770310640335083f, +0.625368595123291f, 0.8756439685821533f, 0.1259891539812088f, 0.11284938454627991f, 0.7426440715789795f, 0.3927590847015381f, 0.13194480538368225f, 0.3025219440460205f, +0.8224303126335144f, 0.05171584337949753f, 0.11280544847249985f, 0.7752953767776489f, 0.26151880621910095f, 0.383064329624176f, 0.4948292672634125f, 0.5192846655845642f, +0.6777672171592712f, 0.25491082668304443f, 0.3068833351135254f, 0.17029447853565216f, 0.6997418999671936f, 0.26349207758903503f, 0.10692159831523895f, 0.7205324769020081f, +0.9339208006858826f, 0.8421981930732727f, 0.010263236239552498f, 0.2301403433084488f, 0.6057261824607849f, 0.7291828989982605f, 0.3980230391025543f, 0.4214962422847748f, +0.5965882539749146f, 0.24511700868606567f, 0.22667744755744934f, 0.015498572029173374f, 0.004228321835398674f, 0.5320065021514893f, 0.6332719922065735f, 0.30852237343788147f, +0.6483232378959656f, 0.9721153974533081f, 0.9734839797019958f, 0.06258569657802582f, 0.031315192580223083f, 0.6412638425827026f, 0.3138943314552307f, 0.5934697389602661f, +0.46374693512916565f, 0.2936100363731384f, 0.23298673331737518f, 0.38931047916412354f, 0.9177299737930298f, 0.1505364626646042f, 0.6530308127403259f, 0.41215163469314575f, +0.3533901572227478f, 0.26822251081466675f, 0.5154330730438232f, 0.2701168954372406f, 0.32972458004951477f, 0.9368245005607605f, 0.7502865791320801f, 0.32148057222366333f, +0.45290932059288025f, 0.511681318283081f, 0.47808510065078735f, 0.32327747344970703f, 0.6841997504234314f, 0.9678027629852295f, 0.520334780216217f, 0.7473534345626831f, +0.7772625088691711f, 0.736623227596283f, 0.8607732057571411f, 0.9667275547981262f, 0.4560672640800476f, 0.2704223394393921f, 0.14544269442558289f, 0.7545318603515625f, +0.21486550569534302f, 0.32769015431404114f, 0.9914677143096924f, 0.14687076210975647f, 0.7242969870567322f, 0.48633360862731934f, 0.05656072869896889f, 0.22735507786273956f, +0.22011402249336243f, 0.1942322701215744f, 0.6536839604377747f, 0.04057272523641586f, 0.921172559261322f, 0.8877853751182556f, 0.8904338479042053f, 0.963942289352417f, +0.3033596873283386f, 0.5611979365348816f, 0.20628410577774048f, 0.6207795143127441f, 0.7757342457771301f, 0.6627216339111328f, 0.7927178740501404f, 0.2980692982673645f, +0.2086225152015686f, 0.30454549193382263f, 0.36816319823265076f, 0.08973460644483566f, 0.47017985582351685f, 0.9059226512908936f, 0.5155017375946045f, 0.2997702956199646f, +0.9775611758232117f, 0.44504690170288086f, 0.49955689907073975f, 0.5331793427467346f, 0.7267279624938965f, 0.027646107599139214f, 0.28859299421310425f, 0.9044886827468872f, +0.9083901047706604f, 0.6211917996406555f, 0.5834125280380249f, 0.8343560695648193f, 0.820085883140564f, 0.8083056211471558f, 0.23108093440532684f, 0.18827801942825317f, +0.6375491619110107f, 0.7014376521110535f, 0.6173043847084045f, 0.46051594614982605f, 0.08899050951004028f, 0.10323163866996765f, 0.5111736059188843f, 0.0859539732336998f, +0.3361329436302185f, 0.4249497950077057f, 0.8635343313217163f, 0.4651188254356384f, 0.8286846280097961f, 0.35903990268707275f, 0.722398579120636f, 0.45630571246147156f, +0.7320118546485901f, 0.02249559387564659f, 0.4390084445476532f, 0.06687837839126587f, 0.737313449382782f, 0.9499161839485168f, 0.2841919958591461f, 0.4376446306705475f, +0.7691289186477661f, 0.4071823060512543f, 0.9268417358398438f, 0.8048044443130493f, 0.8108023405075073f, 0.07472708821296692f, 0.5681334733963013f, 0.3138206899166107f, +0.7968219518661499f, 0.5361623764038086f, 0.6111031174659729f, 0.9574801325798035f, 0.5141287446022034f, 0.6091421246528625f, 0.5552446246147156f, 0.7305402755737305f, +0.6869174242019653f, 0.7220655679702759f, 0.01160413958132267f, 0.26996347308158875f, 0.9663212299346924f, 0.9342283606529236f, 0.866258978843689f, 0.9614925384521484f, +0.7826036810874939f, 0.19767844676971436f, 0.8379046320915222f, 0.7208091616630554f, 0.21902018785476685f, 0.34691035747528076f, 0.951633095741272f, 0.7052266597747803f, +0.8822177052497864f, 0.13436762988567352f, 0.8909662961959839f, 0.02244945615530014f, 0.03455391526222229f, 0.6343105435371399f, 0.5374130606651306f, 0.11731892079114914f, +0.958832323551178f, 0.6493907570838928f, 0.9362882971763611f, 0.3232359290122986f, 0.7699669003486633f, 0.14523302018642426f, 0.7012053728103638f, 0.8065226674079895f, +0.22717222571372986f, 0.773811936378479f, 0.2162395566701889f, 0.8171474933624268f, 0.7106422781944275f, 0.5410327911376953f, 0.6743998527526855f, 0.7309591770172119f, +0.1880522221326828f, 0.63120436668396f, 0.07585440576076508f, 0.25412288308143616f, 0.7189539074897766f, 0.1874363273382187f, 0.9149954915046692f, 0.5606078505516052f, +0.8735684752464294f, 0.4764938950538635f, 0.8693786263465881f, 0.49560078978538513f, 0.6698500514030457f, 0.38088878989219666f, 0.4925190806388855f, 0.31201452016830444f, +0.8557817935943604f, 0.8840526342391968f, 0.24972622096538544f, 0.11217586696147919f, 0.3044652044773102f, 0.44784003496170044f, 0.1953824758529663f, 0.06765623390674591f, +0.2819681167602539f, 0.18423594534397125f, 0.6537865996360779f, 0.3090730607509613f, 0.8102256655693054f, 0.5572554469108582f, 0.7171205282211304f, 0.7119795083999634f, +0.3128449618816376f, 0.07396766543388367f, 0.9286286234855652f, 0.3329910933971405f, 0.9173661470413208f, 0.9977117776870728f, 0.9327548742294312f, 0.9613074660301208f, +0.16328644752502441f, 0.23726463317871094f, 0.16397921741008759f, 0.18301767110824585f, 0.37396109104156494f, 0.65533447265625f, 0.9598321914672852f, 0.8546414375305176f, +0.5098034739494324f, 0.45903506875038147f, 0.3981446921825409f, 0.32993775606155396f, 0.3548332452774048f, 0.10424980521202087f, 0.7991273403167725f, 0.4561648368835449f, +0.32177525758743286f, 0.5217376351356506f, 0.7849901914596558f, 0.26172903180122375f, 0.2665896713733673f, 0.8127756714820862f, 0.7565352916717529f, 0.0929248034954071f, +0.4228709936141968f, 0.14052163064479828f, 0.08509344607591629f, 0.9088320732116699f, 0.8366007804870605f, 0.15718698501586914f, 0.7729631662368774f, 0.2785957157611847f, +0.3122621178627014f, 0.6649373769760132f, 0.1986953467130661f, 0.28200504183769226f, 0.6024459600448608f, 0.7998850345611572f, 0.4479917287826538f, 0.11024370044469833f, +0.5104821920394897f, 0.1692775934934616f, 0.02598620392382145f, 0.02297394536435604f, 0.6753804087638855f, 0.4539739787578583f, 0.9070771336555481f, 0.34343618154525757f, +0.710096001625061f, 0.9398519992828369f, 0.09208697080612183f, 0.17440995573997498f, 0.3983447253704071f, 0.0036354491021484137f, 0.17980138957500458f, 0.031070047989487648f, +0.4170043468475342f, 0.8832696676254272f, 0.3382854461669922f, 0.7332472205162048f, 0.15009430050849915f, 0.8131722211837769f, 0.9990054965019226f, 0.6338061690330505f, +0.28043705224990845f, 0.27732259035110474f, 0.38039207458496094f, 0.6770486235618591f, 0.1413707286119461f, 0.5973291993141174f, 0.3304830491542816f, 0.8328955173492432f, +0.2675318419933319f, 0.5526405572891235f, 0.8674792647361755f, 0.624355673789978f, 0.9622538685798645f, 0.6940979361534119f, 0.17657724022865295f, 0.6876315474510193f, +0.04030831530690193f, 0.036505501717329025f, 0.011325394734740257f, 0.3815472722053528f, 0.4294596314430237f, 0.0864260345697403f, 0.6942504644393921f, 0.14878854155540466f, +0.8035461902618408f, 0.4775734543800354f, 0.6287046074867249f, 0.17529265582561493f, 0.2967870235443115f, 0.9250869154930115f, 0.2387814074754715f, 0.35020098090171814f, +0.5488494038581848f, 0.8577283024787903f, 0.18183034658432007f, 0.6741934418678284f, 0.695472002029419f, 0.8447900414466858f, 0.8269122242927551f, 0.809901237487793f, +0.6217423677444458f, 0.9431862235069275f, 0.6641582250595093f, 0.8796884417533875f, 0.16510985791683197f, 0.11654093861579895f, 0.7086746096611023f, 0.8552731871604919f, +0.7938231229782104f, 0.15012085437774658f, 0.03865816444158554f, 0.5424082279205322f, 0.8734539151191711f, 0.9900194406509399f, 0.18357162177562714f, 0.9707738757133484f, +0.5348612070083618f, 0.21551357209682465f, 0.5600320100784302f, 0.1728658825159073f, 0.6501113176345825f, 0.5577988028526306f, 0.19069279730319977f, 0.5834340453147888f, +0.6960987448692322f, 0.17347130179405212f, 0.02112433686852455f, 0.18725721538066864f, 0.9123945236206055f, 0.9113566875457764f, 0.03998378664255142f, 0.33660319447517395f, +0.6905257701873779f, 0.0040684533305466175f, 0.16499754786491394f, 0.6672759056091309f, 0.3976270854473114f, 0.4745728373527527f, 0.739020049571991f, 0.41671109199523926f, +0.4183257222175598f, 0.26837512850761414f, 0.8260937929153442f, 0.6609271764755249f, 0.30912721157073975f, 0.9379354119300842f, 0.5672388076782227f, 0.27081891894340515f, +0.23061466217041016f, 0.6897791028022766f, 0.33352723717689514f, 0.3870077431201935f, 0.7784287929534912f, 0.5306746363639832f, 0.13070955872535706f, 0.744329571723938f, +0.24107398092746735f, 0.1638122946023941f, 0.8282036185264587f, 0.48497870564460754f, 0.706311821937561f, 0.9202195405960083f, 0.18515071272850037f, 0.4991157650947571f, +0.6355981230735779f, 0.36662885546684265f, 0.6665900349617004f, 0.9570690393447876f, 0.6728377938270569f, 0.5506444573402405f, 0.40894055366516113f, 0.6040019989013672f, +0.7523337006568909f, 0.10914149880409241f, 0.8219217658042908f, 0.9520633220672607f, 0.4442506730556488f, 0.892663300037384f, 0.14485475420951843f, 0.14616549015045166f, +0.9282236099243164f, 0.5728079080581665f, 0.45919182896614075f, 0.9322077631950378f, 0.11782011389732361f, 0.6026315093040466f, 0.8043122887611389f, 0.2586747705936432f, +0.20907734334468842f, 0.036516956984996796f, 0.530368983745575f, 0.9362868666648865f, 0.37948769330978394f, 0.8088100552558899f, 0.8937749862670898f, 0.16933253407478333f, +0.3121739625930786f, 0.2842176854610443f, 0.5096632242202759f, 0.3547835648059845f, 0.23382259905338287f, 0.9367581605911255f, 0.8489781618118286f, 0.5572274327278137f, +0.9847395420074463f, 0.8873686790466309f, 0.40718019008636475f, 0.37934252619743347f, 0.27246594429016113f, 0.6738012433052063f, 0.6979975700378418f, 0.4551076889038086f, +0.4098145365715027f, 0.010339970700442791f, 0.7415696978569031f, 0.13307255506515503f, 0.48812049627304077f, 0.5587825179100037f, 0.995302677154541f, 0.18250548839569092f, +0.8729076385498047f, 0.5519697070121765f, 0.7374035716056824f, 0.3695720434188843f, 0.21864627301692963f, 0.664120078086853f, 0.5381128787994385f, 0.6757503151893616f, +0.24285979568958282f, 0.3267253637313843f, 0.3182052969932556f, 0.35925912857055664f, 0.9323779940605164f, 0.9922254681587219f, 0.9141061305999756f, 0.7681183218955994f, +0.8368917107582092f, 0.24760043621063232f, 0.5673061013221741f, 0.7383669018745422f, 0.25867488980293274f, 0.0017137769609689713f, 0.7745900750160217f, 0.12540675699710846f, +0.3258209526538849f, 0.5276515483856201f, 0.17417694628238678f, 0.8095035552978516f, 0.7251359820365906f, 0.4378311038017273f, 0.3379090428352356f, 0.9904748201370239f, +0.7334962487220764f, 0.6266423463821411f, 0.026366258040070534f, 0.8018198609352112f, 0.08561381697654724f, 0.8486039042472839f, 0.46338996291160583f, 0.013374606147408485f, +0.6582152247428894f, 0.9484530687332153f, 0.5979982018470764f, 0.7422192692756653f, 0.06930296123027802f, 0.3919375538825989f, 0.2755202353000641f, 0.07475316524505615f, +0.665478527545929f, 0.6880860924720764f, 0.4892694056034088f, 0.30474361777305603f, 0.548564076423645f, 0.00436699902638793f, 0.6329146027565002f, 0.5490009188652039f, +0.6099494695663452f, 0.0313592329621315f, 0.7599168419837952f, 0.9707520008087158f, 0.039397746324539185f, 0.22317290306091309f, 0.09303828328847885f, 0.06531816720962524f, +0.6547723412513733f, 0.2948116064071655f, 0.4515645503997803f, 0.91733717918396f, 0.24207042157649994f, 0.419939786195755f, 0.7757521271705627f, 0.8168008923530579f, +0.1615350842475891f, 0.620139479637146f, 0.6968688368797302f, 0.25275951623916626f, 0.29847267270088196f, 0.4407472014427185f, 0.22841095924377441f, 0.6896411180496216f, +0.26546794176101685f, 0.9123073816299438f, 0.731774091720581f, 0.2933315932750702f, 0.07020459324121475f, 0.3073844313621521f, 0.021693218499422073f, 0.7431932687759399f, +0.6753187775611877f, 0.18546181917190552f, 0.42905211448669434f, 0.04261061176657677f, 0.5001127123832703f, 0.8334839344024658f, 0.17142131924629211f, 0.6141620874404907f, +0.25461041927337646f, 0.6722091436386108f, 0.47305017709732056f, 0.7768329381942749f, 0.30969807505607605f, 0.08711927384138107f, 0.7568771839141846f, 0.8818832039833069f, +0.595696747303009f, 0.05078177899122238f, 0.0692070722579956f, 0.8771646618843079f, 0.7494382262229919f, 0.19025753438472748f, 0.546052098274231f, 0.14395397901535034f, +0.5114080309867859f, 0.5800368785858154f, 0.3223957419395447f, 0.20980462431907654f, 0.440080851316452f, 0.28211095929145813f, 0.1618337780237198f, 0.42222073674201965f, +0.29263317584991455f, 0.3261815011501312f, 0.5779665112495422f, 0.9771426320075989f, 0.5264603495597839f, 0.10635195672512054f, 0.31840604543685913f, 0.8687031865119934f, +0.4234425127506256f, 0.8960047960281372f, 0.04621966555714607f, 0.9405215978622437f, 0.7990832924842834f, 0.37564003467559814f, 0.8749397397041321f, 0.6793010234832764f, +0.9013640880584717f, 0.7023375034332275f, 0.8674442768096924f, 0.8533419370651245f, 0.5783987641334534f, 0.27090927958488464f, 0.7262323498725891f, 0.8797038793563843f, +0.43710702657699585f, 0.7733926177024841f, 0.3474160432815552f, 0.2304585874080658f, 0.9421567916870117f, 0.7727038264274597f, 0.6270948052406311f, 0.8863624930381775f, +0.5395956039428711f, 0.9814590215682983f, 0.6347394585609436f, 0.31617671251296997f, 0.918760359287262f, 0.5230608582496643f, 0.3623059093952179f, 0.7970762252807617f, +0.8534966707229614f, 0.9517311453819275f, 0.0009764263522811234f, 0.5764568448066711f, 0.5747760534286499f, 0.5762202143669128f, 0.48032864928245544f, 0.014829064719378948f, +0.07078199088573456f, 0.5588500499725342f, 0.40077972412109375f, 0.9920223355293274f, 0.3103049397468567f, 0.9755693674087524f, 0.6624073386192322f, 0.6714904308319092f, +0.06279388815164566f, 0.3690985143184662f, 0.3322991728782654f, 0.7071717381477356f, 0.4154139757156372f, 0.48446810245513916f, 0.5266222953796387f, 0.03435739129781723f, +0.17276929318904877f, 0.5595134496688843f, 0.10138633847236633f, 0.37887415289878845f, 0.8606154322624207f, 0.9777480959892273f, 0.9633443355560303f, 0.6435752511024475f, +0.9349085688591003f, 0.2167203426361084f, 0.9038199782371521f, 0.5627761483192444f, 0.7916793823242188f, 0.7354964017868042f, 0.2184157371520996f, 0.24099208414554596f, +0.8859689831733704f, 0.6580483317375183f, 0.8547531962394714f, 0.2058832049369812f, 0.8956504464149475f, 0.8298039436340332f, 0.05256554111838341f, 0.6722875237464905f, +0.12486384809017181f, 0.44831177592277527f, 0.8290076851844788f, 0.030408354476094246f, 0.3842383325099945f, 0.3097141981124878f, 0.3102969825267792f, 0.707987368106842f, +0.571068286895752f, 0.3839150369167328f, 0.2528071999549866f, 0.6597869396209717f, 0.7299755811691284f, 0.36246490478515625f, 0.6493623852729797f, 0.826108455657959f, +0.9000794887542725f, 0.0020253953989595175f, 0.19493505358695984f, 0.08128095418214798f, 0.0009971775580197573f, 0.9545018672943115f, 0.4380250871181488f, 0.8812942504882812f, +0.4311160147190094f, 0.2543269991874695f, 0.9479711055755615f, 0.327338308095932f, 0.6535859704017639f, 0.26821041107177734f, 0.28765907883644104f, 0.23947811126708984f, +0.26806870102882385f, 0.9572628140449524f, 0.17777258157730103f, 0.233714759349823f, 0.841732382774353f, 0.5951212644577026f, 0.12545272707939148f, 0.5834788084030151f, +0.7472609281539917f, 0.5151287317276001f, 0.9030259847640991f, 0.6347557902336121f, 0.7382781505584717f, 0.9115778803825378f, 0.7413359880447388f, 0.8278276324272156f, +0.8064123392105103f, 0.9620784521102905f, 0.8681958913803101f, 0.0096723148599267f, 0.3599185645580292f, 0.6556843519210815f, 0.10393641889095306f, 0.041924849152565f, +0.7004203796386719f, 0.8849185705184937f, 0.10941017419099808f, 0.7745969295501709f, 0.1032097339630127f, 0.33555078506469727f, 0.5527595281600952f, 0.028606943786144257f, +0.10105562955141068f, 0.6001749038696289f, 0.9409510493278503f, 0.7192438840866089f, 0.7898900508880615f, 0.016621986404061317f, 0.45908719301223755f, 0.7509690523147583f, +0.5669559836387634f, 0.21026258170604706f, 0.4324885904788971f, 0.7443158030509949f, 0.05768974870443344f, 0.47957345843315125f, 0.9484496116638184f, 0.16025231778621674f, +0.8433896899223328f, 0.5172806978225708f, 0.15699337422847748f, 0.39412394165992737f, 0.9029998779296875f, 0.05565311014652252f, 0.7805940508842468f, 0.49641117453575134f, +0.742900013923645f, 0.0009576164302416146f, 0.9255560636520386f, 0.3388074040412903f, 0.6240367889404297f, 0.2354528307914734f, 0.22893789410591125f, 0.45684829354286194f, +0.2076472043991089f, 0.0160797368735075f, 0.5067601203918457f, 0.8569696545600891f, 0.20644959807395935f, 0.44650983810424805f, 0.16425400972366333f, 0.5767872929573059f, +0.31276699900627136f, 0.6515252590179443f, 0.6615145206451416f, 0.059994857758283615f, 0.6590124368667603f, 0.33635255694389343f, 0.7618539929389954f, 0.3432113230228424f, +0.668323814868927f, 0.2509884536266327f, 0.5598640441894531f, 0.864422619342804f, 0.64923095703125f, 0.8521081805229187f, 0.44377222657203674f, 0.23381102085113525f, +0.9203548431396484f, 0.8050975799560547f, 0.12310810387134552f, 0.43640851974487305f, 0.0700916200876236f, 0.5961264967918396f, 0.6583603620529175f, 0.7161843776702881f, +0.2644091844558716f, 0.6761126518249512f, 0.7385233640670776f, 0.0768115296959877f, 0.9691441059112549f, 0.3516393303871155f, 0.8615303039550781f, 0.864913821220398f, +0.8201194405555725f, 0.7011891603469849f, 0.10016994178295135f, 0.7037471532821655f, 0.6949594020843506f, 0.3695797026157379f, 0.6242754459381104f, 0.46427464485168457f, +0.587787389755249f, 0.9990074038505554f, 0.932110607624054f, 0.22033880650997162f, 0.8005419969558716f, 0.2120874673128128f, 0.3722267150878906f, 0.3969506621360779f, +0.37687328457832336f, 0.7831511497497559f, 0.6460131406784058f, 0.45549240708351135f, 0.36278098821640015f, 0.4357337951660156f, 0.4908127188682556f, 0.29748064279556274f, +0.9864791631698608f, 0.5022042989730835f, 0.458183616399765f, 0.18255457282066345f, 0.9839524030685425f, 0.7691742777824402f, 0.6712758541107178f, 0.03780341148376465f, +0.4035791754722595f, 0.06905360519886017f, 0.4823743999004364f, 0.5344927310943604f, 0.5701014995574951f, 0.002795039676129818f, 0.36970800161361694f, 0.732533872127533f, +0.8997992873191833f, 0.19869877398014069f, 0.9822761416435242f, 0.3639777600765228f, 0.19913999736309052f, 0.0745854601264f, 0.6719855666160583f, 0.551808774471283f, +0.06207812950015068f, 0.45313066244125366f, 0.4869347810745239f, 0.28743478655815125f, 0.5369775891304016f, 0.7787058353424072f, 0.8427631258964539f, 0.42971765995025635f, +0.6539419889450073f, 0.7801956534385681f, 0.44619283080101013f, 0.022647062316536903f, 0.47011440992355347f, 0.950774073600769f, 0.35346290469169617f, 0.959039032459259f, +0.17646877467632294f, 0.48085901141166687f, 0.07073989510536194f, 0.6566789746284485f, 0.6471821069717407f, 0.341950923204422f, 0.043988343328237534f, 0.802250325679779f, +0.04233984276652336f, 0.7129372358322144f, 0.7723221778869629f, 0.6101589202880859f, 0.7257767915725708f, 0.9755493402481079f, 0.8899168372154236f, 0.07783762365579605f, +0.6766654253005981f, 0.16853374242782593f, 0.2341274470090866f, 0.10599900782108307f, 0.8851604461669922f, 0.38784319162368774f, 0.7576138377189636f, 0.717671275138855f, +0.11523041874170303f, 0.972602367401123f, 0.22093762457370758f, 0.556819498538971f, 0.2504953145980835f, 0.7919850945472717f, 0.319614976644516f, 0.9590424299240112f, +0.1373860090970993f, 0.39504435658454895f, 0.07128208130598068f, 0.9273471832275391f, 0.5470618009567261f, 0.5043644309043884f, 0.937738835811615f, 0.8609659671783447f, +0.5345695614814758f, 0.2872750163078308f, 0.8521103262901306f, 0.764343798160553f, 0.47805243730545044f, 0.19100405275821686f, 0.9727306962013245f, 0.5236259698867798f, +0.2733485996723175f, 0.06391589343547821f, 0.8815306425094604f, 0.261038601398468f, 0.7892217636108398f, 0.1460680216550827f, 0.41093599796295166f, 0.7578021883964539f, +0.059340156614780426f, 0.5730094313621521f, 0.6489822864532471f, 0.6817975640296936f, 0.9338338971138f, 0.683379054069519f, 0.3668810725212097f, 0.377388596534729f, +0.47466719150543213f, 0.2252691090106964f, 0.2841656506061554f, 0.0817435085773468f, 0.16671620309352875f, 0.9078832268714905f, 0.8216068744659424f, 0.07410648465156555f, +0.016470374539494514f, 0.10984552651643753f, 0.6139592528343201f, 0.8617428541183472f, 0.859324038028717f, 0.19758352637290955f, 0.6357488632202148f, 0.9915022850036621f, +0.9386872053146362f, 0.6344822645187378f, 0.6415310502052307f, 0.9157065749168396f, 0.05109546706080437f, 0.7300078868865967f, 0.7509719729423523f, 0.7929390072822571f, +0.10796733945608139f, 0.8958497047424316f, 0.261611670255661f, 0.40592971444129944f, 0.6320244669914246f, 0.423672080039978f, 0.048959020525217056f, 0.38431936502456665f, +0.6976810693740845f, 0.3439382016658783f, 0.5227338075637817f, 0.12095381319522858f, 0.42177462577819824f, 0.2487444430589676f, 0.049534011632204056f, 0.09143513441085815f, +0.45842665433883667f, 0.2003227323293686f, 0.9713295102119446f, 0.1685362458229065f, 0.7934980988502502f, 0.6430714726448059f, 0.6651642322540283f, 0.007919831201434135f, +0.8962521553039551f, 0.6655483245849609f, 0.629794716835022f, 0.8912329077720642f, 0.9143483638763428f, 0.5503464341163635f, 0.29173514246940613f, 0.2483099400997162f, +0.47554075717926025f, 0.9476751089096069f, 0.940896213054657f, 0.8833431601524353f, 0.9345458745956421f, 0.1314116269350052f, 0.5438298583030701f, 0.9854875802993774f, +0.296745628118515f, 0.23630478978157043f, 0.45277777314186096f, 0.562343418598175f, 0.2577274441719055f, 0.3881419003009796f, 0.904939591884613f, 0.2553179860115051f, +0.2742343544960022f, 0.7655369639396667f, 0.8616006374359131f, 0.8969881534576416f, 0.43742573261260986f, 0.5795735120773315f, 0.8086353540420532f, 0.7746292352676392f, +0.22819223999977112f, 0.6081107258796692f, 0.3018743395805359f, 0.6815782785415649f, 0.21558493375778198f, 0.43023350834846497f, 0.8313943147659302f, 0.8649519681930542f, +0.80108243227005f, 0.025904303416609764f, 0.7156311869621277f, 0.04977964609861374f, 0.4497387409210205f, 0.9668256044387817f, 0.13522809743881226f, 0.6230608224868774f, +0.473552405834198f, 0.014564136043190956f, 0.2917288839817047f, 0.8265286087989807f, 0.3387892246246338f, 0.8865255117416382f, 0.4675596356391907f, 0.1398005336523056f, +0.4302213490009308f, 0.2167520374059677f, 0.10270655155181885f, 0.3724081814289093f, 0.01779848337173462f, 0.8992986083030701f, 0.20081882178783417f, 0.7082951664924622f, +0.9578156471252441f, 0.8292114734649658f, 0.14453528821468353f, 0.8524420857429504f, 0.11437153071165085f, 0.6209902167320251f, 0.20385856926441193f, 0.5757230520248413f, +0.2959881126880646f, 0.2169235348701477f, 0.7060796618461609f, 0.3839469850063324f, 0.519993782043457f, 0.4705554246902466f, 0.20948776602745056f, 0.42345502972602844f, +0.9436777830123901f, 0.40182194113731384f, 0.6938789486885071f, 0.6443411707878113f, 0.6797475814819336f, 0.5907683372497559f, 0.6512773633003235f, 0.2224283069372177f, +0.885246753692627f, 0.21644440293312073f, 0.449653685092926f, 0.3770533502101898f, 0.7346650958061218f, 0.33062228560447693f, 0.9166184067726135f, 0.3380100727081299f, +0.7891934514045715f, 0.9438181519508362f, 0.8316969871520996f, 0.6313284635543823f, 0.11420761048793793f, 0.4500621557235718f, 0.07425041496753693f, 0.11449921131134033f, +0.7080784440040588f, 0.027876775711774826f, 0.6743224263191223f, 0.5929796099662781f, 0.3852424919605255f, 0.26271864771842957f, 0.18910177052021027f, 0.40242621302604675f, +0.5370210409164429f, 0.08933506160974503f, 0.2106688916683197f, 0.5228551030158997f, 0.1901853382587433f, 0.4335349500179291f, 0.534393846988678f, 0.558064877986908f, +0.31281179189682007f, 0.7737579345703125f, 0.7967098951339722f, 0.7916972041130066f, 0.5073855519294739f, 0.8013333082199097f, 0.32083258032798767f, 0.6307439804077148f, +0.9025900959968567f, 0.673750638961792f, 0.42550086975097656f, 0.3165123462677002f, 0.40310296416282654f, 0.911356508731842f, 0.2102242261171341f, 0.9676262140274048f, +0.2056160718202591f, 0.8439857363700867f, 0.44888290762901306f, 0.13172709941864014f, 0.2357032150030136f, 0.21107421815395355f, 0.059168532490730286f, 0.3782702088356018f, +0.8687679767608643f, 0.9234156608581543f, 0.5733844637870789f, 0.20290502905845642f, 0.24106387794017792f, 0.8615338206291199f, 0.7958470582962036f, 0.6313828229904175f, +0.42465463280677795f, 0.7964861989021301f, 0.21290750801563263f, 0.5191752314567566f, 0.2530255913734436f, 0.11879558116197586f, 0.25661394000053406f, 0.6743849515914917f, +0.7503969669342041f, 0.7566319108009338f, 0.23875868320465088f, 0.6668164730072021f, 0.708486020565033f, 0.355316162109375f, 0.6546711325645447f, 0.211620032787323f, +0.20146146416664124f, 0.7588347792625427f, 0.5720488429069519f, 0.5407357215881348f, 0.4373607039451599f, 0.7948766946792603f, 0.0056547909043729305f, 0.4924445152282715f, +0.23144152760505676f, 0.7103550434112549f, 0.8261276483535767f, 0.6242372989654541f, 0.5091700553894043f, 0.0037001213058829308f, 0.9267654418945312f, 0.8515664935112f, +0.9522439241409302f, 0.8391945362091064f, 0.9271841645240784f, 0.23406800627708435f, 0.045585859566926956f, 0.43475791811943054f, 0.8167415857315063f, 0.24166445434093475f, +0.2640747129917145f, 0.15177837014198303f, 0.19665805995464325f, 0.409382164478302f, 0.7564517259597778f, 0.4927217662334442f, 0.1945665031671524f, 0.8488059639930725f, +0.4694051444530487f, 0.45683833956718445f, 0.358881413936615f, 0.17192761600017548f, 0.8884893655776978f, 0.18958647549152374f, 0.03507309406995773f, 0.45744580030441284f, +0.40306606888771057f, 0.36260852217674255f, 0.44432124495506287f, 0.363284707069397f, 0.3858494162559509f, 0.21642999351024628f, 0.9769437313079834f, 0.34269440174102783f, +0.29677093029022217f, 0.0736883282661438f, 0.39014312624931335f, 0.5362541079521179f, 0.4118554890155792f, 0.8467485904693604f, 0.9219390749931335f, 0.833507776260376f, +0.07194607704877853f, 0.17670348286628723f, 0.8933617472648621f, 0.4909079968929291f, 0.33026212453842163f, 0.707797110080719f, 0.9560204744338989f, 0.31656062602996826f, +0.40110069513320923f, 0.8497166633605957f, 0.7877151370048523f, 0.8019854426383972f, 0.23527668416500092f, 0.26168522238731384f, 0.7472476363182068f, 0.24450337886810303f, +0.3317723572254181f, 0.7411072254180908f, 0.3684198558330536f, 0.5679813027381897f, 0.017185036092996597f, 0.27803128957748413f, 0.28154540061950684f, 0.2092972695827484f, +0.23818819224834442f, 0.7264262437820435f, 0.8670294284820557f, 0.35353443026542664f, 0.142163947224617f, 0.4065586030483246f, 0.8585960268974304f, 0.6521030068397522f, +0.5668304562568665f, 0.3979693651199341f, 0.9908129572868347f, 0.9470103979110718f, 0.8061237335205078f, 0.16447514295578003f, 0.6730362176895142f, 0.5396556258201599f, +0.3640780746936798f, 0.7644920349121094f, 0.6940240859985352f, 0.3050464689731598f, 0.09718422591686249f, 0.6245433688163757f, 0.3024922311306f, 0.5825129747390747f, +0.7330371141433716f, 0.39582911133766174f, 0.8433105945587158f, 0.2741164267063141f, 0.43456658720970154f, 0.8757627606391907f, 0.10976860672235489f, 0.8747717142105103f, +0.0647740438580513f, 0.1112329289317131f, 0.7740201950073242f, 0.5562590956687927f, 0.9756235480308533f, 0.7774123549461365f, 0.8113250136375427f, 0.1691053807735443f, +0.61800616979599f, 0.5195786356925964f, 0.14912791550159454f, 0.9175516366958618f, 0.5801228880882263f, 0.7070158123970032f, 0.8864395618438721f, 0.6095439791679382f, +0.994306743144989f, 0.9732892513275146f, 0.5486581921577454f, 0.28849348425865173f, 0.45767003297805786f, 0.07480042427778244f, 0.22946041822433472f, 0.5304427146911621f, +0.644124448299408f, 0.4204535484313965f, 0.3707827925682068f, 0.30884286761283875f, 0.9524882435798645f, 0.7009897828102112f, 0.9319521188735962f, 0.12486722320318222f, +0.6799519062042236f, 0.9275238513946533f, 0.10676932334899902f, 0.18945784866809845f, 0.6571061611175537f, 0.29697927832603455f, 0.3203149437904358f, 0.10203506052494049f, +0.9904554486274719f, 0.09614608436822891f, 0.7559593319892883f, 0.49443697929382324f, 0.21448281407356262f, 0.504718005657196f, 0.9347584247589111f, 0.6927289366722107f, +0.3172609806060791f, 0.5124843120574951f, 0.27338483929634094f, 0.26003769040107727f, 0.9731898307800293f, 0.8164818286895752f, 0.1454087495803833f, 0.8696098327636719f, +0.745995283126831f, 0.9996111392974854f, 0.3951227068901062f, 0.2586195468902588f, 0.6126495599746704f, 0.6458156704902649f, 0.8579901456832886f, 0.7706219553947449f, +0.8201382756233215f, 0.43494299054145813f, 0.6367515921592712f, 0.6634368300437927f, 0.24273741245269775f, 0.4105190932750702f, 0.8586304783821106f, 0.10334539413452148f, +0.4801006019115448f, 0.6270561218261719f, 0.7532644271850586f, 0.6810053586959839f, 0.3099173903465271f, 0.9624936580657959f, 0.06371531635522842f, 0.10250752419233322f, +0.8727610111236572f, 0.8711733818054199f, 0.7626160383224487f, 0.8453850150108337f, 0.06238942593336105f, 0.18293137848377228f, 0.931363582611084f, 0.12623313069343567f, +0.692129373550415f, 0.2064296454191208f, 0.4022400677204132f, 0.3111339509487152f, 0.16522198915481567f, 0.9553125500679016f, 0.5214489698410034f, 0.6597180962562561f, +0.7251784801483154f, 0.3080044984817505f, 0.31029611825942993f, 0.2311733514070511f, 0.8871330618858337f, 0.933870255947113f, 0.8942176103591919f, 0.2060198336839676f, +0.5559906959533691f, 0.9469042420387268f, 0.24264883995056152f, 0.8136751651763916f, 0.1507953703403473f, 0.8965033292770386f, 0.09230393916368484f, 0.8279618620872498f, +0.6549814939498901f, 0.6941879391670227f, 0.5809257626533508f, 0.3518980145454407f, 0.9233973622322083f, 0.009194904938340187f, 0.5895130038261414f, 0.5167726874351501f, +0.6715549230575562f, 0.3558105528354645f, 0.9062415957450867f, 0.019659454002976418f, 0.015171688050031662f, 0.0844106674194336f, 0.5525129437446594f, 0.372904509305954f, +0.01641629822552204f, 0.24462145566940308f, 0.3086024224758148f, 0.9697414636611938f, 0.7774602174758911f, 0.8223057985305786f, 0.6524856686592102f, 0.5930004715919495f, +0.7709630727767944f, 0.24234332144260406f, 0.3643973469734192f, 0.6883869767189026f, 0.8157514333724976f, 0.10903248190879822f, 0.7205037474632263f, 0.6046950221061707f, +0.9001808762550354f, 0.5030016899108887f, 0.48876968026161194f, 0.7157906293869019f, 0.8293609023094177f, 0.924971878528595f, 0.7385571002960205f, 0.4830736517906189f, +0.533187210559845f, 0.8207802772521973f, 0.9800187349319458f, 0.526749849319458f, 0.28805336356163025f, 0.9790270924568176f, 0.5193004608154297f, 0.5837844610214233f, +0.389374703168869f, 0.4516046345233917f, 0.5047821402549744f, 0.8923551440238953f, 0.054200250655412674f, 0.751899242401123f, 0.9738599061965942f, 0.07879529893398285f, +0.8330599665641785f, 0.5675544142723083f, 0.04826875030994415f, 0.6931273937225342f, 0.8694228529930115f, 0.19401445984840393f, 0.5882992744445801f, 0.390125036239624f, +0.3203933835029602f, 0.5150889158248901f, 0.01883171685039997f, 0.04040174558758736f, 0.8450819253921509f, 0.8820137977600098f, 0.9289305210113525f, 0.014973503537476063f, +0.4736469089984894f, 0.2958020269870758f, 0.8659952878952026f, 0.3513164520263672f, 0.6805540919303894f, 0.8087159991264343f, 0.6962084174156189f, 0.026316458359360695f, +0.3410683870315552f, 0.7736333608627319f, 0.3837701082229614f, 0.36468979716300964f, 0.377444863319397f, 0.5813465118408203f, 0.8334623575210571f, 0.6664111614227295f, +0.5036194920539856f, 0.27175402641296387f, 0.05914819985628128f, 0.4083687961101532f, 0.7839493155479431f, 0.7662079334259033f, 0.8354814052581787f, 0.9060285687446594f, +0.0888555645942688f, 0.8888338208198547f, 0.8094357252120972f, 0.48300907015800476f, 0.44886404275894165f, 0.8283036351203918f, 0.2886839807033539f, 0.04227234050631523f, +0.04732397943735123f, 0.3157482445240021f, 0.11242332309484482f, 0.8150988817214966f, 0.6353703737258911f, 0.9325249791145325f, 0.56136155128479f, 0.1847657859325409f, +0.039601609110832214f, 0.9551551938056946f, 0.6380464434623718f, 0.6730518937110901f, 0.6615184545516968f, 0.953544020652771f, 0.03330446034669876f, 0.12671880424022675f, +0.2586456835269928f, 0.31586068868637085f, 0.4050179123878479f, 0.8971955180168152f, 0.9494673609733582f, 0.8823329210281372f, 0.022304760292172432f, 0.08666924387216568f, +0.524452805519104f, 0.046784449368715286f, 0.09237763285636902f, 0.08856141567230225f, 0.9569364190101624f, 0.7261368036270142f, 0.043521247804164886f, 0.23872007429599762f, +0.8090552091598511f, 0.689422607421875f, 0.16481271386146545f, 0.7908642292022705f, 0.9266812205314636f, 0.6924310326576233f, 0.39163658022880554f, 0.4215131998062134f, +0.18739725649356842f, 0.5462121367454529f, 0.3282211422920227f, 0.02299114689230919f, 0.8904401063919067f, 0.23001036047935486f, 0.5673338770866394f, 0.9426717758178711f, +0.007027411833405495f, 0.6398887038230896f, 0.7413935661315918f, 0.12651538848876953f, 0.9198367595672607f, 0.052194271236658096f, 0.86134272813797f, 0.9321885704994202f, +0.494291216135025f, 0.48342692852020264f, 0.5992767214775085f, 0.4412491023540497f, 0.8309970498085022f, 0.3484353721141815f, 0.3077968955039978f, 0.2631545662879944f, +0.9634693264961243f, 0.2880363464355469f, 0.39275676012039185f, 0.754668653011322f, 0.9258909821510315f, 0.32919299602508545f, 0.9425109624862671f, 0.10759278386831284f, +0.4269903600215912f, 0.1753050833940506f, 0.026127314195036888f, 0.21388326585292816f, 0.467974454164505f, 0.02186032570898533f, 0.3118401765823364f, 0.0615234337747097f, +0.16676120460033417f, 0.8444554805755615f, 0.02629641816020012f, 0.33686360716819763f, 0.3204424977302551f, 0.8993013501167297f, 0.15559908747673035f, 0.3512670695781708f, +0.684712827205658f, 0.19166259467601776f, 0.19686712324619293f, 0.5003060698509216f, 0.25367480516433716f, 0.30688491463661194f, 0.17800888419151306f, 0.31943178176879883f, +0.9773035645484924f, 0.4616990387439728f, 0.35979437828063965f, 0.3930831551551819f, 0.7088274359703064f, 0.7534606456756592f, 0.7380592226982117f, 0.46868276596069336f, +0.444095253944397f, 0.11556065827608109f, 0.2519468665122986f, 0.2869359850883484f, 0.00442848727107048f, 0.4892222285270691f, 0.08402656763792038f, 0.9699243903160095f, +0.32360637187957764f, 0.6353713274002075f, 0.7778244018554688f, 0.9855338931083679f, 0.4412904977798462f, 0.893733561038971f, 0.44472014904022217f, 0.5362493395805359f, +0.5158112645149231f, 0.33244645595550537f, 0.12762843072414398f, 0.5311443209648132f, 0.6837429404258728f, 0.015633562579751015f, 0.5409162640571594f, 0.011603380553424358f, +0.3632024824619293f, 0.12350483983755112f, 0.0381486602127552f, 0.5721734762191772f, 0.5076586008071899f, 0.12293870002031326f, 0.6341758370399475f, 0.10380803793668747f, +0.1963498741388321f, 0.6188239455223083f, 0.3730088770389557f, 0.8349074125289917f, 0.2766418755054474f, 0.16908825933933258f, 0.38118237257003784f, 0.04124295711517334f, +0.8133368492126465f, 0.22798074781894684f, 0.5032622218132019f, 0.8591880202293396f, 0.6855159997940063f, 0.5846792459487915f, 0.8554911613464355f, 0.9368709921836853f, +0.35795822739601135f, 0.8628109693527222f, 0.6264200210571289f, 0.40308356285095215f, 0.4781380891799927f, 0.08016745001077652f, 0.8334801197052002f, 0.5110160112380981f, +0.44757789373397827f, 0.7466632723808289f, 0.4661709666252136f, 0.5104187726974487f, 0.21975895762443542f, 0.3775799572467804f, 0.27157217264175415f, 0.6883200407028198f, +0.2288740873336792f, 0.8370267152786255f, 0.6636441349983215f, 0.45123013854026794f, 0.7155916094779968f, 0.9218657612800598f, 0.6105198860168457f, 0.8405524492263794f, +0.8059226274490356f, 0.6427260041236877f, 0.48268917202949524f, 0.6152743101119995f, 0.4784468412399292f, 0.2984730303287506f, 0.49476656317710876f, 0.12010471522808075f, +0.15524758398532867f, 0.1850532442331314f, 0.8215470910072327f, 0.9758322834968567f, 0.152985617518425f, 0.6449772715568542f, 0.895112931728363f, 0.49207794666290283f, +0.8450387120246887f, 0.17143578827381134f, 0.043262675404548645f, 0.7762381434440613f, 0.010832966305315495f, 0.8630898594856262f, 0.3114236295223236f, 0.7611533999443054f, +0.5097024440765381f, 0.512317955493927f, 0.606094241142273f, 0.9848892688751221f, 0.7499810457229614f, 0.9023502469062805f, 0.07344614714384079f, 0.13178813457489014f, +0.9359869956970215f, 0.7738385796546936f, 0.28580722212791443f, 0.283035010099411f, 0.7454330921173096f, 0.13692297041416168f, 0.973791241645813f, 0.6471089124679565f, +0.4636807441711426f, 0.635063648223877f, 0.26916325092315674f, 0.5977080464363098f, 0.40559831261634827f, 0.8106534481048584f, 0.4880765378475189f, 0.14508365094661713f, +0.8245252966880798f, 0.7719858288764954f, 0.11064572632312775f, 0.876197874546051f, 0.059555888175964355f, 0.9716214537620544f, 0.5570669174194336f, 0.6692269444465637f, +0.2639993727207184f, 0.3762960731983185f, 0.9350243806838989f, 0.8484987020492554f, 0.9019511938095093f, 0.800804078578949f, 0.6419447064399719f, 0.9093068242073059f, +0.8737375140190125f, 0.2080996036529541f, 0.3416890501976013f, 0.5694039463996887f, 0.5972733497619629f, 0.3635706603527069f, 0.35292425751686096f, 0.1985456645488739f, +0.3112685978412628f, 0.6610969305038452f, 0.41377556324005127f, 0.6519953012466431f, 0.07815106958150864f, 0.7148643136024475f, 0.5627297759056091f, 0.18598219752311707f, +0.5858990550041199f, 0.8269054293632507f, 0.9919370412826538f, 0.696322500705719f, 0.3118491470813751f, 0.0021353259216994047f, 0.6054897904396057f, 0.9670655131340027f, +0.6990734934806824f, 0.21771380305290222f, 0.22680364549160004f, 0.8259546756744385f, 0.5151885151863098f, 0.14562919735908508f, 0.09088316559791565f, 0.44437897205352783f, +0.32975417375564575f, 0.36533087491989136f, 0.7809739112854004f, 0.44537243247032166f, 0.8698124289512634f, 0.7800475358963013f, 0.7727870941162109f, 0.6565377712249756f, +0.8575450778007507f, 0.2589978873729706f, 0.5089700222015381f, 0.8921910524368286f, 0.7414709329605103f, 0.8526254892349243f, 0.3038969337940216f, 0.903849720954895f, +0.34238752722740173f, 0.31269991397857666f, 0.8940096497535706f, 0.02348097413778305f, 0.6514947414398193f, 0.5689778327941895f, 0.6964431405067444f, 0.7507457733154297f, +0.7125465273857117f, 0.1491505652666092f, 0.3000146746635437f, 0.8912087678909302f, 0.402913361787796f, 0.4538082182407379f, 0.2632506787776947f, 0.8979530930519104f, +0.6558071970939636f, 0.353982537984848f, 0.9720497727394104f, 0.1485484391450882f, 0.5267608761787415f, 0.5093576908111572f, 0.7235599756240845f, 0.41806069016456604f, +0.7697361707687378f, 0.02811494469642639f, 0.47714295983314514f, 0.38379040360450745f, 0.11620178818702698f, 0.5316370725631714f, 0.17780038714408875f, 0.6168404221534729f, +0.0028416814748197794f, 0.8721422553062439f, 0.6424496173858643f, 0.5991102457046509f, 0.7126385569572449f, 0.5814030170440674f, 0.6695123910903931f, 0.4722326099872589f, +0.2501074969768524f, 0.3065382242202759f, 0.21444904804229736f, 0.6343613266944885f, 0.7066254615783691f, 0.6773326396942139f, 0.29134103655815125f, 0.17650069296360016f, +0.8849918842315674f, 0.12537582218647003f, 0.3271317481994629f, 0.26973703503608704f, 0.698867917060852f, 0.47434133291244507f, 0.6242581009864807f, 0.6299951076507568f, +0.7891302108764648f, 0.677315354347229f, 0.48282521963119507f, 0.4638901650905609f, 0.4643646776676178f, 0.1405869722366333f, 0.7121812105178833f, 0.3342694044113159f, +0.4634302258491516f, 0.441054105758667f, 0.24007394909858704f, 0.6836484670639038f, 0.9958284497261047f, 0.33813419938087463f, 0.2737356126308441f, 0.4055398404598236f, +0.9670783281326294f, 0.0761931836605072f, 0.3301424980163574f, 0.7337782382965088f, 0.8947241306304932f, 0.595270574092865f, 0.1768801361322403f, 0.6157928109169006f, +0.49247077107429504f, 0.024797217920422554f, 0.0558152012526989f, 0.46747514605522156f, 0.8433341979980469f, 0.8711885809898376f, 0.9472224712371826f, 0.14876314997673035f, +0.4765990674495697f, 0.09445542097091675f, 0.11239154636859894f, 0.894499659538269f, 0.06131958216428757f, 0.5342497229576111f, 0.07726632058620453f, 0.4227023124694824f, +0.9854303002357483f, 0.39747485518455505f, 0.2426832616329193f, 0.6045747399330139f, 0.1777685433626175f, 0.9997921586036682f, 0.44672316312789917f, 0.41913285851478577f, +0.876876950263977f, 0.5575183629989624f, 0.16769680380821228f, 0.2267216593027115f, 0.838180661201477f, 0.7455008029937744f, 0.4765687882900238f, 0.7732824087142944f, +0.5824287533760071f, 0.6972090005874634f, 0.28677698969841003f, 0.3838687539100647f, 0.41170182824134827f, 0.3420121371746063f, 0.7691941261291504f, 0.008055374957621098f, +0.4529761075973511f, 0.9712681174278259f, 0.2808668911457062f, 0.8727770447731018f, 0.01370217464864254f, 0.40627482533454895f, 0.7614097595214844f, 0.8612634539604187f, +0.84740149974823f, 0.27630653977394104f, 0.12484759837388992f, 0.6005390882492065f, 0.1984296441078186f, 0.42372363805770874f, 0.9078010320663452f, 0.8739092946052551f, +0.26883751153945923f, 0.6464000344276428f, 0.3212457597255707f, 0.5276156663894653f, 0.1020810455083847f, 0.8194741606712341f, 0.17870455980300903f, 0.43703073263168335f, +0.4340631365776062f, 0.7909150719642639f, 0.015279077924787998f, 0.7779556512832642f, 0.7753434181213379f, 0.8989629745483398f, 0.7484355568885803f, 0.1759990006685257f, +0.19008946418762207f, 0.1194164827466011f, 0.34938788414001465f, 0.872988224029541f, 0.5380540490150452f, 0.14792411029338837f, 0.21633626520633698f, 0.8376331329345703f, +0.20597417652606964f, 0.6583303213119507f, 0.8077905774116516f, 0.14204041659832f, 0.19620630145072937f, 0.4054994285106659f, 0.8762431144714355f, 0.20472820103168488f, +0.571017324924469f, 0.43248608708381653f, 0.12304431200027466f, 0.1774805784225464f, 0.9867499470710754f, 0.14538849890232086f, 0.9512861371040344f, 0.1521678864955902f, +0.16180633008480072f, 0.5579320788383484f, 0.6618553996086121f, 0.2771189510822296f, 0.823382556438446f, 0.19385987520217896f, 0.26248568296432495f, 0.09097370505332947f, +0.09530330449342728f, 0.48109668493270874f, 0.21713528037071228f, 0.4884636700153351f, 0.029886500909924507f, 0.22968760132789612f, 0.9771642088890076f, 0.7313836216926575f, +0.3428197205066681f, 0.08979527652263641f, 0.3952036499977112f, 0.01522860024124384f, 0.11024109274148941f, 0.8782704472541809f, 0.8326648473739624f, 0.29398438334465027f, +0.9600158333778381f, 0.5923871397972107f, 0.9128473997116089f, 0.762816309928894f, 0.8570948243141174f, 0.6674134135246277f, 0.9605916738510132f, 0.341316282749176f, +0.8660340905189514f, 0.05820464715361595f, 0.5151492357254028f, 0.25354504585266113f, 0.35862112045288086f, 0.4976247549057007f, 0.9955111145973206f, 0.09623619168996811f, +0.17178036272525787f, 0.5833774209022522f, 0.47640150785446167f, 0.5888926982879639f, 0.18900622427463531f, 0.9949857592582703f, 0.7957537770271301f, 0.5884354710578918f, +0.5848965644836426f, 0.9096075296401978f, 0.15743742883205414f, 0.7576790452003479f, 0.3109329044818878f, 0.6704959869384766f, 0.3711370527744293f, 0.6574203372001648f, +0.7677435874938965f, 0.8892070055007935f, 0.2464229017496109f, 0.3204133212566376f, 0.9025220274925232f, 0.7617312669754028f, 0.15595291554927826f, 0.9145935773849487f, +0.16388839483261108f, 0.507226288318634f, 0.7778400182723999f, 0.11199192702770233f, 0.1622602790594101f, 0.8602219820022583f, 0.03406958654522896f, 0.8269080519676208f, +0.3129514157772064f, 0.22437743842601776f, 0.9112619161605835f, 0.15721814334392548f, 0.6281946301460266f, 0.9685693383216858f, 0.1785425990819931f, 0.4812193214893341f, +0.9857288599014282f, 0.9454476833343506f, 0.7721094489097595f, 0.2550323009490967f, 0.06484745442867279f, 0.45302021503448486f, 0.3316231966018677f, 0.5716488361358643f, +0.36505332589149475f, 0.13488054275512695f, 0.22704648971557617f, 0.16871005296707153f, 0.3198990821838379f, 0.8874760270118713f, 0.16326762735843658f, 0.2006612867116928f, +0.32112985849380493f, 0.49041351675987244f, 0.683646023273468f, 0.6821746230125427f, 0.6999041438102722f, 0.743340015411377f, 0.21337169408798218f, 0.7792158722877502f, +0.9529654383659363f, 0.6351174116134644f, 0.22786076366901398f, 0.9187535047531128f, 0.6707831621170044f, 0.8210642337799072f, 0.5818725824356079f, 0.6535683274269104f, +0.3072464168071747f, 0.7221120595932007f, 0.2506568133831024f, 0.9589303731918335f, 0.052149973809719086f, 0.3296607732772827f, 0.883632481098175f, 0.30164408683776855f, +0.08237363398075104f, 0.7855849266052246f, 0.45882242918014526f, 0.039213620126247406f, 0.48246559500694275f, 0.6163098216056824f, 0.34344571828842163f, 0.11802785843610764f, +0.9559881091117859f, 0.1257394701242447f, 0.03775947540998459f, 0.07726376503705978f, 0.8486904501914978f, 0.008229833096265793f, 0.8634248375892639f, 0.6487492322921753f, +0.6649401187896729f, 0.9341372847557068f, 0.7451905608177185f, 0.5231621265411377f, 0.20947358012199402f, 0.7719269394874573f, 0.210763618350029f, 0.914899468421936f, +0.2317173182964325f, 0.8707761764526367f, 0.5133278965950012f, 0.5927375555038452f, 0.36203625798225403f, 0.2678263187408447f, 0.7186779975891113f, 0.8894500136375427f, +0.7448763251304626f, 0.5630152225494385f, 0.4682900309562683f, 0.910763680934906f, 0.7955174446105957f, 0.44630667567253113f, 0.4186893403530121f, 0.2270500510931015f, +0.40391257405281067f, 0.39324644207954407f, 0.30836716294288635f, 0.05712191015481949f, 0.26243138313293457f, 0.2429870367050171f, 0.24060243368148804f, 0.8398052453994751f, +0.4348810017108917f, 0.6015021800994873f, 0.16941341757774353f, 0.6366556286811829f, 0.47563281655311584f, 0.9076570272445679f, 0.7771797180175781f, 0.5478881001472473f, +0.6257125735282898f, 0.7029789090156555f, 0.46996694803237915f, 0.24726934731006622f, 0.8421853184700012f, 0.9010248184204102f, 0.6572127342224121f, 0.09037493914365768f, +0.6716561317443848f, 0.1550692468881607f, 0.343142569065094f, 0.1597922295331955f, 0.1510336548089981f, 0.7532699704170227f, 0.8070440888404846f, 0.23521241545677185f, +0.7624782919883728f, 0.4135829508304596f, 0.8608501553535461f, 0.15805791318416595f, 0.6586843729019165f, 0.9386387467384338f, 0.6275258660316467f, 0.40457963943481445f, +0.3225772976875305f, 0.3894023597240448f, 0.016372067853808403f, 0.9533519148826599f, 0.3415775001049042f, 0.8862135410308838f, 0.1352238953113556f, 0.13737523555755615f, +0.38364410400390625f, 0.02351313829421997f, 0.13009397685527802f, 0.3022285997867584f, 0.9825703501701355f, 0.18333826959133148f, 0.7999200820922852f, 0.4440001845359802f, +0.24120354652404785f, 0.6462265253067017f, 0.9412413835525513f, 0.23956790566444397f, 0.3190760612487793f, 0.4407746493816376f, 0.16193366050720215f, 0.20314376056194305f, +0.4848494827747345f, 0.05472628027200699f, 0.9342249631881714f, 0.016663776710629463f, 0.23166431486606598f, 0.45340248942375183f, 0.8177987933158875f, 0.5868021249771118f, +0.2458696812391281f, 0.7564008235931396f, 0.5033793449401855f, 0.7863461971282959f, 0.816318154335022f, 0.7927945852279663f, 0.38137415051460266f, 0.34212079644203186f, +0.7187096476554871f, 0.7939257621765137f, 0.4040096700191498f, 0.2707328200340271f, 0.2975538969039917f, 0.5212052464485168f, 0.08541768044233322f, 0.8645995259284973f, +0.9411545991897583f, 0.9250122308731079f, 0.8687351942062378f, 0.9144859910011292f, 0.8525909185409546f, 0.2280828058719635f, 0.9958666563034058f, 0.19541046023368835f, +0.2465771585702896f, 0.997704803943634f, 0.18452084064483643f, 0.675279974937439f, 0.027943124994635582f, 0.8435496091842651f, 0.5456218123435974f, 0.30856743454933167f, +0.842222273349762f, 0.4160909354686737f, 0.17078551650047302f, 0.7538081407546997f, 0.8092955946922302f, 0.7522768974304199f, 0.45318928360939026f, 0.4737348258495331f, +0.0796622708439827f, 0.08214228600263596f, 0.6277581453323364f, 0.9581322073936462f, 0.030843188986182213f, 0.08755392581224442f, 0.9305947422981262f, 0.663183867931366f, +0.04472385719418526f, 0.10494132339954376f, 0.35385358333587646f, 0.185502827167511f, 0.2924422323703766f, 0.5872787833213806f, 0.270582377910614f, 0.5253468751907349f, +0.9776925444602966f, 0.8124510049819946f, 0.36754733324050903f, 0.3945724070072174f, 0.5904313325881958f, 0.07513022422790527f, 0.10351139307022095f, 0.25640586018562317f, +0.48395588994026184f, 0.6094140410423279f, 0.933689534664154f, 0.1481490433216095f, 0.7268136143684387f, 0.17722941935062408f, 0.3127038776874542f, 0.7544736266136169f, +0.04688645154237747f, 0.9836608171463013f, 0.9222339391708374f, 0.01654743030667305f, 0.29974037408828735f, 0.6609544157981873f, 0.1167256236076355f, 0.47648653388023376f, +0.3401852548122406f, 0.8443659543991089f, 0.11344482004642487f, 0.24881814420223236f, 0.9855681657791138f, 0.1865653395652771f, 0.12461047619581223f, 0.9105961918830872f, +0.26765450835227966f, 0.09866883605718613f, 0.963412344455719f, 0.20205701887607574f, 0.6164401173591614f, 0.46736571192741394f, 0.7866107821464539f, 0.9104943871498108f, +0.18533925712108612f, 0.6919140815734863f, 0.4811919927597046f, 0.4493477940559387f, 0.8978879451751709f, 0.9988517165184021f, 0.13042639195919037f, 0.8625016212463379f, +0.7359868288040161f, 0.11559244245290756f, 0.5169746279716492f, 0.6249846816062927f, 0.7543278336524963f, 0.028034664690494537f, 0.5184826850891113f, 0.6787132024765015f, +0.6925483345985413f, 0.8371835947036743f, 0.16620108485221863f, 0.997288167476654f, 0.3994983434677124f, 0.3461013436317444f, 0.3573247790336609f, 0.02355431392788887f, +0.23913639783859253f, 0.6146891117095947f, 0.6808330416679382f, 0.949176013469696f, 0.727698802947998f, 0.37852752208709717f, 0.7908371090888977f, 0.03897903114557266f, +0.6405796408653259f, 0.640907883644104f, 0.6664533019065857f, 0.14766521751880646f, 0.9031990766525269f, 0.5302349925041199f, 0.29579296708106995f, 0.11098453402519226f, +0.24198050796985626f, 0.2893810272216797f, 0.979772686958313f, 0.5150758028030396f, 0.8458326458930969f, 0.5770998001098633f, 0.6945254802703857f, 0.6344648599624634f, +0.4345102310180664f, 0.9673374891281128f, 0.1641848385334015f, 0.9216915965080261f, 0.9949144124984741f, 0.22361280024051666f, 0.023883521556854248f, 0.11782679706811905f, +0.47946301102638245f, 0.06124085187911987f, 0.9681490659713745f, 0.6641875505447388f, 0.1159682497382164f, 0.7753599882125854f, 0.5651656985282898f, 0.3626432716846466f, +0.5857465863227844f, 0.12972286343574524f, 0.7025216221809387f, 0.1702786684036255f, 0.04083564132452011f, 0.9058369994163513f, 0.6795292496681213f, 0.9197670221328735f, +0.9081413745880127f, 0.47133833169937134f, 0.21058285236358643f, 0.1390405148267746f, 0.8160561323165894f, 0.15884824097156525f, 0.5167125463485718f, 0.22846274077892303f, +0.27097979187965393f, 0.09091709554195404f, 0.6901914477348328f, 0.3936575651168823f, 0.5100973844528198f, 0.13926832377910614f, 0.9496234059333801f, 0.7130466103553772f, +0.37862974405288696f, 0.418671190738678f, 0.7950969934463501f, 0.3821651339530945f, 0.8140628933906555f, 0.26626837253570557f, 0.9972334504127502f, 0.43487226963043213f, +0.21859507262706757f, 0.06526626646518707f, 0.6311957836151123f, 0.044055212289094925f, 0.10057571530342102f, 0.2549797296524048f, 0.5193795561790466f, 0.6690198183059692f, +0.005833504721522331f, 0.8992670178413391f, 0.2175576090812683f, 0.3997724950313568f, 0.09597194939851761f, 0.6655437350273132f, 0.6835293173789978f, 0.2760695219039917f, +0.40006643533706665f, 0.7450650930404663f, 0.5902217030525208f, 0.3855305016040802f, 0.7905116081237793f, 0.04378052055835724f, 0.6355416774749756f, 0.0523134246468544f, +0.8998422026634216f, 0.09488414227962494f, 0.17660170793533325f, 0.22050218284130096f, 0.01889217458665371f, 0.34074848890304565f, 0.5057805180549622f, 0.30304816365242004f, +0.5218847393989563f, 0.3606114685535431f, 0.3865993916988373f, 0.2408483922481537f, 0.6629759073257446f, 0.9621040225028992f, 0.2550106346607208f, 0.10436037927865982f, +0.5941291451454163f, 0.5152314901351929f, 0.1179882287979126f, 0.20401060581207275f, 0.9827929139137268f, 0.08192011713981628f, 0.8961889743804932f, 0.07820627838373184f, +0.38752302527427673f, 0.4152550995349884f, 0.6169353723526001f, 0.9013767838478088f, 0.46947717666625977f, 0.05866463854908943f, 0.7217665314674377f, 0.4173435568809509f, +0.3330438435077667f, 0.49656084179878235f, 0.4791775047779083f, 0.2923811674118042f, 0.14966678619384766f, 0.7330684661865234f, 0.8647547364234924f, 0.38121670484542847f, +0.4714329242706299f, 0.6569143533706665f, 0.960026741027832f, 0.5890307426452637f, 0.2520894706249237f, 0.8019898533821106f, 0.18765297532081604f, 0.8098591566085815f, +0.4464205801486969f, 0.009105432778596878f, 0.8723030686378479f, 0.8260712623596191f, 0.12282045185565948f, 0.8733399510383606f, 0.8028754591941833f, 0.4031834900379181f, +0.4865309000015259f, 0.5977393984794617f, 0.5346341729164124f, 0.054676733911037445f, 0.17828688025474548f, 0.5286720395088196f, 0.16156400740146637f, 0.7243064641952515f, +0.13362620770931244f, 0.8255720734596252f, 0.5824184417724609f, 0.24548988044261932f, 0.6105424761772156f, 0.6257903575897217f, 0.4841214120388031f, 0.3688715696334839f, +0.11087122559547424f, 0.00037574503221549094f, 0.7813282012939453f, 0.6603894829750061f, 0.06932122260332108f, 0.5405842661857605f, 0.5221712589263916f, 0.34136053919792175f, +0.5217997431755066f, 0.44894859194755554f, 0.0630204975605011f, 0.8676700592041016f, 0.43050646781921387f, 0.3050735294818878f, 0.5738087296485901f, 0.0987951010465622f, +0.6826534271240234f, 0.5799707174301147f, 0.7261894345283508f, 0.7598523497581482f, 0.013592001050710678f, 0.25802022218704224f, 0.013794902712106705f, 0.5361649990081787f, +0.3838050961494446f, 0.8720365166664124f, 0.5562665462493896f, 0.05823845788836479f, 0.8523164391517639f, 0.7834991812705994f, 0.9626134634017944f, 0.0792112722992897f, +0.617660641670227f, 0.2258809506893158f, 0.756855845451355f, 0.030639097094535828f, 0.3946434259414673f, 0.15005706250667572f, 0.7944032549858093f, 0.8044276833534241f, +0.9834257364273071f, 0.7126683592796326f, 0.7358422875404358f, 0.5052173733711243f, 0.5338025689125061f, 0.19165177643299103f, 0.6682611107826233f, 0.8838972449302673f, +0.3028661906719208f, 0.9965956807136536f, 0.6190192699432373f, 0.8508062958717346f, 0.5701853036880493f, 0.812674343585968f, 0.14463409781455994f, 0.9340330362319946f, +0.9239820241928101f, 0.7860618829727173f, 0.6616600155830383f, 0.5459474325180054f, 0.344907283782959f, 0.34733524918556213f, 0.9553871154785156f, 0.7035515904426575f, +0.27192750573158264f, 0.856812059879303f, 0.8108180165290833f, 0.1466367095708847f, 0.8252931833267212f, 0.6633336544036865f, 0.17177695035934448f, 0.5977120995521545f, +0.33584585785865784f, 0.8429064154624939f, 0.4780152440071106f, 0.9910538196563721f, 0.710830569267273f, 0.5969858169555664f, 0.674477219581604f, 0.4091997742652893f, +0.65428227186203f, 0.35473257303237915f, 0.8038563132286072f, 0.7764438986778259f, 0.0767531767487526f, 0.9506561160087585f, 0.9772939682006836f, 0.7161555886268616f, +0.06003856286406517f, 0.2654556930065155f, 0.020031463354825974f, 0.2227911651134491f, 0.784339427947998f, 0.5683453679084778f, 0.6098812818527222f, 0.6443908214569092f, +0.8392379283905029f, 0.922890305519104f, 0.9158754348754883f, 0.8753456473350525f, 0.7693092823028564f, 0.4631848633289337f, 0.9283735156059265f, 0.40096333622932434f, +0.19214287400245667f, 0.9452899098396301f, 0.3711049556732178f, 0.14137934148311615f, 0.2941572368144989f, 0.12803053855895996f, 0.40424755215644836f, 0.08766347169876099f, +0.25417008996009827f, 0.6841766834259033f, 0.5603693127632141f, 0.9606766104698181f, 0.7850642800331116f, 0.8083050847053528f, 0.42458415031433105f, 0.17675656080245972f, +0.6136630773544312f, 0.5104683041572571f, 0.1719248741865158f, 0.01427887100726366f, 0.4359234869480133f, 0.3012741506099701f, 0.3895488977432251f, 0.19326341152191162f, +0.9277644753456116f, 0.5013232827186584f, 0.6806567311286926f, 0.8932347297668457f, 0.41999027132987976f, 0.4262784421443939f, 0.025096865370869637f, 0.20769798755645752f, +0.942634642124176f, 0.03714030608534813f, 0.9835420250892639f, 0.18314823508262634f, 0.9199904203414917f, 0.3962537348270416f, 0.4056301712989807f, 0.21377012133598328f, +0.35082218050956726f, 0.0877215564250946f, 0.8777085542678833f, 0.7574694752693176f, 0.7223902940750122f, 0.09337987750768661f, 0.5921595692634583f, 0.8584424257278442f, +0.6573155522346497f, 0.7712372541427612f, 0.23729664087295532f, 0.6602380871772766f, 0.3875819742679596f, 0.5338596701622009f, 0.17777277529239655f, 0.4483356773853302f, +0.7155423760414124f, 0.3851141929626465f, 0.3203034996986389f, 0.5479453802108765f, 0.23491868376731873f, 0.9561964869499207f, 0.23937170207500458f, 0.7763174176216125f, +0.9693330526351929f, 0.7079871296882629f, 0.08109777420759201f, 0.8317723274230957f, 0.2597599923610687f, 0.408739298582077f, 0.47825944423675537f, 0.42540088295936584f, +0.9240532517433167f, 0.37624022364616394f, 0.5513948798179626f, 0.687410831451416f, 0.5447274446487427f, 0.03491579741239548f, 0.17608052492141724f, 0.31898167729377747f, +0.044822435826063156f, 0.9035279154777527f, 0.5416943430900574f, 0.6049482226371765f, 0.017600037157535553f, 0.7033964395523071f, 0.8462026119232178f, 0.25864067673683167f, +0.16904331743717194f, 0.7370445132255554f, 0.022372087463736534f, 0.7204954624176025f, 0.47800755500793457f, 0.6822973489761353f, 0.9231510758399963f, 0.36081287264823914f, +0.8334733247756958f, 0.014998343773186207f, 0.006281435955315828f, 0.8255448341369629f, 0.21300780773162842f, 0.7811838388442993f, 0.5024568438529968f, 0.04865196347236633f, +0.4529929757118225f, 0.9744080305099487f, 0.2216951549053192f, 0.5258119106292725f, 0.7237051725387573f, 0.9519912600517273f, 0.011291529051959515f, 0.9731654524803162f, +0.6105307340621948f, 0.9235201478004456f, 0.9891803860664368f, 0.9877558946609497f, 0.9651535153388977f, 0.5655521750450134f, 0.3757078945636749f, 0.15173457562923431f, +0.15562595427036285f, 0.4349546730518341f, 0.4004567861557007f, 0.5816259980201721f, 0.13866162300109863f, 0.26819977164268494f, 0.38505813479423523f, 0.9631554484367371f, +0.3200841248035431f, 0.6789893507957458f, 0.6542686223983765f, 0.10502953827381134f, 0.4193173944950104f, 0.9581048488616943f, 0.23154401779174805f, 0.014680741354823112f, +0.06000849977135658f, 0.4189620912075043f, 0.6103081703186035f, 0.8494487404823303f, 0.9456722736358643f, 0.9676061272621155f, 0.6382483839988708f, 0.4047470688819885f, +0.6191638112068176f, 0.06407394260168076f, 0.8626271486282349f, 0.7766171097755432f, 0.5924504399299622f, 0.778675377368927f, 0.3004037141799927f, 0.37997299432754517f, +0.7693842649459839f, 0.2291460633277893f, 0.2495335340499878f, 0.34269410371780396f, 0.30020084977149963f, 0.27313584089279175f, 0.02255861461162567f, 0.07156629115343094f, +0.035703353583812714f, 0.6122387647628784f, 0.08044379949569702f, 0.013605928048491478f, 0.8514787554740906f, 0.9683285355567932f, 0.2818059027194977f, 0.47714030742645264f, +0.7241522669792175f, 0.8466861844062805f, 0.35340258479118347f, 0.6508187055587769f, 0.6597620248794556f, 0.8685571551322937f, 0.6780083775520325f, 0.2655569612979889f, +0.40939319133758545f, 0.34739017486572266f, 0.4481114447116852f, 0.7700107097625732f, 0.6790555715560913f, 0.1226966455578804f, 0.4752260744571686f, 0.22464898228645325f, +0.5328739285469055f, 0.30997487902641296f, 0.1978561133146286f, 0.7651469707489014f, 0.5458963513374329f, 0.4574863910675049f, 0.8942184448242188f, 0.7158977389335632f, +0.08890672028064728f, 0.6566501259803772f, 0.016226937994360924f, 0.08052363991737366f, 0.399943083524704f, 0.5985741019248962f, 0.7989616990089417f, 0.33162760734558105f, +0.8568928241729736f, 0.8470648527145386f, 0.9615238308906555f, 0.06687279790639877f, 0.5205214023590088f, 0.5414374470710754f, 0.6289202570915222f, 0.3887979984283447f, +0.9167708158493042f, 0.992545485496521f, 0.4961756765842438f, 0.36807534098625183f, 0.8483051061630249f, 0.9788938164710999f, 0.3276105523109436f, 0.25197505950927734f, +0.4365144968032837f, 0.5730103254318237f, 0.8608278036117554f, 0.5315098762512207f, 0.44345754384994507f, 0.3624642491340637f, 0.7963812351226807f, 0.3537352979183197f, +0.9049098491668701f, 0.34576892852783203f, 0.5239514112472534f, 0.03006592020392418f, 0.002020456362515688f, 0.2677692174911499f, 0.4011034369468689f, 0.49212831258773804f, +0.27223846316337585f, 0.4264707565307617f, 0.41163167357444763f, 0.12087008357048035f, 0.5017157793045044f, 0.31489571928977966f, 0.5094754099845886f, 0.7655280828475952f, +0.6427309513092041f, 0.4422833025455475f, 0.23380379378795624f, 0.26780787110328674f, 0.2535342872142792f, 0.5196977853775024f, 0.12555567920207977f, 0.7023228406906128f, +0.6513808369636536f, 0.05560288950800896f, 0.452675998210907f, 0.28775501251220703f, 0.45194387435913086f, 0.20646129548549652f, 0.3738493323326111f, 0.12898656725883484f, +0.8748905658721924f, 0.20740476250648499f, 0.4870305359363556f, 0.00967243779450655f, 0.03459087386727333f, 0.3471221327781677f, 0.1306210607290268f, 0.7193246483802795f, +0.28305086493492126f, 0.3618927299976349f, 0.702593982219696f, 0.2947550117969513f, 0.016334088519215584f, 0.6952775716781616f, 0.838331937789917f, 0.5129631757736206f, +0.7427069544792175f, 0.9013065099716187f, 0.9946025609970093f, 0.9542257785797119f, 0.6473783850669861f, 0.68980473279953f, 0.5014914274215698f, 0.5715034604072571f, +0.9091396331787109f, 0.8439159393310547f, 0.9869949221611023f, 0.9220036268234253f, 0.21150164306163788f, 0.7041181921958923f, 0.12045299261808395f, 0.404587984085083f, +0.45977136492729187f, 0.528810977935791f, 0.7158005237579346f, 0.0212521031498909f, 0.7465468645095825f, 0.605613112449646f, 0.5757834315299988f, 0.6318722367286682f, +0.5170577168464661f, 0.19614478945732117f, 0.6970398426055908f, 0.6670947670936584f, 0.5492041707038879f, 0.4227645695209503f, 0.7919453382492065f, 0.4034317433834076f, +0.5273734331130981f, 0.26267892122268677f, 0.5494799017906189f, 0.5747438669204712f, 0.16065938770771027f, 0.6429186463356018f, 0.8165642619132996f, 0.8533572554588318f, +0.4256489872932434f, 0.9116482138633728f, 0.3176973760128021f, 0.3814033269882202f, 0.689426839351654f, 0.11291399598121643f, 0.09587781876325607f, 0.426434725522995f, +0.3525044620037079f, 0.235499307513237f, 0.021543582901358604f, 0.6125870943069458f, 0.19337378442287445f, 0.8834088444709778f, 0.364098459482193f, 0.6109872460365295f, +0.398185133934021f, 0.5236717462539673f, 0.1665436178445816f, 0.03788694739341736f, 0.5838470458984375f, 0.38190189003944397f, 0.4636659622192383f, 0.6195858716964722f, +0.030586745589971542f, 0.20294004678726196f, 0.8428605198860168f, 0.8760571479797363f, 0.9035816192626953f, 0.2573540508747101f, 0.9256206154823303f, 0.9216637015342712f, +0.05309552699327469f, 0.7107692956924438f, 0.45237475633621216f, 0.05815040320158005f, 0.046798452734947205f, 0.26077818870544434f, 0.3188604414463043f, 0.4394797682762146f, +0.15507178008556366f, 0.01675654575228691f, 0.8172454833984375f, 0.7158721685409546f, 0.5041349530220032f, 0.9606093764305115f, 0.24666625261306763f, 0.047721076756715775f, +0.34579890966415405f, 0.8017789125442505f, 0.3666471540927887f, 0.04347522556781769f, 0.406527578830719f, 0.6754574179649353f, 0.30911266803741455f, 0.8530905246734619f, +0.9870363473892212f, 0.6467958688735962f, 0.7547317147254944f, 0.20951129496097565f, 0.3652810752391815f, 0.8303020000457764f, 0.6789172887802124f, 0.5370679497718811f, +0.0228510070592165f, 0.9963330030441284f, 0.6033815741539001f, 0.9962599873542786f, 0.30330201983451843f, 0.6603178381919861f, 0.20008623600006104f, 0.6380163431167603f, +0.4862326681613922f, 0.11130072176456451f, 0.4321548044681549f, 0.018995439633727074f, 0.6273927688598633f, 0.7769182324409485f, 0.9553254246711731f, 0.9734311103820801f, +0.2834567427635193f, 0.681551456451416f, 0.9388037323951721f, 0.6831141710281372f, 0.7749729752540588f, 0.7507419586181641f, 0.7429967522621155f, 0.14560551941394806f, +0.9048205018043518f, 0.1589333415031433f, 0.08555281907320023f, 0.9324326515197754f, 0.4219590127468109f, 0.8103891611099243f, 0.9930342435836792f, 0.640789270401001f, +0.7118847966194153f, 0.9257346987724304f, 0.9670305848121643f, 0.09029455482959747f, 0.24778175354003906f, 0.45691969990730286f, 0.9832443594932556f, 0.14696259796619415f, +0.8533732295036316f, 0.5891649127006531f, 0.7899357676506042f, 0.6130102872848511f, 0.9939360618591309f, 0.7424476146697998f, 0.4763124883174896f, 0.9004846215248108f, +0.960956335067749f, 0.16504913568496704f, 0.3421562910079956f, 0.6188567876815796f, 0.6711655855178833f, 0.5067749619483948f, 0.17937591671943665f, 0.06545291095972061f, +0.13533861935138702f, 0.5038856863975525f, 0.6817749738693237f, 0.002296984428539872f, 0.4728809893131256f, 0.5888122320175171f, 0.9913061261177063f, 0.8935142755508423f, +0.2276076227426529f, 0.4584313631057739f, 0.4508020877838135f, 0.6257754564285278f, 0.2619384527206421f, 0.6680242419242859f, 0.7401310801506042f, 0.5889957547187805f, +0.9342812895774841f, 0.7075281739234924f, 0.5029522180557251f, 0.08012396097183228f, 0.5697131752967834f, 0.027381310239434242f, 0.39375874400138855f, 0.922075629234314f, +0.4357559382915497f, 0.3111100196838379f, 0.9035667777061462f, 0.3056427538394928f, 0.3167491853237152f, 0.29925480484962463f, 0.7985809445381165f, 0.32990455627441406f, +0.18766969442367554f, 0.2612457275390625f, 0.37321537733078003f, 0.6192373037338257f, 0.6987658143043518f, 0.7345194816589355f, 0.41496583819389343f, 0.45652273297309875f, +0.2197815328836441f, 0.764522135257721f, 0.7870184183120728f, 0.6088377833366394f, 0.3446628451347351f, 0.5823990106582642f, 0.9092398881912231f, 0.7849797010421753f, +0.21147742867469788f, 0.3807166516780853f, 0.36622464656829834f, 0.9512821435928345f, 0.7049868106842041f, 0.15313385426998138f, 0.17101895809173584f, 0.523274302482605f, +0.1750478297472f, 0.9202596545219421f, 0.3780533969402313f, 0.5916029214859009f, 0.6898735165596008f, 0.5669100880622864f, 0.14170262217521667f, 0.495777428150177f, +0.0023855604231357574f, 0.5469815731048584f, 0.07521592825651169f, 0.5028269290924072f, 0.4502023458480835f, 0.9996427297592163f, 0.8052548766136169f, 0.6532044410705566f, +0.3278338611125946f, 0.23488561809062958f, 0.43977439403533936f, 0.9340307712554932f, 0.2527478039264679f, 0.23581324517726898f, 0.3152056634426117f, 0.03218458220362663f, +0.7663291096687317f, 0.2989293932914734f, 0.16552108526229858f, 0.4872937798500061f, 0.12070826441049576f, 0.18155977129936218f, 0.8611400127410889f, 0.9580256938934326f, +0.7313923239707947f, 0.15857042372226715f, 0.934082567691803f, 0.5113591551780701f, 0.46454736590385437f, 0.20818912982940674f, 0.6071004271507263f, 0.23125401139259338f, +0.6641892194747925f, 0.2669774293899536f, 0.7357626557350159f, 0.9462431073188782f, 0.9123800992965698f, 0.36338457465171814f, 0.14181509613990784f, 0.26046136021614075f, +0.815746009349823f, 0.2205248475074768f, 0.5667375922203064f, 0.08932609856128693f, 0.9259594082832336f, 0.36681076884269714f, 0.8980943560600281f, 0.32572266459465027f, +0.6590762734413147f, 0.6093413829803467f, 0.12960657477378845f, 0.5930185914039612f, 0.8333390951156616f, 0.9731943607330322f, 0.837321937084198f, 0.9922711849212646f, +0.6681870818138123f, 0.27374911308288574f, 0.7355114221572876f, 0.3028092086315155f, 0.4792872369289398f, 0.7698060274124146f, 0.17887069284915924f, 0.3868282437324524f, +0.8370124101638794f, 0.24586540460586548f, 0.5996515154838562f, 0.9534965753555298f, 0.8624243140220642f, 0.8051519393920898f, 0.3576148748397827f, 0.19329005479812622f, +0.7326384782791138f, 0.4787130653858185f, 0.41462060809135437f, 0.2415287047624588f, 0.3376425504684448f, 0.25820279121398926f, 0.5139526128768921f, 0.36159318685531616f, +0.5794234871864319f, 0.7606413960456848f, 0.5239865183830261f, 0.6290261745452881f, 0.055398471653461456f, 0.3791690468788147f, 0.5366314053535461f, 0.9951208233833313f, +0.3502260148525238f, 0.8858413100242615f, 0.7163110375404358f, 0.19947446882724762f, 0.4579830467700958f, 0.014174330979585648f, 0.2446925789117813f, 0.3414309620857239f, +0.4072417616844177f, 0.0791848823428154f, 0.25344201922416687f, 0.3053256869316101f, 0.1600322276353836f, 0.41598251461982727f, 0.3335754871368408f, 0.6460068821907043f, +0.34193724393844604f, 0.7434719204902649f, 0.005988352466374636f, 0.7712967991828918f, 0.27055811882019043f, 0.0078439274802804f, 0.12007400393486023f, 0.8447235226631165f, +0.0791362076997757f, 0.14313682913780212f, 0.508359432220459f, 0.7851096987724304f, 0.3996513783931732f, 0.7308434844017029f, 0.6455370783805847f, 0.8107802867889404f, +0.26079392433166504f, 0.6314176917076111f, 0.12042216956615448f, 0.17530962824821472f, 0.050116702914237976f, 0.06582267582416534f, 0.08655764907598495f, 0.8652197122573853f, +0.4000997841358185f, 0.8782271146774292f, 0.5909013748168945f, 0.7025498747825623f, 0.724763035774231f, 0.003351846244186163f, 0.5415880680084229f, 0.2944686710834503f, +0.7722193598747253f, 0.31718909740448f, 0.20943714678287506f, 0.804436445236206f, 0.4096069037914276f, 0.27587902545928955f, 0.0027455950621515512f, 0.9408443570137024f, +0.8699133992195129f, 0.7470458745956421f, 0.9905157089233398f, 0.05449604615569115f, 0.5949684977531433f, 0.22178883850574493f, 0.6504505276679993f, 0.7186533212661743f, +0.41675740480422974f, 0.998819887638092f, 0.505225419998169f, 0.871701180934906f, 0.6633145213127136f, 0.5961070656776428f, 0.31913313269615173f, 0.4234476089477539f, +0.8272688388824463f, 0.9861772060394287f, 0.6764849424362183f, 0.3306165337562561f, 0.8316692113876343f, 0.4988337457180023f, 0.9359182119369507f, 0.5473150014877319f, +0.661737322807312f, 0.5369064807891846f, 0.13664673268795013f, 0.7288101315498352f, 0.03427201136946678f, 0.6041696667671204f, 0.746576189994812f, 0.6365392804145813f, +0.2769131362438202f, 0.3371001183986664f, 0.9100361466407776f, 0.6994214057922363f, 0.11873947083950043f, 0.657072126865387f, 0.33539140224456787f, 0.805550754070282f, +0.21787719428539276f, 0.5863829255104065f, 0.7570540904998779f, 0.04281175881624222f, 0.7694802284240723f, 0.08797822892665863f, 0.1430666148662567f, 0.7328653335571289f, +0.9110062122344971f, 0.529931902885437f, 0.48581960797309875f, 0.5931344628334045f, 0.15786875784397125f, 0.7772520184516907f, 0.9926816821098328f, 0.148953378200531f, +0.3176131248474121f, 0.863444447517395f, 0.9017736315727234f, 0.14254413545131683f, 0.8229118585586548f, 0.778200089931488f, 0.7322726845741272f, 0.6296079754829407f, +0.8886850476264954f, 0.015668027102947235f, 0.046255532652139664f, 0.16859307885169983f, 0.5999705791473389f, 0.48666125535964966f, 0.26862987875938416f, 0.5795055031776428f, +0.9060096740722656f, 0.4433535039424896f, 0.7685344219207764f, 0.6772983074188232f, 0.5784711837768555f, 0.42927759885787964f, 0.726402997970581f, 0.44768112897872925f, +0.47020789980888367f, 0.1048450767993927f, 0.5641710162162781f, 0.9279101490974426f, 0.6224499940872192f, 0.17901726067066193f, 0.018220409750938416f, 0.3972336947917938f, +0.45310530066490173f, 0.7804028391838074f, 0.15252484381198883f, 0.27927523851394653f, 0.7458125352859497f, 0.03326472267508507f, 0.8378304839134216f, 0.6648920178413391f, +0.8947811722755432f, 0.18875332176685333f, 0.3730006814002991f, 0.72630375623703f, 0.7042096257209778f, 0.10834169387817383f, 0.8895192742347717f, 0.3356451094150543f, +0.9128196835517883f, 0.09996464848518372f, 0.2779408097267151f, 0.27732938528060913f, 0.8434429168701172f, 0.9563950300216675f, 0.009613835252821445f, 0.15259042382240295f, +0.6461194753646851f, 0.09269309043884277f, 0.24371156096458435f, 0.3870115578174591f, 0.049682844430208206f, 0.29778337478637695f, 0.7648861408233643f, 0.1618955433368683f, +0.3151703476905823f, 0.9398744702339172f, 0.5037279725074768f, 0.8385923504829407f, 0.8435193300247192f, 0.007962752133607864f, 0.6520388722419739f, 0.8890889883041382f, +0.6791888475418091f, 0.6186034083366394f, 0.4151743948459625f, 0.2380618005990982f, 0.3992981016635895f, 0.15941746532917023f, 0.43269261717796326f, 0.5282964110374451f, +0.03304531052708626f, 0.585328221321106f, 0.16107337176799774f, 0.46240919828414917f, 0.6719024777412415f, 0.4978694021701813f, 0.8324963450431824f, 0.22603780031204224f, +0.06485191732645035f, 0.7653141617774963f, 0.9242449402809143f, 0.8261539340019226f, 0.782170832157135f, 0.7524861097335815f, 0.4632451832294464f, 0.25765460729599f, +0.3398013710975647f, 0.936778724193573f, 0.5281080603599548f, 0.13471786677837372f, 0.9277204871177673f, 0.4041079878807068f, 0.326332688331604f, 0.7864869832992554f, +0.7447057962417603f, 0.16849839687347412f, 0.7852485775947571f, 0.7923140525817871f, 0.653203010559082f, 0.5927959084510803f, 0.42237576842308044f, 0.19988399744033813f, +0.9731553792953491f, 0.154871866106987f, 0.45774197578430176f, 0.41085532307624817f, 0.3076859414577484f, 0.855945885181427f, 0.9388959407806396f, 0.44691330194473267f, +0.26723453402519226f, 0.23093129694461823f, 0.7664783596992493f, 0.5327093601226807f, 0.493800550699234f, 0.8143611550331116f, 0.25589945912361145f, 0.3070675730705261f, +0.46147191524505615f, 0.16711744666099548f, 0.0598558746278286f, 0.5612905621528625f, 0.7561416625976562f, 0.7504088282585144f, 0.9409792423248291f, 0.34089648723602295f, +0.1390804648399353f, 0.38892504572868347f, 0.3922911286354065f, 0.43621107935905457f, 0.3452676832675934f, 0.5053984522819519f, 0.8788795471191406f, 0.9767193794250488f, +0.9006637930870056f, 0.8815063834190369f, 0.964030921459198f, 0.08540834486484528f, 0.47893449664115906f, 0.8165516257286072f, 0.23885098099708557f, 0.3222641944885254f, +0.06964407116174698f, 0.4492987394332886f, 0.4616808295249939f, 0.5428813695907593f, 0.5362764596939087f, 0.6180576086044312f, 0.697014570236206f, 0.851092517375946f, +0.030262917280197144f, 0.16341331601142883f, 0.9578641057014465f, 0.3350561559200287f, 0.349532812833786f, 0.44915664196014404f, 0.6489526629447937f, 0.8504227995872498f, +0.7657878398895264f, 0.7089443206787109f, 0.4345797002315521f, 0.2551591396331787f, 0.5331854224205017f, 0.8160229921340942f, 0.5410831570625305f, 0.40642303228378296f, +0.11129805445671082f, 0.24758192896842957f, 0.36303070187568665f, 0.5709317326545715f, 0.5020251870155334f, 0.3135274648666382f, 0.6154084205627441f, 0.1601545512676239f, +0.7251759171485901f, 0.6226760745048523f, 0.24580417573451996f, 0.8089255690574646f, 0.5379562377929688f, 0.35002586245536804f, 0.3676684498786926f, 0.6105183959007263f, +0.064308300614357f, 0.8580672740936279f, 0.35963982343673706f, 0.22169940173625946f, 0.39272820949554443f, 0.047151077538728714f, 0.27121540904045105f, 0.5184298157691956f, +0.8127463459968567f, 0.46301406621932983f, 0.019107619300484657f, 0.06719069927930832f, 0.7585834264755249f, 0.3138373792171478f, 0.8271400928497314f, 0.8970226645469666f, +0.6135584115982056f, 0.6009877920150757f, 0.47749602794647217f, 0.2839789092540741f, 0.37027764320373535f, 0.30380386114120483f, 0.24230064451694489f, 0.7938929796218872f, +0.7926009893417358f, 0.7400261759757996f, 0.7886980175971985f, 0.30751633644104004f, 0.13077764213085175f, 0.6247094869613647f, 0.8133363723754883f, 0.2946244180202484f, +0.9651926755905151f, 0.9980027675628662f, 0.5608288645744324f, 0.07155779749155045f, 0.27253827452659607f, 0.4239330291748047f, 0.8194717764854431f, 0.5625944137573242f, +0.40785717964172363f, 0.9491235613822937f, 0.056486643850803375f, 0.4876164197921753f, 0.3956603705883026f, 0.3626271188259125f, 0.8031384944915771f, 0.8572723865509033f, +0.6009153723716736f, 0.04782673344016075f, 0.5070682764053345f, 0.6859241724014282f, 0.48638397455215454f, 0.5227308869361877f, 0.9583191275596619f, 0.5519843101501465f, +0.4490281939506531f, 0.845426082611084f, 0.0040471190586686134f, 0.6714401245117188f, 0.788536012172699f, 0.5530459880828857f, 0.8521206974983215f, 0.9667750597000122f, +0.1899038553237915f, 0.14015522599220276f, 0.21240262687206268f, 0.06162331625819206f, 0.3743637800216675f, 0.9131104946136475f, 0.5142458081245422f, 0.010482998564839363f, +0.9036118388175964f, 0.7724249362945557f, 0.37515148520469666f, 0.17222416400909424f, 0.5442739725112915f, 0.19069060683250427f, 0.11655233800411224f, 0.146914541721344f, +0.4995453357696533f, 0.7221554517745972f, 0.5747063159942627f, 0.529983639717102f, 0.6917024254798889f, 0.6357343792915344f, 0.11705999076366425f, 0.7907328605651855f, +0.1570265293121338f, 0.5205065011978149f, 0.47770750522613525f, 0.9637705087661743f, 0.29946398735046387f, 0.49023330211639404f, 0.5715799927711487f, 0.10176398605108261f, +0.5335097312927246f, 0.234365314245224f, 0.5741044282913208f, 0.49208658933639526f, 0.7332715392112732f, 0.0737125426530838f, 0.5873178243637085f, 0.5201934576034546f, +0.6331714391708374f, 0.7747862339019775f, 0.2843453586101532f, 0.24678076803684235f, 0.7056248784065247f, 0.40709710121154785f, 0.7460780143737793f, 0.2576872706413269f, +0.39845848083496094f, 0.18982450664043427f, 0.14684782922267914f, 0.43302181363105774f, 0.7850289940834045f, 0.3833773732185364f, 0.35816097259521484f, 0.8216935992240906f, +0.7989897727966309f, 0.833615779876709f, 0.40386345982551575f, 0.641422688961029f, 0.2802581787109375f, 0.9784031510353088f, 0.42657050490379333f, 0.5559663772583008f, +0.7491622567176819f, 0.35686349868774414f, 0.6362830400466919f, 0.18487580120563507f, 0.18513990938663483f, 0.3692854940891266f, 0.1938529908657074f, 0.5964424014091492f, +0.4012472331523895f, 0.4045508801937103f, 0.452761173248291f, 0.7008565664291382f, 0.7523708343505859f, 0.4169078767299652f, 0.9553346037864685f, 0.7962601184844971f, +0.1322527825832367f, 0.5861921310424805f, 0.87958824634552f, 0.5572225451469421f, 0.4857018291950226f, 0.46152248978614807f, 0.3019712567329407f, 0.6113126873970032f, +0.04110750928521156f, 0.878924548625946f, 0.9324800968170166f, 0.5637655854225159f, 0.6685288548469543f, 0.5355955958366394f, 0.03140844404697418f, 0.5425611734390259f, +0.487268328666687f, 0.5192486643791199f, 0.8521589636802673f, 0.7973272204399109f, 0.14166751503944397f, 0.5006649494171143f, 0.18133172392845154f, 0.2762526869773865f, +0.6962611079216003f, 0.2999909520149231f, 0.5526027679443359f, 0.8872278928756714f, 0.3564038872718811f, 0.38243839144706726f, 0.7597616314888f, 0.4012088477611542f, +0.9237352609634399f, 0.28231021761894226f, 0.09646948426961899f, 0.6714897751808167f, 0.5043734908103943f, 0.6060844659805298f, 0.8807926774024963f, 0.23581534624099731f, +0.954433798789978f, 0.9618269205093384f, 0.9960209131240845f, 0.9973694086074829f, 0.41071751713752747f, 0.2493620663881302f, 0.8382611274719238f, 0.6184896230697632f, +0.8054929375648499f, 0.07383239269256592f, 0.7981867790222168f, 0.18747948110103607f, 0.8484606742858887f, 0.5539311170578003f, 0.03268638625741005f, 0.8615500926971436f, +0.4542137384414673f, 0.7465187907218933f, 0.6366891264915466f, 0.7148553133010864f, 0.4585575759410858f, 0.2657719850540161f, 0.7294484376907349f, 0.21664486825466156f, +0.10042797774076462f, 0.422899067401886f, 0.1308695524930954f, 0.46666666865348816f, 0.6523040533065796f, 0.9634865522384644f, 0.7768650650978088f, 0.581139087677002f, +0.37267300486564636f, 0.6537182331085205f, 0.5417563915252686f, 0.6429400444030762f, 0.29845646023750305f, 0.9042994976043701f, 0.07072793692350388f, 0.2289782613515854f, +0.04506538808345795f, 0.6312122941017151f, 0.055022113025188446f, 0.5570036768913269f, 0.8956995010375977f, 0.7554948329925537f, 0.8213028907775879f, 0.769038736820221f, +0.49096769094467163f, 0.49514201283454895f, 0.02616790682077408f, 0.10243289172649384f, 0.2668556869029999f, 0.5845155119895935f, 0.9082800149917603f, 0.7066318392753601f, +0.7121745944023132f, 0.22020888328552246f, 0.46553805470466614f, 0.5884962677955627f, 0.5119771361351013f, 0.34393996000289917f, 0.5049230456352234f, 0.7340148091316223f, +0.027271956205368042f, 0.7089832425117493f, 0.9539350271224976f, 0.07504377514123917f, 0.9152854681015015f, 0.6071692705154419f, 0.40056362748146057f, 0.5354809761047363f, +0.6063610911369324f, 0.6894783973693848f, 0.5683833360671997f, 0.17594029009342194f, 0.5479456782341003f, 0.5955703258514404f, 0.3722628653049469f, 0.2814019024372101f, +0.06383797526359558f, 0.6795668005943298f, 0.44798392057418823f, 0.2913673520088196f, 0.5476081967353821f, 0.34340742230415344f, 0.11946889013051987f, 0.21034792065620422f, +0.7156696915626526f, 0.5937713980674744f, 0.6486111283302307f, 0.47521960735321045f, 0.8819036483764648f, 0.8538327813148499f, 0.5997673273086548f, 0.47870445251464844f, +0.6028214693069458f, 0.8941771984100342f, 0.6326302289962769f, 0.5168649554252625f, 0.5207794308662415f, 0.27280664443969727f, 0.16246570646762848f, 0.12529604136943817f, +0.9035731554031372f, 0.591334879398346f, 0.9578881859779358f, 0.17103327810764313f, 0.12819764018058777f, 0.7038173675537109f, 0.4356310963630676f, 0.4213002026081085f, +0.6873278021812439f, 0.3165976405143738f, 0.11485131084918976f, 0.15543566644191742f, 0.3888850808143616f, 0.32986846566200256f, 0.08383366465568542f, 0.12513263523578644f, +0.9471328854560852f, 0.47203901410102844f, 0.6679334044456482f, 0.794109046459198f, 0.89597088098526f, 0.3857167065143585f, 0.8991684913635254f, 0.05694802850484848f, +0.5596457719802856f, 0.4535037875175476f, 0.7803483605384827f, 0.28201428055763245f, 0.3346971273422241f, 0.1777588427066803f, 0.5990262627601624f, 0.25373879075050354f, +0.7098056077957153f, 0.5723106265068054f, 0.5631372332572937f, 0.5646886825561523f, 0.6566600203514099f, 0.2602112293243408f, 0.22391776740550995f, 0.4844922423362732f, +0.08918935805559158f, 0.1807994693517685f, 0.8355202674865723f, 0.5180812478065491f, 0.6250575184822083f, 0.5621309280395508f, 0.014487449079751968f, 0.6778110265731812f, +0.8965717554092407f, 0.0198938250541687f, 0.9565654397010803f, 0.23975801467895508f, 0.9900928139686584f, 0.6459873914718628f, 0.9062353372573853f, 0.4844605326652527f, +0.4414706230163574f, 0.6701395511627197f, 0.23433487117290497f, 0.1561756283044815f, 0.1437443643808365f, 0.06316845864057541f, 0.9999440908432007f, 0.7324222922325134f, +0.11394210159778595f, 0.5871449708938599f, 0.7526248097419739f, 0.5900729298591614f, 0.4475020468235016f, 0.019100487232208252f, 0.178951695561409f, 0.07405571639537811f, +0.7707442045211792f, 0.5161166191101074f, 0.2847212255001068f, 0.27308666706085205f, 0.8516044020652771f, 0.050345469266176224f, 0.4095757007598877f, 0.663080096244812f, +0.8324225544929504f, 0.254406601190567f, 0.5778502225875854f, 0.03840354457497597f, 0.46257272362709045f, 0.7098190188407898f, 0.14373897016048431f, 0.6513025760650635f, +0.1434212327003479f, 0.7635031342506409f, 0.05326263606548309f, 0.724234402179718f, 0.422201931476593f, 0.6522886753082275f, 0.7185320258140564f, 0.27537083625793457f, +0.735108494758606f, 0.8074356913566589f, 0.19922368228435516f, 0.44919541478157043f, 0.032548751682043076f, 0.9786482453346252f, 0.06138111278414726f, 0.6796675324440002f, +0.8240801095962524f, 0.7973252534866333f, 0.8526728749275208f, 0.4565717875957489f, 0.8146008849143982f, 0.40921345353126526f, 0.934229850769043f, 0.002639202866703272f, +0.6937144994735718f, 0.2938564419746399f, 0.5010280609130859f, 0.6735903024673462f, 0.871627688407898f, 0.34628793597221375f, 0.3694281280040741f, 0.4418915808200836f, +0.5140633583068848f, 0.8171901702880859f, 0.16454705595970154f, 0.6979969143867493f, 0.1448454111814499f, 0.4825076162815094f, 0.18534520268440247f, 0.4294411540031433f, +0.8034066557884216f, 0.6138280630111694f, 0.15633687376976013f, 0.7424849271774292f, 0.8523796200752258f, 0.9189934134483337f, 0.6093264222145081f, 0.865563690662384f, +0.5555226802825928f, 0.7167648673057556f, 0.9457657933235168f, 0.5710174441337585f, 0.6736713647842407f, 0.9871743321418762f, 0.33685562014579773f, 0.21444839239120483f, +0.12882474064826965f, 0.30413445830345154f, 0.1688614785671234f, 0.4376496970653534f, 0.6517241597175598f, 0.7497408390045166f, 0.020400704815983772f, 0.6372640132904053f, +0.910872220993042f, 0.7075249552726746f, 0.21821042895317078f, 0.4254271686077118f, 0.03039398603141308f, 0.35695916414260864f, 0.1808696687221527f, 0.8477505445480347f, +0.4157232940196991f, 0.7713919878005981f, 0.005091388709843159f, 0.7107065320014954f, 0.5972775220870972f, 0.6406885385513306f, 0.07513189315795898f, 0.10924434661865234f, +0.9973832368850708f, 0.37279608845710754f, 0.6311399340629578f, 0.9525197148323059f, 0.07212036848068237f, 0.7729926109313965f, 0.0561884306371212f, 0.6934810280799866f, +0.47460848093032837f, 0.7144622206687927f, 0.8783223628997803f, 0.37543952465057373f, 0.08888263255357742f, 0.5208850502967834f, 0.03129621967673302f, 0.48347488045692444f, +0.6695353984832764f, 0.47327420115470886f, 0.33874213695526123f, 0.794999361038208f, 0.5598095059394836f, 0.20629721879959106f, 0.10402480512857437f, 0.7065555453300476f, +0.35813647508621216f, 0.242061585187912f, 0.3456060290336609f, 0.8430100083351135f, 0.9199737906455994f, 0.32368627190589905f, 0.43745073676109314f, 0.5214145183563232f, +0.19030162692070007f, 0.5245694518089294f, 0.18640492856502533f, 0.466020792722702f, 0.20398271083831787f, 0.7511326670646667f, 0.29804638028144836f, 0.24645185470581055f, +0.3531821370124817f, 0.32867202162742615f, 0.3468358814716339f, 0.9673507213592529f, 0.8806026577949524f, 0.9265866875648499f, 0.5149341225624084f, 0.9226978421211243f, +0.6712832450866699f, 0.03356464207172394f, 0.5242088437080383f, 0.6898278594017029f, 0.19708608090877533f, 0.5126095414161682f, 0.3662595748901367f, 0.3047427833080292f, +0.006742801982909441f, 0.3407621383666992f, 0.645534098148346f, 0.09595900028944016f, 0.6671896576881409f, 0.8612439036369324f, 0.8218377232551575f, 0.38787978887557983f, +0.5652521848678589f, 0.6719322204589844f, 0.9842085242271423f, 0.9371309876441956f, 0.49322423338890076f, 0.42448437213897705f, 0.16510242223739624f, 0.6109526753425598f, +0.35980263352394104f, 0.6301953196525574f, 0.49707669019699097f, 0.2723991572856903f, 0.5818613171577454f, 0.9544309973716736f, 0.14220643043518066f, 0.9731791615486145f, +0.5346968173980713f, 0.9078060984611511f, 0.16912882030010223f, 0.4938087463378906f, 0.24067193269729614f, 0.03835579752922058f, 0.6244019865989685f, 0.8802337050437927f, +0.5508968234062195f, 0.8408150672912598f, 0.04073292762041092f, 0.5113542675971985f, 0.4116781949996948f, 0.9768810868263245f, 0.3568381071090698f, 0.998822808265686f, +0.65535569190979f, 0.47159016132354736f, 0.19286826252937317f, 0.8727167248725891f, 0.8802834749221802f, 0.6698796153068542f, 0.14071543514728546f, 0.8359838724136353f, +0.4626886546611786f, 0.6550349593162537f, 0.42482802271842957f, 0.9451971650123596f, 0.11071307957172394f, 0.23219336569309235f, 0.8555033802986145f, 0.045476850122213364f, +0.44243860244750977f, 0.044133465737104416f, 0.06564086675643921f, 0.3167705237865448f, 0.5971126556396484f, 0.3235583007335663f, 0.9949468374252319f, 0.5818015336990356f, +0.1526222974061966f, 0.15473681688308716f, 0.03866894543170929f, 0.7333623170852661f, 0.16272468864917755f, 0.3337458670139313f, 0.8799098134040833f, 0.48101919889450073f, +0.5401842594146729f, 0.44024157524108887f, 0.02713000401854515f, 0.9003867506980896f, 0.435819536447525f, 0.3801767826080322f, 0.714280366897583f, 0.6630645990371704f, +0.20798154175281525f, 0.9730138182640076f, 0.8717684745788574f, 0.35136035084724426f, 0.8240002393722534f, 0.5504804253578186f, 0.7637561559677124f, 0.12383856624364853f, +0.18550507724285126f, 0.9561439156532288f, 0.8378667235374451f, 0.13358063995838165f, 0.5953336954116821f, 0.3618294596672058f, 0.5966847538948059f, 0.880975604057312f, +0.9418951869010925f, 0.0111558698117733f, 0.05483987182378769f, 0.9209890961647034f, 0.7423895001411438f, 0.7233306169509888f, 0.5590957403182983f, 0.5180341005325317f, +0.35814008116722107f, 0.9806167483329773f, 0.6574798226356506f, 0.6446336507797241f, 0.8104338049888611f, 0.6344273090362549f, 0.8435674905776978f, 0.6342395544052124f, +0.37018507719039917f, 0.019314611330628395f, 0.3553539514541626f, 0.5795184373855591f, 0.6385989189147949f, 0.5104120373725891f, 0.9510025978088379f, 0.5350344181060791f, +0.3153560757637024f, 0.8058688044548035f, 0.3963124752044678f, 0.9654682278633118f, 0.5450540781021118f, 0.31420567631721497f, 0.4467260241508484f, 0.5202133059501648f, +0.7131804823875427f, 0.6478794813156128f, 0.7251477241516113f, 0.07830096036195755f, 0.6401355862617493f, 0.3932613432407379f, 0.3584679365158081f, 0.91094571352005f, +0.39523500204086304f, 0.08907144516706467f, 0.45662516355514526f, 0.7109434604644775f, 0.7230480313301086f, 0.6053628325462341f, 0.30622196197509766f, 0.38770484924316406f, +0.5422073602676392f, 0.5639345049858093f, 0.1095707044005394f, 0.5614190697669983f, 0.9919993877410889f, 0.03836771100759506f, 0.20234869420528412f, 0.25325632095336914f, +0.7791091799736023f, 0.9991785883903503f, 0.1801302582025528f, 0.2184862196445465f, 0.8796088695526123f, 0.4260416328907013f, 0.8678127527236938f, 0.03663934767246246f, +0.012205268256366253f, 0.39760011434555054f, 0.17696164548397064f, 0.6593616008758545f, 0.5277931094169617f, 0.7898777723312378f, 0.2312561273574829f, 0.20099200308322906f, +0.8612154126167297f, 0.9631316661834717f, 0.4981361925601959f, 0.403207927942276f, 0.7446074485778809f, 0.03062167763710022f, 0.9258502721786499f, 0.7746843099594116f, +0.6947594285011292f, 0.9340320229530334f, 0.7091878652572632f, 0.8093006610870361f, 0.05367884412407875f, 0.4846416413784027f, 0.6088395118713379f, 0.39811018109321594f, +0.1312079131603241f, 0.34564483165740967f, 0.49910688400268555f, 0.7934744954109192f, 0.7890270352363586f, 0.9726294279098511f, 0.9277294874191284f, 0.6825648546218872f, +0.6767992377281189f, 0.9845876097679138f, 0.005407392047345638f, 0.10670120269060135f, 0.5060163140296936f, 0.2585422098636627f, 0.2062050998210907f, 0.03115996904671192f, +0.6255623698234558f, 0.5305595397949219f, 0.5546576380729675f, 0.3634301424026489f, 0.9094740748405457f, 0.2792908847332001f, 0.35963982343673706f, 0.4602079391479492f, +0.4093800187110901f, 0.16684138774871826f, 0.7128203511238098f, 0.05606738477945328f, 0.2659060060977936f, 0.3364273011684418f, 0.9775246977806091f, 0.42543789744377136f, +0.001242441707290709f, 0.7201417684555054f, 0.8536234498023987f, 0.4104852080345154f, 0.36432915925979614f, 0.4897150993347168f, 0.17385724186897278f, 0.053660452365875244f, +0.35944294929504395f, 0.49578040838241577f, 0.7099647521972656f, 0.27315399050712585f, 0.6493324041366577f, 0.0611613504588604f, 0.39927518367767334f, 0.37925225496292114f, +0.6364468932151794f, 0.2685614824295044f, 0.23535184562206268f, 0.21502675116062164f, 0.3463660180568695f, 0.24293406307697296f, 0.2888999879360199f, 0.09470298886299133f, +0.020922543480992317f, 0.626682698726654f, 0.1307544708251953f, 0.5583909153938293f, 0.026464300230145454f, 0.949379563331604f, 0.6844386458396912f, 0.5551152229309082f, +0.6242727637290955f, 0.7098765969276428f, 0.4415547847747803f, 0.47027674317359924f, 0.3067215085029602f, 0.8548253774642944f, 0.15056103467941284f, 0.11636115610599518f, +0.15903328359127045f, 0.2658291459083557f, 0.846552312374115f, 0.13244199752807617f, 0.24690945446491241f, 0.4811806082725525f, 0.40288159251213074f, 0.45966532826423645f, +0.8517621755599976f, 0.8950140476226807f, 0.6146064400672913f, 0.07919812202453613f, 0.0925937071442604f, 0.8610221147537231f, 0.18379390239715576f, 0.036380570381879807f, +0.41226324439048767f, 0.8227370381355286f, 0.13956181704998016f, 0.7293396592140198f, 0.5370288491249084f, 0.32435569167137146f, 0.9375349879264832f, 0.6014223098754883f, +0.7773137092590332f, 0.30621346831321716f, 0.7853850722312927f, 0.7652652263641357f, 0.2008773386478424f, 0.2622990906238556f, 0.8607255220413208f, 0.9252390265464783f, +0.013190124183893204f, 0.24822281301021576f, 0.955833375453949f, 0.27612581849098206f, 0.19126661121845245f, 0.30282357335090637f, 0.4654594361782074f, 0.7184689044952393f, +0.5572916865348816f, 0.05513860657811165f, 0.3736012876033783f, 0.456522136926651f, 0.19296595454216003f, 0.6982859969139099f, 0.8841006755828857f, 0.2518708109855652f, +0.3295402228832245f, 0.40198463201522827f, 0.5325913429260254f, 0.6255645751953125f, 0.7727678418159485f, 0.6649348139762878f, 0.7825260162353516f, 0.2039889246225357f, +0.9324197769165039f, 0.9628584384918213f, 0.5647438764572144f, 0.7876762747764587f, 0.4598176181316376f, 0.4387907385826111f, 0.49512097239494324f, 0.963189959526062f, +0.5835348963737488f, 0.912311315536499f, 0.9148164391517639f, 0.048494283109903336f, 0.585044264793396f, 0.48378312587738037f, 0.049229010939598083f, 0.11752228438854218f, +0.8442016839981079f, 0.015054738149046898f, 0.8315967321395874f, 0.481232225894928f, 0.38199666142463684f, 0.2949586808681488f, 0.587517261505127f, 0.8964964747428894f, +0.4940664768218994f, 0.5762439966201782f, 0.5760091543197632f, 0.9942789077758789f, 0.6940974593162537f, 0.9639072418212891f, 0.6132343411445618f, 0.07466455549001694f, +0.9357264041900635f, 0.9942341446876526f, 0.9383149147033691f, 0.6509715914726257f, 0.43462836742401123f, 0.40212711691856384f, 0.1805034875869751f, 0.6015692353248596f, +0.098844975233078f, 0.6329930424690247f, 0.7892093062400818f, 0.07530306279659271f, 0.2001446932554245f, 0.7211296558380127f, 0.2627964913845062f, 0.8585588335990906f, +0.32988789677619934f, 0.07067783176898956f, 0.7482434511184692f, 0.6544227004051208f, 0.6113494038581848f, 0.22236205637454987f, 0.8636207580566406f, 0.7521259188652039f, +0.8414170742034912f, 0.9159613847732544f, 0.9379368424415588f, 0.49066081643104553f, 0.0063842227682471275f, 0.9095509052276611f, 0.5977364778518677f, 0.4368002414703369f, +0.68254154920578f, 0.8748016953468323f, 0.5077117085456848f, 0.5059955716133118f, 0.7991615533828735f, 0.5640721321105957f, 0.6378844976425171f, 0.6470819711685181f, +0.9927375912666321f, 0.7129392027854919f, 0.4606061279773712f, 0.5653961896896362f, 0.012539353221654892f, 0.2926003634929657f, 0.49106815457344055f, 0.5772389769554138f, +0.5929942727088928f, 0.08156941086053848f, 0.3986402153968811f, 0.5527432560920715f, 0.879348874092102f, 0.1947343647480011f, 0.6006659865379333f, 0.6783597469329834f, +0.45431166887283325f, 0.7213973999023438f, 0.008066614158451557f, 0.9314553141593933f, 0.913729727268219f, 0.4468788504600525f, 0.5299719572067261f, 0.8615965843200684f, +0.20387819409370422f, 0.12620726227760315f, 0.9360736012458801f, 0.8347810506820679f, 0.574906587600708f, 0.12734849750995636f, 0.7645686864852905f, 0.9460065364837646f, +0.1237403005361557f, 0.10877121239900589f, 0.15875132381916046f, 0.7854172587394714f, 0.6815127730369568f, 0.19623887538909912f, 0.9560115337371826f, 0.46504926681518555f, +0.5653607249259949f, 0.5162233114242554f, 0.22280114889144897f, 0.09088745713233948f, 0.4671564996242523f, 0.9675595164299011f, 0.5884478688240051f, 0.14631405472755432f, +0.16656926274299622f, 0.01645512320101261f, 0.914462685585022f, 0.09624844789505005f, 0.3874826729297638f, 0.4739474654197693f, 0.750860869884491f, 0.23523393273353577f, +0.9284203052520752f, 0.8898579478263855f, 0.345284640789032f, 0.08784419298171997f, 0.7296627759933472f, 0.8968877196311951f, 0.6744242906570435f, 0.4944525361061096f, +0.10546044260263443f, 0.512357234954834f, 0.2921816408634186f, 0.0773330107331276f, 0.562795877456665f, 0.13140875101089478f, 0.1996130645275116f, 0.7234895825386047f, +0.877125084400177f, 0.42857682704925537f, 0.9933916926383972f, 0.9442976713180542f, 0.8135015964508057f, 0.3923358917236328f, 0.8295015692710876f, 0.436677485704422f, +0.18804648518562317f, 0.4523731470108032f, 0.6273171305656433f, 0.11732884496450424f, 0.933814287185669f, 0.5483222007751465f, 0.489371657371521f, 0.4894992411136627f, +0.14645743370056152f, 0.9219204783439636f, 0.02764289267361164f, 0.6256154775619507f, 0.41885825991630554f, 0.40766698122024536f, 0.8504123687744141f, 0.6370672583580017f, +0.14833253622055054f, 0.13100288808345795f, 0.9440075159072876f, 0.3893665373325348f, 0.8816218376159668f, 0.002656870521605015f, 0.41922372579574585f, 0.5249606966972351f, +0.6279345154762268f, 0.981545627117157f, 0.05514019355177879f, 0.665582537651062f, 0.9076485633850098f, 0.49085694551467896f, 0.8149339556694031f, 0.7207086086273193f, +0.596097469329834f, 0.09002416580915451f, 0.1664331704378128f, 0.6368628144264221f, 0.6534790396690369f, 0.22379475831985474f, 0.24387484788894653f, 0.7973232269287109f, +0.22872771322727203f, 0.8999351263046265f, 0.5423677563667297f, 0.04814422130584717f, 0.05455227568745613f, 0.8026018142700195f, 0.9179528951644897f, 0.02417031116783619f, +0.491120845079422f, 0.8830698728561401f, 0.9330478310585022f, 0.709904134273529f, 0.8034668564796448f, 0.45874330401420593f, 0.90679931640625f, 0.5565980672836304f, +0.6475761532783508f, 0.7880554795265198f, 0.40773922204971313f, 0.3230389654636383f, 0.9459826350212097f, 0.8571273684501648f, 0.3719262480735779f, 0.05620569363236427f, +0.41014543175697327f, 0.3619160056114197f, 0.8294211626052856f, 0.6503199338912964f, 0.958410382270813f, 0.944802463054657f, 0.8095158338546753f, 0.6894903182983398f, +0.6438779234886169f, 0.43745753169059753f, 0.13021022081375122f, 0.11162389814853668f, 0.34507378935813904f, 0.5268699526786804f, 0.6061200499534607f, 0.6572471857070923f, +0.8573631048202515f, 0.49089381098747253f, 0.39431145787239075f, 0.920922577381134f, 0.11359622329473495f, 0.026848040521144867f, 0.41631802916526794f, 0.5457457900047302f, +0.8318284153938293f, 0.45060333609580994f, 0.18538980185985565f, 0.11547336727380753f, 0.9438728094100952f, 0.9152460098266602f, 0.5432073473930359f, 0.6312512159347534f, +0.47967252135276794f, 0.08170054107904434f, 0.5649108290672302f, 0.08422406017780304f, 0.6506991982460022f, 0.690393328666687f, 0.7650669813156128f, 0.437112033367157f, +0.630125880241394f, 0.39230868220329285f, 0.33557915687561035f, 0.6362882256507874f, 0.29199135303497314f, 0.7268329858779907f, 0.6273782253265381f, 0.4277935326099396f, +0.4173533320426941f, 0.35611492395401f, 0.3242883086204529f, 0.23563051223754883f, 0.7943972945213318f, 0.6533637046813965f, 0.9669627547264099f, 0.36998888850212097f, +0.5255709886550903f, 0.919844388961792f, 0.04740649834275246f, 0.8462807536125183f, 0.9287967681884766f, 0.000578221632167697f, 0.366167277097702f, 0.2835240066051483f, +0.5096908211708069f, 0.6655353307723999f, 0.2750151753425598f, 0.12282820791006088f, 0.6700020432472229f, 0.5216217041015625f, 0.5535507798194885f, 0.07426565140485764f, +0.20571665465831757f, 0.1269632875919342f, 0.8273926973342896f, 0.9396179914474487f, 0.2893592417240143f, 0.2628929913043976f, 0.2609824240207672f, 0.29008427262306213f, +0.40871551632881165f, 0.1803678572177887f, 0.8327902555465698f, 0.5533181428909302f, 0.9492592811584473f, 0.6956058144569397f, 0.5136803388595581f, 0.556117594242096f, +0.16616129875183105f, 0.5397820472717285f, 0.06975921988487244f, 0.8726140856742859f, 0.08156910538673401f, 0.5377335548400879f, 0.6738261580467224f, 0.004160934593528509f, +0.6812497973442078f, 0.20221439003944397f, 0.09321874380111694f, 0.8111229538917542f, 0.9011240601539612f, 0.7704436182975769f, 0.20516306161880493f, 0.9694781303405762f, +0.47222715616226196f, 0.7506401538848877f, 0.25314757227897644f, 0.23936788737773895f, 0.22840985655784607f, 0.3329446017742157f, 0.2664230763912201f, 0.8423243761062622f, +0.5178266167640686f, 0.256544828414917f, 0.49587100744247437f, 0.731796145439148f, 0.5550515651702881f, 0.580971896648407f, 0.7920541167259216f, 0.6322890520095825f, +0.07652305066585541f, 0.26280677318573f, 0.3140948712825775f, 0.8829917311668396f, 0.16754814982414246f, 0.7582098841667175f, 0.5932511687278748f, 0.5260409712791443f, +0.7321266531944275f, 0.6327638030052185f, 0.4461165964603424f, 0.5977511405944824f, 0.5013430118560791f, 0.4487840533256531f, 0.3583388328552246f, 0.02157731167972088f, +0.6725533604621887f, 0.9005000591278076f, 0.3878537118434906f, 0.5505815148353577f, 0.2193973958492279f, 0.046159230172634125f, 0.8915140628814697f, 0.9715552926063538f, +0.9000949859619141f, 0.5201123356819153f, 0.308791846036911f, 0.575175404548645f, 0.5682863593101501f, 0.42111536860466003f, 0.6911582350730896f, 0.33515894412994385f, +0.580432116985321f, 0.8025619387626648f, 0.3250278830528259f, 0.37197452783584595f, 0.7757179141044617f, 0.09297219663858414f, 0.9441885352134705f, 0.6813203692436218f, +0.3385995924472809f, 0.09265825152397156f, 0.34913453459739685f, 0.34105193614959717f, 0.5994135141372681f, 0.7743740677833557f, 0.8132628202438354f, 0.2606622874736786f, +0.6190739870071411f, 0.4024336338043213f, 0.360497385263443f, 0.3546859323978424f, 0.3528267443180084f, 0.5951979160308838f, 0.7789790034294128f, 0.7506594061851501f, +0.1398140788078308f, 0.12158434838056564f, 0.1781354695558548f, 0.7782880663871765f, 0.30572694540023804f, 0.33442461490631104f, 0.08847449719905853f, 0.9923006296157837f, +0.7346971035003662f, 0.23760055005550385f, 0.7206740379333496f, 0.7971137166023254f, 0.17499865591526031f, 0.3274868130683899f, 0.010877865366637707f, 0.4916832745075226f, +0.07932444661855698f, 0.9094634056091309f, 0.8781993389129639f, 0.05918874591588974f, 0.04789320006966591f, 0.34256553649902344f, 0.06529450416564941f, 0.349341481924057f, +0.7741733193397522f, 0.28744664788246155f, 0.5205706357955933f, 0.996036946773529f, 0.7550404667854309f, 0.8185938596725464f, 0.015990125015378f, 0.8601167798042297f, +0.07088612765073776f, 0.9872831702232361f, 0.22133058309555054f, 0.5130488276481628f, 0.6148419976234436f, 0.5214371085166931f, 0.224678173661232f, 0.6941857933998108f, +0.8462607264518738f, 0.5612895488739014f, 0.7005034685134888f, 0.9731351137161255f, 0.706919252872467f, 0.23939961194992065f, 0.47226712107658386f, 0.288958340883255f, +0.1632612943649292f, 0.3644246757030487f, 0.27620992064476013f, 0.5908983945846558f, 0.577073872089386f, 0.8387545347213745f, 0.606082558631897f, 0.17242328822612762f, +0.6780416965484619f, 0.8477715849876404f, 0.39362144470214844f, 0.5353764295578003f, 0.3730315566062927f, 0.5718259811401367f, 0.8968987464904785f, 0.5358625054359436f, +0.9106656312942505f, 0.5014026165008545f, 0.9942001104354858f, 0.5649999976158142f, 0.42835700511932373f, 0.6273713111877441f, 0.46528345346450806f, 0.8340553641319275f, +0.7020429968833923f, 0.3365047574043274f, 0.8554931282997131f, 0.25257807970046997f, 0.7198328971862793f, 0.11579646915197372f, 0.41505539417266846f, 0.803216278553009f, +0.34114694595336914f, 0.4378233551979065f, 0.44413092732429504f, 0.810642421245575f, 0.9036762118339539f, 0.9930851459503174f, 0.7424336671829224f, 0.8015727400779724f, +0.3762965500354767f, 0.2593214809894562f, 0.41947048902511597f, 0.4807201027870178f, 0.49147164821624756f, 0.18950259685516357f, 0.8783829808235168f, 0.22442500293254852f, +0.5364100933074951f, 0.28213971853256226f, 0.6090237498283386f, 0.7463329434394836f, 0.6191139817237854f, 0.9471454620361328f, 0.4372428059577942f, 0.06917596608400345f, +0.25309231877326965f, 0.2031278759241104f, 0.45695701241493225f, 0.0855206772685051f, 0.23558780550956726f, 0.13026313483715057f, 0.6747074127197266f, 0.4663197100162506f, +0.18317700922489166f, 0.48581644892692566f, 0.19762513041496277f, 0.3102284073829651f, 0.009688161313533783f, 0.07029443234205246f, 0.9325435161590576f, 0.8636685609817505f, +0.10973648726940155f, 0.7683639526367188f, 0.30486202239990234f, 0.1413690596818924f, 0.4812808930873871f, 0.0037878863513469696f, 0.5862252712249756f, 0.46409913897514343f, +0.29582729935646057f, 0.5109610557556152f, 0.9758163094520569f, 0.0997094064950943f, 0.13451924920082092f, 0.5174908638000488f, 0.42662137746810913f, 0.49345874786376953f, +0.22107771039009094f, 0.9013388156890869f, 0.3545549511909485f, 0.23123115301132202f, 0.609027087688446f, 0.21690703928470612f, 0.16233330965042114f, 0.3423830270767212f, +0.5068972706794739f, 0.8592522144317627f, 0.3869503438472748f, 0.07876229286193848f, 0.9145485162734985f, 0.9046218395233154f, 0.8613150119781494f, 0.07517638802528381f, +0.9269258379936218f, 0.3521626889705658f, 0.12282021343708038f, 0.6112663149833679f, 0.6197463274002075f, 0.23260247707366943f, 0.023626327514648438f, 0.7596920132637024f, +0.984227180480957f, 0.265055388212204f, 0.40159332752227783f, 0.08216262608766556f, 0.7652533650398254f, 0.557206928730011f, 0.2657441794872284f, 0.48967254161834717f, +0.9161317944526672f, 0.23811747133731842f, 0.08809073269367218f, 0.18173643946647644f, 0.991630494594574f, 0.045766375958919525f, 0.4680631756782532f, 0.9266614317893982f, +0.15334098041057587f, 0.8577837944030762f, 0.7600253820419312f, 0.11719760298728943f, 0.6734116077423096f, 0.07569362968206406f, 0.38538292050361633f, 0.9463486671447754f, +0.7751149535179138f, 0.8812346458435059f, 0.5169534683227539f, 0.33563634753227234f, 0.7761154770851135f, 0.29781946539878845f, 0.7955983877182007f, 0.38434892892837524f, +0.8875398635864258f, 0.2883027195930481f, 0.39595550298690796f, 0.08271800726652145f, 0.35692548751831055f, 0.8558022379875183f, 0.9339277148246765f, 0.20825505256652832f, +0.1982089728116989f, 0.30056047439575195f, 0.1790497899055481f, 0.7300271987915039f, 0.9484142661094666f, 0.9006948471069336f, 0.17738643288612366f, 0.4413500428199768f, +0.746833324432373f, 0.6511883735656738f, 0.28097957372665405f, 0.6312543749809265f, 0.770594596862793f, 0.09150636196136475f, 0.5551800727844238f, 0.22652769088745117f, +0.007260436657816172f, 0.9536005854606628f, 0.8472560048103333f, 0.62981778383255f, 0.6432117223739624f, 0.9160747528076172f, 0.5114778280258179f, 0.19309715926647186f, +0.5929037928581238f, 0.3572833836078644f, 0.08392123878002167f, 0.9112808108329773f, 0.8250280022621155f, 0.717461109161377f, 0.1506928950548172f, 0.3080577254295349f, +0.8192904591560364f, 0.021140052005648613f, 0.1442725509405136f, 0.5845997929573059f, 0.798360288143158f, 0.8800599575042725f, 0.5271483659744263f, 0.828745424747467f, +0.49065694212913513f, 0.644886314868927f, 0.11567184329032898f, 0.33867061138153076f, 0.44096726179122925f, 0.7080311179161072f, 0.4329221546649933f, 0.7324601411819458f, +0.6880519986152649f, 0.87553870677948f, 0.023974591866135597f, 0.19589507579803467f, 0.8164528608322144f, 0.06554380804300308f, 0.43245768547058105f, 0.16461315751075745f, +0.23591864109039307f, 0.36495882272720337f, 0.664815366268158f, 0.24455763399600983f, 0.8319889307022095f, 0.5915864109992981f, 0.24350903928279877f, 0.7665870785713196f, +0.8239525556564331f, 0.41569435596466064f, 0.4577409625053406f, 0.9199193120002747f, 0.11064957827329636f, 0.6331505179405212f, 0.5273367166519165f, 0.858163595199585f, +0.7111417055130005f, 0.28479090332984924f, 0.25122538208961487f, 0.950268030166626f, 0.8152821063995361f, 0.8480714559555054f, 0.5625976324081421f, 0.7705398797988892f, +0.24206414818763733f, 0.3833453059196472f, 0.0385233536362648f, 0.9408911466598511f, 0.6362574696540833f, 0.7171552181243896f, 0.9499900937080383f, 0.650983452796936f, +0.694173276424408f, 0.5655614733695984f, 0.9170170426368713f, 0.9871682524681091f, 0.47735515236854553f, 0.8020693063735962f, 0.5587081909179688f, 0.5306077599525452f, +0.029000170528888702f, 0.4695947468280792f, 0.081451416015625f, 0.07092499732971191f, 0.48909199237823486f, 0.46006590127944946f, 0.19548912346363068f, 0.0801008865237236f, +0.7715778946876526f, 0.029973246157169342f, 0.8882471323013306f, 0.4579768776893616f, 0.23759455978870392f, 0.7892404198646545f, 0.42552563548088074f, 0.8278147578239441f, +0.3738517165184021f, 0.46497535705566406f, 0.8823816776275635f, 0.2885681688785553f, 0.7199065089225769f, 0.24896331131458282f, 0.2102147787809372f, 0.2935902178287506f, +0.2387196123600006f, 0.017142150551080704f, 0.521449863910675f, 0.7728006839752197f, 0.8690177202224731f, 0.6193624138832092f, 0.6610322594642639f, 0.21026292443275452f, +0.9390906691551208f, 0.40194588899612427f, 0.22486408054828644f, 0.34986284375190735f, 0.6508634090423584f, 0.3935806453227997f, 0.08424456417560577f, 0.8674931526184082f, +0.8073312044143677f, 0.4878312647342682f, 0.09906397014856339f, 0.08179544657468796f, 0.20693956315517426f, 0.5133844017982483f, 0.5939571261405945f, 0.987627387046814f, +0.6199519634246826f, 0.8935309648513794f, 0.8991830348968506f, 0.9232063293457031f, 0.01440335065126419f, 0.4801412522792816f, 0.9502384662628174f, 0.3825349807739258f, +0.20638173818588257f, 0.49269434809684753f, 0.09558821469545364f, 0.49012985825538635f, 0.649713933467865f, 0.9259368777275085f, 0.5160828232765198f, 0.6135209798812866f, +0.34184712171554565f, 0.3233814835548401f, 0.42266905307769775f, 0.3490358889102936f, 0.8436366319656372f, 0.9932474493980408f, 0.3121519982814789f, 0.7505271434783936f, +0.4573150873184204f, 0.8846268653869629f, 0.4710652530193329f, 0.1398211270570755f, 0.531554639339447f, 0.3350696563720703f, 0.015342649072408676f, 0.6510632634162903f, +0.41671499609947205f, 0.6425260305404663f, 0.6914798617362976f, 0.09794041514396667f, 0.5787659287452698f, 0.9501506686210632f, 0.6311306357383728f, 0.39493608474731445f, +0.39158645272254944f, 0.787916362285614f, 0.49311670660972595f, 0.050767816603183746f, 0.5038779377937317f, 0.4478056728839874f, 0.5222789645195007f, 0.3244708776473999f, +0.056937769055366516f, 0.4635751247406006f, 0.2123301476240158f, 0.5063125491142273f, 0.3734121024608612f, 0.4387141466140747f, 0.6882157325744629f, 0.12136664986610413f, +0.25651848316192627f, 0.27105143666267395f, 0.8521239161491394f, 0.8777908682823181f, 0.8091349005699158f, 0.35040754079818726f, 0.03872903436422348f, 0.948364794254303f, +0.48669496178627014f, 0.8669628500938416f, 0.8410266041755676f, 0.43898552656173706f, 0.8257231712341309f, 0.12990392744541168f, 0.007459595799446106f, 0.5590177178382874f, +0.8882207870483398f, 0.7490673065185547f, 0.3044125437736511f, 0.03870498016476631f, 0.35971683263778687f, 0.832971453666687f, 0.5091896057128906f, 0.3818274736404419f, +0.6440456509590149f, 0.815126359462738f, 0.20231804251670837f, 0.07156716287136078f, 0.9778147339820862f, 0.8262234330177307f, 0.7340518832206726f, 0.9655183553695679f, +0.9092749357223511f, 0.4460204839706421f, 0.4179432988166809f, 0.8560643792152405f, 0.15338380634784698f, 0.1326129138469696f, 0.6110950708389282f, 0.024828461930155754f, +0.31464046239852905f, 0.7242128849029541f, 0.5769892930984497f, 0.3994029760360718f, 0.6597794890403748f, 0.8704196214675903f, 0.4986950755119324f, 0.33430054783821106f, +0.5494232177734375f, 0.036911286413669586f, 0.9186204075813293f, 0.9582767486572266f, 0.17524653673171997f, 0.8742961287498474f, 0.3619728982448578f, 0.9065584540367126f, +0.1473480463027954f, 0.8031643033027649f, 0.9551005959510803f, 0.9971603751182556f, 0.29122498631477356f, 0.3015790581703186f, 0.41901910305023193f, 0.8682383298873901f, +0.16603051126003265f, 0.8079832792282104f, 0.2317589819431305f, 0.9163298606872559f, 0.2332499623298645f, 0.1096976101398468f, 0.05831237882375717f, 0.013277648016810417f, +0.2115469127893448f, 0.8468296527862549f, 0.43238189816474915f, 0.035137441009283066f, 0.21510884165763855f, 0.862380862236023f, 0.39914262294769287f, 0.4163088798522949f, +0.593568742275238f, 0.14700177311897278f, 0.471264511346817f, 0.22358053922653198f, 0.24728165566921234f, 0.3266306519508362f, 0.8124825358390808f, 0.8504367470741272f, +0.0623805858194828f, 0.24803024530410767f, 0.3107302784919739f, 0.5678427815437317f, 0.9508113861083984f, 0.7998749613761902f, 0.20824459195137024f, 0.0691915825009346f, +0.0030001283157616854f, 0.973446249961853f, 0.5283393263816833f, 0.47510024905204773f, 0.10351225733757019f, 0.14463074505329132f, 0.8011817932128906f, 0.43579742312431335f, +0.9389875531196594f, 0.7598330974578857f, 0.9031345844268799f, 0.13101251423358917f, 0.8686633110046387f, 0.8917835354804993f, 0.4894109070301056f, 0.14055775105953217f, +0.043689366430044174f, 0.07032018899917603f, 0.8187121152877808f, 0.338199257850647f, 0.011204932816326618f, 0.033808138221502304f, 0.8145556449890137f, 0.3610766530036926f, +0.4650612473487854f, 0.40930885076522827f, 0.7364897727966309f, 0.6427884101867676f, 0.9452829360961914f, 0.15778614580631256f, 0.5223269462585449f, 0.7149247527122498f, +0.2630883455276489f, 0.9625890851020813f, 0.4104280471801758f, 0.7794525027275085f, 0.10548470169305801f, 0.051900122314691544f, 0.6943750977516174f, 0.898152768611908f, +0.20327624678611755f, 0.9176768064498901f, 0.4855738878250122f, 0.7691695094108582f, 0.26318490505218506f, 0.8144839406013489f, 0.40909454226493835f, 0.5817102789878845f, +0.12623924016952515f, 0.5742148160934448f, 0.47863060235977173f, 0.6791473031044006f, 0.050853002816438675f, 0.9832772016525269f, 0.4386647343635559f, 0.7150806784629822f, +0.6092420816421509f, 0.22811098396778107f, 0.8127638101577759f, 0.6072084903717041f, 0.43018999695777893f, 0.2826089859008789f, 0.9270129799842834f, 0.2099776417016983f, +0.2705308794975281f, 0.9884142279624939f, 0.7800859808921814f, 0.3562110960483551f, 0.8703896999359131f, 0.7632835507392883f, 0.7839793562889099f, 0.4676569700241089f, +0.42634308338165283f, 0.4729289710521698f, 0.5807268619537354f, 0.16022811830043793f, 0.3857770562171936f, 0.9597312808036804f, 0.08834881335496902f, 0.8735696077346802f, +0.3242162764072418f, 0.8027030825614929f, 0.850906252861023f, 0.1653522253036499f, 0.43750420212745667f, 0.8985570669174194f, 0.8940912485122681f, 0.15043774247169495f, +0.528403103351593f, 0.5666365623474121f, 0.6896139979362488f, 0.046846214681863785f, 0.9717269539833069f, 0.6971933245658875f, 0.94808030128479f, 0.3824125826358795f, +0.16056117415428162f, 0.40435096621513367f, 0.8369169235229492f, 0.10599829256534576f, 0.3730519711971283f, 0.9398524165153503f, 0.619877278804779f, 0.8756394386291504f, +0.5422450304031372f, 0.1476966291666031f, 0.6302582025527954f, 0.793920636177063f, 0.22789199650287628f, 0.5609076619148254f, 0.8552502989768982f, 0.4433821439743042f, +0.6831298470497131f, 0.13816849887371063f, 0.8481001853942871f, 0.9752045273780823f, 0.9076375961303711f, 0.3447949290275574f, 0.7036790251731873f, 0.21453671157360077f, +0.2031686156988144f, 0.5044258832931519f, 0.05426368862390518f, 0.9910041689872742f, 0.2688594460487366f, 0.9024494886398315f, 0.571559727191925f, 0.726797342300415f, +0.1485346406698227f, 0.291119247674942f, 0.3303695321083069f, 0.6040306091308594f, 0.791942834854126f, 0.6429239511489868f, 0.9207299947738647f, 0.1637597531080246f, +0.5278788208961487f, 0.5905609130859375f, 0.2304648607969284f, 0.8695870041847229f, 0.4586903154850006f, 0.9733479619026184f, 0.96551114320755f, 0.02003653161227703f, +0.8629605770111084f, 0.7595798969268799f, 0.7144981026649475f, 0.6002734303474426f, 0.48848623037338257f, 0.10301364958286285f, 0.6005875468254089f, 0.7039933800697327f, +0.37721964716911316f, 0.9593431949615479f, 0.7894666194915771f, 0.8660193681716919f, 0.16734257340431213f, 0.5570094585418701f, 0.10355642437934875f, 0.5770846009254456f, +0.2158138006925583f, 0.8539754152297974f, 0.8433395624160767f, 0.1836121678352356f, 0.697469174861908f, 0.3749541640281677f, 0.8782673478126526f, 0.21654196083545685f, +0.14331167936325073f, 0.24347639083862305f, 0.48533549904823303f, 0.3337908089160919f, 0.6855584383010864f, 0.4035400152206421f, 0.9079757928848267f, 0.255190908908844f, +0.16722892224788666f, 0.030605729669332504f, 0.18326495587825775f, 0.8223832249641418f, 0.5841043591499329f, 0.6408272385597229f, 0.3940642774105072f, 0.6111985445022583f, +0.1483757197856903f, 0.0926131159067154f, 0.5979411005973816f, 0.1360807716846466f, 0.13326112926006317f, 0.7680708765983582f, 0.9880064725875854f, 0.16369640827178955f, +0.03526425361633301f, 0.24155782163143158f, 0.05852965638041496f, 0.9590888619422913f, 0.0947021022439003f, 0.3635580241680145f, 0.03060334548354149f, 0.30836477875709534f, +0.39187508821487427f, 0.9821379780769348f, 0.8486870527267456f, 0.6660338044166565f, 0.8791844844818115f, 0.5916897058486938f, 0.3092421293258667f, 0.5401073694229126f, +0.24966751039028168f, 0.08762587606906891f, 0.4103367030620575f, 0.3668580949306488f, 0.6737188100814819f, 0.008303871378302574f, 0.7335066795349121f, 0.9476314783096313f, +0.23927801847457886f, 0.306719571352005f, 0.7426089644432068f, 0.035788584500551224f, 0.3932966887950897f, 0.037085745483636856f, 0.46699902415275574f, 0.5126452445983887f, +0.42996808886528015f, 0.2669537663459778f, 0.8244670629501343f, 0.7631640434265137f, 0.6531066298484802f, 0.8037121891975403f, 0.7943021655082703f, 0.10930097103118896f, +0.7050992846488953f, 0.6544656753540039f, 0.40198904275894165f, 0.9408987164497375f, 0.8484829664230347f, 0.28050297498703003f, 0.8642184734344482f, 0.3287747800350189f, +0.026252252981066704f, 0.047863755375146866f, 0.718349039554596f, 0.9159729480743408f, 0.9348608255386353f, 0.19137023389339447f, 0.4112451374530792f, 0.8288905024528503f, +0.9221642017364502f, 0.6618903279304504f, 0.17987990379333496f, 0.7350476384162903f, 0.10492391884326935f, 0.9664602875709534f, 0.923636257648468f, 0.6115944385528564f, +0.16943754255771637f, 0.4841105043888092f, 0.6562164425849915f, 0.6002822518348694f, 0.8574981093406677f, 0.05680140480399132f, 0.3454750180244446f, 0.09877746552228928f, +0.9777671694755554f, 0.7824307680130005f, 0.3119942545890808f, 0.7204636335372925f, 0.46770232915878296f, 0.8608934879302979f, 0.33079004287719727f, 0.39730626344680786f, +0.9808794260025024f, 0.9575578570365906f, 0.764287531375885f, 0.9214178919792175f, 0.0645783543586731f, 0.637495756149292f, 0.17476633191108704f, 0.37086787819862366f, +0.9540402889251709f, 0.6059510111808777f, 0.4240674376487732f, 0.38462573289871216f, 0.4129798114299774f, 0.3445202708244324f, 0.22475925087928772f, 0.21639853715896606f, +0.614102303981781f, 0.6206591725349426f, 0.18422700464725494f, 0.037218671292066574f, 0.3426142632961273f, 0.8542953729629517f, 0.8552623987197876f, 0.4799243211746216f, +0.8665962219238281f, 0.5284790992736816f, 0.2657983899116516f, 0.46096986532211304f, 0.4431825280189514f, 0.3407555818557739f, 0.2943662703037262f, 0.9749453067779541f, +0.6106230616569519f, 0.15031559765338898f, 0.2735767066478729f, 0.5009169578552246f, 0.04185577109456062f, 0.6284672617912292f, 0.8613424301147461f, 0.6911043524742126f, +0.31053563952445984f, 0.8242689967155457f, 0.9513168931007385f, 0.22983461618423462f, 0.5963698029518127f, 0.9366469979286194f, 0.3693661391735077f, 0.8335773348808289f, +0.13490818440914154f, 0.1916419416666031f, 0.7563671469688416f, 0.5913371443748474f, 0.4517519474029541f, 0.9549094438552856f, 0.400436669588089f, 0.007120038848370314f, +0.6234480142593384f, 0.8198444247245789f, 0.9470192193984985f, 0.8137956261634827f, 0.6407521963119507f, 0.16783785820007324f, 0.2121816724538803f, 0.8586876392364502f, +0.015630705282092094f, 0.9493430852890015f, 0.1972871571779251f, 0.9846910238265991f, 0.5421859622001648f, 0.19604523479938507f, 0.2829907536506653f, 0.2602098286151886f, +0.6584094762802124f, 0.5232565999031067f, 0.5083087086677551f, 0.5459232330322266f, 0.12061743438243866f, 0.4143054187297821f, 0.7747611403465271f, 0.440393328666687f, +0.15947134792804718f, 0.7917476892471313f, 0.3459492325782776f, 0.09226857870817184f, 0.27136486768722534f, 0.4433935880661011f, 0.0979754626750946f, 0.5169127583503723f, +0.19680312275886536f, 0.7958139181137085f, 0.6678001880645752f, 0.19137009978294373f, 0.31272387504577637f, 0.8000611662864685f, 0.34603556990623474f, 0.21236516535282135f, +0.01951591484248638f, 0.11235333979129791f, 0.7172214984893799f, 0.6043177843093872f, 0.42752423882484436f, 0.3481273651123047f, 0.7283365726470947f, 0.6132356524467468f, +0.16897764801979065f, 0.0007807195652276278f, 0.1438034176826477f, 0.5549272298812866f, 0.5832964181900024f, 0.03422241657972336f, 0.4584687054157257f, 0.06837344169616699f, +0.5523499846458435f, 0.8466282486915588f, 0.30135422945022583f, 0.7438450455665588f, 0.6025938391685486f, 0.8480280637741089f, 0.7256223559379578f, 0.8150515556335449f, +0.5588323473930359f, 0.007195497862994671f, 0.8671315908432007f, 0.11131683737039566f, 0.6450126767158508f, 0.8956484198570251f, 0.6190277934074402f, 0.6325774788856506f, +0.778145968914032f, 0.25655508041381836f, 0.883120059967041f, 0.4163054823875427f, 0.5753334164619446f, 0.0004436727613210678f, 0.9072431325912476f, 0.7406535744667053f, +0.12013905495405197f, 0.47450125217437744f, 0.7021308541297913f, 0.5060895085334778f, 0.032257385551929474f, 0.4837624728679657f, 0.5158998966217041f, 0.5675989985466003f, +0.24236692488193512f, 0.3509606122970581f, 0.5784316658973694f, 0.8093425631523132f, 0.21853883564472198f, 0.06732476502656937f, 0.9311267137527466f, 0.7855325937271118f, +0.7652977705001831f, 0.9290730357170105f, 0.5731335282325745f, 0.12641271948814392f, 0.7028603553771973f, 0.6555680632591248f, 0.015854788944125175f, 0.9510052800178528f, +0.8723262548446655f, 0.15983085334300995f, 0.6991053223609924f, 0.18340753018856049f, 0.5320146679878235f, 0.3676303029060364f, 0.1894747018814087f, 0.18967962265014648f, +0.264847069978714f, 0.3868672549724579f, 0.11301529407501221f, 0.4060649275779724f, 0.8285214304924011f, 0.14288757741451263f, 0.5849402546882629f, 0.5220959186553955f, +0.540616512298584f, 0.9478784799575806f, 0.22253596782684326f, 0.13461834192276f, 0.8671337366104126f, 0.38491952419281006f, 0.8836873769760132f, 0.4789375066757202f, +0.7191035747528076f, 0.2809041440486908f, 0.07972310483455658f, 0.2783695459365845f, 0.7586045265197754f, 0.8100262880325317f, 0.8371826410293579f, 0.9719767570495605f, +0.9536291360855103f, 0.21521079540252686f, 0.09705490618944168f, 0.5819005966186523f, 0.6544351577758789f, 0.17734123766422272f, 0.9347724318504333f, 0.6856690049171448f, +0.4808816611766815f, 0.5286885499954224f, 0.6312552094459534f, 0.23589633405208588f, 0.3516086935997009f, 0.47821998596191406f, 0.5942447185516357f, 0.7837762832641602f, +0.0028282874263823032f, 0.34578680992126465f, 0.26758307218551636f, 0.18734155595302582f, 0.3033086955547333f, 0.15865373611450195f, 0.8444427251815796f, 0.7945296764373779f, +0.4804210066795349f, 0.7446842789649963f, 0.7228865027427673f, 0.7835599780082703f, 0.8287546038627625f, 0.33612367510795593f, 0.4810352623462677f, 0.25345560908317566f, +0.5431295037269592f, 0.7505230903625488f, 0.8888880610466003f, 0.6596397161483765f, 0.6339181661605835f, 0.8886434435844421f, 0.6925287246704102f, 0.7108995318412781f, +0.02794043906033039f, 0.3630233705043793f, 0.42593732476234436f, 0.36977607011795044f, 0.43634068965911865f, 0.6468888521194458f, 0.09753118455410004f, 0.3704761564731598f, +0.061140164732933044f, 0.26813870668411255f, 0.6115847826004028f, 0.5733893513679504f, 0.2678569257259369f, 0.4990190863609314f, 0.008216685615479946f, 0.5929709076881409f, +0.1570836901664734f, 0.0878911092877388f, 0.44015374779701233f, 0.9811526536941528f, 0.2434125393629074f, 0.5904507637023926f, 0.17357780039310455f, 0.8268932700157166f, +0.3981982171535492f, 0.928022027015686f, 0.7339058518409729f, 0.4310677647590637f, 0.27031803131103516f, 0.6993693113327026f, 0.3484872281551361f, 0.7740830779075623f, +0.8655160665512085f, 0.957706868648529f, 0.4490482211112976f, 0.5937590003013611f, 0.8412298560142517f, 0.5492183566093445f, 0.370606929063797f, 0.19431941211223602f, +0.2576330006122589f, 0.42992645502090454f, 0.16684159636497498f, 0.7566408514976501f, 0.9117031097412109f, 0.4201661944389343f, 0.011296657845377922f, 0.06720510125160217f, +0.7945694327354431f, 0.10713465511798859f, 0.8175801634788513f, 0.36869341135025024f, 0.5168217420578003f, 0.362461119890213f, 0.468130886554718f, 0.1675601750612259f, +0.6160256266593933f, 0.3058377206325531f, 0.6660053133964539f, 0.24635933339595795f, 0.32792162895202637f, 0.7708541750907898f, 0.9089305400848389f, 0.20351362228393555f, +0.7260991930961609f, 0.3007170855998993f, 0.3671262860298157f, 0.10861140489578247f, 0.4469834566116333f, 0.17466488480567932f, 0.3839651048183441f, 0.08765369653701782f, +0.6973205804824829f, 0.049962155520915985f, 0.42958658933639526f, 0.17866723239421844f, 0.07704882323741913f, 0.18417099118232727f, 0.3096950054168701f, 0.6340022683143616f, +0.08643634617328644f, 0.6609523892402649f, 0.7561352252960205f, 0.9487353563308716f, 0.10582276433706284f, 0.19454024732112885f, 0.8618329167366028f, 0.3238889276981354f, +0.35787057876586914f, 0.16376474499702454f, 0.23149868845939636f, 0.3619537055492401f, 0.3249804675579071f, 0.38776740431785583f, 0.05196923017501831f, 0.27591264247894287f, +0.7432647943496704f, 0.024910686537623405f, 0.7278044819831848f, 0.054502494633197784f, 0.2029266655445099f, 0.1642407327890396f, 0.9041558504104614f, 0.1894010752439499f, +0.8175778388977051f, 0.23293599486351013f, 0.5635069012641907f, 0.4335537254810333f, 0.2249782234430313f, 0.04058610275387764f, 0.4456125795841217f, 0.29313144087791443f, +0.294070303440094f, 0.32607653737068176f, 0.4160915017127991f, 0.4150952100753784f, 0.29006046056747437f, 0.2768794298171997f, 0.45414695143699646f, 0.0949375182390213f, +0.8960700631141663f, 0.5318973660469055f, 0.5304868221282959f, 0.16135123372077942f, 0.08520647883415222f, 0.8060282468795776f, 0.5889759063720703f, 0.7140882015228271f, +0.18520639836788177f, 0.9179180860519409f, 0.15459908545017242f, 0.1288103610277176f, 0.40690943598747253f, 0.11654497683048248f, 0.2654067277908325f, 0.9502845406532288f, +0.37992095947265625f, 0.892758309841156f, 0.499534547328949f, 0.12326978147029877f, 0.0474139079451561f, 0.14402282238006592f, 0.7819344401359558f, 0.5695631504058838f, +0.825009286403656f, 0.5711237192153931f, 0.8109490275382996f, 0.7128321528434753f, 0.5639234781265259f, 0.9191305041313171f, 0.8855945467948914f, 0.08575396239757538f, +0.23220109939575195f, 0.9099938273429871f, 0.595970630645752f, 0.40018072724342346f, 0.9046453833580017f, 0.6982000470161438f, 0.6012982726097107f, 0.05934341251850128f, +0.13325326144695282f, 0.6097130179405212f, 0.45702019333839417f, 0.4787065088748932f, 0.27978280186653137f, 0.30983105301856995f, 0.7426313757896423f, 0.8115976452827454f, +0.9401743412017822f, 0.09439300000667572f, 0.902269721031189f, 0.9668793082237244f, 0.6574303507804871f, 0.4414519667625427f, 0.38905027508735657f, 0.6170127391815186f, +0.8276174664497375f, 0.2788861095905304f, 0.6595304608345032f, 0.14441385865211487f, 0.05910181254148483f, 0.5633865594863892f, 0.888672947883606f, 0.6890159249305725f, +0.23771004378795624f, 0.9604065418243408f, 0.5221973657608032f, 0.4640384614467621f, 0.7013182640075684f, 0.7953991889953613f, 0.10175934433937073f, 0.9994770884513855f, +0.40792953968048096f, 0.4436379671096802f, 0.3647324740886688f, 0.055800437927246094f, 0.24418525397777557f, 0.6709725260734558f, 0.8084666132926941f, 0.35558807849884033f, +0.8831319212913513f, 0.5389668345451355f, 0.505882740020752f, 0.4420241713523865f, 0.07421953231096268f, 0.20656582713127136f, 0.5984596610069275f, 0.9260271787643433f, +0.6422170996665955f, 0.10111727565526962f, 0.5609521865844727f, 0.7642567157745361f, 0.7017594575881958f, 0.08325769752264023f, 0.7879993319511414f, 0.29322507977485657f, +0.9602352380752563f, 0.8413697481155396f, 0.2925180196762085f, 0.016499435529112816f, 0.8392943739891052f, 0.5716274976730347f, 0.5651977062225342f, 0.8037294149398804f, +0.9647114276885986f, 0.8615687489509583f, 0.30786800384521484f, 0.729218065738678f, 0.7056022882461548f, 0.45981577038764954f, 0.9565243124961853f, 0.05856209993362427f, +0.31916967034339905f, 0.4864477813243866f, 0.7622712850570679f, 0.19807212054729462f, 0.06423472613096237f, 0.9996717572212219f, 0.49248942732810974f, 0.8476677536964417f, +0.03690696135163307f, 0.797228217124939f, 0.7572812438011169f, 0.8083889484405518f, 0.5746069550514221f, 0.8134636878967285f, 0.20753532648086548f, 0.039043791592121124f, +0.9919372797012329f, 0.8512485027313232f, 0.27259430289268494f, 0.17635470628738403f, 0.2012537121772766f, 0.1969720870256424f, 0.6005719900131226f, 0.06718020886182785f, +0.12691427767276764f, 0.6226237416267395f, 0.17205829918384552f, 0.6205074787139893f, 0.8000485301017761f, 0.44026073813438416f, 0.351555198431015f, 0.23691575229167938f, +0.7048572301864624f, 0.4720473289489746f, 0.6457710862159729f, 0.28823649883270264f, 0.1272784024477005f, 0.11286032199859619f, 0.01569163240492344f, 0.7989340424537659f, +0.390990674495697f, 0.48098400235176086f, 0.9359906911849976f, 0.201895609498024f, 0.3477218449115753f, 0.580519437789917f, 0.6623498797416687f, 0.32896479964256287f, +0.006828047800809145f, 0.5393872857093811f, 0.5537377595901489f, 0.30913522839546204f, 0.9677290320396423f, 0.5004886388778687f, 0.3512107729911804f, 0.39091622829437256f, +0.24035683274269104f, 0.9310444593429565f, 0.467054545879364f, 0.2927834093570709f, 0.7007496356964111f, 0.4921973943710327f, 0.9037297368049622f, 0.33610838651657104f, +0.7542761564254761f, 0.8763344287872314f, 0.8870048522949219f, 0.974881112575531f, 0.6235992908477783f, 0.7423232197761536f, 0.06314639002084732f, 0.7477278113365173f, +0.3578687906265259f, 0.6062124967575073f, 0.09227955341339111f, 0.603508710861206f, 0.8409155011177063f, 0.13906161487102509f, 0.041837889701128006f, 0.08982342481613159f, +0.41574543714523315f, 0.9674440622329712f, 0.07284131646156311f, 0.4670821726322174f, 0.18993085622787476f, 0.649562418460846f, 0.7581999897956848f, 0.5251166224479675f, +0.27706465125083923f, 0.9805639982223511f, 0.8455171585083008f, 0.9363960027694702f, 0.11207371205091476f, 0.8577340841293335f, 0.12147458642721176f, 0.005086296238005161f, +0.777409553527832f, 0.5466611981391907f, 0.005985919386148453f, 0.07415121793746948f, 0.3858410716056824f, 0.4239594638347626f, 0.2826186418533325f, 0.8391445875167847f, +0.09688737243413925f, 0.6800577044487f, 0.851786732673645f, 0.08938092738389969f, 0.7576434016227722f, 0.5456912517547607f, 0.625384509563446f, 0.008736819960176945f, +0.9538983702659607f, 0.41681769490242004f, 0.821410059928894f, 0.8772037029266357f, 0.24860838055610657f, 0.8712560534477234f, 0.021311543881893158f, 0.04841886833310127f, +0.19568851590156555f, 0.335456520318985f, 0.7782842516899109f, 0.15578711032867432f, 0.6024556756019592f, 0.22544775903224945f, 0.2724454998970032f, 0.06550893932580948f, +0.775434672832489f, 0.7981260418891907f, 0.9890965819358826f, 0.16313914954662323f, 0.36868777871131897f, 0.6786972284317017f, 0.10003024339675903f, 0.8531438112258911f, +0.9204910397529602f, 0.5797150731086731f, 0.941853404045105f, 0.44475042819976807f, 0.5295396447181702f, 0.6624387502670288f, 0.6775606870651245f, 0.3526791036128998f, +0.48815858364105225f, 0.8355444669723511f, 0.5006981492042542f, 0.04803542420268059f, 0.7302091717720032f, 0.893435001373291f, 0.8712852597236633f, 0.44158926606178284f, +0.3279225826263428f, 0.9028953909873962f, 0.17561157047748566f, 0.3595573604106903f, 0.8873624205589294f, 0.25483280420303345f, 0.26132330298423767f, 0.9971845149993896f, +0.46782103180885315f, 0.917307436466217f, 0.014052903279662132f, 0.15234537422657013f, 0.9756497144699097f, 0.4478117823600769f, 0.11080148071050644f, 0.877007007598877f, +0.3772326111793518f, 0.6473819017410278f, 0.07021810859441757f, 0.6097720861434937f, 0.7620729207992554f, 0.13854262232780457f, 0.3624125123023987f, 0.8671474456787109f, +0.9701396226882935f, 0.5230612754821777f, 0.5388169884681702f, 0.8580335974693298f, 0.09689515829086304f, 0.6318455338478088f, 0.9267210364341736f, 0.9615128040313721f, +0.959266722202301f, 0.0766434520483017f, 0.8419438004493713f, 0.4925040602684021f, 0.05540134012699127f, 0.47638094425201416f, 0.16862599551677704f, 0.33895689249038696f, +0.4905138909816742f, 0.4564109742641449f, 0.3262558877468109f, 0.2978368401527405f, 0.8848337531089783f, 0.48985525965690613f, 0.14643418788909912f, 0.3479549288749695f, +0.9280268549919128f, 0.6502623558044434f, 0.3208962380886078f, 0.5999391078948975f, 0.5003381967544556f, 0.0060300747863948345f, 0.5955868363380432f, 0.45818522572517395f, +0.8960708975791931f, 0.588397204875946f, 0.5281157493591309f, 0.8958699703216553f, 0.9707770943641663f, 0.5734916925430298f, 0.27753719687461853f, 0.4620599150657654f, +0.315616637468338f, 0.7538094520568848f, 0.5513851642608643f, 0.4332631826400757f, 0.2375941127538681f, 0.1962735652923584f, 0.8229369521141052f, 0.4605933129787445f, +0.40803155303001404f, 0.15894421935081482f, 0.3520931005477905f, 0.6446044445037842f, 0.5019424557685852f, 0.0005880011012777686f, 0.16899260878562927f, 0.22857969999313354f, +0.6977784037590027f, 0.2931480407714844f, 0.15944501757621765f, 0.5441648364067078f, 0.30384716391563416f, 0.5889105796813965f, 0.48712068796157837f, 0.695157527923584f, +0.8770695328712463f, 0.5658621191978455f, 0.7606198191642761f, 0.8443379998207092f, 0.18922095000743866f, 0.11988980323076248f, 0.029513487592339516f, 0.37818044424057007f, +0.21439465880393982f, 0.7057740688323975f, 0.11636488139629364f, 0.4743667542934418f, 0.7787714600563049f, 0.46896234154701233f, 0.58470618724823f, 0.6723648309707642f, +0.7903940081596375f, 0.08876622468233109f, 0.029203573241829872f, 0.6110236048698425f, 0.8662855625152588f, 0.7182940244674683f, 0.4150349497795105f, 0.940092146396637f, +0.5570651888847351f, 0.885570228099823f, 0.2115577906370163f, 0.4162774085998535f, 0.46361079812049866f, 0.925413191318512f, 0.3009278178215027f, 0.23521754145622253f, +0.7965640425682068f, 0.7042579650878906f, 0.9185214638710022f, 0.7319431900978088f, 0.037859957665205f, 0.2852255403995514f, 0.9977867007255554f, 0.36928611993789673f, +0.8882667422294617f, 0.5523806810379028f, 0.3809061348438263f, 0.45396164059638977f, 0.9189316034317017f, 0.41825172305107117f, 0.53425532579422f, 0.5080647468566895f, +0.9667157530784607f, 0.042457323521375656f, 0.4640943109989166f, 0.13027676939964294f, 0.953005850315094f, 0.6437437534332275f, 0.741248607635498f, 0.2161075323820114f, +0.7917523980140686f, 0.25458934903144836f, 0.25780242681503296f, 0.18959882855415344f, 0.26390504837036133f, 0.022748680785298347f, 0.7968881130218506f, 0.5397112369537354f, +0.47252798080444336f, 0.8698082566261292f, 0.42042285203933716f, 0.8936896920204163f, 0.33602553606033325f, 0.005797917488962412f, 0.18484480679035187f, 0.8019466400146484f, +0.006403063423931599f, 0.6985098719596863f, 0.5629191994667053f, 0.2983896732330322f, 0.35308220982551575f, 0.9390084743499756f, 0.42216062545776367f, 0.4447689652442932f, +0.2983892858028412f, 0.9272488951683044f, 0.464118629693985f, 0.048607487231492996f, 0.1921876221895218f, 0.6554802656173706f, 0.21687519550323486f, 0.5496929287910461f, +0.6532245874404907f, 0.35411471128463745f, 0.6865168213844299f, 0.19027289748191833f, 0.7401288747787476f, 0.42726802825927734f, 0.06870941817760468f, 0.9844107627868652f, +0.301838219165802f, 0.9662032127380371f, 0.665595531463623f, 0.22128146886825562f, 0.8404145836830139f, 0.23165129125118256f, 0.8271008729934692f, 0.016781020909547806f, +0.7162794470787048f, 0.8377975225448608f, 0.6728551983833313f, 0.9202358722686768f, 0.6332002878189087f, 0.313384473323822f, 0.7873887419700623f, 0.31341302394866943f, +0.687384307384491f, 0.016673728823661804f, 0.14871083199977875f, 0.36502307653427124f, 0.5801568031311035f, 0.4414828419685364f, 0.4232623875141144f, 0.4503571391105652f, +0.7295133471488953f, 0.819192111492157f, 0.6401433944702148f, 0.713934063911438f, 0.07384061813354492f, 0.48457324504852295f, 0.5643014311790466f, 0.528032124042511f, +0.1428811252117157f, 0.11187805980443954f, 0.1403973549604416f, 0.49143558740615845f, 0.3980911076068878f, 0.7849522829055786f, 0.6521505117416382f, 0.36232495307922363f, +0.04486144334077835f, 0.5008663535118103f, 0.04317556694149971f, 0.43987569212913513f, 0.6534513235092163f, 0.70079106092453f, 0.8714777231216431f, 0.21534359455108643f, +0.9284048080444336f, 0.09178569912910461f, 0.8439619541168213f, 0.42126327753067017f, 0.7092680335044861f, 0.31877195835113525f, 0.08364274352788925f, 0.41250020265579224f, +0.3058212995529175f, 0.1579694002866745f, 0.651192843914032f, 0.9922699928283691f, 0.42213869094848633f, 0.509020984172821f, 0.8722463846206665f, 0.10834624618291855f, +0.27852627635002136f, 0.8734190464019775f, 0.5996342301368713f, 0.3827619254589081f, 0.21240253746509552f, 0.31473425030708313f, 0.23572967946529388f, 0.7288532853126526f, +0.35592952370643616f, 0.9910255670547485f, 0.5624173283576965f, 0.7986860275268555f, 0.8721681833267212f, 0.04341331124305725f, 0.6723489761352539f, 0.7330877184867859f, +0.027753809466958046f, 0.5303154587745667f, 0.907764196395874f, 0.6288213729858398f, 0.018108341842889786f, 0.38042017817497253f, 0.5746011734008789f, 0.27893897891044617f, +0.7212968468666077f, 0.2031823843717575f, 0.4648122787475586f, 0.01892554573714733f, 0.9026064872741699f, 0.6462382078170776f, 0.5934491157531738f, 0.3724883794784546f, +0.39381974935531616f, 0.8607680201530457f, 0.17299433052539825f, 0.19371236860752106f, 0.5544094443321228f, 0.7520345449447632f, 0.6458931565284729f, 0.6086829304695129f, +0.5895572304725647f, 0.9672800302505493f, 0.9551965594291687f, 0.8923064470291138f, 0.9591186046600342f, 0.05334797129034996f, 0.24469879269599915f, 0.1235688254237175f, +0.31784653663635254f, 0.5744257569313049f, 0.8119767308235168f, 0.23331806063652039f, 0.39811214804649353f, 0.05423199385404587f, 0.9306347370147705f, 0.7167654037475586f, +0.34510183334350586f, 0.917849600315094f, 0.35431280732154846f, 0.8188804984092712f, 0.964927613735199f, 0.46997854113578796f, 0.2915675938129425f, 0.8067923188209534f, +0.6194761395454407f, 0.45159783959388733f, 0.7550687193870544f, 0.2997559607028961f, 0.1810096800327301f, 0.46546170115470886f, 0.5410165786743164f, 0.47659066319465637f, +0.6997564435005188f, 0.3801865875720978f, 0.5688121318817139f, 0.3222130239009857f, 0.3910089135169983f, 0.6743937730789185f, 0.009039776399731636f, 0.07005223631858826f, +0.7524133324623108f, 0.7019193172454834f, 0.45754358172416687f, 0.25336501002311707f, 0.7497686743736267f, 0.42347317934036255f, 0.2236919403076172f, 0.8446716666221619f, +0.21357561647891998f, 0.2110658586025238f, 0.839157223701477f, 0.37911880016326904f, 0.8714489936828613f, 0.484927237033844f, 0.1589733213186264f, 0.5603060126304626f, +0.81361985206604f, 0.8381986021995544f, 0.5425510406494141f, 0.21851035952568054f, 0.013197490014135838f, 0.5946494936943054f, 0.6703346967697144f, 0.8237929344177246f, +0.17843955755233765f, 0.524376392364502f, 0.2063877135515213f, 0.3985165059566498f, 0.29280707240104675f, 0.4187224805355072f, 0.05762545019388199f, 0.31962335109710693f, +0.9393342733383179f, 0.5467918515205383f, 0.5924311876296997f, 0.7612255811691284f, 0.2235499769449234f, 0.3560076951980591f, 0.4695352613925934f, 0.564106285572052f, +0.29715496301651f, 0.37018418312072754f, 0.8002182245254517f, 0.18081752955913544f, 0.021188780665397644f, 0.9509347677230835f, 0.7531132102012634f, 0.24871492385864258f, +0.8073543906211853f, 0.29048654437065125f, 0.6298215985298157f, 0.8873562216758728f, 0.23396717011928558f, 0.7049941420555115f, 0.4058549404144287f, 0.21982765197753906f, +0.6882420182228088f, 0.32096201181411743f, 0.7932183742523193f, 0.9054760932922363f, 0.5769982933998108f, 0.015562760643661022f, 0.5714678168296814f, 0.5167279839515686f, +0.3880770802497864f, 0.36475732922554016f, 0.9506531357765198f, 0.4004315733909607f, 0.6511412262916565f, 0.1764528900384903f, 0.35199692845344543f, 0.5299108624458313f, +0.4015946388244629f, 0.42158547043800354f, 0.23378881812095642f, 0.07814636081457138f, 0.08229386061429977f, 0.42553097009658813f, 0.6284298300743103f, 0.09890905022621155f, +0.334084153175354f, 0.9938621520996094f, 0.4557456374168396f, 0.7937677502632141f, 0.3199128806591034f, 0.699122965335846f, 0.874841034412384f, 0.7023957967758179f, +0.7288681864738464f, 0.937921404838562f, 0.9077147245407104f, 0.9031950831413269f, 0.6686200499534607f, 0.2172016054391861f, 0.3305816054344177f, 0.7687236070632935f, +0.5730177760124207f, 0.16394294798374176f, 0.5382833480834961f, 0.6165270805358887f, 0.8732842803001404f, 0.2568347156047821f, 0.1245109885931015f, 0.820201575756073f, +0.7139118313789368f, 0.5094449520111084f, 0.3153921663761139f, 0.37945982813835144f, 0.8925643563270569f, 0.9302091598510742f, 0.44904375076293945f, 0.45290058851242065f, +0.29857707023620605f, 0.07445666939020157f, 0.23476971685886383f, 0.6322699785232544f, 0.5286797881126404f, 0.5771235227584839f, 0.7714168429374695f, 0.33229416608810425f, +0.15878057479858398f, 0.3072812259197235f, 0.004771864507347345f, 0.15014804899692535f, 0.47915709018707275f, 0.4503422975540161f, 0.15984947979450226f, 0.528197169303894f, +0.6944226026535034f, 0.2392735332250595f, 0.2079291194677353f, 0.7462050914764404f, 0.43707823753356934f, 0.19080489873886108f, 0.053921476006507874f, 0.3878278434276581f, +0.013919860124588013f, 0.30615732073783875f, 0.36163946986198425f, 0.014963737688958645f, 0.7772631049156189f, 0.6287007331848145f, 0.21555082499980927f, 0.11786506325006485f, +0.4538213908672333f, 0.9575459957122803f, 0.02196390926837921f, 0.9561746120452881f, 0.9758824110031128f, 0.19207356870174408f, 0.5294428467750549f, 0.7882832884788513f, +0.15124282240867615f, 0.6837484240531921f, 0.6214256286621094f, 0.23394517600536346f, 0.9523361325263977f, 0.2610885202884674f, 0.9510846734046936f, 0.6741993427276611f, +0.7537277936935425f, 0.5752679705619812f, 0.3755171597003937f, 0.2785089612007141f, 0.5216704607009888f, 0.1060330718755722f, 0.8050330281257629f, 0.35784196853637695f, +0.20949161052703857f, 0.4924499988555908f, 0.06198651343584061f, 0.5829361081123352f, 0.20081165432929993f, 0.783513605594635f, 0.05829455703496933f, 0.5699390769004822f, +0.7992810606956482f, 0.5197476744651794f, 0.36447104811668396f, 0.6004897952079773f, 0.7574167251586914f, 0.7452828884124756f, 0.28765764832496643f, 0.446636825799942f, +0.7599796056747437f, 0.5378347039222717f, 0.353752464056015f, 0.025641508400440216f, 0.5140120387077332f, 0.35988718271255493f, 0.42556527256965637f, 0.632785439491272f, +0.2294287383556366f, 0.9271490573883057f, 0.14493398368358612f, 0.9758065342903137f, 0.2612832486629486f, 0.024254202842712402f, 0.0750199630856514f, 0.7842451333999634f, +0.7813973426818848f, 0.27819499373435974f, 0.2600674331188202f, 0.5624069571495056f, 0.17804567515850067f, 0.2872774004936218f, 0.07393299043178558f, 0.04890415072441101f, +0.438466876745224f, 0.24706441164016724f, 0.20919643342494965f, 0.9846710562705994f, 0.5084645748138428f, 0.9610057473182678f, 0.013509383425116539f, 0.08859146386384964f, +0.3094245493412018f, 0.05912397429347038f, 0.46369537711143494f, 0.8669695854187012f, 0.9372279644012451f, 0.7053840160369873f, 0.6908172965049744f, 0.37926799058914185f, +0.8689422607421875f, 0.624511182308197f, 0.3661941885948181f, 0.8986074328422546f, 0.68231201171875f, 0.7346780896186829f, 0.4033206105232239f, 0.8218817114830017f, +0.5291635990142822f, 0.38685840368270874f, 0.5462462306022644f, 0.7270634174346924f, 0.8918612003326416f, 0.3022889196872711f, 0.3569483458995819f, 0.23700211942195892f, +0.8632548451423645f, 0.10034217685461044f, 0.18450352549552917f, 0.39271238446235657f, 0.9879974722862244f, 0.8192734122276306f, 0.4935154616832733f, 0.09951253980398178f, +0.8644577860832214f, 0.1961018592119217f, 0.8161185383796692f, 0.6858221292495728f, 0.2680346965789795f, 0.7680106163024902f, 0.16315163671970367f, 0.6212217807769775f, +0.4953015446662903f, 0.42022421956062317f, 0.5507172346115112f, 0.22405320405960083f, 0.10397335886955261f, 0.06048613414168358f, 0.6887930631637573f, 0.4839523732662201f, +0.6424888968467712f, 0.6222468614578247f, 0.023936990648508072f, 0.28109148144721985f, 0.2810346186161041f, 0.4032692313194275f, 0.5610337257385254f, 0.548689067363739f, +0.5032067894935608f, 0.6077311038970947f, 0.735826849937439f, 0.8099501729011536f, 0.8366785049438477f, 0.5082440376281738f, 0.6271710395812988f, 0.38559868931770325f, +0.2043740451335907f, 0.5289480090141296f, 0.41118910908699036f, 0.04152604937553406f, 0.3339235484600067f, 0.25895845890045166f, 0.4773017466068268f, 0.4316120445728302f, +0.28547969460487366f, 0.20411427319049835f, 0.8362213969230652f, 0.8687147498130798f, 0.7828008532524109f, 0.15786106884479523f, 0.349984347820282f, 0.7594353556632996f, +0.7520442008972168f, 0.21110445261001587f, 0.7772567868232727f, 0.8333317041397095f, 0.35380682349205017f, 0.417817085981369f, 0.6841844916343689f, 0.021905764937400818f, +0.03142762556672096f, 0.6619466543197632f, 0.7711803913116455f, 0.6896727681159973f, 0.8923365473747253f, 0.1899297535419464f, 0.04939785972237587f, 0.1377006620168686f, +0.7915573716163635f, 0.7948986887931824f, 0.431697279214859f, 0.6876394748687744f, 0.40242305397987366f, 0.18581454455852509f, 0.589067816734314f, 0.12502016127109528f, +0.7783874273300171f, 0.05580662935972214f, 0.13766950368881226f, 0.6996622085571289f, 0.4012327194213867f, 0.4624558389186859f, 0.31660792231559753f, 0.6386673450469971f, +0.11757994443178177f, 0.3576241433620453f, 0.4381485879421234f, 0.3472304940223694f, 0.5288342833518982f, 0.5466907620429993f, 0.9438456892967224f, 0.4966447651386261f, +0.39732977747917175f, 0.6834830641746521f, 0.7520975470542908f, 0.4794718623161316f, 0.15537117421627045f, 0.18753378093242645f, 0.23241597414016724f, 0.16679149866104126f, +0.8956969976425171f, 0.4169296622276306f, 0.42402327060699463f, 0.12986330687999725f, 0.516704797744751f, 0.9983184933662415f, 0.8766866326332092f, 0.5254004597663879f, +0.18229949474334717f, 0.519529402256012f, 0.8106110692024231f, 0.2190675437450409f, 0.293265163898468f, 0.9882149696350098f, 0.0970287173986435f, 0.7939143180847168f, +0.03590642660856247f, 0.654231071472168f, 0.8346909284591675f, 0.17594796419143677f, 0.7426590919494629f, 0.9489727020263672f, 0.6425093412399292f, 0.7034870982170105f, +0.44303858280181885f, 0.458699107170105f, 0.5231644511222839f, 0.9590665698051453f, 0.05438464134931564f, 0.2575888931751251f, 0.5712770819664001f, 0.7670767307281494f, +0.8022801876068115f, 0.25766685605049133f, 0.5517154335975647f, 0.17690613865852356f, 0.5217595100402832f, 0.30311185121536255f, 0.7695974111557007f, 0.39923569560050964f, +0.9408381581306458f, 0.6150451302528381f, 0.35479921102523804f, 0.01955980807542801f, 0.9091067314147949f, 0.508545458316803f, 0.7331540584564209f, 0.24681952595710754f, +0.027548469603061676f, 0.19176556169986725f, 0.2131754755973816f, 0.3513213098049164f, 0.8434374332427979f, 0.044843584299087524f, 0.749277651309967f, 0.5971949100494385f, +0.6563888192176819f, 0.1337520033121109f, 0.6561764478683472f, 0.8985982537269592f, 0.6299064755439758f, 0.26553675532341003f, 0.4281911253929138f, 0.5844019055366516f, +0.6072609424591064f, 0.704706072807312f, 0.23820218443870544f, 0.3150549829006195f, 0.13641266524791718f, 0.29499220848083496f, 0.8804570436477661f, 0.5443235635757446f, +0.060450609773397446f, 0.7269315719604492f, 0.46310949325561523f, 0.5718327164649963f, 0.7316991686820984f, 0.842413067817688f, 0.6966978311538696f, 0.687076210975647f, +0.21482707560062408f, 0.8193702697753906f, 0.8962634205818176f, 0.09076661616563797f, 0.10109413415193558f, 0.07487205415964127f, 0.2580733597278595f, 0.3563286364078522f, +0.9165140390396118f, 0.7022191882133484f, 0.3906008005142212f, 0.4697701334953308f, 0.2962527275085449f, 0.5772793889045715f, 0.6977093815803528f, 0.1959126889705658f, +0.8439453840255737f, 0.6743677854537964f, 0.8736213445663452f, 0.3429132103919983f, 0.051263608038425446f, 0.9815855622291565f, 0.89380943775177f, 0.7659469246864319f, +0.793502151966095f, 0.47815921902656555f, 0.5613683462142944f, 0.92656409740448f, 0.2246248424053192f, 0.9869731068611145f, 0.8338152766227722f, 0.564954400062561f, +0.4085352122783661f, 0.7527989745140076f, 0.6234870553016663f, 0.682719886302948f, 0.3183470368385315f, 0.3843110501766205f, 0.6802619099617004f, 0.0433548167347908f, +0.9483103156089783f, 0.14021740853786469f, 0.001633943640626967f, 0.5368114113807678f, 0.7195616364479065f, 0.546907365322113f, 0.36175522208213806f, 0.9153832197189331f, +0.3827231228351593f, 0.395027220249176f, 0.11891374737024307f, 0.9105477929115295f, 0.46282726526260376f, 0.13788673281669617f, 0.9429676532745361f, 0.5192977786064148f, +0.4420981705188751f, 0.3639383614063263f, 0.5281979441642761f, 0.8922379612922668f, 0.5553701519966125f, 0.737011194229126f, 0.03038216568529606f, 0.4920673668384552f, +0.6192810535430908f, 0.8451806306838989f, 0.16381250321865082f, 0.05461631342768669f, 0.4945214092731476f, 0.1150321215391159f, 0.39335501194000244f, 0.8898885250091553f, +0.5455487370491028f, 0.7792816758155823f, 0.49969375133514404f, 0.6145980954170227f, 0.27819135785102844f, 0.43398144841194153f, 0.385114461183548f, 0.5295103192329407f, +0.7491922974586487f, 0.4450540542602539f, 0.20985285937786102f, 0.16426996886730194f, 0.8976882696151733f, 0.3463824689388275f, 0.8857007622718811f, 0.42829155921936035f, +0.31136512756347656f, 0.43713444471359253f, 0.5581885576248169f, 0.695438802242279f, 0.5499984622001648f, 0.752829909324646f, 0.07857808470726013f, 0.8886012434959412f, +0.05938249081373215f, 0.24815785884857178f, 0.5577279925346375f, 0.541041374206543f, 0.9604321718215942f, 0.054902590811252594f, 0.2200559377670288f, 0.4530153274536133f, +0.6575153470039368f, 0.7014409303665161f, 0.40225884318351746f, 0.6057132482528687f, 0.21141831576824188f, 0.5124315023422241f, 0.33676350116729736f, 0.7609400749206543f, +0.002623931970447302f, 0.787254273891449f, 0.44434404373168945f, 0.3847542405128479f, 0.16621513664722443f, 0.4558976888656616f, 0.6868895888328552f, 0.3149009943008423f, +0.11138653010129929f, 0.9819275140762329f, 0.22390682995319366f, 0.31434518098831177f, 0.10568612068891525f, 0.42811766266822815f, 0.09985758364200592f, 0.27160146832466125f, +0.9381162524223328f, 0.9576501846313477f, 0.878541886806488f, 0.18039779365062714f, 0.3896731436252594f, 0.9967629313468933f, 0.6185286045074463f, 0.4317064881324768f, +0.4366112947463989f, 0.3497409224510193f, 0.9906592965126038f, 0.6763800978660583f, 0.26478058099746704f, 0.3308503329753876f, 0.8653013110160828f, 0.8325827121734619f, +0.37094733119010925f, 0.5834071040153503f, 0.1398797333240509f, 0.922717273235321f, 0.04131435230374336f, 0.9848062992095947f, 0.6574929356575012f, 0.26492100954055786f, +0.11597484350204468f, 0.23797373473644257f, 0.3544784188270569f, 0.6119136810302734f, 0.7691287994384766f, 0.11463494598865509f, 0.8811596035957336f, 0.14661285281181335f, +0.6941922903060913f, 0.9708694815635681f, 0.871356725692749f, 0.5539070963859558f, 0.10876040160655975f, 0.25673598051071167f, 0.2425660938024521f, 0.5328465104103088f, +0.506695032119751f, 0.814741849899292f, 0.39064881205558777f, 0.1463872492313385f, 0.3431810140609741f, 0.5793800354003906f, 0.22160322964191437f, 0.08063546568155289f, +0.874458372592926f, 0.13019496202468872f, 0.2634768486022949f, 0.11286133527755737f, 0.8061572313308716f, 0.3190253674983978f, 0.9830909371376038f, 0.5920678377151489f, +0.09980954229831696f, 0.7341018915176392f, 0.28304460644721985f, 0.2626553475856781f, 0.2332257330417633f, 0.0746818408370018f, 0.9400532841682434f, 0.36089959740638733f, +0.8952643275260925f, 0.3689083755016327f, 0.6778759360313416f, 0.0362304262816906f, 0.5306279063224792f, 0.23075446486473083f, 0.7561749219894409f, 0.2747475504875183f, +0.11600616574287415f, 0.6870352029800415f, 0.6649971008300781f, 0.31865671277046204f, 0.788766622543335f, 0.110710509121418f, 0.6903781294822693f, 0.32969164848327637f, +0.9018299579620361f, 0.5655155181884766f, 0.16298586130142212f, 0.8308546543121338f, 0.9458458423614502f, 0.4378262758255005f, 0.24735434353351593f, 0.02661280520260334f, +0.34846562147140503f, 0.510089099407196f, 0.6606185436248779f, 0.19791878759860992f, 0.7053223848342896f, 0.015483206138014793f, 0.729307234287262f, 0.5311715602874756f, +0.9363695383071899f, 0.8167518973350525f, 0.03775252774357796f, 0.28366127610206604f, 0.3060404658317566f, 0.9876776337623596f, 0.15489540994167328f, 0.3945222795009613f, +0.17633821070194244f, 0.5667176842689514f, 0.45685872435569763f, 0.7855088114738464f, 0.6756225228309631f, 0.39293351769447327f, 0.22821010649204254f, 0.5179244875907898f, +0.27841100096702576f, 0.3158692717552185f, 0.9256234765052795f, 0.961291491985321f, 0.9573110938072205f, 0.6929764747619629f, 0.7720636129379272f, 0.31506872177124023f, +0.3884672522544861f, 0.6251557469367981f, 0.5683544278144836f, 0.010351406410336494f, 0.15512189269065857f, 0.22711043059825897f, 0.6832786202430725f, 0.31106632947921753f, +0.7151873111724854f, 0.4496996998786926f, 0.7230236530303955f, 0.917670726776123f, 0.2188187539577484f, 0.5169369578361511f, 0.26073548197746277f, 0.3430219888687134f, +0.5252808928489685f, 0.5002608299255371f, 0.9483919143676758f, 0.5088211297988892f, 0.8662546277046204f, 0.9540798664093018f, 0.9607253074645996f, 0.1270977109670639f, +0.9082531929016113f, 0.6904487013816833f, 0.3088904917240143f, 0.47654059529304504f, 0.9422359466552734f, 0.13840465247631073f, 0.494537889957428f, 0.48051756620407104f, +0.25789329409599304f, 0.8581072092056274f, 0.1763962209224701f, 0.15158960223197937f, 0.07572829723358154f, 0.17649705708026886f, 0.08357001096010208f, 0.8953366875648499f, +0.9302242398262024f, 0.07039134204387665f, 0.3220342993736267f, 0.1815095990896225f, 0.4975452125072479f, 0.0053161028772592545f, 0.01700383797287941f, 0.429565966129303f, +0.5525976419448853f, 0.4975135326385498f, 0.41740527749061584f, 0.8733388781547546f, 0.3038650155067444f, 0.7210375666618347f, 0.31007811427116394f, 0.2448042929172516f, +0.4687861204147339f, 0.326163649559021f, 0.28952255845069885f, 0.32630595564842224f, 0.4215506613254547f, 0.7828609943389893f, 0.17943081259727478f, 0.7302614450454712f, +0.47123220562934875f, 0.028099527582526207f, 0.4910396635532379f, 0.5455614328384399f, 0.21304059028625488f, 0.9984355568885803f, 0.9440119862556458f, 0.787112832069397f, +0.34748348593711853f, 0.0069352444261312485f, 0.3573015332221985f, 0.7758439779281616f, 0.8687597513198853f, 0.17037153244018555f, 0.1864287406206131f, 0.9057275056838989f, +0.6272719502449036f, 0.5055411458015442f, 0.8275873064994812f, 0.35738658905029297f, 0.5007798671722412f, 0.7571007609367371f, 0.5193693041801453f, 0.30464616417884827f, +0.6029821038246155f, 0.43667033314704895f, 0.22273318469524384f, 0.5706658959388733f, 0.23196150362491608f, 0.9074828624725342f, 0.6262467503547668f, 0.06631328165531158f, +0.4891640841960907f, 0.4734813868999481f, 0.7874967455863953f, 0.37754911184310913f, 0.18371014297008514f, 0.2734706997871399f, 0.9941938519477844f, 0.24390389025211334f, +0.5335838198661804f, 0.934577226638794f, 0.6275895833969116f, 0.9307780265808105f, 0.9087885022163391f, 0.4412190914154053f, 0.727721095085144f, 0.18447084724903107f, +0.1939249038696289f, 0.9297860860824585f, 0.7434849143028259f, 0.20691972970962524f, 0.1200232207775116f, 0.46895861625671387f, 0.05578979477286339f, 0.6992902159690857f, +0.5069512128829956f, 0.38133662939071655f, 0.9221917986869812f, 0.877936840057373f, 0.23873549699783325f, 0.8565439581871033f, 0.5632796883583069f, 0.8793394565582275f, +0.9022432565689087f, 0.40463390946388245f, 0.4349292814731598f, 0.3357975482940674f, 0.7849439978599548f, 0.32500824332237244f, 0.5199988484382629f, 0.6115589737892151f, +0.0602620430290699f, 0.3542635142803192f, 0.7380070686340332f, 0.6618144512176514f, 0.7885358333587646f, 0.5714982748031616f, 0.2663276791572571f, 0.02826499566435814f, +0.737094521522522f, 0.26761913299560547f, 0.671829342842102f, 0.9815012812614441f, 0.43861380219459534f, 0.9023682475090027f, 0.8033406734466553f, 0.22455643117427826f, +0.3958321809768677f, 0.20763786137104034f, 0.5151225328445435f, 0.7464066743850708f, 0.6030444502830505f, 0.6293289661407471f, 0.24433103203773499f, 0.9058398604393005f, +0.5385536551475525f, 0.07813426107168198f, 0.5206442475318909f, 0.5202904939651489f, 0.31846168637275696f, 0.41914278268814087f, 0.6483868956565857f, 0.8742100596427917f, +0.6814498901367188f, 0.7082277536392212f, 0.45221400260925293f, 0.2972877025604248f, 0.7573525309562683f, 0.000741895753890276f, 0.8881750702857971f, 0.14976945519447327f, +0.37558144330978394f, 0.32184287905693054f, 0.891034722328186f, 0.536866307258606f, 0.08162840455770493f, 0.3229975700378418f, 0.5223709344863892f, 0.9021024703979492f, +0.7541704177856445f, 0.8695661425590515f, 0.3870810270309448f, 0.5286975502967834f, 0.7945801019668579f, 0.8205519914627075f, 0.17402473092079163f, 0.37576523423194885f, +0.9669231176376343f, 0.6300644874572754f, 0.47777512669563293f, 0.18026697635650635f, 0.6568112969398499f, 0.06698346883058548f, 0.8207373023033142f, 0.5928742289543152f, +0.23265349864959717f, 0.8355854749679565f, 0.340948224067688f, 0.6949176788330078f, 0.40291255712509155f, 0.4013975262641907f, 0.049074433743953705f, 0.5100562572479248f, +0.665803074836731f, 0.1674608737230301f, 0.06499425321817398f, 0.8440216779708862f, 0.055205658078193665f, 0.5539998412132263f, 0.8458644151687622f, 0.3812442421913147f, +0.3138316869735718f, 0.6215265393257141f, 0.6533716320991516f, 0.687853991985321f, 0.07401978224515915f, 0.6373162269592285f, 0.35556846857070923f, 0.6401655077934265f, +0.21045248210430145f, 0.7251916527748108f, 0.09030341356992722f, 0.25697416067123413f, 0.8982492089271545f, 0.9273892641067505f, 0.10523977875709534f, 0.2123071700334549f, +0.19891436398029327f, 0.15915364027023315f, 0.22968535125255585f, 0.16203923523426056f, 0.33113425970077515f, 0.860472559928894f, 0.3150220215320587f, 0.9804961085319519f, +0.742922842502594f, 0.8877488374710083f, 0.9949294924736023f, 0.3895074725151062f, 0.43939128518104553f, 0.18984480202198029f, 0.07485751062631607f, 0.052860554307699203f, +0.4665171504020691f, 0.14249634742736816f, 0.3371061682701111f, 0.46702998876571655f, 0.427093505859375f, 0.5266253352165222f, 0.0027094914112240076f, 0.6133628487586975f, +0.8140490651130676f, 0.22354580461978912f, 0.7162416577339172f, 0.7619525790214539f, 0.4910588264465332f, 0.9274623990058899f, 0.11726661771535873f, 0.5688713192939758f, +0.8479056358337402f, 0.5001158118247986f, 0.5974639058113098f, 0.5103623270988464f, 0.5022873878479004f, 0.9863380193710327f, 0.5371313095092773f, 0.7928696870803833f, +0.552036464214325f, 0.9143516421318054f, 0.06309547275304794f, 0.45360639691352844f, 0.04920996353030205f, 0.5736982822418213f, 0.9347835183143616f, 0.28962424397468567f, +0.9405979514122009f, 0.20340755581855774f, 0.7123169898986816f, 0.11732089519500732f, 0.7307777404785156f, 0.14530494809150696f, 0.8770613074302673f, 0.5008115172386169f, +0.1351395696401596f, 0.9122150540351868f, 0.6631205677986145f, 0.17364118993282318f, 0.08954296261072159f, 0.9581142067909241f, 0.0853218287229538f, 0.43068721890449524f, +0.6048358082771301f, 0.3396341800689697f, 0.19706608355045319f, 0.4319184720516205f, 0.12978917360305786f, 0.965814471244812f, 0.03732839226722717f, 0.26827341318130493f, +0.5981792211532593f, 0.6947371363639832f, 0.5086496472358704f, 0.9371224045753479f, 0.33626672625541687f, 0.6894577145576477f, 0.713952898979187f, 0.1306091696023941f, +0.41330409049987793f, 0.554049015045166f, 0.8499497175216675f, 0.7386609315872192f, 0.2526480257511139f, 0.5337377786636353f, 0.4095727503299713f, 0.2042350172996521f, +0.553290069103241f, 0.3659498691558838f, 0.19935813546180725f, 0.03068723902106285f, 0.31834080815315247f, 0.8882123827934265f, 0.9682662487030029f, 0.6368489861488342f, +0.49576178193092346f, 0.5142051577568054f, 0.4999999701976776f, 0.25200048089027405f, 0.30076363682746887f, 0.2365446835756302f, 0.8036765456199646f, 0.006295120343565941f, +0.6144669651985168f, 0.2709770202636719f, 0.38424041867256165f, 0.861217200756073f, 0.04452473297715187f, 0.8043332695960999f, 0.4212493598461151f, 0.40234073996543884f, +0.5895678997039795f, 0.14238838851451874f, 0.9999411106109619f, 0.11450711637735367f, 0.7312193512916565f, 0.24929256737232208f, 0.2557062804698944f, 0.6629925966262817f, +0.9936120510101318f, 0.8076635003089905f, 0.3923196792602539f, 0.5793879628181458f, 0.7255958914756775f, 0.3490178883075714f, 0.11402987688779831f, 0.47573477029800415f, +0.9488546252250671f, 0.6186788082122803f, 0.43683749437332153f, 0.1669970154762268f, 0.6312261819839478f, 0.91799396276474f, 0.43296298384666443f, 0.9174354076385498f, +0.479966938495636f, 0.14644506573677063f, 0.9386062622070312f, 0.3956495225429535f, 0.9755584597587585f, 0.537102222442627f, 0.7285752892494202f, 0.14323589205741882f, +0.7121624946594238f, 0.5007195472717285f, 0.1194005087018013f, 0.6056972742080688f, 0.1803838312625885f, 0.21512092649936676f, 0.9687042832374573f, 0.24446307122707367f, +0.3642323911190033f, 0.6233661770820618f, 0.010078049264848232f, 0.32727664709091187f, 0.2460496872663498f, 0.7177734971046448f, 0.39088013768196106f, 0.4389841556549072f, +0.16012337803840637f, 0.8151618838310242f, 0.7724827527999878f, 0.9668436050415039f, 0.23556889593601227f, 0.9719751477241516f, 0.4838482737541199f, 0.5158620476722717f, +0.06592462956905365f, 0.8640786409378052f, 0.8413878679275513f, 0.8530436754226685f, 0.054849233478307724f, 0.9378336071968079f, 0.1556609719991684f, 0.844078540802002f, +0.7455325722694397f, 0.19149333238601685f, 0.8661167025566101f, 0.2248932421207428f, 0.20376121997833252f, 0.743365466594696f, 0.7555328011512756f, 0.4222249686717987f, +0.783130943775177f, 0.6351322531700134f, 0.09192739427089691f, 0.05627827346324921f, 0.23579815030097961f, 0.3951568305492401f, 0.3606903553009033f, 0.538030207157135f, +0.7250666618347168f, 0.8718292713165283f, 0.6816357970237732f, 0.690772533416748f, 0.13263697922229767f, 0.32917311787605286f, 0.6919572353363037f, 0.2498437613248825f, +0.09248274564743042f, 0.48562687635421753f, 0.9482704401016235f, 0.9722994565963745f, 0.28270378708839417f, 0.28546103835105896f, 0.04061080515384674f, 0.9876853823661804f, +0.9136654138565063f, 0.4515925347805023f, 0.7209182381629944f, 0.5738859176635742f, 0.8653941750526428f, 0.2055852711200714f, 0.06760063767433167f, 0.2807345986366272f, +0.2656155824661255f, 0.2975560128688812f, 0.6951726078987122f, 0.7102617621421814f, 0.04041780158877373f, 0.03407792001962662f, 0.3995710611343384f, 0.6639994978904724f, +0.5864810943603516f, 0.3664812743663788f, 0.25849074125289917f, 0.49844297766685486f, 0.6389498114585876f, 0.8603463172912598f, 0.5697274804115295f, 0.4909147322177887f, +0.21347825229167938f, 0.37760746479034424f, 0.1405654102563858f, 0.7122565507888794f, 0.8190663456916809f, 0.956986129283905f, 0.8629456162452698f, 0.9217292070388794f, +0.5896527767181396f, 0.9397359490394592f, 0.03178047761321068f, 0.6395322680473328f, 0.6816725134849548f, 0.9364096522331238f, 0.8864309787750244f, 0.807066798210144f, +0.39713552594184875f, 0.716648280620575f, 0.08248725533485413f, 0.8960592150688171f, 0.029047297313809395f, 0.33672410249710083f, 0.08406410366296768f, 0.28328973054885864f, +0.27183496952056885f, 0.6094937920570374f, 0.31659558415412903f, 0.1950758993625641f, 0.5862370729446411f, 0.5347118973731995f, 0.7560182809829712f, 0.24155277013778687f, +0.8588567972183228f, 0.94813072681427f, 0.48589569330215454f, 0.8434963822364807f, 0.4146095812320709f, 0.18755429983139038f, 0.937013566493988f, 0.28685134649276733f, +0.4017999470233917f, 0.6669312119483948f, 0.9203083515167236f, 0.010830587707459927f, 0.4340304434299469f, 0.3352009057998657f, 0.06686212867498398f, 0.9448174238204956f, +0.38983598351478577f, 0.508368194103241f, 0.1460852324962616f, 0.9735545516014099f, 0.7871547341346741f, 0.5996699929237366f, 0.09596436470746994f, 0.4561861753463745f, +0.5358930826187134f, 0.489337295293808f, 0.8758570551872253f, 0.8669699430465698f, 0.917443573474884f, 0.8102179765701294f, 0.06737431138753891f, 0.7431821823120117f, +0.980305552482605f, 0.4020804464817047f, 0.15168717503547668f, 0.6205206513404846f, 0.0474095456302166f, 0.5568598508834839f, 0.7874427437782288f, 0.14277713000774384f, +0.8390764594078064f, 0.7245415449142456f, 0.7395471930503845f, 0.7938470840454102f, 0.3181617856025696f, 0.79000324010849f, 0.19897109270095825f, 0.7390887141227722f, +0.7991645336151123f, 0.17066048085689545f, 0.14663784205913544f, 0.6666942238807678f, 0.5695828199386597f, 0.3117179274559021f, 0.9971237778663635f, 0.5261254906654358f, +0.22664417326450348f, 0.06728462129831314f, 0.6144394278526306f, 0.5907293558120728f, 0.28466129302978516f, 0.0724155381321907f, 0.7587404847145081f, 0.2456645518541336f, +0.3650711476802826f, 0.23395118117332458f, 0.5996384024620056f, 0.5754063725471497f, 0.5908151268959045f, 0.1571042835712433f, 0.6468665599822998f, 0.27271372079849243f, +0.4355536699295044f, 0.4023094177246094f, 0.8813011050224304f, 0.839847207069397f, 0.10943825542926788f, 0.19872771203517914f, 0.30702126026153564f, 0.7183722853660583f, +0.7521951794624329f, 0.456581175327301f, 0.42544469237327576f, 0.8436134457588196f, 0.31055352091789246f, 0.6469821929931641f, 0.07077988982200623f, 0.774243175983429f, +0.2949880361557007f, 0.4284631609916687f, 0.7502443790435791f, 0.5823392271995544f, 0.0895346850156784f, 0.46913325786590576f, 0.6266928911209106f, 0.37998178601264954f, +0.9642103314399719f, 0.15913988649845123f, 0.7423658967018127f, 0.9772067070007324f, 0.22314153611660004f, 0.24575275182724f, 0.5183690786361694f, 0.7761886119842529f, +0.05885110795497894f, 0.08316635340452194f, 0.90764981508255f, 0.49297940731048584f, 0.6788033246994019f, 0.954931914806366f, 0.6089194416999817f, 0.09501785039901733f, +0.41455918550491333f, 0.6025488972663879f, 0.3756655156612396f, 0.15933969616889954f, 0.4197012782096863f, 0.38393762707710266f, 0.5350355505943298f, 0.7899780869483948f, +0.38181427121162415f, 0.5832356810569763f, 0.31332477927207947f, 0.10599823296070099f, 0.6135573983192444f, 0.33423110842704773f, 0.657893717288971f, 0.48824650049209595f, +0.40150994062423706f, 0.14511889219284058f, 0.5982810258865356f, 0.9290865063667297f, 0.5601365566253662f, 0.399265855550766f, 0.023320311680436134f, 0.33810365200042725f, +0.9514789581298828f, 0.13382157683372498f, 0.841078519821167f, 0.7219355702400208f, 0.645291805267334f, 0.20641106367111206f, 0.9252237677574158f, 0.07375076413154602f, +0.7474935054779053f, 0.043465498834848404f, 0.4515877962112427f, 0.6754986047744751f, 0.3694031834602356f, 0.5658338069915771f, 0.00991791021078825f, 0.4848971664905548f, +0.29970642924308777f, 0.42661964893341064f, 0.9521722793579102f, 0.3058026134967804f, 0.20734058320522308f, 0.20965981483459473f, 0.7750197052955627f, 0.07990747690200806f, +0.6329313516616821f, 0.9374279975891113f, 0.8776529431343079f, 0.8270032405853271f, 0.6082976460456848f, 0.5613398551940918f, 0.8375731110572815f, 0.21101322770118713f, +0.7632116675376892f, 0.20619159936904907f, 0.5032531023025513f, 0.5152089595794678f, 0.12655940651893616f, 0.45891451835632324f, 0.7721099853515625f, 0.013099294155836105f, +0.020129268988966942f, 0.12228735536336899f, 0.9184548258781433f, 0.855107843875885f, 0.18008233606815338f, 0.3665294349193573f, 0.9629281163215637f, 0.8689963817596436f, +0.7204821109771729f, 0.00782365445047617f, 0.9096296429634094f, 0.6743147373199463f, 0.15054498612880707f, 0.8855982422828674f, 0.9953760504722595f, 0.2342960238456726f, +0.21486137807369232f, 0.010642755776643753f, 0.8661168217658997f, 0.7767094969749451f, 0.5498416423797607f, 0.48734408617019653f, 0.41705968976020813f, 0.4810735285282135f, +0.14063623547554016f, 0.9064755439758301f, 0.5530451536178589f, 0.24301397800445557f, 0.8493247032165527f, 0.6579621434211731f, 0.3308105766773224f, 0.33836233615875244f, +0.8762569427490234f, 0.33993464708328247f, 0.5297503471374512f, 0.5075696706771851f, 0.8755141496658325f, 0.10166726261377335f, 0.5938194990158081f, 0.42169126868247986f, +0.8189908266067505f, 0.5010536909103394f, 0.24589025974273682f, 0.8698833584785461f, 0.07807473838329315f, 0.5245680212974548f, 0.9073594808578491f, 0.04977227374911308f, +0.6114117503166199f, 0.9417570233345032f, 0.5499677062034607f, 0.7098456025123596f, 0.610987663269043f, 0.25253236293792725f, 0.6736209392547607f, 0.33027559518814087f, +0.36009982228279114f, 0.6219809651374817f, 0.4030129611492157f, 0.6983134746551514f, 0.49425971508026123f, 0.2868335545063019f, 0.7436728477478027f, 0.9886341691017151f, +0.8844197988510132f, 0.5892860293388367f, 0.9588793516159058f, 0.5153228640556335f, 0.7331515550613403f, 0.02334776148200035f, 0.7341033816337585f, 0.654039740562439f, +0.02336764894425869f, 0.21480414271354675f, 0.6521868109703064f, 0.2029995173215866f, 0.8535292744636536f, 0.013913927599787712f, 0.11659619212150574f, 0.5306209921836853f, +0.9877078533172607f, 0.7760589122772217f, 0.6250143051147461f, 0.9674946665763855f, 0.6303703784942627f, 0.36869797110557556f, 0.8352388739585876f, 0.26151135563850403f, +0.8128652572631836f, 0.4938886761665344f, 0.5317216515541077f, 0.11546467244625092f, 0.8761950135231018f, 0.8622450232505798f, 0.2784028947353363f, 0.9902923703193665f, +0.9005955457687378f, 0.14937037229537964f, 0.2835140526294708f, 0.03342711925506592f, 0.9491041302680969f, 0.9593736529350281f, 0.6425940990447998f, 0.41354796290397644f, +0.4422036111354828f, 0.8777089715003967f, 0.026897290721535683f, 0.9333500266075134f, 0.05310777574777603f, 0.16963699460029602f, 0.37940120697021484f, 0.13424965739250183f, +0.820475161075592f, 0.6042131781578064f, 0.008803260512650013f, 0.04278222471475601f, 0.6337884664535522f, 0.9372578859329224f, 0.06660888344049454f, 0.3822890818119049f, +0.42344388365745544f, 0.17941750586032867f, 0.574454128742218f, 0.47360673546791077f, 0.07833104580640793f, 0.16101504862308502f, 0.9548658728599548f, 0.11794605851173401f, +0.08992644399404526f, 0.3869016766548157f, 0.27544525265693665f, 0.9262961745262146f, 0.5218294262886047f, 0.10981690883636475f, 0.8756978511810303f, 0.8045382499694824f, +0.3199377655982971f, 0.8776131868362427f, 0.5170968770980835f, 0.013812185265123844f, 0.6020521521568298f, 0.6093271970748901f, 0.5842968821525574f, 0.7782864570617676f, +0.40246570110321045f, 0.6218875050544739f, 0.08998648077249527f, 0.055575598031282425f, 0.964131772518158f, 0.8458167910575867f, 0.033421773463487625f, 0.20919641852378845f, +0.9669138789176941f, 0.4397798478603363f, 0.5850463509559631f, 0.9985837936401367f, 0.9280630350112915f, 0.39768674969673157f, 0.24384000897407532f, 0.4638986587524414f, +0.42610540986061096f, 0.3461116850376129f, 0.44907790422439575f, 0.75389164686203f, 0.6089869141578674f, 0.7544217705726624f, 0.7503736615180969f, 0.6575028896331787f, +0.13943412899971008f, 0.6338673830032349f, 0.7803010940551758f, 0.663397490978241f, 0.5628381967544556f, 0.013431119732558727f, 0.48310670256614685f, 0.6548905372619629f, +0.16776840388774872f, 0.9250476956367493f, 0.15188664197921753f, 0.010223654098808765f, 0.8439822196960449f, 0.4970812201499939f, 0.18959103524684906f, 0.42161092162132263f, +0.7348676323890686f, 0.6749838590621948f, 0.5831311345100403f, 0.15866537392139435f, 0.6631085276603699f, 0.9826967716217041f, 0.9860246777534485f, 0.28112199902534485f, +0.3997328281402588f, 0.1517743170261383f, 0.4751697778701782f, 0.9021201133728027f, 0.5267065763473511f, 0.33944764733314514f, 0.9745256304740906f, 0.47885870933532715f, +0.512580931186676f, 0.16289138793945312f, 0.7495571374893188f, 0.8579416871070862f, 0.34478047490119934f, 0.465550035238266f, 0.05895174667239189f, 0.8077240586280823f, +0.5671119093894958f, 0.8292648792266846f, 0.03208543732762337f, 0.2240477204322815f, 0.5502261519432068f, 0.9969164133071899f, 0.4164944589138031f, 0.22094200551509857f, +0.5465863347053528f, 0.5446666479110718f, 0.5820977091789246f, 0.9423134326934814f, 0.050616554915905f, 0.11983293294906616f, 0.15162795782089233f, 0.4466598331928253f, +0.0844881683588028f, 0.033010147511959076f, 0.2407447099685669f, 0.7957168221473694f, 0.02259252965450287f, 0.45275723934173584f, 0.7619990110397339f, 0.5747453570365906f, +0.2778272032737732f, 0.959588348865509f, 0.3336268365383148f, 0.6027340292930603f, 0.2825619876384735f, 0.14386436343193054f, 0.6747239232063293f, 0.8621385097503662f, +0.3660520315170288f, 0.6142761707305908f, 0.35288259387016296f, 0.5911229252815247f, 0.43277251720428467f, 0.5536354780197144f, 0.5366621017456055f, 0.1317017525434494f, +0.6651244759559631f, 0.4172523021697998f, 0.17230874300003052f, 0.3091702163219452f, 0.3559228777885437f, 0.2469065636396408f, 0.8657777309417725f, 0.4999144673347473f, +0.7663869261741638f, 0.9787999987602234f, 0.34161245822906494f, 0.12910686433315277f, 0.30553844571113586f, 0.18359459936618805f, 0.579456090927124f, 0.6034203171730042f, +0.7421525120735168f, 0.08390671014785767f, 0.6248146891593933f, 0.9668045043945312f, 0.43086960911750793f, 0.7060201168060303f, 0.26513582468032837f, 0.11915984004735947f, +0.45370081067085266f, 0.7549748420715332f, 0.6524123549461365f, 0.7762486934661865f, 0.7926264405250549f, 0.44759637117385864f, 0.8989713788032532f, 0.4018857181072235f, +0.11613704264163971f, 0.6472936272621155f, 0.5975446701049805f, 0.26566842198371887f, 0.16427010297775269f, 0.909593939781189f, 0.8975030779838562f, 0.7271829843521118f, +0.6537960767745972f, 0.686560332775116f, 0.19118443131446838f, 0.7702481746673584f, 0.18765424191951752f, 0.4080773591995239f, 0.0785478949546814f, 0.24979092180728912f, +0.12661564350128174f, 0.28007346391677856f, 0.46723413467407227f, 0.916641116142273f, 0.07719219475984573f, 0.1670488566160202f, 0.4937467873096466f, 0.41562750935554504f, +0.7349234223365784f, 0.3511163592338562f, 0.9585206508636475f, 0.33765479922294617f, 0.5622407793998718f, 0.5800995826721191f, 0.18363825976848602f, 0.4680875241756439f, +0.6678393483161926f, 0.2865120470523834f, 0.4387555420398712f, 0.6108279228210449f, 0.2981542944908142f, 0.018802376464009285f, 0.9408591985702515f, 0.877954363822937f, +0.24002395570278168f, 0.7110389471054077f, 0.8088162541389465f, 0.0655369758605957f, 0.6733160614967346f, 0.21907398104667664f, 0.71309494972229f, 0.5802186131477356f, +0.370662122964859f, 0.8217801451683044f, 0.24938344955444336f, 0.1502886563539505f, 0.00491794990375638f, 0.12127888947725296f, 0.8969987630844116f, 0.7847864031791687f, +0.6766705513000488f, 0.7766254544258118f, 0.8699789643287659f, 0.9680148363113403f, 0.32127001881599426f, 0.33962395787239075f, 0.6304550766944885f, 0.4086965322494507f, +0.5163869857788086f, 0.2692667543888092f, 0.7141598463058472f, 0.6554333567619324f, 0.3793385326862335f, 0.9901187419891357f, 0.6417030096054077f, 0.33757054805755615f, +0.9561861753463745f, 0.73911452293396f, 0.25861236453056335f, 0.8078831434249878f, 0.6002694964408875f, 0.730051577091217f, 0.5867310762405396f, 0.41898950934410095f, +0.6952238082885742f, 0.343127965927124f, 0.9144173264503479f, 0.983726441860199f, 0.4402165710926056f, 0.87212073802948f, 0.5374493598937988f, 0.059990424662828445f, +0.8456252217292786f, 0.5815447568893433f, 0.2573768198490143f, 0.30773109197616577f, 0.7475213408470154f, 0.13078780472278595f, 0.7534575462341309f, 0.9515696167945862f, +0.19406352937221527f, 0.6996543407440186f, 0.16112811863422394f, 0.42454957962036133f, 0.8945622444152832f, 0.044314153492450714f, 0.914675235748291f, 0.1886400729417801f, +0.712736964225769f, 0.6701332926750183f, 0.7670456171035767f, 0.8486848473548889f, 0.1576721966266632f, 0.01903870515525341f, 0.5597969889640808f, 0.19066853821277618f, +0.22884413599967957f, 0.007477091159671545f, 0.7675939798355103f, 0.5675948262214661f, 0.3082555830478668f, 0.16115735471248627f, 0.25351229310035706f, 0.696515679359436f, +0.1040247306227684f, 0.9648702144622803f, 0.615932047367096f, 0.10550373792648315f, 0.11026646196842194f, 0.9718517661094666f, 0.9279868602752686f, 0.792522132396698f, +0.12953922152519226f, 0.2963954508304596f, 0.8373047113418579f, 0.6081909537315369f, 0.5812074542045593f, 0.29802295565605164f, 0.457076758146286f, 0.33336982131004333f, +0.02289596199989319f, 0.7612300515174866f, 0.6047243475914001f, 0.6320415735244751f, 0.5796534419059753f, 0.35250210762023926f, 0.12713505327701569f, 0.8647878170013428f, +0.4455290734767914f, 0.3971705138683319f, 0.4403937757015228f, 0.11355222016572952f, 0.21342511475086212f, 0.6817852854728699f, 0.4613415598869324f, 0.9015331268310547f, +0.28986892104148865f, 0.6944735050201416f, 0.30652129650115967f, 0.2351975440979004f, 0.5389728546142578f, 0.3569335639476776f, 0.9098430275917053f, 0.44976606965065f, +0.15751193463802338f, 0.7858607172966003f, 0.7631257176399231f, 0.1906626671552658f, 0.6328547596931458f, 0.9927958250045776f, 0.2371617555618286f, 0.24091823399066925f, +0.48584240674972534f, 0.15126745402812958f, 0.9103139638900757f, 0.5505710244178772f, 0.5050509572029114f, 0.8202192783355713f, 0.9755001664161682f, 0.0648471936583519f, +0.2209896445274353f, 0.7382519245147705f, 0.20820698142051697f, 0.38022807240486145f, 0.5697156190872192f, 0.23909714818000793f, 0.46498191356658936f, 0.5606233477592468f, +0.8505098819732666f, 0.6559098362922668f, 0.2960300147533417f, 0.9196736216545105f, 0.06777694821357727f, 0.824849545955658f, 0.9982039928436279f, 0.8024788498878479f, +0.6491184234619141f, 0.6922586560249329f, 0.7774183750152588f, 0.611613392829895f, 0.28692227602005005f, 0.22211875021457672f, 0.19844196736812592f, 0.6712688207626343f, +0.5720700621604919f, 0.860282301902771f, 0.022722039371728897f, 0.6969629526138306f, 0.08402717113494873f, 0.11441945284605026f, 0.6622285842895508f, 0.8084470629692078f, +0.2091754525899887f, 0.8825013637542725f, 0.2614087462425232f, 0.9012037515640259f, 0.13724879920482635f, 0.15307562053203583f, 0.8890367746353149f, 0.3634323179721832f, +0.8744908571243286f, 0.10809791833162308f, 0.9995698928833008f, 0.13663659989833832f, 0.6414810419082642f, 0.5107943415641785f, 0.5763558149337769f, 0.03128589317202568f, +0.25986215472221375f, 0.17256183922290802f, 0.8778721690177917f, 0.185026615858078f, 0.8009241223335266f, 0.6068986654281616f, 0.01486833393573761f, 0.6928991079330444f, +0.09630253911018372f, 0.20391486585140228f, 0.8819414377212524f, 0.3280797600746155f, 0.1445978581905365f, 0.3003699779510498f, 0.43665456771850586f, 0.3562701344490051f, +0.7741573452949524f, 0.6363904476165771f, 0.6441741585731506f, 0.4117130935192108f, 0.8182581663131714f, 0.30694717168807983f, 0.3084075152873993f, 0.0243548434227705f, +0.16994211077690125f, 0.02053551934659481f, 0.534072995185852f, 0.7651124000549316f, 0.1418369710445404f, 0.7966756820678711f, 0.3587372601032257f, 0.9843900203704834f, +0.9573370814323425f, 0.454303115606308f, 0.9822601079940796f, 0.6452399492263794f, 0.8322422504425049f, 0.4840552806854248f, 0.48955297470092773f, 0.5884602069854736f, +0.9756754040718079f, 0.8560751676559448f, 0.9033782482147217f, 0.17100532352924347f, 0.9205875992774963f, 0.13954681158065796f, 0.6318442225456238f, 0.2741081714630127f, +0.8704876899719238f, 0.5035623908042908f, 0.4097936451435089f, 0.3598272502422333f, 0.8322830200195312f, 0.9393271803855896f, 0.9474148154258728f, 0.7772570848464966f, +0.544422447681427f, 0.27328526973724365f, 0.19748236238956451f, 0.3506205677986145f, 0.12472096085548401f, 0.979846179485321f, 0.050812382251024246f, 0.9124927520751953f, +0.9259257316589355f, 0.8557595610618591f, 0.022493161261081696f, 0.5637397170066833f, 0.8457836508750916f, 0.8140885233879089f, 0.21457476913928986f, 0.3927643299102783f, +0.3625797629356384f, 0.9977681636810303f, 0.4383465647697449f, 0.3117773234844208f, 0.7853323817253113f, 0.03395552560687065f, 0.5923846364021301f, 0.5094864368438721f, +0.4891434609889984f, 0.4578344225883484f, 0.46814414858818054f, 0.9036409854888916f, 0.7797157168388367f, 0.40888410806655884f, 0.8544442653656006f, 0.7424150705337524f, +0.6291454434394836f, 0.7263750433921814f, 0.499897301197052f, 0.5274013876914978f, 0.08247428387403488f, 0.724436342716217f, 0.27468204498291016f, 0.5016815066337585f, +0.9895030856132507f, 0.3286254405975342f, 0.5233525037765503f, 0.029539315029978752f, 0.7863646745681763f, 0.12837371230125427f, 0.312450110912323f, 0.7092705368995667f, +0.25869476795196533f, 0.8440492153167725f, 0.17473755776882172f, 0.8344540596008301f, 0.06991124898195267f, 0.5929237008094788f, 0.29570311307907104f, 0.03627486154437065f, +0.8733522891998291f, 0.6851329207420349f, 0.8690537810325623f, 0.9685436487197876f, 0.6269156336784363f, 0.39638110995292664f, 0.21118493378162384f, 0.5209707617759705f, +0.310798317193985f, 0.3328329026699066f, 0.6195908784866333f, 0.4065513610839844f, 0.9981672167778015f, 0.4565804898738861f, 0.5230465531349182f, 0.37744370102882385f, +0.6322051882743835f, 0.5247805714607239f, 0.2589588165283203f, 0.9539886116981506f, 0.40065842866897583f, 0.08313930034637451f, 0.020688459277153015f, 0.5549813508987427f, +0.9987668395042419f, 0.3392221927642822f, 0.24216501414775848f, 0.6950221061706543f, 0.6133421063423157f, 0.09079061448574066f, 0.76937335729599f, 0.6540171504020691f, +0.42916780710220337f, 0.41751545667648315f, 0.8548194766044617f, 0.716664731502533f, 0.5091843605041504f, 0.10278061032295227f, 0.5308751463890076f, 0.18507277965545654f, +0.9424280524253845f, 0.23100250959396362f, 0.9802524447441101f, 0.15505550801753998f, 0.9407384991645813f, 0.8232659697532654f, 0.8663775324821472f, 0.49893635511398315f, +0.20158296823501587f, 0.5664935111999512f, 0.5232141017913818f, 0.28143617510795593f, 0.6141130328178406f, 0.7882397174835205f, 0.2620338797569275f, 0.7323063611984253f, +0.5463298559188843f, 0.25504520535469055f, 0.8788695335388184f, 0.025798888877034187f, 0.8544082641601562f, 0.8371118903160095f, 0.7676588892936707f, 0.18126237392425537f, +0.8749513626098633f, 0.9017281532287598f, 0.42410361766815186f, 0.17967209219932556f, 0.13603828847408295f, 0.2817078232765198f, 0.6856237053871155f, 0.6719275116920471f, +0.29446083307266235f, 0.5721293091773987f, 0.5692983269691467f, 0.9816325306892395f, 0.9442548751831055f, 0.22393369674682617f, 0.5345975756645203f, 0.5969571471214294f, +0.43720898032188416f, 0.613240659236908f, 0.5192518830299377f, 0.02689460478723049f, 0.9009941220283508f, 0.6027310490608215f, 0.9372700452804565f, 0.47174179553985596f, +0.1253669410943985f, 0.5288437604904175f, 0.8877808451652527f, 0.8078119158744812f, 0.2547244429588318f, 0.6993666887283325f, 0.17429670691490173f, 0.32640573382377625f, +0.9922081828117371f, 0.5536330342292786f, 0.24260680377483368f, 0.09294875711202621f, 0.6635511517524719f, 0.4643667936325073f, 0.5218114256858826f, 0.640441358089447f, +0.16476356983184814f, 0.6782630085945129f, 0.2336403727531433f, 0.383335143327713f, 0.21327383816242218f, 0.33865198493003845f, 0.693735659122467f, 0.10588786751031876f, +0.899407148361206f, 0.1397673785686493f, 0.4649561941623688f, 0.1501777023077011f, 0.2848523259162903f, 0.4960465431213379f, 0.5000866651535034f, 0.402415931224823f, +0.4979690909385681f, 0.8990699648857117f, 0.37339356541633606f, 0.9790932536125183f, 0.24412287771701813f, 0.5171799659729004f, 0.1574344038963318f, 0.8151236176490784f, +0.9244844913482666f, 0.5377740263938904f, 0.12645433843135834f, 0.3949548304080963f, 0.2638651132583618f, 0.587193489074707f, 0.9702852368354797f, 0.4523155987262726f, +0.011184965260326862f, 0.04349730163812637f, 0.8529919981956482f, 0.8491761088371277f, 0.9291075468063354f, 0.12507089972496033f, 0.02300897054374218f, 0.26425641775131226f, +0.8464579582214355f, 0.11774266511201859f, 0.16282245516777039f, 0.3604595959186554f, 0.9144501686096191f, 0.14709830284118652f, 0.3306969106197357f, 0.0707390159368515f, +0.5725054740905762f, 0.3598947823047638f, 0.490479975938797f, 0.2415281981229782f, 0.18852920830249786f, 0.06864611804485321f, 0.1898973435163498f, 0.1537465751171112f, +0.8088328242301941f, 0.10649130493402481f, 0.215486079454422f, 0.6229307651519775f, 0.5075094699859619f, 0.7174268364906311f, 0.6067845225334167f, 0.7052367925643921f, +0.13761717081069946f, 0.0461287796497345f, 0.8717838525772095f, 0.38500234484672546f, 0.7466487884521484f, 0.1610455960035324f, 0.3980226218700409f, 0.22043313086032867f, +0.835182249546051f, 0.4754653871059418f, 0.050957903265953064f, 0.9136216640472412f, 0.39135032892227173f, 0.016339419409632683f, 0.3490811586380005f, 0.08054058998823166f, +0.5956954956054688f, 0.16342806816101074f, 0.031460925936698914f, 0.9745144844055176f, 0.13646405935287476f, 0.11544463783502579f, 0.7775295972824097f, 0.32060706615448f, +0.21075496077537537f, 0.1052437499165535f, 0.9651153683662415f, 0.14819473028182983f, 0.6451878547668457f, 0.5852503180503845f, 0.4340418577194214f, 0.03531723469495773f, +0.0867500901222229f, 0.7036788463592529f, 0.7731894850730896f, 0.2979937493801117f, 0.08166072517633438f, 0.6075977683067322f, 0.2660342752933502f, 0.48445993661880493f, +0.7184324264526367f, 0.5698716640472412f, 0.40568795800209045f, 0.4022165834903717f, 0.0073410081677138805f, 0.5958570241928101f, 0.6958220601081848f, 0.34545570611953735f, +0.5142090320587158f, 0.5933070182800293f, 0.6667215824127197f, 0.6427707672119141f, 0.9598016142845154f, 0.15292863547801971f, 0.05902967229485512f, 0.8972996473312378f, +0.3276490569114685f, 0.3645647466182709f, 0.782842755317688f, 0.5222712159156799f, 0.06421443074941635f, 0.6245308518409729f, 0.6725329756736755f, 0.950989842414856f, +0.13480593264102936f, 0.9829330444335938f, 0.25462988018989563f, 0.306545227766037f, 0.6088123917579651f, 0.8328044414520264f, 0.5472872257232666f, 0.3289313018321991f, +0.2909945845603943f, 0.34505462646484375f, 0.27081847190856934f, 0.7715924382209778f, 0.007928832434117794f, 0.2186979204416275f, 0.6768337488174438f, 0.09028763324022293f, +0.16060057282447815f, 0.25960400700569153f, 0.856278121471405f, 0.4170391857624054f, 0.6440203189849854f, 0.8190639615058899f, 0.5308107137680054f, 0.23072600364685059f, +0.5669978260993958f, 0.6856087446212769f, 0.6936901211738586f, 0.44972485303878784f, 0.7773739695549011f, 0.697333037853241f, 0.42887917160987854f, 0.946100652217865f, +0.712505578994751f, 0.9724234938621521f, 0.9793242812156677f, 0.26353001594543457f, 0.9683192372322083f, 0.1637977510690689f, 0.638185977935791f, 0.4731794595718384f, +0.6400042176246643f, 0.30351144075393677f, 0.5981403589248657f, 0.45432084798812866f, 0.23295281827449799f, 0.193884938955307f, 0.3489854633808136f, 0.7119020223617554f, +0.25457701086997986f, 0.08088052272796631f, 0.34742552042007446f, 0.7409347295761108f, 0.8658630847930908f, 0.8000184893608093f, 0.86785888671875f, 0.9362846612930298f, +0.029015731066465378f, 0.40538832545280457f, 0.4044042229652405f, 0.7257548570632935f, 0.3225384056568146f, 0.7726076245307922f, 0.46313172578811646f, 0.5420165061950684f, +0.857839047908783f, 0.01586969569325447f, 0.3779071867465973f, 0.9387090802192688f, 0.08591578900814056f, 0.06578546017408371f, 0.8859500885009766f, 0.5891554951667786f, +0.4713406264781952f, 0.2164197415113449f, 0.37092167139053345f, 0.11594532430171967f, 0.0988931804895401f, 0.6706556081771851f, 0.05773916095495224f, 0.5013232827186584f, +0.07399706542491913f, 0.9711412787437439f, 0.4290049374103546f, 0.7143682241439819f, 0.8167964816093445f, 0.6709949970245361f, 0.23231476545333862f, 0.03883926570415497f, +0.5972084403038025f, 0.9673944711685181f, 0.2561036944389343f, 0.8871629238128662f, 0.7188014388084412f, 0.06308700144290924f, 0.09229359030723572f, 0.4566594958305359f, +0.4687711298465729f, 0.5557236075401306f, 0.2885640859603882f, 0.6867939233779907f, 0.3353566825389862f, 0.7112772464752197f, 0.5950565338134766f, 0.829363226890564f, +0.9774673581123352f, 0.22509132325649261f, 0.9876238703727722f, 0.1541195660829544f, 0.5233604907989502f, 0.4968629777431488f, 0.532440721988678f, 0.003215404227375984f, +0.298264741897583f, 0.4141225516796112f, 0.3025375306606293f, 0.336784690618515f, 0.3264349699020386f, 0.7113994359970093f, 0.039382752031087875f, 0.3736729919910431f, +0.24543450772762299f, 0.9261094331741333f, 0.198773592710495f, 0.815653383731842f, 0.45526182651519775f, 0.040758952498435974f, 0.07593294978141785f, 0.9475750923156738f, +0.9761027097702026f, 0.1584261655807495f, 0.1276150345802307f, 0.29031893610954285f, 0.8821056485176086f, 0.44729775190353394f, 0.4758397340774536f, 0.846384584903717f, +0.5012364983558655f, 0.42541322112083435f, 0.5550585985183716f, 0.6842580437660217f, 0.8762435913085938f, 0.10811738669872284f, 0.3434441387653351f, 0.2578536570072174f, +0.6774731278419495f, 0.864246666431427f, 0.9274175763130188f, 0.3642163574695587f, 0.5907869338989258f, 0.015432562679052353f, 0.6646901965141296f, 0.1408078968524933f, +0.32037726044654846f, 0.8026347756385803f, 0.9999260902404785f, 0.650831937789917f, 0.16345804929733276f, 0.29717350006103516f, 0.5102206468582153f, 0.22368066012859344f, +0.6247531771659851f, 0.19446447491645813f, 0.659912645816803f, 0.09753616899251938f, 0.5677453279495239f, 0.8662947416305542f, 0.09460853040218353f, 0.026894764974713326f, +0.8175544142723083f, 0.6510277390480042f, 0.20101085305213928f, 0.5771527290344238f, 0.9429731369018555f, 0.30774742364883423f, 0.9066668748855591f, 0.9510536193847656f, +0.490496963262558f, 0.2397683709859848f, 0.8379817008972168f, 0.49963921308517456f, 0.5005128383636475f, 0.5550490021705627f, 0.4914635121822357f, 0.09341636300086975f, +0.06373510509729385f, 0.2152150422334671f, 0.39636939764022827f, 0.5806382894515991f, 0.339157372713089f, 0.12124576419591904f, 0.9450918436050415f, 0.5039234161376953f, +0.7650269269943237f, 0.6101396679878235f, 0.5964427590370178f, 0.05852186307311058f, 0.2056484967470169f, 0.20231206715106964f, 0.908451497554779f, 0.5357178449630737f, +0.0839221179485321f, 0.6672245860099792f, 0.5711321234703064f, 0.5896875858306885f, 0.9702087044715881f, 0.6265762448310852f, 0.4788423180580139f, 0.315117746591568f, +0.23374143242835999f, 0.9104884266853333f, 0.9678266048431396f, 0.7357335686683655f, 0.2822877764701843f, 0.7445002198219299f, 0.21118734776973724f, 0.15100792050361633f, +0.19749777019023895f, 0.24851226806640625f, 0.8690457344055176f, 0.6010186076164246f, 0.37805303931236267f, 0.6567282676696777f, 0.2840558588504791f, 0.18386751413345337f, +0.1515398770570755f, 0.8683323264122009f, 0.49137866497039795f, 0.18128931522369385f, 0.9296320080757141f, 0.45938509702682495f, 0.11443547904491425f, 0.03963309898972511f, +0.34336644411087036f, 0.04704032093286514f, 0.28609976172447205f, 0.3772124648094177f, 0.7970665693283081f, 0.5109233856201172f, 0.6030093431472778f, 0.30956557393074036f, +0.7807936072349548f, 0.9456930160522461f, 0.6589891910552979f, 0.6042744517326355f, 0.5803682804107666f, 0.024241365492343903f, 0.16711968183517456f, 0.6581803560256958f, +0.24213095009326935f, 0.8383891582489014f, 0.18398457765579224f, 0.20085065066814423f, 0.741653561592102f, 0.019786322489380836f, 0.6768407821655273f, 0.29381075501441956f, +0.8215121030807495f, 0.8378438949584961f, 0.17782415449619293f, 0.20954900979995728f, 0.12488064914941788f, 0.2472938597202301f, 0.9246111512184143f, 0.730626106262207f, +0.8161351680755615f, 0.7837691903114319f, 0.196015864610672f, 0.5511645078659058f, 0.574390709400177f, 0.8956894874572754f, 0.24968655407428741f, 0.7876851558685303f, +0.39774277806282043f, 0.6566423177719116f, 0.7456384897232056f, 0.5171092748641968f, 0.06589092314243317f, 0.7045842409133911f, 0.08930211514234543f, 0.9507758617401123f, +0.7241406440734863f, 0.5133554339408875f, 0.547972559928894f, 0.6071950793266296f, 0.5100707411766052f, 0.6722307205200195f, 0.5539525151252747f, 0.7718533873558044f, +0.12910208106040955f, 0.407229483127594f, 0.5343944430351257f, 0.11349406838417053f, 0.6831100583076477f, 0.2137930542230606f, 0.9305676221847534f, 0.48018744587898254f, +0.8799970149993896f, 0.38137245178222656f, 0.20331791043281555f, 0.2696593105792999f, 0.8341860771179199f, 0.02796640433371067f, 0.7429503798484802f, 0.04484252631664276f, +0.43835800886154175f, 0.699230968952179f, 0.5009745955467224f, 0.32444334030151367f, 0.3339098393917084f, 0.3466951251029968f, 0.7140638828277588f, 0.7157844305038452f, +0.12299374490976334f, 0.5386833548545837f, 0.5824617743492126f, 0.8678165078163147f, 0.4930863082408905f, 0.4728473424911499f, 0.47476932406425476f, 0.2450796514749527f, +0.14299367368221283f, 0.4024793803691864f, 0.01763872802257538f, 0.718542754650116f, 0.29606354236602783f, 0.995265543460846f, 0.8669660091400146f, 0.928361713886261f, +0.49341604113578796f, 0.2267567664384842f, 0.4024306833744049f, 0.8796087503433228f, 0.783650815486908f, 0.46987462043762207f, 0.29565659165382385f, 0.7376669049263f, +0.41031187772750854f, 0.11288615316152573f, 0.25718003511428833f, 0.4620547294616699f, 0.40922677516937256f, 0.9331170320510864f, 0.7704389691352844f, 0.6731839776039124f, +0.19208045303821564f, 0.36852481961250305f, 0.7868444323539734f, 0.6711450815200806f, 0.24983380734920502f, 0.24546897411346436f, 0.23487378656864166f, 0.12840677797794342f, +0.03621548414230347f, 0.03110121376812458f, 0.7998734712600708f, 0.5030122399330139f, 0.8399602174758911f, 0.4440891444683075f, 0.35943469405174255f, 0.6899924278259277f, +0.582268476486206f, 0.049439266324043274f, 0.9880722761154175f, 0.30309465527534485f, 0.6651945114135742f, 0.37355196475982666f, 0.8300942778587341f, 0.15279269218444824f, +0.6404317617416382f, 0.8439794778823853f, 0.263639897108078f, 0.9153802394866943f, 0.9670476317405701f, 0.4528195261955261f, 0.5656912326812744f, 0.6093077659606934f, +0.31222298741340637f, 0.653498113155365f, 0.1864202618598938f, 0.9054208993911743f, 0.3009989857673645f, 0.735494077205658f, 0.13576287031173706f, 0.6286699175834656f, +0.9051626920700073f, 0.7831075191497803f, 0.70465087890625f, 0.4776467978954315f, 0.7584555745124817f, 0.28049153089523315f, 0.6349897980690002f, 0.34962278604507446f, +0.959882915019989f, 0.06413329392671585f, 0.3363897502422333f, 0.22526493668556213f, 0.39909827709198f, 0.3884047567844391f, 0.24882303178310394f, 0.4740197956562042f, +0.16930656135082245f, 0.9298731088638306f, 0.6321435570716858f, 0.22867423295974731f, 0.9412305355072021f, 0.6973259449005127f, 0.04646079242229462f, 0.2771878242492676f, +0.4446122348308563f, 0.24116367101669312f, 0.8034369945526123f, 0.7179710865020752f, 0.053605299443006516f, 0.1762622743844986f, 0.4063654839992523f, 0.43569809198379517f, +0.47980979084968567f, 0.9202554821968079f, 0.2954277992248535f, 0.23755645751953125f, 0.1502331793308258f, 0.2850329279899597f, 0.27194055914878845f, 0.2662946283817291f, +0.3583921194076538f, 0.4851686954498291f, 0.9497074484825134f, 0.6751683950424194f, 0.1533925086259842f, 0.2770814299583435f, 0.006574873812496662f, 0.20082895457744598f, +0.6056220531463623f, 0.08379504829645157f, 0.44190970063209534f, 0.7667763233184814f, 0.7774247527122498f, 0.7929267883300781f, 0.25212863087654114f, 0.7390104532241821f, +0.378752738237381f, 0.5712329149246216f, 0.20438054203987122f, 0.9037566781044006f, 0.42437735199928284f, 0.9662784934043884f, 0.36235424876213074f, 0.06259854137897491f, +0.859161376953125f, 0.7150344848632812f, 0.5591403245925903f, 0.4771493375301361f, 0.181585893034935f, 0.4804728627204895f, 0.014980261214077473f, 0.11309245228767395f, +0.44151341915130615f, 0.6844494342803955f, 0.3499598801136017f, 0.8550112843513489f, 0.7140234708786011f, 0.7002838253974915f, 0.748950719833374f, 0.23549236357212067f, +0.22992053627967834f, 0.2570555508136749f, 0.5180507302284241f, 0.020596958696842194f, 0.669018566608429f, 0.5575445890426636f, 0.24553126096725464f, 0.2798119783401489f, +0.07228970527648926f, 0.4858243465423584f, 0.1873624324798584f, 0.20497524738311768f, 0.6439504027366638f, 0.0986470878124237f, 0.03755044564604759f, 0.874407947063446f, +0.9786698222160339f, 0.861809253692627f, 0.7407912015914917f, 0.6683793067932129f, 0.2762303948402405f, 0.3530198037624359f, 0.968321681022644f, 0.11977244168519974f, +0.3242684304714203f, 0.7713555097579956f, 0.12602560222148895f, 0.9895709753036499f, 0.6290177702903748f, 0.6326778531074524f, 0.9185503125190735f, 0.9385926723480225f, +0.4534803330898285f, 0.04609306529164314f, 0.985163688659668f, 0.9105927348136902f, 0.6917603015899658f, 0.8408221006393433f, 0.9893137812614441f, 0.8159297704696655f, +0.20896665751934052f, 0.9928479790687561f, 0.9053078889846802f, 0.44785040616989136f, 0.30237776041030884f, 0.3043661117553711f, 0.33352139592170715f, 0.11913561820983887f, +0.4244985580444336f, 0.18356525897979736f, 0.5301536917686462f, 0.8701390624046326f, 0.26768729090690613f, 0.7509540319442749f, 0.37207239866256714f, 0.8387240171432495f, +0.9675354957580566f, 0.3685992360115051f, 0.30485740303993225f, 0.7885465025901794f, 0.5839898586273193f, 0.8781318664550781f, 0.01512528769671917f, 0.24539130926132202f, +0.21859873831272125f, 0.950463593006134f, 0.1743960976600647f, 0.962601363658905f, 0.4799031615257263f, 0.23035643994808197f, 0.031875044107437134f, 0.14565300941467285f, +0.4376344680786133f, 0.4406422972679138f, 0.18595252931118011f, 0.5345203280448914f, 0.5688395500183105f, 0.9305279850959778f, 0.8745325803756714f, 0.6289214491844177f, +0.5678101181983948f, 0.5324417352676392f, 0.44809815287590027f, 0.20333488285541534f, 0.757013201713562f, 0.21513523161411285f, 0.72557133436203f, 0.6533830761909485f, +0.30186939239501953f, 0.920189380645752f, 0.1776171624660492f, 0.41003888845443726f, 0.40247470140457153f, 0.5447096228599548f, 0.7297569513320923f, 0.805472195148468f, +0.04760420694947243f, 0.8339961767196655f, 0.7169281244277954f, 0.1441437005996704f, 0.7126901149749756f, 0.8112591505050659f, 0.8514258861541748f, 0.8757140636444092f, +0.5717892050743103f, 0.24472226202487946f, 0.7514161467552185f, 0.2913859188556671f, 0.022262942045927048f, 0.4352470934391022f, 0.5704054236412048f, 0.5863993167877197f, +0.4244096279144287f, 0.14701339602470398f, 0.16315774619579315f, 0.42475733160972595f, 0.22275376319885254f, 0.6251451373100281f, 0.8836947083473206f, 0.19925472140312195f, +0.010280626825988293f, 0.5263882279396057f, 0.5062550902366638f, 0.6472221612930298f, 0.0017951498739421368f, 0.7572153806686401f, 0.6082440614700317f, 0.11885745078325272f, +0.3505210280418396f, 0.8787752985954285f, 0.9492725729942322f, 0.9478752613067627f, 0.05717576667666435f, 0.015187647193670273f, 0.5425156354904175f, 0.5730034708976746f, +0.49716418981552124f, 0.7860430479049683f, 0.906326949596405f, 0.27143779397010803f, 0.1725894659757614f, 0.47982022166252136f, 0.4707591235637665f, 0.9079653024673462f, +0.872298538684845f, 0.14456962049007416f, 0.020242320373654366f, 0.074233777821064f, 0.031041709706187248f, 0.9954102039337158f, 0.9901082515716553f, 0.30904507637023926f, +0.3817274272441864f, 0.581822395324707f, 0.9435237050056458f, 0.6477965116500854f, 0.028846237808465958f, 0.6314674615859985f, 0.15050461888313293f, 0.6690285205841064f, +0.48795169591903687f, 0.26313042640686035f, 0.3305005133152008f, 0.9021680355072021f, 0.4461251497268677f, 0.10883773863315582f, 0.3931204676628113f, 0.2434944212436676f, +0.4998060166835785f, 0.8154293894767761f, 0.2559761106967926f, 0.08370009809732437f, 0.9207408428192139f, 0.1762077510356903f, 0.7256526350975037f, 0.4701057970523834f, +0.5819528698921204f, 0.7152891755104065f, 0.9007322788238525f, 0.2950551509857178f, 0.2374456822872162f, 0.5685834884643555f, 0.34063732624053955f, 0.7273564338684082f, +0.20415814220905304f, 0.532619297504425f, 0.7361528277397156f, 0.5462527275085449f, 0.5965457558631897f, 0.480731338262558f, 0.15771996974945068f, 0.2641613483428955f, +0.02825080417096615f, 0.6892362833023071f, 0.8828085660934448f, 0.5769326686859131f, 0.6659591197967529f, 0.9515981674194336f, 0.1596297174692154f, 0.07575433701276779f, +0.244816392660141f, 0.9187169671058655f, 0.9102516174316406f, 0.802937924861908f, 0.2127799540758133f, 0.3919226825237274f, 0.47458210587501526f, 0.1428656131029129f, +0.3662322163581848f, 0.523303747177124f, 0.9786149263381958f, 0.289323627948761f, 0.7924054265022278f, 0.14414089918136597f, 0.8975058794021606f, 0.4715260863304138f, +0.07576049119234085f, 0.8449510335922241f, 0.7355978488922119f, 0.6616344451904297f, 0.4848272502422333f, 0.8697370886802673f, 0.6380600333213806f, 0.6068015098571777f, +0.9109243154525757f, 0.49929240345954895f, 0.5961235165596008f, 0.33955323696136475f, 0.010809183120727539f, 0.292485773563385f, 0.9546077847480774f, 0.0313398651778698f, +0.6684874892234802f, 0.6718423962593079f, 0.08365163207054138f, 0.9330489039421082f, 0.9273883104324341f, 0.8465248942375183f, 0.990851879119873f, 0.33307790756225586f, +0.38479024171829224f, 0.5457252860069275f, 0.3177923858165741f, 0.959277868270874f, 0.2333184778690338f, 0.5713552832603455f, 0.6477710008621216f, 0.00676847156137228f, +0.16601750254631042f, 0.8777891397476196f, 0.27010977268218994f, 0.3564143478870392f, 0.8147841691970825f, 0.2396632730960846f, 0.5654242038726807f, 0.17205508053302765f, +0.6767385601997375f, 0.5556703209877014f, 0.40194007754325867f, 0.8041860461235046f, 0.06930029392242432f, 0.27524814009666443f, 0.9625376462936401f, 0.8822896480560303f, +0.7882905602455139f, 0.25631606578826904f, 0.8194621801376343f, 0.48865634202957153f, 0.10804446041584015f, 0.6006139516830444f, 0.06023221090435982f, 0.8808001279830933f, +0.5025113821029663f, 0.756038248538971f, 0.39341244101524353f, 0.33235666155815125f, 0.5860518217086792f, 0.06519867479801178f, 0.024294236674904823f, 0.03619891777634621f, +0.5402524471282959f, 0.7233837246894836f, 0.04721071943640709f, 0.003143249312415719f, 0.29044413566589355f, 0.9511761665344238f, 0.5121824145317078f, 0.9090720415115356f, +0.024491706863045692f, 0.16378523409366608f, 0.46868836879730225f, 0.32548680901527405f, 0.9272577166557312f, 0.9524897336959839f, 0.8158968091011047f, 0.1780036985874176f, +0.2181708812713623f, 0.27805638313293457f, 0.20771175622940063f, 0.37083783745765686f, 0.9155291318893433f, 0.8243144750595093f, 0.5776776671409607f, 0.23624032735824585f, +0.21143582463264465f, 0.7015188336372375f, 0.17124763131141663f, 0.3087787926197052f, 0.2885594666004181f, 0.344832181930542f, 0.5352849364280701f, 0.5801262855529785f, +0.35304659605026245f, 0.5944249629974365f, 0.8116984963417053f, 0.3559935986995697f, 0.05424121394753456f, 0.1690642386674881f, 0.5060110092163086f, 0.187648206949234f, +0.8913069367408752f, 0.8195672631263733f, 0.30251333117485046f, 0.04055500030517578f, 0.5438158512115479f, 0.27725276350975037f, 0.9148840308189392f, 0.3919368088245392f, +0.5268850922584534f, 0.139042928814888f, 0.8016021251678467f, 0.38474196195602417f, 0.550327479839325f, 0.9914028644561768f, 0.8140372037887573f, 0.6945744752883911f, +0.12146157771348953f, 0.04018235206604004f, 0.5225809216499329f, 0.5222992897033691f, 0.9814411997795105f, 0.16606390476226807f, 0.8133182525634766f, 0.8304678797721863f, +0.8099530935287476f, 0.7359278798103333f, 0.4707910418510437f, 0.7119871377944946f, 0.9089267253875732f, 0.9624490141868591f, 0.1868036538362503f, 0.7046385407447815f, +0.8277350664138794f, 0.48850080370903015f, 0.40439438819885254f, 0.3816373348236084f, 0.4475876986980438f, 0.10597412288188934f, 0.2955576479434967f, 0.8477619886398315f, +0.8814154267311096f, 0.19100911915302277f, 0.7879447937011719f, 0.5796361565589905f, 0.4584203064441681f, 0.9600780606269836f, 0.5868396162986755f, 0.741527795791626f, +0.4948912560939789f, 0.6309706568717957f, 0.3829924464225769f, 0.953601062297821f, 0.40289202332496643f, 0.8233500719070435f, 0.630500853061676f, 0.6494344472885132f, +0.775250256061554f, 0.593277633190155f, 0.40420448780059814f, 0.739920973777771f, 0.45841899514198303f, 0.6250637173652649f, 0.024985814467072487f, 0.8143303990364075f, +0.41783449053764343f, 0.11708671599626541f, 0.4067927598953247f, 0.8120003938674927f, 0.17767268419265747f, 0.9785652756690979f, 0.007177749648690224f, 0.6883026361465454f, +0.45692387223243713f, 0.2879118323326111f, 0.76288241147995f, 0.4729735851287842f, 0.6327872276306152f, 0.15779589116573334f, 0.10754167288541794f, 0.8665542006492615f, +0.37450653314590454f, 0.28941288590431213f, 0.08504605293273926f, 0.738998532295227f, 0.8560700416564941f, 0.00272088753990829f, 0.611943781375885f, 0.5732319355010986f, +0.7957873344421387f, 0.5469284653663635f, 0.04457050934433937f, 0.10715384036302567f, 0.9485239386558533f, 0.5228095054626465f, 0.9790148735046387f, 0.6646155118942261f, +0.6046253442764282f, 0.47727900743484497f, 0.4616061747074127f, 0.5850698947906494f, 0.09813256561756134f, 0.6720648407936096f, 0.18379846215248108f, 0.1525370478630066f, +0.3205930292606354f, 0.056213729083538055f, 0.5164875388145447f, 0.6656560301780701f, 0.060123905539512634f, 0.24708585441112518f, 0.8959209322929382f, 0.20003682374954224f, +0.32624247670173645f, 0.7397834658622742f, 0.5432330369949341f, 0.9261719584465027f, 0.4801095426082611f, 0.5420216917991638f, 0.5221580862998962f, 0.6955903768539429f, +0.6192442178726196f, 0.597886323928833f, 0.7625312805175781f, 0.2299983948469162f, 0.9486119151115417f, 0.26087719202041626f, 0.5550937056541443f, 0.42689213156700134f, +0.6397444009780884f, 0.25481221079826355f, 0.0627579391002655f, 0.8226015567779541f, 0.34145355224609375f, 0.48941725492477417f, 0.03804990276694298f, 0.747272253036499f, +0.22404490411281586f, 0.600229799747467f, 0.45126649737358093f, 0.2847355008125305f, 0.638190746307373f, 0.8867998719215393f, 0.47397807240486145f, 0.7853775024414062f, +0.67425137758255f, 0.028682976961135864f, 0.42803460359573364f, 0.054915573447942734f, 0.33696404099464417f, 0.5515482425689697f, 0.993999183177948f, 0.2972677946090698f, +0.9264949560165405f, 0.8721991777420044f, 0.0756850317120552f, 0.13825355470180511f, 0.8389520049095154f, 0.830280065536499f, 0.14006522297859192f, 0.35751858353614807f, +0.6700766682624817f, 0.1715245246887207f, 0.5425676703453064f, 0.9739835262298584f, 0.7229200005531311f, 0.24282296001911163f, 0.5961825847625732f, 0.16310344636440277f, +0.1470889449119568f, 0.8455654382705688f, 0.8610484600067139f, 0.6831048727035522f, 0.9925550818443298f, 0.35234370827674866f, 0.695953369140625f, 0.4395471513271332f, +0.9396617412567139f, 0.4919414520263672f, 0.47921669483184814f, 0.9581127166748047f, 0.19938021898269653f, 0.3912712037563324f, 0.8147728443145752f, 0.6946303248405457f, +0.9450975656509399f, 0.44443416595458984f, 0.23007732629776f, 0.6878226399421692f, 0.6362124085426331f, 0.8748804926872253f, 0.8589153289794922f, 0.31454622745513916f, +0.7333141565322876f, 0.9188815355300903f, 0.03545037657022476f, 0.8163013458251953f, 0.913822591304779f, 0.47803789377212524f, 0.964864194393158f, 0.9381781220436096f, +0.953296959400177f, 0.9015073180198669f, 0.7550320029258728f, 0.8194496631622314f, 0.09750775992870331f, 0.6612869501113892f, 0.8192355632781982f, 0.5336025953292847f, +0.32662397623062134f, 0.49608296155929565f, 0.6372030973434448f, 0.9990853071212769f, 0.6474477648735046f, 0.22507323324680328f, 0.6981818079948425f, 0.5498898029327393f, +0.2928246557712555f, 0.9149419069290161f, 0.9366291761398315f, 0.5610530376434326f, 0.24838928878307343f, 0.41439175605773926f, 0.0004178197996225208f, 0.15466739237308502f, +0.9312634468078613f, 0.307435005903244f, 0.18890975415706635f, 0.3050459325313568f, 0.8720439076423645f, 0.8427389860153198f, 0.05053205415606499f, 0.7116084098815918f, +0.05968284234404564f, 0.01200730912387371f, 0.7105574607849121f, 0.10247731953859329f, 0.09135138243436813f, 0.28347960114479065f, 0.6474123001098633f, 0.20972652733325958f, +0.5889880061149597f, 0.6444649696350098f, 0.1383761167526245f, 0.9919374585151672f, 0.979897677898407f, 0.6916723251342773f, 0.1982783079147339f, 0.9112080335617065f, +0.8098083138465881f, 0.4723644256591797f, 0.7988685369491577f, 0.20656347274780273f, 0.8829374313354492f, 0.4796774089336395f, 0.4116480052471161f, 0.09440472722053528f, +0.9961065649986267f, 0.23990151286125183f, 0.9051458835601807f, 0.03448214754462242f, 0.30942869186401367f, 0.9337669014930725f, 0.5651817917823792f, 0.6052653193473816f, +0.3771324157714844f, 0.9783322215080261f, 0.44645625352859497f, 0.3442082107067108f, 0.13523221015930176f, 0.6380444765090942f, 0.5545798540115356f, 0.48615655303001404f, +0.3495215177536011f, 0.8044635057449341f, 0.4301108717918396f, 0.46405383944511414f, 0.1357654184103012f, 0.6790997385978699f, 0.5203574895858765f, 0.1910422146320343f, +0.949237585067749f, 0.3730519115924835f, 0.05218721181154251f, 0.24408487975597382f, 0.6192240715026855f, 0.08007499575614929f, 0.6373663544654846f, 0.11879485845565796f, +0.26000919938087463f, 0.1605425328016281f, 0.1703222543001175f, 0.6759224534034729f, 0.3301437199115753f, 0.04457497596740723f, 0.23409126698970795f, 0.9610105752944946f, +0.40293169021606445f, 0.43954867124557495f, 0.08190932124853134f, 0.8327074646949768f, 0.17249137163162231f, 0.920159637928009f, 0.08125925809144974f, 0.45123404264450073f, +0.8928550481796265f, 0.04086856171488762f, 0.18033643066883087f, 0.7184295058250427f, 0.18023918569087982f, 0.5510117411613464f, 0.8616350293159485f, 0.6295647025108337f, +0.1550898253917694f, 0.15313369035720825f, 0.9543505907058716f, 0.010402699932456017f, 0.6873225569725037f, 0.6707737445831299f, 0.5715696811676025f, 0.3937831521034241f, +0.49299800395965576f, 0.528325080871582f, 0.21677502989768982f, 0.6540788412094116f, 0.694633424282074f, 0.059238240122795105f, 0.7418937683105469f, 0.9671983122825623f, +0.05947708711028099f, 0.09807509183883667f, 0.32009148597717285f, 0.0698077380657196f, 0.7297875881195068f, 0.32005441188812256f, 0.715632438659668f, 0.7603557705879211f, +0.8476318120956421f, 0.19570942223072052f, 0.31346064805984497f, 0.558382511138916f, 0.5008715987205505f, 0.26589590311050415f, 0.42143091559410095f, 0.057281818240880966f, +0.649716854095459f, 0.13906405866146088f, 0.2789536416530609f, 0.2817164957523346f, 0.5132281184196472f, 0.42865678668022156f, 0.31728801131248474f, 0.3834112882614136f, +0.502117395401001f, 0.11838918924331665f, 0.10977540165185928f, 0.41813400387763977f, 0.2041425108909607f, 0.075737863779068f, 0.3756825625896454f, 0.9305644035339355f, +0.8897638320922852f, 0.5394087433815002f, 0.3560842275619507f, 0.21789489686489105f, 0.2043979912996292f, 0.956200122833252f, 0.340369313955307f, 0.7039575576782227f, +0.9538775682449341f, 0.5681999325752258f, 0.6872242093086243f, 0.1998501569032669f, 0.8932679295539856f, 0.5454466342926025f, 0.6304187774658203f, 0.3304609954357147f, +0.16117702424526215f, 0.0911204069852829f, 0.4864526093006134f, 0.7401793003082275f, 0.9272766709327698f, 0.5406969785690308f, 0.2930508553981781f, 0.953205406665802f, +0.18996089696884155f, 0.675624668598175f, 0.2722024619579315f, 0.7468850612640381f, 0.2306060642004013f, 0.45403796434402466f, 0.03888991102576256f, 0.4753023087978363f, +0.8088015913963318f, 0.0016956795006990433f, 0.2947351634502411f, 0.10646390169858932f, 0.0924852043390274f, 0.5649687051773071f, 0.6682704091072083f, 0.719153642654419f, +0.8349931836128235f, 0.40143418312072754f, 0.0018159401370212436f, 0.6815007925033569f, 0.49145153164863586f, 0.8763080835342407f, 0.27467501163482666f, 0.1736941933631897f, +0.31904080510139465f, 0.09574489295482635f, 0.012518960051238537f, 0.6899623870849609f, 0.4384022653102875f, 0.33765843510627747f, 0.4160042405128479f, 0.8324236869812012f, +0.07507480680942535f, 0.5011246800422668f, 0.6519518494606018f, 0.9609070420265198f, 0.8927927017211914f, 0.8906279802322388f, 0.2256464958190918f, 0.06626053899526596f, +0.4957631230354309f, 0.7799424529075623f, 0.7590692639350891f, 0.9152852296829224f, 0.047443047165870667f, 0.5009881854057312f, 0.6902526021003723f, 0.010139837861061096f, +0.8564945459365845f, 0.817176342010498f, 0.45834121108055115f, 0.6601168513298035f, 0.4152425527572632f, 0.13333861529827118f, 0.26155123114585876f, 0.8246096968650818f, +0.7799869775772095f, 0.01013496145606041f, 0.09538474678993225f, 0.7728439569473267f, 0.45645132660865784f, 0.11837950348854065f, 0.28121358156204224f, 0.5673339366912842f, +0.20554129779338837f, 0.8185209035873413f, 0.025746436789631844f, 0.8504111766815186f, 0.08678270876407623f, 0.9657407402992249f, 0.32375380396842957f, 0.6225475072860718f, +0.40285664796829224f, 0.7615630626678467f, 0.04133118689060211f, 0.8007699847221375f, 0.2930130064487457f, 0.680854856967926f, 0.11253568530082703f, 0.8083890676498413f, +0.8797996640205383f, 0.6862688064575195f, 0.6705549955368042f, 0.35161957144737244f, 0.4481073319911957f, 0.139131560921669f, 0.21178491413593292f, 0.30200204253196716f, +0.4936833381652832f, 0.18779997527599335f, 0.10040915012359619f, 0.846316397190094f, 0.9666178822517395f, 0.8714455366134644f, 0.4801557958126068f, 0.4639016091823578f, +0.7425347566604614f, 0.20353545248508453f, 0.7968098521232605f, 0.057621944695711136f, 0.759982705116272f, 0.39033347368240356f, 0.7789083123207092f, 0.11715914309024811f, +0.84483802318573f, 0.6951655745506287f, 0.5398299694061279f, 0.5506125688552856f, 0.6326553821563721f, 0.009119805879890919f, 0.053804606199264526f, 0.4106007218360901f, +0.08994533866643906f, 0.007783052045851946f, 0.3365236520767212f, 0.8188446164131165f, 0.5534752607345581f, 0.06871281564235687f, 0.1634562909603119f, 0.07227509468793869f, +0.1771024614572525f, 0.11929002404212952f, 0.8092410564422607f, 0.7279248237609863f, 0.8703627586364746f, 0.26788538694381714f, 0.7976884841918945f, 0.14021094143390656f, +0.8184428215026855f, 0.31351321935653687f, 0.18587003648281097f, 0.9736170768737793f, 0.2917996644973755f, 0.8513529896736145f, 0.21357625722885132f, 0.4467134177684784f, +0.4925177991390228f, 0.4307011663913727f, 0.739643931388855f, 0.4829351305961609f, 0.76798015832901f, 0.9443686008453369f, 0.7230417728424072f, 0.3001182973384857f, +0.2253430187702179f, 0.7052823901176453f, 0.05110074207186699f, 0.15644101798534393f, 0.1863742470741272f, 0.06424327194690704f, 0.16624021530151367f, 0.554631769657135f, +0.16670434176921844f, 0.4220797121524811f, 0.43492934107780457f, 0.9969965219497681f, 0.4854016602039337f, 0.18672826886177063f, 0.8090673089027405f, 0.7310456037521362f, +0.3631163537502289f, 0.5527341365814209f, 0.7825315594673157f, 0.8717166781425476f, 0.3561176359653473f, 0.7156240940093994f, 0.6534010171890259f, 0.3408660292625427f, +0.38021668791770935f, 0.8598050475120544f, 0.2699911296367645f, 0.8840999603271484f, 0.022739635780453682f, 0.7921729683876038f, 0.3309954106807709f, 0.7147392630577087f, +0.27228209376335144f, 0.5633963346481323f, 0.6985935568809509f, 0.6289895176887512f, 0.9607950448989868f, 0.8450431823730469f, 0.8783655762672424f, 0.800731360912323f, +0.17461231350898743f, 0.051687825471162796f, 0.4729435443878174f, 0.2266598641872406f, 0.02604522928595543f, 0.9194307923316956f, 0.4255858361721039f, 0.03447958827018738f, +0.2353089600801468f, 0.3639563322067261f, 0.6170145273208618f, 0.2356278896331787f, 0.01293475367128849f, 0.8141254782676697f, 0.4321984052658081f, 0.8888664841651917f, +0.5331920385360718f, 0.522537112236023f, 0.40898212790489197f, 0.20395688712596893f, 0.38992616534233093f, 0.6677069664001465f, 0.3342774212360382f, 0.30471083521842957f, +0.6337159276008606f, 0.1817837804555893f, 0.31850534677505493f, 0.17324620485305786f, 0.011759424582123756f, 0.08150359988212585f, 0.1267506182193756f, 0.992070734500885f, +0.021851027384400368f, 0.02016950212419033f, 0.9198415279388428f, 0.08610780537128448f, 0.45858606696128845f, 0.5834869742393494f, 0.04293594881892204f, 0.6340511441230774f, +0.20380499958992004f, 0.992979109287262f, 0.7194446921348572f, 0.9324501156806946f, 0.7122154831886292f, 0.9547684788703918f, 0.3571684658527374f, 0.6007928848266602f, +0.8826989531517029f, 0.8627487421035767f, 0.8822328448295593f, 0.8142712712287903f, 0.8261492848396301f, 0.6087396740913391f, 0.038861166685819626f, 0.8330602049827576f, +0.6437523365020752f, 0.6719015836715698f, 0.45825308561325073f, 0.6007629036903381f, 0.10502289235591888f, 0.5568029880523682f, 0.5144087076187134f, 0.364423006772995f, +0.11575974524021149f, 0.1700768619775772f, 0.29810893535614014f, 0.8599058389663696f, 0.060257554054260254f, 0.018105901777744293f, 0.5656142830848694f, 0.8904929161071777f, +0.8232106566429138f, 0.8021785616874695f, 0.3026006519794464f, 0.5006887316703796f, 0.4138922691345215f, 0.430816650390625f, 0.046029988676309586f, 0.14134080708026886f, +0.16877812147140503f, 0.3200533986091614f, 0.437410444021225f, 0.16230741143226624f, 0.08914045989513397f, 0.8880472183227539f, 0.6660052537918091f, 0.8600965738296509f, +0.4064374268054962f, 0.9619776010513306f, 0.7422902584075928f, 0.14847531914710999f, 0.212000772356987f, 0.3112747371196747f, 0.6720006465911865f, 0.126710906624794f, +0.04382110387086868f, 0.43030205368995667f, 0.279526948928833f, 0.7107056379318237f, 0.7808245420455933f, 0.3000311255455017f, 0.21698138117790222f, 0.5480284094810486f, +0.025672288611531258f, 0.3099992871284485f, 0.5327832102775574f, 0.3852824866771698f, 0.47987478971481323f, 0.059747908264398575f, 0.29998666048049927f, 0.06482549011707306f, +0.9001949429512024f, 0.7555608749389648f, 0.6736875176429749f, 0.09138316661119461f, 0.7418741583824158f, 0.07265272736549377f, 0.751050591468811f, 0.7487699389457703f, +0.9886808395385742f, 0.4064476788043976f, 0.14587821066379547f, 0.7038730978965759f, 0.46045801043510437f, 0.6433848142623901f, 0.034384917467832565f, 0.47438597679138184f, +0.4076192378997803f, 0.727441132068634f, 0.8172106146812439f, 0.843672513961792f, 0.6469435095787048f, 0.34395602345466614f, 0.6173887848854065f, 0.6963100433349609f, +0.8328786492347717f, 0.8673945665359497f, 0.14981992542743683f, 0.25260791182518005f, 0.04927946627140045f, 0.9429383277893066f, 0.30618560314178467f, 0.5938477516174316f, +0.47476068139076233f, 0.35188689827919006f, 0.804764449596405f, 0.4797121286392212f, 0.23583222925662994f, 0.2261999100446701f, 0.4072372317314148f, 0.958175003528595f, +0.5735421776771545f, 0.7546796202659607f, 0.7424707412719727f, 0.21694070100784302f, 0.3485276401042938f, 0.912182092666626f, 0.6389994025230408f, 0.12470100075006485f, +0.7542712688446045f, 0.8250465393066406f, 0.24534212052822113f, 0.4213961660861969f, 0.6646484732627869f, 0.5049254894256592f, 0.9791036248207092f, 0.02918754145503044f, +0.9687350392341614f, 0.8769969940185547f, 0.055947333574295044f, 0.6793023347854614f, 0.8075973391532898f, 0.8642953038215637f, 0.8282541632652283f, 0.13423506915569305f, +0.5512725710868835f, 0.8444053530693054f, 0.9482854604721069f, 0.7586898803710938f, 0.9338537454605103f, 0.9682561755180359f, 0.9185864329338074f, 0.266446590423584f, +0.6626818776130676f, 0.6219159364700317f, 0.8347325921058655f, 0.3516996502876282f, 0.4164264500141144f, 0.8474852442741394f, 0.004792226944118738f, 0.37985870242118835f, +0.8368960618972778f, 0.39337143301963806f, 0.39742743968963623f, 0.049814172089099884f, 0.20973724126815796f, 0.4270695447921753f, 0.7568926811218262f, 0.7094241976737976f, +0.6744946241378784f, 0.5358988642692566f, 0.8012903928756714f, 0.4301721453666687f, 0.1360321044921875f, 0.289996474981308f, 0.25667139887809753f, 0.8812751173973083f, +0.6757382750511169f, 0.9417088031768799f, 0.6871148347854614f, 0.35305720567703247f, 0.027234815061092377f, 0.9599509835243225f, 0.7076190710067749f, 0.04318729788064957f, +0.38618358969688416f, 0.5120627284049988f, 0.1926504224538803f, 0.6411837935447693f, 0.3053811490535736f, 0.3574315309524536f, 0.4986116290092468f, 0.362664133310318f, +0.22215136885643005f, 0.6775446534156799f, 0.2141321301460266f, 0.2858481705188751f, 0.556714653968811f, 0.9747669696807861f, 0.04154694080352783f, 0.6793271899223328f, +0.30256861448287964f, 0.09349839389324188f, 0.9104657173156738f, 0.1973668932914734f, 0.14286188781261444f, 0.9900773167610168f, 0.7326720356941223f, 0.4977331757545471f, +0.5662153363227844f, 0.31644079089164734f, 0.8082467317581177f, 0.9202192425727844f, 0.012733944691717625f, 0.1756974160671234f, 0.1412522941827774f, 0.08953433483839035f, +0.7456212639808655f, 0.5447540283203125f, 0.07275582104921341f, 0.3095259368419647f, 0.8205379247665405f, 0.7874599695205688f, 0.5019215941429138f, 0.28811728954315186f, +0.9549515247344971f, 0.7336360812187195f, 0.25365784764289856f, 0.7576362490653992f, 0.4359789192676544f, 0.6721818447113037f, 0.20230764150619507f, 0.6352649331092834f, +0.3118021786212921f, 0.7845876216888428f, 0.5565808415412903f, 0.5462230443954468f, 0.19291278719902039f, 0.9051464796066284f, 0.1057090312242508f, 0.2250228077173233f, +0.19338458776474f, 0.44089704751968384f, 0.7001292705535889f, 0.579766035079956f, 0.5722261667251587f, 0.8076464533805847f, 0.9179248809814453f, 0.8831737637519836f, +0.9836485385894775f, 0.21909397840499878f, 0.0830979123711586f, 0.11470089852809906f, 0.8007926344871521f, 0.09182751178741455f, 0.30762144923210144f, 0.2807992398738861f, +0.22347353398799896f, 0.37466591596603394f, 0.395366907119751f, 0.5147655010223389f, 0.24012233316898346f, 0.27215704321861267f, 0.055708229541778564f, 0.9904991984367371f, +0.5746542811393738f, 0.8636192679405212f, 0.921297013759613f, 0.6844774484634399f, 0.9488587975502014f, 0.19599966704845428f, 0.10284055024385452f, 0.4840276539325714f, +0.9145399332046509f, 0.27474722266197205f, 0.09347592294216156f, 0.21475037932395935f, 0.9730957746505737f, 0.5117285847663879f, 0.40458154678344727f, 0.9920262694358826f, +0.21966218948364258f, 0.8998318910598755f, 0.5955438613891602f, 0.41273748874664307f, 0.2765032649040222f, 0.6529977321624756f, 0.40484195947647095f, 0.12746500968933105f, +0.47304585576057434f, 0.873772382736206f, 0.947972297668457f, 0.3779195547103882f, 0.07858540117740631f, 0.9084036350250244f, 0.09918472915887833f, 0.2502397894859314f, +0.06642328202724457f, 0.6771432757377625f, 0.35960084199905396f, 0.3950878381729126f, 0.37220606207847595f, 0.07004351168870926f, 0.10050234198570251f, 0.5034158229827881f, +0.9729707837104797f, 0.7428815960884094f, 0.2921217083930969f, 0.3618812561035156f, 0.13853707909584045f, 0.031044483184814453f, 0.18751633167266846f, 0.7568118572235107f, +0.7649362087249756f, 0.5799715518951416f, 0.17409653961658478f, 0.710781991481781f, 0.4757665693759918f, 0.884502649307251f, 0.7850458025932312f, 0.3022877275943756f, +0.6879587769508362f, 0.6452663540840149f, 0.6489101648330688f, 0.3578853905200958f, 0.7512962222099304f, 0.7263358235359192f, 0.08734781295061111f, 0.932600736618042f, +0.7574428915977478f, 0.599605917930603f, 0.05858638510107994f, 0.5446451306343079f, 0.27544838190078735f, 0.8141818046569824f, 0.7817456722259521f, 0.4967486262321472f, +0.5784590244293213f, 0.3767627775669098f, 0.9132669568061829f, 0.6598643064498901f, 0.16624435782432556f, 0.8512204885482788f, 0.60211181640625f, 0.14312680065631866f, +0.28862932324409485f, 0.5175821781158447f, 0.17360271513462067f, 0.8066198229789734f, 0.6489598155021667f, 0.7824676632881165f, 0.5749697685241699f, 0.45132976770401f, +0.2742237150669098f, 0.6593456268310547f, 0.11956021189689636f, 0.2573208510875702f, 0.11976190656423569f, 0.08227936178445816f, 0.8615253567695618f, 0.6988564133644104f, +0.18527363240718842f, 0.702845573425293f, 0.5263648629188538f, 0.19588316977024078f, 0.7121209502220154f, 0.605078399181366f, 0.5332515239715576f, 0.19075220823287964f, +0.4591498076915741f, 0.5167111754417419f, 0.6882131695747375f, 0.7775528430938721f, 0.11123893409967422f, 0.6341277360916138f, 0.46344542503356934f, 0.667167067527771f, +0.24514949321746826f, 0.09152047336101532f, 0.0877513736486435f, 0.5162830948829651f, 0.5040165185928345f, 0.10703563690185547f, 0.6038723587989807f, 0.914831817150116f, +0.5116490721702576f, 0.014333942905068398f, 0.6135892868041992f, 0.5517163872718811f, 0.9064140319824219f, 0.20150792598724365f, 0.9139412641525269f, 0.7020189166069031f, +0.9005783200263977f, 0.5530694127082825f, 0.7040350437164307f, 0.10752428323030472f, 0.16019277274608612f, 0.4603216350078583f, 0.1817694753408432f, 0.6824235320091248f, +0.625116765499115f, 0.34621715545654297f, 0.508482813835144f, 0.7757054567337036f, 0.7925771474838257f, 0.2837293744087219f, 0.7123903632164001f, 0.3848974108695984f, +0.38800743222236633f, 0.5745458602905273f, 0.15122313797473907f, 0.6034003496170044f, 0.9373617172241211f, 0.24457071721553802f, 0.3976972699165344f, 0.7537534832954407f, +0.49549660086631775f, 0.225057452917099f, 0.910419762134552f, 0.07161850482225418f, 0.5422368049621582f, 0.6343650221824646f, 0.7615551948547363f, 0.3568102717399597f, +0.9085516333580017f, 0.10760126262903214f, 0.6928770542144775f, 0.741812527179718f, 0.6369242072105408f, 0.7890670299530029f, 0.8130139708518982f, 0.47264423966407776f, +0.4453471899032593f, 0.4484194815158844f, 0.4861784875392914f, 0.43345651030540466f, 0.8165120482444763f, 0.42167505621910095f, 0.18138106167316437f, 0.6384223699569702f, +0.9139552116394043f, 0.5628222823143005f, 0.21285375952720642f, 0.035018034279346466f, 0.02825591154396534f, 0.06692293286323547f, 0.20858195424079895f, 0.949039876461029f, +0.19047902524471283f, 0.8291892409324646f, 0.8940471410751343f, 0.6289017200469971f, 0.027572305873036385f, 0.6115290522575378f, 0.00011609558714553714f, 0.4264024496078491f, +0.6858066320419312f, 0.9265457987785339f, 0.5175769329071045f, 0.4313315749168396f, 0.20425990223884583f, 0.527152419090271f, 0.46833527088165283f, 0.48443830013275146f, +0.6115018129348755f, 0.2435867190361023f, 0.2794301211833954f, 0.9207515716552734f, 0.002712500048801303f, 0.01916317082941532f, 0.27093300223350525f, 0.0019236363004893064f, +0.12936541438102722f, 0.8807632923126221f, 0.8120659589767456f, 0.9173680543899536f, 0.30700254440307617f, 0.27177515625953674f, 0.44141635298728943f, 0.6020402908325195f, +0.6758346557617188f, 0.35667455196380615f, 0.4480486512184143f, 0.8232578039169312f, 0.8949404954910278f, 0.6798279285430908f, 0.5080233812332153f, 0.6416035890579224f, +0.22411975264549255f, 0.5196732878684998f, 0.8915151357650757f, 0.011599049903452396f, 0.8834361433982849f, 0.7905887961387634f, 0.3190956115722656f, 0.41890329122543335f, +0.2919917106628418f, 0.3527117669582367f, 0.8448998332023621f, 0.7389020919799805f, 0.02055712603032589f, 0.33069536089897156f, 0.866244912147522f, 0.5720354914665222f, +0.9864608645439148f, 0.22701093554496765f, 0.6921480298042297f, 0.689100980758667f, 0.008868514560163021f, 0.1564660370349884f, 0.2126576155424118f, 0.8967440128326416f, +0.15539127588272095f, 0.6992385387420654f, 0.577525794506073f, 0.30256375670433044f, 0.6307028532028198f, 0.602643609046936f, 0.5252479314804077f, 0.9734076261520386f, +0.35866424441337585f, 0.7723419666290283f, 0.9856523275375366f, 0.6327592134475708f, 0.8794516921043396f, 0.962631344795227f, 0.85416579246521f, 0.5865002274513245f, +0.6972666382789612f, 0.39791321754455566f, 0.24104587733745575f, 0.4453846216201782f, 0.42002102732658386f, 0.7104485630989075f, 0.12887732684612274f, 0.32319244742393494f, +0.6882505416870117f, 0.07524606585502625f, 0.15073513984680176f, 0.24929071962833405f, 0.030808327719569206f, 0.9552261829376221f, 0.5112539529800415f, 0.46912503242492676f, +0.8570418357849121f, 0.18809491395950317f, 0.9995650053024292f, 0.9554279446601868f, 0.7542095184326172f, 0.4114013612270355f, 0.2831808030605316f, 0.8584651350975037f, +0.09904707968235016f, 0.759385883808136f, 0.26964086294174194f, 0.3998293876647949f, 0.04295552894473076f, 0.8332571983337402f, 0.49411502480506897f, 0.23192057013511658f, +0.821130096912384f, 0.4218837022781372f, 0.9505336284637451f, 0.4320136606693268f, 0.02218930795788765f, 0.29655301570892334f, 0.8650375604629517f, 0.6106799244880676f, +0.04400523379445076f, 0.43757209181785583f, 0.678379476070404f, 0.8787438869476318f, 0.7661583423614502f, 0.6514391303062439f, 0.729596734046936f, 0.8294063806533813f, +0.11456050723791122f, 0.5307745337486267f, 0.7771000862121582f, 0.5018126964569092f, 0.7410933375358582f, 0.15373584628105164f, 0.6077488660812378f, 0.61533522605896f, +0.7669937610626221f, 0.8716803193092346f, 0.3945910632610321f, 0.2720884680747986f, 0.9455267190933228f, 0.9383415579795837f, 0.3713141083717346f, 0.19369769096374512f, +0.608108401298523f, 0.552903950214386f, 0.9014900326728821f, 0.6744849681854248f, 0.782991886138916f, 0.38662904500961304f, 0.8857437968254089f, 0.9237969517707825f, +0.1959225982427597f, 0.5131936073303223f, 0.5149292945861816f, 0.8866312503814697f, 0.7264081239700317f, 0.956798791885376f, 0.37846413254737854f, 0.8546585440635681f, +0.5476966500282288f, 0.21310168504714966f, 0.7205796241760254f, 0.6329439878463745f, 0.7481715083122253f, 0.742030680179596f, 0.27126094698905945f, 0.15448489785194397f, +0.0014023364055901766f, 0.09003240615129471f, 0.5803990364074707f, 0.010662573389708996f, 0.666201651096344f, 0.8062451481819153f, 0.44095808267593384f, 0.2391156107187271f, +0.031576599925756454f, 0.42752301692962646f, 0.5641255378723145f, 0.04645882546901703f, 0.7220320701599121f, 0.7825660705566406f, 0.06639769673347473f, 0.8910011053085327f, +0.2179066687822342f, 0.10429784655570984f, 0.8284217119216919f, 0.013434788212180138f, 0.128495454788208f, 0.5594042539596558f, 0.5880635976791382f, 0.3883599638938904f, +0.19071239233016968f, 0.17899364233016968f, 0.32145488262176514f, 0.8128741979598999f, 0.13335271179676056f, 0.18318688869476318f, 0.45581120252609253f, 0.3960452079772949f, +0.7834988236427307f, 0.832521378993988f, 0.8431254625320435f, 0.45833951234817505f, 0.46865156292915344f, 0.9336870312690735f, 0.1791948676109314f, 0.9412254095077515f, +0.8096494078636169f, 0.1940498650074005f, 0.950818657875061f, 0.4758463203907013f, 0.9253945350646973f, 0.5108751654624939f, 0.24475865066051483f, 0.721553385257721f, +0.08779063075780869f, 0.0029131746850907803f, 0.7409319281578064f, 0.719368040561676f, 0.0747734010219574f, 0.9589684009552002f, 0.945525586605072f, 0.8711368441581726f, +0.07782376557588577f, 0.48199841380119324f, 0.715713620185852f, 0.17350921034812927f, 0.5381613373756409f, 0.6366727948188782f, 0.600664496421814f, 0.5546736121177673f, +0.3256414830684662f, 0.42920738458633423f, 0.43107521533966064f, 0.697135329246521f, 0.23209038376808167f, 0.49164721369743347f, 0.9585630297660828f, 0.923857569694519f, +0.407415509223938f, 0.6451164484024048f, 0.05183757096529007f, 0.5170931220054626f, 0.21744774281978607f, 0.2918056845664978f, 0.17460642755031586f, 0.3458649516105652f, +0.3683813512325287f, 0.1346186101436615f, 0.9367364645004272f, 0.06436915695667267f, 0.5512567162513733f, 0.6417325735092163f, 0.7292706370353699f, 0.11784125119447708f, +0.9606375098228455f, 0.8899931311607361f, 0.2803776264190674f, 0.4885976314544678f, 0.1882026642560959f, 0.6310740113258362f, 0.5894138216972351f, 0.46215584874153137f, +0.999598503112793f, 0.9889219403266907f, 0.7472851276397705f, 0.6109963655471802f, 0.14938484132289886f, 0.0747770369052887f, 0.9884596467018127f, 0.7001200318336487f, +0.12499048560857773f, 0.7512878775596619f, 0.5636429190635681f, 0.44838225841522217f, 0.8767568469047546f, 0.8102828860282898f, 0.27771496772766113f, 0.46967944502830505f, +0.8906349539756775f, 0.8667610287666321f, 0.4476287066936493f, 0.6258744597434998f, 0.35917985439300537f, 0.6950854659080505f, 0.027834631502628326f, 0.9611038565635681f, +0.9644328355789185f, 0.5248767137527466f, 0.1859961748123169f, 0.24570699036121368f, 0.40046456456184387f, 0.9877550005912781f, 0.638343095779419f, 0.7626151442527771f, +0.15957847237586975f, 0.8784206509590149f, 0.334062784910202f, 0.018146231770515442f, 0.003986346069723368f, 0.44090884923934937f, 0.11640529334545135f, 0.9803619384765625f, +0.8931752443313599f, 0.6544902324676514f, 0.917317807674408f, 0.2956831455230713f, 0.24479565024375916f, 0.5068882703781128f, 0.2565244138240814f, 0.8267643451690674f, +0.12421736121177673f, 0.7238157391548157f, 0.5285807251930237f, 0.11589149385690689f, 0.5920779705047607f, 0.4436042904853821f, 0.871250331401825f, 0.18649226427078247f, +0.035946547985076904f, 0.035747986286878586f, 0.31437990069389343f, 0.1915559619665146f, 0.16140101850032806f, 0.8627863526344299f, 0.2411041557788849f, 0.06774383783340454f, +0.0015419163974002004f, 0.27295640110969543f, 0.8123871684074402f, 0.3415956497192383f, 0.17379465699195862f, 0.013714288361370564f, 0.6838107705116272f, 0.870792806148529f, +0.29682981967926025f, 0.46890297532081604f, 0.0800275206565857f, 0.4365953803062439f, 0.2552401125431061f, 0.24439221620559692f, 0.5517063736915588f, 0.3054737150669098f, +0.2738341689109802f, 0.24933283030986786f, 0.20572972297668457f, 0.8216943144798279f, 0.012085299007594585f, 0.1076848953962326f, 0.10037580877542496f, 0.22709156572818756f, +0.8854244947433472f, 0.00992053747177124f, 0.7347397804260254f, 0.20653241872787476f, 0.5230265259742737f, 0.1283951699733734f, 0.31202614307403564f, 0.5675027370452881f, +0.7679523229598999f, 0.3462872803211212f, 0.115977942943573f, 0.1351533681154251f, 0.3487451374530792f, 0.7020820379257202f, 0.08374005556106567f, 0.7459896206855774f, +0.6430078148841858f, 0.8671598434448242f, 0.6939516663551331f, 0.29277303814888f, 0.8677884936332703f, 0.46786344051361084f, 0.17862167954444885f, 0.9695031642913818f, +0.33383676409721375f, 0.9695616960525513f, 0.46963006258010864f, 0.6017812490463257f, 0.5737546682357788f, 0.9609493017196655f, 0.4427293539047241f, 0.03879391402006149f, +0.43622684478759766f, 0.2500348687171936f, 0.11761941015720367f, 0.14841316640377045f, 0.9872357249259949f, 0.7001159191131592f, 0.487904816865921f, 0.6423792839050293f, +0.43594062328338623f, 0.41923266649246216f, 0.6177123188972473f, 0.7084829211235046f, 0.824992835521698f, 0.3344026207923889f, 0.9481625556945801f, 0.5993435978889465f, +0.6407635807991028f, 0.25583896040916443f, 0.13422077894210815f, 0.851405680179596f, 0.3827565610408783f, 0.6531038284301758f, 0.6485079526901245f, 0.3020532727241516f, +0.7034984230995178f, 0.5602570176124573f, 0.7369681000709534f, 0.2513597905635834f, 0.11000945419073105f, 0.1043345034122467f, 0.11399733275175095f, 0.437299907207489f, +0.06743475049734116f, 0.9738433957099915f, 0.7360931038856506f, 0.03760874271392822f, 0.030226057395339012f, 0.9385604858398438f, 0.49027183651924133f, 0.9352966547012329f, +0.4269762933254242f, 0.45863866806030273f, 0.09340566396713257f, 0.48369598388671875f, 0.30446767807006836f, 0.585648775100708f, 0.6608307957649231f, 0.18050378561019897f, +0.575492799282074f, 0.8116934299468994f, 0.8170217275619507f, 0.998905599117279f, 0.8008027076721191f, 0.2834218442440033f, 0.2557845413684845f, 0.7358732223510742f, +0.4577771723270416f, 0.26915276050567627f, 0.1841009557247162f, 0.4964314103126526f, 0.9726253747940063f, 0.6482083797454834f, 0.22129738330841064f, 0.37617406249046326f, +0.473177969455719f, 0.674953281879425f, 0.8036667108535767f, 0.8452746272087097f, 0.6794590950012207f, 0.3044310212135315f, 0.4091518819332123f, 0.9115898013114929f, +0.5451825857162476f, 0.6260426640510559f, 0.02384820766746998f, 0.42503127455711365f, 0.609045147895813f, 0.00425884360447526f, 0.6802456378936768f, 0.5915873050689697f, +0.8054019212722778f, 0.5838785171508789f, 0.6263500452041626f, 0.14414414763450623f, 0.8043515086174011f, 0.7183211445808411f, 0.6391332149505615f, 0.02679002843797207f, +0.7917301654815674f, 0.41418883204460144f, 0.004044362343847752f, 0.3276982605457306f, 0.4225023686885834f, 0.3430732488632202f, 0.38398414850234985f, 0.5923868417739868f, +0.3929268717765808f, 0.05541626736521721f, 0.9411249160766602f, 0.5878344774246216f, 0.7079346179962158f, 0.7355606555938721f, 0.6004594564437866f, 0.5798717141151428f, +0.7963278889656067f, 0.285693883895874f, 0.280873566865921f, 0.11292638629674911f, 0.9578369855880737f, 0.7161239981651306f, 0.8364595174789429f, 0.12500426173210144f, +0.8040198087692261f, 0.4765760898590088f, 0.46886196732521057f, 0.6377648115158081f, 0.28500011563301086f, 0.1739032119512558f, 0.48012956976890564f, 0.33242857456207275f, +0.6923062801361084f, 0.027584709227085114f, 0.5300565958023071f, 0.9909337162971497f, 0.5673647522926331f, 0.27768492698669434f, 0.6985123157501221f, 0.834287166595459f, +0.32771557569503784f, 0.527012050151825f, 0.7578505277633667f, 0.21713091433048248f, 0.7872955799102783f, 0.7661837339401245f, 0.7759138941764832f, 0.7962363362312317f, +0.845504641532898f, 0.37489137053489685f, 0.05916990339756012f, 0.0525054968893528f, 0.9877582788467407f, 0.9462440609931946f, 0.933860719203949f, 0.8009701371192932f, +0.6099875569343567f, 0.9478536248207092f, 0.3880525231361389f, 0.7353836894035339f, 0.6469758152961731f, 0.4824097752571106f, 0.5675548911094666f, 0.7352166771888733f, +0.63973069190979f, 0.6425407528877258f, 0.25169312953948975f, 0.15256278216838837f, 0.06702002137899399f, 0.21704821288585663f, 0.5082177519798279f, 0.3916088938713074f, +0.4224531948566437f, 0.8894602060317993f, 0.05115016549825668f, 0.6960334181785583f, 0.5489827394485474f, 0.4035772383213043f, 0.328259140253067f, 0.23329073190689087f, +0.2956220209598541f, 0.8885484933853149f, 0.029975973069667816f, 0.2999560832977295f, 0.23371462523937225f, 0.8152376413345337f, 0.17364083230495453f, 0.04625971242785454f, +0.9030256271362305f, 0.5237070918083191f, 0.6525062918663025f, 0.4619503915309906f, 0.05878201127052307f, 0.3095548450946808f, 0.6789705753326416f, 0.27607589960098267f, +0.9960218667984009f, 0.7066206932067871f, 0.5595217943191528f, 0.34182995557785034f, 0.6101012229919434f, 0.2102108597755432f, 0.4362492859363556f, 0.09105025976896286f, +0.8165913224220276f, 0.02246117778122425f, 0.34650662541389465f, 0.32839375734329224f, 0.17416906356811523f, 0.7839311361312866f, 0.42291364073753357f, 0.741972029209137f, +0.7433167099952698f, 0.7084253430366516f, 0.10949241369962692f, 0.015685904771089554f, 0.013200762681663036f, 0.8718407154083252f, 0.9435716867446899f, 0.45234012603759766f, +0.1547936648130417f, 0.490083783864975f, 0.519139289855957f, 0.2543763220310211f, 0.5507507920265198f, 0.7788946032524109f, 0.7043504118919373f, 0.3506467938423157f, +0.8089906573295593f, 0.5845690965652466f, 0.05736199766397476f, 0.5281805992126465f, 0.6490604281425476f, 0.22726070880889893f, 0.20416516065597534f, 0.9576737880706787f, +0.25184527039527893f, 0.23590382933616638f, 0.14374545216560364f, 0.20490968227386475f, 0.13162095844745636f, 0.1368311643600464f, 0.39354774355888367f, 0.8372179865837097f, +0.025883428752422333f, 0.9604982137680054f, 0.37027451395988464f, 0.8731173872947693f, 0.3415451943874359f, 0.5663907527923584f, 0.1979900747537613f, 0.3101848065853119f, +0.21962714195251465f, 0.43629369139671326f, 0.6355951428413391f, 0.3451057970523834f, 0.2327928990125656f, 0.21673555672168732f, 0.43081462383270264f, 0.32363176345825195f, +0.36458247900009155f, 0.13974027335643768f, 0.8445781469345093f, 0.3346477448940277f, 0.5019313097000122f, 0.0551847368478775f, 0.7963668704032898f, 0.5560343861579895f, +0.7525001764297485f, 0.33748525381088257f, 0.36267104744911194f, 0.5625655055046082f, 0.36333414912223816f, 0.299141526222229f, 0.077696293592453f, 0.9785385131835938f, +0.6716899275779724f, 0.9277704954147339f, 0.8189449906349182f, 0.6569827795028687f, 0.6400269269943237f, 0.21801714599132538f, 0.5744499564170837f, 0.5613946914672852f, +0.23547576367855072f, 0.53035569190979f, 0.14269615709781647f, 0.17253592610359192f, 0.6902843713760376f, 0.9147325158119202f, 0.6906082034111023f, 0.4864528477191925f, +0.23893754184246063f, 0.8524616360664368f, 0.919346034526825f, 0.5448657274246216f, 0.010707731358706951f, 0.4862498641014099f, 0.2739153504371643f, 0.17075927555561066f, +0.48063457012176514f, 0.5172739624977112f, 0.17641063034534454f, 0.4491572082042694f, 0.3271346986293793f, 0.9917224049568176f, 0.841771125793457f, 0.41684699058532715f, +0.10531605035066605f, 0.18567268550395966f, 0.9848294258117676f, 0.4904586374759674f, 0.6611221432685852f, 0.4034270644187927f, 0.3407015800476074f, 0.5272548198699951f, +0.6585463881492615f, 0.47296908497810364f, 0.14740459620952606f, 0.574746310710907f, 0.8889474272727966f, 0.7713948488235474f, 0.47731825709342957f, 0.3970714211463928f, +0.10017678141593933f, 0.9971394538879395f, 0.36386412382125854f, 0.5859841704368591f, 0.8748923540115356f, 0.020474547520279884f, 0.10598302632570267f, 0.2018941044807434f, +0.7777747511863708f, 0.630311131477356f, 0.32905036211013794f, 0.3804550766944885f, 0.9826244711875916f, 0.7773954272270203f, 0.7292372584342957f, 0.5845248699188232f, +0.9713302254676819f, 0.4945027828216553f, 0.9381676912307739f, 0.2900974750518799f, 0.658196210861206f, 0.4303290843963623f, 0.2863849103450775f, 0.927125871181488f, +0.7021349668502808f, 0.5554143786430359f, 0.06703101843595505f, 0.10903404653072357f, 0.9172431230545044f, 0.6361879110336304f, 0.2022133767604828f, 0.598393976688385f, +0.046425480395555496f, 0.940883994102478f, 0.7211564183235168f, 0.6918285489082336f, 0.010346761904656887f, 0.3488915264606476f, 0.4718132019042969f, 0.6390873193740845f, +0.4477660655975342f, 0.41017094254493713f, 0.6626521944999695f, 0.27533283829689026f, 0.22659608721733093f, 0.20813874900341034f, 0.6401275396347046f, 0.8284783959388733f, +0.7613224387168884f, 0.9250794053077698f, 0.49362173676490784f, 0.2934940755367279f, 0.9237023591995239f, 0.4271954894065857f, 0.9810822606086731f, 0.27204689383506775f, +0.6747450828552246f, 0.7463721632957458f, 0.8549540042877197f, 0.24316895008087158f, 0.398759663105011f, 0.12549063563346863f, 0.2698388695716858f, 0.2602829039096832f, +0.8654287457466125f, 0.2284640669822693f, 0.36476388573646545f, 0.859826922416687f, 0.33891060948371887f, 0.6713320016860962f, 0.5152093172073364f, 0.953848123550415f, +0.6893352270126343f, 0.011100909672677517f, 0.31985145807266235f, 0.2396407574415207f, 0.2656266987323761f, 0.8849636316299438f, 0.06541598588228226f, 0.23615418374538422f, +0.11555306613445282f, 0.4328196048736572f, 0.17992843687534332f, 0.2256929576396942f, 0.8743962645530701f, 0.6142676472663879f, 0.6944760084152222f, 0.6653351783752441f, +0.593863308429718f, 0.7758690118789673f, 0.4266622066497803f, 0.8510804176330566f, 0.7855108380317688f, 0.7551458477973938f, 0.6576923131942749f, 0.2393808662891388f, +0.3908851444721222f, 0.9337491393089294f, 0.2412291020154953f, 0.8324950933456421f, 0.8728698492050171f, 0.8775038123130798f, 0.38495153188705444f, 0.020165013149380684f, +0.11824019998311996f, 0.6375328302383423f, 0.2571730613708496f, 0.8585969805717468f, 0.957417368888855f, 0.054418884217739105f, 0.8109280467033386f, 0.4010305404663086f, +0.8626127243041992f, 0.6105560660362244f, 0.8657082915306091f, 0.8476244211196899f, 0.36813685297966003f, 0.5695620179176331f, 0.7901738286018372f, 0.1405511200428009f, +0.5383368134498596f, 0.9254388213157654f, 0.6772762537002563f, 0.8714414238929749f, 0.9555021524429321f, 0.9425387978553772f, 0.11230836063623428f, 0.9981598258018494f, +0.5364984273910522f, 0.5238185524940491f, 0.3504769504070282f, 0.5664069652557373f, 0.13877375423908234f, 0.7852916121482849f, 0.028124524280428886f, 0.5206578969955444f, +0.4377850890159607f, 0.9841418266296387f, 0.5110912322998047f, 0.6629114747047424f, 0.48020920157432556f, 0.013283606618642807f, 0.7249330282211304f, 0.33129557967185974f, +0.6490767002105713f, 0.23444192111492157f, 0.5813066959381104f, 0.6070548295974731f, 0.9990589618682861f, 0.9503259658813477f, 0.946619987487793f, 0.5495600700378418f, +0.7452624440193176f, 0.6938759088516235f, 0.8053685426712036f, 0.48346754908561707f, 0.2794829308986664f, 0.9025143980979919f, 0.5623018741607666f, 0.9480205774307251f, +0.2645066976547241f, 0.08588762581348419f, 0.12130359560251236f, 0.07044775784015656f, 0.8278959393501282f, 0.1932148039340973f, 0.10263022035360336f, 0.00905725546181202f, +0.8764877915382385f, 0.5743195414543152f, 0.9192972779273987f, 0.3921400308609009f, 0.5808936357498169f, 0.7393859624862671f, 0.38597533106803894f, 0.4727981984615326f, +0.07748698443174362f, 0.0548577755689621f, 0.5987434387207031f, 0.5940167307853699f, 0.3663402795791626f, 0.2739356458187103f, 0.20732568204402924f, 0.21504871547222137f, +0.2203052043914795f, 0.6703042984008789f, 0.6379289031028748f, 0.849825382232666f, 0.6012911200523376f, 0.9038379788398743f, 0.49831774830818176f, 0.11828511953353882f, +0.6699315309524536f, 0.22050778567790985f, 0.3339211940765381f, 0.1189558133482933f, 0.2594643533229828f, 0.9552810788154602f, 0.17972272634506226f, 0.641941249370575f, +0.4376688301563263f, 0.7503699064254761f, 0.9836651682853699f, 0.6623392105102539f, 0.7849147915840149f, 0.1880466789007187f, 0.8358128666877747f, 0.6444553136825562f, +0.022364690899848938f, 0.05993551388382912f, 0.6547135710716248f, 0.8227047324180603f, 0.35463830828666687f, 0.7472566962242126f, 0.9140310287475586f, 0.09860743582248688f, +0.53891521692276f, 0.929094135761261f, 0.9087686538696289f, 0.2603832185268402f, 0.6058704853057861f, 0.6449857950210571f, 0.5333290100097656f, 0.47045260667800903f, +0.2382192611694336f, 0.7410556077957153f, 0.5587232112884521f, 0.4283190667629242f, 0.6284419298171997f, 0.3288472890853882f, 0.18757399916648865f, 0.558111846446991f, +0.33267903327941895f, 0.22543132305145264f, 0.1871381551027298f, 0.16190947592258453f, 0.8892136216163635f, 0.6640912294387817f, 0.0231914184987545f, 0.11203547567129135f, +0.14523859322071075f, 0.08105001598596573f, 0.551404595375061f, 0.13513001799583435f, 0.054510120302438736f, 0.556861400604248f, 0.5251590013504028f, 0.2572023570537567f, +0.21883292496204376f, 0.178252175450325f, 0.9664420485496521f, 0.3262875974178314f, 0.32109832763671875f, 0.5987136363983154f, 0.6698976159095764f, 0.5803446769714355f, +0.5540494322776794f, 0.9186410307884216f, 0.42619362473487854f, 0.137942373752594f, 0.772994339466095f, 0.8967946767807007f, 0.6629593968391418f, 0.43294382095336914f, +0.7296583652496338f, 0.7082252502441406f, 0.32996949553489685f, 0.4632800221443176f, 0.43966811895370483f, 0.7945134043693542f, 0.4219808578491211f, 0.2562454044818878f, +0.23456788063049316f, 0.6236985325813293f, 0.7115179300308228f, 0.25899040699005127f, 0.011607135646045208f, 0.7069773077964783f, 0.4049157500267029f, 0.5639521479606628f, +0.880137026309967f, 0.019543826580047607f, 0.6166476011276245f, 0.4452631175518036f, 0.22220131754875183f, 0.837725043296814f, 0.2236696183681488f, 0.698668360710144f, +0.9720428586006165f, 0.8401678800582886f, 0.2706647217273712f, 0.6741220355033875f, 0.5268198847770691f, 0.1714242547750473f, 0.06870399415493011f, 0.8916999697685242f, +0.7839110493659973f, 0.006341771222651005f, 0.24038581550121307f, 0.3028324842453003f, 0.7371463775634766f, 0.90196692943573f, 0.7620814442634583f, 0.2421891987323761f, +0.0766863152384758f, 0.2067355513572693f, 0.9459651112556458f, 0.1395578533411026f, 0.6672653555870056f, 0.9697915315628052f, 0.08623044192790985f, 0.6231251955032349f, +0.9221926927566528f, 0.6122410297393799f, 0.11654701083898544f, 0.5015802383422852f, 0.5801833868026733f, 0.24971753358840942f, 0.7057442665100098f, 0.9600102305412292f, +0.0803995206952095f, 0.3818836808204651f, 0.9467304348945618f, 0.34120747447013855f, 0.944674015045166f, 0.6226959824562073f, 0.0972394123673439f, 0.5313723087310791f, +0.28041091561317444f, 0.4634859561920166f, 0.637454092502594f, 0.22966448962688446f, 0.8442701101303101f, 0.7372494339942932f, 0.562932014465332f, 0.0789123922586441f, +0.8926166892051697f, 0.022196443751454353f, 0.17931734025478363f, 0.5250370502471924f, 0.3370990753173828f, 0.800125777721405f, 0.6963671445846558f, 0.019562499597668648f, +0.9510321021080017f, 0.44036686420440674f, 0.09264544397592545f, 0.6358749270439148f, 0.4401717483997345f, 0.42200446128845215f, 0.4668382406234741f, 0.7847115397453308f, +0.5932915806770325f, 0.504040539264679f, 0.4154696464538574f, 0.45735985040664673f, 0.4267028570175171f, 0.9649226665496826f, 0.5048077702522278f, 0.9650429487228394f, +0.9165566563606262f, 0.24675796926021576f, 0.650824785232544f, 0.7697982788085938f, 0.6227831840515137f, 0.5187870860099792f, 0.34438657760620117f, 0.9540200233459473f, +0.45045530796051025f, 0.30122822523117065f, 0.5497468113899231f, 0.9471703767776489f, 0.8367661237716675f, 0.8206148147583008f, 0.06275033205747604f, 0.9867265820503235f, +0.6674559712409973f, 0.8880168199539185f, 0.9505870938301086f, 0.38122954964637756f, 0.6478831171989441f, 0.17397497594356537f, 0.5584223866462708f, 0.3745862543582916f, +0.9359875321388245f, 0.05038207396864891f, 0.09219349175691605f, 0.3261112570762634f, 0.638942539691925f, 0.6539497375488281f, 0.03754659369587898f, 0.027051832526922226f, +0.3567552864551544f, 0.870337724685669f, 0.3040757477283478f, 0.9594529867172241f, 0.4891892075538635f, 0.967422366142273f, 0.2650989592075348f, 0.782787024974823f, +0.6185029149055481f, 0.06408670544624329f, 0.7182826995849609f, 0.5167738795280457f, 0.6692355871200562f, 0.5052168965339661f, 0.8398808836936951f, 0.3768790662288666f, +0.47901254892349243f, 0.053664401173591614f, 0.6508762836456299f, 0.7757333517074585f, 0.6274943947792053f, 0.13772794604301453f, 0.33055487275123596f, 0.6439469456672668f, +0.43341782689094543f, 0.27073967456817627f, 0.42459774017333984f, 0.2590506076812744f, 0.647409200668335f, 0.9562251567840576f, 0.6459338068962097f, 0.33001020550727844f, +0.3198246359825134f, 0.47638005018234253f, 0.6499596834182739f, 0.989534854888916f, 0.22873131930828094f, 0.9086695909500122f, 0.49075794219970703f, 0.5818153619766235f, +0.8638107776641846f, 0.47508135437965393f, 0.15688520669937134f, 0.5661684274673462f, 0.3946987986564636f, 0.578874945640564f, 0.6992926597595215f, 0.7891154885292053f, +0.5896353125572205f, 0.7985047101974487f, 0.7360572814941406f, 0.8194925785064697f, 0.24313141405582428f, 0.428930401802063f, 0.8007074594497681f, 0.9826352000236511f, +0.3646719753742218f, 0.4127574563026428f, 0.13489297032356262f, 0.6042711138725281f, 0.09946682304143906f, 0.24894306063652039f, 0.009401156567037106f, 0.7864463925361633f, +0.8322907090187073f, 0.3012373447418213f, 0.8355025053024292f, 0.3374333381652832f, 0.9004390835762024f, 0.6246515512466431f, 0.14018458127975464f, 0.5432835817337036f, +0.6364873647689819f, 0.8224033117294312f, 0.46635279059410095f, 0.6593016386032104f, 0.8612313270568848f, 0.9664086699485779f, 0.11456995457410812f, 0.24702312052249908f, +0.871366560459137f, 0.2691313624382019f, 0.5353479385375977f, 0.9799238443374634f, 0.2710442543029785f, 0.9145987629890442f, 0.1308830976486206f, 0.30001384019851685f, +0.10406124591827393f, 0.9644566774368286f, 0.9153711795806885f, 0.5972902774810791f, 0.47826090455055237f, 0.15742453932762146f, 0.5262393951416016f, 0.8918190002441406f, +0.1777166873216629f, 0.5424086451530457f, 0.6112608313560486f, 0.09402710199356079f, 0.8411575555801392f, 0.44813522696495056f, 0.7353988885879517f, 0.04846494272351265f, +0.6868284344673157f, 0.36112263798713684f, 0.07473516464233398f, 0.867351770401001f, 0.5689855813980103f, 0.5282079577445984f, 0.9219658374786377f, 0.13697192072868347f, +0.19058898091316223f, 0.945293128490448f, 0.9606396555900574f, 0.1542857587337494f, 0.7157274484634399f, 0.9454972147941589f, 0.12738102674484253f, 0.9805847406387329f, +0.13159525394439697f, 0.5814311504364014f, 0.03989245742559433f, 0.681980550289154f, 0.8149793744087219f, 0.10815870761871338f, 0.5338548421859741f, 0.8662128448486328f, +0.7750726342201233f, 0.4974120855331421f, 0.40570324659347534f, 0.06633506715297699f, 0.85379558801651f, 0.4079417884349823f, 0.1720997393131256f, 0.29807722568511963f, +0.15534742176532745f, 0.25355568528175354f, 0.7055612802505493f, 0.2639772593975067f, 0.4519561529159546f, 0.6374526619911194f, 0.564437747001648f, 0.25255364179611206f, +0.14410313963890076f, 0.8937348127365112f, 0.30186375975608826f, 0.004742330871522427f, 0.7486770153045654f, 0.2882745862007141f, 0.15800830721855164f, 0.12016886472702026f, +0.7535921931266785f, 0.2579747438430786f, 0.5671159625053406f, 0.369176983833313f, 0.028141142800450325f, 0.33904996514320374f, 0.34670543670654297f, 0.3256814181804657f, +0.018799064680933952f, 0.05875534191727638f, 0.8202084898948669f, 0.8423472046852112f, 0.6657400131225586f, 0.9222555756568909f, 0.32065221667289734f, 0.4129984974861145f, +0.4608258306980133f, 0.8546128869056702f, 0.9466021656990051f, 0.3853268325328827f, 0.9018946290016174f, 0.503328263759613f, 0.9853472113609314f, 0.6459287405014038f, +0.841452419757843f, 0.769062340259552f, 0.4514607787132263f, 0.8344885110855103f, 0.36347517371177673f, 0.567105233669281f, 0.7416226267814636f, 0.19259443879127502f, +0.3881741464138031f, 0.5381475687026978f, 0.8991402983665466f, 0.6139721870422363f, 0.3906267583370209f, 0.4197175204753876f, 0.43579933047294617f, 0.3646194040775299f, +0.9480772614479065f, 0.2746782600879669f, 0.6606110334396362f, 0.7746496200561523f, 0.9865921139717102f, 0.49007081985473633f, 0.08352432399988174f, 0.9696862101554871f, +0.9416578412055969f, 0.7761175036430359f, 0.44259682297706604f, 0.8325473666191101f, 0.29902026057243347f, 0.033296145498752594f, 0.9491974711418152f, 0.8743700385093689f, +0.20429956912994385f, 0.6544492840766907f, 0.8330094218254089f, 0.29098647832870483f, 0.9323240518569946f, 0.5557959079742432f, 0.6921854019165039f, 0.17257551848888397f, +0.6991177201271057f, 0.8931946754455566f, 0.8112689256668091f, 0.7265975475311279f, 0.03075980953872204f, 0.07450953125953674f, 0.8209006786346436f, 0.7218862175941467f, +0.9980560541152954f, 0.007414184045046568f, 0.7779539823532104f, 0.5444615483283997f, 0.5826734900474548f, 0.8599979877471924f, 0.5829547643661499f, 0.950016438961029f, +0.7359354496002197f, 0.9233250021934509f, 0.24696533381938934f, 0.43131813406944275f, 0.39592641592025757f, 0.010768722742795944f, 0.47521740198135376f, 0.728690505027771f, +0.6026642918586731f, 0.08859527856111526f, 0.5097073316574097f, 0.7401810884475708f, 0.36183878779411316f, 0.4539678990840912f, 0.8484031558036804f, 0.8153639435768127f, +0.48664143681526184f, 0.6553606986999512f, 0.03298697620630264f, 0.6354091763496399f, 0.5350593328475952f, 0.5508520603179932f, 0.7769056558609009f, 0.5482019186019897f, +0.6930274963378906f, 0.408363938331604f, 0.031817127019166946f, 0.6022899746894836f, 0.8751132488250732f, 0.5417942404747009f, 0.42867377400398254f, 0.6888954639434814f, +0.008253687992691994f, 0.5283327698707581f, 0.695951521396637f, 0.36446550488471985f, 0.8153117299079895f, 0.8467097282409668f, 0.5318707227706909f, 0.7678472995758057f, +0.5283277630805969f, 0.08530057966709137f, 0.7413552403450012f, 0.4073164463043213f, 0.6340913772583008f, 0.8902137279510498f, 0.26692527532577515f, 0.369900107383728f, +0.1977708488702774f, 0.4600166380405426f, 0.16656453907489777f, 0.9750156998634338f, 0.6534954309463501f, 0.7416335344314575f, 0.9812065362930298f, 0.8047905564308167f, +0.4215375483036041f, 0.7433963418006897f, 0.628676176071167f, 0.4996461272239685f, 0.5202676653862f, 0.4008168578147888f, 0.7899330258369446f, 0.13904869556427002f, +0.7293469309806824f, 0.1311502754688263f, 0.7449083924293518f, 0.06864075362682343f, 0.10144730657339096f, 0.9722304344177246f, 0.6055241823196411f, 0.8555783033370972f, +0.2619553208351135f, 0.7229821085929871f, 0.5955374836921692f, 0.9426236748695374f, 0.4643651247024536f, 0.4034847617149353f, 0.5775716304779053f, 0.7689318656921387f, +0.4166533350944519f, 0.5115914940834045f, 0.014809014275670052f, 0.5825909972190857f, 0.25518789887428284f, 0.8533931970596313f, 0.42723050713539124f, 0.0565459169447422f, +0.5608007311820984f, 0.9167903661727905f, 0.7954715490341187f, 0.08552618324756622f, 0.7079066634178162f, 0.4789716899394989f, 0.226069375872612f, 0.6560652852058411f, +0.9206095933914185f, 0.346813827753067f, 0.43992042541503906f, 0.7826024889945984f, 0.01259532105177641f, 0.49148234724998474f, 0.1241227462887764f, 0.553538978099823f, +0.6384918689727783f, 0.8107908964157104f, 0.27959775924682617f, 0.29615864157676697f, 0.9674429893493652f, 0.25628069043159485f, 0.8110972046852112f, 0.1299464851617813f, +0.8211657404899597f, 0.3807121217250824f, 0.3224244713783264f, 0.8557119369506836f, 0.6114742159843445f, 0.18008913099765778f, 0.29644739627838135f, 0.0711972638964653f, +0.9268586039543152f, 0.3072468936443329f, 0.6845261454582214f, 0.4189111292362213f, 0.5849963426589966f, 0.09547259658575058f, 0.9123214483261108f, 0.45774421095848083f, +0.28073325753211975f, 0.5246996879577637f, 0.9055814743041992f, 0.6411921977996826f, 0.4698924422264099f, 0.9296880960464478f, 0.7018519639968872f, 0.5555453300476074f, +0.6030348539352417f, 0.9442611932754517f, 0.862102746963501f, 0.13065561652183533f, 0.7428551912307739f, 0.089887835085392f, 0.8349022269248962f, 0.22093677520751953f, +0.62706059217453f, 0.4224664568901062f, 0.717909038066864f, 0.25190818309783936f, 0.3550203740596771f, 0.6868892908096313f, 0.9127346873283386f, 0.75168377161026f, +0.05575057119131088f, 0.610956072807312f, 0.9082698225975037f, 0.42537721991539f, 0.8715876340866089f, 0.9863252639770508f, 0.6059466600418091f, 0.6381977796554565f, +0.37894073128700256f, 0.5049183964729309f, 0.8276316523551941f, 0.5031446218490601f, 0.12055442482233047f, 0.6604576706886292f, 0.46170738339424133f, 0.008813168853521347f, +0.8129534125328064f, 0.7964780330657959f, 0.9033963680267334f, 0.8751097917556763f, 0.3567395806312561f, 0.14273345470428467f, 0.9116366505622864f, 0.05869365856051445f, +0.7753098607063293f, 0.03978491574525833f, 0.027943816035985947f, 0.8071192502975464f, 0.09065289795398712f, 0.7895413637161255f, 0.15708748996257782f, 0.5835909843444824f, +0.33339834213256836f, 0.4316744804382324f, 0.0325772762298584f, 0.43440958857536316f, 0.6735737323760986f, 0.5147027969360352f, 0.8432594537734985f, 0.7282364368438721f, +0.1491730809211731f, 0.008713227696716785f, 0.8630375266075134f, 0.5833693742752075f, 0.9060449004173279f, 0.23044231534004211f, 0.7917149662971497f, 0.8257706165313721f, +0.21745996177196503f, 0.1515902727842331f, 0.584568440914154f, 0.32005131244659424f, 0.14438436925411224f, 0.999013364315033f, 0.1938972771167755f, 0.498065710067749f, +0.9292812347412109f, 0.2768755257129669f, 0.99687260389328f, 0.18964307010173798f, 0.915587842464447f, 0.890499472618103f, 0.919916570186615f, 0.7509628534317017f, +0.3495084345340729f, 0.5866054892539978f, 0.39235159754753113f, 0.9009703397750854f, 0.7797912359237671f, 0.8138157725334167f, 0.7610775828361511f, 0.5588882565498352f, +0.1510234922170639f, 0.211854487657547f, 0.0773768350481987f, 0.9660536050796509f, 0.31438180804252625f, 0.10803685337305069f, 0.8364812731742859f, 0.8600490689277649f, +0.9603082537651062f, 0.48546311259269714f, 0.36170724034309387f, 0.7832410931587219f, 0.5907228589057922f, 0.9137275218963623f, 0.2976715564727783f, 0.8672059178352356f, +0.5493630170822144f, 0.9242767691612244f, 0.7370349168777466f, 0.7447311282157898f, 0.25310662388801575f, 0.5248445868492126f, 0.15025146305561066f, 0.2032455950975418f, +0.11844596266746521f, 0.07526271790266037f, 0.04327888414263725f, 0.7742019295692444f, 0.2795528471469879f, 0.3967982530593872f, 0.44570666551589966f, 0.8810935020446777f, +0.7850141525268555f, 0.765423595905304f, 0.1259797066450119f, 0.5011993050575256f, 0.46232712268829346f, 0.19373062252998352f, 0.9619619846343994f, 0.3353497087955475f, +0.8499560356140137f, 0.3535902500152588f, 0.6247311234474182f, 0.8738818168640137f, 0.34577879309654236f, 0.36052578687667847f, 0.3307296633720398f, 0.9106966257095337f, +0.2625380754470825f, 0.10992245376110077f, 0.7934103012084961f, 0.6752027273178101f, 0.7043600082397461f, 0.3502199947834015f, 0.8356950879096985f, 0.31589359045028687f, +0.1075635701417923f, 0.7881559133529663f, 0.06814615428447723f, 0.8641267418861389f, 0.1634434163570404f, 0.5627039670944214f, 0.4616905152797699f, 0.4267275929450989f, +0.03440219908952713f, 0.9626374244689941f, 0.4102998673915863f, 0.19661201536655426f, 0.785987377166748f, 0.3501493036746979f, 0.45890024304389954f, 0.7927202582359314f, +0.8227634429931641f, 0.851669430732727f, 0.8681896924972534f, 0.30824336409568787f, 0.33453887701034546f, 0.5349171757698059f, 0.5843902230262756f, 0.42893359065055847f, +0.9373374581336975f, 0.5859657526016235f, 0.7792366147041321f, 0.6260704398155212f, 0.9372153878211975f, 0.43618497252464294f, 0.21653129160404205f, 0.7973184585571289f, +0.9559740424156189f, 0.6473232507705688f, 0.2093440145254135f, 0.06185825541615486f, 0.4037777781486511f, 0.02414177544414997f, 0.7700398564338684f, 0.4471435248851776f, +0.855896532535553f, 0.5592546463012695f, 0.20344488322734833f, 0.2587364912033081f, 0.30292436480522156f, 0.07168305665254593f, 0.7912023663520813f, 0.5145909786224365f, +0.5367258787155151f, 0.5440421104431152f, 0.37233489751815796f, 0.9784544110298157f, 0.010826926678419113f, 0.7287864685058594f, 0.9092931747436523f, 0.8407500386238098f, +0.16180609166622162f, 0.366556316614151f, 0.5127003788948059f, 0.5444254875183105f, 0.6501441597938538f, 0.4437805712223053f, 0.8464637994766235f, 0.4911053776741028f, +0.4832935035228729f, 0.576169490814209f, 0.11248980462551117f, 0.3306509256362915f, 0.07224981486797333f, 0.8992146849632263f, 0.9206665754318237f, 0.45049813389778137f, +0.7599411606788635f, 0.8026430606842041f, 0.12659470736980438f, 0.613307774066925f, 0.821013867855072f, 0.3299083709716797f, 0.6961698532104492f, 0.8074813485145569f, +0.5423154830932617f, 0.9678118228912354f, 0.5202744603157043f, 0.44324010610580444f, 0.8460128903388977f, 0.44766727089881897f, 0.7881706357002258f, 0.23480941355228424f, +0.6237574219703674f, 0.6669124364852905f, 0.5058355331420898f, 0.5542149543762207f, 0.568932056427002f, 0.01571754552423954f, 0.44098755717277527f, 0.48318177461624146f, +0.9382522106170654f, 0.4193429946899414f, 0.3274020850658417f, 0.7588239312171936f, 0.867592453956604f, 0.9559412002563477f, 0.0183787290006876f, 0.7536418437957764f, +0.336743026971817f, 0.20377469062805176f, 0.843398928642273f, 0.7270738482475281f, 0.44699373841285706f, 0.9937622547149658f, 0.745599091053009f, 0.019088761880993843f, +0.698056161403656f, 0.2789161205291748f, 0.05828217789530754f, 0.35006389021873474f, 0.9963815808296204f, 0.45107632875442505f, 0.42970967292785645f, 0.14838024973869324f, +0.1424514353275299f, 0.7408438920974731f, 0.7559391856193542f, 0.30390384793281555f, 0.34864646196365356f, 0.4280627369880676f, 0.8675588369369507f, 0.6558072566986084f, +0.8822894096374512f, 0.8326694965362549f, 0.03456176444888115f, 0.9278855323791504f, 0.058965183794498444f, 0.41243812441825867f, 0.2282511442899704f, 0.46388596296310425f, +0.1006503477692604f, 0.6041289567947388f, 0.42950913310050964f, 0.47864457964897156f, 0.10171742737293243f, 0.7655824422836304f, 0.01729237660765648f, 0.6375658512115479f, +0.21090415120124817f, 0.41624921560287476f, 0.5767820477485657f, 0.5468649864196777f, 0.0007155948551371694f, 0.39375826716423035f, 0.7748661041259766f, 0.8826109170913696f, +0.7467769980430603f, 0.32441025972366333f, 0.33832451701164246f, 0.20827367901802063f, 0.4112537205219269f, 0.5279555916786194f, 0.5077512860298157f, 0.8059538006782532f, +0.6795365810394287f, 0.39290371537208557f, 0.19027911126613617f, 0.4987971782684326f, 0.2715652883052826f, 0.5917901992797852f, 0.28474128246307373f, 0.5074554681777954f, +0.2762262523174286f, 0.5069059133529663f, 0.1610468477010727f, 0.5718543529510498f, 0.4947015643119812f, 0.4043597877025604f, 0.999822735786438f, 0.7954707741737366f, +0.36522892117500305f, 0.5522646307945251f, 0.21070751547813416f, 0.8905276656150818f, 0.866939902305603f, 0.5496348738670349f, 0.2704673707485199f, 0.2263038158416748f, +0.054092902690172195f, 0.5508450269699097f, 0.4118022918701172f, 0.8293116092681885f, 0.7194193601608276f, 0.6863906383514404f, 0.40238216519355774f, 0.6034848690032959f, +0.7827696204185486f, 0.7232088446617126f, 0.17484267055988312f, 0.9986886382102966f, 0.8340759873390198f, 0.851154625415802f, 0.5384520292282104f, 0.6410347819328308f, +0.9374890923500061f, 0.8592233657836914f, 0.1814294457435608f, 0.0913844108581543f, 0.8378515839576721f, 0.2121567577123642f, 0.35363200306892395f, 0.014796385541558266f, +0.842933177947998f, 0.13182954490184784f, 0.3199869692325592f, 0.20553837716579437f, 0.1509498655796051f, 0.995708703994751f, 0.4041271209716797f, 0.263460636138916f, +0.4146168529987335f, 0.5561904907226562f, 0.7321357131004333f, 0.9300570487976074f, 0.834041953086853f, 0.592121422290802f, 0.6219155192375183f, 0.2570783495903015f, +0.12064278870820999f, 0.4104604423046112f, 0.9369287490844727f, 0.7645636200904846f, 0.565739095211029f, 0.15873290598392487f, 0.910092830657959f, 0.1386069506406784f, +0.1906060427427292f, 0.7654836177825928f, 0.4818180799484253f, 0.2695930600166321f, 0.37509840726852417f, 0.6355850696563721f, 0.8613282442092896f, 0.32247620820999146f, +0.02636747434735298f, 0.7072449922561646f, 0.35877278447151184f, 0.11998380720615387f, 0.46612879633903503f, 0.6345373392105103f, 0.7226580381393433f, 0.28090018033981323f, +0.2893041968345642f, 0.13938823342323303f, 0.4091885983943939f, 0.3758079707622528f, 0.5769702196121216f, 0.2091677039861679f, 0.1788436621427536f, 0.9114701747894287f, +0.5158066749572754f, 0.5923096537590027f, 0.1913343369960785f, 0.70323246717453f, 0.7050360441207886f, 0.5174484848976135f, 0.2002941071987152f, 0.012248052284121513f, +0.7502231597900391f, 0.5676530003547668f, 0.8414468765258789f, 0.03103511966764927f, 0.15610948204994202f, 0.5623884201049805f, 0.5096895694732666f, 0.908250093460083f, +0.9769390225410461f, 0.36577722430229187f, 0.7995736598968506f, 0.8235640525817871f, 0.6893813610076904f, 0.49070075154304504f, 0.44294601678848267f, 0.5968813896179199f, +0.3112508952617645f, 0.35715728998184204f, 0.3525586426258087f, 0.20558670163154602f, 0.6039813756942749f, 0.9933846592903137f, 0.8289521932601929f, 0.37441012263298035f, +0.8147486448287964f, 0.5734835863113403f, 0.8027675747871399f, 0.20782233774662018f, 0.34838077425956726f, 0.18190792202949524f, 0.3118547797203064f, 0.5106001496315002f, +0.48517143726348877f, 0.17018958926200867f, 0.47069641947746277f, 0.8742451667785645f, 0.4297236502170563f, 0.3824264109134674f, 0.7236146330833435f, 0.19642135500907898f, +0.5703650712966919f, 0.04443828761577606f, 0.228128582239151f, 0.7444793581962585f, 0.5355827212333679f, 0.0578174814581871f, 0.9752990007400513f, 0.5624306201934814f, +0.1496966928243637f, 0.928849995136261f, 0.5295156836509705f, 0.6484739184379578f, 0.014323919080197811f, 0.778117835521698f, 0.7874364852905273f, 0.41344624757766724f, +0.8695226907730103f, 0.7049169540405273f, 0.6284698247909546f, 0.7226837873458862f, 0.17261138558387756f, 0.3643718659877777f, 0.4779512286186218f, 0.9650896191596985f, +0.8621805906295776f, 0.39362451434135437f, 0.6090846657752991f, 0.035723138600587845f, 0.4931837022304535f, 0.38095515966415405f, 0.5284013152122498f, 0.8783228993415833f, +0.915614902973175f, 0.5470831990242004f, 0.29881012439727783f, 0.5750309228897095f, 0.07684019953012466f, 0.19202913343906403f, 0.7444280982017517f, 0.29139354825019836f, +0.9064098596572876f, 0.6956796646118164f, 0.7248205542564392f, 0.573190450668335f, 0.19291207194328308f, 0.19203956425189972f, 0.05269112065434456f, 0.056394319981336594f, +0.26546651124954224f, 0.5910957455635071f, 0.5485177636146545f, 0.29027509689331055f, 0.2735816538333893f, 0.3135020136833191f, 0.6895104050636292f, 0.9894519448280334f, +0.40864771604537964f, 0.07565218210220337f, 0.8559936285018921f, 0.9061775207519531f, 0.13462744653224945f, 0.07664304226636887f, 0.17693831026554108f, 0.708928108215332f, +0.007633379194885492f, 0.4981176257133484f, 0.29854145646095276f, 0.6620559096336365f, 0.7005531787872314f, 0.04147804155945778f, 0.3412880301475525f, 0.22981032729148865f, +0.699426531791687f, 0.9299072623252869f, 0.9166891574859619f, 0.66526859998703f, 0.3318842947483063f, 0.22859202325344086f, 0.9138965606689453f, 0.056285567581653595f, +0.45110437273979187f, 0.3070460855960846f, 0.7021768689155579f, 0.769537627696991f, 0.4719020128250122f, 0.3257657289505005f, 0.8687771558761597f, 0.06211065128445625f, +0.22909601032733917f, 0.9402356147766113f, 0.2543001174926758f, 0.6338851451873779f, 0.05332336202263832f, 0.9147613048553467f, 0.2260439544916153f, 0.44752228260040283f, +0.02793920785188675f, 0.9572232365608215f, 0.20042209327220917f, 0.6463640332221985f, 0.7303628325462341f, 0.8934346437454224f, 0.8672376275062561f, 0.8774375915527344f, +0.0032351110130548477f, 0.8338133096694946f, 0.6952432990074158f, 0.23443758487701416f, 0.1897825449705124f, 0.13301312923431396f, 0.2764192223548889f, 0.7921566963195801f, +0.1523365080356598f, 0.041360825300216675f, 0.12620575726032257f, 0.40953153371810913f, 0.7547062039375305f, 0.7656785249710083f, 0.2273067682981491f, 0.8622785806655884f, +0.6602594256401062f, 0.4956381022930145f, 0.04386727511882782f, 0.5638876557350159f, 0.07816863805055618f, 0.9282347559928894f, 0.9559932947158813f, 0.949683666229248f, +0.3883264660835266f, 0.22587813436985016f, 0.03350634127855301f, 0.7620106935501099f, 0.7858044505119324f, 0.2154935747385025f, 0.6644827723503113f, 0.25910478830337524f, +0.7708048224449158f, 0.530372679233551f, 0.9666953086853027f, 0.443063348531723f, 0.8115637302398682f, 0.3027447462081909f, 0.10168551653623581f, 0.7087714076042175f, +0.3278481066226959f, 0.10372496396303177f, 0.45532238483428955f, 0.04395560175180435f, 0.16517633199691772f, 0.34229278564453125f, 0.03883007913827896f, 0.5699621438980103f, +0.8935750722885132f, 0.6513714790344238f, 0.9635403752326965f, 0.7265933752059937f, 0.2603444457054138f, 0.4308323860168457f, 0.8526697754859924f, 0.5314345955848694f, +0.8800258040428162f, 0.8252757787704468f, 0.28216037154197693f, 0.4164634644985199f, 0.7866044640541077f, 0.6861607432365417f, 0.2345016896724701f, 0.8054500818252563f, +0.7395585179328918f, 0.7552778124809265f, 0.5670477151870728f, 0.3264714777469635f, 0.5961790680885315f, 0.31092369556427f, 0.43106573820114136f, 0.7052903175354004f, +0.269000768661499f, 0.4235988259315491f, 0.05868127942085266f, 0.42212092876434326f, 0.17379683256149292f, 0.4222390055656433f, 0.602871298789978f, 0.9431191682815552f, +0.4113869071006775f, 0.4898274838924408f, 0.46511998772621155f, 0.8291886448860168f, 0.17285701632499695f, 0.3945577144622803f, 0.18251320719718933f, 0.9661241769790649f, +0.37572231888771057f, 0.2464674711227417f, 0.9086164832115173f, 0.9630498886108398f, 0.8280327320098877f, 0.8075335025787354f, 0.19472375512123108f, 0.5621387362480164f, +0.6479425430297852f, 0.8324821591377258f, 0.6055590510368347f, 0.7791907787322998f, 0.8118930459022522f, 0.36595281958580017f, 0.17039668560028076f, 0.035512808710336685f, +0.856727659702301f, 0.7143254280090332f, 0.18362997472286224f, 0.33143752813339233f, 0.3729207515716553f, 0.8236104846000671f, 0.05455922335386276f, 0.9059659242630005f, +0.3536475896835327f, 0.5886189937591553f, 0.683087944984436f, 0.7004138827323914f, 0.7037487626075745f, 0.47869277000427246f, 0.9158058762550354f, 0.2746577560901642f, +0.11855930835008621f, 0.385226845741272f, 0.22011007368564606f, 0.0414605438709259f, 0.2921414077281952f, 0.6650614738464355f, 0.3387916684150696f, 0.951546311378479f, +0.93194180727005f, 0.8634629845619202f, 0.25367048382759094f, 0.8087610602378845f, 0.46454280614852905f, 0.9717197418212891f, 0.4287225008010864f, 0.0506557933986187f, +0.6101006865501404f, 0.5644593834877014f, 0.3193824589252472f, 0.3289216160774231f, 0.5047018527984619f, 0.8024407029151917f, 0.6455207467079163f, 0.8553745746612549f, +0.23744817078113556f, 0.5364178419113159f, 0.2704271376132965f, 0.12369532138109207f, 0.21901294589042664f, 0.16346299648284912f, 0.9035532474517822f, 0.7191408276557922f, +0.639571487903595f, 0.9678252935409546f, 0.1116635799407959f, 0.11049172282218933f, 0.5033186078071594f, 0.7770928740501404f, 0.6800697445869446f, 0.9908788204193115f, +0.20848329365253448f, 0.4091557264328003f, 0.8716433644294739f, 0.4644765257835388f, 0.6162759065628052f, 0.4569646120071411f, 0.23826123774051666f, 0.7391086220741272f, +0.1593221127986908f, 0.16380895674228668f, 0.12274955958127975f, 0.6008204221725464f, 0.39955100417137146f, 0.12317628413438797f, 0.9770308136940002f, 0.8319125175476074f, +0.768194854259491f, 0.6853364109992981f, 0.7558451294898987f, 0.07927430421113968f, 0.8842871785163879f, 0.6616427898406982f, 0.9252321124076843f, 0.18103085458278656f, +0.8635543584823608f, 0.4690260887145996f, 0.826902449131012f, 0.844913125038147f, 0.2294185608625412f, 0.5553662180900574f, 0.3468979299068451f, 0.7572212219238281f, +0.1527426689863205f, 0.8924693465232849f, 0.18103939294815063f, 0.9759874939918518f, 0.9810537099838257f, 0.7629536390304565f, 0.6753793954849243f, 0.26768597960472107f, +0.684603750705719f, 0.5922130346298218f, 0.5160776972770691f, 0.7787259817123413f, 0.23918147385120392f, 0.5032411813735962f, 0.8806113600730896f, 0.6606656312942505f, +0.07541855424642563f, 0.3051367402076721f, 0.562105119228363f, 0.04228835180401802f, 0.4800584316253662f, 0.5357306599617004f, 0.12229546904563904f, 0.4935590624809265f, +0.9839139580726624f, 0.871793806552887f, 0.7792264223098755f, 0.7404631972312927f, 0.3502906858921051f, 0.5433019995689392f, 0.7343246340751648f, 0.7916894555091858f, +0.9581377506256104f, 0.31043121218681335f, 0.6993855237960815f, 0.4098358750343323f, 0.6972544193267822f, 0.6614570617675781f, 0.018527282401919365f, 0.9494965076446533f, +0.17145852744579315f, 0.4449365437030792f, 0.642983078956604f, 0.30166974663734436f, 0.2798129916191101f, 0.21102406084537506f, 0.08529012650251389f, 0.8179988861083984f, +0.6173694729804993f, 0.2716391682624817f, 0.5247507691383362f, 0.3142513036727905f, 0.32841524481773376f, 0.022219812497496605f, 0.9088507294654846f, 0.22509564459323883f, +0.44956162571907043f, 0.2962169647216797f, 0.3284749686717987f, 0.1732272058725357f, 0.8098223805427551f, 0.21342144906520844f, 0.5576621890068054f, 0.7295339703559875f, +0.572669267654419f, 0.6043601036071777f, 0.6275768280029297f, 0.8235738277435303f, 0.6102627515792847f, 0.5096560120582581f, 0.195574551820755f, 0.20506982505321503f, +0.007635309360921383f, 0.765242338180542f, 0.2577986717224121f, 0.1029113382101059f, 0.6742112040519714f, 0.46447083353996277f, 0.39431530237197876f, 0.33792373538017273f, +0.8285050392150879f, 0.8263639807701111f, 0.38332587480545044f, 0.15949216485023499f, 0.9407081604003906f, 0.06260601431131363f, 0.3206555247306824f, 0.03941904380917549f, +0.7506226897239685f, 0.8745900392532349f, 0.7471809983253479f, 0.3384191393852234f, 0.24936175346374512f, 0.9142568707466125f, 0.8859516978263855f, 0.23027156293392181f, +0.3113008141517639f, 0.583977222442627f, 0.629967451095581f, 0.010665008798241615f, 0.8842276930809021f, 0.8697681427001953f, 0.8180223703384399f, 0.6647781729698181f, +0.34576401114463806f, 0.09410753101110458f, 0.5253910422325134f, 0.7056143879890442f, 0.4004898965358734f, 0.761290967464447f, 0.8198497891426086f, 0.5624760985374451f, +0.0005363355157896876f, 0.42392441630363464f, 0.5757200121879578f, 0.49253609776496887f, 0.37555262446403503f, 0.9818128943443298f, 0.018466489389538765f, 0.815751314163208f, +0.23644259572029114f, 0.39285165071487427f, 0.542668879032135f, 0.696900486946106f, 0.25007471442222595f, 0.20921768248081207f, 0.41270938515663147f, 0.5034736394882202f, +0.6016438603401184f, 0.44719669222831726f, 0.5143807530403137f, 0.9698296785354614f, 0.4769679605960846f, 0.6335652470588684f, 0.340339332818985f, 0.8960272669792175f, +0.300348699092865f, 0.0036436014343053102f, 0.6296029090881348f, 0.48262444138526917f, 0.995672881603241f, 0.13429415225982666f, 0.6212217807769775f, 0.5046564936637878f, +0.331651508808136f, 0.12842972576618195f, 0.813304603099823f, 0.6434200406074524f, 0.05808379501104355f, 0.7915510535240173f, 0.37356674671173096f, 0.24369391798973083f, +0.5802310705184937f, 0.32524508237838745f, 0.27317899465560913f, 0.6104955077171326f, 0.6403576731681824f, 0.0357295498251915f, 0.9136085510253906f, 0.08215925842523575f, +0.6603519916534424f, 0.7107301950454712f, 0.7081565856933594f, 0.2846948206424713f, 0.15655171871185303f, 0.9395102858543396f, 0.014910251833498478f, 0.8150469660758972f, +0.2838252782821655f, 0.6830089688301086f, 0.06936132162809372f, 0.5423089265823364f, 0.8044137358665466f, 0.9213212132453918f, 0.3029654920101166f, 0.3023965060710907f, +0.7864639759063721f, 0.18906089663505554f, 0.43657299876213074f, 0.47552311420440674f, 0.07715748995542526f, 0.7257282733917236f, 0.6867056488990784f, 0.796005368232727f, +0.6993430852890015f, 0.282246470451355f, 0.8027929067611694f, 0.23622097074985504f, 0.20148421823978424f, 0.21106426417827606f, 0.1942332684993744f, 0.21601857244968414f, +0.660800576210022f, 0.012447976507246494f, 0.6543583273887634f, 0.519095778465271f, 0.1909855455160141f, 0.8261252641677856f, 0.11307259649038315f, 0.4526149332523346f, +0.7570096254348755f, 0.9192043542861938f, 0.7028168439865112f, 0.7622546553611755f, 0.8415483236312866f, 0.9598397612571716f, 0.7899681925773621f, 0.1210215762257576f, +0.4337337613105774f, 0.6704515218734741f, 0.34822317957878113f, 0.8928492069244385f, 0.5470075011253357f, 0.3321479558944702f, 0.4404800832271576f, 0.013740809634327888f, +0.5238061547279358f, 0.05388936400413513f, 0.3100145161151886f, 0.8170335292816162f, 0.25401923060417175f, 0.8086166977882385f, 0.7605862021446228f, 0.07999613881111145f, +0.9342198967933655f, 0.4964749813079834f, 0.9227271676063538f, 0.4270027279853821f, 0.9223803281784058f, 0.7998969554901123f, 0.8879107236862183f, 0.6345372796058655f, +0.8965632915496826f, 0.5809388756752014f, 0.2751617729663849f, 0.9592809081077576f, 0.8357200622558594f, 0.6715741157531738f, 0.7325518131256104f, 0.2905230224132538f, +0.01879888027906418f, 0.904634952545166f, 0.426315575838089f, 0.5281484723091125f, 0.18034085631370544f, 0.4083886742591858f, 0.3948940336704254f, 0.5489615797996521f, +0.9166135191917419f, 0.4288693368434906f, 0.9241792559623718f, 0.8072030544281006f, 0.48308300971984863f, 0.6756996512413025f, 0.08117371052503586f, 0.836696982383728f, +0.08991176635026932f, 0.9201244711875916f, 0.2663198709487915f, 0.7128912210464478f, 0.04076575115323067f, 0.25852763652801514f, 0.09909213334321976f, 0.9381592869758606f, +0.8105595111846924f, 0.7417631149291992f, 0.24207079410552979f, 0.5008899569511414f, 0.6518822312355042f, 0.9100971817970276f, 0.8573886752128601f, 0.9533642530441284f, +0.6988818645477295f, 0.8905501961708069f, 0.9263713359832764f, 0.5522539019584656f, 0.476668119430542f, 0.2626575827598572f, 0.29798418283462524f, 0.9419410824775696f, +0.9737957715988159f, 0.5995526313781738f, 0.6413019299507141f, 0.6002839207649231f, 0.10779611766338348f, 0.38122305274009705f, 0.8027066588401794f, 0.052615005522966385f, +0.4885832965373993f, 0.6437211036682129f, 0.9593756198883057f, 0.5347092747688293f, 0.790242612361908f, 0.7521849274635315f, 0.6530173420906067f, 0.969667375087738f, +0.4827800393104553f, 0.8158297538757324f, 0.4678249657154083f, 0.0293177030980587f, 0.07658310234546661f, 0.3218388259410858f, 0.020802978426218033f, 0.834385871887207f, +0.03962147980928421f, 0.459096223115921f, 0.5202383995056152f, 0.588342547416687f, 0.617382824420929f, 0.21101778745651245f, 0.2024267613887787f, 0.06430909782648087f, +0.24006082117557526f, 0.3884958028793335f, 0.5016932487487793f, 0.6129369139671326f, 0.4028456509113312f, 0.8939777612686157f, 0.6224488615989685f, 0.24688594043254852f, +0.9571091532707214f, 0.5347527265548706f, 0.36772727966308594f, 0.24004942178726196f, 0.3955462872982025f, 0.516751229763031f, 0.9906906485557556f, 0.08837339282035828f, +0.153984934091568f, 0.13387255370616913f, 0.6668024063110352f, 0.7486540675163269f, 0.3102898597717285f, 0.43354788422584534f, 0.006377255544066429f, 0.26196688413619995f, +0.28266647458076477f, 0.8286129236221313f, 0.36017781496047974f, 0.2649487853050232f, 0.728076159954071f, 0.8187317848205566f, 0.11857722699642181f, 0.5384154319763184f, +0.20434577763080597f, 0.6232112050056458f, 0.5035123825073242f, 0.6898849010467529f, 0.8466709852218628f, 0.751868724822998f, 0.903544008731842f, 0.3090702295303345f, +0.32313159108161926f, 0.2570573389530182f, 0.0915645956993103f, 0.9493945240974426f, 0.9996245503425598f, 0.6630460619926453f, 0.025067593902349472f, 0.4025036692619324f, +0.3903188407421112f, 0.46707746386528015f, 0.30074018239974976f, 0.4388968050479889f, 0.6647027730941772f, 0.1687772274017334f, 0.2508566975593567f, 0.3987056314945221f, +0.7293086051940918f, 0.7243094444274902f, 0.4371218979358673f, 0.9600601196289062f, 0.2847795784473419f, 0.37292060256004333f, 0.6151398420333862f, 0.8359959721565247f, +0.2104983627796173f, 0.3736107647418976f, 0.7099607586860657f, 0.25952479243278503f, 0.22031575441360474f, 0.5784656405448914f, 0.4455453157424927f, 0.42218270897865295f, +0.7629344463348389f, 0.7047722339630127f, 0.545818030834198f, 0.48854273557662964f, 0.4269477427005768f, 0.1517508625984192f, 0.45613282918930054f, 0.7881573438644409f, +0.6980149149894714f, 0.05396485701203346f, 0.020567677915096283f, 0.7134687304496765f, 0.688771665096283f, 0.772697925567627f, 0.22160163521766663f, 0.7583547234535217f, +0.34859588742256165f, 0.1971626579761505f, 0.4246281087398529f, 0.5927053689956665f, 0.8903059363365173f, 0.09799341857433319f, 0.5768023133277893f, 0.2294529676437378f, +0.3537193536758423f, 0.5560513138771057f, 0.830673098564148f, 0.18385301530361176f, 0.5429514646530151f, 0.8757035136222839f, 0.5230299830436707f, 0.09597837924957275f, +0.5529240965843201f, 0.8762695789337158f, 0.602199137210846f, 0.9802056550979614f, 0.03861103951931f, 0.29327988624572754f, 0.6525843143463135f, 0.7977460622787476f, +0.5537592768669128f, 0.010473617352545261f, 0.35782715678215027f, 0.7574020624160767f, 0.19573266804218292f, 0.1298232078552246f, 0.6191068887710571f, 0.676011860370636f, +0.8097526431083679f, 0.5699955821037292f, 0.2141810655593872f, 0.6646502017974854f, 0.22923217713832855f, 0.5881469249725342f, 0.4259093105792999f, 0.25536081194877625f, +0.15225757658481598f, 0.4693499505519867f, 0.5602362751960754f, 0.512981116771698f, 0.24207356572151184f, 0.8509631156921387f, 0.1508050411939621f, 0.5363480448722839f, +0.3141010105609894f, 0.9005318284034729f, 0.6020007133483887f, 0.1443602591753006f, 0.21206511557102203f, 0.5861096382141113f, 0.04874275624752045f, 0.8534778356552124f, +0.4518912136554718f, 0.5703157782554626f, 0.828724205493927f, 0.9747130870819092f, 0.5254073739051819f, 0.4177856147289276f, 0.6620259284973145f, 0.5941286683082581f, +0.45314276218414307f, 0.5841764807701111f, 0.9734567999839783f, 0.29850947856903076f, 0.2129715383052826f, 0.4426017701625824f, 0.41701680421829224f, 0.3234352469444275f, +0.26676347851753235f, 0.8695616126060486f, 0.22608204185962677f, 0.9944987893104553f, 0.4593903124332428f, 0.9688195586204529f, 0.19460415840148926f, 0.8497216105461121f, +0.07943356037139893f, 0.5091153979301453f, 0.380085825920105f, 0.004405041225254536f, 0.4574469327926636f, 0.15463510155677795f, 0.4096347391605377f, 0.5006178021430969f, +0.20025403797626495f, 0.6109371781349182f, 0.1780332773923874f, 0.2730701267719269f, 0.35876840353012085f, 0.1590179204940796f, 0.971558153629303f, 0.7958972454071045f, +0.9652273654937744f, 0.1837223470211029f, 0.044829417020082474f, 0.08063691109418869f, 0.08318126946687698f, 0.6683223247528076f, 0.48251330852508545f, 0.9433320760726929f, +0.18191862106323242f, 0.22676965594291687f, 0.013446223922073841f, 0.4735150933265686f, 0.1937582790851593f, 0.3621455132961273f, 0.5107322931289673f, 0.40091606974601746f, +0.99763423204422f, 0.4323333203792572f, 0.0914551168680191f, 0.9940122961997986f, 0.869631826877594f, 0.20877499878406525f, 0.9572750329971313f, 0.9547985196113586f, +0.9424625039100647f, 0.3615661561489105f, 0.027989203110337257f, 0.6021400094032288f, 0.4399346709251404f, 0.7697715759277344f, 0.4445931017398834f, 0.6711310744285583f, +0.34496065974235535f, 0.4094763696193695f, 0.41739189624786377f, 0.7857021689414978f, 0.9517151713371277f, 0.19302527606487274f, 0.4082082509994507f, 0.952326774597168f, +0.8723828196525574f, 0.3114788234233856f, 0.876167356967926f, 0.7968365550041199f, 0.28908035159111023f, 0.08762077242136002f, 0.5818556547164917f, 0.7698723077774048f, +0.0644305944442749f, 0.16588900983333588f, 0.7400562763214111f, 0.612129271030426f, 0.16922427713871002f, 0.7902143001556396f, 0.08171535283327103f, 0.9303566217422485f, +0.7427831888198853f, 0.9335594177246094f, 0.5495306849479675f, 0.1422625482082367f, 0.2796914875507355f, 0.29351845383644104f, 0.030770761892199516f, 0.9163030385971069f, +0.9626980423927307f, 0.9512636065483093f, 0.43362268805503845f, 0.6669059991836548f, 0.08389929682016373f, 0.5308070182800293f, 0.843270480632782f, 0.6818481087684631f, +0.01485419925302267f, 0.0026354992296546698f, 0.3367418348789215f, 0.5564901232719421f, 0.37102094292640686f, 0.28907647728919983f, 0.9779204726219177f, 0.28665322065353394f, +0.9698176383972168f, 0.8656070828437805f, 0.9333028197288513f, 0.7489396929740906f, 0.5739642977714539f, 0.06270883977413177f, 0.057747408747673035f, 0.48011234402656555f, +0.3801781237125397f, 0.655841588973999f, 0.8344826102256775f, 0.5958617925643921f, 0.9006958603858948f, 0.04935063049197197f, 0.8188113570213318f, 0.5535025596618652f, +0.747641384601593f, 0.8324117660522461f, 0.11188771575689316f, 0.29061242938041687f, 0.6030914783477783f, 0.1742902249097824f, 0.9623550772666931f, 0.7394469976425171f, +0.45987144112586975f, 0.5768980979919434f, 0.3754120469093323f, 0.32522284984588623f, 0.15404444932937622f, 0.6967469453811646f, 0.8507188558578491f, 0.41739314794540405f, +0.2834266126155853f, 0.1366167962551117f, 0.3036595582962036f, 0.0754416361451149f, 0.051605306565761566f, 0.0312466062605381f, 0.06682541221380234f, 0.5849851369857788f, +0.6706703901290894f, 0.16626745462417603f, 0.06907811015844345f, 0.9936847686767578f, 0.875842273235321f, 0.2500562369823456f, 0.2632218301296234f, 0.8943344950675964f, +0.477667897939682f, 0.6820050477981567f, 0.2935869097709656f, 0.7433685064315796f, 0.30662479996681213f, 0.3729126751422882f, 0.41978928446769714f, 0.4388144612312317f, +0.42140811681747437f, 0.2786560654640198f, 0.5165058374404907f, 0.7638821005821228f, 0.2742445170879364f, 0.828049898147583f, 0.2415759265422821f, 0.7734129428863525f, +0.2889663577079773f, 0.22386960685253143f, 0.9515423774719238f, 0.9131027460098267f, 0.6204333901405334f, 0.09072922170162201f, 0.07087666541337967f, 0.07309485971927643f, +0.04589776694774628f, 0.8833428621292114f, 0.6106040477752686f, 0.7648274898529053f, 0.9543417096138f, 0.038446031510829926f, 0.8219302296638489f, 0.48305556178092957f, +0.4623887836933136f, 0.5942881107330322f, 0.7544837594032288f, 0.7272112369537354f, 0.08240848779678345f, 0.646886944770813f, 0.6664937138557434f, 0.9234912991523743f, +0.6150311827659607f, 0.920643150806427f, 0.5844698548316956f, 0.6345582604408264f, 0.7539254426956177f, 0.9451401233673096f, 0.09062530100345612f, 0.9343328475952148f, +0.4392825663089752f, 0.46675777435302734f, 0.25232821702957153f, 0.575046181678772f, 0.8780412077903748f, 0.8320307731628418f, 0.1132153570652008f, 0.3628867566585541f, +0.8652475476264954f, 0.05917561054229736f, 0.2986232340335846f, 0.6252793073654175f, 0.7693189978599548f, 0.9720708131790161f, 0.719862163066864f, 0.552768349647522f, +0.46127140522003174f, 0.33353254199028015f, 0.9748181700706482f, 0.5904383063316345f, 0.06903921812772751f, 0.34167391061782837f, 0.0923902615904808f, 0.994041919708252f, +0.38826295733451843f, 0.16106240451335907f, 0.13725492358207703f, 0.185682475566864f, 0.8921594619750977f, 0.22734875977039337f, 0.23604479432106018f, 0.2079768031835556f, +0.3726702928543091f, 0.6996623277664185f, 0.7499970197677612f, 0.4940485656261444f, 0.6114183068275452f, 0.05096839368343353f, 0.19250135123729706f, 0.43794503808021545f, +0.9203927516937256f, 0.2301502674818039f, 0.5664929151535034f, 0.48025864362716675f, 0.9659780859947205f, 0.25417008996009827f, 0.027553606778383255f, 0.8072524666786194f, +0.8173906207084656f, 0.9824744462966919f, 0.11870786547660828f, 0.47084280848503113f, 0.1125742644071579f, 0.006725751329213381f, 0.8284950852394104f, 0.43593519926071167f, +0.34264838695526123f, 0.6476005911827087f, 0.44195327162742615f, 0.6985320448875427f, 0.06777562946081161f, 0.522937536239624f, 0.23571887612342834f, 0.3582959473133087f, +0.6598618030548096f, 0.14645139873027802f, 0.6927798986434937f, 0.826826810836792f, 0.5678854584693909f, 0.4394661784172058f, 0.5843835473060608f, 0.2090592235326767f, +0.7385257482528687f, 0.09570657461881638f, 0.19490772485733032f, 0.6329184770584106f, 0.07288806885480881f, 0.09017837047576904f, 0.41348928213119507f, 0.00818400178104639f, +0.631602942943573f, 0.9440009593963623f, 0.18025192618370056f, 0.5792768597602844f, 0.8169216513633728f, 0.6983381509780884f, 0.049982454627752304f, 0.772471010684967f, +0.19333067536354065f, 0.7520151138305664f, 0.8166298866271973f, 0.8363980650901794f, 0.6410394310951233f, 0.5858458280563354f, 0.3041398823261261f, 0.8455954194068909f, +0.9483469724655151f, 0.20324891805648804f, 0.4640040397644043f, 0.5106426477432251f, 0.7625426650047302f, 0.6765406131744385f, 0.1697840541601181f, 0.9429811835289001f, +0.4570765495300293f, 0.029176775366067886f, 0.8317357301712036f, 0.9910029172897339f, 0.9934840202331543f, 0.34793487191200256f, 0.35187458992004395f, 0.6923243999481201f, +0.07369139045476913f, 0.5474799871444702f, 0.9217953681945801f, 0.015693336725234985f, 0.9851922392845154f, 0.12070050835609436f, 0.5599392652511597f, 0.42984265089035034f, +0.02050483413040638f, 0.4624652564525604f, 0.9884357452392578f, 0.27737000584602356f, 0.11687362194061279f, 0.536080539226532f, 0.31938281655311584f, 0.8874606490135193f, +0.14874859154224396f, 0.2117755115032196f, 0.45499899983406067f, 0.5154137015342712f, 0.7181100249290466f, 0.4227363169193268f, 0.5872603058815002f, 0.3519318103790283f, +0.2055002599954605f, 0.5274559855461121f, 0.7653648853302002f, 0.4517713785171509f, 0.4983452558517456f, 0.4328921437263489f, 0.8213747143745422f, 0.36312565207481384f, +0.3734649121761322f, 0.6040551066398621f, 0.2686409056186676f, 0.6509500741958618f, 0.9328741431236267f, 0.6161840558052063f, 0.8419626355171204f, 0.9483509659767151f, +0.3546929657459259f, 0.5041983127593994f, 0.3495355546474457f, 0.7378361821174622f, 0.22996684908866882f, 0.567269504070282f, 0.4176906645298004f, 0.9555425643920898f, +0.02885301224887371f, 0.09839744120836258f, 0.6138918995857239f, 0.9255605340003967f, 0.6399722695350647f, 0.04347008094191551f, 0.25861045718193054f, 0.9043576121330261f, +0.5964489579200745f, 0.9677312970161438f, 0.3578222990036011f, 0.7071089148521423f, 0.9287668466567993f, 0.61722332239151f, 0.2658930718898773f, 0.0943983867764473f, +0.6085066199302673f, 0.1540556252002716f, 0.11512837558984756f, 0.7583343386650085f, 0.15771356225013733f, 0.44397976994514465f, 0.16002850234508514f, 0.3973364531993866f, +0.19188813865184784f, 0.6238232851028442f, 0.23351314663887024f, 0.718563437461853f, 0.15160542726516724f, 0.5788350701332092f, 0.9033835530281067f, 0.3799131214618683f, +0.2627300024032593f, 0.5567068457603455f, 0.03429482504725456f, 0.6258171796798706f, 0.648137092590332f, 0.6958909630775452f, 0.7055286169052124f, 0.8485799431800842f, +0.9541481733322144f, 0.37002021074295044f, 0.13460852205753326f, 0.4816235899925232f, 0.06817977130413055f, 0.31300005316734314f, 0.8643892407417297f, 0.9263169765472412f, +0.4275237023830414f, 0.7191577553749084f, 0.9947720170021057f, 0.47068601846694946f, 0.8405026197433472f, 0.05803283676505089f, 0.4530935287475586f, 0.0714101567864418f, +0.21077260375022888f, 0.47569286823272705f, 0.2078133523464203f, 0.6841265559196472f, 0.5740995407104492f, 0.08618278056383133f, 0.14087606966495514f, 0.9256008267402649f, +0.9507672190666199f, 0.4864705204963684f, 0.8415930867195129f, 0.48262229561805725f, 0.7709434032440186f, 0.6731087565422058f, 0.1647825390100479f, 0.10406383872032166f, +0.7778822183609009f, 0.6586939096450806f, 0.1722625344991684f, 0.3377887010574341f, 0.329653799533844f, 0.5019599795341492f, 0.46233606338500977f, 0.9737785458564758f, +0.11984052509069443f, 0.36639541387557983f, 0.912293016910553f, 0.7975789904594421f, 0.19014456868171692f, 0.6147395372390747f, 0.2965388596057892f, 0.5329226851463318f, +0.8992180228233337f, 0.08186668902635574f, 0.17209789156913757f, 0.5737667083740234f, 0.8298890590667725f, 0.977578341960907f, 0.5403603315353394f, 0.37568041682243347f, +0.13592301309108734f, 0.9742003679275513f, 0.4791018068790436f, 0.4933066964149475f, 0.8650335669517517f, 0.2558598816394806f, 0.36317864060401917f, 0.34213826060295105f, +0.47336462140083313f, 0.7444307208061218f, 0.09607528895139694f, 0.7781095504760742f, 0.49500271677970886f, 0.3025868833065033f, 0.0025773150846362114f, 0.462985634803772f, +0.05275868624448776f, 0.4664860665798187f, 0.6961216926574707f, 0.011493795551359653f, 0.28984203934669495f, 0.5419854521751404f, 0.16080822050571442f, 0.6730135679244995f, +0.78413987159729f, 0.005323883146047592f, 0.20848272740840912f, 0.7771108150482178f, 0.2683199644088745f, 0.45375296473503113f, 0.9357743859291077f, 0.8867794275283813f, +0.5603445172309875f, 0.6902959942817688f, 0.13789162039756775f, 0.18552516400814056f, 0.8499255776405334f, 0.8739032745361328f, 0.9054996967315674f, 0.37921836972236633f, +0.2751818597316742f, 0.028722580522298813f, 0.6457902789115906f, 0.6085193753242493f, 0.5620608925819397f, 0.17224913835525513f, 0.07481234520673752f, 0.7364822626113892f, +0.09454777836799622f, 0.06640685349702835f, 0.431535542011261f, 0.2289125919342041f, 0.35716116428375244f, 0.9604290723800659f, 0.8729102611541748f, 0.007077951915562153f, +0.9978758692741394f, 0.03474694862961769f, 0.9146316051483154f, 0.8390886187553406f, 0.10374588519334793f, 0.39068710803985596f, 0.820578932762146f, 0.9734292030334473f, +0.20763888955116272f, 0.43997079133987427f, 0.022655688226222992f, 0.6658806204795837f, 0.7891227006912231f, 0.5289875864982605f, 0.5490849018096924f, 0.2625150680541992f, +0.7880313396453857f, 0.7042449116706848f, 0.3214661478996277f, 0.5475991368293762f, 0.06210744380950928f, 0.5479479432106018f, 0.032663773745298386f, 0.18908672034740448f, +0.070882648229599f, 0.659966766834259f, 0.5086272358894348f, 0.06796439737081528f, 0.623504102230072f, 0.05036170780658722f, 0.4279877245426178f, 0.19332030415534973f, +0.3369738757610321f, 0.3817440867424011f, 0.9482909440994263f, 0.3637794554233551f, 0.6683072447776794f, 0.5249865055084229f, 0.06086551398038864f, 0.9811998009681702f, +0.04690803587436676f, 0.17375566065311432f, 0.3687935769557953f, 0.5570880770683289f, 0.9910111427307129f, 0.8210697174072266f, 0.9557138681411743f, 0.23911815881729126f, +0.40537789463996887f, 0.8169114589691162f, 0.37923115491867065f, 0.07608182728290558f, 0.24546906352043152f, 0.48137885332107544f, 0.6230088472366333f, 0.6383041143417358f, +0.3691009283065796f, 0.4431726038455963f, 0.06325150281190872f, 0.8682757019996643f, 0.06563742458820343f, 0.19794861972332f, 0.8681601881980896f, 0.266804575920105f, +0.5370619893074036f, 0.3891420364379883f, 0.8021251559257507f, 0.061135418713092804f, 0.3222401440143585f, 0.9931699633598328f, 0.7192761301994324f, 0.8337288498878479f, +0.044789716601371765f, 0.9852505326271057f, 0.7110365629196167f, 0.8705730438232422f, 0.5994038581848145f, 0.9059849977493286f, 0.032661084085702896f, 0.8401535153388977f, +0.22395572066307068f, 0.8003281354904175f, 0.5068496465682983f, 0.8925954699516296f, 0.30414485931396484f, 0.5763803720474243f, 0.21739505231380463f, 0.8289868235588074f, +0.1234564259648323f, 0.8331651091575623f, 0.5589659810066223f, 0.04959991201758385f, 0.39711421728134155f, 0.15389004349708557f, 0.588824987411499f, 0.3179483413696289f, +0.1011100560426712f, 0.16767030954360962f, 0.800743818283081f, 0.027426498010754585f, 0.13421595096588135f, 0.754525899887085f, 0.7601049542427063f, 0.4068533778190613f, +0.22923420369625092f, 0.9097742438316345f, 0.045898184180259705f, 0.2802766263484955f, 0.5252999663352966f, 0.42052409052848816f, 0.4599216878414154f, 0.8714907765388489f, +0.19519171118736267f, 0.5705806612968445f, 0.10656990855932236f, 0.824768602848053f, 0.5775546431541443f, 0.3335314691066742f, 0.6678937077522278f, 0.9673326015472412f, +0.606163740158081f, 0.5291415452957153f, 0.6726921796798706f, 0.946994423866272f, 0.5340345501899719f, 0.3008868992328644f, 0.20379842817783356f, 0.09194841235876083f, +0.15589116513729095f, 0.47024112939834595f, 0.25262370705604553f, 0.5819081664085388f, 0.45361462235450745f, 0.594623863697052f, 0.8852953314781189f, 0.4987548887729645f, +0.9821918606758118f, 0.3336288630962372f, 0.4447966516017914f, 0.22677525877952576f, 0.5770084857940674f, 0.2652028501033783f, 0.7426324486732483f, 0.597416877746582f, +0.9491297006607056f, 0.4727189242839813f, 0.9876523017883301f, 0.7781710624694824f, 0.23281385004520416f, 0.17687369883060455f, 0.46230223774909973f, 0.007410925813019276f, +0.8577125668525696f, 0.5281519293785095f, 0.21702149510383606f, 0.5142185091972351f, 0.24534699320793152f, 0.8055418729782104f, 0.48400959372520447f, 0.7097487449645996f, +0.05883574113249779f, 0.16525162756443024f, 0.3390716314315796f, 0.23157818615436554f, 0.8968210220336914f, 0.46650266647338867f, 0.6016714572906494f, 0.6619519591331482f, +0.2737637460231781f, 0.8163610100746155f, 0.763282835483551f, 0.20257623493671417f, 0.9517196416854858f, 0.12003500759601593f, 0.7791969776153564f, 0.8980410695075989f, +0.1654389202594757f, 0.3307085633277893f, 0.4108135998249054f, 0.5674567818641663f, 0.833400309085846f, 0.630517840385437f, 0.31261298060417175f, 0.5854710340499878f, +0.7045813798904419f, 0.671992838382721f, 0.7875059843063354f, 0.2831651568412781f, 0.7883023619651794f, 0.018769290298223495f, 0.5785804390907288f, 0.845392644405365f, +0.5639707446098328f, 0.35234737396240234f, 0.08128917962312698f, 0.9221512675285339f, 0.13421253859996796f, 0.794546902179718f, 0.09996990859508514f, 0.18554751574993134f, +0.23921406269073486f, 0.6489213705062866f, 0.5632896423339844f, 0.766339123249054f, 0.20044636726379395f, 0.8234366774559021f, 0.6088196039199829f, 0.48470041155815125f, +0.5485720038414001f, 0.7468726634979248f, 0.42893746495246887f, 0.787432849407196f, 0.5212801098823547f, 0.37813061475753784f, 0.12739333510398865f, 0.7941597104072571f, +0.5732806921005249f, 0.31643128395080566f, 0.7959457635879517f, 0.3241267502307892f, 0.42480775713920593f, 0.587212324142456f, 0.8691753149032593f, 0.7191347479820251f, +0.7740439176559448f, 0.3549492359161377f, 0.7173081636428833f, 0.37347880005836487f, 0.2817983031272888f, 0.8260512351989746f, 0.17853491008281708f, 0.7339833974838257f, +0.6588062047958374f, 0.8248047828674316f, 0.40532928705215454f, 0.055626995861530304f, 0.4081254005432129f, 0.030843764543533325f, 0.7191371917724609f, 0.9678720831871033f, +0.5524154901504517f, 0.691243052482605f, 0.37078848481178284f, 0.40451136231422424f, 0.49664685130119324f, 0.554512619972229f, 0.022623399272561073f, 0.9520489573478699f, +0.6404207944869995f, 0.02063664048910141f, 0.9671487808227539f, 0.2418968677520752f, 0.6727787852287292f, 0.602557897567749f, 0.6403398513793945f, 0.13617020845413208f, +0.05762606859207153f, 0.26049184799194336f, 0.6933104395866394f, 0.8703709840774536f, 0.2844853401184082f, 0.8103657364845276f, 0.08043817430734634f, 0.7514108419418335f, +0.985102117061615f, 0.5662140846252441f, 0.47328898310661316f, 0.7577810883522034f, 0.4294936954975128f, 0.5632451176643372f, 0.3502071499824524f, 0.1864853799343109f, +0.8665152192115784f, 0.1536162942647934f, 0.7422971725463867f, 0.5860354900360107f, 0.4180344343185425f, 0.6823535561561584f, 0.11398402601480484f, 0.2559734582901001f, +0.6414368748664856f, 0.31535229086875916f, 0.6665693521499634f, 0.83720862865448f, 0.44292983412742615f, 0.9493645429611206f, 0.405058890581131f, 0.30615800619125366f, +0.8654115200042725f, 0.5892701148986816f, 0.5054564476013184f, 0.07026822119951248f, 0.4012802839279175f, 0.6926661133766174f, 0.1439620554447174f, 0.9534417390823364f, +0.6447319388389587f, 0.10749296098947525f, 0.3453868329524994f, 0.5043839812278748f, 0.12693598866462708f, 0.8754304051399231f, 0.820711076259613f, 0.20965903997421265f, +0.08153381198644638f, 0.8782892823219299f, 0.1301158219575882f, 0.18941527605056763f, 0.9321920275688171f, 0.04350116848945618f, 0.3910270929336548f, 0.1336711198091507f, +0.04126125946640968f, 0.5977622270584106f, 0.22484029829502106f, 0.10861753672361374f, 0.06274432688951492f, 0.391932874917984f, 0.8882194757461548f, 0.668134868144989f, +0.5951958894729614f, 0.22977513074874878f, 0.18624131381511688f, 0.09509971737861633f, 0.4671854078769684f, 0.30155375599861145f, 0.5070106983184814f, 0.10296794772148132f, +0.3509747385978699f, 0.5853185057640076f, 0.7494778037071228f, 0.650847852230072f, 0.891370952129364f, 0.28541073203086853f, 0.558700680732727f, 0.3296176791191101f, +0.38436955213546753f, 0.6738578677177429f, 0.9337341785430908f, 0.4246159493923187f, 0.04906682297587395f, 0.9556946158409119f, 0.30263006687164307f, 0.7117378115653992f, +0.9973833560943604f, 0.47101283073425293f, 0.19608551263809204f, 0.03198227286338806f, 0.26257315278053284f, 0.8873147964477539f, 0.636789858341217f, 0.5057327151298523f, +0.38348978757858276f, 0.9931568503379822f, 0.6463260650634766f, 0.009291806258261204f, 0.8544992804527283f, 0.5518521070480347f, 0.5669432878494263f, 0.32845720648765564f, +0.9952568411827087f, 0.11810365319252014f, 0.16415661573410034f, 0.425983726978302f, 0.8808797597885132f, 0.1592264324426651f, 0.6225457191467285f, 0.7997030019760132f, +0.33086028695106506f, 0.8828945159912109f, 0.9190752506256104f, 0.940666675567627f, 0.5533237457275391f, 0.7576636075973511f, 0.3182023763656616f, 0.00775443110615015f, +0.5123026371002197f, 0.051571186631917953f, 0.2982582449913025f, 0.9673544764518738f, 0.9531574249267578f, 0.6946870684623718f, 0.9608858823776245f, 0.023540878668427467f, +0.9379200339317322f, 0.6889216899871826f, 0.09872382879257202f, 0.33533644676208496f, 0.5261285305023193f, 0.17123866081237793f, 0.1830970048904419f, 0.027498045936226845f, +0.38552945852279663f, 0.5496695041656494f, 0.45966637134552f, 0.3622237741947174f, 0.29819655418395996f, 0.37950992584228516f, 0.23143449425697327f, 0.3990849554538727f, +0.5302361249923706f, 0.3437814712524414f, 0.8600744605064392f, 0.29869481921195984f, 0.7934383153915405f, 0.5516674518585205f, 0.9410515427589417f, 0.6093835830688477f, +0.9807067513465881f, 0.5805237293243408f, 0.3655347228050232f, 0.6517588496208191f, 0.4073626697063446f, 0.5525509119033813f, 0.45433005690574646f, 0.5554624795913696f, +0.5228123068809509f, 0.1243596002459526f, 0.375163197517395f, 0.4974195957183838f, 0.2881382703781128f, 0.43658414483070374f, 0.2893948554992676f, 0.999306857585907f, +0.1662144511938095f, 0.20561625063419342f, 0.6971157193183899f, 0.735734760761261f, 0.6285345554351807f, 0.7519679665565491f, 0.6036795973777771f, 0.9526137113571167f, +0.8725236058235168f, 0.026388773694634438f, 0.32381153106689453f, 0.6737509965896606f, 0.6726499199867249f, 0.5209272503852844f, 0.5062612891197205f, 0.8359955549240112f, +0.9966405630111694f, 0.07820247858762741f, 0.7578803896903992f, 0.38885948061943054f, 0.7363991737365723f, 0.6291284561157227f, 0.9806172847747803f, 0.6155566573143005f, +0.33720213174819946f, 0.20338396728038788f, 0.12152672559022903f, 0.9679871797561646f, 0.2893067002296448f, 0.4996803104877472f, 0.7650920748710632f, 0.58516925573349f, +0.4465826749801636f, 0.12652048468589783f, 0.2772881090641022f, 0.2457570880651474f, 0.3866603672504425f, 0.08726511150598526f, 0.810522735118866f, 0.24411357939243317f, +0.8515281081199646f, 0.6782422065734863f, 0.2960825562477112f, 0.1268361359834671f, 0.7357785105705261f, 0.36790427565574646f, 0.46112939715385437f, 0.38273826241493225f, +0.9502683281898499f, 0.8358911871910095f, 0.22543755173683167f, 0.36583635210990906f, 0.6549385786056519f, 0.2511042654514313f, 0.7665416598320007f, 0.7614628076553345f, +0.8194305896759033f, 0.18556949496269226f, 0.92945796251297f, 0.5776422023773193f, 0.35397782921791077f, 0.45746931433677673f, 0.7869539856910706f, 0.939351499080658f, +0.511642575263977f, 0.14665962755680084f, 0.8246169686317444f, 0.6820443868637085f, 0.8618874549865723f, 0.7455250024795532f, 0.5316562652587891f, 0.6497313976287842f, +0.7958055138587952f, 0.7005372047424316f, 0.052543818950653076f, 0.5121947526931763f, 0.005712240934371948f, 0.8615626692771912f, 0.5718104839324951f, 0.5181583166122437f, +0.26136142015457153f, 0.253414124250412f, 0.6676039695739746f, 0.6817158460617065f, 0.10841282457113266f, 0.06549036502838135f, 0.7526530623435974f, 0.6750487685203552f, +0.47466760873794556f, 0.18551035225391388f, 0.7134082913398743f, 0.19562098383903503f, 0.11899738758802414f, 0.749748945236206f, 0.17145149409770966f, 0.06523565948009491f, +0.8051576614379883f, 0.9348359704017639f, 0.9233439564704895f, 0.939874529838562f, 0.6702195405960083f, 0.8125284314155579f, 0.182163804769516f, 0.9070398807525635f, +0.827857494354248f, 0.671998918056488f, 0.6780608892440796f, 0.9066782593727112f, 0.15358050167560577f, 0.8545413613319397f, 0.6685978174209595f, 0.622040331363678f, +0.7030000686645508f, 0.5302785634994507f, 0.06186540797352791f, 0.6406458020210266f, 0.43497973680496216f, 0.46325984597206116f, 0.5633398294448853f, 0.7071283459663391f, +0.44967392086982727f, 0.22877338528633118f, 0.5870994329452515f, 0.6560526490211487f, 0.7302861213684082f, 0.04428640007972717f, 0.14150576293468475f, 0.00880635529756546f, +0.7558512687683105f, 0.8572755455970764f, 0.7478339672088623f, 0.9846768975257874f, 0.4959038197994232f, 0.3166709840297699f, 0.7535855174064636f, 0.14891476929187775f, +0.3824600577354431f, 0.8067463040351868f, 0.43956536054611206f, 0.6066262125968933f, 0.9641971588134766f, 0.8168866038322449f, 0.47326183319091797f, 0.17658738791942596f, +0.5628061294555664f, 0.49637916684150696f, 0.5457518696784973f, 0.28827613592147827f, 0.8397256135940552f, 0.7436685562133789f, 0.08214834332466125f, 0.5333360433578491f, +0.5167986154556274f, 0.10629189014434814f, 0.3879237473011017f, 0.11558869481086731f, 0.9330167770385742f, 0.4115952253341675f, 0.6305307149887085f, 0.03466172516345978f, +0.5728830099105835f, 0.10290553420782089f, 0.39021772146224976f, 0.10877110809087753f, 0.09983918815851212f, 0.0003135929291602224f, 0.521016001701355f, 0.7217257618904114f, +0.4894479811191559f, 0.4771828353404999f, 0.851604163646698f, 0.17210575938224792f, 0.021264728158712387f, 0.20171239972114563f, 0.035662081092596054f, 0.33695274591445923f, +0.34437254071235657f, 0.6748172640800476f, 0.36840227246284485f, 0.7632672190666199f, 0.4146226644515991f, 0.5081478357315063f, 0.13959559798240662f, 0.20897464454174042f, +0.31382128596305847f, 0.7153906226158142f, 0.23876740038394928f, 0.9241202473640442f, 0.7268504500389099f, 0.5550550222396851f, 0.20061522722244263f, 0.17804063856601715f, +0.6074908971786499f, 0.940274715423584f, 0.32627418637275696f, 0.2965828776359558f, 0.5974871516227722f, 0.28919482231140137f, 0.7647704482078552f, 0.4614568054676056f, +0.8382704257965088f, 0.9182372093200684f, 0.7799807786941528f, 0.5192328691482544f, 0.21987175941467285f, 0.526443600654602f, 0.003912885673344135f, 0.6297305822372437f, +0.3640662431716919f, 0.8575165867805481f, 0.9683382511138916f, 0.5953452587127686f, 0.7013522982597351f, 0.07437966018915176f, 0.5073524713516235f, 0.0589100606739521f, +0.32603561878204346f, 0.63795006275177f, 0.08676877617835999f, 0.8786547780036926f, 0.3489101827144623f, 0.589615523815155f, 0.3251112997531891f, 0.13004273176193237f, +0.5538479685783386f, 0.038234829902648926f, 0.9457506537437439f, 0.44364726543426514f, 0.9720478057861328f, 0.8107343316078186f, 0.7274510264396667f, 0.736583948135376f, +0.48499277234077454f, 0.9357761740684509f, 0.833634614944458f, 0.6574153304100037f, 0.5944344401359558f, 0.8862773180007935f, 0.6489359736442566f, 0.8860538005828857f, +0.5155234932899475f, 0.23535776138305664f, 0.49295321106910706f, 0.18965400755405426f, 0.46384891867637634f, 0.8623766303062439f, 0.13692884147167206f, 0.4012332856655121f, +0.45750972628593445f, 0.8585231900215149f, 0.4887571632862091f, 0.9975079894065857f, 0.24784135818481445f, 0.4290187358856201f, 0.11422345787286758f, 0.13166813552379608f, +0.81082683801651f, 0.46796101331710815f, 0.01836288720369339f, 0.3201501965522766f, 0.9850593209266663f, 0.7122407555580139f, 0.5602076649665833f, 0.7055837512016296f, +0.514335572719574f, 0.7905681729316711f, 0.5529311895370483f, 0.08506157994270325f, 0.10235782712697983f, 0.14325286448001862f, 0.5798048973083496f, 0.03145241364836693f, +0.22707678377628326f, 0.6784260272979736f, 0.836653470993042f, 0.029663382098078728f, 0.5533334016799927f, 0.4471062123775482f, 0.9907903671264648f, 0.9771203994750977f, +0.7274771928787231f, 0.9924739599227905f, 0.6474831700325012f, 0.7678118944168091f, 0.04223569110035896f, 0.5230406522750854f, 0.4351121783256531f, 0.5678744912147522f, +0.4365229904651642f, 0.6014263033866882f, 0.2588861286640167f, 0.8249694108963013f, 0.5781417489051819f, 0.9844984412193298f, 0.5221365094184875f, 0.779553234577179f, +0.20254871249198914f, 0.741337239742279f, 0.3772735893726349f, 0.4437466263771057f, 0.7288539409637451f, 0.1351514309644699f, 0.9596766829490662f, 0.19498217105865479f, +0.9088323712348938f, 0.8110380172729492f, 0.7030669450759888f, 0.354965478181839f, 0.4593796730041504f, 0.24461427330970764f, 0.9202210307121277f, 0.9792497158050537f, +0.3447341322898865f, 0.4114791750907898f, 0.7876830697059631f, 0.24545921385288239f, 0.12448113411664963f, 0.0676652193069458f, 0.5857973694801331f, 0.17500519752502441f, +0.6202642321586609f, 0.33858221769332886f, 0.3375547230243683f, 0.13678285479545593f, 0.8379462957382202f, 0.5307137370109558f, 0.44381991028785706f, 0.5337453484535217f, +0.7808498740196228f, 0.028330272063612938f, 0.3000357151031494f, 0.37091997265815735f, 0.43016257882118225f, 0.36322104930877686f, 0.18816520273685455f, 0.4718160629272461f, +0.24310271441936493f, 0.6290795803070068f, 0.5431156754493713f, 0.2524804472923279f, 0.15056787431240082f, 0.901423990726471f, 0.7963177561759949f, 0.6229839324951172f, +0.7778607606887817f, 0.38872963190078735f, 0.8000598549842834f, 0.5529597997665405f, 0.99114990234375f, 0.3996923267841339f, 0.10442711412906647f, 0.7337839007377625f, +0.5248962044715881f, 0.03396403789520264f, 0.5245859622955322f, 0.5495806336402893f, 0.7496196627616882f, 0.1597331315279007f, 0.3965104818344116f, 0.6588229537010193f, +0.35603955388069153f, 0.613568127155304f, 0.4577621519565582f, 0.29797661304473877f, 0.03469906747341156f, 0.7226178646087646f, 0.03020273894071579f, 0.8550517559051514f, +0.5847599506378174f, 0.4776467978954315f, 0.15653096139431f, 0.3757944703102112f, 0.6055437922477722f, 0.15082234144210815f, 0.3674483299255371f, 0.11537538468837738f, +0.021253718063235283f, 0.12785187363624573f, 0.02060268074274063f, 0.20169542729854584f, 0.5074602961540222f, 0.48019281029701233f, 0.7253338694572449f, 0.3611803948879242f, +0.15490485727787018f, 0.32432821393013f, 0.8673772215843201f, 0.05527065321803093f, 0.9390597343444824f, 0.14558549225330353f, 0.8208695650100708f, 0.9813418388366699f, +0.43797415494918823f, 0.15889078378677368f, 0.4826739728450775f, 0.31102705001831055f, 0.6893685460090637f, 0.014272859320044518f, 0.4778176546096802f, 0.40919822454452515f, +0.8951413631439209f, 0.4502648711204529f, 0.6092492938041687f, 0.37228211760520935f, 0.628821074962616f, 0.3401356637477875f, 0.7621679306030273f, 0.8635810017585754f, +0.5815231800079346f, 0.3140352964401245f, 0.9203589558601379f, 0.27524861693382263f, 0.922114372253418f, 0.4446648955345154f, 0.9969986081123352f, 0.997024655342102f, +0.45232251286506653f, 0.14686734974384308f, 0.2646973729133606f, 0.16235466301441193f, 0.8889168500900269f, 0.19496949017047882f, 0.7725172638893127f, 0.8071511387825012f, +0.31506526470184326f, 0.28304314613342285f, 0.7425385117530823f, 0.6636157631874084f, 0.9248343110084534f, 0.8405432105064392f, 0.9386308789253235f, 0.7870147824287415f, +0.7339434623718262f, 0.029015205800533295f, 0.762007474899292f, 0.07367566972970963f, 0.9609469175338745f, 0.6453973054885864f, 0.8681159019470215f, 0.8493165373802185f, +0.43752965331077576f, 0.08871359378099442f, 0.3964378833770752f, 0.8861418962478638f, 0.1156238466501236f, 0.8511363863945007f, 0.27617400884628296f, 0.4989303946495056f, +0.3965608477592468f, 0.505669116973877f, 0.4394943118095398f, 0.15800544619560242f, 0.4888930320739746f, 0.017558151856064796f, 0.5672895312309265f, 0.5777993202209473f, +0.6584753394126892f, 0.9754196405410767f, 0.7952612638473511f, 0.205718994140625f, 0.5116975903511047f, 0.947404146194458f, 0.11438159644603729f, 0.8747305274009705f, +0.12866465747356415f, 0.3071742355823517f, 0.2042979598045349f, 0.6697831749916077f, 0.9150676727294922f, 0.12610629200935364f, 0.5188136696815491f, 0.8199688196182251f, +0.4963698983192444f, 0.6811808943748474f, 0.7954205870628357f, 0.5625965595245361f, 0.33562228083610535f, 0.10983794182538986f, 0.8370032906532288f, 0.34858962893486023f, +0.7439895868301392f, 0.05402539297938347f, 0.6525096297264099f, 0.43370962142944336f, 0.6511754393577576f, 0.591590166091919f, 0.8703963756561279f, 0.6203203797340393f, +0.9518272876739502f, 0.6858985424041748f, 0.5342010259628296f, 0.5863373279571533f, 0.353082537651062f, 0.9798734784126282f, 0.40583789348602295f, 0.3278627097606659f, +0.6715220808982849f, 0.5590277314186096f, 0.2539166510105133f, 0.10198323428630829f, 0.697311520576477f, 0.14204955101013184f, 0.8501831889152527f, 0.02679208479821682f, +0.8431107997894287f, 0.9854994416236877f, 0.7237605452537537f, 0.0048249647952616215f, 0.1752406805753708f, 0.4543122351169586f, 0.11805956065654755f, 0.04776645824313164f, +0.618998110294342f, 0.03335326164960861f, 0.7176748514175415f, 0.5477495789527893f, 0.08677573502063751f, 0.06489977240562439f, 0.2269502580165863f, 0.13405777513980865f, +0.9637641906738281f, 0.6544299125671387f, 0.03564095497131348f, 0.37414300441741943f, 0.1396469920873642f, 0.9067655205726624f, 0.13964733481407166f, 0.032618824392557144f, +0.2581750154495239f, 0.39892664551734924f, 0.41882285475730896f, 0.5518748164176941f, 0.9058534502983093f, 0.13621993362903595f, 0.7855027914047241f, 0.9199416041374207f, +0.8281338214874268f, 0.5292882323265076f, 0.8091786503791809f, 0.9995948672294617f, 0.5205792784690857f, 0.6366419792175293f, 0.7365326285362244f, 0.7951216101646423f, +0.3639427125453949f, 0.07272479683160782f, 0.9888144135475159f, 0.6059120893478394f, 0.05780314281582832f, 0.8173868060112f, 0.575451672077179f, 0.03742346540093422f, +0.782191276550293f, 0.5159270167350769f, 0.13392102718353271f, 0.2952967584133148f, 0.1477925032377243f, 0.561943769454956f, 0.5371118783950806f, 0.9908484220504761f, +0.6092948317527771f, 0.7849521636962891f, 0.2854149043560028f, 0.34731000661849976f, 0.7523589730262756f, 0.24937781691551208f, 0.8920129537582397f, 0.848300039768219f, +0.7219622135162354f, 0.24292947351932526f, 0.5685269236564636f, 0.0015109007945284247f, 0.8592613339424133f, 0.4260432720184326f, 0.6199123859405518f, 0.40423136949539185f, +0.7712724208831787f, 0.9485026597976685f, 0.33058595657348633f, 0.5801970362663269f, 0.927703857421875f, 0.19127191603183746f, 0.9117486476898193f, 0.3234839141368866f, +0.42431870102882385f, 0.2140454649925232f, 0.3964783251285553f, 0.17165620625019073f, 0.7698838710784912f, 0.10523671656847f, 0.8022556900978088f, 0.8769394755363464f, +0.19431480765342712f, 0.08837510645389557f, 0.1506146639585495f, 0.8195670247077942f, 0.36388713121414185f, 0.0286966972053051f, 0.2236778736114502f, 0.9693959951400757f, +0.6961221694946289f, 0.04100210592150688f, 0.28068041801452637f, 0.7989394068717957f, 0.9662157893180847f, 0.1540292650461197f, 0.9807891845703125f, 0.13006868958473206f, +0.014840593561530113f, 0.6744272708892822f, 0.6957786083221436f, 0.007438780274242163f, 0.3435725271701813f, 0.8061956763267517f, 0.4880780577659607f, 0.2804388701915741f, +0.9674375653266907f, 0.2954961061477661f, 0.4458739757537842f, 0.6479395031929016f, 0.2777705192565918f, 0.4501405656337738f, 0.3461225628852844f, 0.37421512603759766f, +0.9834157824516296f, 0.2813575267791748f, 0.4471924304962158f, 0.6580562591552734f, 0.6918182373046875f, 0.8713445663452148f, 0.686772882938385f, 0.9612368941307068f, +0.4939577877521515f, 0.7950271368026733f, 0.2195637971162796f, 0.7068527936935425f, 0.482764333486557f, 0.7068995237350464f, 0.4409887492656708f, 0.032968029379844666f, +0.7269737124443054f, 0.5777522325515747f, 0.6352927088737488f, 0.38366785645484924f, 0.04809549078345299f, 0.9259005784988403f, 0.4210718870162964f, 0.4082460403442383f, +0.3907581567764282f, 0.585710883140564f, 0.42887717485427856f, 0.49474963545799255f, 0.8661177158355713f, 0.8216014504432678f, 0.9998708963394165f, 0.2482786476612091f, +0.37911880016326904f, 0.2842569351196289f, 0.08344979584217072f, 0.029586952179670334f, 0.48612576723098755f, 0.596997082233429f, 0.028591638430953026f, 0.8929302096366882f, +0.7357650995254517f, 0.6897855997085571f, 0.24264879524707794f, 0.6072697639465332f, 0.6250133514404297f, 0.7673855423927307f, 0.19875717163085938f, 0.7489628195762634f, +0.07985495775938034f, 0.9826089143753052f, 0.770475447177887f, 0.6219152212142944f, 0.9582580327987671f, 0.07309510558843613f, 0.15658026933670044f, 0.7770442366600037f, +0.795717716217041f, 0.25377053022384644f, 0.8248656988143921f, 0.6359008550643921f, 0.11615998297929764f, 0.4533775746822357f, 0.85225909948349f, 0.7696266174316406f, +0.20250241458415985f, 0.05185617506504059f, 0.2631126642227173f, 0.1345471888780594f, 0.5096443295478821f, 0.3082464337348938f, 0.08151165395975113f, 0.6903822422027588f, +0.38625288009643555f, 0.5007380843162537f, 0.8405200242996216f, 0.5743314027786255f, 0.46685612201690674f, 0.2760722041130066f, 0.40019890666007996f, 0.013941977173089981f, +0.743009626865387f, 0.6624737977981567f, 0.773337721824646f, 0.5794790983200073f, 0.8486834764480591f, 0.3616950809955597f, 0.7917782068252563f, 0.2999984323978424f, +0.6206958293914795f, 0.48703157901763916f, 0.6281446218490601f, 0.7620715498924255f, 0.6191098093986511f, 0.6793597936630249f, 0.5811392664909363f, 0.475232869386673f, +0.010220706462860107f, 0.5522018671035767f, 0.2080221325159073f, 0.09272293001413345f, 0.07247869670391083f, 0.05028604343533516f, 0.09388025104999542f, 0.35746797919273376f, +0.7438892126083374f, 0.3342413008213043f, 0.0646902397274971f, 0.7494254112243652f, 0.7535708546638489f, 0.8583678603172302f, 0.875648558139801f, 0.3386593759059906f, +0.1481133997440338f, 0.46949273347854614f, 0.3690568506717682f, 0.4744760990142822f, 0.5324437618255615f, 0.9584978818893433f, 0.08072150498628616f, 0.23198202252388f, +0.6368321180343628f, 0.07991819083690643f, 0.3652944564819336f, 0.276516854763031f, 0.83265221118927f, 0.2987110912799835f, 0.8549458384513855f, 0.18130427598953247f, +0.7262577414512634f, 0.805081844329834f, 0.22192880511283875f, 0.19848451018333435f, 0.893729031085968f, 0.2593947947025299f, 0.19686654210090637f, 0.12140144407749176f, +0.7184813618659973f, 0.017842581495642662f, 0.6352410912513733f, 0.20745094120502472f, 0.06009940430521965f, 0.9325243234634399f, 0.908892035484314f, 0.5596085786819458f, +0.2672594487667084f, 0.546662449836731f, 0.894364595413208f, 0.8831814527511597f, 0.28372350335121155f, 0.5351064205169678f, 0.5330005884170532f, 0.45375150442123413f, +0.8137293457984924f, 0.5758236050605774f, 0.31482088565826416f, 0.48008716106414795f, 0.8494545221328735f, 0.668674111366272f, 0.9415858387947083f, 0.9472675919532776f, +0.9663214087486267f, 0.5638880729675293f, 0.5172286033630371f, 0.36481985449790955f, 0.4434908330440521f, 0.6822364926338196f, 0.19726213812828064f, 0.17403486371040344f, +0.7750882506370544f, 0.7486043572425842f, 0.3553183376789093f, 0.4757477343082428f, 0.9899047613143921f, 0.2421644777059555f, 0.08957920223474503f, 0.06839572638273239f, +0.22577258944511414f, 0.9051005840301514f, 0.5002509951591492f, 0.2504154145717621f, 0.3446967899799347f, 0.8100619316101074f, 0.39551928639411926f, 0.10577400773763657f, +0.14482922852039337f, 0.7502979636192322f, 0.25587186217308044f, 0.6539561152458191f, 0.7677749991416931f, 0.832333505153656f, 0.12410958856344223f, 0.6929830312728882f, +0.32022055983543396f, 0.546133279800415f, 0.9678362011909485f, 0.20307324826717377f, 0.050734542310237885f, 0.6259127259254456f, 0.4828029274940491f, 0.02772694081068039f, +0.8350412249565125f, 0.34657979011535645f, 0.5147067308425903f, 0.2891896665096283f, 0.11843033879995346f, 0.1680980920791626f, 0.6925384402275085f, 0.9059128165245056f, +0.8294281363487244f, 0.5910061001777649f, 0.5298640131950378f, 0.6500616073608398f, 0.1871192455291748f, 0.6276876926422119f, 0.2936759889125824f, 0.6869901418685913f, +0.4909660518169403f, 0.2596893310546875f, 0.641935408115387f, 0.7764950394630432f, 0.5770291686058044f, 0.9631125926971436f, 0.2028009444475174f, 0.7987464070320129f, +0.38254863023757935f, 0.19394542276859283f, 0.27975958585739136f, 0.7424304485321045f, 0.2305699586868286f, 0.33512723445892334f, 0.24145114421844482f, 0.9421129822731018f, +0.6853762269020081f, 0.8823673129081726f, 0.18307141959667206f, 0.5726727247238159f, 0.06831527501344681f, 0.594807505607605f, 0.3290550410747528f, 0.08851637691259384f, +0.2059590220451355f, 0.1962268352508545f, 0.360007643699646f, 0.6880496740341187f, 0.778621256351471f, 0.9684771299362183f, 0.661986768245697f, 0.28624820709228516f, +0.02108326554298401f, 0.5961371660232544f, 0.8584960103034973f, 0.5173757076263428f, 0.004448202438652515f, 0.28462761640548706f, 0.5780196785926819f, 0.8695530295372009f, +0.8614647388458252f, 0.007875275798141956f, 0.7059983611106873f, 0.548166036605835f, 0.8072165250778198f, 0.22722353041172028f, 0.7205718755722046f, 0.34296754002571106f, +0.8757095336914062f, 0.749416172504425f, 0.541074275970459f, 0.3696472644805908f, 0.3958064615726471f, 0.9604020714759827f, 0.7814249992370605f, 0.742171585559845f, +0.4009411036968231f, 0.009165293537080288f, 0.782365620136261f, 0.7502267360687256f, 0.6581774950027466f, 0.4238986074924469f, 0.4832661747932434f, 0.613908588886261f, +0.8979986906051636f, 0.48575693368911743f, 0.5898045897483826f, 0.6031204462051392f, 0.9623010158538818f, 0.37239348888397217f, 0.44388312101364136f, 0.8466320633888245f, +0.4078614413738251f, 0.4270857870578766f, 0.5221225619316101f, 0.8123600482940674f, 0.8697554469108582f, 0.6855828762054443f, 0.9772334694862366f, 0.5428669452667236f, +0.7807204723358154f, 0.5235592722892761f, 0.7828933000564575f, 0.4594407379627228f, 0.6034437417984009f, 0.09204212576150894f, 0.6503937244415283f, 0.7657459378242493f, +0.04507746919989586f, 0.634140133857727f, 0.7560885548591614f, 0.8320286870002747f, 0.1851392686367035f, 0.647984504699707f, 0.3543058931827545f, 0.7409729361534119f, +0.24429160356521606f, 0.6837339401245117f, 0.8811014890670776f, 0.10836483538150787f, 0.4268575608730316f, 0.9401012659072876f, 0.6058384776115417f, 0.0744682103395462f, +0.09878015518188477f, 0.2840820252895355f, 0.32637280225753784f, 0.6854936480522156f, 0.38923266530036926f, 0.3777821660041809f, 0.6004565358161926f, 0.3615967631340027f, +0.4485911726951599f, 0.21882833540439606f, 0.6024044156074524f, 0.3471522331237793f, 0.26490330696105957f, 0.7077952027320862f, 0.09681251645088196f, 0.42014870047569275f, +0.2788298726081848f, 0.21451181173324585f, 0.8808774352073669f, 0.22456984221935272f, 0.1091708242893219f, 0.21085752546787262f, 0.2184714525938034f, 0.7303360104560852f, +0.002856506034731865f, 0.4849933087825775f, 0.9080345034599304f, 0.874958872795105f, 0.16379159688949585f, 0.6544602513313293f, 0.5117144584655762f, 0.6585589051246643f, +0.8655725717544556f, 0.5084279775619507f, 0.029835017397999763f, 0.8405466079711914f, 0.2664973735809326f, 0.4484840929508209f, 0.018766002729535103f, 0.7582393884658813f, +0.07824262231588364f, 0.40433260798454285f, 0.5927108526229858f, 0.26395535469055176f, 0.5495671629905701f, 0.6168673634529114f, 0.6841551065444946f, 0.11928082257509232f, +0.16859076917171478f, 0.9890210032463074f, 0.980246901512146f, 0.3312878906726837f, 0.28569909930229187f, 0.8510616421699524f, 0.4852164387702942f, 0.37478286027908325f, +0.6531619429588318f, 0.703201174736023f, 0.6013600826263428f, 0.6595534682273865f, 0.7277934551239014f, 0.40490344166755676f, 0.7183934450149536f, 0.6306233406066895f, +0.22372543811798096f, 0.23551911115646362f, 0.3198792040348053f, 0.5934371948242188f, 0.3571685254573822f, 0.7920152544975281f, 0.5571538805961609f, 0.2369990348815918f, +0.740654468536377f, 0.5350571274757385f, 0.9217746257781982f, 0.5686712861061096f, 0.8880099654197693f, 0.9880552887916565f, 0.3035638928413391f, 0.2872369885444641f, +0.6432114839553833f, 0.8177188038825989f, 0.5216895937919617f, 0.8889256119728088f, 0.6181478500366211f, 0.2088298350572586f, 0.8839645981788635f, 0.0024590077809989452f, +0.7586455345153809f, 0.14011433720588684f, 0.18221157789230347f, 0.07203301042318344f, 0.668224573135376f, 0.13042299449443817f, 0.7483303546905518f, 0.501537024974823f, +0.4854945242404938f, 0.9622754454612732f, 0.1345926970243454f, 0.2012535184621811f, 0.559634268283844f, 0.3791445791721344f, 0.49115800857543945f, 0.7673757076263428f, +0.534208357334137f, 0.4117735028266907f, 0.4690394997596741f, 0.4345090091228485f, 0.9895724654197693f, 0.3667803406715393f, 0.6393054127693176f, 0.37123507261276245f, +0.5020679831504822f, 0.1542985737323761f, 0.626161515712738f, 0.4753296971321106f, 0.6465240716934204f, 0.09328620880842209f, 0.9157583117485046f, 0.18580442667007446f, +0.41239845752716064f, 0.8234102129936218f, 0.9162956476211548f, 0.5697972178459167f, 0.11191771179437637f, 0.09761299192905426f, 0.63846755027771f, 0.9049421548843384f, +0.4811756908893585f, 0.9656208157539368f, 0.6736811995506287f, 0.8293781280517578f, 0.8069502711296082f, 0.20271778106689453f, 0.37056076526641846f, 0.2235444188117981f, +0.46914732456207275f, 0.8742765188217163f, 0.32681289315223694f, 0.19256411492824554f, 0.9861348271369934f, 0.46750733256340027f, 0.010061580687761307f, 0.49185487627983093f, +0.2639447748661041f, 0.2488403022289276f, 0.5247324705123901f, 0.11850141733884811f, 0.5159791707992554f, 0.858204185962677f, 0.3101901412010193f, 0.5502811670303345f, +0.9713990092277527f, 0.603950560092926f, 0.039159923791885376f, 0.8975397348403931f, 0.6199004650115967f, 0.13763664662837982f, 0.6605647802352905f, 0.7392449975013733f, +0.9399828910827637f, 0.6822134256362915f, 0.750813364982605f, 0.06764309108257294f, 0.1010069027543068f, 0.7754710912704468f, 0.38783273100852966f, 0.866326630115509f, +0.48204490542411804f, 0.668543815612793f, 0.10154345631599426f, 0.4870845675468445f, 0.8508899807929993f, 0.4997057020664215f, 0.7107654809951782f, 0.1889202743768692f, +0.6607154011726379f, 0.7687706351280212f, 0.08879673480987549f, 0.900454580783844f, 0.3956942558288574f, 0.573842465877533f, 0.7802828550338745f, 0.1396385282278061f, +0.6611436605453491f, 0.04058394953608513f, 0.5717177391052246f, 0.44366830587387085f, 0.2269136756658554f, 0.8321436643600464f, 0.8783527612686157f, 0.7345083355903625f, +0.6557598114013672f, 0.26602157950401306f, 0.29959216713905334f, 0.9767528772354126f, 0.07927162945270538f, 0.04926244169473648f, 0.22124555706977844f, 0.7977097034454346f, +0.2699490189552307f, 0.2945440113544464f, 0.08945035934448242f, 0.9043111801147461f, 0.4471026659011841f, 0.830346405506134f, 0.5129809379577637f, 0.1342553198337555f, +0.15505817532539368f, 0.6982521414756775f, 0.7896097302436829f, 0.7772288918495178f, 0.42575082182884216f, 0.4634993374347687f, 0.45181572437286377f, 0.8611677289009094f, +0.07186964154243469f, 0.33799800276756287f, 0.7521169781684875f, 0.7798817753791809f, 0.9460576176643372f, 0.3209370970726013f, 0.7708394527435303f, 0.8683664798736572f, +0.05359349399805069f, 0.8566159009933472f, 0.7019537091255188f, 0.9997614622116089f, 0.5400542616844177f, 0.7014610171318054f, 0.7448543906211853f, 0.6895955801010132f, +0.7439478635787964f, 0.7855595946311951f, 0.4861203134059906f, 0.1887156069278717f, 0.8897069692611694f, 0.8051069378852844f, 0.17086224257946014f, 0.14194373786449432f, +0.5037432312965393f, 0.9646239280700684f, 0.35515695810317993f, 0.8966683149337769f, 0.6355445981025696f, 0.26743754744529724f, 0.5522114634513855f, 0.702164888381958f, +0.6096299886703491f, 0.8539096713066101f, 0.8041170239448547f, 0.1469930112361908f, 0.08570597320795059f, 0.31125369668006897f, 0.5445441007614136f, 0.6885665655136108f, +0.3935145437717438f, 0.08043137937784195f, 0.4141426086425781f, 0.22589567303657532f, 0.4418717324733734f, 0.0919724777340889f, 0.8271751403808594f, 0.5368375182151794f, +0.37081441283226013f, 0.775985598564148f, 0.5014783143997192f, 0.04444769397377968f, 0.29541000723838806f, 0.8497023582458496f, 0.6077908873558044f, 0.14203272759914398f, +0.7409411668777466f, 0.7437683343887329f, 0.780134379863739f, 0.058973703533411026f, 0.5299658179283142f, 0.28535786271095276f, 0.6602894067764282f, 0.9686896800994873f, +0.19219297170639038f, 0.0769965872168541f, 0.6999155282974243f, 0.33419957756996155f, 0.7791058421134949f, 0.3848745822906494f, 0.7010776996612549f, 0.41375190019607544f, +0.005056245252490044f, 0.6387002468109131f, 0.16079342365264893f, 0.10846343636512756f, 0.8348641395568848f, 0.9818620085716248f, 0.2999754250049591f, 0.41069304943084717f, +0.7963196039199829f, 0.10040406137704849f, 0.3370950222015381f, 0.5837271809577942f, 0.8157236576080322f, 0.27838629484176636f, 0.06855659931898117f, 0.8791736960411072f, +0.26622438430786133f, 0.05426997318863869f, 0.9059378504753113f, 0.8441537618637085f, 0.539090096950531f, 0.5056672096252441f, 0.7378232479095459f, 0.7725490927696228f, +0.377370148897171f, 0.08727233856916428f, 0.8706377148628235f, 0.5557742714881897f, 0.3591110408306122f, 0.5212627649307251f, 0.028182150796055794f, 0.1432361900806427f, +0.6413195133209229f, 0.4053598940372467f, 0.9255797863006592f, 0.9739001989364624f, 0.33672216534614563f, 0.16126590967178345f, 0.0361313633620739f, 0.034848183393478394f, +0.27750009298324585f, 0.5873387455940247f, 0.7679440975189209f, 0.06002269312739372f, 0.6341772675514221f, 0.14255759119987488f, 0.10011681169271469f, 0.9239787459373474f, +0.21360470354557037f, 0.7797274589538574f, 0.46629083156585693f, 0.24129176139831543f, 0.94819575548172f, 0.20193563401699066f, 0.006557132583111525f, 0.8797309994697571f, +0.8262524604797363f, 0.6950076818466187f, 0.8978649973869324f, 0.2601946294307709f, 0.13034853339195251f, 0.4071269929409027f, 0.638962984085083f, 0.7104470133781433f, +0.015375572256743908f, 0.15328583121299744f, 0.5712693929672241f, 0.3440750539302826f, 0.4988975524902344f, 0.9629889726638794f, 0.30286484956741333f, 0.05486419051885605f, +0.028500787913799286f, 0.24014921486377716f, 0.46604225039482117f, 0.3979879319667816f, 0.009989670477807522f, 0.7051323652267456f, 0.8211914896965027f, 0.2251279503107071f, +0.2695159912109375f, 0.4184531569480896f, 0.3988650143146515f, 0.9290315508842468f, 0.6506268382072449f, 0.28814971446990967f, 0.49359339475631714f, 0.5824306607246399f, +0.29072311520576477f, 0.03856903687119484f, 0.8513404130935669f, 0.33405476808547974f, 0.24143029749393463f, 0.7638182640075684f, 0.5783237814903259f, 0.8693720102310181f, +0.43478602170944214f, 0.19260554015636444f, 0.06983912736177444f, 0.4444740116596222f, 0.548417866230011f, 0.7952758073806763f, 0.1361324042081833f, 0.2213362157344818f, +0.6169978380203247f, 0.3570958971977234f, 0.37947872281074524f, 0.5593295097351074f, 0.3500231206417084f, 0.5836698412895203f, 0.3235396146774292f, 0.2845858633518219f, +0.7362378239631653f, 0.9953521490097046f, 0.4822819232940674f, 0.34714722633361816f, 0.9165651202201843f, 0.21051402390003204f, 0.862342894077301f, 0.8977254033088684f, +0.744909942150116f, 0.09341228008270264f, 0.6547564268112183f, 0.13567595183849335f, 0.9182600378990173f, 0.30363279581069946f, 0.3000578284263611f, 0.2002100646495819f, +0.5633916258811951f, 0.4192992150783539f, 0.6769401431083679f, 0.1861143261194229f, 0.20967113971710205f, 0.458147257566452f, 0.7712141275405884f, 0.2569728493690491f, +0.6938304901123047f, 0.8213136792182922f, 0.6140605807304382f, 0.42386457324028015f, 0.12435252219438553f, 0.16914474964141846f, 0.6619660258293152f, 0.8341052532196045f, +0.7829451560974121f, 0.5509665012359619f, 0.6992354989051819f, 0.6108672618865967f, 0.6586024165153503f, 6.788093014620245e-05f, 0.7825978398323059f, 0.06299348175525665f, +0.5372483134269714f, 0.8701501488685608f, 0.7217757105827332f, 0.653339147567749f, 0.7825737595558167f, 0.6585037112236023f, 0.44640958309173584f, 0.8604297041893005f, +0.7308904528617859f, 0.4251772165298462f, 0.5973910689353943f, 0.10962605476379395f, 0.04488211125135422f, 0.5832961201667786f, 0.11914895474910736f, 0.615347683429718f, +0.5533078908920288f, 0.3719664514064789f, 0.2890377640724182f, 0.3794390857219696f, 0.22249747812747955f, 0.4110042154788971f, 0.36855268478393555f, 0.7087201476097107f, +0.2833794355392456f, 0.5172002911567688f, 0.4278075397014618f, 0.2872889041900635f, 0.06788702309131622f, 0.04396988824009895f, 0.5323996543884277f, 0.8865378499031067f, +0.3379475176334381f, 0.24477261304855347f, 0.43217143416404724f, 0.42270514369010925f, 0.27394068241119385f, 0.07657119631767273f, 0.5495730638504028f, 0.3577165901660919f, +0.5475307106971741f, 0.35566213726997375f, 0.8223688006401062f, 0.5791049003601074f, 0.833428144454956f, 0.010616308078169823f, 0.5633742809295654f, 0.6301381587982178f, +0.8961696028709412f, 0.4950914978981018f, 0.5702513456344604f, 0.8897867202758789f, 0.8340269327163696f, 0.7791606783866882f, 0.7472312450408936f, 0.8824437856674194f, +0.28677552938461304f, 0.9229739308357239f, 0.37306633591651917f, 0.5294065475463867f, 0.22745221853256226f, 0.3628557324409485f, 0.6338673233985901f, 0.5433777570724487f, +0.8795400857925415f, 0.15208666026592255f, 0.3095723092556f, 0.08110851049423218f, 0.08533157408237457f, 0.9311317801475525f, 0.910965621471405f, 0.8095068335533142f, +0.16108496487140656f, 0.47626522183418274f, 0.6292840838432312f, 0.3150286376476288f, 0.481328547000885f, 0.7743500471115112f, 0.10489466041326523f, 0.17524410784244537f, +0.6474065780639648f, 0.4345138370990753f, 0.9399706721305847f, 0.07064813375473022f, 0.612085223197937f, 0.4404478371143341f, 0.7863238453865051f, 0.7071899175643921f, +0.5007134675979614f, 0.07543506473302841f, 0.5733131766319275f, 0.8737905621528625f, 0.8880664110183716f, 0.19066616892814636f, 0.22915442287921906f, 0.5265549421310425f, +0.5258708596229553f, 0.07192936539649963f, 0.8672758340835571f, 0.4442291557788849f, 0.28419849276542664f, 0.27496808767318726f, 0.5560966730117798f, 0.9008033871650696f, +0.8416145443916321f, 0.9649797677993774f, 0.6466836333274841f, 0.36619722843170166f, 0.012326559983193874f, 0.8344380259513855f, 0.32514533400535583f, 0.9716378450393677f, +0.07719892263412476f, 0.5503405332565308f, 0.5721002817153931f, 0.7833536267280579f, 0.4300335645675659f, 0.49618881940841675f, 0.13155418634414673f, 0.06243690848350525f, +0.43804875016212463f, 0.6812213063240051f, 0.47899624705314636f, 0.897375226020813f, 0.2715482711791992f, 0.8505794405937195f, 0.9938238263130188f, 0.02399403415620327f, +0.8170634508132935f, 0.35305723547935486f, 0.5752179622650146f, 0.1112416684627533f, 0.22029978036880493f, 0.22104905545711517f, 0.6949148178100586f, 0.6300718188285828f, +0.6696141958236694f, 0.09406451135873795f, 0.3424312174320221f, 0.9600899815559387f, 0.47487854957580566f, 0.03396531939506531f, 0.890390932559967f, 0.2988736629486084f, +0.21147234737873077f, 0.993211567401886f, 0.2066822648048401f, 0.37754735350608826f, 0.12154388427734375f, 0.8673714995384216f, 0.3614409565925598f, 0.40470024943351746f, +0.26733437180519104f, 0.4626449942588806f, 0.3157980740070343f, 0.8570032119750977f, 0.7793510556221008f, 0.12880469858646393f, 0.10547314584255219f, 0.4809844195842743f, +0.898068904876709f, 0.48278167843818665f, 0.48748600482940674f, 0.0020980474073439837f, 0.03642629459500313f, 0.6371875405311584f, 0.03434492647647858f, 0.2934689223766327f, +0.9395478963851929f, 0.07898448407649994f, 0.16575731337070465f, 0.6891487836837769f, 0.6278306841850281f, 0.28794312477111816f, 0.9932796359062195f, 0.30949413776397705f, +0.9533140063285828f, 0.45554205775260925f, 0.22707721590995789f, 0.49104374647140503f, 0.7872242331504822f, 0.42813143134117126f, 0.2972985506057739f, 0.44496217370033264f, +0.9238265752792358f, 0.34557539224624634f, 0.12961158156394958f, 0.8744195699691772f, 0.6805844902992249f, 0.9265208840370178f, 0.20737631618976593f, 0.5808573961257935f, +0.876878559589386f, 0.8001008629798889f, 0.767578661441803f, 0.3949155807495117f, 0.27823805809020996f, 0.8799699544906616f, 0.9079720377922058f, 0.5001180768013f, +0.01563367433845997f, 0.18553733825683594f, 0.7008625864982605f, 0.9224280118942261f, 0.44491761922836304f, 0.3131485879421234f, 0.23677369952201843f, 0.21064938604831696f, +0.7113150954246521f, 0.834351658821106f, 0.5353257060050964f, 0.2556602656841278f, 0.3645399510860443f, 0.7067034840583801f, 0.5825963616371155f, 0.28707435727119446f, +0.6044476628303528f, 0.753376841545105f, 0.31061896681785583f, 0.6770352721214294f, 0.509679913520813f, 0.16041500866413116f, 0.913527250289917f, 0.8234191536903381f, +0.967807412147522f, 0.5753621459007263f, 0.04110821336507797f, 0.9214805364608765f, 0.3048037886619568f, 0.4584008753299713f, 0.26689380407333374f, 0.9430357217788696f, +0.5179170966148376f, 0.5551518797874451f, 0.4002380967140198f, 0.9378470182418823f, 0.8082282543182373f, 0.9026237726211548f, 0.546258807182312f, 0.4635221064090729f, +0.7043204307556152f, 0.5080568790435791f, 0.32928287982940674f, 0.3720323443412781f, 0.05246221274137497f, 0.43968838453292847f, 0.6984492540359497f, 0.6240730285644531f, +0.6771907210350037f, 0.16557170450687408f, 0.8617756962776184f, 0.6772826313972473f, 0.9230579137802124f, 0.0774926245212555f, 0.2032807618379593f, 0.024013379588723183f, +0.9338263869285583f, 0.9246485233306885f, 0.37563592195510864f, 0.5108509659767151f, 0.4865967035293579f, 0.6372641921043396f, 0.48614150285720825f, 0.6323134303092957f, +0.8520188927650452f, 0.4686298966407776f, 0.43208780884742737f, 0.6574472784996033f, 0.4507213830947876f, 0.37253788113594055f, 0.6457098126411438f, 0.8975489139556885f, +0.25962457060813904f, 0.9251453876495361f, 0.8730362057685852f, 0.686750590801239f, 0.7116571664810181f, 0.2036290317773819f, 0.6880611181259155f, 0.8996630311012268f, +0.20807036757469177f, 0.9955432415008545f, 0.6536830067634583f, 0.5905214548110962f, 0.9951984882354736f, 0.4572366178035736f, 0.01466117799282074f, 0.3819735646247864f, +0.35992276668548584f, 0.4558389484882355f, 0.9373090267181396f, 0.19116130471229553f, 0.6244397163391113f, 0.9685868620872498f, 0.0683973878622055f, 0.6491935849189758f, +0.14925719797611237f, 0.7171210646629333f, 0.26527494192123413f, 0.8647294044494629f, 0.4549039602279663f, 0.2508102357387543f, 0.045350510627031326f, 0.013498405925929546f, +0.4788321256637573f, 0.8531221747398376f, 0.7027316093444824f, 0.24545307457447052f, 0.6976422667503357f, 0.6281220316886902f, 0.795853853225708f, 0.6884772777557373f, +0.280258446931839f, 0.5686253309249878f, 0.7693634629249573f, 0.9371327757835388f, 0.04041091352701187f, 0.9096084237098694f, 0.9206255078315735f, 0.4633544087409973f, +0.16814731061458588f, 0.9710468053817749f, 0.36260393261909485f, 0.7102558016777039f, 0.9554492235183716f, 0.9942701458930969f, 0.41971340775489807f, 0.20598140358924866f, +0.3552199602127075f, 0.45863258838653564f, 0.7726737260818481f, 0.635272204875946f, 0.7526563405990601f, 0.9418795108795166f, 0.4645242989063263f, 0.14102815091609955f, +0.041579365730285645f, 0.004978567361831665f, 0.8241608142852783f, 0.3750932812690735f, 0.4712880551815033f, 0.2334706038236618f, 0.015930496156215668f, 0.4649028778076172f, +0.14878684282302856f, 0.213171124458313f, 0.47725310921669006f, 0.9945641756057739f, 0.7658790349960327f, 0.12400636076927185f, 0.10952640324831009f, 0.06694140285253525f, +0.8002189993858337f, 0.3628445863723755f, 0.7276899218559265f, 0.3817993104457855f, 0.12917977571487427f, 0.30655956268310547f, 0.8787631988525391f, 0.6821913719177246f, +0.599864661693573f, 0.8379710912704468f, 0.19907180964946747f, 0.29669779539108276f, 0.15978142619132996f, 0.9769914746284485f, 0.8793759942054749f, 0.32727882266044617f, +0.3842323422431946f, 0.021494578570127487f, 0.244103342294693f, 0.3702756464481354f, 0.9731506705284119f, 0.8538848757743835f, 0.8095857501029968f, 0.7088611721992493f, +0.02238759584724903f, 0.9902787804603577f, 0.30614423751831055f, 0.304332971572876f, 0.3814285397529602f, 0.7303066849708557f, 0.6909556984901428f, 0.8465949296951294f, +0.42060938477516174f, 0.781134307384491f, 0.04215447977185249f, 0.35506579279899597f, 0.7068646550178528f, 0.7532547116279602f, 0.40082624554634094f, 0.8668400645256042f, +0.5513830780982971f, 0.24435383081436157f, 0.7356663942337036f, 0.5568752288818359f, 0.09874507784843445f, 0.16196699440479279f, 0.3855268061161041f, 0.6983692646026611f, +0.6729947924613953f, 0.25480106472969055f, 0.07162546366453171f, 0.46531954407691956f, 0.13389982283115387f, 0.6567239761352539f, 0.10949325561523438f, 0.15850330889225006f, +0.5388126969337463f, 0.7979492545127869f, 0.6693495512008667f, 0.7140458226203918f, 0.01256802398711443f, 0.24817751348018646f, 0.5295504927635193f, 0.6268908977508545f, +0.8338629007339478f, 0.5669968128204346f, 0.12517134845256805f, 0.7334917187690735f, 0.14052844047546387f, 0.025975482538342476f, 0.9183132648468018f, 0.5438803434371948f, +0.20353712141513824f, 0.035321399569511414f, 0.5144281387329102f, 0.8826518654823303f, 0.7463238835334778f, 0.5495595932006836f, 0.49765750765800476f, 0.5815175175666809f, +0.8734198212623596f, 0.1601504534482956f, 0.2594132125377655f, 0.11829489469528198f, 0.5203102827072144f, 0.7502884268760681f, 0.7916166186332703f, 0.7424558401107788f, +0.37840384244918823f, 0.6974918246269226f, 0.1537046879529953f, 0.2341190129518509f, 0.43080753087997437f, 0.7695942521095276f, 0.6067766547203064f, 0.06089484319090843f, +0.0191167164593935f, 0.5348260998725891f, 0.5292133688926697f, 0.7860887050628662f, 0.065402552485466f, 0.08693324029445648f, 0.19686871767044067f, 0.32769477367401123f, +0.3056109547615051f, 0.2959640622138977f, 0.01598208025097847f, 0.42876482009887695f, 0.5683466792106628f, 0.14567315578460693f, 0.6403495669364929f, 0.02594081126153469f, +0.7584455609321594f, 0.13409985601902008f, 0.19196082651615143f, 0.3201986849308014f, 0.3924939036369324f, 0.6389229893684387f, 0.3890669047832489f, 0.806639552116394f, +0.26468396186828613f, 0.15563812851905823f, 0.2546696364879608f, 0.6829830408096313f, 0.4258398413658142f, 0.7003955245018005f, 0.33445048332214355f, 0.46775496006011963f, +0.6425880789756775f, 0.4713241457939148f, 0.5142050981521606f, 0.8296481370925903f, 0.404017835855484f, 0.4503074586391449f, 0.36779671907424927f, 0.09522001445293427f, +0.2845396101474762f, 0.738662600517273f, 0.903143584728241f, 0.5851620435714722f, 0.5458899736404419f, 0.49105575680732727f, 0.7463053464889526f, 0.3774296045303345f, +0.37302273511886597f, 0.5642194151878357f, 0.37428244948387146f, 0.09991376101970673f, 0.932405412197113f, 0.6231687068939209f, 0.13855378329753876f, 0.8612426519393921f, +0.1927923858165741f, 0.79952073097229f, 0.1686398833990097f, 0.3613830506801605f, 0.24467507004737854f, 0.712430477142334f, 0.7532739043235779f, 0.30761972069740295f, +0.42232444882392883f, 0.129599466919899f, 0.2280140221118927f, 0.004074804950505495f, 0.7785621881484985f, 0.013982728123664856f, 0.4872567057609558f, 0.31206268072128296f, +0.19989174604415894f, 0.3805282711982727f, 0.09638544917106628f, 0.14535370469093323f, 0.5408539175987244f, 0.6003782153129578f, 0.9586937427520752f, 0.7788253426551819f, +0.9156400561332703f, 0.12018150836229324f, 0.835074245929718f, 0.9321553707122803f, 0.16911450028419495f, 0.7299960255622864f, 0.15383276343345642f, 0.698401153087616f, +0.508574903011322f, 0.2919920086860657f, 0.027865277603268623f, 0.6596258878707886f, 0.0016990135191008449f, 0.948830783367157f, 0.26993444561958313f, 0.20935344696044922f, +0.3137335479259491f, 0.5294018387794495f, 0.061866458505392075f, 0.018276991322636604f, 0.9860706329345703f, 0.4374943673610687f, 0.2016453742980957f, 0.7064773440361023f, +0.6530309915542603f, 0.29633426666259766f, 0.8502733707427979f, 0.04357973113656044f, 0.4115458130836487f, 0.0903787836432457f, 0.016519177705049515f, 0.7900963425636292f, +0.956993818283081f, 0.42965811491012573f, 0.7517233490943909f, 0.8194264769554138f, 0.22475849092006683f, 0.5430304408073425f, 0.0816991925239563f, 0.7611340284347534f, +0.043793920427560806f, 0.16039174795150757f, 0.7694950103759766f, 0.6695916652679443f, 0.2894269526004791f, 0.23228080570697784f, 0.18783724308013916f, 0.417254775762558f, +0.49351680278778076f, 0.08584605902433395f, 0.16960476338863373f, 0.36183640360832214f, 0.767015278339386f, 0.2912159264087677f, 0.4906257688999176f, 0.04110268875956535f, +0.5837219953536987f, 0.48702314496040344f, 0.6210688948631287f, 0.3057730197906494f, 0.5715433955192566f, 0.88481605052948f, 0.4635286033153534f, 0.5017316937446594f, +0.9967090487480164f, 0.7887395620346069f, 0.9992724657058716f, 0.7979361414909363f, 0.7140807509422302f, 0.11669960618019104f, 0.6880618333816528f, 0.5282520651817322f, +0.27385005354881287f, 0.40373337268829346f, 0.5737649202346802f, 0.316106379032135f, 0.9252365827560425f, 0.6192630529403687f, 0.8013431429862976f, 0.25527510046958923f, +0.8778268694877625f, 0.07622402161359787f, 0.44443652033805847f, 0.24581043422222137f, 0.8417720794677734f, 0.5413957834243774f, 0.48048141598701477f, 0.1328505575656891f, +0.5649607181549072f, 0.7999762892723083f, 0.43840086460113525f, 0.6458122730255127f, 0.3770436644554138f, 0.7060313820838928f, 0.12088441103696823f, 0.4248312711715698f, +0.2463466376066208f, 0.21000976860523224f, 0.9977089166641235f, 0.13884174823760986f, 0.9712867140769958f, 0.11450833082199097f, 0.869155764579773f, 0.6114493608474731f, +0.5147747993469238f, 0.6270110607147217f, 0.43390998244285583f, 0.8759905695915222f, 0.8236561417579651f, 0.7017238736152649f, 0.846259593963623f, 0.18127454817295074f, +0.44410058856010437f, 0.7119821310043335f, 0.436992883682251f, 0.942834198474884f, 0.7582902312278748f, 0.6581388115882874f, 0.48623472452163696f, 0.10872151702642441f, +0.009488498792052269f, 0.6693046689033508f, 0.4282872676849365f, 0.9206402897834778f, 0.4693916440010071f, 0.6747542023658752f, 0.3475227653980255f, 0.6033715605735779f, +0.6744120121002197f, 0.9190305471420288f, 0.010803167708218098f, 0.960631787776947f, 0.9278732538223267f, 0.04739663004875183f, 0.5095768570899963f, 0.7098450064659119f, +0.5110453963279724f, 0.48303842544555664f, 0.5797938108444214f, 0.979780912399292f, 0.4648835361003876f, 0.6603361368179321f, 0.20197893679141998f, 0.5810224413871765f, +0.6855733394622803f, 0.019253956153988838f, 0.6465921401977539f, 0.6802799701690674f, 0.36940962076187134f, 0.08506481349468231f, 0.08189626783132553f, 0.6051520109176636f, +0.9248082041740417f, 0.8598560690879822f, 0.27409306168556213f, 0.1915857046842575f, 0.5937594771385193f, 0.5179744362831116f, 0.6674554944038391f, 0.8715982437133789f, +0.7321552634239197f, 0.3654909133911133f, 0.1648038774728775f, 0.808645486831665f, 0.3914024829864502f, 0.008621095679700375f, 0.6574975252151489f, 0.33193469047546387f, +0.03756053373217583f, 0.6694024801254272f, 0.792630672454834f, 0.2648026943206787f, 0.0654386430978775f, 0.5578194856643677f, 0.9958046078681946f, 0.7140806913375854f, +0.3391474783420563f, 0.7269556522369385f, 0.14819370210170746f, 0.694765567779541f, 0.3240601718425751f, 0.38215896487236023f, 0.9460567235946655f, 0.529640793800354f, +0.33819785714149475f, 0.21020860970020294f, 0.9672055244445801f, 0.4738265872001648f, 0.2745334208011627f, 0.40794000029563904f, 0.5122993588447571f, 0.7941614389419556f, +0.9049025177955627f, 0.3721408545970917f, 0.24982449412345886f, 0.6783753037452698f, 0.6516764760017395f, 0.14010243117809296f, 0.24995464086532593f, 0.11616102606058121f, +0.8096503615379333f, 0.11457668244838715f, 0.9680773019790649f, 0.8920392990112305f, 0.6669935584068298f, 0.38546115159988403f, 0.8634818196296692f, 0.22069856524467468f, +0.9800750017166138f, 0.10698124766349792f, 0.3806321918964386f, 0.023332824930548668f, 0.7266150712966919f, 0.22815603017807007f, 0.8515926003456116f, 0.9173736572265625f, +0.6229357123374939f, 0.4856102466583252f, 0.560881495475769f, 0.6929956078529358f, 0.9442391991615295f, 0.4157694876194f, 0.26210251450538635f, 0.4177757799625397f, +0.3010078966617584f, 0.9302086234092712f, 0.493813157081604f, 0.11726745218038559f, 0.9813064336776733f, 0.24853429198265076f, 0.20608727633953094f, 0.17295829951763153f, +0.6943541169166565f, 0.38768160343170166f, 0.20210231840610504f, 0.35975968837738037f, 0.8413394093513489f, 0.873729407787323f, 0.545120894908905f, 0.5884876847267151f, +0.5991291403770447f, 0.868105411529541f, 0.49327248334884644f, 0.7323741912841797f, 0.016623735427856445f, 0.2561255395412445f, 0.7034972906112671f, 0.38698744773864746f, +0.38424548506736755f, 0.2803581655025482f, 0.45698946714401245f, 0.5909536480903625f, 0.4940177798271179f, 0.16744811832904816f, 0.9352481961250305f, 0.24576321244239807f, +0.38566964864730835f, 0.05460237339138985f, 0.9676280617713928f, 0.37432044744491577f, 0.16896657645702362f, 0.21213698387145996f, 0.8058499693870544f, 0.6932947039604187f, +0.24262142181396484f, 0.018094198778271675f, 0.48023679852485657f, 0.3971962034702301f, 0.48406341671943665f, 0.27805450558662415f, 0.9877876043319702f, 0.21540969610214233f, +0.9686294198036194f, 0.10204440355300903f, 0.14445103704929352f, 0.20062652230262756f, 0.5515693426132202f, 0.7543866038322449f, 0.48806196451187134f, 0.7214775085449219f, +0.853646457195282f, 0.4915636479854584f, 0.09829462319612503f, 0.37209346890449524f, 0.8877992033958435f, 0.8541993498802185f, 0.3802463412284851f, 0.7031201124191284f, +0.15664318203926086f, 0.20225244760513306f, 0.2627983093261719f, 0.6609665155410767f, 0.14351487159729004f, 0.3427774906158447f, 0.9172892570495605f, 0.7773718237876892f, +0.9166693687438965f, 0.9340258240699768f, 0.34095606207847595f, 0.02933601848781109f, 0.24629086256027222f, 0.2608867883682251f, 0.15985606610774994f, 0.4847719371318817f, +0.8032018542289734f, 0.39677324891090393f, 0.795569896697998f, 0.9024463891983032f, 0.38618913292884827f, 0.7525546550750732f, 0.0727556049823761f, 0.832841157913208f, +0.007265039253979921f, 0.5499540567398071f, 0.6101250052452087f, 0.16326695680618286f, 0.8540379405021667f, 0.9778708815574646f, 0.7181738615036011f, 0.9762733578681946f, +0.7754652500152588f, 0.7336285710334778f, 0.6311824917793274f, 0.6722717881202698f, 0.33014237880706787f, 0.1472603976726532f, 0.7875304222106934f, 0.6375621557235718f, +0.7826400995254517f, 0.111310213804245f, 0.4639189541339874f, 0.21158310770988464f, 0.4050869643688202f, 0.016202254220843315f, 0.7802403569221497f, 0.2023700624704361f, +0.7706845998764038f, 0.7785431742668152f, 0.9986807703971863f, 0.9593590497970581f, 0.034135736525058746f, 0.38846150040626526f, 0.907546877861023f, 0.5802431702613831f, +0.7947680354118347f, 0.5570354461669922f, 0.6081153750419617f, 0.5456919074058533f, 0.6834809184074402f, 0.7547940611839294f, 0.05539100244641304f, 0.6808103322982788f, +0.2772529423236847f, 0.0032563607674092054f, 0.9811322093009949f, 0.8449628353118896f, 0.6410272121429443f, 0.3797086775302887f, 0.3478338122367859f, 0.6848946809768677f, +0.0854833796620369f, 0.9979122877120972f, 0.45967450737953186f, 0.23467029631137848f, 0.9804979562759399f, 0.997485339641571f, 0.8501412272453308f, 0.7274222373962402f, +0.3778629004955292f, 0.90169358253479f, 0.3771944046020508f, 0.4694553315639496f, 0.7808072566986084f, 0.23210468888282776f, 0.2720434069633484f, 0.8510408401489258f, +0.9148777723312378f, 0.06723527610301971f, 0.9631596207618713f, 0.27877071499824524f, 0.017494183033704758f, 0.4228443503379822f, 0.27419358491897583f, 0.03243840113282204f, +0.023695921525359154f, 0.09754520654678345f, 0.5388039946556091f, 0.5993323922157288f, 0.4483315348625183f, 0.862309455871582f, 0.5752883553504944f, 0.06771740317344666f, +0.9315274357795715f, 0.6947908997535706f, 0.5985186100006104f, 0.9167943000793457f, 0.5503076910972595f, 0.39993199706077576f, 0.6677072644233704f, 0.5514320731163025f, +0.13963176310062408f, 0.9990143179893494f, 0.4608648419380188f, 0.819915235042572f, 0.7362090349197388f, 0.2387685924768448f, 0.41104283928871155f, 0.1206025555729866f, +0.9255455136299133f, 0.6471118927001953f, 0.19104184210300446f, 0.22972092032432556f, 0.816389799118042f, 0.5437927842140198f, 0.5159336924552917f, 0.008545213378965855f, +0.7557406425476074f, 0.8460847735404968f, 0.7391180992126465f, 0.25521519780158997f, 0.9066748023033142f, 0.26527732610702515f, 0.12976135313510895f, 0.49335750937461853f, +0.04483924061059952f, 0.06120764836668968f, 0.9482352137565613f, 0.5904423594474792f, 0.28718671202659607f, 0.22812020778656006f, 0.7325590252876282f, 0.3892887532711029f, +0.1737184375524521f, 0.20230595767498016f, 0.040912430733442307f, 0.07672695070505142f, 0.23914900422096252f, 0.9636756777763367f, 0.9072934985160828f, 0.2928817868232727f, +0.2723594307899475f, 0.6831446886062622f, 0.44184231758117676f, 0.8900622725486755f, 0.754692792892456f, 0.5229988694190979f, 0.8595350384712219f, 0.2729009985923767f, +0.9216616749763489f, 0.3102339208126068f, 0.9276584982872009f, 0.7322905659675598f, 0.9800657033920288f, 0.25407856702804565f, 0.5842003226280212f, 0.9540134072303772f, +0.7476507425308228f, 0.4139613211154938f, 0.7646433115005493f, 0.1967623382806778f, 0.25900161266326904f, 0.6180506348609924f, 0.9013137221336365f, 0.5967767238616943f, +0.16657301783561707f, 0.09613087773323059f, 0.09077665954828262f, 0.9896658062934875f, 0.8540120720863342f, 0.9670114517211914f, 0.3203940987586975f, 0.6464014649391174f, +0.4017271399497986f, 0.016423029825091362f, 0.235050767660141f, 0.351662814617157f, 0.7458977699279785f, 0.18649323284626007f, 0.49752289056777954f, 0.8731170892715454f, +0.01612747274339199f, 0.43207064270973206f, 0.8632128238677979f, 0.9803330898284912f, 0.3109998404979706f, 0.6539173126220703f, 0.9083431959152222f, 0.0030954419635236263f, +0.6064468622207642f, 0.21265612542629242f, 0.42614513635635376f, 0.021436821669340134f, 0.6338603496551514f, 0.1850852370262146f, 0.4002671241760254f, 0.6919967532157898f, +0.30452167987823486f, 0.2835671603679657f, 0.7195050120353699f, 0.9327614903450012f, 0.8206732273101807f, 0.13622599840164185f, 0.8167605400085449f, 0.19853390753269196f, +0.13256661593914032f, 0.841566264629364f, 0.34201881289482117f, 0.6228691339492798f, 0.4257606565952301f, 0.7092775702476501f, 0.830020546913147f, 0.7244940400123596f, +0.6753594875335693f, 0.6145464181900024f, 0.5351256132125854f, 0.1670025736093521f, 0.6431213021278381f, 0.5085709691047668f, 0.40082958340644836f, 0.3341308832168579f, +0.3266734778881073f, 0.6555627584457397f, 0.40964484214782715f, 0.09459439665079117f, 0.8186319470405579f, 0.8699068427085876f, 0.7149965167045593f, 0.8374621868133545f, +0.09264024347066879f, 0.7896497845649719f, 0.6908477544784546f, 0.45501717925071716f, 0.4327504336833954f, 0.5749721527099609f, 0.8984386324882507f, 0.9366458654403687f, +0.7388848066329956f, 0.5903528332710266f, 0.4306105077266693f, 0.680381715297699f, 0.09445758163928986f, 0.3804057240486145f, 0.8410463929176331f, 0.6287848949432373f, +0.7950621247291565f, 0.23204727470874786f, 0.24331547319889069f, 0.1873844414949417f, 0.3389051556587219f, 0.5044851899147034f, 0.8380366563796997f, 0.7269929051399231f, +0.4073873460292816f, 0.7742605805397034f, 0.8884828090667725f, 0.540311336517334f, 0.10150651633739471f, 0.7602738738059998f, 0.7860926389694214f, 0.3286259174346924f, +0.9422852993011475f, 0.22888995707035065f, 0.4319392740726471f, 0.4320545792579651f, 0.9594772458076477f, 0.9686328768730164f, 0.854318380355835f, 0.15258783102035522f, +0.25303012132644653f, 0.15631529688835144f, 0.08836955577135086f, 0.7224048972129822f, 0.35478588938713074f, 0.3924228847026825f, 0.20406627655029297f, 0.10863003879785538f, +0.20648016035556793f, 0.5075289607048035f, 0.439919114112854f, 0.0948077067732811f, 0.28744032979011536f, 0.9725122451782227f, 0.866256833076477f, 0.37034082412719727f, +0.23509596288204193f, 0.10927798599004745f, 0.9852734804153442f, 0.6854712963104248f, 0.23914794623851776f, 0.9070647358894348f, 0.355861097574234f, 0.48402395844459534f, +0.4232644736766815f, 0.7885711193084717f, 0.8330613970756531f, 0.550039529800415f, 0.5453686118125916f, 0.6216733455657959f, 0.9549911022186279f, 0.4543273150920868f, +0.38947972655296326f, 0.42866790294647217f, 0.1376829743385315f, 0.15919356048107147f, 0.5632672309875488f, 0.40037575364112854f, 0.27405115962028503f, 0.9188055992126465f, +0.746151328086853f, 0.48975273966789246f, 0.607172429561615f, 0.9714221954345703f, 0.31764715909957886f, 0.40564781427383423f, 0.8394528031349182f, 0.7925266027450562f, +0.4584137499332428f, 0.9243836998939514f, 0.9797396063804626f, 0.05259336903691292f, 0.7440129518508911f, 0.5689318776130676f, 0.6582122445106506f, 0.7653684616088867f, +0.9256753325462341f, 0.22467954456806183f, 0.20261047780513763f, 0.03572113811969757f, 0.04185221716761589f, 0.37476488947868347f, 0.7030855417251587f, 0.36177006363868713f, +0.612316906452179f, 0.9951340556144714f, 0.4196871221065521f, 0.47710323333740234f, 0.1226520761847496f, 0.739427924156189f, 0.6476771831512451f, 0.4668125510215759f, +0.40002498030662537f, 0.49129486083984375f, 0.21436817944049835f, 0.7923551797866821f, 0.9190300703048706f, 0.35456204414367676f, 0.5235641598701477f, 0.9120540022850037f, +0.8985454440116882f, 0.48057350516319275f, 0.8687812089920044f, 0.8836726546287537f, 0.01771966740489006f, 0.4089236557483673f, 0.3472590148448944f, 0.5038709044456482f, +0.001907994388602674f, 0.09015166759490967f, 0.5219877362251282f, 0.5138106346130371f, 0.41089144349098206f, 0.6493511199951172f, 0.647856593132019f, 0.5328147411346436f, +0.44825443625450134f, 0.0958670973777771f, 0.6144843697547913f, 0.3448864221572876f, 0.7845417261123657f, 0.0058285510167479515f, 0.05890239030122757f, 0.06961385160684586f, +0.07117261737585068f, 0.6537531614303589f, 0.36414262652397156f, 0.28981655836105347f, 0.6735938191413879f, 0.9609072208404541f, 0.8192799091339111f, 0.1466650515794754f, +0.5166115760803223f, 0.04039359837770462f, 0.8479903936386108f, 0.9430758357048035f, 0.9386545419692993f, 0.7626662850379944f, 0.7795223593711853f, 0.7904196977615356f, +0.5271782279014587f, 0.6055422425270081f, 0.22549550235271454f, 0.10859844833612442f, 0.5132082104682922f, 0.636817455291748f, 0.42468559741973877f, 0.22186699509620667f, +0.4846877157688141f, 0.5604665279388428f, 0.3774147927761078f, 0.1536821573972702f, 0.9516497254371643f, 0.5616879463195801f, 0.013663704507052898f, 0.7862612009048462f, +0.6316548585891724f, 0.5302020311355591f, 0.8920670747756958f, 0.3431326746940613f, 0.21401754021644592f, 0.919908881187439f, 0.8310078382492065f, 0.07206984609365463f, +0.6236159801483154f, 0.8411481976509094f, 0.050874702632427216f, 0.003495845478028059f, 0.16735050082206726f, 0.5504980087280273f, 0.12978248298168182f, 0.18340997397899628f, +0.7677901387214661f, 0.8876310586929321f, 0.3122831881046295f, 0.27274587750434875f, 0.6461347937583923f, 0.6116035580635071f, 0.5961340665817261f, 0.4961085617542267f, +0.5845465064048767f, 0.851262629032135f, 0.8373483419418335f, 0.7453030347824097f, 0.35665905475616455f, 0.13923054933547974f, 0.8506196737289429f, 0.9248851537704468f, +0.30448460578918457f, 0.5242921710014343f, 0.20415475964546204f, 0.8298353552818298f, 0.9480898380279541f, 0.9521560668945312f, 0.5799688696861267f, 0.5339567065238953f, +0.8643753528594971f, 0.3694756031036377f, 0.9962741136550903f, 0.11186329275369644f, 0.2973957657814026f, 0.46244722604751587f, 0.5856291651725769f, 0.06370861828327179f, +0.2510484755039215f, 0.336577445268631f, 0.22250241041183472f, 0.7817389965057373f, 0.6427876353263855f, 0.4717034101486206f, 0.4606231451034546f, 0.2504478394985199f, +0.6962948441505432f, 0.514521062374115f, 0.10894559323787689f, 0.08758904039859772f, 0.7020917534828186f, 0.3619070053100586f, 0.929247260093689f, 0.6448563933372498f, +0.26675209403038025f, 0.3066915273666382f, 0.5687326192855835f, 0.8660831451416016f, 0.6888726949691772f, 0.5556823015213013f, 0.6964119076728821f, 0.2888413965702057f, +0.7035803198814392f, 0.8933183550834656f, 0.8570865988731384f, 0.8926764130592346f, 0.40450647473335266f, 0.6038784384727478f, 0.6329489350318909f, 0.6825330853462219f, +0.38239800930023193f, 0.1147514283657074f, 0.044479746371507645f, 0.7855353355407715f, 0.7377398014068604f, 0.2188931256532669f, 0.9708554148674011f, 0.21495413780212402f, +0.876587986946106f, 0.9236254692077637f, 0.7477875351905823f, 0.36267414689064026f, 0.5178771018981934f, 0.6169003844261169f, 0.10345344245433807f, 0.31547483801841736f, +0.9392874836921692f, 0.5346166491508484f, 0.87117600440979f, 0.9189932346343994f, 0.02615864761173725f, 0.8790804147720337f, 0.2523811161518097f, 0.8505458831787109f, +0.7948108315467834f, 0.5711237192153931f, 0.5941969156265259f, 0.7576868534088135f, 0.5477153658866882f, 0.013620197772979736f, 0.5252772569656372f, 0.6397767066955566f, +0.5033164620399475f, 0.7436898350715637f, 0.3195597231388092f, 0.28628477454185486f, 0.13732710480690002f, 0.34318122267723083f, 0.542523980140686f, 0.9443504214286804f, +0.3704898953437805f, 0.4168701171875f, 0.21035227179527283f, 0.27229008078575134f, 0.4776342511177063f, 0.7894713282585144f, 0.8247984647750854f, 0.4431575536727905f, +0.7330509424209595f, 0.3372998535633087f, 0.14864595234394073f, 0.4886476993560791f, 0.18230976164340973f, 0.40954816341400146f, 0.9945248365402222f, 0.7695276737213135f, +0.18916930258274078f, 0.6232892274856567f, 0.758052408695221f, 0.606824517250061f, 0.6528072357177734f, 0.19310426712036133f, 0.670815646648407f, 0.32863205671310425f, +0.3662942945957184f, 0.08159880340099335f, 0.9371761679649353f, 0.1841568946838379f, 0.4197988510131836f, 0.3430947959423065f, 0.9273672699928284f, 0.9777583479881287f, +0.10473266988992691f, 0.16074469685554504f, 0.8262401223182678f, 0.47874465584754944f, 0.5546848177909851f, 0.14376063644886017f, 0.6376017928123474f, 0.16069269180297852f, +0.8789228796958923f, 0.6720086336135864f, 0.3864651322364807f, 0.8959938883781433f, 0.9047126770019531f, 0.7898589372634888f, 0.4536924362182617f, 0.5919047594070435f, +0.04230007156729698f, 0.8348966240882874f, 0.7743330597877502f, 0.3052425682544708f, 0.8520111441612244f, 0.6707310080528259f, 0.7875641584396362f, 0.5436646938323975f, +0.6388326287269592f, 0.9741004109382629f, 0.08240970224142075f, 0.37378641963005066f, 0.4294452667236328f, 0.4293554723262787f, 0.6162562370300293f, 0.4322254955768585f, +0.1274576187133789f, 0.7300804853439331f, 0.5449144244194031f, 0.6223782300949097f, 0.5277700424194336f, 0.9430816173553467f, 0.8600888848304749f, 0.7150024175643921f, +0.6137323975563049f, 0.43746647238731384f, 0.9177656769752502f, 0.6551943421363831f, 0.18545080721378326f, 0.3216910660266876f, 0.6018350720405579f, 0.35587823390960693f, +0.8115383982658386f, 0.06582368165254593f, 0.6057740449905396f, 0.4147220849990845f, 0.8207165598869324f, 0.25279366970062256f, 0.8429536819458008f, 0.30474919080734253f, +0.3790932893753052f, 0.6501163840293884f, 0.9247793555259705f, 0.3077702522277832f, 0.020033540204167366f, 0.20965483784675598f, 0.3310319185256958f, 0.10595578700304031f, +0.1612815260887146f, 0.09194379299879074f, 0.9820212125778198f, 0.04432113096117973f, 0.034702952951192856f, 0.7190014123916626f, 0.2334715723991394f, 0.1716209352016449f, +0.5990522503852844f, 0.061099473387002945f, 0.3015628159046173f, 0.5098791122436523f, 0.09099328517913818f, 0.6943788528442383f, 0.5573386549949646f, 0.548552930355072f, +0.6597598195075989f, 0.27127978205680847f, 0.24855799973011017f, 0.5968572497367859f, 0.0658823698759079f, 0.9901134371757507f, 0.007652772590517998f, 0.09095614403486252f, +0.6954887509346008f, 0.29468774795532227f, 0.15712828934192657f, 0.8817355036735535f, 0.2864508330821991f, 0.8622812628746033f, 0.23085033893585205f, 0.8341875076293945f, +0.4063214659690857f, 0.9576500058174133f, 0.04511198401451111f, 0.7278541326522827f, 0.9072637557983398f, 0.34499356150627136f, 0.12116226553916931f, 0.5625568628311157f, +0.5483036637306213f, 0.42670926451683044f, 0.26002490520477295f, 0.5352361798286438f, 0.22825390100479126f, 0.826214075088501f, 0.05643504112958908f, 0.8807930946350098f, +0.1231270357966423f, 0.546163022518158f, 0.14102791249752045f, 0.6198656558990479f, 0.9373385310173035f, 0.914575457572937f, 0.6522895097732544f, 0.44241777062416077f, +0.33426880836486816f, 0.930557370185852f, 0.060492295771837234f, 0.17389515042304993f, 0.8419191837310791f, 0.7169820666313171f, 0.583343505859375f, 0.8288460373878479f, +0.4770827293395996f, 0.6725733876228333f, 0.7184404730796814f, 0.8645414710044861f, 0.7860618829727173f, 0.6687144041061401f, 0.1390531212091446f, 0.06331337988376617f, +0.6034309267997742f, 0.8162091374397278f, 0.25716832280158997f, 0.10017205774784088f, 0.06818186491727829f, 0.2594805061817169f, 0.6320279836654663f, 0.07310372591018677f, +0.04872364178299904f, 0.3754620850086212f, 0.0647391676902771f, 0.18725594878196716f, 0.9820082187652588f, 0.1678933948278427f, 0.09742160141468048f, 0.02576548419892788f, +0.4247012138366699f, 0.08104521781206131f, 0.00479593500494957f, 0.6245812177658081f, 0.2946189045906067f, 0.8736459016799927f, 0.3776407837867737f, 0.3477169871330261f, +0.9664015173912048f, 0.36364448070526123f, 0.9054651856422424f, 0.8065702319145203f, 0.9688304662704468f, 0.5719132423400879f, 0.3922630250453949f, 0.04892529174685478f, +0.985035240650177f, 0.7886759638786316f, 0.06848536431789398f, 0.9765436053276062f, 0.6807988882064819f, 0.7497562766075134f, 0.5786855220794678f, 0.5130793452262878f, +0.6954385042190552f, 0.810032069683075f, 0.6448460221290588f, 0.4892963469028473f, 0.19666633009910583f, 0.6164413094520569f, 0.8876124024391174f, 0.6202315092086792f, +0.2541098892688751f, 0.3874983787536621f, 0.13970635831356049f, 0.7730439305305481f, 0.9515385031700134f, 0.6787436604499817f, 0.14221693575382233f, 0.8497282266616821f, +0.6387390494346619f, 0.2836611270904541f, 0.20749051868915558f, 0.21091841161251068f, 0.3715521991252899f, 0.2497883439064026f, 0.5311022996902466f, 0.43322086334228516f, +0.6219586133956909f, 0.3599632680416107f, 0.514127254486084f, 0.4232456684112549f, 0.3842014670372009f, 0.1217150166630745f, 0.7278252243995667f, 0.3054034411907196f, +0.2688184976577759f, 0.3846357762813568f, 0.34994813799858093f, 0.0550900436937809f, 0.5274173617362976f, 0.49221640825271606f, 0.8863389492034912f, 0.28057587146759033f, +0.5604679584503174f, 0.17970973253250122f, 0.45149630308151245f, 0.31460273265838623f, 0.19145041704177856f, 0.5671475529670715f, 0.8317061066627502f, 0.27748751640319824f, +0.9990716576576233f, 0.1939706802368164f, 0.5067523717880249f, 0.9471727609634399f, 0.3297538161277771f, 0.31248778104782104f, 0.13769716024398804f, 0.33334365487098694f, +0.3035060465335846f, 0.2550010681152344f, 0.07658110558986664f, 0.567703902721405f, 0.6203104257583618f, 0.09582219272851944f, 0.9822304248809814f, 0.09628622978925705f, +0.5106123685836792f, 0.012552880682051182f, 0.4631510376930237f, 0.6424553990364075f, 0.696561336517334f, 0.7591790556907654f, 0.38835689425468445f, 0.9196176528930664f, +0.5592387318611145f, 0.6302908062934875f, 0.3951122760772705f, 0.6663301587104797f, 0.8124145269393921f, 0.04703003168106079f, 0.9940621852874756f, 0.7074666023254395f, +0.8094600439071655f, 0.7394309639930725f, 0.7138457894325256f, 0.9912670254707336f, 0.42319777607917786f, 0.2753744423389435f, 0.7599731087684631f, 0.9572793245315552f, +0.37402093410491943f, 0.4030511975288391f, 0.4139157831668854f, 0.9975020289421082f, 0.17116978764533997f, 0.570576548576355f, 0.2869463562965393f, 0.021483734250068665f, +0.7175933718681335f, 0.05629856139421463f, 0.19193674623966217f, 0.9251834154129028f, 0.02233344502747059f, 0.41505634784698486f, 0.6827272176742554f, 0.5617700815200806f, +0.7487131953239441f, 0.508885383605957f, 0.40322592854499817f, 0.8851900100708008f, 0.24322962760925293f, 0.16530026495456696f, 0.41587820649147034f, 0.4024949073791504f, +0.06284365803003311f, 0.7849252223968506f, 0.38381341099739075f, 0.3050974905490875f, 0.4253970980644226f, 0.012338821776211262f, 0.05702362582087517f, 0.2706100344657898f, +0.6906248927116394f, 0.6232818961143494f, 0.18422207236289978f, 0.8533688187599182f, 0.010891198180615902f, 0.957886815071106f, 0.22932006418704987f, 0.5875678658485413f, +0.6138865351676941f, 0.03946298733353615f, 0.9983786940574646f, 0.77168208360672f, 0.7809948921203613f, 0.9865626096725464f, 0.031900543719530106f, 0.9676066637039185f, +0.09638527035713196f, 0.1149933710694313f, 0.7150747776031494f, 0.7351671457290649f, 0.35825100541114807f, 0.5540539622306824f, 0.21948383748531342f, 0.6225317716598511f, +0.2592654824256897f, 0.8038116097450256f, 0.7429904937744141f, 0.19301220774650574f, 0.77079838514328f, 0.06874366104602814f, 0.22268134355545044f, 0.5747414827346802f, +0.7870672345161438f, 0.8281528353691101f, 0.7419628500938416f, 0.9265407919883728f, 0.9268707633018494f, 0.8179385662078857f, 0.28377118706703186f, 0.8042826056480408f, +0.014490197412669659f, 0.4404706358909607f, 0.7972197532653809f, 0.4795449376106262f, 0.23163434863090515f, 0.7548913359642029f, 0.8913363218307495f, 0.7421813011169434f, +0.9616747498512268f, 0.4877016246318817f, 0.18242937326431274f, 0.592785120010376f, 0.1528463214635849f, 0.7646703124046326f, 0.8412634134292603f, 0.24401405453681946f, +0.7715944051742554f, 0.5043012499809265f, 0.984335720539093f, 0.6338040828704834f, 0.7255619168281555f, 0.2137688547372818f, 0.9467554688453674f, 0.5887227654457092f, +0.8743223547935486f, 0.8333044052124023f, 0.7594596743583679f, 0.4222765564918518f, 0.9996627569198608f, 0.2770653963088989f, 0.15622511506080627f, 0.5028610229492188f, +0.40056300163269043f, 0.4945323169231415f, 0.41193678975105286f, 0.6025565266609192f, 0.8154260516166687f, 0.30157291889190674f, 0.3303353190422058f, 0.6921566128730774f, +0.3914291560649872f, 0.00011893217015312985f, 0.6041250824928284f, 0.22039775550365448f, 0.7072167992591858f, 0.27938374876976013f, 0.9425354599952698f, 0.4804478585720062f, +0.3636989891529083f, 0.8440240621566772f, 0.9243316054344177f, 0.451107382774353f, 0.11660907417535782f, 0.658039927482605f, 0.23537376523017883f, 0.04307258874177933f, +0.1865798830986023f, 0.3176616430282593f, 0.8328931927680969f, 0.9980413913726807f, 0.7543135285377502f, 0.5317484736442566f, 0.9098119735717773f, 0.7882426381111145f, +0.9336979389190674f, 0.8823871612548828f, 0.22620734572410583f, 0.5410254001617432f, 0.08906446397304535f, 0.5279510021209717f, 0.6848645806312561f, 0.6195412874221802f, +0.6161991953849792f, 0.624384343624115f, 0.15301984548568726f, 0.4182877540588379f, 0.44965192675590515f, 0.34930747747421265f, 0.6320300698280334f, 0.9394598603248596f, +0.8153047561645508f, 0.2571476399898529f, 0.2671918272972107f, 0.24279430508613586f, 0.29936689138412476f, 0.09296334534883499f, 0.728303849697113f, 0.1991277039051056f, +0.21940869092941284f, 0.661469578742981f, 0.2566283047199249f, 0.8839324116706848f, 0.3528484106063843f, 0.6024994254112244f, 0.5464267134666443f, 0.9061705470085144f, +0.9077553749084473f, 0.6398944854736328f, 0.289392352104187f, 0.1199103593826294f, 0.4870394468307495f, 0.8059713244438171f, 0.2077588587999344f, 0.20867840945720673f, +0.47447049617767334f, 0.8474595546722412f, 0.855608344078064f, 0.39585503935813904f, 0.6532098054885864f, 0.08810952305793762f, 0.8370568156242371f, 0.6161404252052307f, +0.1291966289281845f, 0.5801458358764648f, 0.9544243216514587f, 0.6078407168388367f, 0.9746458530426025f, 0.9705780148506165f, 0.2832568883895874f, 0.5161583423614502f, +0.15529094636440277f, 0.9160330295562744f, 0.36371421813964844f, 0.9139137864112854f, 0.7002090215682983f, 0.6834504008293152f, 0.6039513349533081f, 0.5582510232925415f, +0.7221887111663818f, 0.07490312308073044f, 0.901792049407959f, 0.9816958904266357f, 0.5280930995941162f, 0.5980634689331055f, 0.5909010171890259f, 0.9037137627601624f, +0.7340652942657471f, 0.10470087826251984f, 0.7765833735466003f, 0.6700018048286438f, 0.27875787019729614f, 0.8796710968017578f, 0.7170654535293579f, 0.761549174785614f, +0.8917375206947327f, 0.5089038014411926f, 0.1277913600206375f, 0.6397966742515564f, 0.955930233001709f, 0.6489157676696777f, 0.32506710290908813f, 0.5417078733444214f, +0.11963878571987152f, 0.8550238609313965f, 0.536160945892334f, 0.920766294002533f, 0.7608686089515686f, 0.20223397016525269f, 0.7198063135147095f, 0.12132592499256134f, +0.9416921734809875f, 0.19944967329502106f, 0.16361907124519348f, 0.17205479741096497f, 0.44135668873786926f, 0.6327633857727051f, 0.5610798597335815f, 0.8813105225563049f, +0.3921392858028412f, 0.19259272515773773f, 0.3770238757133484f, 0.6005770564079285f, 0.5563988089561462f, 0.04534309729933739f, 0.5517873167991638f, 0.7551060318946838f, +0.09029293805360794f, 0.6178345084190369f, 0.14832015335559845f, 0.4622407555580139f, 0.8937882781028748f, 0.21134322881698608f, 0.24392753839492798f, 0.9749911427497864f, +0.7757161259651184f, 0.3100235164165497f, 0.5839437246322632f, 0.09602464735507965f, 0.6385219097137451f, 0.6466106176376343f, 0.4320053160190582f, 0.35780400037765503f, +0.9953117966651917f, 0.6600435376167297f, 0.9191038012504578f, 0.8132482171058655f, 0.17622783780097961f, 0.16206873953342438f, 0.34509050846099854f, 0.8894644379615784f, +0.7102329134941101f, 0.18000490963459015f, 0.5770464539527893f, 0.721894383430481f, 0.2912991940975189f, 0.11456102877855301f, 0.9883803129196167f, 0.4325956702232361f, +0.40032920241355896f, 0.8893404006958008f, 0.3592194616794586f, 0.5260770916938782f, 0.740124523639679f, 0.741980254650116f, 0.06388424336910248f, 0.02617049776017666f, +0.2978733479976654f, 0.5820298790931702f, 0.16350017488002777f, 0.558695912361145f, 0.27780747413635254f, 0.8833180665969849f, 0.6676295399665833f, 0.5097100138664246f, +0.8549987077713013f, 0.6026153564453125f, 0.06353691965341568f, 0.0038403638172894716f, 0.7854499220848083f, 0.3165506422519684f, 0.5229659676551819f, 0.9792987704277039f, +0.8212881684303284f, 0.8736262321472168f, 0.5556317567825317f, 0.5561177134513855f, 0.24720847606658936f, 0.92204350233078f, 0.661915123462677f, 0.39409488439559937f, +0.9635412096977234f, 0.906349778175354f, 0.3396416902542114f, 0.03455992415547371f, 0.25489574670791626f, 0.9286022782325745f, 0.7445353865623474f, 0.4304940700531006f, +0.5710285902023315f, 0.7719500660896301f, 0.06627347320318222f, 0.22175367176532745f, 0.0668034702539444f, 0.45054373145103455f, 0.10096839815378189f, 0.24727994203567505f, +0.4731476306915283f, 0.11809862405061722f, 0.28709980845451355f, 0.503736138343811f, 0.34863439202308655f, 0.26479342579841614f, 0.5329681634902954f, 0.21120557188987732f, +0.7099509835243225f, 0.8513884544372559f, 0.08452462404966354f, 0.46265876293182373f, 0.7250176072120667f, 0.06905944645404816f, 0.3520808517932892f, 0.18934132158756256f, +0.9681686758995056f, 0.6441767811775208f, 0.27402517199516296f, 0.19739454984664917f, 0.7696865797042847f, 0.31842532753944397f, 0.8707987666130066f, 0.8884868621826172f, +0.5075603127479553f, 0.2966461479663849f, 0.7549481987953186f, 0.22479933500289917f, 0.8712832927703857f, 0.7572420239448547f, 0.815453290939331f, 0.9117019176483154f, +0.9565970301628113f, 0.5529212355613708f, 0.03749816119670868f, 0.32998430728912354f, 0.1131182461977005f, 0.2722610831260681f, 0.16442930698394775f, 0.38725852966308594f, +0.7928164005279541f, 0.0980580672621727f, 0.45503631234169006f, 0.321650892496109f, 0.9769431352615356f, 0.015727024525403976f, 0.8043693900108337f, 0.8244374394416809f, +0.033638518303632736f, 0.3221759498119354f, 0.33220618963241577f, 0.657096803188324f, 0.6120502948760986f, 0.9169121980667114f, 0.9622389674186707f, 0.7084532976150513f, +0.958511471748352f, 0.046166855841875076f, 0.8507704138755798f, 0.585773229598999f, 0.935327410697937f, 0.8491248488426208f, 0.9366632103919983f, 0.07023601979017258f, +0.680213451385498f, 0.1734429895877838f, 0.9971675276756287f, 0.6270991563796997f, 0.6722909212112427f, 0.5467101335525513f, 0.6756671071052551f, 0.31849056482315063f, +0.4614466726779938f, 0.7699968814849854f, 0.47748881578445435f, 0.04740245267748833f, 0.41199833154678345f, 0.6537607908248901f, 0.517254650592804f, 0.4998185336589813f, +0.9827328324317932f, 0.8971168994903564f, 0.7707666158676147f, 0.7200324535369873f, 0.03855897858738899f, 0.7007362246513367f, 0.051653433591127396f, 0.633264422416687f, +0.4648682475090027f, 0.20467618107795715f, 0.3387083411216736f, 0.2689858376979828f, 0.9751996397972107f, 0.5145916938781738f, 0.5946335196495056f, 0.9313286542892456f, +0.09885632991790771f, 0.09136553108692169f, 0.5818835496902466f, 0.10637614130973816f, 0.3699913024902344f, 0.022730311378836632f, 0.6462764739990234f, 0.9093555212020874f, +0.776551365852356f, 0.48647797107696533f, 0.3448397219181061f, 0.23655866086483002f, 0.7664127349853516f, 0.7077686786651611f, 0.665941059589386f, 0.2829773426055908f, +0.6527998447418213f, 0.7961286902427673f, 0.8213844299316406f, 0.3448885977268219f, 0.5182218551635742f, 0.2159503549337387f, 0.026012757793068886f, 0.8456002473831177f, +0.7202087044715881f, 0.5118826031684875f, 0.9994934797286987f, 0.33559703826904297f, 0.38558128476142883f, 0.4467739164829254f, 0.7589758038520813f, 0.19656680524349213f, +0.2929692566394806f, 0.6744066476821899f, 0.7594016194343567f, 0.37688806653022766f, 0.3996945023536682f, 0.30012303590774536f, 0.20466209948062897f, 0.282047837972641f, +0.41880273818969727f, 0.07917570322751999f, 0.14432059228420258f, 0.5102239847183228f, 0.6339208483695984f, 0.7393833994865417f, 0.3432939946651459f, 0.5206816792488098f, +0.39398497343063354f, 0.3508177101612091f, 0.5190199017524719f, 0.4454643726348877f, 0.726730227470398f, 0.8266979455947876f, 0.1819891333580017f, 0.747376024723053f, +0.2254602164030075f, 0.7025582790374756f, 0.27857279777526855f, 0.5974794626235962f, 0.01320501510053873f, 0.9731768369674683f, 0.6564763784408569f, 0.21689456701278687f, +0.558866560459137f, 0.738858699798584f, 0.6012544631958008f, 0.08493351936340332f, 0.6012988090515137f, 0.4505559206008911f, 0.42127862572669983f, 0.5785634517669678f, +0.6467776298522949f, 0.7991582751274109f, 0.60920250415802f, 0.7499440312385559f, 0.17002715170383453f, 0.5655946135520935f, 0.3360987603664398f, 0.5102676153182983f, +0.8432708382606506f, 0.31311824917793274f, 0.7813289165496826f, 0.0005474421195685863f, 0.8062556982040405f, 0.559286892414093f, 0.18978963792324066f, 0.898720383644104f, +0.9177845120429993f, 0.638531506061554f, 0.481449693441391f, 0.6327947378158569f, 0.9459864497184753f, 0.4268617331981659f, 0.34913182258605957f, 0.11150214076042175f, +0.18603277206420898f, 0.8696529865264893f, 0.2995028495788574f, 0.7617760896682739f, 0.30795609951019287f, 0.48806077241897583f, 0.5547081828117371f, 0.9431920051574707f, +0.5625826716423035f, 0.7680604457855225f, 0.8130608797073364f, 0.6464629173278809f, 0.9501805305480957f, 0.8770841956138611f, 0.7001534104347229f, 0.49904173612594604f, +0.6905718445777893f, 0.8729743361473083f, 0.6168837547302246f, 0.2286233901977539f, 0.02786649949848652f, 0.046479810029268265f, 0.8793403506278992f, 0.8027771711349487f, +0.00771375373005867f, 0.6056053638458252f, 0.4742746353149414f, 0.28337836265563965f, 0.0378970205783844f, 0.739387571811676f, 0.5062382817268372f, 0.6033216118812561f, +0.6261721253395081f, 0.6841152906417847f, 0.5054512619972229f, 0.14138402044773102f, 0.18699459731578827f, 0.9162114262580872f, 0.023625241592526436f, 0.014421229250729084f, +0.18007522821426392f, 0.1530931293964386f, 0.3934231698513031f, 0.33013930916786194f, 0.48483359813690186f, 0.9130833148956299f, 0.7415971755981445f, 0.8711586594581604f, +0.5104855298995972f, 0.3664601445198059f, 0.44171783328056335f, 0.10235178470611572f, 0.07041166722774506f, 0.49841687083244324f, 0.03287715092301369f, 0.09526527673006058f, +0.9490782618522644f, 0.43396130204200745f, 0.2885594666004181f, 0.8182670474052429f, 0.19917982816696167f, 0.3283197581768036f, 0.5506763458251953f, 0.3929837644100189f, +0.8610202670097351f, 0.3188372850418091f, 0.5853861570358276f, 0.30712467432022095f, 0.6249186992645264f, 0.7871152758598328f, 0.34550321102142334f, 0.00743010314181447f, +0.38550877571105957f, 0.12557558715343475f, 0.17640714347362518f, 0.3889397084712982f, 0.31466224789619446f, 0.29802006483078003f, 0.5476901531219482f, 0.5154994130134583f, +0.14679479598999023f, 0.7694514989852905f, 0.9949609041213989f, 0.533912181854248f, 0.049763455986976624f, 0.46264633536338806f, 0.2746008336544037f, 0.07554354518651962f, +0.03369029238820076f, 0.4412846267223358f, 0.2944554090499878f, 0.20863988995552063f, 0.0025100097991526127f, 0.619688093662262f, 0.4615163803100586f, 0.7179760932922363f, +0.18290163576602936f, 0.4964241087436676f, 0.5371955633163452f, 0.3353412449359894f, 0.7814688086509705f, 0.8885351419448853f, 0.8353687524795532f, 0.17325642704963684f, +0.40211784839630127f, 0.26700615882873535f, 0.4023614823818207f, 0.5139913558959961f, 0.4044492542743683f, 0.5327749252319336f, 0.025227464735507965f, 0.9439936876296997f, +0.42604702711105347f, 0.12295902520418167f, 0.8584008812904358f, 0.8320388793945312f, 0.05295313522219658f, 0.5447601675987244f, 0.7652881741523743f, 0.33634528517723083f, +0.3273598849773407f, 0.9293161034584045f, 0.2211311012506485f, 0.28838005661964417f, 0.77101069688797f, 0.25171247124671936f, 0.210292786359787f, 0.4722149670124054f, +0.7158846259117126f, 0.0013398851733654737f, 0.8942330479621887f, 0.83696049451828f, 0.9205953478813171f, 0.2989245355129242f, 0.7401729226112366f, 0.19774816930294037f, +0.4745139181613922f, 0.03860660269856453f, 0.4012051820755005f, 0.3074701428413391f, 0.35937440395355225f, 0.4723813533782959f, 0.8627308011054993f, 0.1640339493751526f, +0.8756986260414124f, 0.7828762531280518f, 0.10560807585716248f, 0.3787940740585327f, 0.7552379965782166f, 0.24030226469039917f, 0.009168441407382488f, 0.06419243663549423f, +0.05360983684659004f, 0.18612727522850037f, 0.7291337251663208f, 0.31933704018592834f, 0.5590562224388123f, 0.8407245874404907f, 0.6951716542243958f, 0.0419653095304966f, +0.6034387350082397f, 0.5597953796386719f, 0.10545405000448227f, 0.23389197885990143f, 0.899196445941925f, 0.8767936825752258f, 0.05365713685750961f, 0.7531750202178955f, +0.7956555485725403f, 0.5353896617889404f, 0.6839830279350281f, 0.6453654766082764f, 0.8835486173629761f, 0.17201532423496246f, 0.8124158978462219f, 0.7027843594551086f, +0.8628970980644226f, 0.5661525130271912f, 0.1838817149400711f, 0.252760648727417f, 0.23519502580165863f, 0.9157880544662476f, 0.9738876223564148f, 0.3883983790874481f, +0.6228118538856506f, 0.2154669165611267f, 0.4928683936595917f, 0.7441403269767761f, 0.17530140280723572f, 0.5675314664840698f, 0.08799713850021362f, 0.0987720787525177f, +0.4637138247489929f, 0.15405549108982086f, 0.12767361104488373f, 0.5080514550209045f, 0.008395216427743435f, 0.47097575664520264f, 0.6160333156585693f, 0.7500055432319641f, +0.2931375503540039f, 0.2886204421520233f, 0.1493557095527649f, 0.9543051719665527f, 0.388671338558197f, 0.5135669112205505f, 0.6168377995491028f, 0.21056228876113892f, +0.2159539759159088f, 0.8450248837471008f, 0.338236004114151f, 0.5436770915985107f, 0.14708250761032104f, 0.5061184167861938f, 0.5872531533241272f, 0.8771529197692871f, +0.4526467025279999f, 0.003515654243528843f, 0.5767818689346313f, 0.19126467406749725f, 0.6746192574501038f, 0.29280152916908264f, 0.3546941578388214f, 0.4696297347545624f, +0.821106493473053f, 0.7012077569961548f, 0.0353146567940712f, 0.784753143787384f, 0.4929860532283783f, 0.6740095019340515f, 0.4963577091693878f, 0.5704501867294312f, +0.9333449006080627f, 0.8069272637367249f, 0.8695408701896667f, 0.3447237014770508f, 0.03286674618721008f, 0.00575984688475728f, 0.6673791408538818f, 0.28553327918052673f, +0.012365300208330154f, 0.85286545753479f, 0.30995920300483704f, 0.357113778591156f, 0.8154539465904236f, 0.22758808732032776f, 0.9466062784194946f, 0.9043764472007751f, +0.8127455711364746f, 0.216728076338768f, 0.8169532418251038f, 0.014068396762013435f, 0.610209584236145f, 0.3644571006298065f, 0.8607555031776428f, 0.16328217089176178f, +0.048287875950336456f, 0.20796681940555573f, 0.06423958390951157f, 0.18240003287792206f, 0.930841326713562f, 0.8834697008132935f, 0.1384824961423874f, 0.5894091725349426f, +0.04095187410712242f, 0.6256791949272156f, 0.045056696981191635f, 0.5057145953178406f, 0.9311461448669434f, 0.8915037512779236f, 0.6679043769836426f, 0.0469072200357914f, +0.9077714085578918f, 0.81037837266922f, 0.6767708659172058f, 0.21657386422157288f, 0.8893676996231079f, 0.6631156206130981f, 0.5422667860984802f, 0.12140090763568878f,}; + +float In_G[8192] = { +27.177892684936523f, 0.0f, 21.266006469726562f, 4.962209701538086f, 20.070655822753906f, 3.5242319107055664f, 18.750019073486328f, 2.2480688095092773f, +21.266006469726562f, -4.962209701538086f, 25.269046783447266f, 0.0f, 18.907859802246094f, 0.1665058135986328f, 16.596904754638672f, -1.7733664512634277f, +20.070655822753906f, -3.5242319107055664f, 18.907859802246094f, -0.1665058135986328f, 22.46148109436035f, 0.0f, 15.849457740783691f, 0.39119815826416016f, +18.750019073486328f, -2.2480688095092773f, 16.596904754638672f, 1.7733664512634277f, 15.849457740783691f, -0.39119815826416016f, 21.43837547302246f, 0.0f, +26.69502067565918f, 0.0f, 19.260616302490234f, 1.3052730560302734f, 18.99789047241211f, -1.8223419189453125f, 16.98910140991211f, 0.6085538864135742f, +19.260616302490234f, -1.3052730560302734f, 22.60270881652832f, 0.0f, 17.74444580078125f, -4.701714992523193f, 16.21324920654297f, -2.386870861053467f, +18.99789047241211f, 1.8223419189453125f, 17.74444580078125f, 4.701714992523193f, 25.33054542541504f, 0.0f, 16.181133270263672f, 3.9560341835021973f, +16.98910140991211f, -0.6085538864135742f, 16.21324920654297f, 2.386870861053467f, 16.181133270263672f, -3.9560341835021973f, 20.574735641479492f, 0.0f, +23.917911529541016f, 0.0f, 17.064319610595703f, 5.072530746459961f, 17.139280319213867f, 3.9575858116149902f, 16.0948486328125f, 2.205960750579834f, +17.064319610595703f, -5.072530746459961f, 21.491031646728516f, 0.0f, 16.68302345275879f, -0.6771101951599121f, 15.327407836914062f, -0.2506828308105469f, +17.139280319213867f, -3.9575858116149902f, 16.68302345275879f, 0.6771101951599121f, 21.70703125f, 0.0f, 15.583761215209961f, -0.6962685585021973f, +16.0948486328125f, -2.205960750579834f, 15.327407836914062f, 0.2506828308105469f, 15.583761215209961f, 0.6962685585021973f, 20.797224044799805f, 0.0f, +25.779468536376953f, 0.0f, 19.103307723999023f, 2.874936103820801f, 19.40733528137207f, -0.538996696472168f, 17.46788215637207f, 1.129786491394043f, +19.103307723999023f, -2.874936103820801f, 24.02129364013672f, 0.0f, 18.017719268798828f, -2.08261775970459f, 16.907140731811523f, -1.0745034217834473f, +19.40733528137207f, 0.538996696472168f, 18.017719268798828f, 2.08261775970459f, 23.47435188293457f, 0.0f, 16.34310531616211f, 0.9331159591674805f, +17.46788215637207f, -1.129786491394043f, 16.907140731811523f, 1.0745034217834473f, 16.34310531616211f, -0.9331159591674805f, 19.93582534790039f, 0.0f, +21.227222442626953f, 0.0f, 13.865663528442383f, 1.0827255249023438f, 16.220834732055664f, -1.429786205291748f, 15.164009094238281f, -0.31860923767089844f, +13.865663528442383f, -1.0827255249023438f, 18.9834041595459f, 0.0f, 14.527589797973633f, -0.8998146057128906f, 14.195263862609863f, -0.45685291290283203f, +16.220834732055664f, 1.429786205291748f, 14.527589797973633f, 0.8998146057128906f, 20.385631561279297f, 0.0f, 13.386552810668945f, 0.6392717361450195f, +15.164009094238281f, 0.31860923767089844f, 14.195263862609863f, 0.45685291290283203f, 13.386552810668945f, -0.6392717361450195f, 19.890031814575195f, 0.0f, +24.845352172851562f, 0.0f, 17.52373695373535f, 1.3428339958190918f, 16.664827346801758f, 1.5078997611999512f, 16.90348243713379f, 1.536972999572754f, +17.52373695373535f, -1.3428339958190918f, 22.56801986694336f, 0.0f, 17.42030906677246f, -1.1565132141113281f, 16.122364044189453f, 0.6954717636108398f, +16.664827346801758f, -1.5078997611999512f, 17.42030906677246f, 1.1565132141113281f, 22.291236877441406f, 0.0f, 15.66874885559082f, 0.9849176406860352f, +16.90348243713379f, -1.536972999572754f, 16.122364044189453f, -0.6954717636108398f, 15.66874885559082f, -0.9849176406860352f, 22.1466064453125f, 0.0f, +25.36525535583496f, 0.0f, 18.178359985351562f, -1.600484848022461f, 17.825918197631836f, -2.7972450256347656f, 17.502653121948242f, 2.0532922744750977f, +18.178359985351562f, 1.600484848022461f, 22.82699203491211f, 0.0f, 15.443572998046875f, -0.7396001815795898f, 15.392995834350586f, 4.471595287322998f, +17.825918197631836f, 2.7972450256347656f, 15.443572998046875f, 0.7396001815795898f, 19.83134651184082f, 0.0f, 15.247118949890137f, 3.9542531967163086f, +17.502653121948242f, -2.0532922744750977f, 15.392995834350586f, -4.471595287322998f, 15.247118949890137f, -3.9542531967163086f, 21.919702529907227f, 0.0f, +20.236656188964844f, 0.0f, 12.74460506439209f, 1.7440204620361328f, 12.347569465637207f, 0.48871278762817383f, 13.225625038146973f, -0.7889471054077148f, +12.74460506439209f, -1.7440204620361328f, 16.617660522460938f, 0.0f, 12.402503967285156f, -0.9840092658996582f, 13.14319133758545f, -2.0305776596069336f, +12.347569465637207f, -0.48871278762817383f, 12.402503967285156f, 0.9840092658996582f, 18.906570434570312f, 0.0f, 11.51611328125f, 0.023788928985595703f, +13.225625038146973f, 0.7889471054077148f, 13.14319133758545f, 2.0305776596069336f, 11.51611328125f, -0.023788928985595703f, 18.628175735473633f, 0.0f, +24.680519104003906f, 0.0f, 19.667247772216797f, 0.47842979431152344f, 18.646270751953125f, -0.5574111938476562f, 21.376052856445312f, -0.7360925674438477f, +19.667247772216797f, -0.47842979431152344f, 22.964651107788086f, 0.0f, 17.403671264648438f, -2.2669644355773926f, 19.876659393310547f, -2.5046443939208984f, +18.646270751953125f, 0.5574111938476562f, 17.403671264648438f, 2.2669644355773926f, 25.14274787902832f, 0.0f, 19.709001541137695f, 0.6068830490112305f, +21.376052856445312f, 0.7360925674438477f, 19.876659393310547f, 2.5046443939208984f, 19.709001541137695f, -0.6068830490112305f, 27.85398292541504f, 0.0f, +18.592975616455078f, 0.0f, 15.146997451782227f, 1.2206501960754395f, 16.555694580078125f, 0.49425792694091797f, 14.446435928344727f, -0.8302502632141113f, +15.146997451782227f, -1.2206501960754395f, 19.620147705078125f, 0.0f, 16.874393463134766f, -0.13013267517089844f, 13.291919708251953f, -1.7602958679199219f, +16.555694580078125f, -0.49425792694091797f, 16.874393463134766f, 0.13013267517089844f, 23.165620803833008f, 0.0f, 16.13136863708496f, -0.35946178436279297f, +14.446435928344727f, 0.8302502632141113f, 13.291919708251953f, 1.7602958679199219f, 16.13136863708496f, 0.35946178436279297f, 19.05156898498535f, 0.0f, +16.72402572631836f, 0.0f, 11.882720947265625f, 0.30953550338745117f, 11.778053283691406f, 1.5259032249450684f, 12.472046852111816f, 0.0872197151184082f, +11.882720947265625f, -0.30953550338745117f, 19.806392669677734f, 0.0f, 14.791849136352539f, 1.182023048400879f, 12.914052963256836f, -1.3155598640441895f, +11.778053283691406f, -1.5259032249450684f, 14.791849136352539f, -1.182023048400879f, 20.742403030395508f, 0.0f, 14.015495300292969f, -1.7493839263916016f, +12.472046852111816f, -0.0872197151184082f, 12.914052963256836f, 1.3155598640441895f, 14.015495300292969f, 1.7493839263916016f, 19.611083984375f, 0.0f, +13.576042175292969f, 0.0f, 12.642881393432617f, -1.3826022148132324f, 12.529699325561523f, 0.560481071472168f, 11.49869155883789f, -2.2559890747070312f, +12.642881393432617f, 1.3826022148132324f, 23.241352081298828f, 0.0f, 14.995515823364258f, 0.5894937515258789f, 15.951659202575684f, 1.4363317489624023f, +12.529699325561523f, -0.560481071472168f, 14.995515823364258f, -0.5894937515258789f, 19.25178337097168f, 0.0f, 13.050592422485352f, -2.186861991882324f, +11.49869155883789f, 2.2559890747070312f, 15.951659202575684f, -1.4363317489624023f, 13.050592422485352f, 2.186861991882324f, 21.657243728637695f, 0.0f, +22.302532196044922f, 0.0f, 16.482433319091797f, -0.8774442672729492f, 15.107154846191406f, -0.36205101013183594f, 16.511653900146484f, -1.9313859939575195f, +16.482433319091797f, 0.8774442672729492f, 23.5340633392334f, 0.0f, 15.808082580566406f, 1.0215044021606445f, 16.188152313232422f, -0.692082405090332f, +15.107154846191406f, 0.36205101013183594f, 15.808082580566406f, -1.0215044021606445f, 19.870718002319336f, 0.0f, 14.429319381713867f, -0.3423142433166504f, +16.511653900146484f, 1.9313859939575195f, 16.188152313232422f, 0.692082405090332f, 14.429319381713867f, 0.3423142433166504f, 21.661985397338867f, 0.0f, +23.463829040527344f, 0.0f, 13.986510276794434f, 2.9792799949645996f, 16.674440383911133f, -0.763885498046875f, 16.037494659423828f, 1.2752408981323242f, +13.986510276794434f, -2.9792799949645996f, 17.340862274169922f, 0.0f, 14.606605529785156f, -2.254976272583008f, 13.844305038452148f, -1.0904502868652344f, +16.674440383911133f, 0.763885498046875f, 14.606605529785156f, 2.254976272583008f, 22.248817443847656f, 0.0f, 15.648115158081055f, 1.0533270835876465f, +16.037494659423828f, -1.2752408981323242f, 13.844305038452148f, 1.0904502868652344f, 15.648115158081055f, -1.0533270835876465f, 19.981189727783203f, 0.0f, +25.54735565185547f, 0.0f, 18.89197540283203f, -0.27568817138671875f, 19.276708602905273f, 0.5457372665405273f, 19.09323501586914f, 1.9891033172607422f, +18.89197540283203f, 0.27568817138671875f, 20.219505310058594f, 0.0f, 17.17298698425293f, 0.7178630828857422f, 17.110321044921875f, 1.6769599914550781f, +19.276708602905273f, -0.5457372665405273f, 17.17298698425293f, -0.7178630828857422f, 23.590185165405273f, 0.0f, 17.35452651977539f, 1.8237133026123047f, +19.09323501586914f, -1.9891033172607422f, 17.110321044921875f, -1.6769599914550781f, 17.35452651977539f, -1.8237133026123047f, 23.08430290222168f, 0.0f, +21.82386589050293f, 0.0f, 18.28636932373047f, -0.7912521362304688f, 15.926384925842285f, -1.9688825607299805f, 15.697019577026367f, 0.16793584823608398f, +18.28636932373047f, 0.7912521362304688f, 27.12199592590332f, 0.0f, 18.34685516357422f, -0.8344335556030273f, 17.645771026611328f, 0.5919928550720215f, +15.926384925842285f, 1.9688825607299805f, 18.34685516357422f, 0.8344335556030273f, 21.936885833740234f, 0.0f, 16.407054901123047f, 1.1277852058410645f, +15.697019577026367f, -0.16793584823608398f, 17.645771026611328f, -0.5919928550720215f, 16.407054901123047f, -1.1277852058410645f, 19.998172760009766f, 0.0f, +21.156646728515625f, 0.0f, 14.963040351867676f, -3.250469207763672f, 16.017105102539062f, -3.38919734954834f, 15.525463104248047f, -0.6299047470092773f, +14.963040351867676f, 3.250469207763672f, 21.190134048461914f, 0.0f, 15.777545928955078f, -0.26421642303466797f, 14.752311706542969f, 0.5402646064758301f, +16.017105102539062f, 3.38919734954834f, 15.777545928955078f, 0.26421642303466797f, 23.641849517822266f, 0.0f, 17.563173294067383f, 2.129687786102295f, +15.525463104248047f, 0.6299047470092773f, 14.752311706542969f, -0.5402646064758301f, 17.563173294067383f, -2.129687786102295f, 21.198810577392578f, 0.0f, +21.67420196533203f, 0.0f, 13.586511611938477f, -2.234363555908203f, 15.215188980102539f, 0.6189961433410645f, 16.819820404052734f, -0.047367095947265625f, +13.586511611938477f, 2.234363555908203f, 18.914813995361328f, 0.0f, 15.71336841583252f, 1.5280132293701172f, 15.871816635131836f, 1.3302769660949707f, +15.215188980102539f, -0.6189961433410645f, 15.71336841583252f, -1.5280132293701172f, 22.850418090820312f, 0.0f, 17.89726448059082f, 0.5366277694702148f, +16.819820404052734f, 0.047367095947265625f, 15.871816635131836f, -1.3302769660949707f, 17.89726448059082f, -0.5366277694702148f, 24.94632911682129f, 0.0f, +23.268756866455078f, 0.0f, 18.49648094177246f, -0.9258761405944824f, 16.45522117614746f, 0.23508453369140625f, 16.601776123046875f, -0.013431549072265625f, +18.49648094177246f, 0.9258761405944824f, 23.433210372924805f, 0.0f, 17.07427215576172f, -1.1038908958435059f, 17.92400360107422f, 0.5738315582275391f, +16.45522117614746f, -0.23508453369140625f, 17.07427215576172f, 1.1038908958435059f, 23.30770492553711f, 0.0f, 18.071334838867188f, -0.5397367477416992f, +16.601776123046875f, 0.013431549072265625f, 17.92400360107422f, -0.5738315582275391f, 18.071334838867188f, 0.5397367477416992f, 23.982877731323242f, 0.0f, +20.15037727355957f, 0.0f, 16.113107681274414f, 2.0874972343444824f, 18.73427391052246f, -1.6763982772827148f, 16.446359634399414f, -0.036620140075683594f, +16.113107681274414f, -2.0874972343444824f, 22.284868240356445f, 0.0f, 18.74179458618164f, -4.731660842895508f, 16.800756454467773f, -2.8222293853759766f, +18.73427391052246f, 1.6763982772827148f, 18.74179458618164f, 4.731660842895508f, 25.596961975097656f, 0.0f, 19.065216064453125f, 0.91595458984375f, +16.446359634399414f, 0.036620140075683594f, 16.800756454467773f, 2.8222293853759766f, 19.065216064453125f, -0.91595458984375f, 24.81493377685547f, 0.0f, +20.80281639099121f, 0.0f, 14.864089012145996f, -2.3611068725585938f, 16.177162170410156f, -1.2886238098144531f, 16.168249130249023f, -0.13654470443725586f, +14.864089012145996f, 2.3611068725585938f, 22.20869255065918f, 0.0f, 16.916973114013672f, 1.3737401962280273f, 16.078388214111328f, 0.8985466957092285f, +16.177162170410156f, 1.2886238098144531f, 16.916973114013672f, -1.3737401962280273f, 24.248790740966797f, 0.0f, 17.9483642578125f, -0.7808599472045898f, +16.168249130249023f, 0.13654470443725586f, 16.078388214111328f, -0.8985466957092285f, 17.9483642578125f, 0.7808599472045898f, 22.37759780883789f, 0.0f, +26.084135055541992f, 0.0f, 17.945409774780273f, 0.44154930114746094f, 15.904071807861328f, -1.0575032234191895f, 15.50037956237793f, -1.861058235168457f, +17.945409774780273f, -0.44154930114746094f, 20.685102462768555f, 0.0f, 14.988670349121094f, -3.0397934913635254f, 13.26390266418457f, -2.1889262199401855f, +15.904071807861328f, 1.0575032234191895f, 14.988670349121094f, 3.0397934913635254f, 18.75784683227539f, 0.0f, 12.285791397094727f, 0.33979082107543945f, +15.50037956237793f, 1.861058235168457f, 13.26390266418457f, 2.1889262199401855f, 12.285791397094727f, -0.33979082107543945f, 16.782711029052734f, 0.0f, +23.26570701599121f, 0.0f, 14.851203918457031f, -3.0146307945251465f, 14.983196258544922f, -1.2210745811462402f, 17.506500244140625f, -2.841442108154297f, +14.851203918457031f, 3.0146307945251465f, 22.041702270507812f, 0.0f, 14.917167663574219f, 2.5705461502075195f, 15.005529403686523f, 1.8538432121276855f, +14.983196258544922f, 1.2210745811462402f, 14.917167663574219f, -2.5705461502075195f, 18.744569778442383f, 0.0f, 13.813959121704102f, -0.8268122673034668f, +17.506500244140625f, 2.841442108154297f, 15.005529403686523f, -1.8538432121276855f, 13.813959121704102f, 0.8268122673034668f, 20.73076820373535f, 0.0f, +25.141897201538086f, 0.0f, 19.093374252319336f, 0.7537088394165039f, 19.636192321777344f, -0.9514970779418945f, 18.15658950805664f, -1.7708101272583008f, +19.093374252319336f, -0.7537088394165039f, 22.062088012695312f, 0.0f, 16.22108268737793f, -1.2323236465454102f, 16.578773498535156f, -1.650010108947754f, +19.636192321777344f, 0.9514970779418945f, 16.22108268737793f, 1.2323236465454102f, 21.277240753173828f, 0.0f, 15.185653686523438f, 0.9537439346313477f, +18.15658950805664f, 1.7708101272583008f, 16.578773498535156f, 1.650010108947754f, 15.185653686523438f, -0.9537439346313477f, 21.73825454711914f, 0.0f, +22.41545867919922f, 0.0f, 15.457216262817383f, 0.5130391120910645f, 14.543241500854492f, 1.0866379737854004f, 14.352521896362305f, -0.5860323905944824f, +15.457216262817383f, -0.5130391120910645f, 20.013647079467773f, 0.0f, 14.732290267944336f, -0.8432760238647461f, 12.986780166625977f, -1.6761822700500488f, +14.543241500854492f, -1.0866379737854004f, 14.732290267944336f, 0.8432760238647461f, 19.485126495361328f, 0.0f, 13.028422355651855f, -1.7077574729919434f, +14.352521896362305f, 0.5860323905944824f, 12.986780166625977f, 1.6761822700500488f, 13.028422355651855f, 1.7077574729919434f, 16.185359954833984f, 0.0f, +22.867944717407227f, 0.0f, 16.849197387695312f, 1.1407184600830078f, 17.800264358520508f, 1.7415447235107422f, 18.04013442993164f, 1.2347793579101562f, +16.849197387695312f, -1.1407184600830078f, 20.637941360473633f, 0.0f, 16.317440032958984f, 0.6403484344482422f, 15.822195053100586f, 1.0929651260375977f, +17.800264358520508f, -1.7415447235107422f, 16.317440032958984f, -0.6403484344482422f, 23.017236709594727f, 0.0f, 18.368335723876953f, 0.7027883529663086f, +18.04013442993164f, -1.2347793579101562f, 15.822195053100586f, -1.0929651260375977f, 18.368335723876953f, -0.7027883529663086f, 22.589834213256836f, 0.0f, +24.70705795288086f, 0.0f, 16.275598526000977f, 1.0680747032165527f, 17.70313262939453f, -1.370182991027832f, 17.663818359375f, 1.1964101791381836f, +16.275598526000977f, -1.0680747032165527f, 18.79515266418457f, 0.0f, 12.856111526489258f, -2.050729751586914f, 14.928178787231445f, -1.5368757247924805f, +17.70313262939453f, 1.370182991027832f, 12.856111526489258f, 2.050729751586914f, 20.860309600830078f, 0.0f, 16.415576934814453f, 1.7103967666625977f, +17.663818359375f, -1.1964101791381836f, 14.928178787231445f, 1.5368757247924805f, 16.415576934814453f, -1.7103967666625977f, 25.06394386291504f, 0.0f, +18.081737518310547f, 0.0f, 14.392688751220703f, 1.0410981178283691f, 10.879630088806152f, -1.1098532676696777f, 14.241168975830078f, -0.9523749351501465f, +14.392688751220703f, -1.0410981178283691f, 22.830793380737305f, 0.0f, 13.180607795715332f, -2.11100435256958f, 16.866233825683594f, -3.05134916305542f, +10.879630088806152f, 1.1098532676696777f, 13.180607795715332f, 2.11100435256958f, 18.85939598083496f, 0.0f, 14.053986549377441f, 0.443967342376709f, +14.241168975830078f, 0.9523749351501465f, 16.866233825683594f, 3.05134916305542f, 14.053986549377441f, -0.443967342376709f, 23.23431968688965f, 0.0f, +23.082521438598633f, 0.0f, 16.008705139160156f, 1.0954151153564453f, 16.438770294189453f, -0.6284170150756836f, 15.298803329467773f, 0.5248565673828125f, +16.008705139160156f, -1.0954151153564453f, 22.245431900024414f, 0.0f, 14.630025863647461f, -2.641328811645508f, 15.869367599487305f, -2.91703462600708f, +16.438770294189453f, 0.6284170150756836f, 14.630025863647461f, 2.641328811645508f, 22.628671646118164f, 0.0f, 16.52216148376465f, -1.3347516059875488f, +15.298803329467773f, -0.5248565673828125f, 15.869367599487305f, 2.91703462600708f, 16.52216148376465f, 1.3347516059875488f, 20.79539680480957f, 0.0f, +23.611989974975586f, 0.0f, 16.561416625976562f, 0.05605506896972656f, 15.031681060791016f, 0.523226261138916f, 17.32811164855957f, -0.5242290496826172f, +16.561416625976562f, -0.05605506896972656f, 21.584957122802734f, 0.0f, 12.999732971191406f, 0.6707658767700195f, 15.00607681274414f, 2.564518928527832f, +15.031681060791016f, -0.523226261138916f, 12.999732971191406f, -0.6707658767700195f, 18.67287254333496f, 0.0f, 13.768112182617188f, -1.1756277084350586f, +17.32811164855957f, 0.5242290496826172f, 15.00607681274414f, -2.564518928527832f, 13.768112182617188f, 1.1756277084350586f, 22.459548950195312f, 0.0f, +24.353317260742188f, 0.0f, 16.616954803466797f, -1.5211868286132812f, 16.458553314208984f, 0.6844158172607422f, 14.482272148132324f, 1.903658390045166f, +16.616954803466797f, 1.5211868286132812f, 24.40841293334961f, 0.0f, 18.68754005432129f, 1.865617275238037f, 14.65306568145752f, 3.11850643157959f, +16.458553314208984f, -0.6844158172607422f, 18.68754005432129f, -1.865617275238037f, 22.007356643676758f, 0.0f, 13.46875f, 0.7816581726074219f, +14.482272148132324f, -1.903658390045166f, 14.65306568145752f, -3.11850643157959f, 13.46875f, -0.7816581726074219f, 18.208791732788086f, 0.0f, +20.195283889770508f, 0.0f, 13.160262107849121f, -0.11548423767089844f, 12.830924034118652f, 0.2598271369934082f, 14.729646682739258f, 1.250256061553955f, +13.160262107849121f, 0.11548423767089844f, 17.437715530395508f, 0.0f, 12.61850357055664f, -0.3826875686645508f, 13.56833267211914f, 0.47177600860595703f, +12.830924034118652f, -0.2598271369934082f, 12.61850357055664f, 0.3826875686645508f, 19.65981101989746f, 0.0f, 15.4100923538208f, -0.5405468940734863f, +14.729646682739258f, -1.250256061553955f, 13.56833267211914f, -0.47177600860595703f, 15.4100923538208f, 0.5405468940734863f, 23.38736343383789f, 0.0f, +17.804702758789062f, 0.0f, 13.2633056640625f, 2.9313769340515137f, 13.813352584838867f, -0.9173941612243652f, 12.845422744750977f, 0.7344160079956055f, +13.2633056640625f, -2.9313769340515137f, 22.89776611328125f, 0.0f, 15.404380798339844f, -2.1690216064453125f, 13.345518112182617f, -1.9027013778686523f, +13.813352584838867f, 0.9173941612243652f, 15.404380798339844f, 2.1690216064453125f, 19.961578369140625f, 0.0f, 14.936476707458496f, 0.41643619537353516f, +12.845422744750977f, -0.7344160079956055f, 13.345518112182617f, 1.9027013778686523f, 14.936476707458496f, -0.41643619537353516f, 19.790599822998047f, 0.0f, +21.981555938720703f, 0.0f, 16.391460418701172f, 1.2731451988220215f, 17.22467803955078f, 0.0774993896484375f, 16.835166931152344f, -0.8849501609802246f, +16.391460418701172f, -1.2731451988220215f, 22.642932891845703f, 0.0f, 15.553901672363281f, -0.0038728713989257812f, 16.430368423461914f, -0.45658111572265625f, +17.22467803955078f, -0.0774993896484375f, 15.553901672363281f, 0.0038728713989257812f, 21.280921936035156f, 0.0f, 16.57863998413086f, -0.8810787200927734f, +16.835166931152344f, 0.8849501609802246f, 16.430368423461914f, 0.45658111572265625f, 16.57863998413086f, 0.8810787200927734f, 21.370887756347656f, 0.0f, +20.917613983154297f, 0.0f, 13.823062896728516f, 3.786651134490967f, 14.135078430175781f, -0.9553022384643555f, 13.866032600402832f, 0.9052104949951172f, +13.823062896728516f, -3.786651134490967f, 20.094514846801758f, 0.0f, 15.816417694091797f, -3.4392805099487305f, 12.99874496459961f, -2.256455898284912f, +14.135078430175781f, 0.9553022384643555f, 15.816417694091797f, 3.4392805099487305f, 20.721765518188477f, 0.0f, 13.898710250854492f, 1.0704536437988281f, +13.866032600402832f, -0.9052104949951172f, 12.99874496459961f, 2.256455898284912f, 13.898710250854492f, -1.0704536437988281f, 17.581926345825195f, 0.0f, +23.156063079833984f, 0.0f, 18.127716064453125f, -0.25254058837890625f, 18.012575149536133f, -2.3376564979553223f, 15.12016487121582f, 1.2785520553588867f, +18.127716064453125f, 0.25254058837890625f, 21.793302536010742f, 0.0f, 17.32638931274414f, -0.4588584899902344f, 13.868478775024414f, 2.7704286575317383f, +18.012575149536133f, 2.3376564979553223f, 17.32638931274414f, 0.4588584899902344f, 23.73375129699707f, 0.0f, 14.050281524658203f, 3.4162216186523438f, +15.12016487121582f, -1.2785520553588867f, 13.868478775024414f, -2.7704286575317383f, 14.050281524658203f, -3.4162216186523438f, 18.8512020111084f, 0.0f, +19.499664306640625f, 0.0f, 12.799896240234375f, 2.0342555046081543f, 15.55409049987793f, -1.5081262588500977f, 15.44590950012207f, 1.5322132110595703f, +12.799896240234375f, -2.0342555046081543f, 15.800932884216309f, 0.0f, 14.722105026245117f, -2.9356064796447754f, 15.268478393554688f, -1.2157306671142578f, +15.55409049987793f, 1.5081262588500977f, 14.722105026245117f, 2.9356064796447754f, 25.044694900512695f, 0.0f, 17.79886817932129f, 2.465226173400879f, +15.44590950012207f, -1.5322132110595703f, 15.268478393554688f, 1.2157306671142578f, 17.79886817932129f, -2.465226173400879f, 22.565834045410156f, 0.0f, +21.019433975219727f, 0.0f, 16.874849319458008f, 2.5363736152648926f, 17.013916015625f, 2.2694177627563477f, 15.209495544433594f, -1.995060920715332f, +16.874849319458008f, -2.5363736152648926f, 24.726512908935547f, 0.0f, 18.31914520263672f, -1.08038330078125f, 14.770549774169922f, -7.0016679763793945f, +17.013916015625f, -2.2694177627563477f, 18.31914520263672f, 1.08038330078125f, 21.463329315185547f, 0.0f, 14.936346054077148f, -5.353445053100586f, +15.209495544433594f, 1.995060920715332f, 14.770549774169922f, 7.0016679763793945f, 14.936346054077148f, 5.353445053100586f, 19.648958206176758f, 0.0f, +21.26702117919922f, 0.0f, 15.212791442871094f, -1.8736281394958496f, 13.884817123413086f, -1.9831476211547852f, 16.581018447875977f, -0.8674612045288086f, +15.212791442871094f, 1.8736281394958496f, 21.804275512695312f, 0.0f, 13.350414276123047f, -0.7240376472473145f, 16.212177276611328f, 1.765894889831543f, +13.884817123413086f, 1.9831476211547852f, 13.350414276123047f, 0.7240376472473145f, 20.65640640258789f, 0.0f, 15.064626693725586f, 1.3797168731689453f, +16.581018447875977f, 0.8674612045288086f, 16.212177276611328f, -1.765894889831543f, 15.064626693725586f, -1.3797168731689453f, 22.72187042236328f, 0.0f, +22.46858787536621f, 0.0f, 17.032556533813477f, 0.9991369247436523f, 15.747333526611328f, 1.6234846115112305f, 16.1398868560791f, 2.874476432800293f, +17.032556533813477f, -0.9991369247436523f, 19.42963218688965f, 0.0f, 15.21697998046875f, 2.2927470207214355f, 14.053506851196289f, 1.9305648803710938f, +15.747333526611328f, -1.6234846115112305f, 15.21697998046875f, -2.2927470207214355f, 22.829713821411133f, 0.0f, 15.032106399536133f, 1.9844837188720703f, +16.1398868560791f, -2.874476432800293f, 14.053506851196289f, -1.9305648803710938f, 15.032106399536133f, -1.9844837188720703f, 19.33261489868164f, 0.0f, +25.549419403076172f, 0.0f, 15.675451278686523f, 0.8803224563598633f, 17.922313690185547f, 2.5497593879699707f, 18.836423873901367f, -1.8564481735229492f, +15.675451278686523f, -0.8803224563598633f, 20.32132911682129f, 0.0f, 15.588417053222656f, 1.1158456802368164f, 15.76127815246582f, -0.6685242652893066f, +17.922313690185547f, -2.5497593879699707f, 15.588417053222656f, -1.1158456802368164f, 23.77366065979004f, 0.0f, 19.000553131103516f, -2.6699934005737305f, +18.836423873901367f, 1.8564481735229492f, 15.76127815246582f, 0.6685242652893066f, 19.000553131103516f, 2.6699934005737305f, 23.933731079101562f, 0.0f, +20.510786056518555f, 0.0f, 14.031176567077637f, 1.7911295890808105f, 15.563695907592773f, 0.635685920715332f, 16.307754516601562f, 1.5303435325622559f, +14.031176567077637f, -1.7911295890808105f, 20.08976173400879f, 0.0f, 15.02847671508789f, -1.692429542541504f, 17.853145599365234f, 1.5829029083251953f, +15.563695907592773f, -0.635685920715332f, 15.02847671508789f, 1.692429542541504f, 21.694198608398438f, 0.0f, 17.001422882080078f, 2.2233848571777344f, +16.307754516601562f, -1.5303435325622559f, 17.853145599365234f, -1.5829029083251953f, 17.001422882080078f, -2.2233848571777344f, 23.665809631347656f, 0.0f, +22.161157608032227f, 0.0f, 13.83482837677002f, -0.6875772476196289f, 17.99317741394043f, -3.4494028091430664f, 13.24556827545166f, 1.147223949432373f, +13.83482837677002f, 0.6875772476196289f, 17.62982177734375f, 0.0f, 14.38594913482666f, -0.9135289192199707f, 12.122658729553223f, 1.4173316955566406f, +17.99317741394043f, 3.4494028091430664f, 14.38594913482666f, 0.9135289192199707f, 24.43172264099121f, 0.0f, 14.622387886047363f, 2.3067116737365723f, +13.24556827545166f, -1.147223949432373f, 12.122658729553223f, -1.4173316955566406f, 14.622387886047363f, -2.3067116737365723f, 16.669797897338867f, 0.0f, +22.35337257385254f, 0.0f, 14.741241455078125f, 3.6107912063598633f, 14.99654769897461f, -0.4367256164550781f, 18.150379180908203f, 2.0325098037719727f, +14.741241455078125f, -3.6107912063598633f, 21.59644317626953f, 0.0f, 14.456125259399414f, -1.7215328216552734f, 16.163494110107422f, -2.385648727416992f, +14.99654769897461f, 0.4367256164550781f, 14.456125259399414f, 1.7215328216552734f, 19.49504280090332f, 0.0f, 15.389554977416992f, 1.232231616973877f, +18.150379180908203f, -2.0325098037719727f, 16.163494110107422f, 2.385648727416992f, 15.389554977416992f, -1.232231616973877f, 24.073657989501953f, 0.0f, +25.94482421875f, 0.0f, 17.61433219909668f, -2.1030750274658203f, 21.95477294921875f, -1.8008041381835938f, 16.66870880126953f, -4.108855724334717f, +17.61433219909668f, 2.1030750274658203f, 21.254602432250977f, 0.0f, 17.673030853271484f, -0.505009651184082f, 16.044530868530273f, -1.512312412261963f, +21.95477294921875f, 1.8008041381835938f, 17.673030853271484f, 0.505009651184082f, 27.040334701538086f, 0.0f, 19.0844783782959f, -1.209031105041504f, +16.66870880126953f, 4.108855724334717f, 16.044530868530273f, 1.512312412261963f, 19.0844783782959f, 1.209031105041504f, 21.569494247436523f, 0.0f, +19.40656852722168f, 0.0f, 17.483243942260742f, -1.3333191871643066f, 15.704228401184082f, 2.0586867332458496f, 15.042598724365234f, 0.2139272689819336f, +17.483243942260742f, 1.3333191871643066f, 24.39164924621582f, 0.0f, 18.819673538208008f, 1.5492687225341797f, 18.0701847076416f, 1.1819791793823242f, +15.704228401184082f, -2.0586867332458496f, 18.819673538208008f, -1.5492687225341797f, 23.73099708557129f, 0.0f, 15.596896171569824f, -0.5365066528320312f, +15.042598724365234f, -0.2139272689819336f, 18.0701847076416f, -1.1819791793823242f, 15.596896171569824f, 0.5365066528320312f, 20.535911560058594f, 0.0f, +22.42751121520996f, 0.0f, 13.360651969909668f, -1.4064407348632812f, 17.092111587524414f, 0.47804737091064453f, 16.72684097290039f, 0.15868282318115234f, +13.360651969909668f, 1.4064407348632812f, 18.306352615356445f, 0.0f, 12.919061660766602f, -0.5110950469970703f, 14.463268280029297f, 1.6586861610412598f, +17.092111587524414f, -0.47804737091064453f, 12.919061660766602f, 0.5110950469970703f, 21.857784271240234f, 0.0f, 15.654556274414062f, 1.0567073822021484f, +16.72684097290039f, -0.15868282318115234f, 14.463268280029297f, -1.6586861610412598f, 15.654556274414062f, -1.0567073822021484f, 23.10276985168457f, 0.0f, +21.924734115600586f, 0.0f, 16.51244354248047f, -1.9601187705993652f, 15.893945693969727f, -1.2328801155090332f, 14.592618942260742f, -0.7302284240722656f, +16.51244354248047f, 1.9601187705993652f, 22.73590660095215f, 0.0f, 16.96190643310547f, 1.8122553825378418f, 16.024229049682617f, 1.6697964668273926f, +15.893945693969727f, 1.2328801155090332f, 16.96190643310547f, -1.8122553825378418f, 25.29395294189453f, 0.0f, 16.39565658569336f, -0.30963706970214844f, +14.592618942260742f, 0.7302284240722656f, 16.024229049682617f, -1.6697964668273926f, 16.39565658569336f, 0.30963706970214844f, 20.12497329711914f, 0.0f, +23.10235023498535f, 0.0f, 15.63459300994873f, 0.34015464782714844f, 14.706644058227539f, 0.36768054962158203f, 16.83236312866211f, 0.07261466979980469f, +15.63459300994873f, -0.34015464782714844f, 20.072338104248047f, 0.0f, 14.449729919433594f, 0.5470728874206543f, 15.287260055541992f, 1.2270832061767578f, +14.706644058227539f, -0.36768054962158203f, 14.449729919433594f, -0.5470728874206543f, 21.202409744262695f, 0.0f, 14.099662780761719f, 0.7842984199523926f, +16.83236312866211f, -0.07261466979980469f, 15.287260055541992f, -1.2270832061767578f, 14.099662780761719f, -0.7842984199523926f, 22.463050842285156f, 0.0f, +21.445636749267578f, 0.0f, 15.752969741821289f, -3.3651366233825684f, 13.33331298828125f, -2.2903714179992676f, 14.344769477844238f, -0.9584107398986816f, +15.752969741821289f, 3.3651366233825684f, 22.835439682006836f, 0.0f, 14.135374069213867f, 0.688054084777832f, 15.988200187683105f, 1.2223381996154785f, +13.33331298828125f, 2.2903714179992676f, 14.135374069213867f, -0.688054084777832f, 18.21776580810547f, 0.0f, 12.741100311279297f, 1.7218761444091797f, +14.344769477844238f, 0.9584107398986816f, 15.988200187683105f, -1.2223381996154785f, 12.741100311279297f, -1.7218761444091797f, 19.920690536499023f, 0.0f, +17.897926330566406f, 0.0f, 14.2000732421875f, -0.06585693359375f, 15.886801719665527f, -1.3169355392456055f, 15.799428939819336f, -0.27390480041503906f, +14.2000732421875f, 0.06585693359375f, 23.399452209472656f, 0.0f, 18.581501007080078f, -1.5344934463500977f, 17.049884796142578f, 0.04734230041503906f, +15.886801719665527f, 1.3169355392456055f, 18.581501007080078f, 1.5344934463500977f, 24.7672176361084f, 0.0f, 17.873680114746094f, 0.7539587020874023f, +15.799428939819336f, 0.27390480041503906f, 17.049884796142578f, -0.04734230041503906f, 17.873680114746094f, -0.7539587020874023f, 24.66730499267578f, 0.0f, +22.369152069091797f, 0.0f, 18.483089447021484f, 2.9640464782714844f, 17.89056396484375f, 0.9298944473266602f, 15.652259826660156f, 3.3369665145874023f, +18.483089447021484f, -2.9640464782714844f, 28.491777420043945f, 0.0f, 20.589141845703125f, -0.8496484756469727f, 20.038917541503906f, 0.4415578842163086f, +17.89056396484375f, -0.9298944473266602f, 20.589141845703125f, 0.8496484756469727f, 23.422487258911133f, 0.0f, 18.042354583740234f, 1.8185062408447266f, +15.652259826660156f, -3.3369665145874023f, 20.038917541503906f, -0.4415578842163086f, 18.042354583740234f, -1.8185062408447266f, 23.615692138671875f, 0.0f, +21.090185165405273f, 0.0f, 15.784244537353516f, -0.8646383285522461f, 17.3502254486084f, 1.4915990829467773f, 14.425956726074219f, -0.74346923828125f, +15.784244537353516f, 0.8646383285522461f, 20.20342254638672f, 0.0f, 17.31070899963379f, 2.0346436500549316f, 14.924568176269531f, -0.30071401596069336f, +17.3502254486084f, -1.4915990829467773f, 17.31070899963379f, -2.0346436500549316f, 24.543437957763672f, 0.0f, 16.764122009277344f, -1.6620960235595703f, +14.425956726074219f, 0.74346923828125f, 14.924568176269531f, 0.30071401596069336f, 16.764122009277344f, 1.6620960235595703f, 19.287717819213867f, 0.0f, +22.688316345214844f, 0.0f, 16.278608322143555f, 2.1637229919433594f, 18.909774780273438f, 0.9045171737670898f, 18.42300796508789f, 2.228921890258789f, +16.278608322143555f, -2.1637229919433594f, 22.191226959228516f, 0.0f, 18.31256866455078f, -0.7545576095581055f, 16.71957015991211f, 0.06514644622802734f, +18.909774780273438f, -0.9045171737670898f, 18.31256866455078f, 0.7545576095581055f, 25.395681381225586f, 0.0f, 21.17438507080078f, 1.1358051300048828f, +18.42300796508789f, -2.228921890258789f, 16.71957015991211f, -0.06514644622802734f, 21.17438507080078f, -1.1358051300048828f, 24.571359634399414f, 0.0f, +22.866497039794922f, 0.0f, 15.675662994384766f, 1.9012560844421387f, 14.68310546875f, -0.7152795791625977f, 14.82040786743164f, -0.23811006546020508f, +15.675662994384766f, -1.9012560844421387f, 20.0151424407959f, 0.0f, 13.007207870483398f, -3.5422096252441406f, 13.582038879394531f, -1.868147850036621f, +14.68310546875f, 0.7152795791625977f, 13.007207870483398f, 3.5422096252441406f, 19.011985778808594f, 0.0f, 13.099071502685547f, 1.8876557350158691f, +14.82040786743164f, 0.23811006546020508f, 13.582038879394531f, 1.868147850036621f, 13.099071502685547f, -1.8876557350158691f, 19.041284561157227f, 0.0f, +23.660009384155273f, 0.0f, 16.749181747436523f, 0.9827003479003906f, 15.687440872192383f, 1.3182611465454102f, 17.842182159423828f, 1.1182174682617188f, +16.749181747436523f, -0.9827003479003906f, 22.08895492553711f, 0.0f, 15.935537338256836f, -0.4991326332092285f, 15.258272171020508f, 1.589139461517334f, +15.687440872192383f, -1.3182611465454102f, 15.935537338256836f, 0.4991326332092285f, 19.29421615600586f, 0.0f, 14.20648193359375f, 1.1718125343322754f, +17.842182159423828f, -1.1182174682617188f, 15.258272171020508f, -1.589139461517334f, 14.20648193359375f, -1.1718125343322754f, 21.383224487304688f, 0.0f, +23.22064971923828f, 0.0f, 14.34070110321045f, -0.9424943923950195f, 19.682327270507812f, 0.20128726959228516f, 18.030376434326172f, 0.26003170013427734f, +14.34070110321045f, 0.9424943923950195f, 16.20490074157715f, 0.0f, 15.35683822631836f, 0.7190814018249512f, 15.10354995727539f, 0.1688976287841797f, +19.682327270507812f, -0.20128726959228516f, 15.35683822631836f, -0.7190814018249512f, 25.170190811157227f, 0.0f, 18.81298065185547f, 0.32216358184814453f, +18.030376434326172f, -0.26003170013427734f, 15.10354995727539f, -0.1688976287841797f, 18.81298065185547f, -0.32216358184814453f, 25.898866653442383f, 0.0f, +21.245214462280273f, 0.0f, 17.499576568603516f, 1.84266996383667f, 17.596399307250977f, 0.3544197082519531f, 17.567392349243164f, -0.7829427719116211f, +17.499576568603516f, -1.84266996383667f, 23.833078384399414f, 0.0f, 17.566892623901367f, -3.2095279693603516f, 19.413240432739258f, -3.726628303527832f, +17.596399307250977f, -0.3544197082519531f, 17.566892623901367f, 3.2095279693603516f, 23.396589279174805f, 0.0f, 19.24372673034668f, 0.6454591751098633f, +17.567392349243164f, 0.7829427719116211f, 19.413240432739258f, 3.726628303527832f, 19.24372673034668f, -0.6454591751098633f, 23.73056411743164f, 0.0f, +21.05426788330078f, 0.0f, 15.851959228515625f, -0.8666439056396484f, 16.57944107055664f, 1.2585558891296387f, 17.66006851196289f, -0.8346357345581055f, +15.851959228515625f, 0.8666439056396484f, 20.23005485534668f, 0.0f, 17.357967376708984f, 0.15669918060302734f, 17.46744155883789f, 0.011808395385742188f, +16.57944107055664f, -1.2585558891296387f, 17.357967376708984f, -0.15669918060302734f, 23.257179260253906f, 0.0f, 18.789134979248047f, -0.11581230163574219f, +17.66006851196289f, 0.8346357345581055f, 17.46744155883789f, -0.011808395385742188f, 18.789134979248047f, 0.11581230163574219f, 25.464271545410156f, 0.0f, +25.74774932861328f, 0.0f, 16.283390045166016f, 0.4404745101928711f, 17.754215240478516f, 0.8522043228149414f, 17.75044822692871f, 1.09393310546875f, +16.283390045166016f, -0.4404745101928711f, 20.0675048828125f, 0.0f, 16.511205673217773f, -0.1415400505065918f, 14.79128646850586f, 1.7658653259277344f, +17.754215240478516f, -0.8522043228149414f, 16.511205673217773f, 0.1415400505065918f, 22.967079162597656f, 0.0f, 15.164581298828125f, 1.417862892150879f, +17.75044822692871f, -1.09393310546875f, 14.79128646850586f, -1.7658653259277344f, 15.164581298828125f, -1.417862892150879f, 20.73321533203125f, 0.0f, +18.034215927124023f, 0.0f, 13.358000755310059f, 1.1626267433166504f, 14.392923355102539f, 0.01716899871826172f, 14.31142807006836f, 0.7530360221862793f, +13.358000755310059f, -1.1626267433166504f, 20.391267776489258f, 0.0f, 13.86868667602539f, 0.15003585815429688f, 14.165078163146973f, 0.6651220321655273f, +14.392923355102539f, -0.01716899871826172f, 13.86868667602539f, -0.15003585815429688f, 20.551931381225586f, 0.0f, 15.683340072631836f, -1.833263874053955f, +14.31142807006836f, -0.7530360221862793f, 14.165078163146973f, -0.6651220321655273f, 15.683340072631836f, 1.833263874053955f, 20.74091911315918f, 0.0f, +21.193403244018555f, 0.0f, 15.914152145385742f, 0.5000205039978027f, 14.33572769165039f, -0.9060759544372559f, 15.561418533325195f, 1.4510993957519531f, +15.914152145385742f, -0.5000205039978027f, 23.22000503540039f, 0.0f, 13.840351104736328f, -0.7668333053588867f, 17.434032440185547f, 0.8929977416992188f, +14.33572769165039f, 0.9060759544372559f, 13.840351104736328f, 0.7668333053588867f, 15.906208992004395f, 0.0f, 13.495463371276855f, 2.7299442291259766f, +15.561418533325195f, -1.4510993957519531f, 17.434032440185547f, -0.8929977416992188f, 13.495463371276855f, -2.7299442291259766f, 21.271221160888672f, 0.0f, +17.941133499145508f, 0.0f, 14.047151565551758f, -1.762354850769043f, 14.096138000488281f, -0.13822555541992188f, 12.541434288024902f, -0.6228523254394531f, +14.047151565551758f, 1.762354850769043f, 22.918895721435547f, 0.0f, 15.5895357131958f, 0.09790658950805664f, 13.054038047790527f, -0.7226905822753906f, +14.096138000488281f, 0.13822555541992188f, 15.5895357131958f, -0.09790658950805664f, 19.945289611816406f, 0.0f, 12.592382431030273f, 0.09438467025756836f, +12.541434288024902f, 0.6228523254394531f, 13.054038047790527f, 0.7226905822753906f, 12.592382431030273f, -0.09438467025756836f, 16.13559913635254f, 0.0f, +20.415830612182617f, 0.0f, 12.051128387451172f, 1.0910415649414062f, 15.391805648803711f, -1.1770329475402832f, 13.27441692352295f, -1.0162811279296875f, +12.051128387451172f, -1.0910415649414062f, 16.476058959960938f, 0.0f, 13.58928108215332f, -1.9244861602783203f, 11.145223617553711f, -0.9013209342956543f, +15.391805648803711f, 1.1770329475402832f, 13.58928108215332f, 1.9244861602783203f, 22.09502601623535f, 0.0f, 14.57729721069336f, 0.27733278274536133f, +13.27441692352295f, 1.0162811279296875f, 11.145223617553711f, 0.9013209342956543f, 14.57729721069336f, -0.27733278274536133f, 19.021970748901367f, 0.0f, +20.795913696289062f, 0.0f, 16.356979370117188f, -2.0977654457092285f, 16.727378845214844f, -1.8282432556152344f, 13.724427223205566f, 1.4508099555969238f, +16.356979370117188f, 2.0977654457092285f, 22.317138671875f, 0.0f, 17.656774520874023f, 0.531740665435791f, 14.077089309692383f, 1.0662932395935059f, +16.727378845214844f, 1.8282432556152344f, 17.656774520874023f, -0.531740665435791f, 22.92874526977539f, 0.0f, 15.58102798461914f, 0.7558050155639648f, +13.724427223205566f, -1.4508099555969238f, 14.077089309692383f, -1.0662932395935059f, 15.58102798461914f, -0.7558050155639648f, 19.86005973815918f, 0.0f, +21.16354751586914f, 0.0f, 15.014411926269531f, 0.838930606842041f, 16.19933319091797f, -1.4883193969726562f, 14.829092025756836f, -1.9013452529907227f, +15.014411926269531f, -0.838930606842041f, 22.066131591796875f, 0.0f, 16.913047790527344f, -2.968407154083252f, 14.956172943115234f, -1.542983055114746f, +16.19933319091797f, 1.4883193969726562f, 16.913047790527344f, 2.968407154083252f, 22.373279571533203f, 0.0f, 16.385141372680664f, 0.6518683433532715f, +14.829092025756836f, 1.9013452529907227f, 14.956172943115234f, 1.542983055114746f, 16.385141372680664f, -0.6518683433532715f, 20.07228660583496f, 0.0f, +20.939693450927734f, 0.0f, 15.486648559570312f, 0.5890202522277832f, 15.387598037719727f, 0.37865638732910156f, 15.265425682067871f, 0.49555110931396484f, +15.486648559570312f, -0.5890202522277832f, 22.971166610717773f, 0.0f, 16.051822662353516f, 0.09737682342529297f, 15.499019622802734f, 1.4616079330444336f, +15.387598037719727f, -0.37865638732910156f, 16.051822662353516f, -0.09737682342529297f, 22.15044593811035f, 0.0f, 14.974760055541992f, 1.666071891784668f, +15.265425682067871f, -0.49555110931396484f, 15.499019622802734f, -1.4616079330444336f, 14.974760055541992f, -1.666071891784668f, 19.52289581298828f, 0.0f, +19.26387596130371f, 0.0f, 14.607610702514648f, 0.9970507621765137f, 16.224693298339844f, -1.0754199028015137f, 16.177013397216797f, -1.598191261291504f, +14.607610702514648f, -0.9970507621765137f, 22.14745330810547f, 0.0f, 17.49560546875f, -1.982450008392334f, 16.701770782470703f, -2.9738965034484863f, +16.224693298339844f, 1.0754199028015137f, 17.49560546875f, 1.982450008392334f, 22.72931671142578f, 0.0f, 18.174175262451172f, -0.17053890228271484f, +16.177013397216797f, 1.598191261291504f, 16.701770782470703f, 2.9738965034484863f, 18.174175262451172f, 0.17053890228271484f, 22.766277313232422f, 0.0f, +22.01527976989746f, 0.0f, 16.863927841186523f, 0.39845943450927734f, 19.615543365478516f, 0.491668701171875f, 16.16659927368164f, -0.46003150939941406f, +16.863927841186523f, -0.39845943450927734f, 25.136554718017578f, 0.0f, 19.746978759765625f, 0.1751422882080078f, 18.790752410888672f, -2.533597946166992f, +19.615543365478516f, -0.491668701171875f, 19.746978759765625f, -0.1751422882080078f, 25.086889266967773f, 0.0f, 19.44091033935547f, -2.8498291969299316f, +16.16659927368164f, 0.46003150939941406f, 18.790752410888672f, 2.533597946166992f, 19.44091033935547f, 2.8498291969299316f, 23.485015869140625f, 0.0f, +24.82882308959961f, 0.0f, 16.314058303833008f, 0.7417511940002441f, 20.66574478149414f, -1.0284204483032227f, 15.504640579223633f, -0.6863837242126465f, +16.314058303833008f, -0.7417511940002441f, 18.447160720825195f, 0.0f, 16.192007064819336f, -1.1030988693237305f, 12.960678100585938f, -1.2465314865112305f, +20.66574478149414f, 1.0284204483032227f, 16.192007064819336f, 1.1030988693237305f, 24.91758155822754f, 0.0f, 15.937692642211914f, -0.05182933807373047f, +15.504640579223633f, 0.6863837242126465f, 12.960678100585938f, 1.2465314865112305f, 15.937692642211914f, 0.05182933807373047f, 18.752578735351562f, 0.0f, +16.4666805267334f, 0.0f, 15.278779029846191f, -0.1742691993713379f, 12.707008361816406f, 1.5608959197998047f, 14.258344650268555f, -0.23121356964111328f, +15.278779029846191f, 0.1742691993713379f, 26.295637130737305f, 0.0f, 17.609355926513672f, 2.2331223487854004f, 18.394939422607422f, -1.4821290969848633f, +12.707008361816406f, -1.5608959197998047f, 17.609355926513672f, -2.2331223487854004f, 20.00629997253418f, 0.0f, 16.196516036987305f, -1.3783245086669922f, +14.258344650268555f, 0.23121356964111328f, 18.394939422607422f, 1.4821290969848633f, 16.196516036987305f, 1.3783245086669922f, 21.582286834716797f, 0.0f, +23.94916343688965f, 0.0f, 18.527225494384766f, 0.7116756439208984f, 16.46468162536621f, -0.6693401336669922f, 18.74114990234375f, -1.2761497497558594f, +18.527225494384766f, -0.7116756439208984f, 22.930789947509766f, 0.0f, 15.465734481811523f, -1.9685554504394531f, 18.170774459838867f, -0.9499788284301758f, +16.46468162536621f, 0.6693401336669922f, 15.465734481811523f, 1.9685554504394531f, 21.9248104095459f, 0.0f, 16.093120574951172f, 1.2939496040344238f, +18.74114990234375f, 1.2761497497558594f, 18.170774459838867f, 0.9499788284301758f, 16.093120574951172f, -1.2939496040344238f, 24.10863494873047f, 0.0f, +21.901514053344727f, 0.0f, 15.286444664001465f, -0.2093496322631836f, 16.259056091308594f, 1.5071139335632324f, 15.513851165771484f, 0.5434370040893555f, +15.286444664001465f, 0.2093496322631836f, 21.81385040283203f, 0.0f, 17.417301177978516f, 0.28313255310058594f, 16.010299682617188f, -0.3048582077026367f, +16.259056091308594f, -1.5071139335632324f, 17.417301177978516f, -0.28313255310058594f, 23.29054832458496f, 0.0f, 17.840538024902344f, -1.8098902702331543f, +15.513851165771484f, -0.5434370040893555f, 16.010299682617188f, 0.3048582077026367f, 17.840538024902344f, 1.8098902702331543f, 22.76242446899414f, 0.0f, +17.758514404296875f, 0.0f, 11.746064186096191f, -1.3203935623168945f, 13.989919662475586f, -0.5135855674743652f, 14.899458885192871f, -0.9409165382385254f, +11.746064186096191f, 1.3203935623168945f, 19.727130889892578f, 0.0f, 12.870875358581543f, 0.9098224639892578f, 16.268585205078125f, 1.9136419296264648f, +13.989919662475586f, 0.5135855674743652f, 12.870875358581543f, -0.9098224639892578f, 20.982318878173828f, 0.0f, 17.00764274597168f, 1.4646005630493164f, +14.899458885192871f, 0.9409165382385254f, 16.268585205078125f, -1.9136419296264648f, 17.00764274597168f, -1.4646005630493164f, 24.789888381958008f, 0.0f, +19.94606590270996f, 0.0f, 11.750603675842285f, -0.9445600509643555f, 15.489908218383789f, -1.5321297645568848f, 16.262311935424805f, -0.7620906829833984f, +11.750603675842285f, 0.9445600509643555f, 15.865667343139648f, 0.0f, 15.137062072753906f, -0.302091121673584f, 13.4806489944458f, -0.9630932807922363f, +15.489908218383789f, 1.5321297645568848f, 15.137062072753906f, 0.302091121673584f, 22.645132064819336f, 0.0f, 18.5898494720459f, 1.148463249206543f, +16.262311935424805f, 0.7620906829833984f, 13.4806489944458f, 0.9630932807922363f, 18.5898494720459f, -1.148463249206543f, 25.47704315185547f, 0.0f, +23.133440017700195f, 0.0f, 16.744600296020508f, 0.607421875f, 16.143157958984375f, -2.1258864402770996f, 17.58625030517578f, -2.7348251342773438f, +16.744600296020508f, -0.607421875f, 24.29714584350586f, 0.0f, 17.208805084228516f, -3.196427345275879f, 17.79437828063965f, -2.52114200592041f, +16.143157958984375f, 2.1258864402770996f, 17.208805084228516f, 3.196427345275879f, 22.354610443115234f, 0.0f, 16.741897583007812f, 1.073699951171875f, +17.58625030517578f, 2.7348251342773438f, 17.79437828063965f, 2.52114200592041f, 16.741897583007812f, -1.073699951171875f, 23.928359985351562f, 0.0f, +22.792774200439453f, 0.0f, 17.544626235961914f, 0.10979938507080078f, 17.287002563476562f, -0.7002968788146973f, 16.77655029296875f, 0.6475610733032227f, +17.544626235961914f, -0.10979938507080078f, 23.048208236694336f, 0.0f, 16.75667953491211f, -1.1260380744934082f, 18.442916870117188f, 1.731733798980713f, +17.287002563476562f, 0.7002968788146973f, 16.75667953491211f, 1.1260380744934082f, 21.883638381958008f, 0.0f, 16.73824691772461f, 0.2699155807495117f, +16.77655029296875f, -0.6475610733032227f, 18.442916870117188f, -1.731733798980713f, 16.73824691772461f, -0.2699155807495117f, 23.88330078125f, 0.0f, +22.20652198791504f, 0.0f, 16.880908966064453f, 1.5035343170166016f, 17.195026397705078f, 1.367851734161377f, 18.454402923583984f, 1.2681102752685547f, +16.880908966064453f, -1.5035343170166016f, 22.65154457092285f, 0.0f, 17.346094131469727f, 0.8976497650146484f, 19.082042694091797f, 1.592411994934082f, +17.195026397705078f, -1.367851734161377f, 17.346094131469727f, -0.8976497650146484f, 23.183900833129883f, 0.0f, 18.15692901611328f, 1.2207450866699219f, +18.454402923583984f, -1.2681102752685547f, 19.082042694091797f, -1.592411994934082f, 18.15692901611328f, -1.2207450866699219f, 25.273366928100586f, 0.0f, +26.0373592376709f, 0.0f, 15.591352462768555f, 0.1865701675415039f, 18.595073699951172f, 0.1199188232421875f, 17.07176971435547f, 1.7757577896118164f, +15.591352462768555f, -0.1865701675415039f, 20.721664428710938f, 0.0f, 14.518890380859375f, -1.8130826950073242f, 14.20799446105957f, 1.9324665069580078f, +18.595073699951172f, -0.1199188232421875f, 14.518890380859375f, 1.8130826950073242f, 24.4749698638916f, 0.0f, 16.511028289794922f, 0.8227553367614746f, +17.07176971435547f, -1.7757577896118164f, 14.20799446105957f, -1.9324665069580078f, 16.511028289794922f, -0.8227553367614746f, 23.053668975830078f, 0.0f, +22.053653717041016f, 0.0f, 15.96980094909668f, -0.9811935424804688f, 13.856279373168945f, -0.3745584487915039f, 14.317234992980957f, -3.840421676635742f, +15.96980094909668f, 0.9811935424804688f, 20.20424461364746f, 0.0f, 14.893767356872559f, 1.169931411743164f, 14.801254272460938f, -2.2258706092834473f, +13.856279373168945f, 0.3745584487915039f, 14.893767356872559f, -1.169931411743164f, 18.644716262817383f, 0.0f, 13.735296249389648f, -1.6686444282531738f, +14.317234992980957f, 3.840421676635742f, 14.801254272460938f, 2.2258706092834473f, 13.735296249389648f, 1.6686444282531738f, 20.03537368774414f, 0.0f, +19.542985916137695f, 0.0f, 15.017301559448242f, 1.324666976928711f, 11.95351505279541f, -0.9372386932373047f, 14.563850402832031f, -0.8484687805175781f, +15.017301559448242f, -1.324666976928711f, 19.356000900268555f, 0.0f, 12.80146312713623f, -0.12540054321289062f, 15.656510353088379f, -0.7020459175109863f, +11.95351505279541f, 0.9372386932373047f, 12.80146312713623f, 0.12540054321289062f, 16.591888427734375f, 0.0f, 12.902100563049316f, -1.4163460731506348f, +14.563850402832031f, 0.8484687805175781f, 15.656510353088379f, 0.7020459175109863f, 12.902100563049316f, 1.4163460731506348f, 21.4080753326416f, 0.0f, +21.213836669921875f, 0.0f, 15.033815383911133f, 1.674184799194336f, 18.877660751342773f, 0.6074743270874023f, 12.363697052001953f, 1.5059924125671387f, +15.033815383911133f, -1.674184799194336f, 21.4992733001709f, 0.0f, 20.44448471069336f, -1.6837539672851562f, 13.248878479003906f, -0.8164114952087402f, +18.877660751342773f, -0.6074743270874023f, 20.44448471069336f, 1.6837539672851562f, 28.312156677246094f, 0.0f, 16.292335510253906f, -0.7882256507873535f, +12.363697052001953f, -1.5059924125671387f, 13.248878479003906f, 0.8164114952087402f, 16.292335510253906f, 0.7882256507873535f, 17.797887802124023f, 0.0f, +23.477575302124023f, 0.0f, 17.596134185791016f, 0.37038326263427734f, 16.114347457885742f, 0.42877817153930664f, 16.035877227783203f, -0.19208145141601562f, +17.596134185791016f, -0.37038326263427734f, 23.49698257446289f, 0.0f, 15.869470596313477f, 1.4275493621826172f, 15.714534759521484f, -0.07774496078491211f, +16.114347457885742f, -0.42877817153930664f, 15.869470596313477f, -1.4275493621826172f, 19.568864822387695f, 0.0f, 15.612564086914062f, -1.0991930961608887f, +16.035877227783203f, 0.19208145141601562f, 15.714534759521484f, 0.07774496078491211f, 15.612564086914062f, 1.0991930961608887f, 19.109304428100586f, 0.0f, +21.140239715576172f, 0.0f, 16.100631713867188f, 0.5524520874023438f, 15.848217964172363f, 1.1240601539611816f, 15.016915321350098f, -3.5451607704162598f, +16.100631713867188f, -0.5524520874023438f, 24.394813537597656f, 0.0f, 17.81700897216797f, -1.5575714111328125f, 16.758342742919922f, -3.169351100921631f, +15.848217964172363f, -1.1240601539611816f, 17.81700897216797f, 1.5575714111328125f, 23.037147521972656f, 0.0f, 15.943785667419434f, -2.7244434356689453f, +15.016915321350098f, 3.5451607704162598f, 16.758342742919922f, 3.169351100921631f, 15.943785667419434f, 2.7244434356689453f, 19.44225311279297f, 0.0f, +23.072708129882812f, 0.0f, 17.417631149291992f, -0.5648469924926758f, 16.136432647705078f, 0.5540447235107422f, 18.16244125366211f, 1.2030372619628906f, +17.417631149291992f, 0.5648469924926758f, 22.551353454589844f, 0.0f, 14.79557991027832f, 0.24086666107177734f, 17.593761444091797f, 2.2200675010681152f, +16.136432647705078f, -0.5540447235107422f, 14.79557991027832f, -0.24086666107177734f, 18.704696655273438f, 0.0f, 15.140268325805664f, 0.6797909736633301f, +18.16244125366211f, -1.2030372619628906f, 17.593761444091797f, -2.2200675010681152f, 15.140268325805664f, -0.6797909736633301f, 23.437213897705078f, 0.0f, +19.748960494995117f, 0.0f, 15.54583740234375f, -1.8428497314453125f, 13.783454895019531f, -2.2728800773620605f, 11.323062896728516f, -3.8715157508850098f, +15.54583740234375f, 1.8428497314453125f, 25.39807891845703f, 0.0f, 15.759020805358887f, 0.3854494094848633f, 15.484354972839355f, -2.6777429580688477f, +13.783454895019531f, 2.2728800773620605f, 15.759020805358887f, -0.3854494094848633f, 17.752473831176758f, 0.0f, 13.27663803100586f, -2.449279308319092f, +11.323062896728516f, 3.8715157508850098f, 15.484354972839355f, 2.6777429580688477f, 13.27663803100586f, 2.449279308319092f, 18.981660842895508f, 0.0f, +22.937164306640625f, 0.0f, 17.105224609375f, -1.9051480293273926f, 18.294401168823242f, 1.6982097625732422f, 15.042192459106445f, -0.5910491943359375f, +17.105224609375f, 1.9051480293273926f, 22.467552185058594f, 0.0f, 17.939674377441406f, 4.222898006439209f, 16.588260650634766f, 2.743483543395996f, +18.294401168823242f, -1.6982097625732422f, 17.939674377441406f, -4.222898006439209f, 25.30509376525879f, 0.0f, 18.03375244140625f, -0.7987966537475586f, +15.042192459106445f, 0.5910491943359375f, 16.588260650634766f, -2.743483543395996f, 18.03375244140625f, 0.7987966537475586f, 21.539003372192383f, 0.0f, +26.229923248291016f, 0.0f, 18.09284210205078f, 0.4435110092163086f, 18.628028869628906f, -1.5833501815795898f, 18.85763931274414f, 0.5524740219116211f, +18.09284210205078f, -0.4435110092163086f, 20.850040435791016f, 0.0f, 15.808597564697266f, -1.3223986625671387f, 16.823680877685547f, 0.4735908508300781f, +18.628028869628906f, 1.5833501815795898f, 15.808597564697266f, 1.3223986625671387f, 20.742456436157227f, 0.0f, 16.619815826416016f, 2.165337562561035f, +18.85763931274414f, -0.5524740219116211f, 16.823680877685547f, -0.4735908508300781f, 16.619815826416016f, -2.165337562561035f, 22.37310218811035f, 0.0f, +21.83519172668457f, 0.0f, 16.202072143554688f, 0.3218069076538086f, 16.15850067138672f, 1.2423186302185059f, 13.690998077392578f, -0.6940169334411621f, +16.202072143554688f, -0.3218069076538086f, 23.25851058959961f, 0.0f, 16.390783309936523f, 1.228494644165039f, 15.709463119506836f, -0.25978565216064453f, +16.15850067138672f, -1.2423186302185059f, 16.390783309936523f, -1.228494644165039f, 20.241836547851562f, 0.0f, 13.190089225769043f, -1.1530179977416992f, +13.690998077392578f, 0.6940169334411621f, 15.709463119506836f, 0.25978565216064453f, 13.190089225769043f, 1.1530179977416992f, 20.095359802246094f, 0.0f, +20.593538284301758f, 0.0f, 17.16487693786621f, 3.175187110900879f, 17.40040397644043f, -1.4312019348144531f, 15.136289596557617f, -0.3656926155090332f, +17.16487693786621f, -3.175187110900879f, 25.67137908935547f, 0.0f, 18.594675064086914f, -4.798680782318115f, 18.922515869140625f, -1.0811004638671875f, +17.40040397644043f, 1.4312019348144531f, 18.594675064086914f, 4.798680782318115f, 24.689483642578125f, 0.0f, 17.696945190429688f, 3.0105767250061035f, +15.136289596557617f, 0.3656926155090332f, 18.922515869140625f, 1.0811004638671875f, 17.696945190429688f, -3.0105767250061035f, 24.089336395263672f, 0.0f, +21.53577995300293f, 0.0f, 15.143871307373047f, 0.03931140899658203f, 16.365795135498047f, 4.140313148498535f, 15.15461540222168f, 1.2077116966247559f, +15.143871307373047f, -0.03931140899658203f, 18.731124877929688f, 0.0f, 15.138962745666504f, 4.64652681350708f, 12.996230125427246f, 0.7344174385070801f, +16.365795135498047f, -4.140313148498535f, 15.138962745666504f, -4.64652681350708f, 23.60764503479004f, 0.0f, 16.753931045532227f, -2.2191996574401855f, +15.15461540222168f, -1.2077116966247559f, 12.996230125427246f, -0.7344174385070801f, 16.753931045532227f, 2.2191996574401855f, 21.541093826293945f, 0.0f, +24.148460388183594f, 0.0f, 18.211471557617188f, 0.2778501510620117f, 19.53975486755371f, 0.8894815444946289f, 13.918913841247559f, 1.2046241760253906f, +18.211471557617188f, -0.2778501510620117f, 24.600040435791016f, 0.0f, 18.480327606201172f, -1.523301124572754f, 14.582801818847656f, 1.3686132431030273f, +19.53975486755371f, -0.8894815444946289f, 18.480327606201172f, 1.523301124572754f, 23.759719848632812f, 0.0f, 13.237295150756836f, 2.0422182083129883f, +13.918913841247559f, -1.2046241760253906f, 14.582801818847656f, -1.3686132431030273f, 13.237295150756836f, -2.0422182083129883f, 16.17812156677246f, 0.0f, +26.976280212402344f, 0.0f, 17.320615768432617f, -1.4599223136901855f, 20.854217529296875f, 2.1797876358032227f, 21.103439331054688f, -2.5265026092529297f, +17.320615768432617f, 1.4599223136901855f, 18.342164993286133f, 0.0f, 15.553661346435547f, 1.605700969696045f, 14.952484130859375f, 0.13350391387939453f, +20.854217529296875f, -2.1797876358032227f, 15.553661346435547f, -1.605700969696045f, 25.237632751464844f, 0.0f, 19.811208724975586f, -4.893050670623779f, +21.103439331054688f, 2.5265026092529297f, 14.952484130859375f, -0.13350391387939453f, 19.811208724975586f, 4.893050670623779f, 25.52898597717285f, 0.0f, +23.887283325195312f, 0.0f, 17.252052307128906f, 0.1653890609741211f, 16.766727447509766f, 1.222083568572998f, 18.03781509399414f, 0.17104816436767578f, +17.252052307128906f, -0.1653890609741211f, 22.68276596069336f, 0.0f, 14.474630355834961f, -0.1755833625793457f, 15.741893768310547f, -2.298046112060547f, +16.766727447509766f, -1.222083568572998f, 14.474630355834961f, 0.1755833625793457f, 20.007980346679688f, 0.0f, 14.987287521362305f, -2.639578342437744f, +18.03781509399414f, -0.17104816436767578f, 15.741893768310547f, 2.298046112060547f, 14.987287521362305f, 2.639578342437744f, 21.491334915161133f, 0.0f, +18.961898803710938f, 0.0f, 12.199508666992188f, -1.5878114700317383f, 13.109575271606445f, -2.1793737411499023f, 12.546875f, -1.0348076820373535f, +12.199508666992188f, 1.5878114700317383f, 17.696434020996094f, 0.0f, 13.46824836730957f, 0.1546802520751953f, 14.135186195373535f, 0.367795467376709f, +13.109575271606445f, 2.1793737411499023f, 13.46824836730957f, -0.1546802520751953f, 19.552175521850586f, 0.0f, 12.834049224853516f, -0.33786678314208984f, +12.546875f, 1.0348076820373535f, 14.135186195373535f, -0.367795467376709f, 12.834049224853516f, 0.33786678314208984f, 18.67696189880371f, 0.0f, +22.373882293701172f, 0.0f, 17.114845275878906f, 1.293039321899414f, 14.637073516845703f, 0.9003291130065918f, 16.681438446044922f, 1.0997557640075684f, +17.114845275878906f, -1.293039321899414f, 24.075176239013672f, 0.0f, 16.245309829711914f, 0.6815652847290039f, 15.980727195739746f, -0.33420276641845703f, +14.637073516845703f, -0.9003291130065918f, 16.245309829711914f, -0.6815652847290039f, 18.522079467773438f, 0.0f, 14.666677474975586f, 0.48864221572875977f, +16.681438446044922f, -1.0997557640075684f, 15.980727195739746f, 0.33420276641845703f, 14.666677474975586f, -0.48864221572875977f, 21.145349502563477f, 0.0f, +22.402385711669922f, 0.0f, 15.276662826538086f, -1.3792662620544434f, 18.868505477905273f, 1.0780925750732422f, 16.563793182373047f, -1.2094244956970215f, +15.276662826538086f, 1.3792662620544434f, 18.815067291259766f, 0.0f, 17.25514030456543f, 1.7216486930847168f, 15.858339309692383f, 1.4533343315124512f, +18.868505477905273f, -1.0780925750732422f, 17.25514030456543f, -1.7216486930847168f, 28.199098587036133f, 0.0f, 18.143600463867188f, 0.16492652893066406f, +16.563793182373047f, 1.2094244956970215f, 15.858339309692383f, -1.4533343315124512f, 18.143600463867188f, -0.16492652893066406f, 22.631610870361328f, 0.0f, +18.244342803955078f, 0.0f, 14.288799285888672f, -2.4730381965637207f, 13.65835952758789f, -0.27791690826416016f, 12.608977317810059f, -3.6047487258911133f, +14.288799285888672f, 2.4730381965637207f, 22.836036682128906f, 0.0f, 15.504528045654297f, 1.5650105476379395f, 14.899205207824707f, -0.4607830047607422f, +13.65835952758789f, 0.27791690826416016f, 15.504528045654297f, -1.5650105476379395f, 21.280790328979492f, 0.0f, 14.01461410522461f, -1.8310718536376953f, +12.608977317810059f, 3.6047487258911133f, 14.899205207824707f, 0.4607830047607422f, 14.01461410522461f, 1.8310718536376953f, 19.21678352355957f, 0.0f, +26.87466812133789f, 0.0f, 17.9601993560791f, -0.1398487091064453f, 18.541994094848633f, 3.4069008827209473f, 20.433032989501953f, -0.07623577117919922f, +17.9601993560791f, 0.1398487091064453f, 21.067562103271484f, 0.0f, 17.225181579589844f, 1.5692076683044434f, 16.10256004333496f, -0.48484134674072266f, +18.541994094848633f, -3.4069008827209473f, 17.225181579589844f, -1.5692076683044434f, 23.7786922454834f, 0.0f, 16.85209083557129f, -1.0230436325073242f, +20.433032989501953f, 0.07623577117919922f, 16.10256004333496f, 0.48484134674072266f, 16.85209083557129f, 1.0230436325073242f, 23.581682205200195f, 0.0f, +23.04507827758789f, 0.0f, 18.357086181640625f, 0.3366222381591797f, 15.662004470825195f, 1.8177127838134766f, 17.47795867919922f, 2.0196375846862793f, +18.357086181640625f, -0.3366222381591797f, 23.425575256347656f, 0.0f, 16.894845962524414f, -0.1501913070678711f, 18.193937301635742f, 0.6035690307617188f, +15.662004470825195f, -1.8177127838134766f, 16.894845962524414f, 0.1501913070678711f, 24.99241828918457f, 0.0f, 19.03949737548828f, -0.6076955795288086f, +17.47795867919922f, -2.0196375846862793f, 18.193937301635742f, -0.6035690307617188f, 19.03949737548828f, 0.6076955795288086f, 24.944974899291992f, 0.0f, +21.876487731933594f, 0.0f, 16.51926612854004f, -1.3200774192810059f, 13.408472061157227f, 0.4334101676940918f, 16.676326751708984f, -2.8504810333251953f, +16.51926612854004f, 1.3200774192810059f, 21.707347869873047f, 0.0f, 13.192636489868164f, 3.1374239921569824f, 17.46282196044922f, 0.6383390426635742f, +13.408472061157227f, -0.4334101676940918f, 13.192636489868164f, -3.1374239921569824f, 16.567630767822266f, 0.0f, 13.733672142028809f, -2.8650875091552734f, +16.676326751708984f, 2.8504810333251953f, 17.46282196044922f, -0.6383390426635742f, 13.733672142028809f, 2.8650875091552734f, 21.854507446289062f, 0.0f, +18.811256408691406f, 0.0f, 14.469779968261719f, 1.8897762298583984f, 15.228975296020508f, 2.1301302909851074f, 13.609054565429688f, 0.7344684600830078f, +14.469779968261719f, -1.8897762298583984f, 20.8359375f, 0.0f, 16.031856536865234f, 0.118194580078125f, 13.934846878051758f, -1.1207361221313477f, +15.228975296020508f, -2.1301302909851074f, 16.031856536865234f, -0.118194580078125f, 22.30846405029297f, 0.0f, 14.309843063354492f, -0.5820860862731934f, +13.609054565429688f, -0.7344684600830078f, 13.934846878051758f, 1.1207361221313477f, 14.309843063354492f, 0.5820860862731934f, 18.385042190551758f, 0.0f, +21.811704635620117f, 0.0f, 12.959574699401855f, 1.3712148666381836f, 15.618633270263672f, 2.4819064140319824f, 15.50459098815918f, 0.7158732414245605f, +12.959574699401855f, -1.3712148666381836f, 19.189701080322266f, 0.0f, 15.01716423034668f, 0.886258602142334f, 13.834314346313477f, 1.2765088081359863f, +15.618633270263672f, -2.4819064140319824f, 15.01716423034668f, -0.886258602142334f, 22.45737648010254f, 0.0f, 14.977632522583008f, -0.03613996505737305f, +15.50459098815918f, -0.7158732414245605f, 13.834314346313477f, -1.2765088081359863f, 14.977632522583008f, 0.03613996505737305f, 19.231868743896484f, 0.0f, +20.922571182250977f, 0.0f, 15.238037109375f, 1.9878406524658203f, 16.205717086791992f, -0.5401873588562012f, 14.066888809204102f, -0.6804170608520508f, +15.238037109375f, -1.9878406524658203f, 20.350894927978516f, 0.0f, 15.714031219482422f, -1.5322189331054688f, 14.691532135009766f, -3.9000086784362793f, +16.205717086791992f, 0.5401873588562012f, 15.714031219482422f, 1.5322189331054688f, 25.38096046447754f, 0.0f, 16.562744140625f, 0.09419584274291992f, +14.066888809204102f, 0.6804170608520508f, 14.691532135009766f, 3.9000086784362793f, 16.562744140625f, -0.09419584274291992f, 21.616945266723633f, 0.0f, +27.487136840820312f, 0.0f, 18.24102783203125f, -2.3150157928466797f, 16.992034912109375f, -1.1863603591918945f, 20.118892669677734f, -1.202402114868164f, +18.24102783203125f, 2.3150157928466797f, 22.058429718017578f, 0.0f, 16.142127990722656f, -0.3955674171447754f, 15.94951343536377f, 0.9539375305175781f, +16.992034912109375f, 1.1863603591918945f, 16.142127990722656f, 0.3955674171447754f, 21.04903793334961f, 0.0f, 16.522987365722656f, -0.047916412353515625f, +20.118892669677734f, 1.202402114868164f, 15.94951343536377f, -0.9539375305175781f, 16.522987365722656f, 0.047916412353515625f, 22.727609634399414f, 0.0f, +22.30453109741211f, 0.0f, 16.493043899536133f, -0.8725547790527344f, 14.970111846923828f, -2.3403854370117188f, 15.417713165283203f, -0.5561809539794922f, +16.493043899536133f, 0.8725547790527344f, 21.237886428833008f, 0.0f, 14.585586547851562f, -3.8507442474365234f, 14.801040649414062f, -0.875241756439209f, +14.970111846923828f, 2.3403854370117188f, 14.585586547851562f, 3.8507442474365234f, 20.627243041992188f, 0.0f, 14.733753204345703f, 1.6528868675231934f, +15.417713165283203f, 0.5561809539794922f, 14.801040649414062f, 0.875241756439209f, 14.733753204345703f, -1.6528868675231934f, 19.37778091430664f, 0.0f, +22.24112319946289f, 0.0f, 17.820289611816406f, -0.629277229309082f, 15.531816482543945f, -0.24147319793701172f, 17.715579986572266f, -2.5577383041381836f, +17.820289611816406f, 0.629277229309082f, 26.41559600830078f, 0.0f, 17.789318084716797f, -0.22272682189941406f, 19.819713592529297f, -1.8753290176391602f, +15.531816482543945f, 0.24147319793701172f, 17.789318084716797f, 0.22272682189941406f, 20.450349807739258f, 0.0f, 16.50227165222168f, -2.868346691131592f, +17.715579986572266f, 2.5577383041381836f, 19.819713592529297f, 1.8753290176391602f, 16.50227165222168f, 2.868346691131592f, 24.160234451293945f, 0.0f, +23.985923767089844f, 0.0f, 17.595233917236328f, -0.1181802749633789f, 18.727191925048828f, -2.1876401901245117f, 17.593711853027344f, 1.2432270050048828f, +17.595233917236328f, 0.1181802749633789f, 22.141542434692383f, 0.0f, 17.64385986328125f, -0.9777975082397461f, 17.552547454833984f, 1.4858894348144531f, +18.727191925048828f, 2.1876401901245117f, 17.64385986328125f, 0.9777975082397461f, 22.933027267456055f, 0.0f, 18.58854866027832f, 1.6744089126586914f, +17.593711853027344f, -1.2432270050048828f, 17.552547454833984f, -1.4858894348144531f, 18.58854866027832f, -1.6744089126586914f, 24.342491149902344f, 0.0f, +21.39446258544922f, 0.0f, 16.624250411987305f, -2.189103126525879f, 17.096572875976562f, -3.1037683486938477f, 15.83506965637207f, -0.8253297805786133f, +16.624250411987305f, 2.189103126525879f, 22.32379722595215f, 0.0f, 18.39798355102539f, -1.9181337356567383f, 16.55183219909668f, 0.6326675415039062f, +17.096572875976562f, 3.1037683486938477f, 18.39798355102539f, 1.9181337356567383f, 24.288667678833008f, 0.0f, 16.56877326965332f, 0.41823387145996094f, +15.83506965637207f, 0.8253297805786133f, 16.55183219909668f, -0.6326675415039062f, 16.56877326965332f, -0.41823387145996094f, 20.142345428466797f, 0.0f, +21.572898864746094f, 0.0f, 17.413108825683594f, -0.6772065162658691f, 13.437103271484375f, 0.8204646110534668f, 17.201005935668945f, -0.4413890838623047f, +17.413108825683594f, 0.6772065162658691f, 22.87938117980957f, 0.0f, 15.34713363647461f, 0.07552957534790039f, 17.475135803222656f, -0.6590890884399414f, +13.437103271484375f, -0.8204646110534668f, 15.34713363647461f, -0.07552957534790039f, 17.355695724487305f, 0.0f, 17.243074417114258f, -1.471013069152832f, +17.201005935668945f, 0.4413890838623047f, 17.475135803222656f, 0.6590890884399414f, 17.243074417114258f, 1.471013069152832f, 26.561246871948242f, 0.0f, +17.104904174804688f, 0.0f, 12.734586715698242f, -2.5998992919921875f, 13.211210250854492f, -2.8937501907348633f, 12.376838684082031f, -2.5101046562194824f, +12.734586715698242f, 2.5998992919921875f, 18.17102813720703f, 0.0f, 13.138402938842773f, 1.2834320068359375f, 12.475953102111816f, -1.1568593978881836f, +13.211210250854492f, 2.8937501907348633f, 13.138402938842773f, -1.2834320068359375f, 20.048851013183594f, 0.0f, 12.849719047546387f, -0.9159278869628906f, +12.376838684082031f, 2.5101046562194824f, 12.475953102111816f, 1.1568593978881836f, 12.849719047546387f, 0.9159278869628906f, 17.6597900390625f, 0.0f, +19.9304141998291f, 0.0f, 14.781400680541992f, 0.1313190460205078f, 16.2719783782959f, 0.9841465950012207f, 15.994927406311035f, 0.8704595565795898f, +14.781400680541992f, -0.1313190460205078f, 22.438390731811523f, 0.0f, 17.787933349609375f, 0.45365238189697266f, 17.685199737548828f, -0.9635629653930664f, +16.2719783782959f, -0.9841465950012207f, 17.787933349609375f, -0.45365238189697266f, 22.555400848388672f, 0.0f, 17.45840072631836f, -1.4365978240966797f, +15.994927406311035f, -0.8704595565795898f, 17.685199737548828f, 0.9635629653930664f, 17.45840072631836f, 1.4365978240966797f, 22.528465270996094f, 0.0f, +21.591495513916016f, 0.0f, 16.1312313079834f, -0.5179386138916016f, 15.639726638793945f, -2.912006378173828f, 13.626493453979492f, 0.08458662033081055f, +16.1312313079834f, 0.5179386138916016f, 19.52189826965332f, 0.0f, 14.361430168151855f, -1.738560676574707f, 12.319280624389648f, 0.008731365203857422f, +15.639726638793945f, 2.912006378173828f, 14.361430168151855f, 1.738560676574707f, 22.948423385620117f, 0.0f, 11.794747352600098f, 1.5735044479370117f, +13.626493453979492f, -0.08458662033081055f, 12.319280624389648f, -0.008731365203857422f, 11.794747352600098f, -1.5735044479370117f, 14.172467231750488f, 0.0f, +21.687341690063477f, 0.0f, 14.31693172454834f, 1.2700762748718262f, 17.143461227416992f, 2.4749550819396973f, 15.807190895080566f, -2.2320451736450195f, +14.31693172454834f, -1.2700762748718262f, 20.02528190612793f, 0.0f, 14.329544067382812f, 0.8095989227294922f, 13.036154747009277f, -1.4384560585021973f, +17.143461227416992f, -2.4749550819396973f, 14.329544067382812f, -0.8095989227294922f, 21.07712173461914f, 0.0f, 15.679361343383789f, -3.0125813484191895f, +15.807190895080566f, 2.2320451736450195f, 13.036154747009277f, 1.4384560585021973f, 15.679361343383789f, 3.0125813484191895f, 20.241243362426758f, 0.0f, +20.588336944580078f, 0.0f, 16.0102596282959f, 0.0552520751953125f, 13.55153751373291f, -1.895836353302002f, 15.126644134521484f, -1.9621829986572266f, +16.0102596282959f, -0.0552520751953125f, 23.091283798217773f, 0.0f, 15.113353729248047f, -1.8142104148864746f, 17.3614501953125f, -0.9401082992553711f, +13.55153751373291f, 1.895836353302002f, 15.113353729248047f, 1.8142104148864746f, 17.784530639648438f, 0.0f, 13.87771224975586f, 2.0001416206359863f, +15.126644134521484f, 1.9621829986572266f, 17.3614501953125f, 0.9401082992553711f, 13.87771224975586f, -2.0001416206359863f, 20.498851776123047f, 0.0f, +19.20214080810547f, 0.0f, 15.341024398803711f, 0.9907441139221191f, 16.298023223876953f, 1.9966659545898438f, 13.252340316772461f, 0.2243485450744629f, +15.341024398803711f, -0.9907441139221191f, 22.77020263671875f, 0.0f, 18.556964874267578f, -0.4551420211791992f, 15.959012985229492f, -2.0526485443115234f, +16.298023223876953f, -1.9966659545898438f, 18.556964874267578f, 0.4551420211791992f, 25.518779754638672f, 0.0f, 16.68498992919922f, -1.5344429016113281f, +13.252340316772461f, -0.2243485450744629f, 15.959012985229492f, 2.0526485443115234f, 16.68498992919922f, 1.5344429016113281f, 21.16128921508789f, 0.0f, +21.821767807006836f, 0.0f, 14.760746955871582f, -1.1314711570739746f, 17.23377799987793f, -1.868708610534668f, 14.475648880004883f, -1.799184799194336f, +14.760746955871582f, 1.1314711570739746f, 18.884733200073242f, 0.0f, 15.146785736083984f, 0.30563926696777344f, 14.293328285217285f, -0.5108423233032227f, +17.23377799987793f, 1.868708610534668f, 15.146785736083984f, -0.30563926696777344f, 23.248863220214844f, 0.0f, 15.050016403198242f, -1.6057395935058594f, +14.475648880004883f, 1.799184799194336f, 14.293328285217285f, 0.5108423233032227f, 15.050016403198242f, 1.6057395935058594f, 19.814817428588867f, 0.0f, +16.111316680908203f, 0.0f, 12.936897277832031f, 1.0670080184936523f, 14.551607131958008f, -2.3501334190368652f, 14.628332138061523f, -2.399768829345703f, +12.936897277832031f, -1.0670080184936523f, 20.02128791809082f, 0.0f, 14.949377059936523f, -2.7313337326049805f, 14.784006118774414f, -4.022793769836426f, +14.551607131958008f, 2.3501334190368652f, 14.949377059936523f, 2.7313337326049805f, 24.40755271911621f, 0.0f, 19.282503128051758f, 1.5806350708007812f, +14.628332138061523f, 2.399768829345703f, 14.784006118774414f, 4.022793769836426f, 19.282503128051758f, -1.5806350708007812f, 24.952800750732422f, 0.0f, +22.102540969848633f, 0.0f, 16.12616539001465f, 0.8808197975158691f, 14.004426956176758f, 1.905311107635498f, 15.413140296936035f, 4.387392044067383f, +16.12616539001465f, -0.8808197975158691f, 21.924633026123047f, 0.0f, 13.583107948303223f, 0.11949014663696289f, 15.598108291625977f, 2.933773994445801f, +14.004426956176758f, -1.905311107635498f, 13.583107948303223f, -0.11949014663696289f, 17.577861785888672f, 0.0f, 14.050710678100586f, 1.2287726402282715f, +15.413140296936035f, -4.387392044067383f, 15.598108291625977f, -2.933773994445801f, 14.050710678100586f, -1.2287726402282715f, 20.489145278930664f, 0.0f, +22.985389709472656f, 0.0f, 16.888259887695312f, 0.7015542984008789f, 17.901081085205078f, 1.3672666549682617f, 15.577241897583008f, 2.033761978149414f, +16.888259887695312f, -0.7015542984008789f, 20.749780654907227f, 0.0f, 16.01176643371582f, -0.47277259826660156f, 15.480823516845703f, 1.7828168869018555f, +17.901081085205078f, -1.3672666549682617f, 16.01176643371582f, 0.47277259826660156f, 23.58531951904297f, 0.0f, 15.985233306884766f, 2.542098045349121f, +15.577241897583008f, -2.033761978149414f, 15.480823516845703f, -1.7828168869018555f, 15.985233306884766f, -2.542098045349121f, 18.993389129638672f, 0.0f, +18.488067626953125f, 0.0f, 14.99407958984375f, 1.5406279563903809f, 15.462581634521484f, 2.017393112182617f, 14.306474685668945f, -1.0958809852600098f, +14.99407958984375f, -1.5406279563903809f, 22.04218101501465f, 0.0f, 15.486895561218262f, 0.3238210678100586f, 16.446046829223633f, -1.380934715270996f, +15.462581634521484f, -2.017393112182617f, 15.486895561218262f, -0.3238210678100586f, 21.053081512451172f, 0.0f, 15.255721092224121f, -0.8742270469665527f, +14.306474685668945f, 1.0958809852600098f, 16.446046829223633f, 1.380934715270996f, 15.255721092224121f, 0.8742270469665527f, 21.367691040039062f, 0.0f, +18.54532814025879f, 0.0f, 14.14972972869873f, -0.2645750045776367f, 15.749005317687988f, -3.1528220176696777f, 14.943021774291992f, -1.1428375244140625f, +14.14972972869873f, 0.2645750045776367f, 20.523956298828125f, 0.0f, 17.669498443603516f, -1.8397889137268066f, 15.802692413330078f, -1.5151710510253906f, +15.749005317687988f, 3.1528220176696777f, 17.669498443603516f, 1.8397889137268066f, 24.49015998840332f, 0.0f, 18.391395568847656f, 0.19124126434326172f, +14.943021774291992f, 1.1428375244140625f, 15.802692413330078f, 1.5151710510253906f, 18.391395568847656f, -0.19124126434326172f, 21.56278419494629f, 0.0f, +19.01057243347168f, 0.0f, 13.756425857543945f, -1.3912720680236816f, 15.014806747436523f, -0.5823788642883301f, 12.493483543395996f, -0.3966670036315918f, +13.756425857543945f, 1.3912720680236816f, 20.920705795288086f, 0.0f, 14.940515518188477f, -0.2672429084777832f, 15.151918411254883f, 1.0776352882385254f, +15.014806747436523f, 0.5823788642883301f, 14.940515518188477f, 0.2672429084777832f, 19.805326461791992f, 0.0f, 13.746864318847656f, 0.35597944259643555f, +12.493483543395996f, 0.3966670036315918f, 15.151918411254883f, -1.0776352882385254f, 13.746864318847656f, -0.35597944259643555f, 20.23624038696289f, 0.0f, +19.835817337036133f, 0.0f, 12.345602989196777f, -0.38267993927001953f, 12.679959297180176f, 1.2073087692260742f, 14.22773551940918f, 1.7440829277038574f, +12.345602989196777f, 0.38267993927001953f, 18.58266830444336f, 0.0f, 12.680303573608398f, 3.152942180633545f, 15.031095504760742f, 2.5002975463867188f, +12.679959297180176f, -1.2073087692260742f, 12.680303573608398f, -3.152942180633545f, 18.550626754760742f, 0.0f, 15.112411499023438f, -1.1196708679199219f, +14.22773551940918f, -1.7440829277038574f, 15.031095504760742f, -2.5002975463867188f, 15.112411499023438f, 1.1196708679199219f, 21.767333984375f, 0.0f, +21.897083282470703f, 0.0f, 14.260169982910156f, -0.07391071319580078f, 17.08153533935547f, 1.807767391204834f, 15.183073997497559f, 1.9556050300598145f, +14.260169982910156f, 0.07391071319580078f, 20.19582748413086f, 0.0f, 16.208293914794922f, 1.1768698692321777f, 13.961179733276367f, 2.0600337982177734f, +17.08153533935547f, -1.807767391204834f, 16.208293914794922f, -1.1768698692321777f, 22.998903274536133f, 0.0f, 17.012989044189453f, 1.6497149467468262f, +15.183073997497559f, -1.9556050300598145f, 13.961179733276367f, -2.0600337982177734f, 17.012989044189453f, -1.6497149467468262f, 21.019216537475586f, 0.0f, +22.282424926757812f, 0.0f, 13.697905540466309f, -0.6117820739746094f, 16.879337310791016f, 1.646571159362793f, 16.772390365600586f, -0.39737653732299805f, +13.697905540466309f, 0.6117820739746094f, 16.056781768798828f, 0.0f, 12.443952560424805f, 0.8248229026794434f, 13.329978942871094f, 0.7228727340698242f, +16.879337310791016f, -1.646571159362793f, 12.443952560424805f, -0.8248229026794434f, 22.675397872924805f, 0.0f, 18.546886444091797f, -1.9303617477416992f, +16.772390365600586f, 0.39737653732299805f, 13.329978942871094f, -0.7228727340698242f, 18.546886444091797f, 1.9303617477416992f, 24.07941246032715f, 0.0f, +25.839750289916992f, 0.0f, 17.385177612304688f, -3.2057342529296875f, 17.17952537536621f, 0.9345979690551758f, 17.875999450683594f, -1.1553773880004883f, +17.385177612304688f, 3.2057342529296875f, 23.636884689331055f, 0.0f, 16.777456283569336f, 4.736817359924316f, 14.745793342590332f, 2.790985584259033f, +17.17952537536621f, -0.9345979690551758f, 16.777456283569336f, -4.736817359924316f, 22.12356948852539f, 0.0f, 15.067392349243164f, -0.907984733581543f, +17.875999450683594f, 1.1553773880004883f, 14.745793342590332f, -2.790985584259033f, 15.067392349243164f, 0.907984733581543f, 19.989240646362305f, 0.0f, +20.52828025817871f, 0.0f, 13.473374366760254f, 0.004489898681640625f, 15.562891960144043f, 0.2779421806335449f, 18.70197296142578f, -0.980743408203125f, +13.473374366760254f, -0.004489898681640625f, 16.761287689208984f, 0.0f, 13.819131851196289f, 0.8005805015563965f, 15.896586418151855f, 0.24280071258544922f, +15.562891960144043f, -0.2779421806335449f, 13.819131851196289f, -0.8005805015563965f, 21.150455474853516f, 0.0f, 19.827245712280273f, -1.6094036102294922f, +18.70197296142578f, 0.980743408203125f, 15.896586418151855f, -0.24280071258544922f, 19.827245712280273f, 1.6094036102294922f, 27.008575439453125f, 0.0f, +27.029170989990234f, 0.0f, 17.930641174316406f, 1.9853086471557617f, 18.718957901000977f, 1.0346975326538086f, 19.951480865478516f, 0.21124744415283203f, +17.930641174316406f, -1.9853086471557617f, 20.763872146606445f, 0.0f, 16.538589477539062f, -2.308715343475342f, 17.6463565826416f, -1.3890576362609863f, +18.718957901000977f, -1.0346975326538086f, 16.538589477539062f, 2.308715343475342f, 21.536962509155273f, 0.0f, 17.31304168701172f, -1.2490825653076172f, +19.951480865478516f, -0.21124744415283203f, 17.6463565826416f, 1.3890576362609863f, 17.31304168701172f, 1.2490825653076172f, 23.989009857177734f, 0.0f, +19.568130493164062f, 0.0f, 14.517946243286133f, 0.6197009086608887f, 13.75275993347168f, 1.3963446617126465f, 14.738399505615234f, 1.1570844650268555f, +14.517946243286133f, -0.6197009086608887f, 21.724397659301758f, 0.0f, 15.440465927124023f, -1.2506623268127441f, 14.940789222717285f, -0.15315485000610352f, +13.75275993347168f, -1.3963446617126465f, 15.440465927124023f, 1.2506623268127441f, 19.383718490600586f, 0.0f, 13.610416412353516f, 1.0511608123779297f, +14.738399505615234f, -1.1570844650268555f, 14.940789222717285f, 0.15315485000610352f, 13.610416412353516f, -1.0511608123779297f, 20.487234115600586f, 0.0f, +19.818504333496094f, 0.0f, 17.531936645507812f, 0.39038562774658203f, 13.995851516723633f, -0.46251916885375977f, 14.235815048217773f, -0.8292222023010254f, +17.531936645507812f, -0.39038562774658203f, 24.077363967895508f, 0.0f, 15.714537620544434f, 0.3090248107910156f, 16.726791381835938f, -0.8345546722412109f, +13.995851516723633f, 0.46251916885375977f, 15.714537620544434f, -0.3090248107910156f, 20.553016662597656f, 0.0f, 14.17746639251709f, -2.784634590148926f, +14.235815048217773f, 0.8292222023010254f, 16.726791381835938f, 0.8345546722412109f, 14.17746639251709f, 2.784634590148926f, 20.93682098388672f, 0.0f, +20.676353454589844f, 0.0f, 13.551310539245605f, -0.08127403259277344f, 16.08228302001953f, 1.728283405303955f, 15.339326858520508f, 1.0663766860961914f, +13.551310539245605f, 0.08127403259277344f, 18.5267276763916f, 0.0f, 15.265503883361816f, 1.2372345924377441f, 15.278657913208008f, 0.6004705429077148f, +16.08228302001953f, -1.728283405303955f, 15.265503883361816f, -1.2372345924377441f, 21.605871200561523f, 0.0f, 16.14678382873535f, -0.7661480903625488f, +15.339326858520508f, -1.0663766860961914f, 15.278657913208008f, -0.6004705429077148f, 16.14678382873535f, 0.7661480903625488f, 20.115238189697266f, 0.0f, +18.385602951049805f, 0.0f, 15.881963729858398f, -0.7497930526733398f, 15.534933090209961f, 1.139373779296875f, 14.998346328735352f, 0.8422031402587891f, +15.881963729858398f, 0.7497930526733398f, 23.393373489379883f, 0.0f, 17.696258544921875f, 2.069934368133545f, 16.188220977783203f, 0.24628734588623047f, +15.534933090209961f, -1.139373779296875f, 17.696258544921875f, -2.069934368133545f, 21.894691467285156f, 0.0f, 14.54233169555664f, -0.08267688751220703f, +14.998346328735352f, -0.8422031402587891f, 16.188220977783203f, -0.24628734588623047f, 14.54233169555664f, 0.08267688751220703f, 21.84213638305664f, 0.0f, +21.815189361572266f, 0.0f, 16.37476348876953f, -0.16496706008911133f, 16.57563591003418f, 1.073728084564209f, 14.57111644744873f, 1.5882558822631836f, +16.37476348876953f, 0.16496706008911133f, 21.956165313720703f, 0.0f, 16.068710327148438f, -1.2231574058532715f, 14.977871894836426f, 0.28809595108032227f, +16.57563591003418f, -1.073728084564209f, 16.068710327148438f, 1.2231574058532715f, 20.963483810424805f, 0.0f, 14.83864974975586f, 3.258152961730957f, +14.57111644744873f, -1.5882558822631836f, 14.977871894836426f, -0.28809595108032227f, 14.83864974975586f, -3.258152961730957f, 18.950496673583984f, 0.0f, +21.46596908569336f, 0.0f, 16.721342086791992f, -0.5975379943847656f, 15.611867904663086f, -2.6078925132751465f, 16.635486602783203f, -0.2064075469970703f, +16.721342086791992f, 0.5975379943847656f, 23.029808044433594f, 0.0f, 17.535564422607422f, -1.882277488708496f, 17.49394416809082f, 0.8557558059692383f, +15.611867904663086f, 2.6078925132751465f, 17.535564422607422f, 1.882277488708496f, 21.265316009521484f, 0.0f, 17.37450408935547f, 1.9381747245788574f, +16.635486602783203f, 0.2064075469970703f, 17.49394416809082f, -0.8557558059692383f, 17.37450408935547f, -1.9381747245788574f, 23.108882904052734f, 0.0f, +19.519731521606445f, 0.0f, 14.097164154052734f, 2.2474584579467773f, 16.26242446899414f, -1.1949553489685059f, 14.76553726196289f, 1.4681391716003418f, +14.097164154052734f, -2.2474584579467773f, 20.139049530029297f, 0.0f, 14.62242317199707f, -0.4704608917236328f, 16.004131317138672f, 0.3719491958618164f, +16.26242446899414f, 1.1949553489685059f, 14.62242317199707f, 0.4704608917236328f, 23.348764419555664f, 0.0f, 17.816987991333008f, 2.0117616653442383f, +14.76553726196289f, -1.4681391716003418f, 16.004131317138672f, -0.3719491958618164f, 17.816987991333008f, -2.0117616653442383f, 22.741804122924805f, 0.0f, +23.217531204223633f, 0.0f, 16.39156723022461f, 4.362850189208984f, 16.027862548828125f, 0.9156723022460938f, 18.464752197265625f, 0.3886146545410156f, +16.39156723022461f, -4.362850189208984f, 24.53815269470215f, 0.0f, 16.491310119628906f, -2.489562511444092f, 17.149078369140625f, -4.680747032165527f, +16.027862548828125f, -0.9156723022460938f, 16.491310119628906f, 2.489562511444092f, 20.971141815185547f, 0.0f, 17.459211349487305f, -1.248791217803955f, +18.464752197265625f, -0.3886146545410156f, 17.149078369140625f, 4.680747032165527f, 17.459211349487305f, 1.248791217803955f, 23.611125946044922f, 0.0f, +26.480085372924805f, 0.0f, 15.027824401855469f, -2.027468204498291f, 17.068294525146484f, 0.3658275604248047f, 19.50084114074707f, -1.1991071701049805f, +15.027824401855469f, 2.027468204498291f, 17.03862762451172f, 0.0f, 14.054291725158691f, 0.9035129547119141f, 14.7611665725708f, 1.2197861671447754f, +17.068294525146484f, -0.3658275604248047f, 14.054291725158691f, -0.9035129547119141f, 21.695037841796875f, 0.0f, 16.740514755249023f, -2.3722805976867676f, +19.50084114074707f, 1.1991071701049805f, 14.7611665725708f, -1.2197861671447754f, 16.740514755249023f, 2.3722805976867676f, 23.60053825378418f, 0.0f, +25.19286346435547f, 0.0f, 18.24681854248047f, 1.6140327453613281f, 16.798263549804688f, 3.91426420211792f, 16.753896713256836f, 2.1122665405273438f, +18.24681854248047f, -1.6140327453613281f, 24.43886947631836f, 0.0f, 16.063892364501953f, 1.2269635200500488f, 16.149246215820312f, -0.5192975997924805f, +16.798263549804688f, -3.91426420211792f, 16.063892364501953f, -1.2269635200500488f, 20.897994995117188f, 0.0f, 15.439716339111328f, -1.5274806022644043f, +16.753896713256836f, -2.1122665405273438f, 16.149246215820312f, 0.5192975997924805f, 15.439716339111328f, 1.5274806022644043f, 21.167673110961914f, 0.0f, +19.354480743408203f, 0.0f, 16.649629592895508f, -0.16416311264038086f, 13.318561553955078f, -1.4489340782165527f, 15.699348449707031f, -1.7692089080810547f, +16.649629592895508f, 0.16416311264038086f, 24.763322830200195f, 0.0f, 15.313268661499023f, 0.29273509979248047f, 16.87276840209961f, -1.1242265701293945f, +13.318561553955078f, 1.4489340782165527f, 15.313268661499023f, -0.29273509979248047f, 18.76451873779297f, 0.0f, 14.416690826416016f, 0.9236359596252441f, +15.699348449707031f, 1.7692089080810547f, 16.87276840209961f, 1.1242265701293945f, 14.416690826416016f, -0.9236359596252441f, 21.16741180419922f, 0.0f, +22.729005813598633f, 0.0f, 16.68958854675293f, 0.3741636276245117f, 16.12457275390625f, 1.0787129402160645f, 15.476301193237305f, 0.3956470489501953f, +16.68958854675293f, -0.3741636276245117f, 22.761510848999023f, 0.0f, 16.545650482177734f, 0.37404870986938477f, 16.08282470703125f, -0.7073183059692383f, +16.12457275390625f, -1.0787129402160645f, 16.545650482177734f, -0.37404870986938477f, 21.19246482849121f, 0.0f, 15.293941497802734f, -2.0139307975769043f, +15.476301193237305f, -0.3956470489501953f, 16.08282470703125f, 0.7073183059692383f, 15.293941497802734f, 2.0139307975769043f, 21.316614151000977f, 0.0f, +19.816373825073242f, 0.0f, 15.035913467407227f, 0.0680389404296875f, 16.30428123474121f, 0.7039575576782227f, 14.459831237792969f, 1.1706647872924805f, +15.035913467407227f, -0.0680389404296875f, 23.93771743774414f, 0.0f, 17.645076751708984f, 1.4169692993164062f, 15.732928276062012f, -0.28169727325439453f, +16.30428123474121f, -0.7039575576782227f, 17.645076751708984f, -1.4169692993164062f, 22.885862350463867f, 0.0f, 14.374212265014648f, 0.5441293716430664f, +14.459831237792969f, -1.1706647872924805f, 15.732928276062012f, 0.28169727325439453f, 14.374212265014648f, -0.5441293716430664f, 20.309322357177734f, 0.0f, +23.476337432861328f, 0.0f, 16.451984405517578f, -0.06769943237304688f, 15.651022911071777f, 1.5541930198669434f, 18.099666595458984f, -1.4295711517333984f, +16.451984405517578f, 0.06769943237304688f, 19.443557739257812f, 0.0f, 14.054019927978516f, 2.2278285026550293f, 16.018251419067383f, 1.4473004341125488f, +15.651022911071777f, -1.5541930198669434f, 14.054019927978516f, -2.2278285026550293f, 20.031251907348633f, 0.0f, 15.245319366455078f, -2.4473819732666016f, +18.099666595458984f, 1.4295711517333984f, 16.018251419067383f, -1.4473004341125488f, 15.245319366455078f, 2.4473819732666016f, 21.388999938964844f, 0.0f, +23.350927352905273f, 0.0f, 16.649139404296875f, -0.7746315002441406f, 18.467967987060547f, 0.8148317337036133f, 17.850723266601562f, -1.781792163848877f, +16.649139404296875f, 0.7746315002441406f, 21.150409698486328f, 0.0f, 16.523895263671875f, 2.158529281616211f, 16.941299438476562f, -2.2086939811706543f, +18.467967987060547f, -0.8148317337036133f, 16.523895263671875f, -2.158529281616211f, 22.27109146118164f, 0.0f, 17.568321228027344f, -2.0246801376342773f, +17.850723266601562f, 1.781792163848877f, 16.941299438476562f, 2.2086939811706543f, 17.568321228027344f, 2.0246801376342773f, 23.129047393798828f, 0.0f, +22.747337341308594f, 0.0f, 14.522342681884766f, 1.0052733421325684f, 15.720023155212402f, 0.6297726631164551f, 18.355745315551758f, -0.8878421783447266f, +14.522342681884766f, -1.0052733421325684f, 22.07148551940918f, 0.0f, 15.908496856689453f, -0.19504690170288086f, 16.152368545532227f, -0.9630904197692871f, +15.720023155212402f, -0.6297726631164551f, 15.908496856689453f, 0.19504690170288086f, 21.666574478149414f, 0.0f, 16.32341957092285f, -1.9645299911499023f, +18.355745315551758f, 0.8878421783447266f, 16.152368545532227f, 0.9630904197692871f, 16.32341957092285f, 1.9645299911499023f, 24.470104217529297f, 0.0f, +21.82316017150879f, 0.0f, 16.595468521118164f, 0.5713272094726562f, 14.811345100402832f, 1.187673568725586f, 18.478282928466797f, 1.0751047134399414f, +16.595468521118164f, -0.5713272094726562f, 21.56455421447754f, 0.0f, 15.695236206054688f, 1.6537456512451172f, 18.979644775390625f, 0.6400623321533203f, +14.811345100402832f, -1.187673568725586f, 15.695236206054688f, -1.6537456512451172f, 19.819047927856445f, 0.0f, 17.255107879638672f, -0.3891420364379883f, +18.478282928466797f, -1.0751047134399414f, 18.979644775390625f, -0.6400623321533203f, 17.255107879638672f, 0.3891420364379883f, 24.61712646484375f, 0.0f, +23.316007614135742f, 0.0f, 16.840328216552734f, -0.1714944839477539f, 15.745707511901855f, -1.7281394004821777f, 17.080114364624023f, -1.8122563362121582f, +16.840328216552734f, 0.1714944839477539f, 20.889936447143555f, 0.0f, 14.053730010986328f, 0.03265047073364258f, 15.681198120117188f, -0.9533553123474121f, +15.745707511901855f, 1.7281394004821777f, 14.053730010986328f, -0.03265047073364258f, 21.791568756103516f, 0.0f, 15.182169914245605f, 0.5048332214355469f, +17.080114364624023f, 1.8122563362121582f, 15.681198120117188f, 0.9533553123474121f, 15.182169914245605f, -0.5048332214355469f, 22.19715118408203f, 0.0f, +20.248323440551758f, 0.0f, 16.19462776184082f, -0.9227666854858398f, 12.742441177368164f, -1.2530441284179688f, 13.242361068725586f, -2.3555569648742676f, +16.19462776184082f, 0.9227666854858398f, 24.274850845336914f, 0.0f, 15.302762985229492f, 0.5109024047851562f, 13.591480255126953f, 0.7871513366699219f, +12.742441177368164f, 1.2530441284179688f, 15.302762985229492f, -0.5109024047851562f, 19.683853149414062f, 0.0f, 12.944292068481445f, -0.3013796806335449f, +13.242361068725586f, 2.3555569648742676f, 13.591480255126953f, -0.7871513366699219f, 12.944292068481445f, 0.3013796806335449f, 17.905780792236328f, 0.0f, +14.300933837890625f, 0.0f, 11.694249153137207f, 1.005842685699463f, 12.425750732421875f, 0.6236023902893066f, 12.261955261230469f, 1.1963133811950684f, +11.694249153137207f, -1.005842685699463f, 22.746501922607422f, 0.0f, 14.725868225097656f, 0.6643266677856445f, 16.83078956604004f, -0.5466632843017578f, +12.425750732421875f, -0.6236023902893066f, 14.725868225097656f, -0.6643266677856445f, 22.199668884277344f, 0.0f, 17.119123458862305f, 1.1405529975891113f, +12.261955261230469f, -1.1963133811950684f, 16.83078956604004f, 0.5466632843017578f, 17.119123458862305f, -1.1405529975891113f, 21.40943145751953f, 0.0f, +25.674694061279297f, 0.0f, 18.10837745666504f, -2.591520309448242f, 16.436161041259766f, -0.17813682556152344f, 17.630596160888672f, 2.0602645874023438f, +18.10837745666504f, 2.591520309448242f, 23.505779266357422f, 0.0f, 16.496971130371094f, 1.5505895614624023f, 17.315523147583008f, 3.713217258453369f, +16.436161041259766f, 0.17813682556152344f, 16.496971130371094f, -1.5505895614624023f, 22.55170249938965f, 0.0f, 15.5280179977417f, 0.9869365692138672f, +17.630596160888672f, -2.0602645874023438f, 17.315523147583008f, -3.713217258453369f, 15.5280179977417f, -0.9869365692138672f, 20.920623779296875f, 0.0f, +21.224489212036133f, 0.0f, 16.505794525146484f, -3.0338940620422363f, 13.695807456970215f, -4.129373550415039f, 14.16837215423584f, -1.065721035003662f, +16.505794525146484f, 3.0338940620422363f, 21.696077346801758f, 0.0f, 15.15660285949707f, 0.5639595985412598f, 14.225179672241211f, 0.8959450721740723f, +13.695807456970215f, 4.129373550415039f, 15.15660285949707f, -0.5639595985412598f, 20.93700408935547f, 0.0f, 12.428796768188477f, 2.724285125732422f, +14.16837215423584f, 1.065721035003662f, 14.225179672241211f, -0.8959450721740723f, 12.428796768188477f, -2.724285125732422f, 17.867216110229492f, 0.0f, +23.37602424621582f, 0.0f, 16.110506057739258f, -1.603409767150879f, 13.155975341796875f, -0.8047003746032715f, 15.20956802368164f, -0.5328030586242676f, +16.110506057739258f, 1.603409767150879f, 22.30881118774414f, 0.0f, 14.099899291992188f, 0.08048772811889648f, 14.721872329711914f, 1.1429238319396973f, +13.155975341796875f, 0.8047003746032715f, 14.099899291992188f, -0.08048772811889648f, 19.580577850341797f, 0.0f, 13.916540145874023f, 1.5321788787841797f, +15.20956802368164f, 0.5328030586242676f, 14.721872329711914f, -1.1429238319396973f, 13.916540145874023f, -1.5321788787841797f, 20.551471710205078f, 0.0f, +25.068078994750977f, 0.0f, 18.21402931213379f, 0.1940937042236328f, 16.039424896240234f, 2.531503200531006f, 16.997644424438477f, 3.549870491027832f, +18.21402931213379f, -0.1940937042236328f, 23.36961555480957f, 0.0f, 14.453336715698242f, 1.9518232345581055f, 15.166784286499023f, 2.540485382080078f, +16.039424896240234f, -2.531503200531006f, 14.453336715698242f, -1.9518232345581055f, 20.349637985229492f, 0.0f, 14.39632797241211f, -1.6428136825561523f, +16.997644424438477f, -3.549870491027832f, 15.166784286499023f, -2.540485382080078f, 14.39632797241211f, 1.6428136825561523f, 20.663663864135742f, 0.0f, +20.877182006835938f, 0.0f, 13.021966934204102f, -0.2794966697692871f, 15.731927871704102f, 0.47623300552368164f, 16.628196716308594f, -0.9239397048950195f, +13.021966934204102f, 0.2794966697692871f, 14.145975112915039f, 0.0f, 12.299859046936035f, -0.07525062561035156f, 14.15318489074707f, -0.8755784034729004f, +15.731927871704102f, -0.47623300552368164f, 12.299859046936035f, 0.07525062561035156f, 21.013072967529297f, 0.0f, 16.94312858581543f, -1.9787907600402832f, +16.628196716308594f, 0.9239397048950195f, 14.15318489074707f, 0.8755784034729004f, 16.94312858581543f, 1.9787907600402832f, 25.103281021118164f, 0.0f, +23.896392822265625f, 0.0f, 14.44388484954834f, -1.5416078567504883f, 17.827392578125f, 0.8429069519042969f, 20.88530158996582f, -0.23684978485107422f, +14.44388484954834f, 1.5416078567504883f, 20.83314323425293f, 0.0f, 14.28111457824707f, 3.594601631164551f, 17.89102554321289f, 3.0162405967712402f, +17.827392578125f, -0.8429069519042969f, 14.28111457824707f, -3.594601631164551f, 21.302108764648438f, 0.0f, 18.56533432006836f, -0.46427059173583984f, +20.88530158996582f, 0.23684978485107422f, 17.89102554321289f, -3.0162405967712402f, 18.56533432006836f, 0.46427059173583984f, 27.954952239990234f, 0.0f, +19.225210189819336f, 0.0f, 15.537734985351562f, -2.844268321990967f, 14.608118057250977f, -1.1739659309387207f, 15.199438095092773f, -1.3806538581848145f, +15.537734985351562f, 2.844268321990967f, 21.943195343017578f, 0.0f, 15.691598892211914f, 1.5360369682312012f, 15.191414833068848f, 1.5159168243408203f, +14.608118057250977f, 1.1739659309387207f, 15.691598892211914f, -1.5360369682312012f, 19.7520809173584f, 0.0f, 14.50395679473877f, 0.054375648498535156f, +15.199438095092773f, 1.3806538581848145f, 15.191414833068848f, -1.5159168243408203f, 14.50395679473877f, -0.054375648498535156f, 20.23719596862793f, 0.0f, +24.562166213989258f, 0.0f, 18.248456954956055f, -1.261307716369629f, 17.315780639648438f, 0.7666950225830078f, 18.92612075805664f, 1.7121801376342773f, +18.248456954956055f, 1.261307716369629f, 21.95799446105957f, 0.0f, 15.902925491333008f, 3.556591033935547f, 16.558889389038086f, 4.076242446899414f, +17.315780639648438f, -0.7666950225830078f, 15.902925491333008f, -3.556591033935547f, 21.359922409057617f, 0.0f, 19.199832916259766f, 0.5405926704406738f, +18.92612075805664f, -1.7121801376342773f, 16.558889389038086f, -4.076242446899414f, 19.199832916259766f, -0.5405926704406738f, 24.214460372924805f, 0.0f, +21.008956909179688f, 0.0f, 13.98458480834961f, 0.2941150665283203f, 15.619239807128906f, 1.2771711349487305f, 14.33474349975586f, 0.40009498596191406f, +13.98458480834961f, -0.2941150665283203f, 18.215177536010742f, 0.0f, 14.997282028198242f, 2.851795196533203f, 11.668320655822754f, 1.0240888595581055f, +15.619239807128906f, -1.2771711349487305f, 14.997282028198242f, -2.851795196533203f, 21.39068031311035f, 0.0f, 13.909944534301758f, 0.5609288215637207f, +14.33474349975586f, -0.40009498596191406f, 11.668320655822754f, -1.0240888595581055f, 13.909944534301758f, -0.5609288215637207f, 16.973464965820312f, 0.0f, +23.05857276916504f, 0.0f, 16.856597900390625f, -3.125516414642334f, 16.796703338623047f, -2.032315731048584f, 15.33858871459961f, -2.3408541679382324f, +16.856597900390625f, 3.125516414642334f, 24.39084815979004f, 0.0f, 18.71369743347168f, 0.29778480529785156f, 16.91756820678711f, 0.1454792022705078f, +16.796703338623047f, 2.032315731048584f, 18.71369743347168f, -0.29778480529785156f, 22.9479923248291f, 0.0f, 16.18106460571289f, -1.090634822845459f, +15.33858871459961f, 2.3408541679382324f, 16.91756820678711f, -0.1454792022705078f, 16.18106460571289f, 1.090634822845459f, 19.69454002380371f, 0.0f, +22.64739418029785f, 0.0f, 16.109371185302734f, -2.1354575157165527f, 16.188133239746094f, 1.5276713371276855f, 18.445343017578125f, -2.2559757232666016f, +16.109371185302734f, 2.1354575157165527f, 23.121217727661133f, 0.0f, 16.48171615600586f, 3.151197910308838f, 18.688018798828125f, -0.21932506561279297f, +16.188133239746094f, -1.5276713371276855f, 16.48171615600586f, -3.151197910308838f, 21.761823654174805f, 0.0f, 17.691831588745117f, -3.358661651611328f, +18.445343017578125f, 2.2559757232666016f, 18.688018798828125f, 0.21932506561279297f, 17.691831588745117f, 3.358661651611328f, 25.613744735717773f, 0.0f, +23.148714065551758f, 0.0f, 15.048717498779297f, -0.557988166809082f, 18.702512741088867f, -2.2494897842407227f, 15.005731582641602f, -1.842700481414795f, +15.048717498779297f, 0.557988166809082f, 19.117347717285156f, 0.0f, 17.592741012573242f, 0.06960296630859375f, 13.811508178710938f, 0.40750694274902344f, +18.702512741088867f, 2.2494897842407227f, 17.592741012573242f, -0.06960296630859375f, 26.9288272857666f, 0.0f, 18.228248596191406f, 2.3123960494995117f, +15.005731582641602f, 1.842700481414795f, 13.811508178710938f, -0.40750694274902344f, 18.228248596191406f, -2.3123960494995117f, 20.77059555053711f, 0.0f, +27.8686580657959f, 0.0f, 20.494844436645508f, 3.4361047744750977f, 17.84125518798828f, 0.8243036270141602f, 21.619888305664062f, -0.6334676742553711f, +20.494844436645508f, -3.4361047744750977f, 25.66379165649414f, 0.0f, 16.319040298461914f, -2.403961658477783f, 18.267738342285156f, -4.291955947875977f, +17.84125518798828f, -0.8243036270141602f, 16.319040298461914f, 2.403961658477783f, 20.881973266601562f, 0.0f, 16.648780822753906f, 0.09575557708740234f, +21.619888305664062f, 0.6334676742553711f, 18.267738342285156f, 4.291955947875977f, 16.648780822753906f, -0.09575557708740234f, 23.260892868041992f, 0.0f, +25.08969497680664f, 0.0f, 17.743778228759766f, -0.09798336029052734f, 18.747533798217773f, 1.2729787826538086f, 18.647491455078125f, 1.2894353866577148f, +17.743778228759766f, 0.09798336029052734f, 22.976255416870117f, 0.0f, 19.046043395996094f, 0.7506647109985352f, 16.745689392089844f, 1.402505874633789f, +18.747533798217773f, -1.2729787826538086f, 19.046043395996094f, -0.7506647109985352f, 24.068281173706055f, 0.0f, 18.246185302734375f, 0.1723003387451172f, +18.647491455078125f, -1.2894353866577148f, 16.745689392089844f, -1.402505874633789f, 18.246185302734375f, -0.1723003387451172f, 24.131458282470703f, 0.0f, +24.18777847290039f, 0.0f, 18.98159408569336f, -3.118265151977539f, 17.94524383544922f, -2.066533088684082f, 18.206119537353516f, -0.1573333740234375f, +18.98159408569336f, 3.118265151977539f, 22.774587631225586f, 0.0f, 16.383834838867188f, 0.5538411140441895f, 17.14815330505371f, 2.4304370880126953f, +17.94524383544922f, 2.066533088684082f, 16.383834838867188f, -0.5538411140441895f, 19.713497161865234f, 0.0f, 15.563642501831055f, 1.3309803009033203f, +18.206119537353516f, 0.1573333740234375f, 17.14815330505371f, -2.4304370880126953f, 15.563642501831055f, -1.3309803009033203f, 21.666305541992188f, 0.0f, +22.172109603881836f, 0.0f, 15.173959732055664f, -0.2990875244140625f, 15.856069564819336f, 0.44220638275146484f, 16.172658920288086f, -0.12421798706054688f, +15.173959732055664f, 0.2990875244140625f, 19.85472869873047f, 0.0f, 14.790227890014648f, -1.6778841018676758f, 14.134756088256836f, -1.5390615463256836f, +15.856069564819336f, -0.44220638275146484f, 14.790227890014648f, 1.6778841018676758f, 23.433210372924805f, 0.0f, 17.356876373291016f, -0.6984548568725586f, +16.172658920288086f, 0.12421798706054688f, 14.134756088256836f, 1.5390615463256836f, 17.356876373291016f, 0.6984548568725586f, 22.314167022705078f, 0.0f, +22.89899444580078f, 0.0f, 16.29467010498047f, -1.6370429992675781f, 15.891280174255371f, -4.164074897766113f, 16.48223114013672f, -1.6723666191101074f, +16.29467010498047f, 1.6370429992675781f, 21.211254119873047f, 0.0f, 16.139549255371094f, -2.6213765144348145f, 14.890134811401367f, 0.06409025192260742f, +15.891280174255371f, 4.164074897766113f, 16.139549255371094f, 2.6213765144348145f, 22.39773941040039f, 0.0f, 15.913775444030762f, 2.0997776985168457f, +16.48223114013672f, 1.6723666191101074f, 14.890134811401367f, -0.06409025192260742f, 15.913775444030762f, -2.0997776985168457f, 19.935577392578125f, 0.0f, +18.614761352539062f, 0.0f, 13.880041122436523f, 0.4582343101501465f, 14.173076629638672f, -1.2096099853515625f, 13.965913772583008f, -0.08162736892700195f, +13.880041122436523f, -0.4582343101501465f, 20.17448616027832f, 0.0f, 15.33076286315918f, -0.14642667770385742f, 15.48178482055664f, -0.10817861557006836f, +14.173076629638672f, 1.2096099853515625f, 15.33076286315918f, 0.14642667770385742f, 22.582542419433594f, 0.0f, 17.757171630859375f, 0.3805379867553711f, +13.965913772583008f, 0.08162736892700195f, 15.48178482055664f, 0.10817861557006836f, 17.757171630859375f, -0.3805379867553711f, 21.33770179748535f, 0.0f, +20.93999671936035f, 0.0f, 16.701562881469727f, -0.9822368621826172f, 12.2352933883667f, -0.11900854110717773f, 17.00183868408203f, -0.8340258598327637f, +16.701562881469727f, 0.9822368621826172f, 24.072553634643555f, 0.0f, 15.033855438232422f, 2.2775650024414062f, 16.501829147338867f, 1.1017498970031738f, +12.2352933883667f, 0.11900854110717773f, 15.033855438232422f, -2.2775650024414062f, 18.391952514648438f, 0.0f, 12.883002281188965f, -1.5941824913024902f, +17.00183868408203f, 0.8340258598327637f, 16.501829147338867f, -1.1017498970031738f, 12.883002281188965f, 1.5941824913024902f, 20.636030197143555f, 0.0f, +18.116464614868164f, 0.0f, 16.863239288330078f, 0.770658016204834f, 17.753019332885742f, -2.121142864227295f, 13.540090560913086f, -1.288076400756836f, +16.863239288330078f, -0.770658016204834f, 24.34797477722168f, 0.0f, 20.617145538330078f, -1.9144411087036133f, 16.841552734375f, -2.179537296295166f, +17.753019332885742f, 2.121142864227295f, 20.617145538330078f, 1.9144411087036133f, 26.582727432250977f, 0.0f, 18.376834869384766f, -1.4125146865844727f, +13.540090560913086f, 1.288076400756836f, 16.841552734375f, 2.179537296295166f, 18.376834869384766f, 1.4125146865844727f, 20.581804275512695f, 0.0f, +20.413799285888672f, 0.0f, 16.157527923583984f, -1.4802241325378418f, 14.642253875732422f, -2.1171960830688477f, 14.847321510314941f, -2.772264003753662f, +16.157527923583984f, 1.4802241325378418f, 24.43147850036621f, 0.0f, 17.499488830566406f, -0.9276633262634277f, 17.544618606567383f, 0.15003490447998047f, +14.642253875732422f, 2.1171960830688477f, 17.499488830566406f, 0.9276633262634277f, 22.111970901489258f, 0.0f, 15.336393356323242f, 0.48430967330932617f, +14.847321510314941f, 2.772264003753662f, 17.544618606567383f, -0.15003490447998047f, 15.336393356323242f, -0.48430967330932617f, 21.655902862548828f, 0.0f, +21.770164489746094f, 0.0f, 16.525981903076172f, 0.2548551559448242f, 13.539999961853027f, -0.25463390350341797f, 14.656803131103516f, 1.3059425354003906f, +16.525981903076172f, -0.2548551559448242f, 24.89470863342285f, 0.0f, 15.669025421142578f, -0.43921422958374023f, 15.43845272064209f, 2.2921314239501953f, +13.539999961853027f, 0.25463390350341797f, 15.669025421142578f, 0.43921422958374023f, 17.091798782348633f, 0.0f, 13.043052673339844f, 2.2332143783569336f, +14.656803131103516f, -1.3059425354003906f, 15.43845272064209f, -2.2921314239501953f, 13.043052673339844f, -2.2332143783569336f, 18.211524963378906f, 0.0f, +21.74067497253418f, 0.0f, 15.06584358215332f, -2.0531163215637207f, 15.09339427947998f, -0.8616137504577637f, 14.806436538696289f, -0.21899175643920898f, +15.06584358215332f, 2.0531163215637207f, 23.28290557861328f, 0.0f, 15.97799301147461f, 1.0986137390136719f, 15.27734088897705f, -0.2865123748779297f, +15.09339427947998f, 0.8616137504577637f, 15.97799301147461f, -1.0986137390136719f, 20.612146377563477f, 0.0f, 14.211112022399902f, 1.0467371940612793f, +14.806436538696289f, 0.21899175643920898f, 15.27734088897705f, 0.2865123748779297f, 14.211112022399902f, -1.0467371940612793f, 19.27246856689453f, 0.0f, +16.363292694091797f, 0.0f, 13.239751815795898f, -2.0081677436828613f, 13.550819396972656f, -2.105344295501709f, 12.190223693847656f, -0.45111703872680664f, +13.239751815795898f, 2.0081677436828613f, 21.993528366088867f, 0.0f, 17.180477142333984f, -0.8344640731811523f, 16.3370361328125f, -1.8893041610717773f, +13.550819396972656f, 2.105344295501709f, 17.180477142333984f, 0.8344640731811523f, 24.075576782226562f, 0.0f, 17.378543853759766f, 1.9318604469299316f, +12.190223693847656f, 0.45111703872680664f, 16.3370361328125f, 1.8893041610717773f, 17.378543853759766f, -1.9318604469299316f, 21.023651123046875f, 0.0f, +21.64317512512207f, 0.0f, 16.67047882080078f, 0.36072444915771484f, 16.21580696105957f, 1.6885032653808594f, 15.064492225646973f, 0.41719913482666016f, +16.67047882080078f, -0.36072444915771484f, 21.197574615478516f, 0.0f, 15.597684860229492f, 2.4071192741394043f, 15.059895515441895f, -1.0233402252197266f, +16.21580696105957f, -1.6885032653808594f, 15.597684860229492f, -2.4071192741394043f, 21.431421279907227f, 0.0f, 14.834247589111328f, -3.015810012817383f, +15.064492225646973f, -0.41719913482666016f, 15.059895515441895f, 1.0233402252197266f, 14.834247589111328f, 3.015810012817383f, 18.678560256958008f, 0.0f, +24.52552604675293f, 0.0f, 15.23515510559082f, -1.658677577972412f, 17.67181396484375f, -2.1414475440979004f, 17.374652862548828f, -0.46230220794677734f, +15.23515510559082f, 1.658677577972412f, 18.488218307495117f, 0.0f, 13.974861145019531f, -0.011626720428466797f, 14.151053428649902f, 1.1929049491882324f, +17.67181396484375f, 2.1414475440979004f, 13.974861145019531f, 0.011626720428466797f, 23.31497573852539f, 0.0f, 17.305265426635742f, 1.6757917404174805f, +17.374652862548828f, 0.46230220794677734f, 14.151053428649902f, -1.1929049491882324f, 17.305265426635742f, -1.6757917404174805f, 21.096492767333984f, 0.0f, +18.73418617248535f, 0.0f, 13.927091598510742f, 1.8228816986083984f, 14.029094696044922f, -1.749741554260254f, 14.825826644897461f, 0.07763910293579102f, +13.927091598510742f, -1.8228816986083984f, 22.763919830322266f, 0.0f, 15.753870964050293f, -1.893838882446289f, 18.093822479248047f, -2.267055034637451f, +14.029094696044922f, 1.749741554260254f, 15.753870964050293f, 1.893838882446289f, 19.38747215270996f, 0.0f, 15.678062438964844f, 0.0019507408142089844f, +14.825826644897461f, -0.07763910293579102f, 18.093822479248047f, 2.267055034637451f, 15.678062438964844f, -0.0019507408142089844f, 23.750146865844727f, 0.0f, +21.735530853271484f, 0.0f, 16.120681762695312f, 0.686251163482666f, 16.110275268554688f, -0.20938873291015625f, 17.86948013305664f, -0.7987174987792969f, +16.120681762695312f, -0.686251163482666f, 21.05569076538086f, 0.0f, 15.950641632080078f, -0.02298259735107422f, 16.993698120117188f, -1.6902251243591309f, +16.110275268554688f, 0.20938873291015625f, 15.950641632080078f, 0.02298259735107422f, 22.73456382751465f, 0.0f, 16.35416603088379f, -0.5007257461547852f, +17.86948013305664f, 0.7987174987792969f, 16.993698120117188f, 1.6902251243591309f, 16.35416603088379f, 0.5007257461547852f, 24.846946716308594f, 0.0f, +23.25253677368164f, 0.0f, 16.813678741455078f, -0.8590450286865234f, 16.26696014404297f, 0.7003445625305176f, 18.700786590576172f, -0.1021270751953125f, +16.813678741455078f, 0.8590450286865234f, 20.79606819152832f, 0.0f, 14.959863662719727f, 1.452056884765625f, 17.57802963256836f, 0.6053981781005859f, +16.26696014404297f, -0.7003445625305176f, 14.959863662719727f, -1.452056884765625f, 19.27092933654785f, 0.0f, 16.128372192382812f, -1.0110177993774414f, +18.700786590576172f, 0.1021270751953125f, 17.57802963256836f, -0.6053981781005859f, 16.128372192382812f, 1.0110177993774414f, 26.414409637451172f, 0.0f, +20.431377410888672f, 0.0f, 15.20034408569336f, -0.08928489685058594f, 16.121185302734375f, 2.422122001647949f, 17.589567184448242f, -0.02927398681640625f, +15.20034408569336f, 0.08928489685058594f, 26.82245445251465f, 0.0f, 18.063709259033203f, 2.0412826538085938f, 19.61909294128418f, 0.8823432922363281f, +16.121185302734375f, -2.422122001647949f, 18.063709259033203f, -2.0412826538085938f, 25.09491729736328f, 0.0f, 20.833311080932617f, -2.7100095748901367f, +17.589567184448242f, 0.02927398681640625f, 19.61909294128418f, -0.8823432922363281f, 20.833311080932617f, 2.7100095748901367f, 26.643770217895508f, 0.0f, +23.736888885498047f, 0.0f, 18.890960693359375f, 2.4609527587890625f, 19.19548988342285f, 4.577088356018066f, 19.60604476928711f, 3.847348690032959f, +18.890960693359375f, -2.4609527587890625f, 21.807994842529297f, 0.0f, 17.99551010131836f, 1.2316131591796875f, 18.100147247314453f, 1.1858320236206055f, +19.19548988342285f, -4.577088356018066f, 17.99551010131836f, -1.2316131591796875f, 23.461679458618164f, 0.0f, 18.576129913330078f, 0.2639198303222656f, +19.60604476928711f, -3.847348690032959f, 18.100147247314453f, -1.1858320236206055f, 18.576129913330078f, -0.2639198303222656f, 24.65268325805664f, 0.0f, +24.84334945678711f, 0.0f, 18.64190101623535f, 0.349700927734375f, 17.565662384033203f, -2.049570083618164f, 18.885648727416992f, 0.22190189361572266f, +18.64190101623535f, -0.349700927734375f, 24.897937774658203f, 0.0f, 16.70075798034668f, -1.7952642440795898f, 17.32637596130371f, 0.25629138946533203f, +17.565662384033203f, 2.049570083618164f, 16.70075798034668f, 1.7952642440795898f, 22.58943748474121f, 0.0f, 16.8226318359375f, 1.2174677848815918f, +18.885648727416992f, -0.22190189361572266f, 17.32637596130371f, -0.25629138946533203f, 16.8226318359375f, -1.2174677848815918f, 23.003868103027344f, 0.0f, +18.012109756469727f, 0.0f, 15.290613174438477f, 1.0699410438537598f, 14.674177169799805f, 1.125152587890625f, 14.19912338256836f, 0.7007002830505371f, +15.290613174438477f, -1.0699410438537598f, 24.333070755004883f, 0.0f, 17.815433502197266f, 2.165109634399414f, 17.078968048095703f, 0.33077049255371094f, +14.674177169799805f, -1.125152587890625f, 17.815433502197266f, -2.165109634399414f, 24.4340877532959f, 0.0f, 17.949970245361328f, -2.0194406509399414f, +14.19912338256836f, -0.7007002830505371f, 17.078968048095703f, -0.33077049255371094f, 17.949970245361328f, 2.0194406509399414f, 23.017383575439453f, 0.0f, +21.27462387084961f, 0.0f, 13.96728515625f, -0.33349084854125977f, 12.850662231445312f, -2.1970267295837402f, 16.89284896850586f, -0.2431173324584961f, +13.96728515625f, 0.33349084854125977f, 18.396873474121094f, 0.0f, 11.402549743652344f, -1.1238255500793457f, 16.393516540527344f, -0.022820472717285156f, +12.850662231445312f, 2.1970267295837402f, 11.402549743652344f, 1.1238255500793457f, 16.99885368347168f, 0.0f, 15.382194519042969f, 0.5876851081848145f, +16.89284896850586f, 0.2431173324584961f, 16.393516540527344f, 0.022820472717285156f, 15.382194519042969f, -0.5876851081848145f, 26.284900665283203f, 0.0f, +17.271957397460938f, 0.0f, 13.386289596557617f, -0.8927855491638184f, 14.87706184387207f, -1.3271684646606445f, 15.44038200378418f, -0.613795280456543f, +13.386289596557617f, 0.8927855491638184f, 22.54718780517578f, 0.0f, 16.871505737304688f, 0.0843362808227539f, 18.903099060058594f, -0.2741518020629883f, +14.87706184387207f, 1.3271684646606445f, 16.871505737304688f, -0.0843362808227539f, 25.234540939331055f, 0.0f, 19.899864196777344f, 0.8093862533569336f, +15.44038200378418f, 0.613795280456543f, 18.903099060058594f, 0.2741518020629883f, 19.899864196777344f, -0.8093862533569336f, 25.085838317871094f, 0.0f, +21.225830078125f, 0.0f, 17.805347442626953f, 2.1185379028320312f, 17.86257553100586f, 0.6172943115234375f, 16.028467178344727f, 0.4069094657897949f, +17.805347442626953f, -2.1185379028320312f, 27.128141403198242f, 0.0f, 19.509246826171875f, -1.3052539825439453f, 17.45037078857422f, -0.8915376663208008f, +17.86257553100586f, -0.6172943115234375f, 19.509246826171875f, 1.3052539825439453f, 24.46462059020996f, 0.0f, 17.26470947265625f, 0.6854982376098633f, +16.028467178344727f, -0.4069094657897949f, 17.45037078857422f, 0.8915376663208008f, 17.26470947265625f, -0.6854982376098633f, 18.901601791381836f, 0.0f, +26.63841438293457f, 0.0f, 18.469343185424805f, 0.4740476608276367f, 15.33172607421875f, -2.283236503601074f, 20.397846221923828f, -0.16810035705566406f, +18.469343185424805f, -0.4740476608276367f, 22.807233810424805f, 0.0f, 14.798961639404297f, -1.9063258171081543f, 18.004959106445312f, -2.7366065979003906f, +15.33172607421875f, 2.283236503601074f, 14.798961639404297f, 1.9063258171081543f, 16.909101486206055f, 0.0f, 15.939040184020996f, -0.010777473449707031f, +20.397846221923828f, 0.16810035705566406f, 18.004959106445312f, 2.7366065979003906f, 15.939040184020996f, 0.010777473449707031f, 25.47002410888672f, 0.0f, +21.90583610534668f, 0.0f, 15.592023849487305f, -0.019426822662353516f, 16.903663635253906f, 1.3381266593933105f, 16.267126083374023f, 2.5139989852905273f, +15.592023849487305f, 0.019426822662353516f, 20.356149673461914f, 0.0f, 15.116583824157715f, 1.6197237968444824f, 15.379796981811523f, 1.4327454566955566f, +16.903663635253906f, -1.3381266593933105f, 15.116583824157715f, -1.6197237968444824f, 24.902149200439453f, 0.0f, 17.09071159362793f, 0.6975317001342773f, +16.267126083374023f, -2.5139989852905273f, 15.379796981811523f, -1.4327454566955566f, 17.09071159362793f, -0.6975317001342773f, 21.144737243652344f, 0.0f, +19.124130249023438f, 0.0f, 13.847270965576172f, 2.057042121887207f, 15.43878173828125f, 2.0999183654785156f, 14.775691032409668f, -0.12742233276367188f, +13.847270965576172f, -2.057042121887207f, 20.6329288482666f, 0.0f, 17.060871124267578f, 0.6151666641235352f, 15.481949806213379f, -1.969503402709961f, +15.43878173828125f, -2.0999183654785156f, 17.060871124267578f, -0.6151666641235352f, 25.776288986206055f, 0.0f, 18.53174591064453f, -0.3560504913330078f, +14.775691032409668f, 0.12742233276367188f, 15.481949806213379f, 1.969503402709961f, 18.53174591064453f, 0.3560504913330078f, 23.37698745727539f, 0.0f, +23.327301025390625f, 0.0f, 16.653194427490234f, 1.4518694877624512f, 16.077404022216797f, 0.6905784606933594f, 17.752487182617188f, 0.5003261566162109f, +16.653194427490234f, -1.4518694877624512f, 21.694869995117188f, 0.0f, 14.357658386230469f, -0.5733137130737305f, 15.564322471618652f, -0.7151575088500977f, +16.077404022216797f, -0.6905784606933594f, 14.357658386230469f, 0.5733137130737305f, 21.731632232666016f, 0.0f, 17.64715576171875f, 0.2692089080810547f, +17.752487182617188f, -0.5003261566162109f, 15.564322471618652f, 0.7151575088500977f, 17.64715576171875f, -0.2692089080810547f, 24.174484252929688f, 0.0f, +21.163076400756836f, 0.0f, 14.537819862365723f, -1.81439208984375f, 16.34678077697754f, -2.2427430152893066f, 16.150577545166016f, -1.5915675163269043f, +14.537819862365723f, 1.81439208984375f, 21.649906158447266f, 0.0f, 17.063274383544922f, -0.708864688873291f, 17.20510482788086f, 0.1336069107055664f, +16.34678077697754f, 2.2427430152893066f, 17.063274383544922f, 0.708864688873291f, 23.341663360595703f, 0.0f, 17.181921005249023f, 1.5814075469970703f, +16.150577545166016f, 1.5915675163269043f, 17.20510482788086f, -0.1336069107055664f, 17.181921005249023f, -1.5814075469970703f, 23.65888214111328f, 0.0f, +24.533462524414062f, 0.0f, 18.46529769897461f, -0.19507312774658203f, 15.21469497680664f, 2.4161338806152344f, 16.827199935913086f, 0.9935364723205566f, +18.46529769897461f, 0.19507312774658203f, 21.29835319519043f, 0.0f, 16.10143280029297f, 1.3172988891601562f, 16.9044189453125f, 0.12248420715332031f, +15.21469497680664f, -2.4161338806152344f, 16.10143280029297f, -1.3172988891601562f, 19.623367309570312f, 0.0f, 14.711187362670898f, -0.4163637161254883f, +16.827199935913086f, -0.9935364723205566f, 16.9044189453125f, -0.12248420715332031f, 14.711187362670898f, 0.4163637161254883f, 21.182838439941406f, 0.0f, +24.191272735595703f, 0.0f, 18.21797752380371f, -0.279266357421875f, 18.100496292114258f, 1.5145745277404785f, 18.827959060668945f, -2.371593475341797f, +18.21797752380371f, 0.279266357421875f, 23.38195037841797f, 0.0f, 16.604469299316406f, 1.9431991577148438f, 17.92401695251465f, -3.162468910217285f, +18.100496292114258f, -1.5145745277404785f, 16.604469299316406f, -1.9431991577148438f, 25.047807693481445f, 0.0f, 18.343271255493164f, -4.777757167816162f, +18.827959060668945f, 2.371593475341797f, 17.92401695251465f, 3.162468910217285f, 18.343271255493164f, 4.777757167816162f, 23.887969970703125f, 0.0f, +19.980878829956055f, 0.0f, 13.69573974609375f, 1.734388828277588f, 17.41576385498047f, -1.0431766510009766f, 14.452264785766602f, -0.9472923278808594f, +13.69573974609375f, -1.734388828277588f, 19.974740982055664f, 0.0f, 18.95020866394043f, -2.8167247772216797f, 13.749837875366211f, -2.934793472290039f, +17.41576385498047f, 1.0431766510009766f, 18.95020866394043f, 2.8167247772216797f, 27.165483474731445f, 0.0f, 17.25852394104004f, 0.2213287353515625f, +14.452264785766602f, 0.9472923278808594f, 13.749837875366211f, 2.934793472290039f, 17.25852394104004f, -0.2213287353515625f, 20.43896484375f, 0.0f, +20.289827346801758f, 0.0f, 14.087936401367188f, 3.5652389526367188f, 15.791497230529785f, 2.7247133255004883f, 15.490589141845703f, 0.6967353820800781f, +14.087936401367188f, -3.5652389526367188f, 19.749311447143555f, 0.0f, 15.53228759765625f, -1.9985737800598145f, 16.643604278564453f, -1.6219406127929688f, +15.791497230529785f, -2.7247133255004883f, 15.53228759765625f, 1.9985737800598145f, 22.15505599975586f, 0.0f, 16.67080307006836f, -1.8190035820007324f, +15.490589141845703f, -0.6967353820800781f, 16.643604278564453f, 1.6219406127929688f, 16.67080307006836f, 1.8190035820007324f, 22.724685668945312f, 0.0f, +23.01767921447754f, 0.0f, 16.019668579101562f, -0.6165289878845215f, 19.009502410888672f, 2.0139598846435547f, 17.194671630859375f, 0.1773991584777832f, +16.019668579101562f, 0.6165289878845215f, 19.597599029541016f, 0.0f, 15.293000221252441f, 2.2960543632507324f, 14.21058464050293f, -0.567324161529541f, +19.009502410888672f, -2.0139598846435547f, 15.293000221252441f, -2.2960543632507324f, 23.86880874633789f, 0.0f, 16.719697952270508f, -1.8909077644348145f, +17.194671630859375f, -0.1773991584777832f, 14.21058464050293f, 0.567324161529541f, 16.719697952270508f, 1.8909077644348145f, 21.078907012939453f, 0.0f, +18.848512649536133f, 0.0f, 13.949182510375977f, -1.4250168800354004f, 13.637954711914062f, -3.466017723083496f, 12.519454956054688f, -0.45670032501220703f, +13.949182510375977f, 1.4250168800354004f, 22.587583541870117f, 0.0f, 14.234014511108398f, 1.844062328338623f, 14.555316925048828f, 1.9982013702392578f, +13.637954711914062f, 3.466017723083496f, 14.234014511108398f, -1.844062328338623f, 20.893550872802734f, 0.0f, 14.371576309204102f, -0.0943765640258789f, +12.519454956054688f, 0.45670032501220703f, 14.555316925048828f, -1.9982013702392578f, 14.371576309204102f, 0.0943765640258789f, 19.256559371948242f, 0.0f, +26.553144454956055f, 0.0f, 19.637889862060547f, 0.44392967224121094f, 19.784006118774414f, -1.7320432662963867f, 16.166208267211914f, -1.9987444877624512f, +19.637889862060547f, -0.44392967224121094f, 24.895992279052734f, 0.0f, 19.933696746826172f, -0.5357904434204102f, 16.259368896484375f, -1.239400863647461f, +19.784006118774414f, 1.7320432662963867f, 19.933696746826172f, 0.5357904434204102f, 25.267072677612305f, 0.0f, 16.142372131347656f, -1.3560523986816406f, +16.166208267211914f, 1.9987444877624512f, 16.259368896484375f, 1.239400863647461f, 16.142372131347656f, 1.3560523986816406f, 19.57831382751465f, 0.0f, +23.04789924621582f, 0.0f, 16.321693420410156f, -2.5668139457702637f, 16.791343688964844f, 2.135972499847412f, 16.718780517578125f, 0.5154290199279785f, +16.321693420410156f, 2.5668139457702637f, 22.471477508544922f, 0.0f, 16.48006248474121f, 2.857731819152832f, 16.499366760253906f, 1.2404212951660156f, +16.791343688964844f, -2.135972499847412f, 16.48006248474121f, -2.857731819152832f, 20.45549201965332f, 0.0f, 17.269329071044922f, -1.9975385665893555f, +16.718780517578125f, -0.5154290199279785f, 16.499366760253906f, -1.2404212951660156f, 17.269329071044922f, 1.9975385665893555f, 22.424266815185547f, 0.0f, +20.131834030151367f, 0.0f, 16.00091552734375f, -0.758969783782959f, 14.04541015625f, -2.1820406913757324f, 17.80875015258789f, 0.797999382019043f, +16.00091552734375f, 0.758969783782959f, 21.9018497467041f, 0.0f, 15.804376602172852f, -1.338921070098877f, 17.496803283691406f, 1.4387812614440918f, +14.04541015625f, 2.1820406913757324f, 15.804376602172852f, 1.338921070098877f, 18.42815399169922f, 0.0f, 15.489593505859375f, 0.7303152084350586f, +17.80875015258789f, -0.797999382019043f, 17.496803283691406f, -1.4387812614440918f, 15.489593505859375f, -0.7303152084350586f, 24.448253631591797f, 0.0f, +23.568313598632812f, 0.0f, 14.0460205078125f, -0.6413593292236328f, 15.920628547668457f, 0.17860794067382812f, 19.24582290649414f, -1.5342884063720703f, +14.0460205078125f, 0.6413593292236328f, 18.344953536987305f, 0.0f, 14.366621971130371f, 0.18474483489990234f, 15.248969078063965f, -1.338059902191162f, +15.920628547668457f, -0.17860794067382812f, 14.366621971130371f, -0.18474483489990234f, 21.153854370117188f, 0.0f, 16.70583724975586f, -0.37014198303222656f, +19.24582290649414f, 1.5342884063720703f, 15.248969078063965f, 1.338059902191162f, 16.70583724975586f, 0.37014198303222656f, 25.021631240844727f, 0.0f, +23.488780975341797f, 0.0f, 17.436376571655273f, -1.2474594116210938f, 17.67868995666504f, -1.5279407501220703f, 16.021820068359375f, -1.0124669075012207f, +17.436376571655273f, 1.2474594116210938f, 21.41313934326172f, 0.0f, 16.3671817779541f, -0.39748716354370117f, 13.854995727539062f, -1.1604290008544922f, +17.67868995666504f, 1.5279407501220703f, 16.3671817779541f, 0.39748716354370117f, 22.246488571166992f, 0.0f, 16.572307586669922f, 0.5810108184814453f, +16.021820068359375f, 1.0124669075012207f, 13.854995727539062f, 1.1604290008544922f, 16.572307586669922f, -0.5810108184814453f, 19.28145408630371f, 0.0f, +22.273761749267578f, 0.0f, 17.481887817382812f, 2.553635597229004f, 17.401031494140625f, 1.3727226257324219f, 15.398078918457031f, 3.2299623489379883f, +17.481887817382812f, -2.553635597229004f, 21.850154876708984f, 0.0f, 17.19963264465332f, -1.453857421875f, 14.927098274230957f, 0.7449016571044922f, +17.401031494140625f, -1.3727226257324219f, 17.19963264465332f, 1.453857421875f, 23.299047470092773f, 0.0f, 16.273515701293945f, 2.8816542625427246f, +15.398078918457031f, -3.2299623489379883f, 14.927098274230957f, -0.7449016571044922f, 16.273515701293945f, -2.8816542625427246f, 19.77521324157715f, 0.0f, +21.183963775634766f, 0.0f, 13.386272430419922f, -1.626939296722412f, 15.1171875f, -2.8652944564819336f, 15.178093910217285f, -3.400297164916992f, +13.386272430419922f, 1.626939296722412f, 19.869277954101562f, 0.0f, 14.719072341918945f, -1.2475132942199707f, 15.521930694580078f, -2.820934295654297f, +15.1171875f, 2.8652944564819336f, 14.719072341918945f, 1.2475132942199707f, 20.548900604248047f, 0.0f, 15.866316795349121f, -1.6820197105407715f, +15.178093910217285f, 3.400297164916992f, 15.521930694580078f, 2.820934295654297f, 15.866316795349121f, 1.6820197105407715f, 22.428953170776367f, 0.0f, +24.40384292602539f, 0.0f, 17.233335494995117f, -0.22369670867919922f, 19.431766510009766f, -0.5446949005126953f, 18.55576515197754f, -0.08618354797363281f, +17.233335494995117f, 0.22369670867919922f, 23.25176239013672f, 0.0f, 16.318994522094727f, -0.6753120422363281f, 19.26217269897461f, -0.10872936248779297f, +19.431766510009766f, 0.5446949005126953f, 16.318994522094727f, 0.6753120422363281f, 24.583637237548828f, 0.0f, 19.03276824951172f, 0.8566627502441406f, +18.55576515197754f, 0.08618354797363281f, 19.26217269897461f, 0.10872936248779297f, 19.03276824951172f, -0.8566627502441406f, 25.377344131469727f, 0.0f, +18.99209976196289f, 0.0f, 15.000825881958008f, 2.9242658615112305f, 14.52610969543457f, 0.02064037322998047f, 15.807966232299805f, 0.011048316955566406f, +15.000825881958008f, -2.9242658615112305f, 21.339214324951172f, 0.0f, 16.157024383544922f, -2.7338032722473145f, 16.22149658203125f, -1.8902082443237305f, +14.52610969543457f, -0.02064037322998047f, 16.157024383544922f, 2.7338032722473145f, 20.649349212646484f, 0.0f, 16.166568756103516f, 0.0031652450561523438f, +15.807966232299805f, -0.011048316955566406f, 16.22149658203125f, 1.8902082443237305f, 16.166568756103516f, -0.0031652450561523438f, 23.19734001159668f, 0.0f, +22.784133911132812f, 0.0f, 12.710981369018555f, 0.5308914184570312f, 17.891864776611328f, -0.7428388595581055f, 15.732990264892578f, 2.283944606781006f, +12.710981369018555f, -0.5308914184570312f, 17.815269470214844f, 0.0f, 15.695314407348633f, -1.3634696006774902f, 13.750286102294922f, -0.12127828598022461f, +17.891864776611328f, 0.7428388595581055f, 15.695314407348633f, 1.3634696006774902f, 27.31424331665039f, 0.0f, 17.774988174438477f, 1.8194952011108398f, +15.732990264892578f, -2.283944606781006f, 13.750286102294922f, 0.12127828598022461f, 17.774988174438477f, -1.8194952011108398f, 21.01193618774414f, 0.0f, +19.428205490112305f, 0.0f, 15.248598098754883f, -4.624457359313965f, 16.922338485717773f, -1.5945396423339844f, 15.623851776123047f, -4.073094844818115f, +15.248598098754883f, 4.624457359313965f, 24.79376220703125f, 0.0f, 17.0262508392334f, 3.6914854049682617f, 18.33782196044922f, 1.2018041610717773f, +16.922338485717773f, 1.5945396423339844f, 17.0262508392334f, -3.6914854049682617f, 24.516151428222656f, 0.0f, 17.757022857666016f, -3.1030735969543457f, +15.623851776123047f, 4.073094844818115f, 18.33782196044922f, -1.2018041610717773f, 17.757022857666016f, 3.1030735969543457f, 23.28403091430664f, 0.0f, +21.64803123474121f, 0.0f, 16.42295265197754f, -1.1854686737060547f, 14.65176010131836f, -0.3687577247619629f, 15.17987060546875f, -1.235720157623291f, +16.42295265197754f, 1.1854686737060547f, 24.046567916870117f, 0.0f, 17.272794723510742f, -0.7628564834594727f, 16.651641845703125f, -1.3498506546020508f, +14.65176010131836f, 0.3687577247619629f, 17.272794723510742f, 0.7628564834594727f, 20.737184524536133f, 0.0f, 14.795790672302246f, -2.105055332183838f, +15.17987060546875f, 1.235720157623291f, 16.651641845703125f, 1.3498506546020508f, 14.795790672302246f, 2.105055332183838f, 21.38180923461914f, 0.0f, +19.498779296875f, 0.0f, 13.911189079284668f, -1.642993450164795f, 13.391851425170898f, -0.1106257438659668f, 16.297990798950195f, 0.5796966552734375f, +13.911189079284668f, 1.642993450164795f, 17.936336517333984f, 0.0f, 11.607820510864258f, 1.3291292190551758f, 14.998821258544922f, 1.8147521018981934f, +13.391851425170898f, 0.1106257438659668f, 11.607820510864258f, -1.3291292190551758f, 16.2199649810791f, 0.0f, 14.04206657409668f, 0.8075909614562988f, +16.297990798950195f, -0.5796966552734375f, 14.998821258544922f, -1.8147521018981934f, 14.04206657409668f, -0.8075909614562988f, 22.67682456970215f, 0.0f, +27.848466873168945f, 0.0f, 17.92770004272461f, -3.408331871032715f, 19.68204689025879f, -2.6481103897094727f, 17.866252899169922f, -1.4211273193359375f, +17.92770004272461f, 3.408331871032715f, 21.236106872558594f, 0.0f, 16.023082733154297f, 3.3047842979431152f, 13.2866849899292f, 1.696906566619873f, +19.68204689025879f, 2.6481103897094727f, 16.023082733154297f, -3.3047842979431152f, 23.774349212646484f, 0.0f, 15.28111457824707f, -1.002978801727295f, +17.866252899169922f, 1.4211273193359375f, 13.2866849899292f, -1.696906566619873f, 15.28111457824707f, 1.002978801727295f, 21.347461700439453f, 0.0f, +24.8713321685791f, 0.0f, 17.893489837646484f, 1.7231178283691406f, 15.521163940429688f, -0.910881519317627f, 16.89021873474121f, 0.567042350769043f, +17.893489837646484f, -1.7231178283691406f, 20.177183151245117f, 0.0f, 12.90981674194336f, -2.3743443489074707f, 15.726655960083008f, -1.9974627494812012f, +15.521163940429688f, 0.910881519317627f, 12.90981674194336f, 2.3743443489074707f, 18.44573402404785f, 0.0f, 13.89358901977539f, 1.0981106758117676f, +16.89021873474121f, -0.567042350769043f, 15.726655960083008f, 1.9974627494812012f, 13.89358901977539f, -1.0981106758117676f, 19.972095489501953f, 0.0f, +22.38611602783203f, 0.0f, 17.085006713867188f, -0.016710281372070312f, 15.66354751586914f, -2.448312282562256f, 16.54210090637207f, 0.5182576179504395f, +17.085006713867188f, 0.016710281372070312f, 19.739572525024414f, 0.0f, 14.10295295715332f, -2.3332629203796387f, 15.152469635009766f, 1.6918988227844238f, +15.66354751586914f, 2.448312282562256f, 14.10295295715332f, 2.3332629203796387f, 20.741830825805664f, 0.0f, 13.677050590515137f, 3.0832481384277344f, +16.54210090637207f, -0.5182576179504395f, 15.152469635009766f, -1.6918988227844238f, 13.677050590515137f, -3.0832481384277344f, 19.15237808227539f, 0.0f, +21.002670288085938f, 0.0f, 14.990205764770508f, 1.4174809455871582f, 14.872331619262695f, 2.7500863075256348f, 15.876102447509766f, -0.6719026565551758f, +14.990205764770508f, -1.4174809455871582f, 22.663694381713867f, 0.0f, 16.32114028930664f, -0.25516700744628906f, 15.762189865112305f, -0.44542503356933594f, +14.872331619262695f, -2.7500863075256348f, 16.32114028930664f, 0.25516700744628906f, 21.66021156311035f, 0.0f, 15.947420120239258f, -2.134106159210205f, +15.876102447509766f, 0.6719026565551758f, 15.762189865112305f, 0.44542503356933594f, 15.947420120239258f, 2.134106159210205f, 19.70169448852539f, 0.0f, +23.280502319335938f, 0.0f, 15.192937850952148f, -1.435758113861084f, 16.206260681152344f, -0.4689474105834961f, 16.09491729736328f, -1.5743393898010254f, +15.192937850952148f, 1.435758113861084f, 20.204118728637695f, 0.0f, 14.68304443359375f, -1.3532028198242188f, 14.890092849731445f, -1.22633695602417f, +16.206260681152344f, 0.4689474105834961f, 14.68304443359375f, 1.3532028198242188f, 19.763538360595703f, 0.0f, 14.552599906921387f, 0.420717716217041f, +16.09491729736328f, 1.5743393898010254f, 14.890092849731445f, 1.22633695602417f, 14.552599906921387f, -0.420717716217041f, 20.333520889282227f, 0.0f, +21.32689094543457f, 0.0f, 16.15463638305664f, 0.7852678298950195f, 16.492992401123047f, 2.5348715782165527f, 14.797313690185547f, 2.1171751022338867f, +16.15463638305664f, -0.7852678298950195f, 20.85955238342285f, 0.0f, 17.13924217224121f, 1.984778881072998f, 15.585090637207031f, 0.8460912704467773f, +16.492992401123047f, -2.5348715782165527f, 17.13924217224121f, -1.984778881072998f, 22.83735466003418f, 0.0f, 15.359646797180176f, -1.027414321899414f, +14.797313690185547f, -2.1171751022338867f, 15.585090637207031f, -0.8460912704467773f, 15.359646797180176f, 1.027414321899414f, 21.107099533081055f, 0.0f, +23.86609649658203f, 0.0f, 18.504411697387695f, 1.621847152709961f, 17.582839965820312f, 3.1694231033325195f, 17.71129035949707f, 0.10686111450195312f, +18.504411697387695f, -1.621847152709961f, 24.439916610717773f, 0.0f, 17.164825439453125f, 1.15681791305542f, 15.147628784179688f, -0.28224945068359375f, +17.582839965820312f, -3.1694231033325195f, 17.164825439453125f, -1.15681791305542f, 21.98402976989746f, 0.0f, 15.914824485778809f, -2.003032684326172f, +17.71129035949707f, -0.10686111450195312f, 15.147628784179688f, 0.28224945068359375f, 15.914824485778809f, 2.003032684326172f, 21.364906311035156f, 0.0f, +19.871156692504883f, 0.0f, 16.74314308166504f, 3.343639373779297f, 13.132715225219727f, 1.1086711883544922f, 15.381746292114258f, -0.2808494567871094f, +16.74314308166504f, -3.343639373779297f, 27.509130477905273f, 0.0f, 15.456799507141113f, -0.2134718894958496f, 19.57361602783203f, -3.4266252517700195f, +13.132715225219727f, -1.1086711883544922f, 15.456799507141113f, 0.2134718894958496f, 17.93489646911621f, 0.0f, 13.537858963012695f, -0.1607651710510254f, +15.381746292114258f, 0.2808494567871094f, 19.57361602783203f, 3.4266252517700195f, 13.537858963012695f, 0.1607651710510254f, 22.224212646484375f, 0.0f, +22.449783325195312f, 0.0f, 16.46270751953125f, 1.541947364807129f, 15.389622688293457f, -1.2317485809326172f, 17.47652816772461f, -3.0112133026123047f, +16.46270751953125f, -1.541947364807129f, 23.785194396972656f, 0.0f, 14.467316627502441f, -0.4593648910522461f, 16.604055404663086f, -2.5043067932128906f, +15.389622688293457f, 1.2317485809326172f, 14.467316627502441f, 0.4593648910522461f, 19.405885696411133f, 0.0f, 14.153586387634277f, -1.076000690460205f, +17.47652816772461f, 3.0112133026123047f, 16.604055404663086f, 2.5043067932128906f, 14.153586387634277f, 1.076000690460205f, 22.995542526245117f, 0.0f, +23.659652709960938f, 0.0f, 17.644472122192383f, 0.07744026184082031f, 16.983386993408203f, -0.9804859161376953f, 17.148082733154297f, -0.054584503173828125f, +17.644472122192383f, -0.07744026184082031f, 22.936912536621094f, 0.0f, 16.510725021362305f, 0.9160761833190918f, 16.920137405395508f, 0.8215689659118652f, +16.983386993408203f, 0.9804859161376953f, 16.510725021362305f, -0.9160761833190918f, 21.530906677246094f, 0.0f, 15.918073654174805f, 0.4082365036010742f, +17.148082733154297f, 0.054584503173828125f, 16.920137405395508f, -0.8215689659118652f, 15.918073654174805f, -0.4082365036010742f, 22.401248931884766f, 0.0f, +19.65812873840332f, 0.0f, 13.91363525390625f, -0.765254020690918f, 14.522821426391602f, -0.13027191162109375f, 15.823526382446289f, 0.15809011459350586f, +13.91363525390625f, 0.765254020690918f, 22.674528121948242f, 0.0f, 15.849822998046875f, 0.9936785697937012f, 15.357732772827148f, 0.7884860038757324f, +14.522821426391602f, 0.13027191162109375f, 15.849822998046875f, -0.9936785697937012f, 21.133167266845703f, 0.0f, 15.60604476928711f, -0.46016550064086914f, +15.823526382446289f, -0.15809011459350586f, 15.357732772827148f, -0.7884860038757324f, 15.60604476928711f, 0.46016550064086914f, 20.30949592590332f, 0.0f, +22.799997329711914f, 0.0f, 16.20953369140625f, -1.933971881866455f, 14.815479278564453f, -3.525521755218506f, 16.113643646240234f, -0.1022653579711914f, +16.20953369140625f, 1.933971881866455f, 19.652481079101562f, 0.0f, 13.779863357543945f, -0.695889949798584f, 14.40199089050293f, -0.8212456703186035f, +14.815479278564453f, 3.525521755218506f, 13.779863357543945f, 0.695889949798584f, 19.349945068359375f, 0.0f, 13.543289184570312f, 1.649960994720459f, +16.113643646240234f, 0.1022653579711914f, 14.40199089050293f, 0.8212456703186035f, 13.543289184570312f, -1.649960994720459f, 19.734365463256836f, 0.0f, +19.85536766052246f, 0.0f, 16.379207611083984f, 0.9147820472717285f, 15.322175979614258f, -0.9732475280761719f, 13.475900650024414f, -1.4686555862426758f, +16.379207611083984f, -0.9147820472717285f, 23.85618782043457f, 0.0f, 18.833789825439453f, -1.967893123626709f, 16.337329864501953f, -2.2540154457092285f, +15.322175979614258f, 0.9732475280761719f, 18.833789825439453f, 1.967893123626709f, 22.51734733581543f, 0.0f, 17.055908203125f, -0.17067909240722656f, +13.475900650024414f, 1.4686555862426758f, 16.337329864501953f, 2.2540154457092285f, 17.055908203125f, 0.17067909240722656f, 20.255979537963867f, 0.0f, +20.18259048461914f, 0.0f, 15.472188949584961f, -3.473006248474121f, 13.629162788391113f, -0.3836679458618164f, 16.10544204711914f, -2.2226223945617676f, +15.472188949584961f, 3.473006248474121f, 21.59741973876953f, 0.0f, 14.010796546936035f, 2.0361461639404297f, 15.060954093933105f, -0.14653873443603516f, +13.629162788391113f, 0.3836679458618164f, 14.010796546936035f, -2.0361461639404297f, 21.681581497192383f, 0.0f, 15.187061309814453f, -3.603879451751709f, +16.10544204711914f, 2.2226223945617676f, 15.060954093933105f, 0.14653873443603516f, 15.187061309814453f, 3.603879451751709f, 22.937416076660156f, 0.0f, +24.517822265625f, 0.0f, 17.09076690673828f, 3.144324779510498f, 18.8651065826416f, 2.286344528198242f, 17.89851951599121f, 2.1832284927368164f, +17.09076690673828f, -3.144324779510498f, 22.85783576965332f, 0.0f, 15.929088592529297f, -1.3987421989440918f, 17.57402801513672f, -1.9225883483886719f, +18.8651065826416f, -2.286344528198242f, 15.929088592529297f, 1.3987421989440918f, 23.210189819335938f, 0.0f, 17.57235336303711f, 1.181868076324463f, +17.89851951599121f, -2.1832284927368164f, 17.57402801513672f, 1.9225883483886719f, 17.57235336303711f, -1.181868076324463f, 22.265995025634766f, 0.0f, +18.52529525756836f, 0.0f, 13.529010772705078f, 4.121129512786865f, 13.523946762084961f, 2.5757856369018555f, 12.76553726196289f, 3.2435660362243652f, +13.529010772705078f, -4.121129512786865f, 21.043460845947266f, 0.0f, 16.37519073486328f, -3.0538454055786133f, 15.001075744628906f, -2.882059097290039f, +13.523946762084961f, -2.5757856369018555f, 16.37519073486328f, 3.0538454055786133f, 21.164600372314453f, 0.0f, 14.13100814819336f, 0.4783153533935547f, +12.76553726196289f, -3.2435660362243652f, 15.001075744628906f, 2.882059097290039f, 14.13100814819336f, -0.4783153533935547f, 17.99212074279785f, 0.0f, +23.916305541992188f, 0.0f, 16.930696487426758f, -2.6385722160339355f, 17.96435546875f, 1.4977083206176758f, 15.800511360168457f, -1.0567898750305176f, +16.930696487426758f, 2.6385722160339355f, 20.32594871520996f, 0.0f, 15.423760414123535f, 3.9068078994750977f, 15.42624282836914f, 2.6363301277160645f, +17.96435546875f, -1.4977083206176758f, 15.423760414123535f, -3.9068078994750977f, 23.055438995361328f, 0.0f, 14.976785659790039f, -3.0124173164367676f, +15.800511360168457f, 1.0567898750305176f, 15.42624282836914f, -2.6363301277160645f, 14.976785659790039f, 3.0124173164367676f, 21.16156768798828f, 0.0f, +23.704097747802734f, 0.0f, 15.85894775390625f, -0.2608785629272461f, 17.188236236572266f, 1.712191104888916f, 15.999988555908203f, 3.4866013526916504f, +15.85894775390625f, 0.2608785629272461f, 19.72802734375f, 0.0f, 14.364541053771973f, 1.1947474479675293f, 13.7545166015625f, 0.605522632598877f, +17.188236236572266f, -1.712191104888916f, 14.364541053771973f, -1.1947474479675293f, 20.860916137695312f, 0.0f, 14.492664337158203f, 1.0920777320861816f, +15.999988555908203f, -3.4866013526916504f, 13.7545166015625f, -0.605522632598877f, 14.492664337158203f, -1.0920777320861816f, 19.893390655517578f, 0.0f, +18.566509246826172f, 0.0f, 16.456369400024414f, -1.0383591651916504f, 14.324183464050293f, 0.5429544448852539f, 15.534749031066895f, 0.5591530799865723f, +16.456369400024414f, 1.0383591651916504f, 26.736557006835938f, 0.0f, 18.558134078979492f, 4.256499767303467f, 21.22332191467285f, 3.530202865600586f, +14.324183464050293f, -0.5429544448852539f, 18.558134078979492f, -4.256499767303467f, 23.909391403198242f, 0.0f, 17.447998046875f, -0.44849109649658203f, +15.534749031066895f, -0.5591530799865723f, 21.22332191467285f, -3.530202865600586f, 17.447998046875f, 0.44849109649658203f, 23.920982360839844f, 0.0f, +21.548603057861328f, 0.0f, 13.30776596069336f, -0.6173553466796875f, 17.736778259277344f, 0.663640022277832f, 17.06753158569336f, 2.695591449737549f, +13.30776596069336f, 0.6173553466796875f, 17.8670597076416f, 0.0f, 13.401776313781738f, 0.16095304489135742f, 13.760469436645508f, 2.7757067680358887f, +17.736778259277344f, -0.663640022277832f, 13.401776313781738f, -0.16095304489135742f, 23.519723892211914f, 0.0f, 17.80951690673828f, 1.0558652877807617f, +17.06753158569336f, -2.695591449737549f, 13.760469436645508f, -2.7757067680358887f, 17.80951690673828f, -1.0558652877807617f, 22.58300018310547f, 0.0f, +24.615934371948242f, 0.0f, 15.204246520996094f, -1.2858409881591797f, 16.288236618041992f, -0.8260030746459961f, 16.154239654541016f, 0.20879173278808594f, +15.204246520996094f, 1.2858409881591797f, 16.222869873046875f, 0.0f, 12.068811416625977f, -0.7760629653930664f, 13.344903945922852f, 1.0873637199401855f, +16.288236618041992f, 0.8260030746459961f, 12.068811416625977f, 0.7760629653930664f, 20.00895881652832f, 0.0f, 14.55086898803711f, -0.11778736114501953f, +16.154239654541016f, -0.20879173278808594f, 13.344903945922852f, -1.0873637199401855f, 14.55086898803711f, 0.11778736114501953f, 20.095516204833984f, 0.0f, +22.02332305908203f, 0.0f, 16.366682052612305f, -1.2170476913452148f, 17.876693725585938f, 0.5230684280395508f, 14.88322925567627f, -0.05163097381591797f, +16.366682052612305f, 1.2170476913452148f, 21.917724609375f, 0.0f, 19.190128326416016f, 2.425320625305176f, 14.886526107788086f, 0.2229747772216797f, +17.876693725585938f, -0.5230684280395508f, 19.190128326416016f, -2.425320625305176f, 28.4399471282959f, 0.0f, 17.123804092407227f, -1.686389446258545f, +14.88322925567627f, 0.05163097381591797f, 14.886526107788086f, -0.2229747772216797f, 17.123804092407227f, 1.686389446258545f, 18.674819946289062f, 0.0f, +23.469139099121094f, 0.0f, 17.559894561767578f, 1.7193164825439453f, 18.0609130859375f, 0.5266885757446289f, 17.105056762695312f, 2.387969970703125f, +17.559894561767578f, -1.7193164825439453f, 25.545804977416992f, 0.0f, 20.521547317504883f, -0.12798404693603516f, 19.03376579284668f, 1.6387672424316406f, +18.0609130859375f, -0.5266885757446289f, 20.521547317504883f, 0.12798404693603516f, 25.032480239868164f, 0.0f, 17.20720672607422f, 2.9107937812805176f, +17.105056762695312f, -2.387969970703125f, 19.03376579284668f, -1.6387672424316406f, 17.20720672607422f, -2.9107937812805176f, 22.068164825439453f, 0.0f, +20.89256477355957f, 0.0f, 16.943058013916016f, 0.26320362091064453f, 15.120830535888672f, 0.0373687744140625f, 17.379669189453125f, -1.1355829238891602f, +16.943058013916016f, -0.26320362091064453f, 24.91421890258789f, 0.0f, 18.431663513183594f, 1.4376354217529297f, 20.833145141601562f, -1.6239032745361328f, +15.120830535888672f, -0.0373687744140625f, 18.431663513183594f, -1.4376354217529297f, 24.73811149597168f, 0.0f, 21.215259552001953f, -1.2147903442382812f, +17.379669189453125f, 1.1355829238891602f, 20.833145141601562f, 1.6239032745361328f, 21.215259552001953f, 1.2147903442382812f, 27.337596893310547f, 0.0f, +26.00118637084961f, 0.0f, 16.40736961364746f, 2.867128849029541f, 17.913166046142578f, -0.8670902252197266f, 18.597862243652344f, -0.5085773468017578f, +16.40736961364746f, -2.867128849029541f, 20.266525268554688f, 0.0f, 16.00124168395996f, -2.708531379699707f, 16.97739028930664f, -2.8679795265197754f, +17.913166046142578f, 0.8670902252197266f, 16.00124168395996f, 2.708531379699707f, 21.153703689575195f, 0.0f, 16.89202117919922f, 0.07211780548095703f, +18.597862243652344f, 0.5085773468017578f, 16.97739028930664f, 2.8679795265197754f, 16.89202117919922f, -0.07211780548095703f, 24.213420867919922f, 0.0f, +21.596914291381836f, 0.0f, 17.126407623291016f, -0.7002582550048828f, 13.308145523071289f, 0.5226917266845703f, 15.876094818115234f, -1.4352517127990723f, +17.126407623291016f, 0.7002582550048828f, 23.163589477539062f, 0.0f, 13.476672172546387f, -0.8218178749084473f, 16.320920944213867f, -1.3323793411254883f, +13.308145523071289f, -0.5226917266845703f, 13.476672172546387f, 0.8218178749084473f, 16.87248420715332f, 0.0f, 14.59999942779541f, -2.063549041748047f, +15.876094818115234f, 1.4352517127990723f, 16.320920944213867f, 1.3323793411254883f, 14.59999942779541f, 2.063549041748047f, 23.71837043762207f, 0.0f, +23.411666870117188f, 0.0f, 16.353443145751953f, -0.7244706153869629f, 18.9390869140625f, -0.9639301300048828f, 17.894317626953125f, 0.1347484588623047f, +16.353443145751953f, 0.7244706153869629f, 18.779436111450195f, 0.0f, 16.69635009765625f, 1.0941815376281738f, 15.475257873535156f, 1.8400816917419434f, +18.9390869140625f, 0.9639301300048828f, 16.69635009765625f, -1.0941815376281738f, 22.59479331970215f, 0.0f, 18.69055938720703f, 0.7254095077514648f, +17.894317626953125f, -0.1347484588623047f, 15.475257873535156f, -1.8400816917419434f, 18.69055938720703f, -0.7254095077514648f, 25.335819244384766f, 0.0f, +21.697378158569336f, 0.0f, 18.582595825195312f, 1.4628753662109375f, 17.01525115966797f, 1.818990707397461f, 17.259994506835938f, 0.7559194564819336f, +18.582595825195312f, -1.4628753662109375f, 23.825971603393555f, 0.0f, 18.36219024658203f, -0.23453426361083984f, 16.183786392211914f, -0.4878883361816406f, +17.01525115966797f, -1.818990707397461f, 18.36219024658203f, 0.23453426361083984f, 23.519746780395508f, 0.0f, 16.53221321105957f, -1.5394749641418457f, +17.259994506835938f, -0.7559194564819336f, 16.183786392211914f, 0.4878883361816406f, 16.53221321105957f, 1.5394749641418457f, 20.482711791992188f, 0.0f, +21.78971290588379f, 0.0f, 15.084455490112305f, 1.8960356712341309f, 13.222701072692871f, 0.1649174690246582f, 18.249950408935547f, 3.286966323852539f, +15.084455490112305f, -1.8960356712341309f, 21.616762161254883f, 0.0f, 12.269763946533203f, -2.5525336265563965f, 17.68858528137207f, -0.579625129699707f, +13.222701072692871f, -0.1649174690246582f, 12.269763946533203f, 2.5525336265563965f, 15.24647331237793f, 0.0f, 14.598503112792969f, 2.675394058227539f, +18.249950408935547f, -3.286966323852539f, 17.68858528137207f, 0.579625129699707f, 14.598503112792969f, -2.675394058227539f, 24.71462059020996f, 0.0f, +18.756118774414062f, 0.0f, 15.247663497924805f, 1.166663646697998f, 14.51630687713623f, -1.7954659461975098f, 14.40336799621582f, 1.6965699195861816f, +15.247663497924805f, -1.166663646697998f, 24.870946884155273f, 0.0f, 18.367984771728516f, -4.261307716369629f, 17.708005905151367f, 1.4381828308105469f, +14.51630687713623f, 1.7954659461975098f, 18.367984771728516f, 4.261307716369629f, 22.37517547607422f, 0.0f, 16.126556396484375f, 4.162751197814941f, +14.40336799621582f, -1.6965699195861816f, 17.708005905151367f, -1.4381828308105469f, 16.126556396484375f, -4.162751197814941f, 21.79039192199707f, 0.0f, +19.966524124145508f, 0.0f, 13.978801727294922f, 0.6308584213256836f, 13.333974838256836f, -0.5239400863647461f, 15.223443984985352f, 0.6955866813659668f, +13.978801727294922f, -0.6308584213256836f, 20.61100196838379f, 0.0f, 13.989616394042969f, 0.19777488708496094f, 15.080439567565918f, 0.5315065383911133f, +13.333974838256836f, 0.5239400863647461f, 13.989616394042969f, -0.19777488708496094f, 20.039804458618164f, 0.0f, 15.697820663452148f, -0.8908867835998535f, +15.223443984985352f, -0.6955866813659668f, 15.080439567565918f, -0.5315065383911133f, 15.697820663452148f, 0.8908867835998535f, 23.52448081970215f, 0.0f, +22.168548583984375f, 0.0f, 14.957574844360352f, -0.4506216049194336f, 16.130605697631836f, 1.1894712448120117f, 16.028972625732422f, 1.5670642852783203f, +14.957574844360352f, 0.4506216049194336f, 19.807212829589844f, 0.0f, 17.35369110107422f, 2.134904384613037f, 13.919153213500977f, 2.4787888526916504f, +16.130605697631836f, -1.1894712448120117f, 17.35369110107422f, -2.134904384613037f, 23.010725021362305f, 0.0f, 16.46804428100586f, 0.5132451057434082f, +16.028972625732422f, -1.5670642852783203f, 13.919153213500977f, -2.4787888526916504f, 16.46804428100586f, -0.5132451057434082f, 20.489248275756836f, 0.0f, +22.770099639892578f, 0.0f, 18.72587013244629f, 1.8425278663635254f, 17.160741806030273f, 1.9099116325378418f, 16.352413177490234f, 3.2327218055725098f, +18.72587013244629f, -1.8425278663635254f, 24.063417434692383f, 0.0f, 18.23518180847168f, 0.0200347900390625f, 17.114421844482422f, 0.41680240631103516f, +17.160741806030273f, -1.9099116325378418f, 18.23518180847168f, -0.0200347900390625f, 22.293582916259766f, 0.0f, 16.96527862548828f, 0.3287386894226074f, +16.352413177490234f, -3.2327218055725098f, 17.114421844482422f, -0.41680240631103516f, 16.96527862548828f, -0.3287386894226074f, 20.97092056274414f, 0.0f, +20.545658111572266f, 0.0f, 14.681381225585938f, -1.3886237144470215f, 16.098812103271484f, 0.5742588043212891f, 17.43914031982422f, 1.4859914779663086f, +14.681381225585938f, 1.3886237144470215f, 17.543825149536133f, 0.0f, 15.291704177856445f, 0.7088918685913086f, 17.134559631347656f, 4.131263732910156f, +16.098812103271484f, -0.5742588043212891f, 15.291704177856445f, -0.7088918685913086f, 22.754579544067383f, 0.0f, 20.498607635498047f, 4.19367790222168f, +17.43914031982422f, -1.4859914779663086f, 17.134559631347656f, -4.131263732910156f, 20.498607635498047f, -4.19367790222168f, 28.277984619140625f, 0.0f, +22.351409912109375f, 0.0f, 14.541938781738281f, 2.0549116134643555f, 16.903076171875f, 0.8656044006347656f, 16.265399932861328f, 0.8650631904602051f, +14.541938781738281f, -2.0549116134643555f, 17.715234756469727f, 0.0f, 14.480724334716797f, -1.3758063316345215f, 14.597700119018555f, -2.235351085662842f, +16.903076171875f, -0.8656044006347656f, 14.480724334716797f, 1.3758063316345215f, 22.98236083984375f, 0.0f, 16.526987075805664f, 0.6418476104736328f, +16.265399932861328f, -0.8650631904602051f, 14.597700119018555f, 2.235351085662842f, 16.526987075805664f, -0.6418476104736328f, 22.19980239868164f, 0.0f, +20.30024528503418f, 0.0f, 15.858031272888184f, -1.1120452880859375f, 16.522884368896484f, 1.6769413948059082f, 14.799956321716309f, 1.1932296752929688f, +15.858031272888184f, 1.1120452880859375f, 23.468156814575195f, 0.0f, 17.235382080078125f, 3.012862205505371f, 19.094844818115234f, 1.5177383422851562f, +16.522884368896484f, -1.6769413948059082f, 17.235382080078125f, -3.012862205505371f, 22.094860076904297f, 0.0f, 16.11214828491211f, -2.208981513977051f, +14.799956321716309f, -1.1932296752929688f, 19.094844818115234f, -1.5177383422851562f, 16.11214828491211f, 2.208981513977051f, 21.75168800354004f, 0.0f, +21.879064559936523f, 0.0f, 16.615615844726562f, -0.5341253280639648f, 16.300193786621094f, -2.837353229522705f, 16.435379028320312f, -0.4719552993774414f, +16.615615844726562f, 0.5341253280639648f, 24.040151596069336f, 0.0f, 15.479832649230957f, -1.6522068977355957f, 16.59063148498535f, 0.0002384185791015625f, +16.300193786621094f, 2.837353229522705f, 15.479832649230957f, 1.6522068977355957f, 21.91326904296875f, 0.0f, 15.948298454284668f, 1.4067192077636719f, +16.435379028320312f, 0.4719552993774414f, 16.59063148498535f, -0.0002384185791015625f, 15.948298454284668f, -1.4067192077636719f, 22.330936431884766f, 0.0f, +19.537736892700195f, 0.0f, 15.75684642791748f, -1.4128718376159668f, 13.170047760009766f, 0.5554347038269043f, 17.940921783447266f, 2.3264083862304688f, +15.75684642791748f, 1.4128718376159668f, 20.115833282470703f, 0.0f, 14.067028045654297f, 0.9059548377990723f, 16.362451553344727f, 2.931865692138672f, +13.170047760009766f, -0.5554347038269043f, 14.067028045654297f, -0.9059548377990723f, 17.698638916015625f, 0.0f, 13.75208568572998f, 0.5932283401489258f, +17.940921783447266f, -2.3264083862304688f, 16.362451553344727f, -2.931865692138672f, 13.75208568572998f, -0.5932283401489258f, 23.83642578125f, 0.0f, +24.44513702392578f, 0.0f, 16.723482131958008f, 0.6425619125366211f, 18.8398380279541f, 0.015585899353027344f, 18.02106475830078f, -0.23580265045166016f, +16.723482131958008f, -0.6425619125366211f, 21.851318359375f, 0.0f, 17.104938507080078f, -2.0445022583007812f, 15.62027645111084f, -0.9215970039367676f, +18.8398380279541f, -0.015585899353027344f, 17.104938507080078f, 2.0445022583007812f, 24.584896087646484f, 0.0f, 16.005712509155273f, -1.0969018936157227f, +18.02106475830078f, 0.23580265045166016f, 15.62027645111084f, 0.9215970039367676f, 16.005712509155273f, 1.0969018936157227f, 21.176776885986328f, 0.0f, +17.57014274597168f, 0.0f, 14.380300521850586f, 1.7514309883117676f, 14.160152435302734f, 1.1749582290649414f, 12.764008522033691f, 0.4643545150756836f, +14.380300521850586f, -1.7514309883117676f, 20.030797958374023f, 0.0f, 15.42302131652832f, -0.7721529006958008f, 12.91325569152832f, -0.4170370101928711f, +14.160152435302734f, -1.1749582290649414f, 15.42302131652832f, 0.7721529006958008f, 21.15298843383789f, 0.0f, 15.187512397766113f, -0.1256403923034668f, +12.764008522033691f, -0.4643545150756836f, 12.91325569152832f, 0.4170370101928711f, 15.187512397766113f, 0.1256403923034668f, 18.000320434570312f, 0.0f, +24.41747283935547f, 0.0f, 16.613454818725586f, 2.9913992881774902f, 15.86288833618164f, -0.8680601119995117f, 18.233173370361328f, 1.9475288391113281f, +16.613454818725586f, -2.9913992881774902f, 23.273292541503906f, 0.0f, 13.590555191040039f, -1.0894136428833008f, 18.326139450073242f, 0.18340778350830078f, +15.86288833618164f, 0.8680601119995117f, 13.590555191040039f, 1.0894136428833008f, 19.224729537963867f, 0.0f, 16.844058990478516f, 2.426448345184326f, +18.233173370361328f, -1.9475288391113281f, 18.326139450073242f, -0.18340778350830078f, 16.844058990478516f, -2.426448345184326f, 25.604393005371094f, 0.0f, +20.638484954833984f, 0.0f, 14.94726276397705f, -2.194331645965576f, 16.41602325439453f, -0.46245574951171875f, 17.187292098999023f, -2.6609230041503906f, +14.94726276397705f, 2.194331645965576f, 22.337984085083008f, 0.0f, 16.794818878173828f, 0.8455219268798828f, 18.26315689086914f, -2.0682849884033203f, +16.41602325439453f, 0.46245574951171875f, 16.794818878173828f, -0.8455219268798828f, 23.06778907775879f, 0.0f, 18.19284439086914f, -3.8802919387817383f, +17.187292098999023f, 2.6609230041503906f, 18.26315689086914f, 2.0682849884033203f, 18.19284439086914f, 3.8802919387817383f, 26.16499137878418f, 0.0f, +22.003551483154297f, 0.0f, 16.589323043823242f, 0.03010272979736328f, 16.983501434326172f, -0.4762544631958008f, 17.44463539123535f, -1.2149982452392578f, +16.589323043823242f, -0.03010272979736328f, 22.34552764892578f, 0.0f, 16.80978775024414f, -0.6717538833618164f, 18.581838607788086f, -1.6014175415039062f, +16.983501434326172f, 0.4762544631958008f, 16.80978775024414f, 0.6717538833618164f, 23.17429542541504f, 0.0f, 18.67078971862793f, -1.538893699645996f, +17.44463539123535f, 1.2149982452392578f, 18.581838607788086f, 1.6014175415039062f, 18.67078971862793f, 1.538893699645996f, 24.290443420410156f, 0.0f, +19.79700469970703f, 0.0f, 14.992420196533203f, 5.579376697540283f, 13.452474594116211f, 1.2792086601257324f, 14.489317893981934f, 0.8654975891113281f, +14.992420196533203f, -5.579376697540283f, 21.15625f, 0.0f, 14.224156379699707f, -2.9615731239318848f, 14.317689895629883f, -3.6753296852111816f, +13.452474594116211f, -1.2792086601257324f, 14.224156379699707f, 2.9615731239318848f, 20.983108520507812f, 0.0f, 14.005792617797852f, -0.1283254623413086f, +14.489317893981934f, -0.8654975891113281f, 14.317689895629883f, 3.6753296852111816f, 14.005792617797852f, 0.1283254623413086f, 18.71407699584961f, 0.0f, +24.166046142578125f, 0.0f, 18.734642028808594f, 0.9492931365966797f, 17.037338256835938f, -0.32271766662597656f, 17.781543731689453f, 2.548583507537842f, +18.734642028808594f, -0.9492931365966797f, 25.994871139526367f, 0.0f, 20.141250610351562f, -1.2515830993652344f, 20.713899612426758f, 1.048008918762207f, +17.037338256835938f, 0.32271766662597656f, 20.141250610351562f, 1.2515830993652344f, 23.74345588684082f, 0.0f, 17.802169799804688f, 3.222334384918213f, +17.781543731689453f, -2.548583507537842f, 20.713899612426758f, -1.048008918762207f, 17.802169799804688f, -3.222334384918213f, 24.650211334228516f, 0.0f, +26.946487426757812f, 0.0f, 16.535846710205078f, -1.0256295204162598f, 19.96299171447754f, 2.411512851715088f, 19.37932014465332f, 1.6759376525878906f, +16.535846710205078f, 1.0256295204162598f, 16.459304809570312f, 0.0f, 15.793869972229004f, 2.262589454650879f, 14.442221641540527f, 1.9158010482788086f, +19.96299171447754f, -2.411512851715088f, 15.793869972229004f, -2.262589454650879f, 23.68314552307129f, 0.0f, 18.20061492919922f, 0.18914127349853516f, +19.37932014465332f, -1.6759376525878906f, 14.442221641540527f, -1.9158010482788086f, 18.20061492919922f, -0.18914127349853516f, 23.666715621948242f, 0.0f, +19.278736114501953f, 0.0f, 12.580656051635742f, 0.8043432235717773f, 14.649720191955566f, 0.9063796997070312f, 13.079055786132812f, -1.674527645111084f, +12.580656051635742f, -0.8043432235717773f, 15.836713790893555f, 0.0f, 12.894441604614258f, 1.1554656028747559f, 12.838397979736328f, -2.5969672203063965f, +14.649720191955566f, -0.9063796997070312f, 12.894441604614258f, -1.1554656028747559f, 22.073633193969727f, 0.0f, 14.27613639831543f, -2.954784870147705f, +13.079055786132812f, 1.674527645111084f, 12.838397979736328f, 2.5969672203063965f, 14.27613639831543f, 2.954784870147705f, 18.925800323486328f, 0.0f,}; + +float In_b[16384] = { +0.260132372379303f, 0.5707322955131531f, 0.4444528818130493f, 0.07054164260625839f, 0.9749433994293213f, 0.6471541523933411f, 0.6466342210769653f, 0.7703948616981506f, +0.029497316107153893f, 0.33796918392181396f, 0.8483118414878845f, 0.07270840555429459f, 0.2525821328163147f, 0.7774352431297302f, 0.7526606917381287f, 0.7326483130455017f, +0.14816832542419434f, 0.546739935874939f, 0.20509812235832214f, 0.6329513788223267f, 0.6131656169891357f, 0.5271725654602051f, 0.5979462265968323f, 0.37513595819473267f, +0.7042052149772644f, 0.600959300994873f, 0.5821767449378967f, 0.7028127312660217f, 0.24254417419433594f, 0.9931508898735046f, 0.5802956819534302f, 0.6959530711174011f, +0.8865273594856262f, 0.161607563495636f, 0.43906518816947937f, 0.638484001159668f, 0.7844561338424683f, 0.6581523418426514f, 0.9310284852981567f, 0.27994081377983093f, +0.19498811662197113f, 0.6031240820884705f, 0.30786436796188354f, 0.00509768957272172f, 0.0918891653418541f, 0.5353398323059082f, 0.8476703763008118f, 0.43660449981689453f, +0.21121041476726532f, 0.12219154834747314f, 0.03435653820633888f, 0.9249069094657898f, 0.3841055631637573f, 0.19823607802391052f, 0.24406927824020386f, 0.6927865147590637f, +0.20966118574142456f, 0.5155885219573975f, 0.7182762026786804f, 0.469232439994812f, 0.6597546935081482f, 0.6690489053726196f, 0.5960277318954468f, 0.8119127750396729f, +0.2162567526102066f, 0.731680154800415f, 0.48179829120635986f, 0.5652619004249573f, 0.9355280995368958f, 0.25090131163597107f, 0.46436405181884766f, 0.40754255652427673f, +0.9235775470733643f, 0.13431240618228912f, 0.3477383553981781f, 0.9415425658226013f, 0.11287584900856018f, 0.42129504680633545f, 0.1513361781835556f, 0.8501724600791931f, +0.5014679431915283f, 0.36004772782325745f, 0.07427117228507996f, 0.5750910043716431f, 0.5383840203285217f, 0.49414315819740295f, 0.052318550646305084f, 0.5777069926261902f, +0.6740008592605591f, 0.6248106360435486f, 0.38829946517944336f, 0.8043050765991211f, 0.18481279909610748f, 0.5733885765075684f, 0.14995570480823517f, 0.06299673020839691f, +0.11195381730794907f, 0.2397424578666687f, 0.21025337278842926f, 0.5842437148094177f, 0.5224104523658752f, 0.6888477206230164f, 0.49020811915397644f, 0.06942857056856155f, +0.7516987323760986f, 0.42029011249542236f, 0.18266965448856354f, 0.11546182632446289f, 0.8245916962623596f, 0.15693141520023346f, 0.3794705271720886f, 0.3831562399864197f, +0.3560028672218323f, 0.824709951877594f, 0.8693404197692871f, 0.6031365394592285f, 0.9639285206794739f, 0.45341548323631287f, 0.7895622849464417f, 0.9707425832748413f, +0.035333313047885895f, 0.696482241153717f, 0.8627527952194214f, 0.24336913228034973f, 0.5621689558029175f, 0.9925902485847473f, 0.5552250742912292f, 0.7857624888420105f, +0.39375054836273193f, 0.28743574023246765f, 0.133693665266037f, 0.8070454001426697f, 0.6356288194656372f, 0.03731667995452881f, 0.48691195249557495f, 0.4488494396209717f, +0.8457177877426147f, 0.5933952927589417f, 0.013735508546233177f, 0.7754847407341003f, 0.6644737720489502f, 0.7047550082206726f, 0.633549153804779f, 0.7450068593025208f, +0.9646123051643372f, 0.3948090970516205f, 0.3153781592845917f, 0.8736077547073364f, 0.3969990015029907f, 0.3712220788002014f, 0.226725235581398f, 0.33575305342674255f, +0.6361620426177979f, 0.6191737651824951f, 0.6475685238838196f, 0.49397340416908264f, 0.7149061560630798f, 0.9586127400398254f, 0.5685760378837585f, 0.5657870173454285f, +0.9322713017463684f, 0.8024845123291016f, 0.7904845476150513f, 0.5931554436683655f, 0.31340235471725464f, 0.24407550692558289f, 0.6476615071296692f, 0.09683673828840256f, +0.4222886860370636f, 0.18725599348545074f, 0.14528876543045044f, 0.35258159041404724f, 0.8332845568656921f, 0.18140558898448944f, 0.03147735446691513f, 0.435569703578949f, +0.3423950970172882f, 0.03285568207502365f, 0.9513221979141235f, 0.10511583834886551f, 0.07108809053897858f, 0.9590820074081421f, 0.7884477972984314f, 0.6179443597793579f, +0.004230997059494257f, 0.45847997069358826f, 0.036354683339595795f, 0.18402406573295593f, 0.22960220277309418f, 0.6766432523727417f, 0.03956723213195801f, 0.7498965263366699f, +0.2291453778743744f, 0.17658008635044098f, 0.042823806405067444f, 0.09280847012996674f, 0.1323080062866211f, 0.5374109148979187f, 0.4943106770515442f, 0.10598446428775787f, +0.5252142548561096f, 0.6624343991279602f, 0.07220210134983063f, 0.859338641166687f, 0.27305811643600464f, 0.5577791333198547f, 0.10476710647344589f, 0.9802858233451843f, +0.5845445990562439f, 0.428905189037323f, 0.4821001887321472f, 0.03597239777445793f, 0.9046484231948853f, 0.660953938961029f, 0.6708701848983765f, 0.9264857769012451f, +0.5162613987922668f, 0.16560901701450348f, 0.5225597023963928f, 0.5110792517662048f, 0.38638344407081604f, 0.3851616382598877f, 0.03341478109359741f, 0.5718023777008057f, +0.13993030786514282f, 0.039045143872499466f, 0.34674564003944397f, 0.7156946659088135f, 0.7598434090614319f, 0.8409054279327393f, 0.8308669328689575f, 0.4344772398471832f, +0.08213742822408676f, 0.49884262681007385f, 0.08546571433544159f, 0.24172288179397583f, 0.29428064823150635f, 0.14786477386951447f, 0.3559037744998932f, 0.14495833218097687f, +0.22441962361335754f, 0.533079206943512f, 0.9181413054466248f, 0.005416100844740868f, 0.9157490134239197f, 0.8251500725746155f, 0.8143640160560608f, 0.04182540252804756f, +0.06305885314941406f, 0.290314644575119f, 0.9778771996498108f, 0.5867727398872375f, 0.6185789704322815f, 0.6682056784629822f, 0.21531392633914948f, 0.7169933319091797f, +0.9769085645675659f, 0.7740219235420227f, 0.2930079698562622f, 0.5797714591026306f, 0.32422006130218506f, 0.9443597793579102f, 0.7508134245872498f, 0.2314670979976654f, +0.9840885996818542f, 0.6504086256027222f, 0.3885771632194519f, 0.9998204708099365f, 0.6381199955940247f, 0.29896610975265503f, 0.4194517135620117f, 0.8588179349899292f, +0.03280193358659744f, 0.3862091600894928f, 0.8464667797088623f, 0.41049182415008545f, 0.7388141751289368f, 0.8288244009017944f, 0.32289478182792664f, 0.42766305804252625f, +0.5033539533615112f, 0.458447128534317f, 0.8563097715377808f, 0.9777584075927734f, 0.7575048804283142f, 0.0949457436800003f, 0.8161789774894714f, 0.03223893418908119f, +0.7494729161262512f, 0.5279968976974487f, 0.6718178987503052f, 0.17685839533805847f, 0.011923138983547688f, 0.9764546751976013f, 0.2864517271518707f, 0.9377442002296448f, +0.3083960711956024f, 0.13508524000644684f, 0.44741642475128174f, 0.4446461796760559f, 0.9166682362556458f, 0.8664417266845703f, 0.10099156200885773f, 0.7779579758644104f, +0.7892209887504578f, 0.7583697438240051f, 0.04079050570726395f, 0.35919684171676636f, 0.885735034942627f, 0.8646446466445923f, 0.21256546676158905f, 0.25833216309547424f, +0.744265615940094f, 0.08095725625753403f, 0.31209930777549744f, 0.8895136713981628f, 0.4524472653865814f, 0.4535287022590637f, 0.05452015623450279f, 0.5392270684242249f, +0.28901606798171997f, 0.5457925200462341f, 0.7327605485916138f, 0.11211490631103516f, 0.8819296956062317f, 0.4102199077606201f, 0.39940494298934937f, 0.8966069221496582f, +0.38398662209510803f, 0.6645416021347046f, 0.5740501284599304f, 0.9683557748794556f, 0.036853499710559845f, 0.33104875683784485f, 0.849036693572998f, 0.7586569786071777f, +0.5478441119194031f, 0.2585814893245697f, 0.36323800683021545f, 0.8693013191223145f, 0.22263804078102112f, 0.2132442593574524f, 0.10590023547410965f, 0.8052467107772827f, +0.5699171423912048f, 0.8806122541427612f, 0.7215487360954285f, 0.28348278999328613f, 0.912715494632721f, 0.6884876489639282f, 0.4031292796134949f, 0.18060237169265747f, +0.45519840717315674f, 0.19293658435344696f, 0.18224653601646423f, 0.6263710856437683f, 0.48668989539146423f, 0.8236882090568542f, 0.8950967788696289f, 0.12641116976737976f, +0.2631567120552063f, 0.5753070116043091f, 0.2400580644607544f, 0.5303892493247986f, 0.5729236602783203f, 0.7059364914894104f, 0.13457636535167694f, 0.9271267056465149f, +0.6600397229194641f, 0.6881739497184753f, 0.5007848143577576f, 0.8928514719009399f, 0.2957634925842285f, 0.39218688011169434f, 0.3704966604709625f, 0.9525309801101685f, +0.9229986667633057f, 0.0785030871629715f, 0.6559414267539978f, 0.7390230298042297f, 0.7102553844451904f, 0.19702303409576416f, 0.14498083293437958f, 0.15032964944839478f, +0.09708970040082932f, 0.1736590564250946f, 0.5966628193855286f, 0.4211288094520569f, 0.6431525945663452f, 0.1649881899356842f, 0.39234253764152527f, 0.9826042056083679f, +0.42907482385635376f, 0.892221212387085f, 0.8990438580513f, 0.668954610824585f, 0.30030888319015503f, 0.3952442407608032f, 0.4508737325668335f, 0.6494953036308289f, +0.3359583616256714f, 0.8206698894500732f, 0.004569157026708126f, 0.5446035265922546f, 0.5741413235664368f, 0.35784515738487244f, 0.6479583382606506f, 0.971043050289154f, +0.306821346282959f, 0.35655227303504944f, 0.5460143685340881f, 0.25937435030937195f, 0.8371931910514832f, 0.12577977776527405f, 0.4903062582015991f, 0.3746598958969116f, +0.9329313039779663f, 0.11994566023349762f, 0.8841805458068848f, 0.5386922955513f, 0.5794939398765564f, 0.12830430269241333f, 0.19747287034988403f, 0.3344869017601013f, +0.044406477361917496f, 0.9393004179000854f, 0.9158236980438232f, 0.6874189376831055f, 0.01992063969373703f, 0.9658291935920715f, 0.46477314829826355f, 0.5520534515380859f, +0.10097502917051315f, 0.05385761335492134f, 0.9938157796859741f, 0.16119568049907684f, 0.2899616062641144f, 0.0664118304848671f, 0.1271885186433792f, 0.6284430027008057f, +0.8770627379417419f, 0.3579413890838623f, 0.5017849206924438f, 0.7494836449623108f, 0.08528317511081696f, 0.6627708077430725f, 0.5484080910682678f, 0.8248951435089111f, +0.4402201473712921f, 0.5803354978561401f, 0.016593772917985916f, 0.002894612029194832f, 0.344892680644989f, 0.5219793915748596f, 0.3174438178539276f, 0.7348945140838623f, +0.033646948635578156f, 0.39362409710884094f, 0.3057243227958679f, 0.8977378010749817f, 0.3789607584476471f, 0.7182966470718384f, 0.8918778896331787f, 0.48661795258522034f, +0.03238270431756973f, 0.3131140470504761f, 0.1453840583562851f, 0.28028014302253723f, 0.22404706478118896f, 0.5329035520553589f, 0.8416388630867004f, 0.7897403836250305f, +0.3888387680053711f, 0.3381521701812744f, 0.9224621057510376f, 0.7174785733222961f, 0.18205362558364868f, 0.7487398982048035f, 0.41147708892822266f, 0.700311005115509f, +0.0036140468437224627f, 0.7272690534591675f, 0.32819682359695435f, 0.4266776740550995f, 0.8993661403656006f, 0.35837557911872864f, 0.3207745850086212f, 0.866645097732544f, +0.6276677846908569f, 0.06475108116865158f, 0.6858879923820496f, 0.9400948286056519f, 0.18072384595870972f, 0.4208120107650757f, 0.5035813450813293f, 0.6130173206329346f, +0.8112913966178894f, 0.1645624041557312f, 0.6613438725471497f, 0.7240160703659058f, 0.06953708827495575f, 0.9183176755905151f, 0.871452271938324f, 0.03253214806318283f, +0.19948530197143555f, 0.7173349261283875f, 0.021172532811760902f, 0.9977614879608154f, 0.17247232794761658f, 0.036776039749383926f, 0.12137170881032944f, 0.6295457482337952f, +0.4513227045536041f, 0.5363191962242126f, 0.8947281241416931f, 0.000849621370434761f, 0.44275566935539246f, 0.8368473052978516f, 0.5002321004867554f, 0.22745653986930847f, +0.22369417548179626f, 0.09320119023323059f, 0.6717198491096497f, 0.8472964763641357f, 0.7699881196022034f, 0.26988521218299866f, 0.19403783977031708f, 0.7448433637619019f, +0.8768332600593567f, 0.39861196279525757f, 0.11209307610988617f, 0.8629133105278015f, 0.34774142503738403f, 0.4887820780277252f, 0.1660575270652771f, 0.9425073862075806f, +0.3441481292247772f, 0.9188776016235352f, 0.007464615628123283f, 0.4918765127658844f, 0.10972917079925537f, 0.5648188591003418f, 0.5008701086044312f, 0.6510434150695801f, +0.6535208821296692f, 0.9378610253334045f, 0.2469630241394043f, 0.44415169954299927f, 0.40845927596092224f, 0.4192493259906769f, 0.49068009853363037f, 0.21006081998348236f, +0.42494580149650574f, 0.7905527949333191f, 0.25819966197013855f, 0.21856191754341125f, 0.6635616421699524f, 0.2057630568742752f, 0.9835163950920105f, 0.5619841814041138f, +0.042949873954057693f, 0.8185245394706726f, 0.5418641567230225f, 0.7634203433990479f, 0.5760137438774109f, 0.793097972869873f, 0.6973466873168945f, 0.045224692672491074f, +0.22690269351005554f, 0.7314131855964661f, 0.016740739345550537f, 0.5759345293045044f, 0.23614251613616943f, 0.8498052358627319f, 0.4466017782688141f, 0.1899464875459671f, +0.8493594527244568f, 0.3844228684902191f, 0.13120408356189728f, 0.006850035395473242f, 0.7564671635627747f, 0.23683568835258484f, 0.3423912823200226f, 0.3576728403568268f, +0.6444575190544128f, 0.1191994845867157f, 0.18439003825187683f, 0.5975936651229858f, 0.17597602307796478f, 0.32367318868637085f, 0.3831575810909271f, 0.08904044330120087f, +0.06591231375932693f, 0.7456642985343933f, 0.04445786401629448f, 0.35507166385650635f, 0.38890522718429565f, 0.5494250655174255f, 0.9836838841438293f, 0.7703099250793457f, +0.9248373508453369f, 0.7874390482902527f, 0.9750913977622986f, 0.29631394147872925f, 0.6460230350494385f, 0.6799210906028748f, 0.207085981965065f, 0.9451568126678467f, +0.5795978903770447f, 0.41389763355255127f, 0.6626607775688171f, 0.139654740691185f, 0.8864338994026184f, 0.32787761092185974f, 0.3605611324310303f, 0.6340569853782654f, +0.5525116324424744f, 0.5721584558486938f, 0.28509601950645447f, 0.5932701230049133f, 0.7416852116584778f, 0.1182495504617691f, 0.9756957292556763f, 0.7499107718467712f, +0.15243472158908844f, 0.9121984839439392f, 0.11087411642074585f, 0.03245778754353523f, 0.9943291544914246f, 0.4934941828250885f, 0.6901324391365051f, 0.4641507565975189f, +0.9842231273651123f, 0.6711669564247131f, 0.7508363127708435f, 0.904659628868103f, 0.46550729870796204f, 0.9838867783546448f, 0.316042959690094f, 0.8829602003097534f, +0.23008142411708832f, 0.8310450315475464f, 0.6973979473114014f, 0.29556378722190857f, 0.28693699836730957f, 0.32447537779808044f, 0.48872777819633484f, 0.8699179887771606f, +0.5834581255912781f, 0.14081911742687225f, 0.12036848813295364f, 0.16690221428871155f, 0.691471517086029f, 0.025010138750076294f, 0.3733491599559784f, 0.24484744668006897f, +0.6888552308082581f, 0.5619979500770569f, 0.6801847815513611f, 0.5808758735656738f, 0.7416706085205078f, 0.6177570223808289f, 0.7743444442749023f, 0.43618401885032654f, +0.653754711151123f, 0.7335893511772156f, 0.819568932056427f, 0.7494348883628845f, 0.6600579619407654f, 0.6386422514915466f, 0.7234811782836914f, 0.7330285906791687f, +0.21202456951141357f, 0.7343743443489075f, 0.24733899533748627f, 0.450408011674881f, 0.209120973944664f, 0.9505578279495239f, 0.14631783962249756f, 0.2804817259311676f, +0.6941124200820923f, 0.4670839011669159f, 0.7510749101638794f, 0.1635085642337799f, 0.8436742424964905f, 0.9978573322296143f, 0.5351163744926453f, 0.4136497974395752f, +0.5770986676216125f, 0.3873230814933777f, 0.7206869125366211f, 0.21046660840511322f, 0.3480176627635956f, 0.32505396008491516f, 0.9609791040420532f, 0.2660963237285614f, +0.9002363681793213f, 0.2791382074356079f, 0.02781498059630394f, 0.2625759243965149f, 0.915574312210083f, 0.5187253355979919f, 0.0042561073787510395f, 0.19130830466747284f, +0.5258352160453796f, 0.20387384295463562f, 0.32970350980758667f, 0.5883703827857971f, 0.11159887909889221f, 0.9698907732963562f, 0.8161001205444336f, 0.7254852652549744f, +0.10262482613325119f, 0.6731618642807007f, 0.6655147671699524f, 0.9633016586303711f, 0.3604082763195038f, 0.13254967331886292f, 0.8394315838813782f, 0.9345237016677856f, +0.8143061995506287f, 0.17836275696754456f, 0.40132206678390503f, 0.0736643448472023f, 0.16723015904426575f, 0.4782216548919678f, 0.7407071590423584f, 0.23207105696201324f, +0.5804053544998169f, 0.08406799286603928f, 0.718427300453186f, 0.28739649057388306f, 0.898040235042572f, 0.43218037486076355f, 0.5062083005905151f, 0.6788134574890137f, +0.9661386609077454f, 0.6844221353530884f, 0.8485507369041443f, 0.481406569480896f, 0.6479458212852478f, 0.5543241500854492f, 0.7479037642478943f, 0.7585002779960632f, +0.49282583594322205f, 0.4845770597457886f, 0.42393025755882263f, 0.6676655411720276f, 0.3658595383167267f, 0.2112152874469757f, 0.11691717058420181f, 0.21742600202560425f, +0.8129326105117798f, 0.3409653604030609f, 0.9304367303848267f, 0.07995583117008209f, 0.04674163833260536f, 0.49510812759399414f, 0.14163094758987427f, 0.8217379450798035f, +0.7021300792694092f, 0.7303779721260071f, 0.16368533670902252f, 0.015882976353168488f, 0.4495440423488617f, 0.22918272018432617f, 0.04930271580815315f, 0.9160557389259338f, +0.1298513561487198f, 0.2986730635166168f, 0.3438766598701477f, 0.6845625042915344f, 0.4037081301212311f, 0.8524446487426758f, 0.7030851244926453f, 0.864978551864624f, +0.1840374767780304f, 0.6836700439453125f, 0.9251481890678406f, 0.5649397373199463f, 0.7652665376663208f, 0.2705850601196289f, 0.47470343112945557f, 0.02705182321369648f, +0.3150542974472046f, 0.18098308145999908f, 0.9736851453781128f, 0.4614420533180237f, 0.503795325756073f, 0.6413339972496033f, 0.3446592092514038f, 0.25663840770721436f, +0.6861478686332703f, 0.1745103895664215f, 0.944871723651886f, 0.03057442605495453f, 0.19796499609947205f, 0.05986566096544266f, 0.012820379808545113f, 0.4265488386154175f, +0.31155940890312195f, 0.21390561759471893f, 0.10993199795484543f, 0.9194576740264893f, 0.900776743888855f, 0.9986320734024048f, 0.006582991220057011f, 0.6177489161491394f, +0.43599820137023926f, 0.7020277380943298f, 0.8571199178695679f, 0.8635338544845581f, 0.032833706587553024f, 0.8534716963768005f, 0.7022678852081299f, 0.37481066584587097f, +0.11494648456573486f, 0.11527208983898163f, 0.39132577180862427f, 0.9571203589439392f, 0.7943078279495239f, 0.6814721822738647f, 0.40061649680137634f, 0.2510151267051697f, +0.18307152390480042f, 0.8967546224594116f, 0.34284284710884094f, 0.6528465151786804f, 0.12424937635660172f, 0.081280916929245f, 0.09235237538814545f, 0.7051276564598083f, +0.19501248002052307f, 0.8447796106338501f, 0.2827829420566559f, 0.2557595670223236f, 0.6686839461326599f, 0.5047283172607422f, 0.8546197414398193f, 0.8224734663963318f, +0.2359910011291504f, 0.1097671389579773f, 0.625773549079895f, 0.060339927673339844f, 0.7781164646148682f, 0.2889244854450226f, 0.12169095873832703f, 0.5378408432006836f, +0.031678084284067154f, 0.0548391155898571f, 0.20044748485088348f, 0.4863305687904358f, 0.25877439975738525f, 0.6273824572563171f, 0.36055609583854675f, 0.9255139231681824f, +0.12228045612573624f, 0.8656201362609863f, 0.745745062828064f, 0.8714706897735596f, 0.6494741439819336f, 0.40712159872055054f, 0.7195429801940918f, 0.463344931602478f, +0.590538501739502f, 0.27465489506721497f, 0.48472970724105835f, 0.5044126510620117f, 0.42348918318748474f, 0.03939181566238403f, 0.8963903188705444f, 0.020480487495660782f, +0.10328447818756104f, 0.21031270921230316f, 0.12257982045412064f, 0.7301780581474304f, 0.6166980862617493f, 0.4700397253036499f, 0.7866290211677551f, 0.9383590817451477f, +0.31520411372184753f, 0.4106152653694153f, 0.5161222815513611f, 0.0657520443201065f, 0.5176533460617065f, 0.3298259973526001f, 0.6317790746688843f, 0.40554672479629517f, +0.07395634800195694f, 0.49296027421951294f, 0.6898394823074341f, 0.7501775622367859f, 0.7843242287635803f, 0.18758976459503174f, 0.6852796077728271f, 0.9387356638908386f, +0.4671337306499481f, 0.00438613211736083f, 0.47896477580070496f, 0.6878302097320557f, 0.7484369277954102f, 0.14383862912654877f, 0.9594095945358276f, 0.3341156244277954f, +0.35935676097869873f, 0.757971465587616f, 0.4414481818675995f, 0.24731610715389252f, 0.10165679454803467f, 0.7593971490859985f, 0.8832542300224304f, 0.6408689022064209f, +0.8096819519996643f, 0.22108173370361328f, 0.8799267411231995f, 0.5230720043182373f, 0.9113121032714844f, 0.4039669930934906f, 0.7517823576927185f, 0.6294279098510742f, +0.13228000700473785f, 0.5930740833282471f, 0.6646094918251038f, 0.21870172023773193f, 0.9020258784294128f, 0.2242555469274521f, 0.553591787815094f, 0.6704638600349426f, +0.5373786091804504f, 0.4850395917892456f, 0.7764983773231506f, 0.23066063225269318f, 0.79805588722229f, 0.8310136795043945f, 0.2894723117351532f, 0.5434646606445312f, +0.43650510907173157f, 0.42937180399894714f, 0.09006223827600479f, 0.5491916537284851f, 0.9884076714515686f, 0.921748161315918f, 0.8701103925704956f, 0.4314250946044922f, +0.14491963386535645f, 0.5148134231567383f, 0.3857784867286682f, 0.8531917929649353f, 0.9218465089797974f, 0.8637474775314331f, 0.927006721496582f, 0.253081351518631f, +0.9350725412368774f, 0.7971487641334534f, 0.25985971093177795f, 0.32133397459983826f, 0.4565750062465668f, 0.06387167423963547f, 0.15925396978855133f, 0.07776593416929245f, +0.38213443756103516f, 0.7239649295806885f, 0.003099301131442189f, 0.8019714951515198f, 0.08387518674135208f, 0.022641588002443314f, 0.3976125419139862f, 0.9702593684196472f, +0.7845594882965088f, 0.5605349540710449f, 0.25118130445480347f, 0.8556843400001526f, 0.45071518421173096f, 0.21472066640853882f, 0.2278060019016266f, 0.8507826328277588f, +0.005959398113191128f, 0.2593842148780823f, 0.9592525959014893f, 0.49154049158096313f, 0.8163002729415894f, 0.0034081002231687307f, 0.6294099688529968f, 0.12878300249576569f, +0.8248994946479797f, 0.5632463693618774f, 0.528012752532959f, 0.4999839663505554f, 0.2861819565296173f, 0.603050708770752f, 0.38978251814842224f, 0.7952907681465149f, +0.1378743052482605f, 0.871327817440033f, 0.04234355688095093f, 0.22479163110256195f, 0.3517553508281708f, 0.4660782217979431f, 0.16916535794734955f, 0.4971417486667633f, +0.21931840479373932f, 0.17102710902690887f, 0.0832771584391594f, 0.6708406209945679f, 0.9605860710144043f, 0.5827533602714539f, 0.6707764863967896f, 0.6510302424430847f, +0.020028693601489067f, 0.4731822609901428f, 0.7106837630271912f, 0.561617374420166f, 0.3338797390460968f, 0.9511041641235352f, 0.8649432063102722f, 0.29955750703811646f, +0.5983363389968872f, 0.9468579292297363f, 0.48214247822761536f, 0.10509388148784637f, 0.0018964193295687437f, 0.74931800365448f, 0.40934431552886963f, 0.031177058815956116f, +0.3879533112049103f, 0.8675764203071594f, 0.5755842328071594f, 0.17467840015888214f, 0.8778178691864014f, 0.5510972738265991f, 0.0030987951904535294f, 0.7163342237472534f, +0.9572005271911621f, 0.8063876032829285f, 0.46839702129364014f, 0.7692720890045166f, 0.9048581123352051f, 0.9442116022109985f, 0.595148503780365f, 0.6575492024421692f, +0.24037358164787292f, 0.263480544090271f, 0.8630988597869873f, 0.28460919857025146f, 0.963311493396759f, 0.4841264486312866f, 0.8758370876312256f, 0.15929847955703735f, +0.8904072046279907f, 0.022886771708726883f, 0.1654384583234787f, 0.5034860372543335f, 0.9142717719078064f, 0.06931567937135696f, 0.24585945904254913f, 0.6044294834136963f, +0.007235622499138117f, 0.723598837852478f, 0.30379951000213623f, 0.5768498778343201f, 0.7736324667930603f, 0.48152345418930054f, 0.9778895974159241f, 0.5967910289764404f, +0.29402095079421997f, 0.006803359370678663f, 0.6307949423789978f, 0.33662232756614685f, 0.42131003737449646f, 0.05792197212576866f, 0.8120740652084351f, 0.9050806760787964f, +0.5434430241584778f, 0.15922826528549194f, 0.4972509741783142f, 0.42790141701698303f, 0.7334644794464111f, 0.32202276587486267f, 0.7199519276618958f, 0.41223350167274475f, +0.4966394305229187f, 0.5684400796890259f, 0.5263673067092896f, 0.37576863169670105f, 0.33106735348701477f, 0.6235213875770569f, 0.20379167795181274f, 0.03397829458117485f, +0.7987450957298279f, 0.7287958860397339f, 0.5488384366035461f, 0.9960235357284546f, 0.6654267907142639f, 0.8897934556007385f, 0.14276859164237976f, 0.2590405344963074f, +0.7781820893287659f, 0.44107308983802795f, 0.02021847292780876f, 0.4590713083744049f, 0.21072915196418762f, 0.38565221428871155f, 0.5920577049255371f, 0.8049328327178955f, +0.6371197700500488f, 0.24909812211990356f, 0.08077855408191681f, 0.8520393967628479f, 0.9196292757987976f, 0.33843085169792175f, 0.7822694778442383f, 0.6610825061798096f, +0.08160724490880966f, 0.8695082068443298f, 0.32251083850860596f, 0.8340935707092285f, 0.4240493178367615f, 0.30525311827659607f, 0.6784435510635376f, 0.047781143337488174f, +0.27649638056755066f, 0.060027215629816055f, 0.9366239309310913f, 0.8722209930419922f, 0.7653302550315857f, 0.9369456768035889f, 0.9192169308662415f, 0.546256422996521f, +0.17700983583927155f, 0.9215964078903198f, 0.5144960284233093f, 0.0536346398293972f, 0.24649137258529663f, 0.13148096203804016f, 0.20103615522384644f, 0.8080869317054749f, +0.7751578688621521f, 0.4558834135532379f, 0.2359345406293869f, 0.6306803822517395f, 0.38532769680023193f, 0.841426432132721f, 0.2993302643299103f, 0.8672013282775879f, +0.4915035665035248f, 0.5368275046348572f, 0.22235077619552612f, 0.3718453347682953f, 0.5924391746520996f, 0.978258490562439f, 0.12494876980781555f, 0.4259082078933716f, +0.8424370288848877f, 0.42284756898880005f, 0.4121297597885132f, 0.10403972119092941f, 0.8398988246917725f, 0.07807048410177231f, 0.16750448942184448f, 0.9058853387832642f, +0.299190491437912f, 0.39591851830482483f, 0.06991293281316757f, 0.6541964411735535f, 0.676998496055603f, 0.3771090805530548f, 0.07001300156116486f, 0.197416290640831f, +0.07991216331720352f, 0.02134142816066742f, 0.3443974256515503f, 0.3582656979560852f, 0.5491822957992554f, 0.2839692533016205f, 0.03585841879248619f, 0.6522256731987f, +0.969809353351593f, 0.39251217246055603f, 0.06079450249671936f, 0.7802752256393433f, 0.4583390951156616f, 0.34403154253959656f, 0.017864299938082695f, 0.29214346408843994f, +0.01039330754429102f, 0.457042396068573f, 0.6140453815460205f, 0.2998403310775757f, 0.9169688820838928f, 0.3171006143093109f, 0.006915821693837643f, 0.9875908493995667f, +0.6325476169586182f, 0.010545879602432251f, 0.05459029600024223f, 0.8540306687355042f, 0.006826704367995262f, 0.523223340511322f, 0.35939139127731323f, 0.37014472484588623f, +0.8593000173568726f, 0.7164244055747986f, 0.4547605514526367f, 0.6478709578514099f, 0.7655104994773865f, 0.3906385004520416f, 0.794245719909668f, 0.1740388572216034f, +0.00976434163749218f, 0.6983436346054077f, 0.21590463817119598f, 0.6709470748901367f, 0.3256169557571411f, 0.32487961649894714f, 0.919424831867218f, 0.393938809633255f, +0.4873799681663513f, 0.2991560101509094f, 0.13993923366069794f, 0.08824187517166138f, 0.10887090116739273f, 0.49724578857421875f, 0.09453480690717697f, 0.8197774291038513f, +0.45724359154701233f, 0.28910914063453674f, 0.9272221326828003f, 0.34854549169540405f, 0.19729983806610107f, 0.4590694308280945f, 0.025644730776548386f, 0.1971912831068039f, +0.14340375363826752f, 0.3727012276649475f, 0.7965697646141052f, 0.6253013610839844f, 0.5110916495323181f, 0.9351341724395752f, 0.9340586066246033f, 0.5569403767585754f, +0.8964253664016724f, 0.20284956693649292f, 0.7157180905342102f, 0.47895365953445435f, 0.37411725521087646f, 0.4345564544200897f, 0.5649286508560181f, 0.10819988697767258f, +0.7197854518890381f, 0.11802462488412857f, 0.260004460811615f, 0.9004232883453369f, 0.6170105934143066f, 0.993986189365387f, 0.21369494497776031f, 0.5623698830604553f, +0.541039764881134f, 0.7667746543884277f, 0.7569741010665894f, 0.1079421415925026f, 0.23842336237430573f, 0.08471955358982086f, 0.8807858228683472f, 0.5017860531806946f, +0.35887059569358826f, 0.47137078642845154f, 0.1787107288837433f, 0.07277727872133255f, 0.8390043377876282f, 0.47310030460357666f, 0.4543873369693756f, 0.6530379056930542f, +0.9080957770347595f, 0.7899997234344482f, 0.6308811902999878f, 0.964057981967926f, 0.01384271401911974f, 0.6232048273086548f, 0.5865783095359802f, 0.99192875623703f, +0.8975649476051331f, 0.5274646282196045f, 0.5788947939872742f, 0.3580997884273529f, 0.34349295496940613f, 0.6155580282211304f, 0.4125887453556061f, 0.08548025786876678f, +0.459114134311676f, 0.7808835506439209f, 0.2715131342411041f, 0.3835029602050781f, 0.011046487838029861f, 0.2963337302207947f, 0.839772641658783f, 0.6880490183830261f, +0.05372020974755287f, 0.2548508644104004f, 0.8415346741676331f, 0.49338769912719727f, 0.9294074773788452f, 0.4601356089115143f, 0.9828478097915649f, 0.7460674047470093f, +0.8300994634628296f, 0.13037726283073425f, 0.409288614988327f, 0.2803468108177185f, 0.29275694489479065f, 0.6113483309745789f, 0.618617594242096f, 0.4711166024208069f, +0.9186878204345703f, 0.3686012625694275f, 0.5800565481185913f, 0.3454780578613281f, 0.025650883093476295f, 0.4329739212989807f, 0.7618618011474609f, 0.5422035455703735f, +0.8354079127311707f, 0.7198721170425415f, 0.4062104821205139f, 0.10577628761529922f, 0.4650289714336395f, 0.5558226108551025f, 0.8782486915588379f, 0.7771174907684326f, +0.4097832143306732f, 0.14847874641418457f, 0.6229903101921082f, 0.24866525828838348f, 0.23603659868240356f, 0.860104501247406f, 0.9667103886604309f, 0.1657254546880722f, +0.3351137340068817f, 0.3829136788845062f, 0.9810304045677185f, 0.7378004789352417f, 0.36342599987983704f, 0.09884103387594223f, 0.07285863161087036f, 0.12616126239299774f, +0.2500244081020355f, 0.19737301766872406f, 0.25760316848754883f, 0.5371701717376709f, 0.33280065655708313f, 0.6454740166664124f, 0.37830883264541626f, 0.06625446677207947f, +0.3138369023799896f, 0.7043986320495605f, 0.25270161032676697f, 0.9655129313468933f, 0.6873921155929565f, 0.9617375731468201f, 0.26878830790519714f, 0.9484566450119019f, +0.6039168834686279f, 0.5848008990287781f, 0.2906090021133423f, 0.5413908958435059f, 0.8423519134521484f, 0.5454041361808777f, 0.3370338976383209f, 0.21922390162944794f, +0.5703924894332886f, 0.2960348427295685f, 0.14405322074890137f, 0.09416235983371735f, 0.7606233358383179f, 0.5808349251747131f, 0.9358894228935242f, 0.5700657367706299f, +0.40855035185813904f, 0.4457913041114807f, 0.5175327062606812f, 0.5849459171295166f, 0.4475495517253876f, 0.6075235605239868f, 0.1829344779253006f, 0.886641800403595f, +0.4129158854484558f, 0.7100949883460999f, 0.3294685184955597f, 0.928376317024231f, 0.368554949760437f, 0.28600776195526123f, 0.6995542645454407f, 0.9520968198776245f, +0.2553238272666931f, 0.34580186009407043f, 0.7126041650772095f, 0.9699903130531311f, 0.46901562809944153f, 0.44702649116516113f, 0.0373542383313179f, 0.25636518001556396f, +0.4470074474811554f, 0.8288427591323853f, 0.3342958092689514f, 0.5172199606895447f, 0.930692195892334f, 0.10105212032794952f, 0.703860342502594f, 0.8842822909355164f, +0.5468170642852783f, 0.2451629489660263f, 0.09587420523166656f, 0.8061429858207703f, 0.42962414026260376f, 0.6341351270675659f, 0.6010788083076477f, 0.11281649768352509f, +0.19552873075008392f, 0.0032952558249235153f, 0.05346151441335678f, 0.007846579886972904f, 0.6032381653785706f, 0.7038737535476685f, 0.918709397315979f, 0.6101641654968262f, +0.0725708082318306f, 0.8836710453033447f, 0.12679482996463776f, 0.3639151453971863f, 0.6272132992744446f, 0.11167068034410477f, 0.8105350136756897f, 0.8578076362609863f, +0.26960650086402893f, 0.19011108577251434f, 0.15344451367855072f, 0.8164101839065552f, 0.5446792244911194f, 0.007330160588026047f, 0.061038922518491745f, 0.8849079608917236f, +0.39429348707199097f, 0.22945843636989594f, 0.8497421145439148f, 0.3446592688560486f, 0.8219310641288757f, 0.017826911062002182f, 0.951010525226593f, 0.6321815848350525f, +0.9425569176673889f, 0.860930323600769f, 0.6234796047210693f, 0.8933840394020081f, 0.5367473363876343f, 0.7611726522445679f, 0.39173948764801025f, 0.29644453525543213f, +0.1307864487171173f, 0.5435031652450562f, 0.22748272120952606f, 0.2477080374956131f, 0.8601729273796082f, 0.9544826149940491f, 0.08387422561645508f, 0.5999892950057983f, +0.8455895781517029f, 0.7769681215286255f, 0.5129140019416809f, 0.9357940554618835f, 0.1982899010181427f, 0.23411250114440918f, 0.36383676528930664f, 0.04368600621819496f, +0.33981093764305115f, 0.3248266875743866f, 0.3464520275592804f, 0.021597595885396004f, 0.850074052810669f, 0.7897982001304626f, 0.5253028273582458f, 0.6987738013267517f, +0.2977372109889984f, 0.5351803302764893f, 0.4249988794326782f, 0.8634909987449646f, 0.5354567170143127f, 0.9596627354621887f, 0.8205394744873047f, 0.24019668996334076f, +0.1054740771651268f, 0.3338995575904846f, 0.5024207830429077f, 0.7969232201576233f, 0.4185023009777069f, 0.4220898449420929f, 0.9286017417907715f, 0.6140216588973999f, +0.4565356373786926f, 0.7943820953369141f, 0.884819746017456f, 0.5801889896392822f, 0.44719845056533813f, 0.888669490814209f, 0.4784756600856781f, 0.03392251953482628f, +0.014747083187103271f, 0.639612078666687f, 0.4685419499874115f, 0.7422602772712708f, 0.8350401520729065f, 0.4462701976299286f, 0.660295844078064f, 0.21990732848644257f, +0.6597644090652466f, 0.31432080268859863f, 0.8694552779197693f, 0.34707581996917725f, 0.17040622234344482f, 0.9669569730758667f, 0.8192809224128723f, 0.21979230642318726f, +0.025265729054808617f, 0.8801124691963196f, 0.7276331186294556f, 0.9449021220207214f, 0.7168881893157959f, 0.012189971283078194f, 0.4240954518318176f, 0.8648985624313354f, +0.6112393736839294f, 0.4306609332561493f, 0.40099483728408813f, 0.18760946393013f, 0.5209935307502747f, 0.7952556610107422f, 0.600971519947052f, 0.21535681188106537f, +0.11741170287132263f, 0.5808698534965515f, 0.843967854976654f, 0.6970558762550354f, 0.30875682830810547f, 0.8726754784584045f, 0.0537848174571991f, 0.5606546401977539f, +0.5461828112602234f, 0.15647324919700623f, 0.08953030407428741f, 0.36861565709114075f, 0.6878689527511597f, 0.025359364226460457f, 0.48051512241363525f, 0.09523920714855194f, +0.6081700921058655f, 0.7136399149894714f, 0.6015183329582214f, 0.024444617331027985f, 0.2040029615163803f, 0.5457925796508789f, 0.9454005360603333f, 0.8075453639030457f, +0.5322995781898499f, 0.1390245407819748f, 0.4783960282802582f, 0.39086347818374634f, 0.9674325585365295f, 0.33893972635269165f, 0.8773861527442932f, 0.9430233836174011f, +0.8732762932777405f, 0.9752398133277893f, 0.2889818251132965f, 0.4137716591358185f, 0.03589268773794174f, 0.8365573287010193f, 0.8186769485473633f, 0.5807583332061768f, +0.6782791614532471f, 0.22673028707504272f, 0.14226794242858887f, 0.9717575907707214f, 0.5922916531562805f, 0.9124040007591248f, 0.575232207775116f, 0.6756262183189392f, +0.8887633085250854f, 0.16816632449626923f, 0.4977897107601166f, 0.03970857709646225f, 0.9129217267036438f, 0.3069285452365875f, 0.9098983407020569f, 0.1822790503501892f, +0.18598178029060364f, 0.7710704207420349f, 0.13968239724636078f, 0.0940074473619461f, 0.895713746547699f, 0.5306735634803772f, 0.9890227317810059f, 0.5259191393852234f, +0.4796432554721832f, 0.9077885746955872f, 0.3393925428390503f, 0.16173292696475983f, 0.4537891149520874f, 0.024406835436820984f, 0.05246861279010773f, 0.9506362676620483f, +0.3351658284664154f, 0.48813948035240173f, 0.312382310628891f, 0.49631428718566895f, 0.9734094738960266f, 0.5274960994720459f, 0.28486132621765137f, 0.5417637825012207f, +0.7120305299758911f, 0.4677559435367584f, 0.6088436245918274f, 0.2888926863670349f, 0.8355650305747986f, 0.1483520269393921f, 0.2388204038143158f, 0.3755837082862854f, +0.9238042235374451f, 0.994710385799408f, 0.2606599032878876f, 0.1129913181066513f, 0.5245384573936462f, 0.0474090538918972f, 0.0639704167842865f, 0.36943578720092773f, +0.6626556515693665f, 0.9422509074211121f, 0.048815611749887466f, 0.15797248482704163f, 0.02244883030653f, 0.2038598507642746f, 0.9035282135009766f, 0.35522371530532837f, +0.4417390525341034f, 0.6144898533821106f, 0.5828905701637268f, 0.7316933274269104f, 0.0647231787443161f, 0.4545711576938629f, 0.20682793855667114f, 0.9025222063064575f, +0.20397226512432098f, 0.9780237078666687f, 0.03324200585484505f, 0.30370616912841797f, 0.14461037516593933f, 0.0073113213293254375f, 0.9244728088378906f, 0.42346450686454773f, +0.6340591907501221f, 0.6709445714950562f, 0.442587286233902f, 0.863787055015564f, 0.16701261699199677f, 0.02477348782122135f, 0.13045825064182281f, 0.2614194452762604f, +0.7395967245101929f, 0.6494101285934448f, 0.06436193734407425f, 0.42907780408859253f, 0.7707551717758179f, 0.7466862797737122f, 0.5306037664413452f, 0.7564306259155273f, +0.15860892832279205f, 0.05955104902386665f, 0.16175280511379242f, 0.013701004907488823f, 0.2979050874710083f, 0.7504091858863831f, 0.8540748953819275f, 0.3588739037513733f, +0.7964194416999817f, 0.5970578193664551f, 0.5023670792579651f, 0.8918502330780029f, 0.2412637621164322f, 0.7782974243164062f, 0.2499406784772873f, 0.5963648557662964f, +0.14942558109760284f, 0.5699835419654846f, 0.5531222820281982f, 0.2236110419034958f, 0.40193095803260803f, 0.43187081813812256f, 0.9944794774055481f, 0.37903910875320435f, +0.23905135691165924f, 0.4270486831665039f, 0.3523890972137451f, 0.6489997506141663f, 0.6343730688095093f, 0.7462947368621826f, 0.9485473036766052f, 0.9839943051338196f, +0.3447187840938568f, 0.8749613761901855f, 0.19008423388004303f, 0.11159531027078629f, 0.6596611738204956f, 0.8542526960372925f, 0.003842431353405118f, 0.22297945618629456f, +0.8366417288780212f, 0.4619954228401184f, 0.5359227061271667f, 0.6329748034477234f, 0.4968235492706299f, 0.7874961495399475f, 0.1030203327536583f, 0.5512955784797668f, +0.057945217937231064f, 0.3607771098613739f, 0.4690614342689514f, 0.2554928660392761f, 0.9241013526916504f, 0.5885046124458313f, 0.0579441674053669f, 0.6956585645675659f, +0.8866296410560608f, 0.03094377927482128f, 0.2623597979545593f, 0.5787043571472168f, 0.2646109163761139f, 0.76835697889328f, 0.5797847509384155f, 0.27039140462875366f, +0.4516266882419586f, 0.7769573926925659f, 0.7239662408828735f, 0.46775704622268677f, 0.06426812708377838f, 0.12473545968532562f, 0.48062822222709656f, 0.9970142245292664f, +0.9829545617103577f, 0.41851985454559326f, 0.2265922874212265f, 0.505221426486969f, 0.49070069193840027f, 0.9154602289199829f, 0.5462839007377625f, 0.84299236536026f, +0.9951459169387817f, 0.27195438742637634f, 0.39943504333496094f, 0.40413978695869446f, 0.8587040901184082f, 0.4542403221130371f, 0.6652899980545044f, 0.23968371748924255f, +0.11108803749084473f, 0.9808860421180725f, 0.3292153477668762f, 0.37784698605537415f, 0.48010849952697754f, 0.7418050169944763f, 0.4522325098514557f, 0.8143232464790344f, +0.6145400404930115f, 0.09785199910402298f, 0.06556762754917145f, 0.9414976239204407f, 0.5121048092842102f, 0.6757389307022095f, 0.1332237720489502f, 0.7279758453369141f, +0.5692405104637146f, 0.12665539979934692f, 0.28395333886146545f, 0.7522232532501221f, 0.4190638065338135f, 0.8535575270652771f, 0.6418984532356262f, 0.13972529768943787f, +0.557788610458374f, 0.23728220164775848f, 0.9592398405075073f, 0.10586618632078171f, 0.5809319615364075f, 0.9234333038330078f, 0.380325049161911f, 0.8480905294418335f, +0.6032681465148926f, 0.987865149974823f, 0.2890220582485199f, 0.9846034049987793f, 0.11260504275560379f, 0.7394155859947205f, 0.15699590742588043f, 0.17537082731723785f, +0.3116837739944458f, 0.574407696723938f, 0.4074684977531433f, 0.4351085424423218f, 0.6070078015327454f, 0.27728578448295593f, 0.9733239412307739f, 0.49548327922821045f, +0.25498950481414795f, 0.04587099328637123f, 0.7040503621101379f, 0.5049269795417786f, 0.08244369179010391f, 0.7463153600692749f, 0.8201643228530884f, 0.6620906591415405f, +0.9550551176071167f, 0.9633144736289978f, 0.7037283778190613f, 0.3957952558994293f, 0.4420144855976105f, 0.14198531210422516f, 0.4342859089374542f, 0.6953241229057312f, +0.5300332903862f, 0.5085601806640625f, 0.6913920044898987f, 0.20672878623008728f, 0.9037980437278748f, 0.4697878360748291f, 0.4001751244068146f, 0.9599065184593201f, +0.11811581999063492f, 0.6327069997787476f, 0.2973669171333313f, 0.4918585419654846f, 0.8438740968704224f, 0.39239126443862915f, 0.9797354340553284f, 0.42316725850105286f, +0.31965404748916626f, 0.4830717146396637f, 0.5107787251472473f, 0.4955021142959595f, 0.4207141697406769f, 0.8701004981994629f, 0.7300317287445068f, 0.29356515407562256f, +0.020456673577427864f, 0.3119259178638458f, 0.2045077532529831f, 0.03856378793716431f, 0.3379459083080292f, 0.8395649194717407f, 0.9149749279022217f, 0.23982597887516022f, +0.01675354316830635f, 0.7708331346511841f, 0.38302332162857056f, 0.19910699129104614f, 0.85373854637146f, 0.7056142091751099f, 0.1966199278831482f, 0.3039989471435547f, +0.41898784041404724f, 0.6728096604347229f, 0.3986278176307678f, 0.9068235754966736f, 0.8320860862731934f, 0.10981521755456924f, 0.5754652619361877f, 0.9056469202041626f, +0.5999792814254761f, 0.380695104598999f, 0.01676652394235134f, 0.6997370719909668f, 0.03080235980451107f, 0.8087186217308044f, 0.1821793168783188f, 0.9220967292785645f, +0.36988911032676697f, 0.4253709614276886f, 0.7610157132148743f, 0.3661201000213623f, 0.8680257201194763f, 0.8100730180740356f, 0.1527157872915268f, 0.7659719586372375f, +0.06631096452474594f, 0.8254544734954834f, 0.9064136743545532f, 0.051143620163202286f, 0.16552042961120605f, 0.20035512745380402f, 0.9237549304962158f, 0.3487270474433899f, +0.034247398376464844f, 0.8678804636001587f, 0.4896242916584015f, 0.10224119573831558f, 0.7117990851402283f, 0.9283666610717773f, 0.04685795307159424f, 0.9524646401405334f, +0.7914733290672302f, 0.8077101707458496f, 0.12776856124401093f, 0.2256009876728058f, 0.36357688903808594f, 0.18333405256271362f, 0.9568731188774109f, 0.9604790210723877f, +0.24707749485969543f, 0.8043429851531982f, 0.5574144721031189f, 0.16698484122753143f, 0.5528436899185181f, 0.33654576539993286f, 0.5644718408584595f, 0.05351073294878006f, +0.21740654110908508f, 0.06302683055400848f, 0.370330274105072f, 0.3880470395088196f, 0.20934495329856873f, 0.6692440509796143f, 0.8248907327651978f, 0.8270333409309387f, +0.16881003975868225f, 0.9646315574645996f, 0.060613587498664856f, 0.8416626453399658f, 0.08172934502363205f, 0.3510708808898926f, 0.7176304459571838f, 0.7759733200073242f, +0.6154550313949585f, 0.25870001316070557f, 0.9455689191818237f, 0.26383310556411743f, 0.5875483751296997f, 0.5354381799697876f, 0.7502477765083313f, 0.27400699257850647f, +0.837999165058136f, 0.35784193873405457f, 0.6900624632835388f, 0.9677465558052063f, 0.3939059376716614f, 0.13959498703479767f, 0.29435107111930847f, 0.40688225626945496f, +0.49514028429985046f, 0.7425023317337036f, 0.6773648858070374f, 0.8525682687759399f, 0.9803110361099243f, 0.8883466124534607f, 0.5968344807624817f, 0.9577118754386902f, +0.6165522933006287f, 0.7309381365776062f, 0.2030191570520401f, 0.8337736129760742f, 0.2237599492073059f, 0.9921413660049438f, 0.1928205043077469f, 0.3365723192691803f, +0.9023409485816956f, 0.24869713187217712f, 0.9789868593215942f, 0.03929240629076958f, 0.11695683747529984f, 0.023251758888363838f, 0.28858235478401184f, 0.28808704018592834f, +0.3940223455429077f, 0.6188757419586182f, 0.4229521155357361f, 0.27469363808631897f, 0.860341489315033f, 0.23252271115779877f, 0.48824915289878845f, 0.8809365034103394f, +0.13353417813777924f, 0.5564216375350952f, 0.16971303522586823f, 0.1737789511680603f, 0.7512290477752686f, 0.21536867320537567f, 0.7583995461463928f, 0.4911721348762512f, +0.6430092453956604f, 0.45657846331596375f, 0.23850281536579132f, 0.927849531173706f, 0.16815511882305145f, 0.19372452795505524f, 0.46313124895095825f, 0.0036972765810787678f, +0.8504109382629395f, 0.04992625489830971f, 0.04561913013458252f, 0.9245433807373047f, 0.20808397233486176f, 0.5516261458396912f, 0.7528613209724426f, 0.06121591851115227f, +0.7237585783004761f, 0.38892003893852234f, 0.8081094026565552f, 0.953289270401001f, 0.7901846170425415f, 0.35017630457878113f, 0.05870829150080681f, 0.774914026260376f, +0.3453032970428467f, 0.7909635305404663f, 0.47412896156311035f, 0.9114777445793152f, 0.14577916264533997f, 0.35596969723701477f, 0.7209241390228271f, 0.45214706659317017f, +0.7328574657440186f, 0.37761780619621277f, 0.09314874559640884f, 0.9142218232154846f, 0.03118267096579075f, 0.5340690612792969f, 0.5756677389144897f, 0.476686030626297f, +0.5583667159080505f, 0.9967659711837769f, 0.8235061168670654f, 0.6059461832046509f, 0.534960150718689f, 0.6980161070823669f, 0.2847655713558197f, 0.6978345513343811f, +0.9365307092666626f, 0.05987687408924103f, 0.9373369812965393f, 0.2316499948501587f, 0.5066384077072144f, 0.9597339630126953f, 0.49583616852760315f, 0.8111740946769714f, +0.42667341232299805f, 0.3444914221763611f, 0.19312356412410736f, 0.9201809763908386f, 0.5057969689369202f, 0.1782410889863968f, 0.49657073616981506f, 0.660480797290802f, +0.3567686080932617f, 0.007089380640536547f, 0.8654558658599854f, 0.8726184964179993f, 0.008613096550107002f, 0.3579893112182617f, 0.5481314659118652f, 0.4175017774105072f, +0.7967519164085388f, 0.6554976105690002f, 0.04535472393035889f, 0.7249020338058472f, 0.6552581191062927f, 0.33459529280662537f, 0.6498463749885559f, 0.20392505824565887f, +0.9098231792449951f, 0.9394389986991882f, 0.25880834460258484f, 0.23354311287403107f, 0.5409868955612183f, 0.5365724563598633f, 0.1814885437488556f, 0.41519296169281006f, +0.6728554964065552f, 0.8166565299034119f, 0.15831926465034485f, 0.47492191195487976f, 0.1564437299966812f, 0.9397526979446411f, 0.48915553092956543f, 0.01843271031975746f, +0.6407870054244995f, 0.29003000259399414f, 0.4748421907424927f, 0.28702351450920105f, 0.7463215589523315f, 0.003355527063831687f, 0.763835072517395f, 0.6548022627830505f, +0.15626338124275208f, 0.20389702916145325f, 0.8571258783340454f, 0.35044631361961365f, 0.9963211417198181f, 0.47089362144470215f, 0.6520148515701294f, 0.9649228453636169f, +0.9744757413864136f, 0.241403728723526f, 0.07056044042110443f, 0.11046236753463745f, 0.700064480304718f, 0.02710329368710518f, 0.20177850127220154f, 0.6509073376655579f, +0.6441012024879456f, 0.7505170106887817f, 0.2705889046192169f, 0.7332003712654114f, 0.74518883228302f, 0.54465651512146f, 0.5517799258232117f, 0.6649396419525146f, +0.08345520496368408f, 0.8274570107460022f, 0.4515170753002167f, 0.11521600186824799f, 0.4462548494338989f, 0.17560453712940216f, 0.28889334201812744f, 0.24250206351280212f, +0.6143271923065186f, 0.019195031374692917f, 0.48286280035972595f, 0.1398613303899765f, 0.6341950297355652f, 0.7376027703285217f, 0.598569393157959f, 0.6965015530586243f, +0.02316967211663723f, 0.7988055944442749f, 0.8588842749595642f, 0.1411857306957245f, 0.6288434267044067f, 0.6262413859367371f, 0.9430145621299744f, 0.7663228511810303f, +0.8124332427978516f, 0.19167250394821167f, 0.46373453736305237f, 0.8586466312408447f, 0.36176374554634094f, 0.45996591448783875f, 0.0493086539208889f, 0.9311025142669678f, +0.8187568783760071f, 0.8378192186355591f, 0.030214089900255203f, 0.6935946345329285f, 0.8598066568374634f, 0.3857880234718323f, 0.3056846559047699f, 0.24412484467029572f, +0.8848139643669128f, 0.0254505667835474f, 0.3740002512931824f, 0.17300714552402496f, 0.6878271698951721f, 0.9604090452194214f, 0.2951669991016388f, 0.5590916275978088f, +0.6954740285873413f, 0.3942376673221588f, 0.8848286271095276f, 0.5572025179862976f, 0.3616635501384735f, 0.9735121130943298f, 0.9613204002380371f, 0.7781985998153687f, +0.9471666812896729f, 0.7943854331970215f, 0.19520509243011475f, 0.39686861634254456f, 0.6682755351066589f, 0.17348600924015045f, 0.8131114840507507f, 0.4081663191318512f, +0.12587732076644897f, 0.10725575685501099f, 0.9780873656272888f, 0.45745787024497986f, 0.853488028049469f, 0.7264538407325745f, 0.9574516415596008f, 0.9669331312179565f, +0.02894938364624977f, 0.45147889852523804f, 0.11504397541284561f, 0.30152279138565063f, 0.6476282477378845f, 0.2548311948776245f, 0.17237509787082672f, 0.954267680644989f, +0.7336511015892029f, 0.6683245897293091f, 0.3172115683555603f, 0.24566425383090973f, 0.6453496217727661f, 0.23286116123199463f, 0.30794912576675415f, 0.23845815658569336f, +0.4286870062351227f, 0.9769793152809143f, 0.1715640425682068f, 0.17552676796913147f, 0.11423777788877487f, 0.4002320468425751f, 0.9206235408782959f, 0.7924907207489014f, +0.950301468372345f, 0.464537650346756f, 0.5126034617424011f, 0.8598743677139282f, 0.12328220158815384f, 0.9858752489089966f, 0.4804183840751648f, 0.7682298421859741f, +0.8423612713813782f, 0.259949266910553f, 0.4094957709312439f, 0.590988039970398f, 0.6491184830665588f, 0.7934529781341553f, 0.47161999344825745f, 0.7304807305335999f, +0.006425475236028433f, 0.743012011051178f, 0.5525249242782593f, 0.45440977811813354f, 0.4222262501716614f, 0.7286943793296814f, 0.2924376428127289f, 0.8407782912254333f, +0.6428177356719971f, 0.6863739490509033f, 0.15515412390232086f, 0.6729956865310669f, 0.8956867456436157f, 0.2347303032875061f, 0.2077276110649109f, 0.0494280569255352f, +0.5450705289840698f, 0.5829173922538757f, 0.3630518615245819f, 0.32148033380508423f, 0.22588543593883514f, 0.38691750168800354f, 0.13559968769550323f, 0.29914307594299316f, +0.2107212394475937f, 0.8024481534957886f, 0.07426328957080841f, 0.7499511241912842f, 0.9043224453926086f, 0.7533439993858337f, 0.6105931401252747f, 0.35800090432167053f, +0.5273719429969788f, 0.42861831188201904f, 0.06693475693464279f, 0.0887698233127594f, 0.5787147283554077f, 0.004423694219440222f, 0.3960714340209961f, 0.1457676887512207f, +0.6483666300773621f, 0.13386449217796326f, 0.45530450344085693f, 0.2123357504606247f, 0.7290928363800049f, 0.6123234629631042f, 0.8653300404548645f, 0.6378061175346375f, +0.806420624256134f, 0.16903436183929443f, 0.6989834308624268f, 0.7346838712692261f, 0.8257285356521606f, 0.04829145595431328f, 0.7438396215438843f, 0.044466909021139145f, +0.12642806768417358f, 0.5037513375282288f, 0.09744684398174286f, 0.7791340351104736f, 0.671975314617157f, 0.8719903230667114f, 0.17190438508987427f, 0.09033027291297913f, +0.6864814162254333f, 0.9139289259910583f, 0.20843228697776794f, 0.8048595786094666f, 0.9892703294754028f, 0.9170348644256592f, 0.022617945447564125f, 0.5776330828666687f, +0.15542888641357422f, 0.37725862860679626f, 0.7647619843482971f, 0.9461772441864014f, 0.027325913310050964f, 0.3399756848812103f, 0.7542235255241394f, 0.856212854385376f, +0.6529627442359924f, 0.6268021464347839f, 0.28166458010673523f, 0.47364911437034607f, 0.060242339968681335f, 0.8209209442138672f, 0.3260587155818939f, 0.0001640729169594124f, +0.7448867559432983f, 0.41175293922424316f, 0.018204908818006516f, 0.25952813029289246f, 0.9964519143104553f, 0.4336795210838318f, 0.8897639513015747f, 0.21989822387695312f, +0.7814463376998901f, 0.7378251552581787f, 0.29727378487586975f, 0.19990800321102142f, 0.43126946687698364f, 0.7873287200927734f, 0.3138142228126526f, 0.2876642346382141f, +0.7016658782958984f, 0.6089133024215698f, 0.11734721064567566f, 0.8879112005233765f, 0.46416381001472473f, 0.8747069835662842f, 0.5990705490112305f, 0.6128226518630981f, +0.4946099817752838f, 0.745774507522583f, 0.8155998587608337f, 0.8317232131958008f, 0.10997088998556137f, 0.9162928462028503f, 0.22267498075962067f, 0.3637949824333191f, +0.4998303949832916f, 0.31884685158729553f, 0.9258963465690613f, 0.11640594899654388f, 0.5497346520423889f, 0.05394355580210686f, 0.28114190697669983f, 0.2375182807445526f, +0.9139414429664612f, 0.05836828798055649f, 0.893718421459198f, 0.40223705768585205f, 0.0021393706556409597f, 0.36805200576782227f, 0.35176125168800354f, 0.9300415515899658f, +0.22553683817386627f, 0.5211142897605896f, 0.009076792746782303f, 0.44429445266723633f, 0.42370107769966125f, 0.11432195454835892f, 0.6186831593513489f, 0.9781380295753479f, +0.14809085428714752f, 0.384361207485199f, 0.6864412426948547f, 0.5473632216453552f, 0.3332895040512085f, 0.5819441676139832f, 0.19231896102428436f, 0.8215128183364868f, +0.7153099179267883f, 0.8767112493515015f, 0.3545350730419159f, 0.5545632839202881f, 0.48470649123191833f, 0.6576506495475769f, 0.6988890767097473f, 0.1044425368309021f, +0.38495561480522156f, 0.8068277835845947f, 0.9648447036743164f, 0.10256095975637436f, 0.7352783679962158f, 0.0555301271378994f, 0.3201999366283417f, 0.9873960614204407f, +0.40216606855392456f, 0.8633415102958679f, 0.9427807331085205f, 0.9676252007484436f, 0.8005722165107727f, 0.3144543468952179f, 0.487180233001709f, 0.9214639067649841f, +0.05223847180604935f, 0.0883575826883316f, 0.09656693786382675f, 0.7067498564720154f, 0.33967554569244385f, 0.9260318875312805f, 0.09558107703924179f, 0.6503939628601074f, +0.5118846893310547f, 0.7655817270278931f, 0.1420423835515976f, 0.055122826248407364f, 0.01727961003780365f, 0.4256519079208374f, 0.8859559893608093f, 0.2755235731601715f, +0.0365583673119545f, 0.6433073878288269f, 0.7577797174453735f, 0.29695743322372437f, 0.6812909841537476f, 0.049503177404403687f, 0.898015558719635f, 0.31235241889953613f, +0.5510639548301697f, 0.66387939453125f, 0.4526039659976959f, 0.4380888342857361f, 0.5760678648948669f, 0.042365118861198425f, 0.8013266324996948f, 0.8491970896720886f, +0.22095513343811035f, 0.2795797288417816f, 0.9735501408576965f, 0.7939592599868774f, 0.4948482811450958f, 0.18128670752048492f, 0.538999617099762f, 0.757276177406311f, +0.3913819193840027f, 0.2256685495376587f, 0.9391065835952759f, 0.3296080231666565f, 0.7564560770988464f, 0.7573086619377136f, 0.30682942271232605f, 0.0968254879117012f, +0.8921389579772949f, 0.396354079246521f, 0.3914634585380554f, 0.5728265047073364f, 0.2163141816854477f, 0.3006160855293274f, 0.14316889643669128f, 0.03360931575298309f, +0.19683843851089478f, 0.7098407745361328f, 0.9429147243499756f, 0.16212573647499084f, 0.9868553280830383f, 0.6015674471855164f, 0.849655270576477f, 0.15357835590839386f, +0.8096426129341125f, 0.9293807148933411f, 0.04796478524804115f, 0.017842981964349747f, 0.8519650101661682f, 0.1050838977098465f, 0.9164649248123169f, 0.8772982954978943f, +0.09494336694478989f, 0.6273428797721863f, 0.6989830732345581f, 0.5065542459487915f, 0.5486889481544495f, 0.36412179470062256f, 0.04324464872479439f, 0.8036215901374817f, +0.8031323552131653f, 0.07139766961336136f, 0.06502583622932434f, 0.5062403082847595f, 0.20775656402111053f, 0.03789430484175682f, 0.9005048274993896f, 0.5102697014808655f, +0.298788458108902f, 0.37896519899368286f, 0.47848135232925415f, 0.4661542475223541f, 0.7732184529304504f, 0.41946688294410706f, 0.6269529461860657f, 0.5551499128341675f, +0.04416083171963692f, 0.23249514400959015f, 0.6501819491386414f, 0.49853238463401794f, 0.031546495854854584f, 0.11376656591892242f, 0.32588258385658264f, 0.7896535992622375f, +0.9239780902862549f, 0.6780317425727844f, 0.4913219213485718f, 0.9390518069267273f, 0.9170863032341003f, 0.39745205640792847f, 0.007718143984675407f, 0.9416697025299072f, +0.9352251291275024f, 0.7690147161483765f, 0.9981340169906616f, 0.8694754242897034f, 0.9972984194755554f, 0.42319628596305847f, 0.5671378970146179f, 0.696503221988678f, +0.9151027798652649f, 0.028024328872561455f, 0.2918287515640259f, 0.9304337501525879f, 0.37307846546173096f, 0.3464619219303131f, 0.4305386543273926f, 0.8300960659980774f, +0.5778043270111084f, 0.8111752271652222f, 0.13656412065029144f, 0.8565636873245239f, 0.7408909797668457f, 0.20980210602283478f, 0.6845217943191528f, 0.8139221668243408f, +0.24262069165706635f, 0.6815133690834045f, 0.9873573780059814f, 0.6828001737594604f, 0.26899072527885437f, 0.9103057980537415f, 0.26675647497177124f, 0.7841249704360962f, +0.578101634979248f, 0.7807080745697021f, 0.4710672199726105f, 0.8271394968032837f, 0.4892052412033081f, 0.8144481778144836f, 0.7078461647033691f, 0.38163477182388306f, +0.3825749158859253f, 0.3756454885005951f, 0.9975058436393738f, 0.6214891076087952f, 0.647551953792572f, 0.3791837692260742f, 0.13386006653308868f, 0.059728607535362244f, +0.7112236618995667f, 0.9622542858123779f, 0.376968652009964f, 0.9742438197135925f, 0.6803184151649475f, 0.6827352643013f, 0.1619379222393036f, 0.8326146006584167f, +0.27504441142082214f, 0.6388344764709473f, 0.22020594775676727f, 0.34436818957328796f, 0.200045645236969f, 0.09745067358016968f, 0.07920537889003754f, 0.25886470079421997f, +0.9356324672698975f, 0.8853225111961365f, 0.35097211599349976f, 0.46046575903892517f, 0.7470248341560364f, 0.8001919984817505f, 0.010631987825036049f, 0.2803708612918854f, +0.7046042084693909f, 0.2876489460468292f, 0.035514723509550095f, 0.7692643404006958f, 0.22261108458042145f, 0.6084657907485962f, 0.31870776414871216f, 0.30464157462120056f, +0.41328367590904236f, 0.7625457048416138f, 0.9405269622802734f, 0.907249927520752f, 0.894478976726532f, 0.7692955732345581f, 0.34160780906677246f, 0.5998509526252747f, +0.2811642587184906f, 0.4785471260547638f, 0.8681966066360474f, 0.04342266917228699f, 0.8750017881393433f, 0.9988105297088623f, 0.841713547706604f, 0.5425392985343933f, +0.1353013813495636f, 0.3384624123573303f, 0.2975703477859497f, 0.6618345975875854f, 0.14882269501686096f, 0.4923485219478607f, 0.83673095703125f, 0.9430660605430603f, +0.9084741473197937f, 0.7715400457382202f, 0.8326882123947144f, 0.6903112530708313f, 0.4572694003582001f, 0.9058242440223694f, 0.4985961616039276f, 0.6200729012489319f, +0.3182718753814697f, 0.7077697515487671f, 0.8532195091247559f, 0.6546608209609985f, 0.20373372733592987f, 0.6537269353866577f, 0.45938268303871155f, 0.4565517008304596f, +0.9647131562232971f, 0.4215519428253174f, 0.5000253915786743f, 0.11542151868343353f, 0.4554327130317688f, 0.6000188589096069f, 0.12204920500516891f, 0.6517630219459534f, +0.8578510880470276f, 0.7177325487136841f, 0.6538370251655579f, 0.5431165099143982f, 0.7448396682739258f, 0.9895415902137756f, 0.006765761412680149f, 0.45381686091423035f, +0.5699407458305359f, 0.6657756567001343f, 0.49198636412620544f, 0.874843180179596f, 0.576583981513977f, 0.9783938527107239f, 0.2075183391571045f, 0.8221939206123352f, +0.603064239025116f, 0.5286979675292969f, 0.4083762466907501f, 0.018294045701622963f, 0.6038996577262878f, 0.5505656003952026f, 0.37031063437461853f, 0.41625046730041504f, +0.7713103294372559f, 0.41492804884910583f, 0.7741436958312988f, 0.9152447581291199f, 0.1172502189874649f, 0.8453711867332458f, 0.9970516562461853f, 0.30002954602241516f, +0.30646777153015137f, 0.37412965297698975f, 0.29618120193481445f, 0.2637197971343994f, 0.22126756608486176f, 0.39385131001472473f, 0.7078040242195129f, 0.7641443014144897f, +0.9984588623046875f, 0.7173429131507874f, 0.7527623772621155f, 0.12689636647701263f, 0.9542233943939209f, 0.4893433749675751f, 0.17706020176410675f, 0.3610333800315857f, +0.12409777194261551f, 0.8995109796524048f, 0.13522504270076752f, 0.26750868558883667f, 0.444376677274704f, 0.21841618418693542f, 0.5478275418281555f, 0.2886255383491516f, +0.6206606030464172f, 0.6738200187683105f, 0.158323734998703f, 0.42921799421310425f, 0.15447404980659485f, 0.518659770488739f, 0.18431456387043f, 0.05029036104679108f, +0.29617229104042053f, 0.9971966743469238f, 0.5439448356628418f, 0.6628648638725281f, 0.4310348629951477f, 0.555101215839386f, 0.048232302069664f, 0.27059200406074524f, +0.8113362193107605f, 0.7586269974708557f, 0.8897688984870911f, 0.99323970079422f, 0.07896990329027176f, 0.8480687141418457f, 0.11247201263904572f, 0.7173124551773071f, +0.3567980229854584f, 0.6399664878845215f, 0.2412218600511551f, 0.9931946992874146f, 0.2666199505329132f, 0.9203693866729736f, 0.43284741044044495f, 0.49965545535087585f, +0.5921038389205933f, 0.9212735295295715f, 0.9582502841949463f, 0.12173107266426086f, 0.3559035360813141f, 0.6854214072227478f, 0.8951027393341064f, 0.5683135390281677f, +0.9394803047180176f, 0.16145673394203186f, 0.6533332467079163f, 0.30025458335876465f, 0.71486896276474f, 0.7423697710037231f, 0.22422030568122864f, 0.7648594379425049f, +0.37454208731651306f, 0.3082922697067261f, 0.9173159003257751f, 0.6679877042770386f, 0.8164969086647034f, 0.2819782793521881f, 0.15595120191574097f, 0.48055341839790344f, +0.7878451347351074f, 0.0837680920958519f, 0.16027775406837463f, 0.6946912407875061f, 0.36564600467681885f, 0.6583799719810486f, 0.5570698380470276f, 0.021441010758280754f, +0.4204503297805786f, 0.7097898721694946f, 0.0070629604160785675f, 0.29771363735198975f, 0.0011921445839107037f, 0.8723564743995667f, 0.33225804567337036f, 0.8411946892738342f, +0.6021048426628113f, 0.8702071905136108f, 0.8372960686683655f, 0.4768415093421936f, 0.6902289390563965f, 0.8520441055297852f, 0.5622596144676208f, 0.6735870242118835f, +0.6224834322929382f, 0.6817695498466492f, 0.5565117597579956f, 0.5936611294746399f, 0.7094128131866455f, 0.2606695890426636f, 0.5054524540901184f, 0.0687117874622345f, +0.5004580020904541f, 0.9922334551811218f, 0.751595675945282f, 0.4209754168987274f, 0.0611504428088665f, 0.265168160200119f, 0.6701803207397461f, 0.8896877765655518f, +0.9830138683319092f, 0.5702942609786987f, 0.7824578881263733f, 0.5019682049751282f, 0.8770473003387451f, 0.5228215456008911f, 0.25887182354927063f, 0.9993405342102051f, +0.9901755452156067f, 0.9114287495613098f, 0.6676598191261292f, 0.7684841752052307f, 0.9104709029197693f, 0.2068871408700943f, 0.615935206413269f, 0.8890359997749329f, +0.9013625979423523f, 0.3610665202140808f, 0.5584561824798584f, 0.8807449340820312f, 0.862128496170044f, 0.33648252487182617f, 0.7057212591171265f, 0.22927136719226837f, +0.7856196165084839f, 0.21340331435203552f, 0.6417996883392334f, 0.8436668515205383f, 0.6758657693862915f, 0.4389921724796295f, 0.7482907176017761f, 0.4895883798599243f, +0.44884079694747925f, 0.19506467878818512f, 0.9749286770820618f, 0.2137926071882248f, 0.36347097158432007f, 0.9332455396652222f, 0.23681636154651642f, 0.6302573084831238f, +0.28731629252433777f, 0.7293248176574707f, 0.7536763548851013f, 0.6063036322593689f, 0.47240325808525085f, 0.07746565341949463f, 0.3298625946044922f, 0.18175645172595978f, +0.9023533463478088f, 0.23960869014263153f, 0.2517194449901581f, 0.7087815403938293f, 0.37948355078697205f, 0.0269472636282444f, 0.5993933081626892f, 0.5510429739952087f, +0.7004274129867554f, 0.7245900630950928f, 0.07333897054195404f, 0.4100145399570465f, 0.5141205191612244f, 0.8322973847389221f, 0.34670671820640564f, 0.5609953999519348f, +0.7789194583892822f, 0.35751309990882874f, 0.5639124512672424f, 0.35280540585517883f, 0.4892583191394806f, 0.6447136998176575f, 0.4593861699104309f, 0.23209942877292633f, +0.9707139134407043f, 0.7321913838386536f, 0.036259301006793976f, 0.6876112222671509f, 0.41126787662506104f, 0.7567342519760132f, 0.09293091297149658f, 0.07258584350347519f, +0.481166809797287f, 0.13309623301029205f, 0.9530408382415771f, 0.0765300765633583f, 0.37413907051086426f, 0.8615156412124634f, 0.7708081603050232f, 0.03253917023539543f, +0.4016287922859192f, 0.8811249732971191f, 0.43406617641448975f, 0.5107806324958801f, 0.5046225786209106f, 0.24141618609428406f, 0.4562465250492096f, 0.8215422630310059f, +0.5319868326187134f, 0.8800548911094666f, 0.9495132565498352f, 0.5784745812416077f, 0.18635153770446777f, 0.1393432766199112f, 0.9817385077476501f, 0.8113709092140198f, +0.8548088669776917f, 0.8628193140029907f, 0.9865127205848694f, 0.7508739829063416f, 0.8469505310058594f, 0.1381654292345047f, 0.8876730799674988f, 0.6717658042907715f, +0.7826068997383118f, 0.09217774122953415f, 0.03546474128961563f, 0.7104117274284363f, 0.8600329160690308f, 0.43038326501846313f, 0.7977439761161804f, 0.3793554902076721f, +0.39853957295417786f, 0.07593464851379395f, 0.9236675500869751f, 0.4149061441421509f, 0.3563193082809448f, 0.8375599980354309f, 0.6187517642974854f, 0.4451048672199249f, +0.7569819092750549f, 0.9983177781105042f, 0.8050602078437805f, 0.8659498691558838f, 0.46472904086112976f, 0.6620948314666748f, 0.3287769854068756f, 0.8689994812011719f, +0.12002751231193542f, 0.9837472438812256f, 0.027220340445637703f, 0.9517334699630737f, 0.05057011917233467f, 0.23613744974136353f, 0.3358243703842163f, 0.15302009880542755f, +0.8928970694541931f, 0.5062786936759949f, 0.9317892789840698f, 0.14213934540748596f, 0.1545996516942978f, 0.22332420945167542f, 0.8606374263763428f, 0.9920529127120972f, +0.4836844503879547f, 0.22814446687698364f, 0.6554035544395447f, 0.8539131283760071f, 0.9143315553665161f, 0.8804396986961365f, 0.26331672072410583f, 0.36035585403442383f, +0.15503086149692535f, 0.3448675572872162f, 0.85392826795578f, 0.9434925317764282f, 0.6181796193122864f, 0.908858060836792f, 0.6520962119102478f, 0.350146621465683f, +0.8274497389793396f, 0.7100204229354858f, 0.6260897517204285f, 0.29512926936149597f, 0.9818930625915527f, 0.550724446773529f, 0.4442194104194641f, 0.9289306402206421f, +0.6247345805168152f, 0.4651590585708618f, 0.7432096004486084f, 0.043095365166664124f, 0.5397086143493652f, 0.071221262216568f, 0.07869796454906464f, 0.3499850928783417f, +0.49823349714279175f, 0.7364708781242371f, 0.6612979173660278f, 0.714434802532196f, 0.06475402414798737f, 0.3401035964488983f, 0.6456628441810608f, 0.03249778971076012f, +0.2846565246582031f, 0.8218938708305359f, 0.7555005550384521f, 0.22640958428382874f, 0.3500674068927765f, 0.9590960144996643f, 0.9986200332641602f, 0.3281600773334503f, +0.5695921778678894f, 0.6426911950111389f, 0.9102038145065308f, 0.4739628732204437f, 0.978011429309845f, 0.6661853790283203f, 0.7266901135444641f, 0.16946858167648315f, +0.7925025820732117f, 0.3053385317325592f, 0.7468429207801819f, 0.2859566807746887f, 0.7194824814796448f, 0.09432879090309143f, 0.05183150991797447f, 0.48865488171577454f, +0.8528358340263367f, 0.9188558459281921f, 0.5497276186943054f, 0.8130354285240173f, 0.44653943181037903f, 0.6815072894096375f, 0.7590802907943726f, 0.8556429147720337f, +0.7837921977043152f, 0.5903109908103943f, 0.8594547510147095f, 0.11533815413713455f, 0.42749929428100586f, 0.6516762375831604f, 0.9317508935928345f, 0.9361156225204468f, +0.5998687744140625f, 0.38291966915130615f, 0.02505493350327015f, 0.1195448786020279f, 0.36782997846603394f, 0.13853506743907928f, 0.683484673500061f, 0.1759127974510193f, +0.2888198494911194f, 0.8162463307380676f, 0.3495335876941681f, 0.33045318722724915f, 0.8551762700080872f, 0.12902040779590607f, 0.8526456952095032f, 0.6026912331581116f, +0.9031690955162048f, 0.12291357666254044f, 0.11076387017965317f, 0.48999106884002686f, 0.23687255382537842f, 0.4950760006904602f, 0.1313445121049881f, 0.7395028471946716f, +0.945259153842926f, 0.847944438457489f, 0.6307790875434875f, 0.15542152523994446f, 0.362673819065094f, 0.07219218462705612f, 0.8951852321624756f, 0.023518426343798637f, +0.47683364152908325f, 0.37850990891456604f, 0.2546291649341583f, 0.4534418284893036f, 0.9762526750564575f, 0.5246965289115906f, 0.30161210894584656f, 0.23999106884002686f, +0.1940041482448578f, 0.5456339120864868f, 0.5447190403938293f, 0.3386000096797943f, 0.45292532444000244f, 0.5539417862892151f, 0.7663055062294006f, 0.2305140495300293f, +0.6197627186775208f, 0.5203630924224854f, 0.9027498364448547f, 0.06286884844303131f, 0.5112097859382629f, 0.4646309018135071f, 0.11890284717082977f, 0.19570323824882507f, +0.5785254836082458f, 0.6810398697853088f, 0.4217357039451599f, 0.49573248624801636f, 0.4974251389503479f, 0.6556512117385864f, 0.27472683787345886f, 0.029438799247145653f, +0.40592968463897705f, 0.9925691485404968f, 0.2642507255077362f, 0.31170085072517395f, 0.01780054159462452f, 0.23047764599323273f, 0.9060454964637756f, 0.15023024380207062f, +0.09392143785953522f, 0.6725542545318604f, 0.7883683443069458f, 0.2556827962398529f, 0.6868558526039124f, 0.5984870791435242f, 0.7098873853683472f, 0.35747650265693665f, +0.9376078248023987f, 0.014860245399177074f, 0.2308744341135025f, 0.2642052471637726f, 0.286639541387558f, 0.19264324009418488f, 0.7159547209739685f, 0.11384451389312744f, +0.6161707639694214f, 0.2469342052936554f, 0.1410863995552063f, 0.00480957655236125f, 0.003287730272859335f, 0.1772860288619995f, 0.2126922458410263f, 0.37575557827949524f, +0.2981877624988556f, 0.5445948243141174f, 0.619447648525238f, 0.5673018097877502f, 0.8829959630966187f, 0.7973681688308716f, 0.5181303024291992f, 0.7534231543540955f, +0.04105183109641075f, 0.6726353764533997f, 0.1301283985376358f, 0.9870744943618774f, 0.1091657504439354f, 0.7091976404190063f, 0.8226519227027893f, 0.44246163964271545f, +0.7288203835487366f, 0.42583417892456055f, 0.9343949556350708f, 0.41134533286094666f, 0.6353251934051514f, 0.16817890107631683f, 0.29728519916534424f, 0.2855398654937744f, +0.17064626514911652f, 0.4171828627586365f, 0.47764796018600464f, 0.39098185300827026f, 0.7374704480171204f, 0.295517235994339f, 0.8360936641693115f, 0.5607746243476868f, +0.09620551764965057f, 0.42256301641464233f, 0.8445187211036682f, 0.32487162947654724f, 0.14150547981262207f, 0.3104754090309143f, 0.6761274337768555f, 0.5348890423774719f, +0.0611630417406559f, 0.7707911133766174f, 0.002775043249130249f, 0.05505431443452835f, 0.9561864137649536f, 0.05034531280398369f, 0.4498441815376282f, 0.6266584396362305f, +0.48641473054885864f, 0.8483188152313232f, 0.6240183711051941f, 0.7955682873725891f, 0.275173157453537f, 0.5563943386077881f, 0.038127586245536804f, 0.49156516790390015f, +0.6324081420898438f, 0.1854536384344101f, 0.38899075984954834f, 0.706200361251831f, 0.3130177855491638f, 0.4753991365432739f, 0.1640709638595581f, 0.9542667865753174f, +0.6874528527259827f, 0.21772974729537964f, 0.5608426928520203f, 0.09105092287063599f, 0.8310830593109131f, 0.35704994201660156f, 0.5737921595573425f, 0.8126915693283081f, +0.5339692234992981f, 0.22240179777145386f, 0.017596397548913956f, 0.5455433130264282f, 0.9479324817657471f, 0.5249329805374146f, 0.2460850179195404f, 0.8192827701568604f, +0.1885460466146469f, 0.8553906083106995f, 0.14218193292617798f, 0.34177571535110474f, 0.01726694032549858f, 0.3658693730831146f, 0.399275004863739f, 0.2632695138454437f, +0.9342396259307861f, 0.5454329252243042f, 0.38481828570365906f, 0.5611515045166016f, 0.8285773396492004f, 0.687662661075592f, 0.5872284770011902f, 0.37782323360443115f, +0.9510570168495178f, 0.7520553469657898f, 0.9492166638374329f, 0.5253994464874268f, 0.592908501625061f, 0.8740895390510559f, 0.12451174855232239f, 0.2710726261138916f, +0.38854020833969116f, 0.27767303586006165f, 0.39873719215393066f, 0.1751260608434677f, 0.19254814088344574f, 0.9540883898735046f, 0.20747345685958862f, 0.950761079788208f, +0.6689170598983765f, 0.628460705280304f, 0.2607229948043823f, 0.5261057615280151f, 0.3162969648838043f, 0.09850014001131058f, 0.6620252728462219f, 0.8404297828674316f, +0.7776497602462769f, 0.5076927542686462f, 0.8068526387214661f, 0.2330116480588913f, 0.6603296995162964f, 0.04880397021770477f, 0.806317925453186f, 0.30225127935409546f, +0.34156233072280884f, 0.30000433325767517f, 0.4389573633670807f, 0.6019353270530701f, 0.662102222442627f, 0.11809296905994415f, 0.18435625731945038f, 0.013071178458631039f, +0.15909142792224884f, 0.04032843932509422f, 0.11912672221660614f, 0.9137143492698669f, 0.17312178015708923f, 0.06644637137651443f, 0.5226843357086182f, 0.6849826574325562f, +0.092234306037426f, 0.5215609669685364f, 0.8396924734115601f, 0.46853509545326233f, 0.10330253839492798f, 0.9781199097633362f, 0.33666378259658813f, 0.9785668849945068f, +0.8296507596969604f, 0.20910227298736572f, 0.4234447777271271f, 0.2954486906528473f, 0.7645148634910583f, 0.2158399373292923f, 0.4346522390842438f, 0.5703012347221375f, +0.16971828043460846f, 0.008963853120803833f, 0.4497103989124298f, 0.9006527662277222f, 0.5784854292869568f, 0.33597514033317566f, 0.9365482926368713f, 0.40152162313461304f, +0.5636050701141357f, 0.9224168658256531f, 0.024563629180192947f, 0.9719236493110657f, 0.4911777973175049f, 0.41761526465415955f, 0.3465155363082886f, 0.6801859140396118f, +0.28988054394721985f, 0.6040023565292358f, 0.6836473345756531f, 0.3703387677669525f, 0.8778159022331238f, 0.5898664593696594f, 0.8392235636711121f, 0.9342520236968994f, +0.39376401901245117f, 0.6189244985580444f, 0.3945833444595337f, 0.959201455116272f, 0.18584157526493073f, 0.8416770696640015f, 0.5313221216201782f, 0.3275904059410095f, +0.6532284617424011f, 0.5108333230018616f, 0.5820698142051697f, 0.9787764549255371f, 0.5388308167457581f, 0.4284767508506775f, 0.6212252974510193f, 0.2098814994096756f, +0.0832664892077446f, 0.2242649346590042f, 0.6129127144813538f, 0.852306067943573f, 0.9579082131385803f, 0.9610037207603455f, 0.7290349006652832f, 0.30446550250053406f, +0.2983359396457672f, 0.5723592638969421f, 0.2531810402870178f, 0.38558244705200195f, 0.22180208563804626f, 0.8805043697357178f, 0.7430662512779236f, 0.9269949197769165f, +0.4839819371700287f, 0.7721084952354431f, 0.8779027462005615f, 0.4551205635070801f, 0.5337694883346558f, 0.525178849697113f, 0.9384798407554626f, 0.8429659008979797f, +0.7369313836097717f, 0.16575637459754944f, 0.19293935596942902f, 0.08313659578561783f, 0.8936373591423035f, 0.5036971569061279f, 0.6456759572029114f, 0.17635062336921692f, +0.21307773888111115f, 0.168702632188797f, 0.8314955234527588f, 0.7078732848167419f, 0.8438335061073303f, 0.35762080550193787f, 0.4698794484138489f, 0.056162040680646896f, +0.45963194966316223f, 0.18977375328540802f, 0.1697784662246704f, 0.7778432965278625f, 0.5753327012062073f, 0.8983596563339233f, 0.6778154373168945f, 0.8906749486923218f, +0.4326530396938324f, 0.5134044885635376f, 0.16524934768676758f, 0.3705664873123169f, 0.30730658769607544f, 0.5285729169845581f, 0.2982843816280365f, 0.7873008251190186f, +0.4696899950504303f, 0.516478419303894f, 0.6317961812019348f, 0.9175705313682556f, 0.23413315415382385f, 0.6038852334022522f, 0.7935447096824646f, 0.8418254256248474f, +0.08575562387704849f, 0.42893725633621216f, 0.4702005386352539f, 0.6991149187088013f, 0.45215776562690735f, 0.8048678040504456f, 0.48667699098587036f, 0.416405588388443f, +0.34541046619415283f, 0.842139482498169f, 0.08004928380250931f, 0.7808946967124939f, 0.6663949489593506f, 0.48848381638526917f, 0.1245521828532219f, 0.4211941063404083f, +0.7197526693344116f, 0.38088834285736084f, 0.6261341571807861f, 0.1780371069908142f, 0.30937761068344116f, 0.09990347921848297f, 0.5262606739997864f, 0.6637631058692932f, +0.2635948956012726f, 0.25248613953590393f, 0.3262144923210144f, 0.6107107400894165f, 0.2041628509759903f, 0.27515339851379395f, 0.6090614199638367f, 0.6360276341438293f, +0.5341176986694336f, 0.35997694730758667f, 0.38621601462364197f, 0.2935276925563812f, 0.0864829272031784f, 0.37365999817848206f, 0.966383159160614f, 0.8391196131706238f, +0.2463238537311554f, 0.0206930972635746f, 0.8295243382453918f, 0.6884793639183044f, 0.659052312374115f, 0.4620908200740814f, 0.09802640229463577f, 0.4069609045982361f, +0.04311691224575043f, 0.4386962950229645f, 0.3068404495716095f, 0.5699819922447205f, 0.405384361743927f, 0.1522197127342224f, 0.5490211248397827f, 0.020985931158065796f, +0.40770483016967773f, 0.4876936078071594f, 0.5308440923690796f, 0.7433078289031982f, 0.10752399265766144f, 0.7893761396408081f, 0.06511546671390533f, 0.731442391872406f, +0.21157298982143402f, 0.5583769083023071f, 0.30695998668670654f, 0.3996281921863556f, 0.2719220519065857f, 0.7775363326072693f, 0.29811039566993713f, 0.2053917497396469f, +0.6395459771156311f, 0.32320788502693176f, 0.5954601764678955f, 0.8613904714584351f, 0.7374956011772156f, 0.4940447211265564f, 0.7848524451255798f, 0.1194252222776413f, +0.5750316381454468f, 0.13991208374500275f, 0.7544143795967102f, 0.6484687328338623f, 0.5528277158737183f, 0.5713830590248108f, 0.9451169371604919f, 0.4428669214248657f, +0.2699156105518341f, 0.4058007001876831f, 0.16463275253772736f, 0.3086402416229248f, 0.5723624229431152f, 0.48775890469551086f, 0.0747891217470169f, 0.5084825754165649f, +0.47699013352394104f, 0.29154476523399353f, 0.5192393660545349f, 0.6859140396118164f, 0.5467963218688965f, 0.8826227188110352f, 0.3673993945121765f, 0.1505119502544403f, +0.29888737201690674f, 0.03413837030529976f, 0.10425505042076111f, 0.8754257559776306f, 0.0667472630739212f, 0.35916462540626526f, 0.401429146528244f, 0.17339305579662323f, +0.09136437624692917f, 0.5434245467185974f, 0.4791901111602783f, 0.5987166166305542f, 0.28794771432876587f, 0.4275851249694824f, 0.5637434720993042f, 0.20427468419075012f, +0.8958987593650818f, 0.7014939188957214f, 0.051173135638237f, 0.1763819307088852f, 0.9798639416694641f, 0.3243277370929718f, 0.9462725520133972f, 0.9189424514770508f, +0.08407679945230484f, 0.8061437606811523f, 0.4599795937538147f, 0.28690195083618164f, 0.45804286003112793f, 0.7293834090232849f, 0.6218646168708801f, 0.2583484351634979f, +0.2818162143230438f, 0.7938990592956543f, 0.5685887336730957f, 0.26104018092155457f, 0.112286776304245f, 0.18151132762432098f, 0.23522771894931793f, 0.4692642092704773f, +0.7858371138572693f, 0.9829822182655334f, 0.3500264286994934f, 0.6284287571907043f, 0.3278205096721649f, 0.5710650682449341f, 0.49897727370262146f, 0.0671551451086998f, +0.2615262269973755f, 0.39510729908943176f, 0.4935106337070465f, 0.7418432235717773f, 0.9543195962905884f, 0.8160495162010193f, 0.9953480362892151f, 0.3473759591579437f, +0.578188419342041f, 0.44195204973220825f, 0.15036022663116455f, 0.13645385205745697f, 0.671660304069519f, 0.1889510601758957f, 0.057356275618076324f, 0.8586337566375732f, +0.45280951261520386f, 0.03828735649585724f, 0.7651338577270508f, 0.053093135356903076f, 0.3955438435077667f, 0.9598299264907837f, 0.5730642676353455f, 0.3658107817173004f, +0.0183450635522604f, 0.06457221508026123f, 0.7341999411582947f, 0.28732895851135254f, 0.49511751532554626f, 0.9524901509284973f, 0.9869855642318726f, 0.004628547467291355f, +0.31522122025489807f, 0.2866796851158142f, 0.2086692899465561f, 0.1822485774755478f, 0.6720324158668518f, 0.45029622316360474f, 0.2937537133693695f, 0.35018372535705566f, +0.9139487147331238f, 0.24612461030483246f, 0.8388001918792725f, 0.055167101323604584f, 0.40085187554359436f, 0.41604214906692505f, 0.7579700946807861f, 0.9693965911865234f, +0.007737628184258938f, 0.9677200317382812f, 0.9478422403335571f, 0.06510114669799805f, 0.7274754643440247f, 0.14033056795597076f, 0.6506255269050598f, 0.9734686613082886f, +0.17994357645511627f, 0.6881433725357056f, 0.6037669777870178f, 0.524998664855957f, 0.9365692138671875f, 0.7066923975944519f, 0.98448246717453f, 0.1397305727005005f, +0.7160907983779907f, 0.5722663998603821f, 0.5994718670845032f, 0.29420480132102966f, 0.5026049613952637f, 0.676272988319397f, 0.25155654549598694f, 0.4818556606769562f, +0.7427701354026794f, 0.9087716937065125f, 0.5995118021965027f, 0.336716890335083f, 0.23088014125823975f, 0.12515488266944885f, 0.9814932346343994f, 0.030537225306034088f, +0.4794272184371948f, 0.29556554555892944f, 0.3098005950450897f, 0.8910598754882812f, 0.4342274069786072f, 0.1992369145154953f, 0.1941535770893097f, 0.7708661556243896f, +0.43474364280700684f, 0.08374408632516861f, 0.6303514242172241f, 0.7290739417076111f, 0.09584039449691772f, 0.8956767916679382f, 0.8654686808586121f, 0.7907619476318359f, +0.17547112703323364f, 0.07469063997268677f, 0.8193109035491943f, 0.6682966351509094f, 0.06646814942359924f, 0.06890471279621124f, 0.6157216429710388f, 0.9082525372505188f, +0.07462958246469498f, 0.6752410531044006f, 0.048876259475946426f, 0.4622892141342163f, 0.8204374313354492f, 0.6535975933074951f, 0.6099140644073486f, 0.21248458325862885f, +0.27769577503204346f, 0.35379675030708313f, 0.08517889678478241f, 0.30960264801979065f, 0.6726204752922058f, 0.992120087146759f, 0.47408297657966614f, 0.256498783826828f, +0.23793092370033264f, 0.20411549508571625f, 0.2950814962387085f, 0.10197949409484863f, 0.16163644194602966f, 0.48799654841423035f, 0.26741304993629456f, 0.11105706542730331f, +0.09857726097106934f, 0.4945825934410095f, 0.45651814341545105f, 0.9333265423774719f, 0.6037929058074951f, 0.8533493876457214f, 0.9187206029891968f, 0.05158821865916252f, +0.7099855542182922f, 0.6326844096183777f, 0.7748348712921143f, 0.45812493562698364f, 0.38787761330604553f, 0.04808440059423447f, 0.7806870937347412f, 0.22023355960845947f, +0.7163118124008179f, 0.6509333848953247f, 0.7174556851387024f, 0.8741976618766785f, 0.048581916838884354f, 0.2887367308139801f, 0.6274875402450562f, 0.6031047105789185f, +0.574472963809967f, 0.832726776599884f, 0.7412901520729065f, 0.21822653710842133f, 0.1956528276205063f, 0.7735253572463989f, 0.06299486756324768f, 0.1661321520805359f, +0.17393875122070312f, 0.811242401599884f, 0.9212049841880798f, 0.06166213005781174f, 0.09728740900754929f, 0.3771071135997772f, 0.4864107370376587f, 0.002277224790304899f, +0.14911064505577087f, 0.2623991072177887f, 0.087967149913311f, 0.8812525868415833f, 0.8786006569862366f, 0.7122893333435059f, 0.9497931003570557f, 0.496367871761322f, +0.9994882941246033f, 0.5317352414131165f, 0.506300687789917f, 0.2230735868215561f, 0.7357815504074097f, 0.056186940521001816f, 0.4230869710445404f, 0.6310372948646545f, +0.28849101066589355f, 0.8208775520324707f, 0.1679617464542389f, 0.5042926669120789f, 0.20606690645217896f, 0.43091848492622375f, 0.07331319898366928f, 0.030771948397159576f, +0.4339090883731842f, 0.4528922140598297f, 0.9150173664093018f, 0.8827791213989258f, 0.6573867201805115f, 0.11191564798355103f, 0.659295380115509f, 0.04559759795665741f, +0.3629274368286133f, 0.7592317461967468f, 0.7747867703437805f, 0.5691185593605042f, 0.6677122712135315f, 0.8014598488807678f, 0.008962249383330345f, 0.26155534386634827f, +0.9621247053146362f, 0.4117625951766968f, 0.2144370675086975f, 0.33351460099220276f, 0.8845661878585815f, 0.23629282414913177f, 0.5905978679656982f, 0.005060345865786076f, +0.7600565552711487f, 0.30678895115852356f, 0.022492531687021255f, 0.2675594389438629f, 0.8507698774337769f, 0.9885277152061462f, 0.46577537059783936f, 0.9299410581588745f, +0.6002746224403381f, 0.24473100900650024f, 0.6316812634468079f, 0.7274897694587708f, 0.37380069494247437f, 0.6805321574211121f, 0.4516732394695282f, 0.16875794529914856f, +0.9824519753456116f, 0.5265710949897766f, 0.9101687669754028f, 0.39852097630500793f, 0.4391036331653595f, 0.5620119571685791f, 0.10404970496892929f, 0.4016485810279846f, +0.39898625016212463f, 0.7827284932136536f, 0.8841509222984314f, 0.2814931571483612f, 0.7904929518699646f, 0.968015193939209f, 0.8971646428108215f, 0.03781774640083313f, +0.5655707716941833f, 0.3803272545337677f, 0.2600253224372864f, 0.5311211347579956f, 0.8228450417518616f, 0.8110784292221069f, 0.6978962421417236f, 0.8369046449661255f, +0.08615871518850327f, 0.7565610408782959f, 0.7988147139549255f, 0.5049692392349243f, 0.9648325443267822f, 0.19286580383777618f, 0.35822784900665283f, 0.019517680630087852f, +0.1653425693511963f, 0.5707922577857971f, 0.37451472878456116f, 0.6274303197860718f, 0.6800948977470398f, 0.8653841018676758f, 0.4521109461784363f, 0.365579217672348f, +0.007018651347607374f, 0.7824912667274475f, 0.6722573041915894f, 0.8659417629241943f, 0.13952063024044037f, 0.7690549492835999f, 0.5063453316688538f, 0.9875400066375732f, +0.25724613666534424f, 0.2566762864589691f, 0.11588819324970245f, 0.731927216053009f, 0.47208940982818604f, 0.669211745262146f, 0.5443520545959473f, 0.5950750708580017f, +0.9609253406524658f, 0.6426895260810852f, 0.3826417922973633f, 0.30285942554473877f, 0.8919384479522705f, 0.5223174095153809f, 0.9718109369277954f, 0.5030852556228638f, +0.9151466488838196f, 0.5998561978340149f, 0.7168008685112f, 0.47948506474494934f, 0.9734587073326111f, 0.9997189044952393f, 0.62806636095047f, 0.8662985563278198f, +0.7542369961738586f, 0.9293001294136047f, 0.9002092480659485f, 0.660448431968689f, 0.40117383003234863f, 0.9262562990188599f, 0.9819161891937256f, 0.6911081075668335f, +0.760516345500946f, 0.4810850918292999f, 0.2767205536365509f, 0.591758131980896f, 0.638964056968689f, 0.4446357190608978f, 0.9864932894706726f, 0.52243971824646f, +0.03723209351301193f, 0.7209857106208801f, 0.05685831978917122f, 0.8309366703033447f, 0.9554030299186707f, 0.5262980461120605f, 0.6005406379699707f, 0.3508489727973938f, +0.4308526813983917f, 0.8688364028930664f, 0.048758022487163544f, 0.21196556091308594f, 0.7812913656234741f, 0.05588048696517944f, 0.5149310231208801f, 0.6787821650505066f, +0.8627097606658936f, 0.3883627653121948f, 0.9379564523696899f, 0.6538522243499756f, 0.26079288125038147f, 0.19465559720993042f, 0.03254730626940727f, 0.20732417702674866f, +0.5877590775489807f, 0.6658494472503662f, 0.7913411855697632f, 0.6556693315505981f, 0.0648517981171608f, 0.981484055519104f, 0.02536119520664215f, 0.10094082355499268f, +0.833748459815979f, 0.42368337512016296f, 0.43482381105422974f, 0.971494197845459f, 0.11733884364366531f, 0.9014824032783508f, 0.14118874073028564f, 0.47940754890441895f, +0.7797805070877075f, 0.7845767140388489f, 0.2931007444858551f, 0.9479763507843018f, 0.4910568296909332f, 0.7359461188316345f, 0.3337729871273041f, 0.04678377881646156f, +0.7051306962966919f, 0.3782064914703369f, 0.1796783208847046f, 0.6080578565597534f, 0.30932196974754333f, 0.3053915500640869f, 0.250453919172287f, 0.9218175411224365f, +0.23293621838092804f, 0.8419591784477234f, 0.5207253694534302f, 0.08739648759365082f, 0.5318828225135803f, 0.3724205195903778f, 0.018459759652614594f, 0.2882010340690613f, +0.6757683753967285f, 0.13764336705207825f, 0.7202473282814026f, 0.4991072118282318f, 0.5994769930839539f, 0.592570424079895f, 0.5548906922340393f, 0.43760713934898376f, +0.935558557510376f, 0.1953103244304657f, 0.17590686678886414f, 0.34211352467536926f, 0.542031466960907f, 0.23923246562480927f, 0.5109034776687622f, 0.9008070826530457f, +0.6101613640785217f, 0.36498644948005676f, 0.11080779880285263f, 0.6651166677474976f, 0.360140860080719f, 0.3456724286079407f, 0.7364704012870789f, 0.9328043460845947f, +0.7363318204879761f, 0.34346750378608704f, 0.725214421749115f, 0.22997629642486572f, 0.0979001596570015f, 0.3978864252567291f, 0.47921428084373474f, 0.9071608185768127f, +0.6495940089225769f, 0.697964608669281f, 0.5261865854263306f, 0.38504287600517273f, 0.26720911264419556f, 0.08616527169942856f, 0.4635077118873596f, 0.3011544644832611f, +0.3652741312980652f, 0.8486945033073425f, 0.4895823895931244f, 0.1945134401321411f, 0.5598046183586121f, 0.1549801379442215f, 0.7565990686416626f, 0.016315482556819916f, +0.47090908885002136f, 0.8975157141685486f, 0.7096637487411499f, 0.41508737206459045f, 0.07132099568843842f, 0.3899962604045868f, 0.7019973397254944f, 0.6190866231918335f, +0.90423983335495f, 0.6503984928131104f, 0.4636870324611664f, 0.5898318290710449f, 0.9657814502716064f, 0.012407731264829636f, 0.9419548511505127f, 0.41732171177864075f, +0.508263349533081f, 0.8712491393089294f, 0.08287059515714645f, 0.22135628759860992f, 0.1977406144142151f, 0.021669704467058182f, 0.5061020255088806f, 0.6566483378410339f, +0.8917954564094543f, 0.4339748024940491f, 0.07321804761886597f, 0.540590763092041f, 0.020163411274552345f, 0.9070888757705688f, 0.2760370373725891f, 0.8888716101646423f, +0.8755115270614624f, 0.26383718848228455f, 0.30549871921539307f, 0.7631160616874695f, 0.9969722032546997f, 0.6135402917861938f, 0.705287516117096f, 0.23733900487422943f, +0.08615923672914505f, 0.9945247173309326f, 0.6944193243980408f, 0.7303643822669983f, 0.16895349323749542f, 0.14563481509685516f, 0.8856902122497559f, 0.421549916267395f, +0.875677227973938f, 0.49325692653656006f, 0.6884728670120239f, 0.9192825555801392f, 0.3600645363330841f, 0.7826414108276367f, 0.977539598941803f, 0.509164035320282f, +0.9846748113632202f, 0.6668704748153687f, 0.8322262167930603f, 0.3005584478378296f, 0.9460497498512268f, 0.5374778509140015f, 0.2098235785961151f, 0.1845027506351471f, +0.8199095726013184f, 0.05978011712431908f, 0.7789411544799805f, 0.6753519177436829f, 0.2650865316390991f, 0.491540789604187f, 0.536819577217102f, 0.7247172594070435f, +0.7693386673927307f, 0.49494972825050354f, 0.8719226121902466f, 0.1520419865846634f, 0.7423307299613953f, 0.43238669633865356f, 0.011314895004034042f, 0.9931563138961792f, +0.24723784625530243f, 0.40074798464775085f, 0.09784222394227982f, 0.9919655323028564f, 0.7054351568222046f, 0.9202175736427307f, 0.18762771785259247f, 0.7711175084114075f, +0.6568161845207214f, 0.3341640532016754f, 0.4591602385044098f, 0.5138874053955078f, 0.16144277155399323f, 0.5409726500511169f, 0.0771707072854042f, 0.23002146184444427f, +0.8298317193984985f, 0.9832111597061157f, 0.12776683270931244f, 0.14980478584766388f, 0.7715216279029846f, 0.9036014676094055f, 0.9847795963287354f, 0.3699982762336731f, +0.26295793056488037f, 0.3148934245109558f, 0.06381778419017792f, 0.9815942645072937f, 0.0752488300204277f, 0.8771342039108276f, 0.8736276030540466f, 0.6779417991638184f, +0.5732308626174927f, 0.9071075916290283f, 0.0019808588549494743f, 0.5240399241447449f, 0.28170672059059143f, 0.22658927738666534f, 0.8184428811073303f, 0.6776214241981506f, +0.30609259009361267f, 0.8634149432182312f, 0.14725139737129211f, 0.5387130975723267f, 0.779909610748291f, 0.6779021620750427f, 0.6346973776817322f, 0.4142448604106903f, +0.6465600728988647f, 0.47126105427742004f, 0.522064745426178f, 0.12594011425971985f, 0.8423010110855103f, 0.3845645785331726f, 0.39408352971076965f, 0.7395864129066467f, +0.7442447543144226f, 0.9888554811477661f, 0.13244691491127014f, 0.8665971755981445f, 0.6708739399909973f, 0.5377756953239441f, 0.7810347676277161f, 0.9828063249588013f, +0.3619764745235443f, 0.4237139821052551f, 0.5527353286743164f, 0.9381161332130432f, 0.4752235412597656f, 0.3936516046524048f, 0.4070160686969757f, 0.7063471078872681f, +0.11909569799900055f, 0.6360223293304443f, 0.810019314289093f, 2.6633308152668178e-05f, 0.5930951833724976f, 0.021356066688895226f, 0.560512363910675f, 0.369213730096817f, +0.19668738543987274f, 0.11357134580612183f, 0.43626198172569275f, 0.851570725440979f, 0.9771956205368042f, 0.16813284158706665f, 0.38764864206314087f, 0.5837044715881348f, +0.08376572281122208f, 0.4589250087738037f, 0.7353159785270691f, 0.6436023116111755f, 0.5531660914421082f, 0.386027455329895f, 0.19300417602062225f, 0.06838983297348022f, +0.9993038773536682f, 0.9888635277748108f, 0.05261003226041794f, 0.06543143093585968f, 0.18411949276924133f, 0.032550305128097534f, 0.8024260401725769f, 0.9668664336204529f, +0.6927982568740845f, 0.08397874981164932f, 0.6339503526687622f, 0.9981802701950073f, 0.6442863941192627f, 0.891064465045929f, 0.5911423563957214f, 0.9214357733726501f, +0.08861764520406723f, 0.8743223547935486f, 0.3660944998264313f, 0.7933511734008789f, 0.27845320105552673f, 0.7059577703475952f, 0.5684746503829956f, 0.16883882880210876f, +0.8019207119941711f, 0.36570313572883606f, 0.26496294140815735f, 0.01530928909778595f, 0.41811805963516235f, 0.21641701459884644f, 0.6997250914573669f, 0.8827694654464722f, +0.0860418751835823f, 0.24297603964805603f, 0.5897557139396667f, 0.4854969084262848f, 0.9217313528060913f, 0.5904665589332581f, 0.9972102046012878f, 0.03998727723956108f, +0.3813328146934509f, 0.5473147034645081f, 0.016352176666259766f, 0.1800081878900528f, 0.9523070454597473f, 0.024701397866010666f, 0.7235895991325378f, 0.4394855201244354f, +0.18722780048847198f, 0.569389283657074f, 0.9402238130569458f, 0.9012695550918579f, 0.3299551010131836f, 0.6383518576622009f, 0.012649446725845337f, 0.056295350193977356f, +0.00021978597214911133f, 0.5737628936767578f, 0.31911805272102356f, 0.9888516068458557f, 0.8901253938674927f, 0.5315712690353394f, 0.5394250750541687f, 0.9991908073425293f, +0.05878749489784241f, 0.011276914738118649f, 0.36718854308128357f, 0.5267137289047241f, 0.47730785608291626f, 0.27079376578330994f, 0.37006598711013794f, 0.7653077840805054f, +0.06379958242177963f, 0.37615564465522766f, 0.93356853723526f, 0.90879225730896f, 0.48355019092559814f, 0.6809117794036865f, 0.14991453289985657f, 0.977342963218689f, +0.01581074483692646f, 0.09761901199817657f, 0.6927123069763184f, 0.4484615921974182f, 0.3623245060443878f, 0.6136114001274109f, 0.2583824098110199f, 0.3651335835456848f, +0.8884844779968262f, 0.1787956953048706f, 0.2387474924325943f, 0.7337020635604858f, 0.041699301451444626f, 0.15157757699489594f, 0.7170830965042114f, 0.6654297709465027f, +0.9008473753929138f, 0.48236262798309326f, 0.9574246406555176f, 0.5117677450180054f, 0.05611037090420723f, 0.5102453827857971f, 0.7942280769348145f, 0.8935983777046204f, +0.47883176803588867f, 0.5919848680496216f, 0.11304086446762085f, 0.76060551404953f, 0.5467166304588318f, 0.9582470059394836f, 0.13439680635929108f, 0.9257378578186035f, +0.9940950274467468f, 0.3033845126628876f, 0.7922242879867554f, 0.03218749538064003f, 0.7335239052772522f, 0.21122126281261444f, 0.9958242774009705f, 0.7460929751396179f, +0.2666102945804596f, 0.8576001524925232f, 0.6136961579322815f, 0.4811500310897827f, 0.9528115391731262f, 0.42076581716537476f, 0.8788119554519653f, 0.46078768372535706f, +0.9699917435646057f, 0.033899810165166855f, 0.08371344953775406f, 0.5433631539344788f, 0.45206218957901f, 0.5250109434127808f, 0.9796788096427917f, 0.22065654397010803f, +0.6699917912483215f, 0.5801515579223633f, 0.06576201319694519f, 0.7236096262931824f, 0.3703228831291199f, 0.7768658995628357f, 0.8999099135398865f, 0.7195396423339844f, +0.3689476251602173f, 0.22909756004810333f, 0.3706482946872711f, 0.9261583685874939f, 0.44682326912879944f, 0.5958666801452637f, 0.2844378650188446f, 0.9264121055603027f, +0.9081171751022339f, 0.10542738437652588f, 0.07521884143352509f, 0.3199874758720398f, 0.6066154837608337f, 0.16844318807125092f, 0.5892269015312195f, 0.4354605972766876f, +0.7163946628570557f, 0.9378185272216797f, 0.7480183243751526f, 0.22079764306545258f, 0.1560530662536621f, 0.3589998781681061f, 0.8457366228103638f, 0.378071665763855f, +0.1284177303314209f, 0.5485025644302368f, 0.9635348916053772f, 0.09216739237308502f, 0.9349304437637329f, 0.8835311532020569f, 0.5348816514015198f, 0.889802098274231f, +0.6637775301933289f, 0.57881760597229f, 0.1067187711596489f, 0.18648777902126312f, 0.695540189743042f, 0.3760142922401428f, 0.454475998878479f, 0.5246728658676147f, +0.19446948170661926f, 0.44788673520088196f, 0.5930137634277344f, 0.5077561736106873f, 0.2951063811779022f, 0.1722114384174347f, 0.00791696086525917f, 0.9933266639709473f, +0.8951809406280518f, 0.359150767326355f, 0.4026963710784912f, 0.6852596402168274f, 0.06917638331651688f, 0.9892358183860779f, 0.6215890645980835f, 0.9082479476928711f, +0.031110001727938652f, 0.3897051215171814f, 0.7325595617294312f, 0.7901549935340881f, 0.9590626955032349f, 0.27187660336494446f, 0.6673740148544312f, 0.478260338306427f, +0.571444034576416f, 0.4589115083217621f, 0.5049058198928833f, 0.06044372171163559f, 0.7957624197006226f, 0.13340476155281067f, 0.8628571629524231f, 0.1247510239481926f, +0.818156898021698f, 0.14624729752540588f, 0.19708259403705597f, 0.2231711596250534f, 0.36713865399360657f, 0.9672079682350159f, 0.09486240148544312f, 0.4485372006893158f, +0.045363955199718475f, 0.43354660272598267f, 0.4399658441543579f, 0.5809313654899597f, 0.29303085803985596f, 0.6318140625953674f, 0.4001963436603546f, 0.9525929689407349f, +0.4225379228591919f, 0.9708455204963684f, 0.4277251362800598f, 0.03371981903910637f, 0.38455498218536377f, 0.9704114198684692f, 0.46314185857772827f, 0.1884257048368454f, +0.7708265781402588f, 0.2981903851032257f, 0.4836810827255249f, 0.7222177386283875f, 0.6989760994911194f, 0.41110777854919434f, 0.7267580628395081f, 0.9952706694602966f, +0.7894587516784668f, 0.7095082998275757f, 0.7833852171897888f, 0.6040787100791931f, 0.7560037970542908f, 0.5901641845703125f, 0.16228389739990234f, 0.9179514646530151f, +0.7595548629760742f, 0.5659668445587158f, 0.09053079038858414f, 0.9444442391395569f, 0.26835185289382935f, 0.927952766418457f, 0.7443640232086182f, 0.5090920329093933f, +0.08642827719449997f, 0.539168119430542f, 0.5232887864112854f, 0.25006940960884094f, 0.2387012541294098f, 0.9283301830291748f, 0.18201571702957153f, 0.7151692509651184f, +0.1632162481546402f, 0.9783587455749512f, 0.9966490268707275f, 0.7083399891853333f, 0.9894168376922607f, 0.3429831266403198f, 0.8950645923614502f, 0.08262684941291809f, +0.5534324049949646f, 0.755753755569458f, 0.11107043921947479f, 0.7124798893928528f, 0.6959860324859619f, 0.1275964379310608f, 0.021031459793448448f, 0.5463755130767822f, +0.17589464783668518f, 0.5754109621047974f, 0.5758915543556213f, 0.8832504749298096f, 0.4067441523075104f, 0.5442053079605103f, 0.3121766448020935f, 0.3026523292064667f, +0.07392343133687973f, 0.7414839267730713f, 0.5963916182518005f, 0.1352943778038025f, 0.9351076483726501f, 0.13725048303604126f, 0.7920308709144592f, 0.9912292957305908f, +0.7551430463790894f, 0.3397015333175659f, 0.6236693859100342f, 0.9873456954956055f, 0.38560858368873596f, 0.5284799337387085f, 0.5344756841659546f, 0.7371304631233215f, +0.8681150078773499f, 0.12008196860551834f, 0.4158805310726166f, 0.18373873829841614f, 0.9911958575248718f, 0.745146632194519f, 0.8964448571205139f, 0.11673462390899658f, +0.09183493256568909f, 0.518500804901123f, 0.13586664199829102f, 0.8413397073745728f, 0.5356965065002441f, 0.9753051996231079f, 0.7294628024101257f, 0.7264524102210999f, +0.664767861366272f, 0.495408833026886f, 0.10908236354589462f, 0.6457959413528442f, 0.9928189516067505f, 0.4665485918521881f, 0.3192882239818573f, 0.14031308889389038f, +0.4308617115020752f, 0.38650625944137573f, 0.7065386772155762f, 0.282787024974823f, 0.3087325394153595f, 0.4347570538520813f, 0.3858110308647156f, 0.6708813309669495f, +0.12273312360048294f, 0.5932598114013672f, 0.8410735130310059f, 0.6662210822105408f, 0.9882248044013977f, 0.7678346633911133f, 0.3602222502231598f, 0.051299650222063065f, +0.525519609451294f, 0.7459655404090881f, 0.8719441294670105f, 0.4646327793598175f, 0.13148759305477142f, 0.7302359342575073f, 0.9222093224525452f, 0.15958814322948456f, +0.24893635511398315f, 0.7355911731719971f, 0.06579647213220596f, 0.9501360058784485f, 0.9589226841926575f, 0.026924721896648407f, 0.9008616209030151f, 0.07004960626363754f, +0.6271240711212158f, 0.9011807441711426f, 0.6222898960113525f, 0.35115861892700195f, 0.4631500840187073f, 0.10699526965618134f, 0.21654364466667175f, 0.3077239692211151f, +0.10746869444847107f, 0.8762049078941345f, 0.9018765091896057f, 0.8584761023521423f, 0.5509456396102905f, 0.5025045275688171f, 0.07686669379472733f, 0.10372291505336761f, +0.38355398178100586f, 0.13195036351680756f, 0.6474214792251587f, 0.5604142546653748f, 0.3115234076976776f, 0.20096507668495178f, 0.5407562255859375f, 0.41388264298439026f, +0.36205190420150757f, 0.317363977432251f, 0.6756859421730042f, 0.13113029301166534f, 0.9094049334526062f, 0.5065644979476929f, 0.1106630340218544f, 0.5018395185470581f, +0.5458912253379822f, 0.4004424512386322f, 0.5050379633903503f, 0.7237043380737305f, 0.14436106383800507f, 0.894943118095398f, 0.3679138720035553f, 0.571205198764801f, +0.1508115530014038f, 0.0264686718583107f, 0.501754105091095f, 0.178629532456398f, 0.1487550586462021f, 0.8495885133743286f, 0.11197356134653091f, 0.7943138480186462f, +0.7464184165000916f, 0.9447202086448669f, 0.19359122216701508f, 0.018057111650705338f, 0.6975275874137878f, 0.9246779084205627f, 0.7355021238327026f, 0.8399577140808105f, +0.34021246433258057f, 0.916962206363678f, 0.024410728365182877f, 0.4690805673599243f, 0.5335363745689392f, 0.11504796147346497f, 0.4768942892551422f, 0.7140545845031738f, +0.6783592104911804f, 0.6566420793533325f, 0.2154093086719513f, 0.8640264868736267f, 0.14769041538238525f, 0.91053307056427f, 0.13789600133895874f, 0.8095691800117493f, +0.628040075302124f, 0.23846398293972015f, 0.9395817518234253f, 0.057777006179094315f, 0.23274466395378113f, 0.8745688796043396f, 0.5015578269958496f, 0.40923258662223816f, +0.28056302666664124f, 0.627571165561676f, 0.014021315611898899f, 0.9906707406044006f, 0.6060711741447449f, 0.3676062822341919f, 0.5354078412055969f, 0.9218676686286926f, +0.5582873821258545f, 0.43179282546043396f, 0.23808042705059052f, 0.5992022752761841f, 0.2711349427700043f, 0.6276721358299255f, 0.8207514882087708f, 0.5229189395904541f, +0.23410344123840332f, 0.7201432585716248f, 0.04126063734292984f, 0.16249313950538635f, 0.1576598733663559f, 0.183478444814682f, 0.34475693106651306f, 0.22882600128650665f, +0.4221920967102051f, 0.4229002594947815f, 0.7660142183303833f, 0.5351821184158325f, 0.4244362413883209f, 0.00021932866366114467f, 0.2373393326997757f, 0.32886144518852234f, +0.3290538489818573f, 0.21222123503684998f, 0.17322146892547607f, 0.0533236525952816f, 0.11662966758012772f, 0.4985993504524231f, 0.6017184853553772f, 0.34899815917015076f, +0.4130207896232605f, 0.06438605487346649f, 0.378511905670166f, 0.6394481658935547f, 0.4581349492073059f, 0.41293150186538696f, 0.9752081036567688f, 0.8377854228019714f, +0.7510355114936829f, 0.33636733889579773f, 0.8280028700828552f, 0.5620408654212952f, 0.9108021259307861f, 0.1852065771818161f, 0.5722578763961792f, 0.15641041100025177f, +0.3197670876979828f, 0.9801021218299866f, 0.8637512922286987f, 0.2212952822446823f, 0.12595030665397644f, 0.21978998184204102f, 0.2956025004386902f, 0.660743236541748f, +0.5355923175811768f, 0.8866249322891235f, 0.2725954055786133f, 0.20804794132709503f, 0.7734991312026978f, 0.8414015769958496f, 0.15521976351737976f, 0.7527894973754883f, +0.6687478423118591f, 0.03645721822977066f, 0.908223569393158f, 0.5469984412193298f, 0.6954716444015503f, 0.14487123489379883f, 0.8374518156051636f, 0.07809817790985107f, +0.3647848069667816f, 0.01334687601774931f, 0.5972472429275513f, 0.6819698810577393f, 0.3116241693496704f, 0.29968398809432983f, 0.6383519172668457f, 0.7910045981407166f, +0.811293363571167f, 0.12011591345071793f, 0.008832337334752083f, 0.5451347827911377f, 0.9474359750747681f, 0.5425127744674683f, 0.2782137989997864f, 0.5260543823242188f, +0.8566471338272095f, 0.832703173160553f, 0.2750454843044281f, 0.6586672067642212f, 0.976986825466156f, 0.47316664457321167f, 0.6548347473144531f, 0.5689510703086853f, +0.3560884892940521f, 0.5455610752105713f, 0.13041481375694275f, 0.7213568091392517f, 0.8606321811676025f, 0.10072746872901917f, 0.2633136510848999f, 0.7863550186157227f, +0.8760136961936951f, 0.945626437664032f, 0.2625526189804077f, 0.3650827705860138f, 0.8831875324249268f, 0.7515133619308472f, 0.9371910691261292f, 0.4941551387310028f, +0.7532053589820862f, 0.3810979425907135f, 0.42577695846557617f, 0.35887300968170166f, 0.18217049539089203f, 0.3680529296398163f, 0.4216970205307007f, 0.8597255945205688f, +0.8237282037734985f, 0.37845921516418457f, 0.05031588301062584f, 0.08651822060346603f, 0.5294850468635559f, 0.5110165476799011f, 0.06921250373125076f, 0.48618361353874207f, +0.05192819982767105f, 0.9642355442047119f, 0.23971772193908691f, 0.21735236048698425f, 0.7366701364517212f, 0.5280038714408875f, 0.9798381924629211f, 0.8272987604141235f, +0.26772254705429077f, 0.1932891458272934f, 0.4739648401737213f, 0.2206542044878006f, 0.20471630990505219f, 0.5594149827957153f, 0.838236927986145f, 0.6871776580810547f, +0.42867234349250793f, 0.4416159987449646f, 0.540359616279602f, 0.8169205784797668f, 0.6261215806007385f, 0.6271224021911621f, 0.6908761858940125f, 0.6217145919799805f, +0.8542003035545349f, 0.2140251249074936f, 0.8328459858894348f, 0.9803945422172546f, 0.9078041911125183f, 0.7010592222213745f, 0.8846733570098877f, 0.7824404835700989f, +0.13345447182655334f, 0.05311227962374687f, 0.28981950879096985f, 0.5767615437507629f, 0.0944836214184761f, 0.040088552981615067f, 0.48096323013305664f, 0.7129549384117126f, +0.21614187955856323f, 0.6729664206504822f, 0.7100368142127991f, 0.7146452069282532f, 0.7464884519577026f, 0.24451901018619537f, 0.9071619510650635f, 0.3187027871608734f, +0.4100157916545868f, 0.6176655292510986f, 0.9584053754806519f, 0.5549083948135376f, 0.22306950390338898f, 0.08390794694423676f, 0.6369912028312683f, 0.09534823149442673f, +0.6530535221099854f, 0.8194104433059692f, 0.6354818940162659f, 0.7342098355293274f, 0.6414404511451721f, 0.647431492805481f, 0.9510336518287659f, 0.33071479201316833f, +0.029445882886648178f, 0.9452979564666748f, 0.9715989828109741f, 0.27884745597839355f, 0.6697065830230713f, 0.4984792470932007f, 0.6316373944282532f, 0.5172708034515381f, +0.2663096487522125f, 0.3838469982147217f, 0.062301572412252426f, 0.2734086215496063f, 0.42910295724868774f, 0.29564571380615234f, 0.8307054042816162f, 0.17379900813102722f, +0.1848294585943222f, 0.18511822819709778f, 0.970272958278656f, 0.5022565722465515f, 0.19941358268260956f, 0.7261258959770203f, 0.1864062249660492f, 0.4505468010902405f, +0.3190252482891083f, 0.2453814446926117f, 0.9361451268196106f, 0.9993994235992432f, 0.4622650444507599f, 0.9557632803916931f, 0.6924253106117249f, 0.9569783210754395f, +0.3192681074142456f, 0.0647868663072586f, 0.7089366316795349f, 0.5443436503410339f, 0.8324979543685913f, 0.21543477475643158f, 0.9754494428634644f, 0.02162514068186283f, +0.6585572361946106f, 0.16402031481266022f, 0.9616122841835022f, 0.48955103754997253f, 0.028816217556595802f, 0.9148147106170654f, 0.8453441262245178f, 0.3562229573726654f, +0.8075996041297913f, 0.8389050364494324f, 0.19877751171588898f, 0.8029295802116394f, 0.9523884057998657f, 0.08592680841684341f, 0.4690622389316559f, 0.2325371354818344f, +0.008241512812674046f, 0.5986615419387817f, 0.7721908688545227f, 0.3839426636695862f, 0.0663275346159935f, 0.05714882165193558f, 0.08954174071550369f, 0.8917667865753174f, +0.2692962884902954f, 0.882309079170227f, 0.8557037115097046f, 0.09141437709331512f, 0.7632579207420349f, 0.25752007961273193f, 0.5393220782279968f, 0.35870739817619324f, +0.7855767011642456f, 0.43049806356430054f, 0.608367919921875f, 0.8087406158447266f, 0.5422240495681763f, 0.28822576999664307f, 0.4286518394947052f, 0.8018761277198792f, +0.6240404844284058f, 0.42930763959884644f, 0.07657740265130997f, 0.246654212474823f, 0.4268459379673004f, 0.5122673511505127f, 0.20180505514144897f, 0.4293704032897949f, +0.530621349811554f, 0.14854606986045837f, 0.44022229313850403f, 0.34158653020858765f, 0.1827850639820099f, 0.25025060772895813f, 0.2132958471775055f, 0.18907605111598969f, +0.408858984708786f, 0.6083966493606567f, 0.827290952205658f, 0.11797202378511429f, 0.7185970544815063f, 0.7130858898162842f, 0.7036057114601135f, 0.6381387710571289f, +0.6605591773986816f, 0.03511229529976845f, 0.3848620057106018f, 0.6665701270103455f, 0.5916727185249329f, 0.3616586923599243f, 0.668512761592865f, 0.5249313116073608f, +0.5598018765449524f, 0.22094546258449554f, 0.7965911626815796f, 0.3228101432323456f, 0.5515871047973633f, 0.9247456192970276f, 0.45478516817092896f, 0.4197218120098114f, +0.5736956000328064f, 0.530329704284668f, 0.2619335949420929f, 0.006732375826686621f, 0.6506837010383606f, 0.6140536665916443f, 0.16965728998184204f, 0.4327883720397949f, +0.04375634714961052f, 0.22801221907138824f, 0.32086268067359924f, 0.7026991844177246f, 0.4889148473739624f, 0.023593541234731674f, 0.11811763048171997f, 0.9963045716285706f, +0.35957348346710205f, 0.34028005599975586f, 0.09035026282072067f, 0.43342912197113037f, 0.13189704716205597f, 0.22106625139713287f, 0.7333466410636902f, 0.8362438082695007f, +0.8884353637695312f, 0.10082811862230301f, 0.4955531060695648f, 0.46308720111846924f, 0.08086346089839935f, 0.23511503636837006f, 0.940696656703949f, 0.08636421710252762f, +0.5810694098472595f, 0.5039339065551758f, 0.3731798231601715f, 0.4311974048614502f, 0.6966903805732727f, 0.40783989429473877f, 0.329746276140213f, 0.7624473571777344f, +0.36881887912750244f, 0.2297946810722351f, 0.9102556109428406f, 0.9907805323600769f, 0.05009463056921959f, 0.12897610664367676f, 0.2637806832790375f, 0.7478237152099609f, +0.48249414563179016f, 0.6198176741600037f, 0.24835819005966187f, 0.4352886974811554f, 0.962902843952179f, 0.4270780682563782f, 0.03443736210465431f, 0.7264461517333984f, +0.7373371720314026f, 0.7794026732444763f, 0.35326382517814636f, 0.8667505383491516f, 0.781528115272522f, 0.6850907802581787f, 0.8196992874145508f, 0.5392337441444397f, +0.8637182116508484f, 0.983750581741333f, 0.7210636138916016f, 0.9923118352890015f, 0.6822125315666199f, 0.6890132427215576f, 0.7291491031646729f, 0.7665805220603943f, +0.2203589230775833f, 0.4881346523761749f, 0.5743812322616577f, 0.2756667733192444f, 0.31867220997810364f, 0.016091927886009216f, 0.1661926805973053f, 0.22252772748470306f, +0.0435013584792614f, 0.4261374771595001f, 0.08308006078004837f, 0.008687096647918224f, 0.7735738158226013f, 0.187691792845726f, 0.7752366662025452f, 0.1202976256608963f, +0.501901388168335f, 0.5288212895393372f, 0.8168665170669556f, 0.4117810130119324f, 0.3800238072872162f, 0.24536065757274628f, 0.4745223820209503f, 0.4341067671775818f, +0.4501914978027344f, 0.8303790092468262f, 0.7335572242736816f, 0.031139463186264038f, 0.9070072174072266f, 0.8481468558311462f, 0.43152037262916565f, 0.07149477303028107f, +0.6114387512207031f, 0.5939207673072815f, 0.7746989130973816f, 0.3085688054561615f, 0.5718030333518982f, 0.33100274205207825f, 0.5492895841598511f, 0.43776097893714905f, +0.5663994550704956f, 0.44416606426239014f, 0.3060012757778168f, 0.7786826491355896f, 0.8743994235992432f, 0.6766529083251953f, 0.40800046920776367f, 0.8527894616127014f, +0.6376884579658508f, 0.817847728729248f, 0.9988347887992859f, 0.18136495351791382f, 0.6354825496673584f, 0.43443164229393005f, 0.0787319466471672f, 0.35502979159355164f, +0.4404357671737671f, 0.3186990022659302f, 0.030823875218629837f, 0.08278276026248932f, 0.28767290711402893f, 0.12352508306503296f, 0.6173965930938721f, 0.6316378712654114f, +0.5145511627197266f, 0.5834246873855591f, 0.8503324389457703f, 0.004869438242167234f, 0.384162962436676f, 0.18299274146556854f, 0.877174973487854f, 0.5330988168716431f, +0.18410316109657288f, 0.5229637026786804f, 0.8007857799530029f, 0.4084058701992035f, 0.35979804396629333f, 0.7376047968864441f, 0.9790882468223572f, 0.6289837956428528f, +0.7595638036727905f, 0.3460930585861206f, 0.1744658201932907f, 0.4038696885108948f, 0.33378857374191284f, 0.21316446363925934f, 0.677191436290741f, 0.22308413684368134f, +0.5848789215087891f, 0.18710149824619293f, 0.11210036277770996f, 0.8488476276397705f, 0.300546258687973f, 0.08043304830789566f, 0.0740458220243454f, 0.42948687076568604f, +0.5713151097297668f, 0.9823160767555237f, 0.7574862837791443f, 0.010058315470814705f, 0.4190952479839325f, 0.23539184033870697f, 0.700939953327179f, 0.18061193823814392f, +0.015956314280629158f, 0.7453824281692505f, 0.753801167011261f, 0.683667778968811f, 0.4638001024723053f, 0.6006297469139099f, 0.27532336115837097f, 0.6462768316268921f, +0.3347353935241699f, 0.6127497553825378f, 0.8505926132202148f, 0.8938919901847839f, 0.03274818882346153f, 0.555035412311554f, 0.21112871170043945f, 0.5241973996162415f, +0.7181292176246643f, 0.5970037579536438f, 0.29960688948631287f, 0.24338960647583008f, 0.4263562858104706f, 0.3760201036930084f, 0.18978610634803772f, 0.4632450044155121f, +0.9780886769294739f, 0.5325199365615845f, 0.3365023732185364f, 0.8157888054847717f, 0.8048189282417297f, 0.5378464460372925f, 0.34605512022972107f, 0.01711035519838333f, +0.41740697622299194f, 0.3092540204524994f, 0.6611872315406799f, 0.04894537478685379f, 0.8109414577484131f, 0.6753332018852234f, 0.15686267614364624f, 0.40756577253341675f, +0.0774141326546669f, 0.8451985716819763f, 0.3266431391239166f, 0.08992800116539001f, 0.6709786653518677f, 0.608465313911438f, 0.36474913358688354f, 0.14840394258499146f, +0.7929334044456482f, 0.27606284618377686f, 0.6865962147712708f, 0.8449602723121643f, 0.5722383856773376f, 0.7827025055885315f, 0.3326082229614258f, 0.2592546343803406f, +0.5913040041923523f, 0.2668590247631073f, 0.8375739455223083f, 0.3279573619365692f, 0.1699250489473343f, 0.3105706572532654f, 0.9985532164573669f, 0.7086818814277649f, +0.4680890738964081f, 0.2048414796590805f, 0.6447592377662659f, 0.09514788538217545f, 0.3314095437526703f, 0.6667085886001587f, 0.056504927575588226f, 0.42784616351127625f, +0.5961987972259521f, 0.5002983212471008f, 0.9040735960006714f, 0.8334683179855347f, 0.428006649017334f, 0.3619016110897064f, 0.1976393461227417f, 0.620029091835022f, +0.33150362968444824f, 0.9911347031593323f, 0.13792218267917633f, 0.41349804401397705f, 0.11511830985546112f, 0.005426245275884867f, 0.5071116089820862f, 0.7844904065132141f, +0.6904903650283813f, 0.2879205346107483f, 0.7033220529556274f, 0.559770941734314f, 0.18729369342327118f, 0.20336942374706268f, 0.9195337295532227f, 0.9188998341560364f, +0.4212280213832855f, 0.9369603991508484f, 0.0762803852558136f, 0.48905810713768005f, 0.17686672508716583f, 0.3262665271759033f, 0.4254465401172638f, 0.7409277558326721f, +0.3346324861049652f, 0.6484004855155945f, 0.9753602147102356f, 0.5730735659599304f, 0.010148384608328342f, 0.8876969814300537f, 0.15367282927036285f, 0.2969549000263214f, +0.77553391456604f, 0.5371474027633667f, 0.006119738798588514f, 0.1825719028711319f, 0.4728083312511444f, 0.3589038848876953f, 0.31602582335472107f, 0.5306341648101807f, +0.3426697850227356f, 0.1911904364824295f, 0.8667131066322327f, 0.21985137462615967f, 0.8237035274505615f, 0.3908269703388214f, 0.798248827457428f, 0.5737333297729492f, +0.1556190401315689f, 0.8907030820846558f, 0.4904624819755554f, 0.2762848734855652f, 0.5751527547836304f, 0.7396215200424194f, 0.9061834812164307f, 0.7211852669715881f, +0.8822771310806274f, 0.4226422607898712f, 0.9792129397392273f, 0.06844467669725418f, 0.6918613314628601f, 0.6128895878791809f, 0.32317501306533813f, 0.2853896915912628f, +0.2437100112438202f, 0.8170071840286255f, 0.7392115592956543f, 0.31569698452949524f, 0.9191780090332031f, 0.30329209566116333f, 0.781825602054596f, 0.48226237297058105f, +0.9172930121421814f, 0.5049543976783752f, 0.7138909101486206f, 0.08135681599378586f, 0.24532727897167206f, 0.21838079392910004f, 0.7382681369781494f, 0.6145296692848206f, +0.5621091723442078f, 0.0914851650595665f, 0.9384413361549377f, 0.799143373966217f, 0.10191566497087479f, 0.7107278108596802f, 0.022051246836781502f, 0.5756950974464417f, +0.08029044419527054f, 0.6461271643638611f, 0.30800098180770874f, 0.16126494109630585f, 0.04688449203968048f, 0.9154012799263f, 0.014255858957767487f, 0.7209731340408325f, +0.5772050619125366f, 0.4684923589229584f, 0.5041961669921875f, 0.2751055657863617f, 0.9250915050506592f, 0.23125918209552765f, 0.008753026835620403f, 0.7539231181144714f, +0.957497775554657f, 0.8348957300186157f, 0.8886655569076538f, 0.4112195372581482f, 0.6424184441566467f, 0.3717902600765228f, 0.6411327719688416f, 0.16051344573497772f, +0.7788704633712769f, 0.2914170026779175f, 0.43109169602394104f, 0.3474656045436859f, 0.038921281695365906f, 0.5014805197715759f, 0.2525540590286255f, 0.15632474422454834f, +0.6021268367767334f, 0.37164145708084106f, 0.870622992515564f, 0.3625127971172333f, 0.18470750749111176f, 0.3288916349411011f, 0.7486695647239685f, 0.8247238993644714f, +0.38301414251327515f, 0.2690703868865967f, 0.2636319696903229f, 0.7361226081848145f, 0.11188174039125443f, 0.10781563818454742f, 0.7993870377540588f, 0.18908806145191193f, +0.8412371873855591f, 0.4579855501651764f, 0.3395260274410248f, 0.4235658645629883f, 0.1396433562040329f, 0.18474534153938293f, 0.09159261733293533f, 0.6730505228042603f, +0.5549125671386719f, 0.7396169304847717f, 0.1674364060163498f, 0.36745479702949524f, 0.17711642384529114f, 0.17960716784000397f, 0.2507694959640503f, 0.16855373978614807f, +0.45858174562454224f, 0.7648335695266724f, 0.7990601658821106f, 0.6642943024635315f, 0.4356876611709595f, 0.15426965057849884f, 0.6044911742210388f, 0.7701521515846252f, +0.577133297920227f, 0.7927592396736145f, 0.15910501778125763f, 0.34873443841934204f, 0.8754333853721619f, 0.3216281831264496f, 0.28012359142303467f, 0.2472667545080185f, +0.0019535340834409f, 0.5924376249313354f, 0.16956877708435059f, 0.6992374062538147f, 0.38395750522613525f, 0.52225261926651f, 0.535045325756073f, 0.8873903155326843f, +0.7571605443954468f, 0.90192711353302f, 0.9350818991661072f, 0.24011756479740143f, 0.02942679636180401f, 0.4522431194782257f, 0.12972450256347656f, 0.13707830011844635f, +0.09826387465000153f, 0.9954836368560791f, 0.7098060846328735f, 0.2322702407836914f, 0.25102880597114563f, 0.6218942999839783f, 0.5387336015701294f, 0.10534012317657471f, +0.9136486053466797f, 0.5519229769706726f, 0.629787802696228f, 0.33493077754974365f, 0.49953749775886536f, 0.639205813407898f, 0.5039316415786743f, 0.8002790808677673f, +0.5880137085914612f, 0.500667154788971f, 0.9869639873504639f, 0.9468355178833008f, 0.20509283244609833f, 0.8984914422035217f, 0.5655477046966553f, 0.47990700602531433f, +0.8698902130126953f, 0.4788101017475128f, 0.54854816198349f, 0.9008951783180237f, 0.0003471774107310921f, 0.2796473205089569f, 0.3121134042739868f, 0.9665243029594421f, +0.4953087568283081f, 0.42559030652046204f, 0.3028500974178314f, 0.3603217601776123f, 0.7575143575668335f, 0.7167708873748779f, 0.8101570010185242f, 0.8994027972221375f, +0.6087509989738464f, 0.6351999640464783f, 0.9714100360870361f, 0.06940464675426483f, 0.5025054216384888f, 0.09593505412340164f, 0.20137150585651398f, 0.04752866178750992f, +0.3265060484409332f, 0.6759889125823975f, 0.358441025018692f, 0.8566532731056213f, 0.9915478825569153f, 0.9966002702713013f, 0.02083636447787285f, 0.913727343082428f, +0.21605980396270752f, 0.1504785120487213f, 0.12514899671077728f, 0.8315417766571045f, 0.09289973974227905f, 0.4394473135471344f, 0.8225728273391724f, 0.31023526191711426f, +0.30043715238571167f, 0.8114571571350098f, 0.4260548949241638f, 0.0943291038274765f, 0.6059228777885437f, 0.3369304835796356f, 0.5721158981323242f, 0.3222738206386566f, +0.7861450910568237f, 0.4763519763946533f, 0.6014969348907471f, 0.7508032917976379f, 0.40022313594818115f, 0.8380558490753174f, 0.7529599666595459f, 0.9654169082641602f, +0.7217185497283936f, 0.01512920018285513f, 0.9299748539924622f, 0.4354017674922943f, 0.657109260559082f, 0.9342187643051147f, 0.23224064707756042f, 0.4456816017627716f, +0.6356045603752136f, 0.18027643859386444f, 0.49407315254211426f, 0.8082943558692932f, 0.819379448890686f, 0.2085961550474167f, 0.4899669587612152f, 0.7976174354553223f, +0.27522990107536316f, 0.3475925028324127f, 0.9563697576522827f, 0.241404727101326f, 0.5511708855628967f, 0.7440304756164551f, 0.6392398476600647f, 0.5367797017097473f, +0.496286004781723f, 0.027332115918397903f, 0.3545832931995392f, 0.28632059693336487f, 0.33641713857650757f, 0.6138564944267273f, 0.15340274572372437f, 0.7162377238273621f, +0.7171165943145752f, 0.59581458568573f, 0.0994856059551239f, 0.9257265329360962f, 0.5319864153862f, 0.9273329973220825f, 0.857854425907135f, 0.43945303559303284f, +0.7806326150894165f, 0.6759011149406433f, 0.02824559435248375f, 0.18774385750293732f, 0.22409218549728394f, 0.18368172645568848f, 0.8172866702079773f, 0.4431943893432617f, +0.3701484501361847f, 0.806931734085083f, 0.49277395009994507f, 0.8988797068595886f, 0.14523398876190186f, 0.10466499626636505f, 0.1435655951499939f, 0.9337448477745056f, +0.2664249837398529f, 0.2623634338378906f, 0.9375194907188416f, 0.022536277770996094f, 0.6096028089523315f, 0.6004023551940918f, 0.5479812026023865f, 0.2971886396408081f, +0.5182094573974609f, 0.5410608649253845f, 0.50980144739151f, 0.08551183342933655f, 0.9136833548545837f, 0.10015620291233063f, 0.20144635438919067f, 0.26103729009628296f, +0.3709262013435364f, 0.33352020382881165f, 0.054750118404626846f, 0.3387603759765625f, 0.588334858417511f, 0.767773449420929f, 0.9349545836448669f, 0.783886194229126f, +0.14439916610717773f, 0.7823655605316162f, 0.1679019182920456f, 0.46471813321113586f, 0.14491142332553864f, 0.46796199679374695f, 0.059942230582237244f, 0.010717015713453293f, +0.03004479594528675f, 0.6699517369270325f, 0.6961281299591064f, 0.6403058767318726f, 0.8993024230003357f, 0.774698793888092f, 0.05950735881924629f, 0.9648548364639282f, +0.3361400365829468f, 0.6778846979141235f, 0.5147607326507568f, 0.9273344874382019f, 0.4442949593067169f, 0.13181185722351074f, 0.48766881227493286f, 0.4261191785335541f, +0.12362688034772873f, 0.32184281945228577f, 0.39738020300865173f, 0.7001238465309143f, 0.8631159067153931f, 0.8899819254875183f, 0.5326982140541077f, 0.34870707988739014f, +0.3853232264518738f, 0.21062934398651123f, 0.5544883608818054f, 0.2971360385417938f, 0.2627153992652893f, 0.26331111788749695f, 0.8372922539710999f, 0.7954920530319214f, +0.449966162443161f, 0.2909601032733917f, 0.16705211997032166f, 0.5464507937431335f, 0.810819685459137f, 0.3240965008735657f, 0.2858211100101471f, 0.8716675639152527f, +0.22742821276187897f, 0.058378513902425766f, 0.058107275515794754f, 0.14870679378509521f, 0.9405415654182434f, 0.7646322250366211f, 0.739646852016449f, 0.2248460203409195f, +0.2238379269838333f, 0.014098339714109898f, 0.13964009284973145f, 0.8734031319618225f, 0.29590144753456116f, 0.8981818556785583f, 0.8400155305862427f, 0.257267028093338f, +0.1186060979962349f, 0.12759524583816528f, 0.8968464732170105f, 0.9386991262435913f, 0.3230394423007965f, 0.5098698735237122f, 0.5429351329803467f, 0.2993137538433075f, +0.16252124309539795f, 0.6367336511611938f, 0.332526296377182f, 0.931858479976654f, 0.9638100266456604f, 0.5239924192428589f, 0.3206663131713867f, 0.9412164092063904f, +0.23294703662395477f, 0.1351110339164734f, 0.3286425471305847f, 0.39107605814933777f, 0.6112489700317383f, 0.44299614429473877f, 0.016191579401493073f, 0.1003384068608284f, +0.5593792796134949f, 0.2053934633731842f, 0.2250208705663681f, 0.3751731216907501f, 0.6544814705848694f, 0.15193994343280792f, 0.19569607079029083f, 0.35637804865837097f, +0.5257549285888672f, 0.6749984622001648f, 0.9322336912155151f, 0.604658305644989f, 0.22004282474517822f, 0.47784897685050964f, 0.5719831585884094f, 0.990469217300415f, +0.34838050603866577f, 0.06375470757484436f, 0.04857301339507103f, 0.7569082975387573f, 0.8504316806793213f, 0.8151203989982605f, 0.09184374660253525f, 0.02118249610066414f, +0.05170409008860588f, 0.038677215576171875f, 0.4502401053905487f, 0.6574715971946716f, 0.9681663513183594f, 0.4638209640979767f, 0.20332810282707214f, 0.7679345607757568f, +0.621955394744873f, 0.001260901102796197f, 0.42681702971458435f, 0.8860729336738586f, 0.5343813300132751f, 0.4681023955345154f, 0.024295270442962646f, 0.25814375281333923f, +0.28020456433296204f, 0.9065024852752686f, 0.8055277466773987f, 0.37837308645248413f, 0.3206954002380371f, 0.6026523113250732f, 0.28363311290740967f, 0.9707452654838562f, +0.5650525689125061f, 0.11257761716842651f, 0.608484148979187f, 0.024377286434173584f, 0.8284135460853577f, 0.24606291949748993f, 0.26561006903648376f, 0.44228795170783997f, +0.4788891673088074f, 0.3232104182243347f, 0.43647265434265137f, 0.8699467778205872f, 0.5136889219284058f, 0.11110696941614151f, 0.1070956289768219f, 0.04578430950641632f, +0.7179998159408569f, 0.3386523127555847f, 0.6982733607292175f, 0.6564353704452515f, 0.38595324754714966f, 0.636803150177002f, 0.7661226391792297f, 0.0076264371164143085f, +0.22002765536308289f, 0.6263518929481506f, 0.23277164995670319f, 0.36775776743888855f, 0.08380050957202911f, 0.7506154179573059f, 0.24435773491859436f, 0.7827968597412109f, +0.09206073731184006f, 0.620186984539032f, 0.12847059965133667f, 0.21052542328834534f, 0.7151557803153992f, 0.5419061183929443f, 0.07743533700704575f, 0.3157207667827606f, +0.8680981993675232f, 0.05587683245539665f, 0.4028995931148529f, 0.0559372678399086f, 0.9396454691886902f, 0.6424287557601929f, 0.7862708568572998f, 0.08036138117313385f, +0.7864803671836853f, 0.13440102338790894f, 0.32053011655807495f, 0.5980395674705505f, 0.8514880537986755f, 0.4039474129676819f, 0.9174891710281372f, 0.10805342346429825f, +0.24066755175590515f, 0.7581113576889038f, 0.5803324580192566f, 0.8761907815933228f, 0.04618668183684349f, 0.9468115568161011f, 0.8661092519760132f, 0.7348021864891052f, +0.92482990026474f, 0.41565805673599243f, 0.1541040986776352f, 0.21262356638908386f, 0.653236985206604f, 0.27476099133491516f, 0.6582420468330383f, 0.9907457828521729f, +0.05766468122601509f, 0.2637670338153839f, 0.3543861210346222f, 0.7176480293273926f, 0.17315053939819336f, 0.34765854477882385f, 0.3639664351940155f, 0.41121354699134827f, +0.6404571533203125f, 0.8853263854980469f, 0.3970893919467926f, 0.1731584668159485f, 0.625095546245575f, 0.3107199966907501f, 0.2703779637813568f, 0.9812841415405273f, +0.08167421817779541f, 0.8060241937637329f, 0.8986160159111023f, 0.25784263014793396f, 0.13990147411823273f, 0.12634336948394775f, 0.8748691082000732f, 0.7376542091369629f, +0.9611518979072571f, 0.5455068945884705f, 0.8574966788291931f, 0.6909998655319214f, 0.3857821822166443f, 0.4096216857433319f, 0.14174675941467285f, 0.3559526801109314f, +0.032969873398542404f, 0.2079625129699707f, 0.9717853665351868f, 0.8188678622245789f, 0.829477846622467f, 0.708890438079834f, 0.48937034606933594f, 0.08421435952186584f, +0.1299351155757904f, 0.2970893085002899f, 0.11668142676353455f, 0.8092253804206848f, 0.01953912153840065f, 0.689297616481781f, 0.7913970351219177f, 0.4709159731864929f, +0.6117097735404968f, 0.11250679939985275f, 0.06500918418169022f, 0.24485701322555542f, 0.5242945551872253f, 0.2791692316532135f, 0.3144454061985016f, 0.3465166389942169f, +0.48414868116378784f, 0.9556480050086975f, 0.5591384172439575f, 0.04848089814186096f, 0.14646053314208984f, 0.8559540510177612f, 0.6629430055618286f, 0.5920697450637817f, +0.4277642071247101f, 0.5134144425392151f, 0.15905241668224335f, 0.0331486351788044f, 0.8404709100723267f, 0.4738256335258484f, 0.7800297141075134f, 0.12751807272434235f, +0.7103203535079956f, 0.31917497515678406f, 0.4705432057380676f, 0.5106287002563477f, 0.1186150386929512f, 0.5041157603263855f, 0.6842405200004578f, 0.20217756927013397f, +0.3872647285461426f, 0.6892217397689819f, 0.3952968120574951f, 0.1975976824760437f, 0.3501327335834503f, 0.9018445014953613f, 0.07113654166460037f, 0.34841057658195496f, +0.28617313504219055f, 0.22777926921844482f, 0.8987040519714355f, 0.4237571060657501f, 0.44125860929489136f, 0.49189493060112f, 0.461812824010849f, 0.4412309527397156f, +0.45602259039878845f, 0.46943944692611694f, 0.016884008422493935f, 0.26105818152427673f, 0.5404030084609985f, 0.7687519788742065f, 0.739402174949646f, 0.8797420859336853f, +0.933696448802948f, 0.4669914245605469f, 0.23553217947483063f, 0.8120397329330444f, 0.46963873505592346f, 0.6538075804710388f, 0.23607726395130157f, 0.527273416519165f, +0.8784774541854858f, 0.41287702322006226f, 0.09814637154340744f, 0.203242689371109f, 0.8785141110420227f, 0.7996118068695068f, 0.5275879502296448f, 0.22146670520305634f, +0.27454981207847595f, 0.16150368750095367f, 0.7112952470779419f, 0.29926949739456177f, 0.3520502746105194f, 0.909842848777771f, 0.3503207564353943f, 0.7151540517807007f, +0.6030154228210449f, 0.5630579590797424f, 0.057260334491729736f, 0.16787585616111755f, 0.6530300378799438f, 0.8477206230163574f, 0.5597342252731323f, 0.25646960735321045f, +0.8631776571273804f, 0.8033219575881958f, 0.7758045792579651f, 0.7742009162902832f, 0.3656601011753082f, 0.3921717703342438f, 0.7686176896095276f, 0.19411109387874603f, +0.6392099261283875f, 0.5471025109291077f, 0.15787911415100098f, 0.22937452793121338f, 0.503790557384491f, 0.5154556632041931f, 0.7277136445045471f, 0.8657292723655701f, +0.3449056148529053f, 0.2956768274307251f, 0.6308916211128235f, 0.6122925281524658f, 0.9636062383651733f, 0.3381427824497223f, 0.6257869005203247f, 0.9299535751342773f, +0.7284884452819824f, 0.909953236579895f, 0.4943767786026001f, 0.7820038199424744f, 0.9318399429321289f, 0.9825010895729065f, 0.7530080080032349f, 0.5245336890220642f, +0.048018135130405426f, 0.4561740756034851f, 0.4426131248474121f, 0.9702586531639099f, 0.6898532509803772f, 0.10864511132240295f, 0.878344714641571f, 0.6315293908119202f, +0.16308218240737915f, 0.2327789068222046f, 0.9163687229156494f, 0.06273790448904037f, 0.3190004527568817f, 0.7616982460021973f, 0.8756677508354187f, 0.4636629521846771f, +0.4766356348991394f, 0.28847047686576843f, 0.27698034048080444f, 0.577751100063324f, 0.7177387475967407f, 0.02265753224492073f, 0.02719578519463539f, 0.3942880630493164f, +0.822600781917572f, 0.10300964117050171f, 0.3009021282196045f, 0.8780803680419922f, 0.21737785637378693f, 0.052027251571416855f, 0.9048323631286621f, 0.04196259751915932f, +0.9257462620735168f, 0.9458962082862854f, 0.7842293381690979f, 0.3619333803653717f, 0.69598788022995f, 0.3290434181690216f, 0.06117522343993187f, 0.6197401881217957f, +0.5543610453605652f, 0.9750494360923767f, 0.46055492758750916f, 0.7920054197311401f, 0.4908994734287262f, 0.569646954536438f, 0.5639709830284119f, 0.5581080317497253f, +0.7965160608291626f, 0.8198531866073608f, 0.6050980687141418f, 0.7166163921356201f, 0.04355703294277191f, 0.03598935157060623f, 0.10377522557973862f, 0.21946391463279724f, +0.7186120748519897f, 0.10853936523199081f, 0.7546297311782837f, 0.06257287412881851f, 0.26106375455856323f, 0.660200834274292f, 0.43541422486305237f, 0.6304566860198975f, +0.6593674421310425f, 0.10016738623380661f, 0.20877869427204132f, 0.663899302482605f, 0.29707980155944824f, 0.9422990679740906f, 0.772461473941803f, 0.7894607782363892f, +0.6448178887367249f, 0.7368708848953247f, 0.7605751752853394f, 0.18093815445899963f, 0.44999733567237854f, 0.6263946294784546f, 0.7237064242362976f, 0.3369208574295044f, +0.28418007493019104f, 0.7830799221992493f, 0.8702595233917236f, 0.5795636177062988f, 0.6032289266586304f, 0.3690928518772125f, 0.8390531539916992f, 0.44170132279396057f, +0.5852668881416321f, 0.3980071246623993f, 0.953632116317749f, 0.35733795166015625f, 0.8021227717399597f, 0.1534307450056076f, 0.26681625843048096f, 0.8547041416168213f, +0.4035550355911255f, 0.049769576638936996f, 0.8594427108764648f, 0.9269259572029114f, 0.6149231791496277f, 0.6187196373939514f, 0.7945013642311096f, 0.194220170378685f, +0.24123959243297577f, 0.07118742167949677f, 0.32068300247192383f, 0.4953100383281708f, 0.9639949798583984f, 0.07781530171632767f, 0.21411745250225067f, 0.882895290851593f, +0.6526772975921631f, 0.6897380352020264f, 0.597256600856781f, 0.18766075372695923f, 0.7536001205444336f, 0.734142541885376f, 0.9282724857330322f, 0.28018975257873535f, +0.6432045102119446f, 0.10631901770830154f, 0.4969343841075897f, 0.2701895833015442f, 0.9423393607139587f, 0.07808420807123184f, 0.17764988541603088f, 0.25093191862106323f, +0.8064326643943787f, 0.11595612019300461f, 0.16925756633281708f, 0.9540750980377197f, 0.26996779441833496f, 0.6377124786376953f, 0.8651028275489807f, 0.42725300788879395f, +0.4934048056602478f, 0.4100913107395172f, 0.3517068922519684f, 0.4344439208507538f, 0.3028528392314911f, 0.32427695393562317f, 0.7135677933692932f, 0.14501354098320007f, +0.41722050309181213f, 0.7054790258407593f, 0.9842159748077393f, 0.12943947315216064f, 0.2628370523452759f, 0.7392820715904236f, 0.2099725306034088f, 0.9014472365379333f, +0.54909348487854f, 0.8116652965545654f, 0.7484686374664307f, 0.3271888494491577f, 0.9518178105354309f, 0.7993628978729248f, 0.17547786235809326f, 0.9463900923728943f, +0.48915737867355347f, 0.2926233410835266f, 0.30136269330978394f, 0.6454530358314514f, 0.9648095369338989f, 0.9839211106300354f, 0.31854891777038574f, 0.1400894969701767f, +0.35106924176216125f, 0.01271904818713665f, 0.11574378609657288f, 0.023845242336392403f, 0.8400421142578125f, 0.9815496206283569f, 0.33165985345840454f, 0.8954227566719055f, +0.7488006353378296f, 0.34038683772087097f, 0.2712743282318115f, 0.1034851148724556f, 0.8074162602424622f, 0.930837094783783f, 0.39920827746391296f, 0.052608031779527664f, +0.5686343908309937f, 0.6993796229362488f, 0.8018646836280823f, 0.34227174520492554f, 0.8029371500015259f, 0.34822991490364075f, 0.3423404097557068f, 0.30295175313949585f, +0.43262767791748047f, 0.12353415042161942f, 0.25912463665008545f, 0.6948883533477783f, 0.6079266667366028f, 0.7130725383758545f, 0.9356048107147217f, 0.08653569221496582f, +0.0058343783020973206f, 0.7056031823158264f, 0.3248789608478546f, 0.5176699161529541f, 0.3879224956035614f, 0.7956275343894958f, 0.025138359516859055f, 0.9827994108200073f, +0.5614805817604065f, 0.7862809896469116f, 0.014198151417076588f, 0.7941557168960571f, 0.6162126660346985f, 0.4782457649707794f, 0.046520087867975235f, 0.9910227656364441f, +0.8671956062316895f, 0.49851536750793457f, 0.29944223165512085f, 0.7426451444625854f, 0.7242608070373535f, 0.8456466197967529f, 0.16153869032859802f, 0.8163052201271057f, +0.9842028617858887f, 0.6530867218971252f, 0.4738105237483978f, 0.3477137088775635f, 0.5995133519172668f, 0.4019671380519867f, 0.9642916321754456f, 0.7484514713287354f, +0.6111140847206116f, 0.8771831393241882f, 0.10662898421287537f, 0.035745732486248016f, 0.7779162526130676f, 0.4692192077636719f, 0.7727100849151611f, 0.9449385404586792f, +0.5782673358917236f, 0.989303708076477f, 0.7338470220565796f, 0.2482513189315796f, 0.8145818114280701f, 0.881729245185852f, 0.5171577334403992f, 0.7132847309112549f, +0.8889255523681641f, 0.934226393699646f, 0.7816445231437683f, 0.06953894346952438f, 0.05338693782687187f, 0.8483032584190369f, 0.7495178580284119f, 0.3597365617752075f, +0.9642563462257385f, 0.8716056942939758f, 0.9428830146789551f, 0.6181700825691223f, 0.1119290441274643f, 0.2722616195678711f, 0.7648196816444397f, 0.9074612259864807f, +0.4069083034992218f, 0.5628727078437805f, 0.7503560781478882f, 0.8223488330841064f, 0.008173779584467411f, 0.5041094422340393f, 0.45360642671585083f, 0.7417305111885071f, +0.6330482363700867f, 0.44177311658859253f, 0.4426082372665405f, 0.9037178158760071f, 0.48663175106048584f, 0.7660409212112427f, 0.33772847056388855f, 0.18466632068157196f, +0.36770501732826233f, 0.6229833960533142f, 0.09406299144029617f, 0.11297629028558731f, 0.650833249092102f, 0.7421762347221375f, 0.7775901556015015f, 0.874401330947876f, +0.9455944895744324f, 0.005906261038035154f, 0.6002261638641357f, 0.1899518221616745f, 0.9430942535400391f, 0.542553722858429f, 0.4034617841243744f, 0.3723416328430176f, +0.4260530173778534f, 0.24041661620140076f, 0.4312092959880829f, 0.599763035774231f, 0.45711278915405273f, 0.3620343506336212f, 0.21201258897781372f, 0.6556577682495117f, +0.678152859210968f, 0.22076363861560822f, 0.3079467713832855f, 0.8250532150268555f, 0.9855762124061584f, 0.5230781435966492f, 0.45381370186805725f, 0.7850443124771118f, +0.7261698842048645f, 0.8135749101638794f, 0.33925625681877136f, 0.02226574905216694f, 0.4281374216079712f, 0.5784098505973816f, 0.09870850294828415f, 0.15439647436141968f, +0.6980978846549988f, 0.2543356418609619f, 0.6546390652656555f, 0.4417404234409332f, 0.8391082286834717f, 0.1577204167842865f, 0.6275382041931152f, 0.43271273374557495f, +0.17637252807617188f, 0.8011540174484253f, 0.7812651991844177f, 0.6273053884506226f, 0.4664947986602783f, 0.006796292960643768f, 0.20944568514823914f, 0.18537066876888275f, +0.6390134692192078f, 0.5444878935813904f, 0.9569766521453857f, 0.9456713795661926f, 0.2527533769607544f, 0.6649144291877747f, 0.8122234344482422f, 0.1404782086610794f, +0.3841293752193451f, 0.79474276304245f, 0.20189182460308075f, 0.8612878322601318f, 0.887595534324646f, 0.2987343370914459f, 0.6681244969367981f, 0.8686928749084473f, +0.2706228792667389f, 0.5782015919685364f, 0.04099566861987114f, 0.06331100314855576f, 0.12906421720981598f, 0.44208022952079773f, 0.5565705299377441f, 0.49306100606918335f, +0.11601907759904861f, 0.9988796710968018f, 0.7642831802368164f, 0.4988817274570465f, 0.7769607901573181f, 0.07563064992427826f, 0.5242459177970886f, 0.6124475598335266f, +0.9224030375480652f, 0.4829946756362915f, 0.9743263721466064f, 0.3143327534198761f, 0.11972169578075409f, 0.6249790191650391f, 0.27963241934776306f, 0.3822382688522339f, +0.6712122559547424f, 0.4730337858200073f, 0.54830002784729f, 0.8820130825042725f, 0.20693226158618927f, 0.28086668252944946f, 0.24323587119579315f, 0.4131501019001007f, +0.6692589521408081f, 0.8058267831802368f, 0.9736827611923218f, 0.7469778656959534f, 0.7803829312324524f, 0.9809821844100952f, 0.6054527163505554f, 0.9500524401664734f, +0.2935018539428711f, 0.891819953918457f, 0.07335367053747177f, 0.42730870842933655f, 0.11460328102111816f, 0.5002465844154358f, 0.03564150631427765f, 0.5831686854362488f, +0.41243496537208557f, 0.5141292810440063f, 0.9926841855049133f, 0.91264408826828f, 0.45361191034317017f, 0.5071617364883423f, 0.031946469098329544f, 0.6036243438720703f, +0.36398372054100037f, 0.23387864232063293f, 0.8583866953849792f, 0.16811944544315338f, 0.6010708808898926f, 0.5961779356002808f, 0.9768539071083069f, 0.3632800281047821f, +0.21368175745010376f, 0.9274531602859497f, 0.964668333530426f, 0.19827520847320557f, 0.23932595551013947f, 0.885831892490387f, 0.6337722539901733f, 0.9627552032470703f, +0.5986185669898987f, 0.06462076306343079f, 0.16896460950374603f, 0.4246165454387665f, 0.5774641633033752f, 0.6039654612541199f, 0.9925373196601868f, 0.16019615530967712f, +0.9408078789710999f, 0.33328744769096375f, 0.5956119894981384f, 0.18007582426071167f, 0.9648593664169312f, 0.3104807734489441f, 0.30069202184677124f, 0.7188702821731567f, +0.4457683563232422f, 0.8636954426765442f, 0.8310862183570862f, 0.6033899188041687f, 0.5383630394935608f, 0.7205005884170532f, 0.9460569024085999f, 0.5709143280982971f, +0.44390609860420227f, 0.6093078851699829f, 0.5022509694099426f, 0.5651435256004333f, 0.6927131414413452f, 0.3831329047679901f, 0.9391557574272156f, 0.2667500674724579f, +0.4427245855331421f, 0.6360276937484741f, 0.6552993655204773f, 0.9345299601554871f, 0.6451433300971985f, 0.4087541401386261f, 0.8872923254966736f, 0.993327796459198f, +0.6726505160331726f, 0.3101227879524231f, 0.7541263699531555f, 0.7321222424507141f, 0.27630940079689026f, 0.042767591774463654f, 0.5367146730422974f, 0.5285932421684265f, +0.6167144775390625f, 0.5334307551383972f, 0.656223475933075f, 0.10072512179613113f, 0.7137128114700317f, 0.18209518492221832f, 0.09606660157442093f, 0.09515058994293213f, +0.4071235954761505f, 0.11703076958656311f, 0.6545117497444153f, 0.8022115230560303f, 0.17494279146194458f, 0.9072311520576477f, 0.818123459815979f, 0.3157068192958832f, +0.8141036629676819f, 0.9154764413833618f, 0.17803265154361725f, 0.005345477256923914f, 0.6708893775939941f, 0.580342173576355f, 0.6789324283599854f, 0.9807842969894409f, +0.04770250245928764f, 0.000721581862308085f, 0.6970294713973999f, 0.7149075865745544f, 0.7234565615653992f, 0.5385764241218567f, 0.3893669843673706f, 0.34932205080986023f, +0.7790898680686951f, 0.792131245136261f, 0.31720033288002014f, 0.05925094336271286f, 0.8677526116371155f, 0.9913186430931091f, 0.18590155243873596f, 0.3712713122367859f, +0.7132894992828369f, 0.5069312453269958f, 0.5409483313560486f, 0.5178145170211792f, 0.22613820433616638f, 0.11651097983121872f, 0.4982295632362366f, 0.05251503363251686f, +0.9829440712928772f, 0.9034884572029114f, 0.4179036319255829f, 0.16451974213123322f, 0.2803223431110382f, 0.1246265396475792f, 0.5875905156135559f, 0.23799042403697968f, +0.8617978692054749f, 0.8730332851409912f, 0.6315425038337708f, 0.34979262948036194f, 0.9927371144294739f, 0.17915242910385132f, 0.25107288360595703f, 0.9342483878135681f, +0.9305894374847412f, 0.6624715328216553f, 0.85882967710495f, 0.336712509393692f, 0.029966481029987335f, 0.1439971923828125f, 0.25821810960769653f, 0.5978325605392456f, +0.12609149515628815f, 0.8835583925247192f, 0.9450922012329102f, 0.7709787487983704f, 0.9276230931282043f, 0.4409927725791931f, 0.6215558648109436f, 0.4521143138408661f, +0.829023540019989f, 0.3660440146923065f, 0.34823673963546753f, 0.8295148015022278f, 0.8622278571128845f, 0.7014221549034119f, 0.8315393328666687f, 0.9644994139671326f, +0.5315943360328674f, 0.6151713132858276f, 0.06332091242074966f, 0.2078348994255066f, 0.30949515104293823f, 0.8191230297088623f, 0.31052064895629883f, 0.7752758860588074f, +0.3018757998943329f, 0.9303984045982361f, 0.717680037021637f, 0.5702398419380188f, 0.4663638770580292f, 0.36898383498191833f, 0.6601676940917969f, 0.19000695645809174f, +0.32085925340652466f, 0.47540712356567383f, 0.0262217428535223f, 0.8014992475509644f, 0.735499382019043f, 0.5438852906227112f, 0.057728759944438934f, 0.18876279890537262f, +0.968708336353302f, 0.39608192443847656f, 0.647757887840271f, 0.3963983356952667f, 0.8751054406166077f, 0.00015009849448688328f, 0.32598739862442017f, 0.7419369220733643f, +0.042921677231788635f, 0.6447097063064575f, 0.3250815272331238f, 0.4541773796081543f, 0.9106877446174622f, 0.48296481370925903f, 0.07701331377029419f, 0.7001394629478455f, +0.3227482736110687f, 0.7048130035400391f, 0.04986690357327461f, 0.04165894538164139f, 0.8688830137252808f, 0.6936748027801514f, 0.5823327898979187f, 0.8523034453392029f, +0.8889883756637573f, 0.9511672258377075f, 0.025991205126047134f, 0.7161531448364258f, 0.45135778188705444f, 0.8053043484687805f, 0.9962376356124878f, 0.3233889043331146f, +0.45579633116722107f, 0.3536668121814728f, 0.5365522503852844f, 0.20663347840309143f, 0.19456487894058228f, 0.504016637802124f, 0.04437744989991188f, 0.060358379036188126f, +0.7134724855422974f, 0.4739934206008911f, 0.47554704546928406f, 0.7006832361221313f, 0.7363136410713196f, 0.3713056445121765f, 0.04272095486521721f, 0.3048797845840454f, +0.9786534905433655f, 0.19193656742572784f, 0.5432624220848083f, 0.3559200167655945f, 0.6481971740722656f, 0.28504109382629395f, 0.2335381656885147f, 0.3284623622894287f, +0.6036224365234375f, 0.16591224074363708f, 0.6063321232795715f, 0.8663690686225891f, 0.568655252456665f, 0.5977252721786499f, 0.3552895486354828f, 0.3607657849788666f, +0.7984837889671326f, 0.7490066289901733f, 0.1534544676542282f, 0.47949594259262085f, 0.6412301063537598f, 0.22222067415714264f, 0.042538344860076904f, 0.9428794980049133f, +0.8639885187149048f, 0.0009349423344247043f, 0.09321492165327072f, 0.9450436234474182f, 0.33783912658691406f, 0.31351199746131897f, 0.44067516922950745f, 0.5443245768547058f, +0.17213867604732513f, 0.8898904919624329f, 0.9836643934249878f, 0.06907733529806137f, 0.867277979850769f, 0.14417162537574768f, 0.2713841199874878f, 0.5782406330108643f, +0.7129323482513428f, 0.08432808518409729f, 0.7337192893028259f, 0.9311186671257019f, 0.585777759552002f, 0.5491144061088562f, 0.850869357585907f, 0.45883283019065857f, +0.10753415524959564f, 0.7654266953468323f, 0.07249400019645691f, 0.8838416934013367f, 0.945712149143219f, 0.08671209961175919f, 0.16570785641670227f, 0.8319103121757507f, +0.808855414390564f, 0.2721400558948517f, 0.7451012134552002f, 0.9349868297576904f, 0.3024519085884094f, 0.9905514717102051f, 0.7062371373176575f, 0.168050155043602f, +0.5105443000793457f, 0.5609583854675293f, 0.3613084554672241f, 0.16769833862781525f, 0.5763028860092163f, 0.8214059472084045f, 0.16832073032855988f, 0.25677362084388733f, +0.2915043830871582f, 0.9719215035438538f, 0.6556411385536194f, 0.22936640679836273f, 0.7774644494056702f, 0.0859229788184166f, 0.7373678088188171f, 0.12926188111305237f, +0.3142651319503784f, 0.9635137319564819f, 0.2345956563949585f, 0.25149306654930115f, 0.843975841999054f, 0.5667732954025269f, 0.9096396565437317f, 0.5616241097450256f, +0.04197216406464577f, 0.49074575304985046f, 0.634490430355072f, 0.7028214931488037f, 0.5774420499801636f, 0.1435842216014862f, 0.7748657464981079f, 0.6708789467811584f, +0.8779076337814331f, 0.5889583230018616f, 0.7647926807403564f, 0.33181875944137573f, 0.6324511170387268f, 0.9314984679222107f, 0.7691919207572937f, 0.6229024529457092f, +0.4084717929363251f, 0.7247394323348999f, 0.09630313515663147f, 0.004266552627086639f, 0.5194789171218872f, 0.622816264629364f, 0.23397718369960785f, 0.5215924978256226f, +0.3068622648715973f, 0.5238447785377502f, 0.4393702447414398f, 0.860313355922699f, 0.38002732396125793f, 0.7683602571487427f, 0.15852904319763184f, 0.14263805747032166f, +0.9103568196296692f, 0.9802494049072266f, 0.9823074340820312f, 0.21053723990917206f, 0.01629568822681904f, 0.29782891273498535f, 0.03920430690050125f, 0.5181881785392761f, +0.6270059943199158f, 0.13840174674987793f, 0.5510337948799133f, 0.2971092760562897f, 0.9151813387870789f, 0.1411326378583908f, 0.8628212213516235f, 0.4964248239994049f, +0.0719209834933281f, 0.9404349327087402f, 0.8959749937057495f, 0.8766766786575317f, 0.21392904222011566f, 0.08303523808717728f, 0.7794816493988037f, 0.4339042901992798f, +0.2997802495956421f, 0.046614114195108414f, 0.7391679286956787f, 0.5049365758895874f, 0.6646974682807922f, 0.37817588448524475f, 0.05003758892416954f, 0.6381238102912903f, +0.4157024621963501f, 0.4490993618965149f, 0.21262617409229279f, 0.5733054876327515f, 0.5781734585762024f, 0.7491338849067688f, 0.15279607474803925f, 0.9690561890602112f, +0.12338342517614365f, 0.753312349319458f, 0.3285880982875824f, 0.8435595035552979f, 0.5787566304206848f, 0.02767658606171608f, 0.3456004559993744f, 0.6057891845703125f, +0.6544575691223145f, 0.354931116104126f, 0.49162060022354126f, 0.3553510904312134f, 0.8298798203468323f, 0.7997459173202515f, 0.32917606830596924f, 0.7736532688140869f, +0.4216707646846771f, 0.1804075837135315f, 0.5614598989486694f, 0.2677038311958313f, 0.7747086882591248f, 0.7480881214141846f, 0.9410672783851624f, 0.38153377175331116f, +0.018339553847908974f, 0.9877755641937256f, 0.07223229110240936f, 0.8492757678031921f, 0.7444782257080078f, 0.2059658169746399f, 0.44956985116004944f, 0.7702125906944275f, +0.7943695187568665f, 0.5606192350387573f, 0.4457750618457794f, 0.5994091629981995f, 0.6329724788665771f, 0.6880637407302856f, 0.9384908080101013f, 0.4009060561656952f, +0.41435933113098145f, 0.025758223608136177f, 0.2105962336063385f, 0.658098578453064f, 0.2516051232814789f, 0.5209670662879944f, 0.49828779697418213f, 0.3497597575187683f, +0.9237363934516907f, 0.8446557521820068f, 0.5537616610527039f, 0.8989111185073853f, 0.08280975371599197f, 0.5127158761024475f, 0.5486977100372314f, 0.8484154343605042f, +0.20802462100982666f, 0.977000892162323f, 0.8823769688606262f, 0.5603607296943665f, 0.9331434369087219f, 0.5040026307106018f, 0.0035340297035872936f, 0.2163696438074112f, +0.9974455833435059f, 0.22504031658172607f, 0.27523964643478394f, 0.3807903528213501f, 0.4400908052921295f, 0.8806363940238953f, 0.6359692215919495f, 0.32889196276664734f, +0.7104197144508362f, 0.7988142371177673f, 0.9570748209953308f, 0.2560233473777771f, 0.6627296805381775f, 0.423214852809906f, 0.8026673197746277f, 0.9556097388267517f, +0.043965548276901245f, 0.813364565372467f, 0.9576829075813293f, 0.18813295662403107f, 0.40331757068634033f, 0.3555091619491577f, 0.18575142323970795f, 0.171940416097641f, +0.013418094255030155f, 0.32236334681510925f, 0.1461159586906433f, 0.39386847615242004f, 0.7217600345611572f, 0.5364911556243896f, 0.30343005061149597f, 0.715421199798584f, +0.1997729241847992f, 0.836590051651001f, 0.3129154443740845f, 0.8092793226242065f, 0.9818861484527588f, 0.7738751173019409f, 0.6807781457901001f, 0.3603532910346985f, +0.6582445502281189f, 0.23919032514095306f, 0.8293980956077576f, 0.5472281575202942f, 0.34834399819374084f, 0.46909308433532715f, 0.49843040108680725f, 0.8902896642684937f, +0.25658977031707764f, 0.525367021560669f, 0.4220517575740814f, 0.9576948881149292f, 0.4059820771217346f, 0.6019579172134399f, 0.6028222441673279f, 0.37829944491386414f, +0.36965689063072205f, 0.5521267056465149f, 0.1517181098461151f, 0.20345324277877808f, 0.9654867649078369f, 0.5373077988624573f, 0.11403828859329224f, 0.9771957397460938f, +0.41707199811935425f, 0.4378163814544678f, 0.023339247331023216f, 0.6222458481788635f, 0.8754937052726746f, 0.7684306502342224f, 0.12553270161151886f, 0.587972104549408f, +0.000501865113619715f, 0.25455406308174133f, 0.26010042428970337f, 0.439541757106781f, 0.5408532023429871f, 0.9406962394714355f, 0.6268137693405151f, 0.5882735848426819f, +0.2611141502857208f, 0.21967153251171112f, 0.14815931022167206f, 0.6473905444145203f, 0.42245912551879883f, 0.3393997550010681f, 0.5873074531555176f, 0.5236234664916992f, +0.11800380051136017f, 0.630885660648346f, 0.566364586353302f, 0.8459683060646057f, 0.9754093885421753f, 0.8900245428085327f, 0.8419263362884521f, 0.19941745698451996f, +0.8323206305503845f, 0.869081974029541f, 0.6389018297195435f, 0.07380800694227219f, 0.7646723389625549f, 0.7207842469215393f, 0.6643975377082825f, 0.7746568322181702f, +0.0818289965391159f, 0.0013044176157563925f, 0.04907960072159767f, 0.08892539143562317f, 0.5050815939903259f, 0.8363115787506104f, 0.6167794466018677f, 0.34453874826431274f, +0.4683718979358673f, 0.03514600917696953f, 0.6178896427154541f, 0.19544106721878052f, 0.1128392443060875f, 0.7223660349845886f, 0.18785779178142548f, 0.09948159009218216f, +0.21896634995937347f, 0.031887542456388474f, 0.21806909143924713f, 0.8344054222106934f, 0.44281935691833496f, 0.5916294455528259f, 0.2257256954908371f, 0.48757049441337585f, +0.23079535365104675f, 0.8757179975509644f, 0.6919372081756592f, 0.2323681116104126f, 0.30295589566230774f, 0.34980466961860657f, 0.758025586605072f, 0.03994397073984146f, +0.8065571188926697f, 0.4367838203907013f, 0.3451150953769684f, 0.4463658630847931f, 0.9027522802352905f, 0.9947848916053772f, 0.4368416666984558f, 0.3487667739391327f, +0.66556715965271f, 0.3350934386253357f, 0.03252462297677994f, 0.6565872430801392f, 0.36222177743911743f, 0.1725676953792572f, 0.44842228293418884f, 0.42815107107162476f, +0.2055654674768448f, 0.08185692131519318f, 0.5870844721794128f, 0.3034864366054535f, 0.7917241454124451f, 0.02278195135295391f, 0.4135843515396118f, 0.8207254409790039f, +0.5376335978507996f, 0.09958571940660477f, 0.11622262001037598f, 0.5434495806694031f, 0.45978832244873047f, 0.7342290878295898f, 0.2965024411678314f, 0.20513826608657837f, +0.8181548118591309f, 0.6661482453346252f, 0.8862834572792053f, 0.9657912850379944f, 0.8193725943565369f, 0.2289673238992691f, 0.14240363240242004f, 0.7340920567512512f, +0.7611843347549438f, 0.3202770948410034f, 0.2692880630493164f, 0.31135985255241394f, 0.3293713927268982f, 0.4167378544807434f, 0.3477124869823456f, 0.6362581253051758f, +0.6681802868843079f, 0.4416278004646301f, 0.5454820990562439f, 0.23112763464450836f, 0.266264408826828f, 0.3003827631473541f, 0.36719805002212524f, 0.39932575821876526f, +0.16942337155342102f, 0.9617171883583069f, 0.7629466652870178f, 0.5653988122940063f, 0.9660711884498596f, 0.8709555268287659f, 0.3161655068397522f, 0.34291499853134155f, +0.047644395381212234f, 0.5752235651016235f, 0.8174907565116882f, 0.059304412454366684f, 0.07079123705625534f, 0.1410975456237793f, 0.3334200084209442f, 0.37232276797294617f, +0.6341149806976318f, 0.6295991539955139f, 0.14686092734336853f, 0.0900934711098671f, 0.27437537908554077f, 0.8671375513076782f, 0.8003177642822266f, 0.09079998731613159f, +0.9292823076248169f, 0.8191444277763367f, 0.6397839784622192f, 0.873594343662262f, 0.3865031599998474f, 0.428415983915329f, 0.7602844834327698f, 0.3317670524120331f, +0.9355236887931824f, 0.41358745098114014f, 0.5739431381225586f, 0.4066440165042877f, 0.7735415101051331f, 0.22038070857524872f, 0.04008669778704643f, 0.5101921558380127f, +0.08403272926807404f, 0.8861938118934631f, 0.5359827280044556f, 0.17105263471603394f, 0.9823418855667114f, 0.719394326210022f, 0.9328480362892151f, 0.6028350591659546f, +0.2739214301109314f, 0.346582293510437f, 0.8322019577026367f, 0.8751933574676514f, 0.28444239497184753f, 0.7223399877548218f, 0.7635599374771118f, 0.31384938955307007f, +0.30347293615341187f, 0.903433620929718f, 0.1122736930847168f, 0.5948749780654907f, 0.50578773021698f, 0.017924053594470024f, 0.026283567771315575f, 0.40830010175704956f, +0.21422737836837769f, 0.32036101818084717f, 0.2937755286693573f, 0.3473151624202728f, 0.6006588935852051f, 0.3315619230270386f, 0.6048083901405334f, 0.5548192262649536f, +0.061909839510917664f, 0.6305533051490784f, 0.3966982066631317f, 0.2740429639816284f, 0.0054782601073384285f, 0.6759213805198669f, 0.624861478805542f, 0.9020642042160034f, +0.35299867391586304f, 0.29949790239334106f, 0.04965892434120178f, 0.9242826700210571f, 0.7297841310501099f, 0.9797106981277466f, 0.11338645964860916f, 0.010718976147472858f, +0.20340335369110107f, 0.5013973712921143f, 0.17434895038604736f, 0.5627487897872925f, 0.3123907744884491f, 0.9254778027534485f, 0.7714986801147461f, 0.33678871393203735f, +0.8607701063156128f, 0.489315390586853f, 0.5248792171478271f, 0.6963207721710205f, 0.45425349473953247f, 0.5669882297515869f, 0.27317890524864197f, 0.9080923795700073f, +0.553530752658844f, 0.6442045569419861f, 0.4323040544986725f, 0.011986706405878067f, 0.9936623573303223f, 0.7779556512832642f, 0.8549953699111938f, 0.13301344215869904f, +0.687378466129303f, 0.9676215648651123f, 0.23784185945987701f, 0.34767183661460876f, 0.9565979838371277f, 0.01616457663476467f, 0.7985401153564453f, 0.5302053093910217f, +0.28185275197029114f, 0.532497763633728f, 0.4094184637069702f, 0.2990320920944214f, 0.592711865901947f, 0.2594357132911682f, 0.1571246087551117f, 0.02881450019776821f, +0.557580292224884f, 0.19628329575061798f, 0.8321601748466492f, 0.9174531102180481f, 0.6434765458106995f, 0.26706287264823914f, 0.642525851726532f, 0.05383206531405449f, +0.17389973998069763f, 0.3208145201206207f, 0.7359628677368164f, 0.30776479840278625f, 0.6649987697601318f, 0.30871543288230896f, 0.4080694913864136f, 0.05052683502435684f, +0.22577159106731415f, 0.4819130599498749f, 0.7091158628463745f, 0.008033058606088161f, 0.823577344417572f, 0.8930519819259644f, 0.3649440407752991f, 0.33171355724334717f, +0.5427645444869995f, 0.5433759689331055f, 0.04517075791954994f, 0.6447999477386475f, 0.1282452642917633f, 0.014851687476038933f, 0.5234280824661255f, 0.7126855254173279f, +0.6093373894691467f, 0.2221396118402481f, 0.491085022687912f, 0.7521764039993286f, 0.7880815863609314f, 0.7423375248908997f, 0.6614843606948853f, 0.7245064377784729f, +0.9348701238632202f, 0.10237083584070206f, 0.10885504633188248f, 0.7884747982025146f, 0.2669902741909027f, 0.7288358807563782f, 0.7340894937515259f, 0.9425387382507324f, +0.9592620134353638f, 0.8878792524337769f, 0.6938801407814026f, 0.2531968951225281f, 0.6193204522132874f, 0.2514832317829132f, 0.5453944802284241f, 0.25279930233955383f, +0.12664517760276794f, 0.5327041745185852f, 0.6340491771697998f, 0.28492164611816406f, 0.5720952153205872f, 0.870942234992981f, 0.08903639018535614f, 0.07246426492929459f, +0.5982228517532349f, 0.04921461641788483f, 0.4786341190338135f, 0.14545661211013794f, 0.7005316615104675f, 0.48022058606147766f, 0.41651368141174316f, 0.756188690662384f, +0.8971241116523743f, 0.7146160006523132f, 0.7603211998939514f, 0.40327152609825134f, 0.6539556980133057f, 0.46884778141975403f, 0.40624696016311646f, 0.4541179835796356f, +0.10554632544517517f, 0.19034263491630554f, 0.15238788723945618f, 0.28085464239120483f, 0.9173556566238403f, 0.7900065779685974f, 0.8443425893783569f, 0.2925129234790802f, +0.8982279300689697f, 0.9129948019981384f, 0.10749179124832153f, 0.02645350620150566f, 0.6694518327713013f, 0.5122164487838745f, 0.047355663031339645f, 0.1740802526473999f, +0.48008888959884644f, 0.7223691344261169f, 0.6988243460655212f, 0.05638204142451286f, 0.1115676537156105f, 0.19973382353782654f, 0.7698040008544922f, 0.84978848695755f, +0.8801103830337524f, 0.5547641515731812f, 0.5249173045158386f, 0.5656169652938843f, 0.07889485359191895f, 0.04466990381479263f, 0.17393574118614197f, 0.8391220569610596f, +0.8372706770896912f, 0.3190040588378906f, 0.04973406717181206f, 0.8301114439964294f, 0.9968568682670593f, 0.15273110568523407f, 0.028710389509797096f, 0.31652864813804626f, +0.9892463684082031f, 0.4008984863758087f, 0.2772408425807953f, 0.3645983636379242f, 0.1404254138469696f, 0.4089259207248688f, 0.285518616437912f, 0.9266089200973511f, +0.5564938187599182f, 0.8046037554740906f, 0.8682065010070801f, 0.9560765624046326f, 0.48660537600517273f, 0.6945685744285583f, 0.07087597250938416f, 0.08681467920541763f, +0.734801173210144f, 0.8630284070968628f, 0.4644680321216583f, 0.1333383172750473f, 0.01145651750266552f, 0.9848549962043762f, 0.7616958022117615f, 0.3105027973651886f, +0.5977436900138855f, 0.2647155821323395f, 0.09628120064735413f, 0.6033759713172913f, 0.8578786253929138f, 0.9551213979721069f, 0.39109593629837036f, 0.654151439666748f, +0.5684832334518433f, 0.379690945148468f, 0.19345755875110626f, 0.6912334561347961f, 0.23907700181007385f, 0.8141056299209595f, 0.8723076581954956f, 0.48333531618118286f, +0.5260719656944275f, 0.5730267763137817f, 0.6789444088935852f, 0.44040563702583313f, 0.9609959125518799f, 0.9013946056365967f, 0.11126439273357391f, 0.5477474331855774f, +0.6419422030448914f, 0.24112525582313538f, 0.2852044403553009f, 0.4726189076900482f, 0.4679878354072571f, 0.9083559513092041f, 0.741619348526001f, 0.06919194012880325f, +0.1662815511226654f, 0.13107475638389587f, 0.6580744385719299f, 0.808893084526062f, 0.16359122097492218f, 0.7134069204330444f, 0.6071567535400391f, 0.05781069025397301f, +0.7544057965278625f, 0.6701015830039978f, 0.3504011034965515f, 0.5180255770683289f, 0.5217419266700745f, 0.8497685790061951f, 0.4109673500061035f, 0.82735675573349f, +0.6649124622344971f, 0.5023850798606873f, 0.2643529176712036f, 0.9726359248161316f, 0.19802044332027435f, 0.905592143535614f, 0.5238567590713501f, 0.635380744934082f, +0.7038549184799194f, 0.4420148432254791f, 0.06752318888902664f, 0.42001721262931824f, 0.7615100741386414f, 0.768120288848877f, 0.26309019327163696f, 0.6178357601165771f, +0.9769749045372009f, 0.5404955744743347f, 0.16163553297519684f, 0.7664294242858887f, 0.9926788806915283f, 0.22821468114852905f, 0.15552307665348053f, 0.02929198183119297f, +0.9796938300132751f, 0.3617197275161743f, 0.6310458183288574f, 0.6557785272598267f, 0.8088107109069824f, 0.48865148425102234f, 0.484787255525589f, 0.022350607439875603f, +0.5568962693214417f, 0.08099709451198578f, 0.4393649399280548f, 0.724267840385437f, 0.8633223176002502f, 0.9791995286941528f, 0.11028297245502472f, 0.9178693294525146f, +0.7862024307250977f, 0.1838400661945343f, 0.926985502243042f, 0.7675090432167053f, 0.4967098534107208f, 0.8983486294746399f, 0.5385345816612244f, 0.42671558260917664f, +0.020253758877515793f, 0.824641227722168f, 0.7408159375190735f, 0.9445732235908508f, 0.5063771605491638f, 0.5174551010131836f, 0.7074541449546814f, 0.07717644423246384f, +0.10710456222295761f, 0.5436118841171265f, 0.15048560500144958f, 0.05555901676416397f, 0.7235037088394165f, 0.06580687314271927f, 0.8563459515571594f, 0.0844842940568924f, +0.6798257231712341f, 0.001493103220127523f, 0.6583220958709717f, 0.0901244655251503f, 0.14539922773838043f, 0.46288177371025085f, 0.169224351644516f, 0.23254705965518951f, +0.4690439701080322f, 0.6971064805984497f, 0.5025460720062256f, 0.7733452320098877f, 0.44192302227020264f, 0.5734786987304688f, 0.2605248689651489f, 0.9333096146583557f, +0.20503243803977966f, 0.5538547039031982f, 0.5792606472969055f, 0.32492679357528687f, 0.2872251868247986f, 0.7359387874603271f, 0.5458791851997375f, 0.9977984428405762f, +0.1974366009235382f, 0.2201913446187973f, 0.23176546394824982f, 0.8958871960639954f, 0.09360812604427338f, 0.28441762924194336f, 0.8550940752029419f, 0.02858087792992592f, +0.1940992921590805f, 0.27030327916145325f, 0.8756335377693176f, 0.45552858710289f, 0.9855018854141235f, 0.6809824109077454f, 0.765204668045044f, 0.17845800518989563f, +0.02919320948421955f, 0.9753574728965759f, 0.01141400821506977f, 0.1904420107603073f, 0.3880733549594879f, 0.643491268157959f, 0.21431806683540344f, 0.3438037931919098f, +0.20191191136837006f, 0.04600869119167328f, 0.332131564617157f, 0.8824116587638855f, 0.48801520466804504f, 0.5932869911193848f, 0.7084601521492004f, 0.1821584850549698f, +0.1576145887374878f, 0.29278817772865295f, 0.12965205311775208f, 0.8307098150253296f, 0.4978291392326355f, 0.36695560812950134f, 0.4181995689868927f, 0.33614999055862427f, +0.13265754282474518f, 0.5281840562820435f, 0.8201146125793457f, 0.44686904549598694f, 0.6625322699546814f, 0.4344870448112488f, 0.6245418190956116f, 0.030737241730093956f, +0.34593823552131653f, 0.327630877494812f, 0.49388089776039124f, 0.72198086977005f, 0.31169408559799194f, 0.5662874579429626f, 0.4861481189727783f, 0.07544086873531342f, +0.8298048377037048f, 0.5975834131240845f, 0.1348716914653778f, 0.4124131500720978f, 0.07504049688577652f, 0.8628972172737122f, 0.6879088878631592f, 0.476911336183548f, +0.28890857100486755f, 0.1999984234571457f, 0.743624210357666f, 0.5124650597572327f, 0.6467050909996033f, 0.009036993607878685f, 0.5484076142311096f, 0.8516402840614319f, +0.6373491883277893f, 0.8178590536117554f, 0.07205723971128464f, 0.5274140238761902f, 0.06374073028564453f, 0.7720595598220825f, 0.9237284660339355f, 0.23076938092708588f, +0.14843861758708954f, 0.5684818029403687f, 0.16443248093128204f, 0.7549114227294922f, 0.23071615397930145f, 0.8191092610359192f, 0.3873322606086731f, 0.0728459358215332f, +0.5703976154327393f, 0.4169009029865265f, 0.1154058501124382f, 0.7007790207862854f, 0.8418828248977661f, 0.8299359083175659f, 0.6350789070129395f, 0.15991930663585663f, +0.08475970476865768f, 0.42218735814094543f, 0.6813290119171143f, 0.225759819149971f, 0.02039586752653122f, 0.16710621118545532f, 0.48056915402412415f, 0.1058802530169487f, +0.5260244607925415f, 0.5823521018028259f, 0.5764318108558655f, 0.8572337031364441f, 0.9756572842597961f, 0.7463641166687012f, 0.596200704574585f, 0.6332003474235535f, +0.30776143074035645f, 0.7382820248603821f, 0.07193983346223831f, 0.9294529557228088f, 0.6522550582885742f, 0.9143828749656677f, 0.8992933630943298f, 0.7151002883911133f, +0.943658709526062f, 0.7699774503707886f, 0.08549731969833374f, 0.6579726338386536f, 0.2916625142097473f, 0.6110042929649353f, 0.7308086156845093f, 0.10500553250312805f, +0.8285953402519226f, 0.7316838502883911f, 0.4435209035873413f, 0.28986847400665283f, 0.6287516951560974f, 0.869385302066803f, 0.01408169325441122f, 0.18082717061042786f, +0.8381682634353638f, 0.6314626336097717f, 0.3756833076477051f, 0.6392922401428223f, 0.48727452754974365f, 0.9130403399467468f, 0.5950378179550171f, 0.788092315196991f, +0.09147649258375168f, 0.03527194634079933f, 0.7837324142456055f, 0.5082628726959229f, 0.029838595539331436f, 0.17905642092227936f, 0.97331303358078f, 0.38325637578964233f, +0.10943026095628738f, 0.4270715117454529f, 0.9121952056884766f, 0.8041030168533325f, 0.7243852615356445f, 0.041614167392253876f, 0.42893195152282715f, 0.9025886654853821f, +0.7330051064491272f, 0.7871759533882141f, 0.5098586678504944f, 0.3555881381034851f, 0.3506850600242615f, 0.6096670627593994f, 0.20163650810718536f, 0.42492222785949707f, +0.7980833649635315f, 0.29831549525260925f, 0.3901077210903168f, 0.2741940915584564f, 0.5100505352020264f, 0.05969962477684021f, 0.2206670194864273f, 0.5628340244293213f, +0.433803528547287f, 0.3454151153564453f, 0.07890209555625916f, 0.998487114906311f, 0.7749579548835754f, 0.2651655077934265f, 0.07215818017721176f, 0.02407127059996128f, +0.2861325144767761f, 0.06566178798675537f, 0.8470327258110046f, 0.4162040650844574f, 0.8683649897575378f, 0.27285197377204895f, 0.6207322478294373f, 0.4963393211364746f, +0.9233599305152893f, 0.7004709839820862f, 0.24482032656669617f, 0.7508669495582581f, 0.5348182916641235f, 0.8905187845230103f, 0.4666813015937805f, 0.6369298100471497f, +0.7426493167877197f, 0.7560936808586121f, 0.13290031254291534f, 0.04970937967300415f, 0.2480240911245346f, 0.6916287541389465f, 0.5116637945175171f, 0.36887070536613464f, +0.41268688440322876f, 0.28863099217414856f, 0.6418543457984924f, 0.1364140659570694f, 0.28658297657966614f, 0.604333221912384f, 0.5902146100997925f, 0.5134128332138062f, +0.9778324365615845f, 0.4580436646938324f, 0.5564291477203369f, 0.8303071856498718f, 0.030990418046712875f, 0.9753950238227844f, 0.5599873065948486f, 0.9941959381103516f, +0.5083175897598267f, 0.5714126229286194f, 0.13496553897857666f, 0.9210019707679749f, 0.7465526461601257f, 0.15679316222667694f, 0.11246255040168762f, 0.17266042530536652f, +0.26443225145339966f, 0.11272847652435303f, 0.8491462469100952f, 0.5754661560058594f, 0.6468778252601624f, 0.22393199801445007f, 0.013641896657645702f, 0.7000759243965149f, +0.8821797370910645f, 0.1301870495080948f, 0.03341703489422798f, 0.24413534998893738f, 0.9694473743438721f, 0.5581672787666321f, 0.25008201599121094f, 0.8201388120651245f, +0.019708694890141487f, 0.6735728979110718f, 0.48047077655792236f, 0.8843044638633728f, 0.6775790452957153f, 0.2576890289783478f, 0.6212453842163086f, 0.83254075050354f, +0.42675939202308655f, 0.5993826389312744f, 0.7338554859161377f, 0.6884956359863281f, 0.171565979719162f, 0.5593460202217102f, 0.7806524038314819f, 0.1797761172056198f, +0.2304888367652893f, 0.46435898542404175f, 0.8973613381385803f, 0.19353245198726654f, 0.8801175951957703f, 0.16151434183120728f, 0.07808235287666321f, 0.32673996686935425f, +0.1306258589029312f, 0.16176630556583405f, 0.044272877275943756f, 0.8328225612640381f, 0.2753751277923584f, 0.6371321678161621f, 0.6853768825531006f, 0.6606249809265137f, +0.1743381768465042f, 0.499859482049942f, 0.7320346832275391f, 0.04009399190545082f, 0.12651415169239044f, 0.16402746737003326f, 0.08141695708036423f, 0.6917479634284973f, +0.051670484244823456f, 0.31745123863220215f, 0.14853230118751526f, 0.5425845384597778f, 0.9246776700019836f, 0.8319268822669983f, 0.6095774173736572f, 0.9928776621818542f, +0.005085021257400513f, 0.347962886095047f, 0.26802369952201843f, 0.14932602643966675f, 0.1309174746274948f, 0.940594494342804f, 0.46650251746177673f, 0.11272779852151871f, +0.8767687082290649f, 0.6165632009506226f, 0.9615113139152527f, 0.1989990770816803f, 0.4486541450023651f, 0.019880138337612152f, 0.3096309006214142f, 0.3683820366859436f, +0.6496874690055847f, 0.6680347323417664f, 0.7816560864448547f, 0.7287664413452148f, 0.5872529149055481f, 0.7672795653343201f, 0.11367417871952057f, 0.47343704104423523f, +0.5056794881820679f, 0.4414787292480469f, 0.164357990026474f, 0.25948894023895264f, 0.00826238188892603f, 0.5672598481178284f, 0.17591427266597748f, 0.6062051653862f, +0.2390315979719162f, 0.47294506430625916f, 0.9763006567955017f, 0.49737152457237244f, 0.8710491061210632f, 0.4305832087993622f, 0.9389514327049255f, 0.8174286484718323f, +0.822201132774353f, 0.23961926996707916f, 0.573214590549469f, 0.1791331171989441f, 0.446870356798172f, 0.04386626183986664f, 0.4817042946815491f, 0.9913933277130127f, +0.41117697954177856f, 0.8226137757301331f, 0.28106507658958435f, 0.562231183052063f, 0.7732018232345581f, 0.9614210724830627f, 0.7297826409339905f, 0.3805975914001465f, +0.06640836596488953f, 0.6226550936698914f, 0.3070230484008789f, 0.18513056635856628f, 0.5636121034622192f, 0.5777974128723145f, 0.038341622799634933f, 0.22971349954605103f, +0.03099679760634899f, 0.6525496244430542f, 0.8125789165496826f, 0.1949489265680313f, 0.20959554612636566f, 0.7836439609527588f, 0.4832041263580322f, 0.44304075837135315f, +0.574436366558075f, 0.6301334500312805f, 0.4743224084377289f, 0.1400095820426941f, 0.9730342030525208f, 0.5033431649208069f, 0.2881820499897003f, 0.31216320395469666f, +0.6703228950500488f, 0.638441264629364f, 0.5533217191696167f, 0.2687790095806122f, 0.7946388721466064f, 0.08490137755870819f, 0.8931063413619995f, 0.25076478719711304f, +0.5220649838447571f, 0.08769703656435013f, 0.9453096389770508f, 0.10973351448774338f, 0.4363688826560974f, 0.8260613679885864f, 0.7807084321975708f, 0.5887714624404907f, +0.4644198715686798f, 0.023242715746164322f, 0.7769075632095337f, 0.578471839427948f, 0.12407642602920532f, 0.25617730617523193f, 0.8203296065330505f, 0.20195719599723816f, +0.37793004512786865f, 0.8826900124549866f, 0.058743320405483246f, 0.014728651382029057f, 0.6109330058097839f, 0.18539047241210938f, 0.7344358563423157f, 0.1968391239643097f, +0.22088755667209625f, 0.4064938426017761f, 0.4316568672657013f, 0.6589205265045166f, 0.5916208028793335f, 0.05187121033668518f, 0.7289045453071594f, 0.8225553035736084f, +0.7165597677230835f, 0.04882191866636276f, 0.4622739851474762f, 0.532526969909668f, 0.14850200712680817f, 0.5225207209587097f, 0.6688234806060791f, 0.07566259056329727f, +0.5638027787208557f, 0.1216139867901802f, 0.36483222246170044f, 0.16368639469146729f, 0.7322827577590942f, 0.3937952220439911f, 0.3428943455219269f, 0.7331043481826782f, +0.33714962005615234f, 0.29771265387535095f, 0.5469332933425903f, 0.4433325231075287f, 0.32397520542144775f, 0.20781411230564117f, 0.20777694880962372f, 0.8381088972091675f, +0.9918961524963379f, 0.8759636878967285f, 0.4122740626335144f, 0.8419222831726074f, 0.7327945828437805f, 0.9876636862754822f, 0.16956287622451782f, 0.36181196570396423f, +0.5004873275756836f, 0.13227735459804535f, 0.7936186194419861f, 0.5767793655395508f, 0.7490744590759277f, 0.7001764178276062f, 0.973517119884491f, 0.41802576184272766f, +0.603922963142395f, 0.20040328800678253f, 0.09561531990766525f, 0.24615073204040527f, 0.26064273715019226f, 0.017349526286125183f, 0.8626936078071594f, 0.9099628329277039f, +0.47141268849372864f, 0.7192619442939758f, 0.32237058877944946f, 0.4380188286304474f, 0.6579309105873108f, 0.7624373435974121f, 0.9745138883590698f, 0.5056889653205872f, +0.511924684047699f, 0.43763411045074463f, 0.8449320197105408f, 0.8476055860519409f, 0.8847246766090393f, 0.1001584604382515f, 0.14449438452720642f, 0.8335290551185608f, +0.5516011714935303f, 0.6577897667884827f, 0.6777940988540649f, 0.989366352558136f, 0.2304396778345108f, 0.1102205291390419f, 0.7618972063064575f, 0.14353492856025696f, +0.9406392574310303f, 0.7141033411026001f, 0.4391806125640869f, 0.49965474009513855f, 0.4398123323917389f, 0.2509928047657013f, 0.5801013112068176f, 0.38792675733566284f, +0.44768235087394714f, 0.21943020820617676f, 0.23810364305973053f, 0.05140057951211929f, 0.4406738579273224f, 0.294265478849411f, 0.7282229065895081f, 0.641684889793396f, +0.6443111300468445f, 0.5301662683486938f, 0.16126248240470886f, 0.331635445356369f, 0.0241349209100008f, 0.5562739372253418f, 0.5262752771377563f, 0.5941962599754333f, +0.5454599261283875f, 0.5138832330703735f, 0.9087511897087097f, 0.04623213782906532f, 0.1212984025478363f, 0.28967973589897156f, 0.48006579279899597f, 0.4454795718193054f, +0.9545271396636963f, 0.5961090326309204f, 0.7419070601463318f, 0.8787391781806946f, 0.3524719774723053f, 0.6655164957046509f, 0.5767902135848999f, 0.5005971193313599f, +0.5438854694366455f, 0.4547508955001831f, 0.9199574589729309f, 0.2835036814212799f, 0.4927181899547577f, 0.07757522910833359f, 0.9806613922119141f, 0.4699653685092926f, +0.9938104152679443f, 0.35129812359809875f, 0.18760941922664642f, 0.8040134310722351f, 0.15714579820632935f, 0.7989060878753662f, 0.5022174119949341f, 0.1743154674768448f, +0.2494174838066101f, 0.5187422633171082f, 0.2608911395072937f, 0.20384399592876434f, 0.3762468099594116f, 0.12235452234745026f, 0.47339487075805664f, 0.3895496726036072f, +0.49318262934684753f, 0.3021473288536072f, 0.6489495038986206f, 0.5718215703964233f, 0.14311428368091583f, 0.6570330858230591f, 0.4274815320968628f, 0.021707527339458466f, +0.9420396089553833f, 0.2416917234659195f, 0.15675324201583862f, 0.5887538194656372f, 0.5574888586997986f, 0.9329497218132019f, 0.5977138876914978f, 0.03142688050866127f, +0.2587999105453491f, 0.8153524994850159f, 0.3104356825351715f, 0.05196857079863548f, 0.08320658653974533f, 0.2057948112487793f, 0.4248500466346741f, 0.921305775642395f, +0.05616955831646919f, 0.3225013017654419f, 0.6989963054656982f, 0.32914745807647705f, 0.7411329746246338f, 0.5928831696510315f, 0.39742398262023926f, 0.4534674286842346f, +0.20422248542308807f, 0.6853445172309875f, 0.3156992197036743f, 0.04572880640625954f, 0.7117812037467957f, 0.8887865543365479f, 0.8311059474945068f, 0.3930806517601013f, +0.7269626259803772f, 0.32570508122444153f, 0.5217111706733704f, 0.06057373061776161f, 0.49884936213493347f, 0.6319891214370728f, 0.34282153844833374f, 0.39446282386779785f, +0.8033319711685181f, 0.28665149211883545f, 0.31306424736976624f, 0.17477719485759735f, 0.7152460217475891f, 0.020655464380979538f, 0.9186127185821533f, 0.55536288022995f, +0.8862031698226929f, 0.6877502202987671f, 0.9228847026824951f, 0.9989699125289917f, 0.6715086102485657f, 0.9465572237968445f, 0.18154916167259216f, 0.9557530879974365f, +0.8928394317626953f, 0.09839247912168503f, 0.8657498359680176f, 0.31321054697036743f, 0.9562740921974182f, 0.19960899651050568f, 0.4477292597293854f, 0.7594649791717529f, +0.44831332564353943f, 0.7474748492240906f, 0.0019159349612891674f, 0.7481603622436523f, 0.7906154990196228f, 0.22764559090137482f, 0.6125044822692871f, 0.6116602420806885f, +0.2714230418205261f, 0.028868384659290314f, 0.767421543598175f, 0.3425062894821167f, 0.8674520254135132f, 0.9174027442932129f, 0.3428083658218384f, 0.604993462562561f, +0.29364752769470215f, 0.26850205659866333f, 0.7455066442489624f, 0.9498069286346436f, 0.38457825779914856f, 0.40886229276657104f, 0.19698528945446014f, 0.1479610949754715f, +0.20658834278583527f, 0.355638325214386f, 0.10918949544429779f, 0.1877526193857193f, 0.27333778142929077f, 0.6423331499099731f, 0.005983336362987757f, 0.8369197845458984f, +0.8215952515602112f, 0.42101338505744934f, 0.17650552093982697f, 0.5601832270622253f, 0.322984904050827f, 0.10423479974269867f, 0.414760559797287f, 0.6935385465621948f, +0.055111709982156754f, 0.7391035556793213f, 0.5255892872810364f, 0.5281394720077515f, 0.37287744879722595f, 0.5518515706062317f, 0.8736200332641602f, 0.4418269097805023f, +0.22931091487407684f, 0.6674094200134277f, 0.6525464057922363f, 0.5139802098274231f, 0.5771846771240234f, 0.0021168373059481382f, 0.11776527017354965f, 0.7864798903465271f, +0.663391649723053f, 0.6758092045783997f, 0.11986206471920013f, 0.11360369622707367f, 0.9495155215263367f, 0.19671373069286346f, 0.2889757752418518f, 0.49278807640075684f, +0.035693295300006866f, 0.1749771237373352f, 0.4731345772743225f, 0.727647066116333f, 0.36294010281562805f, 0.3210253119468689f, 0.11869906634092331f, 0.9996867179870605f, +0.826018214225769f, 0.4807352125644684f, 0.6080946326255798f, 0.4984864890575409f, 0.4336033761501312f, 0.8697699904441833f, 0.020384253934025764f, 0.6708415150642395f, +0.9127264022827148f, 0.7086302638053894f, 0.8460437059402466f, 0.3306839168071747f, 0.6983009576797485f, 0.17739859223365784f, 0.9710475206375122f, 0.00505117466673255f, +0.3573206961154938f, 0.47065967321395874f, 0.49768561124801636f, 0.8360210061073303f, 0.14514011144638062f, 0.363074392080307f, 0.7007542252540588f, 0.6607638597488403f, +0.6708697080612183f, 0.3255118727684021f, 0.1059352308511734f, 0.38197997212409973f, 0.507297694683075f, 0.7920871376991272f, 0.043377045542001724f, 0.7510749101638794f, +0.09734944254159927f, 0.8036560416221619f, 0.8135017156600952f, 0.3217110335826874f, 0.31004631519317627f, 0.3494036793708801f, 0.9457760453224182f, 0.4340546727180481f, +0.8554873466491699f, 0.026740239933133125f, 0.7217108607292175f, 0.8649211525917053f, 0.2518629729747772f, 0.5347148776054382f, 0.32276082038879395f, 0.5528408288955688f, +0.6673521995544434f, 0.20200997591018677f, 0.3851352334022522f, 0.8284783959388733f, 0.09135856479406357f, 0.4241481125354767f, 0.7618409991264343f, 0.956284761428833f, +0.643366813659668f, 0.6963514089584351f, 0.9466925859451294f, 0.7943843007087708f, 0.4220356047153473f, 0.9055692553520203f, 0.6746031641960144f, 0.6649593114852905f, +0.3218785226345062f, 0.37349092960357666f, 0.36984315514564514f, 0.5614727139472961f, 0.41607433557510376f, 0.7082962393760681f, 0.021755170077085495f, 0.1139988899230957f, +0.22923390567302704f, 0.2532184422016144f, 0.0338289812207222f, 0.641770601272583f, 0.0009595275623723865f, 0.9843865633010864f, 0.36481690406799316f, 0.12089875340461731f, +0.4901275038719177f, 0.8107635974884033f, 0.054630305618047714f, 0.3034217953681946f, 0.6784799098968506f, 0.5885648727416992f, 0.2314395308494568f, 0.49543726444244385f, +0.8176440596580505f, 0.42605096101760864f, 0.9537820816040039f, 0.291404128074646f, 0.8530042767524719f, 0.06889006495475769f, 0.9894667863845825f, 0.43109777569770813f, +0.5991377234458923f, 0.42417100071907043f, 0.3081485629081726f, 0.07047644257545471f, 0.4637708365917206f, 0.2616733908653259f, 0.9589745998382568f, 0.337841659784317f, +0.856294572353363f, 0.19428162276744843f, 0.999349057674408f, 0.49971383810043335f, 0.7718424797058105f, 0.9644657373428345f, 0.6321110129356384f, 0.38084274530410767f, +0.4407954216003418f, 0.4800306558609009f, 0.3643098473548889f, 0.6574350595474243f, 0.030468543991446495f, 0.05022039636969566f, 0.5766916871070862f, 0.656147301197052f, +0.6030004024505615f, 0.0341261625289917f, 0.5941251516342163f, 0.32184284925460815f, 0.5978387594223022f, 0.9956324100494385f, 0.47766953706741333f, 0.9208345413208008f, +0.22129999101161957f, 0.6914438009262085f, 0.858814001083374f, 0.6362304091453552f, 0.6889188289642334f, 0.44812506437301636f, 0.7617208361625671f, 0.6054539084434509f, +0.3502535820007324f, 0.11377201229333878f, 0.2625247538089752f, 0.7378041744232178f, 0.971752941608429f, 0.8864575028419495f, 0.7956211566925049f, 0.34792038798332214f, +0.7169209122657776f, 0.5793432593345642f, 0.11280395835638046f, 0.9002237319946289f, 0.4581104516983032f, 0.01970858871936798f, 0.006217912770807743f, 0.7483567595481873f, +0.25800782442092896f, 0.09076284617185593f, 0.5265976190567017f, 0.7010523080825806f, 0.669736921787262f, 0.416006863117218f, 0.38678479194641113f, 0.5917368531227112f, +0.07850268483161926f, 0.46306586265563965f, 0.19845691323280334f, 0.3887704610824585f, 0.6751335859298706f, 0.18658679723739624f, 0.5058144927024841f, 0.26978734135627747f, +0.5374928116798401f, 0.5117012858390808f, 0.5598406791687012f, 0.17124471068382263f, 0.9241576194763184f, 0.5517176389694214f, 0.38747909665107727f, 0.8015073537826538f, +0.48562636971473694f, 0.6577883958816528f, 0.02290809154510498f, 0.19945582747459412f, 0.1906690150499344f, 0.6245693564414978f, 0.5498843193054199f, 0.510114848613739f, +0.018060820177197456f, 0.21552756428718567f, 0.6459119915962219f, 0.8613125681877136f, 0.20881031453609467f, 0.3069716691970825f, 0.6568637490272522f, 0.9318833351135254f, +0.9658496975898743f, 0.8332803845405579f, 0.5201877951622009f, 0.16956235468387604f, 0.4078385829925537f, 0.982097327709198f, 0.9161773920059204f, 0.8565466403961182f, +0.44683438539505005f, 0.021897153928875923f, 0.6775645613670349f, 0.3475712239742279f, 0.43748730421066284f, 0.2559880316257477f, 0.6092212200164795f, 0.13437294960021973f, +0.40291813015937805f, 0.10950563848018646f, 0.8444249033927917f, 0.6476284861564636f, 0.7873049378395081f, 0.2149692326784134f, 0.5016383528709412f, 0.1191442534327507f, +0.6555577516555786f, 0.5706090927124023f, 0.4666498005390167f, 0.18248063325881958f, 0.1796547919511795f, 0.7406003475189209f, 0.9996610283851624f, 0.8977080583572388f, +0.03640776127576828f, 0.7046642899513245f, 0.11881896108388901f, 0.8438845276832581f, 0.2193635106086731f, 0.3106851279735565f, 0.16907215118408203f, 0.22620469331741333f, +0.9677645564079285f, 0.264633446931839f, 0.885307252407074f, 0.8397852182388306f, 0.6127009391784668f, 0.5852488279342651f, 0.45067381858825684f, 0.17343850433826447f, +0.5728273391723633f, 0.4816382825374603f, 0.9649409055709839f, 0.20750154554843903f, 0.7286901473999023f, 0.28085950016975403f, 0.37792080640792847f, 0.3848073184490204f, +0.8834174871444702f, 0.259834885597229f, 0.24722255766391754f, 0.7330055832862854f, 0.729375422000885f, 0.9700654149055481f, 0.8338934183120728f, 0.3984375298023224f, +0.32316839694976807f, 0.9407759308815002f, 0.02559061162173748f, 0.449966162443161f, 0.12560303509235382f, 0.37369993329048157f, 0.7829886674880981f, 0.5330623388290405f, +0.23216022551059723f, 0.641197919845581f, 0.4673405885696411f, 0.7868173718452454f, 0.1366887092590332f, 0.4069221615791321f, 0.9026027321815491f, 0.7715770602226257f, +0.24653081595897675f, 0.7550144791603088f, 0.08597477525472641f, 0.32959291338920593f, 0.4131377637386322f, 0.9954462051391602f, 0.28635501861572266f, 0.08546721190214157f, +0.7796204090118408f, 0.6900402307510376f, 0.8324594497680664f, 0.40247488021850586f, 0.9462893605232239f, 0.44476455450057983f, 0.04787101224064827f, 0.15445251762866974f, +0.4414917528629303f, 0.8799588680267334f, 0.9286034107208252f, 0.3415723443031311f, 0.8266797661781311f, 0.17921088635921478f, 0.9250577688217163f, 0.21245114505290985f, +0.5476053357124329f, 0.951865017414093f, 0.6914633512496948f, 0.818781852722168f, 0.9263677000999451f, 0.7023738026618958f, 0.7477049231529236f, 0.7873215675354004f, +0.19083838164806366f, 0.6721335053443909f, 0.19240449368953705f, 0.38387930393218994f, 0.8426669836044312f, 0.5783917903900146f, 0.5452658534049988f, 0.1263735592365265f, +0.06109509989619255f, 0.7152552008628845f, 0.31002116203308105f, 0.9968963265419006f, 0.3106510639190674f, 0.5004693865776062f, 0.9636304378509521f, 0.6314550042152405f, +0.8346720933914185f, 0.2887505888938904f, 0.09102420508861542f, 0.7200502753257751f, 0.20575442910194397f, 0.16364382207393646f, 0.15197539329528809f, 0.18033277988433838f, +0.10130701214075089f, 0.4433540999889374f, 0.8618960976600647f, 0.9529145359992981f, 0.9091936945915222f, 0.8453708291053772f, 0.8480203747749329f, 0.2403145134449005f, +0.8378696441650391f, 0.20605388283729553f, 0.730049729347229f, 0.6862697005271912f, 0.29372259974479675f, 0.49623236060142517f, 0.28757068514823914f, 0.2922075092792511f, +0.05733809992671013f, 0.12533371150493622f, 0.6940526962280273f, 0.7835788130760193f, 0.6905121803283691f, 0.6025681495666504f, 0.4112236201763153f, 0.9575843214988708f, +0.3134559392929077f, 0.7390121221542358f, 0.6700992584228516f, 0.4745742976665497f, 0.49831220507621765f, 0.7820950150489807f, 0.3000723123550415f, 0.6176813244819641f, +0.5757899880409241f, 0.676360011100769f, 0.39168083667755127f, 0.367529958486557f, 0.36734023690223694f, 0.824592649936676f, 0.38376665115356445f, 0.01752924732863903f, +0.7155432105064392f, 0.7506282925605774f, 0.11336404830217361f, 0.6242191195487976f, 0.15014594793319702f, 0.8041836619377136f, 0.8169640898704529f, 0.23893111944198608f, +0.7443493604660034f, 0.9736831784248352f, 0.4822103679180145f, 0.45169809460639954f, 0.29289737343788147f, 0.2648152709007263f, 0.3688335120677948f, 0.9943825602531433f, +0.37205663323402405f, 0.8246164321899414f, 0.09152617305517197f, 0.9956223964691162f, 0.8485788702964783f, 0.30568811297416687f, 0.7484926581382751f, 0.46065381169319153f, +0.9433189630508423f, 0.48209044337272644f, 0.8818517327308655f, 0.4545420706272125f, 0.6868162155151367f, 0.714279055595398f, 0.29894721508026123f, 0.24437011778354645f, +0.663332462310791f, 0.10505145788192749f, 0.11046601086854935f, 0.0838393121957779f, 0.7676242589950562f, 0.9081233739852905f, 0.6522731184959412f, 0.534034252166748f, +0.643185019493103f, 0.7216682434082031f, 0.2814478278160095f, 0.9960008859634399f, 0.2755158245563507f, 0.6586474180221558f, 0.0691208690404892f, 0.5591328740119934f, +0.9908292889595032f, 0.3872111141681671f, 0.39691469073295593f, 0.07175099104642868f, 0.331676185131073f, 0.5519435405731201f, 0.20553992688655853f, 0.14383454620838165f, +0.5926419496536255f, 0.3688909113407135f, 0.5284740328788757f, 0.20921975374221802f, 0.6182534694671631f, 0.17996947467327118f, 0.5607049465179443f, 0.8409370183944702f, +0.17252111434936523f, 0.22818325459957123f, 0.9952152967453003f, 0.6723766922950745f, 0.4291750490665436f, 0.1892067790031433f, 0.16184119880199432f, 0.4849463701248169f, +0.8333225250244141f, 0.9972678422927856f, 0.03744739666581154f, 0.017925258725881577f, 0.42863860726356506f, 0.045293767005205154f, 0.9991825222969055f, 0.4444580078125f, +0.30205318331718445f, 0.5032695531845093f, 0.47199273109436035f, 0.33501148223876953f, 0.44374600052833557f, 0.7612390518188477f, 0.5701826214790344f, 0.7905033230781555f, +0.8435861468315125f, 0.011419102549552917f, 0.8841715455055237f, 0.9934428930282593f, 0.2945573925971985f, 0.7903575897216797f, 0.8443295359611511f, 0.5887891054153442f, +0.22043360769748688f, 0.23916742205619812f, 0.3840542137622833f, 0.3328299820423126f, 0.8633204102516174f, 0.5069549083709717f, 0.7649708390235901f, 0.28677278757095337f, +0.6340352296829224f, 0.9482622146606445f, 0.3092106282711029f, 0.6938597559928894f, 0.8898558616638184f, 0.7534502744674683f, 0.6657344698905945f, 0.1814941167831421f, +0.5780358910560608f, 0.3511519432067871f, 0.9388175010681152f, 0.7865152955055237f, 0.3583489656448364f, 0.6972689032554626f, 0.6315007209777832f, 0.07198870927095413f, +0.2614264488220215f, 0.3882600963115692f, 0.19943049550056458f, 0.9513925909996033f, 0.15643960237503052f, 0.02457214891910553f, 0.221976637840271f, 0.873569667339325f, +0.2665771245956421f, 0.39686429500579834f, 0.8277773857116699f, 0.7084474563598633f, 0.11600401997566223f, 0.34663504362106323f, 0.09538604319095612f, 0.3540371358394623f, +0.49086520075798035f, 0.2575437128543854f, 0.4299491345882416f, 0.7361075282096863f, 0.08352608978748322f, 0.47483545541763306f, 0.9250191450119019f, 0.5768277049064636f, +0.455036997795105f, 0.23895342648029327f, 0.9928149580955505f, 0.8759725093841553f, 0.9637998938560486f, 0.2593740224838257f, 0.6964228749275208f, 0.22209309041500092f, +0.3681991994380951f, 0.8996562957763672f, 0.865477442741394f, 0.13929761946201324f, 0.04842096194624901f, 0.026220543310046196f, 0.08956161886453629f, 0.702614426612854f, +0.7017608880996704f, 0.42584824562072754f, 0.7293702960014343f, 0.7351198792457581f, 0.08173925429582596f, 0.013268211856484413f, 0.8568801879882812f, 0.7125641107559204f, +0.4956730902194977f, 0.21632063388824463f, 0.23117278516292572f, 0.13183461129665375f, 0.0991540253162384f, 0.13755381107330322f, 0.19620560109615326f, 0.03823556751012802f, +0.15269872546195984f, 0.8819359540939331f, 0.5797867774963379f, 0.34592074155807495f, 0.4248307943344116f, 0.8873844742774963f, 0.8934760093688965f, 0.5850281715393066f, +0.22279483079910278f, 0.00867562834173441f, 0.42184722423553467f, 0.3537236750125885f, 0.4131655991077423f, 0.9387980699539185f, 0.9123123288154602f, 0.28923705220222473f, +0.024475131183862686f, 0.3421894609928131f, 0.0007497453480027616f, 0.5940815806388855f, 0.6171183586120605f, 0.3206196427345276f, 0.6696571707725525f, 0.8331029415130615f, +0.44379547238349915f, 0.3433822691440582f, 0.7014876008033752f, 0.9423767328262329f, 0.9182738661766052f, 0.1754683554172516f, 0.010628893971443176f, 0.42410340905189514f, +0.46143659949302673f, 0.5716990828514099f, 0.7354536652565002f, 0.0808810293674469f, 0.30684494972229004f, 0.3322228193283081f, 0.18693900108337402f, 0.59800785779953f, +0.3935930132865906f, 0.196236252784729f, 0.19280481338500977f, 0.5011991262435913f, 0.29917246103286743f, 0.7864106297492981f, 0.4310897886753082f, 0.22241123020648956f, +0.7328693866729736f, 0.1156802549958229f, 0.5916293859481812f, 0.1577697992324829f, 0.19730134308338165f, 0.5458986163139343f, 0.8413732647895813f, 0.25239571928977966f, +0.9732089042663574f, 0.8399273157119751f, 0.8054360747337341f, 0.5193305015563965f, 0.3006172776222229f, 0.507881224155426f, 0.06928662955760956f, 0.41015100479125977f, +0.6718527674674988f, 0.3809971809387207f, 0.20067790150642395f, 0.8336922526359558f, 0.9214654564857483f, 0.6297961473464966f, 0.9075505137443542f, 0.839735209941864f, +0.6426976323127747f, 0.8129429221153259f, 0.42403489351272583f, 0.5828205943107605f, 0.13563451170921326f, 0.9696363210678101f, 0.34691476821899414f, 0.9742147326469421f, +0.567789614200592f, 0.687567949295044f, 0.22371987998485565f, 0.7109919190406799f, 0.6944751739501953f, 0.1839684545993805f, 0.3146398961544037f, 0.9507308006286621f, +0.3440394997596741f, 0.895675778388977f, 0.07458975911140442f, 0.09881006181240082f, 0.3909684419631958f, 0.3022855818271637f, 0.6834869384765625f, 0.5985022783279419f, +0.16081881523132324f, 0.585810661315918f, 0.8494917154312134f, 0.8570507168769836f, 0.4656088948249817f, 0.25300994515419006f, 0.33135277032852173f, 0.40105947852134705f, +0.6006220579147339f, 0.8197458982467651f, 0.9058247208595276f, 0.6667229533195496f, 0.2654043436050415f, 0.44036388397216797f, 0.6381761431694031f, 0.8480828404426575f, +0.40471503138542175f, 0.8090921640396118f, 0.8746956586837769f, 0.022970885038375854f, 0.7697845101356506f, 0.0791405662894249f, 0.9471613168716431f, 0.07866538316011429f, +0.9485733509063721f, 0.2042415589094162f, 0.7080491185188293f, 0.552726686000824f, 0.6292600631713867f, 0.8293759226799011f, 0.23386088013648987f, 0.8215944766998291f, +0.5989246368408203f, 0.3997094929218292f, 0.4376206398010254f, 0.278190553188324f, 0.08285192400217056f, 0.5961280465126038f, 0.766330897808075f, 0.8029456734657288f, +0.9025040864944458f, 0.4726751148700714f, 0.4834594130516052f, 0.973669707775116f, 0.15436038374900818f, 0.5951085090637207f, 0.5773507952690125f, 0.6569332480430603f, +0.2780321538448334f, 0.38514310121536255f, 0.4544724225997925f, 0.8997114300727844f, 0.5377580523490906f, 0.9519044756889343f, 0.18721868097782135f, 0.5229097008705139f, +0.4539186656475067f, 0.22373193502426147f, 0.4548938572406769f, 0.10207296162843704f, 0.6018864512443542f, 0.5593612790107727f, 0.4178593158721924f, 0.012107063084840775f, +0.426613450050354f, 0.47786417603492737f, 0.5346884727478027f, 0.34555527567863464f, 0.41861677169799805f, 0.6165449619293213f, 0.5629603266716003f, 0.5068749189376831f, +0.3166080117225647f, 0.020932676270604134f, 0.9070135354995728f, 0.3611378073692322f, 0.9666105508804321f, 0.9347549080848694f, 0.19743265211582184f, 0.020241733640432358f, +0.2842206060886383f, 0.3757215440273285f, 0.3364964723587036f, 0.6084569692611694f, 0.224521204829216f, 0.25383591651916504f, 0.9280997514724731f, 0.9756805300712585f, +0.3338288366794586f, 0.5321622490882874f, 0.7567427754402161f, 0.9550291299819946f, 0.5534951686859131f, 0.538234293460846f, 0.8832513689994812f, 0.8004207015037537f, +0.6164373755455017f, 0.6824888586997986f, 0.14841613173484802f, 0.5532203912734985f, 0.30272307991981506f, 0.47301769256591797f, 0.28865107893943787f, 0.7141022682189941f, +0.19923865795135498f, 0.6056148409843445f, 0.7979135513305664f, 0.8820318579673767f, 0.2127968668937683f, 0.6746091246604919f, 0.4139557480812073f, 0.5569806694984436f, +0.7533877491950989f, 0.031082846224308014f, 0.9333008527755737f, 0.2831026613712311f, 0.9338594079017639f, 0.008825292810797691f, 0.28093448281288147f, 0.2704811692237854f, +0.8593222498893738f, 0.13306178152561188f, 0.624088704586029f, 0.21430011093616486f, 0.24855338037014008f, 0.3723893165588379f, 0.08667632937431335f, 0.3613998293876648f, +0.538569450378418f, 0.13298793137073517f, 0.6888000965118408f, 0.7741127610206604f, 0.9165404438972473f, 0.1139417290687561f, 0.8532021045684814f, 0.1766156554222107f, +0.7735534906387329f, 0.3386057913303375f, 0.26558080315589905f, 0.06607504934072495f, 0.8737804293632507f, 0.6565499901771545f, 0.4935606122016907f, 0.8344826698303223f, +0.8705153465270996f, 0.027236241847276688f, 0.5378430485725403f, 0.6521546840667725f, 0.5144896507263184f, 0.8615798950195312f, 0.7111536860466003f, 0.6902679800987244f, +0.24271953105926514f, 0.3741373121738434f, 0.09946959465742111f, 0.7602033019065857f, 0.1386098861694336f, 0.528960645198822f, 0.2715798616409302f, 0.6445472240447998f, +0.7997211813926697f, 0.4309033453464508f, 0.11942533403635025f, 0.5682259798049927f, 0.09071653336286545f, 0.7021583914756775f, 0.11241867393255234f, 0.11680873483419418f, +0.8848573565483093f, 0.23450559377670288f, 0.7480103969573975f, 0.9454141855239868f, 0.4325049817562103f, 0.889014720916748f, 0.7347328662872314f, 0.2513672113418579f, +0.8631196618080139f, 0.6582249999046326f, 0.44207265973091125f, 0.5969013571739197f, 0.05584759637713432f, 0.24914921820163727f, 0.2049184888601303f, 0.8055151104927063f, +0.9005333185195923f, 0.8744732141494751f, 0.0017717761220410466f, 0.8899904489517212f, 0.7052417993545532f, 0.07561620324850082f, 0.8488396406173706f, 0.8563253879547119f, +0.8680802583694458f, 0.43962982296943665f, 0.675849437713623f, 0.935348629951477f, 0.9935380220413208f, 0.7376629114151001f, 0.7482619881629944f, 0.29546451568603516f, +0.5321065783500671f, 0.802178144454956f, 0.9119234681129456f, 0.5573381185531616f, 0.9942142963409424f, 0.03699041157960892f, 0.9068109393119812f, 0.6015564203262329f, +0.8886932134628296f, 0.5619431138038635f, 0.5554257035255432f, 0.9865925908088684f, 0.7579287886619568f, 0.4281248450279236f, 0.5213546752929688f, 0.7222480177879333f, +0.5136228799819946f, 0.8729080557823181f, 0.09845545887947083f, 0.05852604657411575f, 0.7575664520263672f, 0.757964015007019f, 0.08733518421649933f, 0.37985557317733765f, +0.8017658591270447f, 0.045197658240795135f, 0.8894051909446716f, 0.458493709564209f, 0.030444184318184853f, 0.8153960704803467f, 0.29665955901145935f, 0.6993714570999146f, +0.3863806426525116f, 0.11218786239624023f, 0.3075599670410156f, 0.107085220515728f, 0.29377713799476624f, 0.4993508756160736f, 0.4749036729335785f, 0.6624202132225037f, +0.4865434765815735f, 0.25378331542015076f, 0.2800185978412628f, 0.6553037166595459f, 0.9064685106277466f, 0.8296746015548706f, 0.6812912225723267f, 0.07765112072229385f, +0.8107709288597107f, 0.15595564246177673f, 0.8180252313613892f, 0.955064058303833f, 0.7188154458999634f, 0.2848951816558838f, 0.7992626428604126f, 0.05813201144337654f, +0.6156145334243774f, 0.6595533490180969f, 0.7514896988868713f, 0.8430987000465393f, 0.5077255368232727f, 0.15497925877571106f, 0.09127837419509888f, 0.4667506515979767f, +0.8474674224853516f, 0.5904163718223572f, 0.7278627157211304f, 0.23454836010932922f, 0.41541334986686707f, 0.1444828063249588f, 0.1513838768005371f, 0.1966715157032013f, +0.7178812623023987f, 0.5927199721336365f, 0.9145883917808533f, 0.17968900501728058f, 0.637442409992218f, 0.8535216450691223f, 0.3998592495918274f, 0.01784474030137062f, +0.22775274515151978f, 0.4301902651786804f, 0.10746869444847107f, 0.8149464726448059f, 0.4158053696155548f, 0.6249077916145325f, 0.7465067505836487f, 0.5097619891166687f, +0.30697858333587646f, 0.79047691822052f, 0.03396783396601677f, 0.14860248565673828f, 0.17295444011688232f, 0.7151645421981812f, 0.7736029624938965f, 0.7657882571220398f, +0.8731749057769775f, 0.7796734571456909f, 0.7450496554374695f, 0.5865137577056885f, 0.33589643239974976f, 0.48012059926986694f, 0.03172733634710312f, 0.04120820015668869f, +0.11719898134469986f, 0.6614503264427185f, 0.21696646511554718f, 0.8104416131973267f, 0.3615497052669525f, 0.9573625922203064f, 0.48359453678131104f, 0.12411592155694962f, +0.48092034459114075f, 0.670763373374939f, 0.21016454696655273f, 0.8278915286064148f, 0.9570343494415283f, 0.30011293292045593f, 0.7868676781654358f, 0.3310468792915344f, +0.7496629953384399f, 0.8954429626464844f, 0.36865150928497314f, 0.5599627494812012f, 0.946995735168457f, 0.20703691244125366f, 0.6231535077095032f, 0.09673213213682175f, +0.9969525933265686f, 0.5613712668418884f, 0.13914348185062408f, 0.08953895419836044f, 0.023864850401878357f, 0.23024535179138184f, 0.8538162708282471f, 0.09939398616552353f, +0.07108583301305771f, 0.22193819284439087f, 0.2344362586736679f, 0.00411008158698678f, 0.11868097633123398f, 0.10504995286464691f, 0.4523202180862427f, 0.8992286920547485f, +0.9114627242088318f, 0.712778627872467f, 0.9398624300956726f, 0.6327052712440491f, 0.5721302628517151f, 0.13847678899765015f, 0.8891039490699768f, 0.9565439224243164f, +0.9658251404762268f, 0.3833451569080353f, 0.3991580009460449f, 0.7545945644378662f, 0.892488956451416f, 0.711062490940094f, 0.11912145465612411f, 0.23603448271751404f, +0.7672807574272156f, 0.6479119062423706f, 0.27084627747535706f, 0.4817172884941101f, 0.8930355906486511f, 0.7980086207389832f, 0.07935982942581177f, 0.019643792882561684f, +0.9906771779060364f, 0.17926755547523499f, 0.03488880768418312f, 0.6966283917427063f, 0.04400472342967987f, 0.3927561640739441f, 0.16166101396083832f, 0.04946080967783928f, +0.4586348235607147f, 0.40207022428512573f, 0.8297236561775208f, 0.3009175956249237f, 0.19454288482666016f, 0.9736635088920593f, 0.05952855944633484f, 0.18144699931144714f, +0.5870451927185059f, 0.6082636117935181f, 0.08952105790376663f, 0.9753749370574951f, 0.2302156388759613f, 0.7052534818649292f, 0.6235846281051636f, 0.5467206835746765f, +0.967749297618866f, 0.7565251588821411f, 0.30780574679374695f, 0.15410858392715454f, 0.24105539917945862f, 0.20234760642051697f, 0.8899744749069214f, 0.3916870355606079f, +0.4448583126068115f, 0.2331647276878357f, 0.7012551426887512f, 0.21418848633766174f, 0.3690764009952545f, 0.17276552319526672f, 0.4411827027797699f, 0.1908104419708252f, +0.28281450271606445f, 0.8941026329994202f, 0.19826148450374603f, 0.6704874038696289f, 0.5353639721870422f, 0.15096312761306763f, 0.26300811767578125f, 0.8316268920898438f, +0.7082419395446777f, 0.5354748368263245f, 0.9316532015800476f, 0.4539419710636139f, 0.6028091311454773f, 0.8889901041984558f, 0.5671985149383545f, 0.6527138352394104f, +0.49809297919273376f, 0.5285516381263733f, 0.76741623878479f, 0.7412425875663757f, 0.6331203579902649f, 0.763249397277832f, 0.5103987455368042f, 0.9494335651397705f, +0.7767101526260376f, 0.7285395860671997f, 0.02284364029765129f, 0.59523606300354f, 0.11580301821231842f, 0.5192999243736267f, 0.7598601579666138f, 0.9547953009605408f, +0.6937898993492126f, 0.4295063316822052f, 0.7376956343650818f, 0.6147812604904175f, 0.4382762610912323f, 0.11702452600002289f, 0.48456189036369324f, 0.7501532435417175f, +0.2889746427536011f, 0.8864260911941528f, 0.9362891316413879f, 0.3972752094268799f, 0.6359225511550903f, 0.4777991473674774f, 0.5007860064506531f, 0.8838427066802979f, +0.7806005477905273f, 0.6592121720314026f, 0.8942243456840515f, 0.23752139508724213f, 0.9646268486976624f, 0.578152596950531f, 0.3709929883480072f, 0.12342631816864014f, +0.31961074471473694f, 0.41303005814552307f, 0.6875320672988892f, 0.6108338236808777f, 0.24456122517585754f, 0.9528385400772095f, 0.49118801951408386f, 0.8486296534538269f, +0.18476469814777374f, 0.9340630769729614f, 0.7878355979919434f, 0.41298308968544006f, 0.01774900034070015f, 0.9198168516159058f, 0.8170116543769836f, 0.8406765460968018f, +0.266636461019516f, 0.9425080418586731f, 0.3581402897834778f, 0.5171331763267517f, 0.8131700754165649f, 0.6472709774971008f, 0.10759734362363815f, 0.4414585530757904f, +0.07118426263332367f, 0.7050855159759521f, 0.23050642013549805f, 0.1823466718196869f, 0.25933837890625f, 0.8959373831748962f, 0.4036302864551544f, 0.3020702004432678f, +0.8801434636116028f, 0.993869960308075f, 0.012565077282488346f, 0.7922346591949463f, 0.7768023014068604f, 0.9617478251457214f, 0.6856397390365601f, 0.7720442414283752f, +0.8674120903015137f, 0.4508616328239441f, 0.8111366629600525f, 0.06075368449091911f, 0.8936590552330017f, 0.5966545343399048f, 0.5592286586761475f, 0.817446231842041f, +0.28940585255622864f, 0.3501112163066864f, 0.320367693901062f, 0.8620802760124207f, 0.3637665808200836f, 0.030894573777914047f, 0.3768708109855652f, 0.9694539308547974f, +0.8956659436225891f, 0.3448103368282318f, 0.0664164274930954f, 0.11667411774396896f, 0.9556149840354919f, 0.5979580879211426f, 0.7703537344932556f, 0.49960067868232727f, +0.09811315685510635f, 0.5070708990097046f, 0.8386045098304749f, 0.010854648426175117f, 0.5589203238487244f, 0.7389598488807678f, 0.4062983989715576f, 0.21811585128307343f, +0.6624915599822998f, 0.6272541284561157f, 0.025265229865908623f, 0.7775862216949463f, 0.20453624427318573f, 0.7619680166244507f, 0.9712132215499878f, 0.14434202015399933f, +0.07215774059295654f, 0.008275831118226051f, 0.9336611032485962f, 0.013587900437414646f, 0.32332971692085266f, 0.7628589868545532f, 0.3369233310222626f, 0.03185252472758293f, +0.0172384362667799f, 0.2680381238460541f, 0.8888576030731201f, 0.42073413729667664f, 0.5178500413894653f, 0.29098108410835266f, 0.28423070907592773f, 0.829853355884552f, +0.8849615454673767f, 0.8192638158798218f, 0.028503546491265297f, 0.8759391903877258f, 0.21488970518112183f, 0.10258659720420837f, 0.7071928381919861f, 0.5769082307815552f, +0.043774113059043884f, 0.3636064827442169f, 0.07153955101966858f, 0.8808093667030334f, 0.5017990469932556f, 0.1005033478140831f, 0.35893920063972473f, 0.4080357253551483f, +0.09052307903766632f, 0.27714625000953674f, 0.3601438105106354f, 0.8234742283821106f, 0.3608275353908539f, 0.8766413331031799f, 0.10498117655515671f, 0.08485031127929688f, +0.6264183521270752f, 0.9477608799934387f, 0.6277065277099609f, 0.1332639455795288f, 0.6468744874000549f, 0.7659513354301453f, 0.23546767234802246f, 0.9249924421310425f, +0.17066419124603271f, 0.4406304359436035f, 0.20842881500720978f, 0.7122389674186707f, 0.5980934500694275f, 0.49614694714546204f, 0.4328332543373108f, 0.3399064242839813f, +0.9680753946304321f, 0.7331945896148682f, 0.49115756154060364f, 0.41226857900619507f, 0.40096497535705566f, 0.32785457372665405f, 0.6447014212608337f, 0.46790358424186707f, +0.02906673215329647f, 0.2324741631746292f, 0.6259361505508423f, 0.044415395706892014f, 0.02735280431807041f, 0.707902729511261f, 0.2761732339859009f, 0.7339937686920166f, +0.9737843871116638f, 0.6081010103225708f, 0.1628195196390152f, 0.5335363149642944f, 0.4440822899341583f, 0.43504422903060913f, 0.16937249898910522f, 0.1333097219467163f, +0.9096680879592896f, 0.20141807198524475f, 0.42866280674934387f, 0.7029931545257568f, 0.33584538102149963f, 0.5336997509002686f, 0.8941160440444946f, 0.4336162209510803f, +0.7904295921325684f, 0.35249337553977966f, 0.9004443883895874f, 0.9206012487411499f, 0.5281723141670227f, 0.27495336532592773f, 0.41563600301742554f, 0.5054490566253662f, +0.6198724508285522f, 0.39497706294059753f, 0.2756671607494354f, 0.9461072087287903f, 0.6769784092903137f, 0.17275330424308777f, 0.3567200303077698f, 0.9620147943496704f, +0.909801721572876f, 0.893854022026062f, 0.7553013563156128f, 0.48578116297721863f, 0.18572898209095f, 0.5549656748771667f, 0.03694365546107292f, 0.3165605366230011f, +0.9284353852272034f, 0.5038042664527893f, 0.8223986625671387f, 0.12872135639190674f, 0.9447718858718872f, 0.49307557940483093f, 0.3648271858692169f, 0.4156677722930908f, +0.6588870882987976f, 0.8849703073501587f, 0.18898548185825348f, 0.039296675473451614f, 0.48609113693237305f, 0.3997221291065216f, 0.2192040979862213f, 0.5382541418075562f, +0.9588985443115234f, 0.2792670428752899f, 0.8141441941261292f, 0.9704515337944031f, 0.33498960733413696f, 0.9855057597160339f, 0.14988860487937927f, 0.12686105072498322f, +0.43538686633110046f, 0.15081629157066345f, 0.9409805536270142f, 0.7634068727493286f, 0.2927582859992981f, 0.10882029682397842f, 0.13808059692382812f, 0.15232478082180023f, +0.8497768640518188f, 0.21562355756759644f, 0.1700114607810974f, 0.39404353499412537f, 0.3442111313343048f, 0.29397812485694885f, 0.6011974215507507f, 0.05526648834347725f, +0.6455023288726807f, 0.7962008118629456f, 0.835501492023468f, 0.4815954566001892f, 0.874049961566925f, 0.7376067638397217f, 0.13626660406589508f, 0.576381266117096f, +0.1784900575876236f, 0.9344083070755005f, 0.41110914945602417f, 0.27582040429115295f, 0.5986475944519043f, 0.39733630418777466f, 0.3910275995731354f, 0.05764475464820862f, +0.9780980944633484f, 0.02142956852912903f, 0.37416744232177734f, 0.49301207065582275f, 0.6431045532226562f, 0.7069488167762756f, 0.09697471559047699f, 0.6511247158050537f, +0.09958219528198242f, 0.237324059009552f, 0.13935895264148712f, 0.8871303200721741f, 0.2815406024456024f, 0.3030150532722473f, 0.6901524066925049f, 0.20360833406448364f, +0.6352816224098206f, 0.8864182233810425f, 0.658255398273468f, 0.24070806801319122f, 0.032603755593299866f, 0.7982106804847717f, 0.28274720907211304f, 0.8600456714630127f, +0.6058067679405212f, 0.12039528042078018f, 0.585389256477356f, 0.5945512652397156f, 0.1804225593805313f, 0.7067267298698425f, 0.5268838405609131f, 0.7651306986808777f, +0.3647378981113434f, 0.6694056391716003f, 0.599959135055542f, 0.28686290979385376f, 0.8619941473007202f, 0.7984136343002319f, 0.26494139432907104f, 0.1655009388923645f, +0.30762943625450134f, 0.9246708154678345f, 0.4733268618583679f, 0.6710407733917236f, 0.7833744883537292f, 0.12000646442174911f, 0.6890708208084106f, 0.7769585847854614f, +0.09267779439687729f, 0.9606451392173767f, 0.5695546865463257f, 0.2694926857948303f, 0.6995048522949219f, 0.24760940670967102f, 0.7519434690475464f, 0.9641171097755432f, +0.9140611886978149f, 0.38381463289260864f, 0.36141547560691833f, 0.6715387105941772f, 0.5316348075866699f, 0.6125316619873047f, 0.8230743408203125f, 0.10900150239467621f, +0.40825143456459045f, 0.5113581418991089f, 0.0012179597979411483f, 0.43471774458885193f, 0.4724096357822418f, 0.5038541555404663f, 0.221074640750885f, 0.016808589920401573f, +0.45043185353279114f, 0.027984410524368286f, 0.14514108002185822f, 0.29171544313430786f, 0.27613696455955505f, 0.890653669834137f, 0.3981020450592041f, 0.8605061173439026f, +0.6186049580574036f, 0.55461585521698f, 0.6411516666412354f, 0.7623034715652466f, 0.4178214371204376f, 0.7345101833343506f, 0.16771459579467773f, 0.21460548043251038f, +0.08357535302639008f, 0.6350504159927368f, 0.5457562804222107f, 0.5007926225662231f, 0.9958073496818542f, 0.8157316446304321f, 0.348256915807724f, 0.2935333549976349f, +0.2955392301082611f, 0.48028942942619324f, 0.29992973804473877f, 0.24901127815246582f, 0.39453262090682983f, 0.7532679438591003f, 0.4314354956150055f, 0.004799894522875547f, +0.31949084997177124f, 0.584568440914154f, 0.03399435430765152f, 0.15357142686843872f, 0.9338343739509583f, 0.9814574718475342f, 0.25271278619766235f, 0.9884554743766785f, +0.763780415058136f, 0.9317795634269714f, 0.10033100843429565f, 0.21833594143390656f, 0.6167795658111572f, 0.4277406930923462f, 0.09655296802520752f, 0.7366324663162231f, +0.695353627204895f, 0.2892583906650543f, 0.03297608718276024f, 0.1095660850405693f, 0.47041043639183044f, 0.819761335849762f, 0.7014118432998657f, 0.3046330511569977f, +0.6142534017562866f, 0.7282652258872986f, 0.5213883519172668f, 0.1963154822587967f, 0.15493656694889069f, 0.6615257263183594f, 0.7869516015052795f, 0.47127780318260193f, +0.14428864419460297f, 0.19850657880306244f, 0.8070625066757202f, 0.16439080238342285f, 0.2544357478618622f, 0.4712178707122803f, 0.7374105453491211f, 0.7120380401611328f, +0.3163427412509918f, 0.11544181406497955f, 0.5960126519203186f, 0.1537267565727234f, 0.4375033378601074f, 0.5082706809043884f, 0.6695029139518738f, 0.5657739639282227f, +0.36332690715789795f, 0.04864315316081047f, 0.36572423577308655f, 0.36793211102485657f, 0.8766265511512756f, 0.4558514952659607f, 0.23187975585460663f, 0.05286719277501106f, +0.5636146068572998f, 0.8764181137084961f, 0.9799311757087708f, 0.10461518168449402f, 0.2971600890159607f, 0.4197472631931305f, 0.059722039848566055f, 0.4201226234436035f, +0.11056175827980042f, 0.13373206555843353f, 0.005159344989806414f, 0.8528507947921753f, 0.5722512006759644f, 0.5170464515686035f, 0.0240006186068058f, 0.9438654780387878f, +0.7162630558013916f, 0.1626507043838501f, 0.5813173651695251f, 0.04003201425075531f, 0.9465613961219788f, 0.04737229645252228f, 0.5710336565971375f, 0.18544577062129974f, +0.7897458076477051f, 0.5336212515830994f, 0.5921635627746582f, 0.8075342178344727f, 0.34739482402801514f, 0.9379600882530212f, 0.8792927861213684f, 0.7734925746917725f, +0.41986143589019775f, 0.9000230431556702f, 0.575289785861969f, 0.7736859917640686f, 0.9333289861679077f, 0.8514533042907715f, 0.24166230857372284f, 0.03563036769628525f, +0.4479401707649231f, 0.08431943506002426f, 0.7574945688247681f, 0.6653275489807129f, 0.6349342465400696f, 0.12233353406190872f, 0.9642016291618347f, 0.7155507206916809f, +0.5548129081726074f, 0.6164847016334534f, 0.03224050626158714f, 0.49646496772766113f, 0.8768697381019592f, 0.1566014587879181f, 0.301678866147995f, 0.14048093557357788f, +0.27027130126953125f, 0.13366158306598663f, 0.16813115775585175f, 0.14926038682460785f, 0.13787870109081268f, 0.3831399381160736f, 0.4913150668144226f, 0.8881601691246033f, +0.32390740513801575f, 0.9595461487770081f, 0.20939557254314423f, 0.6431229114532471f, 0.6054539084434509f, 0.3611871302127838f, 0.7790926694869995f, 0.8200910687446594f, +0.24487540125846863f, 0.654064953327179f, 0.9088671207427979f, 0.41951680183410645f, 0.11971297115087509f, 0.028876272961497307f, 0.08551445603370667f, 0.5453680157661438f, +0.19011661410331726f, 0.04771013185381889f, 0.5023033022880554f, 0.8209497928619385f, 0.1646043360233307f, 0.6691616773605347f, 0.015089087188243866f, 0.8155934810638428f, +0.5394238233566284f, 0.34152472019195557f, 0.4974808692932129f, 0.46419376134872437f, 0.3711838722229004f, 0.11426911503076553f, 0.2847119867801666f, 0.45128434896469116f, +0.8542874455451965f, 0.8496076464653015f, 0.3044990599155426f, 0.5857883095741272f, 0.8646165728569031f, 0.7833556532859802f, 0.5081799030303955f, 0.8762178421020508f, +0.9543992877006531f, 0.5041333436965942f, 0.8373932838439941f, 0.26481330394744873f, 0.5549142360687256f, 0.5148109197616577f, 0.8503922820091248f, 0.5338233113288879f, +0.2924988865852356f, 0.6085301637649536f, 0.7904265522956848f, 0.2214818000793457f, 0.4818829596042633f, 0.47322937846183777f, 0.5468521118164062f, 0.5698341727256775f, +0.4639362394809723f, 0.82124263048172f, 0.8019956350326538f, 0.6445484757423401f, 0.5681195259094238f, 0.6131941676139832f, 0.9945957064628601f, 0.5926300883293152f, +0.19419588148593903f, 0.8320297002792358f, 0.4818383753299713f, 0.32714539766311646f, 0.26010915637016296f, 0.41338101029396057f, 0.6391153335571289f, 0.025629118084907532f, +0.5953728556632996f, 0.959469735622406f, 0.9658340215682983f, 0.5952717661857605f, 0.3944149911403656f, 0.6732067465782166f, 0.9883206486701965f, 0.38480833172798157f, +0.03523647412657738f, 0.5148118734359741f, 0.8186948299407959f, 0.4569062292575836f, 0.3039373755455017f, 0.8751054406166077f, 0.10899163037538528f, 0.39270827174186707f, +0.3528488874435425f, 0.11756469309329987f, 0.9889437556266785f, 0.7989634871482849f, 0.33824142813682556f, 0.9751781225204468f, 0.01594178006052971f, 0.8143644332885742f, +0.9214934706687927f, 0.33420267701148987f, 0.19079247117042542f, 0.2744453251361847f, 0.1785210520029068f, 0.48768359422683716f, 0.672185480594635f, 0.15070506930351257f, +0.706214427947998f, 0.7558348774909973f, 0.527289092540741f, 0.5358267426490784f, 0.7381532788276672f, 0.578363835811615f, 0.10489509254693985f, 0.6110727190971375f, +0.839688777923584f, 0.5024637579917908f, 0.7561997175216675f, 0.41341298818588257f, 0.5526441931724548f, 0.3586578369140625f, 0.39882394671440125f, 0.6611156463623047f, +0.8950952291488647f, 0.1677742898464203f, 0.7814263701438904f, 0.5433194041252136f, 0.3800484240055084f, 0.4631972312927246f, 0.04253604635596275f, 0.32391104102134705f, +0.18009336292743683f, 0.5946530103683472f, 0.9805663824081421f, 0.06611119210720062f, 0.88176029920578f, 0.6460591554641724f, 0.9170746207237244f, 0.4192136228084564f, +0.1203124150633812f, 0.9519872665405273f, 0.8645252585411072f, 0.5653997659683228f, 0.7812156677246094f, 0.07512792199850082f, 0.4027739465236664f, 0.5826901793479919f, +0.932325541973114f, 0.9429612755775452f, 0.37404733896255493f, 0.7523154020309448f, 0.9369997382164001f, 0.6246531009674072f, 0.2907901108264923f, 0.6285764575004578f, +0.8606933951377869f, 0.36545222997665405f, 0.04134626314043999f, 0.9560189843177795f, 0.6352322697639465f, 0.28407230973243713f, 0.704789400100708f, 0.8254528641700745f, +0.3555222749710083f, 0.19627444446086884f, 0.5296887159347534f, 0.6427385210990906f, 0.5754021406173706f, 0.4437430500984192f, 0.16583296656608582f, 0.11084830015897751f, +0.25153541564941406f, 0.18804742395877838f, 0.6537732481956482f, 0.6351886987686157f, 0.4644938111305237f, 0.49175459146499634f, 0.5005380511283875f, 0.7172085642814636f, +0.7427561283111572f, 0.4121660590171814f, 0.42341378331184387f, 0.6815829873085022f, 0.5559446811676025f, 0.7801082134246826f, 0.7170310020446777f, 0.8282152414321899f, +0.8012222051620483f, 0.5081880688667297f, 0.20906272530555725f, 0.23507976531982422f, 0.8555324077606201f, 0.262729674577713f, 0.20795655250549316f, 0.953989565372467f, +0.8356432318687439f, 0.21857765316963196f, 0.8445634841918945f, 0.3068687319755554f, 0.6826326847076416f, 0.6486747860908508f, 0.6300383806228638f, 0.15485970675945282f, +0.9324883222579956f, 0.6532115936279297f, 0.4606846868991852f, 0.26509976387023926f, 0.37666910886764526f, 0.9566888213157654f, 0.49910011887550354f, 0.6030312776565552f, +0.6685796976089478f, 0.21293966472148895f, 0.08257334679365158f, 0.8201034069061279f, 0.5659224390983582f, 0.7397338151931763f, 0.19276626408100128f, 0.5631613731384277f, +0.4366089403629303f, 0.04785851389169693f, 0.669846773147583f, 0.7544222474098206f, 0.6215550303459167f, 0.24418522417545319f, 0.8781964182853699f, 0.3230867087841034f, +0.0989537239074707f, 0.788969099521637f, 0.6317713260650635f, 0.5493330955505371f, 0.5517458319664001f, 0.3159341812133789f, 0.7731971144676208f, 0.06779047846794128f, +0.33060070872306824f, 0.9075924754142761f, 0.36218953132629395f, 0.217062309384346f, 0.31522059440612793f, 0.5386253595352173f, 0.8630767464637756f, 0.38557830452919006f, +0.13389898836612701f, 0.8357885479927063f, 0.020576493814587593f, 0.30093613266944885f, 0.663141667842865f, 0.6163278222084045f, 0.40271762013435364f, 0.8695200681686401f, +0.21001490950584412f, 0.7502163052558899f, 0.7492121458053589f, 0.8585382103919983f, 0.8426094055175781f, 0.17647525668144226f, 0.06029469519853592f, 0.006908086594194174f, +0.7265346050262451f, 0.4474167823791504f, 0.878913938999176f, 0.40752509236335754f, 0.48544371128082275f, 0.7543785572052002f, 0.8435586094856262f, 0.9000301957130432f, +0.7124914526939392f, 0.7225216627120972f, 0.41545742750167847f, 0.9484982490539551f, 0.058417562395334244f, 0.21329842507839203f, 0.7213636040687561f, 0.1427488774061203f, +0.4175091087818146f, 0.9545890688896179f, 0.6343070268630981f, 0.5026738047599792f, 0.2766598165035248f, 0.89500492811203f, 0.025314468890428543f, 0.41727808117866516f, +0.3354068100452423f, 0.4321885406970978f, 0.3306218087673187f, 0.6248205900192261f, 0.6491886973381042f, 0.4325404465198517f, 0.36194685101509094f, 0.5318222045898438f, +0.0783277228474617f, 0.32634231448173523f, 0.5571416020393372f, 0.8002071976661682f, 0.39089810848236084f, 0.4240254759788513f, 0.8474591374397278f, 0.6937807202339172f, +0.022068534046411514f, 0.8385031223297119f, 0.4738852083683014f, 0.607276439666748f, 0.6587486267089844f, 0.8698686957359314f, 0.9671000838279724f, 0.34620392322540283f, +0.7059159278869629f, 0.5338714718818665f, 0.692253828048706f, 0.7915824055671692f, 0.8556695580482483f, 0.08244775235652924f, 0.6058193445205688f, 0.840682864189148f, +0.05824786052107811f, 0.6335762143135071f, 0.10733524709939957f, 0.4531402885913849f, 0.7759823799133301f, 0.011076533235609531f, 0.3568643629550934f, 0.08111827075481415f, +0.34323278069496155f, 0.429426908493042f, 0.6495653390884399f, 0.7294284105300903f, 0.22314761579036713f, 0.05262443795800209f, 0.8211232423782349f, 0.13022814691066742f, +0.29404908418655396f, 0.6066248416900635f, 0.8953348398208618f, 0.1974886655807495f, 0.5534808039665222f, 0.19833756983280182f, 0.9435052871704102f, 0.9371183514595032f, +0.7443344593048096f, 0.06489409506320953f, 0.301994651556015f, 0.7772836685180664f, 0.9812718033790588f, 0.23296573758125305f, 0.44170495867729187f, 0.06989267468452454f, +0.9810081720352173f, 0.46009361743927f, 0.39358144998550415f, 0.7425920963287354f, 0.8261480927467346f, 0.3557555675506592f, 0.36742112040519714f, 0.7731348872184753f, +0.020627811551094055f, 0.49504026770591736f, 0.6812324523925781f, 0.008601825684309006f, 0.3583228290081024f, 0.5128819346427917f, 0.0839981660246849f, 0.41020041704177856f, +0.6787410974502563f, 0.32510173320770264f, 0.7882513403892517f, 0.6801074743270874f, 0.6949466466903687f, 0.8675017356872559f, 0.7906860709190369f, 0.8068878650665283f, +0.38261494040489197f, 0.8993313908576965f, 0.9632781744003296f, 0.9644467830657959f, 0.531512439250946f, 0.04265961796045303f, 0.7574250102043152f, 0.9606829285621643f, +0.8259238600730896f, 0.8688152432441711f, 0.3525133728981018f, 0.42541685700416565f, 0.5866315960884094f, 0.5574696660041809f, 0.15300136804580688f, 0.42430779337882996f, +0.11273158341646194f, 0.6003263592720032f, 0.9960207939147949f, 0.6282438039779663f, 0.9158509969711304f, 0.9999995827674866f, 0.5210548639297485f, 0.09219678491353989f, +0.7900345325469971f, 0.0751979649066925f, 0.6194165945053101f, 0.01490248367190361f, 0.702238142490387f, 0.9088271260261536f, 0.008490389212965965f, 0.8731591701507568f, +0.4973090887069702f, 0.8704148530960083f, 0.4468460977077484f, 0.1923879235982895f, 0.22253794968128204f, 0.29113373160362244f, 0.9081844687461853f, 0.2224767506122589f, +0.4353499412536621f, 0.5455520153045654f, 0.5955530405044556f, 0.7480762600898743f, 0.5258086323738098f, 0.5166946649551392f, 0.8484088182449341f, 0.439782053232193f, +0.9441090822219849f, 0.2624305486679077f, 0.870574951171875f, 0.1987667977809906f, 0.9370476603507996f, 0.1372140645980835f, 0.9956669211387634f, 0.6652153134346008f, +0.5631805658340454f, 0.775057315826416f, 0.8584571480751038f, 0.5993982553482056f, 0.6856229901313782f, 0.7876492738723755f, 0.18070748448371887f, 0.6948647499084473f, +0.269412636756897f, 0.1652282178401947f, 0.9613706469535828f, 0.3448968231678009f, 0.5868426561355591f, 0.8909010887145996f, 0.7117147445678711f, 0.9526493549346924f, +0.6316742300987244f, 0.757643461227417f, 0.4978841245174408f, 0.7819021344184875f, 0.947961688041687f, 0.20607027411460876f, 0.40012940764427185f, 0.31611961126327515f, +0.5202167630195618f, 0.6176827549934387f, 0.627357542514801f, 0.37962591648101807f, 0.9612859487533569f, 0.7369466423988342f, 0.40130168199539185f, 0.8771376609802246f, +0.0704299733042717f, 0.09555713087320328f, 0.0756063312292099f, 0.890472948551178f, 0.0044253310188651085f, 0.4277482330799103f, 0.5224087238311768f, 0.632057785987854f, +0.21825334429740906f, 0.4715113639831543f, 0.9680219888687134f, 0.8515114784240723f, 0.27095726132392883f, 0.2571865916252136f, 0.1500660479068756f, 0.6519718170166016f, +0.4485205411911011f, 0.34510669112205505f, 0.1910443902015686f, 0.09547426551580429f, 0.5959435105323792f, 0.7812671661376953f, 0.9889671802520752f, 0.11093269288539886f, +0.7983273863792419f, 0.46445533633232117f, 0.0009226800175383687f, 0.5316306948661804f, 0.36256352066993713f, 0.21792440116405487f, 0.3855572044849396f, 0.883346438407898f, +0.8637840747833252f, 0.31484195590019226f, 0.19248831272125244f, 0.6416841149330139f, 0.5335863828659058f, 0.5429270267486572f, 0.9306926727294922f, 0.023311922326683998f, +0.012156217359006405f, 0.649480938911438f, 0.06889281421899796f, 0.2548869848251343f, 0.3364255428314209f, 0.5971881151199341f, 0.5950292348861694f, 0.7570445537567139f, +0.4497750997543335f, 0.6685609817504883f, 0.6690855622291565f, 0.49668583273887634f, 0.7658900618553162f, 0.019164247438311577f, 0.5268640518188477f, 0.8652885556221008f, +0.8592517375946045f, 0.16555942595005035f, 0.7734037041664124f, 0.3797190189361572f, 0.5856907963752747f, 0.3832520842552185f, 0.8827168941497803f, 0.4374869465827942f, +0.6886065602302551f, 0.9113084673881531f, 0.8079761266708374f, 0.3197154700756073f, 0.26208406686782837f, 0.018900472670793533f, 0.19904807209968567f, 0.9427839517593384f, +0.18041430413722992f, 0.8034057021141052f, 0.133339524269104f, 0.8023066520690918f, 0.5334520936012268f, 0.5172219276428223f, 0.2713491916656494f, 0.7918562293052673f, +0.5120744705200195f, 0.5024634599685669f, 0.5937954187393188f, 0.31328463554382324f, 0.14701424539089203f, 0.9881421327590942f, 0.6626257300376892f, 0.17981703579425812f, +0.852037250995636f, 0.7268995642662048f, 0.9674025774002075f, 0.35078129172325134f, 0.029524222016334534f, 0.4765990078449249f, 0.11575094610452652f, 0.8106797933578491f, +0.10691814124584198f, 0.8326020240783691f, 0.5892381072044373f, 0.10300303250551224f, 0.3805795907974243f, 0.14300507307052612f, 0.7082318067550659f, 0.07486815005540848f, +0.016435539349913597f, 0.07297548651695251f, 0.8000211119651794f, 0.6467872858047485f, 0.004673698917031288f, 0.7721468210220337f, 0.2112165093421936f, 0.7773726582527161f, +0.32476121187210083f, 0.3947443664073944f, 0.5453697443008423f, 0.6925870180130005f, 0.6893799304962158f, 0.5198661684989929f, 0.566326379776001f, 0.3565301299095154f, +0.331309050321579f, 0.26582860946655273f, 0.14109468460083008f, 0.7187426090240479f, 0.2844092845916748f, 0.4898192882537842f, 0.21687673032283783f, 0.3660714626312256f, +0.7134491801261902f, 0.6528905034065247f, 0.33151426911354065f, 0.7505673170089722f, 0.4562789499759674f, 0.32350632548332214f, 0.4284874200820923f, 0.005367237608879805f, +0.2516211271286011f, 0.3434866964817047f, 0.24503327906131744f, 0.4892091155052185f, 0.5161845684051514f, 0.4304504096508026f, 0.6046362519264221f, 0.08875156193971634f, +0.4739346504211426f, 0.24764515459537506f, 0.24095022678375244f, 0.9737162590026855f, 0.2400193214416504f, 0.39356905221939087f, 0.6929008364677429f, 0.6591960191726685f, +0.39748743176460266f, 0.5949666500091553f, 0.6943937540054321f, 0.5257253646850586f, 0.8912562131881714f, 0.906907856464386f, 0.7302873730659485f, 0.9749301075935364f, +0.6186346411705017f, 0.6035533547401428f, 0.031757473945617676f, 0.4550754427909851f, 0.21696650981903076f, 0.690753698348999f, 0.21145106852054596f, 0.32063382863998413f, +0.5570397973060608f, 0.5899818539619446f, 0.24244999885559082f, 0.19826608896255493f, 0.006842211354523897f, 0.9063467383384705f, 0.13512906432151794f, 0.5539366602897644f, +0.6821413636207581f, 0.9021549820899963f, 0.0004639115068130195f, 0.2804035246372223f, 0.17434333264827728f, 0.9868206977844238f, 0.012877754867076874f, 0.9498142600059509f, +0.2109949141740799f, 0.9957405924797058f, 0.033614642918109894f, 0.05621282756328583f, 0.9676695466041565f, 0.8402448296546936f, 0.033368319272994995f, 0.049762435257434845f, +0.6997795104980469f, 0.05790417641401291f, 0.46467339992523193f, 0.5720816850662231f, 0.4398222267627716f, 0.28533682227134705f, 0.4517394006252289f, 0.5034474730491638f, +0.18217456340789795f, 0.4720931053161621f, 0.8540437817573547f, 0.9462619423866272f, 0.8646782636642456f, 0.9162802696228027f, 0.5632847547531128f, 0.2188168317079544f, +0.618502140045166f, 0.6066297888755798f, 0.6490415930747986f, 0.24861563742160797f, 0.545551061630249f, 0.2578328251838684f, 0.2847803235054016f, 0.6440727114677429f, +0.6847624778747559f, 0.9590231776237488f, 0.11423484981060028f, 0.07678865641355515f, 0.7607942223548889f, 0.18491075932979584f, 0.5738686919212341f, 0.1547468602657318f, +0.45251983404159546f, 0.6743136048316956f, 0.23439615964889526f, 0.097785584628582f, 0.37876665592193604f, 0.4165094494819641f, 0.4869270324707031f, 0.24306659400463104f, +0.36388689279556274f, 0.31004440784454346f, 0.044716816395521164f, 0.5888728499412537f, 0.2955337464809418f, 0.9925724267959595f, 0.42614537477493286f, 0.14088799059391022f, +0.1728695034980774f, 0.4864586889743805f, 0.47045204043388367f, 0.29681432247161865f, 0.4815525412559509f, 0.17081451416015625f, 0.4134413003921509f, 0.36664721369743347f, +0.8910846710205078f, 0.5268446207046509f, 0.9247599244117737f, 0.26017534732818604f, 0.3412822186946869f, 0.6246424913406372f, 0.1880471110343933f, 0.8998587727546692f, +0.21784734725952148f, 0.035079117864370346f, 0.3654824197292328f, 0.11514521390199661f, 0.5775947570800781f, 0.038280975073575974f, 0.17051325738430023f, 0.2656038999557495f, +0.8093340396881104f, 0.9792641401290894f, 0.6702958941459656f, 0.9819674491882324f, 0.42249736189842224f, 0.5649142265319824f, 0.8854942917823792f, 0.15134069323539734f, +0.2152681052684784f, 0.17170657217502594f, 0.10488195717334747f, 0.7321919202804565f, 0.34096768498420715f, 0.24568147957324982f, 0.40555334091186523f, 0.2803230583667755f, +0.5397576689720154f, 0.07474486529827118f, 0.16464541852474213f, 0.9494705200195312f, 0.44634154438972473f, 0.7268843054771423f, 0.10230591148138046f, 0.4949818551540375f, +0.10179132968187332f, 0.9270718693733215f, 0.2629360854625702f, 0.32815325260162354f, 0.8994763493537903f, 0.40217798948287964f, 0.10592988133430481f, 0.010881542228162289f, +0.09415663033723831f, 0.18203380703926086f, 0.4981597363948822f, 0.6474102735519409f, 0.9020639657974243f, 0.3172735273838043f, 0.4931943416595459f, 0.6754498481750488f, +0.3821221590042114f, 0.9304283857345581f, 0.03833660110831261f, 0.17349639534950256f, 0.46500757336616516f, 0.028365742415189743f, 0.5967007875442505f, 0.89198899269104f, +0.21896927058696747f, 0.15878918766975403f, 0.7663388848304749f, 0.0054788850247859955f, 0.6520549654960632f, 0.819892168045044f, 0.31559157371520996f, 0.21188373863697052f, +0.8105215430259705f, 0.13889531791210175f, 0.39265766739845276f, 0.14304539561271667f, 0.862684428691864f, 0.2840815484523773f, 0.4069441556930542f, 0.535599946975708f, +0.23846818506717682f, 0.06625060737133026f, 0.1713133454322815f, 0.6934599876403809f, 0.05045010522007942f, 0.9393295049667358f, 0.46614617109298706f, 0.7686586976051331f, +0.15932884812355042f, 0.1260678917169571f, 0.2446921020746231f, 0.35292431712150574f, 0.5732802748680115f, 0.05091950669884682f, 0.8297539353370667f, 0.5121617913246155f, +0.3921409845352173f, 0.5439451336860657f, 0.01665842905640602f, 0.5284290313720703f, 0.032217029482126236f, 0.4967179000377655f, 0.00984086375683546f, 0.03136410191655159f, +0.9074923992156982f, 0.613503098487854f, 0.9811693429946899f, 0.41152819991111755f, 0.2848868668079376f, 0.585657000541687f, 0.7311448454856873f, 0.1891975998878479f, +0.4760396480560303f, 0.1456403285264969f, 0.6433712244033813f, 0.26048746705055237f, 0.4169068932533264f, 0.6380230784416199f, 0.969073474407196f, 0.34679409861564636f, +0.3351154625415802f, 0.28518375754356384f, 0.8948298096656799f, 0.2841026782989502f, 0.625164270401001f, 0.4490307569503784f, 0.24365104734897614f, 0.17088904976844788f, +0.935252845287323f, 0.16043606400489807f, 0.5147174596786499f, 0.7125328779220581f, 0.23457829654216766f, 0.18035627901554108f, 0.024925988167524338f, 0.5677680373191833f, +0.6735149621963501f, 0.49275103211402893f, 0.13408933579921722f, 0.6258535385131836f, 0.7888192534446716f, 0.6412572264671326f, 0.6529911756515503f, 0.4759850800037384f, +0.6328000426292419f, 0.7213569283485413f, 0.01581476256251335f, 0.0020639379508793354f, 0.49224671721458435f, 0.6670241951942444f, 0.65067058801651f, 0.108655646443367f, +0.07827980071306229f, 0.9454650282859802f, 0.6343666315078735f, 0.8408446311950684f, 0.5967363119125366f, 0.034878119826316833f, 0.11019548028707504f, 0.4621303677558899f, +0.7456337213516235f, 0.09404461085796356f, 0.7328072786331177f, 0.014712191186845303f, 0.7017959356307983f, 0.5595592856407166f, 0.11107761412858963f, 0.8437672853469849f, +0.9183843731880188f, 0.5470305681228638f, 0.2842755615711212f, 0.667697012424469f, 0.08063576370477676f, 0.8503819108009338f, 0.6134195327758789f, 0.8112960457801819f, +0.5136600732803345f, 0.7880539298057556f, 0.3066578507423401f, 0.6087591648101807f, 0.09959091246128082f, 0.8377966284751892f, 0.08000252395868301f, 0.20143871009349823f, +0.6161847114562988f, 0.7632402777671814f, 0.9760121703147888f, 0.8827283978462219f, 0.8340935707092285f, 0.9205573201179504f, 0.317395955324173f, 0.6731090545654297f, +0.7198983430862427f, 0.9584868550300598f, 0.6013513207435608f, 0.0836818590760231f, 0.2297719568014145f, 0.024656014516949654f, 0.3803229033946991f, 0.8462591767311096f, +0.7928578853607178f, 0.8818442821502686f, 0.40419891476631165f, 0.12254712730646133f, 0.2391698956489563f, 0.8695746064186096f, 0.25634467601776123f, 0.9361945986747742f, +0.7827206254005432f, 0.7597795724868774f, 0.7472553253173828f, 0.9599264860153198f, 0.16205905377864838f, 0.8228172063827515f, 0.18871986865997314f, 0.300965279340744f, +0.3932720124721527f, 0.9362254738807678f, 0.12411072850227356f, 0.298675000667572f, 0.8344639539718628f, 0.19786489009857178f, 0.2897096872329712f, 0.21509990096092224f, +0.21882902085781097f, 0.769064724445343f, 0.5455405712127686f, 0.3628561198711395f, 0.19320380687713623f, 0.7566791772842407f, 0.18126747012138367f, 0.8481782674789429f, +0.632747232913971f, 0.16258887946605682f, 0.45011234283447266f, 0.833065390586853f, 0.8700846433639526f, 0.8169659972190857f, 0.8098655343055725f, 0.39938223361968994f, +0.4454561173915863f, 0.4295579195022583f, 0.7717559337615967f, 0.07662279903888702f, 0.9459494948387146f, 0.48446837067604065f, 0.9613399505615234f, 0.3516606092453003f, +0.21088355779647827f, 0.11228018254041672f, 0.8656455278396606f, 0.27236759662628174f, 0.18578532338142395f, 0.4629788398742676f, 0.9243083000183105f, 0.6568259596824646f, +0.11519217491149902f, 0.7326701879501343f, 0.34482303261756897f, 0.6491840481758118f, 0.5961363315582275f, 0.025887927040457726f, 0.54159015417099f, 0.8144723773002625f, +0.08489856868982315f, 0.2634275555610657f, 0.06896566599607468f, 0.11620379984378815f, 0.47897687554359436f, 0.728961706161499f, 0.4029559791088104f, 0.716450572013855f, +0.020359646528959274f, 0.9286381602287292f, 0.6328292489051819f, 0.4054769277572632f, 0.9265903830528259f, 0.58695387840271f, 0.22103890776634216f, 0.16898271441459656f, +0.35669848322868347f, 0.9691234230995178f, 0.48115500807762146f, 0.668554961681366f, 0.16587497293949127f, 0.6989029049873352f, 0.7804637551307678f, 0.21497569978237152f, +0.39804932475090027f, 0.36584657430648804f, 0.8506836891174316f, 0.79029780626297f, 0.3702521324157715f, 0.5850407481193542f, 0.9938464164733887f, 0.2575853765010834f, +0.3618197739124298f, 0.7965249419212341f, 0.3691486120223999f, 0.24796763062477112f, 0.24051813781261444f, 0.034123651683330536f, 0.9656895399093628f, 0.010329540818929672f, +0.7043086290359497f, 0.3101741373538971f, 0.6915522813796997f, 0.49473676085472107f, 0.09551488608121872f, 0.6588669419288635f, 0.5159049034118652f, 0.9020472168922424f, +0.28868865966796875f, 0.12737497687339783f, 0.365668386220932f, 0.768153727054596f, 0.46500834822654724f, 0.4486689269542694f, 0.4285493493080139f, 0.7986783981323242f, +0.722578227519989f, 0.5570022463798523f, 0.9107912182807922f, 0.2658027410507202f, 0.5207378268241882f, 0.28869420289993286f, 0.9849298596382141f, 0.7079266905784607f, +0.5969898700714111f, 0.5457621216773987f, 0.27520185708999634f, 0.2044338881969452f, 0.7416726350784302f, 0.3011470437049866f, 0.02093007229268551f, 0.16902557015419006f, +0.7134928703308105f, 0.5616956353187561f, 0.2241903841495514f, 0.9506548047065735f, 0.3260308802127838f, 0.2533942759037018f, 0.07489796727895737f, 0.845989465713501f, +0.06709250807762146f, 0.5185872912406921f, 0.10592292249202728f, 0.17854873836040497f, 0.768069326877594f, 0.36448782682418823f, 0.9084955453872681f, 0.29067686200141907f, +0.3803080916404724f, 0.5548429489135742f, 0.769641101360321f, 0.11953119188547134f, 0.7813851833343506f, 0.23010335862636566f, 0.457774817943573f, 0.046415142714977264f, +0.839573323726654f, 0.3191232681274414f, 0.8492969870567322f, 0.9069666862487793f, 0.9806301593780518f, 0.008125482127070427f, 0.7964816689491272f, 0.14507614076137543f, +0.3238358199596405f, 0.1973402053117752f, 0.6920222043991089f, 0.7794948220252991f, 0.9015448689460754f, 0.44927161931991577f, 0.7973402142524719f, 0.6497138142585754f, +0.36472025513648987f, 0.9194377064704895f, 0.233643040060997f, 0.31727656722068787f, 0.5820114016532898f, 0.35615861415863037f, 0.8403902053833008f, 0.2160719633102417f, +0.36512190103530884f, 0.6802118420600891f, 0.27713432908058167f, 0.2373269647359848f, 0.6077555418014526f, 0.32869547605514526f, 0.6264599561691284f, 0.8170322179794312f, +0.18019554018974304f, 0.7692321538925171f, 0.6890694499015808f, 0.5522161722183228f, 0.768290638923645f, 0.384884238243103f, 0.06143592670559883f, 0.44959941506385803f, +0.4137311577796936f, 0.5024427175521851f, 0.49768903851509094f, 0.08753690123558044f, 0.8152548670768738f, 0.8183655738830566f, 0.3779948651790619f, 0.7253682017326355f, +0.9944174885749817f, 0.4233684241771698f, 0.22756919264793396f, 0.0803501084446907f, 0.9859699010848999f, 0.27270910143852234f, 0.33302581310272217f, 0.7206165194511414f, +0.6530700922012329f, 0.7757905721664429f, 0.4237470328807831f, 0.30656787753105164f, 0.3548276424407959f, 0.03279231861233711f, 0.6275056004524231f, 0.7826792001724243f, +0.6683481931686401f, 0.8068348169326782f, 0.8720706701278687f, 0.6174620985984802f, 0.6009122133255005f, 0.25237733125686646f, 0.45281654596328735f, 0.523505449295044f, +0.8968448042869568f, 0.1506105214357376f, 0.4047999382019043f, 0.44759446382522583f, 0.5748518109321594f, 0.28915897011756897f, 0.8676045536994934f, 0.3693279027938843f, +0.474144846200943f, 0.4588528871536255f, 0.8078924417495728f, 0.7169371247291565f, 0.4409733712673187f, 0.3762623369693756f, 0.41929909586906433f, 0.6339395642280579f, +0.489970326423645f, 0.5415375232696533f, 0.29501840472221375f, 0.3447269797325134f, 0.6892313361167908f, 0.18452344834804535f, 0.33810099959373474f, 0.982621967792511f, +0.6404287815093994f, 0.6519356966018677f, 0.46634188294410706f, 0.18056179583072662f, 0.6730411052703857f, 0.06250088661909103f, 0.24695995450019836f, 0.38474106788635254f, +0.6449730396270752f, 0.42548486590385437f, 0.7295017838478088f, 0.9142715334892273f, 0.6304230690002441f, 0.8257361054420471f, 0.6665769815444946f, 0.7255026698112488f, +0.6885749697685242f, 0.7444212436676025f, 0.4521635174751282f, 0.07305145263671875f, 0.8755524754524231f, 0.22267870604991913f, 0.5249779224395752f, 0.8629011511802673f, +0.8511449694633484f, 0.7654288411140442f, 0.26796820759773254f, 0.4474528729915619f, 0.31718671321868896f, 0.47460687160491943f, 0.22520162165164948f, 0.43015921115875244f, +0.7436971068382263f, 0.17500519752502441f, 0.3044446110725403f, 0.9609566926956177f, 0.9148766994476318f, 0.2919759154319763f, 0.27793702483177185f, 0.07555877417325974f, +0.0411633737385273f, 0.468070387840271f, 0.5028437376022339f, 0.4342648983001709f, 0.10754243284463882f, 0.6695708632469177f, 0.25978657603263855f, 0.18577884137630463f, +0.11046736687421799f, 0.8635578751564026f, 0.6671925783157349f, 0.0805380716919899f, 0.1489657461643219f, 0.43869632482528687f, 0.4109417796134949f, 0.619905412197113f, +0.8314943909645081f, 0.1444564014673233f, 0.9208938479423523f, 0.3321130871772766f, 0.7116016149520874f, 0.058967433869838715f, 0.8132845759391785f, 0.11304949969053268f, +0.15158024430274963f, 0.8689829707145691f, 0.9024108052253723f, 0.7801779508590698f, 0.4762396812438965f, 0.6439815163612366f, 0.5240335464477539f, 0.6658006310462952f, +0.6762716770172119f, 0.4328400790691376f, 0.9358471632003784f, 0.33286818861961365f, 0.10881707817316055f, 0.654865562915802f, 0.24279172718524933f, 0.7885481715202332f, +0.5958308577537537f, 0.966174840927124f, 0.6321734189987183f, 0.9097291231155396f, 0.5676349997520447f, 0.3396586775779724f, 0.7042656540870667f, 0.5428643822669983f, +0.7702542543411255f, 0.7920713424682617f, 0.3374854624271393f, 0.8778969645500183f, 0.7712191343307495f, 0.5508826971054077f, 0.30947548151016235f, 0.9731083512306213f, +0.23330551385879517f, 0.21328105032444f, 0.7231725454330444f, 0.05882439762353897f, 0.8034452795982361f, 0.7430035471916199f, 0.12154997885227203f, 0.44050759077072144f, +0.9686374068260193f, 0.5575671195983887f, 0.8884938359260559f, 0.10229906439781189f, 0.27869632840156555f, 0.5259776711463928f, 0.5696955323219299f, 0.5958995819091797f, +0.8941903710365295f, 0.8397183418273926f, 0.7870414853096008f, 0.5664134621620178f, 0.31185081601142883f, 0.5333613157272339f, 0.24225756525993347f, 0.9127522110939026f, +0.09013980627059937f, 0.10029186308383942f, 0.44828057289123535f, 0.9354408979415894f, 0.21629302203655243f, 0.9680655002593994f, 0.9882928133010864f, 0.20094113051891327f, +0.8131553530693054f, 0.7170162796974182f, 0.9814850687980652f, 0.8151550889015198f, 0.3340410888195038f, 0.2377568632364273f, 0.9794661998748779f, 0.0993361622095108f, +0.4301910400390625f, 0.5643818378448486f, 0.2745996415615082f, 0.8065912127494812f, 0.797478973865509f, 0.7693564295768738f, 0.6331056356430054f, 0.5885671973228455f, +0.8890563249588013f, 0.09668616205453873f, 0.760499119758606f, 0.04775868356227875f, 0.5453307032585144f, 0.8690152168273926f, 0.46164995431900024f, 0.4316035211086273f, +0.01605721190571785f, 0.37518322467803955f, 0.9126317501068115f, 0.6925261616706848f, 0.9735733866691589f, 0.45734548568725586f, 0.7299558520317078f, 0.1698361188173294f, +0.4052150547504425f, 0.43755581974983215f, 0.2049030363559723f, 0.2944968044757843f, 0.195928156375885f, 0.031851306557655334f, 0.9818365573883057f, 0.8951334953308105f, +0.9007744789123535f, 0.380543977022171f, 0.6425513029098511f, 0.8801132440567017f, 0.05018624663352966f, 0.234900563955307f, 0.5996050834655762f, 0.8976916074752808f, +0.16668500006198883f, 0.39802226424217224f, 0.9054028391838074f, 0.35594817996025085f, 0.8421481251716614f, 0.2085137963294983f, 0.12647977471351624f, 0.27047932147979736f, +0.7919901013374329f, 0.20341500639915466f, 0.76832115650177f, 0.6817793250083923f, 0.2750360667705536f, 0.5881441235542297f, 0.7794610261917114f, 0.45326992869377136f, +0.8387887477874756f, 0.9613546133041382f, 0.09007905423641205f, 0.5449695587158203f, 0.05558318644762039f, 0.502077579498291f, 0.2155822068452835f, 0.7044483423233032f, +0.35898473858833313f, 0.12638038396835327f, 0.7138515114784241f, 0.7779897451400757f, 0.9715597629547119f, 0.7903083562850952f, 0.1275499314069748f, 0.6311168074607849f, +0.873206377029419f, 0.37075239419937134f, 0.6440925598144531f, 0.7375738024711609f, 0.5386644601821899f, 0.6038876175880432f, 0.1985950917005539f, 0.4992348551750183f, +0.9251441359519958f, 0.42425933480262756f, 0.6993886232376099f, 0.7118587493896484f, 0.05165091156959534f, 0.62614506483078f, 0.13911029696464539f, 0.2585947513580322f, +0.48077592253685f, 0.3004138469696045f, 0.1437838077545166f, 0.1767350286245346f, 0.4039812386035919f, 0.3243693709373474f, 0.4360383450984955f, 0.1297011524438858f, +0.4184298813343048f, 0.12977609038352966f, 0.7024354934692383f, 0.5832359194755554f, 0.13929973542690277f, 0.06816378980875015f, 0.463218092918396f, 0.7791445255279541f, +0.37677764892578125f, 0.24870499968528748f, 0.3811568021774292f, 0.4761793911457062f, 0.33194053173065186f, 0.5155930519104004f, 0.6449477672576904f, 0.940722644329071f, +0.7037180066108704f, 0.12850035727024078f, 0.44643908739089966f, 0.14562101662158966f, 0.3857780992984772f, 0.0516318753361702f, 0.26061010360717773f, 0.3995315730571747f, +0.20401768386363983f, 0.9852508902549744f, 0.26026326417922974f, 0.5464487075805664f, 0.6236940622329712f, 0.38094648718833923f, 0.8583185076713562f, 0.7655009031295776f, +0.34519872069358826f, 0.35275667905807495f, 0.24760368466377258f, 0.6476431488990784f, 0.7718538641929626f, 0.2927214801311493f, 0.49576932191848755f, 0.007578377611935139f, +0.16790397465229034f, 0.7409464716911316f, 0.02353145368397236f, 0.646636426448822f, 0.37412282824516296f, 0.12917524576187134f, 0.621111273765564f, 0.3817403316497803f, +0.7740989327430725f, 0.47836530208587646f, 0.6484864354133606f, 0.572395920753479f, 0.3578038811683655f, 0.5691309571266174f, 0.4652692377567291f, 0.24420665204524994f, +0.7200502157211304f, 0.21685032546520233f, 0.9809231758117676f, 0.5644835829734802f, 0.05652938783168793f, 0.520048201084137f, 0.2189079374074936f, 0.2791762351989746f, +0.4752516746520996f, 0.6990590691566467f, 0.19959397614002228f, 0.7768509984016418f, 0.8823392391204834f, 0.20568843185901642f, 0.43975764513015747f, 0.8903211355209351f, +0.9227629899978638f, 0.833564817905426f, 0.7625706791877747f, 0.27237987518310547f, 0.9125871062278748f, 0.8465613722801208f, 0.4892330765724182f, 0.6170153617858887f, +0.5935640335083008f, 0.18016520142555237f, 0.2705708146095276f, 0.6027311086654663f, 0.47301197052001953f, 0.9698240160942078f, 0.5722147822380066f, 0.9026473760604858f, +0.42375266551971436f, 0.1465693712234497f, 0.017826387658715248f, 0.2269732505083084f, 0.061783939599990845f, 0.7886557579040527f, 0.0857442244887352f, 0.3030097484588623f, +0.524372398853302f, 0.2900136411190033f, 0.8203864693641663f, 0.6234796047210693f, 0.7837367653846741f, 0.8825362920761108f, 0.8658465147018433f, 0.5487581491470337f, +0.9715086221694946f, 0.5801202654838562f, 0.6401927471160889f, 0.11692968010902405f, 0.882685124874115f, 0.34873777627944946f, 0.47532519698143005f, 0.475820392370224f, +0.651559591293335f, 0.22094066441059113f, 0.4339853525161743f, 0.7188149690628052f, 0.9023473262786865f, 0.6691390872001648f, 0.20803019404411316f, 0.6767955422401428f, +0.9755359888076782f, 0.07189752161502838f, 0.53739994764328f, 0.04697364568710327f, 0.018537156283855438f, 0.3458075225353241f, 0.5797749757766724f, 0.04053163155913353f, +0.12289463728666306f, 0.8435980081558228f, 0.501829206943512f, 0.7275902032852173f, 0.8993546962738037f, 0.6483800411224365f, 0.695604681968689f, 0.9215990900993347f, +0.2160620093345642f, 0.5393463373184204f, 0.031490929424762726f, 0.5288150310516357f, 0.05440438911318779f, 0.5690852999687195f, 0.6277978420257568f, 0.975605845451355f, +0.2589305639266968f, 0.29314398765563965f, 0.8324657082557678f, 0.4149470925331116f, 0.2296351045370102f, 0.30339887738227844f, 0.26923638582229614f, 0.7248966693878174f, +0.1604800969362259f, 0.32316648960113525f, 0.024837281554937363f, 0.9373462200164795f, 0.9836618304252625f, 0.35775160789489746f, 0.8316521048545837f, 0.2542143166065216f, +0.8237749338150024f, 0.6587185859680176f, 0.9077586531639099f, 0.666619062423706f, 0.699997067451477f, 0.6111745238304138f, 0.9259156584739685f, 0.2318519651889801f, +0.7143170833587646f, 0.7331566214561462f, 0.5100426077842712f, 0.9353430867195129f, 0.33197221159935f, 0.480425626039505f, 0.04417407885193825f, 0.16825109720230103f, +0.19289349019527435f, 0.015604166314005852f, 0.5777023434638977f, 0.1338588148355484f, 0.40912726521492004f, 0.3209958076477051f, 0.946765124797821f, 0.20302127301692963f, +0.5155153274536133f, 0.08853836357593536f, 0.9969274997711182f, 0.03340449556708336f, 0.023279771208763123f, 0.24485188722610474f, 0.09235721081495285f, 0.4382769465446472f, +0.6248921751976013f, 0.44272878766059875f, 0.29262781143188477f, 0.40634340047836304f, 0.992896556854248f, 0.015681162476539612f, 0.9375805854797363f, 0.9752385020256042f, +0.2951609194278717f, 0.9603526592254639f, 0.8578518033027649f, 0.05904097855091095f, 0.37050357460975647f, 0.9492390155792236f, 0.1896844506263733f, 0.7017371654510498f, +0.5820286273956299f, 0.18156804144382477f, 0.5311107635498047f, 0.768367350101471f, 0.05699538812041283f, 0.9431397318840027f, 0.44585564732551575f, 0.0930568277835846f, +0.39173147082328796f, 0.6009042859077454f, 0.3733382225036621f, 0.11554235219955444f, 0.3042975962162018f, 0.23355627059936523f, 0.21783746778964996f, 0.5458068251609802f, +0.6848887801170349f, 0.05987117439508438f, 0.07615875452756882f, 0.18157413601875305f, 0.7311235666275024f, 0.7151046991348267f, 0.21255147457122803f, 0.8008782863616943f, +0.3085658550262451f, 0.5119994878768921f, 0.6694273948669434f, 0.9189416170120239f, 0.4153320789337158f, 0.8532187342643738f, 0.018073851242661476f, 0.06737074255943298f, +0.5422680974006653f, 0.8460426330566406f, 0.35505592823028564f, 0.14907735586166382f, 0.5235685110092163f, 0.7057546377182007f, 0.4857725203037262f, 0.7529678344726562f, +0.9201968312263489f, 0.4954703748226166f, 0.42190149426460266f, 0.8737407326698303f, 0.23988457024097443f, 0.5450124144554138f, 0.09059648960828781f, 0.399003803730011f, +0.298259973526001f, 0.47653958201408386f, 0.8348923921585083f, 0.39316442608833313f, 0.07695629447698593f, 0.3085145354270935f, 0.11845269054174423f, 0.15542520582675934f, +0.8896017074584961f, 0.3313380479812622f, 0.1960618942975998f, 0.6334955096244812f, 0.7208755612373352f, 0.12762358784675598f, 0.8327174782752991f, 0.5468971133232117f, +0.0648946613073349f, 0.5305647850036621f, 0.21602515876293182f, 0.5521935820579529f, 0.09771774709224701f, 0.07658185064792633f, 0.02513956092298031f, 0.6060627698898315f, +0.4202997088432312f, 0.2826080620288849f, 0.364814817905426f, 0.28394442796707153f, 0.08171329647302628f, 0.24819053709506989f, 0.20454242825508118f, 0.9227218627929688f, +0.22432687878608704f, 0.0778932273387909f, 0.4421337842941284f, 0.7427088022232056f, 0.9766658544540405f, 0.23110540211200714f, 0.6598058938980103f, 0.8533505797386169f, +0.8964405655860901f, 0.6662988066673279f, 0.5650867223739624f, 0.8582037091255188f, 0.11465782672166824f, 0.42376708984375f, 0.25290796160697937f, 0.36439695954322815f, +0.5539544820785522f, 0.756178617477417f, 0.9377070665359497f, 0.1671285480260849f, 0.6252734065055847f, 0.12748558819293976f, 0.5211600661277771f, 0.7164546251296997f, +0.5598668456077576f, 0.36663931608200073f, 0.7414002418518066f, 0.9627320766448975f, 0.08894383162260056f, 0.4383687973022461f, 0.06118090823292732f, 0.0253712497651577f, +0.8703349828720093f, 0.7434394359588623f, 0.10693968832492828f, 0.9524338841438293f, 0.015380444005131721f, 0.2592204809188843f, 0.6441177725791931f, 0.09814902395009995f, +0.7900950908660889f, 0.9035889506340027f, 0.8906323909759521f, 0.5832040309906006f, 0.7443872094154358f, 0.5796338319778442f, 0.5848277807235718f, 0.03332807123661041f, +0.6737292408943176f, 0.4961836636066437f, 0.07937174290418625f, 0.5194979906082153f, 0.5661963820457458f, 0.9456261396408081f, 0.40298664569854736f, 0.06368542462587357f, +0.4190414249897003f, 0.10297795385122299f, 0.4515768885612488f, 0.280882328748703f, 0.5920803546905518f, 0.3249666094779968f, 0.5251192450523376f, 0.6399325132369995f, +0.09057238698005676f, 0.7380650639533997f, 0.4005962610244751f, 0.8284956216812134f, 0.6071075201034546f, 0.4030628502368927f, 0.6248244047164917f, 0.05289026349782944f, +0.6448023319244385f, 0.8500049114227295f, 0.34541797637939453f, 0.6214551329612732f, 0.450321763753891f, 0.15432286262512207f, 0.5371177196502686f, 0.9805941581726074f, +0.7697985768318176f, 0.7396242022514343f, 0.15015019476413727f, 0.8728706240653992f, 0.026268281042575836f, 0.753492534160614f, 0.8018702864646912f, 0.8287298679351807f, +0.050411809235811234f, 0.24458082020282745f, 0.4757521152496338f, 0.05783902853727341f, 0.2546771168708801f, 0.13587628304958344f, 0.24094179272651672f, 0.52687007188797f, +0.6759305596351624f, 0.07282081246376038f, 0.40914809703826904f, 0.5604459047317505f, 0.6414664387702942f, 0.2980596423149109f, 0.24181975424289703f, 0.7791805267333984f, +0.2113935798406601f, 0.34362462162971497f, 0.012252469547092915f, 0.3399299383163452f, 0.7704724669456482f, 0.5400708913803101f, 0.881158709526062f, 0.17066414654254913f, +0.392421156167984f, 0.36319512128829956f, 0.7414209842681885f, 0.793796718120575f, 0.8530361652374268f, 0.08805865049362183f, 0.5251430869102478f, 0.9980308413505554f, +0.3420942425727844f, 0.6846229434013367f, 0.012732384726405144f, 0.08513055741786957f, 0.9274165034294128f, 0.2972409725189209f, 0.19063612818717957f, 0.5478242635726929f, +0.7191104888916016f, 0.5990898609161377f, 0.5055907368659973f, 0.9817004799842834f, 0.3232725262641907f, 0.01677826978266239f, 0.16238433122634888f, 0.46220627427101135f, +0.5259698629379272f, 0.21523478627204895f, 0.8133013844490051f, 0.18591710925102234f, 0.5652654767036438f, 0.0041066003032028675f, 0.6219223141670227f, 0.561959445476532f, +0.647960364818573f, 0.8423689603805542f, 0.7214788198471069f, 0.8746069669723511f, 0.20953057706356049f, 0.1963188499212265f, 0.29030221700668335f, 0.29467031359672546f, +0.6161090135574341f, 0.8765718936920166f, 0.8195827603340149f, 0.7613756060600281f, 0.0664646327495575f, 0.6377745866775513f, 0.5667731165885925f, 0.7071390748023987f, +0.32804015278816223f, 0.3671989440917969f, 0.17571905255317688f, 0.9546250700950623f, 0.41946932673454285f, 0.14844964444637299f, 0.21383324265480042f, 0.21961495280265808f, +0.07627375423908234f, 0.26405227184295654f, 0.4583541452884674f, 0.9764470458030701f, 0.42818209528923035f, 0.3420397937297821f, 0.729606032371521f, 0.05508853867650032f, +0.9884949326515198f, 0.8653340935707092f, 0.8931441307067871f, 0.23472774028778076f, 0.24797423183918f, 0.15464983880519867f, 0.7339743971824646f, 0.1446106731891632f, +0.466209352016449f, 0.40189456939697266f, 0.1717805415391922f, 0.8223248720169067f, 0.5186774134635925f, 0.6997568607330322f, 0.1298588663339615f, 0.3988373279571533f, +0.39576613903045654f, 0.017724789679050446f, 0.3729308843612671f, 0.9682596325874329f, 0.6460968255996704f, 0.9021202921867371f, 0.6942688226699829f, 0.16936780512332916f, +0.13446572422981262f, 0.542041003704071f, 0.08238387107849121f, 0.04051773622632027f, 0.18301813304424286f, 0.754570484161377f, 0.9901618957519531f, 0.45681676268577576f, +0.05018091946840286f, 0.8719852566719055f, 0.19932213425636292f, 0.3807515501976013f, 0.3985646367073059f, 0.21002298593521118f, 0.6233668327331543f, 0.11232758313417435f, +0.11078976839780807f, 0.5710119605064392f, 0.7166930437088013f, 0.8143847584724426f, 0.9370527863502502f, 0.9717697501182556f, 0.4792243242263794f, 0.7749590277671814f, +0.18334583938121796f, 0.6026002764701843f, 0.9863400459289551f, 0.6529108881950378f, 0.5096645951271057f, 0.7281824350357056f, 0.5484619140625f, 0.6005834341049194f, +0.8293769359588623f, 0.4815351963043213f, 0.905572772026062f, 0.878887414932251f, 0.9024335741996765f, 0.14696218073368073f, 0.07057694345712662f, 0.3313710391521454f, +0.48807621002197266f, 0.42996275424957275f, 0.5708852410316467f, 0.9038164019584656f, 0.9809228777885437f, 0.9886960387229919f, 0.7712188959121704f, 0.8280402421951294f, +0.4788159728050232f, 0.5819692015647888f, 0.3893573582172394f, 0.7996431589126587f, 0.40470999479293823f, 0.11964810639619827f, 0.935915470123291f, 0.12705551087856293f, +0.6876958608627319f, 0.9326520562171936f, 0.43261370062828064f, 0.5359532237052917f, 0.09827646613121033f, 0.532647430896759f, 0.8824946284294128f, 0.7575718760490417f, +0.2654198110103607f, 0.9331481456756592f, 0.5375915765762329f, 0.3302265703678131f, 0.13030953705310822f, 0.4208560883998871f, 0.03937720134854317f, 0.5071874260902405f, +0.0076421587727963924f, 0.10962939262390137f, 0.1282034069299698f, 0.47776737809181213f, 0.5353039503097534f, 0.781931459903717f, 0.3592083156108856f, 0.28975585103034973f, +0.9775128364562988f, 0.05982791259884834f, 0.4503953754901886f, 0.09581902623176575f, 0.4169296622276306f, 0.14511220157146454f, 0.5446244478225708f, 0.5294812321662903f, +0.5327870845794678f, 0.9572910070419312f, 0.23666062951087952f, 0.841289758682251f, 0.48188120126724243f, 0.8051266074180603f, 0.7398433685302734f, 0.9495059251785278f, +0.9764514565467834f, 0.06939107179641724f, 0.5442582368850708f, 0.7668136954307556f, 0.6341524720191956f, 0.9617972373962402f, 0.4379780888557434f, 0.597213625907898f, +0.8143764734268188f, 0.7292799949645996f, 0.17292237281799316f, 0.017551202327013016f, 0.39436978101730347f, 0.948718786239624f, 0.7438516616821289f, 0.23938655853271484f, +0.3580012321472168f, 0.6762329936027527f, 0.34440118074417114f, 0.9392452836036682f, 0.21145108342170715f, 0.23642279207706451f, 0.22372399270534515f, 0.4606125056743622f, +0.9408085346221924f, 0.9423129558563232f, 0.6949818134307861f, 0.7776859402656555f, 0.9913526773452759f, 0.5095614790916443f, 0.6799577474594116f, 0.2598215341567993f, +0.3195866346359253f, 0.12467113137245178f, 0.2844441831111908f, 0.2545607089996338f, 0.512363851070404f, 0.029261957854032516f, 0.39963629841804504f, 0.48244422674179077f, +0.9893452525138855f, 0.036302350461483f, 0.9596548080444336f, 0.1535373479127884f, 0.8384538292884827f, 0.6843507885932922f, 0.5534106492996216f, 0.8891417980194092f, +0.6900064945220947f, 0.5294921398162842f, 0.7983659505844116f, 0.22235345840454102f, 0.9018808007240295f, 0.2907285690307617f, 0.08109933137893677f, 0.02731751836836338f, +0.6516051292419434f, 0.7332471013069153f, 0.9700567722320557f, 0.2380295991897583f, 0.38826102018356323f, 0.8219629526138306f, 0.46699219942092896f, 0.6754156947135925f, +0.6582767367362976f, 0.8231558203697205f, 0.6437590718269348f, 0.9752377867698669f, 0.07534314692020416f, 0.23961567878723145f, 0.5215247273445129f, 0.7723678350448608f, +0.7493119835853577f, 0.25491398572921753f, 0.06575949490070343f, 0.8767557740211487f, 0.005982902366667986f, 0.29787904024124146f, 0.6522375345230103f, 0.2247249037027359f, +0.39053258299827576f, 0.8935545086860657f, 0.6300236582756042f, 0.06085556373000145f, 0.37651073932647705f, 0.9697450399398804f, 0.90478515625f, 0.11750924587249756f, +0.78364098072052f, 0.27528703212738037f, 0.6917112469673157f, 0.38704025745391846f, 0.07115333527326584f, 0.49048134684562683f, 0.6320955753326416f, 0.4641872048377991f, +0.46626386046409607f, 0.7313578724861145f, 0.7562384605407715f, 0.8547454476356506f, 0.9718666076660156f, 0.28337278962135315f, 0.6770512461662292f, 0.8591740727424622f, +0.8376260995864868f, 0.36471301317214966f, 0.6614692807197571f, 0.1315762847661972f, 0.4221256673336029f, 0.8808842897415161f, 0.22248175740242004f, 0.6791949272155762f, +0.8138891458511353f, 0.13798832893371582f, 0.14267109334468842f, 0.768796980381012f, 0.38120439648628235f, 0.7448691129684448f, 0.34363457560539246f, 0.7956033945083618f, +0.2559936046600342f, 0.7924491167068481f, 0.9643315672874451f, 0.985781192779541f, 0.5628304481506348f, 0.7980625629425049f, 0.3482774794101715f, 0.02370946854352951f, +0.13631616532802582f, 0.8478081822395325f, 0.40516436100006104f, 0.5941365361213684f, 0.5830513834953308f, 0.8800041675567627f, 0.004404281731694937f, 0.41853415966033936f, +0.772289514541626f, 0.3340771794319153f, 0.44602978229522705f, 0.917977511882782f, 0.5320297479629517f, 0.4658898413181305f, 0.7595868706703186f, 0.7411482930183411f, +0.947602391242981f, 0.6744270920753479f, 0.39441388845443726f, 0.7998080849647522f, 0.8984761238098145f, 0.031066976487636566f, 0.37990424036979675f, 0.9593361616134644f, +0.26153019070625305f, 0.8330579996109009f, 0.9972578287124634f, 0.14244821667671204f, 0.04238319769501686f, 0.5823382139205933f, 0.7907544374465942f, 0.2554931640625f, +0.051184769719839096f, 0.616117537021637f, 0.12312210351228714f, 0.6957252621650696f, 0.6990768313407898f, 0.22979705035686493f, 0.8307909965515137f, 0.7138413786888123f, +0.20753051340579987f, 0.7406856417655945f, 0.11621985584497452f, 0.8197665810585022f, 0.5442694425582886f, 0.8985943794250488f, 0.8614349961280823f, 0.5975521206855774f, +0.7317834496498108f, 0.6289762258529663f, 0.050864849239587784f, 0.517719566822052f, 0.6982165575027466f, 0.792717456817627f, 0.6915873885154724f, 0.027052778750658035f, +0.44574832916259766f, 0.5311670899391174f, 0.2900637090206146f, 0.7158241868019104f, 0.6403201818466187f, 0.9177713990211487f, 0.1836969256401062f, 0.9619928002357483f, +0.677595853805542f, 0.08790378272533417f, 0.8232614994049072f, 0.1620819866657257f, 0.4524844288825989f, 0.37527403235435486f, 0.18180112540721893f, 0.716900110244751f, +0.9188135862350464f, 0.2565600574016571f, 0.017029035836458206f, 0.5731556415557861f, 0.9147714376449585f, 0.23646433651447296f, 0.009991487488150597f, 0.31011614203453064f, +0.5433748960494995f, 0.7347916960716248f, 0.5359813570976257f, 0.5676848888397217f, 0.005168534349650145f, 0.6399120688438416f, 0.600803792476654f, 0.5312530994415283f, +0.5072115659713745f, 0.2961713373661041f, 0.3745374083518982f, 0.8246535658836365f, 0.07630619406700134f, 0.667175829410553f, 0.6906141042709351f, 0.11031071841716766f, +0.4012756943702698f, 0.10487885028123856f, 0.07178407907485962f, 0.6737144589424133f, 0.37263160943984985f, 0.907791256904602f, 0.41214340925216675f, 0.9066957831382751f, +0.5041071772575378f, 0.11505350470542908f, 0.4956356883049011f, 0.5511969923973083f, 0.2954634130001068f, 0.6599929332733154f, 0.7117717862129211f, 0.3254775106906891f, +0.20747296512126923f, 0.2570396065711975f, 0.6963221430778503f, 0.6588484048843384f, 0.7091507315635681f, 0.789467990398407f, 0.715339720249176f, 0.5266334414482117f, +0.7629572153091431f, 0.32660502195358276f, 0.038516487926244736f, 0.2216878980398178f, 0.7833117842674255f, 0.20989741384983063f, 0.2620657980442047f, 0.7897934913635254f, +0.5482367277145386f, 0.6629089713096619f, 0.04797999933362007f, 0.6745023727416992f, 0.24208159744739532f, 0.8203657865524292f, 0.46605005860328674f, 0.5391342043876648f, +0.034219712018966675f, 0.07990221679210663f, 0.7713243365287781f, 0.8027374148368835f, 0.6192033290863037f, 0.8176872134208679f, 0.4698479175567627f, 0.5033197999000549f, +0.4948485791683197f, 0.6729456782341003f, 0.40006697177886963f, 0.6542238593101501f, 0.5309659838676453f, 0.1141095981001854f, 0.7628037333488464f, 0.26874086260795593f, +0.27836117148399353f, 0.7017362117767334f, 0.4510048031806946f, 0.16453838348388672f, 0.24258635938167572f, 0.06034072861075401f, 0.9704993963241577f, 0.888583779335022f, +0.022645050659775734f, 0.4251425862312317f, 0.7867478132247925f, 0.552402138710022f, 0.6575255393981934f, 0.8805707097053528f, 0.5358227491378784f, 0.52028888463974f, +0.9119669795036316f, 0.3398188054561615f, 0.40012869238853455f, 0.3082590699195862f, 0.7544519901275635f, 0.7942761182785034f, 0.870324969291687f, 0.3485989570617676f, +0.2809631824493408f, 0.523262619972229f, 0.14283110201358795f, 0.4497976005077362f, 0.015854204073548317f, 0.35874810814857483f, 0.4909206032752991f, 0.7331917881965637f, +0.5588675141334534f, 0.9457677006721497f, 0.31073465943336487f, 0.6378259658813477f, 0.8839350938796997f, 0.31594663858413696f, 0.03601828217506409f, 0.10196629166603088f, +0.5924462080001831f, 0.5397307872772217f, 0.6965233683586121f, 0.6840219497680664f, 0.3345322608947754f, 0.6065969467163086f, 0.2330477386713028f, 0.41822731494903564f, +0.5847901105880737f, 0.18230919539928436f, 0.11188769340515137f, 0.25010281801223755f, 0.2826535701751709f, 0.37780478596687317f, 0.7851635813713074f, 0.6490103006362915f, +0.8019334673881531f, 0.6048137545585632f, 0.30570438504219055f, 0.7740304470062256f, 0.7659318447113037f, 0.5117116570472717f, 0.3646126985549927f, 0.4041024446487427f, +0.34127938747406006f, 0.6229500770568848f, 0.4061002731323242f, 0.7927799224853516f, 0.5698621869087219f, 0.21838298439979553f, 0.21345773339271545f, 0.018244463950395584f, +0.24937385320663452f, 0.41040563583374023f, 0.3506212830543518f, 0.5420703887939453f, 0.1524893343448639f, 0.26094064116477966f, 0.4244249165058136f, 0.6134982109069824f, +0.15590865910053253f, 0.15642833709716797f, 0.7049757242202759f, 0.9453688263893127f, 0.939227819442749f, 0.575206458568573f, 0.3514586389064789f, 0.28522661328315735f, +0.23934735357761383f, 0.7532868385314941f, 0.2716018855571747f, 0.2526337206363678f, 0.2772010862827301f, 0.33364295959472656f, 0.884602963924408f, 0.7703647017478943f, +0.4052554965019226f, 0.1526150405406952f, 0.4798058569431305f, 0.3130347728729248f, 0.5701920986175537f, 0.10542488843202591f, 0.43768012523651123f, 0.7129590511322021f, +0.916871190071106f, 0.9145880341529846f, 0.0984496921300888f, 0.1614222377538681f, 0.2995913624763489f, 0.33532291650772095f, 0.06671570986509323f, 0.8916846513748169f, +0.7889299392700195f, 0.895544171333313f, 0.5636102557182312f, 0.785574197769165f, 0.985687792301178f, 0.4664655029773712f, 0.0237666517496109f, 0.2230013608932495f, +0.7046286463737488f, 0.30169549584388733f, 0.6886301636695862f, 0.2891302704811096f, 0.22145956754684448f, 0.03496035933494568f, 0.8134186863899231f, 0.20743486285209656f, +0.6427875757217407f, 0.7806717157363892f, 0.5912178754806519f, 0.6603990793228149f, 0.12230288982391357f, 0.5634171962738037f, 0.9945957660675049f, 0.7806464433670044f, +0.6108712553977966f, 0.9193326234817505f, 0.49410805106163025f, 0.9129492044448853f, 0.7712215185165405f, 0.42101603746414185f, 0.6140778660774231f, 0.5941694974899292f, +0.31899458169937134f, 0.9758026003837585f, 0.37993374466896057f, 0.6637130975723267f, 0.8372381925582886f, 0.8800548315048218f, 0.21328046917915344f, 0.7633598446846008f, +0.7762600183486938f, 0.16508841514587402f, 0.7507133483886719f, 0.3078191876411438f, 0.5199787616729736f, 0.3363800644874573f, 0.8176715970039368f, 0.11931336671113968f, +0.7870102524757385f, 0.03854765743017197f, 0.3393585681915283f, 0.010091983713209629f, 0.8461593389511108f, 0.2279762178659439f, 0.6807445883750916f, 0.8889646530151367f, +0.9370993971824646f, 0.18766064941883087f, 0.7921628952026367f, 0.21759730577468872f, 0.43642523884773254f, 0.4276871383190155f, 0.9890193343162537f, 0.6054940223693848f, +0.18724367022514343f, 0.40684565901756287f, 0.4596647620201111f, 0.4761226177215576f, 0.9713645577430725f, 0.7985358834266663f, 0.0847351998090744f, 0.14188174903392792f, +0.40653714537620544f, 0.9647101759910583f, 0.7102276682853699f, 0.6500880718231201f, 0.3015558123588562f, 0.05240750312805176f, 0.7236995697021484f, 0.6923487186431885f, +0.8121663928031921f, 0.6129750609397888f, 0.4771121144294739f, 0.840698778629303f, 0.6880500912666321f, 0.6067591309547424f, 0.9490622878074646f, 0.1351332813501358f, +0.3941422700881958f, 0.004169384017586708f, 0.26930779218673706f, 0.8109552264213562f, 0.15545742213726044f, 0.102641262114048f, 0.36635613441467285f, 0.7656313180923462f, +0.015638399869203568f, 0.5626364946365356f, 0.60660320520401f, 0.8759928345680237f, 0.4776349663734436f, 0.6707017421722412f, 0.06216634437441826f, 0.7944154739379883f, +0.8559041619300842f, 0.33509036898612976f, 0.7410001158714294f, 0.25082412362098694f, 0.37397319078445435f, 0.1760188490152359f, 0.44038867950439453f, 0.7205585241317749f, +0.05572398006916046f, 0.05685971677303314f, 0.8846626281738281f, 0.5168277621269226f, 0.8315814137458801f, 0.8729851841926575f, 0.9530291557312012f, 0.9023516178131104f, +0.5747236013412476f, 0.6941645741462708f, 0.7569423913955688f, 0.35734936594963074f, 0.7896062731742859f, 0.32909199595451355f, 0.7769509553909302f, 0.9107089042663574f, +0.8609774112701416f, 0.5406702756881714f, 0.8788456320762634f, 0.09407878667116165f, 0.5449047684669495f, 0.08004789799451828f, 0.41920626163482666f, 0.7434691190719604f, +0.9367178678512573f, 0.23661020398139954f, 0.664273738861084f, 0.5792757868766785f, 0.18142619729042053f, 0.9463620185852051f, 0.6059688925743103f, 0.8447571396827698f, +0.7109658122062683f, 0.7656036019325256f, 0.4111597239971161f, 0.08470601588487625f, 0.9481003880500793f, 0.19271914660930634f, 0.7592285871505737f, 0.9120123386383057f, +0.39590150117874146f, 0.20773708820343018f, 0.5898182392120361f, 0.7281332612037659f, 0.908596396446228f, 0.5439367294311523f, 0.27486297488212585f, 0.6029235124588013f, +0.472219318151474f, 0.7852831482887268f, 0.7093073129653931f, 0.7169013023376465f, 0.9975677728652954f, 0.4774650037288666f, 0.6811570525169373f, 0.6793038249015808f, +0.11447792500257492f, 0.03349784016609192f, 0.40111660957336426f, 0.055763036012649536f, 0.2982885241508484f, 0.031938906759023666f, 0.2920292615890503f, 0.12924519181251526f, +0.915117084980011f, 0.13509102165699005f, 0.033323682844638824f, 0.45092442631721497f, 0.24071034789085388f, 0.2895757257938385f, 0.9701871871948242f, 0.06338933855295181f, +0.6857168078422546f, 0.8493691682815552f, 0.4658844769001007f, 0.7817323803901672f, 0.24372510612010956f, 0.46814674139022827f, 0.5434326529502869f, 0.1870083510875702f, +0.7831511497497559f, 0.09297408908605576f, 0.15351761877536774f, 0.20036505162715912f, 0.17924544215202332f, 0.6105719208717346f, 0.3814656734466553f, 0.9182460308074951f, +0.12730588018894196f, 0.7391354441642761f, 0.7626371383666992f, 0.5899159908294678f, 0.15429066121578217f, 0.9838187098503113f, 0.8206751942634583f, 0.5557913184165955f, +0.8566687107086182f, 0.36743947863578796f, 0.197441965341568f, 0.34879451990127563f, 0.08952900022268295f, 0.8065697550773621f, 0.711189329624176f, 0.023168468847870827f, +0.4007379412651062f, 0.03539786487817764f, 0.38138699531555176f, 0.0005704914219677448f, 0.4647480249404907f, 0.7988265752792358f, 0.42005547881126404f, 0.12110809981822968f, +0.9250263571739197f, 0.9651793241500854f, 0.6374132037162781f, 0.9431817531585693f, 0.8913909792900085f, 0.9638698697090149f, 0.10536657273769379f, 0.9142216444015503f, +0.09247344732284546f, 0.5429978966712952f, 0.4198896586894989f, 0.9869391322135925f, 0.8470523953437805f, 0.4341953694820404f, 0.25264567136764526f, 0.619770348072052f, +0.33899176120758057f, 0.6008193492889404f, 0.6031297445297241f, 0.42927542328834534f, 0.14882875978946686f, 0.023977167904376984f, 0.7569643259048462f, 0.32179179787635803f, +0.5071777105331421f, 0.4718905985355377f, 0.7526112198829651f, 0.1390313357114792f, 0.8611719012260437f, 0.5013852119445801f, 0.2676656246185303f, 0.25660818815231323f, +0.183096244931221f, 0.13967891037464142f, 0.6203930377960205f, 0.45743662118911743f, 0.07643728703260422f, 0.8326098322868347f, 0.1551482230424881f, 0.0914476290345192f, +0.44416072964668274f, 0.7799756526947021f, 0.43501102924346924f, 0.6008460521697998f, 0.03355463221669197f, 0.7720829248428345f, 0.312173455953598f, 0.8634471893310547f, +0.5913782715797424f, 0.2321167290210724f, 0.412611186504364f, 0.257370263338089f, 0.9889753460884094f, 0.19729207456111908f, 0.20591570436954498f, 0.2948280870914459f, +0.2373211681842804f, 0.9719357490539551f, 0.5963024497032166f, 0.29174676537513733f, 0.9218248724937439f, 0.3328360617160797f, 0.8331387639045715f, 0.7868240475654602f, +0.6566796898841858f, 0.11188098043203354f, 0.9104672074317932f, 0.22038450837135315f, 0.9777699708938599f, 0.9459434747695923f, 0.05265610292553902f, 0.5764135122299194f, +0.02892560325562954f, 0.03500863537192345f, 0.06559604406356812f, 0.6320431232452393f, 0.9627847075462341f, 0.6113631129264832f, 0.146194189786911f, 0.38398635387420654f, +0.1516481339931488f, 0.8727790117263794f, 0.8583966493606567f, 0.9162805676460266f, 0.8081117868423462f, 0.8249426484107971f, 0.5676510334014893f, 0.6557797193527222f, +0.07115358114242554f, 0.8583621382713318f, 0.7087830305099487f, 0.6517683863639832f, 0.0372154675424099f, 0.8830097317695618f, 0.7660872340202332f, 0.10699757933616638f, +0.6778951287269592f, 0.4937162399291992f, 0.24496199190616608f, 0.06953255087137222f, 0.15216629207134247f, 0.3757782280445099f, 0.709985077381134f, 0.9404788017272949f, +0.24197834730148315f, 0.875282347202301f, 0.2350950539112091f, 0.8693494200706482f, 0.2234647572040558f, 0.1609480232000351f, 0.5309194922447205f, 0.4737657606601715f, +0.9976205825805664f, 0.3075754642486572f, 0.023811379447579384f, 0.8854823112487793f, 0.07640179246664047f, 0.025860635563731194f, 0.2955475151538849f, 0.2831481993198395f, +0.9716184139251709f, 0.8042572140693665f, 0.2920062839984894f, 0.6472099423408508f, 0.7530428171157837f, 0.5339102149009705f, 0.09312283247709274f, 0.8972517251968384f, +0.2302391529083252f, 0.9810234904289246f, 0.8544443845748901f, 0.9414316415786743f, 0.7889505624771118f, 0.7411698698997498f, 0.008757125586271286f, 0.2617546617984772f, +0.17004431784152985f, 0.5550775527954102f, 0.9644838571548462f, 0.761284351348877f, 0.7099866271018982f, 0.9461047649383545f, 0.5008956789970398f, 0.6151642799377441f, +0.6121829152107239f, 0.9996240139007568f, 0.2551173269748688f, 0.4050328731536865f, 0.5635873675346375f, 0.26787278056144714f, 0.8236581683158875f, 0.2232191562652588f, +0.04852156713604927f, 0.26440945267677307f, 0.921313464641571f, 0.9544477462768555f, 0.12876278162002563f, 0.6437650322914124f, 0.6569757461547852f, 0.3708394467830658f, +0.042461082339286804f, 0.7501153945922852f, 0.22921375930309296f, 0.5613901615142822f, 0.7496724724769592f, 0.9166321754455566f, 0.09409141540527344f, 0.9757943749427795f, +0.9046463966369629f, 0.17900368571281433f, 0.7609649896621704f, 0.2875477969646454f, 0.6955461502075195f, 0.21078598499298096f, 0.32954084873199463f, 0.9262716770172119f, +0.25247418880462646f, 0.02925734594464302f, 0.9502855539321899f, 0.14623941481113434f, 0.04673553258180618f, 0.608756959438324f, 0.45745256543159485f, 0.3939121961593628f, +0.2130630761384964f, 0.15560467541217804f, 0.03813568130135536f, 0.07859211415052414f, 0.4201876223087311f, 0.39100193977355957f, 0.8308178186416626f, 0.555492639541626f, +0.09015175700187683f, 0.5757625699043274f, 0.15937164425849915f, 0.30713969469070435f, 0.5869603753089905f, 0.7136351466178894f, 0.8513098359107971f, 0.8013846278190613f, +0.38542354106903076f, 0.2962934970855713f, 0.0648130252957344f, 0.8619766235351562f, 0.20867213606834412f, 0.2709263265132904f, 0.7931158542633057f, 0.23967473208904266f, +0.9768878817558289f, 0.43469545245170593f, 0.40451785922050476f, 0.5364834666252136f, 0.045514028519392014f, 0.783545196056366f, 0.045597366988658905f, 0.9130159616470337f, +0.8244937658309937f, 0.29604771733283997f, 0.9605045914649963f, 0.3517688512802124f, 0.7909899950027466f, 0.6267367601394653f, 0.324903666973114f, 0.8081892132759094f, +0.3353606164455414f, 0.5737735629081726f, 0.3173622786998749f, 0.6802349090576172f, 0.10157826542854309f, 0.6003993153572083f, 0.695041298866272f, 0.22733120620250702f, +0.6613648533821106f, 0.792127788066864f, 0.09171893447637558f, 0.9440019726753235f, 0.7217238545417786f, 0.45077183842658997f, 0.30391281843185425f, 0.4927472174167633f, +0.15367747843265533f, 0.5431295037269592f, 0.6741563081741333f, 0.7911004424095154f, 0.5339560508728027f, 0.19597101211547852f, 0.03825501725077629f, 0.6706081628799438f, +0.9904332756996155f, 0.44448137283325195f, 0.8553556203842163f, 0.9726470708847046f, 0.21354062855243683f, 0.6251053810119629f, 0.2827329635620117f, 0.41528835892677307f, +0.1487424373626709f, 0.5034641027450562f, 0.34436658024787903f, 0.6190438866615295f, 0.718425452709198f, 0.4933616816997528f, 0.15701033174991608f, 0.18083810806274414f, +0.04160480573773384f, 0.8362738490104675f, 0.752359926700592f, 0.6607713103294373f, 0.3411088287830353f, 0.5497353672981262f, 0.8664993643760681f, 0.8023867607116699f, +0.5418434143066406f, 0.7760578393936157f, 0.38510653376579285f, 0.8764508962631226f, 0.9953433275222778f, 0.5868661403656006f, 0.5472599267959595f, 0.3746141493320465f, +0.3941684663295746f, 0.6873875260353088f, 0.5180738568305969f, 0.2283748984336853f, 0.26341190934181213f, 0.24329493939876556f, 0.5651147961616516f, 0.09818897396326065f, +0.3813771903514862f, 0.08859949558973312f, 0.5011346936225891f, 0.9787418842315674f, 0.45863690972328186f, 0.19508075714111328f, 0.9464560151100159f, 0.18460413813591003f, +0.48285454511642456f, 0.6690672039985657f, 0.011327607557177544f, 0.886635959148407f, 0.12670831382274628f, 0.8344634175300598f, 0.21303576231002808f, 0.9903361201286316f, +0.9974676966667175f, 0.625837504863739f, 0.37034282088279724f, 0.7445782423019409f, 0.9640742540359497f, 0.641215980052948f, 0.30683013796806335f, 0.9631130695343018f, +0.5984596014022827f, 0.30426183342933655f, 0.3744676113128662f, 0.09202304482460022f, 0.1479109823703766f, 0.2685883641242981f, 0.005508306436240673f, 0.3834836781024933f, +0.5641466975212097f, 0.5460807681083679f, 0.2614704668521881f, 0.14758004248142242f, 0.405105859041214f, 0.40015020966529846f, 0.10715819895267487f, 0.6560660004615784f, +0.19786302745342255f, 0.5629675984382629f, 0.5711339712142944f, 0.915278971195221f, 0.9109115600585938f, 0.16133980453014374f, 0.984691321849823f, 0.4793170690536499f, +0.7870102524757385f, 0.2985795736312866f, 0.7949172258377075f, 0.921678900718689f, 0.8527989983558655f, 0.5795804858207703f, 0.8917873501777649f, 0.18391850590705872f, +0.049376264214515686f, 0.03496276214718819f, 0.8852554559707642f, 0.8295316100120544f, 0.6107553243637085f, 0.04398440197110176f, 0.5925895571708679f, 0.18128003180027008f, +0.16516292095184326f, 0.577867329120636f, 0.7012930512428284f, 0.527946949005127f, 0.38053154945373535f, 0.941746711730957f, 0.644178032875061f, 0.7286877036094666f, +0.48025527596473694f, 0.6938701272010803f, 0.263053297996521f, 0.5434345602989197f, 0.6900503039360046f, 0.8445508480072021f, 0.24816745519638062f, 0.4995254576206207f, +0.9251437187194824f, 0.4690643548965454f, 0.587532639503479f, 0.15356533229351044f, 0.518011748790741f, 0.708584189414978f, 0.665471613407135f, 0.4179159998893738f, +0.2619286775588989f, 0.7896315455436707f, 0.2593111991882324f, 0.21306335926055908f, 0.5561373233795166f, 0.18491853773593903f, 0.18914145231246948f, 0.4362950026988983f, +0.7668142318725586f, 0.15298378467559814f, 0.7582558393478394f, 0.553408682346344f, 0.006142911035567522f, 0.9517552852630615f, 0.834600031375885f, 0.8761930465698242f, +0.3730286657810211f, 0.47478967905044556f, 0.5116676092147827f, 0.6255168914794922f, 0.3668852746486664f, 0.6933405995368958f, 0.9142988920211792f, 0.8962354063987732f, +0.8363849520683289f, 0.9018120169639587f, 0.37367159128189087f, 0.11172707378864288f, 0.7432466745376587f, 0.42568039894104004f, 0.8440853357315063f, 0.6811791658401489f, +0.9739652872085571f, 0.7095328569412231f, 0.6258453726768494f, 0.9321867823600769f, 0.28567731380462646f, 0.16004031896591187f, 0.928221583366394f, 0.4682932198047638f, +0.6728033423423767f, 0.45422637462615967f, 0.9006820917129517f, 0.622493326663971f, 0.8174765706062317f, 0.7532594203948975f, 0.8702395558357239f, 0.614956796169281f, +0.6757739186286926f, 0.8277589082717896f, 0.25704920291900635f, 0.7581442594528198f, 0.04264257103204727f, 0.9076145887374878f, 0.7313598990440369f, 0.9602686166763306f, +0.18496793508529663f, 0.21354208886623383f, 0.9079195857048035f, 0.7029955983161926f, 0.3464880883693695f, 0.8162770867347717f, 0.7469685077667236f, 0.09611278772354126f, +0.9676019549369812f, 0.647880494594574f, 0.16003671288490295f, 0.9934067726135254f, 0.8754628896713257f, 0.9078615307807922f, 0.4913771450519562f, 0.07872465997934341f, +0.5204487442970276f, 0.33200985193252563f, 0.6073634028434753f, 0.04130310192704201f, 0.7810232639312744f, 0.8843774199485779f, 0.7086285948753357f, 0.9958426356315613f, +0.31790000200271606f, 0.09334303438663483f, 0.5095905065536499f, 0.20304809510707855f, 0.22425717115402222f, 0.5444309711456299f, 0.30982086062431335f, 0.18898019194602966f, +0.39499470591545105f, 0.7104973196983337f, 0.3023689389228821f, 0.14936983585357666f, 0.8951043486595154f, 0.5350731015205383f, 0.6362818479537964f, 0.14536884427070618f, +0.7159766554832458f, 0.8402668237686157f, 0.42277443408966064f, 0.9819446206092834f, 0.5815604329109192f, 0.8298920392990112f, 0.2456657588481903f, 0.5179193019866943f, +0.635002076625824f, 0.42253512144088745f, 0.7530344724655151f, 0.4051997661590576f, 0.8206124305725098f, 0.12707450985908508f, 0.43985500931739807f, 0.37509846687316895f, +0.35163572430610657f, 0.529150128364563f, 0.4840127229690552f, 0.9167166352272034f, 0.3366521894931793f, 0.7832621335983276f, 0.05623168125748634f, 0.3588826060295105f, +0.9776535630226135f, 0.4620829224586487f, 0.11245245486497879f, 0.08921575546264648f, 0.24584341049194336f, 0.026521028950810432f, 0.18080708384513855f, 0.27710598707199097f, +0.5376278162002563f, 0.41597166657447815f, 0.8289262652397156f, 0.15894795954227448f, 0.5498111248016357f, 0.20633113384246826f, 0.30309388041496277f, 0.12289053201675415f, +0.3362402319908142f, 0.3304944932460785f, 0.8787210583686829f, 0.07714958488941193f, 0.21767134964466095f, 0.7722057104110718f, 0.5068801045417786f, 0.07017076015472412f, +0.05446672812104225f, 0.8925707936286926f, 0.01840071752667427f, 0.1997142881155014f, 0.5496283173561096f, 0.42419177293777466f, 0.7829013466835022f, 0.9372300505638123f, +0.2263646423816681f, 0.910057544708252f, 0.46953946352005005f, 0.9727023243904114f, 0.7981176972389221f, 0.7522943019866943f, 0.5061867833137512f, 0.6222176551818848f, +0.8474730253219604f, 0.6590389609336853f, 0.11120055615901947f, 0.3644416630268097f, 0.13252083957195282f, 0.2045058310031891f, 0.4664309322834015f, 0.149965301156044f, +0.4245438575744629f, 0.12270602583885193f, 0.7622128129005432f, 0.09265734255313873f, 0.07727523148059845f, 0.07859931886196136f, 0.18893401324748993f, 0.8542779088020325f, +0.979069709777832f, 0.026001842692494392f, 0.9256742000579834f, 0.2954580783843994f, 0.4138757586479187f, 0.06663603335618973f, 0.07322806119918823f, 0.4853377640247345f, +0.8288593292236328f, 0.7975746989250183f, 0.4113594591617584f, 0.3914434015750885f, 0.0687233954668045f, 0.015930786728858948f, 0.309890478849411f, 0.17234152555465698f, +0.6733786463737488f, 0.6268067359924316f, 0.2114458531141281f, 0.7988678216934204f, 0.1916731894016266f, 0.7833173274993896f, 0.743143618106842f, 0.009693093597888947f, +0.01693768985569477f, 0.9257423877716064f, 0.4218791723251343f, 0.5585997700691223f, 0.6788370609283447f, 0.3533767759799957f, 0.8243109583854675f, 0.7715479135513306f, +0.2584224045276642f, 0.23257119953632355f, 0.8981675505638123f, 0.3659726679325104f, 0.7191193103790283f, 0.45129451155662537f, 0.1784813553094864f, 0.8132756948471069f, +0.5438653826713562f, 0.50180584192276f, 0.4223974645137787f, 0.5987582206726074f, 0.287420392036438f, 0.8272438049316406f, 0.599962055683136f, 0.8009018898010254f, +0.2055390626192093f, 0.5388213396072388f, 0.7953222990036011f, 0.976906418800354f, 0.11270494014024734f, 0.09987647086381912f, 0.785313069820404f, 0.1564103215932846f, +0.4527532458305359f, 0.6197271943092346f, 0.9088886380195618f, 0.32179558277130127f, 0.14342902600765228f, 0.5183727145195007f, 0.6001352667808533f, 0.493314266204834f, +0.24492958188056946f, 0.5689954161643982f, 0.437288373708725f, 0.1444416344165802f, 0.5546451210975647f, 0.26665231585502625f, 0.5688283443450928f, 0.2628230154514313f, +0.49820786714553833f, 0.9422752261161804f, 0.5491602420806885f, 0.8119193911552429f, 0.06854371726512909f, 0.49856385588645935f, 0.12758086621761322f, 0.6950381398200989f, +0.8973523378372192f, 0.7085297107696533f, 0.1033911481499672f, 0.7646450400352478f, 0.7173373699188232f, 0.09117016941308975f, 0.8784617781639099f, 0.6941430568695068f, +0.8871663212776184f, 0.9687736630439758f, 0.8527023196220398f, 0.23799659311771393f, 0.6000809073448181f, 0.2527574598789215f, 0.973836362361908f, 0.5001034736633301f, +0.37055718898773193f, 0.12052680552005768f, 0.47544461488723755f, 0.7480989694595337f, 0.8772831559181213f, 0.905596911907196f, 0.2724299132823944f, 0.7701270580291748f, +0.5545734167098999f, 0.36694979667663574f, 0.39126554131507874f, 0.2850789725780487f, 0.4338758885860443f, 0.061734963208436966f, 0.3793637156486511f, 0.2139706164598465f, +0.46599045395851135f, 0.43419647216796875f, 0.5332028269767761f, 0.5420579314231873f, 0.15402206778526306f, 0.34486815333366394f, 0.4944159686565399f, 0.38261741399765015f, +0.19280138611793518f, 0.0003538454184308648f, 0.3351622521877289f, 0.9439855813980103f, 0.630816638469696f, 0.22763028740882874f, 0.7197988629341125f, 0.8943166136741638f, +0.5434901118278503f, 0.23423071205615997f, 0.6908575296401978f, 0.92759770154953f, 0.4089511036872864f, 0.7353579998016357f, 0.22353363037109375f, 0.029106754809617996f, +0.19523495435714722f, 0.42592915892601013f, 0.7836815714836121f, 0.9726085066795349f, 0.07479426264762878f, 0.7009762525558472f, 0.5159069299697876f, 0.9571923017501831f, +0.8186147809028625f, 0.7459398508071899f, 0.25956133008003235f, 0.5177430510520935f, 0.9184516668319702f, 0.17929407954216003f, 0.893834114074707f, 0.6845125555992126f, +0.9364341497421265f, 0.035671666264534f, 0.9457685351371765f, 0.8727490901947021f, 0.44649872183799744f, 0.012485940009355545f, 0.9648953676223755f, 0.1282549947500229f, +0.6493239402770996f, 0.904880166053772f, 0.4976355731487274f, 0.30153074860572815f, 0.29110345244407654f, 0.4159877896308899f, 0.07884231954813004f, 0.3671603202819824f, +0.46719542145729065f, 0.26061326265335083f, 0.5842028260231018f, 0.9811488389968872f, 0.6800618171691895f, 0.9540634751319885f, 0.8888733386993408f, 0.6433219313621521f, +0.305309921503067f, 0.5807873010635376f, 0.7359471917152405f, 0.4457184076309204f, 0.7565143704414368f, 0.602370023727417f, 0.6142897605895996f, 0.9126349091529846f, +0.6735506057739258f, 0.9326567053794861f, 0.3332321345806122f, 0.9171470403671265f, 0.6498653888702393f, 0.6540703773498535f, 0.6908790469169617f, 0.6596338748931885f, +0.023348789662122726f, 0.1348007768392563f, 0.12044446915388107f, 0.021669557318091393f, 0.07400776445865631f, 0.35260769724845886f, 0.549329936504364f, 0.885087788105011f, +0.9381237030029297f, 0.4213968515396118f, 0.16182151436805725f, 0.9920276403427124f, 0.7689074277877808f, 0.6683995127677917f, 0.37397506833076477f, 0.9268506169319153f, +0.5371973514556885f, 0.8646385073661804f, 0.5448400378227234f, 0.6458491086959839f, 0.7562175393104553f, 0.03895300626754761f, 0.4845561385154724f, 0.11745757609605789f, +0.30459704995155334f, 0.8569848537445068f, 0.8517690300941467f, 0.4862665832042694f, 0.5720590353012085f, 0.7044697403907776f, 0.06913871318101883f, 0.8574113845825195f, +0.8710699081420898f, 0.08949190378189087f, 0.4312085211277008f, 0.23644396662712097f, 0.771388590335846f, 0.01973298192024231f, 0.6777477860450745f, 0.45660892128944397f, +0.24248111248016357f, 0.6980994343757629f, 0.7271937131881714f, 0.959662675857544f, 0.863506555557251f, 0.9754139184951782f, 0.8917611241340637f, 0.41385048627853394f, +0.08356010913848877f, 0.49382925033569336f, 0.2967846989631653f, 0.08271723985671997f, 0.3740461468696594f, 0.5245623588562012f, 0.18644213676452637f, 0.43321505188941956f, +0.8549153208732605f, 0.6816741824150085f, 0.3565124571323395f, 0.6510010361671448f, 0.09000895172357559f, 0.5808913707733154f, 0.9535579085350037f, 0.4997142255306244f, +0.4031287729740143f, 0.2915794849395752f, 0.8227657079696655f, 0.4218776822090149f, 0.8824841380119324f, 0.0346791036427021f, 0.5807449817657471f, 0.16925427317619324f, +0.8909933567047119f, 0.32174140214920044f, 0.8889937996864319f, 0.7122257947921753f, 0.4103727638721466f, 0.06890803575515747f, 0.5612239837646484f, 0.3363686800003052f, +0.68138587474823f, 0.8280645608901978f, 0.405568391084671f, 0.27289852499961853f, 0.11754167079925537f, 0.865017294883728f, 0.07390695065259933f, 0.22605720162391663f, +0.5991504192352295f, 0.5655038356781006f, 0.013448243029415607f, 0.3817788362503052f, 0.00023192174558062106f, 0.02981586381793022f, 0.9604929089546204f, 0.34057146310806274f, +0.39741450548171997f, 0.5897600054740906f, 0.8589064478874207f, 0.38361242413520813f, 0.6253991723060608f, 0.9960540533065796f, 0.655950665473938f, 0.3976384401321411f, +0.7810977697372437f, 0.09762301295995712f, 0.05772167071700096f, 0.46686726808547974f, 0.446812242269516f, 0.3795679211616516f, 0.5696738362312317f, 0.7410966157913208f, +0.7030643224716187f, 0.2710874378681183f, 0.06464404612779617f, 0.14424830675125122f, 0.1588638871908188f, 0.8390160799026489f, 0.019878700375556946f, 0.693142831325531f, +0.635662853717804f, 0.9930764436721802f, 0.5520342588424683f, 0.4958533048629761f, 0.7811242341995239f, 0.9074932932853699f, 0.708960235118866f, 0.045562464743852615f, +0.861546516418457f, 0.10474575310945511f, 0.9709967374801636f, 0.9348973631858826f, 0.32227712869644165f, 0.3651536703109741f, 0.46552789211273193f, 0.5922256708145142f, +0.7874557971954346f, 0.27054712176322937f, 0.7970820069313049f, 0.8687840104103088f, 0.12331545352935791f, 0.14919450879096985f, 0.4970439374446869f, 0.4232209324836731f, +0.9171646237373352f, 0.1900974065065384f, 0.3302340805530548f, 0.5532695651054382f, 0.14754028618335724f, 0.9947621822357178f, 0.3316832482814789f, 0.4047224521636963f, +0.5547870397567749f, 0.18159089982509613f, 0.7029035687446594f, 0.6662366390228271f, 0.4597175419330597f, 0.9938449263572693f, 0.6508486270904541f, 0.49457067251205444f, +0.6391886472702026f, 0.809927761554718f, 0.8295187950134277f, 0.8169699907302856f, 0.6985824108123779f, 0.721274733543396f, 0.41451868414878845f, 0.8836455941200256f, +0.15301035344600677f, 0.5215360522270203f, 0.6924465894699097f, 0.1266784816980362f, 0.6497663259506226f, 0.7236793637275696f, 0.6079990863800049f, 0.754190981388092f, +0.49958404898643494f, 0.7361701130867004f, 0.7745954394340515f, 0.32973334193229675f, 0.6011705994606018f, 0.44976213574409485f, 0.655564546585083f, 0.6525197625160217f, +0.7407925128936768f, 0.9921797513961792f, 0.1653125286102295f, 0.5307232141494751f, 0.3875713348388672f, 0.3718232810497284f, 0.2730114459991455f, 0.6542331576347351f, +0.9155259132385254f, 0.3981936573982239f, 0.8877066373825073f, 0.12585723400115967f, 0.5931613445281982f, 0.7007946968078613f, 0.8313655257225037f, 0.19041229784488678f, +0.056071992963552475f, 0.8775520324707031f, 0.5931506156921387f, 0.5295554399490356f, 0.020199930295348167f, 0.007187750656157732f, 0.49890705943107605f, 0.44307395815849304f, +0.0415969118475914f, 0.43825772404670715f, 0.23140856623649597f, 0.2623525857925415f, 0.5201368927955627f, 0.11842340975999832f, 0.5194467306137085f, 0.5449662804603577f, +0.8419175148010254f, 0.862845778465271f, 0.7369545102119446f, 0.8997739553451538f, 0.9506902694702148f, 0.7792516350746155f, 0.16908645629882812f, 0.5173951387405396f, +0.05093083158135414f, 0.0428900308907032f, 0.9716450572013855f, 0.571135401725769f, 0.5772769451141357f, 0.2550080120563507f, 0.7046663761138916f, 0.6010730266571045f, +0.6691240072250366f, 0.960567831993103f, 0.06353066116571426f, 0.33165574073791504f, 0.4638969600200653f, 0.6256901621818542f, 0.12602242827415466f, 0.11600972712039948f, +0.026360927149653435f, 0.26844295859336853f, 0.9199736714363098f, 0.15323735773563385f, 0.7773971557617188f, 0.9516456723213196f, 0.6914907097816467f, 0.7663447260856628f, +0.36724892258644104f, 0.5275505781173706f, 0.8728785514831543f, 0.20082929730415344f, 0.9445106387138367f, 0.8221352100372314f, 0.7205827236175537f, 0.5618849992752075f, +0.4530561566352844f, 0.7017512321472168f, 0.7795771956443787f, 0.13423854112625122f, 0.45261359214782715f, 0.580708920955658f, 0.6260254383087158f, 0.7518892884254456f, +0.7356866598129272f, 0.8336764574050903f, 0.1462617963552475f, 0.5974317789077759f, 0.863042950630188f, 0.7464902997016907f, 0.32912272214889526f, 0.855350136756897f, +0.42343688011169434f, 0.6168324947357178f, 0.9076586365699768f, 0.6638460159301758f, 0.8653425574302673f, 0.8151981234550476f, 0.04738243296742439f, 0.6852961778640747f, +0.29604896903038025f, 0.39004039764404297f, 0.5025851726531982f, 0.9557483792304993f, 0.24940122663974762f, 0.9485042095184326f, 0.538872480392456f, 0.7386822700500488f, +0.39646321535110474f, 0.9182835221290588f, 0.06617972254753113f, 0.23697447776794434f, 0.839539110660553f, 0.3716156780719757f, 0.31690046191215515f, 0.17037327587604523f, +0.2258276492357254f, 0.5810221433639526f, 0.523222804069519f, 0.5268309116363525f, 0.5566002130508423f, 0.019091205671429634f, 0.7231402397155762f, 0.9050281047821045f, +0.7776114344596863f, 0.04163634032011032f, 0.26088500022888184f, 0.8523324728012085f, 0.25768357515335083f, 0.42248573899269104f, 0.4899829030036926f, 0.5633457899093628f, +0.008641025982797146f, 0.32419389486312866f, 0.5762122273445129f, 0.8301464319229126f, 0.9375166893005371f, 0.15871529281139374f, 0.8907132148742676f, 0.867268979549408f, +0.8756611943244934f, 0.4533987045288086f, 0.08414452522993088f, 0.7092678546905518f, 0.4438495635986328f, 0.7219445109367371f, 0.6325488090515137f, 0.11486592888832092f, +0.057047050446271896f, 0.13107557594776154f, 0.10278073698282242f, 0.749092698097229f, 0.34488990902900696f, 0.4659130573272705f, 0.371565580368042f, 0.45258310437202454f, +0.7372241616249084f, 0.22317619621753693f, 0.808767557144165f, 0.6227247714996338f, 0.8903504014015198f, 0.9880383014678955f, 0.7456765174865723f, 0.056749142706394196f, +0.17909710109233856f, 0.4146718382835388f, 0.6397875547409058f, 0.19346681237220764f, 0.30033719539642334f, 0.43796515464782715f, 0.036521442234516144f, 0.7855824828147888f, +0.40126919746398926f, 0.36245816946029663f, 0.7154756188392639f, 0.8445553779602051f, 0.12230328470468521f, 0.4798928201198578f, 0.11951331049203873f, 0.9861404299736023f, +0.9468544125556946f, 0.5366407632827759f, 0.4433859586715698f, 0.7791962027549744f, 0.6846584677696228f, 0.8579397201538086f, 0.6733234524726868f, 0.9649763107299805f, +0.6384397745132446f, 0.27478358149528503f, 0.9696103930473328f, 0.7488610744476318f, 0.6179885864257812f, 0.23175852000713348f, 0.3777003586292267f, 0.32165828347206116f, +0.3466435968875885f, 0.9016608595848083f, 0.6992602348327637f, 0.15761525928974152f, 0.12843330204486847f, 0.17118199169635773f, 0.7484408020973206f, 0.10593696683645248f, +0.8938823938369751f, 0.10412676632404327f, 0.45759421586990356f, 0.27397671341896057f, 0.47883227467536926f, 0.03194144368171692f, 0.8030307292938232f, 0.38974353671073914f, +0.900877833366394f, 0.9919346570968628f, 0.8359882831573486f, 0.280291348695755f, 0.7962880730628967f, 0.050277262926101685f, 0.916737973690033f, 0.7674774527549744f, +0.49175846576690674f, 0.709013044834137f, 0.0547620989382267f, 0.027507234364748f, 0.11173591762781143f, 0.6771813035011292f, 0.7906509041786194f, 0.863330066204071f, +0.8993011116981506f, 0.6239309906959534f, 0.6906144022941589f, 0.1896914839744568f, 0.9171526432037354f, 0.9716116189956665f, 0.02617592364549637f, 0.9398753643035889f, +0.8727362751960754f, 0.885647177696228f, 0.19801874458789825f, 0.7734910845756531f, 0.054464563727378845f, 0.9375045895576477f, 0.2993529438972473f, 0.3161943554878235f, +0.5872412919998169f, 0.3487091064453125f, 0.24572345614433289f, 0.057702839374542236f, 0.9341103434562683f, 0.8465935587882996f, 0.6698520183563232f, 0.5858961343765259f, +0.9297887086868286f, 0.4039348363876343f, 0.741193950176239f, 0.6769829392433167f, 0.5916759967803955f, 0.19331641495227814f, 0.5289457440376282f, 0.35296517610549927f, +0.09073622524738312f, 0.710758626461029f, 0.06811884045600891f, 0.15691211819648743f, 0.15554110705852509f, 0.537395715713501f, 0.6399893164634705f, 0.3102248013019562f, +0.2227439284324646f, 0.7684405446052551f, 0.6495866179466248f, 0.16744081676006317f, 0.34274742007255554f, 0.6874616146087646f, 0.020267698913812637f, 0.4673866927623749f, +0.06166979297995567f, 0.7075294256210327f, 0.47834131121635437f, 0.37381792068481445f, 0.1569325029850006f, 0.6852728128433228f, 0.10994311422109604f, 0.705962061882019f, +0.003283668076619506f, 0.5443676114082336f, 0.781616747379303f, 0.7097291946411133f, 0.2545146346092224f, 0.8604431748390198f, 0.35907459259033203f, 0.4557513892650604f, +0.55193692445755f, 0.707905650138855f, 0.08072388172149658f, 0.7789795994758606f, 0.5086484551429749f, 0.7941063642501831f, 0.5381912589073181f, 0.45145243406295776f, +0.7025485038757324f, 0.14898627996444702f, 0.11186519265174866f, 0.36333850026130676f, 0.16336092352867126f, 0.06988176703453064f, 0.3866298496723175f, 0.28773537278175354f, +0.1363101601600647f, 0.6254558563232422f, 0.6355689764022827f, 0.5528642535209656f, 0.10381551831960678f, 0.824125349521637f, 0.42930084466934204f, 0.22371657192707062f, +0.9913948774337769f, 0.5625874996185303f, 0.13244906067848206f, 0.9856342673301697f, 0.40906819701194763f, 0.45350512862205505f, 0.8765644431114197f, 0.9452416896820068f, +0.6067332625389099f, 0.04371792450547218f, 0.6214206218719482f, 0.4148333668708801f, 0.05961346998810768f, 0.12632925808429718f, 0.2596105635166168f, 0.812911331653595f, +0.22277219593524933f, 0.39612749218940735f, 0.3892271816730499f, 0.1778634786605835f, 0.5763795971870422f, 0.4313110113143921f, 0.8921431303024292f, 0.620438277721405f, +0.8468148112297058f, 0.7662768363952637f, 0.369465708732605f, 0.877784013748169f, 0.5565646886825562f, 0.29648250341415405f, 0.6441013813018799f, 0.5970914363861084f, +0.5135436654090881f, 0.30243009328842163f, 0.5045496225357056f, 0.5892494916915894f, 0.010309712029993534f, 0.5110365748405457f, 0.3322920501232147f, 0.10046109557151794f, +0.3182286322116852f, 0.583412230014801f, 0.6269221305847168f, 0.8717913627624512f, 0.4166729748249054f, 0.18441930413246155f, 0.9433026909828186f, 0.3042832911014557f, +0.2670038938522339f, 0.21939261257648468f, 0.8417245745658875f, 0.371280699968338f, 0.5934112668037415f, 0.03351539373397827f, 0.6138454675674438f, 0.178282231092453f, +0.3983653485774994f, 0.011935972608625889f, 0.1542968600988388f, 0.6241846084594727f, 0.7092992663383484f, 0.5385780334472656f, 0.8040559887886047f, 0.5591136813163757f, +0.6869184970855713f, 0.21789978444576263f, 0.09548773616552353f, 0.2459525167942047f, 0.0972665324807167f, 0.6686098575592041f, 0.9178776144981384f, 0.6484200358390808f, +0.7282395362854004f, 0.10591381043195724f, 0.701198160648346f, 0.8738538026809692f, 0.0016683753347024322f, 0.3142552077770233f, 0.5560232996940613f, 0.6096855401992798f, +0.38167378306388855f, 0.39091646671295166f, 0.027226850390434265f, 0.14400340616703033f, 0.13757413625717163f, 0.8500956296920776f, 0.030576195567846298f, 0.8173727989196777f, +0.6621379852294922f, 0.5097590088844299f, 0.45946839451789856f, 0.08455345779657364f, 0.9800602793693542f, 0.44724148511886597f, 0.5255745649337769f, 0.34071066975593567f, +0.41940778493881226f, 0.524110734462738f, 0.42715927958488464f, 0.06887450069189072f, 0.6639610528945923f, 0.0436672605574131f, 0.08222535252571106f, 0.3115115463733673f, +0.38886335492134094f, 0.8207355737686157f, 0.012663737870752811f, 0.6298088431358337f, 0.6600008606910706f, 0.19943219423294067f, 0.23074419796466827f, 0.7605410814285278f, +0.008788219653069973f, 0.6590012907981873f, 0.7858361005783081f, 0.34464502334594727f, 0.8777232766151428f, 0.8254051804542542f, 0.9189988970756531f, 0.23405013978481293f, +0.4063561260700226f, 0.2838032841682434f, 0.21275167167186737f, 0.55016028881073f, 0.5945594310760498f, 0.3429712951183319f, 0.2536669075489044f, 0.4622984230518341f, +0.15203960239887238f, 0.2508876323699951f, 0.5790804028511047f, 0.05286594107747078f, 0.8341023325920105f, 0.8565414547920227f, 0.33198386430740356f, 0.5965681076049805f, +0.7905765175819397f, 0.48120078444480896f, 0.3780752718448639f, 0.11035269498825073f, 0.8306679725646973f, 0.8831413388252258f, 0.4434286057949066f, 0.2399500459432602f, +0.9672672152519226f, 0.4342055022716522f, 0.49780386686325073f, 0.15264344215393066f, 0.10150345414876938f, 0.642096221446991f, 0.03652616962790489f, 0.7298201322555542f, +0.06999026238918304f, 0.38695064187049866f, 0.40673255920410156f, 0.6246073842048645f, 0.4454566538333893f, 0.09529952704906464f, 0.6089017987251282f, 0.9780850410461426f, +0.13061244785785675f, 0.2573893070220947f, 0.1758720874786377f, 0.9605790972709656f, 0.22210867702960968f, 0.9603413939476013f, 0.5410769581794739f, 0.10853677242994308f, +0.8700067400932312f, 0.341079443693161f, 0.29491546750068665f, 0.913337230682373f, 0.6737116575241089f, 0.1872100830078125f, 0.8657957315444946f, 0.2492842823266983f, +0.8027249574661255f, 0.9381273984909058f, 0.13867080211639404f, 0.6301609873771667f, 0.14252333343029022f, 0.17933745682239532f, 0.33998143672943115f, 0.44590315222740173f, +0.5726522207260132f, 0.8557055592536926f, 0.10135317593812943f, 0.5030397176742554f, 0.7809653878211975f, 0.852866530418396f, 0.10034652054309845f, 0.19967086613178253f, +0.8478392958641052f, 0.9839821457862854f, 0.7744066119194031f, 0.6939817070960999f, 0.49090859293937683f, 0.4953497648239136f, 0.8410412669181824f, 0.8728727698326111f, +0.916652262210846f, 0.061146993190050125f, 0.9128919243812561f, 0.521712064743042f, 0.4546501040458679f, 0.7381760478019714f, 0.9149380922317505f, 0.5632997155189514f, +0.808247983455658f, 0.1554519087076187f, 0.6295226812362671f, 0.7787866592407227f, 0.8004422783851624f, 0.9029228091239929f, 0.5382003784179688f, 0.7070123553276062f, +0.8603086471557617f, 0.05657382681965828f, 0.5609371662139893f, 0.8941525220870972f, 0.7179728746414185f, 0.9212024211883545f, 0.7307766675949097f, 0.09798867255449295f, +0.5957114100456238f, 0.28949132561683655f, 0.46413400769233704f, 0.4308135211467743f, 0.9636873006820679f, 0.2744552195072174f, 0.8118507266044617f, 0.05061620846390724f, +0.5278590321540833f, 0.454677939414978f, 0.5124320983886719f, 0.8105030059814453f, 0.030544109642505646f, 0.5642328858375549f, 0.9033397436141968f, 0.7409629225730896f, +0.41462668776512146f, 0.28200891613960266f, 0.0636584684252739f, 0.012365825474262238f, 0.1525285542011261f, 0.9668785929679871f, 0.5411980152130127f, 0.5387870669364929f, +0.042839329689741135f, 0.5832463502883911f, 0.26647713780403137f, 0.5991941690444946f, 0.5846763849258423f, 0.5770500302314758f, 0.028005355969071388f, 0.8483461141586304f, +0.9480457901954651f, 0.32549577951431274f, 0.6579106450080872f, 0.02616022527217865f, 0.8347219228744507f, 0.8175514936447144f, 0.4430927336215973f, 0.7071930170059204f, +0.31220197677612305f, 0.6162671446800232f, 0.44918572902679443f, 0.5451298952102661f, 0.8881919980049133f, 0.5382782816886902f, 0.6926308870315552f, 0.38873162865638733f, +0.6923744082450867f, 0.7342716455459595f, 0.23887091875076294f, 0.14759880304336548f, 0.3385187089443207f, 0.8615862727165222f, 0.5787883400917053f, 0.40736714005470276f, +0.5659714341163635f, 0.6317517161369324f, 0.23725388944149017f, 0.9582233428955078f, 0.5078806281089783f, 0.9666696786880493f, 0.84642493724823f, 0.8324905037879944f, +0.6925447583198547f, 0.25867992639541626f, 0.5194672346115112f, 0.5933378338813782f, 0.5007231831550598f, 0.9358002543449402f, 0.48518452048301697f, 0.7742857933044434f, +0.8474887609481812f, 0.36035048961639404f, 0.05709578096866608f, 0.7281826138496399f, 0.056799065321683884f, 0.7733765244483948f, 0.22762221097946167f, 0.1896517276763916f, +0.9455147385597229f, 0.3803730607032776f, 0.9700945615768433f, 0.07116082310676575f, 0.2748677134513855f, 0.714898943901062f, 0.764710009098053f, 0.25165680050849915f, +0.6488096117973328f, 0.18132862448692322f, 0.39957571029663086f, 0.8197836875915527f, 0.41878896951675415f, 0.2603900134563446f, 0.8513904213905334f, 0.06486332416534424f, +0.1607232391834259f, 0.20571769773960114f, 0.6243146061897278f, 0.6621947288513184f, 0.7344430088996887f, 0.807942271232605f, 0.006891204044222832f, 0.2973162829875946f, +0.26241424679756165f, 0.13482855260372162f, 0.3438999056816101f, 0.1697881519794464f, 0.10485900193452835f, 0.36400526762008667f, 0.9422839283943176f, 0.8303740620613098f, +0.6227603554725647f, 0.7131972908973694f, 0.7337158918380737f, 0.1713576465845108f, 0.34887707233428955f, 0.2232305109500885f, 0.34500208497047424f, 0.17587128281593323f, +0.39604437351226807f, 0.7627406120300293f, 0.9962481260299683f, 0.8580620288848877f, 0.9987349510192871f, 0.18615803122520447f, 0.5463152527809143f, 0.14845016598701477f, +0.6307051181793213f, 0.9998037815093994f, 0.7833966016769409f, 0.6822342276573181f, 0.9394944310188293f, 0.40550678968429565f, 0.6920673847198486f, 0.7549446821212769f, +0.2973234951496124f, 0.9693022966384888f, 0.026740849018096924f, 0.7318828701972961f, 0.29252132773399353f, 0.7786511182785034f, 0.5004581212997437f, 0.08693813532590866f, +0.031911615282297134f, 0.33195629715919495f, 0.14075824618339539f, 0.11234671622514725f, 0.965217649936676f, 0.1324475258588791f, 0.3095289468765259f, 0.883931040763855f, +0.3418927490711212f, 0.3999195098876953f, 0.14099685847759247f, 0.5190558433532715f, 0.6022642254829407f, 0.019984349608421326f, 0.10725365579128265f, 0.9657295942306519f, +0.7678876519203186f, 0.6199920773506165f, 0.024575166404247284f, 0.7418535351753235f, 0.14726857841014862f, 0.7120387554168701f, 0.38571763038635254f, 0.6683090925216675f, +0.5560785531997681f, 0.836812436580658f, 0.43830376863479614f, 0.7556951642036438f, 0.17334391176700592f, 0.5739743113517761f, 0.8658677339553833f, 0.9075925946235657f, +0.05989538133144379f, 0.6255919933319092f, 0.830488920211792f, 0.052992068231105804f, 0.14486968517303467f, 0.7004730701446533f, 0.17240536212921143f, 0.8410204648971558f, +0.2144060581922531f, 0.9175940155982971f, 0.5414848923683167f, 0.4179702699184418f, 0.4035179018974304f, 0.7313283085823059f, 0.8058246970176697f, 0.1627219170331955f, +0.9714383482933044f, 0.08947145938873291f, 0.6538006663322449f, 0.44046515226364136f, 0.2594457268714905f, 0.41382527351379395f, 0.19109362363815308f, 0.44840648770332336f, +0.37997475266456604f, 0.9926891922950745f, 0.15517263114452362f, 0.08373963832855225f, 0.4971633851528168f, 0.20007988810539246f, 0.3061412274837494f, 0.46885883808135986f, +0.3674871325492859f, 0.311562716960907f, 0.684380054473877f, 0.5688530206680298f, 0.051766104996204376f, 0.8024843335151672f, 0.9693447947502136f, 0.35931143164634705f, +0.13512378931045532f, 0.45774179697036743f, 0.988280713558197f, 0.5780206918716431f, 0.7389180064201355f, 0.07637238502502441f, 0.6937816143035889f, 0.6016406416893005f, +0.050516389310359955f, 0.30529987812042236f, 0.3958769738674164f, 0.4278322160243988f, 0.8190206289291382f, 0.46257367730140686f, 0.9211657047271729f, 0.5123095512390137f, +0.3837595582008362f, 0.06155259907245636f, 0.9832792282104492f, 0.9472563862800598f, 0.604557454586029f, 0.6713085770606995f, 0.07622699439525604f, 0.1946197748184204f, +0.6863469481468201f, 0.22866778075695038f, 0.6258184313774109f, 0.5704471468925476f, 0.88714599609375f, 0.7691066861152649f, 0.36320504546165466f, 0.8138633370399475f, +0.4726933240890503f, 0.7322676777839661f, 0.23522213101387024f, 0.8019797801971436f, 0.7303545475006104f, 0.4074445962905884f, 0.3851357400417328f, 0.20197591185569763f, +0.13884194195270538f, 0.40173396468162537f, 0.8724960684776306f, 0.06189331039786339f, 0.4739001393318176f, 0.1823575645685196f, 0.5075441002845764f, 0.4713486135005951f, +0.3133333921432495f, 0.506558358669281f, 0.5271027088165283f, 0.17009717226028442f, 0.48559319972991943f, 0.7238346338272095f, 0.8848679065704346f, 0.9042202234268188f, +0.8004668951034546f, 0.2196241021156311f, 0.5720790028572083f, 0.6086868643760681f, 0.12913314998149872f, 0.14331883192062378f, 0.4782121777534485f, 0.06476152688264847f, +0.2707536816596985f, 0.04184640944004059f, 0.00402465695515275f, 0.605954110622406f, 0.7700033783912659f, 0.014650053344666958f, 0.18812745809555054f, 0.8818637728691101f, +0.3538709878921509f, 0.014734008349478245f, 0.5423263907432556f, 0.5352851748466492f, 0.41884034872055054f, 0.7486311793327332f, 0.8781949281692505f, 0.5945702195167542f, +0.553571343421936f, 0.30958089232444763f, 0.2447148561477661f, 0.6122839450836182f, 0.44181132316589355f, 0.4794240891933441f, 0.19312378764152527f, 0.07232069224119186f, +0.6656617522239685f, 0.2385260909795761f, 0.08195449411869049f, 0.17688047885894775f, 0.014317719265818596f, 0.4392175078392029f, 0.08692943304777145f, 0.7481346130371094f, +0.32293397188186646f, 0.43433287739753723f, 0.7289644479751587f, 0.13794851303100586f, 0.4437037706375122f, 0.8255017399787903f, 0.9176467061042786f, 0.14350412786006927f, +0.9042889475822449f, 0.024016743525862694f, 0.6156308650970459f, 0.2667912542819977f, 0.6490708589553833f, 0.22650675475597382f, 0.3021487295627594f, 0.8393789529800415f, +0.050586819648742676f, 0.22230850160121918f, 0.7735716700553894f, 0.1212683618068695f, 0.25435712933540344f, 0.6230965852737427f, 0.2509136199951172f, 0.3292880356311798f, +0.6881545186042786f, 0.2129141092300415f, 0.43132829666137695f, 0.9237195253372192f, 0.6101120710372925f, 0.15526966750621796f, 0.8273525834083557f, 0.14156366884708405f, +0.14507411420345306f, 0.3117932975292206f, 0.1091211810708046f, 0.5463243722915649f, 0.7126020789146423f, 0.7892510294914246f, 0.21647250652313232f, 0.12090970575809479f, +0.04259253665804863f, 0.9152112603187561f, 0.35346150398254395f, 0.725669801235199f, 0.811773419380188f, 0.1016753539443016f, 0.7824621200561523f, 0.4211890697479248f, +0.05443219095468521f, 0.5524899363517761f, 0.7121386528015137f, 0.8229703903198242f, 0.011169240809977055f, 0.9201413989067078f, 0.4027768671512604f, 0.6838198900222778f, +0.8426976799964905f, 0.42166754603385925f, 0.06171945855021477f, 0.20014630258083344f, 0.30965179204940796f, 0.18516941368579865f, 0.4060719609260559f, 0.021395593881607056f, +0.0745164230465889f, 0.955014169216156f, 0.4592737555503845f, 0.37504398822784424f, 0.4826611876487732f, 0.6002837419509888f, 0.8749001622200012f, 0.10187031328678131f, +0.7547332048416138f, 0.39021390676498413f, 0.5317190289497375f, 0.8231492042541504f, 0.15008988976478577f, 0.01715349592268467f, 0.5591834187507629f, 0.03124421276152134f, +0.29467499256134033f, 0.3686133325099945f, 0.8939729928970337f, 0.6028462052345276f, 0.07248661667108536f, 0.422424852848053f, 0.8102875351905823f, 0.9767305254936218f, +0.9835657477378845f, 0.24107807874679565f, 0.9891992807388306f, 0.16873957216739655f, 0.9815436601638794f, 0.7962912321090698f, 0.2180182784795761f, 0.5240694880485535f, +0.0771050900220871f, 0.40917330980300903f, 0.08447771519422531f, 0.7529621720314026f, 0.5414742231369019f, 0.297078937292099f, 0.6907907128334045f, 0.8203311562538147f, +0.826413631439209f, 0.8361658453941345f, 0.9764136672019958f, 0.6314533352851868f, 0.6474757790565491f, 0.4586411714553833f, 0.6693472266197205f, 0.5068139433860779f, +0.6437434554100037f, 0.6344888806343079f, 0.8378706574440002f, 0.968479573726654f, 0.5370219945907593f, 0.998403012752533f, 0.9878107309341431f, 0.9867854714393616f, +0.8461803793907166f, 0.5921627283096313f, 8.483971032546833e-05f, 0.3183756470680237f, 0.9787527322769165f, 0.2745174169540405f, 0.15694735944271088f, 0.022210562601685524f, +0.36331504583358765f, 0.9463760852813721f, 0.25524377822875977f, 0.2737308144569397f, 0.039302192628383636f, 0.7299782037734985f, 0.24655213952064514f, 0.9741951823234558f, +0.6835218071937561f, 0.6675282716751099f, 0.03172135353088379f, 0.5174742937088013f, 0.3505744934082031f, 0.7836264371871948f, 0.7979071736335754f, 0.9728307127952576f, +0.3003779351711273f, 0.6991623044013977f, 0.1262093186378479f, 0.14745861291885376f, 0.6155964136123657f, 0.8698604106903076f, 0.17937088012695312f, 0.7838676571846008f, +0.5321921706199646f, 0.8067259788513184f, 0.8873356580734253f, 0.9846228361129761f, 0.6888646483421326f, 0.09113959223031998f, 0.9369051456451416f, 0.5136660933494568f, +0.5290818810462952f, 0.941155195236206f, 0.6457819938659668f, 0.08003683388233185f, 0.7031726837158203f, 0.9743689298629761f, 0.09554015100002289f, 0.17978455126285553f, +0.2953212857246399f, 0.8722905516624451f, 0.7215217351913452f, 0.1368778496980667f, 0.36324945092201233f, 0.1898510605096817f, 0.498139351606369f, 0.5788564085960388f, +0.968830406665802f, 0.4835992157459259f, 0.7248443365097046f, 0.9813467264175415f, 0.6218180060386658f, 0.5746427774429321f, 0.8831740617752075f, 0.6131341457366943f, +0.3134967088699341f, 0.2123957723379135f, 0.2421252727508545f, 0.30410298705101013f, 0.848389744758606f, 0.5909835696220398f, 0.9368662238121033f, 0.4781763255596161f, +0.23087407648563385f, 0.8703815937042236f, 0.6273272037506104f, 0.6719515919685364f, 0.7957238554954529f, 0.28706368803977966f, 0.7622666954994202f, 0.5074629783630371f, +0.7379113435745239f, 0.9649437069892883f, 0.9259257912635803f, 0.26946109533309937f, 0.04215260222554207f, 0.5724170207977295f, 0.12500575184822083f, 0.6470443606376648f, +0.6105988025665283f, 0.06659136712551117f, 0.7699805498123169f, 0.9236717820167542f, 0.4981052875518799f, 0.2685336470603943f, 0.16707389056682587f, 0.5594112873077393f, +0.9908351302146912f, 0.49257200956344604f, 0.6178444027900696f, 0.3629229664802551f, 0.855919599533081f, 0.5557548403739929f, 0.4592917263507843f, 0.7265390157699585f, +0.6462175846099854f, 0.04917577654123306f, 0.09486232697963715f, 0.13945500552654266f, 0.42999324202537537f, 0.22078727185726166f, 0.33602041006088257f, 0.3452603220939636f, +0.23798812925815582f, 0.3535110354423523f, 0.0577220544219017f, 0.7880470752716064f, 0.09840046614408493f, 0.6961143612861633f, 0.13698112964630127f, 0.35154834389686584f, +0.9249104261398315f, 0.8350852727890015f, 0.6506111025810242f, 0.7861210107803345f, 0.5319370031356812f, 0.7363384962081909f, 0.9032660126686096f, 0.8327857255935669f, +0.5668654441833496f, 0.018713846802711487f, 0.5350425839424133f, 0.0001288993953494355f, 0.831549346446991f, 0.5277363061904907f, 0.4972880184650421f, 0.7123249769210815f, +0.09110477566719055f, 0.8466680645942688f, 0.8223631381988525f, 0.5267462134361267f, 0.7647098302841187f, 0.26806333661079407f, 0.22717618942260742f, 0.7563540935516357f, +0.12931036949157715f, 0.32731106877326965f, 0.5969735980033875f, 0.13274864852428436f, 0.9490395784378052f, 0.2693551480770111f, 0.22572894394397736f, 0.663489818572998f, +0.7159563899040222f, 0.798805296421051f, 0.21312132477760315f, 0.17883868515491486f, 0.12081315368413925f, 0.37582921981811523f, 0.3794640004634857f, 0.6722767353057861f, +0.008470878936350346f, 0.936212420463562f, 0.6895695328712463f, 0.24694697558879852f, 0.38395845890045166f, 0.21915145218372345f, 0.15472783148288727f, 0.8643792867660522f, +0.5709616541862488f, 0.6595275402069092f, 0.8874735832214355f, 0.7006044983863831f, 0.38168707489967346f, 0.7276337742805481f, 0.2974171042442322f, 0.2585064768791199f, +0.735336422920227f, 0.4539033770561218f, 0.7097203135490417f, 0.5821508169174194f, 0.031890541315078735f, 0.4830780029296875f, 0.5937584638595581f, 0.0367620475590229f, +0.649564266204834f, 0.5742663145065308f, 0.6445016264915466f, 0.053424738347530365f, 0.48074859380722046f, 0.843521773815155f, 0.8742074966430664f, 0.7669440507888794f, +0.537817120552063f, 0.3997623324394226f, 0.19322173297405243f, 0.3142634630203247f, 0.9396269917488098f, 0.35120493173599243f, 0.835405707359314f, 0.5433647036552429f, +0.27752554416656494f, 0.22641026973724365f, 0.4127315282821655f, 0.16502796113491058f, 0.6196577548980713f, 0.8748912215232849f, 0.4231988191604614f, 0.8461341261863708f, +0.538770854473114f, 0.5429622530937195f, 0.7715332508087158f, 0.4515422284603119f, 0.5673112869262695f, 0.7283257842063904f, 0.24747425317764282f, 0.2993665933609009f, +0.12834306061267853f, 0.42734721302986145f, 0.04961247369647026f, 0.9539231657981873f, 0.3657335937023163f, 0.12242598831653595f, 0.05228004977107048f, 0.8103463053703308f, +0.7923165559768677f, 0.8016811609268188f, 0.0030147135257720947f, 0.8466923236846924f, 0.8323585391044617f, 0.3116097152233124f, 0.9183052778244019f, 0.20230227708816528f, +0.15019962191581726f, 0.8141474723815918f, 0.9966683983802795f, 0.5403276085853577f, 0.28751304745674133f, 0.1895093321800232f, 0.7005000114440918f, 0.3541784882545471f, +0.7426652908325195f, 0.1885971873998642f, 0.916846513748169f, 0.026086900383234024f, 0.28614547848701477f, 0.3373873829841614f, 0.24760836362838745f, 0.3554852604866028f, +0.4369259178638458f, 0.9143813252449036f, 0.16404275596141815f, 0.7342933416366577f, 0.32145512104034424f, 0.9568206071853638f, 0.19835609197616577f, 0.05364439636468887f, +0.625396728515625f, 0.8747464418411255f, 0.16835474967956543f, 0.6180472373962402f, 0.39703357219696045f, 0.4797811508178711f, 0.8163659572601318f, 0.16738703846931458f, +0.6549625396728516f, 0.5812298059463501f, 0.2747138440608978f, 0.3100799024105072f, 0.351013720035553f, 0.8421410322189331f, 0.5266721844673157f, 0.15168820321559906f, +0.3087114095687866f, 0.826028048992157f, 0.7800272703170776f, 0.561997652053833f, 0.9133886694908142f, 0.3801001310348511f, 0.7085638642311096f, 0.7741738557815552f, +0.4348527491092682f, 0.8024892210960388f, 0.4470214247703552f, 0.025203168392181396f, 0.14578451216220856f, 0.13088107109069824f, 0.4679727554321289f, 0.6239373683929443f, +0.2005772441625595f, 0.969950258731842f, 0.761026918888092f, 0.18573437631130219f, 0.45840540528297424f, 0.5017170906066895f, 0.463076114654541f, 0.13432012498378754f, +0.13351717591285706f, 0.8928523063659668f, 0.4937794804573059f, 0.3039979040622711f, 0.8451482653617859f, 0.8913323879241943f, 0.43150702118873596f, 0.8788416981697083f, +0.6950298547744751f, 0.006471330299973488f, 0.9606835246086121f, 0.32699641585350037f, 0.805340051651001f, 0.5577394962310791f, 0.5970262289047241f, 0.7053236961364746f, +0.9161101579666138f, 0.540399432182312f, 0.5556789040565491f, 0.750504732131958f, 0.709051787853241f, 0.5841607451438904f, 0.14704056084156036f, 0.392869770526886f, +0.8816334009170532f, 0.49225088953971863f, 0.4564845561981201f, 0.5529015064239502f, 0.999424397945404f, 0.46046218276023865f, 0.7184696197509766f, 0.5391700863838196f, +0.921970546245575f, 0.7781166434288025f, 0.9569298624992371f, 0.4680142402648926f, 0.06928420066833496f, 0.2923167049884796f, 0.5000641942024231f, 0.12561379373073578f, +0.07015307247638702f, 0.8528094291687012f, 0.09145331382751465f, 0.40482208132743835f, 0.1832711398601532f, 0.8842129111289978f, 0.6330103874206543f, 0.1273336559534073f, +0.7312286496162415f, 0.5873199701309204f, 0.11974307149648666f, 0.6209946870803833f, 0.777276337146759f, 0.5791158080101013f, 0.3366360664367676f, 0.571943998336792f, +0.9430015087127686f, 0.2967003583908081f, 0.07121162861585617f, 0.4401717185974121f, 0.40782788395881653f, 0.3144240379333496f, 0.008303048089146614f, 0.5730811953544617f, +0.10390865802764893f, 0.4724791646003723f, 0.7883334755897522f, 0.836649477481842f, 0.6874783635139465f, 0.35822170972824097f, 0.7036668062210083f, 0.4639604091644287f, +0.7564786672592163f, 0.6221683025360107f, 0.30395448207855225f, 0.49296891689300537f, 0.7007388472557068f, 0.6092488765716553f, 0.917797327041626f, 0.9153348207473755f, +0.7646695971488953f, 0.8480907082557678f, 0.3166007101535797f, 0.6326658725738525f, 0.9509583115577698f, 0.1229153573513031f, 0.2105139195919037f, 0.628856360912323f, +0.3511291742324829f, 0.49738121032714844f, 0.27389711141586304f, 0.5067569017410278f, 0.498129278421402f, 0.3982817530632019f, 0.5639708638191223f, 0.09428811818361282f, +0.48137396574020386f, 0.9223377108573914f, 0.650699257850647f, 0.6210209131240845f, 0.6877498626708984f, 0.07604209333658218f, 0.7982264161109924f, 0.5868778824806213f, +0.020189139991998672f, 0.47886258363723755f, 0.06666627526283264f, 0.10702065378427505f, 0.8793841004371643f, 0.7797890901565552f, 0.4650103449821472f, 0.33028289675712585f, +0.16303357481956482f, 0.43719053268432617f, 0.18282048404216766f, 0.6786993741989136f, 0.4524783194065094f, 0.04714570567011833f, 0.9776638150215149f, 0.35707858204841614f, +0.2997470498085022f, 0.6929404735565186f, 0.737030029296875f, 0.5979675054550171f, 0.7591973543167114f, 0.2253972589969635f, 0.3705978989601135f, 0.25152596831321716f, +0.03427205607295036f, 0.00153980846516788f, 0.4383833110332489f, 0.779316782951355f, 0.03935295343399048f, 0.44631722569465637f, 0.16129951179027557f, 0.11198098212480545f, +0.2783936858177185f, 0.07448810338973999f, 0.37257254123687744f, 0.1258482187986374f, 0.6976115703582764f, 0.161648690700531f, 0.8866994380950928f, 0.9910746216773987f, +0.46823403239250183f, 0.8554412722587585f, 0.24132433533668518f, 0.6772088408470154f, 0.4788457453250885f, 0.20447014272212982f, 0.5178873538970947f, 0.27950018644332886f, +0.526036262512207f, 0.7430108189582825f, 0.11860787868499756f, 0.03872350603342056f, 0.34771138429641724f, 0.47186264395713806f, 0.893018364906311f, 0.5188338160514832f, +0.7497338056564331f, 0.7516059279441833f, 0.859852135181427f, 0.8946223855018616f, 0.381867378950119f, 0.7561991810798645f, 0.3325267434120178f, 0.34076857566833496f, +0.6796742677688599f, 0.6740769147872925f, 0.6589100956916809f, 0.772233784198761f, 0.6910625696182251f, 0.8734232783317566f, 0.12600040435791016f, 0.7373635172843933f, +0.5624504685401917f, 0.8240426182746887f, 0.04429985210299492f, 0.2218838334083557f, 0.780343770980835f, 0.5185145735740662f, 0.8236027359962463f, 0.5028604865074158f, +0.3262990415096283f, 0.4061799943447113f, 0.632134735584259f, 0.29112833738327026f, 0.7847244143486023f, 0.361896812915802f, 0.8102138042449951f, 0.12033682316541672f, +0.6779384016990662f, 0.022269031032919884f, 0.19069527089595795f, 0.9397087693214417f, 0.42851969599723816f, 0.3241814970970154f, 0.6038318276405334f, 0.5934661626815796f, +0.4193657338619232f, 0.20611318945884705f, 0.8546208739280701f, 0.768788754940033f, 0.18680423498153687f, 0.888044536113739f, 0.15988430380821228f, 0.9012097120285034f, +0.5412236452102661f, 0.28767314553260803f, 0.4882255494594574f, 0.4325183629989624f, 0.9992055296897888f, 0.9042702317237854f, 0.3962812125682831f, 0.7994615435600281f, +0.11203383654356003f, 0.6107642650604248f, 0.15803462266921997f, 0.6069328784942627f, 0.3462926149368286f, 0.07994961738586426f, 0.8744754195213318f, 0.7184984683990479f, +0.5638030767440796f, 0.12222733348608017f, 0.9981074333190918f, 0.4951826333999634f, 0.3601674437522888f, 0.7592781186103821f, 0.9814527034759521f, 0.5058776140213013f, +0.48640990257263184f, 0.849716067314148f, 0.300959050655365f, 0.7092606425285339f, 0.6664547324180603f, 0.7665006518363953f, 0.5836665630340576f, 0.7990036606788635f, +0.0718500018119812f, 0.9873455762863159f, 0.7068950533866882f, 0.8270871639251709f, 0.5544558167457581f, 0.956610918045044f, 0.7091013789176941f, 0.4074467420578003f, +0.867316484451294f, 0.611203670501709f, 0.4787341356277466f, 0.7639139294624329f, 0.4158186614513397f, 0.9808117747306824f, 0.059486765414476395f, 0.9424051642417908f, +0.6990278959274292f, 0.8657398819923401f, 0.7653173208236694f, 0.046440836042165756f, 0.6626991033554077f, 0.8131520748138428f, 0.8890544176101685f, 0.26709839701652527f, +0.9121502637863159f, 0.32595691084861755f, 0.255918025970459f, 0.30552080273628235f, 0.9450980424880981f, 0.46242207288742065f, 0.1797507405281067f, 0.613139808177948f, +0.2683838903903961f, 0.12463242560625076f, 0.7954955101013184f, 0.06124504283070564f, 0.7272171974182129f, 0.371594101190567f, 0.0867595225572586f, 0.8542028665542603f, +0.6608535051345825f, 0.7600292563438416f, 0.11230362951755524f, 0.11632246524095535f, 0.14872616529464722f, 0.12829375267028809f, 0.7885362505912781f, 0.04272805154323578f, +0.7802741527557373f, 0.8740448355674744f, 0.9310300946235657f, 0.5568282008171082f, 0.9109907150268555f, 0.6019694805145264f, 0.07778091728687286f, 0.628298819065094f, +0.9223507046699524f, 0.522781491279602f, 0.4877261221408844f, 0.718647837638855f, 0.6141273379325867f, 0.5045909285545349f, 0.1858665943145752f, 0.8697376847267151f, +0.17954252660274506f, 0.48695793747901917f, 0.05917833372950554f, 0.0011460889363661408f, 0.4493322968482971f, 0.2642425000667572f, 0.06259904056787491f, 0.10010753571987152f, +0.2330634742975235f, 0.20320019125938416f, 0.8143942952156067f, 0.8690366744995117f, 0.925682783126831f, 0.4295511543750763f, 0.9652143716812134f, 0.7015619277954102f, +0.5713951587677002f, 0.6124680042266846f, 0.11604292690753937f, 0.43763983249664307f, 0.523958146572113f, 0.3958621621131897f, 0.5425182580947876f, 0.43476271629333496f, +0.13880664110183716f, 0.4564340114593506f, 0.36978957056999207f, 0.11021295189857483f, 0.9505536556243896f, 0.5346085429191589f, 0.8852309584617615f, 0.936030924320221f, +0.6796066164970398f, 0.7811094522476196f, 0.38056352734565735f, 0.8598735928535461f, 0.33197492361068726f, 0.030059628188610077f, 0.46676576137542725f, 0.17679443955421448f, +0.1343555897474289f, 0.77547687292099f, 0.06549730151891708f, 0.870369017124176f, 0.2768420875072479f, 0.6186069250106812f, 0.057172197848558426f, 0.36402055621147156f, +0.9548019766807556f, 0.00885627418756485f, 0.4583386778831482f, 0.5759707689285278f, 0.725558876991272f, 0.06526581943035126f, 0.44932428002357483f, 0.8288025259971619f, +0.9265163540840149f, 0.8070802688598633f, 0.7769381403923035f, 0.41028308868408203f, 0.4169590175151825f, 0.8678728938102722f, 0.10135392099618912f, 0.18601752817630768f, +0.7998749613761902f, 0.16509351134300232f, 0.9225941300392151f, 0.4355248510837555f, 0.9446658492088318f, 0.6849249005317688f, 0.49286985397338867f, 0.8735185265541077f, +0.07241684198379517f, 0.677939236164093f, 0.5529172420501709f, 0.9799646735191345f, 0.019725818186998367f, 0.07412067800760269f, 0.6069708466529846f, 0.5558723211288452f, +0.8988546133041382f, 0.72250896692276f, 0.5236339569091797f, 0.27698373794555664f, 0.048145029693841934f, 0.923434317111969f, 0.34406137466430664f, 0.07712414115667343f, +0.14681106805801392f, 0.3789672553539276f, 0.9021933674812317f, 0.7036954760551453f, 0.41995805501937866f, 0.0008356301696039736f, 0.9018171429634094f, 0.5733211040496826f, +0.9443514347076416f, 0.009424752555787563f, 0.1521373987197876f, 0.6803715825080872f, 0.6133620738983154f, 0.5532705783843994f, 0.7746369242668152f, 0.3834342956542969f, +0.2538727819919586f, 0.4456463158130646f, 0.908859372138977f, 0.7724598050117493f, 0.2806829810142517f, 0.5047067403793335f, 0.6269327402114868f, 0.6810641288757324f, +0.27366864681243896f, 0.7618528008460999f, 0.3242712616920471f, 0.6524219512939453f, 0.6104459762573242f, 0.4156695008277893f, 0.5489541888237f, 0.4822938144207001f, +0.16407030820846558f, 0.5768393278121948f, 0.3038255572319031f, 0.14353445172309875f, 0.7784658074378967f, 0.9319252967834473f, 0.5224307179450989f, 0.5037311315536499f, +0.5667933225631714f, 0.22564835846424103f, 0.33881452679634094f, 0.38476526737213135f, 0.16546456515789032f, 0.47993916273117065f, 0.4219888746738434f, 0.4074688255786896f, +0.6189921498298645f, 0.2198202759027481f, 0.4804942309856415f, 0.3646875321865082f, 0.8997517228126526f, 0.6543367505073547f, 0.4813057780265808f, 0.9732898473739624f, +0.42887023091316223f, 0.8867766857147217f, 0.15021437406539917f, 0.011988628655672073f, 0.16229066252708435f, 0.9883352518081665f, 0.7264145016670227f, 0.6235121488571167f, +0.04242219775915146f, 0.8003212809562683f, 0.4070877134799957f, 0.8722836971282959f, 0.5692349672317505f, 0.2964061498641968f, 0.07232408225536346f, 0.6716666221618652f, +0.9537315368652344f, 0.3445543944835663f, 0.8071188926696777f, 0.47455933690071106f, 0.7136192321777344f, 0.5925541520118713f, 0.5410230159759521f, 0.6906411647796631f, +0.45312365889549255f, 0.997344970703125f, 0.3717181384563446f, 0.8539974689483643f, 0.6142306327819824f, 0.5574172735214233f, 0.3138544261455536f, 0.581608235836029f, +0.7427116632461548f, 0.514876127243042f, 0.15416468679904938f, 0.938551664352417f, 0.24192123115062714f, 0.6016284823417664f, 0.9774317741394043f, 0.008304505608975887f, +0.32761624455451965f, 0.7720999121665955f, 0.9446460604667664f, 0.8361031413078308f, 0.035042956471443176f, 0.14450424909591675f, 0.8627990484237671f, 0.572136640548706f, +0.2201155424118042f, 0.36015254259109497f, 0.15643441677093506f, 0.9616206884384155f, 0.10680919885635376f, 0.11065198481082916f, 0.7105772495269775f, 0.6557283401489258f, +0.7491822838783264f, 0.8567488193511963f, 0.03787337243556976f, 0.03914570435881615f, 0.4586825668811798f, 0.9993283152580261f, 0.4513271450996399f, 0.12728603184223175f, +0.8044844269752502f, 0.3644460141658783f, 0.24918785691261292f, 0.44835013151168823f, 0.42373451590538025f, 0.5173593759536743f, 0.24879564344882965f, 0.8455301523208618f, +0.6349515914916992f, 0.25515270233154297f, 0.9295302629470825f, 0.9545992016792297f, 0.6193975210189819f, 0.3145313262939453f, 0.07045087963342667f, 0.8612223863601685f, +0.5172550082206726f, 0.0835956335067749f, 0.523166835308075f, 0.7905939221382141f, 0.9709007740020752f, 0.7933496832847595f, 0.35763266682624817f, 0.6159170866012573f, +0.6950006484985352f, 0.053024858236312866f, 0.376754492521286f, 0.13542872667312622f, 0.8387617468833923f, 0.4120311141014099f, 0.4489906430244446f, 0.3724218010902405f, +0.4335933327674866f, 0.8072100281715393f, 0.7876506447792053f, 0.5708158612251282f, 0.154868021607399f, 0.3837158679962158f, 0.5654077529907227f, 0.8991553783416748f, +0.8930188417434692f, 0.19408567249774933f, 0.5904488563537598f, 0.8455779552459717f, 0.06351473182439804f, 0.9956891536712646f, 0.5684687495231628f, 0.1493452936410904f, +0.22943256795406342f, 0.210222989320755f, 0.6653785109519958f, 0.25408947467803955f, 0.570635974407196f, 0.16917581856250763f, 0.7542024850845337f, 0.763570249080658f, +0.20323283970355988f, 0.8526116609573364f, 0.228563591837883f, 0.8672409653663635f, 0.25285544991493225f, 0.13047607243061066f, 0.24930889904499054f, 0.07801846414804459f, +0.19666452705860138f, 0.3629969358444214f, 0.5736699104309082f, 0.3660913407802582f, 0.7239502668380737f, 0.6242629289627075f, 0.1975858211517334f, 0.6573595404624939f, +0.6847395300865173f, 0.8812453746795654f, 0.9494953155517578f, 0.2165084034204483f, 0.22664253413677216f, 0.6342077851295471f, 0.700442373752594f, 0.7330948114395142f, +0.4963517487049103f, 0.021992171183228493f, 0.5847495794296265f, 0.9379429221153259f, 0.5441240072250366f, 0.8818295001983643f, 0.5574934482574463f, 0.8956510424613953f, +0.9580993056297302f, 0.5756332278251648f, 0.2513192892074585f, 0.2502599060535431f, 0.7031328678131104f, 0.3613658547401428f, 0.26372092962265015f, 0.09080787003040314f, +0.6397987008094788f, 0.012096723541617393f, 0.5150009989738464f, 0.6992352604866028f, 0.0280615147203207f, 0.8973214030265808f, 0.8942071795463562f, 0.7377752065658569f, +0.1067381352186203f, 0.42729198932647705f, 0.5740039348602295f, 0.6718057990074158f, 0.6537759900093079f, 0.77326899766922f, 0.015031302347779274f, 0.92387455701828f, +0.33863699436187744f, 0.026296813040971756f, 0.12843859195709229f, 0.6636379361152649f, 0.0669807568192482f, 0.6165411472320557f, 0.5347767472267151f, 0.4878455102443695f, +0.4543989598751068f, 0.9346333146095276f, 0.2663910388946533f, 0.5058137774467468f, 0.3737861216068268f, 0.29024654626846313f, 0.9394534826278687f, 0.484409898519516f, +0.3381058871746063f, 0.4643098711967468f, 0.8921355605125427f, 0.14520427584648132f, 0.6906041502952576f, 0.7365270256996155f, 0.5543264746665955f, 0.6303040385246277f, +0.9170239567756653f, 0.49808838963508606f, 0.6582433581352234f, 0.17841148376464844f, 0.22744868695735931f, 0.7642497420310974f, 0.9081013202667236f, 0.7804152369499207f, +0.2352457344532013f, 0.11327797174453735f, 0.5051066279411316f, 0.7863503098487854f, 0.1290195733308792f, 0.04002858325839043f, 0.972217857837677f, 0.1238132044672966f, +0.2414388805627823f, 0.03533247485756874f, 0.36055463552474976f, 0.7500174045562744f, 0.19520321488380432f, 0.9561951160430908f, 0.25627729296684265f, 0.7616801857948303f, +0.13164763152599335f, 0.4794803857803345f, 0.6465516090393066f, 0.22483769059181213f, 0.46154338121414185f, 0.8797383904457092f, 0.5833224654197693f, 0.4123730957508087f, +0.21818207204341888f, 0.1547444760799408f, 0.252018004655838f, 0.008367805741727352f, 0.007382374722510576f, 0.02643946371972561f, 0.12685808539390564f, 0.5485720634460449f, +0.6818584203720093f, 0.027290068566799164f, 0.6702513098716736f, 0.2791168987751007f, 0.5842553973197937f, 0.08819591253995895f, 0.803495466709137f, 0.7844473123550415f, +0.14937572181224823f, 0.27681243419647217f, 0.9183805584907532f, 0.32409098744392395f, 0.24481648206710815f, 0.3446515202522278f, 0.2770843207836151f, 0.7749824523925781f, +0.2578839361667633f, 0.8394248485565186f, 0.20819486677646637f, 0.6055478453636169f, 0.014251289889216423f, 0.955371618270874f, 0.6721712350845337f, 0.2018413543701172f, +0.5687914490699768f, 0.9911134243011475f, 0.7018964290618896f, 0.24737432599067688f, 0.3417251408100128f, 0.7131198644638062f, 0.49788373708724976f, 0.0040666782297194f, +0.5911493301391602f, 0.7537407875061035f, 0.4164998233318329f, 0.26787516474723816f, 0.19863033294677734f, 0.9161843061447144f, 0.5137506127357483f, 0.6384720206260681f, +0.5420999526977539f, 0.6638864874839783f, 0.7945419549942017f, 0.31331005692481995f, 0.22596852481365204f, 0.36962395906448364f, 0.2807159423828125f, 0.07237241417169571f, +0.2866921126842499f, 0.16594013571739197f, 0.21454378962516785f, 0.6547919511795044f, 0.9877378940582275f, 0.871595561504364f, 0.46306923031806946f, 0.30997079610824585f, +0.8475274443626404f, 0.27052372694015503f, 0.8470573425292969f, 0.6551727652549744f, 0.6099196076393127f, 0.48524680733680725f, 0.386629581451416f, 0.8479192852973938f, +0.6500419974327087f, 0.6980540752410889f, 0.9839703440666199f, 0.7130079865455627f, 0.8226982355117798f, 0.9295118451118469f, 0.7721626162528992f, 0.2438858598470688f, +0.6258544921875f, 0.7061693668365479f, 0.06957489997148514f, 0.5346545577049255f, 0.000762591662351042f, 0.9531257748603821f, 0.6020506024360657f, 0.4105740487575531f, +0.8748246431350708f, 0.29464247822761536f, 0.24768288433551788f, 0.7243955731391907f, 0.20414625108242035f, 0.5823071002960205f, 0.40170562267303467f, 0.607999324798584f, +0.21146948635578156f, 0.2951343059539795f, 0.8332236409187317f, 0.8262430429458618f, 0.9528675079345703f, 0.9286748766899109f, 0.14171886444091797f, 0.6323878765106201f, +0.5502097606658936f, 0.6899924278259277f, 0.21010862290859222f, 0.7314841747283936f, 0.07488691806793213f, 0.5563390851020813f, 0.19976896047592163f, 0.024804983288049698f, +0.8789659142494202f, 0.7565084099769592f, 0.4117371439933777f, 0.388163298368454f, 0.06947681307792664f, 0.9330320954322815f, 0.9920491576194763f, 0.6191675662994385f, +0.8565192222595215f, 0.13032600283622742f, 0.6163799166679382f, 0.4497997760772705f, 0.24460875988006592f, 0.7925854325294495f, 0.03194123134016991f, 0.1488417685031891f, +0.25739508867263794f, 0.4251527488231659f, 0.5037309527397156f, 0.4959568381309509f, 0.13095301389694214f, 0.11846315115690231f, 0.7256908416748047f, 0.44717803597450256f, +0.053835395723581314f, 0.18857784569263458f, 0.881079912185669f, 0.12258859723806381f, 0.09038896858692169f, 0.684223473072052f, 0.04956772178411484f, 0.2893570065498352f, +0.04560200870037079f, 0.38101592659950256f, 0.045275863260030746f, 0.21818701922893524f, 0.763880729675293f, 0.34855881333351135f, 0.9965909123420715f, 0.7063118815422058f, +0.14734622836112976f, 0.06499028205871582f, 0.5613212585449219f, 0.28079286217689514f, 0.6603903770446777f, 0.6851951479911804f, 0.22515489161014557f, 0.3202206790447235f, +0.9140947461128235f, 0.02217591553926468f, 0.26437556743621826f, 0.2854997217655182f, 0.29570508003234863f, 0.431240439414978f, 0.3279663026332855f, 0.864062488079071f, +0.7172402739524841f, 0.5121611952781677f, 0.5627714991569519f, 0.34965673089027405f, 0.5061174631118774f, 0.043909087777137756f, 0.4503972828388214f, 0.9702949523925781f, +0.09436653554439545f, 0.0674937516450882f, 0.16461166739463806f, 0.27460920810699463f, 0.7677479386329651f, 0.17897100746631622f, 0.04748651012778282f, 0.29009386897087097f, +0.5461917519569397f, 0.3377794921398163f, 0.5837359428405762f, 0.36784976720809937f, 0.09174390137195587f, 0.3289709985256195f, 0.6162306070327759f, 0.6162461638450623f, +0.6796461939811707f, 0.7097705006599426f, 0.2714768648147583f, 0.07877521961927414f, 0.5556299090385437f, 0.15643230080604553f, 0.8198909163475037f, 0.562147855758667f, +0.3965064585208893f, 0.3895823359489441f, 0.213797926902771f, 0.6041263937950134f, 0.20658664405345917f, 0.7629477381706238f, 0.46838462352752686f, 0.45339176058769226f, +0.7312836647033691f, 0.24771840870380402f, 0.47664424777030945f, 0.73578280210495f, 0.4322025179862976f, 0.657357394695282f, 0.7886765599250793f, 0.09548743814229965f, +0.6024928689002991f, 0.9665852785110474f, 0.9844213128089905f, 0.9354187846183777f, 0.41431188583374023f, 0.9020562171936035f, 0.6957249045372009f, 0.532416820526123f, +0.19410042464733124f, 0.17196853458881378f, 0.873417854309082f, 0.27673324942588806f, 0.04166736081242561f, 0.04565935954451561f, 0.8854033350944519f, 0.523387610912323f, +0.05277030169963837f, 0.42699313163757324f, 0.4177713096141815f, 0.06095321103930473f, 0.11509694159030914f, 0.01559409312903881f, 0.0966225266456604f, 0.9881472587585449f, +0.37760308384895325f, 0.412803053855896f, 0.9216420650482178f, 0.11365899443626404f, 0.4718858301639557f, 0.01622425951063633f, 0.8799073696136475f, 0.4579886198043823f, +0.38103505969047546f, 0.3203819990158081f, 0.19693315029144287f, 0.6136348247528076f, 0.3254970610141754f, 0.12024582922458649f, 0.41681772470474243f, 0.4009663760662079f, +0.23850011825561523f, 0.16584749519824982f, 0.1918468326330185f, 0.6958019137382507f, 0.5479903221130371f, 0.334751695394516f, 0.8984487652778625f, 0.16323649883270264f, +0.7290191650390625f, 0.9249809384346008f, 0.8832550048828125f, 0.20717351138591766f, 0.4048188030719757f, 0.6475216150283813f, 0.7166389226913452f, 0.323018342256546f, +0.2433020919561386f, 0.1628706455230713f, 0.5985578894615173f, 0.4731261134147644f, 0.5372840166091919f, 0.14854685962200165f, 0.32542020082473755f, 0.9174700379371643f, +0.5363972187042236f, 0.11765797436237335f, 0.016085823997855186f, 0.8679062128067017f, 0.7948621511459351f, 0.8499992489814758f, 0.10732796043157578f, 0.8022366166114807f, +0.7949203848838806f, 0.38493770360946655f, 0.8977383375167847f, 0.258787602186203f, 0.9421302676200867f, 0.21556898951530457f, 0.9325746297836304f, 0.04454183205962181f, +0.789117693901062f, 0.23444372415542603f, 0.9317509531974792f, 0.9494500160217285f, 0.20003429055213928f, 0.5873164534568787f, 0.9328362941741943f, 0.8993790149688721f, +0.5550852417945862f, 0.011891121044754982f, 0.14164447784423828f, 0.29603567719459534f, 0.8697479367256165f, 0.4934566020965576f, 0.39942726492881775f, 0.837878406047821f, +0.13273553550243378f, 0.35571423172950745f, 0.2302258014678955f, 0.4956563711166382f, 0.3279326856136322f, 0.15200603008270264f, 0.92296302318573f, 0.9437651634216309f, +0.5026170015335083f, 0.5747421979904175f, 0.1941089630126953f, 0.7534852027893066f, 0.4280984401702881f, 0.3176613748073578f, 0.9164594411849976f, 0.4237469732761383f, +0.8815100193023682f, 0.33802586793899536f, 0.2883542776107788f, 0.3357306122779846f, 0.2964516282081604f, 0.5907508730888367f, 0.02298777550458908f, 0.38870903849601746f, +0.04820839315652847f, 0.0308598093688488f, 0.9309206008911133f, 0.9378772377967834f, 0.7769237160682678f, 0.1211458295583725f, 0.02953256480395794f, 0.01750687137246132f, +0.09695547819137573f, 0.4705870449542999f, 0.2405133694410324f, 0.6618264317512512f, 0.3320140540599823f, 0.6016886830329895f, 0.44490885734558105f, 0.9993435144424438f, +0.6285860538482666f, 0.8266373872756958f, 0.8930650353431702f, 0.5389110445976257f, 0.40823179483413696f, 0.88001948595047f, 0.2471722662448883f, 0.6695494651794434f, +0.09769881516695023f, 0.8844848275184631f, 0.34034231305122375f, 0.07986633479595184f, 0.7609387636184692f, 0.1990373432636261f, 0.22858832776546478f, 0.18876133859157562f, +0.33624905347824097f, 0.5109090805053711f, 0.8382045030593872f, 0.266774445772171f, 0.19555306434631348f, 0.2756313383579254f, 0.3378223180770874f, 0.23000867664813995f, +0.6205783486366272f, 0.3199126720428467f, 0.9102461338043213f, 0.6501680612564087f, 0.9446933269500732f, 0.723514974117279f, 0.6040597558021545f, 0.8694140911102295f, +0.45141518115997314f, 0.6991633176803589f, 0.11170747876167297f, 0.24758020043373108f, 0.8056709170341492f, 0.17892245948314667f, 0.6776937246322632f, 0.1086246445775032f, +0.7723947167396545f, 0.12374631315469742f, 0.10238562524318695f, 0.7809140086174011f, 0.0765109658241272f, 0.45535194873809814f, 0.983534038066864f, 0.9707149267196655f, +0.7112101316452026f, 0.39245280623435974f, 0.4763525128364563f, 0.3178066611289978f, 0.13490891456604004f, 0.9118974208831787f, 0.7882781624794006f, 0.5584540367126465f, +0.6687136292457581f, 0.988033652305603f, 0.1206790953874588f, 0.5296114683151245f, 0.05501734837889671f, 0.6322487592697144f, 0.061094168573617935f, 0.34619057178497314f, +0.6218760013580322f, 0.4733204245567322f, 0.6919275522232056f, 0.6597455739974976f, 0.251702219247818f, 0.051577597856521606f, 0.10009074956178665f, 0.26764172315597534f, +0.10175203531980515f, 0.5675656795501709f, 0.6184810400009155f, 0.7080932855606079f, 0.65877366065979f, 0.2782856523990631f, 0.9364927411079407f, 0.8554243445396423f, +0.012575892731547356f, 0.3640158474445343f, 0.09485222399234772f, 0.9603177309036255f, 0.05121238902211189f, 0.9107348322868347f, 0.2860284149646759f, 0.5585630536079407f, +0.7491348385810852f, 0.18386943638324738f, 0.971721887588501f, 0.8505309820175171f, 0.4525489807128906f, 0.42765340209007263f, 0.5187686085700989f, 0.4043740928173065f, +0.6214696764945984f, 0.5345438718795776f, 0.7960624098777771f, 0.559873640537262f, 0.6979494690895081f, 0.8585207462310791f, 0.847474217414856f, 0.052328839898109436f, +0.17325012385845184f, 0.061076994985342026f, 0.7202548980712891f, 0.8331173658370972f, 0.5736393928527832f, 0.6299102306365967f, 0.31687748432159424f, 0.8270981311798096f, +0.7815057039260864f, 0.2859137952327728f, 0.7275960445404053f, 0.24201960861682892f, 0.6441042423248291f, 0.9517537355422974f, 0.27067649364471436f, 0.7952486872673035f, +0.4632842540740967f, 0.6072502136230469f, 0.975266695022583f, 0.20586027204990387f, 0.074333555996418f, 0.2736295163631439f, 0.10718057304620743f, 0.9125975370407104f, +0.7915798425674438f, 0.3123677670955658f, 0.5537684559822083f, 0.9312453269958496f, 0.8589459657669067f, 0.43938976526260376f, 0.3731479048728943f, 0.03125005215406418f, +0.21673505008220673f, 0.05621898174285889f, 0.7164134979248047f, 0.019107822328805923f, 0.5659503936767578f, 0.6512454748153687f, 0.8061074614524841f, 0.3073124587535858f, +0.025154955685138702f, 0.527359664440155f, 0.6283292770385742f, 0.1874932199716568f, 0.4658109247684479f, 0.8098723292350769f, 0.8309626579284668f, 0.7231656908988953f, +0.7439679503440857f, 0.40549829602241516f, 0.700815737247467f, 0.2633644640445709f, 0.19939261674880981f, 0.5334491729736328f, 0.9536590576171875f, 0.8789807558059692f, +0.9115157127380371f, 0.43862560391426086f, 0.7105578780174255f, 0.9892081022262573f, 0.28349587321281433f, 0.7224060893058777f, 0.3214889168739319f, 0.3121379017829895f, +0.12006101757287979f, 0.6694589853286743f, 0.17342306673526764f, 0.03191552311182022f, 0.6841238141059875f, 0.01954171434044838f, 0.5875471234321594f, 0.3721298277378082f, +0.025648240000009537f, 0.7695770263671875f, 0.1888216733932495f, 0.28642216324806213f, 0.8500581383705139f, 0.6620202660560608f, 0.5818756222724915f, 0.05799625813961029f, +0.3834227919578552f, 0.2502022981643677f, 0.624570906162262f, 0.49923208355903625f, 0.4388851225376129f, 0.3828211724758148f, 0.26601627469062805f, 0.4171195328235626f, +0.04530157148838043f, 0.7237688899040222f, 0.20977824926376343f, 0.8430626392364502f, 0.8298400044441223f, 0.855656623840332f, 0.3678634762763977f, 0.5778059363365173f, +0.05044691264629364f, 0.13281841576099396f, 0.39861539006233215f, 0.8606916069984436f, 0.09247439354658127f, 0.9247101545333862f, 0.7485573887825012f, 0.7659798860549927f, +0.5078129768371582f, 0.6214956045150757f, 0.3256927728652954f, 0.1346295326948166f, 0.4980394244194031f, 0.8764867782592773f, 0.47456562519073486f, 0.5276111960411072f, +0.8094015717506409f, 0.251570463180542f, 0.7325568795204163f, 0.24738675355911255f, 0.4597991704940796f, 0.34514179825782776f, 0.6355096697807312f, 0.8323160409927368f, +0.36318597197532654f, 0.37362465262413025f, 0.12566399574279785f, 0.06505122035741806f, 0.8260106444358826f, 0.2978109121322632f, 0.5888323783874512f, 0.686206579208374f, +0.7089694738388062f, 0.6678945422172546f, 0.4721721112728119f, 0.4485892355442047f, 0.648609459400177f, 0.8072938919067383f, 0.07597042620182037f, 0.48757559061050415f, +0.20597852766513824f, 0.07266794890165329f, 0.5599859356880188f, 0.48371198773384094f, 0.6010847687721252f, 0.05981859192252159f, 0.9377518892288208f, 0.9356961250305176f, +0.218447744846344f, 0.1327844113111496f, 0.8266649842262268f, 0.7925978302955627f, 0.4478387236595154f, 0.34432515501976013f, 0.8902966976165771f, 0.11976752430200577f, +0.749365508556366f, 0.5522473454475403f, 0.5370491743087769f, 0.8766137361526489f, 0.5873093605041504f, 0.46128544211387634f, 0.3495996594429016f, 0.3566129505634308f, +0.8822782635688782f, 0.3597235083580017f, 0.7347091436386108f, 0.4775099456310272f, 0.5473312139511108f, 0.5999380946159363f, 0.4668295085430145f, 0.8466376066207886f, +0.02387039177119732f, 0.7970118522644043f, 0.38556572794914246f, 0.5841817259788513f, 0.7209129333496094f, 0.07217580825090408f, 0.21480371057987213f, 0.489272803068161f, +0.3418196141719818f, 0.3408263325691223f, 0.6256269812583923f, 0.10718858242034912f, 0.5574615001678467f, 0.3044128715991974f, 0.9099475145339966f, 0.10188428312540054f, +0.13041718304157257f, 0.8043453097343445f, 0.05225066468119621f, 0.20445360243320465f, 0.45868995785713196f, 0.314581960439682f, 0.7441253662109375f, 0.7493990063667297f, +0.20448504388332367f, 0.6316917538642883f, 0.17016614973545074f, 0.05327482894062996f, 0.11408213526010513f, 0.7099765539169312f, 0.647472620010376f, 0.3396087884902954f, +0.927403450012207f, 0.5630269646644592f, 0.7439547777175903f, 0.16769856214523315f, 0.4956189692020416f, 0.3803260028362274f, 0.7932846546173096f, 0.668781042098999f, +0.5146297216415405f, 0.4019991159439087f, 0.8796116709709167f, 0.06447439640760422f, 0.899379312992096f, 0.6479325890541077f, 0.26324227452278137f, 0.7495629191398621f, +0.319398432970047f, 0.3484692871570587f, 0.9294337630271912f, 0.13276271522045135f, 0.37205347418785095f, 0.8533207774162292f, 0.9543641805648804f, 0.3462478220462799f, +0.18638242781162262f, 0.7751101851463318f, 0.2498067319393158f, 0.6411479115486145f, 0.6110353469848633f, 0.10991352051496506f, 0.5421419143676758f, 0.8042234778404236f, +0.631300687789917f, 0.3206154406070709f, 0.24397921562194824f, 0.9538413286209106f, 0.585538387298584f, 0.7395239472389221f, 0.8358744382858276f, 0.17316237092018127f, +0.03077019564807415f, 0.7535247802734375f, 0.5997685194015503f, 0.43416765332221985f, 0.580325186252594f, 0.08352616429328918f, 0.10192324966192245f, 0.699887216091156f, +0.7682915329933167f, 0.863040030002594f, 0.8211961388587952f, 0.9404424428939819f, 0.2852998673915863f, 0.10950295627117157f, 0.740902841091156f, 0.0514635294675827f, +0.9925103783607483f, 0.9654169678688049f, 0.48505929112434387f, 0.9765698909759521f, 0.7731311917304993f, 0.5190554857254028f, 0.6473960876464844f, 0.20115017890930176f, +0.4396432638168335f, 0.7849363088607788f, 0.8646186590194702f, 0.17543378472328186f, 0.656896710395813f, 0.025051504373550415f, 0.8769131898880005f, 0.6785830855369568f, +0.6235566139221191f, 0.22960394620895386f, 0.6854838728904724f, 0.06668716669082642f, 0.7967543005943298f, 0.9358779191970825f, 0.4989520311355591f, 0.0036283822264522314f, +0.5259438157081604f, 0.6101304888725281f, 0.15975230932235718f, 0.5452824831008911f, 0.9918078780174255f, 0.9442862868309021f, 0.5847973823547363f, 0.32597365975379944f, +0.2379663735628128f, 0.9173555970191956f, 0.43957263231277466f, 0.7582163214683533f, 0.3730561137199402f, 0.11210712045431137f, 0.4095599353313446f, 0.9802188873291016f, +0.3512195646762848f, 0.03955418989062309f, 0.540226936340332f, 0.5819835662841797f, 0.24098238348960876f, 0.821946918964386f, 0.05157278850674629f, 0.6285600066184998f, +0.28561925888061523f, 0.5986971855163574f, 0.06525871902704239f, 0.2754939794540405f, 0.722315788269043f, 0.9604189395904541f, 0.23566286265850067f, 0.8948671817779541f, +0.9381489753723145f, 0.9288293123245239f, 0.28932806849479675f, 0.9652203321456909f, 0.9187749624252319f, 0.08628007769584656f, 0.05183621868491173f, 0.05459536239504814f, +0.1294974982738495f, 0.9324662685394287f, 0.527821958065033f, 0.8874970078468323f, 0.8304830193519592f, 0.5766451358795166f, 0.25608110427856445f, 0.23828625679016113f, +0.012229963205754757f, 0.08119566738605499f, 0.8317826390266418f, 0.23673850297927856f, 0.6301755905151367f, 0.5660436749458313f, 0.6490988731384277f, 0.25388088822364807f, +0.4727500379085541f, 0.8268986344337463f, 0.21820616722106934f, 0.6670913696289062f, 0.5205869674682617f, 0.7963395714759827f, 0.03513415902853012f, 0.896497368812561f, +0.7076584100723267f, 0.8458898663520813f, 0.6626611948013306f, 0.793410062789917f, 0.35897260904312134f, 0.8112713098526001f, 0.7736932635307312f, 0.6397004127502441f, +0.07360555976629257f, 0.6206903457641602f, 0.4909783899784088f, 0.47985002398490906f, 0.01376021932810545f, 0.7292565107345581f, 0.883520245552063f, 0.7795451283454895f, +0.9547770619392395f, 0.200700044631958f, 0.6138380765914917f, 0.9463630318641663f, 0.07627175003290176f, 0.3120371103286743f, 0.015392678789794445f, 0.4861224293708801f, +0.7504751086235046f, 0.815497875213623f, 0.41592511534690857f, 0.32969892024993896f, 0.2624202370643616f, 0.664740800857544f, 0.8465043902397156f, 0.9366026520729065f, +0.8977082967758179f, 0.7683748006820679f, 0.11201732605695724f, 0.9172691106796265f, 0.30671849846839905f, 0.37089821696281433f, 0.590361475944519f, 0.012834868393838406f, +0.9697223901748657f, 0.4896552264690399f, 0.40433159470558167f, 0.7076776027679443f, 0.3877793252468109f, 0.6459062099456787f, 0.9515710473060608f, 0.883719801902771f, +0.43382367491722107f, 0.6661791801452637f, 0.11805818974971771f, 0.29804185032844543f, 0.8773424029350281f, 0.9509552717208862f, 0.7106471061706543f, 0.3639799952507019f, +0.3282931447029114f, 0.24496252834796906f, 0.30054783821105957f, 0.6657482385635376f, 0.18521137535572052f, 0.7443210482597351f, 0.7933592200279236f, 0.2100292444229126f, +0.5216184258460999f, 0.9976193308830261f, 0.7871524691581726f, 0.3181033134460449f, 0.5189222693443298f, 0.3458350598812103f, 0.4645388126373291f, 0.20174385607242584f, +0.8800529837608337f, 0.5338774919509888f, 0.140053853392601f, 0.2122592329978943f, 0.9020605087280273f, 0.5105555653572083f, 0.8204542994499207f, 0.804246187210083f, +0.4503328800201416f, 0.7504672408103943f, 0.11055094003677368f, 0.9533310532569885f, 0.23182198405265808f, 0.8620400428771973f, 0.9717954993247986f, 0.022838789969682693f, +0.9352380037307739f, 0.16655121743679047f, 0.16195861995220184f, 0.14181789755821228f, 0.6955013871192932f, 0.1919352412223816f, 0.057079970836639404f, 0.34390395879745483f, +0.3665521740913391f, 0.5147813558578491f, 0.6298659443855286f, 0.728036105632782f, 0.8780357837677002f, 0.8830419182777405f, 0.3228723108768463f, 0.6190433502197266f, +0.3453957736492157f, 0.20499901473522186f, 0.9935480356216431f, 0.7491675019264221f, 0.9049039483070374f, 0.9481785297393799f, 0.146036759018898f, 0.6967729926109314f, +0.06799589097499847f, 0.00941681582480669f, 0.6360623240470886f, 0.17598222196102142f, 0.8918428421020508f, 0.6887487173080444f, 0.2807982563972473f, 0.005790764931589365f, +0.6320040225982666f, 0.6619711518287659f, 0.9049197435379028f, 0.3924795985221863f, 0.3717430531978607f, 0.7666711807250977f, 0.1807248294353485f, 0.8735899329185486f, +0.16986553370952606f, 0.6419961452484131f, 0.3509550988674164f, 0.681676983833313f, 0.44675129652023315f, 0.5717934966087341f, 0.5064542293548584f, 0.6746737957000732f, +0.052180711179971695f, 0.05229873210191727f, 0.9071551561355591f, 0.789225161075592f, 0.7448256015777588f, 0.804246187210083f, 0.35328584909439087f, 0.8345323801040649f, +0.9978457689285278f, 0.14402802288532257f, 0.39920687675476074f, 0.8892861604690552f, 0.22684116661548615f, 0.02526267245411873f, 0.8080248832702637f, 0.0194235946983099f, +0.49416083097457886f, 0.9589636921882629f, 0.9596973657608032f, 0.9783202409744263f, 0.986081600189209f, 0.9844754934310913f, 0.6290645003318787f, 0.3754052519798279f, +0.3457152247428894f, 0.5976424813270569f, 0.17620259523391724f, 0.8403452038764954f, 0.9901706576347351f, 0.6894403696060181f, 0.66701340675354f, 0.40022581815719604f, +0.6533433198928833f, 0.5420700907707214f, 0.4119185507297516f, 0.96302330493927f, 0.7479649186134338f, 0.8466736674308777f, 0.3256020247936249f, 0.7896134853363037f, +0.051108237355947495f, 0.4269155263900757f, 0.34026452898979187f, 0.615524172782898f, 0.3387546241283417f, 0.22901202738285065f, 0.8346856236457825f, 0.41714778542518616f, +0.23267997801303864f, 0.8576371669769287f, 0.4040602147579193f, 0.5258492231369019f, 0.2892734408378601f, 0.03147692233324051f, 0.004657975863665342f, 0.20028434693813324f, +0.020122436806559563f, 0.0034428101498633623f, 0.43369510769844055f, 0.03289351612329483f, 0.5247381925582886f, 0.7998275756835938f, 0.055322881788015366f, 0.8295836448669434f, +0.07859151810407639f, 0.23267458379268646f, 0.2926643192768097f, 0.7578957676887512f, 0.3313772976398468f, 0.12365508824586868f, 0.2537522614002228f, 0.47312378883361816f, +0.4504646062850952f, 0.9277100563049316f, 0.6476125121116638f, 0.8840274810791016f, 0.5043041706085205f, 0.7108195424079895f, 0.5068089962005615f, 0.34587353467941284f, +0.6893478035926819f, 0.2573961913585663f, 0.45160531997680664f, 0.8053309321403503f, 0.9778295159339905f, 0.18864306807518005f, 0.7389112710952759f, 0.6960806846618652f, +0.2959398627281189f, 0.5402992963790894f, 0.6048604249954224f, 0.1322639286518097f, 0.5222418904304504f, 0.2773587703704834f, 0.13000041246414185f, 0.024809451773762703f, +0.6364896893501282f, 0.26979589462280273f, 0.434684157371521f, 0.5187050700187683f, 0.4502527713775635f, 0.7325411438941956f, 0.14360411465168f, 0.39986687898635864f, +0.5851211547851562f, 0.19228394329547882f, 0.6061636805534363f, 0.29879480600357056f, 0.6557484269142151f, 0.21400223672389984f, 0.6749038696289062f, 0.18866966664791107f, +0.6043211221694946f, 0.44005611538887024f, 0.6377922296524048f, 0.7591021656990051f, 0.5912482142448425f, 0.4255479872226715f, 0.20093949139118195f, 0.2968050539493561f, +0.08931776136159897f, 0.2592693567276001f, 0.4533972442150116f, 0.22250334918498993f, 0.646665632724762f, 0.08550682663917542f, 0.0387868769466877f, 0.6202285885810852f, +0.9274745583534241f, 0.6108109354972839f, 0.823866605758667f, 0.8167110085487366f, 0.7150939702987671f, 0.6328380703926086f, 0.6461628675460815f, 0.03452836349606514f, +0.19508180022239685f, 0.035867031663656235f, 0.970580518245697f, 0.07118959724903107f, 0.5085878968238831f, 0.7408604025840759f, 0.8082484602928162f, 0.7150499820709229f, +0.39210668206214905f, 0.004783675540238619f, 0.4943873882293701f, 0.3486248254776001f, 0.06524766236543655f, 0.6122915148735046f, 0.012009775266051292f, 0.7172502279281616f, +0.32118290662765503f, 0.9107452630996704f, 0.5670130848884583f, 0.9809300899505615f, 0.5842679738998413f, 0.4917141795158386f, 0.8205588459968567f, 0.5633777379989624f, +0.16132085025310516f, 0.30262017250061035f, 0.6249425411224365f, 0.24484872817993164f, 0.39100053906440735f, 0.8686093091964722f, 0.6551936268806458f, 0.026413148269057274f, +0.5543649196624756f, 0.08249442279338837f, 0.7029948234558105f, 0.2511324882507324f, 0.7329193949699402f, 0.20906196534633636f, 0.7279837727546692f, 0.5547479391098022f, +0.0945931226015091f, 0.7902199029922485f, 0.21351949870586395f, 0.6620209217071533f, 0.13286347687244415f, 0.46720147132873535f, 0.7429227828979492f, 0.8297759294509888f, +0.78538978099823f, 0.9775568842887878f, 0.934665322303772f, 0.21225711703300476f, 0.18896426260471344f, 0.9364875555038452f, 0.026157056912779808f, 0.6277986764907837f, +0.6636785864830017f, 0.07325562834739685f, 0.5188377499580383f, 0.19137853384017944f, 0.3623592257499695f, 0.20581546425819397f, 0.3358655273914337f, 0.4762744605541229f, +0.4692263901233673f, 0.8830986022949219f, 0.6608346104621887f, 0.08083425462245941f, 0.5821168422698975f, 0.8890807032585144f, 0.7427088022232056f, 0.5154392123222351f, +0.8769221305847168f, 0.8339777588844299f, 0.4473980963230133f, 0.9606555104255676f, 0.4088256359100342f, 0.4399459958076477f, 0.289534330368042f, 0.25392961502075195f, +0.5494583249092102f, 0.5842244625091553f, 0.35579150915145874f, 0.7970911264419556f, 0.32386207580566406f, 0.04299045726656914f, 0.7110104560852051f, 0.12433458864688873f, +0.771793782711029f, 0.9774163961410522f, 0.6829473972320557f, 0.7958804368972778f, 0.20588962733745575f, 0.7102168202400208f, 0.21925382316112518f, 0.6408555507659912f, +0.7759309411048889f, 0.9033726453781128f, 0.3668912351131439f, 0.8330897092819214f, 0.5006714463233948f, 0.8211057186126709f, 0.483671635389328f, 0.4950055480003357f, +0.19451852142810822f, 0.023032115772366524f, 0.4204424023628235f, 0.41811516880989075f, 0.4050370454788208f, 0.06744213402271271f, 0.6114871501922607f, 0.9978018403053284f, +0.24763309955596924f, 0.8642326593399048f, 0.04450923949480057f, 0.16089996695518494f, 0.9871991872787476f, 0.05555744841694832f, 0.18855810165405273f, 0.004618773702532053f, +0.06400393694639206f, 0.1397949904203415f, 0.7715826034545898f, 0.8827731013298035f, 0.36242836713790894f, 0.7305105924606323f, 0.9534689784049988f, 0.5397558808326721f, +0.4507066011428833f, 0.4957054853439331f, 0.774326741695404f, 0.1646394431591034f, 0.4689464271068573f, 0.3714155852794647f, 0.568591296672821f, 0.9862359166145325f, +0.5021479725837708f, 0.5631090402603149f, 0.14754579961299896f, 0.47586697340011597f, 0.11165308952331543f, 0.2384871393442154f, 0.7936597466468811f, 0.37906286120414734f, +0.05212829262018204f, 0.26406776905059814f, 0.8541132807731628f, 0.4978564977645874f, 0.09925662726163864f, 0.3006703555583954f, 0.5874777436256409f, 0.10769994556903839f, +0.39724045991897583f, 0.6077349185943604f, 0.6407467126846313f, 0.6892392039299011f, 0.1903914213180542f, 0.3210482597351074f, 0.8352207541465759f, 0.5770560503005981f, +0.8185263872146606f, 0.9463508129119873f, 0.17598623037338257f, 0.7185189723968506f, 0.5679888725280762f, 0.11112795025110245f, 0.37294822931289673f, 0.6953957080841064f, +0.7205420136451721f, 0.6850758790969849f, 0.2542339265346527f, 0.9226571917533875f, 0.04777306318283081f, 0.6611952781677246f, 0.6077417731285095f, 0.10427765548229218f, +0.4219101071357727f, 0.7149779796600342f, 0.22192366421222687f, 0.7754475474357605f, 0.6870833039283752f, 0.1410052627325058f, 0.23289188742637634f, 0.36935558915138245f, +0.2758866548538208f, 0.2924119830131531f, 0.23703444004058838f, 0.5028741359710693f, 0.9716407656669617f, 0.833260178565979f, 0.4652724266052246f, 0.26978087425231934f, +0.7049933671951294f, 0.06266406178474426f, 0.3416546583175659f, 0.7710890173912048f, 0.8796519041061401f, 0.9226518869400024f, 0.6411920189857483f, 0.9002344608306885f, +0.5208137631416321f, 0.4269108474254608f, 0.8885385990142822f, 0.051861319690942764f, 0.4664933383464813f, 0.03795268386602402f, 0.01615736074745655f, 0.8027001619338989f, +0.5030381679534912f, 0.7744269371032715f, 0.9041978120803833f, 0.15082953870296478f, 0.7985468506813049f, 0.42750656604766846f, 0.6258354187011719f, 0.42917564511299133f, +0.5499619245529175f, 0.813245952129364f, 0.8489341139793396f, 0.2602534592151642f, 0.7651888132095337f, 0.08881856501102448f, 0.6978698372840881f, 0.25197264552116394f,}; + +float In_sigma[1024] = { +0.11689265817403793f, 0.2467169314622879f, 0.35400351881980896f, 0.4395318627357483f, 0.36204347014427185f, 0.8021157383918762f, 0.747388482093811f, 0.07204835116863251f, +0.10232573747634888f, 0.7581320405006409f, 0.48847609758377075f, 0.15311197936534882f, 0.47137367725372314f, 0.24634568393230438f, 0.08502849191427231f, 0.8770579099655151f, +0.1620415896177292f, 0.49037110805511475f, 0.39821043610572815f, 0.39397427439689636f, 0.5838229060173035f, 0.07900189608335495f, 0.31255340576171875f, 0.24150921404361725f, +0.780320405960083f, 0.7763270139694214f, 0.2575090229511261f, 0.7333694100379944f, 0.8334662318229675f, 0.41773977875709534f, 0.8050299882888794f, 0.8769149780273438f, +0.8292848467826843f, 0.3372485935688019f, 0.988706111907959f, 0.4455983340740204f, 0.4893266558647156f, 0.0403321199119091f, 0.868872344493866f, 0.6382668018341064f, +0.4082915186882019f, 0.7583655118942261f, 0.3854408264160156f, 0.8672602772712708f, 0.15097272396087646f, 0.8265698552131653f, 0.09626668691635132f, 0.33828940987586975f, +0.31423434615135193f, 0.8646763563156128f, 0.685523509979248f, 0.5134385228157043f, 0.5932109951972961f, 0.15475177764892578f, 0.6485854387283325f, 0.4720695912837982f, +0.04150087758898735f, 0.3990926444530487f, 0.4816795587539673f, 0.13091139495372772f, 0.6276296973228455f, 0.8205690979957581f, 0.9322721362113953f, 0.34068381786346436f, +0.12974457442760468f, 0.035310156643390656f, 0.6886703372001648f, 0.8505353331565857f, 0.7704477310180664f, 0.5905230045318604f, 0.6341044306755066f, 0.3873700797557831f, +0.8188624382019043f, 0.8457552790641785f, 0.9261512756347656f, 0.7310562133789062f, 0.29111799597740173f, 0.586874783039093f, 0.574058473110199f, 0.6101303696632385f, +0.8409935832023621f, 0.5936986207962036f, 0.088778555393219f, 0.023994630202651024f, 0.8011577725410461f, 0.8912450075149536f, 0.2746361792087555f, 0.32095372676849365f, +0.26131370663642883f, 0.7738499045372009f, 0.16021504998207092f, 0.6746912598609924f, 0.24674095213413239f, 0.8093141317367554f, 0.40956178307533264f, 0.6056181192398071f, +0.9471726417541504f, 0.5877026915550232f, 0.3201487064361572f, 0.04194461554288864f, 0.8063295483589172f, 0.5467976927757263f, 0.29223009943962097f, 0.45562565326690674f, +0.954988956451416f, 0.17467479407787323f, 0.5795596241950989f, 0.8569537401199341f, 0.5859256386756897f, 0.5748192667961121f, 0.33516940474510193f, 0.899272620677948f, +0.27416136860847473f, 0.5170063972473145f, 0.6964167356491089f, 0.5073971748352051f, 0.9418360590934753f, 0.1329541802406311f, 0.9141817688941956f, 0.37718144059181213f, +0.5931134223937988f, 0.4553605616092682f, 0.46964284777641296f, 0.7307958006858826f, 0.9483202695846558f, 0.8007456660270691f, 0.5530227422714233f, 0.8884268999099731f, +0.26341256499290466f, 0.9718483686447144f, 0.45165130496025085f, 0.7455402612686157f, 0.13348351418972015f, 0.9238466620445251f, 0.4795721173286438f, 0.5183440446853638f, +0.9730497002601624f, 0.3863202631473541f, 0.7531036734580994f, 0.5909245610237122f, 0.8430361151695251f, 0.4874168336391449f, 0.23161742091178894f, 0.4374247193336487f, +0.38854944705963135f, 0.523651659488678f, 0.5531869530677795f, 0.44617071747779846f, 0.15601147711277008f, 0.8724319338798523f, 0.2178734689950943f, 0.05484866350889206f, +0.8640298247337341f, 0.3444167375564575f, 0.18827804923057556f, 0.7781029939651489f, 0.35136163234710693f, 0.834035336971283f, 0.7655162215232849f, 0.9706397652626038f, +0.45952919125556946f, 0.8991692066192627f, 0.04962141439318657f, 0.883746862411499f, 0.6199917197227478f, 0.5095583200454712f, 0.4211578667163849f, 0.45683753490448f, +0.6555387377738953f, 0.7301681041717529f, 0.265340119600296f, 0.9574350714683533f, 0.6945063471794128f, 0.6725607514381409f, 0.19358299672603607f, 0.39031609892845154f, +0.42531999945640564f, 0.22607216238975525f, 0.7667399644851685f, 0.2351880520582199f, 0.09291572123765945f, 0.00828290730714798f, 0.5082283616065979f, 0.6393885612487793f, +0.6284805536270142f, 0.3692794740200043f, 0.23162008821964264f, 0.8930362462997437f, 0.0660834088921547f, 0.8024090528488159f, 0.7930588722229004f, 0.9922392964363098f, +0.4544239640235901f, 0.8984193801879883f, 0.4325515627861023f, 0.8466725945472717f, 0.9714475274085999f, 0.9687372446060181f, 0.9302032589912415f, 0.8579506874084473f, +0.0301801897585392f, 0.5409030914306641f, 0.6993503570556641f, 0.5328359603881836f, 0.40603265166282654f, 0.6067100167274475f, 0.7235324382781982f, 0.07070836424827576f, +0.5900334119796753f, 0.29856076836586f, 0.21763113141059875f, 0.7326951026916504f, 0.7193416357040405f, 0.4338211417198181f, 0.4409724473953247f, 0.048028118908405304f, +0.06018882244825363f, 0.9231281280517578f, 0.3362497091293335f, 0.08629199862480164f, 0.11896231025457382f, 0.4477853775024414f, 0.10548338294029236f, 0.505111038684845f, +0.6027252674102783f, 0.46420443058013916f, 0.556382954120636f, 0.6857425570487976f, 0.4119977355003357f, 0.7343285083770752f, 0.11917707324028015f, 0.5406915545463562f, +0.8227187395095825f, 0.31960529088974f, 0.8042799830436707f, 0.0774589255452156f, 0.2654269337654114f, 0.9590876698493958f, 0.7627483010292053f, 0.4788171052932739f, +0.5101990699768066f, 0.6234384775161743f, 0.4945291578769684f, 0.019590256735682487f, 0.4909948408603668f, 0.09558270871639252f, 0.3920014500617981f, 0.7703737020492554f, +0.0016195873031392694f, 0.6787610054016113f, 0.1950424313545227f, 0.1876571625471115f, 0.7310020923614502f, 0.10632246732711792f, 0.49586769938468933f, 0.011972982436418533f, +0.0949205607175827f, 0.9907462000846863f, 0.40861988067626953f, 0.9353277087211609f, 0.29833313822746277f, 0.9238429665565491f, 0.3056422472000122f, 0.14690981805324554f, +0.1316189020872116f, 0.6328217387199402f, 0.2042873203754425f, 0.40580087900161743f, 0.6063655018806458f, 0.8072845935821533f, 0.49953097105026245f, 0.5017461180686951f, +0.6992312669754028f, 0.10108249634504318f, 0.011805588379502296f, 0.6600307822227478f, 0.801591694355011f, 0.43874213099479675f, 0.648629367351532f, 0.027067584916949272f, +0.5425927042961121f, 0.044199541211128235f, 0.5027216076850891f, 0.1604902297258377f, 0.36498433351516724f, 0.45821893215179443f, 0.5722197890281677f, 0.9101643562316895f, +0.6786521673202515f, 0.07056745886802673f, 0.14276549220085144f, 0.8167349100112915f, 0.7060516476631165f, 0.7517520785331726f, 0.5913997888565063f, 0.0018866589525714517f, +0.7602080702781677f, 0.07765612006187439f, 0.5388971567153931f, 0.03037191741168499f, 0.5165350437164307f, 0.7961496710777283f, 0.6529839634895325f, 0.10343248397111893f, +0.09303322434425354f, 0.11425324529409409f, 0.49350517988204956f, 0.3027268946170807f, 0.7436472177505493f, 0.4509586989879608f, 0.39866530895233154f, 0.7628656625747681f, +0.5755448341369629f, 0.7603373527526855f, 0.9788110256195068f, 0.7695431709289551f, 0.3550418019294739f, 0.21567820012569427f, 0.9956938028335571f, 0.8039448261260986f, +0.0018132558325305581f, 0.18977326154708862f, 0.4303894639015198f, 0.7240707278251648f, 0.6900487542152405f, 0.744254469871521f, 0.6355741620063782f, 0.9342206120491028f, +0.16800838708877563f, 0.9573408961296082f, 0.2810388505458832f, 0.6049441695213318f, 0.6481732726097107f, 0.9232592582702637f, 0.838001549243927f, 0.21222759783267975f, +0.34920233488082886f, 0.31245899200439453f, 0.9395115375518799f, 0.35210609436035156f, 0.7654876708984375f, 0.6942261457443237f, 0.00754331611096859f, 0.3358291983604431f, +0.8444388508796692f, 0.8922650218009949f, 0.8733468055725098f, 0.1332407146692276f, 0.7767027616500854f, 0.0018076130654662848f, 0.13771627843379974f, 0.5648003220558167f, +0.8900164365768433f, 0.6461324095726013f, 0.688957691192627f, 0.6724677085876465f, 0.32536619901657104f, 0.45329222083091736f, 0.7098193764686584f, 0.28717824816703796f, +0.9944669604301453f, 0.1656416803598404f, 0.5795189142227173f, 0.09528867900371552f, 0.4117509722709656f, 0.5837749242782593f, 0.8199186325073242f, 0.40774837136268616f, +0.7566255331039429f, 0.8657139539718628f, 0.5927879214286804f, 0.1577250361442566f, 0.5600276589393616f, 0.7772480845451355f, 0.7369570136070251f, 0.4535496234893799f, +0.1168784350156784f, 0.36283981800079346f, 0.10096470266580582f, 0.23862658441066742f, 0.8859362006187439f, 0.7013126015663147f, 0.047634828835725784f, 0.32632166147232056f, +0.6607517600059509f, 0.12112850695848465f, 0.9673690795898438f, 0.8418400287628174f, 0.5208796262741089f, 0.717860996723175f, 0.887082576751709f, 0.44326257705688477f, +0.1631961464881897f, 0.0462222658097744f, 0.9811345338821411f, 0.5353263020515442f, 0.008691161870956421f, 0.8553956747055054f, 0.4193856120109558f, 0.740432858467102f, +0.9482516050338745f, 0.8152281045913696f, 0.4591265916824341f, 0.5676935911178589f, 0.28397053480148315f, 0.21825458109378815f, 0.13500957190990448f, 0.8190909624099731f, +0.7962963581085205f, 0.6488336324691772f, 0.0019086772808805108f, 0.4235464930534363f, 0.05577125400304794f, 0.47951868176460266f, 0.9745616912841797f, 0.4976494312286377f, +0.11211340874433517f, 0.03751678392291069f, 0.05792658403515816f, 0.8310478329658508f, 0.24481923878192902f, 0.7678748965263367f, 0.1423802375793457f, 0.12324778735637665f, +0.9016410112380981f, 0.6726689338684082f, 0.08516897261142731f, 0.9435439109802246f, 0.6818846464157104f, 0.5497561097145081f, 0.24496300518512726f, 0.7747273445129395f, +0.44522762298583984f, 0.16037137806415558f, 0.026090657338500023f, 0.19063270092010498f, 0.818203866481781f, 0.36031806468963623f, 0.18753941357135773f, 0.3798338770866394f, +0.03798162192106247f, 0.7890657782554626f, 0.10242816060781479f, 0.4302533268928528f, 0.5391097664833069f, 0.6117005944252014f, 0.47956788539886475f, 0.16976916790008545f, +0.26217740774154663f, 0.5734463334083557f, 0.44269371032714844f, 0.007691061124205589f, 0.2173902988433838f, 0.8239493370056152f, 0.18641237914562225f, 0.12716877460479736f, +0.05309422314167023f, 0.5637578368186951f, 0.8523844480514526f, 0.011856290511786938f, 0.12607184052467346f, 0.3616030216217041f, 0.8186268210411072f, 0.1630447655916214f, +0.12537120282649994f, 0.9064573645591736f, 0.7557605504989624f, 0.11284851282835007f, 0.23727433383464813f, 0.350187748670578f, 0.6676953434944153f, 0.33825868368148804f, +0.7902055978775024f, 0.954827606678009f, 0.32207611203193665f, 0.2727430462837219f, 0.026725634932518005f, 0.3932984173297882f, 0.7633886337280273f, 0.6128203272819519f, +0.30372586846351624f, 0.6097389459609985f, 0.3061111867427826f, 0.7558954358100891f, 0.6880775690078735f, 0.2763102948665619f, 0.05391868203878403f, 0.5340862274169922f, +0.8245275020599365f, 0.985747218132019f, 0.723487377166748f, 0.13036665320396423f, 0.4427930414676666f, 0.6840543746948242f, 0.9334239363670349f, 0.10305062681436539f, +0.7316536903381348f, 0.4168205261230469f, 0.15295885503292084f, 0.6556150317192078f, 0.16324569284915924f, 0.05100661516189575f, 0.8958780169487f, 0.5166792869567871f, +0.7001821994781494f, 0.9443345069885254f, 0.8308843970298767f, 0.11758160591125488f, 0.10146057605743408f, 0.10162842273712158f, 0.07098488509654999f, 0.17203590273857117f, +0.6045157313346863f, 0.18498972058296204f, 0.2930389940738678f, 0.0375409796833992f, 0.0718819797039032f, 0.46520817279815674f, 0.027045132592320442f, 0.1604020744562149f, +0.9777383804321289f, 0.6009768843650818f, 0.8727343678474426f, 0.7317337393760681f, 0.373760849237442f, 0.1552685648202896f, 0.5959195494651794f, 0.923004686832428f, +0.3376121520996094f, 0.9510446786880493f, 0.3992087244987488f, 0.591271162033081f, 0.059340327978134155f, 0.37558722496032715f, 0.31846535205841064f, 0.21400128304958344f, +0.40220239758491516f, 0.6996378898620605f, 0.5132907629013062f, 0.9635089635848999f, 0.2705954611301422f, 0.9889512658119202f, 0.8588915467262268f, 0.522341251373291f, +0.003940686583518982f, 0.7453941106796265f, 0.09352891892194748f, 0.48205050826072693f, 0.5924477577209473f, 0.41747549176216125f, 0.019311845302581787f, 0.9238364696502686f, +0.08085320144891739f, 0.8279151916503906f, 0.7779269814491272f, 0.34924188256263733f, 0.5497533082962036f, 0.6104522347450256f, 0.5720056891441345f, 0.5484848022460938f, +0.619345486164093f, 0.8031582832336426f, 0.8759815096855164f, 0.5690193772315979f, 0.7703840732574463f, 0.9980083107948303f, 0.6119787693023682f, 0.4251292943954468f, +0.7730526328086853f, 0.24040445685386658f, 0.7422881722450256f, 0.8617063760757446f, 0.15257684886455536f, 0.5328935384750366f, 0.1468314677476883f, 0.14519181847572327f, +0.2713277041912079f, 0.9136950373649597f, 0.9007433652877808f, 0.6116337180137634f, 0.5021854639053345f, 0.3689442276954651f, 0.1319066733121872f, 0.09138455241918564f, +0.15821576118469238f, 0.7425982356071472f, 0.8720356225967407f, 0.8397868871688843f, 0.9014117121696472f, 0.41579198837280273f, 0.9456367492675781f, 0.8623605370521545f, +0.3685755729675293f, 0.7515187859535217f, 0.7820186018943787f, 0.1861923485994339f, 0.31441256403923035f, 0.5142716765403748f, 0.12228439748287201f, 0.9255797863006592f, +0.09637375921010971f, 0.3504845201969147f, 0.14088808000087738f, 0.11502749472856522f, 0.6213272213935852f, 0.3297007381916046f, 0.29696351289749146f, 0.7034716606140137f, +0.3596513569355011f, 0.7558456063270569f, 0.9337987303733826f, 0.336419016122818f, 0.4247473180294037f, 0.0881442278623581f, 0.37021955847740173f, 0.8958501219749451f, +0.16550792753696442f, 0.9770092368125916f, 0.22535711526870728f, 0.9663206934928894f, 0.7554195523262024f, 0.7815595865249634f, 0.25235092639923096f, 0.054371338337659836f, +0.07548355311155319f, 0.5322763323783875f, 0.854196310043335f, 0.12972000241279602f, 0.3584443926811218f, 0.5590676069259644f, 0.16670815646648407f, 0.29862460494041443f, +0.8583824634552002f, 0.03429197147488594f, 0.3543001711368561f, 0.4601571559906006f, 0.8543834686279297f, 0.2921408712863922f, 0.2594376504421234f, 0.49281400442123413f, +0.9201021790504456f, 0.5465582609176636f, 0.03631199523806572f, 0.2908974587917328f, 0.043304555118083954f, 0.19665521383285522f, 0.30516517162323f, 0.15579508244991302f, +0.9015741348266602f, 0.16419146955013275f, 0.40220311284065247f, 0.5534806847572327f, 0.35675057768821716f, 0.4175119996070862f, 0.16465775668621063f, 0.682349443435669f, +0.16003325581550598f, 0.1394972801208496f, 0.9809169173240662f, 0.20103633403778076f, 0.9884829521179199f, 0.3515200614929199f, 0.2164960354566574f, 0.16569654643535614f, +0.13697488605976105f, 0.6454641819000244f, 0.42883095145225525f, 0.6638627648353577f, 0.13408292829990387f, 0.7496783137321472f, 0.4493669867515564f, 0.9011332988739014f, +0.02334117703139782f, 0.06639384478330612f, 0.5759127736091614f, 0.21562451124191284f, 0.730928361415863f, 0.10239692777395248f, 0.902746319770813f, 0.7705646753311157f, +0.8151745796203613f, 0.3242127597332001f, 0.5488758683204651f, 0.12319988012313843f, 0.8946775794029236f, 0.589245617389679f, 0.367146760225296f, 0.4890059232711792f, +0.7180240750312805f, 0.7522377371788025f, 0.5063939690589905f, 0.09991472214460373f, 0.5353367328643799f, 0.4761160910129547f, 0.15066424012184143f, 0.39127734303474426f, +0.4256579875946045f, 0.45398184657096863f, 0.7843067646026611f, 0.567985475063324f, 0.9182990193367004f, 0.12352035194635391f, 0.3993627727031708f, 0.904740035533905f, +0.7342119216918945f, 0.27705323696136475f, 0.7488490343093872f, 0.7010346055030823f, 0.7894091010093689f, 0.3089301288127899f, 0.6760730147361755f, 0.6100236177444458f, +0.8980515599250793f, 0.4058818817138672f, 0.5747562646865845f, 0.7425408959388733f, 0.6039819717407227f, 0.21052156388759613f, 0.02389276772737503f, 0.32814064621925354f, +0.8139840364456177f, 0.6776283979415894f, 0.6404213905334473f, 0.9388431310653687f, 0.3923338055610657f, 0.24888876080513f, 0.8937052488327026f, 0.80271977186203f, +0.5072593092918396f, 0.2510360777378082f, 0.26573124527931213f, 0.4005729556083679f, 0.2737358808517456f, 0.3456805944442749f, 0.9717509746551514f, 0.346527636051178f, +0.1388290375471115f, 0.5591649413108826f, 0.02301642671227455f, 0.45739176869392395f, 0.7061852216720581f, 0.790289580821991f, 0.39669662714004517f, 0.2082621455192566f, +0.8356881141662598f, 0.14609341323375702f, 0.8591567277908325f, 0.34549108147621155f, 0.7685353755950928f, 0.989119827747345f, 0.6361899971961975f, 0.4380817115306854f, +0.9033569097518921f, 0.6997379064559937f, 0.4480552077293396f, 0.5990074872970581f, 0.675520658493042f, 0.059193406254053116f, 0.593837320804596f, 0.51060950756073f, +0.9771186709403992f, 0.10578560829162598f, 0.8703282475471497f, 0.5799720883369446f, 0.3659078776836395f, 0.9799389839172363f, 0.21820193529129028f, 0.4417819082736969f, +0.6776696443557739f, 0.055717989802360535f, 0.8073399066925049f, 0.935375452041626f, 0.5239293575286865f, 0.6521480083465576f, 0.10747981816530228f, 0.3953242003917694f, +0.48728683590888977f, 0.3788796663284302f, 0.17494399845600128f, 0.36053141951560974f, 0.4040198028087616f, 0.8247475624084473f, 0.6015637516975403f, 0.13975487649440765f, +0.9385514855384827f, 0.9211812019348145f, 0.5659300684928894f, 0.29299142956733704f, 0.4725864827632904f, 0.7418127059936523f, 0.08799669146537781f, 0.2515806257724762f, +0.11886758357286453f, 0.2013980895280838f, 0.7535749077796936f, 0.45877525210380554f, 0.022275350987911224f, 0.7191108465194702f, 0.9838333129882812f, 0.7398595213890076f, +0.8545344471931458f, 0.8214917778968811f, 0.7144781351089478f, 0.0863775685429573f, 0.2429281622171402f, 0.5723655223846436f, 0.40922001004219055f, 0.8676475286483765f, +0.2558332085609436f, 0.8236950635910034f, 0.9382625222206116f, 0.3487195372581482f, 0.012564367614686489f, 0.4142198860645294f, 0.2282532900571823f, 0.6891986727714539f, +0.667195737361908f, 0.8055455684661865f, 0.7325087189674377f, 0.05404912680387497f, 0.5026273727416992f, 0.5397486090660095f, 0.8874012231826782f, 0.6460388898849487f, +0.1473940759897232f, 0.7836869359016418f, 0.2006499022245407f, 0.49742040038108826f, 0.78499835729599f, 0.35645076632499695f, 0.7748048901557922f, 0.6778374910354614f, +0.24995192885398865f, 0.6327089071273804f, 0.5497844219207764f, 0.3396678566932678f, 0.43897438049316406f, 0.47058185935020447f, 0.9855241179466248f, 0.8319184184074402f, +0.2508631944656372f, 0.1348162591457367f, 0.033628035336732864f, 0.08152353763580322f, 0.8991274237632751f, 0.013808795250952244f, 0.24169035255908966f, 0.9108691215515137f, +0.8253629803657532f, 0.6780310869216919f, 0.15916922688484192f, 0.36952489614486694f, 0.1305316537618637f, 0.7981705665588379f, 0.7622849941253662f, 0.4413783848285675f, +0.4987727701663971f, 0.016869988292455673f, 0.9767042994499207f, 0.724221408367157f, 0.8523921966552734f, 0.3821103870868683f, 0.9956909418106079f, 0.5074256062507629f, +0.532016396522522f, 0.7785588502883911f, 0.7480006814002991f, 0.2207447737455368f, 0.2156406044960022f, 0.8020538091659546f, 0.7752079963684082f, 0.7666467428207397f, +0.28807148337364197f, 0.44216910004615784f, 0.9059783220291138f, 0.5866817235946655f, 0.43455013632774353f, 0.9056369066238403f, 0.33689698576927185f, 0.9487079381942749f, +0.06916341930627823f, 0.5402114391326904f, 0.26469892263412476f, 0.5024582743644714f, 0.1612725555896759f, 0.037557151168584824f, 0.5208646655082703f, 0.3162776231765747f, +0.003066270612180233f, 0.27567601203918457f, 0.8926215767860413f, 0.8930356502532959f, 0.9501600861549377f, 0.6628292798995972f, 0.28915801644325256f, 0.19827231764793396f, +0.5275048613548279f, 0.17821544408798218f, 0.8159530162811279f, 0.04747926443815231f, 0.4674992859363556f, 0.3598923981189728f, 0.8993982076644897f, 0.6085290908813477f, +0.7711524367332458f, 0.6696610450744629f, 0.41640082001686096f, 0.13314351439476013f, 0.18926219642162323f, 0.6521342396736145f, 0.6422716379165649f, 0.3002513349056244f, +0.2779456675052643f, 0.8342841267585754f, 0.5171205997467041f, 0.5413863658905029f, 0.18911059200763702f, 0.6344980597496033f, 0.4966869056224823f, 0.8448182940483093f, +0.9720013737678528f, 0.41549035906791687f, 0.060339704155921936f, 0.867717981338501f, 0.7116788625717163f, 0.7767323851585388f, 0.5768259763717651f, 0.1466301828622818f, +0.25996240973472595f, 0.631668210029602f, 0.6588252782821655f, 0.8212853670120239f, 0.8574704527854919f, 0.9748243689537048f, 0.7069037556648254f, 0.7277145981788635f, +0.9337401390075684f, 0.9515047669410706f, 0.4619240164756775f, 0.3363686501979828f, 0.5261374711990356f, 0.022214099764823914f, 0.004720483906567097f, 0.1217842847108841f, +0.019976824522018433f, 0.3127657473087311f, 0.9258744716644287f, 0.36085057258605957f, 0.33290156722068787f, 0.6631250977516174f, 0.09495945274829865f, 0.08185221999883652f, +0.33456894755363464f, 0.2871270775794983f, 0.20957107841968536f, 0.045960091054439545f, 0.6409637928009033f, 0.2651117444038391f, 0.5790846943855286f, 0.8182479739189148f, +0.2760734558105469f, 0.22461915016174316f, 0.3103902339935303f, 0.2892277240753174f, 0.4424734115600586f, 0.8889606595039368f, 0.9764031767845154f, 0.15194374322891235f, +0.9577311277389526f, 0.26468172669410706f, 0.6613034009933472f, 0.9601970911026001f, 0.373727947473526f, 0.007485379930585623f, 0.7014734148979187f, 0.7339258790016174f, +0.7730243802070618f, 0.05939977243542671f, 0.4876604676246643f, 0.8530676960945129f, 0.16172432899475098f, 0.7556551098823547f, 0.41928744316101074f, 0.385524183511734f, +0.29883429408073425f, 0.16149351000785828f, 0.004572316538542509f, 0.31317493319511414f, 0.09326054155826569f, 0.058103471994400024f, 0.4712304174900055f, 0.7098045945167542f, +0.16637668013572693f, 0.1790591925382614f, 0.2858305871486664f, 0.38671016693115234f, 0.6913639307022095f, 0.9060277938842773f, 0.1847514808177948f, 0.35200175642967224f, +0.691990077495575f, 0.38661473989486694f, 0.39323148131370544f, 0.6882504820823669f, 0.4887654185295105f, 0.03763554245233536f, 0.5161174535751343f, 0.12924166023731232f, +0.41626793146133423f, 0.6575502157211304f, 0.9580339193344116f, 0.6333345770835876f, 0.651229202747345f, 0.4648277163505554f, 0.5281615257263184f, 0.348823219537735f, +0.7843822240829468f, 0.029953869059681892f, 0.19720704853534698f, 0.3816032409667969f, 0.34541627764701843f, 0.06242276728153229f, 0.09179863333702087f, 0.22804687917232513f,}; + +// Outputs + +float Out_x[2048] = { +0.3674013316631317f, 0.07299423962831497f, 0.20145273208618164f, -0.13362710177898407f, 0.06622416526079178f, 0.017177404835820198f, 0.22923976182937622f, 0.0686584934592247f, +0.20057275891304016f, 0.031244346871972084f, 0.26036930084228516f, -0.19417248666286469f, 0.1491304188966751f, 0.17123928666114807f, 0.22223007678985596f, 0.022208867594599724f, +0.29080730676651f, 0.07788332551717758f, -0.006121812388300896f, -0.21303439140319824f, 0.2132083922624588f, 0.039623361080884933f, 0.3642404079437256f, 0.10715588927268982f, +0.2464420050382614f, -0.12414322793483734f, 0.32796603441238403f, 0.003462474327534437f, -0.0758163332939148f, -0.023900451138615608f, 0.3085705637931824f, 0.13183198869228363f, +0.41522276401519775f, 0.15067604184150696f, 0.10532091557979584f, -0.07567983120679855f, 0.40855172276496887f, -0.16085971891880035f, 0.1415555328130722f, 0.08067471534013748f, +0.36441725492477417f, -0.06407608091831207f, 0.24309957027435303f, -0.0459878072142601f, 0.12175268679857254f, 0.07869434356689453f, 0.22014279663562775f, 0.09697768092155457f, +0.30199918150901794f, 0.025510426610708237f, 0.19753719866275787f, -0.04966748133301735f, 0.043870020657777786f, -0.10590315610170364f, 0.3644709885120392f, 0.1852845996618271f, +0.23058824241161346f, -0.08285145461559296f, 0.34032702445983887f, -0.05664307624101639f, 0.33229580521583557f, 0.32738229632377625f, 0.08772490918636322f, -0.1224224641919136f, +0.423434853553772f, 0.021324748173356056f, -0.023496214300394058f, 0.010722503066062927f, 0.15102633833885193f, -0.031562693417072296f, 0.2148701250553131f, 0.11828479915857315f, +0.1715228259563446f, -0.19180089235305786f, 0.44087061285972595f, -0.2887379229068756f, 0.12161170691251755f, 0.3300592303276062f, 0.2521006762981415f, 0.076515331864357f, +0.21822863817214966f, 0.15784621238708496f, 0.2649524211883545f, 0.02101503498852253f, 0.2437254637479782f, -0.02109784632921219f, 0.29216206073760986f, -0.19997386634349823f, +0.2472320795059204f, 0.0423908494412899f, 0.18674150109291077f, -0.045602377504110336f, 0.1932198405265808f, -0.013546464964747429f, 0.37750479578971863f, 0.01340490859001875f, +0.2879870533943176f, 0.08223339915275574f, 0.2501067519187927f, -0.015874894335865974f, 0.33463743329048157f, -0.05468413233757019f, 0.016642168164253235f, 0.014692581258714199f, +0.08085166662931442f, -0.010570728220045567f, 0.33757248520851135f, -0.02276238054037094f, 0.27798712253570557f, -0.06070571020245552f, 0.1753288209438324f, 0.04596125707030296f, +0.08687669783830643f, 0.026084506884217262f, 0.2468932718038559f, 0.03185927867889404f, 0.33305907249450684f, 0.04612235724925995f, 0.26889532804489136f, -0.19789764285087585f, +0.34998252987861633f, -0.1852187216281891f, 0.11978935450315475f, 0.15792128443717957f, 0.25096502900123596f, -0.09049329161643982f, 0.10444974899291992f, 0.18135105073451996f, +0.06400205940008163f, -0.021825898438692093f, 0.40318092703819275f, -0.0484030656516552f, 0.27997633814811707f, 0.23229901492595673f, 0.14370889961719513f, -0.24563738703727722f, +0.1953999400138855f, -0.05884880945086479f, 0.16026556491851807f, 0.011035111732780933f, 0.1680259108543396f, 0.12688927352428436f, 0.4453517198562622f, 0.053705912083387375f, +0.2052251100540161f, 0.1653064787387848f, 0.20096759498119354f, -0.12889942526817322f, 0.13597039878368378f, 0.020909873768687248f, 0.20785149931907654f, -0.04869209602475166f, +0.0063413591124117374f, 0.03589305281639099f, 0.12238851189613342f, 0.13637380301952362f, 0.4451405107975006f, -0.0978928655385971f, 0.2984052300453186f, -0.07099688798189163f, +0.2384197860956192f, -0.02789093181490898f, 0.2131316214799881f, 0.10312465578317642f, 0.2549988329410553f, -0.26899129152297974f, 0.14875774085521698f, 0.06528250128030777f, +0.09531953930854797f, 0.08652131259441376f, 0.27264726161956787f, 0.08209912478923798f, 0.2523857653141022f, 0.003602809039875865f, 0.41493991017341614f, -0.01421725656837225f, +0.20453979074954987f, 0.08300912380218506f, 0.24918639659881592f, 0.02752697840332985f, 0.27983856201171875f, -0.0005268404493108392f, 0.17257706820964813f, -0.08668003976345062f, +0.19900096952915192f, -0.10647443681955338f, 0.13921618461608887f, -0.021199382841587067f, 0.2660944163799286f, 0.059879228472709656f, 0.33645936846733093f, 0.06637105345726013f, +0.13994239270687103f, -0.09393536299467087f, 0.3791464567184448f, -0.052492979913949966f, 0.14452804625034332f, -0.1549854427576065f, 0.32451656460762024f, 0.22300221025943756f, +0.13245540857315063f, -0.0045321425423026085f, 0.3552628755569458f, -0.09757242351770401f, 0.290493905544281f, -0.045261070132255554f, 0.030361291021108627f, 0.18110769987106323f, +0.13325810432434082f, 0.0781092643737793f, 0.43753400444984436f, 0.0689648985862732f, 0.30496451258659363f, -0.13436679542064667f, 0.1099710538983345f, 0.04491032660007477f, +0.22795529663562775f, -0.22621531784534454f, 0.20586055517196655f, 0.21981576085090637f, 0.2870180308818817f, -0.025812121108174324f, 0.3309614956378937f, 0.03522571176290512f, +0.13095726072788239f, -0.05608547851443291f, 0.3666917681694031f, 0.05673566088080406f, 0.2562059462070465f, -0.09921761602163315f, 0.1635650396347046f, 0.10371150821447372f, +-0.01616753078997135f, -0.042102545499801636f, 0.4689088463783264f, -0.030752740800380707f, 0.1390729546546936f, 0.11633192002773285f, 0.3447546362876892f, 0.03952989727258682f, +0.3425804674625397f, -0.01555558666586876f, 0.13852785527706146f, -0.0950864925980568f, 0.242001473903656f, 0.2021743804216385f, 0.27581530809402466f, -0.09049544483423233f, +0.3072648048400879f, 0.08203794062137604f, 0.17868083715438843f, -0.08532576262950897f, 0.17597715556621552f, 0.12922506034374237f, 0.2898835241794586f, -0.04240588843822479f, +0.23844386637210846f, 0.0520663820207119f, 0.18578724563121796f, -0.0011460495879873633f, 0.22259056568145752f, -0.04113715514540672f, 0.26846280694007874f, -0.08656236529350281f, +0.32090529799461365f, 0.05710636079311371f, 0.2052202671766281f, 0.1096583753824234f, 0.10470753163099289f, -0.2177446186542511f, 0.29120153188705444f, 0.1218048632144928f, +0.22868256270885468f, 0.21152552962303162f, 0.317672461271286f, -0.1677304357290268f, 0.14292064309120178f, 0.1296163946390152f, 0.30895450711250305f, -0.12347439676523209f, +0.11082492023706436f, -0.11223950237035751f, 0.12050198018550873f, -0.0850236564874649f, 0.4308348000049591f, 0.10700906068086624f, 0.19286538660526276f, 0.12396980822086334f, +0.11132515966892242f, 0.15651938319206238f, 0.20620259642601013f, -0.02812988869845867f, 0.2771626114845276f, 0.012917679734528065f, 0.27951064705848694f, -0.06653644144535065f, +0.06555495411157608f, -0.13140222430229187f, 0.3048659563064575f, -0.05939300358295441f, 0.09430614858865738f, 0.146390900015831f, 0.39628198742866516f, 0.18177162110805511f, +0.009371706284582615f, -0.07761510461568832f, 0.4054813086986542f, -0.014899194240570068f, 0.3603096306324005f, -0.1621396690607071f, 0.1227807030081749f, 0.15967686474323273f, +0.14657536149024963f, 0.14710496366024017f, 0.42642125487327576f, 0.06782953441143036f, 0.09420596063137054f, 0.08053626120090485f, 0.4030553698539734f, -0.20670951902866364f, +0.25660112500190735f, -0.06407678127288818f, 0.12077005207538605f, 0.03814795985817909f, 0.2740391492843628f, 0.11909805983304977f, 0.26952704787254333f, -0.06065267696976662f, +0.24174663424491882f, 0.03950792923569679f, 0.21417570114135742f, -0.03280504420399666f, 0.3557310402393341f, -0.09215255826711655f, 0.22533288598060608f, 0.08386887609958649f, +0.1364603042602539f, -0.01166803203523159f, 0.35958990454673767f, -0.032908227294683456f, 0.3014835715293884f, 0.2214171439409256f, 0.15683269500732422f, -0.11771231144666672f, +0.2711295187473297f, 0.05277106165885925f, 0.18295420706272125f, -0.0068458993919193745f, 0.5260401368141174f, 0.12189275771379471f, 0.07469471544027328f, -0.09922368079423904f, +0.21458356082439423f, -0.07290001958608627f, 0.4028192460536957f, 0.05734894797205925f, 0.22061312198638916f, 0.007511241361498833f, 0.03285303711891174f, -0.02343165874481201f, +0.09927545487880707f, 0.05424128472805023f, 0.28801414370536804f, 0.06302228569984436f, 0.4170801043510437f, -0.006498121190816164f, 0.1950811892747879f, -0.14548048377037048f, +0.2737060487270355f, 0.054991576820611954f, 0.22760137915611267f, -0.06499569863080978f, 0.1734248846769333f, 0.0006214946042746305f, 0.38732433319091797f, -0.12175525724887848f, +0.44253307580947876f, 0.06895224750041962f, 0.08141105622053146f, 0.05749180540442467f, 0.17324890196323395f, -0.2583502233028412f, 0.21875551342964172f, -0.0019605569541454315f, +0.34449711441993713f, -0.10571733862161636f, 0.01341454591602087f, 0.05345655605196953f, 0.32499831914901733f, -0.032733749598264694f, 0.13477395474910736f, -0.010210482403635979f, +0.22571367025375366f, 0.07459929585456848f, 0.15417812764644623f, -0.07506991922855377f, 0.308912992477417f, -0.0007390849059447646f, 0.2627045810222626f, 0.03199765086174011f, +0.29734668135643005f, -0.17961184680461884f, 0.2380302995443344f, -0.21772366762161255f, 0.24275095760822296f, 0.15112662315368652f, 0.07211107015609741f, 0.16649319231510162f, +0.2418895661830902f, -0.1059323400259018f, 0.368421345949173f, -0.00021813364583067596f, 0.11145122349262238f, 0.4084649980068207f, 0.14029794931411743f, -0.25480467081069946f, +0.03324123099446297f, -0.1670832633972168f, 0.08056364953517914f, 0.12585142254829407f, 0.483347624540329f, 0.027575474232435226f, 0.36535462737083435f, -0.03883440047502518f, +0.3467155694961548f, -0.05272512137889862f, 0.13434378802776337f, 0.0019458149326965213f, -0.025307876989245415f, 0.06709948182106018f, 0.3079177141189575f, 0.04996895417571068f, +0.20167729258537292f, -0.1722034513950348f, 0.22021637856960297f, 0.10402965545654297f, 0.13166429102420807f, 0.026801325380802155f, 0.3664950430393219f, 0.046182844787836075f, +0.21086852252483368f, -0.1533736139535904f, 0.30099552869796753f, 0.15333642065525055f, 0.18608500063419342f, 0.021633749827742577f, 0.14871938526630402f, -0.01939619891345501f, +0.40796270966529846f, -0.11081293970346451f, 0.20169326663017273f, -0.11517556011676788f, 0.1779555082321167f, 0.180989071726799f, 0.1868542730808258f, 0.035914987325668335f, +0.1303631216287613f, -0.08051769435405731f, 0.27326375246047974f, 0.1387196183204651f, 0.15833459794521332f, 0.1545427143573761f, 0.20230083167552948f, -0.2595282793045044f, +0.15097860991954803f, 0.21747374534606934f, 0.3313637375831604f, -0.17265553772449493f, 0.11549853533506393f, 0.06434587389230728f, 0.28037258982658386f, -0.18225102126598358f, +0.21456319093704224f, 0.10325442999601364f, 0.1417844444513321f, -0.06455820053815842f, 0.4194503724575043f, 0.04637440666556358f, 0.20856870710849762f, -0.025237806141376495f, +0.2991657555103302f, 0.0216770451515913f, 0.2535697817802429f, -0.06942882388830185f, 0.08931757509708405f, -0.01854921132326126f, 0.444098562002182f, 0.1706915646791458f, +0.13215859234333038f, 0.1924675554037094f, 0.18398171663284302f, 0.022497352212667465f, 0.3729272484779358f, -0.011717687360942364f, 0.2195219248533249f, -0.18405959010124207f, +0.2715506851673126f, -0.256139874458313f, 0.1079491451382637f, 0.08399047702550888f, 0.36255156993865967f, 0.014498167671263218f, 0.31144270300865173f, 0.15271461009979248f, +0.14463578164577484f, -0.08705037832260132f, 0.28707125782966614f, 0.01085358764976263f, 0.4642833173274994f, 0.13804775476455688f, 0.1454107165336609f, -0.01888839714229107f, +0.3510342538356781f, 0.021861432120203972f, 0.04829905554652214f, -0.071095772087574f, 0.3503723740577698f, 0.06702347844839096f, 0.1840127557516098f, -0.06231481954455376f, +0.2698260545730591f, 0.1234150379896164f, 0.22043010592460632f, -0.006602664012461901f, 0.3082667589187622f, -0.19547243416309357f, 0.14965124428272247f, 0.1055992841720581f, +0.09790850430727005f, 0.01634993404150009f, 0.4092886447906494f, -0.11818487197160721f, 0.2942161560058594f, 0.07346128672361374f, 0.20604194700717926f, 0.015538128092885017f, +0.328215628862381f, 0.11894401907920837f, 0.18084007501602173f, -0.0287056602537632f, 0.29977256059646606f, 0.11163534969091415f, 0.17977942526340485f, -0.134817436337471f, +0.5781823396682739f, -0.12911824882030487f, 0.36691588163375854f, -0.017706410959362984f, -0.05387866869568825f, 0.046454738825559616f, 0.03738589957356453f, 0.10717692971229553f, +0.07892008870840073f, -0.09207263588905334f, 0.20354098081588745f, 0.032574839890003204f, 0.2407551258802414f, -0.08042912930250168f, 0.4393980801105499f, 0.2603488862514496f, +0.49380046129226685f, -0.15973997116088867f, 0.0877760574221611f, -0.0653461366891861f, 0.29831820726394653f, -0.011382054537534714f, 0.10703171789646149f, 0.13209925591945648f, +0.39124101400375366f, -0.01653171144425869f, 0.09611799567937851f, -0.07244693487882614f, 0.1980976015329361f, 0.10452644526958466f, 0.14908236265182495f, 0.15793970227241516f, +0.18555870652198792f, -0.004464548081159592f, 0.19284403324127197f, 0.0995950996875763f, 0.22333739697933197f, -0.14129532873630524f, 0.1991288959980011f, 0.0120515376329422f, +0.14102119207382202f, -0.06210656464099884f, 0.1456698179244995f, -0.14951196312904358f, 0.3968893587589264f, -0.002107093809172511f, 0.2810044586658478f, 0.15798181295394897f, +0.4905635118484497f, -0.07717127352952957f, 0.35397088527679443f, -0.019456524401903152f, 0.027192603796720505f, 0.05791699141263962f, 0.19517485797405243f, 0.0027892848011106253f, +0.3266407251358032f, -0.19714795053005219f, 0.2491675168275833f, -0.04552215710282326f, 0.2364805042743683f, 0.024309322237968445f, 0.03395866975188255f, 0.1874420940876007f, +0.2705337703227997f, -0.0760887935757637f, 0.11113422363996506f, -0.028897656127810478f, 0.06798399239778519f, 0.10124559700489044f, 0.3616357445716858f, -0.044017743319272995f, +0.1886918693780899f, -0.011439742520451546f, 0.20632094144821167f, 0.18540829420089722f, 0.3191807270050049f, -0.0026091618929058313f, 0.21418562531471252f, -0.07070819288492203f, +0.05483186990022659f, -0.12739890813827515f, 0.3256615102291107f, 0.07212835550308228f, 0.30949532985687256f, 0.04030061513185501f, 0.12902802228927612f, -0.0346129909157753f, +0.14060570299625397f, -0.023206334561109543f, 0.4172710180282593f, -0.18304163217544556f, 0.04085085168480873f, 0.22249844670295715f, 0.2905995547771454f, 0.00482857646420598f, +0.17026592791080475f, 0.2146582156419754f, 0.37205445766448975f, 0.10111656785011292f, 0.3514629304409027f, -0.06839915364980698f, 0.04404180869460106f, -0.31142711639404297f, +0.3490842580795288f, 0.07257824391126633f, 0.5250997543334961f, 0.07595887780189514f, 0.05255642533302307f, -0.18430273234844208f, 0.012696901336312294f, 0.006303675472736359f, +0.2005423605442047f, 0.23359322547912598f, 0.2712323069572449f, -0.10151012986898422f, 0.03708339110016823f, -0.15859422087669373f, 0.352200448513031f, -0.003643645206466317f, +0.03157610446214676f, 0.06512724608182907f, 0.30104297399520874f, -0.13561008870601654f, 0.1858823448419571f, -0.05508934706449509f, 0.28434479236602783f, 0.1697147935628891f, +0.1669609099626541f, -0.1044192835688591f, 0.21843382716178894f, -0.028173265978693962f, 0.14434586465358734f, 0.2703413665294647f, 0.42242443561553955f, -0.06934404373168945f, +0.22710631787776947f, 0.02756909467279911f, 0.22245505452156067f, 0.05425933003425598f, 0.316189169883728f, -0.09649249166250229f, 0.2023811787366867f, -0.043493740260601044f, +0.02144833281636238f, 0.12036360055208206f, 0.2406473308801651f, -0.0733230710029602f, 0.3628343641757965f, -0.11270440369844437f, 0.17557920515537262f, 0.13623569905757904f, +0.2703733742237091f, 0.053627122193574905f, 0.25172361731529236f, 0.009688375517725945f, 0.03776652738451958f, 0.07660257816314697f, 0.2022516131401062f, -0.08030476421117783f, +0.1613379418849945f, -0.1152534931898117f, 0.11623390763998032f, 0.1439203917980194f, 0.26684585213661194f, -0.1244904100894928f, 0.2433747798204422f, 0.07913274317979813f, +0.2872787415981293f, 0.1559373140335083f, 0.2160201072692871f, -0.10841202735900879f, 0.10549794882535934f, 0.03435968980193138f, 0.2816990911960602f, -0.1241176426410675f, +-0.06816821545362473f, -0.10297360271215439f, 0.48903384804725647f, 0.1412140280008316f, 0.14833612740039825f, 0.09448899328708649f, 0.28677648305892944f, -0.13867291808128357f, +0.24957668781280518f, -0.15275157988071442f, 0.19192354381084442f, 0.1492866575717926f, 0.24239851534366608f, 0.030891677364706993f, 0.28174126148223877f, 0.016965804621577263f, +0.026313483715057373f, 0.11431911587715149f, 0.2727257013320923f, 0.2122402936220169f, 0.2981148362159729f, 0.09618132561445236f, 0.354675829410553f, -0.38095709681510925f, +0.287664532661438f, -0.073734812438488f, 0.1438935548067093f, -0.14384521543979645f, 0.18014948070049286f, 0.09732551872730255f, 0.37456315755844116f, -0.015895109623670578f, +0.3264126181602478f, -0.06489983946084976f, 0.31317466497421265f, 0.07603908330202103f, 0.2256009876728058f, 0.054074712097644806f, 0.11637517809867859f, -0.06151876971125603f, +0.24719788134098053f, 0.07312145084142685f, 0.3180179297924042f, 0.07976450771093369f, 0.3668314218521118f, -0.11788760125637054f, 0.115232914686203f, 0.011249922215938568f, +0.1683887541294098f, -0.030177684500813484f, 0.18756012618541718f, -0.025260964408516884f, 0.3134365677833557f, -0.029935620725154877f, 0.29214298725128174f, 0.1357301026582718f, +0.1265699565410614f, -0.09260779619216919f, 0.31983882188796997f, -0.031070010736584663f, 0.2169153392314911f, 0.030654769390821457f, 0.25502708554267883f, -0.014320875518023968f, +0.21483898162841797f, 0.12656795978546143f, 0.35910311341285706f, 0.10149215161800385f, 0.02300354093313217f, -0.054397035390138626f, 0.346199631690979f, -0.16919516026973724f, +0.2580270767211914f, 0.10239746421575546f, 0.2617938220500946f, -0.041261859238147736f, 0.19442741572856903f, -0.11925874650478363f, 0.2222760021686554f, -0.005400833673775196f, +0.2326301485300064f, 0.12412463128566742f, 0.137290820479393f, -0.2198054939508438f, 0.3712562620639801f, -0.0558152049779892f, 0.31321150064468384f, 0.11076405644416809f, +0.18218232691287994f, 0.024974655359983444f, 0.14509673416614532f, -0.20466101169586182f, 0.32559090852737427f, 0.0783410593867302f, 0.2736845016479492f, 0.1226382926106453f, +0.2883044183254242f, -0.06639446318149567f, 0.15340609848499298f, -0.12397932261228561f, 0.378751665353775f, 0.002694611204788089f, 0.14632843434810638f, 0.09386564046144485f, +0.345389187335968f, -0.08780397474765778f, 0.07599805295467377f, 0.06546608358621597f, 0.21846482157707214f, 0.07226625084877014f, 0.30214783549308777f, -0.05784287676215172f, +0.27896177768707275f, 0.09597600996494293f, 0.4127386808395386f, -0.12398701161146164f, 0.36506780982017517f, -0.04569704085588455f, -0.10944624245166779f, 0.06453375518321991f, +0.21746960282325745f, 0.041354499757289886f, 0.3189782500267029f, -0.040863677859306335f, 0.439473420381546f, 0.16278164088726044f, -0.013503705151379108f, -0.14190325140953064f, +0.17723971605300903f, 0.12790831923484802f, 0.3437153697013855f, 0.06773288547992706f, 0.1696157604455948f, 0.020104439929127693f, 0.23146021366119385f, -0.07247140258550644f, +0.4273037314414978f, 0.006858971435576677f, 0.21260899305343628f, -0.13414619863033295f, -0.1414586752653122f, 0.09857144951820374f, 0.25485759973526f, -0.036077868193387985f, +0.3185267448425293f, 0.1476004421710968f, 0.24026937782764435f, 0.10628780722618103f, 0.16713298857212067f, -0.03403850644826889f, 0.17616508901119232f, -0.18673065304756165f, +0.17113259434700012f, -0.028418127447366714f, 0.14879371225833893f, 0.0768858939409256f, 0.18350449204444885f, 0.15932784974575043f, 0.36297789216041565f, -0.0600171722471714f, +0.37985435128211975f, -0.1332319974899292f, 0.0957486629486084f, 0.07293809950351715f, 0.13706381618976593f, -0.08660519868135452f, 0.3202333152294159f, -0.03175514191389084f, +0.400359570980072f, 0.007173385005444288f, 0.2591109275817871f, -0.0353323370218277f, 0.21671907603740692f, -0.03843139111995697f, 0.04737010598182678f, -0.04594743996858597f, +0.016143890097737312f, 0.2898006737232208f, 0.19829601049423218f, -0.06163456663489342f, 0.4890729486942291f, -0.13088387250900269f, 0.30158668756484985f, -0.012679100967943668f, +0.34976452589035034f, -0.004548818804323673f, 0.27857470512390137f, -0.0842122882604599f, 0.21747510135173798f, 0.16743309795856476f, 0.19215752184391022f, -0.06381319463253021f, +0.344060480594635f, -0.08379289507865906f, 0.26954132318496704f, 0.1861930638551712f, 0.13261760771274567f, -0.12362461537122726f, 0.17957359552383423f, 0.0041703530587255955f, +0.08388698101043701f, 0.1463880091905594f, 0.28203415870666504f, -0.06800635159015656f, 0.2732185423374176f, 0.014399017207324505f, 0.1759951263666153f, -0.08012095838785172f, +0.2776861786842346f, 0.07347242534160614f, 0.24139297008514404f, 0.12989892065525055f, 0.22440692782402039f, -0.17104105651378632f, 0.22042760252952576f, 0.08136390894651413f, +0.3423343002796173f, -0.13891953229904175f, 0.1985509693622589f, 0.14067327976226807f, 0.1685185432434082f, -0.07351043075323105f, 0.2705003321170807f, 0.02812926284968853f, +0.23906821012496948f, 0.12863391637802124f, 0.22450138628482819f, -0.02289973571896553f, 0.36605438590049744f, -0.08061587065458298f, 0.08457863330841064f, -0.023790471255779266f, +0.1705583930015564f, -0.11893688887357712f, 0.14569753408432007f, -0.09776584804058075f, 0.3185366690158844f, 0.019203972071409225f, 0.1870598942041397f, 0.317653626203537f, +0.16380445659160614f, -0.07170981168746948f, 0.16038155555725098f, -0.20531108975410461f, 0.3481743037700653f, 0.12572409212589264f, 0.28037551045417786f, 0.07309764623641968f, +0.20431745052337646f, -0.047025054693222046f, 0.2573670446872711f, -0.25253528356552124f, 0.2818011939525604f, 0.19489532709121704f, 0.10520487278699875f, -0.05606343597173691f, +0.29987937211990356f, -0.10187245905399323f, 0.09912977367639542f, -0.19730602204799652f, 0.03529774770140648f, 0.06316827237606049f, 0.4996391832828522f, 0.15810905396938324f, +0.12350728362798691f, -0.17230109870433807f, 0.35002002120018005f, 0.07970931380987167f, 0.28293779492378235f, 0.2174551784992218f, 0.15023921430110931f, -0.1413739025592804f, +0.21699480712413788f, 0.0721055120229721f, 0.34258753061294556f, -0.20138852298259735f, 0.19799619913101196f, 0.03469289839267731f, 0.2495233416557312f, -0.015453319065272808f, +0.1632743626832962f, -0.1433384120464325f, 0.3145337998867035f, 0.20513376593589783f, 0.254309743642807f, -0.07969113439321518f, 0.15731246769428253f, 0.10695963352918625f, +0.17545324563980103f, 0.12064739316701889f, 0.3121567964553833f, -0.09494277089834213f, 0.25745895504951477f, 0.09274453669786453f, 0.16298674046993256f, -0.01790015958249569f, +0.17013168334960938f, -0.09317883104085922f, 0.16446733474731445f, -0.11375926434993744f, 0.13120324909687042f, 0.0985819548368454f, 0.48001188039779663f, 0.032583609223365784f, +0.27345550060272217f, -0.003363480092957616f, 0.22009626030921936f, -0.03226817399263382f, 0.09390239417552948f, -0.0316178984940052f, 0.1981702744960785f, 0.11757507175207138f, +0.21919038891792297f, 0.003450654447078705f, 0.40215134620666504f, -0.11365167051553726f, 0.15903697907924652f, 0.06788361072540283f, 0.19751276075839996f, 0.05952894315123558f, +-0.047372084110975266f, 0.11320913583040237f, 0.24061302840709686f, -0.15953847765922546f, 0.6426323652267456f, -0.0038236593827605247f, 0.1861402541399002f, 0.09358111768960953f, +0.4073740541934967f, -0.17137247323989868f, 0.15849369764328003f, 0.14696232974529266f, 0.26023682951927185f, -0.05663624405860901f, 0.16296954452991486f, 0.19053137302398682f, +0.22571825981140137f, -0.057454224675893784f, 0.1987779140472412f, -0.08914762735366821f, 0.12692736089229584f, -0.03315754979848862f, 0.3850746750831604f, 0.14021293818950653f, +0.0964144691824913f, 0.2916303277015686f, 0.30193665623664856f, -0.07248259335756302f, 0.1400395780801773f, -0.09744853526353836f, 0.3626280725002289f, -0.1422966718673706f, +0.22276034951210022f, -0.21319672465324402f, 0.29587361216545105f, 0.06403721868991852f, 0.10955033451318741f, -0.002911545103415847f, 0.1194232627749443f, 0.13421089947223663f, +0.29235363006591797f, -0.08642768859863281f, 0.23655137419700623f, 0.2280551791191101f, 0.0559564046561718f, 0.009278209879994392f, 0.4738025367259979f, -0.0759178027510643f, +0.16893158853054047f, 0.017829425632953644f, 0.43962985277175903f, 0.06259147077798843f, 0.12276975065469742f, -0.07395858317613602f, 0.2168710082769394f, -0.14285817742347717f, +0.1643979698419571f, -0.1950037181377411f, 0.2184765487909317f, 0.04243912175297737f, 0.20011894404888153f, 0.057166144251823425f, 0.3166404068470001f, 0.11114230751991272f, +0.25912028551101685f, 0.09704717993736267f, 0.08125336468219757f, -0.049134522676467896f, 0.2616294026374817f, 0.011210513301193714f, 0.40072792768478394f, -0.013661599718034267f, +0.06316054612398148f, -0.19989804923534393f, 0.21499012410640717f, -0.03881805017590523f, 0.283696711063385f, 0.22231625020503998f, 0.3819466233253479f, -0.07199309766292572f, +0.2485966682434082f, -0.15234141051769257f, 0.09729257971048355f, 0.023942621424794197f, 0.23723851144313812f, 0.08573244512081146f, 0.3314850628376007f, 0.055444248020648956f, +0.14677093923091888f, 0.132223442196846f, 0.11823194473981857f, -0.0861889123916626f, 0.22439755499362946f, -0.16269245743751526f, 0.4205840528011322f, 0.12509006261825562f, +-0.009578234516084194f, 0.010892101563513279f, 0.25654247403144836f, -0.0671742707490921f, 0.3646606504917145f, -0.05611471086740494f, 0.41369420289993286f, 0.06698320806026459f, +0.23765571415424347f, 0.3169175386428833f, -0.08518806099891663f, 0.05173671618103981f, 0.19560475647449493f, -0.2782493531703949f, 0.5976496934890747f, 0.02384261041879654f, +0.26267990469932556f, 0.05165855213999748f, 0.2900089919567108f, 0.08782457560300827f, 0.035415586084127426f, -0.052391789853572845f, 0.22255893051624298f, -0.0009908931097015738f, +0.12484744191169739f, -0.027491232380270958f, 0.26635053753852844f, -0.171737939119339f, 0.23451152443885803f, -0.00045788189163431525f, 0.26105234026908875f, 0.19366325438022614f, +0.2946533262729645f, -0.15083082020282745f, 0.07349716871976852f, 0.0020260843448340893f, 0.1622534543275833f, 0.08056492358446121f, 0.3319438397884369f, -0.042083822190761566f, +0.1713225245475769f, 0.21443916857242584f, 0.1767619401216507f, -0.1565534472465515f, 0.2460433542728424f, 0.003225884400308132f, 0.39284297823905945f, 0.036422550678253174f, +0.27393007278442383f, 0.09914934635162354f, 0.22674135863780975f, 0.07520721852779388f, 0.29201871156692505f, 0.20929363369941711f, 0.10715258121490479f, -0.279362291097641f, +0.2596389651298523f, 0.17118704319000244f, 0.1095103845000267f, -0.12619735300540924f, 0.3431168794631958f, -0.12072493135929108f, 0.15193729102611542f, 0.05093412846326828f, +-0.01653563603758812f, -0.16083818674087524f, 0.3060239255428314f, 0.22542330622673035f, 0.1996145099401474f, 0.08031732589006424f, 0.3590591251850128f, -0.04092884808778763f, +0.325325071811676f, -0.09088253974914551f, 0.10753490775823593f, 0.025691747665405273f, 0.3214399218559265f, -0.028931086882948875f, 0.29589784145355225f, 0.033253513276576996f, +0.23349668085575104f, -0.19273456931114197f, 0.2017166167497635f, 0.12093090265989304f, 0.1942465454339981f, -0.0713232085108757f, 0.3932432234287262f, 0.16481035947799683f, +0.37945815920829773f, 0.03527075797319412f, 0.22758080065250397f, -0.1573784202337265f, 0.12621167302131653f, -0.019679319113492966f, 0.28046417236328125f, 0.03935898467898369f, +0.21760395169258118f, -0.06381771713495255f, 0.24852529168128967f, -0.041191138327121735f, 0.23403316736221313f, -0.02483539469540119f, 0.22043339908123016f, 0.23438911139965057f, +0.17957790195941925f, 0.09553640335798264f, 0.045607790350914f, -0.09320387989282608f, 0.27027830481529236f, -0.1367853581905365f, 0.46314242482185364f, 0.06620948761701584f, +0.25002360343933105f, 0.17385919392108917f, 0.35895633697509766f, -0.17853327095508575f, 0.06241009011864662f, 0.18068158626556396f, 0.3439399003982544f, -0.2715699076652527f, +0.2890559434890747f, -0.053880300372838974f, 0.2769012153148651f, 0.1860070526599884f, 0.25678908824920654f, -0.08525574207305908f, 0.20240384340286255f, 0.0713428184390068f, +0.3661041855812073f, 0.020175352692604065f, 0.4410177767276764f, 0.03786996006965637f, -0.09767073392868042f, -0.06308334320783615f, 0.17777103185653687f, 0.04054296761751175f, +0.15330146253108978f, 0.08461680263280869f, 0.30721938610076904f, 0.04087332636117935f, 0.10358667373657227f, 0.19383342564105988f, 0.2785894274711609f, -0.19744762778282166f, +0.17622852325439453f, -0.1604500263929367f, 0.16588187217712402f, 0.031387604773044586f, 0.31077611446380615f, 0.07929878681898117f, 0.16814416646957397f, 0.1463942676782608f, +0.16847437620162964f, -0.09879796206951141f, 0.0993676483631134f, 0.04856050759553909f, 0.3629988133907318f, 0.027690427377820015f, 0.127920463681221f, 0.1060938611626625f, +-0.04923972859978676f, -0.07237399369478226f, 0.08147013187408447f, 0.11010703444480896f, 0.2261064499616623f, -0.10551032423973083f, 0.43881985545158386f, 0.034938279539346695f, +0.219380185008049f, 0.04667606204748154f, -0.028799444437026978f, -0.3594679534435272f, 0.41466251015663147f, 0.20968638360500336f, 0.31044483184814453f, 0.014802456833422184f, +0.3426946997642517f, 0.05156766623258591f, 0.26153630018234253f, 0.2877666652202606f, 0.28151440620422363f, -0.011620068922638893f, 0.14716224372386932f, -0.09873341768980026f, +0.21455971896648407f, 0.1947103887796402f, 0.21441127359867096f, -0.1827191412448883f, 0.3921900689601898f, 0.017940854653716087f, 0.11297260224819183f, -0.0767609104514122f, +0.3438689410686493f, 0.061641134321689606f, 0.25245288014411926f, 0.1505928486585617f, 0.23513907194137573f, -0.16114938259124756f, 0.023496894165873528f, -0.08650317788124084f, +0.11114589869976044f, -0.05273813754320145f, 0.29826244711875916f, -0.0025246660225093365f, 0.39579588174819946f, -0.013402188196778297f, 0.1565610021352768f, -0.05751325190067291f, +0.38788124918937683f, -0.13400185108184814f, 0.18164537847042084f, 0.09380409121513367f, 0.10205130279064178f, -0.10814622044563293f, 0.3261004686355591f, 0.07147610932588577f, +0.32839474081993103f, 0.06213121861219406f, 0.1820249706506729f, -0.00917060300707817f, 0.12378247827291489f, -0.029337044805288315f, 0.36234498023986816f, 0.014792918227612972f, +0.324717253446579f, -0.02163812145590782f, 0.343988835811615f, -0.08416856080293655f, 0.17386341094970703f, 0.21422608196735382f, 0.15994323790073395f, -0.21480892598628998f, +0.09246169030666351f, 0.014415782876312733f, 0.34076330065727234f, 0.11780854314565659f, 0.1703716367483139f, 0.00390473660081625f, 0.37268561124801636f, -0.19625574350357056f, +0.28688356280326843f, -0.01054519321769476f, 0.17727284133434296f, 0.1528315395116806f, -0.10940917581319809f, -0.03668671473860741f, 0.4767647981643677f, -0.16845141351222992f, +0.07673013210296631f, -0.07214976102113724f, 0.22641322016716003f, 0.04692383110523224f, 0.28472158312797546f, 0.0631863996386528f, 0.42942091822624207f, -0.05230863764882088f, +0.24734395742416382f, -0.15157818794250488f, 0.5180985331535339f, -0.16914385557174683f, 0.212505504488945f, 0.09288590401411057f, -0.0594666562974453f, 0.2320762425661087f, +0.2561701238155365f, 0.04869368299841881f, 0.028054652735590935f, 0.024497654289007187f, 0.34648874402046204f, 0.08492764085531235f, 0.2675899267196655f, -0.10533515363931656f, +0.1847536712884903f, -0.06429446488618851f, 0.3179119825363159f, 0.15227794647216797f, 0.206842303276062f, 0.02950752153992653f, 0.11910183727741241f, -0.11019205302000046f, +0.3199531137943268f, 0.06424454599618912f, 0.21584756672382355f, 0.023852549493312836f, 0.047219689935445786f, -0.13028661906719208f, 0.2809962034225464f, 0.08154381811618805f, +0.2400926798582077f, 0.07531893998384476f, 0.23387864232063293f, -0.1238495409488678f, 0.2523966133594513f, 0.1500573605298996f, 0.09147909283638f, -0.11092821508646011f, +0.1876378357410431f, 0.2475314438343048f, 0.27476346492767334f, -0.09769217669963837f, 0.01652468927204609f, -0.0660792887210846f, 0.2729749083518982f, -0.025217469781637192f, +0.2619633376598358f, 0.016676869243383408f, 0.10611472278833389f, 0.05384040251374245f, 0.32751721143722534f, -0.14136388897895813f, 0.3322667181491852f, 0.16903361678123474f, +0.03255210071802139f, 0.0364203080534935f, 0.4118581712245941f, -0.11188368499279022f, 0.3912537693977356f, 0.023003200069069862f, 0.10715499520301819f, 0.005096278619021177f, +0.3275783360004425f, -0.1726587414741516f, 0.4214898943901062f, 0.051809195429086685f, 0.14912472665309906f, 0.12100052088499069f, 0.132669597864151f, 0.010260079987347126f, +0.2766353189945221f, -0.21571698784828186f, 0.2612059712409973f, -0.019271649420261383f, 0.19409582018852234f, -0.11476024240255356f, 0.2626368999481201f, 0.38837504386901855f, +0.25660425424575806f, 0.08449862897396088f, 0.23395173251628876f, -0.017423348501324654f, 0.26506251096725464f, -0.06860128045082092f, 0.06575041264295578f, 0.06979112327098846f, +0.08804477006196976f, 0.0034894454292953014f, 0.3165808618068695f, -0.08818786591291428f, -0.04003525897860527f, 0.1808978021144867f, 0.5035784840583801f, -0.0872921496629715f, +0.23847348988056183f, -0.0870281532406807f, 0.14882953464984894f, 0.08631955832242966f, 0.18850576877593994f, -0.0450354628264904f, 0.2684100568294525f, 0.1482229083776474f, +0.28410813212394714f, 0.09905032813549042f, 0.15635783970355988f, -0.07579843699932098f, 0.2972073256969452f, -0.008615312166512012f, 0.2221759855747223f, 0.04923945665359497f, +0.2525789439678192f, 0.01172748301178217f, 0.17818450927734375f, -0.04989584907889366f, 0.23442251980304718f, 0.031097400933504105f, 0.23711436986923218f, -0.11814742535352707f, +0.05090105161070824f, -0.01251291111111641f, 0.3192526400089264f, 0.13533374667167664f, 0.3313589096069336f, -0.12299034744501114f, 0.34163254499435425f, -0.02407979778945446f, +0.09596891701221466f, -0.04779433459043503f, 0.09301964193582535f, -0.07572756707668304f, 0.35461917519569397f, 0.05837750434875488f, 0.2784474194049835f, 0.03828898072242737f, +0.24506039917469025f, -0.23561327159404755f, 0.25145819783210754f, 0.022448984906077385f, 0.24829944968223572f, -0.12768930196762085f, 0.02821274660527706f, 0.35319676995277405f, +0.5325871109962463f, 0.13947193324565887f, 0.2014416754245758f, -0.07787446677684784f, 0.14713464677333832f, 0.010448610410094261f, 0.027167869731783867f, 0.05546307563781738f, +0.2747630476951599f, 0.13927000761032104f, 0.08076082915067673f, -0.11548350751399994f, 0.12173481285572052f, 0.0802268460392952f, 0.3943929374217987f, 0.0032588522881269455f, +0.08721943199634552f, 0.09904452413320541f, 0.19611677527427673f, -0.028265757486224174f, 0.44673147797584534f, -0.08140791952610016f, 0.16726747155189514f, 0.014987572096288204f, +0.3791655898094177f, 0.03559695556759834f, 0.03159315139055252f, -0.01427360437810421f, 0.20675049722194672f, 0.05008821561932564f, 0.39218586683273315f, 0.053035665303468704f, +0.3017602562904358f, 0.025929538533091545f, 0.23886002600193024f, -0.08290216326713562f, 0.13123619556427002f, 0.07182794064283371f, 0.2728116810321808f, -0.10614443570375443f, +0.33075499534606934f, 5.454132042359561e-05f, 0.1884169727563858f, 0.1006055399775505f, 0.31163260340690613f, 0.06928965449333191f, 0.30718541145324707f, -0.17553915083408356f, +0.2140207439661026f, 0.27999308705329895f, 0.12834443151950836f, -0.056825295090675354f, 0.32203346490859985f, -0.11403879523277283f, 0.13749708235263824f, -0.18318134546279907f, +0.06884541362524033f, 0.3488522171974182f, 0.21724998950958252f, -0.156174436211586f, 0.23915618658065796f, -0.05976281315088272f, 0.3139698803424835f, -0.051462020725011826f, +0.22434289753437042f, 0.028557749465107918f, 0.2991591989994049f, 0.04920385032892227f, 0.36360982060432434f, -0.1358557939529419f, 0.06769512593746185f, 0.09840036928653717f, +0.04817698523402214f, -0.1646803319454193f, 0.2745595872402191f, -0.09504230320453644f, 0.40922653675079346f, 0.21646326780319214f, 0.16556715965270996f, -0.10932332277297974f, +0.22392065823078156f, 0.08596887439489365f, 0.3717525005340576f, -0.013241278938949108f, 0.19060857594013214f, -0.01528267003595829f, 0.2538466453552246f, 0.08579675108194351f, +-0.013309627771377563f, -0.1760527640581131f, 0.31398525834083557f, 0.1877581775188446f, 0.22138793766498566f, 0.10838279128074646f, 0.2920723855495453f, -0.15531420707702637f, +0.33512818813323975f, -0.07814117521047592f, 0.10798618197441101f, 0.006448499858379364f, 0.07366582006216049f, 0.09637974947690964f, 0.4438330829143524f, -0.054508619010448456f, +0.4401126205921173f, -0.14813388884067535f, 0.23620693385601044f, 0.0977184996008873f, 0.1553163230419159f, -0.032756634056568146f, 0.2494160234928131f, 0.10852093249559402f, +0.2463928759098053f, -0.17017103731632233f, 0.3983490765094757f, -0.08943641185760498f, 0.18529339134693146f, 0.32311663031578064f, 0.21066690981388092f, -0.02461535483598709f, +0.06671497970819473f, -0.08567497879266739f, 0.49571338295936584f, -0.14496280252933502f, 0.09627878665924072f, 0.02849287912249565f, 0.14150932431221008f, 0.1738997846841812f, +0.47256600856781006f, 0.12716062366962433f, 0.27806058526039124f, -0.09324763715267181f, 0.08524277061223984f, -0.09843195229768753f, 0.21041277050971985f, 0.06012330204248428f, +0.39011716842651367f, 0.008763523772358894f, 0.14165782928466797f, 0.09468631446361542f, 0.16621065139770508f, 0.002349856309592724f, 0.13142473995685577f, 0.030247047543525696f, +0.07878801226615906f, -0.0017997563118115067f, 0.2902434170246124f, 0.10144124180078506f, 0.33453044295310974f, -0.010316252708435059f, 0.18576034903526306f, -0.08689409494400024f, +0.07760492712259293f, 0.16233135759830475f, 0.23959390819072723f, 0.1869966983795166f, 0.33752915263175964f, -0.1826133131980896f, 0.16963784396648407f, -0.21618026494979858f, +0.21836137771606445f, 0.060575202107429504f, 0.2993684709072113f, -0.20701871812343597f, 0.07228629291057587f, -0.004831571131944656f, 0.27575358748435974f, 0.1881941705942154f, +0.41892239451408386f, -0.29478198289871216f, 0.30623310804367065f, -0.17474104464054108f, 0.06822701543569565f, 0.3107534348964691f, 0.2501808702945709f, 0.12935587763786316f, +0.1703202724456787f, 0.14459024369716644f, 0.393392413854599f, -0.057764533907175064f, 0.27592578530311584f, -0.029602428898215294f, 0.09922846406698227f, 0.020512782037258148f, +0.2200506627559662f, -0.07099420577287674f, 0.14878392219543457f, -0.10790703445672989f, 0.31318768858909607f, 0.03271699324250221f, 0.21857312321662903f, 0.028641246259212494f, +0.08876489847898483f, 0.032286617904901505f, 0.44670119881629944f, -0.04216637462377548f, 0.19988377392292023f, 0.1232944130897522f, 0.07423515617847443f, 0.05555012822151184f, +0.16762718558311462f, -0.0332069993019104f, 0.28155139088630676f, -0.07825887203216553f, 0.19040676951408386f, -0.019141267985105515f, 0.2838405668735504f, 0.05190867558121681f, +0.23748664557933807f, 0.024821866303682327f, 0.163224995136261f, 0.020967939868569374f, 0.19553257524967194f, -0.007748905103653669f, 0.0982130691409111f, -0.09661448001861572f, +0.1581234633922577f, 0.042575474828481674f, 0.20045261085033417f, -0.08380860835313797f, 0.33593112230300903f, 0.16865654289722443f, 0.16891491413116455f, -0.06107586622238159f, +0.1964244544506073f, 0.39855462312698364f, 0.38527095317840576f, -0.18458962440490723f, 0.4242146611213684f, 0.001339175389148295f, 0.114829421043396f, -0.109293632209301f, +0.3462825417518616f, -0.0017241317545995116f, 0.3279619812965393f, 0.21046096086502075f, 0.0812973603606224f, -0.18347807228565216f, 0.31088805198669434f, -0.16189917922019958f, +0.2178463190793991f, -0.2259265035390854f, 0.3105073869228363f, 0.10800646245479584f, -0.039035551249980927f, -0.008367884904146194f, 0.3575148284435272f, 0.17357303202152252f, +0.1264161914587021f, -0.03915379196405411f, 0.10385768115520477f, -0.06390288472175598f, 0.40297752618789673f, 0.13940730690956116f, 0.23745833337306976f, -0.013380268588662148f, +0.14533710479736328f, 0.09635704010725021f, 0.33099573850631714f, -0.13608627021312714f, 0.20348043739795685f, -0.05184612795710564f, 0.23677431046962738f, 0.03758006542921066f, +0.24862506985664368f, 0.0007123652030713856f, 0.29740771651268005f, 0.15774846076965332f, 0.22491097450256348f, -0.06623804569244385f, 0.1768319010734558f, -0.19444693624973297f, +0.3347178101539612f, 0.03615676611661911f, 0.3759303092956543f, -0.043232619762420654f, 0.05387814715504646f, 0.10396727174520493f, 0.142253115773201f, -0.12239181250333786f, +0.280105322599411f, -0.07137733697891235f, 0.1702551245689392f, 0.11909118294715881f, 0.1269391030073166f, -0.18522542715072632f, 0.26342323422431946f, 0.09910837560892105f, +0.10559793561697006f, 0.024540944024920464f, 0.3122856914997101f, -0.053651582449674606f, 0.354057639837265f, 0.02394477091729641f, 0.22640924155712128f, 0.050429731607437134f, +0.4072323143482208f, 0.0802478939294815f, 0.08097341656684875f, -0.050420571118593216f, 0.25263848900794983f, -0.01809912919998169f, 0.20324094593524933f, -0.06658300012350082f, +0.18899574875831604f, 0.10330960899591446f, 0.2328685075044632f, -0.17637956142425537f, 0.4711062014102936f, 0.04347896948456764f, 0.03976179286837578f, -0.027424359694123268f, +0.18303033709526062f, -0.12993092834949493f, 0.10653471946716309f, -0.05490601807832718f, 0.3002268671989441f, 0.08449023962020874f, 0.29607367515563965f, 0.08696993440389633f, +0.20123356580734253f, 0.23922349512577057f, 0.25560182332992554f, -0.18352779746055603f, 0.18276043236255646f, 0.13150767982006073f, 0.2714933753013611f, -0.0071914237923920155f, +0.19054637849330902f, 0.10425956547260284f, 0.045467477291822433f, -0.04283545911312103f, 0.25960877537727356f, -0.0009039107826538384f, 0.402561753988266f, -0.12929488718509674f, +0.18253253400325775f, 0.14095984399318695f, 0.15230797231197357f, 0.09374004602432251f, 0.38803279399871826f, -0.08430233597755432f, 0.25002285838127136f, -0.06258563697338104f, +0.21241742372512817f, -0.05153866112232208f, 0.23233573138713837f, 0.12590746581554413f, 0.07058662921190262f, -0.06321951001882553f, 0.29580360651016235f, -0.0865347757935524f, +0.3541422486305237f, 0.07779541611671448f, 0.2682926058769226f, -0.12321723997592926f, 0.2887161374092102f, 0.1457831859588623f, -0.04081074520945549f, -0.1237223818898201f, +0.05636183172464371f, 0.03376421704888344f, 0.3775418996810913f, 0.07684280723333359f, 0.29834333062171936f, 0.03755497932434082f, 0.16913150250911713f, -0.09891550987958908f, +0.26865455508232117f, 0.11470988392829895f, 0.13187873363494873f, -0.22289665043354034f, 0.1008404791355133f, -0.125203475356102f, 0.31694766879081726f, 0.17823515832424164f, +0.2164807766675949f, -0.08914526551961899f, 0.11487127840518951f, -0.08295818418264389f, 0.35209423303604126f, 0.003784975502640009f, 0.21370410919189453f, 0.03931345045566559f, +0.41149139404296875f, -0.042970817536115646f, 0.18908049166202545f, -0.11329081654548645f, 0.25756824016571045f, -0.01679527387022972f, 0.08031845837831497f, 0.17649826407432556f, +0.2264532595872879f, -0.043950002640485764f, 0.24091552197933197f, -0.03569059818983078f, 0.1745133101940155f, -0.030962442979216576f, 0.18182145059108734f, 0.13134153187274933f, +0.42705410718917847f, 0.06621623039245605f, 0.19486641883850098f, -0.06742231547832489f, 0.1279856264591217f, 0.11163962632417679f, 0.15105201303958893f, 0.03106086328625679f, +0.3365313708782196f, 0.023336302489042282f, 0.4893205463886261f, 0.0093760397285223f, 0.14846540987491608f, 0.007704544346779585f, 0.0028019538149237633f, -0.03526442125439644f, +0.04555924981832504f, 0.023580586537718773f, 0.2607725262641907f, -0.17983849346637726f, 0.3735107481479645f, 0.020889995619654655f, 0.23678888380527496f, 0.1646580994129181f, +0.1467605084180832f, -0.0668107122182846f, 0.07546301186084747f, -0.05426221340894699f, 0.39138200879096985f, 0.0925460085272789f, 0.24181541800498962f, -0.00042844846029765904f, +-0.01464765053242445f, -0.04973243549466133f, 0.5133092403411865f, 0.1928214281797409f, 0.35551807284355164f, -0.06921301782131195f, 0.16392286121845245f, -0.09434692561626434f, +0.28984835743904114f, -0.067247174680233f, 0.2310168594121933f, 0.014132264070212841f, 0.3062607944011688f, 0.1336335986852646f, 0.09357526898384094f, -0.0754605233669281f, +0.22435253858566284f, 0.10995763540267944f, 0.41670864820480347f, -0.3020556569099426f, 0.03639917075634003f, 0.17051629722118378f, 0.4138936698436737f, 0.09153579920530319f, +0.21747390925884247f, -0.06995075941085815f, 0.32768958806991577f, -0.008644958958029747f, 0.191568061709404f, 0.006362521555274725f, 0.21327219903469086f, 0.09757932275533676f, +0.24041247367858887f, -0.008750745095312595f, 0.05186013504862785f, -0.027064628899097443f, 0.3408452868461609f, 0.10991989821195602f, 0.3729579746723175f, 0.030338449403643608f, +0.32021546363830566f, -0.03710804134607315f, 0.23192532360553741f, -0.03455325961112976f, 0.06179210916161537f, 0.006869988050311804f, 0.1410180628299713f, 0.13248416781425476f, +0.09994752705097198f, -0.11595572531223297f, 0.36386173963546753f, 0.05516989529132843f, 0.1752334088087082f, -0.05661597475409508f, 0.2738637924194336f, -0.020091649144887924f, +0.2395826280117035f, -0.03705981746315956f, 0.23219040036201477f, 0.086333267390728f, 0.29937082529067993f, -0.00406974833458662f, 0.1206282526254654f, 0.006705249659717083f, +0.3041342794895172f, -0.024293867871165276f, 0.21868616342544556f, 0.1130109652876854f, 0.04101648926734924f, 0.15430735051631927f, 0.2853291630744934f, -0.17071661353111267f, +0.2787691056728363f, 0.14171436429023743f, 0.052442558109760284f, 0.13100457191467285f, 0.3001658618450165f, -0.17431065440177917f, 0.3662460446357727f, -0.06547713279724121f,}; diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c index c16310d40..ec8520019 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/mimo_mmse_f32/main.c @@ -8,17 +8,23 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "mimo_mmse_f32.h" + +dump(id,1); + +#include "mimo_mmse_f32s.h" +#include "mimo_mmse_f32p.h" /* DATA */ #include "data_mimo_mmse_f32.h" -dump(res,1); - +#define PARALLEL +//#define SINGLE +#define FOLDED #define CHOLESKY //#define JACOBI +#ifdef SINGLE float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); @@ -28,10 +34,23 @@ float b[2 * N_RX] __attribute__((section(".l1"))); float s[2 * N_TX] __attribute__((section(".l1"))); float x[2 * N_TX] __attribute__((section(".l1"))); float y[2 * N_TX] __attribute__((section(".l1"))); +#endif + +#ifdef PARALLEL +float ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1"))); +float b[2 * N_RX * N_ITR] __attribute__((section(".l1"))); +float sigma[N_TX * N_ITR] __attribute__((section(".l1"))); + +float in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1"))); +float out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1"))); +float s[2 * N_TX * N_ITR] __attribute__((aligned(N_BANKS), section(".l1"))); +float x[2 * N_TX * N_ITR] __attribute__((aligned(N_BANKS), section(".l1"))); +float y[2 * N_TX * N_ITR] __attribute__((aligned(N_BANKS), section(".l1"))); +#endif void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { + for (i = core_id; i < 2 * dim; i+=num_cores) { matrix[i] = data[i]; } mempool_barrier(num_cores); @@ -40,7 +59,7 @@ void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { + for (i = core_id; i < 2 * dim; i+=num_cores) { matrix[i] = 0.0f; } mempool_barrier(num_cores); @@ -70,12 +89,14 @@ void write_result(float *pRes, uint32_t dim, uint32_t core_id) { for (uint32_t i = 0; i < 2 * dim; i++) { float in = pRes[i]; - dump_res(*(uint32_t*)&in); + dump_id(*(uint32_t*)&in); } } } +#ifdef SINGLE + // Driver program void single_core_mimo_mmse_cholesky() { @@ -98,14 +119,18 @@ void single_core_mimo_mmse_cholesky() { /* Benchmark */ if (core_id == 0) { + mempool_start_benchmark(); mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); + mempool_stop_benchmark(); + mempool_start_benchmark(); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); mempool_cholesky_f32s(in_matrix, out_matrix, N_TX); mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); mempool_stop_benchmark(); + } mempool_barrier(num_cores); @@ -114,7 +139,7 @@ void single_core_mimo_mmse_cholesky() { // verify_result(s, Out_s, N_TX, core_id); // verify_result(y, Out_y, N_TX, core_id); // verify_result(x, Out_x, N_TX, core_id); - write_result(x, N_TX, core_id); + // write_result(x, N_TX, core_id); mempool_barrier(num_cores); return; } @@ -138,12 +163,8 @@ void single_core_mimo_mmse_jacobi() { /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX); - mempool_stop_benchmark(); - mempool_start_benchmark(); + mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); - mempool_stop_benchmark(); - mempool_start_benchmark(); mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); mempool_stop_benchmark(); } @@ -157,14 +178,148 @@ void single_core_mimo_mmse_jacobi() { return; } +#endif + +#ifdef PARALLEL + +// Driver program +void parallel_mimo_mmse_cholesky() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize// + + /* Initialize matrices */ + initialize(ch_matrix, In_H, N_RX*N_TX*N_ITR, core_id, num_cores); + initialize_zeros(in_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); + initialize_zeros(out_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); + /* Initialize vectors */ + initialize(sigma, In_sigma, N_TX*N_ITR/2, core_id, num_cores); + initialize(b, In_b, N_RX*N_ITR, core_id, num_cores); + + initialize_zeros(s, N_TX*N_ITR, core_id, num_cores); + initialize_zeros(y, N_TX*N_ITR, core_id, num_cores); + initialize_zeros(x, N_TX*N_ITR, core_id, num_cores); + + + /* Benchmark */ + +#ifdef FOLDED + +// mempool_start_benchmark(); +// // Each iteration is assigned to a pool of processors +// // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix +// uint32_t pool_id = core_id / N_TX; +// uint32_t num_pools = num_cores / N_TX; +// for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { +// float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); +// float* in_matrix_ptr = in_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); +// float* sigma_ptr = sigma + N_TX * itr; +// mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1, core_id % N_TX, N_TX); +// } +// mempool_stop_benchmark(); +// mempool_start_benchmark(); +// for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { +// float* s_ptr = s + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); +// float* y_ptr = y + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); +// float* in_matrix_ptr = in_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); +// float* out_matrix_ptr = out_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); +// mempool_MVP_conjtransp_f32s(ch_matrix + itr * (2 * N_TX * N_RX), b + itr * (2 * N_RX), s_ptr, N_RX, N_TX, 1); +// mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); +// mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); +// mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x + itr * (2 * N_TX), N_TX); +// } +// mempool_log_barrier(2, core_id); +// mempool_stop_benchmark(); + + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + // Inputs + float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float* sigma_ptr = sigma + N_TX * itr; + // Intermediate results and outputs + float* s_ptr = s + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); + float* y_ptr = y + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); + float* in_matrix_ptr = in_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); + float* out_matrix_ptr = out_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); + mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); + mempool_MVP_conjtransp_f32s(ch_matrix + itr * (2 * N_TX * N_RX), b + itr * (2 * N_RX), s_ptr, N_RX, N_TX, 1); + mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); + mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); + mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x + itr * (2 * N_TX), N_TX); + } + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); + +#else + +// mempool_start_benchmark(); +// // Each iteration is assigned to a pool of processors +// // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix +// uint32_t pool_id = core_id / N_TX; +// uint32_t num_pools = num_cores / N_TX; +// for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { +// float* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; +// float* in_matrix_ptr = in_matrix + 2*N_TX*N_TX * itr; +// float* sigma_ptr = sigma + N_TX * itr; +// mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0, core_id % N_TX, N_TX); +// } +// mempool_stop_benchmark(); +// mempool_start_benchmark(); +// for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { +// float* s_ptr = x + itr * 2*N_TX; +// mempool_MVP_conjtransp_f32s(ch_matrix + itr * 2*N_TX*N_RX, b + itr * 2*N_RX, s_ptr, N_RX, N_TX, 0); +// mempool_cholesky_f32s(in_matrix + itr * 2*N_TX*N_TX, out_matrix + itr * 2*N_TX*N_TX, N_TX); +// mempool_Ltrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, s_ptr, y + itr * 2*N_TX, N_TX); +// mempool_Lttrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, y + itr * 2*N_TX, x + itr * 2*N_TX, N_TX); +// } +// mempool_log_barrier(2, core_id); +// mempool_stop_benchmark(); + + // Each iteration is assigned to a pool of processors + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + float* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; + float* in_matrix_ptr = in_matrix + 2*N_TX*N_TX * itr; + float* sigma_ptr = sigma + N_TX * itr; + float* s_ptr = x + itr * 2*N_TX; + mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); + mempool_MVP_conjtransp_f32s(ch_matrix + itr * 2*N_TX*N_RX, b + itr * 2*N_RX, s_ptr, N_RX, N_TX, 0); + mempool_cholesky_f32s(in_matrix + itr * 2*N_TX*N_TX, out_matrix + itr * 2*N_TX*N_TX, N_TX); + mempool_Ltrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, s_ptr, y + itr * 2*N_TX, N_TX); + mempool_Lttrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, y + itr * 2*N_TX, x + itr * 2*N_TX, N_TX); + } + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); + +#endif + mempool_barrier(num_cores); + + // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); + // verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); + // verify_result(s, Out_s, N_TX, core_id); + // verify_result(y, Out_y, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); + // write_result(out_matrix, N_TX * N_TX * N_ITR, core_id); + mempool_barrier(num_cores); + return; +} + +#endif int main() { + #ifdef SINGLE #if defined(CHOLESKY) single_core_mimo_mmse_cholesky(); #elif defined(JACOBI) single_core_mimo_mmse_jacobi(); #endif + #endif + + #ifdef PARALLEL + parallel_mimo_mmse_cholesky(); + #endif return 0; } diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32.h deleted file mode 100644 index 7ee7975fb..000000000 --- a/software/apps/mimo_mmse_f32/mimo_mmse_f32.h +++ /dev/null @@ -1,448 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - - -dump(results,1); - -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx); -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j, k; - float a; - float b; - float c0, c1, c2, c3; - float d0, d1, d2, d3; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.s %[as0], %[a], %[c0], %[as0];" - "fmadd.s %[as1], %[a], %[c1], %[as1];" - "fmadd.s %[as2], %[a], %[c2], %[as2];" - "fmadd.s %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.s %[bs0], %[a], %[d0], %[bs0];" - "fmadd.s %[bs1], %[a], %[d1], %[bs1];" - "fmadd.s %[bs2], %[a], %[d2], %[bs2];" - "fmadd.s %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.s %[as0], %[b], %[d0], %[as0];" - "fmadd.s %[as1], %[b], %[d1], %[as1];" - "fmadd.s %[as2], %[b], %[d2], %[as2];" - "fmadd.s %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Compute diagonal elements - if (i == j) { - asm volatile ( - "fadd.s %[as0], %[as0], %[sigma];" - : [as0] "+&r" (as0) - : [sigma] "r" (sigma[i]) - :); - bs0 = 0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.s %[as1], %[as1], %[sigma];" - : [as1] "+&r" (as1) - : [sigma] "r" (sigma[i]) - :); - bs1 = 0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.s %[as2], %[as2], %[sigma];" - : [as2] "+&r" (as2) - : [sigma] "r" (sigma[i]) - :); - bs2 = 0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.s %[as3], %[as3], %[sigma];" - : [as3] "+&r" (as3) - : [sigma] "r" (sigma[i]) - :); - bs3 = 0.0f; - } - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - j += 4; - } while (j < (n_tx >> 2U)); - } - return; -} - -void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j; - float a0, a1, a2, a3; - float b0, b1, b2, b3; - float c, d; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - - i = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.s %[as0], %[a0], %[c], %[as0];" - "fmadd.s %[as1], %[a1], %[c], %[as1];" - "fmadd.s %[as2], %[a2], %[c], %[as2];" - "fmadd.s %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.s %[bs0], %[a0], %[d], %[bs0];" - "fmadd.s %[bs1], %[a1], %[d], %[bs1];" - "fmadd.s %[bs2], %[a2], %[d], %[bs2];" - "fmadd.s %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.s %[as0], %[b0], %[d], %[as0];" - "fmadd.s %[as1], %[b1], %[d], %[as1];" - "fmadd.s %[as2], %[b2], %[d], %[as2];" - "fmadd.s %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } while (i < (n_tx >> 4U)); - return; -} - -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { - - register float sum; - float a, b; - float c, d; - float diag; // Diagonal element - float ap, bp; // Pivot element - float as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.s %[sum], %[a], %[a], %[sum];" - "fmadd.s %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.s %[ap], %[ap], %[sum];" - "fsqrt.s %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = 0.0f; - bs = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.s %[ap], %[ap], %[as];" - "fsub.s %[bp], %[bp], %[bs];" - "fdiv.s %[ap], %[ap], %[diag];" - "fdiv.s %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - - -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = in[2U * i]; - bs = in[2U * i + 1]; - diag = pL[2 * (i * n + i)]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = in[2 * (n - i - 1)]; - bs = in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - -void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32_t n, const uint32_t max_iter) -{ - - uint32_t i, j, k; - float diff, error, den; - float as, bs; - float ab, bb; - float a, b; - float c, d; - - for (k = 0; k < max_iter; k++) { - // Initialize the diff variable - diff = 0.0f; - - /* COMPUTE THE SUM */ - for (i = 0; i < n; i++) { - as = 0.0f; - bs = 0.0f; - ab = in[2U * i]; - bb = in[2U * i + 1]; - den = pA[2U * (i * n + i)]; - // Compute the output - for (j = 0; j < n; j++) { - if (j != i) { - a = pA[2U * (i * n + j)]; - b = pA[2U * (i * n + j) + 1U]; - c = x[2U * j]; - d = x[2U * j + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - } - - /* COMPUTE THE NEW DATA */ - asm volatile ( - // subtract the sum from the input vector - "fsub.s %[as], %[ab], %[as];" - "fsub.s %[bs], %[bb], %[bs];" - // divide the result by the pivot - "fdiv.s %[as], %[as], %[den];" - "fdiv.s %[bs], %[bs], %[den];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [ab] "r" (ab), [bb] "r" (bb), [den] "r" (den) - :); - - /* COMPUTE THE DIFFERENCE */ - // Load the previous result - a = x[2U * i]; - b = x[2U * i + 1]; - // Compute diff - asm volatile ( - "fsub.s %[a], %[a], %[as];" - "fsub.s %[b], %[b], %[bs];" - : [a] "+&r" (a), [b] "+&r" (b) - : [as] "r" (as), [bs] "r" (bs) - :); - a = (a > 0.0f) ? a : (-a); - b = (b > 0.0f) ? b : (-b); - asm volatile ( - "fadd.s %[diff], %[a], %[diff];" - "fadd.s %[diff], %[b], %[diff];" - : [diff] "+&r" (diff) - : [a] "r" (a), [b] "r" (b) - :); - - /* STORE THE RESULT */ - x[2U * i] = as; - x[2U * i + 1U] = bs; - - } - /* COMPUTE THE ERROR */ - error = diff / (2.0f * (float)n); - if (error < tol){ - break; - } - } - return; -} diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32p.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32p.h new file mode 100644 index 000000000..f0ec8e139 --- /dev/null +++ b/software/apps/mimo_mmse_f32/mimo_mmse_f32p.h @@ -0,0 +1,216 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded, const uint32_t core_id, const uint32_t nPE); +void mempool_cholesky_f32p(float *pSrc, float *pL, const uint32_t n, const uint32_t nPE); +void mempool_Ltrisol_f32p(float *pL, float *in, float *x, const uint32_t n, const uint32_t nPE); +void mempool_Lttrisol_f32p(float *pL, float *in, float *x, const uint32_t n, const uint32_t nPE); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, const uint32_t n_rx, + const uint32_t n_tx, const uint32_t folded, const uint32_t core_id, const uint32_t nPE) { + + uint32_t i, j, k; + float a; + float b; + float c0, c1, c2, c3; + float d0, d1, d2, d3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = core_id; i < n_tx; i += nPE) { + for(j = 0; j < n_tx; j += 4) { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.s %[as0], %[a], %[c0], %[as0];" + "fmadd.s %[as1], %[a], %[c1], %[as1];" + "fmadd.s %[as2], %[a], %[c2], %[as2];" + "fmadd.s %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.s %[bs0], %[a], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a], %[d1], %[bs1];" + "fmadd.s %[bs2], %[a], %[d2], %[bs2];" + "fmadd.s %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.s %[as0], %[b], %[d0], %[as0];" + "fmadd.s %[as1], %[b], %[d1], %[as1];" + "fmadd.s %[as2], %[b], %[d2], %[as2];" + "fmadd.s %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Compute diagonal element + float s = sigma[i]; + if (i == j) { + asm volatile ( + "fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r" (as0) + : [sigma] "r" (s) + :); + bs0 = 0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r" (as1) + : [sigma] "r" (s) + :); + bs1 = 0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r" (as2) + : [sigma] "r" (s) + :); + bs2 = 0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r" (as3) + : [sigma] "r" (s) + :); + bs3 = 0.0f; + } + if (!folded) { + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + } else { + // Store + uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); + pG[addr] = as0; + pG[addr + 1U] = bs0; + pG[addr + 2U] = as1; + pG[addr + 3U] = bs1; + pG[addr + N_BANKS] = as2; + pG[addr + N_BANKS + 1U] = bs2; + pG[addr + N_BANKS + 2U] = as3; + pG[addr + N_BANKS + 3U] = bs3; + } + } + } + mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); + return; +} + +void mempool_MVP_conjtransp_f32p(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx, + const uint32_t core_id, const uint32_t nPE) { + + uint32_t i, j; + float a0, a1, a2, a3; + float b0, b1, b2, b3; + float c, d; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + + for (i = core_id; i < n_tx; i += 4 * nPE) { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.s %[as0], %[a0], %[c], %[as0];" + "fmadd.s %[as1], %[a1], %[c], %[as1];" + "fmadd.s %[as2], %[a2], %[c], %[as2];" + "fmadd.s %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.s %[bs0], %[a0], %[d], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d], %[bs1];" + "fmadd.s %[bs2], %[a2], %[d], %[bs2];" + "fmadd.s %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.s %[as0], %[b0], %[d], %[as0];" + "fmadd.s %[as1], %[b1], %[d], %[as1];" + "fmadd.s %[as2], %[b2], %[d], %[as2];" + "fmadd.s %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } + mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); + return; +} diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32s.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32s.h new file mode 100644 index 000000000..034c80500 --- /dev/null +++ b/software/apps/mimo_mmse_f32/mimo_mmse_f32s.h @@ -0,0 +1,703 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * 4) + +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded); +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { + + uint32_t i, j, k; + float a; + float b; + float c0, c1, c2, c3; + float d0, d1, d2, d3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + for (j = 0; j < n_tx; j += 4) { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + "fmadd.s %[as0], %[a], %[c0], %[as0];" + "fmadd.s %[as1], %[a], %[c1], %[as1];" + "fmadd.s %[as2], %[a], %[c2], %[as2];" + "fmadd.s %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.s %[bs0], %[a], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a], %[d1], %[bs1];" + "fmadd.s %[bs2], %[a], %[d2], %[bs2];" + "fmadd.s %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.s %[as0], %[b], %[d0], %[as0];" + "fmadd.s %[as1], %[b], %[d1], %[as1];" + "fmadd.s %[as2], %[b], %[d2], %[as2];" + "fmadd.s %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [a] "r" (a), [b] "r" (b), + [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), + [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile ( + "fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r" (as0) + : [sigma] "r" (sigma[i]) + :); + bs0 = 0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r" (as1) + : [sigma] "r" (sigma[i]) + :); + bs1 = 0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r" (as2) + : [sigma] "r" (sigma[i]) + :); + bs2 = 0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r" (as3) + : [sigma] "r" (sigma[i]) + :); + bs3 = 0.0f; + } + if (!folded) { + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + } else { + // Store + uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); + pG[addr] = as0; + pG[addr + 1U] = bs0; + pG[addr + 2U] = as1; + pG[addr + 3U] = bs1; + pG[addr + N_BANKS] = as2; + pG[addr + N_BANKS + 1U] = bs2; + pG[addr + N_BANKS + 2U] = as3; + pG[addr + N_BANKS + 3U] = bs3; + } + } + } + return; +} + +void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { + + uint32_t i, j; + float a0, a1, a2, a3; + float b0, b1, b2, b3; + float c, d; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile ( + // a * c + "fmadd.s %[as0], %[a0], %[c], %[as0];" + "fmadd.s %[as1], %[a1], %[c], %[as1];" + "fmadd.s %[as2], %[a2], %[c], %[as2];" + "fmadd.s %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.s %[bs0], %[a0], %[d], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d], %[bs1];" + "fmadd.s %[bs2], %[a2], %[d], %[bs2];" + "fmadd.s %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.s %[as0], %[b0], %[d], %[as0];" + "fmadd.s %[as1], %[b1], %[d], %[as1];" + "fmadd.s %[as2], %[b2], %[d], %[as2];" + "fmadd.s %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [c] "r" (c), [d] "r" (d), + [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), + [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) + :); + } + if (!folded) { + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } else { + // Store + uint32_t addr = (i / 4) * 2 * N_BANKS; + py[addr] = as0; + py[addr + 1U] = bs0; + py[addr + 2U] = as1; + py[addr + 3U] = bs1; + py[addr + N_BANKS] = as2; + py[addr + N_BANKS + 1U] = bs2; + py[addr + N_BANKS + 2U] = as3; + py[addr + N_BANKS + 3U] = bs3; + i += 4; + } + } while (i < n_tx); + return; +} + +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { + + register float sum; + float a, b; + float c, d; + float diag; // Diagonal element + float ap, bp; // Pivot element + float as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile( + "fmadd.s %[sum], %[a], %[a], %[sum];" + "fmadd.s %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.s %[ap], %[ap], %[sum];" + "fsqrt.s %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = 0.0f; + bs = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.s %[ap], %[ap], %[as];" + "fsub.s %[bp], %[bp], %[bs];" + "fdiv.s %[ap], %[ap], %[diag];" + "fdiv.s %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + + } + return; +} + + +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = in[2U * i]; + bs = in[2U * i + 1]; + diag = pL[2 * (i * n + i)]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile ( + "fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = in[2 * (n - i - 1)]; + bs = in[2 * (n - i - 1) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile ( + "fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + +void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32_t n, const uint32_t max_iter) { + uint32_t i, j, k; + float error; + float register diff, den; + float register as0, as1; + float register bs0, bs1; + float a0, a1; + float b0, b1; + float c0, c1; + float d0, d1; + for (k = 0; k < max_iter; k++) { + + // Initialize the diff variable + diff = 0.0f; + + + /* COMPUTE THE SUM */ + for (i = 0; i < n; i++) { + + den = pA[2U * (i * n + i)]; + as0 = in[2U * i]; + bs0 = in[2U * i + 1]; + as1 = 0.0f; + bs1 = 0.0f; + asm volatile ( + // divide the result by the pivot + "fdiv.s %[den], %[imm], %[den];" + : [den] "+&r" (den) : [imm] "r" ((uint32_t)0x3F800000) + :); + + /* COMPUTE OUTPUT */ + for(j = 0U; j < n; j += 2) { + if (i == j) { + a0 = pA[2U * (i * n + j + 1U)]; + b0 = pA[2U * (i * n + j + 1U) + 1U]; + c0 = x[2U * (j + 1U)]; + d0 = x[2U * (j + 1U) + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fnmsub.s %[as0], %[a0], %[c0], %[as0];" + "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" + "fmadd.s %[as0], %[b0], %[d0], %[as0];" + "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) + :); + } else if(i == (j + 1U)) { + a0 = pA[2U * (i * n + j)]; + b0 = pA[2U * (i * n + j) + 1U]; + c0 = x[2U * j]; + d0 = x[2U * j + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fnmsub.s %[as0], %[a0], %[c0], %[as0];" + "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" + "fmadd.s %[as0], %[b0], %[d0], %[as0];" + "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) + :); + } else { + a0 = pA[2U * (i * n + j)]; + a1 = pA[2U * (i * n + j + 1U)]; + b0 = pA[2U * (i * n + j) + 1U]; + b1 = pA[2U * (i * n + j + 1U) + 1U]; + c0 = x[2U * j]; + c1 = x[2U * (j + 1U)]; + d0 = x[2U * j + 1U]; + d1 = x[2U * (j + 1U) + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile ( + "fnmsub.s %[as0], %[a0], %[c0], %[as0];" + "fnmsub.s %[as1], %[a1], %[c1], %[as1];" + "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c1], %[bs1];" + "fmadd.s %[as0], %[b0], %[d0], %[as0];" + "fmadd.s %[as1], %[b1], %[d1], %[as1];" + "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" + "fnmsub.s %[bs1], %[a1], %[d1], %[bs1];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1) + : [a0] "r" (a0), [a1] "r" (a1), + [b0] "r" (b0), [b1] "r" (b1), + [c0] "r" (c0), [c1] "r" (c1), + [d0] "r" (d0), [d1] "r" (d1) + :); + } + } + // Partial sums + asm volatile ( + "fadd.s %[as0], %[as1], %[as0];" + "fadd.s %[bs0], %[bs1], %[bs0];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [as1] "r" (as1), [bs1] "r" (bs1) + :); + + /* COMPUTE THE NEW DATA (& DIFFERENCE)*/ + asm volatile ( + // divide the result by the pivot & compute difference + "fmul.s %[as0], %[as0], %[den];" + "fmul.s %[bs0], %[bs0], %[den];" + : [as0] "+&r" (as0), [bs0] "+&r" (bs0) + : [den] "r" (den) + :); + // Load the previous result + a0 = x[2U * i]; + b0 = x[2U * i + 1]; + asm volatile ( + "fsub.s %[a0], %[a0], %[as0];" + "fsub.s %[b0], %[b0], %[bs0];" + : [a0] "+&r" (a0), [b0] "+&r" (b0) + : [as0] "r" (as0), [bs0] "r" (bs0) + :); + // Add absolute value to total difference + a0 = (a0 > 0.0f) ? a0 : (-a0); + b0 = (b0 > 0.0f) ? b0 : (-b0); + asm volatile ( + "fadd.s %[diff], %[a0], %[diff];" + "fadd.s %[diff], %[b0], %[diff];" + : [diff] "+&r" (diff) + : [a0] "r" (a0), [b0] "r" (b0) + :); + + /* STORE THE RESULT */ + x[2U * i] = as0; + x[2U * i + 1U] = bs0; + } + + /* COMPUTE THE ERROR */ + asm volatile ( + // divide the result by the pivot + "fdiv.s %[error], %[diff], %[n_samples];" + : [error] "+&r" (error) + : [diff] "r" (diff), [n_samples] "r" (2.0f * (float)n) + :); + if (error < tol) + break; + + } + return; +} + +void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { + + register float sum; + + // first matrix row: + // item[0-2] item[1-3] + // memrow[0] x x x x + // memrow[1] x x x x + // second matrix row: + // memrow[2] x x x x + // memrow[3] x x x x + // third matrix row: + // memrow[4] x x x x + // memrow[5] x x x x + // i * memrow_xrow * N_BANKS + (j / local_items) * N_BANKS + j % local_items + + float a, b; + float c, d; + float diag; // Diagonal element + float ap, bp; // Pivot element + float as, bs; // Sum element + uint32_t banks_per_row = (n / 2) * N_BANKS; + + uint32_t i, j, k; + for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + sum = 0.0f; + for (k = 0; k < j; k++) { + a = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; + b = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + asm volatile( + "fmadd.s %[sum], %[a], %[a], %[sum];" + "fmadd.s %[sum], %[b], %[b], %[sum];" + : [sum] "+&r" (sum) + : [a] "r" (a), [b] "r" (b) :); + } + asm volatile( + "fsub.s %[ap], %[ap], %[sum];" + "fsqrt.s %[ap], %[ap];" + : [ap] "+&r" (ap) : [sum] "r" (sum) :); + pL[ j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) ] = ap; + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + bp = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; + // Diag + diag = pL[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = 0.0f; + bs = 0.0f; + for (k = 0; k < j; k++) { + a = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; + b = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + c = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; + d = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + asm volatile ( + "fmadd.s %[as], %[a], %[c], %[as];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + asm volatile ( + "fsub.s %[ap], %[ap], %[as];" + "fsub.s %[bp], %[bp], %[bs];" + "fdiv.s %[ap], %[ap], %[diag];" + "fdiv.s %[bp], %[bp], %[diag];" + : [ap] "+&r" (ap), [bp] "+&r" (bp) + : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) + :); + pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)] = ap; + pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1] = bp; + } + } + return; +} + + +void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + uint32_t banks_per_row = (n / 2) * N_BANKS; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[i * banks_per_row + (i / 2) * N_BANKS + 2 * (i % 2)]; + as = in[(i / 2) * N_BANKS + 2 * (i % 2)]; + bs = in[(i / 2) * N_BANKS + 2 * (i % 2) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + b = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; + c = x[(j / 2) * N_BANKS + 2 * (j % 2)]; + d = x[(j / 2) * N_BANKS + 2 * (j % 2) + 1]; + asm volatile ( + "fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[(i / 2) * N_BANKS + 2 * (i % 2)] = ax; + x[(i / 2) * N_BANKS + 2 * (i % 2) + 1] = bx; + } + return; +} + +void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + uint32_t banks_per_row = (n / 2) * N_BANKS; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + // reversed i index + uint32_t rev_i = (n - 1 - i); + diag = pL[rev_i * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; + as = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; + bs = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + // reversed j index + uint32_t rev_j = (n - 1 - j); + a = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; + b = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + 1]; + c = x[2U * rev_j]; + d = x[2U * rev_j + 1]; + asm volatile ( + "fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r" (as), [bs] "+&r" (bs) + : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile ( + "fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r" (ax), [bx] "+&r" (bx) + : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) + :); + x[2U * rev_i] = ax; + x[2U * rev_i + 1] = bx; + } + return; +} From 9c6906b5eab7d565866d12ca4c8d05f1979e2657 Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Mon, 17 Jul 2023 09:44:01 +0200 Subject: [PATCH 05/39] [software] Fix main of cholesky and MIMO MMSE --- software/apps/mimo_mmse_f16/main.c | 66 ++++----- software/apps/mimo_mmse_f32/main.c | 206 +++++++++++++++-------------- 2 files changed, 142 insertions(+), 130 deletions(-) diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/mimo_mmse_f16/main.c index 129955e35..9907bf0bf 100644 --- a/software/apps/mimo_mmse_f16/main.c +++ b/software/apps/mimo_mmse_f16/main.c @@ -23,14 +23,14 @@ typedef union { //#define SINGLE #define PARALLEL -#define FOLDED +//#define FOLDED #ifdef SINGLE __fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); __fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); __fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); -__fp16 b[2 * N_RX] __attribute__((section(".l1"))); +__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); +__fp16 b[2 * N_RX] __attribute__((section(".l1"))); __fp16 s[2 * N_TX] __attribute__((section(".l1"))); __fp16 x[2 * N_TX] __attribute__((section(".l1"))); @@ -38,15 +38,15 @@ __fp16 y[2 * N_TX] __attribute__((section(".l1"))); #endif #ifdef PARALLEL -__fp16 ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1"))); -__fp16 b[2 * N_RX * N_ITR] __attribute__((section(".l1"))); -__fp16 sigma[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); - -__fp16 in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"))); -__fp16 out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"))); -__fp16 s[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); -__fp16 x[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); -__fp16 y[2 * N_TX * N_ITR] __attribute__((section(".l1"), aligned(N_BANKS))); +__fp16 in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 s[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 x[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 y[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); + +__fp16 ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 sigma[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); #endif void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { @@ -134,11 +134,7 @@ void single_core_mimo_mmse() { } mempool_barrier(num_cores); - //verify_result(in_matrix, In_G, N_TX*N_TX, core_id); - //verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); - //verify_result(s, Out_s, N_TX, core_id); verify_result(x, Out_x, N_TX, core_id); - //write_result(x, N_TX, core_id); mempool_barrier(num_cores); return; } @@ -171,14 +167,17 @@ void parallel_mimo_mmse_cholesky() { #ifdef FOLDED mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - __fp16* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; - __fp16* sigma_ptr = sigma + 2*N_TX * itr; - __fp16* b_ptr = b + 2*N_RX * itr; - __fp16* in_matrix_ptr = in_matrix + itr * 2*N_TX + (itr / num_cores) * (N_TX * N_BANKS); - __fp16* out_matrix_ptr = out_matrix + itr * 2*N_TX + (itr / num_cores) * (N_TX * N_BANKS); - __fp16* s_ptr = s + itr * 2*N_TX + (itr / num_cores) * (N_BANKS); - __fp16* y_ptr = y + itr * 2*N_TX + (itr / num_cores) * (N_BANKS); - __fp16* x_ptr = x + 2*N_TX * itr; + + __fp16* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + __fp16* sigma_ptr = sigma + itr * (2 * N_TX); + __fp16* b_ptr = b + itr * (2 * N_RX); + + __fp16* in_matrix_ptr = in_matrix + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_TX * N_BANKS); + __fp16* out_matrix_ptr = out_matrix + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_TX * N_BANKS); + __fp16* s_ptr = s + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); + __fp16* y_ptr = y + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); + __fp16* x_ptr = x + itr * (2 * N_TX); + mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); mempool_cholesky_folded_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); @@ -191,14 +190,17 @@ void parallel_mimo_mmse_cholesky() { // Each iteration is assigned to a processor mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - __fp16* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; - __fp16* sigma_ptr = sigma + 2*N_TX * itr; - __fp16* b_ptr = b + 2*N_RX * itr; - __fp16* in_matrix_ptr = in_matrix + 2*N_TX*N_TX * itr; - __fp16* out_matrix_ptr = out_matrix + 2*N_TX*N_TX * itr; - __fp16* s_ptr = s + 2*N_TX * itr; - __fp16* y_ptr = y + 2*N_TX * itr; - __fp16* x_ptr = x + 2*N_TX * itr; + + __fp16* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + __fp16* sigma_ptr = sigma + itr * (2 * N_TX); + __fp16* b_ptr = b + itr * (2 * N_RX); + + __fp16* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + __fp16* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); + __fp16* s_ptr = s + itr * (2 * N_TX); + __fp16* y_ptr = y + itr * (2 * N_TX); + __fp16* x_ptr = x + itr * (2 * N_TX); + mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); mempool_cholesky_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c index ec8520019..f9eb0a384 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/mimo_mmse_f32/main.c @@ -28,8 +28,8 @@ dump(id,1); float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -float sigma[2 * N_TX] __attribute__((section(".l1"))); -float b[2 * N_RX] __attribute__((section(".l1"))); +float sigma[2 * N_TX] __attribute__((section(".l1"))); +float b[2 * N_RX] __attribute__((section(".l1"))); float s[2 * N_TX] __attribute__((section(".l1"))); float x[2 * N_TX] __attribute__((section(".l1"))); @@ -37,20 +37,20 @@ float y[2 * N_TX] __attribute__((section(".l1"))); #endif #ifdef PARALLEL -float ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1"))); -float b[2 * N_RX * N_ITR] __attribute__((section(".l1"))); -float sigma[N_TX * N_ITR] __attribute__((section(".l1"))); - -float in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1"))); -float out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1"))); -float s[2 * N_TX * N_ITR] __attribute__((aligned(N_BANKS), section(".l1"))); -float x[2 * N_TX * N_ITR] __attribute__((aligned(N_BANKS), section(".l1"))); -float y[2 * N_TX * N_ITR] __attribute__((aligned(N_BANKS), section(".l1"))); +float in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float s[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float x[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float y[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); + +float ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +float b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +float sigma[N_TX * N_ITR] __attribute__((section(".l1_prio"))); #endif void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { uint32_t i = 0; - for (i = core_id; i < 2 * dim; i+=num_cores) { + for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = data[i]; } mempool_barrier(num_cores); @@ -59,7 +59,7 @@ void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { uint32_t i = 0; - for (i = core_id; i < 2 * dim; i+=num_cores) { + for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = 0.0f; } mempool_barrier(num_cores); @@ -121,11 +121,11 @@ void single_core_mimo_mmse_cholesky() { if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX); + mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX, 0); mempool_stop_benchmark(); mempool_start_benchmark(); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); mempool_cholesky_f32s(in_matrix, out_matrix, N_TX); mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); @@ -133,13 +133,7 @@ void single_core_mimo_mmse_cholesky() { } mempool_barrier(num_cores); - - // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); - // verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); - // verify_result(s, Out_s, N_TX, core_id); - // verify_result(y, Out_y, N_TX, core_id); - // verify_result(x, Out_x, N_TX, core_id); - // write_result(x, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); mempool_barrier(num_cores); return; } @@ -162,18 +156,18 @@ void single_core_mimo_mmse_jacobi() { /* Benchmark */ if (core_id == 0) { + mempool_start_benchmark(); mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); + mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX, 0); + mempool_stop_benchmark(); + + mempool_start_benchmark(); mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); mempool_stop_benchmark(); } mempool_barrier(num_cores); - - // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); - // verify_result(s, Out_s, N_TX, core_id); - // verify_result(y, Out_y, N_TX, core_id); - // verify_result(x, Out_x, N_TX, core_id); + verify_result(x, Out_x, N_TX, core_id); mempool_barrier(num_cores); return; } @@ -206,101 +200,117 @@ void parallel_mimo_mmse_cholesky() { #ifdef FOLDED -// mempool_start_benchmark(); -// // Each iteration is assigned to a pool of processors -// // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix -// uint32_t pool_id = core_id / N_TX; -// uint32_t num_pools = num_cores / N_TX; -// for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { -// float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); -// float* in_matrix_ptr = in_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); -// float* sigma_ptr = sigma + N_TX * itr; -// mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1, core_id % N_TX, N_TX); -// } -// mempool_stop_benchmark(); -// mempool_start_benchmark(); -// for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { -// float* s_ptr = s + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); -// float* y_ptr = y + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); -// float* in_matrix_ptr = in_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); -// float* out_matrix_ptr = out_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); -// mempool_MVP_conjtransp_f32s(ch_matrix + itr * (2 * N_TX * N_RX), b + itr * (2 * N_RX), s_ptr, N_RX, N_TX, 1); -// mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); -// mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); -// mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x + itr * (2 * N_TX), N_TX); -// } -// mempool_log_barrier(2, core_id); -// mempool_stop_benchmark(); - + mempool_start_benchmark(); + // Each iteration is assigned to a pool of processors + // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix + uint32_t pool_id = core_id / N_TX; + uint32_t num_pools = num_cores / N_TX; + for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { + // Inputs + float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float* sigma_ptr = sigma + itr * N_TX; + // Intermediate results and outputs + float* in_matrix_ptr = in_matrix + (itr % num_pools) * N_TX + (itr / num_pools) * (2 * N_TX * N_BANKS); + mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1, core_id % N_TX, N_TX); + } + mempool_stop_benchmark(); mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { // Inputs float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float* sigma_ptr = sigma + N_TX * itr; + float* b_ptr = b + itr * (2 * N_RX); // Intermediate results and outputs - float* s_ptr = s + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); - float* y_ptr = y + itr * N_TX + (itr / num_cores) * (2 * N_BANKS); - float* in_matrix_ptr = in_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); - float* out_matrix_ptr = out_matrix + itr * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); - mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); - mempool_MVP_conjtransp_f32s(ch_matrix + itr * (2 * N_TX * N_RX), b + itr * (2 * N_RX), s_ptr, N_RX, N_TX, 1); + float* in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); + float* out_matrix_ptr = out_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); + float* s_ptr = s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float* y_ptr = y + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float* x_ptr = x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); - mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x + itr * (2 * N_TX), N_TX); + mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); -#else - -// mempool_start_benchmark(); -// // Each iteration is assigned to a pool of processors -// // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix -// uint32_t pool_id = core_id / N_TX; -// uint32_t num_pools = num_cores / N_TX; -// for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { -// float* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; -// float* in_matrix_ptr = in_matrix + 2*N_TX*N_TX * itr; -// float* sigma_ptr = sigma + N_TX * itr; -// mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0, core_id % N_TX, N_TX); -// } -// mempool_stop_benchmark(); // mempool_start_benchmark(); // for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { -// float* s_ptr = x + itr * 2*N_TX; -// mempool_MVP_conjtransp_f32s(ch_matrix + itr * 2*N_TX*N_RX, b + itr * 2*N_RX, s_ptr, N_RX, N_TX, 0); -// mempool_cholesky_f32s(in_matrix + itr * 2*N_TX*N_TX, out_matrix + itr * 2*N_TX*N_TX, N_TX); -// mempool_Ltrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, s_ptr, y + itr * 2*N_TX, N_TX); -// mempool_Lttrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, y + itr * 2*N_TX, x + itr * 2*N_TX, N_TX); +// // Inputs +// float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); +// float* sigma_ptr = sigma + itr * N_TX; +// float* b_ptr = b + itr * (2 * N_RX); +// // Intermediate results and outputs +// float* in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); +// float* out_matrix_ptr = out_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); +// float* s_ptr = s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); +// float* y_ptr = y + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); +// float* x_ptr = x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); +// mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); +// mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); +// mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); +// mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); +// mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); // } // mempool_log_barrier(2, core_id); // mempool_stop_benchmark(); +#else + + mempool_start_benchmark(); // Each iteration is assigned to a pool of processors + // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix + uint32_t pool_id = core_id / N_TX; + uint32_t num_pools = num_cores / N_TX; + for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { + float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + float* sigma_ptr = sigma + itr * N_TX; + mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0, core_id % N_TX, N_TX); + } + mempool_stop_benchmark(); mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - float* ch_matrix_ptr = ch_matrix + 2*N_TX*N_RX * itr; - float* in_matrix_ptr = in_matrix + 2*N_TX*N_TX * itr; - float* sigma_ptr = sigma + N_TX * itr; - float* s_ptr = x + itr * 2*N_TX; - mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); - mempool_MVP_conjtransp_f32s(ch_matrix + itr * 2*N_TX*N_RX, b + itr * 2*N_RX, s_ptr, N_RX, N_TX, 0); - mempool_cholesky_f32s(in_matrix + itr * 2*N_TX*N_TX, out_matrix + itr * 2*N_TX*N_TX, N_TX); - mempool_Ltrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, s_ptr, y + itr * 2*N_TX, N_TX); - mempool_Lttrisol_f32s(out_matrix + itr * 2*N_TX*N_TX, y + itr * 2*N_TX, x + itr * 2*N_TX, N_TX); + // Inputs + float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float* sigma_ptr = sigma + itr * N_TX; + float* b_ptr = b + itr * (2 * N_RX); + // Intermediate results and outputs + float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + float* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); + float* s_ptr = s + itr * (2 * N_TX); + float* y_ptr = y + itr * (2 * N_TX); + float* x_ptr = x + itr * (2 * N_TX); + mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); + mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); + mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); + mempool_Lttrisol_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); -#endif - mempool_barrier(num_cores); +// // Each iteration is assigned to a pool of processors +// mempool_start_benchmark(); +// for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { +// // Inputs +// float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); +// float* sigma_ptr = sigma + itr * N_TX; +// float* b_ptr = b + itr * (2 * N_RX); +// // Intermediate results and outputs +// float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); +// float* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); +// float* s_ptr = s + itr * (2 * N_TX); +// float* y_ptr = y + itr * (2 * N_TX); +// float* x_ptr = x + itr * (2 * N_TX); +// mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); +// mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); +// mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); +// mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); +// mempool_Lttrisol_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); +// } +// mempool_log_barrier(2, core_id); +// mempool_stop_benchmark(); - // verify_result(in_matrix, In_G, N_TX*N_TX, core_id); - // verify_result(out_matrix, Out_L, N_TX*N_TX, core_id); - // verify_result(s, Out_s, N_TX, core_id); - // verify_result(y, Out_y, N_TX, core_id); - verify_result(x, Out_x, N_TX, core_id); - // write_result(out_matrix, N_TX * N_TX * N_ITR, core_id); +#endif mempool_barrier(num_cores); return; } From 2b3fa206ac155a3f06ab48150d18d7d7d6b1a21f Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Mon, 17 Jul 2023 11:25:10 +0200 Subject: [PATCH 06/39] [software] Move kernels and data generation scripts to runtime folder --- software/apps/axb_f16/axb_f16.h | 180 - software/apps/axb_f16/data_axb.h.tpl | 25 - software/apps/axb_f16/data_axb.py | 114 - software/apps/axb_f16/main.c | 112 - software/apps/choldec_f16/choldec_f16.h | 80 - software/apps/choldec_f16/main.c | 74 - software/apps/cholesky_f16/main.c | 81 + software/apps/mimo_mmse_f16/main.c | 164 +- software/apps/mimo_mmse_f16/mimo_mmse_f16s.h | 670 - .../apps/mimo_mmse_f32/data_mimo_mmse_f32.h | 11669 ---------------- software/apps/mimo_mmse_f32/main.c | 262 +- software/apps/mimo_mmse_f32/mimo_mmse_f32p.h | 216 - software/apps/mimo_mmse_f32/mimo_mmse_f32s.h | 703 - software/apps/mimo_zf_f16/data_mimo_zf.h.tpl | 37 - software/apps/mimo_zf_f16/data_mimo_zf.py | 138 - software/apps/mimo_zf_f16/data_mimo_zf_f16.h | 78 - software/apps/mimo_zf_f16/main.c | 127 - software/apps/mimo_zf_f16/mimo_zf_f16.h | 338 - software/apps/mimo_zf_f32/data_mimo_zf.h.tpl | 39 - software/apps/mimo_zf_f32/data_mimo_zf.py | 138 - software/apps/mimo_zf_f32/data_mimo_zf_f32.h | 78 - software/apps/mimo_zf_f32/main.c | 151 - software/apps/mimo_zf_f32/mimo_zf_f32.h | 473 - .../kernels/baremetal/mempool_cholesky_f16s.h | 148 + .../kernels/baremetal/mempool_cholesky_f32s.h | 160 + .../baremetal/mempool_linearsolver_f16s.h | 184 + .../baremetal/mempool_linearsolver_f32s.h | 188 + .../baremetal/mempool_mimo_mmse_f16s.h | 347 + .../baremetal/mempool_mimo_mmse_f32p.h | 218 + .../baremetal/mempool_mimo_mmse_f32s.h | 367 + .../data/data_cholesky_f16.h.tpl} | 7 +- .../data/data_cholesky_f16.py} | 42 +- .../data/data_mimo_mmse_f16.h.tpl} | 0 .../data/data_mimo_mmse_f16.py} | 15 +- .../data/data_mimo_mmse_f32.h.tpl} | 0 .../data/data_mimo_mmse_f32.py} | 15 +- 36 files changed, 1965 insertions(+), 15673 deletions(-) delete mode 100644 software/apps/axb_f16/axb_f16.h delete mode 100644 software/apps/axb_f16/data_axb.h.tpl delete mode 100644 software/apps/axb_f16/data_axb.py delete mode 100644 software/apps/axb_f16/main.c delete mode 100644 software/apps/choldec_f16/choldec_f16.h delete mode 100644 software/apps/choldec_f16/main.c create mode 100644 software/apps/cholesky_f16/main.c delete mode 100644 software/apps/mimo_mmse_f16/mimo_mmse_f16s.h delete mode 100644 software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h delete mode 100644 software/apps/mimo_mmse_f32/mimo_mmse_f32p.h delete mode 100644 software/apps/mimo_mmse_f32/mimo_mmse_f32s.h delete mode 100644 software/apps/mimo_zf_f16/data_mimo_zf.h.tpl delete mode 100644 software/apps/mimo_zf_f16/data_mimo_zf.py delete mode 100644 software/apps/mimo_zf_f16/data_mimo_zf_f16.h delete mode 100644 software/apps/mimo_zf_f16/main.c delete mode 100644 software/apps/mimo_zf_f16/mimo_zf_f16.h delete mode 100644 software/apps/mimo_zf_f32/data_mimo_zf.h.tpl delete mode 100644 software/apps/mimo_zf_f32/data_mimo_zf.py delete mode 100644 software/apps/mimo_zf_f32/data_mimo_zf_f32.h delete mode 100644 software/apps/mimo_zf_f32/main.c delete mode 100644 software/apps/mimo_zf_f32/mimo_zf_f32.h create mode 100644 software/kernels/baremetal/mempool_cholesky_f16s.h create mode 100644 software/kernels/baremetal/mempool_cholesky_f32s.h create mode 100644 software/kernels/baremetal/mempool_linearsolver_f16s.h create mode 100644 software/kernels/baremetal/mempool_linearsolver_f32s.h create mode 100644 software/kernels/baremetal/mempool_mimo_mmse_f16s.h create mode 100644 software/kernels/baremetal/mempool_mimo_mmse_f32p.h create mode 100644 software/kernels/baremetal/mempool_mimo_mmse_f32s.h rename software/{apps/choldec_f16/data_choldec.h.tpl => runtime/data/data_cholesky_f16.h.tpl} (72%) rename software/{apps/choldec_f16/data_choldec.py => runtime/data/data_cholesky_f16.py} (66%) rename software/{apps/mimo_mmse_f16/data_mimo_mmse.h.tpl => runtime/data/data_mimo_mmse_f16.h.tpl} (100%) rename software/{apps/mimo_mmse_f16/data_mimo_mmse.py => runtime/data/data_mimo_mmse_f16.py} (88%) rename software/{apps/mimo_mmse_f32/data_mimo_mmse.h.tpl => runtime/data/data_mimo_mmse_f32.h.tpl} (100%) rename software/{apps/mimo_mmse_f32/data_mimo_mmse.py => runtime/data/data_mimo_mmse_f32.py} (88%) diff --git a/software/apps/axb_f16/axb_f16.h b/software/apps/axb_f16/axb_f16.h deleted file mode 100644 index dfc2f7b03..000000000 --- a/software/apps/axb_f16/axb_f16.h +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ab, bb; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * (i * n + i)]; - ab = in[2U * i]; - bb = in[2U * i + 1]; - asm volatile ( - "fsub.h %[ax], %[ab], %[as];" - "fsub.h %[bx], %[bb], %[bs];" - "fdiv.h %[ax], %[ax], %[diag];" - "fdiv.h %[bx], %[bx], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ab, bb; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - ab = in[2 * (n - i - 1)]; - bb = in[2 * (n - i - 1) + 1]; - asm volatile ( - "fsub.h %[ax], %[ab], %[as];" - "fsub.h %[bx], %[bb], %[bs];" - "fdiv.h %[ax], %[ax], %[diag];" - "fdiv.h %[bx], %[bx], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - - diff --git a/software/apps/axb_f16/data_axb.h.tpl b/software/apps/axb_f16/data_axb.h.tpl deleted file mode 100644 index 7366e9d32..000000000 --- a/software/apps/axb_f16/data_axb.h.tpl +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define N_TX (${N_tx}) -#define N_RX (${N_rx}) - -__fp16 In_G[${2 * N_tx * N_rx}] = ${array_to_cstr(G)}; -__fp16 In_b[${2 * N_tx * N_rx}] = ${array_to_cstr(b)}; - -__fp16 Out_L[${2 * N_tx * N_rx}] = ${array_to_cstr(L)}; -__fp16 Out_x[${2 * N_tx * N_rx}] = ${array_to_cstr(x)}; diff --git a/software/apps/axb_f16/data_axb.py b/software/apps/axb_f16/data_axb.py deleted file mode 100644 index 8020d84d5..000000000 --- a/software/apps/axb_f16/data_axb.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python3 - -import numpy as np -import argparse -import pathlib -from scipy.linalg import solve_triangular -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"data_{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path.cwd(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path.cwd() / "data_axb.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=4, - help='First dimension.' - ) - - args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers - - # Create hermitian matrix - H = np.random.rand(N_rx, N_tx) + 1.j * np.random.rand(N_tx, N_rx) - # Matrix to be inverted - G = H*(np.asmatrix(H).H) - # Cholesky decomposition - L = np.linalg.cholesky(G) - - # Create input vector - b = np.random.rand(N_tx) + 1.j * np.random.rand(N_tx) - y = solve_triangular(L, b, lower=True) - x = solve_triangular(np.transpose(L), y) - - G = np.reshape(G, (N_tx*N_rx, -1), order='C') - L = np.reshape(L, (N_tx*N_rx, -1), order='C') - G_RI = np.zeros(2*N_tx*N_rx) - L_RI = np.zeros(2*N_tx*N_rx) - b_RI = np.zeros(2*N_tx) - x_RI = np.zeros(2*N_tx) - - for i in range(N_tx*N_rx): - G_RI[2*i] = G[i].real - G_RI[2*i+1] = G[i].imag - L_RI[2*i] = L[i].real - L_RI[2*i+1] = L[i].imag - for i in range(N_tx): - b_RI[2*i] = b[i].real - b_RI[2*i+1] = b[i].imag - x_RI[2*i] = x[i].real - x_RI[2*i+1] = x[i].imag - - G_RI = G_RI.astype(np.float16) - L_RI = L_RI.astype(np.float16) - b_RI = b_RI.astype(np.float16) - x_RI = x_RI.astype(np.float16) - print("Input matrix in (Re, Im) format:\n", G_RI) - print("Output matrix in (Re, Im) format:\n", L_RI) - print("Input vector in (Re, Im) format:\n", b_RI) - print("Output vector in (Re, Im) format:\n", x_RI) - - - kwargs = {'name': 'axb_f16', 'G': G_RI, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} - gen_data_header_file(args.outdir, args.tpl, **kwargs) - -if __name__ == "__main__": - main() diff --git a/software/apps/axb_f16/main.c b/software/apps/axb_f16/main.c deleted file mode 100644 index 37f3d6b42..000000000 --- a/software/apps/axb_f16/main.c +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#include "encoding.h" -#include "printf.h" -#include "runtime.h" -#include "synchronization.h" -#include "axb_f16.h" - -/* DATA */ -#include "data_axb_f16.h" - -dump(res,1); - -__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); -__fp16 b[2 * N_RX] __attribute__((section(".l1"))); - -__fp16 s[2 * N_TX] __attribute__((section(".l1"))); -__fp16 x[2 * N_TX] __attribute__((section(".l1"))); -__fp16 y[2 * N_TX] __attribute__((section(".l1"))); - -void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = data[i]; - } - mempool_barrier(num_cores); - return; -} - -void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = (__fp16) (0x0000); - } - mempool_barrier(num_cores); - return; -} - -void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - __fp16 error; - __fp16 exp = pExp[i]; - __fp16 res = pRes[i]; - asm volatile( - "fsub.h %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - : ); - if (*(int32_t*)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); - } - } - } -} - -void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - - __fp16 in = pRes[i]; - // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ - float cvt_out; - asm volatile( - "fcvt.h.s %[cvt_out], %[in];" - : [cvt_out] "=&r"(cvt_out) - : [in] "r" (in) - : ); - dump_res(*(uint32_t*)&cvt_out); - - } - } -} - -// Driver program -void single_core_axb() { - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// - /* Initialize matrices */ - initialize(in_matrix, In_G, N_TX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(b, In_b, N_TX, core_id, num_cores); - initialize_zeros(y, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores);// - /* Benchmark */ - if (core_id == 0) { - mempool_start_benchmark(); - mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); - mempool_Ltrisol_f16s(out_matrix, b, y, N_TX); - mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); - verify_result(out_matrix, Out_L, N_TX, core_id); - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} - -int main() { - single_core_axb(); - return 0; -} diff --git a/software/apps/choldec_f16/choldec_f16.h b/software/apps/choldec_f16/choldec_f16.h deleted file mode 100644 index d47001730..000000000 --- a/software/apps/choldec_f16/choldec_f16.h +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} diff --git a/software/apps/choldec_f16/main.c b/software/apps/choldec_f16/main.c deleted file mode 100644 index 0fbe03d39..000000000 --- a/software/apps/choldec_f16/main.c +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#include "encoding.h" -#include "printf.h" -#include "runtime.h" -#include "synchronization.h" - -#include "choldecf16.h" -#include "data_choldecf16.h" -__fp16 in_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -__fp16 out_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); - -void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { -void initialize(__fp16 *in_matrix, __fp16 *out_matrix, __fp16 *In, - uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = (__fp16) (0x0000); - } - mempool_barrier(num_cores); - return; -} - -void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - __fp16 error; - __fp16 exp = pExp[i]; - __fp16 res = pRes[i]; - asm volatile( - "fsub.h %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - : ); - if (*(int32_t*)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); - } - } - } -} - - -// Driver program -void single_core() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize - /* Initialize matrices */ - initialize(in_matrix, In_G, N_RX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_RX*N_TX, core_id, num_cores); - /* Benchmark */ - if (core_id == 0) { - mempool_start_benchmark(); - mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); - mempool_Ltrisol_f16s(out_matrix, b, y, N_TX); - mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); - verify_result(out_matrix, Out_L, N_TX * N_RX, core_id); - mempool_barrier(num_cores); - return; -} - - -int main() { - single_core(); - return 0; -} diff --git a/software/apps/cholesky_f16/main.c b/software/apps/cholesky_f16/main.c new file mode 100644 index 000000000..78e47750b --- /dev/null +++ b/software/apps/cholesky_f16/main.c @@ -0,0 +1,81 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data/data_cholesky_f16.h" +#include "kernel/mempool_cholesky_f16s.h" + +__fp16 in_matrix[2 * N * N] __attribute__((section(".l1"))); +__fp16 out_matrix[2 * N * N] __attribute__((section(".l1"))); + +void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, + uint32_t num_cores) { + uint32_t i = 0; + for (i = core_id; i < 2 * dim; i += num_cores) { + matrix[i] = data[i]; + } + mempool_barrier(num_cores); + return; +} + +void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, + uint32_t num_cores) { + uint32_t i = 0; + __fp16 zero = (__fp16)(0x0000); + for (i = core_id; i < 2 * dim; i += num_cores) { + matrix[i] = zero; + } + mempool_barrier(num_cores); + return; +} + +void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, + uint32_t core_id) { + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * dim; i++) { + __fp16 error; + __fp16 exp = pExp[i]; + __fp16 res = pRes[i]; + asm volatile("fsub.h %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + :); + if (*(int32_t *)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t *)&error, + *(int32_t *)&exp, *(int32_t *)&res); + } + } + } +} + +// Driver program +void single_core() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize + /* Initialize matrices */ + initialize(in_matrix, In_G, N * N, core_id, num_cores); + initialize_zeros(out_matrix, N * N, core_id, num_cores); + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_cholesky_f16s(in_matrix, out_matrix, N); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + verify_result(out_matrix, Out_L, N * N, core_id); + mempool_barrier(num_cores); + return; +} + +int main() { + single_core(); + return 0; +} diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/mimo_mmse_f16/main.c index 9907bf0bf..195cc8303 100644 --- a/software/apps/mimo_mmse_f16/main.c +++ b/software/apps/mimo_mmse_f16/main.c @@ -12,44 +12,52 @@ typedef signed short v2s __attribute__((vector_size(4))); typedef __fp16 v2f16 __attribute__((vector_size(4))); typedef union { - float f32; - v2f16 vec; + float f32; + v2f16 vec; } v2h; -#include "mimo_mmse_f16s.h" +#include "kernel/mempool_cholesky_f16s.h" +#include "kernel/mempool_linearsolver_f16s.h" +#include "kernel/mempool_mimo_mmse_f16s.h" /* DATA */ -#include "data_mimo_mmse_f16.h" +#include "data/data_mimo_mmse_f16.h" //#define SINGLE #define PARALLEL //#define FOLDED #ifdef SINGLE -__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); -__fp16 b[2 * N_RX] __attribute__((section(".l1"))); - -__fp16 s[2 * N_TX] __attribute__((section(".l1"))); -__fp16 x[2 * N_TX] __attribute__((section(".l1"))); -__fp16 y[2 * N_TX] __attribute__((section(".l1"))); +__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); +__fp16 b[2 * N_RX] __attribute__((section(".l1"))); + +__fp16 s[2 * N_TX] __attribute__((section(".l1"))); +__fp16 x[2 * N_TX] __attribute__((section(".l1"))); +__fp16 y[2 * N_TX] __attribute__((section(".l1"))); #endif #ifdef PARALLEL -__fp16 in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 s[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 x[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 y[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); - -__fp16 ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -__fp16 b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -__fp16 sigma[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 in_matrix[2 * N_TX * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 out_matrix[2 * N_TX * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 s[2 * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 x[2 * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +__fp16 y[2 * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); + +__fp16 ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +__fp16 sigma[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); #endif -void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { +void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, + uint32_t num_cores) { uint32_t i = 0; for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = data[i]; @@ -58,9 +66,10 @@ void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, ui return; } -void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { +void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, + uint32_t num_cores) { uint32_t i = 0; - __fp16 zero = (__fp16) (0x0000); + __fp16 zero = (__fp16)(0x0000); for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = zero; } @@ -74,13 +83,13 @@ void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { __fp16 error; __fp16 exp = pExp[i]; __fp16 res = pRes[i]; - asm volatile( - "fsub.h %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - : ); - if (*(int32_t*)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + asm volatile("fsub.h %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + :); + if (*(int32_t *)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t *)&error, + *(int32_t *)&exp, *(int32_t *)&res); } } } @@ -91,14 +100,12 @@ void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { for (uint32_t i = 0; i < 2 * dim; i++) { __fp16 in = pRes[i]; -// uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ + // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ float cvt_out; - asm volatile( - "fcvt.h.s %[cvt_out], %[in];" - : [cvt_out] "=&r"(cvt_out) - : [in] "r" (in) - : ); - + asm volatile("fcvt.h.s %[cvt_out], %[in];" + : [cvt_out] "=&r"(cvt_out) + : [in] "r"(in) + :); } } } @@ -111,9 +118,9 @@ void single_core_mimo_mmse() { mempool_barrier_init(core_id); // Initialize barrier and synchronize// /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + initialize(ch_matrix, In_H, N_RX * N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX * N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX * N_TX, core_id, num_cores); /* Initialize vectors */ initialize(sigma, In_sigma, N_TX, core_id, num_cores); initialize(b, In_b, N_RX, core_id, num_cores); @@ -125,7 +132,7 @@ void single_core_mimo_mmse() { /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f16s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); + mempool_hermitian_f16s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0, 0); mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX, 0); mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); mempool_Ltrisol_f16s(out_matrix, s, y, N_TX); @@ -147,38 +154,42 @@ void parallel_mimo_mmse_cholesky() { mempool_barrier_init(core_id); // Initialize barrier and synchronize// /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX*N_ITR, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); + initialize(ch_matrix, In_H, N_RX * N_TX * N_ITR, core_id, num_cores); + initialize_zeros(in_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); + initialize_zeros(out_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); /* Initialize vectors */ uint32_t i = 0; - for (i = core_id; i < (N_TX*N_ITR); i += num_cores) { + for (i = core_id; i < (N_TX * N_ITR); i += num_cores) { sigma[2 * i] = In_sigma[i]; } mempool_barrier(num_cores); - initialize(b, In_b, N_RX*N_ITR, core_id, num_cores); + initialize(b, In_b, N_RX * N_ITR, core_id, num_cores); /* Initialize results */ - initialize_zeros(s, N_TX*N_ITR, core_id, num_cores); - initialize_zeros(y, N_TX*N_ITR, core_id, num_cores); - initialize_zeros(x, N_TX*N_ITR, core_id, num_cores); - dump_res1(core_id); + initialize_zeros(s, N_TX * N_ITR, core_id, num_cores); + initialize_zeros(y, N_TX * N_ITR, core_id, num_cores); + initialize_zeros(x, N_TX * N_ITR, core_id, num_cores); /* Benchmark */ #ifdef FOLDED mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - __fp16* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - __fp16* sigma_ptr = sigma + itr * (2 * N_TX); - __fp16* b_ptr = b + itr * (2 * N_RX); - - __fp16* in_matrix_ptr = in_matrix + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_TX * N_BANKS); - __fp16* out_matrix_ptr = out_matrix + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_TX * N_BANKS); - __fp16* s_ptr = s + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); - __fp16* y_ptr = y + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); - __fp16* x_ptr = x + itr * (2 * N_TX); - - mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); + __fp16 *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + __fp16 *sigma_ptr = sigma + itr * (2 * N_TX); + __fp16 *b_ptr = b + itr * (2 * N_RX); + + __fp16 *in_matrix_ptr = in_matrix + (itr % num_cores) * (2 * N_TX) + + (itr / num_cores) * (N_TX * N_BANKS); + __fp16 *out_matrix_ptr = out_matrix + (itr % num_cores) * (2 * N_TX) + + (itr / num_cores) * (N_TX * N_BANKS); + __fp16 *s_ptr = + s + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); + __fp16 *y_ptr = + y + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); + __fp16 *x_ptr = x + itr * (2 * N_TX); + + mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, + 1, 0); mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); mempool_cholesky_folded_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); mempool_Ltrisol_folded_f16s(out_matrix_ptr, s_ptr, y_ptr, N_TX); @@ -191,17 +202,18 @@ void parallel_mimo_mmse_cholesky() { mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - __fp16* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - __fp16* sigma_ptr = sigma + itr * (2 * N_TX); - __fp16* b_ptr = b + itr * (2 * N_RX); + __fp16 *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + __fp16 *sigma_ptr = sigma + itr * (2 * N_TX); + __fp16 *b_ptr = b + itr * (2 * N_RX); - __fp16* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - __fp16* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); - __fp16* s_ptr = s + itr * (2 * N_TX); - __fp16* y_ptr = y + itr * (2 * N_TX); - __fp16* x_ptr = x + itr * (2 * N_TX); + __fp16 *in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + __fp16 *out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); + __fp16 *s_ptr = s + itr * (2 * N_TX); + __fp16 *y_ptr = y + itr * (2 * N_TX); + __fp16 *x_ptr = x + itr * (2 * N_TX); - mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); + mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, + 0, 0); mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); mempool_cholesky_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); mempool_Ltrisol_f16s(out_matrix_ptr, s_ptr, y_ptr, N_TX); @@ -211,16 +223,14 @@ void parallel_mimo_mmse_cholesky() { mempool_stop_benchmark(); #endif mempool_barrier(num_cores); - //verify_result(x, Out_x, N_TX, core_id); - //mempool_barrier(num_cores); return; } int main() { - #ifdef SINGLE +#ifdef SINGLE single_core_mimo_mmse(); - #elif defined(PARALLEL) +#elif defined(PARALLEL) parallel_mimo_mmse_cholesky(); - #endif +#endif return 0; } diff --git a/software/apps/mimo_mmse_f16/mimo_mmse_f16s.h b/software/apps/mimo_mmse_f16/mimo_mmse_f16s.h deleted file mode 100644 index 57f6f1545..000000000 --- a/software/apps/mimo_mmse_f16/mimo_mmse_f16s.h +++ /dev/null @@ -1,670 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -dump(res1,1); -dump(res2,2); -dump(res3,3); - -#pragma once -#define N_BANKS (NUM_CORES * 4) - -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded); -void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded); -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { - - uint32_t i, j, k; - __fp16 a; - __fp16 b; - __fp16 c0, c1, c2, c3; - __fp16 d0, d1, d2, d3; - __fp16 as0, as1, as2, as3; - __fp16 bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - for (j = 0; j < n_tx; j +=4) { - // Initialize the real part of sums - as0 = (__fp16)0.0f; - as1 = (__fp16)0.0f; - as2 = (__fp16)0.0f; - as3 = (__fp16)0.0f; - // Initialize the imag part of sums - bs0 = (__fp16)0.0f; - bs1 = (__fp16)0.0f; - bs2 = (__fp16)0.0f; - bs3 = (__fp16)0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.h %[as0], %[a], %[c0], %[as0];" - "fmadd.h %[as1], %[a], %[c1], %[as1];" - "fmadd.h %[as2], %[a], %[c2], %[as2];" - "fmadd.h %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.h %[bs0], %[a], %[d0], %[bs0];" - "fmadd.h %[bs1], %[a], %[d3], %[bs1];" - "fmadd.h %[bs2], %[a], %[d2], %[bs2];" - "fmadd.h %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.h %[as0], %[b], %[d0], %[as0];" - "fmadd.h %[as1], %[b], %[d1], %[as1];" - "fmadd.h %[as2], %[b], %[d2], %[as2];" - "fmadd.h %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Compute diagonal elements - if (i == j) { - asm volatile ( - "fadd.h %[as0], %[as0], %[sigma];" - : [as0] "+&r" (as0) - : [sigma] "r" (sigma[2 * i]) - :); - bs0 = (__fp16)0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.h %[as1], %[as1], %[sigma];" - : [as1] "+&r" (as1) - : [sigma] "r" (sigma[2 * i]) - :); - bs1 = (__fp16)0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.h %[as2], %[as2], %[sigma];" - : [as2] "+&r" (as2) - : [sigma] "r" (sigma[2 * i]) - :); - bs2 = (__fp16)0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.h %[as3], %[as3], %[sigma];" - : [as3] "+&r" (as3) - : [sigma] "r" (sigma[2 * i]) - :); - bs3 = (__fp16)0.0f; - } - if (!folded) { - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - } else { - //uint32_t addr = i * (n_tx / 4) * N_BANKS + (j / 4) * N_BANKS; - uint32_t addr = i * N_BANKS; - // Store - pG[addr] = as0; - pG[addr + 1U] = bs0; - pG[addr + 2U] = as1; - pG[addr + 3U] = bs1; - pG[addr + 4U] = as2; - pG[addr + 5U] = bs2; - pG[addr + 6U] = as3; - pG[addr + 7U] = bs3; - } - } - } - return; -} - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j, k; - v2h ab; - v2h cd0, cd1, cd2, cd3; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - ab = ( *(v2h*)&pH[2U * (k * n_tx + i)] ); - // inputs from matrix H - cd0 = ( *(v2h*)&pH[2U * (k * n_tx + j)] ); - cd1 = ( *(v2h*)&pH[2U * (k * n_tx + j + 1U)] ); - cd2 = ( *(v2h*)&pH[2U * (k * n_tx + j + 2U)] ); - cd3 = ( *(v2h*)&pH[2U * (k * n_tx + j + 3U)] ); - - uint32_t ndc0, ndc1, ndc2, ndc3; - const uint32_t val = 0x3C00BC00; - const uint32_t mask = 0x00010002; - - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c + b * d - "vfdotpex.s.h %[as0], %[ab], %[cd0];" - "vfdotpex.s.h %[as1], %[ab], %[cd1];" - "vfdotpex.s.h %[as2], %[ab], %[cd2];" - "vfdotpex.s.h %[as3], %[ab], %[cd3];" - // - "pv.shuffle2.h %[ndc0], %[cd0], %[mask];" - "pv.shuffle2.h %[ndc1], %[cd1], %[mask];" - "pv.shuffle2.h %[ndc2], %[cd2], %[mask];" - "pv.shuffle2.h %[ndc3], %[cd3], %[mask];" - // - "vfmul.h %[ndc0], %[val], %[ndc0];" - "vfmul.h %[ndc1], %[val], %[ndc1];" - "vfmul.h %[ndc2], %[val], %[ndc2];" - "vfmul.h %[ndc3], %[val], %[ndc3];" - // a * d - b * c - "vfdotpex.s.h %[as0], %[ab], %[ndc0];" - "vfdotpex.s.h %[as1], %[ab], %[ndc1];" - "vfdotpex.s.h %[as2], %[ab], %[ndc2];" - "vfdotpex.s.h %[as3], %[ab], %[ndc3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3), - [ndc0] "+r" (ndc0), [ndc1] "+r" (ndc1), [ndc2] "+r" (ndc2), [ndc3] "+r" (ndc3) - : [ab] "r" (ab), [val] "r" (val), [mask] "r" (mask), - [cd0] "r" (cd0), [cd1] "r" (cd1), [cd2] "r" (cd2), [cd3] "r" (cd3) - :); - } - // Compute diagonal elements - if (i == j) { - asm volatile ( - "fadd.s %[as0], %[as0], %[sigma];" - : [as0] "+&r" (as0) - : [sigma] "r" (sigma[2 * i]) - :); - bs0 = 0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.s %[as1], %[as1], %[sigma];" - : [as1] "+&r" (as1) - : [sigma] "r" (sigma[2 * i]) - :); - bs1 = 0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.s %[as2], %[as2], %[sigma];" - : [as2] "+&r" (as2) - : [sigma] "r" (sigma[2 * i]) - :); - bs2 = 0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.s %[as3], %[as3], %[sigma];" - : [as3] "+&r" (as3) - : [sigma] "r" (sigma[2 * i]) - :); - bs3 = 0.0f; - } - // Store - v2h res0, res1, res2, res3; - asm volatile( - "vfcpka.h.s %[res0], %[as0], %[bs0];" - "vfcpka.h.s %[res1], %[as1], %[bs1];" - "vfcpka.h.s %[res2], %[as2], %[bs2];" - "vfcpka.h.s %[res3], %[as3], %[bs3];" - : [res0] "=&r" (res0), [res1] "=&r" (res1), [res2] "=&r" (res2), [res3] "=&r" (res3) - : [as0] "r" (as0), [as1] "r" (as1), [as2] "r" (as2), [as3] "r" (as3), - [bs0] "r" (bs0), [bs1] "r" (bs1), [bs2] "r" (bs2), [bs3] "r" (bs3) - : - ); - ( *(v2h*)&pG[2 * (i * n_tx + j)] ) = res0; - ( *(v2h*)&pG[2 * (i * n_tx + j + 1U)] ) = res1; - ( *(v2h*)&pG[2 * (i * n_tx + j + 2U)] ) = res2; - ( *(v2h*)&pG[2 * (i * n_tx + j + 3U)] ) = res3; - j += 4; - } while (j < (n_tx >> 2U)); - } - return; -} - -void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { - - uint32_t i, j; - __fp16 a0, a1, a2, a3; - __fp16 b0, b1, b2, b3; - __fp16 c, d; - __fp16 as0, as1, as2, as3; - __fp16 bs0, bs1, bs2, bs3; - - i = 0; - do { - // Initialize the real part of sums - as0 = (__fp16)0.0f; - as1 = (__fp16)0.0f; - as2 = (__fp16)0.0f; - as3 = (__fp16)0.0f; - // Initialize the imag part of sums - bs0 = (__fp16)0.0f; - bs1 = (__fp16)0.0f; - bs2 = (__fp16)0.0f; - bs3 = (__fp16)0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.h %[as0], %[a0], %[c], %[as0];" - "fmadd.h %[as1], %[a1], %[c], %[as1];" - "fmadd.h %[as2], %[a2], %[c], %[as2];" - "fmadd.h %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.h %[bs0], %[a0], %[d], %[bs0];" - "fmadd.h %[bs1], %[a1], %[d], %[bs1];" - "fmadd.h %[bs2], %[a2], %[d], %[bs2];" - "fmadd.h %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.h %[as0], %[b0], %[d], %[as0];" - "fmadd.h %[as1], %[b1], %[d], %[as1];" - "fmadd.h %[as2], %[b2], %[d], %[as2];" - "fmadd.h %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - if (!folded) { - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } else { - // Store - uint32_t addr = (i / 4) * N_BANKS; - py[addr] = as0; - py[addr + 1U] = bs0; - py[addr + 2U] = as1; - py[addr + 3U] = bs1; - py[addr + 4U] = as2; - py[addr + 5U] = bs2; - py[addr + 6U] = as3; - py[addr + 7U] = bs3; - i += 4; - } - - } while (i < n_tx); - return; -} - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * (i * n + i)]; - as = (__fp16)in[2U * i]; - bs = (__fp16)in[2U * i + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = (__fp16)in[2 * (n - i - 1)]; - bs = (__fp16)in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - -void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[j * N_BANKS + 2 * j]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[j * N_BANKS + 2 * k]; - b = pL[j * N_BANKS + 2 * k + 1]; - asm volatile( - "fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[j * N_BANKS + 2 * j] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[i * N_BANKS + 2 * j]; - bp = pSrc[i * N_BANKS + 2 * j + 1]; - // Diag - diag = pL[j * N_BANKS + 2 * j]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[i * N_BANKS + 2 * k]; - b = pL[i * N_BANKS + 2 * k + 1]; - c = pL[j * N_BANKS + 2 * k]; - d = pL[j * N_BANKS + 2 * k + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[i * N_BANKS + 2 * j] = ap; - pL[i * N_BANKS + 2 * j + 1] = bp; - } - - } - return; -} - -void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[i * N_BANKS + 2 * i]; - as = (__fp16)in[2U * i]; - bs = (__fp16)in[2U * i + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[i * N_BANKS + 2 * j]; - b = pL[i * N_BANKS + 2 * j + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - uint32_t rev_i = (n - 1 - i); - diag = pL[rev_i * N_BANKS + 2 * rev_i]; - as = (__fp16)in[2 * rev_i]; - bs = (__fp16)in[2 * rev_i + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - uint32_t rev_j = (n - 1 - j); - a = pL[rev_j * N_BANKS + 2 * rev_i]; - b = pL[rev_j * N_BANKS + 2 * rev_i + 1]; - c = x[2U * rev_j]; - d = x[2U * rev_j + 1]; - asm volatile ( - "fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * rev_i] = ax; - x[2U * rev_i + 1] = bx; - } - return; -} diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h b/software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h deleted file mode 100644 index 5322f38a6..000000000 --- a/software/apps/mimo_mmse_f32/data_mimo_mmse_f32.h +++ /dev/null @@ -1,11669 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -#define N_TX (4) -#define N_RX (32) -#define N_ITR (256) - -// Inputs - -float In_H[65536] = { -0.4038008451461792f, 0.6173248291015625f, 0.5107765793800354f, 0.1460779905319214f, 0.5043531656265259f, 0.06418585032224655f, 0.7084245085716248f, 0.39431414008140564f, -0.7955120801925659f, 0.44033658504486084f, 0.5438223481178284f, 0.8306044936180115f, 0.001210413291119039f, 0.3128393292427063f, 0.42008545994758606f, 0.09440236538648605f, -0.5720314383506775f, 0.34024885296821594f, 0.8237878084182739f, 0.37966856360435486f, 0.05407728627324104f, 0.6888185143470764f, 0.46532002091407776f, 0.2960030734539032f, -0.7215996980667114f, 0.9310985803604126f, 0.028908787295222282f, 0.8760971426963806f, 0.18658870458602905f, 0.8332364559173584f, 0.58184415102005f, 0.6589711308479309f, -0.6449862122535706f, 0.40234774351119995f, 0.5163814425468445f, 0.057923104614019394f, 0.7017018795013428f, 0.8487687706947327f, 0.08686386793851852f, 0.7683120965957642f, -0.673364520072937f, 0.16476097702980042f, 0.3091551661491394f, 0.8145793676376343f, 0.5650898218154907f, 0.4070320129394531f, 0.22323794662952423f, 0.19947892427444458f, -0.6555288434028625f, 0.48187896609306335f, 0.43883016705513f, 0.8316453695297241f, 0.40346449613571167f, 0.7768478989601135f, 0.5870890617370605f, 0.6466290950775146f, -0.9095276594161987f, 0.9982682466506958f, 0.12767910957336426f, 0.6573766469955444f, 0.6696211099624634f, 0.8278431296348572f, 0.7250009775161743f, 0.4389420747756958f, -0.03271617367863655f, 0.4669024348258972f, 0.06675206124782562f, 0.13014139235019684f, 0.35484275221824646f, 0.03628074377775192f, 0.08319918066263199f, 0.08432038128376007f, -0.3809218108654022f, 0.5209614038467407f, 0.6798951029777527f, 0.9367861747741699f, 0.8742104768753052f, 0.8930763602256775f, 0.21545785665512085f, 0.6832006573677063f, -0.6729230880737305f, 0.9920696020126343f, 0.9182525873184204f, 0.8270814418792725f, 0.1410100758075714f, 0.5718618035316467f, 0.236687570810318f, 0.08896446973085403f, -0.7807153463363647f, 0.6463040709495544f, 0.09377460181713104f, 0.6409379243850708f, 0.8647860288619995f, 0.6110950708389282f, 0.691181480884552f, 0.873837411403656f, -0.7277462482452393f, 0.7493805885314941f, 0.9704478979110718f, 0.9538936018943787f, 0.1965647041797638f, 0.44163286685943604f, 0.005829260218888521f, 0.6230819821357727f, -0.9988417029380798f, 0.5992085933685303f, 0.5552159547805786f, 0.7446780800819397f, 0.5730373859405518f, 0.6293004751205444f, 0.22471891343593597f, 0.14788590371608734f, -0.9800208806991577f, 0.6864814162254333f, 0.09602656215429306f, 0.6587615013122559f, 0.9064176678657532f, 0.22667436301708221f, 0.0749938040971756f, 0.5938957929611206f, -0.9706774353981018f, 0.3235556185245514f, 0.48175686597824097f, 0.182091623544693f, 0.9470621347427368f, 0.8519145846366882f, 0.7906496524810791f, 0.4088228642940521f, -0.30293095111846924f, 0.7883467078208923f, 0.45358729362487793f, 0.8509730100631714f, 0.9398403763771057f, 0.9110036492347717f, 0.7330203056335449f, 0.3786163032054901f, -0.37025463581085205f, 0.7404962778091431f, 0.29091405868530273f, 0.9469988346099854f, 0.16437241435050964f, 0.30221694707870483f, 0.0005268790991976857f, 0.7492226362228394f, -0.6225520968437195f, 0.017933040857315063f, 0.6054339408874512f, 0.8072811365127563f, 0.5451026558876038f, 0.48694688081741333f, 0.8165363669395447f, 0.483970582485199f, -0.8129370808601379f, 0.7666851282119751f, 0.4091738164424896f, 0.6820945739746094f, 0.07455933839082718f, 0.41375532746315f, 0.4828552305698395f, 0.13230684399604797f, -0.224823996424675f, 0.5472673773765564f, 0.41761890053749084f, 0.5327231884002686f, 0.12046654522418976f, 0.19256815314292908f, 0.837169349193573f, 0.36334556341171265f, -0.4305964708328247f, 0.23973576724529266f, 0.719364583492279f, 0.7333202362060547f, 0.16436539590358734f, 0.6159131526947021f, 0.9326565861701965f, 0.02904396876692772f, -0.8871706128120422f, 0.8578182458877563f, 0.1403864324092865f, 0.25414732098579407f, 0.6747291684150696f, 0.3137810230255127f, 0.9170466065406799f, 0.8209288716316223f, -0.5995940566062927f, 0.22055654227733612f, 0.8539385795593262f, 0.4681205451488495f, 0.9959939122200012f, 0.8039447069168091f, 0.0007057275506667793f, 0.6582226753234863f, -0.7780123949050903f, 0.20103280246257782f, 0.477359414100647f, 0.8522371053695679f, 0.41163840889930725f, 0.7971829175949097f, 0.31538593769073486f, 0.1108694076538086f, -0.7028176188468933f, 0.9050687551498413f, 0.17204317450523376f, 0.17603665590286255f, 0.2716582119464874f, 0.3517414927482605f, 0.595378041267395f, 0.9880095720291138f, -0.3213639557361603f, 0.24104948341846466f, 0.15182726085186005f, 0.9198322296142578f, 0.02022220753133297f, 0.25000637769699097f, 0.9475390911102295f, 0.9714106917381287f, -0.7307815551757812f, 0.2673451602458954f, 0.6388694643974304f, 0.7323508262634277f, 0.42398738861083984f, 0.706953763961792f, 0.4688495695590973f, 0.9860943555831909f, -0.937563419342041f, 0.6813467144966125f, 0.5287520289421082f, 0.8696683645248413f, 0.5269515514373779f, 0.7488188147544861f, 0.28836187720298767f, 0.26796966791152954f, -0.6869212985038757f, 0.4543153643608093f, 0.8559163212776184f, 0.4089205265045166f, 0.8802772164344788f, 0.6540223360061646f, 0.8404666781425476f, 0.8911178112030029f, -0.33209046721458435f, 0.7455626130104065f, 0.6228201985359192f, 0.6714975237846375f, 0.0624462366104126f, 0.749582827091217f, 0.22969751060009003f, 0.16806384921073914f, -0.7853042483329773f, 0.8364361524581909f, 0.9051796197891235f, 0.7347776889801025f, 0.8239062428474426f, 0.33568519353866577f, 0.4621071517467499f, 0.9977510571479797f, -0.2236720621585846f, 0.8158451318740845f, 0.40563759207725525f, 0.2607764005661011f, 0.47628721594810486f, 0.22875110805034637f, 0.2829097509384155f, 0.07204850763082504f, -0.896275520324707f, 0.8502523303031921f, 0.6023401618003845f, 0.5758042335510254f, 0.164246067404747f, 0.5368783473968506f, 0.7923163771629333f, 0.3806174695491791f, -0.11505113542079926f, 0.8054330348968506f, 0.5496359467506409f, 0.1419110894203186f, 0.21056528389453888f, 0.0858304426074028f, 0.07660073786973953f, 0.10988783091306686f, -0.8411141633987427f, 0.8112995028495789f, 0.25021761655807495f, 0.6392019391059875f, 0.23768344521522522f, 0.006639790255576372f, 0.7887653112411499f, 0.726469099521637f, -0.5297747850418091f, 0.8873420357704163f, 0.970978319644928f, 0.8582863211631775f, 0.9611812233924866f, 0.21383266150951385f, 0.2744409739971161f, 0.5805203318595886f, -0.8268503546714783f, 0.11864553391933441f, 0.21256645023822784f, 0.471638947725296f, 0.9617676138877869f, 0.41079390048980713f, 0.9664630889892578f, 0.791283369064331f, -0.604118287563324f, 0.750210165977478f, 0.2567608952522278f, 0.48915234208106995f, 0.06708459556102753f, 0.6943570971488953f, 0.4274960160255432f, 0.10281238704919815f, -0.9893459677696228f, 0.987058162689209f, 0.03417766094207764f, 0.5655078887939453f, 0.8917734026908875f, 0.21631473302841187f, 0.6361753344535828f, 0.7665709853172302f, -0.8925094604492188f, 0.30190494656562805f, 0.5428469181060791f, 0.29032865166664124f, 0.8735240697860718f, 0.2899599075317383f, 0.14414367079734802f, 0.16481386125087738f, -0.2511381506919861f, 0.003423642134293914f, 0.7357789278030396f, 0.7147493362426758f, 0.9722854495048523f, 0.5305964350700378f, 0.044335152953863144f, 0.812271773815155f, -0.9572027921676636f, 0.6212048530578613f, 0.8472774624824524f, 0.4352010190486908f, 0.9756060838699341f, 0.7027126550674438f, 0.1404779553413391f, 0.31558895111083984f, -0.3236110806465149f, 0.6053635478019714f, 0.16214556992053986f, 0.9111859798431396f, 0.796992301940918f, 0.15350107848644257f, 0.18588677048683167f, 0.9108716249465942f, -0.9162441492080688f, 0.2253263145685196f, 0.07627786695957184f, 0.4876940846443176f, 0.0008666978101246059f, 0.8155022859573364f, 0.39986827969551086f, 0.9236415028572083f, -0.24375773966312408f, 0.20587211847305298f, 0.10152994096279144f, 0.03380850702524185f, 0.5444380640983582f, 0.7236935496330261f, 0.007570034824311733f, 0.319342702627182f, -0.07033758610486984f, 0.607696533203125f, 0.43373674154281616f, 0.6549728512763977f, 0.860161304473877f, 0.6692878603935242f, 0.7362455725669861f, 0.44764649868011475f, -0.013390322215855122f, 0.25070568919181824f, 0.602091372013092f, 0.5395238995552063f, 0.18774792551994324f, 0.8643114566802979f, 0.9824128150939941f, 0.8575636744499207f, -0.9586789011955261f, 0.27897217869758606f, 0.42813095450401306f, 0.1375235915184021f, 0.33755287528038025f, 0.4846070408821106f, 0.2616393268108368f, 0.04956001043319702f, -0.7553493976593018f, 0.7497186064720154f, 0.19613105058670044f, 0.9669169187545776f, 0.6325827836990356f, 0.972079873085022f, 0.43503859639167786f, 0.5789327621459961f, -0.14500193297863007f, 0.6639429926872253f, 0.7154638171195984f, 0.911987841129303f, 0.40799757838249207f, 0.2815764546394348f, 0.516660749912262f, 0.4365593492984772f, -0.4407232105731964f, 0.5826596617698669f, 0.33357441425323486f, 0.6642404794692993f, 0.5447126030921936f, 0.46021223068237305f, 0.3604213297367096f, 0.9086015820503235f, -0.6767811179161072f, 0.6350775957107544f, 0.7798640727996826f, 0.6245513558387756f, 0.3486948311328888f, 0.7746884226799011f, 0.17957139015197754f, 0.0798448845744133f, -0.953296959400177f, 0.21812479197978973f, 0.9121734499931335f, 0.183176189661026f, 0.8957120180130005f, 0.7742944955825806f, 0.0057313088327646255f, 0.3412402272224426f, -0.9081753492355347f, 0.5909342765808105f, 0.8850290179252625f, 0.22903893887996674f, 0.8322344422340393f, 0.05029794201254845f, 0.8091513514518738f, 0.3439735770225525f, -0.6511635184288025f, 0.6322695016860962f, 0.1758347600698471f, 0.723848283290863f, 0.5750062465667725f, 0.7120471000671387f, 0.9800039529800415f, 0.892017662525177f, -0.43064045906066895f, 0.7683447599411011f, 0.6042857766151428f, 0.7428677678108215f, 0.35976409912109375f, 0.5952857732772827f, 0.3509039580821991f, 0.7300918102264404f, -0.6633567214012146f, 0.974700927734375f, 0.27493271231651306f, 0.9453086256980896f, 0.6334176659584045f, 0.051995083689689636f, 0.8318513631820679f, 0.10869158059358597f, -0.02258594147861004f, 0.5216464996337891f, 0.6441355347633362f, 0.7188768982887268f, 0.9641885161399841f, 0.3423616290092468f, 0.5083031058311462f, 0.6049621105194092f, -0.4474163055419922f, 0.09401427209377289f, 0.0460597425699234f, 0.9367678165435791f, 0.8681971430778503f, 0.022508876398205757f, 0.48997101187705994f, 0.7671323418617249f, -0.25562191009521484f, 0.5368454456329346f, 0.6791978478431702f, 0.5856485962867737f, 0.9753760695457458f, 0.20079901814460754f, 0.15294848382472992f, 0.34197115898132324f, -0.4482836127281189f, 0.8979939222335815f, 0.4282113015651703f, 0.9982740879058838f, 0.9162984490394592f, 0.6814658641815186f, 0.7527796626091003f, 0.35990217328071594f, -0.9623938202857971f, 0.375276118516922f, 0.6705772876739502f, 0.39392662048339844f, 0.3103500008583069f, 0.456575870513916f, 0.8158798813819885f, 0.4354647994041443f, -0.9695246815681458f, 0.5543639063835144f, 0.32080888748168945f, 0.2653619647026062f, 0.8748108744621277f, 0.8341066241264343f, 0.07356052845716476f, 0.9299525022506714f, -0.34407055377960205f, 0.5528655052185059f, 0.5249475836753845f, 0.3182297348976135f, 0.7291650176048279f, 0.26824167370796204f, 0.5031522512435913f, 0.717647910118103f, -0.2549307644367218f, 0.11139272153377533f, 0.21345868706703186f, 0.19663579761981964f, 0.6423426866531372f, 0.48599302768707275f, 0.05520268529653549f, 0.21658039093017578f, -0.26289477944374084f, 0.03891615942120552f, 0.1778952181339264f, 0.8701794743537903f, 0.04061054810881615f, 0.8349348306655884f, 0.1905297189950943f, 0.836197555065155f, -0.992072582244873f, 0.45624348521232605f, 0.6222002506256104f, 0.014750600792467594f, 0.12363412231206894f, 0.07593085616827011f, 0.9877384901046753f, 0.20442862808704376f, -0.25778719782829285f, 0.03302798420190811f, 0.25124984979629517f, 0.9406927227973938f, 0.3704623579978943f, 0.19262731075286865f, 0.50537109375f, 0.9867780208587646f, -0.5816930532455444f, 0.03570723906159401f, 0.7633745670318604f, 0.44253087043762207f, 0.7523005604743958f, 0.9007593989372253f, 0.3407193720340729f, 0.9752737879753113f, -0.7845664620399475f, 0.33191096782684326f, 0.816961407661438f, 0.11940871924161911f, 0.5921015739440918f, 0.506059467792511f, 0.39622634649276733f, 0.43731412291526794f, -0.6270533204078674f, 0.3668718636035919f, 0.3787367641925812f, 0.869227409362793f, 0.2922556400299072f, 0.514864444732666f, 0.47367051243782043f, 0.12820182740688324f, -0.9524329900741577f, 0.017813239246606827f, 0.64204341173172f, 0.6261521577835083f, 0.9745805859565735f, 0.42077165842056274f, 0.783892035484314f, 0.9974766969680786f, -0.5111983418464661f, 0.5879312753677368f, 0.1091308742761612f, 0.8575202226638794f, 0.8198674321174622f, 0.37479037046432495f, 0.08982344716787338f, 0.7549384236335754f, -0.39479124546051025f, 0.20943917334079742f, 0.058026719838380814f, 0.5203288197517395f, 0.1443040370941162f, 0.6757243871688843f, 0.6840780973434448f, 0.2168327420949936f, -0.9979744553565979f, 0.9774198532104492f, 0.14252214133739471f, 0.41886842250823975f, 0.24888862669467926f, 0.4531658887863159f, 0.5305812358856201f, 0.3975133001804352f, -0.9972975850105286f, 0.4871402680873871f, 0.9795539975166321f, 0.8048341274261475f, 0.6459767818450928f, 0.7751482129096985f, 0.5355363488197327f, 0.8710025548934937f, -0.41116195917129517f, 0.6591435074806213f, 0.005528569221496582f, 0.3740944266319275f, 0.46392977237701416f, 0.885549008846283f, 0.7023278474807739f, 0.6206203103065491f, -0.456095814704895f, 0.7015979886054993f, 0.2133687287569046f, 0.4369044303894043f, 0.6075477004051208f, 0.8520315289497375f, 0.5990886092185974f, 0.20289075374603271f, -0.9720621705055237f, 0.8770979046821594f, 0.7166780829429626f, 0.46844613552093506f, 0.24475982785224915f, 0.15371043980121613f, 0.027225065976381302f, 0.5266590118408203f, -0.8029122352600098f, 0.25858283042907715f, 0.005070050712674856f, 0.8323395252227783f, 0.24126514792442322f, 0.7584813237190247f, 0.6354752779006958f, 0.305867463350296f, -0.9533195495605469f, 0.5107483267784119f, 0.5042592883110046f, 0.7031418681144714f, 0.4823998212814331f, 0.6182818412780762f, 0.1852988302707672f, 0.2868100106716156f, -0.7902080416679382f, 0.7095887064933777f, 0.236963152885437f, 0.603965699672699f, 0.2228451669216156f, 0.834987461566925f, 0.4683404564857483f, 0.4246814548969269f, -0.7350913286209106f, 0.5167381167411804f, 0.042391616851091385f, 0.9830536842346191f, 0.696902334690094f, 0.9533034563064575f, 0.17755171656608582f, 0.3204118311405182f, -0.9992097020149231f, 0.8040647506713867f, 0.7871402502059937f, 0.7650965452194214f, 0.7003965973854065f, 0.19106881320476532f, 0.39432650804519653f, 0.9008608460426331f, -0.14340929687023163f, 0.41363051533699036f, 0.1355314552783966f, 0.2132045328617096f, 0.8274447321891785f, 0.06218286231160164f, 0.6020572185516357f, 0.1900583803653717f, -0.49826914072036743f, 0.5290828347206116f, 0.9563583135604858f, 0.2944870591163635f, 0.6458893418312073f, 0.9724088907241821f, 0.2319880574941635f, 0.04907523840665817f, -0.7518948912620544f, 0.6168137788772583f, 0.4435807466506958f, 0.16814278066158295f, 0.24166138470172882f, 0.7298534512519836f, 0.3787272274494171f, 0.9694621562957764f, -0.5691134333610535f, 0.12990829348564148f, 0.8431991934776306f, 0.4462374746799469f, 0.7553721070289612f, 0.5610243082046509f, 0.3858260214328766f, 0.12424712628126144f, -0.7660791873931885f, 0.7202019691467285f, 0.6091572046279907f, 0.5484327673912048f, 0.14605259895324707f, 0.674640417098999f, 0.9124699234962463f, 0.4578760266304016f, -0.1341683566570282f, 0.5776897668838501f, 0.06637489795684814f, 0.05708745867013931f, 0.2550904452800751f, 0.3927345871925354f, 0.588829755783081f, 0.8906244039535522f, -0.5924310684204102f, 0.8835069537162781f, 0.1764705330133438f, 0.8500655293464661f, 0.8475945591926575f, 0.5196871757507324f, 0.8233088254928589f, 0.31459248065948486f, -0.9599975347518921f, 0.07415231317281723f, 0.932571530342102f, 0.7890575528144836f, 0.40832003951072693f, 0.13386400043964386f, 0.16912032663822174f, 0.23051896691322327f, -0.48028403520584106f, 0.4269631505012512f, 0.6261872053146362f, 0.4080004394054413f, 0.01954115554690361f, 0.6834607124328613f, 0.7160469889640808f, 0.2521931231021881f, -0.42680203914642334f, 0.14680075645446777f, 0.9098132252693176f, 0.6848029494285583f, 0.5220187902450562f, 0.6929498910903931f, 0.6502159833908081f, 0.9154860377311707f, -0.04229097440838814f, 0.9342242479324341f, 0.12335517257452011f, 0.1349264681339264f, 0.2657362222671509f, 0.5027443170547485f, 0.8388557434082031f, 0.21128450334072113f, -0.604132890701294f, 0.031855542212724686f, 0.7395219802856445f, 0.9979146718978882f, 0.2436923086643219f, 0.6734309196472168f, 0.10507804900407791f, 0.4227162003517151f, -0.12049931287765503f, 0.8651747107505798f, 0.011011654511094093f, 0.3812532424926758f, 0.2901940941810608f, 0.8497999906539917f, 0.04323306679725647f, 0.029702521860599518f, -0.28469377756118774f, 0.8806503415107727f, 0.4329036772251129f, 0.07007066905498505f, 0.6226766705513f, 0.7074038982391357f, 0.010624448768794537f, 0.743405818939209f, -0.5971864461898804f, 0.07259450852870941f, 0.4477456510066986f, 0.6874161958694458f, 0.6151353120803833f, 0.32621654868125916f, 0.7891626358032227f, 0.8368787169456482f, -0.7238761782646179f, 0.970390796661377f, 0.32233726978302f, 0.8740213513374329f, 0.6128212809562683f, 0.5598103404045105f, 0.5262055397033691f, 0.7185714244842529f, -0.297342449426651f, 0.7524820566177368f, 0.27335524559020996f, 0.5990568995475769f, 0.9881353974342346f, 0.132586270570755f, 0.896625280380249f, 0.7569987773895264f, -0.7622183561325073f, 0.35304519534111023f, 0.5201383233070374f, 0.20898622274398804f, 0.18783508241176605f, 0.9901275634765625f, 0.6008115410804749f, 0.42943936586380005f, -0.697616696357727f, 0.4039026200771332f, 0.12065009772777557f, 0.9106840491294861f, 0.10324184596538544f, 0.5162100791931152f, 0.01313314400613308f, 0.3208296298980713f, -0.35974830389022827f, 0.012764985673129559f, 0.34169676899909973f, 0.3292010724544525f, 0.07477813214063644f, 0.1997598260641098f, 0.8019096255302429f, 0.9507997632026672f, -0.9659827947616577f, 0.9693688154220581f, 0.08888378739356995f, 0.7604982852935791f, 0.3041057884693146f, 0.7568978667259216f, 0.6257233619689941f, 0.8547502756118774f, -0.8502286076545715f, 0.558427631855011f, 0.1758124977350235f, 0.9549395442008972f, 0.30189549922943115f, 0.6110517382621765f, 0.9124147891998291f, 0.40371158719062805f, -0.9094021916389465f, 0.2615388333797455f, 0.8916113376617432f, 0.862790048122406f, 0.7079054713249207f, 0.5952940583229065f, 0.3985186815261841f, 0.5692133903503418f, -0.6841224431991577f, 0.8442018032073975f, 0.09339064359664917f, 0.36726534366607666f, 0.2504575550556183f, 0.9449877738952637f, 0.30472302436828613f, 0.390432745218277f, -0.10379936546087265f, 0.7088719606399536f, 0.04900166392326355f, 0.9326753616333008f, 0.7249475121498108f, 0.6357792019844055f, 0.29568976163864136f, 0.5025238394737244f, -0.4522526264190674f, 0.8619301319122314f, 0.2935083508491516f, 0.2416599541902542f, 0.11460178345441818f, 0.8771856427192688f, 0.25447019934654236f, 0.530114471912384f, -0.15019723773002625f, 0.24940438568592072f, 0.40536800026893616f, 0.6750154495239258f, 0.9904710054397583f, 0.5125382542610168f, 0.241010382771492f, 0.1258048266172409f, -0.7946727871894836f, 0.3695266842842102f, 0.21277543902397156f, 0.6327676177024841f, 0.4713174104690552f, 0.4220590591430664f, 0.05630657076835632f, 0.9616613984107971f, -0.258323073387146f, 0.8257670998573303f, 0.24354641139507294f, 0.5697969198226929f, 0.9085783362388611f, 0.48695966601371765f, 0.30030468106269836f, 0.4447028636932373f, -0.6289662718772888f, 0.7155400514602661f, 0.4283978044986725f, 0.018818968906998634f, 0.5479245185852051f, 0.24654492735862732f, 0.5889907479286194f, 0.3669295907020569f, -0.3548247516155243f, 0.11888378113508224f, 0.7100120782852173f, 0.46215617656707764f, 0.26342782378196716f, 0.3614104390144348f, 0.5580580830574036f, 0.25590652227401733f, -0.6771543622016907f, 0.6564838290214539f, 0.4043053090572357f, 0.8610690236091614f, 0.9938013553619385f, 0.08831272274255753f, 0.06569593399763107f, 0.3186834454536438f, -0.9738202691078186f, 0.5811177492141724f, 0.6324065327644348f, 0.45318910479545593f, 0.7544018626213074f, 0.37514910101890564f, 0.7357104420661926f, 0.4658891260623932f, -0.9457717537879944f, 0.17730896174907684f, 0.655107319355011f, 0.2077244073152542f, 0.9230954051017761f, 0.6289580464363098f, 0.7410279512405396f, 0.40685757994651794f, -0.1574360728263855f, 0.40768539905548096f, 0.33743810653686523f, 0.9281395077705383f, 0.5944134593009949f, 0.27994564175605774f, 0.566735565662384f, 0.16405346989631653f, -0.9326213598251343f, 0.9417843222618103f, 0.9210550785064697f, 0.8537810444831848f, 0.5565312504768372f, 0.3209660053253174f, 0.31082361936569214f, 0.6361640095710754f, -0.5467991232872009f, 0.4456123113632202f, 0.8550904989242554f, 0.8222294449806213f, 0.02819088287651539f, 0.3756231367588043f, 0.4313218295574188f, 0.15903103351593018f, -0.2987709641456604f, 0.9712275862693787f, 0.9577268958091736f, 0.27989038825035095f, 0.599882185459137f, 0.7109502553939819f, 0.6589823961257935f, 0.34365910291671753f, -0.5761561393737793f, 0.04243135452270508f, 0.7953044772148132f, 0.24721671640872955f, 0.7932955622673035f, 0.9574152827262878f, 0.30924370884895325f, 0.205701544880867f, -0.5643843412399292f, 0.7040565609931946f, 0.4620008170604706f, 0.8017503023147583f, 0.8964993357658386f, 0.3592988848686218f, 0.07772044092416763f, 0.6712867617607117f, -0.300188809633255f, 0.9162359833717346f, 0.9763498306274414f, 0.8713567852973938f, 0.40085792541503906f, 0.7243505120277405f, 0.5187148451805115f, 0.6672974824905396f, -0.3751969635486603f, 0.563930332660675f, 0.8798332810401917f, 0.9371258020401001f, 0.527320384979248f, 0.8165835738182068f, 0.9400210976600647f, 0.8713887929916382f, -0.506681501865387f, 0.9430877566337585f, 0.13213187456130981f, 0.2941829562187195f, 0.8098886609077454f, 0.43033990263938904f, 0.8029703497886658f, 0.39520713686943054f, -0.5548492074012756f, 0.601239800453186f, 0.3256020247936249f, 0.7218040823936462f, 0.563919723033905f, 0.34806516766548157f, 0.6261191964149475f, 0.43764156103134155f, -0.7499706149101257f, 0.7785638570785522f, 0.4913691282272339f, 0.9064134359359741f, 0.14433464407920837f, 0.054461464285850525f, 0.583003044128418f, 0.5089849829673767f, -0.3319993019104004f, 0.9238489270210266f, 0.677304208278656f, 0.0233667753636837f, 0.06596208363771439f, 0.35255590081214905f, 0.592656135559082f, 0.40857380628585815f, -0.16196031868457794f, 0.6717977523803711f, 0.8118371963500977f, 0.792678713798523f, 0.48418933153152466f, 0.6150592565536499f, 0.35214531421661377f, 0.3409119248390198f, -0.6497361063957214f, 0.41917115449905396f, 0.23363636434078217f, 0.1738341897726059f, 0.4562826454639435f, 0.4905064105987549f, 0.4625667333602905f, 0.2374267578125f, -0.3272619843482971f, 0.23156507313251495f, 0.11704130470752716f, 0.3879474103450775f, 0.09819057583808899f, 0.6661377549171448f, 0.10253797471523285f, 0.1805604100227356f, -0.13736923038959503f, 0.6369966864585876f, 0.1848640739917755f, 0.6490429043769836f, 0.0665251836180687f, 0.7683920860290527f, 0.6712520122528076f, 0.21311040222644806f, -0.8067677021026611f, 0.006591446697711945f, 0.3326423168182373f, 0.8853175640106201f, 0.37239283323287964f, 0.23707503080368042f, 0.14608164131641388f, 0.5006018280982971f, -0.2865481376647949f, 0.09852267056703568f, 0.6591965556144714f, 0.5396541357040405f, 0.35972145199775696f, 0.23518608510494232f, 0.4940027892589569f, 0.9753645062446594f, -0.9289149641990662f, 0.6122633814811707f, 0.2477654069662094f, 0.9380113482475281f, 0.8874983787536621f, 0.6107684969902039f, 0.6907516121864319f, 0.10238790512084961f, -0.5272772312164307f, 0.7666522264480591f, 0.3789973556995392f, 0.13179586827754974f, 0.7800381779670715f, 0.7735700607299805f, 0.05232976749539375f, 0.01434215996414423f, -0.542676568031311f, 0.809868335723877f, 0.6346302628517151f, 0.6906660199165344f, 0.38542473316192627f, 0.5134126543998718f, 0.5956386923789978f, 0.06169137731194496f, -0.5036953687667847f, 0.18360018730163574f, 0.43812069296836853f, 0.30370771884918213f, 0.017084328457713127f, 0.30285879969596863f, 0.9152987003326416f, 0.6878378987312317f, -0.9473727941513062f, 0.763750433921814f, 0.0705687627196312f, 0.7290058135986328f, 0.46892306208610535f, 0.36562106013298035f, 0.49348604679107666f, 0.12039142847061157f, -0.3023204207420349f, 0.020682265982031822f, 0.6824755668640137f, 0.27559489011764526f, 0.9783381223678589f, 0.4036865830421448f, 0.45169201493263245f, 0.6166940331459045f, -0.9314141273498535f, 0.9227129817008972f, 0.44970548152923584f, 0.527391254901886f, 0.47859928011894226f, 0.3426186144351959f, 0.6565946936607361f, 0.9708790183067322f, -0.5616151094436646f, 0.8222653865814209f, 0.8017277121543884f, 0.2922569215297699f, 0.9949058294296265f, 0.36035582423210144f, 0.547057569026947f, 0.5297660231590271f, -0.07375975698232651f, 0.2397247552871704f, 0.3049796223640442f, 0.5002681016921997f, 0.7370891571044922f, 0.8021836876869202f, 0.026400616392493248f, 0.025220442563295364f, -0.21253986656665802f, 0.8098782896995544f, 0.2637675106525421f, 0.2658112049102783f, 0.4200013279914856f, 0.9406137466430664f, 0.9151204824447632f, 0.5459005832672119f, -0.05745897814631462f, 0.4294215142726898f, 0.8795196413993835f, 0.8368030786514282f, 0.7698915600776672f, 0.6831247806549072f, 0.5500710606575012f, 0.5563063025474548f, -0.9618794322013855f, 0.42121708393096924f, 0.2814069092273712f, 0.16400198638439178f, 0.8317022323608398f, 0.22326038777828217f, 0.12755385041236877f, 0.9573701620101929f, -0.45478588342666626f, 0.491497278213501f, 0.18918348848819733f, 0.7249332070350647f, 0.2737029492855072f, 0.17908956110477448f, 0.5245621800422668f, 0.8450114727020264f, -0.781822144985199f, 0.5290300846099854f, 0.203523650765419f, 0.10224119573831558f, 0.3406001031398773f, 0.8302140831947327f, 0.35269224643707275f, 0.8434866070747375f, -0.6181958913803101f, 0.17384488880634308f, 0.025117723271250725f, 0.6952447891235352f, 0.12009480595588684f, 0.8143219351768494f, 0.2475905865430832f, 0.04040404036641121f, -0.5292538404464722f, 0.4371492564678192f, 0.4741192162036896f, 0.31316712498664856f, 0.7418057322502136f, 0.961754560470581f, 0.31223246455192566f, 0.8355333209037781f, -0.028386106714606285f, 0.4279876947402954f, 0.6890415549278259f, 0.5343059301376343f, 0.116696797311306f, 0.9488131999969482f, 0.5517303347587585f, 0.2096361666917801f, -0.703264594078064f, 0.5335289239883423f, 0.3459514081478119f, 0.7733539938926697f, 0.8107888698577881f, 0.21875716745853424f, 0.5003461837768555f, 0.4652518033981323f, -0.3898852467536926f, 0.5736117362976074f, 0.9314404726028442f, 0.20103418827056885f, 0.7875267267227173f, 0.37474367022514343f, 0.27072685956954956f, 0.56101393699646f, -0.6099086403846741f, 0.043797027319669724f, 0.8473706245422363f, 0.8708891868591309f, 0.4421731233596802f, 0.22118492424488068f, 0.5853447318077087f, 0.898216187953949f, -0.04275256022810936f, 0.9422290325164795f, 0.5679838061332703f, 0.372746080160141f, 0.36005276441574097f, 0.7912144660949707f, 0.5530272722244263f, 0.8368468284606934f, -0.2925649583339691f, 0.2115991711616516f, 0.23250336945056915f, 0.13850916922092438f, 0.055798109620809555f, 0.07147785276174545f, 0.6813966631889343f, 0.5345316529273987f, -0.65407794713974f, 0.8319506049156189f, 0.05472654476761818f, 0.5431139469146729f, 0.7619543671607971f, 0.11111540347337723f, 0.6007270216941833f, 0.6981271505355835f, -0.26564422249794006f, 0.11839510500431061f, 0.7376317977905273f, 0.6780796647071838f, 0.4066937565803528f, 0.09205574542284012f, 0.43611791729927063f, 0.5712471008300781f, -0.5996711850166321f, 0.342645525932312f, 0.5956647396087646f, 0.34222933650016785f, 0.4366762936115265f, 0.14150646328926086f, 0.9288716316223145f, 0.9795441031455994f, -0.9925452470779419f, 0.953700065612793f, 0.030728088691830635f, 0.8130418658256531f, 0.06091918423771858f, 0.3762485980987549f, 0.25359389185905457f, 0.49817946553230286f, -0.3135921359062195f, 0.43249842524528503f, 0.22588227689266205f, 0.8488891124725342f, 0.11683795601129532f, 0.9781375527381897f, 0.8232319355010986f, 0.7664070129394531f, -0.2303706556558609f, 0.041316673159599304f, 0.5333737134933472f, 0.3280186057090759f, 0.6173511147499084f, 0.10346301645040512f, 0.774391233921051f, 0.8500477075576782f, -0.554644763469696f, 0.3018467426300049f, 0.5436915755271912f, 0.973315954208374f, 0.24460051953792572f, 0.4902331829071045f, 0.7067998647689819f, 0.09451178461313248f, -0.8704524636268616f, 0.9175478219985962f, 0.39957135915756226f, 0.37298673391342163f, 0.5550247430801392f, 0.8949134349822998f, 0.053345732390880585f, 0.19666923582553864f, -0.7367434501647949f, 0.6522281765937805f, 0.4602593779563904f, 0.4976655840873718f, 0.8429313898086548f, 0.129431813955307f, 0.5285847187042236f, 0.12571269273757935f, -0.6284417510032654f, 0.3975485563278198f, 0.8545519709587097f, 0.4872403144836426f, 0.12859128415584564f, 0.776788055896759f, 0.17611463367938995f, 0.5472591519355774f, -0.050207577645778656f, 0.8246087431907654f, 0.1452493518590927f, 0.5170005559921265f, 0.29978492856025696f, 0.9013137221336365f, 0.8646536469459534f, 0.5416975617408752f, -0.3277865946292877f, 0.7491884827613831f, 0.5544734597206116f, 0.7944162487983704f, 0.9721811413764954f, 0.3077841103076935f, 0.40542837977409363f, 0.7726930379867554f, -0.12231512367725372f, 0.9665787220001221f, 0.05919118970632553f, 0.06488899141550064f, 0.2849285900592804f, 0.29202935099601746f, 0.6153157949447632f, 0.7314201593399048f, -0.8298563957214355f, 0.6640784740447998f, 0.06662776321172714f, 0.40029358863830566f, 0.9463953375816345f, 0.4599170684814453f, 0.48512667417526245f, 0.861438512802124f, -0.5844041705131531f, 0.6401755809783936f, 0.4841322600841522f, 0.024796877056360245f, 0.09532219171524048f, 0.5148053765296936f, 0.9015516638755798f, 0.8791541457176208f, -0.14384126663208008f, 0.443922758102417f, 0.53609299659729f, 0.913934588432312f, 0.7600474953651428f, 0.2550753057003021f, 0.8317636847496033f, 0.2661088705062866f, -0.5125953555107117f, 0.009227761067450047f, 0.5700452327728271f, 0.9264189004898071f, 0.8666379451751709f, 0.9986007213592529f, 0.773659348487854f, 0.2367023229598999f, -0.887024462223053f, 0.3276175260543823f, 0.5251724123954773f, 0.3037237524986267f, 0.7006178498268127f, 0.9763983488082886f, 0.17871344089508057f, 0.8191037774085999f, -0.8116938471794128f, 0.031841572374105453f, 0.5593281984329224f, 0.5592151880264282f, 0.8014705181121826f, 0.9431124329566956f, 0.7742196321487427f, 0.08233281224966049f, -0.8573870062828064f, 0.5719550251960754f, 0.09797456115484238f, 0.8066827058792114f, 0.13621416687965393f, 0.20714063942432404f, 0.08268114179372787f, 0.3497881293296814f, -0.8968016505241394f, 0.6575902700424194f, 0.2601996660232544f, 0.17650021612644196f, 0.2464839369058609f, 0.4671144187450409f, 0.9203736186027527f, 0.21797588467597961f, -0.41943976283073425f, 0.22612668573856354f, 0.0603628046810627f, 0.6757798194885254f, 0.2531050443649292f, 0.29722151160240173f, 0.0842481404542923f, 0.19455070793628693f, -0.28522053360939026f, 0.02413354441523552f, 0.6302512288093567f, 0.5033922791481018f, 0.6187443733215332f, 0.16156704723834991f, 0.6482844352722168f, 0.8432731032371521f, -0.9254773259162903f, 0.9749739766120911f, 0.9351069927215576f, 0.19669154286384583f, 0.8035788536071777f, 0.6645980477333069f, 0.2653003931045532f, 0.5175701975822449f, -0.6130249500274658f, 0.6896916031837463f, 0.5589861869812012f, 0.7284337282180786f, 0.6376381516456604f, 0.7572173476219177f, 0.6949199438095093f, 0.8775386214256287f, -0.6887714862823486f, 0.2681714594364166f, 0.7563194632530212f, 0.3872111141681671f, 0.02609078399837017f, 0.9814525246620178f, 0.22146396338939667f, 0.4330427348613739f, -0.6554110050201416f, 0.8877934813499451f, 0.8640739917755127f, 0.29140013456344604f, 0.16906648874282837f, 0.6147862672805786f, 0.7981180548667908f, 0.8952439427375793f, -0.6350316405296326f, 0.6268996000289917f, 0.8264955282211304f, 0.06448262929916382f, 0.562912106513977f, 0.23593401908874512f, 0.14185594022274017f, 0.45707204937934875f, -0.5065716505050659f, 0.171289324760437f, 0.8775440454483032f, 0.9242829084396362f, 0.8631795048713684f, 0.8453612923622131f, 0.04549374058842659f, 0.40692970156669617f, -0.9407156705856323f, 0.6426548957824707f, 0.9289692640304565f, 0.8073089718818665f, 0.9360499382019043f, 0.17443501949310303f, 0.1530180722475052f, 0.7152965068817139f, -0.9724699258804321f, 0.8816050291061401f, 0.6589141488075256f, 0.38804468512535095f, 0.14566852152347565f, 0.10043658316135406f, 0.256494402885437f, 0.2704109847545624f, -0.2143763303756714f, 0.38811466097831726f, 0.05495338514447212f, 0.40376976132392883f, 0.6676177382469177f, 0.12811093032360077f, 0.1726524978876114f, 0.55476313829422f, -0.12867499887943268f, 0.6186318397521973f, 0.8540384769439697f, 0.8935428857803345f, 0.9191356897354126f, 0.23800507187843323f, 0.5737044215202332f, 0.5304794907569885f, -0.639931857585907f, 0.15812364220619202f, 0.865633487701416f, 0.37882930040359497f, 0.8351945281028748f, 0.3325510323047638f, 0.18533773720264435f, 0.8055465221405029f, -0.2628161907196045f, 0.25750932097435f, 0.7483437061309814f, 0.9068357944488525f, 0.574678361415863f, 0.03827941417694092f, 0.7071875929832458f, 0.059244781732559204f, -0.2377321571111679f, 0.08824903517961502f, 0.365315318107605f, 0.8977789878845215f, 0.22808921337127686f, 0.19427892565727234f, 0.008614534512162209f, 0.30112141370773315f, -0.4219447374343872f, 0.8431180119514465f, 0.9039799571037292f, 0.43683385848999023f, 0.4777008593082428f, 0.15300747752189636f, 0.8740872144699097f, 0.6013580560684204f, -0.09079950302839279f, 0.43560591340065f, 0.597014307975769f, 0.29315897822380066f, 0.723807692527771f, 0.6633944511413574f, 0.7906978130340576f, 0.5456422567367554f, -0.5748966336250305f, 0.4255816340446472f, 0.8307361602783203f, 0.42529159784317017f, 0.5057696104049683f, 0.4117552936077118f, 0.10739269852638245f, 0.7027945518493652f, -0.3269158899784088f, 0.6749441623687744f, 0.2153674066066742f, 0.6658101677894592f, 0.507026195526123f, 0.05117180570960045f, 0.5422491431236267f, 0.7571777105331421f, -0.882809579372406f, 0.7312765121459961f, 0.7650193572044373f, 0.08348193019628525f, 0.6374784111976624f, 0.8523854613304138f, 0.675951361656189f, 0.7073398232460022f, -0.3991304337978363f, 0.6236636638641357f, 0.26737305521965027f, 0.7956748008728027f, 0.2798708379268646f, 0.33021050691604614f, 0.8129793405532837f, 0.28476858139038086f, -0.5753512382507324f, 0.6120730042457581f, 0.25348836183547974f, 0.5527686476707458f, 0.7855913043022156f, 0.21740393340587616f, 0.19528323411941528f, 0.6055927872657776f, -0.9754027128219604f, 0.8532917499542236f, 0.6195632219314575f, 0.7502372860908508f, 0.9208462834358215f, 0.18427996337413788f, 0.4846001863479614f, 0.713146448135376f, -0.9832860827445984f, 0.4014149606227875f, 0.06767023354768753f, 0.35535329580307007f, 0.3685566484928131f, 0.6189659237861633f, 0.43275561928749084f, 0.8622802495956421f, -0.5359161496162415f, 0.3287905752658844f, 0.48882079124450684f, 0.39015668630599976f, 0.16833770275115967f, 0.011966993100941181f, 0.3405369222164154f, 0.7502809762954712f, -0.8112705945968628f, 0.7647001147270203f, 0.08044836670160294f, 0.3765701949596405f, 0.3405163288116455f, 0.0926673635840416f, 0.09146496653556824f, 0.011300303041934967f, -0.818842351436615f, 0.8350003361701965f, 0.15693172812461853f, 0.0021568306256085634f, 0.7353554964065552f, 0.9173839688301086f, 0.962618350982666f, 0.6918390393257141f, -0.5518525838851929f, 0.889204204082489f, 0.8245977759361267f, 0.9535345435142517f, 0.7269699573516846f, 0.1879560500383377f, 0.09593922644853592f, 0.5344751477241516f, -0.11045094579458237f, 0.31051912903785706f, 0.5831382870674133f, 0.04841148853302002f, 0.6533284187316895f, 0.45097580552101135f, 0.4865398406982422f, 0.019865505397319794f, -0.7276056408882141f, 0.10318335145711899f, 0.8506371974945068f, 0.7786239981651306f, 0.11184370517730713f, 0.01301974430680275f, 0.1305973380804062f, 0.9592481851577759f, -0.7530809044837952f, 0.28379344940185547f, 0.6746054291725159f, 0.6477633118629456f, 0.7062335014343262f, 0.9885810613632202f, 0.09361013770103455f, 0.44940775632858276f, -0.7996503710746765f, 0.6202777624130249f, 0.7836864590644836f, 0.3424076735973358f, 0.9096884727478027f, 0.12146296352148056f, 0.7946091890335083f, 0.7831739187240601f, -0.9271678924560547f, 0.18483878672122955f, 0.967677652835846f, 0.28324607014656067f, 0.9529985785484314f, 0.12874020636081696f, 0.5076702237129211f, 0.4629865288734436f, -0.7347506880760193f, 0.8834892511367798f, 0.952856183052063f, 0.02006492018699646f, 0.7187304496765137f, 0.5827726125717163f, 0.7524625062942505f, 0.39904916286468506f, -0.5688199996948242f, 0.6952483057975769f, 0.3291538953781128f, 0.09647246450185776f, 0.3410313129425049f, 0.9744184017181396f, 0.8914033770561218f, 0.9825778603553772f, -0.012605175375938416f, 0.31832215189933777f, 0.4819110631942749f, 0.01585654728114605f, 0.9293444156646729f, 0.2674931287765503f, 0.5578027963638306f, 0.9234645366668701f, -0.6275621652603149f, 0.9179702401161194f, 0.9005942344665527f, 0.830413281917572f, 0.7911098599433899f, 0.7191097140312195f, 0.41292983293533325f, 0.7389200329780579f, -0.6718766093254089f, 0.5726444125175476f, 0.18030929565429688f, 0.3323686718940735f, 0.5378212928771973f, 0.32772359251976013f, 0.840602457523346f, 0.20132315158843994f, -0.9203819036483765f, 0.0669952929019928f, 0.26972171664237976f, 0.2765814960002899f, 0.13474662601947784f, 0.08092452585697174f, 0.15293696522712708f, 0.16572974622249603f, -0.5428364276885986f, 0.40264374017715454f, 0.3738572299480438f, 0.7932856678962708f, 0.6883641481399536f, 0.33395513892173767f, 0.1310761570930481f, 0.4313279986381531f, -0.5186395049095154f, 0.40494781732559204f, 0.7529438138008118f, 0.5739639401435852f, 0.009734777733683586f, 0.6770159006118774f, 0.8273091912269592f, 0.0442122220993042f, -0.7640420198440552f, 0.7427393794059753f, 0.8177905678749084f, 0.3791821002960205f, 0.47401759028434753f, 0.16847245395183563f, 0.07880064845085144f, 0.10166507214307785f, -0.6789286732673645f, 0.9849212169647217f, 0.7290462255477905f, 0.06422432512044907f, 0.7062622308731079f, 0.6109223961830139f, 0.06822193413972855f, 0.7116509675979614f, -0.3397926688194275f, 0.6563603281974792f, 0.4529629647731781f, 0.7499142289161682f, 0.43807417154312134f, 0.5388779044151306f, 0.141599640250206f, 0.7862890362739563f, -0.9364714622497559f, 0.5318143367767334f, 0.443887859582901f, 0.434388130903244f, 0.24238114058971405f, 0.2609880864620209f, 0.40390440821647644f, 0.08131470531225204f, -0.8639481067657471f, 0.9256031513214111f, 0.11836878955364227f, 0.035409461706876755f, 0.22575657069683075f, 0.7413455843925476f, 0.9497782588005066f, 0.35099756717681885f, -0.18416234850883484f, 0.3374882638454437f, 0.8966073393821716f, 0.17825965583324432f, 0.7568508982658386f, 0.29842182993888855f, 0.18165849149227142f, 0.7902745604515076f, -0.15374326705932617f, 0.3395799696445465f, 0.1296362280845642f, 0.9206568002700806f, 0.8215516209602356f, 0.45300349593162537f, 0.5845451951026917f, 0.8758558630943298f, -0.3492630124092102f, 0.13592879474163055f, 0.7408902049064636f, 0.3396992087364197f, 0.10982646048069f, 0.439864844083786f, 0.2101368010044098f, 0.09758585691452026f, -0.4056072235107422f, 0.9472672343254089f, 0.05354445055127144f, 0.6977166533470154f, 0.13049185276031494f, 0.6738755106925964f, 0.06706748902797699f, 0.2942731976509094f, -0.906185507774353f, 0.9150093793869019f, 0.04135216772556305f, 0.48367851972579956f, 0.4953581392765045f, 0.5511205196380615f, 0.6678562760353088f, 0.0018535945564508438f, -0.3284589648246765f, 0.5217759013175964f, 0.17035561800003052f, 0.3544638752937317f, 0.44072237610816956f, 0.17743603885173798f, 0.5956017971038818f, 0.5275219082832336f, -0.30020377039909363f, 0.25199267268180847f, 0.673706591129303f, 0.46326494216918945f, 0.0679473876953125f, 0.3859005272388458f, 0.9451090097427368f, 0.10728146880865097f, -0.5985642075538635f, 0.16365984082221985f, 0.507383406162262f, 0.8553304672241211f, 0.12379756569862366f, 0.7248778343200684f, 0.4636901319026947f, 0.23644712567329407f, -0.6206981539726257f, 0.825587272644043f, 0.7438041567802429f, 0.41783246397972107f, 0.3627680540084839f, 0.6532660126686096f, 0.8919661045074463f, 0.1168673112988472f, -0.2632496953010559f, 0.7440928816795349f, 0.22033700346946716f, 0.7395572662353516f, 0.8119232058525085f, 0.617368221282959f, 0.2592128813266754f, 0.9803826212882996f, -0.020306091755628586f, 0.4024711847305298f, 0.31995731592178345f, 0.09813838452100754f, 0.930126965045929f, 0.7239391207695007f, 0.053685035556554794f, 0.23200546205043793f, -0.8631276488304138f, 0.4166075885295868f, 0.275654673576355f, 0.9726216793060303f, 0.0485512912273407f, 0.4425389766693115f, 0.7480742335319519f, 0.9976475238800049f, -0.2237819880247116f, 0.13657915592193604f, 0.05103444308042526f, 0.4265020191669464f, 0.9794901013374329f, 0.7689271569252014f, 0.385407954454422f, 0.5098841190338135f, -0.6177133917808533f, 0.6333434581756592f, 0.0017799431225284934f, 0.8937757015228271f, 0.08634413778781891f, 0.7602112293243408f, 0.5504933595657349f, 0.5608672499656677f, -0.22374098002910614f, 0.029410848394036293f, 0.5155171751976013f, 0.37335532903671265f, 0.25916674733161926f, 0.23418809473514557f, 0.6040691137313843f, 0.5282865762710571f, -0.13211745023727417f, 0.33945366740226746f, 0.28099384903907776f, 0.4579901397228241f, 0.07942959666252136f, 0.26819679141044617f, 0.5702927112579346f, 0.12477663904428482f, -0.6712229251861572f, 0.8768649697303772f, 0.31273141503334045f, 0.8808464407920837f, 0.8308995962142944f, 0.04588260129094124f, 0.17635415494441986f, 0.8378504514694214f, -0.06507231295108795f, 0.3064173758029938f, 0.6862356066703796f, 0.6540646553039551f, 0.7975744605064392f, 0.252684623003006f, 0.8084518909454346f, 0.08837859332561493f, -0.7672826051712036f, 0.9225572347640991f, 0.7421898245811462f, 0.007559634745121002f, 0.27832677960395813f, 0.2595709264278412f, 0.3849569857120514f, 0.012017752975225449f, -0.47631368041038513f, 0.3423320949077606f, 0.010335690341889858f, 0.6599898934364319f, 0.25558412075042725f, 0.10340885072946548f, 0.23143841326236725f, 0.790258526802063f, -0.42538732290267944f, 0.15626513957977295f, 0.3704782724380493f, 0.15832597017288208f, 0.8976737856864929f, 0.6085277795791626f, 0.07051825523376465f, 0.03878407180309296f, -0.19470711052417755f, 0.3555401563644409f, 0.44812944531440735f, 0.060782432556152344f, 0.4291188716888428f, 0.8682312965393066f, 0.3984084129333496f, 0.763495683670044f, -0.9743981957435608f, 0.7163905501365662f, 0.48023295402526855f, 0.4263193607330322f, 0.3694438338279724f, 0.05957384780049324f, 0.16726288199424744f, 0.5321101546287537f, -0.460053026676178f, 0.6104678511619568f, 0.5914803743362427f, 0.6143425703048706f, 0.939152181148529f, 0.6676769256591797f, 0.33006104826927185f, 0.48328083753585815f, -0.3227638900279999f, 0.05428168177604675f, 0.26375463604927063f, 0.3338300585746765f, 0.47175514698028564f, 0.24780896306037903f, 0.3119949996471405f, 0.8562712669372559f, -0.8860064744949341f, 0.03717879578471184f, 0.6789237260818481f, 0.27531448006629944f, 0.31743481755256653f, 0.3647180497646332f, 0.3012501299381256f, 0.6588183045387268f, -0.432183176279068f, 0.03459784388542175f, 0.089142344892025f, 0.5457453727722168f, 0.04412245750427246f, 0.7984902858734131f, 0.07316780090332031f, 0.5304526090621948f, -0.2141617238521576f, 0.14131316542625427f, 0.34717875719070435f, 0.6625684499740601f, 0.7561714053153992f, 0.7031852602958679f, 0.13248592615127563f, 0.26591768860816956f, -0.7596672773361206f, 0.6413553357124329f, 0.32970479130744934f, 0.30784568190574646f, 0.19701674580574036f, 0.08952246606349945f, 0.9362338185310364f, 0.26174280047416687f, -0.7012841701507568f, 0.7889423966407776f, 0.8158165812492371f, 0.21192391216754913f, 0.42604973912239075f, 0.7188047170639038f, 0.758027970790863f, 0.24000471830368042f, -0.40247443318367004f, 0.6457247734069824f, 0.921432614326477f, 0.8528724908828735f, 0.8166099786758423f, 0.3614797294139862f, 0.9402487874031067f, 0.4707021415233612f, -0.8270338177680969f, 0.39625078439712524f, 0.6216071844100952f, 0.6532266139984131f, 0.6218100786209106f, 0.4944937527179718f, 0.06152965873479843f, 0.12896594405174255f, -0.2855348587036133f, 0.6474738717079163f, 0.07813700288534164f, 0.8575302958488464f, 0.957369863986969f, 0.8770041465759277f, 0.5223327279090881f, 0.4849742352962494f, -0.9429717063903809f, 0.39228174090385437f, 0.9032192826271057f, 0.02713168039917946f, 0.6582227349281311f, 0.5564001202583313f, 0.9271227121353149f, 0.660620927810669f, -0.9442515969276428f, 0.61958247423172f, 0.8711978793144226f, 0.8651898503303528f, 0.6681767106056213f, 0.9851297736167908f, 0.8094896078109741f, 0.7810819149017334f, -0.8867360949516296f, 0.7610051035881042f, 0.4370375871658325f, 0.5605738162994385f, 0.025969291105866432f, 0.1656072437763214f, 0.3669593632221222f, 0.8743677735328674f, -0.2532980442047119f, 0.5694180727005005f, 0.03904493898153305f, 0.3962854743003845f, 0.9929449558258057f, 0.274107426404953f, 0.14263713359832764f, 0.6454346179962158f, -0.4647265672683716f, 0.8798530697822571f, 0.29921063780784607f, 0.7460498213768005f, 0.2143430858850479f, 0.537165641784668f, 0.6267989277839661f, 0.9593795537948608f, -0.9772339463233948f, 0.8367632627487183f, 0.7530802488327026f, 0.3643462359905243f, 0.2232673168182373f, 0.910831093788147f, 0.903678834438324f, 0.593725860118866f, -0.47102877497673035f, 0.2499140202999115f, 0.9566985368728638f, 0.49329036474227905f, 0.37481170892715454f, 0.21506184339523315f, 0.6028867363929749f, 0.5567969083786011f, -0.6124699711799622f, 0.9162761569023132f, 0.10860511660575867f, 0.7381680011749268f, 0.5829280614852905f, 0.3116649091243744f, 0.15534861385822296f, 0.7231050133705139f, -0.1957118809223175f, 0.6845861673355103f, 0.789760947227478f, 0.1044761911034584f, 0.6172311305999756f, 0.11052820086479187f, 0.8046398162841797f, 0.16482819616794586f, -0.7083026766777039f, 0.8104063272476196f, 0.8143885731697083f, 0.24451462924480438f, 0.950645923614502f, 0.14645428955554962f, 0.4599320590496063f, 0.8057320713996887f, -0.9644134044647217f, 0.17930881679058075f, 0.4828612208366394f, 0.7124573588371277f, 0.9562886357307434f, 0.8766058087348938f, 0.9484097361564636f, 0.527515709400177f, -0.11465121805667877f, 0.7171856164932251f, 0.30292296409606934f, 0.7100882530212402f, 0.9368905425071716f, 0.41898220777511597f, 0.7728292942047119f, 0.9103571772575378f, -0.20420899987220764f, 0.4750189781188965f, 0.2633247375488281f, 0.9622131586074829f, 0.7902860641479492f, 0.2299404740333557f, 0.9542876482009888f, 0.6208515763282776f, -0.7080472111701965f, 0.4237794578075409f, 0.28622856736183167f, 0.3571811020374298f, 0.5095169544219971f, 0.30417969822883606f, 0.9115217924118042f, 0.9035351872444153f, -0.596123993396759f, 0.317291259765625f, 0.31571391224861145f, 0.693698525428772f, 0.3032674491405487f, 0.044681042432785034f, 0.5970906615257263f, 0.32190564274787903f, -0.25956201553344727f, 0.940984308719635f, 0.48830509185791016f, 0.9847293496131897f, 0.14201784133911133f, 0.7420325875282288f, 0.9069103002548218f, 0.2042747139930725f, -0.21100939810276031f, 0.6198246479034424f, 0.3481123447418213f, 0.9217789173126221f, 0.8163509964942932f, 0.7249855995178223f, 0.17895230650901794f, 0.7184246182441711f, -0.5048226714134216f, 0.5653295516967773f, 0.7197402119636536f, 0.3268016278743744f, 0.14998307824134827f, 0.9338038563728333f, 0.7003989219665527f, 0.2529696226119995f, -0.2272600680589676f, 0.36774420738220215f, 0.20269380509853363f, 0.0003133015998173505f, 0.36866921186447144f, 0.6134288907051086f, 0.9236811399459839f, 0.9035624265670776f, -0.45280346274375916f, 0.592960774898529f, 0.14980463683605194f, 0.7663917541503906f, 0.9601364135742188f, 0.40673133730888367f, 0.5886396765708923f, 0.9915207624435425f, -0.11403344571590424f, 0.2519032061100006f, 0.4336310029029846f, 0.6249912977218628f, 0.40264928340911865f, 0.12089487910270691f, 0.3550895154476166f, 0.18078210949897766f, -0.8406106233596802f, 0.2593833804130554f, 0.8407099843025208f, 0.30344510078430176f, 0.03586408495903015f, 0.07342008501291275f, 0.997322142124176f, 0.2864852845668793f, -0.7886729836463928f, 0.438564270734787f, 0.8631395101547241f, 0.8823963403701782f, 0.001526998239569366f, 0.6043614149093628f, 0.4671759009361267f, 0.28423798084259033f, -0.6483217477798462f, 0.26275625824928284f, 0.2274196445941925f, 0.46137505769729614f, 0.8962973356246948f, 0.7225577235221863f, 0.23967838287353516f, 0.9460627436637878f, -0.5898016095161438f, 0.4182835817337036f, 0.15611985325813293f, 0.8784141540527344f, 0.5970561504364014f, 0.966279149055481f, 0.9421433806419373f, 0.2461216300725937f, -0.8817152976989746f, 0.7239565253257751f, 0.20112866163253784f, 0.09547165781259537f, 0.3448859751224518f, 0.4563095271587372f, 0.5544530749320984f, 0.5065625905990601f, -0.6430532932281494f, 0.47393131256103516f, 0.8418793678283691f, 0.1644616723060608f, 0.6896112561225891f, 0.381165474653244f, 0.17743930220603943f, 0.7474741339683533f, -0.7999681234359741f, 0.9946305155754089f, 0.7283616662025452f, 0.3662089705467224f, 0.9229400753974915f, 0.7508653402328491f, 0.7280088067054749f, 0.10549046099185944f, -0.4036429524421692f, 0.21488669514656067f, 0.2961772084236145f, 0.11445774137973785f, 0.6815966963768005f, 0.7250193357467651f, 0.47270116209983826f, 0.5577702522277832f, -0.05132802203297615f, 0.7212799787521362f, 0.11301673203706741f, 0.36553528904914856f, 0.0047757127322256565f, 0.09651891142129898f, 0.25727105140686035f, 0.28320935368537903f, -0.5903169512748718f, 0.15684843063354492f, 0.7596150040626526f, 0.1043461263179779f, 0.6841555237770081f, 0.6288443803787231f, 0.5158550143241882f, 0.6917093396186829f, -0.6654718518257141f, 0.573089599609375f, 0.5357581377029419f, 0.7133358120918274f, 0.19734148681163788f, 0.8059125542640686f, 0.7743298411369324f, 0.4183366596698761f, -0.5039684772491455f, 0.6901958584785461f, 0.6492645740509033f, 0.16913363337516785f, 0.795392632484436f, 0.6613307595252991f, 0.9124503135681152f, 0.39558911323547363f, -0.728288471698761f, 0.4306832551956177f, 0.5748626589775085f, 0.6646712422370911f, 0.14538873732089996f, 0.5022467374801636f, 0.8846691250801086f, 0.053076568990945816f, -0.8901423215866089f, 0.058253660798072815f, 0.05038376897573471f, 0.24324938654899597f, 0.6955372095108032f, 0.3400779962539673f, 0.7505126595497131f, 0.7386541366577148f, -0.7486693263053894f, 0.32793769240379333f, 0.15343131124973297f, 0.21614432334899902f, 0.713736355304718f, 0.6668292880058289f, 0.12342250347137451f, 0.1567462980747223f, -0.3237452208995819f, 0.9249565005302429f, 0.8475679755210876f, 0.25570982694625854f, 0.7592624425888062f, 0.6129331588745117f, 0.6015100479125977f, 0.4991719722747803f, -0.648485541343689f, 0.2686459720134735f, 0.41535714268684387f, 0.6209187507629395f, 0.6832432150840759f, 0.881659984588623f, 0.4452309012413025f, 0.8109968304634094f, -0.5011301040649414f, 0.7591447830200195f, 0.2826001048088074f, 0.39330732822418213f, 0.16001757979393005f, 0.8089646697044373f, 0.09944295883178711f, 0.1609858125448227f, -0.21511122584342957f, 0.5825372934341431f, 0.00791970919817686f, 0.5295020341873169f, 0.8169975876808167f, 0.2792954444885254f, 0.6986541152000427f, 0.39025840163230896f, -0.30365851521492004f, 0.616468071937561f, 0.5106542110443115f, 0.928259551525116f, 0.2884484529495239f, 0.8744743466377258f, 0.22019033133983612f, 0.33774274587631226f, -0.7523866295814514f, 0.5829907059669495f, 0.30579712986946106f, 0.5002056360244751f, 0.25211694836616516f, 0.22804512083530426f, 0.7966975569725037f, 0.580460250377655f, -0.5485571622848511f, 0.1933152675628662f, 0.804595410823822f, 0.49782752990722656f, 0.8183291554450989f, 0.33100205659866333f, 0.08746682852506638f, 0.033768631517887115f, -0.7837328910827637f, 0.6709874272346497f, 0.22170935571193695f, 0.682453453540802f, 0.13215471804141998f, 0.3157775104045868f, 0.5085834860801697f, 0.3223922848701477f, -0.30420762300491333f, 0.3688586354255676f, 0.9632596373558044f, 0.4089218080043793f, 0.5527198314666748f, 0.887598991394043f, 0.020635396242141724f, 0.2927877902984619f, -0.5129067301750183f, 0.6705060005187988f, 0.07555323839187622f, 0.3037257790565491f, 0.83697909116745f, 0.2060588151216507f, 0.9341396689414978f, 0.5147665143013f, -0.5656434297561646f, 0.20319227874279022f, 0.8148306608200073f, 0.3019426465034485f, 0.649544894695282f, 0.586615800857544f, 0.34164997935295105f, 0.6596579551696777f, -0.5974178910255432f, 0.5867912769317627f, 0.3842301368713379f, 0.5990059971809387f, 0.858140230178833f, 0.6320047378540039f, 0.34559357166290283f, 0.9119530320167542f, -0.4221256375312805f, 0.35717079043388367f, 0.394058495759964f, 0.945401132106781f, 0.7330609560012817f, 0.8561903238296509f, 0.047716837376356125f, 0.2363825887441635f, -0.5079270005226135f, 0.18972042202949524f, 0.8960580825805664f, 0.5281332731246948f, 0.567939281463623f, 0.34141358733177185f, 0.34919124841690063f, 0.37951573729515076f, -0.8124500513076782f, 0.5213490128517151f, 0.815825343132019f, 0.5406738519668579f, 0.6367682218551636f, 0.2885606288909912f, 0.23651942610740662f, 0.6541053652763367f, -0.3424760401248932f, 0.2278100550174713f, 0.19108884036540985f, 0.8069961667060852f, 0.2830982804298401f, 0.6477438807487488f, 0.7216282486915588f, 0.5895755290985107f, -0.3537484407424927f, 0.5377271175384521f, 0.11059153825044632f, 0.5935180187225342f, 0.9689668416976929f, 0.25116196274757385f, 0.43629419803619385f, 0.07860293239355087f, -0.6549652218818665f, 0.5944486856460571f, 0.699701189994812f, 0.8061891794204712f, 0.5940237641334534f, 0.6247344613075256f, 0.8991647958755493f, 0.7589086294174194f, -0.6025434732437134f, 0.7923362851142883f, 0.06150044873356819f, 0.13965322077274323f, 0.021027522161602974f, 0.6022606492042542f, 0.32631590962409973f, 0.4128158688545227f, -0.27200376987457275f, 0.267660528421402f, 0.1896972954273224f, 0.5174869894981384f, 0.15653106570243835f, 0.025534600019454956f, 0.10824039578437805f, 0.5692610144615173f, -0.3570610582828522f, 0.5057882070541382f, 0.9457268714904785f, 0.432692289352417f, 0.27154695987701416f, 0.1928638517856598f, 0.0003673101600725204f, 0.07278576493263245f, -0.36039936542510986f, 0.7591413259506226f, 0.2029261589050293f, 0.8907095789909363f, 0.6076298356056213f, 0.9377709627151489f, 0.7334693670272827f, 0.283829927444458f, -0.3964257538318634f, 0.41611284017562866f, 0.3676881194114685f, 0.9139725565910339f, 0.3706882894039154f, 0.3475063741207123f, 0.8418834209442139f, 0.29238128662109375f, -0.1699504554271698f, 0.5672271251678467f, 0.5263125896453857f, 0.6343221068382263f, 0.7634344696998596f, 0.5330625772476196f, 0.7742788195610046f, 0.6282539367675781f, -0.1979716420173645f, 0.4816848039627075f, 0.5594350695610046f, 0.14459998905658722f, 0.6863922476768494f, 0.911773681640625f, 0.7102705836296082f, 0.8138708472251892f, -0.5441783666610718f, 0.5525435209274292f, 0.1725827008485794f, 0.42410707473754883f, 0.6538578271865845f, 0.37142717838287354f, 0.32640528678894043f, 0.8253224492073059f, -0.5369563102722168f, 0.25925448536872864f, 0.3878498077392578f, 0.18455858528614044f, 0.05846748128533363f, 0.8501424789428711f, 0.5716464519500732f, 0.7070767879486084f, -0.5587919354438782f, 0.5568777322769165f, 0.1859152764081955f, 0.5500078797340393f, 0.30256399512290955f, 0.10988137125968933f, 0.4644174575805664f, 0.06311586499214172f, -0.3134347200393677f, 0.5952994227409363f, 0.7863426208496094f, 0.48599138855934143f, 0.9994615912437439f, 0.09309348464012146f, 0.15462824702262878f, 0.17309992015361786f, -0.9364849925041199f, 0.11515212804079056f, 0.11608851701021194f, 0.23265936970710754f, 0.6550112962722778f, 0.8303188681602478f, 0.8256635069847107f, 0.4854241907596588f, -0.008035215549170971f, 0.36372140049934387f, 0.8986504673957825f, 0.6008424162864685f, 0.33880290389060974f, 0.9005831480026245f, 0.3116581439971924f, 0.7845483422279358f, -0.5028330087661743f, 0.039142537862062454f, 0.061310794204473495f, 0.29272764921188354f, 0.40662211179733276f, 0.5979650020599365f, 0.9081153869628906f, 0.0532769113779068f, -0.1852596402168274f, 0.7850123643875122f, 0.7845461964607239f, 0.552830159664154f, 0.09125730395317078f, 0.9613732099533081f, 0.6040982007980347f, 0.01945122703909874f, -0.9483736157417297f, 0.106742262840271f, 0.13837087154388428f, 0.4981932044029236f, 0.09314489364624023f, 0.4454066753387451f, 0.8006799817085266f, 0.13105615973472595f, -0.12389370799064636f, 0.26838573813438416f, 0.8298971652984619f, 0.5541223287582397f, 0.5857511162757874f, 0.3848268389701843f, 0.9562182426452637f, 0.49597302079200745f, -0.9044771790504456f, 0.08955545723438263f, 0.498544305562973f, 0.6081307530403137f, 0.7323569059371948f, 0.5822017788887024f, 0.2572779953479767f, 0.2890033423900604f, -0.7358339428901672f, 0.10552795231342316f, 0.43705281615257263f, 0.17304016649723053f, 0.3526625633239746f, 0.32500943541526794f, 0.2432151585817337f, 0.042821284383535385f, -0.16521531343460083f, 0.030556198209524155f, 0.15032587945461273f, 0.6249492764472961f, 0.319973886013031f, 0.8868379592895508f, 0.09663645178079605f, 0.7020467519760132f, -0.5879439115524292f, 0.9413977861404419f, 0.13034985959529877f, 0.884143054485321f, 0.3525847792625427f, 0.9934309124946594f, 0.3499792814254761f, 0.9662895798683167f, -0.620798647403717f, 0.35614362359046936f, 0.4917197823524475f, 0.8547738790512085f, 0.06924304366111755f, 0.43117979168891907f, 0.47636809945106506f, 0.5230548977851868f, -0.2980656027793884f, 0.16645146906375885f, 0.6807052493095398f, 0.3823353052139282f, 0.5735101699829102f, 0.10767396539449692f, 0.15878543257713318f, 0.14675137400627136f, -0.5904806852340698f, 0.7500377893447876f, 0.8684999346733093f, 0.6103236675262451f, 0.2654368281364441f, 0.018955161795020103f, 0.3917052447795868f, 0.8308903574943542f, -0.2569331228733063f, 0.3241194486618042f, 0.7095353007316589f, 0.4127275347709656f, 0.1136372908949852f, 0.5918357372283936f, 0.10517064481973648f, 0.3332481384277344f, -0.8329157829284668f, 0.12559689581394196f, 0.15951119363307953f, 0.9756889939308167f, 0.38038206100463867f, 0.20723143219947815f, 0.4369643032550812f, 0.44923076033592224f, -0.028886867687106133f, 0.677804708480835f, 0.981382429599762f, 0.08007488399744034f, 0.9672709703445435f, 0.712680459022522f, 0.3075808584690094f, 0.17344336211681366f, -0.5926640033721924f, 0.9090217351913452f, 0.22621510922908783f, 0.1805100291967392f, 0.24765051901340485f, 0.6141682863235474f, 0.45574644207954407f, 0.5427436232566833f, -0.15953931212425232f, 0.3270909786224365f, 0.8569471836090088f, 0.07127029448747635f, 0.9712995290756226f, 0.1801219880580902f, 0.2099241018295288f, 0.8746160268783569f, -0.21430322527885437f, 0.2987362742424011f, 0.8452674150466919f, 0.1605393886566162f, 0.5877381563186646f, 0.6223311424255371f, 0.42515382170677185f, 0.18485790491104126f, -0.495988130569458f, 0.20364591479301453f, 0.5182472467422485f, 0.41272395849227905f, 0.10520918667316437f, 0.9102841019630432f, 0.5678598880767822f, 0.7865689396858215f, -0.3108740746974945f, 0.6158797740936279f, 0.2735326886177063f, 0.9457553625106812f, 0.3584705889225006f, 0.49672430753707886f, 0.9883763194084167f, 0.4464401304721832f, -0.015128174796700478f, 0.5848013758659363f, 0.1148475855588913f, 0.35374629497528076f, 0.8399617671966553f, 0.3629366457462311f, 0.15017786622047424f, 0.6135421991348267f, -0.7115855813026428f, 0.3169126808643341f, 0.288034588098526f, 0.5870506763458252f, 0.40584295988082886f, 0.8466708660125732f, 0.9661356210708618f, 0.07686677575111389f, -0.1833188384771347f, 0.10915695130825043f, 0.10859870165586472f, 0.44529664516448975f, 0.34882640838623047f, 0.3555763065814972f, 0.871253490447998f, 0.714220404624939f, -0.014134400524199009f, 0.7689262628555298f, 0.1532209813594818f, 0.5226984024047852f, 0.8747126460075378f, 0.2042938768863678f, 0.8680497407913208f, 0.1244627833366394f, -0.18485692143440247f, 0.965451180934906f, 0.8883827924728394f, 0.7501847743988037f, 0.05214904621243477f, 0.033463045954704285f, 0.52422034740448f, 0.054897624999284744f, -0.5657328367233276f, 0.2318836897611618f, 0.8057908415794373f, 0.5487607717514038f, 0.9567484855651855f, 0.7525366544723511f, 0.23786398768424988f, 0.5137143731117249f, -0.8139376640319824f, 0.20295241475105286f, 0.4425172507762909f, 0.17070186138153076f, 0.4377325773239136f, 0.49124500155448914f, 0.298379510641098f, 0.8409863710403442f, -0.3216692805290222f, 0.5562945604324341f, 0.034248966723680496f, 0.04615955427289009f, 0.4218903183937073f, 0.8598933219909668f, 0.5996469259262085f, 0.15107950568199158f, -0.5145377516746521f, 0.027806686237454414f, 0.20879772305488586f, 0.13770870864391327f, 0.8254254460334778f, 0.06709735095500946f, 0.09801474213600159f, 0.08538150787353516f, -0.014454304240643978f, 0.565342903137207f, 0.9535089135169983f, 0.11566043645143509f, 0.19183464348316193f, 0.5581390261650085f, 0.3142947256565094f, 0.7332144975662231f, -0.29911336302757263f, 0.36771368980407715f, 0.42913126945495605f, 0.34915101528167725f, 0.33735257387161255f, 0.11600437760353088f, 0.8285375237464905f, 0.5029950141906738f, -0.389336496591568f, 0.5875796675682068f, 0.61209636926651f, 0.2844465970993042f, 0.2134968489408493f, 0.2676119804382324f, 0.6605322360992432f, 0.9600736498832703f, -0.27903684973716736f, 0.30257469415664673f, 0.10889268666505814f, 0.4188674986362457f, 0.6270806193351746f, 0.05274980887770653f, 0.1759418100118637f, 0.2748657763004303f, -0.384128600358963f, 0.00983345601707697f, 0.3290945589542389f, 0.2777175307273865f, 0.7530981302261353f, 0.16624724864959717f, 0.9228249788284302f, 0.4918295443058014f, -0.18354660272598267f, 0.36472320556640625f, 0.7239057421684265f, 0.7692118287086487f, 0.4881262481212616f, 0.25455033779144287f, 0.44086840748786926f, 0.36907413601875305f, -0.37704455852508545f, 0.6181092858314514f, 0.7287411093711853f, 0.09132063388824463f, 0.5320258140563965f, 0.4777005612850189f, 0.7405213117599487f, 0.26234370470046997f, -0.09871618449687958f, 0.7875109910964966f, 0.06965503096580505f, 0.594497799873352f, 0.25560712814331055f, 0.835028350353241f, 0.6833656430244446f, 0.09003954380750656f, -0.874681293964386f, 0.7893887758255005f, 0.580596923828125f, 0.4621317982673645f, 0.33375880122184753f, 0.8050760626792908f, 0.7262958288192749f, 0.0056852619163692f, -8.522067946614698e-05f, 0.9468386173248291f, 0.8745409250259399f, 0.46312323212623596f, 0.9381608963012695f, 0.5034547448158264f, 0.7147161960601807f, 0.20554226636886597f, -0.7254053950309753f, 0.12373971194028854f, 0.7857091426849365f, 0.8193238377571106f, 0.7977188229560852f, 0.606552004814148f, 0.10348479449748993f, 0.43713828921318054f, -0.08976049721240997f, 0.32394957542419434f, 0.3971615433692932f, 0.48099085688591003f, 0.6431126594543457f, 0.40168941020965576f, 0.5426186919212341f, 0.5631948709487915f, -0.7422848343849182f, 0.24500659108161926f, 0.4927881062030792f, 0.8001512885093689f, 0.39126473665237427f, 0.7801579833030701f, 0.6476401090621948f, 0.3863745331764221f, -0.5384172201156616f, 0.2780013680458069f, 0.25099727511405945f, 0.4624561369419098f, 0.08370359241962433f, 0.9996410012245178f, 0.21663962304592133f, 0.4316812753677368f, -0.5134245157241821f, 0.31275877356529236f, 0.3230094611644745f, 0.8208524584770203f, 0.8797621130943298f, 0.14233776926994324f, 0.10233078896999359f, 0.7955010533332825f, -0.3428725302219391f, 0.002291375771164894f, 0.8749321699142456f, 0.4196731746196747f, 0.8584619164466858f, 0.48237526416778564f, 0.34459879994392395f, 0.2461230307817459f, -0.666555643081665f, 0.11915207654237747f, 0.9738917350769043f, 0.3548967242240906f, 0.18569409847259521f, 0.4959207773208618f, 0.01729443483054638f, 0.5877076387405396f, -0.5593753457069397f, 0.9500259757041931f, 0.6251279711723328f, 0.5196704268455505f, 0.0571531243622303f, 0.8632880449295044f, 0.8806190490722656f, 0.7532396912574768f, -0.547285795211792f, 0.013722795993089676f, 0.38831135630607605f, 0.11129241436719894f, 0.3107358515262604f, 0.388655424118042f, 0.9428322911262512f, 0.9959595203399658f, -0.4202653765678406f, 0.42193567752838135f, 0.7702360153198242f, 0.4060624837875366f, 0.13391467928886414f, 0.00376236904412508f, 0.9612737894058228f, 0.8263800144195557f, -0.3655715584754944f, 0.2696514427661896f, 0.3714863955974579f, 0.12610803544521332f, 0.1982283592224121f, 0.9108706116676331f, 0.11334080994129181f, 0.09284926950931549f, -0.34609130024909973f, 0.45337021350860596f, 0.9113588929176331f, 0.9913930296897888f, 0.41132038831710815f, 0.17678973078727722f, 0.5273706316947937f, 0.7154493927955627f, -0.33652377128601074f, 0.7931405305862427f, 0.34535783529281616f, 0.859553337097168f, 0.4865076541900635f, 0.7209156155586243f, 0.14753620326519012f, 0.2752707898616791f, -0.7045042514801025f, 0.33379364013671875f, 0.33712512254714966f, 0.7641931176185608f, 0.7980566024780273f, 0.5941081643104553f, 0.9559729099273682f, 0.11502749472856522f, -0.3024997413158417f, 0.13948188722133636f, 0.9465914368629456f, 0.4592703580856323f, 0.17666694521903992f, 0.4723595976829529f, 0.028290018439292908f, 0.9238113164901733f, -0.23769527673721313f, 0.11139871180057526f, 0.7027263641357422f, 0.7957836389541626f, 0.7688342928886414f, 0.039178214967250824f, 0.2864169776439667f, 0.7756521105766296f, -0.10468140244483948f, 0.3025130033493042f, 0.9985041618347168f, 0.506382167339325f, 0.3955601751804352f, 0.1856289803981781f, 0.06476829200983047f, 0.035445742309093475f, -0.0016226769657805562f, 0.5399128198623657f, 0.8672431111335754f, 0.11013241112232208f, 0.015006412751972675f, 0.9833250641822815f, 0.9041955471038818f, 0.4384058713912964f, -0.30524951219558716f, 0.5789628028869629f, 0.9185100793838501f, 0.674202024936676f, 0.9145684838294983f, 0.466779500246048f, 0.7139545679092407f, 0.09772847592830658f, -0.267365038394928f, 0.6222442388534546f, 0.28264203667640686f, 0.6178073287010193f, 0.2465377300977707f, 0.3964201509952545f, 0.9368734359741211f, 0.9389320611953735f, -0.3758583664894104f, 0.5678788423538208f, 0.9495376944541931f, 0.29632407426834106f, 0.6668339967727661f, 0.29342707991600037f, 0.5339052677154541f, 0.06721775978803635f, -0.5426344871520996f, 0.5893215537071228f, 0.18631935119628906f, 0.66880863904953f, 0.4147438108921051f, 0.5988686680793762f, 0.01038556918501854f, 0.012758138589560986f, -0.23955616354942322f, 0.6083261966705322f, 0.06727665662765503f, 0.7132050395011902f, 0.4546889364719391f, 0.36346277594566345f, 0.5319516658782959f, 0.05516735836863518f, -0.21344980597496033f, 0.6139091849327087f, 0.1927485466003418f, 0.06381101906299591f, 0.47482702136039734f, 0.6853456497192383f, 0.18891435861587524f, 0.6641345024108887f, -0.13289609551429749f, 0.5353138446807861f, 0.7411894202232361f, 0.6521294116973877f, 0.34770023822784424f, 0.5760743021965027f, 0.335788369178772f, 0.1413922756910324f, -0.8421057462692261f, 0.4868747889995575f, 0.7374529838562012f, 0.6038800477981567f, 0.3611258268356323f, 0.08697094768285751f, 0.28520095348358154f, 0.7148807048797607f, -0.35902139544487f, 0.5744902491569519f, 0.9505127668380737f, 0.05174248293042183f, 0.6150411367416382f, 0.3478125333786011f, 0.8073176741600037f, 0.20430408418178558f, -0.7818329930305481f, 0.5547612309455872f, 0.271069198846817f, 0.18498334288597107f, 0.17720994353294373f, 0.03423572704195976f, 0.9893980026245117f, 0.5409281849861145f, -0.5512291193008423f, 0.9399360418319702f, 0.903595507144928f, 0.3001292049884796f, 0.7881808280944824f, 0.2253255695104599f, 0.41945818066596985f, 0.5170179009437561f, -0.17071983218193054f, 0.2889026701450348f, 0.8402559161186218f, 0.748436689376831f, 0.9516147971153259f, 0.8814380168914795f, 0.010519349947571754f, 0.9180424213409424f, -0.17752684652805328f, 0.3833576440811157f, 0.8962730765342712f, 0.7171403765678406f, 0.7889148592948914f, 0.7584956884384155f, 0.9873977899551392f, 0.7749497890472412f, -0.1913156807422638f, 0.9351325631141663f, 0.23550161719322205f, 0.1502232551574707f, 0.7905310392379761f, 0.9700342416763306f, 0.2200966477394104f, 0.17600178718566895f, -0.6082459092140198f, 0.8686137795448303f, 0.7830458879470825f, 0.09701687097549438f, 0.5948805212974548f, 0.19914615154266357f, 0.24842947721481323f, 0.6903128027915955f, -0.5554357767105103f, 0.650378406047821f, 0.7491511106491089f, 0.990791916847229f, 0.3895637094974518f, 0.30256783962249756f, 0.9303413033485413f, 0.8849108219146729f, -0.8549790382385254f, 0.6912819743156433f, 0.014553275890648365f, 0.6170448660850525f, 0.178275927901268f, 0.5665817856788635f, 0.19767700135707855f, 0.5429877638816833f, -0.2790389358997345f, 0.6270125508308411f, 0.09548074007034302f, 0.9816864728927612f, 0.8077005743980408f, 0.32391059398651123f, 0.8351517915725708f, 0.6972666382789612f, -0.2762218117713928f, 0.8428999781608582f, 0.7489238381385803f, 0.15494447946548462f, 0.8318427801132202f, 0.9259156584739685f, 0.7550310492515564f, 0.19608789682388306f, -0.5699983239173889f, 0.7850702404975891f, 0.5406543016433716f, 0.29216843843460083f, 0.3009277582168579f, 0.8646224737167358f, 0.8862894177436829f, 0.1638849675655365f, -0.9209457635879517f, 0.8881420493125916f, 0.17763586342334747f, 0.312907874584198f, 0.02083691395819187f, 0.6804907917976379f, 0.884349524974823f, 0.8067784309387207f, -0.5605829358100891f, 0.2525622844696045f, 0.11705434322357178f, 0.9732146263122559f, 0.30320367217063904f, 0.6142884492874146f, 0.7624046802520752f, 0.2887282073497772f, -0.16365492343902588f, 0.25544896721839905f, 0.23357728123664856f, 0.41172969341278076f, 0.4436946511268616f, 0.6965290904045105f, 0.05127004534006119f, 0.8863173127174377f, -0.5887587070465088f, 0.5858069658279419f, 0.5858833193778992f, 0.7040216326713562f, 0.5969430208206177f, 0.5753465294837952f, 0.7625756859779358f, 0.05507266893982887f, -0.44171443581581116f, 0.47779881954193115f, 0.8660895228385925f, 0.7754128575325012f, 0.00661457609385252f, 0.18816964328289032f, 0.4417679011821747f, 0.31410545110702515f, -0.925980806350708f, 0.2929478883743286f, 0.7191260457038879f, 0.20043347775936127f, 0.44435107707977295f, 0.6610074043273926f, 0.25048789381980896f, 0.3826643228530884f, -0.8121215105056763f, 0.6603088974952698f, 0.9263206124305725f, 0.9084402322769165f, 0.10682728886604309f, 0.4936213493347168f, 0.5749017596244812f, 0.39120912551879883f, -0.7411479949951172f, 0.1690216213464737f, 0.24655254185199738f, 0.1601189821958542f, 0.5297955870628357f, 0.3969332277774811f, 0.9423258900642395f, 0.30827486515045166f, -0.7108157873153687f, 0.3911011219024658f, 0.49130678176879883f, 0.5376534461975098f, 0.1313854157924652f, 0.9500258564949036f, 0.02405255287885666f, 0.3473118543624878f, -0.3166359066963196f, 0.36142241954803467f, 0.9958972930908203f, 0.29222455620765686f, 0.24207311868667603f, 0.5081063508987427f, 0.30636346340179443f, 0.5240061283111572f, -0.19644396007061005f, 0.684601902961731f, 0.00013040698831900954f, 0.4327877163887024f, 0.44383183121681213f, 0.13356851041316986f, 0.9175777435302734f, 0.5947603583335876f, -0.9731647372245789f, 0.6322186589241028f, 0.4536376893520355f, 0.8377768397331238f, 0.1624975949525833f, 0.17723065614700317f, 0.7718386650085449f, 0.6055142879486084f, -0.46633562445640564f, 0.36770638823509216f, 0.7460325956344604f, 0.21115462481975555f, 0.659542441368103f, 0.016786495223641396f, 0.697259783744812f, 0.6544352769851685f, -0.904412567615509f, 0.023095140233635902f, 0.18066704273223877f, 0.7267616391181946f, 0.7565190196037292f, 0.7297966480255127f, 0.08917008340358734f, 0.573890745639801f, -0.8135820031166077f, 0.1003139540553093f, 0.3169712424278259f, 0.7925975322723389f, 0.21560946106910706f, 0.1459117978811264f, 0.7080152034759521f, 0.8372363448143005f, -0.42827317118644714f, 0.46355748176574707f, 0.10187450051307678f, 0.10388631373643875f, 0.6931343078613281f, 0.337350994348526f, 0.47436800599098206f, 0.8320422172546387f, -0.4936680793762207f, 0.9662128686904907f, 0.48984551429748535f, 0.15235823392868042f, 0.5609894394874573f, 0.7371748685836792f, 0.2234572470188141f, 0.013523874804377556f, -0.19536332786083221f, 0.2964760661125183f, 0.9367980360984802f, 0.579454779624939f, 0.6059292554855347f, 0.6162516474723816f, 0.5394816398620605f, 0.9226816296577454f, -0.19816698133945465f, 0.5402039289474487f, 0.32315969467163086f, 0.6936261057853699f, 0.971220076084137f, 0.8989734649658203f, 0.38042283058166504f, 0.22952646017074585f, -0.9561716318130493f, 0.3999814987182617f, 0.5279417634010315f, 0.9533483386039734f, 0.7213928699493408f, 0.25703272223472595f, 0.24359767138957977f, 0.5685315728187561f, -0.03568053990602493f, 0.8359525799751282f, 0.03319120407104492f, 0.30280834436416626f, 0.896990954875946f, 0.28929466009140015f, 0.2154647260904312f, 0.22045162320137024f, -0.42962172627449036f, 0.5048544406890869f, 0.5305966138839722f, 0.10074760019779205f, 0.7365646958351135f, 0.36014324426651f, 0.35421279072761536f, 0.5485825538635254f, -0.9425368309020996f, 0.5671223402023315f, 0.70671147108078f, 0.7373631000518799f, 0.7831827998161316f, 0.12772251665592194f, 0.03657647594809532f, 0.5665220618247986f, -0.4957432746887207f, 0.4606536626815796f, 0.21913015842437744f, 0.5353264808654785f, 0.34800049662590027f, 0.528884768486023f, 0.7724188566207886f, 0.1043727919459343f, -0.9289717674255371f, 0.9139034152030945f, 0.7219170928001404f, 0.7932374477386475f, 0.4989236891269684f, 0.9029790163040161f, 0.7576987147331238f, 0.46788761019706726f, -0.7345986366271973f, 0.9297366142272949f, 0.2248556911945343f, 0.25671377778053284f, 0.6667760014533997f, 0.31124070286750793f, 0.48246708512306213f, 0.20418202877044678f, -0.8775317072868347f, 0.22542494535446167f, 0.4700208008289337f, 0.48815518617630005f, 0.15988175570964813f, 0.9950793981552124f, 0.3475766181945801f, 0.4474281370639801f, -0.2997736632823944f, 0.7101579904556274f, 0.06476441770792007f, 0.07624299079179764f, 0.08855491131544113f, 0.19424618780612946f, 0.4105829894542694f, 0.6442456245422363f, -0.007645107805728912f, 0.48139089345932007f, 0.9505025148391724f, 0.11251767724752426f, 0.7143411636352539f, 0.6788382530212402f, 0.104139044880867f, 0.7779840230941772f, -0.11261151731014252f, 0.6181279420852661f, 0.15702436864376068f, 0.5589639544487f, 0.2309306561946869f, 0.9233615398406982f, 0.5677622556686401f, 0.4766954183578491f, -0.3766248822212219f, 0.014587030746042728f, 0.7906220555305481f, 0.4046562910079956f, 0.7878217101097107f, 0.20621109008789062f, 0.0884021446108818f, 0.5910153388977051f, -0.9533434510231018f, 0.106191486120224f, 0.5130935311317444f, 0.06032562255859375f, 0.2773543894290924f, 0.47212955355644226f, 0.32888633012771606f, 0.03235732018947601f, -0.9492227435112f, 0.7950506210327148f, 0.08837547898292542f, 0.3255515992641449f, 0.5043670535087585f, 0.05613298341631889f, 0.6987093687057495f, 0.532356321811676f, -0.6728246212005615f, 0.5651310682296753f, 0.17542947828769684f, 0.6386197805404663f, 0.8724521398544312f, 0.8732621073722839f, 0.45852428674697876f, 0.743716835975647f, -0.7771663069725037f, 0.6220702528953552f, 0.0971020758152008f, 0.533462643623352f, 0.9057550430297852f, 0.46743303537368774f, 0.7439470887184143f, 0.5402064323425293f, -0.9068211913108826f, 0.7790853381156921f, 0.24523012340068817f, 0.2397328019142151f, 0.30084481835365295f, 0.6012808680534363f, 0.9725589752197266f, 0.5037594437599182f, -0.22816713154315948f, 0.22566008567810059f, 0.5680297613143921f, 0.8166463971138f, 0.33143556118011475f, 0.22334928810596466f, 0.9575173258781433f, 0.4843187928199768f, -0.12937267124652863f, 0.011565044522285461f, 0.3194776773452759f, 0.7197929620742798f, 0.8082089424133301f, 0.10220612585544586f, 0.41101887822151184f, 0.1896791011095047f, -0.45046550035476685f, 0.8430591225624084f, 0.5848661065101624f, 0.3733903765678406f, 0.16093988716602325f, 0.5063637495040894f, 0.3185483515262604f, 0.4475923180580139f, -0.6999130845069885f, 0.16672395169734955f, 0.34565746784210205f, 0.25927385687828064f, 0.13347944617271423f, 0.3017405569553375f, 0.6986687183380127f, 0.8586368560791016f, -0.8128480315208435f, 0.10988884419202805f, 0.7267149090766907f, 0.8422353267669678f, 0.6085345149040222f, 0.9667508006095886f, 0.8598407506942749f, 0.8450255990028381f, -0.9518347978591919f, 0.9172732830047607f, 0.26806971430778503f, 0.5508357882499695f, 0.519278347492218f, 0.52447909116745f, 0.13447438180446625f, 0.7202255725860596f, -0.4601544737815857f, 0.6979051828384399f, 0.21126948297023773f, 0.45729702711105347f, 0.6464310884475708f, 0.5251793265342712f, 0.5557675361633301f, 0.3745088279247284f, -0.2897360622882843f, 0.2944287955760956f, 0.46015504002571106f, 0.817548394203186f, 0.12284744530916214f, 0.5863747596740723f, 0.32991823554039f, 0.5031996965408325f, -0.05622907355427742f, 0.1760735958814621f, 0.2246469408273697f, 0.5876246094703674f, 0.13511520624160767f, 0.6807594895362854f, 0.12715454399585724f, 0.7485828995704651f, -0.1833730936050415f, 0.6663357615470886f, 0.11539223790168762f, 0.9907981753349304f, 0.9842891097068787f, 0.23990702629089355f, 0.7059021592140198f, 0.47121748328208923f, -0.07972352206707001f, 0.5246864557266235f, 0.7216373682022095f, 0.5291672348976135f, 0.4384186863899231f, 0.17429380118846893f, 0.7869807481765747f, 0.2761247754096985f, -0.7249945402145386f, 0.11407536268234253f, 0.6830346584320068f, 0.3318217098712921f, 0.8021230101585388f, 0.30291232466697693f, 0.12597061693668365f, 0.3969588577747345f, -0.8287729620933533f, 0.48716068267822266f, 0.7989177703857422f, 0.4657009243965149f, 0.30787113308906555f, 0.3788377046585083f, 0.4548652768135071f, 0.8102144598960876f, -0.35940834879875183f, 0.8706651926040649f, 0.11295252293348312f, 0.9937207102775574f, 0.09047125279903412f, 0.9901801943778992f, 0.8486202955245972f, 0.9090725779533386f, -0.9188598394393921f, 0.7865239381790161f, 0.19640767574310303f, 0.5724755525588989f, 0.9394136071205139f, 0.8616242408752441f, 0.3198116719722748f, 0.6566610932350159f, -0.7832059860229492f, 0.700056791305542f, 0.4623689353466034f, 0.7083050012588501f, 0.6422262191772461f, 0.4091138243675232f, 0.09631959348917007f, 0.9488685131072998f, -0.18035729229450226f, 0.5813424587249756f, 0.07463613152503967f, 0.0360586978495121f, 0.8280304074287415f, 0.8881244659423828f, 0.0774051621556282f, 0.259826123714447f, -0.6633962988853455f, 0.8991292715072632f, 0.3552396893501282f, 0.9834995865821838f, 0.33241111040115356f, 0.8200728893280029f, 0.599601686000824f, 0.7766788005828857f, -0.20281946659088135f, 0.4377296268939972f, 0.567941427230835f, 0.05284019559621811f, 0.5860788226127625f, 0.5832575559616089f, 0.19234153628349304f, 0.7520618438720703f, -0.9657233953475952f, 0.0068025062792003155f, 0.47001710534095764f, 0.4460664391517639f, 0.6646085381507874f, 0.633600115776062f, 0.939355731010437f, 0.25370967388153076f, -0.08453873544931412f, 0.31770238280296326f, 0.21591416001319885f, 0.0730687752366066f, 0.3501184284687042f, 0.34934914112091064f, 0.7306958436965942f, 0.3547256290912628f, -0.01824440248310566f, 0.8725616335868835f, 0.5138702392578125f, 0.5198224782943726f, 0.9592401385307312f, 0.35430797934532166f, 0.08683162927627563f, 0.2060517519712448f, -0.9921712875366211f, 0.9255408048629761f, 0.8642102479934692f, 0.9152927398681641f, 0.3875349462032318f, 0.7759502530097961f, 0.5523645281791687f, 0.1722227931022644f, -0.09799177199602127f, 0.8423635959625244f, 0.8294282555580139f, 0.5379571914672852f, 0.48113176226615906f, 0.37090545892715454f, 0.8052231073379517f, 0.5480886697769165f, -0.6436750888824463f, 0.19054590165615082f, 0.719245433807373f, 0.22335880994796753f, 0.8070111870765686f, 0.2743149697780609f, 0.5585901141166687f, 0.3575511574745178f, -0.40989500284194946f, 0.4953291118144989f, 0.5213326811790466f, 0.20592568814754486f, 0.4862409234046936f, 0.6700820326805115f, 0.7101775407791138f, 0.5195291042327881f, -0.6783599257469177f, 0.5607640743255615f, 0.26236042380332947f, 0.13844193518161774f, 0.22657443583011627f, 0.5755151510238647f, 0.09211315214633942f, 0.7199168801307678f, -0.8048844337463379f, 0.002547138836234808f, 0.2841855585575104f, 0.5290915966033936f, 0.3715193271636963f, 0.4746290147304535f, 0.6560752391815186f, 0.9331115484237671f, -0.16129717230796814f, 0.36519306898117065f, 0.577336847782135f, 0.07299495488405228f, 0.998651921749115f, 0.9354062676429749f, 0.19903649389743805f, 0.4218086898326874f, -0.8849695920944214f, 0.6234980821609497f, 0.22960130870342255f, 0.6104644536972046f, 0.2981488108634949f, 0.42490124702453613f, 0.9803891777992249f, 0.9923848509788513f, -0.822917103767395f, 0.47400787472724915f, 0.8808433413505554f, 0.39306625723838806f, 0.94321608543396f, 0.002172081731259823f, 0.765940248966217f, 0.6925156712532043f, -0.40753650665283203f, 0.674296498298645f, 0.7178621292114258f, 0.34934645891189575f, 0.5529840588569641f, 0.22336171567440033f, 0.6345239281654358f, 0.9670578837394714f, -0.4524666666984558f, 0.055645402520895004f, 0.5753577351570129f, 0.2697296738624573f, 0.7761832475662231f, 0.2486116588115692f, 0.5697056651115417f, 0.5098636746406555f, -0.4884897470474243f, 0.034820206463336945f, 0.15421001613140106f, 0.25578171014785767f, 0.8941871523857117f, 0.7755027413368225f, 0.28707224130630493f, 0.3490671217441559f, -0.9694890379905701f, 0.5169388651847839f, 0.258072167634964f, 0.6252174973487854f, 0.2992795705795288f, 0.6585943102836609f, 0.050493743270635605f, 0.30817750096321106f, -0.7341529726982117f, 0.9533141255378723f, 0.7121042609214783f, 0.8192691802978516f, 0.22257296741008759f, 0.7602116465568542f, 0.29650065302848816f, 0.7490074634552002f, -0.5812214016914368f, 0.8923603892326355f, 0.7861557602882385f, 0.9586642384529114f, 0.19541984796524048f, 0.09662990272045135f, 0.8731386065483093f, 0.10174376517534256f, -0.930387556552887f, 0.9797078967094421f, 0.9128400087356567f, 0.20971018075942993f, 0.4658214747905731f, 0.6187458038330078f, 0.9871437549591064f, 0.8716422915458679f, -0.7136589884757996f, 0.6115723848342896f, 0.7840063571929932f, 0.5293290615081787f, 0.49157440662384033f, 0.3331582546234131f, 0.15568745136260986f, 0.722266674041748f, -0.5534297227859497f, 0.5565237402915955f, 0.7567550539970398f, 0.654749870300293f, 0.6741788387298584f, 0.9966620206832886f, 0.3351599872112274f, 0.5191120505332947f, -0.5015886425971985f, 0.5251113772392273f, 0.25637251138687134f, 0.5616631507873535f, 0.6367181539535522f, 0.49974411725997925f, 0.05888473242521286f, 0.8198578953742981f, -0.21409361064434052f, 0.9045771956443787f, 0.15334437787532806f, 0.0780860036611557f, 0.6484158635139465f, 0.48872438073158264f, 0.6195063591003418f, 0.11621254682540894f, -0.8897954821586609f, 0.895772397518158f, 0.5489801168441772f, 0.8636371493339539f, 0.351863831281662f, 0.1849232316017151f, 0.06327610462903976f, 0.3096701502799988f, -0.035149022936820984f, 0.3679291605949402f, 0.9081852436065674f, 0.6933280229568481f, 0.5167716145515442f, 0.1456773579120636f, 0.20642709732055664f, 0.21176746487617493f, -0.779005765914917f, 0.7872098088264465f, 0.10956291854381561f, 0.7314224243164062f, 0.5685897469520569f, 0.6013403534889221f, 0.31984657049179077f, 0.798207700252533f, -0.3711566627025604f, 0.2597287595272064f, 0.2686583697795868f, 0.6397643089294434f, 0.05656246095895767f, 0.21281656622886658f, 0.3148881196975708f, 0.20445336401462555f, -0.3455786108970642f, 0.8420092463493347f, 0.3964776396751404f, 0.3930106461048126f, 0.3765244483947754f, 0.8444529175758362f, 0.62699294090271f, 0.9529404640197754f, -0.18126937747001648f, 0.9658858180046082f, 0.9334876537322998f, 0.866773247718811f, 0.36539074778556824f, 0.9529338479042053f, 0.5939745306968689f, 0.5471758246421814f, -0.08179724961519241f, 0.8685228824615479f, 0.12175707519054413f, 0.8354246616363525f, 0.7100112438201904f, 0.704472541809082f, 0.6332157254219055f, 0.4756885766983032f, -0.6304915547370911f, 0.02130095660686493f, 0.10080446302890778f, 0.14735844731330872f, 0.4230978190898895f, 0.5971233248710632f, 0.35255616903305054f, 0.8727929592132568f, -0.021852558478713036f, 0.1100989282131195f, 0.9331338405609131f, 0.7975557446479797f, 0.14344483613967896f, 0.5055399537086487f, 0.26587843894958496f, 0.9690847396850586f, -0.04502026364207268f, 0.7452706694602966f, 0.3926548957824707f, 0.9450727105140686f, 0.8969698548316956f, 0.4915788471698761f, 0.09145890176296234f, 0.048354800790548325f, -0.5232071280479431f, 0.27832651138305664f, 0.6102942228317261f, 0.8834465742111206f, 0.22804780304431915f, 0.7678345441818237f, 0.48095494508743286f, 0.2974359095096588f, -0.8733717203140259f, 0.7436947822570801f, 0.11580845713615417f, 0.37384510040283203f, 0.23599252104759216f, 0.2946755290031433f, 0.7408892512321472f, 0.49323853850364685f, -0.5949404239654541f, 0.9034027457237244f, 0.7027332186698914f, 0.6450827717781067f, 0.23602473735809326f, 0.37449291348457336f, 0.8052676320075989f, 0.331732839345932f, -0.9598324298858643f, 0.031160779297351837f, 0.1486249715089798f, 0.08494406193494797f, 0.7166247367858887f, 0.2648465037345886f, 0.8086945414543152f, 0.3205520212650299f, -0.045193541795015335f, 0.6979455351829529f, 0.9597851634025574f, 0.4676256775856018f, 0.8090991377830505f, 0.3750148415565491f, 0.17958438396453857f, 0.29644501209259033f, -0.5527663826942444f, 0.8365085124969482f, 0.4927520453929901f, 0.9911656975746155f, 0.9973148107528687f, 0.207881897687912f, 0.6684456467628479f, 0.9202921986579895f, -0.7460277080535889f, 0.45669716596603394f, 0.868746817111969f, 0.6493445038795471f, 0.04119698703289032f, 0.5027874112129211f, 0.8220138549804688f, 0.7887810468673706f, -0.5682967901229858f, 0.3377671539783478f, 0.8626102805137634f, 0.7806347012519836f, 0.5458148717880249f, 0.27042528986930847f, 0.8050341010093689f, 0.22400715947151184f, -0.1612728238105774f, 0.6199558973312378f, 0.8033937811851501f, 0.25038182735443115f, 0.6234559416770935f, 0.391958087682724f, 0.2853008806705475f, 0.5611289739608765f, -0.26831191778182983f, 0.6190592646598816f, 0.004978559445589781f, 0.9923131465911865f, 0.8684595823287964f, 0.9388958811759949f, 0.0008692420669831336f, 0.8653293251991272f, -0.6232073307037354f, 0.5478405356407166f, 0.26780468225479126f, 0.9619632363319397f, 0.4078580141067505f, 0.5718323588371277f, 0.1863134652376175f, 0.29028186202049255f, -0.5620702505111694f, 0.2487567812204361f, 0.8000158071517944f, 0.7991426587104797f, 0.34111297130584717f, 0.4398767352104187f, 0.12020214647054672f, 0.24893926084041595f, -0.9135380387306213f, 0.7959161996841431f, 0.30747249722480774f, 0.5071234107017517f, 0.7436555027961731f, 0.16945023834705353f, 0.014391820877790451f, 0.26366540789604187f, -0.4368404746055603f, 0.4355356991291046f, 0.7406141757965088f, 0.31791624426841736f, 0.5056673884391785f, 0.49071642756462097f, 0.3180290162563324f, 0.41354045271873474f, -0.8232571482658386f, 0.1544705629348755f, 0.9639379978179932f, 0.0658976212143898f, 0.9557032585144043f, 0.6898876428604126f, 0.9442200660705566f, 0.7895243763923645f, -0.20316436886787415f, 0.6187392473220825f, 0.6063239574432373f, 0.44395172595977783f, 0.8424717783927917f, 0.1569315791130066f, 0.7498900890350342f, 0.14653891324996948f, -0.4496597945690155f, 0.9857010245323181f, 0.8078277707099915f, 0.6900444626808167f, 0.07519613951444626f, 0.9265716075897217f, 0.050575632601976395f, 0.7551128268241882f, -0.9557055234909058f, 0.4715706706047058f, 0.4511657655239105f, 0.30314502120018005f, 0.45267388224601746f, 0.534774899482727f, 0.7543445229530334f, 0.23651643097400665f, -0.20475953817367554f, 0.3460122048854828f, 0.6360676884651184f, 0.12900634109973907f, 0.8873249292373657f, 0.7320078611373901f, 0.3002580404281616f, 0.03745171055197716f, -0.15436895191669464f, 0.4162486493587494f, 0.6839523315429688f, 0.5434301495552063f, 0.7567234039306641f, 0.8724046945571899f, 0.6641896367073059f, 0.9875015020370483f, -0.35806259512901306f, 0.23457196354866028f, 0.5767450928688049f, 0.6977556347846985f, 0.24528248608112335f, 0.01180648896843195f, 0.8607861399650574f, 0.25089991092681885f, -0.5447025895118713f, 0.0017172906082123518f, 0.6553578972816467f, 0.4702208340167999f, 0.8209154009819031f, 0.34401169419288635f, 0.6761459708213806f, 0.5634845495223999f, -0.0007956280605867505f, 0.6094160079956055f, 0.4172133207321167f, 0.33326825499534607f, 0.7640420794487f, 0.8893092274665833f, 0.6799551844596863f, 0.9769803881645203f, -0.9762127995491028f, 0.0965181216597557f, 0.3235474228858948f, 0.9107193946838379f, 0.39660224318504333f, 0.4753850996494293f, 0.042607858777046204f, 0.6775097250938416f, -0.3928969204425812f, 0.051809169352054596f, 0.3256523609161377f, 0.18042989075183868f, 0.33589357137680054f, 0.3564614951610565f, 0.14218558371067047f, 0.405885249376297f, -0.11515400558710098f, 0.04216178506612778f, 0.17857076227664948f, 0.609529972076416f, 0.9859456419944763f, 0.146432027220726f, 0.4888865053653717f, 0.045479677617549896f, -0.30852073431015015f, 0.8621349334716797f, 0.7472633719444275f, 0.9334129095077515f, 0.6993758678436279f, 0.0026966980658471584f, 0.3644043803215027f, 0.6361552476882935f, -0.8975532054901123f, 0.27066338062286377f, 0.19096459448337555f, 0.1146676242351532f, 0.9566205143928528f, 0.4976294934749603f, 0.8623738884925842f, 0.7061495780944824f, -0.039582543075084686f, 0.2821770906448364f, 0.46579670906066895f, 0.880769670009613f, 0.1605243682861328f, 0.19898337125778198f, 0.32331448793411255f, 0.10537968575954437f, -0.28825095295906067f, 0.7983684539794922f, 0.8547466993331909f, 0.23622049391269684f, 0.3944869637489319f, 0.7197492122650146f, 0.23157750070095062f, 0.28727081418037415f, -0.6660943627357483f, 0.1867602914571762f, 0.5656430721282959f, 0.6734779477119446f, 0.5480012893676758f, 0.984865128993988f, 0.7763351202011108f, 0.47277483344078064f, -0.13398320972919464f, 0.1989508718252182f, 0.09262382984161377f, 0.5487344264984131f, 0.8155933618545532f, 0.08506716042757034f, 0.8890672922134399f, 0.23783370852470398f, -0.13862279057502747f, 0.021754983812570572f, 0.729069709777832f, 0.23643554747104645f, 0.3606272339820862f, 0.49495309591293335f, 0.4704324007034302f, 0.4193328619003296f, -0.025001604110002518f, 0.9212488532066345f, 0.7179384827613831f, 0.39935535192489624f, 0.6217374801635742f, 0.12015612423419952f, 0.9678959250450134f, 0.8102121949195862f, -0.7509114742279053f, 0.8543091416358948f, 0.36507055163383484f, 0.018171945586800575f, 0.8304532170295715f, 0.04066278040409088f, 0.34336674213409424f, 0.38853755593299866f, -0.8815422654151917f, 0.49575161933898926f, 0.9244222640991211f, 0.10053443908691406f, 0.3650374114513397f, 0.9242021441459656f, 0.28180447220802307f, 0.5410817265510559f, -0.3110700845718384f, 0.7183904051780701f, 0.46725523471832275f, 0.5174275636672974f, 0.6071216464042664f, 0.2886231541633606f, 0.7547562122344971f, 0.9873534440994263f, -0.8826695084571838f, 0.6618391275405884f, 0.9591104388237f, 0.15677309036254883f, 0.7032001614570618f, 0.31540390849113464f, 0.0932692214846611f, 0.7064735293388367f, -0.09095755964517593f, 0.4624861478805542f, 0.9386569857597351f, 0.6301373839378357f, 0.41247454285621643f, 0.9848970174789429f, 0.4125277101993561f, 0.4977260231971741f, -0.7415398955345154f, 0.16939978301525116f, 0.4037931263446808f, 0.5466893911361694f, 0.042239077389240265f, 0.17356917262077332f, 0.8541186451911926f, 0.10255621373653412f, -0.32703477144241333f, 0.6905694603919983f, 0.16622307896614075f, 0.36148813366889954f, 0.08698637038469315f, 0.8626004457473755f, 0.23446784913539886f, 0.9808885455131531f, -0.73924320936203f, 0.6306418776512146f, 0.34436890482902527f, 0.49843865633010864f, 0.7006164789199829f, 0.40727362036705017f, 0.04978135600686073f, 0.7905585169792175f, -0.5565855503082275f, 0.9330605864524841f, 0.8705583810806274f, 0.16124092042446136f, 0.7642938494682312f, 0.6884873509407043f, 0.6843564510345459f, 0.8055490851402283f, -0.010200678370893002f, 0.7535067796707153f, 0.5046514868736267f, 0.708293616771698f, 0.2988264262676239f, 0.07084445655345917f, 0.35692697763442993f, 0.40933626890182495f, -0.8307340741157532f, 0.49647995829582214f, 0.30747848749160767f, 0.7861843705177307f, 0.9410814046859741f, 0.12234434485435486f, 0.7593690156936646f, 0.35965269804000854f, -0.14183194935321808f, 0.6414394378662109f, 0.9640830159187317f, 0.977994978427887f, 0.27849939465522766f, 0.801837146282196f, 0.16157466173171997f, 0.4199242889881134f, -0.41128867864608765f, 0.2586633265018463f, 0.7256239652633667f, 0.5030760169029236f, 0.9445741772651672f, 0.09574472904205322f, 0.5198894739151001f, 0.14269275963306427f, -0.022400446236133575f, 0.8067627549171448f, 0.00042003460112027824f, 0.7474603056907654f, 0.7535869479179382f, 0.8752155900001526f, 0.9894758462905884f, 0.6106433868408203f, -0.8676393628120422f, 0.705298662185669f, 0.09193479269742966f, 0.07413037121295929f, 0.42134949564933777f, 0.2861253023147583f, 0.46841996908187866f, 0.5016517043113708f, -0.5802480578422546f, 0.44801658391952515f, 0.6390365362167358f, 0.6108158230781555f, 0.9657997488975525f, 0.34527406096458435f, 0.6257665157318115f, 0.05786856636404991f, -0.6733192205429077f, 0.07310330867767334f, 0.3756372034549713f, 0.05170798301696777f, 0.8351738452911377f, 0.6356799006462097f, 0.2946872413158417f, 0.005537375807762146f, -0.9207311868667603f, 0.8819372653961182f, 0.9710317254066467f, 0.2939005494117737f, 0.5254340171813965f, 0.5473368167877197f, 0.21327902376651764f, 0.3067017197608948f, -0.6983990669250488f, 0.5030009150505066f, 0.24284450709819794f, 0.9064345359802246f, 0.20855022966861725f, 0.06231248006224632f, 0.43144750595092773f, 0.9820494651794434f, -0.11522595584392548f, 0.7013013362884521f, 0.7294034361839294f, 0.48704639077186584f, 0.9680665135383606f, 0.7517577409744263f, 0.6841603517532349f, 0.4232354760169983f, -0.06745918840169907f, 0.9548481702804565f, 0.36473581194877625f, 0.22477082908153534f, 0.9061847925186157f, 0.18765458464622498f, 0.7241305708885193f, 0.6246223449707031f, -0.6287861466407776f, 0.836050808429718f, 0.7408145666122437f, 0.5306512117385864f, 0.8839079737663269f, 0.5738396048545837f, 0.9950202703475952f, 0.4155791997909546f, -0.07846002280712128f, 0.09218230843544006f, 0.9813195466995239f, 0.6588312387466431f, 0.6906365156173706f, 0.7316705584526062f, 0.8612179756164551f, 0.33079978823661804f, -0.4750746786594391f, 0.1270586997270584f, 0.9003292322158813f, 0.013573934324085712f, 0.3890230655670166f, 0.8341103792190552f, 0.13858862221240997f, 0.07416662573814392f, -0.8267041444778442f, 0.5191872715950012f, 0.6807830929756165f, 0.1871061474084854f, 0.11250422149896622f, 0.2027403563261032f, 0.756618857383728f, 0.7919946908950806f, -0.9805011749267578f, 0.6561470627784729f, 0.8350899815559387f, 0.15429291129112244f, 0.15942580997943878f, 0.9022064805030823f, 0.2881109118461609f, 0.7430203557014465f, -0.7960774302482605f, 0.6279439926147461f, 0.16050930321216583f, 0.528791069984436f, 0.14806294441223145f, 0.4507334530353546f, 0.30735480785369873f, 0.07068843394517899f, -0.23770515620708466f, 0.4819371998310089f, 0.853140652179718f, 0.46459871530532837f, 0.004453951492905617f, 0.26903489232063293f, 0.7083107233047485f, 0.8516725301742554f, -0.45211341977119446f, 0.06925098598003387f, 0.28612667322158813f, 0.8245476484298706f, 0.3926933705806732f, 0.3941924571990967f, 0.8322264552116394f, 0.09233169257640839f, -0.01042476948350668f, 0.11057918518781662f, 0.521736204624176f, 0.1719944328069687f, 0.7272719144821167f, 0.736453652381897f, 0.006215883884578943f, 0.29315945506095886f, -0.9425166845321655f, 0.9918003678321838f, 0.6881418824195862f, 0.33003491163253784f, 0.35484805703163147f, 0.7945766448974609f, 0.4194556176662445f, 0.7203790545463562f, -0.2735257148742676f, 0.7926064133644104f, 0.5629410743713379f, 0.3465082347393036f, 0.37697890400886536f, 0.740039050579071f, 0.8009218573570251f, 0.2556014657020569f, -0.6612807512283325f, 0.6185857653617859f, 0.2923988401889801f, 0.9593185186386108f, 0.6324380040168762f, 0.8911986351013184f, 0.06137333810329437f, 0.8627144694328308f, -0.4766845107078552f, 0.8338459730148315f, 0.043505534529685974f, 0.010145474225282669f, 0.6165408492088318f, 0.6435409188270569f, 0.3732873797416687f, 0.41600361466407776f, -0.10343567281961441f, 0.011499077081680298f, 0.17520718276500702f, 0.5699409246444702f, 0.7660435438156128f, 0.6067270636558533f, 0.7692469358444214f, 0.698310375213623f, -0.8439944982528687f, 0.4764379858970642f, 0.30580854415893555f, 0.13844896852970123f, 0.38871437311172485f, 0.03156432509422302f, 0.6888605356216431f, 0.527824878692627f, -0.0786345973610878f, 0.4525373876094818f, 0.5280428528785706f, 0.7150149941444397f, 0.87117999792099f, 0.601839542388916f, 0.3772595524787903f, 0.3659537434577942f, -0.368686705827713f, 0.1863994151353836f, 0.26692211627960205f, 0.9579585194587708f, 0.033194828778505325f, 0.7702354192733765f, 0.9758193492889404f, 0.08127913624048233f, -0.6013615131378174f, 0.049968134611845016f, 0.7202715277671814f, 0.46828198432922363f, 0.6836409568786621f, 0.25438058376312256f, 0.960587739944458f, 0.8832993507385254f, -0.8154544234275818f, 0.446993887424469f, 0.18990877270698547f, 0.9408515095710754f, 0.9778488874435425f, 0.8168547749519348f, 0.5995678901672363f, 0.9790642857551575f, -0.9771955013275146f, 0.6051050424575806f, 0.977481484413147f, 0.41638752818107605f, 0.8373079299926758f, 0.3841460049152374f, 0.24213802814483643f, 0.23996137082576752f, -0.4275931119918823f, 0.28004249930381775f, 0.5900022983551025f, 0.5261992812156677f, 0.20070259273052216f, 0.3218938112258911f, 0.05173785239458084f, 0.39668557047843933f, -0.3437069356441498f, 0.9753469824790955f, 0.4050421416759491f, 0.442324697971344f, 0.23554232716560364f, 0.33416613936424255f, 0.5255969166755676f, 0.7165877223014832f, -0.5355947613716125f, 0.03428692743182182f, 0.07153341919183731f, 0.17117725312709808f, 0.6601689457893372f, 0.779703676700592f, 0.3463701605796814f, 0.8773254156112671f, -0.3697238862514496f, 0.1842930018901825f, 0.5436539053916931f, 0.261983186006546f, 0.041913650929927826f, 0.5697965621948242f, 0.7044073343276978f, 0.8737010955810547f, -0.15359395742416382f, 0.23076438903808594f, 0.44761019945144653f, 0.5070307850837708f, 0.9930422306060791f, 0.5388336777687073f, 0.6880856156349182f, 0.8885805010795593f, -0.08327964693307877f, 0.3159976005554199f, 0.7596839666366577f, 0.12660489976406097f, 0.7668198347091675f, 0.06447132676839828f, 0.1499125063419342f, 0.7285639047622681f, -0.7783761620521545f, 0.9573083519935608f, 0.43193674087524414f, 0.326223760843277f, 0.6234222054481506f, 0.824560821056366f, 0.5553333163261414f, 0.4219643771648407f, -0.486174613237381f, 0.49729567766189575f, 0.9288128614425659f, 0.30281364917755127f, 0.9763514995574951f, 0.3136120140552521f, 0.7324010133743286f, 0.23823988437652588f, -0.0750572681427002f, 0.8614629507064819f, 0.48373737931251526f, 0.05416453257203102f, 0.0945342481136322f, 0.25269874930381775f, 0.15625686943531036f, 0.7752213478088379f, -0.6008185148239136f, 0.9693965315818787f, 0.6077018976211548f, 0.19631099700927734f, 0.20810770988464355f, 0.2932945787906647f, 0.9712307453155518f, 0.3554973900318146f, -0.5825162529945374f, 0.43276622891426086f, 0.3912152945995331f, 0.16882087290287018f, 0.5972376465797424f, 0.572109043598175f, 0.5876023769378662f, 0.9773452877998352f, -0.7294124364852905f, 0.4359942376613617f, 0.4498803913593292f, 0.49421587586402893f, 0.9574316143989563f, 0.7554691433906555f, 0.5755292773246765f, 0.2124057412147522f, -0.009338371455669403f, 0.8304433822631836f, 0.020749563351273537f, 0.6577751040458679f, 0.21541641652584076f, 0.30028560757637024f, 0.15981557965278625f, 0.14225347340106964f, -0.047972578555345535f, 0.18687348067760468f, 0.8169100880622864f, 0.7504826784133911f, 0.5761627554893494f, 0.9615432024002075f, 0.26763495802879333f, 0.8608338236808777f, -0.9287960529327393f, 0.2689117193222046f, 0.07010975480079651f, 0.1703263521194458f, 0.022776858881115913f, 0.5525832772254944f, 0.360004723072052f, 0.725940465927124f, -0.5377305746078491f, 0.6671461462974548f, 0.6175861954689026f, 0.7377314567565918f, 0.0891837552189827f, 0.6918181777000427f, 0.17069081962108612f, 0.8885952830314636f, -0.4551192820072174f, 0.5367857813835144f, 0.47890791296958923f, 0.9461885690689087f, 0.9612498879432678f, 0.14177186787128448f, 0.9044542908668518f, 0.5151554346084595f, -0.413373738527298f, 0.5351126790046692f, 0.8995561599731445f, 0.3191351294517517f, 0.5385437607765198f, 0.9759212732315063f, 0.9719336032867432f, 0.3632403016090393f, -0.9235430955886841f, 0.13962619006633759f, 0.7455273866653442f, 0.023020392283797264f, 0.13440510630607605f, 0.18227338790893555f, 0.41970422863960266f, 0.12163093686103821f, -0.46985161304473877f, 0.17914249002933502f, 0.2657548487186432f, 0.8414669632911682f, 0.06265589594841003f, 0.17190998792648315f, 0.653444230556488f, 0.021008577197790146f, -0.8382667303085327f, 0.7338396906852722f, 0.7164390683174133f, 0.5899250507354736f, 0.8826301097869873f, 0.8900344371795654f, 0.5677748918533325f, 0.1850857436656952f, -0.7482209205627441f, 0.32078817486763f, 0.6756704449653625f, 0.1387738436460495f, 0.417959988117218f, 0.12372992932796478f, 0.250279039144516f, 0.7498807907104492f, -0.5864412188529968f, 0.7468445897102356f, 0.6649985313415527f, 0.3764737844467163f, 0.6869803071022034f, 0.5310028195381165f, 0.5265560150146484f, 0.7445670962333679f, -0.3439440429210663f, 0.9942619204521179f, 0.5263741612434387f, 0.6717716455459595f, 0.17350801825523376f, 0.07454485446214676f, 0.2792227268218994f, 0.5402880311012268f, -0.0677354633808136f, 0.9923604726791382f, 0.27171462774276733f, 0.5872626900672913f, 0.44089174270629883f, 0.484976589679718f, 0.712698221206665f, 0.25466403365135193f, -0.2810978591442108f, 0.21645306050777435f, 0.8598002791404724f, 0.14634275436401367f, 0.37511348724365234f, 0.07231500744819641f, 0.5499365925788879f, 0.6993637681007385f, -0.4101144075393677f, 0.8090676665306091f, 0.7105676531791687f, 0.24398930370807648f, 0.03905469551682472f, 0.6013409495353699f, 0.7996895909309387f, 0.6920961141586304f, -0.8648422956466675f, 0.6571129560470581f, 0.5579735636711121f, 0.47056514024734497f, 0.9690107703208923f, 0.6766915321350098f, 0.47952401638031006f, 0.11329696327447891f, -0.36413389444351196f, 0.5853347778320312f, 0.2258954495191574f, 0.595962405204773f, 0.0013921386562287807f, 0.9709766507148743f, 0.44585898518562317f, 0.8200893402099609f, -0.2637196481227875f, 0.6686633825302124f, 0.8980889916419983f, 0.5767809748649597f, 0.09639623761177063f, 0.13132858276367188f, 0.5910831689834595f, 0.6078184843063354f, -0.7907584309577942f, 0.8675627708435059f, 0.571536660194397f, 0.42524468898773193f, 0.483997642993927f, 0.46400535106658936f, 0.009455382823944092f, 0.306614488363266f, -0.06438735127449036f, 0.9444310665130615f, 0.6902361512184143f, 0.6039742231369019f, 0.8693973422050476f, 0.12582814693450928f, 0.9074525237083435f, 0.8409203290939331f, -0.2782018482685089f, 0.07540415972471237f, 0.5794351100921631f, 0.439647376537323f, 0.5249598026275635f, 0.6024683713912964f, 0.3366371691226959f, 0.420800119638443f, -0.0054331012070178986f, 0.6910070180892944f, 0.18684406578540802f, 0.9332931637763977f, 0.837380588054657f, 0.6748592257499695f, 0.9573593139648438f, 0.97430419921875f, -0.2535097599029541f, 0.12733350694179535f, 0.12766103446483612f, 0.7879038453102112f, 0.7846955060958862f, 0.7845568656921387f, 0.7168415188789368f, 0.9070437550544739f, -0.42277711629867554f, 0.4155086874961853f, 0.6541223526000977f, 0.5273309350013733f, 0.6455110311508179f, 0.6423474550247192f, 0.9122453927993774f, 0.15702828764915466f, -0.8576929569244385f, 0.8393531441688538f, 0.28552258014678955f, 0.8340270519256592f, 0.12392205744981766f, 0.8644583225250244f, 0.23979009687900543f, 0.973465085029602f, -0.9035550355911255f, 0.452548623085022f, 0.3043937683105469f, 0.8427074551582336f, 0.2165297120809555f, 0.8189377784729004f, 0.3931202292442322f, 0.9138897657394409f, -0.9145506024360657f, 0.4326128661632538f, 0.9646468162536621f, 0.8783077597618103f, 0.89385586977005f, 0.14395594596862793f, 0.045233093202114105f, 0.8072449564933777f, -0.932192862033844f, 0.4739166498184204f, 0.9702062606811523f, 0.11535392701625824f, 0.476867139339447f, 0.4304884672164917f, 0.06554869562387466f, 0.9795454740524292f, -0.175340935587883f, 0.5251146554946899f, 0.17289559543132782f, 0.8409253358840942f, 0.5850578546524048f, 0.3633680045604706f, 0.2996799647808075f, 0.47391360998153687f, -0.45534831285476685f, 0.3345106244087219f, 0.06630276143550873f, 0.6723254323005676f, 0.9745187163352966f, 0.039746060967445374f, 0.5972094535827637f, 0.2124968022108078f, -0.7847222089767456f, 0.3809731602668762f, 0.33898308873176575f, 0.06193273514509201f, 0.6982182264328003f, 0.9375013709068298f, 0.9632217884063721f, 0.18353794515132904f, -0.7944515943527222f, 0.8325371742248535f, 0.4843079149723053f, 0.2623663544654846f, 0.9817509651184082f, 0.4195713996887207f, 0.11505068838596344f, 0.9721336364746094f, -0.06837131083011627f, 0.47810691595077515f, 0.7961872816085815f, 0.2954815626144409f, 0.5808004140853882f, 0.023678990080952644f, 0.4165392518043518f, 0.5336354374885559f, -0.37433159351348877f, 0.24112214148044586f, 0.9465040564537048f, 0.5436174273490906f, 0.5756937265396118f, 0.007220624014735222f, 0.12223367393016815f, 0.16459845006465912f, -0.6918842196464539f, 0.1488250344991684f, 0.014984628185629845f, 0.8614698648452759f, 0.7363150715827942f, 0.8883854746818542f, 0.12595313787460327f, 0.12033703923225403f, -0.5492404103279114f, 0.9340962171554565f, 0.5266237258911133f, 0.24413207173347473f, 0.18960337340831757f, 0.2855583727359772f, 0.24836528301239014f, 0.9082263708114624f, -0.3032478392124176f, 0.028327032923698425f, 0.6427752375602722f, 0.08861403912305832f, 0.9228793978691101f, 0.5828797817230225f, 0.9932605624198914f, 0.9091103076934814f, -0.03608247637748718f, 0.2832272946834564f, 0.2606436610221863f, 0.10303355753421783f, 0.2857919931411743f, 0.059187859296798706f, 0.7454221248626709f, 0.22349199652671814f, -0.43867382407188416f, 0.013702857308089733f, 0.2121751457452774f, 0.6931135654449463f, 0.9344688653945923f, 0.08796947449445724f, 0.9522706270217896f, 0.1928379237651825f, -0.3605586588382721f, 0.623555600643158f, 0.4872640371322632f, 0.6387485861778259f, 0.3246900141239166f, 0.05938900634646416f, 0.8544521331787109f, 0.43295082449913025f, -0.10240700095891953f, 0.43699291348457336f, 0.05695462226867676f, 0.931603193283081f, 0.3260990083217621f, 0.698547899723053f, 0.859913170337677f, 0.4011439383029938f, -0.7515764236450195f, 0.8752765655517578f, 0.195108100771904f, 0.8463542461395264f, 0.9653753042221069f, 0.9330365657806396f, 0.6959038376808167f, 0.43204018473625183f, -0.9559813141822815f, 0.6846811771392822f, 0.46363306045532227f, 0.7242677211761475f, 0.9828121066093445f, 0.8802292943000793f, 0.5770742893218994f, 0.970037579536438f, -0.5733053684234619f, 0.033143721520900726f, 0.2370227724313736f, 0.07704367488622665f, 0.3429179787635803f, 0.018671220168471336f, 0.8367356657981873f, 0.8019074201583862f, -0.4485929012298584f, 0.4927806854248047f, 0.3007793426513672f, 0.6090525388717651f, 0.25485727190971375f, 0.5347379446029663f, 0.23670567572116852f, 0.9088606834411621f, -0.8118202686309814f, 0.8704895377159119f, 0.44611644744873047f, 0.25407645106315613f, 0.9434441924095154f, 0.73401939868927f, 0.4072805941104889f, 0.27757206559181213f, -0.18174289166927338f, 0.8695781230926514f, 0.057814646512269974f, 0.9734231233596802f, 0.32922452688217163f, 0.9818869233131409f, 0.7198984026908875f, 0.7988128662109375f, -0.48789793252944946f, 0.8059707283973694f, 0.8763560652732849f, 0.7219805717468262f, 0.6050239205360413f, 0.34142541885375977f, 0.872559130191803f, 0.3174822926521301f, -0.3635193109512329f, 0.5843555927276611f, 0.13956183195114136f, 0.1581532210111618f, 0.4190059304237366f, 0.9585590958595276f, 0.5028509497642517f, 0.834092378616333f, -0.05099815875291824f, 0.21546931564807892f, 0.6388731002807617f, 0.13651670515537262f, 0.6218708753585815f, 0.8492593765258789f, 0.864653468132019f, 0.5998292565345764f, -0.8724539875984192f, 0.9440115690231323f, 0.5690376162528992f, 0.8647421002388f, 0.8714722990989685f, 0.7893242239952087f, 0.26023614406585693f, 0.13284994661808014f, -0.1516438126564026f, 0.036243338137865067f, 0.8978299498558044f, 0.8358675837516785f, 0.5345872640609741f, 0.2376440316438675f, 0.17623721063137054f, 0.3588094711303711f, -0.2923905551433563f, 0.6397193670272827f, 0.5482962131500244f, 0.9356998205184937f, 0.8474464416503906f, 0.30161052942276f, 0.7146201133728027f, 0.27403825521469116f, -0.5140796303749084f, 0.3438940644264221f, 0.7107549905776978f, 0.1876976042985916f, 0.6821749210357666f, 0.16175797581672668f, 0.6640573143959045f, 0.3890308439731598f, -0.824303388595581f, 0.5234982371330261f, 0.4233979880809784f, 0.7562068104743958f, 0.727886438369751f, 0.6833208799362183f, 0.6039966940879822f, 0.6723765730857849f, -0.13412538170814514f, 0.6505095958709717f, 0.21527813374996185f, 0.9649890065193176f, 0.567449688911438f, 0.7402253746986389f, 0.3008999228477478f, 0.937004566192627f, -0.8929237127304077f, 0.3218511939048767f, 0.4124840199947357f, 0.9698336124420166f, 0.37594008445739746f, 0.13953760266304016f, 0.6861025094985962f, 0.658936083316803f, -0.3354683518409729f, 0.5838007926940918f, 0.3866603672504425f, 0.7315249443054199f, 0.7559936046600342f, 0.5871638059616089f, 0.8452692627906799f, 0.5770581960678101f, -0.8351085186004639f, 0.12263147532939911f, 0.5362861752510071f, 0.5288577675819397f, 0.7508598566055298f, 0.4141960144042969f, 0.10651607811450958f, 0.7700206637382507f, -0.6190858483314514f, 0.8843879103660583f, 0.15627099573612213f, 0.5687905550003052f, 0.42964932322502136f, 0.5223056674003601f, 0.4285505712032318f, 0.5513617992401123f, -0.3108402192592621f, 0.13838312029838562f, 0.4374365508556366f, 0.09320517629384995f, 0.09654781967401505f, 0.8257817625999451f, 0.8479154109954834f, 0.00490189716219902f, -0.2885276675224304f, 0.7096967697143555f, 0.6865493059158325f, 0.6991437673568726f, 0.770910382270813f, 0.8548567891120911f, 0.22191135585308075f, 0.3945867717266083f, -0.4268186092376709f, 0.41456642746925354f, 0.34117603302001953f, 0.927334725856781f, 0.015652552247047424f, 0.7259398698806763f, 0.8774449825286865f, 0.46291154623031616f, -0.1434122920036316f, 0.3774077296257019f, 0.26173752546310425f, 0.06423286348581314f, 0.10462391376495361f, 0.5822655558586121f, 0.38975948095321655f, 0.8807242512702942f, -0.547555148601532f, 0.8452512621879578f, 0.5432101488113403f, 0.1032896563410759f, 0.8231698274612427f, 0.733584463596344f, 0.6319178342819214f, 0.014470991678535938f, -0.3267536163330078f, 0.043436918407678604f, 0.3540628254413605f, 0.08556396514177322f, 0.31514281034469604f, 0.7188625335693359f, 0.9632051587104797f, 0.7893818020820618f, -0.5365380644798279f, 0.018717994913458824f, 0.715621292591095f, 0.18304915726184845f, 0.6321311593055725f, 0.09123545140028f, 0.846813440322876f, 0.8233123421669006f, -0.7634304761886597f, 0.8813508749008179f, 0.1612899899482727f, 0.2920757532119751f, 0.045564278960227966f, 0.2628573775291443f, 0.7173973321914673f, 0.8847271800041199f, -0.7315539717674255f, 0.11876188963651657f, 0.9772098660469055f, 0.19183145463466644f, 0.13991232216358185f, 0.578342616558075f, 0.435657262802124f, 0.12220537662506104f, -0.043933458626270294f, 0.5325586795806885f, 0.5840291380882263f, 0.09532591700553894f, 0.2719753384590149f, 0.9204474091529846f, 0.1073247492313385f, 0.5297631025314331f, -0.047069430351257324f, 0.4629117250442505f, 0.47489404678344727f, 0.26479455828666687f, 0.7114154696464539f, 0.5710015296936035f, 0.15470540523529053f, 0.2298317700624466f, -0.42230165004730225f, 0.04011409357190132f, 0.40484434366226196f, 0.5477829575538635f, 0.30858689546585083f, 0.8662770986557007f, 0.8929312229156494f, 0.5451228618621826f, -0.9094920754432678f, 0.948164165019989f, 0.5321204662322998f, 0.8017261624336243f, 0.7103633880615234f, 0.8902571797370911f, 0.4420454800128937f, 0.9576451182365417f, -0.5582895278930664f, 0.1631736010313034f, 0.40632665157318115f, 0.7195212244987488f, 0.7160694599151611f, 0.7002248167991638f, 0.6157683730125427f, 0.7006402015686035f, -0.5835666060447693f, 0.23531265556812286f, 0.5794551968574524f, 0.4086441993713379f, 0.36181962490081787f, 0.8451923727989197f, 0.8735992908477783f, 0.9137650728225708f, -0.27716779708862305f, 0.6585193276405334f, 0.15161484479904175f, 0.27622395753860474f, 0.9409904479980469f, 0.9436518549919128f, 0.26120030879974365f, 0.5001165270805359f, -0.3151765465736389f, 0.9116787910461426f, 0.21688634157180786f, 0.948016345500946f, 0.9278697967529297f, 0.6762374639511108f, 0.47957319021224976f, 0.3734024167060852f, -0.4950110614299774f, 0.626015305519104f, 0.5545667409896851f, 0.012324287556111813f, 0.991006076335907f, 0.12710270285606384f, 0.8083977699279785f, 0.35146546363830566f, -0.8916267156600952f, 0.3684707581996918f, 0.37453681230545044f, 0.46643561124801636f, 0.10037451982498169f, 0.8344841599464417f, 0.44493740797042847f, 0.4292536973953247f, -0.31600481271743774f, 0.9380260705947876f, 0.938576340675354f, 0.6674903631210327f, 0.7365953922271729f, 0.6862347722053528f, 0.024678301066160202f, 0.7410590648651123f, -0.8479830026626587f, 0.4551146924495697f, 0.8170590400695801f, 0.44058895111083984f, 0.6670103669166565f, 0.6912598013877869f, 0.8740000128746033f, 0.9049307107925415f, -0.8836899995803833f, 0.877484917640686f, 0.6775099039077759f, 0.18617740273475647f, 0.6357186436653137f, 0.06612001359462738f, 0.6270383596420288f, 0.003503676736727357f, -0.050778839737176895f, 0.19055905938148499f, 0.9526708126068115f, 0.9661926627159119f, 0.6345462799072266f, 0.41222473978996277f, 0.8977262377738953f, 0.00738124456256628f, -0.28774306178092957f, 0.4025898575782776f, 0.967975378036499f, 0.8884767889976501f, 0.49730411171913147f, 0.0975319892168045f, 0.7124921083450317f, 0.15878352522850037f, -0.7805293798446655f, 0.4919525980949402f, 0.4109269380569458f, 0.9502815008163452f, 0.020422453060746193f, 0.11477223038673401f, 0.6465705633163452f, 0.7149842977523804f, -0.28545817732810974f, 0.8850971460342407f, 0.7743722200393677f, 0.9453029036521912f, 0.38827547430992126f, 0.13435052335262299f, 0.44683828949928284f, 0.4469968378543854f, -0.25358471274375916f, 0.9906033277511597f, 0.8304179310798645f, 0.23630738258361816f, 0.19986404478549957f, 0.9812595248222351f, 0.7477895617485046f, 0.09091413021087646f, -0.08187685161828995f, 0.8555930256843567f, 0.5184136033058167f, 0.4567212164402008f, 0.6360307335853577f, 0.4833813011646271f, 0.2568337321281433f, 0.7613586187362671f, -0.026493608951568604f, 0.8119536638259888f, 0.8648841381072998f, 0.5115895867347717f, 0.5535330176353455f, 0.9492219090461731f, 0.05493294447660446f, 0.9338352680206299f, -0.7045207619667053f, 0.3029805123806f, 0.6022197604179382f, 0.9966744780540466f, 0.5826824903488159f, 0.1442698985338211f, 0.44636547565460205f, 0.018761418759822845f, -0.5321681499481201f, 0.5202006101608276f, 0.06184286251664162f, 0.2888616621494293f, 0.03116399236023426f, 0.6035085916519165f, 0.23602363467216492f, 0.8550743460655212f, -0.4351532459259033f, 0.006253192666918039f, 0.25348615646362305f, 0.47568321228027344f, 0.5652946829795837f, 0.7531019449234009f, 0.09485431015491486f, 0.6515979170799255f, -0.28987783193588257f, 0.5103525519371033f, 0.03565671294927597f, 0.01130343321710825f, 0.5105778574943542f, 0.6680818796157837f, 0.630953311920166f, 0.5534535646438599f, -0.6682696342468262f, 0.22774234414100647f, 0.2683418095111847f, 0.37180742621421814f, 0.8527811765670776f, 0.5369990468025208f, 0.1571330428123474f, 0.0019158830400556326f, -0.029322417452931404f, 0.5014950037002563f, 0.7941271662712097f, 0.9488233327865601f, 0.7821636199951172f, 0.6708524823188782f, 0.05319851636886597f, 0.5039704442024231f, -0.08235269784927368f, 0.04976046085357666f, 0.1264512538909912f, 0.9636113047599792f, 0.2761617600917816f, 0.7208712100982666f, 0.5594821572303772f, 0.3213728666305542f, -0.6921039819717407f, 0.516570508480072f, 0.21569089591503143f, 0.8249164819717407f, 0.7465562224388123f, 0.9229778051376343f, 0.40296491980552673f, 0.3689664602279663f, -0.5874041318893433f, 0.20326261222362518f, 0.0772462859749794f, 0.48190248012542725f, 0.8328826427459717f, 0.5593008399009705f, 0.1409703940153122f, 0.06926602870225906f, -0.8958600163459778f, 0.9809143543243408f, 0.4748481810092926f, 0.4521235227584839f, 0.14449800550937653f, 0.619702160358429f, 0.6720080971717834f, 0.4101230204105377f, -0.7544407844543457f, 0.16712990403175354f, 0.6014788150787354f, 0.5152092576026917f, 0.15391811728477478f, 0.4910077154636383f, 0.1818104237318039f, 0.24168282747268677f, -0.28643599152565f, 0.44686049222946167f, 0.9495946764945984f, 0.7257283329963684f, 0.9122672080993652f, 0.35095536708831787f, 0.14831577241420746f, 0.01839405484497547f, -0.04980664327740669f, 0.18324334919452667f, 0.5407652854919434f, 0.9762423038482666f, 0.7761498093605042f, 0.3412543535232544f, 0.6348609924316406f, 0.5604791045188904f, -0.809497058391571f, 0.9939899444580078f, 0.5741689801216125f, 0.374118834733963f, 0.5472496151924133f, 0.7452911734580994f, 0.09726619720458984f, 0.3761107623577118f, -0.9545592665672302f, 0.7457963824272156f, 0.7610496878623962f, 0.8822619915008545f, 0.9737228155136108f, 0.420195072889328f, 0.4439135193824768f, 0.39517274498939514f, -0.30932578444480896f, 0.47848865389823914f, 0.6742391586303711f, 0.07698823511600494f, 0.6628978848457336f, 0.1239200308918953f, 0.2562870681285858f, 0.5439774990081787f, -0.28611406683921814f, 0.8099706172943115f, 0.4452703893184662f, 0.7267224192619324f, 0.5753990411758423f, 0.19635705649852753f, 0.7774075865745544f, 0.6794096827507019f, -0.8917787075042725f, 0.15158601105213165f, 0.4130821228027344f, 0.15956322848796844f, 0.09927081316709518f, 0.3278440237045288f, 0.6808205246925354f, 0.39480096101760864f, -0.964278519153595f, 0.24008604884147644f, 0.3820765018463135f, 0.15333153307437897f, 0.27171969413757324f, 0.3886556327342987f, 0.7298768758773804f, 0.07246241718530655f, -0.031331807374954224f, 0.5530408620834351f, 0.4435316324234009f, 0.4956989586353302f, 0.6949076056480408f, 0.2773210406303406f, 0.2561773657798767f, 0.9350370168685913f, -0.5096345543861389f, 0.07565221190452576f, 0.15654373168945312f, 0.15200938284397125f, 0.5526428818702698f, 0.800188422203064f, 0.6322994828224182f, 0.7955998778343201f, -0.6534045338630676f, 0.37113866209983826f, 0.40484365820884705f, 0.07602337747812271f, 0.5667933821678162f, 0.3238019049167633f, 0.8907788991928101f, 0.33978164196014404f, -0.9758238196372986f, 0.9158121943473816f, 0.8197038769721985f, 0.7485503554344177f, 0.8532792329788208f, 0.7130071520805359f, 0.6186395883560181f, 0.07952355593442917f, -0.25218015909194946f, 0.9576842784881592f, 0.09384707361459732f, 0.42917442321777344f, 0.5171285271644592f, 0.014128897339105606f, 0.7629842162132263f, 0.0035759059246629477f, -0.5378696322441101f, 0.9987467527389526f, 0.4764719605445862f, 0.546616792678833f, 0.24524374306201935f, 0.9421350955963135f, 0.7039852738380432f, 0.3496355414390564f, -0.8597115874290466f, 0.6407512426376343f, 0.7695888876914978f, 0.5671234130859375f, 0.4670965075492859f, 0.1644202470779419f, 0.35594746470451355f, 0.5552588105201721f, -0.105324387550354f, 0.08025511354207993f, 0.438455730676651f, 0.4337659180164337f, 0.26173266768455505f, 0.8374314904212952f, 0.35618749260902405f, 0.5450355410575867f, -0.580467700958252f, 0.662723958492279f, 0.12883086502552032f, 0.6377599835395813f, 0.6368539929389954f, 0.5313829183578491f, 0.720264732837677f, 0.7111619114875793f, -0.9847860932350159f, 0.21528954803943634f, 0.036240749061107635f, 0.24667595326900482f, 0.7373657822608948f, 0.5410345792770386f, 0.08198460191488266f, 0.5730047821998596f, -0.6115132570266724f, 0.2643946707248688f, 0.3590298593044281f, 0.24182794988155365f, 0.011299469508230686f, 0.17367582023143768f, 0.7684285640716553f, 0.31976938247680664f, -0.5675042867660522f, 0.8580012321472168f, 0.6109883189201355f, 0.6209549307823181f, 0.026680978015065193f, 0.3334866762161255f, 0.4968257248401642f, 0.05182169750332832f, -0.5996573567390442f, 0.42737752199172974f, 0.47800394892692566f, 0.5965182185173035f, 0.3820469081401825f, 0.2678464651107788f, 0.35243475437164307f, 0.6530085206031799f, -0.7962362766265869f, 0.3893350660800934f, 0.025177625939249992f, 0.6899973750114441f, 0.6414045095443726f, 0.06671924889087677f, 0.35945892333984375f, 0.09979405254125595f, -0.6367905735969543f, 0.5523229837417603f, 0.38479721546173096f, 0.16074329614639282f, 0.0834784135222435f, 0.01739542931318283f, 0.901389479637146f, 0.5141044855117798f, -0.7290092706680298f, 0.7743654847145081f, 0.6166245937347412f, 0.6044555306434631f, 0.3614664673805237f, 0.0076781585812568665f, 0.8699424266815186f, 0.14259149134159088f, -0.07665770500898361f, 0.09960037469863892f, 0.8299102783203125f, 0.14389432966709137f, 0.4578971862792969f, 0.5535430908203125f, 0.17535409331321716f, 0.14964434504508972f, -0.4156661629676819f, 0.9609540700912476f, 0.8148326873779297f, 0.6643479466438293f, 0.7411706447601318f, 0.5666891932487488f, 0.28832507133483887f, 0.2934342324733734f, -0.8210205435752869f, 0.9328879117965698f, 0.8063549995422363f, 0.9954957365989685f, 0.841283917427063f, 0.2244499921798706f, 0.36307471990585327f, 0.808102011680603f, -0.3570268750190735f, 0.9196459054946899f, 0.01858084462583065f, 0.017121238633990288f, 0.6305601596832275f, 0.12971143424510956f, 0.09312378615140915f, 0.6079051494598389f, -0.37683966755867004f, 0.20241782069206238f, 0.9343684911727905f, 0.6791983842849731f, 0.2296287715435028f, 0.4493822753429413f, 0.26868554949760437f, 0.7867043018341064f, -0.1113341897726059f, 0.6748930811882019f, 0.671174168586731f, 0.6888540387153625f, 0.11246161162853241f, 0.10738656669855118f, 0.7333953380584717f, 0.5840392708778381f, -0.8658372759819031f, 0.8183010220527649f, 0.155425563454628f, 0.5262755751609802f, 0.6260839104652405f, 0.21034236252307892f, 0.7705858945846558f, 0.5815353393554688f, -0.9621298909187317f, 0.9423701763153076f, 0.7131168842315674f, 0.297859787940979f, 0.35391053557395935f, 0.01948024518787861f, 0.48326143622398376f, 0.6987259984016418f, -0.5714876651763916f, 0.09459695219993591f, 0.8403947949409485f, 0.316446989774704f, 0.7494286894798279f, 0.011787032708525658f, 0.13290317356586456f, 0.4367712438106537f, -0.8625248074531555f, 0.09602896869182587f, 0.04923101142048836f, 0.9344050288200378f, 0.1608077436685562f, 0.3316219449043274f, 0.1906425803899765f, 0.2907697856426239f, -0.7823002338409424f, 0.29281777143478394f, 0.6711602210998535f, 0.636533260345459f, 0.4353823959827423f, 0.9233216643333435f, 0.33466699719429016f, 0.35259756445884705f, -0.682536244392395f, 0.7039351463317871f, 0.5148518085479736f, 0.36920392513275146f, 0.34631678462028503f, 0.36925554275512695f, 0.5849317312240601f, 0.8496450185775757f, -0.43873339891433716f, 0.18103066086769104f, 0.8031437993049622f, 0.08140449225902557f, 0.9688681364059448f, 0.6389612555503845f, 0.4710928201675415f, 0.23149818181991577f, -0.5500116348266602f, 0.2702617645263672f, 0.1492726355791092f, 0.5179837942123413f, 0.34280407428741455f, 0.8470449447631836f, 0.7387889623641968f, 0.39893192052841187f, -0.002779717557132244f, 0.16017362475395203f, 0.9071924090385437f, 0.5725783109664917f, 0.15415483713150024f, 0.3480154871940613f, 0.2745051681995392f, 0.02261103130877018f, -0.8473067879676819f, 0.060379378497600555f, 0.12288957089185715f, 0.44874662160873413f, 0.6281374096870422f, 0.9122071862220764f, 0.6729599237442017f, 0.3466395139694214f, -0.9602195024490356f, 0.6263668537139893f, 0.8852882981300354f, 0.509385347366333f, 0.60634845495224f, 0.59552401304245f, 0.902184009552002f, 0.13569316267967224f, -0.06931812316179276f, 0.9790726900100708f, 0.007061601150780916f, 0.8237424492835999f, 0.0521807037293911f, 0.6920077204704285f, 0.705253005027771f, 0.2153245210647583f, -0.751915454864502f, 0.8267547488212585f, 0.8719605207443237f, 0.10577093064785004f, 0.45851394534111023f, 0.967786967754364f, 0.16218611598014832f, 0.2383808046579361f, -0.007864285260438919f, 0.9830762147903442f, 0.9187271595001221f, 0.3527775704860687f, 0.23006342351436615f, 0.5596051216125488f, 0.8146471977233887f, 0.7693493962287903f, -0.05888472869992256f, 0.5843233466148376f, 0.6883410811424255f, 0.3723313808441162f, 0.34357720613479614f, 0.10957058519124985f, 0.26786425709724426f, 0.8392313718795776f, -0.2176419496536255f, 0.2359585016965866f, 0.597195565700531f, 0.5974199175834656f, 0.6381065845489502f, 0.6386678814888f, 0.2258128672838211f, 0.14043232798576355f, -0.9232456088066101f, 0.8138437867164612f, 0.33901941776275635f, 0.40529969334602356f, 0.7383332252502441f, 0.2013617753982544f, 0.818102240562439f, 0.6312968730926514f, -0.3949429988861084f, 0.6485596895217896f, 0.5924468636512756f, 0.2061774581670761f, 0.6992800831794739f, 0.041663505136966705f, 0.6364017128944397f, 0.4209926724433899f, -0.661845862865448f, 0.8126587867736816f, 0.6430431008338928f, 0.8205421566963196f, 0.7626156210899353f, 0.2695026099681854f, 0.3720645606517792f, 0.486362099647522f, -0.3814254403114319f, 0.5035974979400635f, 0.3155551552772522f, 0.8974283933639526f, 0.6485607624053955f, 0.6619378328323364f, 0.3687478005886078f, 0.5327507853507996f, -0.4276840388774872f, 0.2013397514820099f, 0.7042897939682007f, 0.009412629529833794f, 0.149216428399086f, 0.7550733089447021f, 0.8239869475364685f, 0.14862121641635895f, -0.05751650407910347f, 0.8890376091003418f, 0.9750433564186096f, 0.4577800929546356f, 0.380950927734375f, 0.533096194267273f, 0.2726828455924988f, 0.8250836730003357f, -0.0914601981639862f, 0.4466922879219055f, 0.34328946471214294f, 0.2044306844472885f, 0.33630746603012085f, 0.34714627265930176f, 0.0637904703617096f, 0.5830858945846558f, -0.20476260781288147f, 0.4271112382411957f, 0.9691917896270752f, 0.8389036655426025f, 0.6859829425811768f, 0.895499050617218f, 0.1510341614484787f, 0.6366668939590454f, -0.3261301815509796f, 0.655645489692688f, 0.49578240513801575f, 0.9234028458595276f, 0.11998376250267029f, 0.39417678117752075f, 0.5244614481925964f, 0.4122943580150604f, -0.9642163515090942f, 0.6343045234680176f, 0.20526966452598572f, 0.3748992681503296f, 0.05340432748198509f, 0.10288223624229431f, 0.6044825911521912f, 0.5335469245910645f, -0.1320025622844696f, 0.8673973083496094f, 0.48717302083969116f, 0.13496793806552887f, 0.32822370529174805f, 0.8255426287651062f, 0.638382077217102f, 0.08810124546289444f, -0.5583387613296509f, 0.5798894762992859f, 0.28692612051963806f, 0.0843420997262001f, 0.33187368512153625f, 0.8177263140678406f, 0.9160926342010498f, 0.8770046234130859f, -0.06778184324502945f, 0.8839209675788879f, 0.5480854511260986f, 0.15172085165977478f, 0.9532967805862427f, 0.5834746360778809f, 0.9610961675643921f, 0.9579805135726929f, -0.08111528307199478f, 0.6260355710983276f, 0.968401312828064f, 0.21720784902572632f, 0.5198561549186707f, 0.48740968108177185f, 0.9544018507003784f, 0.7644021511077881f, -0.383084774017334f, 0.17238934338092804f, 0.31698843836784363f, 0.7075640559196472f, 0.770587682723999f, 0.30332982540130615f, 0.08803129196166992f, 0.511660099029541f, -0.5901322364807129f, 0.7940177917480469f, 0.6150833964347839f, 0.7969182133674622f, 0.7496682405471802f, 0.5437915325164795f, 0.8219250440597534f, 0.4767911434173584f, -0.9037120342254639f, 0.6268083453178406f, 0.9781647324562073f, 0.27230891585350037f, 0.6462268829345703f, 0.49929383397102356f, 0.20477737486362457f, 0.2653915584087372f, -0.7118844389915466f, 0.7556133270263672f, 0.8200377225875854f, 0.4546448588371277f, 0.9828261733055115f, 0.3453402519226074f, 0.4229184687137604f, 0.8139545917510986f, -0.8080664873123169f, 0.41187167167663574f, 0.6032685041427612f, 0.7444430589675903f, 0.958600640296936f, 0.9022495150566101f, 0.4042062759399414f, 0.5882136821746826f, -0.4816519618034363f, 0.856050431728363f, 0.4670434594154358f, 0.29907310009002686f, 0.6343153715133667f, 0.17377540469169617f, 0.11094584316015244f, 0.4460197687149048f, -0.46665552258491516f, 0.9923445582389832f, 0.08139059692621231f, 0.8852967023849487f, 0.06399451196193695f, 0.13824081420898438f, 0.18892605602741241f, 0.3750572204589844f, -0.39751362800598145f, 0.3687613904476166f, 0.6733573079109192f, 0.5585817694664001f, 0.17044545710086823f, 0.40130841732025146f, 0.6051463484764099f, 0.46201637387275696f, -0.45462146401405334f, 0.5265573859214783f, 0.4984643757343292f, 0.726812481880188f, 0.2744959890842438f, 0.37746262550354004f, 0.07747875154018402f, 0.34362104535102844f, -0.28261032700538635f, 0.5654228329658508f, 0.9506545066833496f, 0.43829646706581116f, 0.14666038751602173f, 0.4226081073284149f, 0.4748925566673279f, 0.5896501541137695f, -0.9862123131752014f, 0.8940030336380005f, 0.571513295173645f, 0.998132050037384f, 0.7016131281852722f, 0.8895058631896973f, 0.9094440340995789f, 0.27023836970329285f, -0.1296587735414505f, 0.6494210362434387f, 0.17609871923923492f, 0.25490912795066833f, 0.21698591113090515f, 0.1297668069601059f, 0.6650547385215759f, 0.22796356678009033f, -0.7849319577217102f, 0.8141461610794067f, 0.1214018166065216f, 0.847657322883606f, 0.7586032748222351f, 0.43445470929145813f, 0.9545917510986328f, 0.5879725217819214f, -0.1537739783525467f, 0.1322191059589386f, 0.2500702142715454f, 0.4123430550098419f, 0.4224681258201599f, 0.333119660615921f, 0.3939811587333679f, 0.4917779564857483f, -0.5068672299385071f, 0.890195906162262f, 0.3514207899570465f, 0.05902761220932007f, 0.13515466451644897f, 0.6156087517738342f, 0.3699208199977875f, 0.3666253387928009f, -0.6341322660446167f, 0.42557528614997864f, 0.10828785598278046f, 0.6048518419265747f, 0.8282368779182434f, 0.10212785005569458f, 0.4099222719669342f, 0.47729653120040894f, -0.8452025651931763f, 0.49564066529273987f, 0.4640980064868927f, 0.8817708492279053f, 0.9543477892875671f, 0.7668248414993286f, 0.30859285593032837f, 0.8892363905906677f, -0.3156445622444153f, 0.9945090413093567f, 0.5353585481643677f, 0.730088472366333f, 0.4845148026943207f, 0.8003159761428833f, 0.714784562587738f, 0.7273889183998108f, -0.4276716411113739f, 0.8761031627655029f, 0.6829586029052734f, 0.7444157004356384f, 0.23167818784713745f, 0.9993070960044861f, 0.5698577761650085f, 0.30273377895355225f, -0.47334691882133484f, 0.507408082485199f, 0.2935612201690674f, 0.36008957028388977f, 0.5592572689056396f, 0.07227665930986404f, 0.1611347496509552f, 0.5841059684753418f, -0.9632559418678284f, 0.6548427939414978f, 0.6679164171218872f, 0.9167056679725647f, 0.19040794670581818f, 0.9123945832252502f, 0.9983173608779907f, 0.10693993419408798f, -0.5707406997680664f, 0.6685577034950256f, 0.0867931917309761f, 0.7795290946960449f, 0.3329108953475952f, 0.4095555543899536f, 0.8179701566696167f, 0.14533255994319916f, -0.2580831050872803f, 0.886232852935791f, 0.07018902897834778f, 0.36586490273475647f, 0.24293380975723267f, 0.7273983359336853f, 0.9424827694892883f, 0.6886844635009766f, -0.8021658658981323f, 0.2976624667644501f, 0.5387685894966125f, 0.287534236907959f, 0.01568826474249363f, 0.11778281629085541f, 0.7832725048065186f, 0.503211259841919f, -0.705836832523346f, 0.4212161600589752f, 0.0036761534865945578f, 0.3181385099887848f, 0.9041118025779724f, 0.8349703550338745f, 0.040585245937108994f, 0.5184176564216614f, -0.6921501755714417f, 0.7020537853240967f, 0.9844626784324646f, 0.5115795731544495f, 0.5391727089881897f, 0.22503948211669922f, 0.5912030935287476f, 0.22295016050338745f, -0.506649374961853f, 0.4014226496219635f, 0.7016190886497498f, 0.22210846841335297f, 0.595496416091919f, 0.4829986095428467f, 0.5101401209831238f, 0.9577595591545105f, -0.5415515899658203f, 0.015462862327694893f, 0.15628650784492493f, 0.151792511343956f, 0.7945588827133179f, 0.007474078331142664f, 0.3123372197151184f, 0.74155592918396f, -0.8677003383636475f, 0.8391539454460144f, 0.06237458065152168f, 0.6866521835327148f, 0.8320257067680359f, 0.34861335158348083f, 0.0861843153834343f, 0.9571388959884644f, -0.35239076614379883f, 0.5454277396202087f, 0.9848974347114563f, 0.3243872821331024f, 0.1769770383834839f, 0.7248867154121399f, 0.5842835307121277f, 0.10608285665512085f, -0.3284318149089813f, 0.42880845069885254f, 0.44073787331581116f, 0.2671685814857483f, 0.8046640753746033f, 0.4307803809642792f, 0.9590597748756409f, 0.5423290133476257f, -0.5013844966888428f, 0.02320963330566883f, 0.5559019446372986f, 0.7498511075973511f, 0.2038412243127823f, 0.047756925225257874f, 0.5600276589393616f, 0.4616009593009949f, -0.11568006873130798f, 0.46897178888320923f, 0.4869793951511383f, 0.251956969499588f, 0.34492728114128113f, 0.7209280729293823f, 0.6956287026405334f, 0.49012497067451477f, -0.6359422206878662f, 0.2994442582130432f, 0.16905196011066437f, 0.6030740141868591f, 0.6416793465614319f, 0.5878323316574097f, 0.5415006279945374f, 0.4554300308227539f, -0.6406173706054688f, 0.28605958819389343f, 0.014756591990590096f, 0.5997401475906372f, 0.15705682337284088f, 0.6814115047454834f, 0.3314912021160126f, 0.24448174238204956f, -0.8126736283302307f, 0.6260672211647034f, 0.5465455055236816f, 0.9707791805267334f, 0.37754756212234497f, 0.6393641233444214f, 0.2548862397670746f, 0.993375837802887f, -0.5840427279472351f, 0.6510504484176636f, 0.4238450825214386f, 0.08359501510858536f, 0.37767794728279114f, 0.8867003917694092f, 0.8366444110870361f, 0.6098986268043518f, -0.5718590617179871f, 0.4418538212776184f, 0.18636628985404968f, 0.47919338941574097f, 0.18582099676132202f, 0.1129230335354805f, 0.46784839034080505f, 0.6685891151428223f, -0.09365545958280563f, 0.3738393187522888f, 0.050407443195581436f, 0.8616721034049988f, 0.14925242960453033f, 0.9748215675354004f, 0.5183027982711792f, 0.3843386769294739f, -0.08868778496980667f, 0.6081211566925049f, 0.29759514331817627f, 0.703894853591919f, 0.32345449924468994f, 0.9904527068138123f, 0.35206034779548645f, 0.1872926503419876f, -0.5494979619979858f, 0.8516981601715088f, 0.8672712445259094f, 0.8936721682548523f, 0.7610967755317688f, 0.8303029537200928f, 0.07791374623775482f, 0.2612118422985077f, -0.6009334921836853f, 0.9657078385353088f, 0.9538354277610779f, 0.02860383689403534f, 0.5353430509567261f, 0.33676302433013916f, 0.6411170363426208f, 0.22935274243354797f, -0.2683454751968384f, 0.9496244192123413f, 0.60225510597229f, 0.46493566036224365f, 0.9251976609230042f, 0.2738075852394104f, 0.8958336114883423f, 0.5489280819892883f, -0.36297985911369324f, 0.27773329615592957f, 0.18788652122020721f, 0.37325817346572876f, 0.4906688332557678f, 0.7391814589500427f, 0.10031910985708237f, 0.7546796202659607f, -0.09148599952459335f, 0.9814554452896118f, 0.7355309724807739f, 0.7909482717514038f, 0.5521534085273743f, 0.16482524573802948f, 0.4953477680683136f, 0.5946672558784485f, -0.7832619547843933f, 0.5720628499984741f, 0.3134728670120239f, 0.5906482934951782f, 0.12292224913835526f, 0.5789121985435486f, 0.6897242069244385f, 0.7211540937423706f, -0.9674708247184753f, 0.0097660468891263f, 0.18251971900463104f, 0.24797788262367249f, 0.43796399235725403f, 0.166632279753685f, 0.8423896431922913f, 0.07804763317108154f, -0.21747618913650513f, 0.8714485764503479f, 0.5887236595153809f, 0.9651796221733093f, 0.30517226457595825f, 0.20741423964500427f, 0.21238194406032562f, 0.7252448797225952f, -0.8057255148887634f, 0.1948353350162506f, 0.8967750668525696f, 0.4888342618942261f, 0.4289169907569885f, 0.4007517695426941f, 0.051160480827093124f, 0.07894020527601242f, -0.572173535823822f, 0.5128955245018005f, 0.03555450960993767f, 0.9188249111175537f, 0.46709662675857544f, 0.7899346351623535f, 0.4031122624874115f, 0.35450479388237f, -0.5430477857589722f, 0.23456458747386932f, 0.7320350408554077f, 0.8018631339073181f, 0.9739702343940735f, 0.4660198986530304f, 0.1715080291032791f, 0.35035446286201477f, -0.6471338868141174f, 0.7628153562545776f, 0.05814775824546814f, 0.23114070296287537f, 0.2957269549369812f, 0.3897912800312042f, 0.49808773398399353f, 0.6402567028999329f, -0.573085606098175f, 0.9148749709129333f, 0.7056313753128052f, 0.9419196844100952f, 0.2676509618759155f, 0.47055837512016296f, 0.1476306915283203f, 0.49470338225364685f, -0.8596229553222656f, 0.5094148516654968f, 0.1629740595817566f, 0.9042540192604065f, 0.6111771464347839f, 0.11587060987949371f, 0.9424970149993896f, 0.13548140227794647f, -0.1695072501897812f, 0.4498971104621887f, 0.5683783292770386f, 0.48175564408302307f, 0.05308596417307854f, 0.9767572283744812f, 0.3969559371471405f, 0.09570572525262833f, -0.6491532921791077f, 0.9228039383888245f, 0.896552562713623f, 0.5683242082595825f, 0.2881931662559509f, 0.072280153632164f, 0.4133375585079193f, 0.2692722976207733f, -0.2542303800582886f, 0.9878479838371277f, 0.22349141538143158f, 0.15495631098747253f, 0.013599532656371593f, 0.033821605145931244f, 0.1185629814863205f, 0.4771253764629364f, -0.35478708148002625f, 0.4189060926437378f, 0.40158945322036743f, 0.292647123336792f, 0.8381525874137878f, 0.7537775039672852f, 0.6541634202003479f, 0.36304473876953125f, -0.310156911611557f, 0.48945051431655884f, 0.09216050058603287f, 0.02920081838965416f, 0.03142493590712547f, 0.9439442157745361f, 0.1523369550704956f, 0.007001382764428854f, -0.8860765099525452f, 0.08206278085708618f, 0.31045255064964294f, 0.4112643599510193f, 0.3154691457748413f, 0.5144814252853394f, 0.18844397366046906f, 0.8056083917617798f, -0.2692554295063019f, 0.125447615981102f, 0.16872356832027435f, 0.3502079248428345f, 0.6043121814727783f, 0.9920836687088013f, 0.260447233915329f, 0.7616464495658875f, -0.14495664834976196f, 0.08152640610933304f, 0.32832440733909607f, 0.41875195503234863f, 0.4260617196559906f, 0.6155707240104675f, 0.8219495415687561f, 0.11092996597290039f, -0.7458065152168274f, 0.7309009432792664f, 0.3214394450187683f, 0.33174505829811096f, 0.147166445851326f, 0.6699274182319641f, 0.43006861209869385f, 0.18399345874786377f, -0.39474058151245117f, 0.24513688683509827f, 0.31246811151504517f, 0.8850945234298706f, 0.7686156630516052f, 0.2680426836013794f, 0.1341213881969452f, 0.13873133063316345f, -0.6606055498123169f, 0.6546286344528198f, 0.8330703973770142f, 0.6367431879043579f, 0.44205594062805176f, 0.012225119397044182f, 0.7336005568504333f, 0.8224018216133118f, -0.7179977893829346f, 0.07674752920866013f, 0.8032384514808655f, 0.3669555187225342f, 0.9225559830665588f, 0.7808228731155396f, 0.9437717199325562f, 0.6235071420669556f, -0.2671278417110443f, 0.25645527243614197f, 0.3168334364891052f, 0.27602019906044006f, 0.5316522717475891f, 0.050821516662836075f, 0.7997130155563354f, 0.7867912650108337f, -0.8404317498207092f, 0.44396746158599854f, 0.4109608829021454f, 0.20401206612586975f, 0.174332857131958f, 0.5319149494171143f, 0.5967133641242981f, 0.4629541337490082f, -0.973738968372345f, 0.6170344352722168f, 0.645918607711792f, 0.8053847551345825f, 0.7602871060371399f, 0.8205150961875916f, 0.616430938243866f, 0.6730228662490845f, -0.009399962611496449f, 0.05235667899250984f, 0.8616966605186462f, 0.11722099781036377f, 0.5224562287330627f, 0.6901691555976868f, 0.2548883259296417f, 0.8167197704315186f, -0.6761224865913391f, 0.8293777704238892f, 0.6916384696960449f, 0.3159938454627991f, 0.017396416515111923f, 0.717520534992218f, 0.9609164595603943f, 0.49428462982177734f, -0.28911295533180237f, 0.3921397924423218f, 0.8356850743293762f, 0.29283785820007324f, 0.9707318544387817f, 0.9366278648376465f, 0.54173344373703f, 0.6082454323768616f, -0.5812581777572632f, 0.9722946286201477f, 0.7368392944335938f, 0.11720536649227142f, 0.7352351546287537f, 0.6981863379478455f, 0.5698988437652588f, 0.6579632759094238f, -0.1660027951002121f, 0.22588211297988892f, 0.21519896388053894f, 0.1336396038532257f, 0.36481335759162903f, 0.2683623135089874f, 0.37132909893989563f, 0.5887144804000854f, -0.26166602969169617f, 0.41020891070365906f, 0.2889697551727295f, 0.699037492275238f, 0.6451650857925415f, 0.1378268301486969f, 0.8484174609184265f, 0.1359134167432785f, -0.5201404094696045f, 0.4611566662788391f, 0.5942937135696411f, 0.7779800891876221f, 0.4315931797027588f, 0.36226534843444824f, 0.5738216042518616f, 0.500691294670105f, -0.48510605096817017f, 0.4402931034564972f, 0.04816480726003647f, 0.4559806287288666f, 0.5359756350517273f, 0.5173609852790833f, 0.17918244004249573f, 0.057099349796772f, -0.1733921766281128f, 0.5845046639442444f, 0.206597238779068f, 0.7691154479980469f, 0.671889066696167f, 0.3461243212223053f, 0.6897175312042236f, 0.6251626014709473f, -0.4020669162273407f, 0.44424569606781006f, 0.9688522219657898f, 0.15178687870502472f, 0.2465701401233673f, 0.5105077028274536f, 0.06219020485877991f, 0.5474531054496765f, -0.8871448636054993f, 0.7188752293586731f, 0.408825546503067f, 0.8946083784103394f, 0.8052918910980225f, 0.3603895306587219f, 0.48153191804885864f, 0.3376544117927551f, -0.20302820205688477f, 0.34647366404533386f, 0.09656374156475067f, 0.04241200536489487f, 0.3264390230178833f, 0.6061529517173767f, 0.5052862167358398f, 0.034281887114048004f, -0.2934820055961609f, 0.45588919520378113f, 0.2587430775165558f, 0.8555045127868652f, 0.5217013955116272f, 0.4187152087688446f, 0.0478903166949749f, 0.8972070217132568f, -0.9716139435768127f, 0.1991509050130844f, 0.2680269181728363f, 0.8972600102424622f, 0.12410131096839905f, 0.3329821825027466f, 0.7917224168777466f, 0.21445566415786743f, -0.8959187269210815f, 0.2808155119419098f, 0.3326273560523987f, 0.8787420988082886f, 0.5446502566337585f, 0.8888002038002014f, 0.6472389101982117f, 0.6733896136283875f, -0.6751962304115295f, 0.12396614253520966f, 0.6252506375312805f, 0.07419932633638382f, 0.9223961234092712f, 0.9351361393928528f, 0.2046942561864853f, 0.890041172504425f, -0.015012466348707676f, 0.5764695405960083f, 0.3663025498390198f, 0.6778659224510193f, 0.5654621720314026f, 0.8141050338745117f, 0.017442109063267708f, 0.693564236164093f, -0.1629023402929306f, 0.6050973534584045f, 0.05821866914629936f, 0.4334779679775238f, 0.8506979942321777f, 0.6451903581619263f, 0.8163205981254578f, 0.15912580490112305f, -0.9285476207733154f, 0.8308848142623901f, 0.4458628296852112f, 0.7483882308006287f, 0.2385559231042862f, 0.6217160820960999f, 0.7127841114997864f, 0.569770872592926f, -0.7943235635757446f, 0.4350520074367523f, 0.25241032242774963f, 0.885701060295105f, 0.5380563139915466f, 0.5586575865745544f, 0.8553155064582825f, 0.863579511642456f, -0.8723586201667786f, 0.7762735486030579f, 0.731010913848877f, 0.6321383714675903f, 0.5325256586074829f, 0.6161860823631287f, 0.3022797703742981f, 0.9979968667030334f, -0.591035008430481f, 0.9891685843467712f, 0.7332747578620911f, 0.840653121471405f, 0.5799674987792969f, 0.7698490023612976f, 0.3041985034942627f, 0.6014705300331116f, -0.5458062291145325f, 0.8415687084197998f, 0.46507999300956726f, 0.6275382041931152f, 0.017250346019864082f, 0.5793502926826477f, 0.09597083926200867f, 0.22699794173240662f, -0.5913304686546326f, 0.8433831930160522f, 0.34442391991615295f, 0.13631941378116608f, 0.22401678562164307f, 0.7559524178504944f, 0.6893948912620544f, 0.23412130773067474f, -0.33571818470954895f, 0.79590904712677f, 0.5959923267364502f, 0.12315060198307037f, 0.7344634532928467f, 0.49171024560928345f, 0.2218426913022995f, 0.47437119483947754f, -0.6324979662895203f, 0.603969156742096f, 0.41687798500061035f, 0.07871836423873901f, 0.28502407670021057f, 0.9059790372848511f, 0.3331717848777771f, 0.9068330526351929f, -0.8870763778686523f, 0.5391880869865417f, 0.523947536945343f, 0.6373129487037659f, 0.8542620539665222f, 0.7183850407600403f, 0.6930392384529114f, 0.6088777184486389f, -0.45262619853019714f, 0.9774307012557983f, 0.3854694664478302f, 0.6639783382415771f, 0.41477715969085693f, 0.4502577483654022f, 0.6761590242385864f, 0.47070133686065674f, -0.38072389364242554f, 0.4272060692310333f, 0.32285404205322266f, 0.316984087228775f, 0.5197309255599976f, 0.6693316698074341f, 0.5614221692085266f, 0.38798293471336365f, -0.8914610743522644f, 0.18691815435886383f, 0.5807967185974121f, 0.7972794771194458f, 0.3866814076900482f, 0.6304647922515869f, 0.8497623205184937f, 0.8956632018089294f, -0.9104547500610352f, 0.14395466446876526f, 0.35301125049591064f, 0.12888818979263306f, 0.3869949281215668f, 0.12621991336345673f, 0.8391367793083191f, 0.6285653710365295f, -0.5806482434272766f, 0.13574166595935822f, 0.6639844179153442f, 0.10114898532629013f, 0.09756526350975037f, 0.5372257828712463f, 0.4800558388233185f, 0.7710247039794922f, -0.7725378274917603f, 0.6008206605911255f, 0.2813388705253601f, 0.6261834502220154f, 0.9264856576919556f, 0.4543781280517578f, 0.13838931918144226f, 0.3589033782482147f, -0.7786268591880798f, 0.9081957340240479f, 0.8886200785636902f, 0.13611827790737152f, 0.38119032979011536f, 0.9519096612930298f, 0.06616923213005066f, 0.945400595664978f, -0.7474876642227173f, 0.1491021364927292f, 0.24961990118026733f, 0.011086855083703995f, 0.3409261107444763f, 0.46861591935157776f, 0.29624080657958984f, 0.948784589767456f, -0.8523033261299133f, 0.4782157242298126f, 0.30735960602760315f, 0.9423933029174805f, 0.8421871066093445f, 0.06978951394557953f, 0.5941833257675171f, 0.3697092533111572f, -0.42460107803344727f, 0.83275306224823f, 0.015151807107031345f, 0.38563546538352966f, 0.7307240962982178f, 0.7264812588691711f, 0.16923150420188904f, 0.3054932653903961f, -0.7005466818809509f, 0.8055554628372192f, 0.15297745168209076f, 0.4378177225589752f, 0.6008782982826233f, 0.008582212962210178f, 0.6402838230133057f, 0.44388943910598755f, -0.4622602164745331f, 0.6974669098854065f, 0.6669383645057678f, 0.13230887055397034f, 0.9339419007301331f, 0.1726103276014328f, 0.44784659147262573f, 0.496827632188797f, -0.6841338276863098f, 0.5787538290023804f, 0.411135733127594f, 0.1030377745628357f, 0.14955325424671173f, 0.5908706784248352f, 0.875744104385376f, 0.5842710137367249f, -0.8465527296066284f, 0.2897420823574066f, 0.5204318165779114f, 0.3912915587425232f, 0.15279299020767212f, 0.15062125027179718f, 0.9895071387290955f, 0.9624801278114319f, -0.8138465285301208f, 0.6900840401649475f, 0.8193027377128601f, 0.8065388202667236f, 0.5608724355697632f, 0.9449055194854736f, 0.11213374882936478f, 0.7577176094055176f, -0.3367660641670227f, 0.44397416710853577f, 0.028941085562109947f, 0.6836451888084412f, 0.9465893507003784f, 0.343330442905426f, 0.07185324281454086f, 0.491552472114563f, -0.022771267220377922f, 0.6751955151557922f, 0.37090131640434265f, 0.02409658022224903f, 0.05351271852850914f, 0.8416901230812073f, 0.8268870711326599f, 0.11680042743682861f, -0.394363135099411f, 0.575164794921875f, 0.7362685203552246f, 0.9840351939201355f, 0.3169493079185486f, 0.5360380411148071f, 0.6774803400039673f, 0.20601239800453186f, -0.07052341103553772f, 0.7381152510643005f, 0.8298466205596924f, 0.9769152998924255f, 0.33536121249198914f, 0.4856358766555786f, 0.8308171629905701f, 0.1657489687204361f, -0.5910062789916992f, 0.3861970603466034f, 0.9756128191947937f, 0.12927113473415375f, 0.6141495704650879f, 0.5885608792304993f, 0.015684738755226135f, 0.36380526423454285f, -0.5915386080741882f, 0.992830753326416f, 0.1707286238670349f, 0.7545862793922424f, 0.9754076600074768f, 0.2088521271944046f, 0.24000832438468933f, 0.007356021087616682f, -0.02020697295665741f, 0.12563112378120422f, 0.7877632975578308f, 0.07974306493997574f, 0.31354090571403503f, 0.734086275100708f, 0.2213437706232071f, 0.4983319938182831f, -0.10562313348054886f, 0.8608531355857849f, 0.26023226976394653f, 0.5099274516105652f, 0.33731698989868164f, 0.06122317537665367f, 0.5739719867706299f, 0.01445327140390873f, -0.280446320772171f, 0.6938439011573792f, 0.026940586045384407f, 0.613168478012085f, 0.8581166863441467f, 0.6451530456542969f, 0.7807445526123047f, 0.9842509627342224f, -0.5019070506095886f, 0.27613016963005066f, 0.2703421115875244f, 0.7366480827331543f, 0.5582936406135559f, 0.2539546489715576f, 0.8436710238456726f, 0.6260722279548645f, -0.13986945152282715f, 0.692211389541626f, 0.9303761124610901f, 0.7866083979606628f, 0.43735814094543457f, 0.029254548251628876f, 0.833381175994873f, 0.1800367385149002f, -0.14686298370361328f, 0.787718653678894f, 0.08580375462770462f, 0.5750778913497925f, 0.13911069929599762f, 0.801397979259491f, 0.28675052523612976f, 0.887645423412323f, -0.8090874552726746f, 0.08667637407779694f, 0.6846989989280701f, 0.3782983720302582f, 0.559731662273407f, 0.04204150289297104f, 0.9912713766098022f, 0.5557731986045837f, -0.9642137289047241f, 0.20763429999351501f, 0.38259145617485046f, 0.22463087737560272f, 0.879237949848175f, 0.6079792976379395f, 0.281858891248703f, 0.5018784999847412f, -0.7863637208938599f, 0.3119705319404602f, 0.13311123847961426f, 0.7430872917175293f, 0.9423171877861023f, 0.3245771527290344f, 0.8750672340393066f, 0.8934561014175415f, -0.6465232968330383f, 0.7536333799362183f, 0.1028238981962204f, 0.1360965073108673f, 0.018645569682121277f, 0.21559616923332214f, 0.9960381984710693f, 0.1538868546485901f, -0.10706135630607605f, 0.440338134765625f, 0.35787925124168396f, 0.24771304428577423f, 0.7348887920379639f, 0.017529474571347237f, 0.7778617739677429f, 0.11065597087144852f, -0.035391826182603836f, 0.16828849911689758f, 0.45154672861099243f, 0.9559593200683594f, 0.840890109539032f, 0.00875248946249485f, 0.8766775131225586f, 0.8844020366668701f, -0.6820033192634583f, 0.17108571529388428f, 0.6784678101539612f, 0.9692748188972473f, 0.8126532435417175f, 0.016120953485369682f, 0.09650783985853195f, 0.6469448208808899f, -0.6160104274749756f, 0.9147658348083496f, 0.8425121903419495f, 0.48545148968696594f, 0.3434509336948395f, 0.8047739267349243f, 0.2084665298461914f, 0.4056878983974457f, -0.7157080173492432f, 0.06983114033937454f, 0.8613166213035583f, 0.7113490700721741f, 0.5046603083610535f, 0.23369678854942322f, 0.7563912272453308f, 0.6570121645927429f, -0.14573462307453156f, 0.6065647602081299f, 0.46497422456741333f, 0.32030078768730164f, 0.9135589599609375f, 0.6434326767921448f, 0.4896189570426941f, 0.4698728024959564f, -0.014368807896971703f, 0.05617395415902138f, 0.47681161761283875f, 0.13583233952522278f, 0.42280250787734985f, 0.4001280963420868f, 0.8472206592559814f, 0.5113768577575684f, -0.05066696181893349f, 0.4029232859611511f, 0.49732106924057007f, 0.731098473072052f, 0.16768434643745422f, 0.061244282871484756f, 0.38321614265441895f, 0.6886568069458008f, -0.7589578032493591f, 0.960818886756897f, 0.07640533149242401f, 0.9302157163619995f, 0.7741881012916565f, 0.2334143966436386f, 0.3765467405319214f, 0.9705699682235718f, -0.25245022773742676f, 0.6382057070732117f, 0.6065461039543152f, 0.7321680188179016f, 0.6498728394508362f, 0.2706824243068695f, 0.6818041801452637f, 0.684881865978241f, -0.20792005956172943f, 0.2518446445465088f, 0.5115960240364075f, 0.5875706672668457f, 0.0015945136547088623f, 0.9678141474723816f, 0.8204004168510437f, 0.12846191227436066f, -0.3398500680923462f, 0.08814361691474915f, 0.5228490233421326f, 0.38693296909332275f, 0.7384182214736938f, 0.8532713055610657f, 0.684701681137085f, 0.5623427033424377f, -0.8469403386116028f, 0.15881173312664032f, 0.9434098601341248f, 0.2861170172691345f, 0.02625126577913761f, 0.8123814463615417f, 0.4939841628074646f, 0.039801523089408875f, -0.681305468082428f, 0.9578779339790344f, 0.07215353846549988f, 0.8382697105407715f, 0.8291354775428772f, 0.5453226566314697f, 0.24925069510936737f, 0.6868228912353516f, -0.9772471189498901f, 0.7595397233963013f, 0.30916666984558105f, 0.19020749628543854f, 0.12084270268678665f, 0.05246087536215782f, 0.2352902591228485f, 0.14481639862060547f, -0.698460042476654f, 0.23543387651443481f, 0.20480705797672272f, 0.7743790745735168f, 0.5246204733848572f, 0.5268077850341797f, 0.9543050527572632f, 0.18108469247817993f, -0.3819250166416168f, 0.11383844912052155f, 0.09382248669862747f, 0.4697505831718445f, 0.5540333390235901f, 0.9117158651351929f, 0.5334683656692505f, 0.41485103964805603f, -0.7508777976036072f, 0.9180283546447754f, 0.16280950605869293f, 0.6631913781166077f, 0.05725979432463646f, 0.11327716708183289f, 0.6993952393531799f, 0.5501794815063477f, -0.2399294525384903f, 0.35053905844688416f, 0.8637846112251282f, 0.035397641360759735f, 0.7525389194488525f, 0.32698291540145874f, 0.08548368513584137f, 0.5894939303398132f, -0.07644812762737274f, 0.1755823940038681f, 0.7200202345848083f, 0.5896889567375183f, 0.7233990430831909f, 0.4660235345363617f, 0.8210646510124207f, 0.09686808288097382f, -0.09447543323040009f, 0.08908680826425552f, 0.3854169547557831f, 0.9278231859207153f, 0.7249743938446045f, 0.7978757619857788f, 0.8586177229881287f, 0.1865389049053192f, -0.1215633749961853f, 0.06601734459400177f, 0.18589472770690918f, 0.04467252641916275f, 0.29052066802978516f, 0.3112856447696686f, 0.3665211796760559f, 0.8675499558448792f, -0.16348029673099518f, 0.33324024081230164f, 0.7348864078521729f, 0.05441461130976677f, 0.3401245176792145f, 0.6124370098114014f, 0.9422961473464966f, 0.751793622970581f, -0.4718681871891022f, 0.5842434167861938f, 0.29723912477493286f, 0.03179366886615753f, 0.026690708473324776f, 0.22341598570346832f, 0.11095612496137619f, 0.7888443470001221f, -0.7443777918815613f, 0.37115123867988586f, 0.2909356355667114f, 0.3299248218536377f, 0.8123462200164795f, 0.10965783894062042f, 0.8762907385826111f, 0.6034754514694214f, -0.12402749806642532f, 0.6499686241149902f, 0.016113344579935074f, 0.8039372563362122f, 0.803676187992096f, 0.3691469132900238f, 0.30518025159835815f, 0.681918740272522f, -0.8646519780158997f, 0.6952401399612427f, 0.9330714344978333f, 0.9500056505203247f, 0.01719984970986843f, 0.2460976094007492f, 0.4557158946990967f, 0.053307533264160156f, -0.7680910229682922f, 0.4012519419193268f, 0.41044431924819946f, 0.4040667414665222f, 0.0430331714451313f, 0.8362687826156616f, 0.7692044377326965f, 0.03760282322764397f, -0.6265044212341309f, 0.2915477454662323f, 0.6195985078811646f, 0.9546384215354919f, 0.28019440174102783f, 0.1204022467136383f, 0.7250564098358154f, 0.29389843344688416f, -0.357265442609787f, 0.8678358793258667f, 0.7714189291000366f, 0.8294873237609863f, 0.5163659453392029f, 0.2653334438800812f, 0.9013981223106384f, 0.8993914723396301f, -0.2882014811038971f, 0.888900876045227f, 0.9817736148834229f, 0.08715841174125671f, 0.24204407632350922f, 0.6798022985458374f, 0.1256091445684433f, 0.487040638923645f, -0.2797626256942749f, 0.3665769398212433f, 0.25458672642707825f, 0.45118576288223267f, 0.7538848519325256f, 0.39821338653564453f, 0.38776928186416626f, 0.10272405296564102f, -0.6928116679191589f, 0.44941747188568115f, 0.16693995893001556f, 0.9882492423057556f, 0.8157927393913269f, 0.44642436504364014f, 0.6371885538101196f, 0.36384695768356323f, -0.9938790798187256f, 0.06565391272306442f, 0.9576180577278137f, 0.599393367767334f, 0.05909882113337517f, 0.16827020049095154f, 0.19258202612400055f, 0.5319112539291382f, -0.9753149151802063f, 0.8932906985282898f, 0.3975279927253723f, 0.3387168049812317f, 0.6846097707748413f, 0.726972222328186f, 0.028152629733085632f, 0.4064737856388092f, -0.9054557085037231f, 0.333917498588562f, 0.29049381613731384f, 0.32576945424079895f, 0.29341208934783936f, 0.2743530571460724f, 0.030110204592347145f, 0.33574557304382324f, -0.8410340547561646f, 0.07846761494874954f, 0.5757548809051514f, 0.2949777841567993f, 0.2653646171092987f, 0.31741753220558167f, 0.8736227750778198f, 0.764233410358429f, -0.004261202644556761f, 0.48483023047447205f, 0.6064908504486084f, 0.03178536146879196f, 0.0904252678155899f, 0.661498486995697f, 0.0547337606549263f, 0.5962700247764587f, -0.09664206951856613f, 0.7878332734107971f, 0.21612049639225006f, 0.46878963708877563f, 0.2019471973180771f, 0.584169328212738f, 0.07506929337978363f, 0.05691147223114967f, -0.011718325316905975f, 0.022990942001342773f, 0.3326694369316101f, 0.17307166755199432f, 0.6143528819084167f, 0.5843643546104431f, 0.8574801087379456f, 0.18452395498752594f, -0.9886630773544312f, 0.4951699376106262f, 0.7847302556037903f, 0.15955902636051178f, 0.3901109993457794f, 0.5239661335945129f, 0.45267045497894287f, 0.7645560503005981f, -0.7293862700462341f, 0.34460484981536865f, 0.7286633253097534f, 0.6333282589912415f, 0.6192722320556641f, 0.5719969868659973f, 0.8992289900779724f, 0.30917423963546753f, -0.4387415945529938f, 0.2536029517650604f, 0.4127064049243927f, 0.1029459536075592f, 0.4508047103881836f, 0.6264867782592773f, 0.7490586638450623f, 0.00044522082316689193f, -0.07876996695995331f, 0.07229279726743698f, 0.24446991086006165f, 0.37736257910728455f, 0.7302505373954773f, 0.8600875735282898f, 0.6049473881721497f, 0.20967362821102142f, -0.16413912177085876f, 0.5910777449607849f, 0.7513987421989441f, 0.2434724122285843f, 0.07494805008172989f, 0.7938293218612671f, 0.2746768891811371f, 0.2839697003364563f, -0.41134124994277954f, 0.9302577376365662f, 0.2907528579235077f, 0.8367817401885986f, 0.2918859124183655f, 0.7056486010551453f, 0.756663978099823f, 0.7518205046653748f, -0.04441794008016586f, 0.024313783273100853f, 0.7936238646507263f, 0.9356544613838196f, 0.9949756264686584f, 0.04418271780014038f, 0.7687793970108032f, 0.6317713260650635f, -0.633836567401886f, 0.048008378595113754f, 0.7925376892089844f, 0.8809179067611694f, 0.580185055732727f, 0.01693100668489933f, 0.9128137230873108f, 0.1478653848171234f, -0.31831496953964233f, 0.9872797131538391f, 0.8343746066093445f, 0.09138569235801697f, 0.819645881652832f, 0.12573207914829254f, 0.025429803878068924f, 0.13866132497787476f, -0.6148591637611389f, 0.08945561945438385f, 0.16213059425354004f, 0.912736713886261f, 0.008928083814680576f, 0.9728158712387085f, 0.3430372178554535f, 0.5222191214561462f, -0.4043010175228119f, 0.4360538125038147f, 0.03338021785020828f, 0.9730793833732605f, 0.7109244465827942f, 0.1922673135995865f, 0.913914144039154f, 0.45959293842315674f, -0.9097583293914795f, 0.2825094163417816f, 0.653275191783905f, 0.6910052299499512f, 0.6407898664474487f, 0.9563938975334167f, 0.9697856307029724f, 0.9494918584823608f, -0.7559135556221008f, 0.7932574152946472f, 0.010926038026809692f, 0.8447306752204895f, 0.7944088578224182f, 0.8302474617958069f, 0.7530674934387207f, 0.615116536617279f, -0.5772239565849304f, 0.6950237154960632f, 0.23082858324050903f, 0.47042784094810486f, 0.9661473035812378f, 0.0479196161031723f, 0.1949196457862854f, 0.355874627828598f, -0.1326022446155548f, 0.9429299831390381f, 0.6646465063095093f, 0.14183039963245392f, 0.0013514406746253371f, 0.8081908822059631f, 0.7433236241340637f, 0.32307520508766174f, -0.6366959810256958f, 0.6512961387634277f, 0.17329339683055878f, 0.48457491397857666f, 0.7462176084518433f, 0.6048629283905029f, 0.11190617829561234f, 0.29133719205856323f, -0.5283889770507812f, 0.6586004495620728f, 0.060168370604515076f, 0.31095820665359497f, 0.6969570517539978f, 0.09229233860969543f, 0.6454614400863647f, 0.5460754632949829f, -0.2625581920146942f, 0.6636191010475159f, 0.36589619517326355f, 0.9660513401031494f, 0.5615622997283936f, 0.7656242251396179f, 0.7854034900665283f, 0.5208446383476257f, -0.18494901061058044f, 0.8961705565452576f, 0.3100813329219818f, 0.6411224007606506f, 0.9506891369819641f, 0.8549437522888184f, 0.4536099135875702f, 0.8425559401512146f, -0.48329034447669983f, 0.8318986296653748f, 0.8563674688339233f, 0.3898284137248993f, 0.003971199970692396f, 0.14584918320178986f, 0.5094730854034424f, 0.6551792621612549f, -0.239803746342659f, 0.6711183786392212f, 0.1932075321674347f, 0.012179726734757423f, 0.29248711466789246f, 0.7782580852508545f, 0.42753610014915466f, 0.04769597947597504f, -0.782103419303894f, 0.3210279047489166f, 0.4390588700771332f, 0.8164588212966919f, 0.9745340943336487f, 0.4269304573535919f, 0.89360511302948f, 0.685167133808136f, -0.22993406653404236f, 0.9837560653686523f, 0.9503665566444397f, 0.7860239148139954f, 0.5016794800758362f, 0.12119849026203156f, 0.6765124201774597f, 0.06853128224611282f, -0.7908626794815063f, 0.7648348212242126f, 0.9224116206169128f, 0.7453915476799011f, 0.1248040571808815f, 0.338489830493927f, 0.005466115660965443f, 0.7590189576148987f, -0.6536048650741577f, 0.8383882641792297f, 0.3775761127471924f, 0.3811506927013397f, 0.036347731947898865f, 0.7614910006523132f, 0.7057132720947266f, 0.08409199863672256f, -0.3792632818222046f, 0.42578256130218506f, 0.29358986020088196f, 0.28011059761047363f, 0.23068934679031372f, 0.1833214908838272f, 0.962753415107727f, 0.9862561225891113f, -0.9349318742752075f, 0.4147696793079376f, 0.07879664748907089f, 0.9703137874603271f, 0.6927222609519958f, 0.13880307972431183f, 0.8299866318702698f, 0.2781723141670227f, -0.34876739978790283f, 0.49156996607780457f, 0.5831945538520813f, 0.8043099641799927f, 0.16785991191864014f, 0.3427107632160187f, 0.2132977545261383f, 0.753079354763031f, -0.35214942693710327f, 0.17792506515979767f, 0.09550837427377701f, 0.7522542476654053f, 0.042873360216617584f, 0.28373825550079346f, 0.25170499086380005f, 0.49257341027259827f, -0.07544311881065369f, 0.10113813728094101f, 0.666883111000061f, 0.34937724471092224f, 0.2578652501106262f, 0.5350415706634521f, 0.10065823048353195f, 0.7360466122627258f, -0.4773646593093872f, 0.6139238476753235f, 0.7845150232315063f, 0.9887815117835999f, 0.7722562551498413f, 0.9477426409721375f, 0.2849132716655731f, 0.6745068430900574f, -0.36855900287628174f, 0.5571718215942383f, 0.7576513886451721f, 0.44583654403686523f, 0.5158693194389343f, 0.6507378816604614f, 0.8087670803070068f, 0.6506879925727844f, -0.6065201759338379f, 0.8830757141113281f, 0.04145784676074982f, 0.3017190396785736f, 0.7616400122642517f, 0.3893744945526123f, 0.9482032060623169f, 0.397393137216568f, -0.4985250234603882f, 0.5843909978866577f, 0.5729082822799683f, 0.9785208702087402f, 0.32443442940711975f, 0.08439001441001892f, 0.2345762848854065f, 0.9306065440177917f, -0.8760730624198914f, 0.2668599486351013f, 0.9344630837440491f, 0.8472908735275269f, 0.3441047966480255f, 0.08237072080373764f, 0.8050748705863953f, 0.2781820595264435f, -0.6139042377471924f, 0.00251325243152678f, 0.04581348970532417f, 0.5735417604446411f, 0.19534672796726227f, 0.09424593299627304f, 0.6376262307167053f, 0.1991405040025711f, -0.7843648195266724f, 0.19025665521621704f, 0.9505061507225037f, 0.26177552342414856f, 0.8718026876449585f, 0.6779983639717102f, 0.09669486433267593f, 0.4044732451438904f, -0.6599526405334473f, 0.8551424145698547f, 0.8272367715835571f, 0.6279160976409912f, 0.029592247679829597f, 0.20126469433307648f, 0.09144553542137146f, 0.7689235806465149f, -0.47124168276786804f, 0.16494247317314148f, 0.662390947341919f, 0.510837972164154f, 0.4863013029098511f, 0.29969528317451477f, 0.08259015530347824f, 0.6908091902732849f, -0.4041944146156311f, 0.42881661653518677f, 0.11030358821153641f, 0.7374189496040344f, 0.7428267598152161f, 0.46497946977615356f, 0.27723926305770874f, 0.685286283493042f, -0.07158797979354858f, 0.9387043714523315f, 0.5761652588844299f, 0.9211223125457764f, 0.7945824861526489f, 0.36549052596092224f, 0.09877798706293106f, 0.2856936752796173f, -0.8666336536407471f, 0.880562961101532f, 0.4817078113555908f, 0.549951434135437f, 0.010050722397863865f, 0.9585617780685425f, 0.7369028925895691f, 0.6218491196632385f, -0.36469408869743347f, 0.17501309514045715f, 0.22229382395744324f, 0.13878461718559265f, 0.37703749537467957f, 0.9977836012840271f, 0.9599407911300659f, 0.16215409338474274f, -0.7624929547309875f, 0.9800527691841125f, 0.7310412526130676f, 0.5907729268074036f, 0.6286306977272034f, 0.08135642111301422f, 0.4875880181789398f, 0.045957598835229874f, -0.6933141946792603f, 0.9925216436386108f, 0.41376420855522156f, 0.0876423716545105f, 0.34669458866119385f, 0.9472181797027588f, 0.5338744521141052f, 0.44528651237487793f, -0.7503891587257385f, 0.9152927398681641f, 0.006490414496511221f, 0.31231722235679626f, 0.3887307643890381f, 0.9899675846099854f, 0.7979501485824585f, 0.04972056671977043f, -0.10585687309503555f, 0.18963250517845154f, 0.16771650314331055f, 0.32463574409484863f, 0.47997045516967773f, 0.15190666913986206f, 0.40399396419525146f, 0.1013464704155922f, -0.5287491083145142f, 0.6014146208763123f, 0.6827195882797241f, 0.5579774975776672f, 0.853084921836853f, 0.06979139894247055f, 0.3291938006877899f, 0.7092452645301819f, -0.021474968641996384f, 0.3988267779350281f, 0.5029582977294922f, 0.1587734818458557f, 0.23865020275115967f, 0.8058273792266846f, 0.6250009536743164f, 0.6788139343261719f, -0.9016357660293579f, 0.3864710032939911f, 0.8250013589859009f, 0.5383221507072449f, 0.11391173303127289f, 0.4870486259460449f, 0.29046913981437683f, 0.7137712240219116f, -0.055534690618515015f, 0.21877151727676392f, 0.2869572937488556f, 0.17214229702949524f, 0.0040009417571127415f, 0.4512249827384949f, 0.936072051525116f, 0.5476560592651367f, -0.1572716236114502f, 0.2733710706233978f, 0.9748493432998657f, 0.8283900022506714f, 0.8538063764572144f, 0.8064865469932556f, 0.2173033207654953f, 0.9257944822311401f, -0.9085962176322937f, 0.8332266807556152f, 0.6385510563850403f, 0.08703726530075073f, 0.6454296112060547f, 0.48393839597702026f, 0.5446107387542725f, 0.8481709957122803f, -0.5439651608467102f, 0.04114187881350517f, 0.7201175093650818f, 0.0025146203115582466f, 0.14570511877536774f, 0.21373304724693298f, 0.4795949161052704f, 0.6309976577758789f, -0.7579938769340515f, 0.9207116365432739f, 0.27804505825042725f, 0.8028856515884399f, 0.180619016289711f, 0.14646074175834656f, 0.7498683929443359f, 0.4075147807598114f, -0.17925485968589783f, 0.998699426651001f, 0.6653057932853699f, 0.005419089458882809f, 0.034842997789382935f, 0.8856325149536133f, 0.3016397953033447f, 0.8769355416297913f, -0.7335561513900757f, 0.11506237834692001f, 0.8577383160591125f, 0.9300954341888428f, 0.0005215726559981704f, 0.8924421072006226f, 0.40567919611930847f, 0.4888036251068115f, -0.9913859367370605f, 0.10000284016132355f, 0.6026101112365723f, 0.7278786897659302f, 0.9491415023803711f, 0.9653273820877075f, 0.18362440168857574f, 0.4623917043209076f, -0.7381437420845032f, 0.6458967328071594f, 0.03275468945503235f, 0.5454129576683044f, 0.5338274836540222f, 0.4264419376850128f, 0.10548180341720581f, 0.973400890827179f, -0.9203672409057617f, 0.44876357913017273f, 0.5820426344871521f, 0.5227457284927368f, 0.5179756879806519f, 0.6488329172134399f, 0.5271041989326477f, 0.6771373152732849f, -0.7210438847541809f, 0.9065301418304443f, 0.8826147317886353f, 0.3932361304759979f, 0.2478858232498169f, 0.24256743490695953f, 0.2646522521972656f, 0.8130378127098083f, -0.7624456882476807f, 0.7349118590354919f, 0.5959066152572632f, 0.8689310550689697f, 0.3795170783996582f, 0.9844340682029724f, 0.13203869760036469f, 0.18804684281349182f, -0.30880194902420044f, 0.9756155610084534f, 0.990665853023529f, 0.2674162685871124f, 0.7856917381286621f, 0.8879289627075195f, 0.525495171546936f, 0.9669732451438904f, -0.6018437743186951f, 0.8832491040229797f, 0.44382068514823914f, 0.6119584441184998f, 0.6953219175338745f, 0.3244391977787018f, 0.6383292078971863f, 0.3994210958480835f, -0.36288830637931824f, 0.4466867744922638f, 0.715302050113678f, 0.8694571852684021f, 0.31505054235458374f, 0.3343726694583893f, 0.01589365117251873f, 0.9262186884880066f, -0.6067675352096558f, 0.8414624333381653f, 0.3849424421787262f, 0.15704792737960815f, 0.5227499008178711f, 0.06420423090457916f, 0.566132664680481f, 0.7066459059715271f, -0.2223857343196869f, 0.03194793313741684f, 0.8835428953170776f, 0.9045809507369995f, 0.16342467069625854f, 0.3217795193195343f, 0.17710965871810913f, 0.5478730797767639f, -0.9368842244148254f, 0.6600053906440735f, 0.7756055593490601f, 0.4674818813800812f, 0.507188618183136f, 0.4346967935562134f, 0.40459027886390686f, 0.13388705253601074f, -0.2584279775619507f, 0.293306827545166f, 0.45464715361595154f, 0.6187553405761719f, 0.9444484710693359f, 0.6565865278244019f, 0.21863947808742523f, 0.9610964059829712f, -0.6373080015182495f, 0.49550071358680725f, 0.5492646098136902f, 0.1771032065153122f, 0.34116125106811523f, 0.09707531332969666f, 0.11891913414001465f, 0.4864026606082916f, -0.23359590768814087f, 0.9465281963348389f, 0.6005772948265076f, 0.7854273319244385f, 0.17442548274993896f, 0.773354709148407f, 0.8050458431243896f, 0.0834650918841362f, -0.043557845056056976f, 0.6025470495223999f, 0.5537768602371216f, 0.8268806338310242f, 0.7079809308052063f, 0.11260014027357101f, 0.05233815684914589f, 0.3198406994342804f, -0.05497858300805092f, 0.43899187445640564f, 0.24031221866607666f, 0.8047224283218384f, 0.2775653600692749f, 0.6109673380851746f, 0.5833351612091064f, 0.321729838848114f, -0.13425388932228088f, 0.862678587436676f, 0.9675652980804443f, 0.3993484377861023f, 0.46419236063957214f, 0.4285848140716553f, 0.06893576681613922f, 0.556414783000946f, -0.9572418928146362f, 0.9171788692474365f, 0.3371049761772156f, 0.05384732782840729f, 0.5084891319274902f, 0.512633204460144f, 0.6702267527580261f, 0.02337871678173542f, -0.7349480390548706f, 0.5341704487800598f, 0.5215824246406555f, 0.2732921242713928f, 0.4708387851715088f, 0.05068393796682358f, 0.02598799578845501f, 0.8701491355895996f, -0.2918263375759125f, 0.037079814821481705f, 0.721720278263092f, 0.9779706001281738f, 0.22863797843456268f, 0.9322694540023804f, 0.8676698803901672f, 0.6642686128616333f, -0.05278206989169121f, 0.9495232701301575f, 0.5988089442253113f, 0.6006585955619812f, 0.34216660261154175f, 0.9607924222946167f, 0.7394202351570129f, 0.2974722385406494f, -0.012667782604694366f, 0.3889263868331909f, 0.9688980579376221f, 0.437237948179245f, 0.9741547703742981f, 0.8684135675430298f, 0.2867984473705292f, 0.701504647731781f, -0.4587220847606659f, 0.4135758876800537f, 0.20340397953987122f, 0.9420310258865356f, 0.44362935423851013f, 0.34773361682891846f, 0.05237603560090065f, 0.8167245984077454f, -0.9165322184562683f, 0.6259825229644775f, 0.03332268446683884f, 0.030864708125591278f, 0.27135995030403137f, 0.38024306297302246f, 0.24873194098472595f, 0.4942443072795868f, -0.04870559647679329f, 0.1914152354001999f, 0.7168521285057068f, 0.42088577151298523f, 0.08819296211004257f, 0.035589590668678284f, 0.017620697617530823f, 0.31212854385375977f, -0.29654932022094727f, 0.22425895929336548f, 0.288164347410202f, 0.19002392888069153f, 0.333629846572876f, 0.4367729723453522f, 0.4365070164203644f, 0.629426896572113f, -0.7143768072128296f, 0.36611756682395935f, 0.5172514915466309f, 0.817193865776062f, 0.27662530541419983f, 0.7526592016220093f, 0.420512318611145f, 0.006228818092495203f, -0.6646748185157776f, 0.5873421430587769f, 0.5510156750679016f, 0.7608530521392822f, 0.9323219060897827f, 0.9798851013183594f, 0.09075550734996796f, 0.16258209943771362f, -0.8244577050209045f, 0.9183695316314697f, 0.62275630235672f, 0.09760156273841858f, 0.32650408148765564f, 0.20876766741275787f, 0.21256379783153534f, 0.4735081195831299f, -0.17987337708473206f, 0.2934572994709015f, 0.3740229308605194f, 0.5046547651290894f, 0.9277603626251221f, 0.43845346570014954f, 0.5469386577606201f, 0.2716142237186432f, -0.9713029265403748f, 0.41416609287261963f, 0.17717880010604858f, 0.3966935873031616f, 0.3467603921890259f, 0.9826468229293823f, 0.9239424467086792f, 0.8118666410446167f, -0.5863435864448547f, 0.4308364987373352f, 0.6675500273704529f, 0.12633351981639862f, 0.0366828627884388f, 0.5610260367393494f, 0.34004443883895874f, 0.8327739834785461f, -0.8639973402023315f, 0.6172688603401184f, 0.7601427435874939f, 0.6317766904830933f, 0.6536183953285217f, 0.8932687640190125f, 0.7266107797622681f, 0.5455693006515503f, -0.7336761355400085f, 0.12702538073062897f, 0.9498847723007202f, 0.7926077246665955f, 0.37291327118873596f, 0.06396453082561493f, 0.5437816381454468f, 0.9716270565986633f, -0.5615228414535522f, 0.05745137110352516f, 0.6014072299003601f, 0.7120459675788879f, 0.7103917598724365f, 0.9312072992324829f, 0.13516411185264587f, 0.8282627463340759f, -0.4460095763206482f, 0.09687962383031845f, 0.9032135605812073f, 0.16904668509960175f, 0.8088201880455017f, 0.973028302192688f, 0.9213247299194336f, 0.23215655982494354f, -0.8037599325180054f, 0.027256067842245102f, 0.767890453338623f, 0.06836600601673126f, 0.45621171593666077f, 0.16111813485622406f, 0.06254827976226807f, 0.6345580220222473f, -0.41803646087646484f, 0.11020034551620483f, 0.645626962184906f, 0.01883104257285595f, 0.49786755442619324f, 0.011359899304807186f, 0.47918951511383057f, 0.6795095205307007f, -0.4580113887786865f, 0.4201291501522064f, 0.12714308500289917f, 0.5752747058868408f, 0.9485316872596741f, 0.8299835920333862f, 0.9378663897514343f, 0.9747726917266846f, -0.21435576677322388f, 0.8528374433517456f, 0.5242013335227966f, 0.2978428304195404f, 0.8513256311416626f, 0.08136501908302307f, 0.2716643810272217f, 0.8224038481712341f, -0.4768540561199188f, 0.46470585465431213f, 0.42638522386550903f, 0.7910351157188416f, 0.5261111259460449f, 0.33041059970855713f, 0.4465606212615967f, 0.5737286806106567f, -0.013953810557723045f, 0.04466793313622475f, 0.04052199050784111f, 0.02981722168624401f, 0.8841931223869324f, 0.9766601324081421f, 0.5562344789505005f, 0.05444332957267761f, -0.6304769515991211f, 0.3675941526889801f, 0.24932615458965302f, 0.5078994035720825f, 0.19054678082466125f, 0.7986136674880981f, 0.24023742973804474f, 0.2750784158706665f, -0.5353006720542908f, 0.11075004935264587f, 0.03968311846256256f, 0.08950462937355042f, 0.1995040625333786f, 0.786311686038971f, 0.8520091772079468f, 0.010042225942015648f, -0.8703677654266357f, 0.6716063022613525f, 0.2722695767879486f, 0.04013777896761894f, 0.8538535833358765f, 0.030493296682834625f, 0.6658965945243835f, 0.46261531114578247f, -0.23514613509178162f, 0.22988055646419525f, 0.36666038632392883f, 0.800300121307373f, 0.3412182331085205f, 0.19157053530216217f, 0.5112529397010803f, 0.8357715606689453f, -0.7493805885314941f, 0.5181866884231567f, 0.8985675573348999f, 0.17562714219093323f, 0.39623814821243286f, 0.131174698472023f, 0.24772320687770844f, 0.1737988293170929f, -0.15636056661605835f, 0.061143659055233f, 0.6440856456756592f, 0.13842664659023285f, 0.2008061707019806f, 0.3076671063899994f, 0.3500361740589142f, 0.7710179686546326f, -0.2634086310863495f, 0.8677842617034912f, 0.907367467880249f, 0.8900479674339294f, 0.6105782389640808f, 0.5878465175628662f, 0.23712219297885895f, 0.06278617680072784f, -0.7179824709892273f, 0.9451614022254944f, 0.08619652688503265f, 0.12373146414756775f, 0.20042765140533447f, 0.42055806517601013f, 0.33286571502685547f, 0.36013004183769226f, -0.6836603283882141f, 0.5872382521629333f, 0.2014375776052475f, 0.06079413741827011f, 0.171397864818573f, 0.278994619846344f, 0.6115704774856567f, 0.5809871554374695f, -0.11881336569786072f, 0.6712685227394104f, 0.6580803990364075f, 0.6125351190567017f, 0.7885386347770691f, 0.4423608183860779f, 0.766860842704773f, 0.5036579370498657f, -0.33389657735824585f, 0.5293684005737305f, 0.038482364267110825f, 0.8863275647163391f, 0.9115337133407593f, 0.527835488319397f, 0.6861280202865601f, 0.36776003241539f, -0.18002676963806152f, 0.5173658728599548f, 0.0973282977938652f, 0.3612915873527527f, 0.6824605464935303f, 0.044325489550828934f, 0.8786062598228455f, 0.3002982437610626f, -0.07108943909406662f, 0.5145874619483948f, 0.07756256312131882f, 0.40954893827438354f, 0.17144426703453064f, 0.12799234688282013f, 0.41127899289131165f, 0.23838427662849426f, -0.9181967377662659f, 0.879147469997406f, 0.6688607931137085f, 0.3542763888835907f, 0.5723506808280945f, 0.39345690608024597f, 0.2866111993789673f, 0.32155972719192505f, -0.05645448714494705f, 0.30990898609161377f, 0.5600886940956116f, 0.815671980381012f, 0.014394175261259079f, 0.7990754842758179f, 0.7882946729660034f, 0.7146083116531372f, -0.5856119394302368f, 0.43640589714050293f, 0.029386507347226143f, 0.46932119131088257f, 0.6958363056182861f, 0.05313317850232124f, 0.75124192237854f, 0.07662643492221832f, -0.98370361328125f, 0.615498960018158f, 0.5519937872886658f, 0.14559897780418396f, 0.35684144496917725f, 0.768724262714386f, 0.7415106296539307f, 0.27903860807418823f, -0.9086636900901794f, 0.15073107182979584f, 0.12303995341062546f, 0.3651772439479828f, 0.10448141396045685f, 0.1827717125415802f, 0.9581353068351746f, 0.8511130809783936f, -0.00866237934678793f, 0.9018629193305969f, 0.28010478615760803f, 0.6597284078598022f, 0.054485470056533813f, 0.19134609401226044f, 0.0034586098045110703f, 0.025452515110373497f, -0.3873855471611023f, 0.18104137480258942f, 0.4606319069862366f, 0.541780948638916f, 0.7078660130500793f, 0.43827489018440247f, 0.9244052171707153f, 0.9730387330055237f, -0.915026068687439f, 0.5626338124275208f, 0.1391967236995697f, 0.3036551773548126f, 0.2467506378889084f, 0.5949694514274597f, 0.6336968541145325f, 0.551069438457489f, -0.5178200602531433f, 0.38137441873550415f, 0.11146840453147888f, 0.6773236393928528f, 0.37365227937698364f, 0.0007974741165526211f, 0.3478687107563019f, 0.9644007682800293f, -0.37234067916870117f, 0.30588123202323914f, 0.8719252943992615f, 0.6221988201141357f, 0.632462203502655f, 0.33807462453842163f, 0.10739551484584808f, 0.035846058279275894f, -0.028594132512807846f, 0.9089280366897583f, 0.2791672646999359f, 0.6912275552749634f, 0.16341643035411835f, 0.06194670498371124f, 0.03198746591806412f, 0.02114650048315525f, -0.3999820649623871f, 0.3385744094848633f, 0.48822495341300964f, 0.704428493976593f, 0.2668484151363373f, 0.7352273464202881f, 0.831195592880249f, 0.3042926490306854f, -0.9598326683044434f, 0.9993429183959961f, 0.8713042140007019f, 0.931380033493042f, 0.7650330066680908f, 0.3854674696922302f, 0.12496570497751236f, 0.23819296061992645f, -0.712018609046936f, 0.2165939211845398f, 0.6035711765289307f, 0.8069830536842346f, 0.20876537263393402f, 0.755961537361145f, 0.6039687991142273f, 0.331606388092041f, -0.24424462020397186f, 0.09918971359729767f, 0.5569429993629456f, 0.6764028668403625f, 0.8728955388069153f, 0.023114265874028206f, 0.5397131443023682f, 0.6466006636619568f, -0.4002063572406769f, 0.22084791958332062f, 0.5497082471847534f, 0.8603091835975647f, 0.31946083903312683f, 0.7093508839607239f, 0.7159234881401062f, 0.20458769798278809f, -0.6345570087432861f, 0.6824015974998474f, 0.3199262022972107f, 0.7677657604217529f, 0.5231610536575317f, 0.5059133172035217f, 0.1303415596485138f, 0.28298482298851013f, -0.7251383066177368f, 0.7548080086708069f, 0.17083017528057098f, 0.29095861315727234f, 0.7172895669937134f, 0.4919331669807434f, 0.6788785457611084f, 0.46764758229255676f, -0.5986668467521667f, 0.9072087407112122f, 0.813734233379364f, 0.3783164322376251f, 0.47036269307136536f, 0.9925896525382996f, 0.2748982012271881f, 0.8246249556541443f, -0.051040876656770706f, 0.2211427390575409f, 0.016888661310076714f, 0.6088048219680786f, 0.4730810225009918f, 0.515925943851471f, 0.19401000440120697f, 0.4295938014984131f, -0.17428523302078247f, 0.38889116048812866f, 0.7946352958679199f, 0.848594069480896f, 0.4280951917171478f, 0.023028234019875526f, 0.32429608702659607f, 0.5008863806724548f, -0.161228209733963f, 0.8901051878929138f, 0.044531114399433136f, 0.0737985223531723f, 0.4863181710243225f, 0.749483585357666f, 0.9790109992027283f, 0.40368345379829407f, -0.20976205170154572f, 0.06232644245028496f, 0.9170726537704468f, 0.005488025955855846f, 0.8742836713790894f, 0.10295163094997406f, 0.7377424836158752f, 0.2197878509759903f, -0.4429037868976593f, 0.33534926176071167f, 0.7591248750686646f, 0.5545022487640381f, 0.13153184950351715f, 0.23634886741638184f, 0.5434932708740234f, 0.9462414383888245f, -0.6076758503913879f, 0.30403390526771545f, 0.09076262265443802f, 0.744964063167572f, 0.0049162860959768295f, 0.7369107007980347f, 0.14363031089305878f, 0.9967119693756104f, -0.5103927254676819f, 0.15006089210510254f, 0.15037846565246582f, 0.6490258574485779f, 0.9015944600105286f, 0.1398557722568512f, 0.9739606380462646f, 0.6993315815925598f, -0.21468858420848846f, 0.8063620924949646f, 0.584922194480896f, 0.33877280354499817f, 0.6049248576164246f, 0.9651584625244141f, 0.4875258207321167f, 0.854967474937439f, -0.2795358896255493f, 0.2863442003726959f, 0.029966304078698158f, 0.7799837589263916f, 0.049194954335689545f, 0.6285830140113831f, 0.424304336309433f, 0.6468284130096436f, -0.5193585753440857f, 0.9199587106704712f, 0.23463748395442963f, 0.7488381862640381f, 0.9893834590911865f, 0.44169899821281433f, 0.8727304339408875f, 0.21476581692695618f, -0.7171489596366882f, 0.521247386932373f, 0.1035064309835434f, 0.0009757730294950306f, 0.5878786444664001f, 0.0748012363910675f, 0.4954972565174103f, 0.3366919457912445f, -0.4312301278114319f, 0.33575671911239624f, 0.18211263418197632f, 0.9193096160888672f, 0.28407925367355347f, 0.7502538561820984f, 0.5321775078773499f, 0.008986053057014942f, -0.4025987982749939f, 0.47307175397872925f, 0.5695226192474365f, 0.32466983795166016f, 0.662639319896698f, 0.5337893962860107f, 0.07863305509090424f, 0.20928409695625305f, -0.5968363285064697f, 0.9486231207847595f, 0.5282689332962036f, 0.6487128734588623f, 0.5795484185218811f, 0.20384785532951355f, 0.11040379852056503f, 0.1203836128115654f, -0.2233877182006836f, 0.09513305872678757f, 0.11999441683292389f, 0.20864689350128174f, 0.6813857555389404f, 0.3534015715122223f, 0.27288755774497986f, 0.5248751044273376f, -0.8976340293884277f, 0.06070314347743988f, 0.13224588334560394f, 0.7209995985031128f, 0.9659234881401062f, 0.5748832821846008f, 0.8223559856414795f, 0.5234672427177429f, -0.0859995037317276f, 0.7746442556381226f, 0.9503486752510071f, 0.14258502423763275f, 0.8903311491012573f, 0.5668653249740601f, 0.06798787415027618f, 0.992548406124115f, -0.54244464635849f, 0.29593685269355774f, 0.050144560635089874f, 0.6136807799339294f, 0.5437244176864624f, 0.7037314176559448f, 0.8214725852012634f, 0.796631932258606f, -0.6454946398735046f, 0.10758902877569199f, 0.5944193005561829f, 0.9027301073074341f, 0.08852066099643707f, 0.37996000051498413f, 0.29910075664520264f, 0.1712224781513214f, -0.18846741318702698f, 0.04258577898144722f, 0.6873080730438232f, 0.6947828531265259f, 0.1035447046160698f, 0.6256124377250671f, 0.33731919527053833f, 0.9253094792366028f, -0.8476178050041199f, 0.05284365639090538f, 0.13755792379379272f, 0.866783618927002f, 0.0031357151456177235f, 0.1780020296573639f, 0.35040152072906494f, 0.11702515929937363f, -0.7981326580047607f, 0.8110039830207825f, 0.22183598577976227f, 0.6991956830024719f, 0.7900024652481079f, 0.2134862244129181f, 0.14609287679195404f, 0.6658741235733032f, -0.7754583358764648f, 0.3818375766277313f, 0.7387558817863464f, 0.010944724082946777f, 0.3235340714454651f, 0.7286975979804993f, 0.09995219111442566f, 0.8966689109802246f, -0.0740266814827919f, 0.9908351302146912f, 0.17263074219226837f, 0.48641160130500793f, 0.30318933725357056f, 0.6863183379173279f, 0.7657597064971924f, 0.4830791652202606f, -0.0033567834179848433f, 0.02054254710674286f, 0.22635386884212494f, 0.31826743483543396f, 0.2343585342168808f, 0.3331945836544037f, 0.3741810619831085f, 0.11628556996583939f, -0.443527489900589f, 0.012798980809748173f, 0.977130115032196f, 0.778922975063324f, 0.8780348300933838f, 0.2764292359352112f, 0.6718190312385559f, 0.8549280762672424f, -0.6228219270706177f, 0.3320481479167938f, 0.14433491230010986f, 0.5843499898910522f, 0.6022672057151794f, 0.1010238379240036f, 0.5054509043693542f, 0.565884530544281f, -0.9264348149299622f, 0.0048343888483941555f, 0.9878028631210327f, 0.20137447118759155f, 0.3688364326953888f, 0.1920149177312851f, 0.5491610765457153f, 0.2821856141090393f, -0.5065242052078247f, 0.9885287284851074f, 0.9656903147697449f, 0.17383722960948944f, 0.7933351397514343f, 0.47575893998146057f, 0.7318665981292725f, 0.9763631820678711f, -0.3423798978328705f, 0.6752041578292847f, 0.04517406225204468f, 0.055322032421827316f, 0.8077290654182434f, 0.23812484741210938f, 0.2309282273054123f, 0.6743488311767578f, -0.5402691960334778f, 0.19247445464134216f, 0.940376877784729f, 0.2897488474845886f, 0.9923412203788757f, 0.8228470683097839f, 0.7770058512687683f, 0.579170823097229f, -0.8466499447822571f, 0.32162851095199585f, 0.781430721282959f, 0.6652041673660278f, 0.3788222670555115f, 0.10084675997495651f, 0.56421959400177f, 0.27184656262397766f, -0.8904532790184021f, 0.4381665587425232f, 0.2876928746700287f, 0.6043225526809692f, 0.1870211511850357f, 0.34220370650291443f, 0.5865172147750854f, 0.348795622587204f, -0.13029593229293823f, 0.3398073613643646f, 0.0606205128133297f, 0.1290922313928604f, 0.4603935778141022f, 0.5104222893714905f, 0.8543688654899597f, 0.10675061494112015f, -0.43680328130722046f, 0.23631174862384796f, 0.13825179636478424f, 0.7262546420097351f, 0.5515318512916565f, 0.9598795771598816f, 0.27684926986694336f, 0.08156324923038483f, -0.4367811977863312f, 0.34082457423210144f, 0.14699959754943848f, 0.804344892501831f, 0.5730154514312744f, 0.11836280673742294f, 0.3371753692626953f, 0.08860166370868683f, -0.8266354203224182f, 0.6188896298408508f, 0.11951463669538498f, 0.23224401473999023f, 0.508875846862793f, 0.8986866474151611f, 0.3674052953720093f, 0.7923593521118164f, -0.7744452953338623f, 0.15112972259521484f, 0.16225974261760712f, 0.9863560199737549f, 0.7212172150611877f, 0.42887452244758606f, 0.5585346221923828f, 0.5299484729766846f, -0.6193928122520447f, 0.2364741861820221f, 0.9019690155982971f, 0.6869876980781555f, 0.04063866287469864f, 0.3435862064361572f, 0.9552468657493591f, 0.11432331800460815f, -0.8600411415100098f, 0.932452917098999f, 0.24712330102920532f, 0.8656270503997803f, 0.8424462080001831f, 0.5562304258346558f, 0.7538925409317017f, 0.32498836517333984f, -0.4461856484413147f, 0.23122432827949524f, 0.4976823627948761f, 0.21673239767551422f, 0.47105684876441956f, 0.019671225920319557f, 0.8204006552696228f, 0.3945792019367218f, -0.7581186294555664f, 0.5635943412780762f, 0.23244276642799377f, 0.21512319147586823f, 0.2053288072347641f, 0.6621033549308777f, 0.8809362649917603f, 0.24662891030311584f, -0.24626994132995605f, 0.8897897601127625f, 0.7922726273536682f, 0.7329407930374146f, 0.9917234778404236f, 0.5573483109474182f, 0.819095253944397f, 0.3830276429653168f, -0.21054749190807343f, 0.16219335794448853f, 0.7913453578948975f, 0.17532576620578766f, 0.6017152070999146f, 0.6287684440612793f, 0.7777588367462158f, 0.3427661657333374f, -0.4237472414970398f, 0.4478555917739868f, 0.6673077344894409f, 0.34215694665908813f, 0.0709611177444458f, 0.8979319334030151f, 0.42296233773231506f, 0.47596386075019836f, -0.4338269531726837f, 0.8751614093780518f, 0.25866949558258057f, 0.29524093866348267f, 0.28542372584342957f, 0.6307626962661743f, 0.7280638217926025f, 0.5653235912322998f, -0.3932591378688812f, 0.4689616858959198f, 0.8965689539909363f, 0.3864342272281647f, 0.30104708671569824f, 0.5708969831466675f, 0.4766426980495453f, 0.43145424127578735f, -0.6826632618904114f, 0.10153532028198242f, 0.6727072596549988f, 0.7960666418075562f, 0.05650920420885086f, 0.029501741752028465f, 0.14812210202217102f, 0.5541500449180603f, -0.9213258028030396f, 0.7237659692764282f, 0.779100239276886f, 0.7216024994850159f, 0.7626216411590576f, 0.9064077138900757f, 0.869067370891571f, 0.14743122458457947f, -0.5938329100608826f, 0.5532617568969727f, 0.4146731197834015f, 0.5248888731002808f, 0.9686517715454102f, 0.6733002066612244f, 0.6171807646751404f, 0.5435484647750854f, -0.4962114989757538f, 0.9330986142158508f, 0.8418322205543518f, 0.1694672405719757f, 0.5009800791740417f, 0.5589043498039246f, 0.3839021921157837f, 0.5095014572143555f, -0.7671968340873718f, 0.9425151944160461f, 0.9121460914611816f, 0.7611616253852844f, 0.3949003517627716f, 0.7869425415992737f, 0.5159453749656677f, 0.353869765996933f, -0.09796354919672012f, 0.11211205273866653f, 0.8271550536155701f, 0.24330617487430573f, 0.5408795475959778f, 0.0001764174667187035f, 0.8898177742958069f, 0.7206181287765503f, -0.5596328377723694f, 0.21213291585445404f, 0.13200317323207855f, 0.9693681597709656f, 0.8045712113380432f, 0.827468752861023f, 0.5156468749046326f, 0.01732339709997177f, -0.16322839260101318f, 0.959412157535553f, 0.39510998129844666f, 0.6203076839447021f, 0.705350399017334f, 0.8646471500396729f, 0.8356266617774963f, 0.1431175321340561f, -0.23705187439918518f, 0.9180673956871033f, 0.5793291926383972f, 0.2160181850194931f, 0.49717774987220764f, 0.10756716132164001f, 0.09375211596488953f, 0.22437386214733124f, -0.6521756052970886f, 0.13371479511260986f, 0.13976925611495972f, 0.7714777588844299f, 0.5741217136383057f, 0.4316536784172058f, 0.8843638300895691f, 0.5472531914710999f, -0.19684290885925293f, 0.38675937056541443f, 0.8583083152770996f, 0.7151028513908386f, 0.254365473985672f, 0.5653918385505676f, 0.7804433107376099f, 0.15078333020210266f, -0.6770352125167847f, 0.9553616642951965f, 0.6690917611122131f, 0.8394330143928528f, 0.15464121103286743f, 0.26536744832992554f, 0.4460550546646118f, 0.5504419207572937f, -0.8891701698303223f, 0.5251583456993103f, 0.0027819820679724216f, 0.7627416849136353f, 0.4490964710712433f, 0.6716323494911194f, 0.05438699200749397f, 0.10275671631097794f, -0.4403013586997986f, 0.6102527379989624f, 0.05542979761958122f, 0.541450023651123f, 0.42222318053245544f, 0.24125808477401733f, 0.5815708637237549f, 0.40185531973838806f, -0.060458093881607056f, 0.7857876420021057f, 0.2813257873058319f, 0.7377610206604004f, 0.9568761587142944f, 0.5852439403533936f, 0.5432044267654419f, 0.07040871679782867f, -0.24703748524188995f, 0.17579883337020874f, 0.8495966196060181f, 0.34608498215675354f, 0.8280900716781616f, 0.6742631196975708f, 0.1660822182893753f, 0.01734362356364727f, -0.42674121260643005f, 0.587960958480835f, 0.16828855872154236f, 0.45275306701660156f, 0.0837491974234581f, 0.05176764354109764f, 0.3970326781272888f, 0.2994249165058136f, -0.5605229735374451f, 0.5375052094459534f, 0.8391225934028625f, 0.8762380480766296f, 0.2715645432472229f, 0.36593613028526306f, 0.23769178986549377f, 0.529590368270874f, -0.8530558943748474f, 0.5873739123344421f, 0.18072664737701416f, 0.584331750869751f, 0.508398711681366f, 0.6918764114379883f, 0.9345821142196655f, 0.5014802813529968f, -0.30197030305862427f, 0.6095182299613953f, 0.2709110975265503f, 0.6144899725914001f, 0.5774583220481873f, 0.05251414701342583f, 0.5077508687973022f, 0.3788277208805084f, -0.18349087238311768f, 0.13412874937057495f, 0.5106151103973389f, 0.10133116692304611f, 0.9434241652488708f, 0.7259334325790405f, 0.68369460105896f, 0.12150511890649796f, -0.12239764630794525f, 0.6563989520072937f, 0.47386065125465393f, 0.09896297752857208f, 0.7871431708335876f, 0.3328056037425995f, 0.24656742811203003f, 0.6251744031906128f, -0.9507815837860107f, 0.3874150216579437f, 0.06490515917539597f, 0.782503604888916f, 0.23296654224395752f, 0.5020354390144348f, 0.5142426490783691f, 0.6448692083358765f, -0.7250174283981323f, 0.24530671536922455f, 0.8317757844924927f, 0.07505191117525101f, 0.9040425419807434f, 0.12878131866455078f, 0.7861688733100891f, 0.4026041030883789f, -0.43246814608573914f, 0.9036163091659546f, 0.40133172273635864f, 0.9845190644264221f, 0.671190083026886f, 0.6100019216537476f, 0.07438310980796814f, 0.8337218165397644f, -0.8131446242332458f, 0.13465669751167297f, 0.6293392181396484f, 0.5869508981704712f, 0.528816282749176f, 0.6401023864746094f, 0.947963297367096f, 0.6912145018577576f, -0.15265710651874542f, 0.25462499260902405f, 0.9297110438346863f, 0.07230409979820251f, 0.4971509873867035f, 0.2909727692604065f, 0.11645007878541946f, 0.9601296186447144f, -0.9388741254806519f, 0.16885405778884888f, 0.11233352869749069f, 0.8441646695137024f, 0.17134280502796173f, 0.9998859763145447f, 0.1077527105808258f, 0.6928909420967102f, -0.6482724547386169f, 0.08423642814159393f, 0.1632307469844818f, 0.4496275782585144f, 0.7566572427749634f, 0.07173798978328705f, 0.49737033247947693f, 0.13025017082691193f, -0.6051062345504761f, 0.5794246196746826f, 0.12440524250268936f, 0.8503120541572571f, 0.7743875980377197f, 0.4231014847755432f, 0.8280916213989258f, 0.7531813383102417f, -0.6707231402397156f, 0.30316397547721863f, 0.3677036762237549f, 0.20605626702308655f, 0.4116660952568054f, 0.09240856021642685f, 0.2049865424633026f, 0.2506415545940399f, -0.406094491481781f, 0.08032572269439697f, 0.37658753991127014f, 0.8376707434654236f, 0.22238215804100037f, 0.49652332067489624f, 0.3440575897693634f, 0.42266008257865906f, -0.2622235417366028f, 0.0036478384863585234f, 0.6357195377349854f, 0.07824383676052094f, 0.9204529523849487f, 0.01346334908157587f, 0.09463923424482346f, 0.6595198512077332f, -0.7640081644058228f, 0.7588639855384827f, 0.6205329895019531f, 0.33306175470352173f, 0.46215710043907166f, 0.14419744908809662f, 0.5710590481758118f, 0.06431794166564941f, -0.3812755048274994f, 0.7457312941551208f, 0.03284202516078949f, 0.4679393470287323f, 0.7470027208328247f, 0.9031054973602295f, 0.00893600657582283f, 0.8622441291809082f, -0.9858035445213318f, 0.7221446633338928f, 0.48967745900154114f, 0.045434631407260895f, 0.7997800707817078f, 0.014057392254471779f, 0.7479516863822937f, 0.6488587856292725f, -0.5334420800209045f, 0.16978789865970612f, 0.3652445375919342f, 0.4604042172431946f, 0.3325761556625366f, 0.14658963680267334f, 0.2862284481525421f, 0.2625318169593811f, -0.5711275339126587f, 0.04474388062953949f, 0.33324846625328064f, 0.9172095656394958f, 0.07352622598409653f, 0.5796492099761963f, 0.07428502291440964f, 0.5547240376472473f, -0.4414125680923462f, 0.9060501456260681f, 0.016433462500572205f, 0.4237574636936188f, 0.8687945604324341f, 0.7896080613136292f, 0.1901794970035553f, 0.3055263161659241f, -0.23424263298511505f, 0.25138038396835327f, 0.4843596816062927f, 0.25696927309036255f, 0.6160048842430115f, 0.3350943624973297f, 0.3890087306499481f, 0.33694469928741455f, -0.37128376960754395f, 0.34672126173973083f, 0.4585573077201843f, 0.07009302824735641f, 0.8796280026435852f, 0.29210445284843445f, 0.9079347848892212f, 0.5976128578186035f, -0.2813500463962555f, 0.12796908617019653f, 0.8533591628074646f, 0.22476905584335327f, 0.7641550302505493f, 0.3730483949184418f, 0.0775875374674797f, 0.5731731653213501f, -0.9137699007987976f, 0.2760486900806427f, 0.6867868900299072f, 0.9618505239486694f, 0.31510332226753235f, 0.7863429188728333f, 0.6514946222305298f, 0.716856062412262f, -0.5448241829872131f, 0.7012338638305664f, 0.825994610786438f, 0.8947277069091797f, 0.8241710662841797f, 0.10921023786067963f, 0.36041736602783203f, 0.8259138464927673f, -0.5634876489639282f, 0.996167004108429f, 0.3253101706504822f, 0.06564424186944962f, 0.7106800675392151f, 0.17260286211967468f, 0.3209170401096344f, 0.5377916693687439f, -0.7064827680587769f, 0.07664007693529129f, 0.7313838601112366f, 0.42174920439720154f, 0.3888196349143982f, 0.9939143657684326f, 0.5256431698799133f, 0.3760077655315399f, -0.7003823518753052f, 0.48575302958488464f, 0.35147184133529663f, 0.7805061340332031f, 0.2548130452632904f, 0.8482778072357178f, 0.5164399147033691f, 0.28292056918144226f, -0.22226737439632416f, 0.6309193968772888f, 0.7622258067131042f, 0.0015667155385017395f, 0.8682144284248352f, 0.1909753978252411f, 0.025889934971928596f, 0.7980080842971802f, -0.8075098991394043f, 0.6281300783157349f, 0.42173102498054504f, 0.7390929460525513f, 0.3850805163383484f, 0.7885152697563171f, 0.6121938824653625f, 0.7762840986251831f, -0.7988966703414917f, 0.29924461245536804f, 0.9153200387954712f, 0.25235339999198914f, 0.8311370015144348f, 0.3372306227684021f, 0.24967919290065765f, 0.1822618991136551f, -0.9381331205368042f, 0.22695304453372955f, 0.3707755208015442f, 0.8938681483268738f, 0.7943732142448425f, 0.11322353780269623f, 0.2780134379863739f, 0.1893274039030075f, -0.47762951254844666f, 0.5703252553939819f, 0.4510647654533386f, 0.4699226915836334f, 0.5130221247673035f, 0.596299946308136f, 0.7066401839256287f, 0.616579532623291f, -0.6142849326133728f, 0.814304769039154f, 0.7992072701454163f, 0.11943238973617554f, 0.5010274648666382f, 0.723427414894104f, 0.0014379939530044794f, 0.5127531290054321f, -0.5186982154846191f, 0.5592237710952759f, 0.8210844397544861f, 0.27197375893592834f, 0.6404787302017212f, 0.5122054815292358f, 0.8790652751922607f, 0.1476326286792755f, -0.757398784160614f, 0.9457688927650452f, 0.7895115613937378f, 0.9927012324333191f, 0.422427773475647f, 0.025160012766718864f, 0.025954922661185265f, 0.8468954563140869f, -0.7802676558494568f, 0.3306821882724762f, 0.9553620219230652f, 0.1655934751033783f, 0.6374678611755371f, 0.6560636758804321f, 0.6439473032951355f, 0.23646652698516846f, -0.07862544804811478f, 0.6941717863082886f, 0.20484688878059387f, 0.3042440414428711f, 0.4211225211620331f, 0.5645585656166077f, 0.996726930141449f, 0.7583839893341064f, -0.28609585762023926f, 0.7852819561958313f, 0.05224068462848663f, 0.7372635006904602f, 0.9811303615570068f, 0.6195308566093445f, 0.04405304417014122f, 0.15165439248085022f, -0.45585596561431885f, 0.3072950541973114f, 0.7636917233467102f, 0.2604709565639496f, 0.5194170475006104f, 0.28061822056770325f, 0.051993828266859055f, 0.9034858345985413f, -0.10042726993560791f, 0.02605905570089817f, 0.1836126148700714f, 0.10668580234050751f, 0.7638569474220276f, 0.38341641426086426f, 0.06609940528869629f, 0.32919880747795105f, -0.14183509349822998f, 0.47085705399513245f, 0.27647313475608826f, 0.0604056678712368f, 0.9740817546844482f, 0.26553621888160706f, 0.20212183892726898f, 0.9788562655448914f, -0.4402373731136322f, 0.6633340716362f, 0.42257511615753174f, 0.24573388695716858f, 0.9217299818992615f, 0.21797485649585724f, 0.26366305351257324f, 0.43972569704055786f, -0.7501522898674011f, 0.028138890862464905f, 0.3979087471961975f, 0.37185344099998474f, 0.9351314902305603f, 0.19111919403076172f, 0.3647173047065735f, 0.7420439720153809f, -0.40444520115852356f, 0.8111885786056519f, 0.8059232831001282f, 0.5058568120002747f, 0.04761171340942383f, 0.635436475276947f, 0.5010581612586975f, 0.19703815877437592f, -0.015068480744957924f, 0.06609594821929932f, 0.25521278381347656f, 0.2393692135810852f, 0.16198936104774475f, 0.24175363779067993f, 0.9897102117538452f, 0.7165051102638245f, -0.8710904121398926f, 0.7749022841453552f, 0.556938886642456f, 0.7898240685462952f, 0.42756542563438416f, 0.9133867621421814f, 0.17953507602214813f, 0.7853204011917114f, -0.3357127606868744f, 0.900195837020874f, 0.6306670904159546f, 0.6632465124130249f, 0.5831716656684875f, 0.5535870790481567f, 0.3512325882911682f, 0.4052683413028717f, -0.5569394826889038f, 0.8734006285667419f, 0.7815701961517334f, 0.6208186149597168f, 0.07774686813354492f, 0.5863029360771179f, 0.6715930700302124f, 0.26293644309043884f, -0.7904278039932251f, 0.7740327715873718f, 0.14173854887485504f, 0.936372697353363f, 0.860126256942749f, 0.2997419834136963f, 0.7786676287651062f, 0.05989691615104675f, -0.6440743207931519f, 0.556871235370636f, 0.9574282169342041f, 0.5261527895927429f, 0.9950438737869263f, 0.13983877003192902f, 0.36520326137542725f, 0.44008907675743103f, -0.586887776851654f, 0.35092049837112427f, 0.46826446056365967f, 0.2950286269187927f, 0.41176435351371765f, 0.4078695476055145f, 0.13795457780361176f, 0.39150723814964294f, -0.323135644197464f, 0.6178715825080872f, 0.42705997824668884f, 0.6684396266937256f, 0.5863264799118042f, 0.9765188694000244f, 0.9714211821556091f, 0.5982887744903564f, -0.8751082420349121f, 0.13176609575748444f, 0.6816413402557373f, 0.04193820431828499f, 0.9454714059829712f, 0.28349539637565613f, 0.22195936739444733f, 0.5509061813354492f, -0.08035847544670105f, 0.7264361381530762f, 0.18583469092845917f, 0.3499530851840973f, 0.11765988171100616f, 0.2418355941772461f, 0.9834304451942444f, 0.4807366132736206f, -0.29173362255096436f, 0.13422192633152008f, 0.14044182002544403f, 0.5273834466934204f, 0.7647528648376465f, 0.8329893946647644f, 0.44533905386924744f, 0.46280455589294434f, -0.3414398431777954f, 0.8496655821800232f, 0.7980964779853821f, 0.48111245036125183f, 0.9724550247192383f, 0.0937030240893364f, 0.8376282453536987f, 0.37767481803894043f, -0.43265554308891296f, 0.031244946643710136f, 0.874688982963562f, 0.9380885362625122f, 0.147014319896698f, 0.9603604674339294f, 0.8963746428489685f, 0.1834852248430252f, -0.1398017704486847f, 0.15290775895118713f, 0.3929242789745331f, 0.17091698944568634f, 0.1293174773454666f, 0.4876161515712738f, 0.6608750224113464f, 0.45070880651474f, -0.6092520356178284f, 0.9453652501106262f, 0.29978615045547485f, 0.40759772062301636f, 0.08682993054389954f, 0.03535061329603195f, 0.40978994965553284f, 0.4542035162448883f, -0.6878035664558411f, 0.3020327091217041f, 0.1464979350566864f, 0.2623346745967865f, 0.5482989549636841f, 0.32688066363334656f, 0.6232460141181946f, 0.1699157953262329f, -0.7635619640350342f, 0.017601793631911278f, 0.27319303154945374f, 0.8258857131004333f, 0.7674591541290283f, 0.28209540247917175f, 0.4399057626724243f, 0.6060696840286255f, -0.3244445025920868f, 0.18807359039783478f, 0.4698779881000519f, 0.6083386540412903f, 0.7624818682670593f, 0.10112980753183365f, 0.8474307656288147f, 0.43141716718673706f, -0.31306836009025574f, 0.6677588820457458f, 0.05882086232304573f, 0.5573124885559082f, 0.8806268572807312f, 0.7140798568725586f, 0.11683939397335052f, 0.7095855474472046f, -0.13014081120491028f, 0.0891641303896904f, 0.8418102860450745f, 0.32796958088874817f, 0.940830409526825f, 0.9359841346740723f, 0.9350157976150513f, 0.6173340082168579f, -0.09438399225473404f, 0.680546224117279f, 0.3459235429763794f, 0.9043159484863281f, 0.8566704988479614f, 0.8246162533760071f, 0.04424465820193291f, 0.7466126680374146f, -0.7498493790626526f, 0.29243943095207214f, 0.6207408905029297f, 0.1330006867647171f, 0.6591858267784119f, 0.41276121139526367f, 0.6179147362709045f, 0.5735792517662048f, -0.30374351143836975f, 0.5822693109512329f, 0.056549325585365295f, 0.5809891819953918f, 0.3309490978717804f, 0.9360992908477783f, 0.25129133462905884f, 0.022894103080034256f, -0.9601922631263733f, 0.4568222761154175f, 0.5205095410346985f, 0.8580356240272522f, 0.5914896130561829f, 0.00437189219519496f, 0.4944611191749573f, 0.38335490226745605f, -0.8430500030517578f, 0.01831205189228058f, 0.44761666655540466f, 0.21235549449920654f, 0.8131818771362305f, 0.7615664601325989f, 0.6012088060379028f, 0.36332282423973083f, -0.5713092684745789f, 0.1136433482170105f, 0.20721818506717682f, 0.17848359048366547f, 0.7835085391998291f, 0.2409612238407135f, 0.6919939517974854f, 0.7571347951889038f, -0.6537569761276245f, 0.2860542833805084f, 0.6749857664108276f, 0.470061719417572f, 0.8858636617660522f, 0.5902721285820007f, 0.7661505937576294f, 0.4555932283401489f, -0.6406249403953552f, 0.2939240634441376f, 0.2522173523902893f, 0.3032872676849365f, 0.7978157997131348f, 0.38586926460266113f, 0.8372176289558411f, 0.9461727738380432f, -0.5171065330505371f, 0.9273203015327454f, 0.18653668463230133f, 0.11452445387840271f, 0.8750841617584229f, 0.3800191283226013f, 0.0461655929684639f, 0.18552832305431366f, -0.1474463790655136f, 0.09051304310560226f, 0.36980724334716797f, 0.5749183893203735f, 0.6628994345664978f, 0.1808997094631195f, 0.5841197967529297f, 0.6674081087112427f, -0.0701412707567215f, 0.03490966185927391f, 0.15961161255836487f, 0.621663510799408f, 0.5443741083145142f, 0.14831417798995972f, 0.0684451311826706f, 0.5477470755577087f, -0.23420663177967072f, 0.5230826735496521f, 0.67732173204422f, 0.0952211245894432f, 0.19793467223644257f, 0.7057607769966125f, 0.4212779998779297f, 0.1691461205482483f, -0.5512908697128296f, 0.8105851411819458f, 0.5803781151771545f, 0.523503839969635f, 0.8136389255523682f, 0.6111229062080383f, 0.8925759196281433f, 0.9280514717102051f, -0.9173856377601624f, 0.813251793384552f, 0.05020112171769142f, 0.5657572746276855f, 0.6298697590827942f, 0.8785464763641357f, 0.6876148581504822f, 0.6572733521461487f, -0.04783650487661362f, 0.5987495183944702f, 0.1944047510623932f, 0.3482910990715027f, 0.8989143371582031f, 0.10586327314376831f, 0.16384926438331604f, 0.6531624794006348f, -0.9626067280769348f, 0.05466204136610031f, 0.7020445466041565f, 0.0931597426533699f, 0.08224229514598846f, 0.43506717681884766f, 0.6700360774993896f, 0.8793132305145264f, -0.9773428440093994f, 0.8238548636436462f, 0.6083353161811829f, 0.7263290286064148f, 0.9933424592018127f, 0.09167159348726273f, 0.7574949860572815f, 0.5680955052375793f, -0.893237292766571f, 0.3593143820762634f, 0.20340187847614288f, 0.3610815107822418f, 0.10978399217128754f, 0.07883092015981674f, 0.25333961844444275f, 0.37020984292030334f, -0.9262658357620239f, 0.5264632105827332f, 0.9011409878730774f, 0.08513419330120087f, 0.863746166229248f, 0.15915429592132568f, 0.12369116395711899f, 0.1546015739440918f, -0.934124767780304f, 0.36756813526153564f, 0.5346865057945251f, 0.24592317640781403f, 0.5178475379943848f, 0.036275263875722885f, 0.570976972579956f, 0.3913310468196869f, -0.39770805835723877f, 0.6691051721572876f, 0.7459820508956909f, 0.459006667137146f, 0.3628813922405243f, 0.5844622850418091f, 0.17415742576122284f, 0.19588585197925568f, -0.8573251962661743f, 0.3950466811656952f, 0.24943341314792633f, 0.966732919216156f, 0.7262531518936157f, 0.16992756724357605f, 0.6745694875717163f, 0.7156274914741516f, -0.08475309610366821f, 0.11699627339839935f, 0.3178330957889557f, 0.38254424929618835f, 0.30228617787361145f, 0.5750757455825806f, 0.8528327941894531f, 0.04277584329247475f, -0.9380794167518616f, 0.5833346247673035f, 0.18142546713352203f, 0.10393363237380981f, 0.36557722091674805f, 0.930534839630127f, 0.3679130971431732f, 0.7766725420951843f, -0.7280730605125427f, 0.01974550075829029f, 0.8717384934425354f, 0.979210376739502f, 0.9113878607749939f, 0.9263419508934021f, 0.9936822056770325f, 0.34559276700019836f, -0.4462892413139343f, 0.015945930033922195f, 0.14451131224632263f, 0.43857547640800476f, 0.5189041495323181f, 0.719301700592041f, 0.8416227698326111f, 0.07512795180082321f, -0.12154418975114822f, 0.4710143804550171f, 0.019861111417412758f, 0.46379274129867554f, 0.3670288622379303f, 0.22313331067562103f, 0.7694295048713684f, 0.9533361196517944f, -0.9550142288208008f, 0.3818299472332001f, 0.9345715641975403f, 0.949793815612793f, 0.6526310443878174f, 0.523160994052887f, 0.7987882494926453f, 0.08037971705198288f, -0.8454010486602783f, 0.4725438058376312f, 0.5269051194190979f, 0.5741038918495178f, 0.5789977312088013f, 0.28887778520584106f, 0.6901552081108093f, 0.25861626863479614f, -0.5648419260978699f, 0.4173499345779419f, 0.46498939394950867f, 0.8157679438591003f, 0.7249428629875183f, 0.9216979742050171f, 0.45182517170906067f, 0.20226873457431793f, -0.46096259355545044f, 0.5383614897727966f, 0.6907527446746826f, 0.46322134137153625f, 0.32727712392807007f, 0.18355444073677063f, 0.6636332273483276f, 0.48052293062210083f, -0.9536860585212708f, 0.2487017661333084f, 0.3677400052547455f, 0.7476263046264648f, 0.6975071430206299f, 0.6626871824264526f, 0.3714176118373871f, 0.28342926502227783f, -0.9320542812347412f, 0.8966355323791504f, 0.6720280647277832f, 0.6861220598220825f, 0.22036685049533844f, 0.7358630895614624f, 0.36843371391296387f, 0.1870514154434204f, -0.3409642279148102f, 0.3782327473163605f, 0.5203996896743774f, 0.7899832129478455f, 0.15949252247810364f, 0.9061360359191895f, 0.7288281321525574f, 0.917802095413208f, -0.38318535685539246f, 0.3401845097541809f, 0.5973889231681824f, 0.10756220668554306f, 0.682956337928772f, 0.15252543985843658f, 0.34037333726882935f, 0.5809358954429626f, -0.30781349539756775f, 0.04664599895477295f, 0.6548880338668823f, 0.9814667105674744f, 0.5200088620185852f, 0.6724210381507874f, 0.11685099452733994f, 0.026335498318076134f, -0.3428601920604706f, 0.811578094959259f, 0.15760193765163422f, 0.3160771131515503f, 0.36428210139274597f, 0.5397879481315613f, 0.5873528718948364f, 0.9470418691635132f, -0.4069148898124695f, 0.21268656849861145f, 0.023120246827602386f, 0.12909185886383057f, 0.25779011845588684f, 0.06908193975687027f, 0.9646469354629517f, 0.05043894425034523f, -0.7209428548812866f, 0.2337961196899414f, 0.6962738037109375f, 0.09079000353813171f, 0.02675354667007923f, 0.157928004860878f, 0.1274791806936264f, 0.03670159727334976f, -0.9912242889404297f, 0.6185291409492493f, 0.23649834096431732f, 0.6871291995048523f, 0.5091373920440674f, 0.8604987263679504f, 0.948204517364502f, 0.7843597531318665f, -0.3378441035747528f, 0.08353811502456665f, 0.8735753297805786f, 0.9511599540710449f, 0.38584962487220764f, 0.5801587104797363f, 0.9684303402900696f, 0.0825364887714386f, -0.10083726048469543f, 0.4632684290409088f, 0.0503988191485405f, 0.5650115013122559f, 0.8924956321716309f, 0.5715227127075195f, 0.3276626169681549f, 0.12169047445058823f, -0.10700491070747375f, 0.5798882246017456f, 0.49909302592277527f, 0.9816557168960571f, 0.7760840654373169f, 0.8201953172683716f, 0.5248595476150513f, 0.2933362126350403f, -0.3653492331504822f, 0.673714280128479f, 0.8590591549873352f, 0.2435264140367508f, 0.1820041686296463f, 0.7603379487991333f, 0.9223947525024414f, 0.2976189851760864f, -0.8231931328773499f, 0.9717633128166199f, 0.1527881771326065f, 0.8572736382484436f, 0.6376819610595703f, 0.5742033123970032f, 0.16262932121753693f, 0.40804624557495117f, -0.26261600852012634f, 0.7513774633407593f, 0.9548883438110352f, 0.9449247717857361f, 0.14985346794128418f, 0.48419368267059326f, 0.4555070698261261f, 0.0077447243966162205f, -0.21917688846588135f, 0.5557618141174316f, 0.06720542162656784f, 0.6733049154281616f, 0.6958056092262268f, 0.3709907531738281f, 0.6572045087814331f, 0.2887066602706909f, -0.8280749320983887f, 0.7561812996864319f, 0.4895867109298706f, 0.007925248704850674f, 0.6539292335510254f, 0.7691933512687683f, 0.67494136095047f, 0.14761364459991455f, -0.2783573567867279f, 0.4686932861804962f, 0.2124679982662201f, 0.4944491684436798f, 0.01686178520321846f, 0.5363098978996277f, 0.5082172155380249f, 0.4369114935398102f, -0.3474882245063782f, 0.5160895586013794f, 0.8450490236282349f, 0.9113929867744446f, 0.6912066340446472f, 0.6850122809410095f, 0.9965628385543823f, 0.07800524681806564f, -0.5018560886383057f, 0.11016709357500076f, 0.041385021060705185f, 0.12633836269378662f, 0.5262442827224731f, 0.2816285789012909f, 0.9388906955718994f, 0.4156152904033661f, -0.9618091583251953f, 0.7870112061500549f, 0.24137389659881592f, 0.23788923025131226f, 0.7203952074050903f, 0.5082002878189087f, 0.964799165725708f, 0.14567524194717407f, -0.5128884315490723f, 0.809697151184082f, 0.14907045662403107f, 0.28702735900878906f, 0.9894312620162964f, 0.07854948192834854f, 0.1071736067533493f, 0.6914005875587463f, -0.09840204566717148f, 0.16470688581466675f, 0.7275229096412659f, 0.20324760675430298f, 0.10995108634233475f, 0.8394739031791687f, 0.08558216691017151f, 0.4961884617805481f, -0.2164430022239685f, 0.8349753022193909f, 0.804892897605896f, 0.2619834542274475f, 0.2559952139854431f, 0.07753611356019974f, 0.3737407922744751f, 0.7006453275680542f, -0.13683409988880157f, 0.9991135597229004f, 0.6432271003723145f, 0.49450021982192993f, 0.24358178675174713f, 0.38438987731933594f, 0.793343722820282f, 0.19939474761486053f, -0.03475191444158554f, 0.7689857482910156f, 0.29206356406211853f, 0.014067474752664566f, 0.9677929282188416f, 0.0179707370698452f, 0.47464171051979065f, 0.4032948911190033f, -0.3237287402153015f, 0.31309932470321655f, 0.7187210917472839f, 0.04445737972855568f, 0.9397051930427551f, 0.46593397855758667f, 0.9509856700897217f, 0.7235790491104126f, -0.3640342950820923f, 0.4025927782058716f, 0.7125635147094727f, 0.036090947687625885f, 0.32503026723861694f, 0.6239899396896362f, 0.2219102531671524f, 0.8407334685325623f, -0.1623571664094925f, 0.2719685137271881f, 0.7611007690429688f, 0.9917917847633362f, 0.6731760501861572f, 0.5179622173309326f, 0.9140809178352356f, 0.8363737463951111f, -0.6283339262008667f, 0.015213527716696262f, 0.6237291097640991f, 0.7337059378623962f, 0.7631626129150391f, 0.8842177987098694f, 0.8241905570030212f, 0.01042654737830162f, -0.04073511064052582f, 0.851584792137146f, 0.5743383169174194f, 0.920632541179657f, 0.07864301651716232f, 0.11139173805713654f, 0.5165722966194153f, 0.5821059942245483f, -0.42405638098716736f, 0.43524491786956787f, 0.002327493391931057f, 0.9423938393592834f, 0.8933197259902954f, 0.50345379114151f, 0.13134092092514038f, 0.03256580978631973f, -0.7489518523216248f, 0.5611950159072876f, 0.3083365559577942f, 0.9251125454902649f, 0.6961314678192139f, 0.27952101826667786f, 0.3092057406902313f, 0.4636193513870239f, -0.8015255331993103f, 0.5078799724578857f, 0.5610325336456299f, 0.5517920851707458f, 0.583707332611084f, 0.8614058494567871f, 0.43705886602401733f, 0.25516533851623535f, -0.9982225894927979f, 0.8247429132461548f, 0.09255887567996979f, 0.9182067513465881f, 0.9565734267234802f, 0.42055341601371765f, 0.5832176804542542f, 0.8309271931648254f, -0.9010401368141174f, 0.1657421588897705f, 0.056237250566482544f, 0.3626226484775543f, 0.5938571095466614f, 0.103876493871212f, 0.07947014272212982f, 0.6119602918624878f, -0.7080764770507812f, 0.22917523980140686f, 0.6558681726455688f, 0.17689481377601624f, 0.3198329210281372f, 0.981334388256073f, 0.9192710518836975f, 0.346921443939209f, -0.2448299378156662f, 0.6245225071907043f, 0.8612201809883118f, 0.06232438236474991f, 0.17057591676712036f, 0.038848377764225006f, 0.035363368690013885f, 0.9078094363212585f, -0.021584121510386467f, 0.8863641023635864f, 0.3811509311199188f, 0.9669645428657532f, 0.3673817813396454f, 0.36070558428764343f, 0.40629151463508606f, 0.5323919057846069f, -0.2749864161014557f, 0.47716081142425537f, 0.7435001730918884f, 0.5386732220649719f, 0.035394202917814255f, 0.023497581481933594f, 0.058184269815683365f, 0.16094434261322021f, -0.8361648917198181f, 0.4238731563091278f, 0.6551564931869507f, 0.573240339756012f, 0.42297035455703735f, 0.13881973922252655f, 0.5460287928581238f, 0.8657719492912292f, -0.7219069600105286f, 0.6357828378677368f, 0.7597285509109497f, 0.05505925416946411f, 0.043684449046850204f, 0.48854154348373413f, 0.08985696732997894f, 0.1671317219734192f, -0.6203793287277222f, 0.29668909311294556f, 0.37436410784721375f, 0.6093950867652893f, 0.41790148615837097f, 0.9436718225479126f, 0.09663762897253036f, 0.3057214319705963f, -0.1853148192167282f, 0.5411760807037354f, 0.1760275661945343f, 0.05512020364403725f, 0.8730118274688721f, 0.8077052235603333f, 0.5182381868362427f, 0.4464779496192932f, -0.399064838886261f, 0.28219154477119446f, 0.8993975520133972f, 0.6258983612060547f, 0.008892464451491833f, 0.755934476852417f, 0.351035475730896f, 0.7982578873634338f, -0.13290603458881378f, 0.6853673458099365f, 0.5297993421554565f, 0.5657583475112915f, 0.9940822720527649f, 0.3831906020641327f, 0.2738570272922516f, 0.8132495880126953f, -0.47251594066619873f, 0.4480907917022705f, 0.7092936038970947f, 0.7492340207099915f, 0.40730994939804077f, 0.8672156929969788f, 0.5787542462348938f, 0.8884903192520142f, -0.06013372913002968f, 0.5178620219230652f, 0.42524346709251404f, 0.8048490881919861f, 0.6339240670204163f, 0.01079569198191166f, 0.4893714189529419f, 0.24469846487045288f, -0.6327950954437256f, 0.8218230605125427f, 0.8207972645759583f, 0.3336487412452698f, 0.4593111276626587f, 0.03072393499314785f, 0.5913267135620117f, 0.8600824475288391f, -0.6019376516342163f, 0.7396206855773926f, 0.5942234396934509f, 0.8758151531219482f, 0.6558181047439575f, 0.32226473093032837f, 0.9353155493736267f, 0.956195592880249f, -0.5369265079498291f, 0.7149597406387329f, 0.5853279829025269f, 0.30953463912010193f, 0.07993520796298981f, 0.7108910083770752f, 0.8277974128723145f, 0.3143633306026459f, -0.2550690174102783f, 0.6533227562904358f, 0.14349713921546936f, 0.6964913010597229f, 0.7853599190711975f, 0.2850463390350342f, 0.3714907765388489f, 0.5137249827384949f, -0.7500565648078918f, 0.5836462378501892f, 0.7581977844238281f, 0.7112277150154114f, 0.8407976627349854f, 0.4273443818092346f, 0.6589823365211487f, 0.24819476902484894f, -0.5869380831718445f, 0.40503227710723877f, 0.6353170871734619f, 0.1042579784989357f, 0.8574079871177673f, 0.595026433467865f, 0.6638342142105103f, 0.5086881518363953f, -0.8645468950271606f, 0.1846165657043457f, 0.7781116962432861f, 0.5309751033782959f, 0.187907874584198f, 0.39550113677978516f, 0.15358658134937286f, 0.08069047331809998f, -0.7315266132354736f, 0.6910072565078735f, 0.6367267966270447f, 0.06856873631477356f, 0.989578127861023f, 0.030087711289525032f, 0.36327773332595825f, 0.2985922396183014f, -0.9306514859199524f, 0.6290112137794495f, 0.5385008454322815f, 0.03613157197833061f, 0.16706427931785583f, 0.446208119392395f, 0.5294972658157349f, 0.03992445394396782f, -0.8095602989196777f, 0.1694285273551941f, 0.42402130365371704f, 0.06621649116277695f, 0.2632233798503876f, 0.9587469100952148f, 0.4354529082775116f, 0.3195329010486603f, -0.8095452189445496f, 0.004188301507383585f, 0.5596587061882019f, 0.152929425239563f, 0.2880631983280182f, 0.9781356453895569f, 0.11568181961774826f, 0.28057950735092163f, -0.8692836165428162f, 0.008277051150798798f, 0.8335809111595154f, 0.0033330887090414762f, 0.753945529460907f, 0.3451564311981201f, 0.29611900448799133f, 0.36618268489837646f, -0.28993016481399536f, 0.3983887732028961f, 0.8511261343955994f, 0.4160894453525543f, 0.8479738831520081f, 0.8276199698448181f, 0.46884825825691223f, 0.8339059948921204f, -0.19785600900650024f, 0.40755075216293335f, 0.3864762485027313f, 0.49344688653945923f, 0.1327676624059677f, 0.8684574365615845f, 0.20447951555252075f, 0.9783039689064026f, -0.5072811245918274f, 0.5701789855957031f, 0.03991365805268288f, 0.5767472982406616f, 0.6066148281097412f, 0.6417751908302307f, 0.5817533135414124f, 0.8908191919326782f, -0.6160405278205872f, 0.25044190883636475f, 0.9106303453445435f, 0.1229173094034195f, 0.9629696607589722f, 0.9581865668296814f, 0.17883668839931488f, 0.5648040175437927f, -0.9955464005470276f, 0.5347766280174255f, 0.1453096568584442f, 0.541915774345398f, 0.005385738797485828f, 0.06923667341470718f, 0.46762901544570923f, 0.9104759097099304f, -0.8131183385848999f, 0.31016671657562256f, 0.7450246810913086f, 0.8541684746742249f, 0.3995538353919983f, 0.720149040222168f, 0.7066617608070374f, 0.03054000437259674f, -0.8352057933807373f, 0.40925344824790955f, 0.5321799516677856f, 0.4080974757671356f, 0.9312665462493896f, 0.10604427009820938f, 0.9900105595588684f, 0.843613862991333f, -0.3097416162490845f, 0.8215510845184326f, 0.4663882553577423f, 0.6073383688926697f, 0.342715322971344f, 0.3174467384815216f, 0.6454222798347473f, 0.6262491941452026f, -0.22658133506774902f, 0.5091012716293335f, 0.0319104827940464f, 0.26395219564437866f, 0.935294508934021f, 0.15488725900650024f, 0.5018302798271179f, 0.630538284778595f, -0.7533600926399231f, 0.7265266180038452f, 0.6476641297340393f, 0.41852012276649475f, 0.8390586972236633f, 0.31898778676986694f, 0.04579818993806839f, 0.045634038746356964f, -0.09207208454608917f, 0.23606792092323303f, 0.16338127851486206f, 0.7673648595809937f, 0.03556381165981293f, 0.6781521439552307f, 0.5059640407562256f, 0.23397296667099f, -0.9417804479598999f, 0.3987676799297333f, 0.5365005135536194f, 0.8669267892837524f, 0.15011587738990784f, 0.1295343041419983f, 0.295058012008667f, 0.7370127439498901f, -0.6203159093856812f, 0.12966182827949524f, 0.7129448056221008f, 0.004038085229694843f, 0.6235306262969971f, 0.33255526423454285f, 0.06752392649650574f, 0.2573474049568176f, -0.8027192950248718f, 0.4613279700279236f, 0.27806901931762695f, 0.22760041058063507f, 0.38335782289505005f, 0.8143102526664734f, 0.4788471758365631f, 0.408031702041626f, -0.3920114040374756f, 0.5786086320877075f, 0.42142078280448914f, 0.07340990006923676f, 0.06595417112112045f, 0.5884991884231567f, 0.2174822837114334f, 0.4315519332885742f, -0.8619025349617004f, 0.4414479732513428f, 0.4089498817920685f, 0.8691167235374451f, 0.7729117274284363f, 0.2839664816856384f, 0.5464566349983215f, 0.7981524467468262f, -0.2485545426607132f, 0.019006023183465004f, 0.8161908984184265f, 0.3318066895008087f, 0.45619073510169983f, 0.09200038760900497f, 0.33333826065063477f, 0.6411334872245789f, -0.5084690451622009f, 0.8616982698440552f, 0.46802252531051636f, 0.8392528891563416f, 0.09686115384101868f, 0.657860279083252f, 0.44151487946510315f, 0.9101101160049438f, -0.18422408401966095f, 0.6499603390693665f, 0.03232225775718689f, 0.4938910901546478f, 0.7979732155799866f, 0.0810278132557869f, 0.3783728778362274f, 0.2568538188934326f, -0.6203891634941101f, 0.08352901041507721f, 0.8518289923667908f, 0.4422295093536377f, 0.7173213362693787f, 0.9649056196212769f, 0.8918251991271973f, 0.43014371395111084f, -0.31346479058265686f, 0.5914687514305115f, 0.7310128808021545f, 0.27511268854141235f, 0.40381768345832825f, 0.5965587496757507f, 0.20262978971004486f, 0.8840353488922119f, -0.8556353449821472f, 0.9684962630271912f, 0.4309908449649811f, 0.6590073704719543f, 0.17757229506969452f, 0.5114563703536987f, 0.4917415976524353f, 0.5535287261009216f, -0.3426435887813568f, 0.7557920217514038f, 0.6606401205062866f, 0.30005425214767456f, 0.7229439616203308f, 0.2572927474975586f, 0.14345350861549377f, 0.907598614692688f, -0.9873174428939819f, 0.580206573009491f, 0.8819021582603455f, 0.13909727334976196f, 0.029848629608750343f, 0.686021089553833f, 0.17774075269699097f, 0.7450459599494934f, -0.2569354474544525f, 0.8351953029632568f, 0.6187970042228699f, 0.1731952428817749f, 0.6771947741508484f, 0.1579369306564331f, 0.1913468986749649f, 0.6243929862976074f, -0.3820827305316925f, 0.6608994007110596f, 0.33608487248420715f, 0.20823904871940613f, 0.5206336379051208f, 0.8024721741676331f, 0.8660778999328613f, 0.4154505729675293f, -0.9159260988235474f, 0.6125186681747437f, 0.5114850401878357f, 0.8648240566253662f, 0.7683377265930176f, 0.5226654410362244f, 0.357869029045105f, 0.44060051441192627f, -0.5284935235977173f, 0.2178288698196411f, 0.5650953650474548f, 0.8388622403144836f, 0.09691374003887177f, 0.5826603770256042f, 0.0967312678694725f, 0.2566756308078766f, -0.9150639176368713f, 0.0819472074508667f, 0.1940140724182129f, 0.8006022572517395f, 0.7181276082992554f, 0.6273919343948364f, 0.2699277698993683f, 0.693295419216156f, -0.6076579093933105f, 0.6425363421440125f, 0.030435558408498764f, 0.8859351277351379f, 0.004655599128454924f, 0.7185767292976379f, 0.3496748208999634f, 0.5468084812164307f, -0.3772006630897522f, 0.3083566427230835f, 0.978841245174408f, 0.25531792640686035f, 0.8684549927711487f, 0.2354462891817093f, 0.8525858521461487f, 0.7390661239624023f, -0.08139216899871826f, 0.964652419090271f, 0.6593028903007507f, 0.9215630292892456f, 0.4140201210975647f, 0.457830548286438f, 0.7455326318740845f, 0.9000779390335083f, -0.6730058789253235f, 0.4409474730491638f, 0.7770770192146301f, 0.6751492023468018f, 0.5132147073745728f, 0.06514368951320648f, 0.693218469619751f, 0.34963831305503845f, -0.18634915351867676f, 0.09073060005903244f, 0.8503032922744751f, 0.7336671352386475f, 0.631583571434021f, 0.8453983664512634f, 0.07675538212060928f, 0.2773713171482086f, -0.8153941631317139f, 0.6405200958251953f, 0.6137471199035645f, 0.8268430233001709f, 0.3912840485572815f, 0.49360841512680054f, 0.6047500967979431f, 0.09428258240222931f, -0.8206762671470642f, 0.36079415678977966f, 0.08530129492282867f, 0.4438689351081848f, 0.27955329418182373f, 0.9881277680397034f, 0.07284872233867645f, 0.4843429625034332f, -0.8940842747688293f, 0.20229081809520721f, 0.6042996048927307f, 0.7383556365966797f, 0.9543159604072571f, 0.9955739974975586f, 0.7962261438369751f, 0.09501729905605316f, -0.5505077242851257f, 0.29973912239074707f, 0.44741934537887573f, 0.23488466441631317f, 0.573201596736908f, 0.8620246052742004f, 0.6492069363594055f, 0.6846566200256348f, -0.9318141937255859f, 0.40173983573913574f, 0.6332918405532837f, 0.7167457342147827f, 0.4895903468132019f, 0.343450665473938f, 0.49915677309036255f, 0.4889249801635742f, -0.7374246716499329f, 0.4567285478115082f, 0.9602248072624207f, 0.2056027501821518f, 0.15280641615390778f, 0.41134828329086304f, 0.7706488370895386f, 0.3365615904331207f, -0.8495153784751892f, 0.9404517412185669f, 0.3322761654853821f, 0.19205932319164276f, 0.47775784134864807f, 0.4931354522705078f, 0.5366388559341431f, 0.4125850200653076f, -0.13694554567337036f, 0.38198670744895935f, 0.9328906536102295f, 0.25861653685569763f, 0.39843279123306274f, 0.9953756928443909f, 0.7587354779243469f, 0.7151719927787781f, -0.44524624943733215f, 0.6350484490394592f, 0.2149694263935089f, 0.47492706775665283f, 0.7814738154411316f, 0.4385691285133362f, 0.1143328920006752f, 0.9365313649177551f, -0.8439844846725464f, 0.3243440091609955f, 0.1699761152267456f, 0.23061510920524597f, 0.8724352121353149f, 0.8425463438034058f, 0.4118535816669464f, 0.21768157184123993f, -0.4317726492881775f, 0.9771653413772583f, 0.3451952338218689f, 0.24800778925418854f, 0.5371003150939941f, 0.4660133123397827f, 0.6473106741905212f, 0.28234001994132996f, -0.044027410447597504f, 0.873559832572937f, 0.612707793712616f, 0.4916096329689026f, 0.041675545275211334f, 0.42572563886642456f, 0.4506150782108307f, 0.5888721942901611f, -0.09843311458826065f, 0.2752680778503418f, 0.5279374718666077f, 0.23582035303115845f, 0.35575321316719055f, 0.981088399887085f, 0.7610732316970825f, 0.9455270171165466f, -0.03381222113966942f, 0.33809641003608704f, 0.25704696774482727f, 0.19432397186756134f, 0.7981923222541809f, 0.7488216757774353f, 0.6732786893844604f, 0.4045684337615967f, -0.9115123152732849f, 0.8893822431564331f, 0.3915926516056061f, 0.3256974518299103f, 0.020023971796035767f, 0.033152248710393906f, 0.6557334661483765f, 0.49898189306259155f, -0.3825543522834778f, 0.8233612775802612f, 0.04615294560790062f, 0.9260727167129517f, 0.7296820878982544f, 0.9337559938430786f, 0.8397743105888367f, 0.9834030270576477f, -0.8599247336387634f, 0.9792895317077637f, 0.08220771700143814f, 0.12261144071817398f, 0.1502351611852646f, 0.5750548243522644f, 0.6668426990509033f, 0.9840387105941772f, -0.6688019037246704f, 0.8528687357902527f, 0.5380674600601196f, 0.013179032132029533f, 0.5835694670677185f, 0.997993528842926f, 0.9252545237541199f, 0.3670775294303894f, -0.7266075611114502f, 0.6969476938247681f, 0.05109557881951332f, 0.9275750517845154f, 0.22848330438137054f, 0.14355240762233734f, 0.844386637210846f, 0.014828985556960106f, -0.02549469843506813f, 0.7883356213569641f, 0.3474053740501404f, 0.13603541254997253f, 0.027357175946235657f, 0.565761387348175f, 0.13401363790035248f, 0.0960962325334549f, -0.2958148121833801f, 0.40797728300094604f, 0.14104805886745453f, 0.7030057907104492f, 0.828317403793335f, 0.7892536520957947f, 0.9677333831787109f, 0.9223495721817017f, -0.30233076214790344f, 0.376327782869339f, 0.9090990424156189f, 0.04138318449258804f, 0.6699589490890503f, 0.7156184315681458f, 0.9952136874198914f, 0.4237346649169922f, -0.3830633759498596f, 0.9480306506156921f, 0.2922641932964325f, 0.5060248970985413f, 0.2198827862739563f, 0.36010709404945374f, 0.012618286535143852f, 0.28446322679519653f, -0.8453727960586548f, 0.2690747082233429f, 0.10165783762931824f, 0.910050094127655f, 0.4973866939544678f, 0.11752329766750336f, 0.10572567582130432f, 0.718950629234314f, -0.686555027961731f, 0.5152896642684937f, 0.4477459192276001f, 0.340131938457489f, 0.8158649802207947f, 0.9458644390106201f, 0.41645547747612f, 0.3937780559062958f, -0.24939170479774475f, 0.6684609651565552f, 0.3652074337005615f, 0.6793227791786194f, 0.4731096029281616f, 0.7480837106704712f, 0.06071494519710541f, 0.7758261561393738f, -0.9412553906440735f, 0.38392552733421326f, 0.6147660613059998f, 0.1482921987771988f, 0.8223103880882263f, 0.5087275505065918f, 0.6711465716362f, 0.5655121207237244f, -0.14790743589401245f, 0.4499753415584564f, 0.020346280187368393f, 0.9840866327285767f, 0.5078645944595337f, 0.5952122211456299f, 0.40953177213668823f, 0.8753945827484131f, -0.9331981539726257f, 0.5874833464622498f, 0.23154956102371216f, 0.6696971654891968f, 0.9502584338188171f, 0.8432057499885559f, 0.4295211434364319f, 0.6285157203674316f, -0.12678468227386475f, 0.9242821335792542f, 0.04759030416607857f, 0.23497746884822845f, 0.1687064915895462f, 0.7594125270843506f, 0.7041102051734924f, 0.4713467061519623f, -0.45711472630500793f, 0.5046074986457825f, 0.5477257370948792f, 0.7425950765609741f, 0.7374889850616455f, 0.6443914771080017f, 0.8028759956359863f, 0.9377401471138f, -0.9503666758537292f, 0.44410836696624756f, 0.5476207733154297f, 0.39001157879829407f, 0.12151726335287094f, 0.843457043170929f, 0.5619527101516724f, 0.6016311049461365f, -0.8652631044387817f, 0.9712691307067871f, 0.6321903467178345f, 0.12890803813934326f, 0.16462205350399017f, 0.3660728633403778f, 0.9905378818511963f, 0.4088961184024811f, -0.18210864067077637f, 0.3752565085887909f, 0.27586400508880615f, 0.9161996841430664f, 0.9368333220481873f, 0.32567211985588074f, 0.14462339878082275f, 0.870373010635376f, -0.2567906677722931f, 0.26624351739883423f, 0.5600040555000305f, 0.9667791128158569f, 0.647666871547699f, 0.3848077356815338f, 0.5635318160057068f, 0.9811528325080872f, -0.9795542359352112f, 0.7551512122154236f, 0.9262166619300842f, 0.24848774075508118f, 0.6176735162734985f, 0.5082674026489258f, 0.4550871253013611f, 0.0017186589539051056f, -0.9238222241401672f, 0.857769787311554f, 0.4092034697532654f, 0.9329676032066345f, 0.29650670289993286f, 0.4228384494781494f, 0.14349651336669922f, 0.8966846466064453f, -0.26619529724121094f, 0.5248494744300842f, 0.17940303683280945f, 0.6897193193435669f, 0.5811992287635803f, 0.18835952877998352f, 0.30841538310050964f, 0.8430464267730713f, -0.6633108854293823f, 0.027997074648737907f, 0.35901954770088196f, 0.38765883445739746f, 0.7822633981704712f, 0.17196163535118103f, 0.4349079430103302f, 0.9532802104949951f, -0.3656238317489624f, 0.8056285381317139f, 0.4023022949695587f, 0.5188239216804504f, 0.08834047615528107f, 0.4283314645290375f, 0.6889843344688416f, 0.46032917499542236f, -0.48473408818244934f, 0.3598054051399231f, 0.20530903339385986f, 0.9024220108985901f, 0.5869323015213013f, 0.49413976073265076f, 0.579652726650238f, 0.2731660008430481f, -0.29962992668151855f, 0.21262188255786896f, 0.4203774034976959f, 0.9976848363876343f, 0.08240877091884613f, 0.452985018491745f, 0.16103139519691467f, 0.7076653838157654f, -0.6797041296958923f, 0.030659900978207588f, 0.7214644551277161f, 0.6992015838623047f, 0.437028169631958f, 0.5873903036117554f, 0.49870842695236206f, 0.8265390992164612f, -0.16844508051872253f, 0.6773028373718262f, 0.9644144177436829f, 0.08944718539714813f, 0.9546667337417603f, 0.09533591568470001f, 0.37018486857414246f, 0.6342716813087463f, -0.04851317033171654f, 0.43860945105552673f, 0.7451298832893372f, 0.6263648867607117f, 0.5096325278282166f, 0.19047357141971588f, 0.24934819340705872f, 0.9042690396308899f, -0.02492043562233448f, 0.19026631116867065f, 0.1929493248462677f, 0.10513588786125183f, 0.6173728704452515f, 0.9187978506088257f, 0.745195746421814f, 0.5843327641487122f, -0.3546556532382965f, 0.39778080582618713f, 0.21065998077392578f, 0.003571445355191827f, 0.18724414706230164f, 0.6054643988609314f, 0.7072094082832336f, 0.19061905145645142f, -0.567924439907074f, 0.26690298318862915f, 0.193197563290596f, 0.6492878198623657f, 0.009201975539326668f, 0.9991967678070068f, 0.6541296243667603f, 0.40925881266593933f, -0.6892213821411133f, 0.7258977890014648f, 0.24618175625801086f, 0.6230909824371338f, 0.5900692939758301f, 0.8866453170776367f, 0.2922132611274719f, 0.54243004322052f, -0.1238737627863884f, 0.5210744142532349f, 0.14012886583805084f, 0.13491763174533844f, 0.7695505619049072f, 0.5619688630104065f, 0.47135311365127563f, 0.8427259922027588f, -0.09456643462181091f, 0.3817180097103119f, 0.227951318025589f, 0.0975155383348465f, 0.7872061729431152f, 0.43129244446754456f, 0.35992810130119324f, 0.5698361992835999f, -0.10717564076185226f, 0.5346404910087585f, 0.7163136005401611f, 0.5116448402404785f, 0.18227136135101318f, 0.29951855540275574f, 0.2086554765701294f, 0.9703963994979858f, -0.9025452136993408f, 0.2556431293487549f, 0.04812046140432358f, 0.9343152046203613f, 0.25556641817092896f, 0.19369260966777802f, 0.4817003011703491f, 0.4032602310180664f, -0.41811883449554443f, 0.23562785983085632f, 0.3699010908603668f, 0.553666353225708f, 0.500874936580658f, 0.020766831934452057f, 0.3058857023715973f, 0.4355584979057312f, -0.7847687005996704f, 0.338707834482193f, 0.0793912410736084f, 0.6032118797302246f, 0.8473798036575317f, 0.4854852259159088f, 0.01562913879752159f, 0.8972524404525757f, -0.2848634719848633f, 0.06968799978494644f, 0.4894583225250244f, 0.27574625611305237f, 0.47017577290534973f, 0.35992559790611267f, 0.15814006328582764f, 0.7123738527297974f, -0.7940488457679749f, 0.7155424356460571f, 0.2134842574596405f, 0.5987862348556519f, 0.7853646874427795f, 0.051086846739053726f, 0.49046632647514343f, 0.1973547637462616f, -0.5528591871261597f, 0.5206928253173828f, 0.5921162366867065f, 0.059524569660425186f, 0.5717939138412476f, 0.6253294944763184f, 0.22378019988536835f, 0.8278894424438477f, -0.646213173866272f, 0.9777218103408813f, 0.5024810433387756f, 0.047509968280792236f, 0.8804755210876465f, 0.8141072988510132f, 0.3194723427295685f, 0.06454712897539139f, -0.6665217280387878f, 0.8225351572036743f, 0.1895831823348999f, 0.42601776123046875f, 0.4739382565021515f, 0.6053363084793091f, 0.35705551505088806f, 0.14765116572380066f, -0.761991024017334f, 0.7270752787590027f, 0.46449902653694153f, 0.07541564106941223f, 0.17971761524677277f, 0.5297791957855225f, 0.5530514121055603f, 0.8784781098365784f, -0.9111239910125732f, 0.2166677713394165f, 0.8460136651992798f, 0.8840638995170593f, 0.21377554535865784f, 0.14306823909282684f, 0.5240922570228577f, 0.8152891397476196f, -0.33443543314933777f, 0.004651273135095835f, 0.41377025842666626f, 0.7874172925949097f, 0.2410653978586197f, 0.5896340012550354f, 0.43245548009872437f, 0.6603100299835205f, -0.227731853723526f, 0.9444952607154846f, 0.12372398376464844f, 0.24967683851718903f, 0.3212614357471466f, 0.9952637553215027f, 0.12214218080043793f, 0.31375229358673096f, -0.37030813097953796f, 0.9224810004234314f, 0.8475870490074158f, 0.3657020628452301f, 0.8212537169456482f, 0.6418882608413696f, 0.2579200565814972f, 0.773076593875885f, -0.03168584033846855f, 0.6302703022956848f, 0.07705305516719818f, 0.27894723415374756f, 0.9991269707679749f, 0.18684275448322296f, 0.49031487107276917f, 0.557786226272583f, -0.12478535622358322f, 0.18925678730010986f, 0.39605584740638733f, 0.3818759024143219f, 0.805030882358551f, 0.6157228350639343f, 0.09014319628477097f, 0.2768011689186096f, -0.3612124025821686f, 0.9110502004623413f, 0.35048922896385193f, 0.19694383442401886f, 0.9075772762298584f, 0.8009371161460876f, 0.5952638983726501f, 0.7712147235870361f, -0.6806657314300537f, 0.884647011756897f, 0.602588415145874f, 0.6697497963905334f, 0.3303036093711853f, 0.6204453110694885f, 0.4163973927497864f, 0.09683799743652344f, -0.8450637459754944f, 0.7015509605407715f, 0.009022468701004982f, 0.5581763982772827f, 0.942035973072052f, 0.03156647831201553f, 0.06230742856860161f, 0.35507920384407043f, -0.09305247664451599f, 0.38375821709632874f, 0.9611042737960815f, 0.23746274411678314f, 0.9536464214324951f, 0.11205710470676422f, 0.2249448001384735f, 0.25318509340286255f, -0.2287224531173706f, 0.7796110510826111f, 0.14476007223129272f, 0.8350087404251099f, 0.7499152421951294f, 0.3952752351760864f, 0.33574429154396057f, 0.3402099013328552f, -0.08973445743322372f, 0.4076668918132782f, 0.08723858743906021f, 0.596921443939209f, 0.430490642786026f, 0.759307861328125f, 0.8198477029800415f, 0.0016387967625632882f, -0.861068844795227f, 0.4428532123565674f, 0.06727530807256699f, 0.35333287715911865f, 0.5503181219100952f, 0.9305813908576965f, 0.6237729787826538f, 0.7895531058311462f, -0.20863252878189087f, 0.5278217792510986f, 0.6023715734481812f, 0.2067151665687561f, 0.709719181060791f, 0.7608098983764648f, 0.2272564172744751f, 0.08758331835269928f, -0.6354442834854126f, 0.45812371373176575f, 0.8605117201805115f, 0.1257534772157669f, 0.27485910058021545f, 0.7629145979881287f, 0.4700362980365753f, 0.9277548789978027f, -0.06834074854850769f, 0.8316466808319092f, 0.6762939691543579f, 0.6695857048034668f, 0.05739183351397514f, 0.8766545057296753f, 0.4855664372444153f, 0.2284272015094757f, -0.7730681896209717f, 0.12758807837963104f, 0.3921012878417969f, 0.22506824135780334f, 0.012751098722219467f, 0.2119014412164688f, 0.127090185880661f, 0.10301806032657623f, -0.4093461334705353f, 0.7299976944923401f, 0.23863957822322845f, 0.30220192670822144f, 0.8406552672386169f, 0.49375906586647034f, 0.6471197605133057f, 0.3178248107433319f, -0.00498032895848155f, 0.03633435443043709f, 0.1019728034734726f, 0.25006231665611267f, 0.18796193599700928f, 0.33665066957473755f, 0.5178396701812744f, 0.05988053232431412f, -0.38537493348121643f, 0.4665834903717041f, 0.4936163127422333f, 0.781143844127655f, 0.7603862285614014f, 0.3342079818248749f, 0.28970593214035034f, 0.5812533497810364f, -0.7468873858451843f, 0.6634902954101562f, 0.7597251534461975f, 0.3262484669685364f, 0.38250279426574707f, 0.698506772518158f, 0.17513898015022278f, 0.3935869336128235f, -0.3075689971446991f, 0.07685162127017975f, 0.851015031337738f, 0.8477169275283813f, 0.5214725136756897f, 0.6913495063781738f, 0.7137263417243958f, 0.7222574353218079f, -0.568805992603302f, 0.8020893335342407f, 0.8078992366790771f, 0.7464096546173096f, 0.9139852523803711f, 0.10540846735239029f, 0.6082600951194763f, 0.6152072548866272f, -0.7508472800254822f, 0.6938042640686035f, 0.3760819435119629f, 0.6422790884971619f, 0.7901634573936462f, 0.773797869682312f, 0.5065876245498657f, 0.7659039497375488f, -0.6284306049346924f, 0.8533292412757874f, 0.41605186462402344f, 0.22831234335899353f, 0.4404436945915222f, 0.7047907114028931f, 0.8302577137947083f, 0.46832096576690674f, -0.15465416014194489f, 0.03724214807152748f, 0.5803340077400208f, 0.3126233220100403f, 0.4984820485115051f, 0.6608049273490906f, 0.08386661857366562f, 0.08177182078361511f, -0.17692312598228455f, 0.5749034285545349f, 0.16016720235347748f, 0.062137670814991f, 0.9325548410415649f, 0.21897652745246887f, 0.5511041283607483f, 0.9822200536727905f, -0.33382242918014526f, 0.2606654465198517f, 0.9454173445701599f, 0.6568217873573303f, 0.5445854663848877f, 0.8945003747940063f, 0.47526371479034424f, 0.750912070274353f, -0.21514378488063812f, 0.242791548371315f, 0.08641846477985382f, 0.6175581216812134f, 0.7702314853668213f, 0.6443010568618774f, 0.11775911599397659f, 0.6265606880187988f, -0.7440059185028076f, 0.755477786064148f, 0.348746657371521f, 0.7227867245674133f, 0.06246703490614891f, 0.3668910264968872f, 0.801277220249176f, 0.856941819190979f, -0.04777450114488602f, 0.20885838568210602f, 0.3463837802410126f, 0.7453016042709351f, 0.4338513910770416f, 0.22334307432174683f, 0.8930790424346924f, 0.06335262954235077f, -0.5603479743003845f, 0.6093140244483948f, 0.30574437975883484f, 0.3190944790840149f, 0.12256044149398804f, 0.4912371337413788f, 0.946010410785675f, 0.7207451462745667f, -0.2455330789089203f, 0.40561091899871826f, 0.9469804167747498f, 0.46227148175239563f, 0.5514028072357178f, 0.6743417978286743f, 0.27146804332733154f, 0.3146372139453888f, -0.9074419736862183f, 0.715146005153656f, 0.01484664436429739f, 0.3712964653968811f, 0.42668089270591736f, 0.1133752092719078f, 0.56899094581604f, 0.6409051418304443f, -0.5752043724060059f, 0.042544834315776825f, 0.9151741862297058f, 0.05750301480293274f, 0.82132887840271f, 0.720565915107727f, 0.4141711890697479f, 0.04631859436631203f, -0.9005511999130249f, 0.9898145794868469f, 0.2042560875415802f, 0.2733168303966522f, 0.8947914242744446f, 0.3727281391620636f, 0.9108739495277405f, 0.5247958302497864f, -0.4795185923576355f, 0.2124667465686798f, 0.09643155336380005f, 0.9041243195533752f, 0.16570819914340973f, 0.1350194215774536f, 0.9509334564208984f, 0.5642811059951782f, -0.7961574196815491f, 0.5643187761306763f, 0.8212574124336243f, 0.942865252494812f, 0.8000935912132263f, 0.38493284583091736f, 0.3531663715839386f, 0.707103431224823f, -0.8736405372619629f, 0.2505660355091095f, 0.46141761541366577f, 0.1797264665365219f, 0.42137473821640015f, 0.7668136358261108f, 0.13700459897518158f, 0.9013174772262573f, -0.849094569683075f, 0.9403210878372192f, 0.5692933201789856f, 0.4524804353713989f, 0.6172123551368713f, 0.1570468693971634f, 0.09256851673126221f, 0.014620608650147915f, -0.7252015471458435f, 0.32695525884628296f, 0.09625214338302612f, 0.9764528274536133f, 0.5454203486442566f, 0.19102293252944946f, 0.33679527044296265f, 0.7799587249755859f, -0.7761371731758118f, 0.23946210741996765f, 0.05466074496507645f, 0.17307107150554657f, 0.08183880895376205f, 0.7850400805473328f, 0.5548168420791626f, 0.8037267923355103f, -0.14334920048713684f, 0.3251708447933197f, 0.7469639182090759f, 0.7972116470336914f, 0.8140605092048645f, 0.11846229434013367f, 0.16654834151268005f, 0.5949932336807251f, -0.8064867854118347f, 0.7769237756729126f, 0.08639725297689438f, 0.1567661613225937f, 0.03331096097826958f, 0.29228341579437256f, 0.39019110798835754f, 0.8652606010437012f, -0.35424959659576416f, 0.2922704219818115f, 0.5717611312866211f, 0.6279465556144714f, 0.175101175904274f, 0.5681974291801453f, 0.3690745234489441f, 0.6503063440322876f, -0.8638039827346802f, 0.0024241080973297358f, 0.4988367557525635f, 0.3352709114551544f, 0.6872291564941406f, 0.3592331111431122f, 0.9623264074325562f, 0.877225935459137f, -0.5654943585395813f, 0.2931913137435913f, 0.9844763278961182f, 0.10415539145469666f, 0.575401782989502f, 0.31796035170555115f, 0.8216972351074219f, 0.1135791540145874f, -0.6024373769760132f, 0.3238334655761719f, 0.674620509147644f, 0.8310064673423767f, 0.9201759099960327f, 0.5215440988540649f, 0.033311180770397186f, 0.546949565410614f, -0.9586880803108215f, 0.6006872653961182f, 0.22855953872203827f, 0.687721312046051f, 0.2441156804561615f, 0.12157773226499557f, 0.9272242784500122f, 0.6707192063331604f, -0.901197612285614f, 0.44740086793899536f, 0.5831069350242615f, 0.8504982590675354f, 0.6149203777313232f, 0.7105507254600525f, 0.9566721320152283f, 0.7218207120895386f, -0.5972160696983337f, 0.89731764793396f, 0.10054276138544083f, 0.8935773372650146f, 0.9790770411491394f, 0.810017466545105f, 0.5516380667686462f, 0.5237100124359131f, -0.303691565990448f, 0.2771814167499542f, 0.9940546154975891f, 0.7417945861816406f, 0.1209292784333229f, 0.3339335322380066f, 0.6706032156944275f, 0.6994925737380981f, -0.5778716802597046f, 0.8595400452613831f, 0.4960578978061676f, 0.10925470292568207f, 0.9230396747589111f, 0.12868086993694305f, 0.47540879249572754f, 0.08013070374727249f, -0.3581334352493286f, 0.375236451625824f, 0.32588380575180054f, 0.9437692761421204f, 0.25332438945770264f, 0.2530105710029602f, 0.4257631003856659f, 0.22970834374427795f, -0.7723160982131958f, 0.4889332950115204f, 0.3202594518661499f, 0.9350025653839111f, 0.43723955750465393f, 0.10251783579587936f, 0.8892764449119568f, 0.30335474014282227f, -0.2181335836648941f, 0.5615662336349487f, 0.1824684590101242f, 0.07563111931085587f, 0.7447878122329712f, 0.7073338031768799f, 0.12659072875976562f, 0.02239621803164482f, -0.9506872892379761f, 0.3561205267906189f, 0.3482678234577179f, 0.27703261375427246f, 0.9592002034187317f, 0.04405001178383827f, 0.16440114378929138f, 0.019237160682678223f, -0.5115227103233337f, 0.15017186105251312f, 0.893369734287262f, 0.6982315182685852f, 0.8103554844856262f, 0.1790643334388733f, 0.9475645422935486f, 0.2873513996601105f, -0.532685399055481f, 0.7348163723945618f, 0.9836439490318298f, 0.43107014894485474f, 0.5796734094619751f, 0.4307692050933838f, 0.9915741086006165f, 0.004019829910248518f, -0.5657997131347656f, 0.8531895279884338f, 0.9051396250724792f, 0.5104951858520508f, 0.17194348573684692f, 0.4200695753097534f, 0.24138301610946655f, 0.20223337411880493f, -0.0734180137515068f, 0.6321029663085938f, 0.6868468523025513f, 0.512195348739624f, 0.04479174315929413f, 0.46040064096450806f, 0.3805720806121826f, 0.9029945731163025f, -0.8111303448677063f, 0.040082260966300964f, 0.7217167615890503f, 0.09412378817796707f, 0.21042779088020325f, 0.4235887825489044f, 0.5495970845222473f, 0.30408716201782227f, -0.036212850362062454f, 0.5597394108772278f, 0.7720192074775696f, 0.8978760242462158f, 0.3320528566837311f, 0.23972266912460327f, 0.8756974935531616f, 0.8370741605758667f, -0.5803937315940857f, 0.28153231739997864f, 0.7027397155761719f, 0.3200094401836395f, 0.5147771239280701f, 0.4730047285556793f, 0.0701785534620285f, 0.6125888824462891f, -0.646942675113678f, 0.7398315072059631f, 0.7202162742614746f, 0.7873981595039368f, 0.1517760306596756f, 0.2774089276790619f, 0.5791327953338623f, 0.11507689952850342f, -0.8001915812492371f, 0.9688352942466736f, 0.6828681230545044f, 0.8043481707572937f, 0.723675012588501f, 0.6442019939422607f, 0.5353146195411682f, 0.1514108031988144f, -0.6508307456970215f, 0.505147397518158f, 0.4671180546283722f, 0.5459703207015991f, 0.40531405806541443f, 0.43938833475112915f, 0.048535313457250595f, 0.3121073842048645f, -0.45965680480003357f, 0.9250693917274475f, 0.27320194244384766f, 0.4327588975429535f, 0.3479841947555542f, 0.9889681339263916f, 0.700347363948822f, 0.7243090271949768f, -0.3660930097103119f, 0.9999242424964905f, 0.703520655632019f, 0.7442247271537781f, 0.8410292267799377f, 0.8856375217437744f, 0.8513802886009216f, 0.1274832934141159f, -0.7183151245117188f, 0.8230993151664734f, 0.8057849407196045f, 0.4294513463973999f, 0.7965636849403381f, 0.8421260714530945f, 0.23203925788402557f, 0.9428507089614868f, -0.358977347612381f, 0.0681973323225975f, 0.07040758430957794f, 0.5007579922676086f, 0.7766970992088318f, 0.48799097537994385f, 0.5540602803230286f, 0.7488722801208496f, -0.9608093500137329f, 0.4179679751396179f, 0.22259946167469025f, 0.5143275260925293f, 0.6353704929351807f, 0.8134697079658508f, 0.11665091663599014f, 0.590826153755188f, -0.6124261021614075f, 0.9709682464599609f, 0.19499549269676208f, 0.5888071060180664f, 0.8743812441825867f, 0.41753509640693665f, 0.8281273245811462f, 0.02969171479344368f, -0.6371867656707764f, 0.9524084329605103f, 0.2999098598957062f, 0.544387936592102f, 0.1969558298587799f, 0.7682284116744995f, 0.6700018644332886f, 0.1306726038455963f, -0.02728499472141266f, 0.8050402402877808f, 0.34079036116600037f, 0.2691003382205963f, 0.066084124147892f, 0.9550820589065552f, 0.5747416019439697f, 0.7136020064353943f, -0.2922693192958832f, 0.7290678024291992f, 0.8500008583068848f, 0.9977044463157654f, 0.9767054319381714f, 0.7382741570472717f, 0.2590298056602478f, 0.4554353952407837f, -0.18328876793384552f, 0.709255039691925f, 0.2716417908668518f, 0.5094354748725891f, 0.4377102851867676f, 0.9521934986114502f, 0.6706352829933167f, 0.4275701940059662f, -0.9926151037216187f, 0.47742801904678345f, 0.20505285263061523f, 0.31853654980659485f, 0.7800358533859253f, 0.49995580315589905f, 0.21092846989631653f, 0.7346888184547424f, -0.7162367701530457f, 0.41193702816963196f, 0.37555116415023804f, 0.9896920919418335f, 0.8276985287666321f, 0.1246015876531601f, 0.7866051197052002f, 0.24408313632011414f, -0.11563834547996521f, 0.4893096387386322f, 0.7444707155227661f, 0.29007917642593384f, 0.5769553184509277f, 0.9667129516601562f, 0.36455342173576355f, 0.4804050922393799f, -0.15273453295230865f, 0.8188793659210205f, 0.03238175809383392f, 0.05063266307115555f, 0.7910774946212769f, 0.8233226537704468f, 0.27534130215644836f, 0.712035596370697f, -0.09186610579490662f, 0.1044418066740036f, 0.8412436246871948f, 0.5575408339500427f, 0.9738261103630066f, 0.9157575368881226f, 0.6007510423660278f, 0.9297468662261963f, -0.5395050644874573f, 0.9320007562637329f, 0.689466118812561f, 0.1624428629875183f, 0.04083749279379845f, 0.7270215153694153f, 0.8297290802001953f, 0.6838142275810242f, -0.9106537103652954f, 0.6241403222084045f, 0.7849963903427124f, 0.2704348564147949f, 0.905605673789978f, 0.30575570464134216f, 0.9904605746269226f, 0.6834301948547363f, -0.8607726097106934f, 0.6538728475570679f, 0.2321290224790573f, 0.13629326224327087f, 0.8779155611991882f, 0.40975868701934814f, 0.11867080628871918f, 0.35703369975090027f, -0.18594257533550262f, 0.5408129096031189f, 0.8390741944313049f, 0.30185666680336f, 0.3953359127044678f, 0.026083314791321754f, 0.7748509645462036f, 0.241948664188385f, -0.6405664682388306f, 0.5050848126411438f, 0.07314293831586838f, 0.39012449979782104f, 0.7718076705932617f, 0.16587015986442566f, 0.9483358263969421f, 0.007815907709300518f, -0.8946390748023987f, 0.2305462658405304f, 0.08739933371543884f, 0.6383523344993591f, 0.8062261343002319f, 0.8901523947715759f, 0.6978263258934021f, 0.47904351353645325f, -0.2696971297264099f, 0.7008125185966492f, 0.7391533255577087f, 0.5894094705581665f, 0.9828044772148132f, 0.18060429394245148f, 0.09459761530160904f, 0.818983793258667f, -0.2683776319026947f, 0.863469123840332f, 0.8998939394950867f, 0.7026583552360535f, 0.9771005511283875f, 0.2662563920021057f, 0.6447330713272095f, 0.28405049443244934f, -0.25420328974723816f, 0.5330795645713806f, 0.4852778911590576f, 0.6135847568511963f, 0.2981141209602356f, 0.020778266713023186f, 0.9279466271400452f, 0.773786187171936f, -0.5693131685256958f, 0.12094578146934509f, 0.978581964969635f, 0.786858320236206f, 0.16689534485340118f, 0.6584563851356506f, 0.7364379167556763f, 0.008214827626943588f, -0.7353644967079163f, 0.4470650553703308f, 0.9360529184341431f, 0.7089064717292786f, 0.2995879054069519f, 0.6560347080230713f, 0.7369953393936157f, 0.46788179874420166f, -0.3795519769191742f, 0.944185733795166f, 0.9352753162384033f, 0.7628702521324158f, 0.26808077096939087f, 0.3064277470111847f, 0.5452984571456909f, 0.5685325860977173f, -0.20022813975811005f, 0.35819804668426514f, 0.7515762448310852f, 0.06913019716739655f, 0.17524589598178864f, 0.08772691339254379f, 0.49355679750442505f, 0.6518611907958984f, -0.12844261527061462f, 0.24222813546657562f, 0.09030061960220337f, 0.24560746550559998f, 0.6493409276008606f, 0.5034507513046265f, 0.5861884355545044f, 0.4393053352832794f, -0.3229106366634369f, 0.4696204960346222f, 0.7061737179756165f, 0.8620076179504395f, 0.04725632444024086f, 0.8006207942962646f, 0.7374510765075684f, 0.6367809176445007f, -0.6417512893676758f, 0.19580039381980896f, 0.34693634510040283f, 0.3762191832065582f, 0.8143042325973511f, 0.6763134002685547f, 0.6483334302902222f, 0.27801352739334106f, -0.6099042296409607f, 0.14116862416267395f, 0.9030699133872986f, 0.12265648692846298f, 0.9187377095222473f, 0.4834881126880646f, 0.47972434759140015f, 0.5334503054618835f, -0.6280720829963684f, 0.6065356135368347f, 0.4437105655670166f, 0.7123874425888062f, 0.3248799741268158f, 0.22278793156147003f, 0.3259297013282776f, 0.9147382974624634f, -0.3696366548538208f, 0.010772031731903553f, 0.5081811547279358f, 0.2807265520095825f, 0.690259575843811f, 0.46727097034454346f, 0.050553686916828156f, 0.2627774477005005f, -0.3710681200027466f, 0.07612494379281998f, 0.2608453929424286f, 0.6831154823303223f, 0.7467156648635864f, 0.6719473600387573f, 0.06736962497234344f, 0.9017684459686279f, -0.893338680267334f, 0.15491460263729095f, 0.3807359039783478f, 0.43202388286590576f, 0.993644118309021f, 0.46692025661468506f, 0.4230923354625702f, 0.042245786637067795f, -0.17283304035663605f, 0.4153536856174469f, 0.5120987296104431f, 0.2679014801979065f, 0.5079781413078308f, 0.41871023178100586f, 0.37443795800209045f, 0.8622614145278931f, -0.05941769853234291f, 0.3405458927154541f, 0.8582770228385925f, 0.3379022181034088f, 0.5598767995834351f, 0.8359050750732422f, 0.8931460380554199f, 0.40685179829597473f, -0.258689820766449f, 0.7411997318267822f, 0.34837689995765686f, 0.7421672344207764f, 0.06933010369539261f, 0.37022024393081665f, 0.6986542344093323f, 0.7533187866210938f, -0.7173088788986206f, 0.888042688369751f, 0.3495572805404663f, 0.8117273449897766f, 0.44836360216140747f, 0.7028586268424988f, 0.1909523904323578f, 0.841254472732544f, -0.9115331768989563f, 0.33400431275367737f, 0.4841563403606415f, 0.539556086063385f, 0.8452308773994446f, 0.7841998934745789f, 0.8766857385635376f, 0.7719994783401489f, -0.9558908939361572f, 0.8406186103820801f, 0.14606383442878723f, 0.5906294584274292f, 0.6546831727027893f, 0.21449227631092072f, 0.2599431574344635f, 0.19421108067035675f, -0.7975698709487915f, 0.371046781539917f, 0.5226749777793884f, 0.009972936473786831f, 0.6007036566734314f, 0.7061339616775513f, 0.5165976881980896f, 0.6886878609657288f, -0.6393975615501404f, 0.22398744523525238f, 0.46415895223617554f, 0.041699811816215515f, 0.408194363117218f, 0.5166777968406677f, 0.315067321062088f, 0.23071803152561188f, -0.7625645399093628f, 0.3216651380062103f, 0.9171137809753418f, 0.5824769139289856f, 0.4504373073577881f, 0.9761196970939636f, 0.5298740863800049f, 0.5155377388000488f, -0.7198992371559143f, 0.8235176801681519f, 0.8201784491539001f, 0.548279345035553f, 0.31189218163490295f, 0.27854710817337036f, 0.01409476064145565f, 0.5089935064315796f, -0.05975870043039322f, 0.12430489808320999f, 0.7397159337997437f, 0.7473401427268982f, 0.9537031650543213f, 0.47672903537750244f, 0.01023129653185606f, 0.07527627050876617f, -0.12111686170101166f, 0.31525951623916626f, 0.7709798216819763f, 0.5660597085952759f, 0.6135739088058472f, 0.18106143176555634f, 0.5351414084434509f, 0.540463924407959f, -0.1919216513633728f, 0.6302972435951233f, 0.6180647015571594f, 0.7897171974182129f, 0.35058754682540894f, 0.7743269205093384f, 0.39517152309417725f, 0.013095240108668804f, -0.7439889311790466f, 0.9004721641540527f, 0.933556318283081f, 0.24652667343616486f, 0.03512980043888092f, 0.8955162167549133f, 0.8993682265281677f, 0.4722258448600769f, -0.6835593581199646f, 0.16203846037387848f, 0.521621823310852f, 0.8206445574760437f, 0.9666661024093628f, 0.8464353680610657f, 0.30999594926834106f, 0.4762706756591797f, -0.8981562256813049f, 0.4943036735057831f, 0.4134664535522461f, 0.15108650922775269f, 0.2466040551662445f, 0.7893961071968079f, 0.09782734513282776f, 0.4226778447628021f, -0.20377406477928162f, 0.8702628016471863f, 0.4571021497249603f, 0.8927941918373108f, 0.6995804309844971f, 0.85813969373703f, 0.8490941524505615f, 0.5788679718971252f, -0.3202323019504547f, 0.9435814619064331f, 0.9800128936767578f, 0.25756725668907166f, 0.005611129105091095f, 0.03029262088239193f, 0.36041322350502014f, 0.8371034860610962f, -0.3848966658115387f, 0.12532687187194824f, 0.45479562878608704f, 0.7473822236061096f, 0.4435344636440277f, 0.8760912418365479f, 0.8124014139175415f, 0.08713670074939728f, -0.4896494448184967f, 0.8037298321723938f, 0.10568523406982422f, 0.1426461637020111f, 0.3601076602935791f, 0.8742914795875549f, 0.48358190059661865f, 0.702258825302124f, -0.29981857538223267f, 0.18346726894378662f, 0.7637507915496826f, 0.2671671509742737f, 0.7737765908241272f, 0.022686956450343132f, 0.49251869320869446f, 0.9488649368286133f, -0.07907785475254059f, 0.8327277898788452f, 0.5891520977020264f, 0.07147342711687088f, 0.19287532567977905f, 0.3352382779121399f, 0.3493490517139435f, 0.6935898065567017f, -0.38686785101890564f, 0.17480593919754028f, 0.783780038356781f, 0.9980517625808716f, 0.855204701423645f, 0.16062042117118835f, 0.37084394693374634f, 0.7000672817230225f, -0.6427374482154846f, 0.34507378935813904f, 0.33010900020599365f, 0.7635141015052795f, 0.1554621458053589f, 0.1778322458267212f, 0.5791277885437012f, 0.7772766351699829f, -0.21101336181163788f, 0.6126310229301453f, 0.7844752073287964f, 0.1889132708311081f, 0.3285830020904541f, 0.7266878485679626f, 0.35706827044487f, 0.037789374589920044f, -0.9563949108123779f, 0.1715124249458313f, 0.5954167246818542f, 0.6274344325065613f, 0.7971465587615967f, 0.5015425682067871f, 0.04568934068083763f, 0.6478670835494995f, -0.8446945548057556f, 0.11064260452985764f, 0.6301912665367126f, 0.1289617270231247f, 0.48648616671562195f, 0.8421220183372498f, 0.3781060576438904f, 0.3305322527885437f, -0.42140376567840576f, 0.9646320343017578f, 0.14746613800525665f, 0.21046248078346252f, 0.6486122012138367f, 0.24796532094478607f, 0.6869811415672302f, 0.3816556930541992f, -0.27848803997039795f, 0.23906706273555756f, 0.07216347008943558f, 0.1088140532374382f, 0.9655151963233948f, 0.46225810050964355f, 0.8878049254417419f, 0.48724523186683655f, -0.17797356843948364f, 0.6462572813034058f, 0.07978072762489319f, 0.04574936628341675f, 0.08390713483095169f, 0.327197402715683f, 0.42039865255355835f, 0.27378779649734497f, -0.05959368497133255f, 0.40311098098754883f, 0.3875345289707184f, 0.7431374192237854f, 0.049736425280570984f, 0.8758926391601562f, 0.5387388467788696f, 0.0186444241553545f, -0.04797131195664406f, 0.5100393891334534f, 0.11595926433801651f, 0.4222709536552429f, 0.7844825387001038f, 0.9394957423210144f, 0.9370837807655334f, 0.7479697465896606f, -0.6469495296478271f, 0.9584077000617981f, 0.4463430345058441f, 0.17069731652736664f, 0.29305610060691833f, 0.8753182888031006f, 0.13033117353916168f, 0.8455733060836792f, -0.7328014969825745f, 0.4272148311138153f, 0.5030490756034851f, 0.7996070981025696f, 0.5076717138290405f, 0.015225935727357864f, 0.3721773326396942f, 0.06372877210378647f, -0.07203032821416855f, 0.4284544587135315f, 0.5893986821174622f, 0.9088473320007324f, 0.8135601878166199f, 0.167277991771698f, 0.9488809108734131f, 0.834805965423584f, -0.39925485849380493f, 0.032444048672914505f, 0.26503774523735046f, 0.2392868995666504f, 0.48430168628692627f, 0.5779551863670349f, 0.11921309679746628f, 0.36397069692611694f, -0.024076681584119797f, 0.5206741094589233f, 0.6199760437011719f, 0.9643304347991943f, 0.49481961131095886f, 0.7969567775726318f, 0.20367243885993958f, 0.5390767455101013f, -0.21881575882434845f, 0.982814371585846f, 0.06500986963510513f, 0.5550639033317566f, 0.4858236014842987f, 0.9155523180961609f, 0.3812010586261749f, 0.5945838093757629f, -0.9225109219551086f, 0.9866366386413574f, 0.8891627192497253f, 0.6951850652694702f, 0.33835723996162415f, 0.8031914830207825f, 0.24772672355175018f, 0.6457895636558533f, -0.3367460370063782f, 0.8287025094032288f, 0.24931977689266205f, 0.02521469071507454f, 0.4026395380496979f, 0.8187665343284607f, 0.5362242460250854f, 0.48046875f, -0.498760849237442f, 0.3987598419189453f, 0.2461286336183548f, 0.7968040108680725f, 0.5773125886917114f, 0.16877666115760803f, 0.5339105725288391f, 0.935313880443573f, -0.7601966857910156f, 0.9901518225669861f, 0.40440818667411804f, 0.0796264111995697f, 0.26015958189964294f, 0.9626433849334717f, 0.9485886693000793f, 0.7716334462165833f, -0.7581858038902283f, 0.9254281520843506f, 0.678945004940033f, 0.422781378030777f, 0.9012545347213745f, 0.47954463958740234f, 0.13776668906211853f, 0.7424529790878296f, -0.667056143283844f, 0.63001549243927f, 0.19331109523773193f, 0.21383558213710785f, 0.7047697305679321f, 0.628326416015625f, 0.5955111384391785f, 0.4535601735115051f, -0.5720632076263428f, 0.943769097328186f, 0.28477710485458374f, 0.01309783011674881f, 0.015318106859922409f, 0.7457844018936157f, 0.4753853380680084f, 0.599681556224823f, -0.6793677806854248f, 0.22971977293491364f, 0.03273126855492592f, 0.7796636819839478f, 0.9613867402076721f, 0.4378257989883423f, 0.0705452710390091f, 0.8288443088531494f, -0.4576205611228943f, 0.35364487767219543f, 0.6047002077102661f, 0.35953783988952637f, 0.6507227420806885f, 0.05703909695148468f, 0.1534298062324524f, 0.8890737891197205f, -0.8749484419822693f, 0.5289803147315979f, 0.939166784286499f, 0.3573051393032074f, 0.29478996992111206f, 0.4955681562423706f, 0.9241779446601868f, 0.04208793118596077f, -0.5741328597068787f, 0.11701112240552902f, 0.6404640674591064f, 0.6535393595695496f, 0.09620177745819092f, 0.2842932641506195f, 0.8253545165061951f, 0.6202232837677002f, -0.9257827997207642f, 0.5241797566413879f, 0.7980908155441284f, 0.811438798904419f, 0.18055765330791473f, 0.3427201211452484f, 0.2621484398841858f, 0.13119253516197205f, -0.03476186469197273f, 0.1126040518283844f, 0.4473303258419037f, 0.5055592656135559f, 0.8666898012161255f, 0.923499584197998f, 0.8777970671653748f, 0.2643110454082489f, -0.1530059576034546f, 0.1875869333744049f, 0.5690355896949768f, 0.4956680238246918f, 0.7000299096107483f, 0.18416231870651245f, 0.5300823450088501f, 0.7758013010025024f, -0.4034263491630554f, 0.983344554901123f, 0.3520504832267761f, 0.8467376232147217f, 0.669725775718689f, 0.10161779820919037f, 0.13855864107608795f, 0.29959678649902344f, -0.24523551762104034f, 0.5788182616233826f, 0.7823728919029236f, 0.47238340973854065f, 0.19030781090259552f, 0.2322588413953781f, 0.39476630091667175f, 0.18241125345230103f, -0.8267762064933777f, 0.6515896916389465f, 0.8911784291267395f, 0.21217262744903564f, 0.4060608744621277f, 0.898591935634613f, 0.3044930398464203f, 0.299401193857193f, -0.4242965579032898f, 0.026610950008034706f, 0.9244611859321594f, 0.20651541650295258f, 0.17196457087993622f, 0.9818812012672424f, 0.5791153907775879f, 0.8230843544006348f, -0.13162006437778473f, 0.39262598752975464f, 0.7933586835861206f, 0.4767022430896759f, 0.11000499129295349f, 0.9720761775970459f, 0.4656168520450592f, 0.5587961077690125f, -0.43529176712036133f, 0.8795414566993713f, 0.8110752105712891f, 0.33635836839675903f, 0.7636903524398804f, 0.6712701916694641f, 0.23661024868488312f, 0.5943132638931274f, -0.06613226979970932f, 0.04849995672702789f, 0.5739995837211609f, 0.44583338499069214f, 0.7395660877227783f, 0.8097615838050842f, 0.10816944390535355f, 0.5971312522888184f, -0.04924719035625458f, 0.08480623364448547f, 0.7133296728134155f, 0.1681259572505951f, 0.28336188197135925f, 0.6074507832527161f, 0.7429460883140564f, 0.9964545965194702f, -0.49253296852111816f, 0.6295465230941772f, 0.5015478730201721f, 0.09672419726848602f, 0.22034543752670288f, 0.18083488941192627f, 0.42598438262939453f, 0.9233558773994446f, -0.5386771559715271f, 0.9699063897132874f, 0.3860939145088196f, 0.9973949193954468f, 0.30726903676986694f, 0.7592288851737976f, 0.935753583908081f, 0.7727692127227783f, -0.03853868320584297f, 0.484060138463974f, 0.8585340976715088f, 0.008463818579912186f, 0.9703558683395386f, 0.9691047668457031f, 0.5599489212036133f, 0.5126900672912598f, -0.5462148785591125f, 0.2337639480829239f, 0.3859920799732208f, 0.18701951205730438f, 0.2621040940284729f, 0.06153440475463867f, 0.3632729947566986f, 0.7168328762054443f, -0.02158156968653202f, 0.49988123774528503f, 0.899064838886261f, 0.769946277141571f, 0.3775607645511627f, 0.9854969382286072f, 0.3391757905483246f, 0.1531614363193512f, -0.2181282490491867f, 0.3190276324748993f, 0.07842688262462616f, 0.20492355525493622f, 0.880203366279602f, 0.9406561851501465f, 0.05020209029316902f, 0.33762672543525696f, -0.3154745399951935f, 0.4671918749809265f, 0.9742250442504883f, 0.9455762505531311f, 0.36576247215270996f, 0.16805103421211243f, 0.6938987374305725f, 0.8996235132217407f, -0.5567163825035095f, 0.4593384265899658f, 0.5580974817276001f, 0.6966037154197693f, 0.8627561330795288f, 0.9810308814048767f, 0.8562144637107849f, 0.7249159216880798f, -0.476773202419281f, 0.6676039695739746f, 0.6090381741523743f, 0.6844716668128967f, 0.3784453570842743f, 0.01969815418124199f, 0.20767274498939514f, 0.4094223380088806f, -0.885869026184082f, 0.29939523339271545f, 0.1220574826002121f, 0.43930700421333313f, 0.926637589931488f, 0.9816750884056091f, 0.453218549489975f, 0.9406862258911133f, -0.6298463344573975f, 0.8595163822174072f, 0.20419347286224365f, 0.7095339298248291f, 0.6778115034103394f, 0.8457879424095154f, 0.13508249819278717f, 0.5309525728225708f, -0.06813623756170273f, 0.8794236183166504f, 0.5614801645278931f, 0.2509033679962158f, 0.7157549262046814f, 0.0959913432598114f, 0.33230388164520264f, 0.06503626704216003f, -0.9471966028213501f, 0.33378154039382935f, 0.6604868173599243f, 0.1079387217760086f, 0.20833534002304077f, 0.2492547482252121f, 0.8753893375396729f, 0.2430710792541504f, -0.8868503570556641f, 0.7268944978713989f, 0.8190329074859619f, 0.48431408405303955f, 0.5599201917648315f, 0.35304781794548035f, 0.8269953727722168f, 0.17184971272945404f, -0.9430452585220337f, 0.16399571299552917f, 0.19025969505310059f, 0.9004191756248474f, 0.5589548349380493f, 0.6531519889831543f, 0.37200096249580383f, 0.5262866616249084f, -0.9103702902793884f, 0.6964074373245239f, 0.8080938458442688f, 0.7335888743400574f, 0.9311173558235168f, 0.09539416432380676f, 0.18654385209083557f, 0.050573788583278656f, -0.6914500594139099f, 0.7525279521942139f, 0.5465195775032043f, 0.5948522686958313f, 0.6417641043663025f, 0.7054075598716736f, 0.5536646246910095f, 0.30783528089523315f, -0.6688405275344849f, 0.8636226058006287f, 0.5603682994842529f, 0.4748625159263611f, 0.3727303445339203f, 0.2610403001308441f, 0.9103529453277588f, 0.41682517528533936f, -0.9147400856018066f, 0.8681711554527283f, 0.5252787470817566f, 0.16991208493709564f, 0.9114633202552795f, 0.1416674554347992f, 0.7869411706924438f, 0.6836716532707214f, -0.8769689202308655f, 0.5530033707618713f, 0.004998008720576763f, 0.03414991497993469f, 0.23435747623443604f, 0.628661036491394f, 0.259872168302536f, 0.008854934945702553f, -0.19289395213127136f, 0.19524012506008148f, 0.33419567346572876f, 0.34699249267578125f, 0.3543674051761627f, 0.5944761633872986f, 0.3491224944591522f, 0.24079416692256927f, -0.6351489424705505f, 0.46629369258880615f, 0.6659866571426392f, 0.5479398369789124f, 0.6113620400428772f, 0.525357723236084f, 0.8262682557106018f, 0.7669296264648438f, -0.24177391827106476f, 0.7462493777275085f, 0.36643552780151367f, 0.8820178508758545f, 0.37536510825157166f, 0.43907761573791504f, 0.28916746377944946f, 0.7807132601737976f, -0.5337035655975342f, 0.8972933888435364f, 0.016176901757717133f, 0.5319651365280151f, 0.9121288657188416f, 0.47747042775154114f, 0.7067989706993103f, 0.0038802814669907093f, -0.4849574863910675f, 0.061037782579660416f, 0.7153933048248291f, 0.569226086139679f, 0.8817145824432373f, 0.7516274452209473f, 0.7811353206634521f, 0.4038753807544708f, -0.05955885350704193f, 0.5240216851234436f, 0.18908177316188812f, 0.8062152862548828f, 0.8156912326812744f, 0.8387554883956909f, 0.04107941687107086f, 0.3617725372314453f, -0.7825663089752197f, 0.3226613700389862f, 0.5948442220687866f, 0.6488914489746094f, 0.7480144500732422f, 0.5779772996902466f, 0.3884846568107605f, 0.7362082004547119f, -0.264808714389801f, 0.697559654712677f, 0.6146076321601868f, 0.387539267539978f, 0.1411980241537094f, 0.07352419942617416f, 0.27112331986427307f, 0.899230420589447f, -0.7363948225975037f, 0.7313724160194397f, 0.85395348072052f, 0.44630110263824463f, 0.5812656879425049f, 0.6292763352394104f, 0.006607091054320335f, 0.6336178183555603f, -0.9948086738586426f, 0.7631881237030029f, 0.8675966858863831f, 0.5245418548583984f, 0.3512071371078491f, 0.560992419719696f, 0.37723734974861145f, 0.3299311697483063f, -0.685847818851471f, 0.845264732837677f, 0.11113312095403671f, 0.15978382527828217f, 0.4037379026412964f, 0.221955344080925f, 0.9266073703765869f, 0.7698199152946472f, -0.11221969872713089f, 0.43768778443336487f, 0.4219151437282562f, 0.5014216303825378f, 0.1821804642677307f, 0.8034970164299011f, 0.48157548904418945f, 0.8069199323654175f, -0.8384896516799927f, 0.5494069457054138f, 0.4973307251930237f, 0.00568411173298955f, 0.3222176432609558f, 0.29984378814697266f, 0.8104376792907715f, 0.8801630735397339f, -0.07242803275585175f, 0.9939119219779968f, 0.5320971012115479f, 0.009916556067764759f, 0.2360963225364685f, 0.009907789528369904f, 0.6654072403907776f, 0.44390520453453064f, -0.24597349762916565f, 0.2142062932252884f, 0.9277939796447754f, 0.6683176159858704f, 0.2942220866680145f, 0.5343906283378601f, 0.12569423019886017f, 0.7718812823295593f, -0.37069010734558105f, 0.1051424890756607f, 0.8243435025215149f, 0.7752169966697693f, 0.8877426981925964f, 0.6880349516868591f, 0.1105494275689125f, 0.3088802099227905f, -0.8133771419525146f, 0.5425064563751221f, 0.039140842854976654f, 0.8795574307441711f, 0.7902451753616333f, 0.029061177745461464f, 0.259672075510025f, 0.8391740322113037f, -0.19271016120910645f, 0.5990452766418457f, 0.515252947807312f, 0.6315569877624512f, 0.6871163249015808f, 0.9530165195465088f, 0.32384994626045227f, 0.3673437237739563f, -0.7739472389221191f, 0.48000210523605347f, 0.3209459185600281f, 0.23768438398838043f, 0.038369450718164444f, 0.7988195419311523f, 0.03488913178443909f, 0.7233985066413879f, -0.9102632999420166f, 0.15453524887561798f, 0.48025283217430115f, 0.5824107527732849f, 0.9744049906730652f, 0.415408194065094f, 0.6072706580162048f, 0.1004650816321373f, -0.3204706311225891f, 0.8276224136352539f, 0.18706271052360535f, 0.37309950590133667f, 0.6925906538963318f, 0.05786783620715141f, 0.4948326051235199f, 0.8845416307449341f, -0.425960510969162f, 0.5664833784103394f, 0.25128525495529175f, 0.44786497950553894f, 0.008099140599370003f, 0.24245025217533112f, 0.653708815574646f, 0.299407035112381f, -0.14172831177711487f, 0.9546895027160645f, 0.8191869854927063f, 0.6043813228607178f, 0.23965492844581604f, 0.06889097392559052f, 0.5017678737640381f, 0.5074108839035034f, -0.917916476726532f, 0.551459550857544f, 0.4912695586681366f, 0.7003723978996277f, 0.003213144838809967f, 0.048208385705947876f, 0.9640570282936096f, 0.11799200624227524f, -0.8167043924331665f, 0.2707340717315674f, 0.12268876284360886f, 0.2845507264137268f, 0.23741962015628815f, 0.6215278506278992f, 0.47081857919692993f, 0.3393958508968353f, -0.14571735262870789f, 0.5865076184272766f, 0.3252512216567993f, 0.31363728642463684f, 0.9625831246376038f, 0.9122138023376465f, 0.23770512640476227f, 0.23219141364097595f, -0.22449398040771484f, 0.011602132581174374f, 0.011813241057097912f, 0.5165804028511047f, 0.14670182764530182f, 0.08186272531747818f, 0.9957797527313232f, 0.7005782723426819f, -0.977790117263794f, 0.11835690587759018f, 0.5841489434242249f, 0.8978205919265747f, 0.0035182444844394922f, 0.1566663682460785f, 0.14218243956565857f, 0.6715070605278015f, -0.37349018454551697f, 0.6178377270698547f, 0.09208520501852036f, 0.058507636189460754f, 0.9513803720474243f, 0.21955806016921997f, 0.2638395428657532f, 0.374121755361557f, -0.8749815821647644f, 0.7651337385177612f, 0.6714226007461548f, 0.42522889375686646f, 0.18035514652729034f, 0.945410966873169f, 0.5588957071304321f, 0.5134769082069397f, -0.585224449634552f, 0.9207895994186401f, 0.6801855564117432f, 0.46408510208129883f, 0.11844982206821442f, 0.903702974319458f, 0.838640570640564f, 0.024558722972869873f, -0.36925163865089417f, 0.0016661870758980513f, 0.6958061456680298f, 0.48691320419311523f, 0.696917712688446f, 0.936718225479126f, 0.34069663286209106f, 0.9658029079437256f, -0.5082279443740845f, 0.5049556493759155f, 0.7760319709777832f, 0.36559367179870605f, 0.3894868791103363f, 0.5450354814529419f, 0.9332537055015564f, 0.4154260754585266f, -0.6839767694473267f, 0.24084261059761047f, 0.2775286138057709f, 0.4372713565826416f, 0.1262751817703247f, 0.6463139057159424f, 0.20959605276584625f, 0.7099626064300537f, -0.25633329153060913f, 0.5005509853363037f, 0.9838062524795532f, 0.325647234916687f, 0.0900128111243248f, 0.47811034321784973f, 0.525766909122467f, 0.7650443315505981f, -0.3927544951438904f, 0.620729386806488f, 0.571805477142334f, 0.4607967138290405f, 0.679297685623169f, 0.7812127470970154f, 0.40625450015068054f, 0.2704688608646393f, -0.8443835377693176f, 0.28927361965179443f, 0.28119659423828125f, 0.6786113381385803f, 0.5396168231964111f, 0.2770082950592041f, 0.14766469597816467f, 0.5536301136016846f, -0.1576324999332428f, 0.7818159461021423f, 0.4231337904930115f, 0.8945560455322266f, 0.9229299426078796f, 0.4798342287540436f, 0.23448385298252106f, 0.3832084536552429f, -0.8104473352432251f, 0.5867611169815063f, 0.11105404049158096f, 0.03931007906794548f, 0.32728517055511475f, 0.27955755591392517f, 0.20994801819324493f, 0.8642482161521912f, -0.02852361649274826f, 0.3398790657520294f, 0.26331406831741333f, 0.7973106503486633f, 0.371640145778656f, 0.06966307014226913f, 0.9270057082176208f, 0.5910483598709106f, -0.8654130697250366f, 0.8865521550178528f, 0.8003056645393372f, 0.8980110287666321f, 0.008840229362249374f, 0.2362980842590332f, 0.5289849042892456f, 0.7924148440361023f, -0.4806968867778778f, 0.8187989592552185f, 0.5024069547653198f, 0.4277770221233368f, 0.9107376337051392f, 0.326703816652298f, 0.6380307078361511f, 0.6356552243232727f, -0.6165462732315063f, 0.3978024125099182f, 0.6271229982376099f, 0.32519659399986267f, 0.6278194785118103f, 0.2607033848762512f, 0.9722840785980225f, 0.24170427024364471f, -0.7126600742340088f, 0.21702677011489868f, 0.7323829531669617f, 0.1827218383550644f, 0.7992646098136902f, 0.73284912109375f, 0.042426079511642456f, 0.09336978942155838f, -0.596123993396759f, 0.8754305243492126f, 0.1791788637638092f, 0.2196488082408905f, 0.046813346445560455f, 0.06266183406114578f, 0.7566540241241455f, 0.15331262350082397f, -0.19348575174808502f, 0.8132328391075134f, 0.7542982697486877f, 0.3587406575679779f, 0.9736934900283813f, 0.3787117302417755f, 0.2862572968006134f, 0.7149850726127625f, -0.42747995257377625f, 0.6410321593284607f, 0.7555782794952393f, 0.7815792560577393f, 0.08539675176143646f, 0.5377488732337952f, 0.9557621479034424f, 0.5055461525917053f, -0.05474540591239929f, 0.4984417259693146f, 0.5381335020065308f, 0.3388095498085022f, 0.04047912731766701f, 0.18413960933685303f, 0.24129080772399902f, 0.13887396454811096f, -0.921943724155426f, 0.8914285898208618f, 0.6293297410011292f, 0.5684582591056824f, 0.5365409851074219f, 0.4754084348678589f, 0.8404077291488647f, 0.5718269348144531f, -0.45153871178627014f, 0.5128698348999023f, 0.10275770723819733f, 0.8472486734390259f, 0.7007560133934021f, 0.2268943190574646f, 0.4477267861366272f, 0.47218218445777893f, -0.5744351744651794f, 0.9561738967895508f, 0.3354330062866211f, 0.39012274146080017f, 0.2555372416973114f, 0.0016264321748167276f, 0.9478281736373901f, 0.37795376777648926f, -0.6067607402801514f, 0.3389005959033966f, 0.65498948097229f, 0.544719934463501f, 0.9805127382278442f, 0.281901478767395f, 0.36354243755340576f, 0.1822708696126938f, -0.03287944197654724f, 0.809231698513031f, 0.5364634394645691f, 0.7883051633834839f, 0.02297724224627018f, 0.7773784399032593f, 0.6739249229431152f, 0.6473700404167175f, -0.4818275570869446f, 0.20332841575145721f, 0.7797746062278748f, 0.8302324414253235f, 0.25700122117996216f, 0.2071349024772644f, 0.4118662178516388f, 0.30862677097320557f, -0.2511257827281952f, 0.9371126294136047f, 0.6645498275756836f, 0.1288233995437622f, 0.8525919914245605f, 0.6082934737205505f, 0.5305095911026001f, 0.2736281156539917f, -0.5387933254241943f, 0.12778763473033905f, 0.3091167211532593f, 0.012607134878635406f, 0.8381320238113403f, 0.6148157715797424f, 0.4997369945049286f, 0.3280014097690582f, -0.40690669417381287f, 0.9905074834823608f, 0.9678939580917358f, 0.15993471443653107f, 0.15816913545131683f, 0.9473568797111511f, 0.09258925914764404f, 0.9133391976356506f, -0.438190221786499f, 0.048383936285972595f, 0.6832211017608643f, 0.6715747117996216f, 0.26776260137557983f, 0.29959556460380554f, 0.6340351700782776f, 0.8649344444274902f, -0.10952959954738617f, 0.3165106177330017f, 0.5352869629859924f, 0.6432580947875977f, 0.5672939419746399f, 0.06487235426902771f, 0.6514614224433899f, 0.4706211984157562f, -0.2577264606952667f, 0.015055459924042225f, 0.040655940771102905f, 0.607265293598175f, 0.49893519282341003f, 0.3770850896835327f, 0.0021709532011300325f, 0.933255672454834f, -0.6263852715492249f, 0.05955081433057785f, 0.7542683482170105f, 0.4779810905456543f, 0.06991168111562729f, 0.6366071105003357f, 0.14235590398311615f, 0.8595159649848938f, -0.13628248870372772f, 0.34982240200042725f, 0.958461344242096f, 0.5621548891067505f, 0.9759673476219177f, 0.08871238678693771f, 0.5703557133674622f, 0.5667257905006409f, -0.5633310675621033f, 0.9188233613967896f, 0.8372640013694763f, 0.4764903783798218f, 0.8040387034416199f, 0.4859609603881836f, 0.0405789390206337f, 0.20141208171844482f, -0.22876568138599396f, 0.3801298141479492f, 0.9209476113319397f, 0.5401619672775269f, 0.3729633390903473f, 0.617638349533081f, 0.34846994280815125f, 0.06923089176416397f, -0.7601391673088074f, 0.5812899470329285f, 0.42726296186447144f, 0.01289442926645279f, 0.273965448141098f, 0.06161079555749893f, 0.05167807266116142f, 0.33863797783851624f, -0.3217564523220062f, 0.15809780359268188f, 0.6536017656326294f, 0.579082190990448f, 0.8735101222991943f, 0.9159366488456726f, 0.5958870053291321f, 0.7749385237693787f, -0.6353418231010437f, 0.20871348679065704f, 0.7628622055053711f, 0.9221130013465881f, 0.4442824721336365f, 0.8241260051727295f, 0.6947681903839111f, 0.05456206947565079f, -0.25673070549964905f, 0.25205114483833313f, 0.8939968943595886f, 0.5216691493988037f, 0.9712163209915161f, 0.3001747727394104f, 0.6580327153205872f, 0.7470890879631042f, -0.35359302163124084f, 0.46696558594703674f, 0.23809297382831573f, 0.8700403571128845f, 0.3046593964099884f, 0.1391030251979828f, 0.7588454484939575f, 0.27497872710227966f, -0.678303062915802f, 0.18279463052749634f, 0.32840701937675476f, 0.9463333487510681f, 0.2613823115825653f, 0.2867922782897949f, 0.9230840802192688f, 0.7085409164428711f, -0.7825241088867188f, 0.44394955039024353f, 0.6069748401641846f, 0.042938459664583206f, 0.19092868268489838f, 0.2463923841714859f, 0.9007198214530945f, 0.021814817562699318f, -0.5196966528892517f, 0.2622338831424713f, 0.5773731470108032f, 0.9351106882095337f, 0.7915634512901306f, 0.8898773193359375f, 0.8411157727241516f, 0.9313283562660217f, -0.5412706136703491f, 0.2955892086029053f, 0.2775856852531433f, 0.15737870335578918f, 0.44404175877571106f, 0.711283802986145f, 0.5865153074264526f, 0.6487711071968079f, -0.6152107119560242f, 0.10228799283504486f, 0.8006904125213623f, 0.8292861580848694f, 0.3234984278678894f, 0.5603846311569214f, 0.9019166231155396f, 0.3956604599952698f, -0.9654427170753479f, 0.41068997979164124f, 0.13518363237380981f, 0.10089432448148727f, 0.9864150881767273f, 0.6186332702636719f, 0.8569084405899048f, 0.3037472367286682f, -0.8327888250350952f, 0.3032974302768707f, 0.06492843478918076f, 0.4073507785797119f, 0.4068966209888458f, 0.082337386906147f, 0.4182966649532318f, 0.38238924741744995f, -0.5356393456459045f, 0.7487006187438965f, 0.8641542196273804f, 0.4880821108818054f, 0.47524139285087585f, 0.6277479529380798f, 0.46338313817977905f, 0.8642103672027588f, -0.24152450263500214f, 0.8510134220123291f, 0.8162897825241089f, 0.34125155210494995f, 0.8091797232627869f, 0.0332413949072361f, 0.710167407989502f, 0.8079835772514343f, -0.03921230509877205f, 0.8351860642433167f, 0.6477697491645813f, 0.8646817803382874f, 0.9788170456886292f, 0.9253438711166382f, 0.0020590978674590588f, 0.1276979297399521f, -0.1576727032661438f, 0.4173297584056854f, 0.5612521767616272f, 0.32539817690849304f, 0.5578720569610596f, 0.5483851432800293f, 0.700857937335968f, 0.3067063093185425f, -0.3938777446746826f, 0.06162085756659508f, 0.3427524268627167f, 0.7585145831108093f, 0.6245091557502747f, 0.7020404934883118f, 0.3071664571762085f, 0.2699612081050873f, -0.5022978782653809f, 0.244257390499115f, 0.22084690630435944f, 0.22675356268882751f, 0.5586540699005127f, 0.48830512166023254f, 0.9133228063583374f, 0.8291506171226501f, -0.7473087906837463f, 0.44672414660453796f, 0.6182674169540405f, 0.7250903248786926f, 0.17919893562793732f, 0.7798101305961609f, 0.0047039249911904335f, 0.9510230422019958f, -0.1889062076807022f, 0.44251975417137146f, 0.04419731721282005f, 0.021030893549323082f, 0.961135983467102f, 0.32027167081832886f, 0.2139265388250351f, 0.16040173172950745f, -0.18573294579982758f, 0.6606243252754211f, 0.18911390006542206f, 0.0026820835191756487f, 0.7517188787460327f, 0.11588121205568314f, 0.20663540065288544f, 0.6765635013580322f, -0.454242080450058f, 0.43295127153396606f, 0.528467059135437f, 0.6426334381103516f, 0.42652627825737f, 0.7160484790802002f, 0.47276800870895386f, 0.08646880090236664f, -0.19297204911708832f, 0.6866942644119263f, 0.2050432711839676f, 0.03991534933447838f, 0.5916661024093628f, 0.670062780380249f, 0.7734032273292542f, 0.08686400204896927f, -0.07020848989486694f, 0.3785005807876587f, 0.5769898891448975f, 0.4322892725467682f, 0.356850802898407f, 0.2797730565071106f, 0.601021409034729f, 0.8216813206672668f, -0.7775482535362244f, 0.887356698513031f, 0.015591169707477093f, 0.15408720076084137f, 0.29575836658477783f, 0.9905058741569519f, 0.7748116254806519f, 0.7008248567581177f, -0.6646081209182739f, 0.954590380191803f, 0.7855246067047119f, 0.5087692141532898f, 0.3368779122829437f, 0.9232786297798157f, 0.15761004388332367f, 0.861812949180603f, -0.061685021966695786f, 0.9241916537284851f, 0.6205100417137146f, 0.9763492345809937f, 0.3651334047317505f, 0.7409932613372803f, 0.07137203216552734f, 0.2425290197134018f, -0.3906627893447876f, 0.5809389352798462f, 0.11115852743387222f, 0.38650354743003845f, 0.5062469244003296f, 0.23707623779773712f, 0.9629796743392944f, 0.7833746671676636f, -0.4439777135848999f, 0.9688477516174316f, 0.7231343984603882f, 0.9197982549667358f, 0.9272449016571045f, 0.45810893177986145f, 0.9192230105400085f, 0.2014196813106537f, -0.8700417280197144f, 0.13883793354034424f, 0.41978079080581665f, 0.9135292768478394f, 0.8126493096351624f, 0.04610683023929596f, 0.15569967031478882f, 0.6578022241592407f, -0.16982805728912354f, 0.7141500115394592f, 0.2917137145996094f, 0.837846577167511f, 0.6298165321350098f, 0.9872027039527893f, 0.3783004879951477f, 0.18701687455177307f, -0.0011277582962065935f, 0.0724763423204422f, 0.6302055716514587f, 0.9181770086288452f, 0.603455662727356f, 0.14548859000205994f, 0.027611758559942245f, 0.9366119503974915f, -0.3842877149581909f, 0.5613253712654114f, 0.9619826078414917f, 0.6963545083999634f, 0.6181048154830933f, 0.38430750370025635f, 0.17199960350990295f, 0.8811128735542297f, -0.6614646911621094f, 0.407166451215744f, 0.32122698426246643f, 0.8575189709663391f, 0.22549542784690857f, 0.542267382144928f, 0.0469500906765461f, 0.8564711213111877f, -0.8862619996070862f, 0.7052718997001648f, 0.5516305565834045f, 0.9703276753425598f, 0.9538066983222961f, 0.963339626789093f, 0.22411991655826569f, 0.0049109142273664474f, -0.18223203718662262f, 0.15517282485961914f, 0.6419276595115662f, 0.9002151489257812f, 0.6054328083992004f, 0.12446307390928268f, 0.9528920650482178f, 0.3236229419708252f, -0.9460150003433228f, 0.4088519811630249f, 0.7308881878852844f, 0.6988528966903687f, 0.3496190011501312f, 0.6655849814414978f, 0.1588231921195984f, 0.80741286277771f, -0.06034625321626663f, 0.8706017732620239f, 0.6985388994216919f, 0.0009118266752921045f, 0.3795318007469177f, 0.9974249601364136f, 0.5821566581726074f, 0.16816595196723938f, -0.8657814860343933f, 0.644421398639679f, 0.6795912384986877f, 0.11808715760707855f, 0.5643410682678223f, 0.4298326075077057f, 0.614531934261322f, 0.9252768754959106f, -0.308489590883255f, 0.4266239404678345f, 0.8054547309875488f, 0.9955222606658936f, 0.03950605168938637f, 0.7381595373153687f, 0.27836260199546814f, 0.9698251485824585f, -0.1703810840845108f, 0.1891806721687317f, 0.3301416039466858f, 0.8769330978393555f, 0.6698101162910461f, 0.9301506280899048f, 0.6356351375579834f, 0.6377316117286682f, -0.07081342488527298f, 0.17299602925777435f, 0.9371086359024048f, 0.5519812107086182f, 0.6995261311531067f, 0.0877242162823677f, 0.4967972934246063f, 0.8908548355102539f, -0.8633397221565247f, 0.02497243322432041f, 0.353525310754776f, 0.8568832874298096f, 0.9236020445823669f, 0.521291196346283f, 0.9679954051971436f, 0.532447874546051f, -0.27544474601745605f, 0.5198265314102173f, 0.3312476873397827f, 0.920464813709259f, 0.09228654950857162f, 0.3572537899017334f, 0.6777480840682983f, 0.9669642448425293f, -0.6343472599983215f, 0.5786816477775574f, 0.9356985688209534f, 0.7914524674415588f, 0.9554285407066345f, 0.6909747123718262f, 0.8066301345825195f, 0.7433843016624451f, -0.9324567317962646f, 0.16695468127727509f, 0.6677006483078003f, 0.6194729208946228f, 0.5133019089698792f, 0.8844609260559082f, 0.3178258538246155f, 0.4515480101108551f, -0.8164159655570984f, 0.441409707069397f, 0.6295788288116455f, 0.9483464360237122f, 0.5991895198822021f, 0.3774697780609131f, 0.11243269592523575f, 0.06252631545066833f, -0.27946290373802185f, 0.4166097044944763f, 0.33913207054138184f, 0.4999193549156189f, 0.3173021376132965f, 0.1892971694469452f, 0.7021823525428772f, 0.03917985036969185f, -0.11722353845834732f, 0.8999365568161011f, 0.9073235392570496f, 0.3309096097946167f, 0.8063836097717285f, 0.8177704811096191f, 0.08166489750146866f, 0.9212014079093933f, -0.10079614073038101f, 0.6132789254188538f, 0.726828396320343f, 0.6955903768539429f, 0.9591151475906372f, 0.13434913754463196f, 0.57199627161026f, 0.5649867653846741f, -0.8284542560577393f, 0.308773934841156f, 0.12818670272827148f, 0.488707959651947f, 0.686822235584259f, 0.32057270407676697f, 0.06062278524041176f, 0.2025676816701889f, -0.6242576241493225f, 0.12252405285835266f, 0.383661150932312f, 0.29773572087287903f, 0.6245941519737244f, 0.36016228795051575f, 0.4424024522304535f, 0.8486515283584595f, -0.14870846271514893f, 0.3023446500301361f, 0.3552164137363434f, 0.8636777997016907f, 0.3129495680332184f, 0.32987964153289795f, 0.014217612333595753f, 0.6346150040626526f, -0.6147540807723999f, 0.09688249975442886f, 0.9340182542800903f, 0.49803730845451355f, 0.8607807159423828f, 0.779222309589386f, 0.8697476387023926f, 0.17081618309020996f, -0.5251673460006714f, 0.2745319902896881f, 0.5141861438751221f, 0.4413442015647888f, 0.36181557178497314f, 0.022292084991931915f, 0.47613275051116943f, 0.41888123750686646f, -0.4756057858467102f, 0.9992407560348511f, 0.1881628781557083f, 0.6528970003128052f, 0.6642721891403198f, 0.03982074558734894f, 0.9784036874771118f, 0.062255389988422394f, -0.6071507334709167f, 0.6886504292488098f, 0.5311115384101868f, 0.51641446352005f, 0.39406394958496094f, 0.7468159794807434f, 0.049259401857852936f, 0.7698203921318054f, -0.8787469863891602f, 0.8993214964866638f, 0.969070553779602f, 0.9274696111679077f, 0.7271041870117188f, 0.7288404107093811f, 0.8660353422164917f, 0.9273079633712769f, -0.9577144980430603f, 0.9060932397842407f, 0.02539508417248726f, 0.034486956894397736f, 0.8601793646812439f, 0.4161074459552765f, 0.16620022058486938f, 0.8614345192909241f, -0.43809908628463745f, 0.6030964851379395f, 0.4204423725605011f, 0.8951352834701538f, 0.574187695980072f, 0.4162156283855438f, 0.760049045085907f, 0.2794862687587738f, -0.9391196966171265f, 0.6433303952217102f, 0.8099455833435059f, 0.8183708190917969f, 0.46755215525627136f, 0.961249053478241f, 0.4011058509349823f, 0.5839749574661255f, -0.9054117798805237f, 0.04070884734392166f, 0.5723254680633545f, 0.09755879640579224f, 0.3279675543308258f, 0.15102963149547577f, 0.15787017345428467f, 0.996127188205719f, -0.39042386412620544f, 0.3940868675708771f, 0.30955639481544495f, 0.9446166157722473f, 0.21424365043640137f, 0.2789422869682312f, 0.5174834728240967f, 0.3975215554237366f, -0.11879073828458786f, 0.17797613143920898f, 0.7848310470581055f, 0.6793209910392761f, 0.16737954318523407f, 0.9400531053543091f, 0.8748876452445984f, 0.5324404835700989f, -0.9304373264312744f, 0.5359554290771484f, 0.27794936299324036f, 0.7745428681373596f, 0.4064997136592865f, 0.302681565284729f, 0.22618640959262848f, 0.524472713470459f, -0.8935640454292297f, 0.25989437103271484f, 0.9569293856620789f, 0.4298802316188812f, 0.9623500108718872f, 0.6758571267127991f, 0.6618871688842773f, 0.42209386825561523f, -0.9731661677360535f, 0.46698692440986633f, 0.7179856896400452f, 0.5392918586730957f, 0.1685984581708908f, 0.4222778379917145f, 0.28208547830581665f, 0.42045149207115173f, -0.7026668787002563f, 0.9538904428482056f, 0.6054723858833313f, 0.18255192041397095f, 0.8972110748291016f, 0.9954649209976196f, 0.5675415396690369f, 0.8359251618385315f, -0.07659370452165604f, 0.8477851748466492f, 0.5768004059791565f, 0.7407287359237671f, 0.7759389877319336f, 0.534870445728302f, 0.7988259196281433f, 0.28294697403907776f, -0.637071430683136f, 0.3589612543582916f, 0.3858056664466858f, 0.072257861495018f, 0.15756456553936005f, 0.5016670823097229f, 0.04590115323662758f, 0.44810670614242554f, -0.5150830745697021f, 0.5178655385971069f, 0.7950919270515442f, 0.2072233408689499f, 0.20783253014087677f, 0.6603925228118896f, 0.42485952377319336f, 0.6329214572906494f, -0.08101128786802292f, 0.07257729768753052f, 0.8200110793113708f, 0.4809240698814392f, 0.5204634070396423f, 0.8702986836433411f, 0.7202004790306091f, 0.4882960021495819f, -0.27167049050331116f, 0.4142420291900635f, 0.5336354374885559f, 0.7477253675460815f, 0.4814209043979645f, 0.9144323468208313f, 0.7032313346862793f, 0.08584735542535782f, -0.30205318331718445f, 0.035684410482645035f, 0.31081515550613403f, 0.6029736995697021f, 0.6258441209793091f, 0.10367070883512497f, 0.28535541892051697f, 0.6521870493888855f, -0.03363383188843727f, 0.5011154413223267f, 0.191068634390831f, 0.6675857901573181f, 0.32887402176856995f, 0.6575809121131897f, 0.916649580001831f, 0.7882685661315918f, -0.2831968665122986f, 0.5511769652366638f, 0.37316063046455383f, 0.4292934834957123f, 0.6373752951622009f, 0.7394635677337646f, 0.06143923103809357f, 0.07362107932567596f, -0.36559805274009705f, 0.14094781875610352f, 0.6072874069213867f, 0.15631446242332458f, 0.10712052881717682f, 0.894069254398346f, 0.39345356822013855f, 0.5448822379112244f, -0.7979488968849182f, 0.7765420079231262f, 0.39262858033180237f, 0.5741602182388306f, 0.37876641750335693f, 0.4752857983112335f, 0.2853831648826599f, 0.6606851816177368f, -0.16323748230934143f, 0.5639951825141907f, 0.49130308628082275f, 0.1729862242937088f, 0.6126982569694519f, 0.11630085855722427f, 0.3293808698654175f, 0.8913552165031433f, -0.5002416372299194f, 0.21050818264484406f, 0.08678247779607773f, 0.3650769293308258f, 0.5423306226730347f, 0.8477681279182434f, 0.5016502737998962f, 0.4170909821987152f, -0.7419902682304382f, 0.88785719871521f, 0.8249770402908325f, 0.8604937195777893f, 0.24629391729831696f, 0.7549604773521423f, 0.5330644249916077f, 0.015988994389772415f, -0.6588684320449829f, 0.2191964089870453f, 0.01819099485874176f, 0.06042128801345825f, 0.4216374456882477f, 0.5927625894546509f, 0.9179853200912476f, 0.271687388420105f, -0.24839861690998077f, 0.3072563409805298f, 0.2602516710758209f, 0.7215870022773743f, 0.6010447144508362f, 0.428608775138855f, 0.3761577308177948f, 0.4691983461380005f, -0.7582601308822632f, 0.5964633226394653f, 0.7201600074768066f, 0.8393223881721497f, 0.3955395817756653f, 0.4631068706512451f, 0.980338990688324f, 0.013883671723306179f, -0.8280118703842163f, 0.9870029091835022f, 0.41273918747901917f, 0.9706955552101135f, 0.2957228124141693f, 0.2633299231529236f, 0.5715712308883667f, 0.8563257455825806f, -0.4056214988231659f, 0.839909017086029f, 0.40716463327407837f, 0.8793319463729858f, 0.38149529695510864f, 0.60481196641922f, 0.7237743139266968f, 0.5619637370109558f, -0.013235398568212986f, 0.22510278224945068f, 0.8049729466438293f, 0.04988021031022072f, 0.6697704792022705f, 0.061539556831121445f, 0.4746103882789612f, 0.7249882221221924f, -0.6539497971534729f, 0.6811684370040894f, 0.6045066118240356f, 0.3056333065032959f, 0.5259822010993958f, 0.9362925291061401f, 0.22314682602882385f, 0.5131101608276367f, -0.19437837600708008f, 0.15752293169498444f, 0.6591984033584595f, 0.9512067437171936f, 0.7167921662330627f, 0.37610116600990295f, 0.5002170205116272f, 0.7356219291687012f, -0.9996771216392517f, 0.2461041510105133f, 0.717126190662384f, 0.4245232939720154f, 0.5161256790161133f, 0.8060639500617981f, 0.8656934499740601f, 0.5962143540382385f, -0.5388940572738647f, 0.430324912071228f, 0.7219606637954712f, 0.3222062587738037f, 0.7314228415489197f, 0.13501833379268646f, 0.3050663471221924f, 0.04752093926072121f, -0.34413766860961914f, 0.08897601813077927f, 0.42378196120262146f, 0.7440177798271179f, 0.3953395485877991f, 0.7720502614974976f, 0.09533575177192688f, 0.823346734046936f, -0.8304653763771057f, 0.15057343244552612f, 0.17782016098499298f, 0.06285151094198227f, 0.7322462797164917f, 0.9752517938613892f, 0.2889399230480194f, 0.5491576194763184f, -0.980974555015564f, 0.5993697643280029f, 0.28192493319511414f, 0.6767492294311523f, 0.8119259476661682f, 0.49841073155403137f, 0.5000166296958923f, 0.11979702115058899f, -0.08918150514364243f, 0.8637426495552063f, 0.403439998626709f, 0.17466042935848236f, 0.4003397524356842f, 0.9228733777999878f, 0.09078119695186615f, 0.40070754289627075f, -0.25973886251449585f, 0.5921636819839478f, 0.523902177810669f, 0.5211495161056519f, 0.9606727361679077f, 0.3916522264480591f, 0.21400174498558044f, 0.3314599394798279f, -0.08192885667085648f, 0.967858612537384f, 0.6554742455482483f, 0.23107357323169708f, 0.42212456464767456f, 0.9133533835411072f, 0.5725111961364746f, 0.39602401852607727f, -0.30062490701675415f, 0.9946382641792297f, 0.011290768161416054f, 0.15550944209098816f, 0.11663677543401718f, 0.284715473651886f, 0.08487269282341003f, 0.7311835885047913f, -0.14266535639762878f, 0.39443811774253845f, 0.6264910101890564f, 0.7649731040000916f, 0.8366255760192871f, 0.381332129240036f, 0.5837832689285278f, 0.7368402481079102f, -0.5458778738975525f, 0.6902825832366943f, 0.0873844176530838f, 0.18725912272930145f, 0.8632140159606934f, 0.43517670035362244f, 0.8299917578697205f, 0.25646835565567017f, -0.6225188970565796f, 0.941036581993103f, 0.461923211812973f, 0.5970525145530701f, 0.5743564963340759f, 0.5161263346672058f, 0.32807791233062744f, 0.23521116375923157f, -0.3120119273662567f, 0.12860822677612305f, 0.9770714640617371f, 0.6347535252571106f, 0.8954899907112122f, 0.41534706950187683f, 0.9310324192047119f, 0.7481645345687866f, -0.948969304561615f, 0.6741135716438293f, 0.6452339887619019f, 0.697234034538269f, 0.432142972946167f, 0.029898913577198982f, 0.23530541360378265f, 0.49885666370391846f, -0.9118918180465698f, 0.7137000560760498f, 0.22691158950328827f, 0.2659718096256256f, 0.9857680797576904f, 0.6545388698577881f, 0.9223415851593018f, 0.8014532923698425f, -0.09052234888076782f, 0.09718639403581619f, 0.5515756011009216f, 0.0930292084813118f, 0.8807957768440247f, 0.33678844571113586f, 0.7123733162879944f, 0.7959496974945068f, -0.46394169330596924f, 0.12826046347618103f, 0.7344489693641663f, 0.8079171180725098f, 0.9032436609268188f, 0.23393362760543823f, 0.0849335789680481f, 0.028819816187024117f, -0.5212732553482056f, 0.5777975916862488f, 0.14865680038928986f, 0.8559839725494385f, 0.1466771811246872f, 0.3205518126487732f, 0.4250863194465637f, 0.17939618229866028f, -0.5907772183418274f, 0.7688435912132263f, 0.5104073882102966f, 0.7294270992279053f, 0.7152422666549683f, 0.6191809773445129f, 0.13122154772281647f, 0.5045508146286011f, -0.6204419732093811f, 0.0017806192627176642f, 0.08496128022670746f, 0.038527172058820724f, 0.6477400660514832f, 0.4340575933456421f, 0.24799984693527222f, 0.9709015488624573f, -0.735663890838623f, 0.1652866005897522f, 0.5817975401878357f, 0.8759350180625916f, 0.13110846281051636f, 0.9379919767379761f, 0.4999566972255707f, 0.07966727763414383f, -0.877062201499939f, 0.5875148773193359f, 0.3832138478755951f, 0.7208573222160339f, 0.7700827717781067f, 0.3654944896697998f, 0.9112752676010132f, 0.8553023338317871f, -0.8820070624351501f, 0.3867551386356354f, 0.24606572091579437f, 0.6478461623191833f, 0.7673803567886353f, 0.9089292883872986f, 0.7374443411827087f, 0.7280483841896057f, -0.4956219792366028f, 0.7489749193191528f, 0.41237643361091614f, 0.6723405718803406f, 0.16773845255374908f, 0.8298079967498779f, 0.03449087217450142f, 0.9093791246414185f, -0.3978249430656433f, 0.409004807472229f, 0.9989405870437622f, 0.8603475689888f, 0.8240804076194763f, 0.5156434178352356f, 0.574566125869751f, 0.054919615387916565f, -0.6202499270439148f, 0.49362611770629883f, 0.9833568930625916f, 0.23586565256118774f, 0.2767401933670044f, 0.9798162579536438f, 0.35285618901252747f, 0.6825038194656372f, -0.05188680812716484f, 0.6302458643913269f, 0.3428569734096527f, 0.17413470149040222f, 0.45915380120277405f, 0.6491093039512634f, 0.6647477746009827f, 0.7651820182800293f, -0.5885677337646484f, 0.5676196813583374f, 0.9897397756576538f, 0.23880447447299957f, 0.09990610927343369f, 0.2921386957168579f, 0.6679852604866028f, 0.5545558929443359f, -0.60599285364151f, 0.17785069346427917f, 0.12157052755355835f, 0.18230020999908447f, 0.8063779473304749f, 0.0699157863855362f, 0.9545525908470154f, 0.021232156082987785f, -0.663221538066864f, 0.7996393442153931f, 0.3286159634590149f, 0.2857363224029541f, 0.34289032220840454f, 0.7984939813613892f, 0.059904079884290695f, 0.8618441224098206f, -0.9303385615348816f, 0.9463258981704712f, 0.265651136636734f, 0.9431519508361816f, 0.9380291104316711f, 0.907925546169281f, 0.9006449580192566f, 0.7075076103210449f, -0.5782892107963562f, 0.20293352007865906f, 0.9937611222267151f, 0.2727678120136261f, 0.2115253210067749f, 0.45429864525794983f, 0.23801705241203308f, 0.7112724781036377f, -0.5521109104156494f, 0.45811378955841064f, 0.8284187316894531f, 0.29685765504837036f, 0.824678361415863f, 0.22538910806179047f, 0.6632634997367859f, 0.2731128931045532f, -0.8120974898338318f, 0.5533139109611511f, 0.3226732909679413f, 0.4253401458263397f, 0.4078829884529114f, 0.8153353333473206f, 0.7849650979042053f, 0.8786647319793701f, -0.8547857403755188f, 0.41408252716064453f, 0.9425647854804993f, 0.9515156745910645f, 0.44376230239868164f, 0.8969382047653198f, 0.4886052906513214f, 0.6469270586967468f, -0.0653318464756012f, 0.026331255212426186f, 0.5658653378486633f, 0.9710065126419067f, 0.11849784106016159f, 0.9554137587547302f, 0.9050561189651489f, 0.39994028210639954f, -0.753038763999939f, 0.7724601626396179f, 0.2110249549150467f, 0.2874462902545929f, 0.7131916284561157f, 0.5915380120277405f, 0.10073591023683548f, 0.6193108558654785f, -0.20199483633041382f, 0.2962588667869568f, 0.12341032177209854f, 0.8306940197944641f, 0.6591901779174805f, 0.6966819167137146f, 0.024811582639813423f, 0.7857562303543091f, -0.568986713886261f, 0.5320004820823669f, 0.6154755353927612f, 0.09421832859516144f, 0.5787178874015808f, 0.31355610489845276f, 0.8103981614112854f, 0.575201690196991f, -0.21588034927845f, 0.5372095108032227f, 0.35363155603408813f, 0.39811971783638f, 0.8624044060707092f, 0.5087131857872009f, 0.8300310373306274f, 0.36593809723854065f, -0.42367392778396606f, 0.3115014433860779f, 0.08592156320810318f, 0.41002458333969116f, 0.7133165001869202f, 0.4927496314048767f, 0.06669232994318008f, 0.43268927931785583f, -0.2670727074146271f, 0.8977527022361755f, 0.14734530448913574f, 0.8961290717124939f, 0.308827668428421f, 0.15906742215156555f, 0.5155662894248962f, 0.2900759279727936f, -0.6053717732429504f, 0.10920456796884537f, 0.5051991939544678f, 0.4652152359485626f, 0.8491814732551575f, 0.5173233151435852f, 0.2508529722690582f, 0.5944001078605652f, -0.44041213393211365f, 0.13891594111919403f, 0.6157460808753967f, 0.5289347767829895f, 0.6159846782684326f, 0.39948970079421997f, 0.7625687122344971f, 0.09514454752206802f, -0.506289541721344f, 0.5685026049613953f, 0.5408414602279663f, 0.5643022060394287f, 0.23239284753799438f, 0.20554792881011963f, 0.5585443377494812f, 0.450460284948349f, -0.6688448786735535f, 0.8998993039131165f, 0.3461960256099701f, 0.6907151341438293f, 0.9911410808563232f, 0.3769420385360718f, 0.14596904814243317f, 0.4884375035762787f, -0.1412731558084488f, 0.11430232971906662f, 0.3114927113056183f, 0.8566482067108154f, 0.890663743019104f, 0.11676899343729019f, 0.8443052172660828f, 0.8090234994888306f, -0.44772300124168396f, 0.5440807938575745f, 0.35618463158607483f, 0.4900359809398651f, 0.48726126551628113f, 0.7625546455383301f, 0.18885554373264313f, 0.8753058910369873f, -0.5983404517173767f, 0.6521201133728027f, 0.677757203578949f, 0.2808185815811157f, 0.7207753658294678f, 0.872707724571228f, 0.194549560546875f, 0.45984745025634766f, -0.8167155385017395f, 0.5366674661636353f, 0.12470617890357971f, 0.45363616943359375f, 0.743007242679596f, 0.28004366159439087f, 0.5115725994110107f, 0.5984835028648376f, -0.5543760061264038f, 0.9116950631141663f, 0.5483152270317078f, 0.3281014859676361f, 0.8832617998123169f, 0.0221303291618824f, 0.6860143542289734f, 0.3189725875854492f, -0.5546800494194031f, 0.9955506324768066f, 0.015533768571913242f, 0.6297677159309387f, 0.3634706139564514f, 0.3218989968299866f, 0.8907623291015625f, 0.3192087709903717f, -0.8311365246772766f, 0.1440148651599884f, 0.1710696518421173f, 0.07057067006826401f, 0.9732903838157654f, 0.8719549775123596f, 0.303291380405426f, 0.6471080183982849f, -0.7797466516494751f, 0.8530577421188354f, 0.10041266679763794f, 0.1868533343076706f, 0.2717101275920868f, 0.051648788154125214f, 0.13235758244991302f, 0.664722204208374f, -0.47787541151046753f, 0.14578907191753387f, 0.7339702844619751f, 0.45604830980300903f, 0.7161210179328918f, 0.09997671097517014f, 0.15180210769176483f, 0.24730846285820007f, -0.2910257875919342f, 0.7570492625236511f, 0.9090099334716797f, 0.8226875066757202f, 0.6310852766036987f, 0.019035253673791885f, 0.5845835208892822f, 0.05446847528219223f, -0.655282199382782f, 0.11196491867303848f, 0.19873425364494324f, 0.31514787673950195f, 0.041164182126522064f, 0.9617456793785095f, 0.9226673245429993f, 0.04562624916434288f, -0.6353216171264648f, 0.5448214411735535f, 0.5454877614974976f, 0.11326097697019577f, 0.30455508828163147f, 0.5181491374969482f, 0.049191754311323166f, 0.42067235708236694f, -0.13962414860725403f, 0.03892205283045769f, 0.9742793440818787f, 0.43470531702041626f, 0.4234696924686432f, 0.5857940912246704f, 0.8254252672195435f, 0.41992995142936707f, -0.273125022649765f, 0.15641571581363678f, 0.9148302674293518f, 0.6037716269493103f, 0.8576107025146484f, 0.8868223428726196f, 0.21785227954387665f, 0.710502564907074f, -0.6705735921859741f, 0.8144428730010986f, 0.4175541400909424f, 0.33538246154785156f, 0.5024579167366028f, 0.2827816605567932f, 0.4341205358505249f, 0.6069480180740356f, -0.18444131314754486f, 0.864378809928894f, 0.5524086952209473f, 0.9191980957984924f, 0.016319748014211655f, 0.07358837872743607f, 0.8281199336051941f, 0.7497269511222839f, -0.9827877283096313f, 0.38823947310447693f, 0.5648701786994934f, 0.5530095100402832f, 0.24113738536834717f, 0.4634290039539337f, 0.01511263009160757f, 0.708010733127594f, -0.8462137579917908f, 0.5926382541656494f, 0.03600212559103966f, 0.19625620543956757f, 0.3312658667564392f, 0.905205488204956f, 0.7065527439117432f, 0.3726596236228943f, -0.48545902967453003f, 0.014637961983680725f, 0.9608190059661865f, 0.2979380488395691f, 0.26455414295196533f, 0.036958351731300354f, 0.3569968342781067f, 0.44515180587768555f, -0.3060038089752197f, 0.8039587736129761f, 0.09591066092252731f, 0.4883654713630676f, 0.129191592335701f, 0.5965046882629395f, 0.6335320472717285f, 0.682556688785553f, -0.7790451645851135f, 0.7750684022903442f, 0.01266133226454258f, 0.906800389289856f, 0.7544551491737366f, 0.6573173403739929f, 0.4393043518066406f, 0.10228710621595383f, -0.9783257246017456f, 0.8258422613143921f, 0.16822725534439087f, 0.7521511912345886f, 0.6008104681968689f, 0.47179222106933594f, 0.3144506514072418f, 0.009861290454864502f, -0.26599934697151184f, 0.12537425756454468f, 0.9086581468582153f, 0.4267858862876892f, 0.4053488075733185f, 0.22619640827178955f, 0.631440281867981f, 0.4583982229232788f, -0.19365167617797852f, 0.3855571448802948f, 0.33250853419303894f, 0.48878324031829834f, 0.5985289216041565f, 0.2664608657360077f, 0.8618472814559937f, 0.6357462406158447f, -0.8888583779335022f, 0.9536294937133789f, 0.8751773238182068f, 0.3916631042957306f, 0.30812713503837585f, 0.04756563529372215f, 0.4280718266963959f, 0.8871962428092957f, -0.2550734877586365f, 0.6033104062080383f, 0.03980119526386261f, 0.9038243293762207f, 0.2905411422252655f, 0.26097163558006287f, 0.987346887588501f, 0.37860429286956787f, -0.9921301007270813f, 0.7127262353897095f, 0.5768391489982605f, 0.6137235164642334f, 0.9053151607513428f, 0.45410266518592834f, 0.588896632194519f, 0.2097441405057907f, -0.16717810928821564f, 0.14525780081748962f, 0.7889949083328247f, 0.17155981063842773f, 0.9136633276939392f, 0.0362793430685997f, 0.14522838592529297f, 0.9065960645675659f, -0.8820643424987793f, 0.285506933927536f, 0.9638975262641907f, 0.7815591096878052f, 0.7841461300849915f, 0.7188349366188049f, 0.5750679969787598f, 0.7646360397338867f, -0.6498486995697021f, 0.22266703844070435f, 0.775888979434967f, 0.3982332944869995f, 0.40138301253318787f, 0.24345597624778748f, 0.6802246570587158f, 0.5150250196456909f, -0.9206234216690063f, 0.8883543014526367f, 0.3231927752494812f, 0.014306831173598766f, 0.38426753878593445f, 0.8748792409896851f, 0.41633889079093933f, 0.9922409653663635f, -0.38556763529777527f, 0.7685505747795105f, 0.3120202422142029f, 0.025576617568731308f, 0.014454813674092293f, 0.6355235576629639f, 0.5183648467063904f, 0.14995764195919037f, -0.6243398785591125f, 0.20263546705245972f, 0.30913829803466797f, 0.8583033084869385f, 0.32384926080703735f, 0.4688001275062561f, 0.32764941453933716f, 0.6823689341545105f, -0.10866474360227585f, 0.1409788876771927f, 0.9380996823310852f, 0.6281797885894775f, 0.06518001854419708f, 0.36231356859207153f, 0.1008562445640564f, 0.38724565505981445f, -0.20760971307754517f, 0.41449815034866333f, 0.6520717144012451f, 0.32864680886268616f, 0.36638715863227844f, 0.6854449510574341f, 0.2296772003173828f, 0.6615619659423828f, -0.7509119510650635f, 0.6746981739997864f, 0.5962074398994446f, 0.1256122887134552f, 0.16707833111286163f, 0.33684295415878296f, 0.8500556349754333f, 0.6638229489326477f, -0.6419312357902527f, 0.06278424710035324f, 0.9875798225402832f, 0.3979518711566925f, 0.4241109788417816f, 0.007576948497444391f, 0.5411335229873657f, 0.1821666955947876f, -0.8955134749412537f, 0.7828841805458069f, 0.2789331376552582f, 0.44218218326568604f, 0.46133244037628174f, 0.5546800494194031f, 0.4336167871952057f, 0.28257840871810913f, -0.3602290153503418f, 0.5894958972930908f, 0.06715723127126694f, 0.11874202638864517f, 0.16824142634868622f, 0.5052385926246643f, 0.9528868794441223f, 0.34140947461128235f, -0.6195513010025024f, 0.2568146288394928f, 0.762307345867157f, 0.757011353969574f, 0.42101338505744934f, 0.5365892052650452f, 0.8860247135162354f, 0.8853518962860107f, -0.7800318002700806f, 0.9277148842811584f, 0.789807915687561f, 0.9427254796028137f, 0.024277452379465103f, 0.40416568517684937f, 0.8463730216026306f, 0.05003577098250389f, -0.43034544587135315f, 0.9962338805198669f, 0.8641099333763123f, 0.043505337089300156f, 0.0696534737944603f, 0.11353126168251038f, 0.193092942237854f, 0.7943512797355652f, -0.19017250835895538f, 0.3320291042327881f, 0.13655222952365875f, 0.6296330094337463f, 0.8521804213523865f, 0.7938870787620544f, 0.41690608859062195f, 0.9538715481758118f, -0.17549316585063934f, 0.9376001954078674f, 0.014083243906497955f, 0.20040319859981537f, 0.2765845060348511f, 0.1634928286075592f, 0.52569580078125f, 0.36794382333755493f, -0.5011605620384216f, 0.6178894639015198f, 0.1338903307914734f, 0.9320346117019653f, 0.27046290040016174f, 0.3886329233646393f, 0.6014553904533386f, 0.2992759346961975f, -0.3895407021045685f, 0.6092590689659119f, 0.653435230255127f, 0.8422946333885193f, 0.9936986565589905f, 0.8176150321960449f, 0.06685927510261536f, 0.043662916868925095f, -0.16724805533885956f, 0.8534308671951294f, 0.8968550562858582f, 0.13667456805706024f, 0.6928503513336182f, 0.20875173807144165f, 0.5083904266357422f, 0.14549942314624786f, -0.7561034560203552f, 0.8647934198379517f, 0.5138643980026245f, 0.25521448254585266f, 0.46144935488700867f, 0.028219817206263542f, 0.8121287226676941f, 0.8861587643623352f, -0.39925268292427063f, 0.6642664074897766f, 0.4747186005115509f, 0.6204966902732849f, 0.8146539926528931f, 0.27598699927330017f, 0.375384122133255f, 0.6172034740447998f, -0.8841845989227295f, 0.12842734158039093f, 0.6089659333229065f, 0.509285032749176f, 0.058063022792339325f, 0.9493873715400696f, 0.34813737869262695f, 0.08534989506006241f, -0.47427719831466675f, 0.6214865446090698f, 0.13909420371055603f, 0.3169286251068115f, 0.5028496980667114f, 0.8869462609291077f, 0.49458417296409607f, 0.4382408559322357f, -0.9265244007110596f, 0.6304371953010559f, 0.4486297070980072f, 0.6089558601379395f, 0.8371502161026001f, 0.4135717451572418f, 0.246536523103714f, 0.8207536339759827f, -0.40208899974823f, 0.07439278811216354f, 0.48625949025154114f, 0.6359370946884155f, 0.6870478987693787f, 0.9354309439659119f, 0.7016733288764954f, 0.045011501759290695f, -0.5840330719947815f, 0.5561285018920898f, 0.2007518857717514f, 0.9615201354026794f, 0.5321490168571472f, 0.6130013465881348f, 0.4837707281112671f, 0.7037702202796936f, -0.8009846806526184f, 0.5277281403541565f, 0.840344250202179f, 0.9523444771766663f, 0.3944694399833679f, 0.5010694265365601f, 0.03832947462797165f, 0.7979871034622192f, -0.10596616566181183f, 0.4903523921966553f, 0.5778331756591797f, 0.004014319274574518f, 0.6000168919563293f, 0.09531975537538528f, 0.1781844049692154f, 0.7279185056686401f, -0.7390218377113342f, 0.5167940855026245f, 0.34088677167892456f, 0.4135981500148773f, 0.1644396185874939f, 0.15591375529766083f, 0.3587683439254761f, 0.5274369716644287f, -0.6719204783439636f, 0.618735671043396f, 0.2893068194389343f, 0.661437451839447f, 0.6500439643859863f, 0.9655999541282654f, 0.5828163623809814f, 0.9599658846855164f, -0.7152648568153381f, 0.2613404095172882f, 0.5532465577125549f, 0.48020702600479126f, 0.6964492797851562f, 0.001710627693682909f, 0.8117525577545166f, 0.74954754114151f, -0.6092060804367065f, 0.7404499650001526f, 0.08592616021633148f, 0.15914973616600037f, 0.25258955359458923f, 0.43946489691734314f, 0.5574948191642761f, 0.5083672404289246f, -0.43983376026153564f, 0.7428169846534729f, 0.3904828429222107f, 0.02178773283958435f, 0.3924410343170166f, 0.6449987888336182f, 0.21004587411880493f, 0.4183998703956604f, -0.4200092852115631f, 0.17651276290416718f, 0.11282870173454285f, 0.6426283121109009f, 0.7336658239364624f, 0.43487632274627686f, 0.9729347229003906f, 0.6642205715179443f, -0.45651745796203613f, 0.7648372650146484f, 0.21165984869003296f, 0.5886141061782837f, 0.3976234793663025f, 0.8689084649085999f, 0.7740580439567566f, 0.11522474884986877f, -0.4015434980392456f, 0.44341713190078735f, 0.28498542308807373f, 0.2879607379436493f, 0.7176828384399414f, 0.6951340436935425f, 0.07788956165313721f, 0.2610306739807129f, -0.6833682656288147f, 0.6342335939407349f, 0.589996337890625f, 0.26333490014076233f, 0.4029056429862976f, 0.07124422490596771f, 0.8842845559120178f, 0.6619667410850525f, -0.5356490612030029f, 0.6087079644203186f, 0.2827938497066498f, 0.29590892791748047f, 0.7396688461303711f, 0.16857117414474487f, 0.5133193135261536f, 0.9776549935340881f, -0.48126912117004395f, 0.8094542026519775f, 0.6528902649879456f, 0.6107155680656433f, 0.8016625642776489f, 0.08244645595550537f, 0.771321713924408f, 0.3350827097892761f, -0.9678395390510559f, 0.24735531210899353f, 0.13440421223640442f, 0.7874352335929871f, 0.6297671794891357f, 0.33399179577827454f, 0.9616477489471436f, 0.6922546625137329f, -0.5969665050506592f, 0.901253342628479f, 0.8164471387863159f, 0.5291999578475952f, 0.5763421058654785f, 0.9193772673606873f, 0.7471936345100403f, 0.46666136384010315f, -0.5424433350563049f, 0.9980921745300293f, 0.4907451570034027f, 0.6067240834236145f, 0.12760046124458313f, 0.8454582095146179f, 0.455108106136322f, 0.08591488003730774f, -0.8132005333900452f, 0.23041418194770813f, 0.5140314698219299f, 0.12789422273635864f, 0.2700554430484772f, 0.4637937843799591f, 0.06945488601922989f, 0.8011279106140137f, -0.694476842880249f, 0.017460230737924576f, 0.24768194556236267f, 0.7460048198699951f, 0.4476523995399475f, 0.9592738151550293f, 0.9334706664085388f, 0.8563166856765747f, -0.02405701018869877f, 0.8748052716255188f, 0.4899097681045532f, 0.5378128290176392f, 0.47078561782836914f, 0.6065688133239746f, 0.8950450420379639f, 0.532412052154541f, -0.132672980427742f, 0.7580535411834717f, 0.1406157910823822f, 0.2856210768222809f, 0.4800311326980591f, 0.5233913660049438f, 0.3767487406730652f, 0.9431273937225342f, -0.5762190818786621f, 0.4711723327636719f, 0.4671941101551056f, 0.7251744270324707f, 0.7089536786079407f, 0.3252106010913849f, 0.7813483476638794f, 0.39447009563446045f, -0.17307248711585999f, 0.5062205791473389f, 0.9249699711799622f, 0.37228718400001526f, 0.9014802575111389f, 0.8665159940719604f, 0.08106740564107895f, 0.12190553545951843f, -0.469309002161026f, 0.28385305404663086f, 0.5811827182769775f, 0.7964622974395752f, 0.5622434020042419f, 0.615023136138916f, 0.5195460915565491f, 0.9482694268226624f, -0.7116723656654358f, 0.10531140118837357f, 0.15621612966060638f, 0.3068212866783142f, 0.9556033611297607f, 0.26398858428001404f, 0.8996900916099548f, 0.039823565632104874f, -0.7479028701782227f, 0.8953718543052673f, 0.8566228151321411f, 0.36208534240722656f, 0.7751792669296265f, 0.8827390074729919f, 0.04727251082658768f, 0.2329840213060379f, -0.8741352558135986f, 0.7999948859214783f, 0.17011238634586334f, 0.7739590406417847f, 0.9018125534057617f, 0.7533838152885437f, 0.11229125410318375f, 0.3280375897884369f, -0.36496487259864807f, 0.07771746814250946f, 0.004569546785205603f, 0.31555992364883423f, 0.8932161331176758f, 0.22337272763252258f, 0.17820920050144196f, 0.45057985186576843f, -0.16484655439853668f, 0.8045949935913086f, 0.3430064916610718f, 0.00036959646968171f, 0.8219940066337585f, 0.5831577777862549f, 0.8775773048400879f, 0.5804205536842346f, -0.6422590613365173f, 0.1684848964214325f, 0.7034308314323425f, 0.05035693943500519f, 0.07295598834753036f, 0.458224892616272f, 0.9127123355865479f, 0.7087920904159546f, -0.7888811826705933f, 0.701108455657959f, 0.8567612171173096f, 0.24637627601623535f, 0.297721266746521f, 0.2578884959220886f, 0.7286907434463501f, 0.9049035906791687f, -0.7118013501167297f, 0.04872909560799599f, 0.9327389001846313f, 0.3606192469596863f, 0.9401946663856506f, 0.8799317479133606f, 0.7039596438407898f, 0.5551322102546692f, -0.6177365779876709f, 0.2945564091205597f, 0.6997566819190979f, 0.34418946504592896f, 0.7328773140907288f, 0.5218751430511475f, 0.2993859350681305f, 0.27977806329727173f, -0.3626372516155243f, 0.7627553939819336f, 0.7553734183311462f, 0.03888775035738945f, 0.12905147671699524f, 0.7660199999809265f, 0.8292693495750427f, 0.44332408905029297f, -0.6026004552841187f, 0.38885298371315f, 0.6450401544570923f, 0.1598948985338211f, 0.9825895428657532f, 0.28701722621917725f, 0.9602426290512085f, 0.6754673719406128f, -0.3565007448196411f, 0.0297166109085083f, 0.5989707112312317f, 0.12777146697044373f, 0.579458475112915f, 0.32835260033607483f, 0.8133782148361206f, 0.4893706142902374f, -0.8600282669067383f, 0.8508809804916382f, 0.2711431682109833f, 0.1689789742231369f, 0.39984869956970215f, 0.8859416842460632f, 0.0754973515868187f, 0.3294084966182709f, -0.7729540467262268f, 0.28358694911003113f, 0.11594494432210922f, 0.74229896068573f, 0.9247230291366577f, 0.8914769887924194f, 0.8738072514533997f, 0.7371338605880737f, -0.504396378993988f, 0.6688611507415771f, 0.7871521711349487f, 0.44628429412841797f, 0.1831922084093094f, 0.9404731392860413f, 0.5125551819801331f, 0.24774041771888733f, -0.5526072382926941f, 0.19059176743030548f, 0.10470312088727951f, 0.7881410121917725f, 0.8421450257301331f, 0.1821689009666443f, 0.8616220355033875f, 0.667272686958313f, -0.5835682153701782f, 0.5558242797851562f, 0.2920060157775879f, 0.21300731599330902f, 0.8631241917610168f, 0.9666324853897095f, 0.3287161886692047f, 0.7155569195747375f, -0.5076180100440979f, 0.5999135375022888f, 0.5505269169807434f, 0.9665152430534363f, 0.6944489479064941f, 0.3898542523384094f, 0.5372393131256104f, 0.6704214215278625f, -0.03565569594502449f, 0.9114417433738708f, 0.5372726321220398f, 0.6165907382965088f, 0.40276092290878296f, 0.342377245426178f, 0.8599420785903931f, 0.5474615693092346f, -0.12359052151441574f, 0.5576699376106262f, 0.0724806860089302f, 0.23054462671279907f, 0.6257238984107971f, 0.6096906661987305f, 0.8046605587005615f, 0.42081183195114136f, -0.07734845578670502f, 0.38889625668525696f, 0.5239826440811157f, 0.5588279962539673f, 0.2588449716567993f, 0.17301826179027557f, 0.4677811861038208f, 0.35012227296829224f, -0.5921913385391235f, 0.5606292486190796f, 0.3753122091293335f, 0.9221010804176331f, 0.7848991751670837f, 0.6898760199546814f, 0.014839508570730686f, 0.5337058305740356f, -0.6504946947097778f, 0.6196128726005554f, 0.8787601590156555f, 0.5098540782928467f, 0.5640305876731873f, 0.757814884185791f, 0.6623452305793762f, 0.4636453092098236f, -0.22138291597366333f, 0.5527657866477966f, 0.07306565344333649f, 0.17063266038894653f, 0.3079855740070343f, 0.5538101196289062f, 0.05945511534810066f, 0.2672727108001709f, -0.6210417151451111f, 0.7392823696136475f, 0.8129575848579407f, 0.4812772572040558f, 0.7076038122177124f, 0.04405512660741806f, 0.6298726797103882f, 0.26540929079055786f, -0.6150272488594055f, 0.9756981134414673f, 0.4371036887168884f, 0.9767159223556519f, 0.7692124247550964f, 0.7758411169052124f, 0.7079969048500061f, 0.17860904335975647f, -0.1375948041677475f, 0.060482557862997055f, 0.4243655502796173f, 0.297219455242157f, 0.3753655254840851f, 0.22854626178741455f, 0.24535708129405975f, 0.8478183150291443f, -0.04314964637160301f, 0.7202558517456055f, 0.32556357979774475f, 0.7577293515205383f, 0.14511501789093018f, 0.18765923380851746f, 0.46126091480255127f, 0.9985043406486511f, -0.42720916867256165f, 0.5867698192596436f, 0.6771236062049866f, 0.19831569492816925f, 0.024957651272416115f, 0.5642791390419006f, 0.4451841115951538f, 0.3854886293411255f, -0.07443784922361374f, 0.3924124240875244f, 0.5719414353370667f, 0.8731484413146973f, 0.8653736114501953f, 0.72737056016922f, 0.8166077136993408f, 0.4890635013580322f, -0.8462246060371399f, 0.23459254205226898f, 0.34476587176322937f, 0.8681560158729553f, 0.8973720073699951f, 0.11900568753480911f, 0.7450494766235352f, 0.6498982310295105f, -0.7061951160430908f, 0.5108964443206787f, 0.4499428868293762f, 0.3507477045059204f, 0.9841734170913696f, 0.738440990447998f, 0.23444660007953644f, 0.8871872425079346f, -0.38274744153022766f, 0.626654863357544f, 0.725433886051178f, 0.6055929064750671f, 0.752227246761322f, 0.8169966340065002f, 0.7437977194786072f, 0.7290552258491516f, -0.08987953513860703f, 0.28578343987464905f, 0.49753305315971375f, 0.6699801683425903f, 0.3902170956134796f, 0.45924296975135803f, 0.2185877114534378f, 0.9589265584945679f, -0.12850521504878998f, 0.7919471263885498f, 0.5389032959938049f, 0.8786743879318237f, 0.44939902424812317f, 0.2132100760936737f, 0.3073723316192627f, 0.7340798377990723f, -0.830446183681488f, 0.8688352108001709f, 0.04907132685184479f, 0.8102662563323975f, 0.6955304741859436f, 0.9050179719924927f, 0.850845992565155f, 0.4186190366744995f, -0.9250835180282593f, 0.8700835704803467f, 0.4012622535228729f, 0.3029974400997162f, 0.6595343351364136f, 0.2902436852455139f, 0.5285696387290955f, 0.585321843624115f, -0.9589243531227112f, 0.6288328766822815f, 0.9511527419090271f, 0.9607029557228088f, 0.054414212703704834f, 0.761611819267273f, 0.5897927284240723f, 0.3742433488368988f, -0.2939223051071167f, 0.4608215093612671f, 0.39916500449180603f, 0.5032185316085815f, 0.45719093084335327f, 0.20819348096847534f, 0.4508039057254791f, 0.6959587931632996f, -0.6465801000595093f, 0.29918479919433594f, 0.9350070953369141f, 0.5182090997695923f, 0.4404326379299164f, 0.2356446534395218f, 0.5253742337226868f, 0.08417563885450363f, -0.3914887011051178f, 0.17866696417331696f, 0.6453613042831421f, 0.7731786370277405f, 0.46054086089134216f, 0.08360981196165085f, 0.8644188642501831f, 0.07036742568016052f, -0.7471668124198914f, 0.19372820854187012f, 0.44920340180397034f, 0.1745065152645111f, 0.6643243432044983f, 0.6374220252037048f, 0.5472181439399719f, 0.3215833008289337f, -0.9773266315460205f, 0.6903449892997742f, 0.057986121624708176f, 0.5459688305854797f, 0.0626724511384964f, 0.5855710506439209f, 0.17192094027996063f, 0.7061382532119751f, -0.9402459859848022f, 0.24739007651805878f, 0.6795639991760254f, 0.7969395518302917f, 0.09729722142219543f, 0.8566197156906128f, 0.8557777404785156f, 0.6644040942192078f, -0.18561913073062897f, 0.18993547558784485f, 0.33467406034469604f, 0.9320047497749329f, 0.8916237950325012f, 0.7411384582519531f, 0.5829344987869263f, 0.9331136345863342f, -0.5154609680175781f, 0.2722175121307373f, 0.2943427264690399f, 0.6142815351486206f, 0.7029716372489929f, 0.1530679613351822f, 0.9483012557029724f, 0.6884393095970154f, -0.8897523880004883f, 0.02261209487915039f, 0.09492183476686478f, 0.05962901934981346f, 0.9063421487808228f, 0.020502272993326187f, 0.6819989085197449f, 0.33825865387916565f, -0.2423991858959198f, 0.013578654266893864f, 0.4697764217853546f, 0.8123241662979126f, 0.9242332577705383f, 0.47251299023628235f, 0.030344301834702492f, 0.667769730091095f, -0.9890044331550598f, 0.0451396219432354f, 0.4596938192844391f, 0.46932128071784973f, 0.5532691478729248f, 0.6952988505363464f, 0.9579592943191528f, 0.5810869932174683f, -0.039789289236068726f, 0.5643244981765747f, 0.34116682410240173f, 0.9935877323150635f, 0.15467962622642517f, 0.28310415148735046f, 0.6768655180931091f, 0.9332503080368042f, -0.5541363954544067f, 0.7776606678962708f, 0.5545363426208496f, 0.7405745983123779f, 0.5434438586235046f, 0.8110389709472656f, 0.5062107443809509f, 0.2828051745891571f, -0.2533399164676666f, 0.5089954733848572f, 0.8829477429389954f, 0.4478719234466553f, 0.9437466859817505f, 0.29255911707878113f, 0.587721586227417f, 0.8880100250244141f, -0.45667722821235657f, 0.9662802219390869f, 0.44437462091445923f, 0.9047298431396484f, 0.5936996936798096f, 0.7082849740982056f, 0.7483503818511963f, 0.1143917441368103f, -0.06080246716737747f, 0.8122029900550842f, 0.8431393504142761f, 0.5869064331054688f, 0.4458550214767456f, 0.26463782787323f, 0.7150306701660156f, 0.4705078601837158f, -0.4957997500896454f, 0.08245730400085449f, 0.39287909865379333f, 0.5609111785888672f, 0.6404134631156921f, 0.7202422618865967f, 0.3901757299900055f, 0.8346697688102722f, -0.34894299507141113f, 0.7530266046524048f, 0.14549073576927185f, 0.6638315916061401f, 0.3552674353122711f, 0.9728140830993652f, 0.437276154756546f, 0.721710205078125f, -0.4446592926979065f, 0.44616076350212097f, 0.4765523076057434f, 0.35160696506500244f, 0.20731724798679352f, 0.529298722743988f, 0.5213706493377686f, 0.18161672353744507f, -0.7488033175468445f, 0.6713526248931885f, 0.4578465521335602f, 0.27345436811447144f, 0.5220915079116821f, 0.8089575171470642f, 0.39643239974975586f, 0.9365876913070679f, -0.4243626594543457f, 0.07193654030561447f, 0.5343090891838074f, 0.4997310936450958f, 0.9774930477142334f, 0.8487306833267212f, 0.7054070830345154f, 0.9774702787399292f, -0.6773715019226074f, 0.2208886593580246f, 0.797924816608429f, 0.1521104872226715f, 0.42071297764778137f, 0.9201852083206177f, 0.11449120193719864f, 0.5447098612785339f, -0.23658163845539093f, 0.9458504319190979f, 0.357706218957901f, 0.5421566367149353f, 0.0449189767241478f, 0.7320505976676941f, 0.42542269825935364f, 0.7691534161567688f, -0.7101292014122009f, 0.39009085297584534f, 0.755530834197998f, 0.26973822712898254f, 0.08865944296121597f, 0.16282381117343903f, 0.15378551185131073f, 0.9532721042633057f, -0.9053204655647278f, 0.46894529461860657f, 0.8601903915405273f, 0.8506554365158081f, 0.5257097482681274f, 0.7367250919342041f, 0.9065684676170349f, 0.005981490481644869f, -0.19151440262794495f, 0.5335626006126404f, 0.5150024890899658f, 0.043054502457380295f, 0.37079352140426636f, 0.360252320766449f, 0.5494816303253174f, 0.7224209904670715f, -0.26644667983055115f, 0.44499534368515015f, 0.27272260189056396f, 0.383100688457489f, 0.137282595038414f, 0.9853568077087402f, 0.7847217917442322f, 0.8345896005630493f, -0.6042003631591797f, 0.6369667053222656f, 0.8890992403030396f, 0.48347237706184387f, 0.7232027649879456f, 0.22190353274345398f, 0.2366141974925995f, 0.06954775005578995f, -0.1566208302974701f, 0.9068636894226074f, 0.9685680270195007f, 0.984794020652771f, 0.9793655276298523f, 0.9191639423370361f, 0.6466361284255981f, 0.7491574287414551f, -0.7613306641578674f, 0.9425565600395203f, 0.08232554793357849f, 0.7267315983772278f, 0.4054759740829468f, 0.017839031293988228f, 0.7504187226295471f, 0.806672215461731f, -0.6575583815574646f, 0.634870707988739f, 0.46099984645843506f, 0.22235123813152313f, 0.6004477143287659f, 0.277504026889801f, 0.8869279623031616f, 0.5516669750213623f, -0.20600271224975586f, 0.1704959273338318f, 0.3242221176624298f, 0.9475549459457397f, 0.7107790112495422f, 0.3204421401023865f, 0.2691721022129059f, 0.4474305510520935f, -0.33389362692832947f, 0.45810890197753906f, 0.488151490688324f, 0.1566302329301834f, 0.7718855142593384f, 0.12975937128067017f, 0.1264336258172989f, 0.3191518485546112f, -0.019475048407912254f, 0.2829691767692566f, 0.3731861412525177f, 0.3503236174583435f, 0.10001193732023239f, 0.6835283041000366f, 0.00045938792754895985f, 0.970020592212677f, -0.8875191807746887f, 0.9727120995521545f, 0.19024139642715454f, 0.1736091673374176f, 0.16926053166389465f, 0.9905165433883667f, 0.6909801363945007f, 0.16090808808803558f, -0.4555824398994446f, 0.5370879769325256f, 0.6473139524459839f, 0.6702296137809753f, 0.5493699908256531f, 0.801182746887207f, 0.7099994421005249f, 0.696937084197998f, -0.8501425981521606f, 0.40232694149017334f, 0.5781128406524658f, 0.5609517097473145f, 0.3586926758289337f, 0.5875291228294373f, 0.5870425701141357f, 0.15120886266231537f, -0.6352200508117676f, 0.6450927257537842f, 0.5125245451927185f, 0.4174916446208954f, 0.1355157047510147f, 0.5186161398887634f, 0.42236635088920593f, 0.8279153108596802f, -0.2997542917728424f, 0.041968949139118195f, 0.23045377433300018f, 0.04522327333688736f, 0.31312116980552673f, 0.036939751356840134f, 0.6379767060279846f, 0.702001690864563f, -0.8922322392463684f, 0.24708107113838196f, 0.22931142151355743f, 0.5365448594093323f, 0.6036836504936218f, 0.6985759735107422f, 0.806715190410614f, 0.7702175378799438f, -0.4469258785247803f, 0.3381221294403076f, 0.03980643302202225f, 0.4859953820705414f, 0.9722622632980347f, 0.2400510460138321f, 0.06344188749790192f, 0.041467003524303436f, -0.8215810060501099f, 0.9690914154052734f, 0.4056061804294586f, 0.39939799904823303f, 0.05238385125994682f, 0.20762109756469727f, 0.981421172618866f, 0.560953676700592f, -0.944010853767395f, 0.4129273593425751f, 0.5214564800262451f, 0.5895150303840637f, 0.8554610013961792f, 0.6596611142158508f, 0.7415406107902527f, 0.7983670234680176f, -0.9827355742454529f, 0.8990867137908936f, 0.1275169998407364f, 0.5647302269935608f, 0.29510951042175293f, 0.8838865756988525f, 0.3314986526966095f, 0.8789060115814209f, -0.18567423522472382f, 0.05602726340293884f, 0.8846105337142944f, 0.7100982069969177f, 0.8898619413375854f, 0.07362251728773117f, 0.15525290369987488f, 0.7962710857391357f, -0.9640716910362244f, 0.12426703423261642f, 0.8926885724067688f, 0.022831158712506294f, 0.911953330039978f, 0.0704045444726944f, 0.759833574295044f, 0.7941198945045471f, -0.39290693402290344f, 0.5918909907341003f, 0.651500940322876f, 0.742051362991333f, 0.9480991363525391f, 0.6818175315856934f, 0.3240054249763489f, 0.8130648732185364f, -0.4256460964679718f, 0.6652555465698242f, 0.9024021625518799f, 0.024928420782089233f, 0.6851176619529724f, 0.2952532470226288f, 0.07291899621486664f, 0.4302487075328827f, -0.9876348376274109f, 0.5664462447166443f, 0.533241331577301f, 0.08854915201663971f, 0.2737753391265869f, 0.831906795501709f, 0.14389313757419586f, 0.27785900235176086f, -0.5561011433601379f, 0.4910045266151428f, 0.6147041320800781f, 0.1566670686006546f, 0.9311637878417969f, 0.5379307270050049f, 0.31778156757354736f, 0.339180588722229f, -0.43672093749046326f, 0.5768997669219971f, 0.34570184350013733f, 0.2768162786960602f, 0.7558488845825195f, 0.7635282278060913f, 0.0946057140827179f, 0.6535192728042603f, -0.8908346891403198f, 0.5835133790969849f, 0.5424901247024536f, 0.8054603338241577f, 0.20536771416664124f, 0.3109109699726105f, 0.16513684391975403f, 0.29651057720184326f, -0.3965870141983032f, 0.21517199277877808f, 0.14377981424331665f, 0.17266041040420532f, 0.26443177461624146f, 0.6975381374359131f, 0.8542569875717163f, 0.23131553828716278f, -0.8058295845985413f, 0.10924158990383148f, 0.6068158149719238f, 0.9362894296646118f, 0.8864644169807434f, 0.8489164710044861f, 0.01748461276292801f, 0.23118409514427185f, -0.4302023649215698f, 0.5410777926445007f, 0.5695695877075195f, 0.08361789584159851f, 0.40077221393585205f, 0.8485974669456482f, 0.9009702205657959f, 0.07876475900411606f, -0.9793270230293274f, 0.9105011820793152f, 0.4461742043495178f, 0.46794530749320984f, 0.03413771092891693f, 0.4441238343715668f, 0.6133241057395935f, 0.6711961030960083f, -0.021496545523405075f, 0.2776033282279968f, 0.3518507480621338f, 0.8367632627487183f, 0.7642127871513367f, 0.885451078414917f, 0.9263898134231567f, 0.9680028557777405f, -0.40751808881759644f, 0.8769844174385071f, 0.7064304351806641f, 0.43238765001296997f, 0.8956096768379211f, 0.4328215420246124f, 0.4301082193851471f, 0.7986930012702942f, -0.02781580202281475f, 0.0909804254770279f, 0.7807135581970215f, 0.2897838056087494f, 0.2731890380382538f, 0.3168872892856598f, 0.9906745553016663f, 0.42437925934791565f, -0.39559924602508545f, 0.7707259654998779f, 0.6423315405845642f, 0.6591423749923706f, 0.2403661459684372f, 0.8655169010162354f, 0.2666156589984894f, 0.9902834892272949f, -0.014098351821303368f, 0.8471586108207703f, 0.5437783598899841f, 0.46935662627220154f, 0.9289140105247498f, 0.3935394585132599f, 0.20189595222473145f, 0.4743833839893341f, -0.774181067943573f, 0.7631738185882568f, 0.480621874332428f, 0.5660600662231445f, 0.21941177546977997f, 0.6359030604362488f, 0.46067118644714355f, 0.003149067983031273f, -0.9866541028022766f, 0.4925748407840729f, 0.1699354648590088f, 0.057642918080091476f, 0.6860424280166626f, 0.0418238490819931f, 0.8693996071815491f, 0.33410120010375977f, -0.5419802069664001f, 0.9796639084815979f, 0.4733956456184387f, 0.5616741180419922f, 0.3894979655742645f, 0.6138827800750732f, 0.7641692161560059f, 0.3959338665008545f, -0.8969154953956604f, 0.8368306159973145f, 0.6656016707420349f, 0.39492905139923096f, 0.8291516900062561f, 0.458199143409729f, 0.6070823669433594f, 0.5206794738769531f, -0.15134648978710175f, 0.896747350692749f, 0.15738804638385773f, 0.24108897149562836f, 0.28541815280914307f, 0.27807825803756714f, 0.09158546477556229f, 0.5098901987075806f, -0.27426740527153015f, 0.12664194405078888f, 0.41969266533851624f, 0.14290139079093933f, 0.16028711199760437f, 0.5968775153160095f, 0.5655363202095032f, 0.17694763839244843f, -0.3405744433403015f, 0.12657050788402557f, 0.9752622246742249f, 0.8703333735466003f, 0.5673854947090149f, 0.21886025369167328f, 0.02424200065433979f, 0.2507234215736389f, -0.9801497459411621f, 0.3171066343784332f, 0.6599130630493164f, 0.9797523617744446f, 0.009179994463920593f, 0.4879445731639862f, 0.6525533199310303f, 0.28413328528404236f, -0.6157984733581543f, 0.9366381168365479f, 0.07749463617801666f, 0.6613272428512573f, 0.5576891303062439f, 0.38746964931488037f, 0.42337802052497864f, 0.6288875341415405f, -0.10037843137979507f, 0.30130836367607117f, 0.5890751481056213f, 0.1901112049818039f, 0.023544833064079285f, 0.19061234593391418f, 0.376132994890213f, 0.15710295736789703f, -0.3225157558917999f, 0.47909095883369446f, 0.10354138165712357f, 0.8411222696304321f, 0.7650653123855591f, 0.9377370476722717f, 0.9224215149879456f, 0.0885915607213974f, -0.6745469570159912f, 0.17313838005065918f, 0.7161040902137756f, 0.9760866165161133f, 0.9473286867141724f, 0.8053717613220215f, 0.5845953822135925f, 0.2646171748638153f, -0.614714503288269f, 0.674559473991394f, 0.6058165431022644f, 0.6377378106117249f, 0.132485032081604f, 0.46913862228393555f, 0.9384961724281311f, 0.46004384756088257f, -0.40517815947532654f, 0.12222146987915039f, 0.3313239812850952f, 0.17672383785247803f, 0.4374222457408905f, 0.03864951804280281f, 0.06769069284200668f, 0.5876254439353943f, -0.42968133091926575f, 0.6465604305267334f, 0.47751620411872864f, 0.14579422771930695f, 0.2823539674282074f, 0.16953401267528534f, 0.4450641870498657f, 0.507892906665802f, -0.17903485894203186f, 0.3284381628036499f, 0.2980603873729706f, 0.2649471163749695f, 0.13460856676101685f, 0.23689676821231842f, 0.6956908106803894f, 0.5786927938461304f, -0.41183844208717346f, 0.17163026332855225f, 0.15097306668758392f, 0.9842211008071899f, 0.7804497480392456f, 0.42779305577278137f, 0.17812608182430267f, 0.0002599241561256349f, -0.09584254026412964f, 0.31754523515701294f, 0.5968770980834961f, 0.9685821533203125f, 0.34547680616378784f, 0.05071377381682396f, 0.1427646279335022f, 0.0612667016685009f, -0.8032445311546326f, 0.7175624370574951f, 0.25585734844207764f, 0.016263047233223915f, 0.7283207178115845f, 0.20810547471046448f, 0.03189733624458313f, 0.5927711129188538f, -0.22640635073184967f, 0.8034831285476685f, 0.5244079232215881f, 0.5324054956436157f, 0.12003157287836075f, 0.7885212302207947f, 0.810421884059906f, 0.7582865357398987f, -0.498405784368515f, 0.37732911109924316f, 0.30890974402427673f, 0.565230667591095f, 0.5709097981452942f, 0.4790186583995819f, 0.9930906891822815f, 0.28899863362312317f, -0.7410882711410522f, 0.1559494137763977f, 0.15207529067993164f, 0.42067280411720276f, 0.20962102711200714f, 0.6121886372566223f, 0.060233913362026215f, 0.5167848467826843f, -0.08856027573347092f, 0.8041704297065735f, 0.30947646498680115f, 0.09024401009082794f, 0.821458101272583f, 0.7544309496879578f, 0.43328988552093506f, 0.9406808614730835f, -0.8717347979545593f, 0.0639505460858345f, 0.9856494069099426f, 0.23560836911201477f, 0.38342612981796265f, 0.17347504198551178f, 0.41942116618156433f, 0.4608573317527771f, -0.14226451516151428f, 0.2955934405326843f, 0.22284983098506927f, 0.5465992093086243f, 0.5398176908493042f, 0.7885376811027527f, 0.9752711057662964f, 0.12449044734239578f, -0.3328235447406769f, 0.4164164364337921f, 0.22333283722400665f, 0.08712631464004517f, 0.8021121025085449f, 0.3632434606552124f, 0.34821009635925293f, 0.20519188046455383f, -0.6761670112609863f, 0.7212013006210327f, 0.12313487380743027f, 0.20991121232509613f, 0.5808674097061157f, 0.2914283573627472f, 0.517288327217102f, 0.6072707772254944f, -0.37153342366218567f, 0.23553910851478577f, 0.45316430926322937f, 0.11623229086399078f, 0.760115921497345f, 0.9282549619674683f, 0.6590517163276672f, 0.8614678382873535f, -0.6413300037384033f, 0.10288772732019424f, 0.5197694301605225f, 0.8450396656990051f, 0.46462172269821167f, 0.6483225226402283f, 0.504074215888977f, 0.6390416026115417f, -0.25073370337486267f, 0.6462201476097107f, 0.44884130358695984f, 0.533173143863678f, 0.37521952390670776f, 0.8245481252670288f, 0.9689756631851196f, 0.4806315004825592f, -0.26043111085891724f, 0.23636144399642944f, 0.6965393424034119f, 0.37951335310935974f, 0.8561241626739502f, 0.1218055784702301f, 0.9275966882705688f, 0.7844882607460022f, -0.5283527374267578f, 0.5786282420158386f, 0.2387721985578537f, 0.13449878990650177f, 0.527057945728302f, 0.6884918808937073f, 0.6898478269577026f, 0.5848707556724548f, -0.4810789227485657f, 0.973711371421814f, 0.5539513230323792f, 0.31003835797309875f, 0.9068326354026794f, 0.2968836724758148f, 0.31101930141448975f, 0.4494730234146118f, -0.861461877822876f, 0.5721254944801331f, 0.7996217012405396f, 0.5524200201034546f, 0.4696176052093506f, 0.5013044476509094f, 0.5486635565757751f, 0.7158207893371582f, -0.4144507348537445f, 0.0671963021159172f, 0.872673749923706f, 0.44636207818984985f, 0.0890437513589859f, 0.6506329774856567f, 0.5512224435806274f, 0.17118118703365326f, -0.8521059155464172f, 0.012758449651300907f, 0.8642054200172424f, 0.2144598811864853f, 0.011195873841643333f, 0.33813798427581787f, 0.6008507013320923f, 0.433647096157074f, -0.5595262050628662f, 0.874528706073761f, 0.8923969864845276f, 0.22700951993465424f, 0.6851800084114075f, 0.8210734128952026f, 0.588947594165802f, 0.8002244830131531f, -0.5072178244590759f, 0.4845779836177826f, 0.46273326873779297f, 0.07095424085855484f, 0.24847981333732605f, 0.7921620607376099f, 0.4553191661834717f, 0.5465638041496277f, -0.9234278202056885f, 0.646521270275116f, 0.2540918290615082f, 0.7541524767875671f, 0.9903644919395447f, 0.0433482825756073f, 0.1288575977087021f, 0.07917777448892593f, -0.532878577709198f, 0.46028661727905273f, 0.9236312508583069f, 0.9968207478523254f, 0.05098749324679375f, 0.3192683458328247f, 0.029597483575344086f, 0.7158625721931458f, -0.2190663069486618f, 0.015018164180219173f, 0.9079572558403015f, 0.8534047603607178f, 0.17873495817184448f, 0.2576795518398285f, 0.3917451500892639f, 0.5713755488395691f, -0.8132254481315613f, 0.0420355387032032f, 0.39726516604423523f, 0.6228246092796326f, 0.45500198006629944f, 0.5040225982666016f, 0.4476810693740845f, 0.7203686237335205f, -0.6892238259315491f, 0.3161042332649231f, 0.1197037398815155f, 0.6797038912773132f, 0.9990723729133606f, 0.2049897313117981f, 0.23188133537769318f, 0.9438063502311707f, -0.9003333449363708f, 0.191987544298172f, 0.3396430015563965f, 0.43422216176986694f, 0.6007048487663269f, 0.513161301612854f, 0.43233466148376465f, 0.6099578142166138f, -0.8141569495201111f, 0.8728110790252686f, 0.43586793541908264f, 0.813911497592926f, 0.8832884430885315f, 0.6695850491523743f, 0.5420873761177063f, 0.42155417799949646f, -0.6710149049758911f, 0.6525400280952454f, 0.7434831261634827f, 0.19411009550094604f, 0.3458646237850189f, 0.3498792350292206f, 0.6424415111541748f, 0.31181979179382324f, -0.2215678095817566f, 0.4672599136829376f, 0.22326311469078064f, 0.7186362743377686f, 0.8717520236968994f, 0.5325424671173096f, 0.41509777307510376f, 0.8416181802749634f, -0.8891468048095703f, 0.5068631172180176f, 0.6609809994697571f, 0.20293979346752167f, 0.29395073652267456f, 0.4632584750652313f, 0.5672935843467712f, 0.49893349409103394f, -0.33322662115097046f, 0.4343646466732025f, 0.8266933560371399f, 0.31454864144325256f, 0.8961934447288513f, 0.37341997027397156f, 0.7709542512893677f, 0.4137808382511139f, -0.85628342628479f, 0.6591991782188416f, 0.1411525458097458f, 0.3736635446548462f, 0.5430601835250854f, 0.4571554958820343f, 0.17568257451057434f, 0.739980936050415f, -0.8639200925827026f, 0.3655080795288086f, 0.35327255725860596f, 0.9234334826469421f, 0.2057614028453827f, 0.8865212798118591f, 0.3756508529186249f, 0.7121757864952087f, -0.7194817066192627f, 0.5532860159873962f, 0.5777426362037659f, 0.4276513457298279f, 0.5737208724021912f, 0.44690608978271484f, 0.3789008855819702f, 0.302653968334198f, -0.006055793259292841f, 0.8096420168876648f, 0.8733126521110535f, 0.849640965461731f, 0.19333603978157043f, 0.528940737247467f, 0.13978128135204315f, 0.6624525785446167f, -0.6419429779052734f, 0.6249298453330994f, 0.6600709557533264f, 0.8797832727432251f, 0.10256069153547287f, 0.13075847923755646f, 0.7677807211875916f, 0.5329908132553101f, -0.8553346395492554f, 0.2564346492290497f, 0.1055261567234993f, 0.437075674533844f, 0.038327354937791824f, 0.20983542501926422f, 0.776443362236023f, 0.7529756426811218f, -0.3363896608352661f, 0.1827436089515686f, 0.8320543169975281f, 0.5903573036193848f, 0.11202044785022736f, 0.6542656421661377f, 0.03857988864183426f, 0.17912258207798004f, -0.7938888669013977f, 0.9865708351135254f, 0.8618100881576538f, 0.3366219401359558f, 0.6245690584182739f, 0.5820906758308411f, 0.46763452887535095f, 0.0015874386299401522f, -0.1388501673936844f, 0.09248799830675125f, 0.09596309065818787f, 0.5638045072555542f, 0.17818447947502136f, 0.23041848838329315f, 0.19895866513252258f, 0.9811155796051025f, -0.4776383340358734f, 0.04072517156600952f, 0.27706170082092285f, 0.5693767070770264f, 0.01816197857260704f, 0.10546718537807465f, 0.39832937717437744f, 0.42641547322273254f, -0.1106448769569397f, 0.9176843166351318f, 0.8916680216789246f, 0.8838919401168823f, 0.6639178991317749f, 0.11735400557518005f, 0.6211603879928589f, 0.8091189861297607f, -0.7563676834106445f, 0.16327457129955292f, 0.9098986387252808f, 0.3828692138195038f, 0.692934513092041f, 0.2992340326309204f, 0.09320522099733353f, 0.9120890498161316f, -0.5673311352729797f, 0.5316146612167358f, 0.8877757787704468f, 0.16062286496162415f, 0.31390437483787537f, 0.6017469763755798f, 0.3013593852519989f, 0.46820348501205444f, -0.9409611821174622f, 0.7094521522521973f, 0.09158171713352203f, 0.9116836190223694f, 0.757343053817749f, 0.49843963980674744f, 0.4816369414329529f, 0.9474183917045593f, -0.5954670906066895f, 0.7366247773170471f, 0.33476608991622925f, 0.5609773993492126f, 0.2671639919281006f, 0.3680673837661743f, 0.7426515221595764f, 0.37782424688339233f, -0.17175783216953278f, 0.13238537311553955f, 0.8612858057022095f, 0.8940066695213318f, 0.46092501282691956f, 0.13402359187602997f, 0.1774541288614273f, 0.5923395752906799f, -0.4070625305175781f, 0.10327564924955368f, 0.9493145942687988f, 0.5029041767120361f, 0.27274930477142334f, 0.11331499367952347f, 0.4666348397731781f, 0.4081171751022339f, -0.1896386444568634f, 0.6927674412727356f, 0.08855724334716797f, 0.07562442868947983f, 0.5918343663215637f, 0.5136390328407288f, 0.8977653980255127f, 0.5323644280433655f, -0.3758719265460968f, 0.37000495195388794f, 0.8320191502571106f, 0.7270020246505737f, 0.03307529166340828f, 0.28744369745254517f, 0.16695325076580048f, 0.47657641768455505f, -0.361660897731781f, 0.0663970559835434f, 0.8471579551696777f, 0.5895298719406128f, 0.2123139500617981f, 0.1379859298467636f, 0.6522750854492188f, 0.27618277072906494f, -0.04509982839226723f, 0.6158717274665833f, 0.4999724328517914f, 0.7362933158874512f, 0.05098237842321396f, 0.9014360308647156f, 0.39379382133483887f, 0.9927893877029419f, -0.48802846670150757f, 0.49769365787506104f, 0.3018453121185303f, 0.22028082609176636f, 0.9387693405151367f, 0.18404686450958252f, 0.2832549214363098f, 0.4701821506023407f, -0.023087259382009506f, 0.41424113512039185f, 0.8185198903083801f, 0.067610003054142f, 0.7119458913803101f, 0.23997625708580017f, 0.9211059808731079f, 0.3064051866531372f, -0.058159731328487396f, 0.6368368864059448f, 0.0686504989862442f, 0.7311335206031799f, 0.06815365701913834f, 0.4899028539657593f, 0.667169988155365f, 0.016707642003893852f, -0.8041982650756836f, 0.7991337180137634f, 0.08620568364858627f, 0.3473470211029053f, 0.5868231058120728f, 0.31276217103004456f, 0.4702310264110565f, 0.7493916749954224f, -0.17381827533245087f, 0.4066622257232666f, 0.8517535328865051f, 0.8970351815223694f, 0.3721867501735687f, 0.02402612380683422f, 0.6056381464004517f, 0.41699308156967163f, -0.9640112519264221f, 0.24201181530952454f, 0.05363086238503456f, 0.9500297904014587f, 0.6740962266921997f, 0.30178704857826233f, 0.8501377105712891f, 0.9356464147567749f, -0.03126265108585358f, 0.7530966997146606f, 0.8572747111320496f, 0.3322966694831848f, 0.49597030878067017f, 0.05950532108545303f, 0.6893213391304016f, 0.6498290300369263f, -0.18357941508293152f, 0.42642268538475037f, 0.3676927089691162f, 0.6567625999450684f, 0.7693088054656982f, 0.4132336676120758f, 0.31218767166137695f, 0.12819352746009827f, -0.4462841749191284f, 0.2686539590358734f, 0.020927967503666878f, 0.2622028887271881f, 0.7527452707290649f, 0.4188247323036194f, 0.48240676522254944f, 0.8189795613288879f, -0.5815649628639221f, 0.14437705278396606f, 0.11036078631877899f, 0.9722802042961121f, 0.7922705411911011f, 0.8968050479888916f, 0.6980888247489929f, 0.1557687520980835f, -0.3324775993824005f, 0.823405921459198f, 0.9368442893028259f, 0.23905049264431f, 0.4970788061618805f, 0.2493857890367508f, 0.36122044920921326f, 0.5478509664535522f, -0.7130815386772156f, 0.4748830497264862f, 0.7441094517707825f, 0.5219476222991943f, 0.10572553426027298f, 0.35974037647247314f, 0.9513842463493347f, 0.062183815985918045f, -0.44596025347709656f, 0.718475341796875f, 0.5516037344932556f, 0.17372676730155945f, 0.13898120820522308f, 0.8122368454933167f, 0.10613775253295898f, 0.150663360953331f, -0.647042989730835f, 0.48125991225242615f, 0.6020302176475525f, 0.39166584610939026f, 0.9808068871498108f, 0.8327566385269165f, 0.06474434584379196f, 0.18035100400447845f, -0.5243127346038818f, 0.3528226912021637f, 0.4005407989025116f, 0.02309150993824005f, 0.683445930480957f, 0.2774941325187683f, 0.7903522253036499f, 0.2605917751789093f, -0.4891970455646515f, 0.6492682099342346f, 0.5868442058563232f, 0.7311937808990479f, 0.8969143629074097f, 0.008442229591310024f, 0.17906948924064636f, 0.3489856719970703f, -0.4460768699645996f, 0.23082265257835388f, 0.5201033353805542f, 0.9667374491691589f, 0.5301028490066528f, 0.8444393873214722f, 0.2632462680339813f, 0.38448259234428406f, -0.08198442310094833f, 0.5766255855560303f, 0.9689621329307556f, 0.5286241769790649f, 0.4477129578590393f, 0.3442431390285492f, 0.16374367475509644f, 0.13263201713562012f, -0.887606680393219f, 0.6485695838928223f, 0.9186394810676575f, 0.8972692489624023f, 0.009010168723762035f, 0.4561598300933838f, 0.2336394339799881f, 0.855533242225647f, -0.3631756901741028f, 0.46864110231399536f, 0.5770856142044067f, 0.23706749081611633f, 0.621712863445282f, 0.6503604054450989f, 0.1892458200454712f, 0.8888723254203796f, -0.12168920785188675f, 0.7738128304481506f, 0.13733385503292084f, 0.22673679888248444f, 0.07809838652610779f, 0.5569273233413696f, 0.46199432015419006f, 0.010776927694678307f, -0.3990131914615631f, 0.08955731242895126f, 0.2016066163778305f, 0.4206831455230713f, 0.3159182667732239f, 0.4915710985660553f, 0.6276708841323853f, 0.36295706033706665f, -0.23849038779735565f, 0.4189951717853546f, 0.27694520354270935f, 0.7221187353134155f, 0.8758705854415894f, 0.4191020131111145f, 0.8289573788642883f, 0.11751299351453781f, -0.556159496307373f, 0.26233959197998047f, 0.25565865635871887f, 0.2005089372396469f, 0.4975779354572296f, 0.6613612174987793f, 0.4228804409503937f, 0.779152512550354f, -0.8531427979469299f, 0.6954020857810974f, 0.9811431765556335f, 0.29903820157051086f, 0.6264497637748718f, 0.6041965484619141f, 0.30261632800102234f, 0.05551804229617119f, -0.2592238485813141f, 0.6652004718780518f, 0.23960188031196594f, 0.7575351595878601f, 0.4864307940006256f, 0.7366333603858948f, 0.6955482363700867f, 0.29779618978500366f, -0.5672158002853394f, 0.7060990929603577f, 0.14703676104545593f, 0.08888115733861923f, 0.45821869373321533f, 0.42536818981170654f, 0.7104238867759705f, 0.5436373353004456f, -0.09112171083688736f, 0.8902118802070618f, 0.782704770565033f, 0.209570974111557f, 0.14374873042106628f, 0.46610531210899353f, 0.32957303524017334f, 0.5030180215835571f, -0.13211357593536377f, 0.7289311289787292f, 0.5734390616416931f, 0.0028991391882300377f, 0.4176967144012451f, 0.31825190782546997f, 0.10017692297697067f, 0.22339875996112823f, -0.2872445583343506f, 0.1752632111310959f, 0.7916463613510132f, 0.5381937623023987f, 0.5020725727081299f, 0.9031427502632141f, 0.5843856334686279f, 0.3215121626853943f, -0.8078352212905884f, 0.7589109539985657f, 0.4584324359893799f, 0.8413088917732239f, 0.4206244945526123f, 0.9370453357696533f, 0.2573961019515991f, 0.4230831265449524f, -0.42950209975242615f, 0.5701965093612671f, 0.011232852935791016f, 0.8582757711410522f, 0.07869552075862885f, 0.2629362940788269f, 0.6027747988700867f, 0.8012639880180359f, -0.9530969262123108f, 0.23922263085842133f, 0.4483601748943329f, 0.3051358163356781f, 0.01811157539486885f, 0.3623538315296173f, 0.24827289581298828f, 0.12810634076595306f, -0.18889541923999786f, 0.2819916903972626f, 0.9642817974090576f, 0.29479995369911194f, 0.004324791021645069f, 0.532343327999115f, 0.5184310078620911f, 0.18372127413749695f, -0.6726821660995483f, 0.714678168296814f, 0.7950736880302429f, 0.3391644358634949f, 0.9702789783477783f, 0.26796308159828186f, 0.45032456517219543f, 0.4385218918323517f, -0.21284182369709015f, 0.13840720057487488f, 0.9214203357696533f, 0.2917100191116333f, 0.9662370681762695f, 0.35929417610168457f, 0.21140536665916443f, 0.7880827188491821f, -0.5477024912834167f, 0.5696209073066711f, 0.7498396635055542f, 0.26157647371292114f, 0.8891568183898926f, 0.04079877585172653f, 0.041022222489118576f, 0.14881746470928192f, -0.6780574321746826f, 0.3902330696582794f, 0.21835990250110626f, 0.8110114932060242f, 0.4388861358165741f, 0.5441102981567383f, 0.4765765070915222f, 0.2418326884508133f, -0.7998430132865906f, 0.7638059258460999f, 0.03878026828169823f, 0.5135422945022583f, 0.9970567226409912f, 0.9142061471939087f, 0.15113644301891327f, 0.20648738741874695f, -0.26492756605148315f, 0.15015631914138794f, 0.10431712120771408f, 0.7676723003387451f, 0.6773360371589661f, 0.5024279356002808f, 0.7835705876350403f, 0.47652512788772583f, -0.06207593157887459f, 0.8982295989990234f, 0.011157670058310032f, 0.6515341401100159f, 0.9090481996536255f, 0.17529331147670746f, 0.8611599802970886f, 0.8164889812469482f, -0.7073983550071716f, 0.19473975896835327f, 0.6468791365623474f, 0.6642683148384094f, 0.3120277225971222f, 0.580047070980072f, 0.2647470533847809f, 0.7377103567123413f, -0.29434657096862793f, 0.6729650497436523f, 0.04667164757847786f, 0.040820203721523285f, 0.8280194997787476f, 0.12334908545017242f, 0.5951160788536072f, 0.17392480373382568f, -0.45335298776626587f, 0.5635015368461609f, 0.9246650338172913f, 0.1755191683769226f, 0.5174639821052551f, 0.2290051132440567f, 0.17366990447044373f, 0.989203155040741f, -0.5701516270637512f, 0.1614162027835846f, 0.21980488300323486f, 0.28954818844795227f, 0.6213700175285339f, 0.18673455715179443f, 0.6485103964805603f, 0.002870157826691866f, -0.4761044979095459f, 0.46666663885116577f, 0.2875359356403351f, 0.4941263198852539f, 0.8344258666038513f, 0.2214217633008957f, 0.025962291285395622f, 0.30683863162994385f, -0.32465213537216187f, 0.12355966120958328f, 0.5534707903862f, 0.37366804480552673f, 0.357041597366333f, 0.5137718319892883f, 0.8372032642364502f, 0.917726993560791f, -0.43570658564567566f, 0.13486604392528534f, 0.03159470483660698f, 0.976153552532196f, 0.004711450543254614f, 0.9236726760864258f, 0.8396737575531006f, 0.036801088601350784f, -0.011033788323402405f, 0.0958515852689743f, 0.367537260055542f, 0.7777201533317566f, 0.06740812212228775f, 0.8798770308494568f, 0.24276946485042572f, 0.49429333209991455f, -0.008881271816790104f, 0.25040099024772644f, 0.09529144316911697f, 0.36713284254074097f, 0.35540807247161865f, 0.49969056248664856f, 0.16694225370883942f, 0.7746255993843079f, -0.20266665518283844f, 0.6670543551445007f, 0.15373587608337402f, 0.20325639843940735f, 0.2789326608181f, 0.9348565340042114f, 0.6736755967140198f, 0.3513872027397156f, -0.07791256159543991f, 0.835046112537384f, 0.33059772849082947f, 0.15271152555942535f, 0.3840142488479614f, 0.6616803407669067f, 0.860743522644043f, 0.49116405844688416f, -0.749025821685791f, 0.540976345539093f, 0.21314240992069244f, 0.5178476572036743f, 0.3263627290725708f, 0.43319839239120483f, 0.2899889051914215f, 0.15271499752998352f, -0.4175993800163269f, 0.9592414498329163f, 0.3847772181034088f, 0.3102540671825409f, 0.8448436856269836f, 0.1600961983203888f, 0.6061751246452332f, 0.7127313017845154f, -0.3290940821170807f, 0.23722463846206665f, 0.3187788426876068f, 0.26750648021698f, 0.5055186152458191f, 0.3265540897846222f, 0.7065741419792175f, 0.8918367028236389f, -0.7468113303184509f, 0.8539137840270996f, 0.9310542941093445f, 0.4266258478164673f, 0.3322504758834839f, 0.8877111077308655f, 0.8227424621582031f, 0.1685594916343689f, -0.14829161763191223f, 0.24942147731781006f, 0.9706882834434509f, 0.44964489340782166f, 0.8885484933853149f, 0.36396318674087524f, 0.0797026976943016f, 0.961715817451477f, -0.7907803058624268f, 0.13192926347255707f, 0.14133135974407196f, 0.6815189719200134f, 0.4527865946292877f, 0.7617341876029968f, 0.8689406514167786f, 0.6563331484794617f, -0.4643993377685547f, 0.30865341424942017f, 0.6564526557922363f, 0.4793529212474823f, 0.8751580119132996f, 0.7492164373397827f, 0.6393170952796936f, 0.5113721489906311f, -0.28239020705223083f, 0.9837228059768677f, 0.8315169811248779f, 0.3326730728149414f, 0.18066050112247467f, 0.5555816292762756f, 0.09670553356409073f, 0.2998490035533905f, -0.4153403639793396f, 0.06147533282637596f, 0.17099620401859283f, 0.07920876890420914f, 0.6292083859443665f, 0.6717577576637268f, 0.3449908494949341f, 0.8813826441764832f, -0.817550778388977f, 0.03739001974463463f, 0.403362900018692f, 0.6909117102622986f, 0.40630295872688293f, 0.16240505874156952f, 0.7741235494613647f, 0.3613853454589844f, -0.8006685972213745f, 0.08739199489355087f, 0.014238547533750534f, 0.01503271795809269f, 0.6231167912483215f, 0.08171113580465317f, 0.17237095534801483f, 0.3321879804134369f, -0.9164125919342041f, 0.9938949942588806f, 0.8366432189941406f, 0.4286426603794098f, 0.47979992628097534f, 0.1343594491481781f, 0.5200250148773193f, 0.3517991602420807f, -0.5301833748817444f, 0.8217167258262634f, 0.0670986995100975f, 0.25051483511924744f, 0.9096887111663818f, 0.7657599449157715f, 0.5903799533843994f, 0.2919500172138214f, -0.7749961018562317f, 0.8319080471992493f, 0.15698547661304474f, 0.11696039885282516f, 0.09326591342687607f, 0.9077181220054626f, 0.4201695919036865f, 0.28382620215415955f, -0.9317796230316162f, 0.26804041862487793f, 0.9603222608566284f, 0.9387221336364746f, 0.5386497378349304f, 0.18004776537418365f, 0.2164350301027298f, 0.16525882482528687f, -0.28623881936073303f, 0.5066006779670715f, 0.27899301052093506f, 0.7974123954772949f, 0.5285886526107788f, 0.40267425775527954f, 0.21985864639282227f, 0.5292621850967407f, -0.2386799305677414f, 0.7099565863609314f, 0.6146807074546814f, 0.8220148086547852f, 0.37796247005462646f, 0.4669123888015747f, 0.3855981230735779f, 0.27425822615623474f, -0.2877587080001831f, 0.3766637444496155f, 0.5989320874214172f, 0.5614867210388184f, 0.2841842770576477f, 0.7748682498931885f, 0.9012104868888855f, 0.9206628799438477f, -0.1381264477968216f, 0.870814859867096f, 0.7071250677108765f, 0.5374722480773926f, 0.5459705591201782f, 0.2025081366300583f, 0.14533977210521698f, 0.361624538898468f, -0.9787424206733704f, 0.22157107293605804f, 0.5538569688796997f, 0.3865329325199127f, 0.9357782602310181f, 0.13304726779460907f, 0.4613798260688782f, 0.43701601028442383f, -0.49226823449134827f, 0.4576845169067383f, 0.30274906754493713f, 0.621306300163269f, 0.24164874851703644f, 0.6021150350570679f, 0.19788941740989685f, 0.7215229868888855f, -0.04733246937394142f, 0.15559446811676025f, 0.8404727578163147f, 0.627970814704895f, 0.006533220876008272f, 0.8052012920379639f, 0.13067133724689484f, 0.3116632103919983f, -0.13008327782154083f, 0.2218550145626068f, 0.7120707035064697f, 0.8131387829780579f, 0.6124904751777649f, 0.22320523858070374f, 0.8409242033958435f, 0.9204336404800415f, -0.967700719833374f, 0.8619982600212097f, 0.9645836353302002f, 0.28453701734542847f, 0.7071581482887268f, 0.341429203748703f, 0.42448854446411133f, 0.12571044266223907f, -0.6522096991539001f, 0.7166430950164795f, 0.7135162949562073f, 0.767968475818634f, 0.7564042210578918f, 0.44973376393318176f, 0.05226006358861923f, 0.6655228734016418f, -0.6706516146659851f, 0.02839936874806881f, 0.4429425597190857f, 0.04707065597176552f, 0.4027802050113678f, 0.23916837573051453f, 0.8068237900733948f, 0.5912355184555054f, -0.4504297971725464f, 0.43928518891334534f, 0.528558075428009f, 0.27719053626060486f, 0.07841756939888f, 0.1920754462480545f, 0.48838233947753906f, 0.6580685973167419f, -0.7294557690620422f, 0.00460861437022686f, 0.2457796037197113f, 0.5632413625717163f, 0.20063720643520355f, 0.9480932354927063f, 0.4751167595386505f, 0.5515716671943665f, -0.8817451000213623f, 0.9125573039054871f, 0.5733680129051208f, 0.7826153635978699f, 0.7172992825508118f, 0.9848762154579163f, 0.25306254625320435f, 0.23554116487503052f, -0.018606120720505714f, 0.7426652312278748f, 0.3116294741630554f, 0.23110270500183105f, 0.7670119404792786f, 0.3864651620388031f, 0.13763727247714996f, 0.653793215751648f, -0.9327593445777893f, 0.26216742396354675f, 0.7501253485679626f, 0.39093518257141113f, 0.7882879972457886f, 0.31695088744163513f, 0.2927855849266052f, 0.8911882042884827f, -0.20590472221374512f, 0.9797767996788025f, 0.055941514670848846f, 0.14853288233280182f, 0.15500013530254364f, 0.7745370864868164f, 0.14451321959495544f, 0.8375918865203857f, -0.13300296664237976f, 0.45090892910957336f, 0.8740070462226868f, 0.06602218002080917f, 0.8776103258132935f, 0.9056901931762695f, 0.21009781956672668f, 0.12911421060562134f, -0.37058812379837036f, 0.23418313264846802f, 0.5159732699394226f, 0.022002164274454117f, 0.8658028841018677f, 0.7609526515007019f, 0.9296817183494568f, 0.44458550214767456f, -0.2946910560131073f, 0.22273823618888855f, 0.9139385223388672f, 0.666692852973938f, 0.8531242609024048f, 0.03588195517659187f, 0.4304713010787964f, 0.09713339060544968f, -0.7188554406166077f, 0.7192872762680054f, 0.2801877558231354f, 0.2106439620256424f, 0.8309152126312256f, 0.48948079347610474f, 0.8293695449829102f, 0.5235876441001892f, -0.5699601769447327f, 0.23195044696331024f, 0.9204521179199219f, 0.23591409623622894f, 0.8914528489112854f, 0.9499147534370422f, 0.9409085512161255f, 0.6423215866088867f, -0.5073315501213074f, 0.026083098724484444f, 0.18021678924560547f, 0.22517962753772736f, 0.37905749678611755f, 0.7155607342720032f, 0.8422001004219055f, 0.9969623684883118f, -0.6110266447067261f, 0.43039560317993164f, 0.4900505244731903f, 0.08634203672409058f, 0.7120556235313416f, 0.4952358603477478f, 0.014526985585689545f, 0.8711845874786377f, -0.2356063723564148f, 0.08710091561079025f, 0.022124171257019043f, 0.3958354890346527f, 0.11782637238502502f, 0.5577272176742554f, 0.2788480520248413f, 0.030144188553094864f, -0.030905958265066147f, 0.9411370754241943f, 0.4976344108581543f, 0.7199728488922119f, 0.44854018092155457f, 0.1812162548303604f, 0.5204698443412781f, 0.5935083627700806f, -0.7244624495506287f, 0.9188945293426514f, 0.3529190123081207f, 0.8023055195808411f, 0.8573505878448486f, 0.6875354051589966f, 0.013709685765206814f, 0.5214580297470093f, -0.20943765342235565f, 0.37227916717529297f, 0.08524779975414276f, 0.9731224775314331f, 0.6852123141288757f, 0.5530176758766174f, 0.9749290943145752f, 0.15493151545524597f, -0.8446871638298035f, 0.4333445727825165f, 0.9263744354248047f, 0.13028870522975922f, 0.6708149313926697f, 0.314521461725235f, 0.5756807923316956f, 0.07503744959831238f, -0.4573715925216675f, 0.9309681057929993f, 0.48284655809402466f, 0.4547679126262665f, 0.3632102310657501f, 0.36584728956222534f, 0.23345929384231567f, 0.4488392770290375f, -0.23649391531944275f, 0.6740921139717102f, 0.9783922433853149f, 0.9934000372886658f, 0.564905047416687f, 0.6179444789886475f, 0.3729303181171417f, 0.014409901574254036f, -0.6588114500045776f, 0.6575924754142761f, 0.2258504182100296f, 0.8878110647201538f, 0.08625449240207672f, 0.0975114032626152f, 0.46354737877845764f, 0.482733815908432f, -0.177728071808815f, 0.9056043028831482f, 0.34191957116127014f, 0.447083055973053f, 0.5854672789573669f, 0.6999818086624146f, 0.2735729217529297f, 0.041393108665943146f, -0.33681267499923706f, 0.8138250112533569f, 0.37429529428482056f, 0.9083776473999023f, 0.3834368586540222f, 0.7484782338142395f, 0.12981180846691132f, 0.25653183460235596f, -0.7441051006317139f, 0.9817482233047485f, 0.8494285941123962f, 0.48084309697151184f, 0.6290395259857178f, 0.2032930999994278f, 0.6663334369659424f, 0.6162163019180298f, -0.7208817005157471f, 0.25491246581077576f, 0.2496979832649231f, 0.6507595777511597f, 0.6374655961990356f, 0.8308921456336975f, 0.155710369348526f, 0.2943534851074219f, -0.6809955835342407f, 0.05527111515402794f, 0.3941746950149536f, 0.20650748908519745f, 0.06993329524993896f, 0.16616062819957733f, 0.22680002450942993f, 0.46824029088020325f, -0.6327599287033081f, 0.7699246406555176f, 0.5669257044792175f, 0.12057733535766602f, 0.38876327872276306f, 0.4733194410800934f, 0.7692233324050903f, 0.19223330914974213f, -0.0686778873205185f, 0.0964265838265419f, 0.5884895920753479f, 0.89692223072052f, 0.2790544629096985f, 0.5134150385856628f, 0.2672226130962372f, 0.8402762413024902f, -0.26483792066574097f, 0.1716570407152176f, 0.28810954093933105f, 0.9404467940330505f, 0.9976669549942017f, 0.4308534562587738f, 0.009770560078322887f, 0.5657275915145874f, -0.48587074875831604f, 0.8421579003334045f, 0.19512268900871277f, 0.6075118780136108f, 0.584054172039032f, 0.7641963958740234f, 0.922571063041687f, 0.5361303687095642f, -0.3971797227859497f, 0.023124856874346733f, 0.9501526951789856f, 0.9704363942146301f, 0.9037246108055115f, 0.6572282314300537f, 0.2114483118057251f, 0.5759683847427368f, -0.4328819513320923f, 0.13550977408885956f, 0.060035355389118195f, 0.2533602714538574f, 0.23719289898872375f, 0.7822566628456116f, 0.1575579196214676f, 0.7586755156517029f, -0.9355947375297546f, 0.4054903984069824f, 0.38723400235176086f, 0.8849648833274841f, 0.7090241312980652f, 0.4922632873058319f, 0.7629578113555908f, 0.8505520820617676f, -0.1599837690591812f, 0.1378646194934845f, 0.1130867525935173f, 0.5729784369468689f, 0.5967937111854553f, 0.31415271759033203f, 0.4914575219154358f, 0.42117223143577576f, -0.2994636297225952f, 0.8612774014472961f, 0.5018224716186523f, 0.35584962368011475f, 0.8813732862472534f, 0.31304851174354553f, 0.9457957744598389f, 0.20202574133872986f, -0.7914569973945618f, 0.37891170382499695f, 0.09314851462841034f, 0.13582327961921692f, 0.9376453161239624f, 0.32610490918159485f, 0.9581441879272461f, 0.7946649789810181f, -0.49319902062416077f, 0.27391523122787476f, 0.7164339423179626f, 0.7314870953559875f, 0.562695324420929f, 0.8946805596351624f, 0.43358588218688965f, 0.1909439116716385f, -0.4403674006462097f, 0.6665763258934021f, 0.0582975372672081f, 0.5786737203598022f, 0.27881285548210144f, 0.5434039235115051f, 0.25353744626045227f, 0.8371391296386719f, -0.1174260750412941f, 0.9616680145263672f, 0.06845512241125107f, 0.21584904193878174f, 0.4330059289932251f, 0.28957080841064453f, 0.887337863445282f, 0.27001646161079407f, -0.06824120134115219f, 0.4159878194332123f, 0.012054122984409332f, 0.1018071323633194f, 0.8843235969543457f, 0.057658903300762177f, 0.4578312039375305f, 0.0468565858900547f, -0.22703373432159424f, 0.8125855922698975f, 0.6524340510368347f, 0.4532836973667145f, 0.80708247423172f, 0.4306764006614685f, 0.7877143025398254f, 0.015440811403095722f, -0.4787195920944214f, 0.48024246096611023f, 0.43799737095832825f, 0.994544506072998f, 0.4171772301197052f, 0.07543722540140152f, 0.24560368061065674f, 0.3684298098087311f, -0.7435777187347412f, 0.4223043918609619f, 0.19493956863880157f, 0.5342535972595215f, 0.2802044153213501f, 0.8116028308868408f, 0.1308259218931198f, 0.8950024247169495f, -0.8675112724304199f, 0.9731941223144531f, 0.9418253302574158f, 0.846869945526123f, 0.9056533575057983f, 0.5092349052429199f, 0.5679657459259033f, 0.47333911061286926f, -0.3059166967868805f, 0.42689400911331177f, 0.9169937372207642f, 0.8689156174659729f, 0.30648812651634216f, 0.6814216375350952f, 0.38338056206703186f, 0.2873271703720093f, -0.2552385628223419f, 0.45620185136795044f, 0.9770811796188354f, 0.37840786576271057f, 0.619360625743866f, 0.018848160281777382f, 0.03166332095861435f, 0.9128813147544861f, -0.35464680194854736f, 0.698483407497406f, 0.6379043459892273f, 0.7359635829925537f, 0.5516904592514038f, 0.27735650539398193f, 0.5244506001472473f, 0.31374257802963257f, -0.7993144989013672f, 0.8443015217781067f, 0.08306953310966492f, 0.7594419121742249f, 0.21034449338912964f, 0.9951146245002747f, 0.937840461730957f, 0.28707918524742126f, -0.42358043789863586f, 0.1088729277253151f, 0.5423852205276489f, 0.2869563400745392f, 0.708899199962616f, 0.8776443004608154f, 0.5155898332595825f, 0.3712281584739685f, -0.9130184650421143f, 0.8088033199310303f, 0.4135722815990448f, 0.29116368293762207f, 0.6539098620414734f, 0.9210817217826843f, 0.8889526724815369f, 0.8964150547981262f, -0.6579165458679199f, 0.3622499406337738f, 0.08260201662778854f, 0.8450440764427185f, 0.3542061448097229f, 0.03270610421895981f, 0.31025224924087524f, 0.3793033957481384f, -0.0687033012509346f, 0.9627789855003357f, 0.38529133796691895f, 0.0075727710500359535f, 0.6026995182037354f, 0.2763656973838806f, 0.11956384778022766f, 0.003469287184998393f, -0.49287375807762146f, 0.4599299728870392f, 0.3301788568496704f, 0.2102041393518448f, 0.9556521773338318f, 0.3696548342704773f, 0.4270368218421936f, 0.7446635961532593f, -0.03425825759768486f, 0.7734557390213013f, 0.60029536485672f, 0.810886561870575f, 0.0046299416571855545f, 0.30213385820388794f, 0.8752975463867188f, 0.43466776609420776f, -0.33511054515838623f, 0.46883007884025574f, 0.2718832492828369f, 0.8679692149162292f, 0.9575137495994568f, 0.3770918846130371f, 0.40884050726890564f, 0.8826388716697693f, -0.8886852264404297f, 0.7844046354293823f, 0.16181479394435883f, 0.565423309803009f, 0.3268459439277649f, 0.9324617981910706f, 0.22051328420639038f, 0.25861039757728577f, -0.9750482439994812f, 0.19108347594738007f, 0.8053340911865234f, 0.17403563857078552f, 0.5304776430130005f, 0.3082726299762726f, 0.048205286264419556f, 0.7541306018829346f, -0.5903505086898804f, 0.5195092558860779f, 0.15119525790214539f, 0.9708764553070068f, 0.5698174834251404f, 0.7193416357040405f, 0.06902693212032318f, 0.8866438269615173f, -0.8913615345954895f, 0.7784222364425659f, 0.8003820776939392f, 0.4569813907146454f, 0.4389837682247162f, 0.2245836704969406f, 0.6532548666000366f, 0.23779068887233734f, -0.4795328676700592f, 0.720058023929596f, 0.29919034242630005f, 0.13058039546012878f, 0.6718866229057312f, 0.2358090728521347f, 0.6805419325828552f, 0.7708072066307068f, -0.5361786484718323f, 0.1567806750535965f, 0.7764227390289307f, 0.9946203231811523f, 0.3679531216621399f, 0.23141653835773468f, 0.1987285166978836f, 0.6475546956062317f, -0.7040508985519409f, 0.7612618803977966f, 0.782385528087616f, 0.33317163586616516f, 0.06517556309700012f, 0.29333770275115967f, 0.5661720633506775f, 0.3063250482082367f, -0.34707292914390564f, 0.051737312227487564f, 0.954688310623169f, 0.517981231212616f, 0.07227861136198044f, 0.5409760475158691f, 0.08430848270654678f, 0.33276426792144775f, -0.016029972583055496f, 0.3172706663608551f, 0.08604994416236877f, 0.12452560663223267f, 0.09424560517072678f, 0.6109061241149902f, 0.6550461053848267f, 0.5733766555786133f, -0.7981088161468506f, 0.4220934808254242f, 0.5552318096160889f, 0.052524764090776443f, 0.9292771816253662f, 0.4966868758201599f, 0.15330514311790466f, 0.010299638845026493f, -0.6166800856590271f, 0.4562109410762787f, 0.15635381639003754f, 0.5062832236289978f, 0.5983542799949646f, 0.30014902353286743f, 0.8157406449317932f, 0.059385936707258224f, -0.36704570055007935f, 0.9696339964866638f, 0.2290426343679428f, 0.24512581527233124f, 0.8549486398696899f, 0.004019741900265217f, 0.3332984447479248f, 0.17460347712039948f, -0.5267359614372253f, 0.45883047580718994f, 0.36523640155792236f, 0.9577573537826538f, 0.16916440427303314f, 0.2946668863296509f, 0.9399417638778687f, 0.17074695229530334f, -0.553763210773468f, 0.4025968909263611f, 0.5001398324966431f, 0.4122488796710968f, 0.24649052321910858f, 0.690895676612854f, 0.6146170496940613f, 0.9332599639892578f, -0.7543907165527344f, 0.212344229221344f, 0.0893787369132042f, 0.3273673951625824f, 0.2716914117336273f, 0.8298662900924683f, 0.07801960408687592f, 0.2060096561908722f, -0.2067904770374298f, 0.02607548236846924f, 0.7021626234054565f, 0.9463087916374207f, 0.2132309079170227f, 0.9282857179641724f, 0.6187259554862976f, 0.57452791929245f, -0.7975798845291138f, 0.2050297111272812f, 0.5900529623031616f, 0.4175373613834381f, 0.03784032538533211f, 0.6834486722946167f, 0.5818188786506653f, 0.2911745309829712f, -0.11394680291414261f, 0.20135672390460968f, 0.6491945385932922f, 0.9281231164932251f, 0.8917953372001648f, 0.337105393409729f, 0.1359015852212906f, 0.16469790041446686f, -0.8463048934936523f, 0.19239972531795502f, 0.15193888545036316f, 0.7955711483955383f, 0.7953750491142273f, 0.8619517087936401f, 0.2474280297756195f, 0.42368361353874207f, -0.3433798551559448f, 0.7564342617988586f, 0.4283266067504883f, 0.5996331572532654f, 0.5280118584632874f, 0.43479353189468384f, 0.6794372797012329f, 0.8201031684875488f, -0.42674392461776733f, 0.2185199111700058f, 0.996270477771759f, 0.7470143437385559f, 0.32390472292900085f, 0.3977951407432556f, 0.015744570642709732f, 0.45043718814849854f, -0.4944102168083191f, 0.3165137767791748f, 0.5541877746582031f, 0.42440807819366455f, 0.809860110282898f, 0.3482888638973236f, 0.617342472076416f, 0.4892527163028717f, -0.8052732348442078f, 0.14826926589012146f, 0.8475712537765503f, 0.7432125806808472f, 0.7516224384307861f, 0.8488552570343018f, 0.5063426494598389f, 0.4131450951099396f, -0.16873914003372192f, 0.34516847133636475f, 0.2593882381916046f, 0.9911344051361084f, 0.8953922986984253f, 0.04302230104804039f, 0.49583789706230164f, 0.9116426110267639f, -0.5860093832015991f, 0.6633701324462891f, 0.5401735901832581f, 0.2725786864757538f, 0.9850562214851379f, 0.09892921149730682f, 0.7317473888397217f, 0.5457730293273926f, -0.9671192169189453f, 0.5501194596290588f, 0.7628991007804871f, 0.4793241620063782f, 0.5554706454277039f, 0.4967558681964874f, 0.7189275622367859f, 0.6710252165794373f, -0.12707790732383728f, 0.7422632575035095f, 0.7076006531715393f, 0.15562601387500763f, 0.14717859029769897f, 0.34939679503440857f, 0.3683183193206787f, 0.32374128699302673f, -0.06075650453567505f, 0.9748130440711975f, 0.27208518981933594f, 0.12241001427173615f, 0.7481294870376587f, 0.3187728822231293f, 0.5275235176086426f, 0.9109904766082764f, -0.6773015260696411f, 0.6634901165962219f, 0.5968091487884521f, 0.0731939971446991f, 0.7795572280883789f, 0.78508061170578f, 0.8774799704551697f, 0.5167418718338013f, -0.20512522757053375f, 0.8132057785987854f, 0.9112575054168701f, 0.2590920627117157f, 0.9985716938972473f, 0.9682145714759827f, 0.1540503203868866f, 0.2817167639732361f, -0.7759769558906555f, 0.5455993413925171f, 0.9593790769577026f, 0.18511773645877838f, 0.0873359814286232f, 0.716407060623169f, 0.7124171257019043f, 0.8239198327064514f, -0.1092524453997612f, 0.19461366534233093f, 0.10802222788333893f, 0.44447916746139526f, 0.8675888180732727f, 0.0922439694404602f, 0.780673623085022f, 0.5078483819961548f, -0.24600818753242493f, 0.614500105381012f, 0.807904839515686f, 0.821271538734436f, 0.9437059164047241f, 0.5979880094528198f, 0.5970944166183472f, 0.6634161472320557f, -0.5801121592521667f, 0.8657075762748718f, 0.622144877910614f, 0.2517518699169159f, 0.7700166702270508f, 0.19039835035800934f, 0.12637533247470856f, 0.8758681416511536f, -0.732480525970459f, 0.7727395296096802f, 0.22191700339317322f, 0.870209813117981f, 0.856910765171051f, 0.6228302121162415f, 0.992672324180603f, 0.4044516682624817f, -0.8783655166625977f, 0.3994646668434143f, 0.21094448864459991f, 0.07484477013349533f, 0.721238911151886f, 0.1987677663564682f, 0.3604685366153717f, 0.6514667868614197f, -0.29973942041397095f, 0.9852453470230103f, 0.506338894367218f, 0.31471335887908936f, 0.6156202554702759f, 0.32482340931892395f, 0.7588207721710205f, 0.383007675409317f, -0.5107603073120117f, 0.3484267592430115f, 0.04874943196773529f, 0.9188473224639893f, 0.367328405380249f, 0.7258967161178589f, 0.6923775672912598f, 0.44648537039756775f, -0.4266502261161804f, 0.5818361043930054f, 0.37146997451782227f, 0.29894623160362244f, 0.370767742395401f, 0.9126896858215332f, 0.8617753386497498f, 0.454296737909317f, -0.9517240524291992f, 0.37017861008644104f, 0.6021130084991455f, 0.5015835165977478f, 0.8612624406814575f, 0.5281098484992981f, 0.953734278678894f, 0.24529199302196503f, -0.40387678146362305f, 0.34099557995796204f, 0.17940068244934082f, 0.3374844491481781f, 0.3199175298213959f, 0.6987120509147644f, 0.5349817276000977f, 0.11329832673072815f, -0.32354310154914856f, 0.34545156359672546f, 0.49655118584632874f, 0.8375716805458069f, 0.8451811075210571f, 0.2475646585226059f, 0.1031114012002945f, 0.5532541275024414f, -0.8663719892501831f, 0.6428638696670532f, 0.2618693709373474f, 0.10295948386192322f, 0.9817463755607605f, 0.5933944582939148f, 0.37382766604423523f, 0.35117220878601074f, -0.4869810938835144f, 0.47219690680503845f, 0.5719674825668335f, 0.28420892357826233f, 0.1574525237083435f, 0.6569662094116211f, 0.21679718792438507f, 0.7524964809417725f, -0.2509385943412781f, 0.2651195228099823f, 0.37319207191467285f, 0.7577337622642517f, 0.2909635901451111f, 0.1978994905948639f, 0.18648993968963623f, 0.5178026556968689f, -0.5968193411827087f, 0.7479197978973389f, 0.7614104151725769f, 0.18079788982868195f, 0.7159412503242493f, 0.5898625254631042f, 0.5506936311721802f, 0.8231931328773499f, -0.202944815158844f, 0.11854857206344604f, 0.6545153856277466f, 0.8953240513801575f, 0.8019385933876038f, 0.857129693031311f, 0.6784530878067017f, 0.6191121935844421f, -0.17647111415863037f, 0.3762128949165344f, 0.3113422095775604f, 0.39193764328956604f, 0.6911156177520752f, 0.6866047382354736f, 0.8751506209373474f, 0.7212127447128296f, -0.38546785712242126f, 0.1162480041384697f, 0.32569628953933716f, 0.6940087080001831f, 0.5551033020019531f, 0.7751149535179138f, 0.8775731921195984f, 0.9562240242958069f, -0.9420426487922668f, 0.6513087153434753f, 0.5316483974456787f, 0.08672279864549637f, 0.9918019771575928f, 0.25141656398773193f, 0.8643980622291565f, 0.3101353943347931f, -0.09720771759748459f, 0.4123217463493347f, 0.5740790367126465f, 0.7638790011405945f, 0.6722713708877563f, 0.16347409784793854f, 0.759700357913971f, 0.338091105222702f, -0.09785225242376328f, 0.2838483452796936f, 0.9740880131721497f, 0.435711532831192f, 0.5523244142532349f, 0.6314138174057007f, 0.16806139051914215f, 0.701496422290802f, -0.48209521174430847f, 0.48309168219566345f, 0.20576609671115875f, 0.6310926675796509f, 0.4806123375892639f, 0.4352276921272278f, 0.5769246220588684f, 0.2352253645658493f, -0.4508539140224457f, 0.3632282018661499f, 0.06258831918239594f, 0.5784202814102173f, 0.29984357953071594f, 0.016713498160243034f, 0.5295052528381348f, 0.9513523578643799f, -0.548417866230011f, 0.2268751859664917f, 0.4731479585170746f, 0.6957689523696899f, 0.6481766104698181f, 0.7040045261383057f, 0.25051775574684143f, 0.012079867534339428f, -0.8266410827636719f, 0.6048925518989563f, 0.056994494050741196f, 0.8458043932914734f, 0.14382266998291016f, 0.5051673054695129f, 0.18636444211006165f, 0.49911409616470337f, -0.07723692804574966f, 0.8991679549217224f, 0.8619704842567444f, 0.4745004177093506f, 0.23449192941188812f, 0.5096450448036194f, 0.9305101037025452f, 0.43756839632987976f, -0.31484511494636536f, 0.38985535502433777f, 0.12303155660629272f, 0.7584595084190369f, 0.6063210964202881f, 0.03353365138173103f, 0.820473849773407f, 0.42951950430870056f, -0.7538846135139465f, 0.20067399740219116f, 0.9108507633209229f, 0.9368587136268616f, 0.26146408915519714f, 0.7547444105148315f, 0.44028985500335693f, 0.08632796257734299f, -0.3273424506187439f, 0.7724995613098145f, 0.7730609178543091f, 0.9627286791801453f, 0.12927277386188507f, 0.485411137342453f, 0.5912275314331055f, 0.7152729034423828f, -0.927213728427887f, 0.460521399974823f, 0.5746170878410339f, 0.8645201921463013f, 0.32449206709861755f, 0.5748761296272278f, 0.4514629542827606f, 0.5738746523857117f, -0.30676209926605225f, 0.8959732055664062f, 0.25288471579551697f, 0.59064120054245f, 0.5254284739494324f, 0.6326992511749268f, 0.14145751297473907f, 0.49758100509643555f, -0.5040464997291565f, 0.24863409996032715f, 0.4753056466579437f, 0.6506956219673157f, 0.43964847922325134f, 0.776139497756958f, 0.6563149690628052f, 0.139691561460495f, -0.6628936529159546f, 0.40465807914733887f, 0.6615532040596008f, 0.9805894494056702f, 0.764091432094574f, 0.7037357687950134f, 0.2555839419364929f, 0.21286189556121826f, -0.5748335123062134f, 0.6953637599945068f, 0.5368756055831909f, 0.17492209374904633f, 0.739646852016449f, 0.6815091967582703f, 0.4101237654685974f, 0.32564228773117065f, -0.9226045608520508f, 0.7878067493438721f, 0.1804993599653244f, 0.9465967416763306f, 0.5434688329696655f, 0.7852627635002136f, 0.5587875247001648f, 0.7051458954811096f, -0.3048701584339142f, 0.9747357368469238f, 0.05074641853570938f, 0.4122564494609833f, 0.16912147402763367f, 0.7761132121086121f, 0.44276559352874756f, 0.6001430749893188f, -0.18628741800785065f, 0.42966872453689575f, 0.6542267799377441f, 0.4729101061820984f, 0.5121181607246399f, 0.25151121616363525f, 0.7931031584739685f, 0.5826677083969116f, -0.7614617347717285f, 0.15005086362361908f, 0.2426973283290863f, 0.7110112905502319f, 0.38770103454589844f, 0.7972857356071472f, 0.24381205439567566f, 0.5183828473091125f, -0.24410636723041534f, 0.2662820816040039f, 0.745678186416626f, 0.8873725533485413f, 0.04304312542080879f, 0.6288785934448242f, 0.009382358752191067f, 0.9446987509727478f, -0.9415190815925598f, 0.4857405126094818f, 0.10260137170553207f, 0.6506504416465759f, 0.7474590539932251f, 0.6591751575469971f, 0.24184876680374146f, 0.8370532393455505f, -0.20473498106002808f, 0.6804748177528381f, 0.9949788451194763f, 0.28843259811401367f, 0.29219910502433777f, 0.7921472787857056f, 0.24921968579292297f, 0.2779786288738251f, -0.6743242740631104f, 0.6892544031143188f, 0.17135877907276154f, 0.7607136964797974f, 0.8450353145599365f, 0.8937785029411316f, 0.8176372647285461f, 0.5987029075622559f, -0.7719714641571045f, 0.7732353806495667f, 0.011795295402407646f, 0.7934415936470032f, 0.9969044923782349f, 0.1023741066455841f, 0.6471801996231079f, 0.14735698699951172f, -0.006399938836693764f, 0.43988236784935f, 0.4705727994441986f, 0.8712778091430664f, 0.6805765628814697f, 0.5086028575897217f, 0.9989738464355469f, 0.06694889068603516f, -0.21931013464927673f, 0.05466656759381294f, 0.48533985018730164f, 0.5587661862373352f, 0.35423779487609863f, 0.6126895546913147f, 0.9343199133872986f, 0.832282543182373f, -0.7234646677970886f, 0.7183346748352051f, 0.8095521926879883f, 0.7633732557296753f, 0.1343962699174881f, 0.6979185342788696f, 0.7355890274047852f, 0.6622878909111023f, -0.9376912117004395f, 0.6607747077941895f, 0.48890167474746704f, 0.3916482627391815f, 0.9555940628051758f, 0.7253923416137695f, 0.4857766032218933f, 0.96128910779953f, -0.36352401971817017f, 0.8191223740577698f, 0.6335353255271912f, 0.180928036570549f, 0.6685084700584412f, 0.954343318939209f, 0.818780779838562f, 0.21048162877559662f, -0.5316951274871826f, 0.3511981964111328f, 0.2019708901643753f, 0.9113085269927979f, 0.6813578605651855f, 0.3057164251804352f, 0.7264248728752136f, 0.16140826046466827f, -0.34109318256378174f, 0.20158199965953827f, 0.5794447660446167f, 0.7453880906105042f, 0.08767053484916687f, 0.7614191770553589f, 0.431557834148407f, 0.6657788157463074f, -0.4367709755897522f, 0.2618759870529175f, 0.557790994644165f, 0.38468682765960693f, 0.2782423794269562f, 0.6749582886695862f, 0.8381218314170837f, 0.08370961993932724f, -0.6238558888435364f, 0.19294823706150055f, 0.01327848806977272f, 0.09265664964914322f, 0.25547152757644653f, 0.9243564605712891f, 0.36596593260765076f, 0.8928214311599731f, -0.7712591290473938f, 0.2641690671443939f, 0.4287053048610687f, 0.47533801198005676f, 0.6371734142303467f, 0.6067285537719727f, 0.5207467675209045f, 0.7056165337562561f, -0.28775346279144287f, 0.8841924071311951f, 0.8809574842453003f, 0.7861031889915466f, 0.30667629837989807f, 0.6888304948806763f, 0.5787044763565063f, 0.3432126045227051f, -0.47818523645401f, 0.13931186497211456f, 0.07490485161542892f, 0.5078020095825195f, 0.33599257469177246f, 0.38307371735572815f, 0.03135930374264717f, 0.40500926971435547f, -0.12010007351636887f, 0.5372878909111023f, 0.9852116107940674f, 0.9676926732063293f, 0.6900773048400879f, 0.49780258536338806f, 0.49427202343940735f, 0.06259378790855408f, -0.30571871995925903f, 0.738063633441925f, 0.4991668462753296f, 0.7721170783042908f, 0.39595505595207214f, 0.7583163976669312f, 0.6565560102462769f, 0.05372015759348869f, -0.8857539296150208f, 0.09041038155555725f, 0.8634676337242126f, 0.8428789973258972f, 0.7209274768829346f, 0.8284698128700256f, 0.8164633512496948f, 0.6152098774909973f, -0.6611422300338745f, 0.45810410380363464f, 0.6406548023223877f, 0.5195103287696838f, 0.9597479701042175f, 0.25223755836486816f, 0.535911500453949f, 0.1886625736951828f, -0.6788238883018494f, 0.8780650496482849f, 0.8469952344894409f, 0.508054256439209f, 0.8723411560058594f, 0.1896304041147232f, 0.24998977780342102f, 0.8059297204017639f, -0.14194145798683167f, 0.7172614932060242f, 0.9204587340354919f, 0.8316839337348938f, 0.014585676603019238f, 0.2617383599281311f, 0.9409610629081726f, 0.9464892148971558f, -0.36917710304260254f, 0.11856482923030853f, 0.38768160343170166f, 0.415122389793396f, 0.011132695712149143f, 0.45047998428344727f, 0.48652184009552f, 0.7133572697639465f, -0.056932125240564346f, 0.9546455144882202f, 0.8828530311584473f, 0.4052664637565613f, 0.712436318397522f, 0.8428722620010376f, 0.777594804763794f, 0.3550110459327698f, -0.839474618434906f, 0.5785256624221802f, 0.5927845239639282f, 0.017003213986754417f, 0.9684289693832397f, 0.33627796173095703f, 0.56700599193573f, 0.738196611404419f, -0.35443952679634094f, 0.5109207034111023f, 0.27125251293182373f, 0.18282219767570496f, 0.20692592859268188f, 0.37798675894737244f, 0.7182353734970093f, 0.9889036417007446f, -0.7806824445724487f, 0.24504460394382477f, 0.5769919753074646f, 0.45928487181663513f, 0.38701310753822327f, 0.7163721919059753f, 0.43120163679122925f, 0.569329559803009f, -0.8471683263778687f, 0.45330435037612915f, 0.727845311164856f, 0.7532005906105042f, 0.432723730802536f, 0.5090743899345398f, 0.8915972113609314f, 0.4395911395549774f, -0.14350691437721252f, 0.7116051316261292f, 0.47584068775177f, 0.4609779417514801f, 0.9177359938621521f, 0.9747999906539917f, 0.2979161739349365f, 0.03221890702843666f, -0.8749604225158691f, 0.3655252158641815f, 0.08924832940101624f, 0.3713840842247009f, 0.4312901198863983f, 0.10505779832601547f, 0.9984862804412842f, 0.6913985013961792f, -0.3037587106227875f, 0.5390008687973022f, 0.21596071124076843f, 0.29042768478393555f, 0.0303110983222723f, 0.534233808517456f, 0.29403722286224365f, 0.1551366150379181f, -0.05101710557937622f, 0.6929324865341187f, 0.6603105068206787f, 0.1161847710609436f, 0.42971134185791016f, 0.6055371761322021f, 0.7103705406188965f, 0.10589537769556046f, -0.9112865328788757f, 0.8740816712379456f, 0.40197664499282837f, 0.0324152335524559f, 0.8650059103965759f, 0.8082781434059143f, 0.16554823517799377f, 0.10784005373716354f, -0.020520860329270363f, 0.03733439743518829f, 0.47882673144340515f, 0.1785164624452591f, 0.4827440083026886f, 0.2612764239311218f, 0.6198235154151917f, 0.16984987258911133f, -0.834954023361206f, 0.5532395839691162f, 0.22755120694637299f, 0.6485683917999268f, 0.7474194765090942f, 0.2165348082780838f, 0.6836975812911987f, 0.7181708812713623f, -0.6295499205589294f, 0.6752920150756836f, 0.09465740621089935f, 0.6743357181549072f, 0.9743132591247559f, 0.06987465918064117f, 0.9071958661079407f, 0.3171885013580322f, -0.5233432054519653f, 0.8696213960647583f, 0.11714096367359161f, 0.7083911299705505f, 0.8128572702407837f, 0.6227899193763733f, 0.5966023206710815f, 0.02427331730723381f, -0.6557590365409851f, 0.8340919017791748f, 0.8453158736228943f, 0.5571975111961365f, 0.056256067007780075f, 0.6184428930282593f, 0.3833022713661194f, 0.49177733063697815f, -0.8194442987442017f, 0.32136666774749756f, 0.3655700385570526f, 0.94183748960495f, 0.774259090423584f, 0.9469360709190369f, 0.3082836866378784f, 0.6934536099433899f, -0.9357541799545288f, 0.6024598479270935f, 0.8636246919631958f, 0.0754120796918869f, 0.8920586109161377f, 0.7249780297279358f, 0.5596754550933838f, 0.9842198491096497f, -0.9748439192771912f, 0.9978852868080139f, 0.5623146295547485f, 0.43283408880233765f, 0.976493775844574f, 0.815410852432251f, 0.3279508650302887f, 0.01582387089729309f, -0.35988450050354004f, 0.5339992642402649f, 0.780782163143158f, 0.01387811079621315f, 0.1939193606376648f, 0.49836060404777527f, 0.835912823677063f, 0.9075528383255005f, -0.41718992590904236f, 0.6188115477561951f, 0.15108023583889008f, 0.9707783460617065f, 0.6810989379882812f, 0.6842206716537476f, 0.023525649681687355f, 0.03179524466395378f, -0.4299938976764679f, 0.3072126805782318f, 0.19552068412303925f, 0.33198481798171997f, 0.2826805114746094f, 0.1687115728855133f, 0.366790771484375f, 0.28437766432762146f, -0.13313914835453033f, 0.9887477159500122f, 0.3642860949039459f, 0.4194713532924652f, 0.5258866548538208f, 0.29802796244621277f, 0.3906620144844055f, 0.3792678117752075f, -0.11774247884750366f, 0.5109013915061951f, 0.1928858458995819f, 0.9413356184959412f, 0.7706526517868042f, 0.6280111074447632f, 0.6187840104103088f, 0.9478690028190613f, -0.0232095867395401f, 0.14808057248592377f, 0.4873705804347992f, 0.10160714387893677f, 0.7827232480049133f, 0.4095906615257263f, 0.17640140652656555f, 0.7127394676208496f, -0.4262595772743225f, 0.6453838348388672f, 0.1774497628211975f, 0.2914062738418579f, 0.46630793809890747f, 0.5708163380622864f, 0.027409933507442474f, 0.3081721365451813f, -0.8033055067062378f, 0.09666655957698822f, 0.6269485354423523f, 0.06071293726563454f, 0.581787645816803f, 0.1094646006822586f, 0.2813379168510437f, 0.37931233644485474f, -0.5883137583732605f, 0.5844560265541077f, 0.5724856853485107f, 0.9234864711761475f, 0.9328126907348633f, 0.7414591908454895f, 0.20550967752933502f, 0.23635932803153992f, -0.6312636137008667f, 0.8235453963279724f, 0.4484422504901886f, 0.7506192922592163f, 0.460812509059906f, 0.8447248935699463f, 0.2727973163127899f, 0.5693610310554504f, -0.6965473294258118f, 0.13794958591461182f, 0.004455802496522665f, 0.9045485258102417f, 0.13689346611499786f, 0.2689788341522217f, 0.6780331134796143f, 0.6388814449310303f, -0.29694151878356934f, 0.7742082476615906f, 0.5463674068450928f, 0.030213626101613045f, 0.25614964962005615f, 0.4982187747955322f, 0.5488798022270203f, 0.1671399623155594f, -0.40418151021003723f, 0.3885907530784607f, 0.1602887064218521f, 0.37851646542549133f, 0.695648729801178f, 0.5767422318458557f, 0.5825603604316711f, 0.7199307084083557f, -0.9904960989952087f, 0.6506299376487732f, 0.9875284433364868f, 0.782872200012207f, 0.4780937433242798f, 0.9530528783798218f, 0.3405267894268036f, 0.5024201273918152f, -0.5036082863807678f, 0.646651029586792f, 0.5919353365898132f, 0.8940028548240662f, 0.9740772843360901f, 0.27637574076652527f, 0.7951588034629822f, 0.11658211052417755f, -0.3702464997768402f, 0.9532597661018372f, 0.28102561831474304f, 0.39246878027915955f, 0.2607680559158325f, 0.9286248087882996f, 0.43029800057411194f, 0.7392871379852295f, -0.5018674731254578f, 0.5828195810317993f, 0.3235098421573639f, 0.628177285194397f, 0.9329535961151123f, 0.9496006369590759f, 0.2981414794921875f, 0.6116676330566406f, -0.2186942845582962f, 0.42077580094337463f, 0.006467492785304785f, 0.041721172630786896f, 0.06820549815893173f, 0.36181560158729553f, 0.5711138844490051f, 0.9791950583457947f, -0.9267167448997498f, 0.813691258430481f, 0.6777283549308777f, 0.44780194759368896f, 0.20604321360588074f, 0.5869336724281311f, 0.7677092552185059f, 0.43634533882141113f, -0.4762759506702423f, 0.3164922893047333f, 0.9215336441993713f, 0.6760039925575256f, 0.27037525177001953f, 0.3767324388027191f, 0.4953334331512451f, 0.6087929010391235f, -0.020054787397384644f, 0.6122746467590332f, 0.149786576628685f, 0.648946225643158f, 0.4050130248069763f, 0.8390921354293823f, 0.034163471311330795f, 0.8613834381103516f, -0.07844435423612595f, 0.30949437618255615f, 0.9497601985931396f, 0.23626892268657684f, 0.817538857460022f, 0.6971801519393921f, 0.040269866585731506f, 0.6753272414207458f, -0.6587221026420593f, 0.7105944752693176f, 0.9611751437187195f, 0.9358671307563782f, 0.398337721824646f, 0.8263176679611206f, 0.7056615352630615f, 0.07779049873352051f, -0.27192196249961853f, 0.10355101525783539f, 0.6080450415611267f, 0.7596902251243591f, 0.6348345875740051f, 0.806840717792511f, 0.913567841053009f, 0.11817292869091034f, -0.21043476462364197f, 0.24281571805477142f, 0.7986416816711426f, 0.3486495912075043f, 0.3105126619338989f, 0.9333900213241577f, 0.12549296021461487f, 0.5968257784843445f, -0.4331820607185364f, 0.5105759501457214f, 0.12307821959257126f, 0.668448269367218f, 0.5892918705940247f, 0.30489078164100647f, 0.4909147322177887f, 0.16642418503761292f, -0.8709826469421387f, 0.10958026349544525f, 0.955344557762146f, 0.43754932284355164f, 0.48505160212516785f, 0.30772730708122253f, 0.9999691247940063f, 0.1905144602060318f, -0.8962683081626892f, 0.5126334428787231f, 0.1910465657711029f, 0.6325972080230713f, 0.4569868743419647f, 0.6158699989318848f, 0.4858947992324829f, 0.7960962057113647f, -0.8253582119941711f, 0.4701724350452423f, 0.6126796007156372f, 0.6578205823898315f, 0.06973845511674881f, 0.7169721126556396f, 0.5279459953308105f, 0.9462646842002869f, -0.8577713370323181f, 0.20560289919376373f, 0.9068694114685059f, 0.5313517451286316f, 0.9256479144096375f, 0.7302111387252808f, 0.8480902910232544f, 0.41765284538269043f, -0.08423011749982834f, 0.8530387282371521f, 0.8938209414482117f, 0.2800271213054657f, 0.35174909234046936f, 0.015382266603410244f, 0.7624648809432983f, 0.2623447775840759f, -0.7990629076957703f, 0.2932257056236267f, 0.3694598972797394f, 0.5780710577964783f, 0.05545510724186897f, 0.3465450406074524f, 0.3806533217430115f, 0.7350676655769348f, -0.020244278013706207f, 0.8138416409492493f, 0.6041850447654724f, 0.5083774924278259f, 0.00506464671343565f, 0.08485560864210129f, 0.41333335638046265f, 0.18053986132144928f, -0.026864109560847282f, 0.6360440850257874f, 0.39116838574409485f, 0.6860900521278381f, 0.06133952736854553f, 0.13790032267570496f, 0.3252149224281311f, 0.1456948220729828f, -0.07135120034217834f, 0.15866760909557343f, 0.16364677250385284f, 0.9469892978668213f, 0.49556487798690796f, 0.1853097826242447f, 0.9301142692565918f, 0.791886031627655f, -0.7623022794723511f, 0.23694714903831482f, 0.7900668978691101f, 0.7980331182479858f, 0.23384854197502136f, 0.7705411911010742f, 0.5204025506973267f, 0.4737190902233124f, -0.5161663293838501f, 0.645763635635376f, 0.7639007568359375f, 0.1238391324877739f, 0.7309743762016296f, 0.6149532794952393f, 0.2960977256298065f, 0.6619189977645874f, -0.052916232496500015f, 0.12541191279888153f, 0.5726012587547302f, 0.6924370527267456f, 0.16292689740657806f, 0.8537866473197937f, 0.0343162938952446f, 0.24716779589653015f, -0.48479264974594116f, 0.05761309340596199f, 0.2517603635787964f, 0.9899635314941406f, 0.5732844471931458f, 0.289139062166214f, 0.3664892315864563f, 0.4773517847061157f, -0.0758066475391388f, 0.16276155412197113f, 0.628610372543335f, 0.7189992666244507f, 0.33492085337638855f, 0.7245046496391296f, 0.5387532711029053f, 0.1008613109588623f, -0.3119015395641327f, 0.005400338675826788f, 0.3398286700248718f, 0.3419038653373718f, 0.7480577230453491f, 0.40266284346580505f, 0.9675846099853516f, 0.7374320030212402f, -0.06852489709854126f, 0.6771625280380249f, 0.8834402561187744f, 0.8741129636764526f, 0.9640485644340515f, 0.6801837682723999f, 0.719150185585022f, 0.6336182951927185f, -0.20654742419719696f, 0.8820586204528809f, 0.5977901220321655f, 0.6483811140060425f, 0.040288109332323074f, 0.9406665563583374f, 0.22653929889202118f, 0.857342004776001f, -0.12208240479230881f, 0.13695091009140015f, 0.7699580788612366f, 0.6188163161277771f, 0.00972399115562439f, 0.5591570138931274f, 0.29845818877220154f, 0.18091298639774323f, -0.6740522384643555f, 0.22773993015289307f, 0.8939959406852722f, 0.2208278626203537f, 0.5195240378379822f, 0.07295913994312286f, 0.38003432750701904f, 0.7330315113067627f, -0.49371305108070374f, 0.6369953155517578f, 0.04497312009334564f, 0.19772092998027802f, 0.7776428461074829f, 0.4071437120437622f, 0.8162722587585449f, 0.09698865562677383f, -0.6191313862800598f, 0.2477368414402008f, 0.5109699368476868f, 0.9703420400619507f, 0.6360378265380859f, 0.043840713798999786f, 0.6679540872573853f, 0.21102656424045563f, -0.19136221706867218f, 0.6863782405853271f, 0.6167455911636353f, 0.9039707183837891f, 0.06843414157629013f, 0.38509416580200195f, 0.6773894429206848f, 0.7695633769035339f, -0.029163004830479622f, 0.5978575348854065f, 0.3959111273288727f, 0.5071203708648682f, 0.28742995858192444f, 0.7614781856536865f, 0.22674302756786346f, 0.4597499966621399f, -0.903154194355011f, 0.3229166269302368f, 0.90566486120224f, 0.1096026673913002f, 0.28077369928359985f, 0.928206205368042f, 0.8750103116035461f, 0.07116813212633133f, -0.6551937460899353f, 0.1434909999370575f, 0.6896508932113647f, 0.47127243876457214f, 0.7058337926864624f, 0.794497013092041f, 0.4825679659843445f, 0.6062861084938049f, -0.6844139695167542f, 0.31247252225875854f, 0.2932172417640686f, 0.8971425294876099f, 0.3335084319114685f, 0.08411083370447159f, 0.3168075978755951f, 0.6745714545249939f, -0.9704251885414124f, 0.938637375831604f, 0.7872390747070312f, 0.8204362392425537f, 0.45099666714668274f, 0.915100634098053f, 0.7145248055458069f, 0.049396734684705734f, -0.6127545833587646f, 0.7473770380020142f, 0.07592304795980453f, 0.20187439024448395f, 0.7769826650619507f, 0.018946358934044838f, 0.559262752532959f, 0.21226780116558075f, -0.40805065631866455f, 0.43610328435897827f, 0.04915700852870941f, 0.35721471905708313f, 0.5911471247673035f, 0.1600753515958786f, 0.5493666529655457f, 0.4696893095970154f, -0.42944827675819397f, 0.36507245898246765f, 0.9070496559143066f, 0.5757470726966858f, 0.7073960900306702f, 0.6813288331031799f, 0.5026404857635498f, 0.3829249441623688f, -0.4965762197971344f, 0.9220874905586243f, 0.28927651047706604f, 0.9274119734764099f, 0.5703991651535034f, 0.9135783910751343f, 0.8214319348335266f, 0.9632395505905151f, -0.07509838044643402f, 0.1268298178911209f, 0.04875031113624573f, 0.5599533915519714f, 0.24352514743804932f, 0.10623753815889359f, 0.4642540216445923f, 0.41367581486701965f, -0.4806077480316162f, 0.23051361739635468f, 0.757484495639801f, 0.44907432794570923f, 0.9146111607551575f, 0.37395432591438293f, 0.8525166511535645f, 0.5332443714141846f, -0.8367478251457214f, 0.27843454480171204f, 0.806515634059906f, 0.2660224437713623f, 0.6180469989776611f, 0.03236279636621475f, 0.9404042959213257f, 0.7693419456481934f, -0.623222827911377f, 0.5565884113311768f, 0.36454182863235474f, 0.6114023327827454f, 0.7096590995788574f, 0.9738978147506714f, 0.2210526168346405f, 0.012801581993699074f, -0.9001460075378418f, 0.7768153548240662f, 0.24081268906593323f, 0.9411236047744751f, 0.2556566298007965f, 0.11808367073535919f, 0.20264111459255219f, 0.3930875062942505f, -0.28359007835388184f, 0.37568995356559753f, 0.1203627735376358f, 0.1512158364057541f, 0.21435485780239105f, 0.31525692343711853f, 0.5953835844993591f, 0.3517104387283325f, -0.18734534084796906f, 0.7877190113067627f, 0.5668391585350037f, 0.6770181059837341f, 0.7430495619773865f, 0.08710229396820068f, 0.5321570634841919f, 0.7802199125289917f, -0.8519982695579529f, 0.005866779945790768f, 0.05558120459318161f, 0.3395126461982727f, 0.9761285185813904f, 0.9781147837638855f, 0.29462045431137085f, 0.48231834173202515f, -0.07979501038789749f, 0.71628338098526f, 0.583385169506073f, 0.16915194690227509f, 0.3556919991970062f, 0.5103157162666321f, 0.23718932271003723f, 0.02989714965224266f, -0.6631006598472595f, 0.7488466501235962f, 0.35575076937675476f, 0.8623586297035217f, 0.2267860621213913f, 0.1743796169757843f, 0.9297637343406677f, 0.6773303747177124f, -0.39161092042922974f, 0.8990998268127441f, 0.9092032313346863f, 0.6773858666419983f, 0.1972552239894867f, 0.14613211154937744f, 0.8749746680259705f, 0.5070095062255859f, -0.5933070182800293f, 0.8272294402122498f, 0.024811187759041786f, 0.127931147813797f, 0.010390125215053558f, 0.05189955234527588f, 0.44300520420074463f, 0.8419147729873657f, -0.8458194732666016f, 0.29705584049224854f, 0.8582937717437744f, 0.3518436849117279f, 0.2648809254169464f, 0.19914354383945465f, 0.7924613952636719f, 0.7913232445716858f, -0.60811448097229f, 0.3661099076271057f, 0.5971283912658691f, 0.6631913781166077f, 0.4141249656677246f, 0.7533894181251526f, 0.7227662801742554f, 0.7482525706291199f, -0.5977746844291687f, 0.7088261246681213f, 0.598160445690155f, 0.017699239775538445f, 0.46339768171310425f, 0.9916101098060608f, 0.931372880935669f, 0.8982666730880737f, -0.42931100726127625f, 0.47833338379859924f, 0.3602297902107239f, 0.7620266675949097f, 0.7110917568206787f, 0.5472627878189087f, 0.07369683682918549f, 0.8948986530303955f, -0.8404770493507385f, 0.10012225806713104f, 0.5642121434211731f, 0.8309308886528015f, 0.6902474164962769f, 0.7679475545883179f, 0.10687903314828873f, 0.7063480615615845f, -0.13452096283435822f, 0.8075939416885376f, 0.967900276184082f, 0.34023675322532654f, 0.10326458513736725f, 0.21857906877994537f, 0.14232753217220306f, 0.4214921295642853f, -0.8497536182403564f, 0.7851979732513428f, 0.927878737449646f, 0.15882481634616852f, 0.890694797039032f, 0.3955964148044586f, 0.9923628568649292f, 0.8262554407119751f, -0.39380186796188354f, 0.9020671844482422f, 0.3001914918422699f, 0.5421823263168335f, 0.5730393528938293f, 0.6624204516410828f, 0.6015557050704956f, 0.059564344584941864f, -0.07203655689954758f, 0.87333083152771f, 8.88484573806636e-05f, 0.9476097822189331f, 0.9511879086494446f, 0.014178682118654251f, 0.9781673550605774f, 0.7479382157325745f, -0.2080940157175064f, 0.3521188497543335f, 0.6611534953117371f, 0.9413266181945801f, 0.8236852884292603f, 0.4732016921043396f, 0.1605699360370636f, 0.3175133466720581f, -0.8606458902359009f, 0.7036030888557434f, 0.431959331035614f, 0.9303763508796692f, 0.863741934299469f, 0.050415731966495514f, 0.41885289549827576f, 0.34817835688591003f, -0.5392239093780518f, 0.7555371522903442f, 0.08419615775346756f, 0.15119974315166473f, 0.14491762220859528f, 0.3275810480117798f, 0.6967682242393494f, 0.540704607963562f, -0.1242407038807869f, 0.42481184005737305f, 0.088539719581604f, 0.8014217615127563f, 0.6929215788841248f, 0.6527777314186096f, 0.8889777660369873f, 0.20323951542377472f, -0.016884738579392433f, 0.7965341806411743f, 0.11942924559116364f, 0.7841569781303406f, 0.5657631158828735f, 0.20230664312839508f, 0.6569953560829163f, 0.6523152589797974f, -0.7999456524848938f, 0.5872356295585632f, 0.5454949140548706f, 0.04693504422903061f, 0.3304493725299835f, 0.9975693821907043f, 0.4167879819869995f, 0.5930319428443909f, -0.9465017318725586f, 0.4249001443386078f, 0.7831619381904602f, 0.2781986594200134f, 0.8792813420295715f, 0.11217231303453445f, 0.12527813017368317f, 0.5234584808349609f, -0.22257918119430542f, 0.8387895822525024f, 0.5338990688323975f, 0.030288197100162506f, 0.46320226788520813f, 0.5587241053581238f, 0.5025948286056519f, 0.7508853673934937f, -0.9323919415473938f, 0.6918306350708008f, 0.5164028406143188f, 0.2356111854314804f, 0.24399864673614502f, 0.23878873884677887f, 0.2678571939468384f, 0.9925124049186707f, -0.09160944074392319f, 0.7732088565826416f, 0.8311678171157837f, 0.9407837986946106f, 0.19343894720077515f, 0.974084198474884f, 0.025965608656406403f, 0.5948208570480347f, -0.1775224357843399f, 0.9169226288795471f, 0.8727908134460449f, 0.12645301222801208f, 0.3818829357624054f, 0.07631418108940125f, 0.3361451327800751f, 0.37052926421165466f, -0.8198350667953491f, 0.814132809638977f, 0.8922801613807678f, 0.7362250685691833f, 0.10165612399578094f, 0.7104467749595642f, 0.48051413893699646f, 0.10175306349992752f, -0.5623646974563599f, 0.8037598133087158f, 0.6788733005523682f, 0.9654994606971741f, 0.5991250276565552f, 0.26688387989997864f, 0.8086358308792114f, 0.9229440689086914f, -0.6099114418029785f, 0.6198728680610657f, 0.7938781976699829f, 0.9614227414131165f, 0.5791057348251343f, 0.3542589843273163f, 0.622957706451416f, 0.3024725914001465f, -0.541984498500824f, 0.5485737919807434f, 0.3805139660835266f, 0.1682608276605606f, 0.8841057419776917f, 0.21630613505840302f, 0.14437349140644073f, 0.42521238327026367f, -0.6382145285606384f, 0.12829868495464325f, 0.07719185948371887f, 0.7256166934967041f, 0.021491194143891335f, 0.7249746322631836f, 0.9615417122840881f, 0.9078976511955261f, -0.9939789772033691f, 0.11809694766998291f, 0.39507657289505005f, 0.6732536554336548f, 0.20562325417995453f, 0.6947347521781921f, 0.19183896481990814f, 0.9652838110923767f, -0.1672016680240631f, 0.1185508593916893f, 0.7720498442649841f, 0.9143908619880676f, 0.5814752578735352f, 0.42405828833580017f, 0.13031576573848724f, 0.3642311990261078f, -0.18111611902713776f, 0.15817564725875854f, 0.48208001255989075f, 0.27021580934524536f, 0.9715560674667358f, 0.3388589918613434f, 0.5415457487106323f, 0.5681191682815552f, -0.14450371265411377f, 0.3362516164779663f, 0.5059646368026733f, 0.20654267072677612f, 0.6589854955673218f, 0.9522148966789246f, 0.99283766746521f, 0.3102260231971741f, -0.21962937712669373f, 0.41134196519851685f, 0.5184564590454102f, 0.08008234202861786f, 0.7812398672103882f, 0.6801874041557312f, 0.6560950875282288f, 0.6417209506034851f, -0.5397397875785828f, 0.44554686546325684f, 0.9594000577926636f, 0.4271038770675659f, 0.8694396018981934f, 0.737312912940979f, 0.21765831112861633f, 0.4849114418029785f, -0.2650175094604492f, 0.3676624000072479f, 0.7871279120445251f, 0.2645673453807831f, 0.3753017783164978f, 0.7479394674301147f, 0.9869672656059265f, 0.5288779139518738f, -0.36375200748443604f, 0.7014821171760559f, 0.16284145414829254f, 0.7274001240730286f, 0.25568094849586487f, 0.9347272515296936f, 0.6768128275871277f, 0.8849278092384338f, -0.3291480839252472f, 0.3510547876358032f, 0.0211088377982378f, 0.6455041170120239f, 0.46775591373443604f, 0.6205494999885559f, 0.47195395827293396f, 0.24983762204647064f, -0.8892661333084106f, 0.23861752450466156f, 0.1963481605052948f, 0.7004125118255615f, 0.9548524022102356f, 0.3395528793334961f, 0.4043896496295929f, 0.025926843285560608f, -0.05692017078399658f, 0.2690628170967102f, 0.6176096796989441f, 0.793891191482544f, 0.3490068018436432f, 0.6704052090644836f, 0.6412636041641235f, 0.6684189438819885f, -0.9006863832473755f, 0.3578090965747833f, 0.10973045229911804f, 0.38241687417030334f, 0.12968075275421143f, 0.6276845335960388f, 0.3045029938220978f, 0.011977343820035458f, -0.9219078421592712f, 0.7694852352142334f, 0.05958034470677376f, 0.3184319734573364f, 0.35184961557388306f, 0.7674364447593689f, 0.38087406754493713f, 0.4778544008731842f, -0.9389557242393494f, 0.16270722448825836f, 0.06972945481538773f, 0.946250319480896f, 0.792088508605957f, 0.9605680108070374f, 0.14753879606723785f, 0.8843326568603516f, -0.4541495740413666f, 0.44197091460227966f, 0.1888960301876068f, 0.7027363777160645f, 0.02241262048482895f, 0.4321477711200714f, 0.16785579919815063f, 0.9491940140724182f, -0.4674956202507019f, 0.802241325378418f, 0.8131659030914307f, 0.7240335941314697f, 0.9281805157661438f, 0.20760484039783478f, 0.7122980952262878f, 0.0609864816069603f, -0.6150280237197876f, 0.34039297699928284f, 0.7242344617843628f, 0.032757725566625595f, 0.19046376645565033f, 0.823412299156189f, 0.5472224354743958f, 0.7393499612808228f, -0.5777449607849121f, 0.7135425209999084f, 0.6538051962852478f, 0.6572478413581848f, 0.7384632229804993f, 0.799087643623352f, 0.7371928691864014f, 0.40709057450294495f, -0.09874209761619568f, 0.41272255778312683f, 0.4989645481109619f, 0.6562166810035706f, 0.9393930435180664f, 0.3927031457424164f, 0.7025595307350159f, 0.8093633055686951f, -0.45705580711364746f, 0.06219002604484558f, 0.13411998748779297f, 0.9243720173835754f, 0.8057580590248108f, 0.9309765100479126f, 0.18744030594825745f, 0.6793667674064636f, -0.4552702307701111f, 0.7118163108825684f, 0.16601860523223877f, 0.8916284441947937f, 0.8402737975120544f, 0.2444937527179718f, 0.18924936652183533f, 0.474899560213089f, -0.32842817902565f, 0.4163675308227539f, 0.45254063606262207f, 0.13053135573863983f, 0.06084296107292175f, 0.2486911118030548f, 0.15770867466926575f, 0.23724035918712616f, -0.40925633907318115f, 0.06283368170261383f, 0.7759745717048645f, 0.46659600734710693f, 0.7546229362487793f, 0.09395608305931091f, 0.13932515680789948f, 0.9896610975265503f, -0.6115543842315674f, 0.5548034906387329f, 0.35168421268463135f, 0.7014065980911255f, 0.9716764688491821f, 0.19752804934978485f, 0.7574331760406494f, 0.8524338603019714f, -0.22964923083782196f, 0.5487749576568604f, 0.3830564618110657f, 0.36005380749702454f, 0.6784379482269287f, 0.8767085075378418f, 0.4523873031139374f, 0.6811938285827637f, -0.16996504366397858f, 0.6068663001060486f, 0.1482403427362442f, 0.07278362661600113f, 0.6047201156616211f, 0.6144509315490723f, 0.9722623825073242f, 0.4826486110687256f, -0.33722513914108276f, 0.6144455671310425f, 0.739441990852356f, 0.7385537624359131f, 0.3108316659927368f, 0.6627236604690552f, 0.8933303356170654f, 0.24445755779743195f, -0.06679317355155945f, 0.8764848113059998f, 0.8873816728591919f, 0.5813596844673157f, 0.16544969379901886f, 0.7786160707473755f, 0.7827453017234802f, 0.40346747636795044f, -0.09564919769763947f, 0.4828554093837738f, 0.9695823788642883f, 0.18554919958114624f, 0.9396530985832214f, 0.28030455112457275f, 0.5642122626304626f, 0.38784343004226685f, -0.3330119252204895f, 0.30856117606163025f, 0.9749622941017151f, 0.6209394335746765f, 0.44124940037727356f, 0.555585503578186f, 0.9212573766708374f, 0.08231675624847412f, -0.405545711517334f, 0.48172426223754883f, 0.8202176690101624f, 0.05462874844670296f, 0.3452755808830261f, 0.7981306910514832f, 0.999005913734436f, 0.6226414442062378f, -0.0022350167855620384f, 0.05379996821284294f, 0.5581695437431335f, 0.8423044085502625f, 0.050054192543029785f, 0.6013273596763611f, 0.7383575439453125f, 0.7372073531150818f, -0.8706385493278503f, 0.7794334292411804f, 0.9912745356559753f, 0.19369691610336304f, 0.2236141711473465f, 0.7719239592552185f, 0.4587444067001343f, 0.553881049156189f, -0.9544936418533325f, 0.364531010389328f, 0.6565258502960205f, 0.958333432674408f, 0.6795428395271301f, 0.6075471043586731f, 0.4010319411754608f, 0.13640253245830536f, -0.22906054556369781f, 0.9746471643447876f, 0.6108114123344421f, 0.4547373950481415f, 0.48496881127357483f, 0.17655619978904724f, 0.9131925106048584f, 0.7513889670372009f, -0.053975459188222885f, 0.05596838891506195f, 0.15108662843704224f, 0.023524824529886246f, 0.5193073749542236f, 0.19061464071273804f, 0.8681290745735168f, 0.32886427640914917f, -0.19846923649311066f, 0.0025057573802769184f, 0.23322440683841705f, 0.6615521311759949f, 0.217499241232872f, 0.1439347267150879f, 0.1677447259426117f, 0.3359758257865906f, -0.5072392821311951f, 0.060399845242500305f, 0.7791162729263306f, 0.4307463467121124f, 0.6353666186332703f, 0.3851586580276489f, 0.8213269710540771f, 0.6541191339492798f, -0.6295045018196106f, 0.08041875809431076f, 0.9555318355560303f, 0.9279731512069702f, 0.07858765870332718f, 0.12623922526836395f, 0.21096935868263245f, 0.943916380405426f, -0.8761102557182312f, 0.4126954972743988f, 0.14867958426475525f, 0.7267875671386719f, 0.5449945330619812f, 0.2874772846698761f, 0.16503070294857025f, 0.48461273312568665f, -0.046671122312545776f, 0.7778088450431824f, 0.10148074477910995f, 0.13290923833847046f, 0.35959431529045105f, 0.09755711257457733f, 0.7019975185394287f, 0.7901310324668884f, -0.6582596898078918f, 0.04411217197775841f, 0.1723899245262146f, 0.01900263875722885f, 0.9264549016952515f, 0.20474092662334442f, 0.7851800322532654f, 0.6463190913200378f, -0.4125288128852844f, 0.4296484887599945f, 0.21740955114364624f, 0.12277353554964066f, 0.7610742449760437f, 0.4372994005680084f, 0.4898042380809784f, 0.5359944105148315f, -0.3021770715713501f, 0.5454652905464172f, 0.1677272617816925f, 0.08660700917243958f, 0.5653232336044312f, 0.6844581365585327f, 0.09092243015766144f, 0.8487614393234253f, -0.597007691860199f, 0.7138767242431641f, 0.8843560218811035f, 0.27794286608695984f, 0.12216528505086899f, 0.48320910334587097f, 0.8742911219596863f, 0.5000233054161072f, -0.923042893409729f, 0.6994839906692505f, 0.13866572082042694f, 0.0397200807929039f, 0.8880651593208313f, 0.5121050477027893f, 0.9680263996124268f, 0.947187066078186f, -0.20728151500225067f, 0.9256002902984619f, 0.2891882359981537f, 0.2535500228404999f, 0.7600666284561157f, 0.40753504633903503f, 0.13523422181606293f, 0.4955105781555176f, -0.8228147029876709f, 0.4190906584262848f, 0.7370719313621521f, 0.13957959413528442f, 0.2763596773147583f, 0.9075056314468384f, 0.39484503865242004f, 0.6279091835021973f, -0.5926638841629028f, 0.23716385662555695f, 0.009492049925029278f, 0.08213885873556137f, 0.25971662998199463f, 0.1214563250541687f, 0.8372905254364014f, 0.07881339639425278f, -0.8203582167625427f, 0.25146764516830444f, 0.2189926952123642f, 0.1765291541814804f, 0.28736960887908936f, 0.9706841111183167f, 0.16516587138175964f, 0.14070208370685577f, -0.2740756571292877f, 0.5791264176368713f, 0.763798177242279f, 0.74978107213974f, 0.9575866460800171f, 0.7116414308547974f, 0.5718472003936768f, 0.03535866364836693f, -0.1799132525920868f, 0.7980133891105652f, 0.7805466651916504f, 0.7610531449317932f, 0.4885410666465759f, 0.9642494916915894f, 0.2722945809364319f, 0.7542040944099426f, -0.30033358931541443f, 0.46256524324417114f, 0.721546471118927f, 0.3425354063510895f, 0.8035427331924438f, 0.36466026306152344f, 0.6649078726768494f, 0.13744120299816132f, -0.49596548080444336f, 0.9703194499015808f, 0.6438102722167969f, 0.5302454233169556f, 0.5889075398445129f, 0.5492508411407471f, 0.755184531211853f, 0.03225963935256004f, -0.6184496283531189f, 0.041384462267160416f, 0.5935570597648621f, 0.3076047897338867f, 0.3624489903450012f, 0.6605754494667053f, 0.926724374294281f, 0.5511395931243896f, -0.2349744439125061f, 0.19689741730690002f, 0.5032317042350769f, 0.58822101354599f, 0.7456368207931519f, 0.5351340174674988f, 0.6494439244270325f, 0.44928988814353943f, -0.15064848959445953f, 0.20683740079402924f, 0.7671653628349304f, 0.6125577688217163f, 0.7287676334381104f, 0.9244104623794556f, 0.09026285260915756f, 0.8894758224487305f, -0.7567499876022339f, 0.7151765823364258f, 0.19439852237701416f, 0.22954031825065613f, 0.09164967387914658f, 0.5671141743659973f, 0.34099727869033813f, 0.6345542073249817f, -0.21240803599357605f, 0.6260671019554138f, 0.00737762963399291f, 0.5386686325073242f, 0.6258710622787476f, 0.7133932113647461f, 0.8769161105155945f, 0.35147878527641296f, -0.8441406488418579f, 0.7431811690330505f, 0.060700416564941406f, 0.49973440170288086f, 0.42697834968566895f, 0.010183816775679588f, 0.9573721289634705f, 0.6073621511459351f, -0.9522772431373596f, 0.03887638449668884f, 0.29490000009536743f, 0.19509422779083252f, 0.4067612886428833f, 0.4827563464641571f, 0.34632667899131775f, 0.8696251511573792f, -0.5408807396888733f, 0.6307380795478821f, 0.5761252045631409f, 0.19135382771492004f, 0.9295797348022461f, 0.5261229872703552f, 0.6761908531188965f, 0.7518772482872009f, -0.9474136233329773f, 0.057174935936927795f, 0.26550233364105225f, 0.8111686706542969f, 0.446520060300827f, 0.07970812916755676f, 0.18694187700748444f, 0.3215083181858063f, -0.42127537727355957f, 0.07283252477645874f, 0.8170835375785828f, 0.48144033551216125f, 0.7544031739234924f, 0.21558570861816406f, 0.3507988154888153f, 0.3263222277164459f, -0.842705249786377f, 0.7365831136703491f, 0.006335023790597916f, 0.011878829449415207f, 0.07562794536352158f, 0.3639732301235199f, 0.4776831865310669f, 0.7694523930549622f, -0.22818943858146667f, 0.8669463396072388f, 0.36033299565315247f, 0.13736452162265778f, 0.6545999050140381f, 0.1836937814950943f, 0.6026290655136108f, 0.21092930436134338f, -0.4243624210357666f, 0.6191445589065552f, 0.7121462225914001f, 0.18353217840194702f, 0.21101459860801697f, 0.32499656081199646f, 0.5558251142501831f, 0.9462792873382568f, -0.06088343635201454f, 0.36700382828712463f, 0.13947513699531555f, 0.3523658215999603f, 0.06081187725067139f, 0.24681530892848969f, 0.9593338370323181f, 0.26310375332832336f, -0.42245474457740784f, 0.6726236343383789f, 0.058715078979730606f, 0.475033164024353f, 0.6882018446922302f, 0.5845237970352173f, 0.31700992584228516f, 0.4723869264125824f, -0.4223083257675171f, 0.1588830202817917f, 0.23770643770694733f, 0.5536705255508423f, 0.9380304217338562f, 0.5007466077804565f, 0.2949158549308777f, 0.8359551429748535f, -0.6465005278587341f, 0.6897106170654297f, 0.4736332595348358f, 0.7451198101043701f, 0.8272035121917725f, 0.8524219989776611f, 0.5354454517364502f, 0.9522824883460999f, -0.8985389471054077f, 0.3445979058742523f, 0.072663314640522f, 0.0846496969461441f, 0.5153026580810547f, 0.3350929021835327f, 0.8479252457618713f, 0.23240064084529877f, -0.37798309326171875f, 0.18611322343349457f, 0.9665858745574951f, 0.002296478021889925f, 0.621040403842926f, 0.8520824909210205f, 0.11307451128959656f, 0.13798506557941437f, -0.6077550649642944f, 0.6914376616477966f, 0.06906155496835709f, 0.1659131497144699f, 0.5359664559364319f, 0.07135854661464691f, 0.7438799142837524f, 0.8948891162872314f, -0.4239727854728699f, 0.09942075610160828f, 0.048093318939208984f, 0.4973132014274597f, 0.6057071685791016f, 0.47096961736679077f, 0.7796064615249634f, 0.720529317855835f, -0.7329536080360413f, 0.27709364891052246f, 0.5056376457214355f, 0.17309355735778809f, 0.7530646324157715f, 0.4557555317878723f, 0.32180801033973694f, 0.7238460183143616f, -0.04907417669892311f, 0.29896870255470276f, 0.30244067311286926f, 0.9357057213783264f, 0.828761637210846f, 0.7814491987228394f, 0.9007179141044617f, 0.8870907425880432f, -0.553270697593689f, 0.7168906331062317f, 0.6753124594688416f, 0.005433805752545595f, 0.8889656662940979f, 0.44464191794395447f, 0.10097391903400421f, 0.9961822628974915f, -0.23240673542022705f, 0.7910746932029724f, 0.4197184145450592f, 0.8983937501907349f, 0.23160980641841888f, 0.03570801019668579f, 0.4111135005950928f, 0.037227872759103775f, -0.115587018430233f, 0.34902089834213257f, 0.18724030256271362f, 0.5768592953681946f, 0.34005007147789f, 0.42540329694747925f, 0.95499587059021f, 0.9430616497993469f, -0.5592679977416992f, 0.9079381227493286f, 0.2958902418613434f, 0.5102056860923767f, 0.13059327006340027f, 0.9035246968269348f, 0.995597243309021f, 0.3916358947753906f, -0.10549544543027878f, 0.6972934603691101f, 0.65995192527771f, 0.27917683124542236f, 0.34791305661201477f, 0.7802373170852661f, 0.4995919466018677f, 0.5376228094100952f, -0.3497745394706726f, 0.6633704900741577f, 0.7773168683052063f, 0.8244999051094055f, 0.5066443681716919f, 0.31385308504104614f, 0.7648000121116638f, 0.5519710779190063f, -0.7775660753250122f, 0.5764263272285461f, 0.9462200403213501f, 0.8148752450942993f, 0.14531788229942322f, 0.01712344028055668f, 0.6274967789649963f, 0.46960923075675964f, -0.3320728540420532f, 0.255176305770874f, 0.5208634734153748f, 0.5129836797714233f, 0.9275440573692322f, 0.2579389810562134f, 0.7651371955871582f, 0.053310178220272064f, -0.6227353811264038f, 0.43547263741493225f, 0.22188150882720947f, 0.965945303440094f, 0.3226892650127411f, 0.3320194184780121f, 0.475956529378891f, 0.6374903321266174f, -0.01028013601899147f, 0.405813068151474f, 0.4604327976703644f, 0.9233105778694153f, 0.8233079314231873f, 0.8517606258392334f, 0.8523431420326233f, 0.954348623752594f, -0.7595904469490051f, 0.35628145933151245f, 0.22752046585083008f, 0.9864690899848938f, 0.26881277561187744f, 0.0830930694937706f, 0.057443443685770035f, 0.8249444961547852f, -0.028991209343075752f, 0.9062796235084534f, 0.08211862295866013f, 0.3522597551345825f, 0.9994632005691528f, 0.13997186720371246f, 0.8622220158576965f, 0.5370686054229736f, -0.03272196277976036f, 0.8808343410491943f, 0.9037409424781799f, 0.4417351484298706f, 0.8185827732086182f, 0.1858120560646057f, 0.769089937210083f, 0.8348661065101624f, -0.9527451395988464f, 0.3578283190727234f, 0.10637696087360382f, 0.9058464765548706f, 0.6810385584831238f, 0.8429881930351257f, 0.6288058757781982f, 0.3288853168487549f, -0.5769570469856262f, 0.2582117021083832f, 0.7966971397399902f, 0.5443671345710754f, 0.43237048387527466f, 0.535528302192688f, 0.11208206415176392f, 0.192819282412529f, -0.3972724378108978f, 0.5105235576629639f, 0.1315750628709793f, 0.1455964297056198f, 0.01737949065864086f, 0.5894827246665955f, 0.21832554042339325f, 0.5856133699417114f, -0.2236536145210266f, 0.5804303884506226f, 0.5996055006980896f, 0.4191311299800873f, 0.661297619342804f, 0.5215650200843811f, 0.20951293408870697f, 0.7773056030273438f, -0.17088940739631653f, 0.9320173859596252f, 0.6697171926498413f, 0.8379414081573486f, 0.20087391138076782f, 0.3772154450416565f, 0.6886621713638306f, 0.534768283367157f, -0.008424090221524239f, 0.8955100178718567f, 0.9770122170448303f, 0.22922982275485992f, 0.4660593569278717f, 0.5793001651763916f, 0.05483466759324074f, 0.33350056409835815f, -0.356389582157135f, 0.5744380950927734f, 0.6031159162521362f, 0.7370100617408752f, 0.5526152849197388f, 0.3133525252342224f, 0.7635736465454102f, 0.321066290140152f, -0.6513893008232117f, 0.6233655214309692f, 0.18074704706668854f, 0.7535838484764099f, 0.43457144498825073f, 0.4369654953479767f, 0.836533784866333f, 0.02864188514649868f, -0.37878817319869995f, 0.6073963642120361f, 0.5974938273429871f, 0.9280333518981934f, 0.8557884693145752f, 0.8524648547172546f, 0.08969027549028397f, 0.955818772315979f, -0.4792589247226715f, 0.4393135905265808f, 0.4886428415775299f, 0.5308229327201843f, 0.10700194537639618f, 0.1367095708847046f, 0.9236359000205994f, 0.8979591727256775f, -0.8724532723426819f, 0.035848379135131836f, 0.8212755918502808f, 0.8559420108795166f, 0.5211493372917175f, 0.8309463262557983f, 0.5098932981491089f, 0.19731806218624115f, -0.7433242201805115f, 0.3283577859401703f, 0.2786038815975189f, 0.6474904417991638f, 0.9979334473609924f, 0.44351431727409363f, 0.4860382080078125f, 0.2272089570760727f, -0.459726482629776f, 0.7596396803855896f, 0.08548915386199951f, 0.2555079758167267f, 0.9248895049095154f, 0.5363814830780029f, 0.06389304995536804f, 0.37074947357177734f, -0.3235526978969574f, 0.8750060200691223f, 0.5181780457496643f, 0.8907021880149841f, 0.6814836859703064f, 0.8365218639373779f, 0.522227942943573f, 0.06845688074827194f, -0.2756771147251129f, 0.11166749149560928f, 0.8395023941993713f, 0.7322914600372314f, 0.8109531402587891f, 0.4036441445350647f, 0.824535608291626f, 0.458610475063324f, -0.8968544602394104f, 0.3483794033527374f, 0.297446608543396f, 0.25469574332237244f, 0.6745685935020447f, 0.04904454946517944f, 0.37421271204948425f, 0.8666275143623352f, -0.06075394153594971f, 0.7076255679130554f, 0.13466115295886993f, 0.06592907756567001f, 0.44335320591926575f, 0.14072932302951813f, 0.9931964874267578f, 0.6486124992370605f, -0.7099825143814087f, 0.713697075843811f, 0.25092291831970215f, 0.014829803258180618f, 0.6520475149154663f, 0.49026089906692505f, 0.6570820808410645f, 0.99357008934021f, -0.7539388537406921f, 0.05028117075562477f, 0.19857941567897797f, 0.4390406608581543f, 0.3212425410747528f, 0.08032652735710144f, 0.2828011214733124f, 0.6513709425926208f, -0.9947670698165894f, 0.10216581076383591f, 0.3149046003818512f, 0.30023446679115295f, 0.5570588707923889f, 0.7957265973091125f, 0.17457953095436096f, 0.11986919492483139f, -0.7616661190986633f, 0.7649126052856445f, 0.0761338472366333f, 0.3141256868839264f, 0.4794914126396179f, 0.8315961360931396f, 0.9908794164657593f, 0.09657090902328491f, -0.34077078104019165f, 0.6348515748977661f, 0.7356851100921631f, 0.6791514158248901f, 0.6670516729354858f, 0.8456035852432251f, 0.3933885097503662f, 0.28672897815704346f, -0.9963642954826355f, 0.9349406957626343f, 0.8577883839607239f, 0.41573646664619446f, 0.015268849208950996f, 0.8215065002441406f, 0.8088065385818481f, 0.8312507271766663f, -0.5697031617164612f, 0.8313194513320923f, 0.7703467607498169f, 0.7868388891220093f, 0.8909124135971069f, 0.19881080090999603f, 0.9647579193115234f, 0.5982316732406616f, -0.973152756690979f, 0.12039989978075027f, 0.8134725689888f, 0.8114556670188904f, 0.26705166697502136f, 0.010237826965749264f, 0.4802294075489044f, 0.9136332869529724f, -0.9549710750579834f, 0.6802114248275757f, 0.18048615753650665f, 0.7059755325317383f, 0.05087413266301155f, 0.4610554873943329f, 0.6283688545227051f, 0.3978673219680786f, -0.06709978729486465f, 0.9871305227279663f, 0.4623042643070221f, 0.9390439987182617f, 0.26147130131721497f, 0.7813928723335266f, 0.3149060904979706f, 0.3409830927848816f, -0.29092156887054443f, 0.43966925144195557f, 0.9496521949768066f, 0.567759096622467f, 0.8919530510902405f, 0.14790284633636475f, 0.9250773191452026f, 0.38514259457588196f, -0.6594533920288086f, 0.3751342296600342f, 0.8723578453063965f, 0.3399806022644043f, 0.08520809561014175f, 0.3360217213630676f, 0.2977985441684723f, 0.8864404559135437f, -0.8165264129638672f, 0.2835230529308319f, 0.9056947231292725f, 0.3576407730579376f, 0.9522749185562134f, 0.16508391499519348f, 0.44934433698654175f, 0.6550940275192261f, -0.6119014024734497f, 0.19374583661556244f, 0.9267792105674744f, 0.9344940185546875f, 0.7341889142990112f, 0.0663171336054802f, 0.16158120334148407f, 0.34207966923713684f, -0.11122671514749527f, 0.012621160596609116f, 0.6513075828552246f, 0.2701713442802429f, 0.34726765751838684f, 0.27736425399780273f, 0.44963783025741577f, 0.7790867686271667f, -0.972800076007843f, 0.8583784103393555f, 0.40074989199638367f, 0.19702203571796417f, 0.6803663969039917f, 0.9942384958267212f, 0.9294256567955017f, 0.04835846647620201f, -0.30365654826164246f, 0.1311129927635193f, 0.1482909768819809f, 0.5076549053192139f, 0.9951936602592468f, 0.3629623055458069f, 0.942331075668335f, 0.8376534581184387f, -0.2890091836452484f, 0.24207977950572968f, 0.07685384899377823f, 0.991188645362854f, 0.6549155116081238f, 0.6567047238349915f, 0.1296560913324356f, 0.7838839292526245f, -0.09528249502182007f, 0.4126642942428589f, 0.05490763485431671f, 0.39220306277275085f, 0.6535824537277222f, 0.4558592140674591f, 0.34300485253334045f, 0.11383798718452454f, -0.8747297525405884f, 0.3250669240951538f, 0.6973647475242615f, 0.671653151512146f, 0.6977242231369019f, 0.2576218843460083f, 0.3256268799304962f, 0.6730823516845703f, -0.928657591342926f, 0.7529006600379944f, 0.1999479979276657f, 0.09109169244766235f, 0.3230440318584442f, 0.47561028599739075f, 0.40320122241973877f, 0.6014516949653625f, -0.3049686551094055f, 0.35972392559051514f, 0.9453364610671997f, 0.2650628983974457f, 0.07589497417211533f, 0.7949711680412292f, 0.6360994577407837f, 0.6082742810249329f, -0.46468886733055115f, 0.4643104076385498f, 0.5964094400405884f, 0.7033678889274597f, 0.13589291274547577f, 0.8118336796760559f, 0.6377806067466736f, 0.8189021348953247f, -0.2628714144229889f, 0.7974801659584045f, 0.347843199968338f, 0.2646867036819458f, 0.8296465873718262f, 0.7883257269859314f, 0.6814864277839661f, 0.7403626441955566f, -0.6557578444480896f, 0.4745402932167053f, 0.11780340224504471f, 0.8008965849876404f, 0.5239484310150146f, 0.3740341067314148f, 0.11064226925373077f, 0.5735353231430054f, -0.2122429460287094f, 0.23316355049610138f, 0.6948198080062866f, 0.6588327884674072f, 0.7961225509643555f, 0.4030976891517639f, 0.9168605804443359f, 0.6492248177528381f, -0.6335004568099976f, 0.8284423351287842f, 0.3077720105648041f, 0.6469661593437195f, 0.28205379843711853f, 0.27927395701408386f, 0.36363595724105835f, 0.7074312567710876f, -0.19806425273418427f, 0.06375603377819061f, 0.8653183579444885f, 0.35723602771759033f, 0.8483303189277649f, 0.19035373628139496f, 0.5812743306159973f, 0.4743516147136688f, -0.8530013561248779f, 0.31802499294281006f, 0.8741948008537292f, 0.4771896302700043f, 0.7763125896453857f, 0.09832420200109482f, 0.6076751947402954f, 0.34757208824157715f, -0.30600178241729736f, 0.5884850025177002f, 0.16867263615131378f, 0.38768982887268066f, 0.32801553606987f, 0.21046969294548035f, 0.9720969200134277f, 0.8787654638290405f, -0.40993374586105347f, 0.98848557472229f, 0.8930138349533081f, 0.5653001070022583f, 0.4377014935016632f, 0.8938916325569153f, 0.966055691242218f, 0.10723011195659637f, -0.3518950641155243f, 0.8384108543395996f, 0.8328797221183777f, 0.39210981130599976f, 0.06425231695175171f, 0.03921903297305107f, 0.09050595015287399f, 0.9624609351158142f, -0.8355586528778076f, 0.5903403759002686f, 0.06496589630842209f, 0.5308747291564941f, 0.2211237996816635f, 0.912830650806427f, 0.3913666009902954f, 0.33552008867263794f, -0.8567676544189453f, 0.08189528435468674f, 0.4210885167121887f, 0.2072695940732956f, 0.4746870696544647f, 0.382915735244751f, 0.5285869836807251f, 0.7994335889816284f, -0.7955350875854492f, 0.874383270740509f, 0.9121365547180176f, 0.817671000957489f, 0.9293030500411987f, 0.4659094512462616f, 0.48812294006347656f, 0.03867868706583977f, -0.9927375912666321f, 0.7381436228752136f, 0.7309112548828125f, 0.05531146749854088f, 0.9149882197380066f, 0.10574463754892349f, 0.8983901143074036f, 0.7146670818328857f, -0.38952043652534485f, 0.8821471929550171f, 0.602336585521698f, 0.5212693214416504f, 0.8819068074226379f, 0.8073463439941406f, 0.9357222318649292f, 0.2906804084777832f, -0.4736487865447998f, 0.6913447380065918f, 0.32960188388824463f, 0.2978615462779999f, 0.6048224568367004f, 0.6343649625778198f, 0.017427688464522362f, 0.3258625864982605f, -0.32307907938957214f, 0.09148906916379929f, 0.7786264419555664f, 0.11879906803369522f, 0.16351814568042755f, 0.9705894589424133f, 0.5582830309867859f, 0.3369669020175934f, -0.8103969693183899f, 0.7050167918205261f, 0.7062381505966187f, 0.3137601912021637f, 0.6332038044929504f, 0.17048870027065277f, 0.7492449283599854f, 0.6990647315979004f, -0.2344704419374466f, 0.4228031635284424f, 0.2126915007829666f, 0.7192325592041016f, 0.6022688746452332f, 0.03135328367352486f, 0.6947964429855347f, 0.40795212984085083f, -0.19585274159908295f, 0.15804199874401093f, 0.7342334389686584f, 0.9971185922622681f, 0.5317658185958862f, 0.990462601184845f, 0.3573853671550751f, 0.4346109926700592f, -0.31973814964294434f, 0.4839191436767578f, 0.36002475023269653f, 0.954522967338562f, 0.20450416207313538f, 0.5655564665794373f, 0.4974878132343292f, 0.700401246547699f, -0.6695301532745361f, 0.5688667297363281f, 0.27314186096191406f, 0.2094798982143402f, 0.4243338108062744f, 0.3649483025074005f, 0.508134126663208f, 0.0374707467854023f, -0.21527105569839478f, 0.2030380219221115f, 0.8271117210388184f, 0.7241455912590027f, 0.6042900681495667f, 0.34430110454559326f, 0.6202287673950195f, 0.4570613205432892f, -0.5804638862609863f, 0.11366996169090271f, 0.3699513077735901f, 0.8279399275779724f, 0.4698736071586609f, 0.3821369707584381f, 0.584767758846283f, 0.45637109875679016f, -0.7986502051353455f, 0.8006606101989746f, 0.8592642545700073f, 0.013687513768672943f, 0.807155966758728f, 0.8397234678268433f, 0.890876054763794f, 0.7842086553573608f, -0.4399213492870331f, 0.09672649949789047f, 0.8224396109580994f, 0.7208048105239868f, 0.014055815525352955f, 0.10697223991155624f, 0.8965482711791992f, 0.8686040043830872f, -0.23860402405261993f, 0.8206117153167725f, 0.33428093791007996f, 0.2591477334499359f, 0.15285110473632812f, 0.7251129746437073f, 0.8124920725822449f, 0.18693578243255615f, -0.45109492540359497f, 0.07840488851070404f, 0.23928479850292206f, 0.45385244488716125f, 0.433767706155777f, 0.020211823284626007f, 0.596167802810669f, 0.7811502814292908f, -0.6728254556655884f, 0.5649111270904541f, 0.12444388121366501f, 0.6190189123153687f, 0.8463510870933533f, 0.49254268407821655f, 0.22386611998081207f, 0.6969649791717529f, -0.9997266530990601f, 0.3310575783252716f, 0.6773116588592529f, 0.5841906070709229f, 0.6585373282432556f, 0.40533342957496643f, 0.8535231351852417f, 0.32822227478027344f, -0.9737302660942078f, 0.9822299480438232f, 0.24295739829540253f, 0.15122587978839874f, 0.05160192400217056f, 0.7457766532897949f, 0.601118803024292f, 0.40156272053718567f, -0.5979711413383484f, 0.4363988935947418f, 0.8172310590744019f, 0.39189139008522034f, 0.7558155059814453f, 0.16974520683288574f, 0.318148136138916f, 0.5432105660438538f, -0.540900707244873f, 0.24127164483070374f, 0.8114629983901978f, 0.5864877700805664f, 0.48171859979629517f, 0.7810697555541992f, 0.29259833693504333f, 0.2540073096752167f, -0.681921124458313f, 0.4966408908367157f, 0.17379553616046906f, 0.27185437083244324f, 0.9905750751495361f, 0.634907603263855f, 0.7481163740158081f, 0.8546186685562134f, -0.4443117380142212f, 0.5368461608886719f, 0.3055487275123596f, 0.40812140703201294f, 0.8074285387992859f, 0.3676891624927521f, 0.25643542408943176f, 0.8687207698822021f, -0.4461764097213745f, 0.8544299602508545f, 0.19220925867557526f, 0.5895619988441467f, 0.6270193457603455f, 0.2332826405763626f, 0.8184774518013f, 0.8467797040939331f, -0.10467884689569473f, 0.8040856719017029f, 0.30162397027015686f, 0.32072123885154724f, 0.3741143047809601f, 0.6250866651535034f, 0.7947326898574829f, 0.6137285232543945f, -0.7599850296974182f, 0.028043366968631744f, 0.5385348200798035f, 0.48656171560287476f, 0.8533463478088379f, 0.4670378565788269f, 0.18717822432518005f, 0.4428540766239166f, -0.6780552268028259f, 0.2941395938396454f, 0.4520241618156433f, 0.18588198721408844f, 0.8089282512664795f, 0.7506281137466431f, 0.2361171841621399f, 0.2514839768409729f, -0.39200231432914734f, 0.7112984657287598f, 0.6027497053146362f, 0.4958242177963257f, 0.8537523746490479f, 0.9984222650527954f, 0.7186997532844543f, 0.08688747137784958f, -0.9114126563072205f, 0.12262600660324097f, 0.9835212230682373f, 0.9341004490852356f, 0.001701713539659977f, 0.8349961638450623f, 0.4915919005870819f, 0.8215764760971069f, -0.6992809772491455f, 0.05442125350236893f, 0.7167952656745911f, 0.5564568638801575f, 0.3553590178489685f, 0.7270873188972473f, 0.22570502758026123f, 0.14302249252796173f, -0.5848103761672974f, 0.4914005696773529f, 0.7776689529418945f, 0.9432279467582703f, 0.9370170831680298f, 0.03817734867334366f, 0.21469733119010925f, 0.5023507475852966f, -0.9545832872390747f, 0.5221189260482788f, 0.9846305251121521f, 0.39862900972366333f, 0.6810651421546936f, 0.4999472200870514f, 0.7567670941352844f, 0.8573620319366455f, -0.8356005549430847f, 0.8669877052307129f, 0.386704683303833f, 0.41229724884033203f, 0.4142243266105652f, 0.1920740157365799f, 0.82952880859375f, 0.5865820050239563f, -0.016762839630246162f, 0.15736271440982819f, 0.3487846851348877f, 0.2307685911655426f, 0.7904929518699646f, 0.3015766143798828f, 0.31503576040267944f, 0.7485158443450928f, -0.354788601398468f, 0.5434504747390747f, 0.8120304346084595f, 0.738000750541687f, 0.8372034430503845f, 0.8903629779815674f, 0.7603938579559326f, 0.9734774231910706f, -0.9550075531005859f, 0.48780909180641174f, 0.6430408954620361f, 0.5041855573654175f, 0.06504186242818832f, 0.581784188747406f, 0.32564228773117065f, 0.3532741367816925f, -0.733622133731842f, 0.30730587244033813f, 0.9310135245323181f, 0.003121408401057124f, 0.5642487406730652f, 0.6886924505233765f, 0.9516181945800781f, 0.9778813123703003f, -0.9812124371528625f, 0.9523764848709106f, 0.7245237827301025f, 0.19504466652870178f, 0.6861010789871216f, 0.8687511682510376f, 0.6317071318626404f, 0.8586059808731079f, -0.6271195411682129f, 0.041302505880594254f, 0.13776101171970367f, 0.9982560873031616f, 0.9333196878433228f, 0.47116073966026306f, 0.6548131108283997f, 0.5294590592384338f, -0.19100400805473328f, 0.9554646611213684f, 0.029612457379698753f, 0.12854228913784027f, 0.09492230415344238f, 0.4851119816303253f, 0.8601868152618408f, 0.3510374426841736f, -0.7857020497322083f, 0.22066986560821533f, 0.7929891347885132f, 0.9551934003829956f, 0.7656645774841309f, 0.5423875451087952f, 0.9946726560592651f, 0.42987778782844543f, -0.7623476982116699f, 0.7085015177726746f, 0.422565758228302f, 0.21956892311573029f, 0.19065000116825104f, 0.7900413274765015f, 0.10913780331611633f, 0.5901052355766296f, -0.6468187570571899f, 0.1692950427532196f, 0.5431228280067444f, 0.46871447563171387f, 0.8820863962173462f, 0.09100326895713806f, 0.2321506142616272f, 0.782964289188385f, -0.1438324898481369f, 0.838342010974884f, 0.9938483834266663f, 0.046949129551649094f, 0.16978514194488525f, 0.7137942910194397f, 0.0317525714635849f, 0.5672420859336853f, -0.3659333288669586f, 0.2058519423007965f, 0.48119255900382996f, 0.3836929500102997f, 0.11054471135139465f, 0.38978224992752075f, 0.8748157620429993f, 0.6766340136528015f, -0.3967452645301819f, 0.12075166404247284f, 0.6969872713088989f, 0.43397846817970276f, 0.5796958804130554f, 0.5509028434753418f, 0.14620515704154968f, 0.5277485251426697f, -0.18917791545391083f, 0.6126484870910645f, 0.1192287728190422f, 0.11841845512390137f, 0.47148558497428894f, 0.4310251772403717f, 0.5622012615203857f, 0.981524646282196f, -0.9374864101409912f, 0.7524102330207825f, 0.17392344772815704f, 0.1700618714094162f, 0.7882283329963684f, 0.9902452826499939f, 0.04321220889687538f, 0.29723912477493286f, -0.018072117120027542f, 0.2775934934616089f, 0.38443225622177124f, 0.4361473619937897f, 0.9605723023414612f, 0.4917488098144531f, 0.5103060007095337f, 0.02299915999174118f, -0.015670109540224075f, 0.9137781858444214f, 0.7532418370246887f, 0.018310610204935074f, 0.41085565090179443f, 0.6702522039413452f, 0.8837723135948181f, 0.4635959565639496f, -0.5810527205467224f, 0.31792309880256653f, 0.693916916847229f, 0.10713092237710953f, 0.49777650833129883f, 0.0017137061804533005f, 0.1550961136817932f, 0.9402611255645752f, -0.7230667471885681f, 0.3058741092681885f, 0.865681529045105f, 0.5081979036331177f, 0.24110880494117737f, 0.6661933660507202f, 0.8492878079414368f, 0.7868361473083496f, -0.05003504455089569f, 0.8070210218429565f, 0.34392914175987244f, 0.8481739163398743f, 0.9817697405815125f, 0.5415489673614502f, 0.014193721115589142f, 0.8458203077316284f, -0.8275434374809265f, 0.897250235080719f, 0.662330687046051f, 0.2842507064342499f, 0.7723881006240845f, 0.8158900141716003f, 0.8449577689170837f, 0.7517149448394775f, -0.15000714361667633f, 0.8003903031349182f, 0.7597424387931824f, 0.6028500199317932f, 0.1366930603981018f, 0.3287769854068756f, 0.7043705582618713f, 0.1127750426530838f, -0.23551571369171143f, 0.9923906326293945f, 0.6986587643623352f, 0.43121427297592163f, 0.7396387457847595f, 0.05983271449804306f, 0.8330563306808472f, 0.3738326132297516f, -0.4003632962703705f, 0.7360066175460815f, 0.30487436056137085f, 0.14803877472877502f, 0.6661909222602844f, 0.4211364686489105f, 0.23648084700107574f, 0.3340548872947693f, -0.9678226113319397f, 0.13748237490653992f, 0.20018747448921204f, 0.24067969620227814f, 0.007253838237375021f, 0.8982585072517395f, 0.5408313870429993f, 0.49064841866493225f, -0.004407841246575117f, 0.031819794327020645f, 0.008667812682688236f, 0.2621961236000061f, 0.8784472346305847f, 0.5119643211364746f, 0.8994767069816589f, 0.08399324864149094f, -0.8702698349952698f, 0.5227741003036499f, 0.8537302017211914f, 0.8850197792053223f, 0.9985864162445068f, 0.7470629811286926f, 0.0610441118478775f, 0.4519599378108978f, -0.8471142053604126f, 0.06572826206684113f, 0.4259277582168579f, 0.5352294445037842f, 0.34847357869148254f, 0.4343964457511902f, 0.9918969869613647f, 0.9006354808807373f, -0.16018261015415192f, 0.6501558423042297f, 0.07137538492679596f, 0.884026825428009f, 0.9097590446472168f, 0.22135919332504272f, 0.08519988507032394f, 0.5688000917434692f, -0.8010138869285583f, 0.5883246660232544f, 0.9766235947608948f, 0.012665319256484509f, 0.04277382418513298f, 0.22800500690937042f, 0.21445681154727936f, 0.8729077577590942f, -0.9167338013648987f, 0.8495886325836182f, 0.08803310245275497f, 0.9367020726203918f, 0.8322381973266602f, 0.3658757209777832f, 0.10653802007436752f, 0.6374240517616272f, -0.9790050983428955f, 0.992295503616333f, 0.04284217208623886f, 0.418335497379303f, 0.7329328060150146f, 0.7083978652954102f, 0.9985383152961731f, 0.3122660517692566f, -0.692548930644989f, 0.012674209661781788f, 0.2329198271036148f, 0.10882988572120667f, 0.4622671902179718f, 0.5824663043022156f, 0.20273061096668243f, 0.30423134565353394f, -0.8578803539276123f, 0.0815262570977211f, 0.9462544322013855f, 0.7405062913894653f, 0.03727444261312485f, 0.4110732078552246f, 0.2535937428474426f, 0.5265026688575745f, -0.9827515482902527f, 0.6466314792633057f, 0.5309784412384033f, 0.879764974117279f, 0.9570038318634033f, 0.4376445412635803f, 0.7846986651420593f, 0.21406148374080658f, -0.49972671270370483f, 0.3163204491138458f, 0.7673792243003845f, 0.5961553454399109f, 0.7338145971298218f, 0.18001525104045868f, 0.07776093482971191f, 0.050475236028432846f, -0.3457180857658386f, 0.2608973979949951f, 0.22109946608543396f, 0.8897652626037598f, 0.1690831184387207f, 0.8030218482017517f, 0.8378056287765503f, 0.22894318401813507f, -0.7362642884254456f, 0.22529417276382446f, 0.27028799057006836f, 0.6145716905593872f, 0.261884480714798f, 0.13001109659671783f, 0.6544486284255981f, 0.5641818046569824f, -0.6376294493675232f, 0.9907711744308472f, 0.29073432087898254f, 0.49131837487220764f, 0.38150155544281006f, 0.5561037063598633f, 0.8627744317054749f, 0.023275813087821007f, -0.0026517610531300306f, 0.3964223563671112f, 0.7177939414978027f, 0.47064149379730225f, 0.44035401940345764f, 0.49149733781814575f, 0.1486484855413437f, 0.05458132177591324f, -0.3150099217891693f, 0.16251429915428162f, 0.8991709351539612f, 0.7678459882736206f, 0.743368923664093f, 0.7182289361953735f, 0.27287691831588745f, 0.9986646771430969f, -0.43064022064208984f, 0.9956974983215332f, 0.5053346753120422f, 0.08243387937545776f, 0.5149266719818115f, 0.042062174528837204f, 0.9255226254463196f, 0.7858346104621887f, -0.9812442660331726f, 0.319378137588501f, 0.7015552520751953f, 0.9708049893379211f, 0.029882600530982018f, 0.246241956949234f, 0.12782108783721924f, 0.6070808172225952f, -0.16161665320396423f, 0.2087469846010208f, 0.4997738301753998f, 0.759044349193573f, 0.8601779937744141f, 0.315143883228302f, 0.2637718617916107f, 0.6537017822265625f, -0.7470476627349854f, 0.8159675002098083f, 0.6570550203323364f, 0.6507676839828491f, 0.03155156970024109f, 0.9077262878417969f, 0.07118117064237595f, 0.09690520912408829f, -0.9834427833557129f, 0.46211832761764526f, 0.9662456512451172f, 0.37487560510635376f, 0.5351315140724182f, 0.520129382610321f, 0.816665768623352f, 0.1849634200334549f, -0.7302005290985107f, 0.5396607518196106f, 0.07633236795663834f, 0.6355259418487549f, 0.22092564404010773f, 0.6859322190284729f, 0.7124609351158142f, 0.6100464463233948f, -0.6024386882781982f, 0.7151587605476379f, 0.815228283405304f, 0.3150571882724762f, 0.6452547311782837f, 0.5802504420280457f, 0.03161944821476936f, 0.01771288551390171f, -0.1450548768043518f, 0.8155802488327026f, 0.640329122543335f, 0.8587051033973694f, 0.28141385316848755f, 0.7487977147102356f, 0.7246535420417786f, 0.1583249270915985f, -0.38057276606559753f, 0.507861316204071f, 0.29830965399742126f, 0.5470091104507446f, 0.5675508379936218f, 0.9944486618041992f, 0.45797091722488403f, 0.8615837693214417f, -0.077416330575943f, 0.5167428851127625f, 0.4032311737537384f, 0.15181584656238556f, 0.03878570720553398f, 0.4402015507221222f, 0.6157577037811279f, 0.3341422975063324f, -0.2515515387058258f, 0.997917890548706f, 0.9596710205078125f, 0.9675130248069763f, 0.9868080019950867f, 0.8944506645202637f, 0.716106653213501f, 0.487608939409256f, -0.15129321813583374f, 0.7150234580039978f, 0.29845160245895386f, 0.7752057313919067f, 0.6872819662094116f, 0.26398158073425293f, 0.8712502121925354f, 0.7452178597450256f, -0.8202650547027588f, 0.8702675700187683f, 0.559006929397583f, 0.42870283126831055f, 0.10203913599252701f, 0.20809051394462585f, 0.4196685254573822f, 0.19406165182590485f, -0.5725063681602478f, 0.8816217184066772f, 0.5392343997955322f, 0.2526302933692932f, 0.5446266531944275f, 0.6933771967887878f, 0.8335169553756714f, 0.8008777499198914f, -0.1623774617910385f, 0.16458630561828613f, 0.39876440167427063f, 0.038294266909360886f, 0.838060200214386f, 0.2673133313655853f, 0.8958942890167236f, 0.056392569094896317f, -0.20013371109962463f, 0.6438551545143127f, 0.12746109068393707f, 0.6153685450553894f, 0.9280247092247009f, 0.11678434908390045f, 0.4743956923484802f, 0.4132160246372223f, -0.18207651376724243f, 0.9227055907249451f, 0.296530157327652f, 0.7587119936943054f, 0.04882630705833435f, 0.05180498957633972f, 0.7494004368782043f, 0.032798219472169876f, -0.536342203617096f, 0.11867852509021759f, 0.08922971040010452f, 0.8330346345901489f, 0.13564608991146088f, 0.2227773815393448f, 0.5483101606369019f, 0.4853462874889374f, -0.8581737875938416f, 0.8142383694648743f, 0.017284179106354713f, 0.4692608416080475f, 0.10796947032213211f, 0.18852992355823517f, 0.4084450602531433f, 0.42374157905578613f, -0.34576207399368286f, 0.6512562036514282f, 0.4529231786727905f, 0.2037210911512375f, 0.6151713728904724f, 0.36610618233680725f, 0.2048189789056778f, 0.26326891779899597f, -0.36395737528800964f, 0.09223395586013794f, 0.21808114647865295f, 0.7323015332221985f, 0.3226816952228546f, 0.3143102824687958f, 0.2813202142715454f, 0.6932123899459839f, -0.38418468832969666f, 0.5268425345420837f, 0.38631877303123474f, 0.5608934164047241f, 0.07805102318525314f, 0.12280987203121185f, 0.09925372153520584f, 0.13305965065956116f, -0.7324445843696594f, 0.4924689531326294f, 0.6677669286727905f, 0.5843303203582764f, 0.3392271101474762f, 0.9041394591331482f, 0.35466957092285156f, 0.7151671648025513f, -0.6504361629486084f, 0.9268357753753662f, 0.5117616057395935f, 0.043618086725473404f, 0.6245524883270264f, 0.8786904811859131f, 0.8203111290931702f, 0.18440009653568268f, -0.06467137485742569f, 0.1008363589644432f, 0.30255740880966187f, 0.09037282317876816f, 0.3867427110671997f, 0.12684056162834167f, 0.27576473355293274f, 0.3160868287086487f, -0.452249675989151f, 0.47878706455230713f, 0.6314866542816162f, 0.3666805028915405f, 0.637378454208374f, 0.16177062690258026f, 0.6570076942443848f, 0.5739585161209106f, -0.7316887378692627f, 0.30612650513648987f, 0.5738125443458557f, 0.2063293308019638f, 0.4093517065048218f, 0.6711300611495972f, 0.7084825038909912f, 0.4467356204986572f, -0.54289311170578f, 0.36047106981277466f, 0.3603348135948181f, 0.7289673089981079f, 0.5811859965324402f, 0.9236676096916199f, 0.7469334602355957f, 0.5251469612121582f, -0.8024210929870605f, 0.4331738352775574f, 0.6877397298812866f, 0.622155487537384f, 0.3598482608795166f, 0.2069009691476822f, 0.40071773529052734f, 0.03855275735259056f, -0.2235487848520279f, 0.0019632724579423666f, 0.4062311351299286f, 0.6174327731132507f, 0.26121896505355835f, 0.4304516911506653f, 0.06235015392303467f, 0.9354302287101746f, -0.22703616321086884f, 0.3390108048915863f, 0.03278736025094986f, 0.3918784260749817f, 0.24543780088424683f, 0.38832318782806396f, 0.2626369595527649f, 0.3967646658420563f, -0.9308816194534302f, 0.1178780049085617f, 0.4728636145591736f, 0.15684185922145844f, 0.15069043636322021f, 0.43219026923179626f, 0.706893265247345f, 0.45351895689964294f, -0.47645217180252075f, 0.8328886032104492f, 0.2802426517009735f, 0.14386296272277832f, 0.9646798968315125f, 0.5487999320030212f, 0.8519083261489868f, 0.6596031785011292f, -0.457514226436615f, 0.1973791867494583f, 0.9307781457901001f, 0.2830911874771118f, 0.8440433144569397f, 0.15163668990135193f, 0.013360687531530857f, 0.12598508596420288f, -0.7758015394210815f, 0.6920357346534729f, 0.5935720205307007f, 0.6623631119728088f, 0.3354934751987457f, 0.09463720768690109f, 0.5680890679359436f, 0.9872734546661377f, -0.8754746317863464f, 0.5194082260131836f, 0.9250634908676147f, 0.6841109991073608f, 0.19015388190746307f, 0.2927422821521759f, 0.804101824760437f, 0.17417997121810913f, -0.5726282596588135f, 0.7149136662483215f, 0.1795823574066162f, 0.25974294543266296f, 0.24832193553447723f, 0.19075806438922882f, 0.8663184642791748f, 0.019879067316651344f, -0.38510432839393616f, 0.5541227459907532f, 0.01220850832760334f, 0.39768171310424805f, 0.8278859257698059f, 0.1789609044790268f, 0.5181308388710022f, 0.420429527759552f, -0.64220130443573f, 0.9302255511283875f, 0.8206514716148376f, 0.8030610084533691f, 0.25985994935035706f, 0.24337196350097656f, 0.6682469248771667f, 0.5885043740272522f, -0.5745753645896912f, 0.6671499609947205f, 0.2423732876777649f, 0.31411096453666687f, 0.04688190296292305f, 0.18834969401359558f, 0.14862078428268433f, 0.5199750065803528f, -0.40581557154655457f, 0.10125063359737396f, 0.7321484684944153f, 0.7771991491317749f, 0.2520061135292053f, 0.22014907002449036f, 0.10814125835895538f, 0.5728609561920166f, -0.8214101195335388f, 0.8239344358444214f, 0.5934537649154663f, 0.7923957705497742f, 0.6348292231559753f, 0.5882918238639832f, 0.2145708054304123f, 0.40610170364379883f, -0.275333434343338f, 0.6337766647338867f, 0.4002061188220978f, 0.552596390247345f, 0.5236643552780151f, 0.41587427258491516f, 0.6905860900878906f, 0.5489606261253357f, -0.03762660548090935f, 0.4611912667751312f, 0.7468123435974121f, 0.5066848993301392f, 0.40793782472610474f, 0.8925964832305908f, 0.885284960269928f, 0.2588016986846924f, -0.9062799215316772f, 0.8523505330085754f, 0.7851427793502808f, 0.38296857476234436f, 0.3507843017578125f, 0.4311441481113434f, 0.731526792049408f, 0.13418178260326385f, -0.19432272017002106f, 0.35377442836761475f, 0.6990384459495544f, 0.17130275070667267f, 0.02016330324113369f, 0.7495093941688538f, 0.5853162407875061f, 0.576353907585144f, -0.9079017639160156f, 0.04564426466822624f, 0.08558785170316696f, 0.9652184247970581f, 0.35048744082450867f, 0.4968163073062897f, 0.4728133976459503f, 0.4186938405036926f, -0.1696414202451706f, 0.9045847058296204f, 0.6330599188804626f, 0.4648991525173187f, 0.9227473735809326f, 0.8115041851997375f, 0.5820794701576233f, 0.8595941066741943f, -0.48826882243156433f, 0.9412888288497925f, 0.0656609758734703f, 0.7366513013839722f, 0.5407475233078003f, 0.02552037127315998f, 0.4639304578304291f, 0.7616723775863647f, -0.8701801300048828f, 0.005686136428266764f, 0.46892863512039185f, 0.7280920743942261f, 0.106391541659832f, 0.2083861380815506f, 0.05222141742706299f, 0.5523714423179626f, -0.20736749470233917f, 0.1638200581073761f, 0.10390832275152206f, 0.5812866687774658f, 0.90354323387146f, 0.5894603133201599f, 0.3169253468513489f, 0.2151455581188202f, -0.7687835097312927f, 0.3234304189682007f, 0.32082200050354004f, 0.12776640057563782f, 0.017336342483758926f, 0.16313455998897552f, 0.00010261873831041157f, 0.6214319467544556f, -0.2864243984222412f, 0.05214553698897362f, 0.03632243722677231f, 0.42809829115867615f, 0.0033510371576994658f, 0.35468313097953796f, 0.3054268956184387f, 0.8409971594810486f, -0.22624559700489044f, 0.010599623434245586f, 0.48339200019836426f, 0.2458251565694809f, 0.5727415084838867f, 0.835329532623291f, 0.5874089002609253f, 0.7271360754966736f, -0.08145229518413544f, 0.1812642216682434f, 0.5822628140449524f, 0.5449788570404053f, 0.02976652979850769f, 0.12138763070106506f, 0.8149394989013672f, 0.7209303379058838f, -0.024127556011080742f, 0.7508950233459473f, 0.15864329040050507f, 0.894601047039032f, 0.08995411545038223f, 0.8679575324058533f, 0.3574671447277069f, 0.13679708540439606f, -0.20762842893600464f, 0.11534212529659271f, 0.6198108196258545f, 0.1111542284488678f, 0.17049050331115723f, 0.804276168346405f, 0.9416916966438293f, 0.04573700949549675f, -0.6216703057289124f, 0.8932657241821289f, 0.4344153106212616f, 0.6028128266334534f, 0.5760946869850159f, 0.7472690939903259f, 0.9501760005950928f, 0.814731240272522f, -0.350659042596817f, 0.4467182457447052f, 0.8096315860748291f, 0.5051215291023254f, 0.9229854941368103f, 0.16187067329883575f, 0.10029100626707077f, 0.6739335656166077f, -0.9937719106674194f, 0.12694278359413147f, 0.6699720621109009f, 0.8334599733352661f, 0.8292117714881897f, 0.9881569743156433f, 0.7620177268981934f, 0.8817244172096252f, -0.31809017062187195f, 0.7283843755722046f, 0.3399045467376709f, 0.19282928109169006f, 0.8337053060531616f, 0.6775728464126587f, 0.16352145373821259f, 0.33873799443244934f, -0.5969336628913879f, 0.638514518737793f, 0.10655145347118378f, 0.4154394865036011f, 0.8237099647521973f, 0.6703922152519226f, 0.6221184134483337f, 0.23145857453346252f, -0.4648250639438629f, 0.2998490333557129f, 0.48372671008110046f, 0.7456002235412598f, 0.7741169929504395f, 0.5443742275238037f, 0.6653097867965698f, 0.7808489799499512f, -0.9627623558044434f, 0.5680886507034302f, 0.9076253771781921f, 0.022526465356349945f, 0.3555968105792999f, 0.3956892192363739f, 0.978661060333252f, 0.9412407279014587f, -0.2440752387046814f, 0.037660446017980576f, 0.42755597829818726f, 0.5467312932014465f, 0.9226272106170654f, 0.4791727066040039f, 0.5862120389938354f, 0.03673591837286949f, -0.565789520740509f, 0.37159186601638794f, 0.32986995577812195f, 0.5066454410552979f, 0.7534660696983337f, 0.12024173140525818f, 0.5552784204483032f, 0.3409826457500458f, -0.3634718954563141f, 0.20305296778678894f, 0.7420845031738281f, 0.5582351684570312f, 0.45836859941482544f, 0.6464532017707825f, 0.07059548795223236f, 0.28679904341697693f, -0.24120670557022095f, 0.054870765656232834f, 0.15838511288166046f, 0.5902981162071228f, 0.16985666751861572f, 0.6385887265205383f, 0.8606009483337402f, 0.15896397829055786f, -0.5617508292198181f, 0.5427520871162415f, 0.4647197723388672f, 0.7733465433120728f, 0.7696434259414673f, 0.9913131594657898f, 0.0018456956604495645f, 0.10514911264181137f, -0.912326455116272f, 0.8602949976921082f, 0.33786630630493164f, 0.4405438005924225f, 0.9528399705886841f, 0.8633893728256226f, 0.03649841994047165f, 0.2198854237794876f, -0.5050463080406189f, 0.8130427002906799f, 0.2237403392791748f, 0.2801978588104248f, 0.5513589382171631f, 0.5703752636909485f, 0.9202191829681396f, 0.22587209939956665f, -0.6899226903915405f, 0.2970098555088043f, 0.3504455089569092f, 0.8262298703193665f, 0.07421660423278809f, 0.9553250670433044f, 0.0892234742641449f, 0.7268542051315308f, -0.10622537136077881f, 0.7056354284286499f, 0.7007420063018799f, 0.5206674337387085f, 0.9353412985801697f, 0.7334275841712952f, 0.5485455989837646f, 0.8731225728988647f, -0.3838958144187927f, 0.1588630974292755f, 0.5858865976333618f, 0.5056222677230835f, 0.43374860286712646f, 0.31526505947113037f, 0.5891598463058472f, 0.10357402265071869f, -0.03570318594574928f, 0.012896339409053326f, 0.43153488636016846f, 0.8194704055786133f, 0.6458523869514465f, 0.6649771928787231f, 0.8927266001701355f, 0.5247898697853088f, -0.6209049224853516f, 0.38894835114479065f, 0.1686275601387024f, 0.09533558040857315f, 0.13597051799297333f, 0.9692128896713257f, 0.15176621079444885f, 0.16230179369449615f, -0.3281639814376831f, 0.37731459736824036f, 0.804117739200592f, 0.6059314608573914f, 0.9878140687942505f, 0.9454982280731201f, 0.6276066899299622f, 0.029846854507923126f, -0.25205084681510925f, 0.6929375529289246f, 0.14452232420444489f, 0.19296501576900482f, 0.0770609974861145f, 0.7934648394584656f, 0.9151789546012878f, 0.9264030456542969f, -0.791484534740448f, 0.9793626070022583f, 0.5345384478569031f, 0.10343343019485474f, 0.704630970954895f, 0.3652842044830322f, 0.14144644141197205f, 0.4478837251663208f, -0.5592654347419739f, 0.22298941016197205f, 0.7274271249771118f, 0.7349168658256531f, 0.41008460521698f, 0.08234955370426178f, 0.2071581929922104f, 0.3790299892425537f, -0.935069739818573f, 0.11016574501991272f, 0.2286538928747177f, 0.6427139043807983f, 0.5496360063552856f, 0.596991777420044f, 0.383786678314209f, 0.8102611899375916f, -0.34771209955215454f, 0.6151383519172668f, 0.9343859553337097f, 0.7884564399719238f, 0.6531988382339478f, 0.6663116216659546f, 0.31475943326950073f, 0.1473150998353958f, -0.44802144169807434f, 0.6806209087371826f, 0.5794930458068848f, 0.5707606673240662f, 0.9290196895599365f, 0.38460254669189453f, 0.4065571427345276f, 0.01666758768260479f, -0.15988624095916748f, 0.7666635513305664f, 0.9774938821792603f, 0.7126474380493164f, 0.7816197872161865f, 0.34023913741111755f, 0.02447493188083172f, 0.05615343153476715f, -0.5661140084266663f, 0.5901467204093933f, 0.17520736157894135f, 0.5007683634757996f, 0.491831511259079f, 0.7693057060241699f, 0.05439168959856033f, 0.879618227481842f, -0.8221060037612915f, 0.7294249534606934f, 0.4782027006149292f, 0.45322802662849426f, 0.5622527599334717f, 0.9215291738510132f, 0.11516831815242767f, 0.5105880498886108f, -0.8212286233901978f, 0.7502680420875549f, 0.4874657690525055f, 0.34764352440834045f, 0.89214026927948f, 0.18188728392124176f, 0.5626022219657898f, 0.09306040406227112f, -0.8899430632591248f, 0.5181828141212463f, 0.05688156187534332f, 0.9657887816429138f, 0.22868938744068146f, 0.21997588872909546f, 0.08919287472963333f, 0.12978143990039825f, -0.42796212434768677f, 0.11827585846185684f, 0.8072947859764099f, 0.7399965524673462f, 0.9756134748458862f, 0.512799859046936f, 0.328814297914505f, 0.7008500695228577f, -0.5460719466209412f, 0.678844153881073f, 0.6706998944282532f, 0.8586233854293823f, 0.2875577509403229f, 0.8045256733894348f, 0.6869686841964722f, 0.5427576899528503f, -0.4564148485660553f, 0.4337009787559509f, 0.3996713161468506f, 0.43147313594818115f, 0.2738613486289978f, 0.07286401838064194f, 0.07314500957727432f, 0.059512000530958176f, -0.630113959312439f, 0.298645943403244f, 0.9153906106948853f, 0.42747169733047485f, 0.44726359844207764f, 0.7185347676277161f, 0.6427905559539795f, 0.28151920437812805f, -0.5910523533821106f, 0.1931638866662979f, 0.92490154504776f, 0.5362138152122498f, 0.2389540821313858f, 0.09379623830318451f, 0.264482319355011f, 0.10802958905696869f, -0.8816936612129211f, 0.3287293016910553f, 0.602033257484436f, 0.022117361426353455f, 0.19513997435569763f, 0.7822300791740417f, 0.3939691483974457f, 0.2144245207309723f, -0.056692421436309814f, 0.866756796836853f, 0.8737897276878357f, 0.7969488501548767f, 0.6183643341064453f, 0.5660255551338196f, 0.6797913312911987f, 0.7846488952636719f, -0.28888094425201416f, 0.5300099849700928f, 0.8381209373474121f, 0.8289458155632019f, 0.7803078889846802f, 0.929506778717041f, 0.4348173439502716f, 0.6664862036705017f, -0.5126640200614929f, 0.5769713521003723f, 0.7130825519561768f, 0.5568819642066956f, 0.613243043422699f, 0.2770439088344574f, 0.6247284412384033f, 0.3277386724948883f, -0.987246036529541f, 0.020958902314305305f, 0.7395734190940857f, 0.6397125124931335f, 0.21337538957595825f, 0.0019488997058942914f, 0.035123735666275024f, 0.2129625827074051f, -0.630914568901062f, 0.9209345579147339f, 0.0797470435500145f, 0.02300059236586094f, 0.7130316495895386f, 0.08267462253570557f, 0.9837373495101929f, 0.7019394040107727f, -0.8367444276809692f, 0.5714505910873413f, 0.7689171433448792f, 0.6056004762649536f, 0.6530755758285522f, 0.05065274238586426f, 0.15512780845165253f, 0.6790703535079956f, -0.7741583585739136f, 0.4572487771511078f, 0.2643604278564453f, 0.3886479139328003f, 0.11270242184400558f, 0.23239555954933167f, 0.27829545736312866f, 0.6079933643341064f, -0.20404163002967834f, 0.9232142567634583f, 0.07946204394102097f, 0.4969088137149811f, 0.04740330949425697f, 0.28828564286231995f, 0.328330934047699f, 0.11422071605920792f, -0.6735289096832275f, 0.8216170072555542f, 0.771711528301239f, 0.1681559979915619f, 0.684516966342926f, 0.6194123029708862f, 0.3133259117603302f, 0.34783175587654114f, -0.5711782574653625f, 0.5824155211448669f, 0.7639502286911011f, 0.016778383404016495f, 0.3939332664012909f, 0.6690095663070679f, 0.5917571187019348f, 0.2584098279476166f, -0.6594053506851196f, 0.9660422205924988f, 0.38707825541496277f, 0.2863183915615082f, 0.5383671522140503f, 0.6565276384353638f, 0.7989168167114258f, 0.3951442241668701f, -0.43149325251579285f, 0.06214074045419693f, 0.008622300811111927f, 0.542248547077179f, 0.5751798748970032f, 0.10132569074630737f, 0.7524504661560059f, 0.19146671891212463f, -0.9594932198524475f, 0.8629535436630249f, 0.28372320532798767f, 0.8364467024803162f, 0.5529394149780273f, 0.4940773546695709f, 0.15539495646953583f, 0.5910914540290833f, -0.9010016322135925f, 0.6454170346260071f, 0.28409501910209656f, 0.37735486030578613f, 0.17707301676273346f, 0.4721198081970215f, 0.011276268400251865f, 0.3096064329147339f, -0.5438294410705566f, 0.15184786915779114f, 0.4768795669078827f, 0.8361476063728333f, 0.38650161027908325f, 0.5738208889961243f, 0.8160883188247681f, 0.7620823383331299f, -0.8230097889900208f, 0.855629563331604f, 0.7694106698036194f, 0.9067745208740234f, 0.09465385228395462f, 0.2342296540737152f, 0.5173768997192383f, 0.44868242740631104f, -0.22418741881847382f, 0.4862666130065918f, 0.5812405347824097f, 0.28203085064888f, 0.8747447729110718f, 0.7304053902626038f, 0.4503907859325409f, 0.7409040927886963f, -0.21820589900016785f, 0.07907550781965256f, 0.7472289204597473f, 0.7639864683151245f, 0.7936809659004211f, 0.9714910984039307f, 0.5928109288215637f, 0.06589826196432114f, -0.42386388778686523f, 0.214954674243927f, 0.8747215270996094f, 0.5511977672576904f, 0.7807478308677673f, 0.38431763648986816f, 0.7703543305397034f, 0.437823086977005f, -0.3302746117115021f, 0.14430902898311615f, 0.6360167264938354f, 0.7237898707389832f, 0.49755948781967163f, 0.01101212203502655f, 0.22242963314056396f, 0.68391352891922f, -0.7232568860054016f, 0.884023904800415f, 0.1672619730234146f, 0.7011706829071045f, 0.11756067723035812f, 0.19831889867782593f, 0.04825148731470108f, 0.2733207046985626f, -0.47510039806365967f, 0.5234118700027466f, 0.3926773965358734f, 0.5778123736381531f, 0.31105709075927734f, 0.5623745322227478f, 0.8528093099594116f, 0.8590177297592163f, -0.12442375719547272f, 0.6837648749351501f, 0.7786216735839844f, 0.9746618866920471f, 0.4341997504234314f, 0.6239043474197388f, 0.6404370069503784f, 0.4858109652996063f, -0.4119016230106354f, 0.47540146112442017f, 0.4111778736114502f, 0.07629669457674026f, 0.1825336217880249f, 0.8428712487220764f, 0.2644551694393158f, 0.9897710680961609f, -0.9165295362472534f, 0.015102876350283623f, 0.5979112982749939f, 0.5062680244445801f, 0.5505514144897461f, 0.4082323908805847f, 0.6840636730194092f, 0.4041096866130829f, -0.55550217628479f, 0.5539863705635071f, 0.11381971836090088f, 0.07259140908718109f, 0.8967429399490356f, 0.8412059545516968f, 0.6704506874084473f, 0.4789009988307953f, -0.33873552083969116f, 0.8104623556137085f, 0.72829669713974f, 0.9041542410850525f, 0.28114554286003113f, 0.9428683519363403f, 0.27808019518852234f, 0.22572176158428192f, -0.3095572590827942f, 0.5240360498428345f, 0.027860570698976517f, 0.1934749186038971f, 0.6872509121894836f, 0.49602076411247253f, 0.5367442965507507f, 0.3547520041465759f, -0.7804019451141357f, 0.5710052847862244f, 0.47345811128616333f, 0.628859281539917f, 0.5283031463623047f, 0.7807890772819519f, 0.9425023198127747f, 0.5941347479820251f, -0.4596463441848755f, 0.8245487809181213f, 0.717393159866333f, 0.22487200796604156f, 0.23761367797851562f, 0.36900293827056885f, 0.9601718187332153f, 0.9072479605674744f, -0.1019497811794281f, 0.3192945122718811f, 0.8345690965652466f, 0.693038284778595f, 0.18481162190437317f, 0.31497010588645935f, 0.659653902053833f, 0.7624695301055908f, -0.6179977655410767f, 0.7050207257270813f, 0.9900324940681458f, 0.3388582170009613f, 0.2621583342552185f, 0.9389408826828003f, 0.11168696731328964f, 0.1826135367155075f, -0.9108186364173889f, 0.04682062193751335f, 0.2192191630601883f, 0.5362083911895752f, 0.43743687868118286f, 0.6565529108047485f, 0.8130041360855103f, 0.6345351934432983f, -0.3225410282611847f, 0.1365465670824051f, 0.22350291907787323f, 0.8561453223228455f, 0.605172872543335f, 0.6631137132644653f, 0.12485742568969727f, 0.1670757234096527f, -0.6705370545387268f, 0.05494147166609764f, 0.6450680494308472f, 0.0719381719827652f, 0.4131665825843811f, 0.9960361123085022f, 0.39733850955963135f, 0.018181931227445602f, -0.7942865490913391f, 0.5379371047019958f, 0.19811657071113586f, 0.13302721083164215f, 0.28691262006759644f, 0.7694534063339233f, 0.5122085809707642f, 0.11929434537887573f, -0.9846410155296326f, 0.9611042737960815f, 0.6713037490844727f, 0.7448294162750244f, 0.6316269636154175f, 0.414079874753952f, 0.569664478302002f, 0.301920086145401f, -0.013207130134105682f, 0.8823721408843994f, 0.28728753328323364f, 0.6825703978538513f, 0.30291691422462463f, 0.5994154810905457f, 0.4093932807445526f, 0.5237187743186951f, -0.22978882491588593f, 0.27989324927330017f, 0.12804315984249115f, 0.9932255148887634f, 0.07654235512018204f, 0.9414254426956177f, 0.3852406442165375f, 0.7463411688804626f, -0.1702931523323059f, 0.09747796505689621f, 0.4274079501628876f, 0.5013397336006165f, 0.6402186155319214f, 0.7503973841667175f, 0.1576867699623108f, 0.4300323724746704f, -0.9649708271026611f, 0.3850709795951843f, 0.5665972828865051f, 0.340556800365448f, 0.2678285241127014f, 0.5077134370803833f, 0.5946779847145081f, 0.3325638175010681f, -0.18467414379119873f, 0.24351084232330322f, 0.9934863448143005f, 0.749546468257904f, 0.6405780911445618f, 0.5188236236572266f, 0.6652931571006775f, 0.894536554813385f, -0.3500713109970093f, 0.6211731433868408f, 0.516358494758606f, 0.6791483759880066f, 0.40005651116371155f, 0.7282511591911316f, 0.334696501493454f, 0.40771815180778503f, -0.1539294570684433f, 0.8668839931488037f, 0.04623793438076973f, 0.11895668506622314f, 0.18411117792129517f, 0.6343410015106201f, 0.1620515137910843f, 0.1654185652732849f, -0.400224506855011f, 0.7446869015693665f, 0.5806577801704407f, 0.9186732769012451f, 0.7735646367073059f, 0.7967799305915833f, 0.8360699415206909f, 0.9168779253959656f, -0.16612207889556885f, 0.754655659198761f, 0.3482803404331207f, 0.9646174311637878f, 0.3929036259651184f, 0.12218047678470612f, 0.8122715353965759f, 0.10666456818580627f, -0.9999820590019226f, 0.2209617644548416f, 0.02687358669936657f, 0.9336271286010742f, 0.7199875712394714f, 0.1536073237657547f, 0.17849700152873993f, 0.04989836737513542f, -0.11560114473104477f, 0.4552648663520813f, 0.2140292525291443f, 0.5690813064575195f, 0.7931565642356873f, 0.07937930524349213f, 0.32086649537086487f, 0.3165661692619324f, -0.7935940027236938f, 0.8170679807662964f, 0.7981404066085815f, 0.38670653104782104f, 0.9911417961120605f, 0.9290438294410706f, 0.5719544887542725f, 0.8841861486434937f, -0.6934797167778015f, 0.31666579842567444f, 0.20060639083385468f, 0.8730525970458984f, 0.8563557863235474f, 0.8687097430229187f, 0.5889284610748291f, 0.38330700993537903f, -0.3441317677497864f, 0.7950615882873535f, 0.42697596549987793f, 0.3619535565376282f, 0.496295690536499f, 0.34764617681503296f, 0.7430425882339478f, 0.01318352110683918f, -0.7817400693893433f, 0.15670613944530487f, 0.1286766082048416f, 0.38110288977622986f, 0.33547377586364746f, 0.9430974125862122f, 0.6607500314712524f, 0.35372352600097656f, -0.0811120942234993f, 0.8398792147636414f, 0.8632355332374573f, 0.8281887173652649f, 0.45885777473449707f, 0.20482751727104187f, 0.8195705413818359f, 0.8755202293395996f, -0.0837278813123703f, 0.82038414478302f, 0.39629921317100525f, 0.7244907021522522f, 0.9139997959136963f, 0.899094820022583f, 0.7016562223434448f, 0.6666678786277771f, -0.33385100960731506f, 0.08934907615184784f, 0.15231375396251678f, 0.9484643936157227f, 0.3202144205570221f, 0.9741666316986084f, 0.3603312075138092f, 0.20053958892822266f, -0.6988248825073242f, 0.7011213898658752f, 0.7421191930770874f, 0.7285082936286926f, 0.5671788454055786f, 0.10400169342756271f, 0.7047780156135559f, 0.5710700750350952f, -0.11134679615497589f, 0.6675248146057129f, 0.33658385276794434f, 0.021065162494778633f, 0.0656542256474495f, 0.4492936134338379f, 0.1920713186264038f, 0.7707703709602356f, -0.7128848433494568f, 0.29539698362350464f, 0.7714506387710571f, 0.779707133769989f, 0.3504783809185028f, 0.1672319620847702f, 0.8207275867462158f, 0.07969556003808975f, -0.6859754323959351f, 0.16700418293476105f, 0.6370922327041626f, 0.9412628412246704f, 0.5110791921615601f, 0.5028166770935059f, 0.2786794900894165f, 0.4411325752735138f, -0.10141810774803162f, 0.993000864982605f, 0.10444770008325577f, 0.8257023692131042f, 0.20591770112514496f, 0.7097940444946289f, 0.5530646443367004f, 0.23921537399291992f, -0.08644464612007141f, 0.3016408681869507f, 0.08800628036260605f, 0.5929059386253357f, 0.08652481436729431f, 0.8046175837516785f, 0.615770161151886f, 0.45897573232650757f, -0.7348425388336182f, 0.49462422728538513f, 0.13663937151432037f, 0.008269059471786022f, 0.9614781737327576f, 0.5067549347877502f, 0.8204185366630554f, 0.1240730807185173f, -0.016659913584589958f, 0.12541288137435913f, 0.11066694557666779f, 0.01771487481892109f, 0.3290734589099884f, 0.10205775499343872f, 0.50125652551651f, 0.8777769207954407f, -0.03380332514643669f, 0.27870336174964905f, 0.5926467180252075f, 0.5591856241226196f, 0.46373632550239563f, 0.3037359416484833f, 0.5430523157119751f, 0.8069555163383484f, -0.784541666507721f, 0.4389880895614624f, 0.8280707001686096f, 0.9783501029014587f, 0.09478224068880081f, 0.7180055975914001f, 0.17885459959506989f, 0.3802911043167114f, -0.934336245059967f, 0.8866152167320251f, 0.4083269536495209f, 0.13559620082378387f, 0.5328042507171631f, 0.4098276197910309f, 0.347217857837677f, 0.798713207244873f, -0.8245806097984314f, 0.5181147456169128f, 0.7931937575340271f, 0.41026484966278076f, 0.3856710195541382f, 0.373583048582077f, 0.11136917769908905f, 0.7456255555152893f, -0.9853510856628418f, 0.15695978701114655f, 0.5570114254951477f, 0.9288700222969055f, 0.9244402050971985f, 0.00845795962959528f, 0.48026442527770996f, 0.00970788486301899f, -0.24416224658489227f, 0.3167271018028259f, 0.7748854756355286f, 0.06836779415607452f, 0.6267104148864746f, 0.11237563192844391f, 0.1840934455394745f, 0.8230218887329102f, -0.6467193365097046f, 0.7145395278930664f, 0.466351181268692f, 0.49258291721343994f, 0.28130149841308594f, 0.7418172955513f, 0.7672199606895447f, 0.9032040238380432f, -0.9031092524528503f, 0.6340506076812744f, 0.9461755156517029f, 0.588697075843811f, 0.54493647813797f, 0.7733676433563232f, 0.5608630776405334f, 0.35184812545776367f, -0.7605381011962891f, 0.641713559627533f, 0.754248321056366f, 0.5728342533111572f, 0.3062114715576172f, 0.8331708908081055f, 0.6855723857879639f, 0.8622698783874512f, -0.8337864875793457f, 0.798251748085022f, 0.566192090511322f, 0.7910361289978027f, 0.8763003349304199f, 0.33885717391967773f, 0.48742055892944336f, 0.09396817535161972f, -0.38339516520500183f, 0.6597850322723389f, 0.954533040523529f, 0.8496317267417908f, 0.3106779158115387f, 0.7934276461601257f, 0.6323543787002563f, 0.08664020895957947f, -0.6476525664329529f, 0.4291464686393738f, 0.1340765655040741f, 0.4815170168876648f, 0.5670095086097717f, 0.611595630645752f, 0.19573669135570526f, 0.28130781650543213f, -0.8743016719818115f, 0.3835296630859375f, 0.2748565971851349f, 0.21253396570682526f, 0.22749434411525726f, 0.3049834966659546f, 0.6572960019111633f, 0.4998962879180908f, -0.883074164390564f, 0.3071363866329193f, 0.7384701371192932f, 0.5924251079559326f, 0.03915597125887871f, 0.9743248224258423f, 0.49376773834228516f, 0.9118658900260925f, -0.4700604975223541f, 0.8920497894287109f, 0.4160010516643524f, 0.408297598361969f, 0.21141229569911957f, 0.11620836704969406f, 0.4105437994003296f, 0.5320114493370056f, -0.18856528401374817f, 0.5203372240066528f, 0.1807139813899994f, 0.0984998494386673f, 0.3709790110588074f, 0.41370025277137756f, 0.6511335372924805f, 0.12397836893796921f, -0.4255707561969757f, 0.9413118362426758f, 0.9159054756164551f, 0.6220860481262207f, 0.5769557356834412f, 0.17454537749290466f, 0.19819463789463043f, 0.976449728012085f, -0.6540547013282776f, 0.1360311508178711f, 0.28656962513923645f, 0.7834668159484863f, 0.4697988033294678f, 0.3359377384185791f, 0.07025076448917389f, 0.852911651134491f, -0.45579004287719727f, 0.7997028827667236f, 0.6003413796424866f, 0.6714098453521729f, 0.26274535059928894f, 0.6996769309043884f, 0.8637390732765198f, 0.9208822250366211f, -0.8148113489151001f, 0.2873149812221527f, 0.018533959984779358f, 0.40454721450805664f, 0.5324529409408569f, 0.6682968139648438f, 0.47746366262435913f, 0.7204135060310364f, -0.42841145396232605f, 0.5437923669815063f, 0.5602938532829285f, 0.27324268221855164f, 0.6377982497215271f, 0.260315477848053f, 0.5094169974327087f, 0.9166826605796814f, -0.16779720783233643f, 0.20200219750404358f, 0.47560834884643555f, 0.8062894344329834f, 0.9247194528579712f, 0.057654909789562225f, 0.07243754714727402f, 0.5193215012550354f, -0.4947398900985718f, 0.8203086256980896f, 0.4755927622318268f, 0.6012746095657349f, 0.4660547077655792f, 0.6490349769592285f, 0.8458938002586365f, 0.8652030825614929f, -0.08100073784589767f, 0.8445545434951782f, 0.7983452677726746f, 0.07294666022062302f, 0.5709821581840515f, 0.9265316724777222f, 0.5232241153717041f, 0.12652789056301117f, -0.9519023299217224f, 0.3355737626552582f, 0.96397465467453f, 0.49118489027023315f, 0.2783639132976532f, 0.14995646476745605f, 0.9762477874755859f, 0.337082177400589f, -0.45969370007514954f, 0.8225656151771545f, 0.845990002155304f, 0.5804345607757568f, 0.8694254159927368f, 0.4723188281059265f, 0.5079865455627441f, 0.7348557114601135f, -0.18301692605018616f, 0.37971431016921997f, 0.8136418461799622f, 0.15287908911705017f, 0.06579675525426865f, 0.08292166888713837f, 0.525653064250946f, 0.21008993685245514f, -0.10069660097360611f, 0.2669326961040497f, 0.04162199795246124f, 0.9423916339874268f, 0.4298986792564392f, 0.015383011661469936f, 0.20238851010799408f, 0.898056149482727f, -0.10652489215135574f, 0.6823959350585938f, 0.229584738612175f, 0.9882104992866516f, 0.41418421268463135f, 0.693964421749115f, 0.4961169958114624f, 0.7355911135673523f, -0.7573095560073853f, 0.00693438621237874f, 0.030813630670309067f, 0.3031596541404724f, 0.4849148988723755f, 0.4988643229007721f, 0.460254967212677f, 0.5301849246025085f, -0.27341288328170776f, 0.9410977363586426f, 0.37409090995788574f, 0.7762331366539001f, 0.18974174559116364f, 0.9752545952796936f, 0.830712080001831f, 0.4036361277103424f, -0.008925854228436947f, 0.6130003333091736f, 0.6014279127120972f, 0.11456998437643051f, 0.5912208557128906f, 0.7005008459091187f, 0.9232271313667297f, 0.5139895081520081f, -0.40460893511772156f, 0.5481821298599243f, 0.6461566686630249f, 0.03301868587732315f, 0.11347122490406036f, 0.9233617186546326f, 0.152518168091774f, 0.06813520193099976f, -0.9883592128753662f, 0.9151728749275208f, 0.6647768020629883f, 0.9075598120689392f, 0.5973328948020935f, 0.38738855719566345f, 0.10965053737163544f, 0.11807610839605331f, -0.410892516374588f, 0.1346031129360199f, 0.8399239778518677f, 0.7115781307220459f, 0.7153276801109314f, 0.28138431906700134f, 0.10955223441123962f, 0.29542940855026245f, -0.0199463851749897f, 0.513244092464447f, 0.7012351155281067f, 0.5820218324661255f, 0.5617906451225281f, 0.5269310474395752f, 0.32011890411376953f, 0.17699040472507477f, -0.4224364161491394f, 0.39432331919670105f, 0.4573318660259247f, 0.012459998950362206f, 0.4555487334728241f, 0.4259980618953705f, 0.8197453618049622f, 0.9412519335746765f, -0.29996639490127563f, 0.8311909437179565f, 0.33359095454216003f, 0.32857051491737366f, 0.6106536388397217f, 0.28302425146102905f, 0.43622058629989624f, 0.7710690498352051f, -0.8024534583091736f, 0.40372467041015625f, 0.7885494232177734f, 0.34697234630584717f, 0.24525511264801025f, 0.709457278251648f, 0.4752657115459442f, 0.40311625599861145f, -0.4828716218471527f, 0.8347325921058655f, 0.6762062907218933f, 0.8902520537376404f, 0.3497407138347626f, 0.7683879137039185f, 0.050267208367586136f, 0.11203885823488235f, -0.14805981516838074f, 0.42444103956222534f, 0.9598730206489563f, 0.5300918221473694f, 0.09945408999919891f, 0.7959142327308655f, 0.6177681684494019f, 0.413650244474411f, -0.6493286490440369f, 0.1142529770731926f, 0.07898908108472824f, 0.5237118005752563f, 0.1583205759525299f, 0.3160630464553833f, 0.369340717792511f, 0.005779657047241926f, -0.07413844019174576f, 0.3333490788936615f, 0.28202223777770996f, 0.11516982316970825f, 0.33353856205940247f, 0.7127359509468079f, 0.2253948152065277f, 0.8921172022819519f, -0.09445054084062576f, 0.6665833592414856f, 0.86155766248703f, 0.6336362957954407f, 0.09162380546331406f, 0.5061410069465637f, 0.7415611147880554f, 0.04654885455965996f, -0.8863176703453064f, 0.4213959276676178f, 0.20928779244422913f, 0.2791801393032074f, 0.38519206643104553f, 0.4409542679786682f, 0.8238697052001953f, 0.4709222614765167f, -0.9994170665740967f, 0.11013639718294144f, 0.9624192714691162f, 0.6911085247993469f, 0.25524836778640747f, 0.11537157744169235f, 0.0546974241733551f, 0.02731388621032238f, -0.4646587073802948f, 0.9595848321914673f, 0.034754592925310135f, 0.4831598997116089f, 0.5038207769393921f, 0.3850284516811371f, 0.08211974799633026f, 0.07774893194437027f, -0.4005559980869293f, 0.054622504860162735f, 0.6388478875160217f, 0.9854564070701599f, 0.4763551652431488f, 0.14461852610111237f, 0.43487149477005005f, 0.4785396456718445f, -0.517910361289978f, 0.8358681797981262f, 0.061636053025722504f, 0.9936400055885315f, 0.5935869812965393f, 0.1829226315021515f, 0.6234460473060608f, 0.692903995513916f, -0.31641438603401184f, 0.7378981113433838f, 0.7066237330436707f, 0.518663763999939f, 0.41772782802581787f, 0.6477614641189575f, 0.9239951372146606f, 0.6281599402427673f, -0.08379462361335754f, 0.48246824741363525f, 0.17297498881816864f, 0.15558385848999023f, 0.0898166224360466f, 0.2569980323314667f, 0.7896630167961121f, 0.1937466710805893f, -0.5759076476097107f, 0.4961196184158325f, 0.28931301832199097f, 0.013825787231326103f, 0.06129488721489906f, 0.12200658768415451f, 0.11845704913139343f, 0.5606785416603088f, -0.12478005141019821f, 0.03258177265524864f, 0.3776131868362427f, 0.7763128876686096f, 0.526127278804779f, 0.6839362978935242f, 0.7629942893981934f, 0.798098623752594f, -0.7388646006584167f, 0.27554404735565186f, 0.07084129750728607f, 0.507230281829834f, 0.6355627775192261f, 0.06489421427249908f, 0.09648265689611435f, 0.666388750076294f, -0.49250397086143494f, 0.6262591481208801f, 0.828015148639679f, 0.3933068513870239f, 0.43509748578071594f, 0.8482102751731873f, 0.2880594730377197f, 0.32999303936958313f, -0.10599210858345032f, 0.2913596034049988f, 0.36520683765411377f, 0.9326965808868408f, 0.8756411671638489f, 0.9534146189689636f, 0.8304978609085083f, 0.08254648000001907f, -0.01429942436516285f, 0.5047227144241333f, 0.866072416305542f, 0.9550105333328247f, 0.10363693535327911f, 0.40797412395477295f, 0.6211974024772644f, 0.4314241409301758f, -0.13354071974754333f, 0.9007981419563293f, 0.3732118308544159f, 0.7657490968704224f, 0.3081587553024292f, 0.3155788779258728f, 0.5903704762458801f, 0.6538416743278503f, -0.06597071886062622f, 0.8785164952278137f, 0.9442983865737915f, 0.5695474743843079f, 0.7861875295639038f, 0.8407166600227356f, 0.7587346434593201f, 0.3910781741142273f, -0.7411223649978638f, 0.025593917816877365f, 0.6022129654884338f, 0.7765277624130249f, 0.6026601791381836f, 0.12238750606775284f, 0.21633313596248627f, 0.6221901178359985f, -0.11173634231090546f, 0.02294248901307583f, 0.6678111553192139f, 0.7557833790779114f, 0.8082269430160522f, 0.3412841856479645f, 0.9771556854248047f, 0.23449110984802246f, -0.672619640827179f, 0.954516589641571f, 0.928536593914032f, 0.6188720464706421f, 0.9300125241279602f, 0.013745740987360477f, 0.9692131280899048f, 0.3043588697910309f, -0.05793431028723717f, 0.092820905148983f, 0.35839971899986267f, 0.10247908532619476f, 0.4317786991596222f, 0.17998994886875153f, 0.30980098247528076f, 0.45847633481025696f, -0.58791583776474f, 0.6976773738861084f, 0.9643348455429077f, 0.10354944318532944f, 0.7357712984085083f, 0.8988492488861084f, 0.4315457344055176f, 0.3226333558559418f, -0.6827950477600098f, 0.18216446042060852f, 0.6392117738723755f, 0.9396191835403442f, 0.7955552339553833f, 0.3705807328224182f, 0.07600590586662292f, 0.9371936917304993f, -0.903762698173523f, 0.3143598139286041f, 0.35902494192123413f, 0.402582585811615f, 0.9764310717582703f, 0.24897538125514984f, 0.3958474397659302f, 0.9405158162117004f, -0.7456753849983215f, 0.154984250664711f, 0.8522884249687195f, 0.7331743240356445f, 0.6066828966140747f, 0.28963136672973633f, 0.8271174430847168f, 0.6345546245574951f, -0.03368115797638893f, 0.8554050326347351f, 0.11593925207853317f, 0.7204561233520508f, 0.6885776519775391f, 0.7938138842582703f, 0.798760175704956f, 0.46550729870796204f, -0.1862531304359436f, 0.18288955092430115f, 0.6128473877906799f, 0.3886403441429138f, 0.5021353363990784f, 0.44303250312805176f, 0.23198360204696655f, 0.7042872309684753f, -0.01563834771513939f, 0.7065073847770691f, 0.31689831614494324f, 0.4950468838214874f, 0.36772745847702026f, 0.6304661631584167f, 0.8715285658836365f, 0.5367538332939148f, -0.3990761339664459f, 0.4247378408908844f, 0.8302890062332153f, 0.8612078428268433f, 0.6606297492980957f, 0.5401303768157959f, 0.3473518192768097f, 0.28175482153892517f, -0.9988607168197632f, 0.9457630515098572f, 0.29648134112358093f, 0.24130669236183167f, 0.9615662097930908f, 0.592602550983429f, 0.7167761921882629f, 0.35948634147644043f, -0.9181398153305054f, 0.6211276650428772f, 0.41269269585609436f, 0.2352580726146698f, 0.1254066526889801f, 0.7836343050003052f, 0.042384788393974304f, 0.6604835987091064f, -0.24692672491073608f, 0.3216858208179474f, 0.6702503561973572f, 0.42996758222579956f, 0.8211050033569336f, 0.6408615112304688f, 0.018819568678736687f, 0.7995181679725647f, -0.8751874566078186f, 0.9315544366836548f, 0.8254736065864563f, 0.3227740526199341f, 0.07228787988424301f, 0.13323892652988434f, 0.9273582696914673f, 0.02472880482673645f, -0.6116037964820862f, 0.858211100101471f, 0.6017765998840332f, 0.3445821702480316f, 0.19947358965873718f, 0.681469738483429f, 0.289979487657547f, 0.5292341709136963f, -0.6622585654258728f, 0.26427164673805237f, 0.8017955422401428f, 0.6459928154945374f, 0.35985618829727173f, 0.7878826260566711f, 0.11169370263814926f, 0.6844793558120728f, -0.6211872696876526f, 0.13172510266304016f, 0.2581871747970581f, 0.26538124680519104f, 0.7719117999076843f, 0.5447769165039062f, 0.1394077092409134f, 0.8602968454360962f, -0.8721170425415039f, 0.9479935169219971f, 0.4401629567146301f, 0.3609939217567444f, 0.48263975977897644f, 0.9453785419464111f, 0.9713846445083618f, 0.5741676092147827f, -0.7259726524353027f, 0.8086374998092651f, 0.6649003028869629f, 0.6263236403465271f, 0.2087559998035431f, 0.9926341772079468f, 0.015073558315634727f, 0.3843969702720642f, -0.29518261551856995f, 0.5891230702400208f, 0.9877641797065735f, 0.15991924703121185f, 0.2540220022201538f, 0.7318342924118042f, 0.7703856229782104f, 0.18767011165618896f, -0.584303081035614f, 0.19470886886119843f, 0.49668481945991516f, 0.49927818775177f, 0.4054120182991028f, 0.9333070516586304f, 0.5469200015068054f, 0.2769310474395752f, -0.08903832733631134f, 0.2079744189977646f, 0.6976343393325806f, 0.46172189712524414f, 0.4277840256690979f, 0.7468886971473694f, 0.7881622910499573f, 0.8619484305381775f, -0.5560230016708374f, 0.21221409738063812f, 0.8579829931259155f, 0.203148752450943f, 0.0014260773314163089f, 0.9102857708930969f, 0.5442507863044739f, 0.6612255573272705f, -0.07216430455446243f, 0.04265602305531502f, 0.6176335215568542f, 0.2820618152618408f, 0.5968285202980042f, 0.9594003558158875f, 0.46295857429504395f, 0.22060751914978027f, -0.93421471118927f, 0.6198104023933411f, 0.9592890739440918f, 0.047314055263996124f, 0.9632927179336548f, 0.283861368894577f, 0.6004738807678223f, 0.39464306831359863f, -0.7442575693130493f, 0.6335207223892212f, 0.9329321384429932f, 0.87264084815979f, 0.316421240568161f, 0.5232948660850525f, 0.17973895370960236f, 0.8896143436431885f, -0.22407206892967224f, 0.5006771087646484f, 0.5990402102470398f, 0.8767343163490295f, 0.4212596118450165f, 0.871325671672821f, 0.24401560425758362f, 0.7375674247741699f, -0.14338363707065582f, 0.8941770792007446f, 0.14849168062210083f, 0.3130738139152527f, 0.2591792047023773f, 0.5836896300315857f, 0.9150106310844421f, 0.3472922742366791f, -0.20156799256801605f, 0.19581568241119385f, 0.5609209537506104f, 0.011394036933779716f, 0.6691949963569641f, 0.19285449385643005f, 0.8221989870071411f, 0.2503623068332672f, -0.16539503633975983f, 0.2831535041332245f, 0.06847771257162094f, 0.8497394323348999f, 0.2713828980922699f, 0.43774139881134033f, 0.8395959138870239f, 0.12146678566932678f, -0.9949431419372559f, 0.6171038746833801f, 0.8910729289054871f, 0.36825308203697205f, 0.4021243453025818f, 0.7874592542648315f, 0.6897642612457275f, 0.5238743424415588f, -0.46815958619117737f, 0.9761747121810913f, 0.28623849153518677f, 0.3344619572162628f, 0.9265837669372559f, 0.1298314779996872f, 0.7922342419624329f, 0.30019551515579224f, -0.3696347177028656f, 0.6376219391822815f, 0.1906311959028244f, 0.8641852140426636f, 0.46151453256607056f, 0.8167998194694519f, 0.49314114451408386f, 0.31874001026153564f, -0.0655454620718956f, 0.6068906784057617f, 0.8730157017707825f, 0.4310432970523834f, 0.3395732343196869f, 0.2663499116897583f, 0.8203319311141968f, 0.6734212040901184f, -0.6644091606140137f, 0.2342272400856018f, 0.9012300968170166f, 0.048783671110868454f, 0.695155680179596f, 0.5148458480834961f, 0.8182777166366577f, 0.01306549645960331f, -0.3045329749584198f, 0.26653456687927246f, 0.8602606654167175f, 0.11331972479820251f, 0.17923802137374878f, 0.2535744309425354f, 0.64164799451828f, 0.7359617948532104f, -0.9049506783485413f, 0.9237626791000366f, 0.7972397208213806f, 0.5805189609527588f, 0.46275410056114197f, 0.09744288772344589f, 0.7521579265594482f, 0.9940513372421265f, -0.41795405745506287f, 0.09818294644355774f, 0.5522040128707886f, 0.20466116070747375f, 0.9099730849266052f, 0.3373175859451294f, 0.9530532360076904f, 0.619966447353363f, -0.8407560586929321f, 0.7741836905479431f, 0.25529494881629944f, 0.10631759464740753f, 0.8466027975082397f, 0.055116571485996246f, 0.9826256036758423f, 0.43109646439552307f, -0.7883049249649048f, 0.558485209941864f, 0.45147383213043213f, 0.46206122636795044f, 0.30036279559135437f, 0.4069038927555084f, 0.5262694954872131f, 0.7038315534591675f, -0.403573215007782f, 0.10089157521724701f, 0.6660589575767517f, 0.6895902156829834f, 0.488260418176651f, 0.30772942304611206f, 0.14399079978466034f, 0.11170220375061035f, -0.8992359638214111f, 0.25198155641555786f, 0.07868361473083496f, 0.9747737646102905f, 0.8480831980705261f, 0.3034217953681946f, 0.5236170887947083f, 0.8772394061088562f, -0.9232836961746216f, 0.25751471519470215f, 0.9777259230613708f, 0.43278399109840393f, 0.8648332357406616f, 0.4213023781776428f, 0.8418986797332764f, 0.6531408429145813f, -0.3129957318305969f, 0.8110479116439819f, 0.6645045280456543f, 0.7398321628570557f, 0.09291839599609375f, 0.20955084264278412f, 0.8827852606773376f, 0.3810119926929474f, -0.7615617513656616f, 0.9969717860221863f, 0.26591238379478455f, 0.8714447617530823f, 0.2424941211938858f, 0.8500034213066101f, 0.7416344285011292f, 0.6954221725463867f, -0.7465283870697021f, 0.23475365340709686f, 0.8677878379821777f, 0.2109764963388443f, 0.44122472405433655f, 0.5282690525054932f, 0.4050186276435852f, 0.5047649145126343f, -0.6915481090545654f, 0.9655858278274536f, 0.13721255958080292f, 0.32490479946136475f, 0.5612497925758362f, 0.1518552601337433f, 0.23502635955810547f, 0.10927096009254456f, -0.24524670839309692f, 0.11507613211870193f, 0.28388383984565735f, 0.40168488025665283f, 0.013063541613519192f, 0.08027047663927078f, 0.6248405575752258f, 0.614680826663971f, -0.9881605505943298f, 0.6617161631584167f, 0.6392874717712402f, 0.5079889893531799f, 0.9546558856964111f, 0.03509266674518585f, 0.12979258596897125f, 0.737791895866394f, -0.956970751285553f, 0.9853312373161316f, 0.3427862226963043f, 0.3792991638183594f, 0.3886089026927948f, 0.762086033821106f, 0.5297601222991943f, 0.8212588429450989f, -0.4048910140991211f, 0.6957205533981323f, 0.19319535791873932f, 0.8472160696983337f, 0.0315709188580513f, 0.806018054485321f, 0.2648499608039856f, 0.13785505294799805f, -0.787320077419281f, 0.3584090769290924f, 0.9174367189407349f, 0.08867167681455612f, 0.5269787311553955f, 0.17995446920394897f, 0.5067721605300903f, 0.1511850655078888f, -0.7439827919006348f, 0.12793156504631042f, 0.15623125433921814f, 0.9789940714836121f, 0.9437990784645081f, 0.4441514015197754f, 0.8346974849700928f, 0.5602847933769226f, -0.1627902090549469f, 0.6663910150527954f, 0.4338098168373108f, 0.7410517930984497f, 0.29611438512802124f, 0.6151582598686218f, 0.38692420721054077f, 0.061012156307697296f, -0.6667279601097107f, 0.7679318189620972f, 0.38812148571014404f, 0.3701811730861664f, 0.9101846814155579f, 0.08293933421373367f, 0.7664819955825806f, 0.11633492261171341f, -0.74760901927948f, 0.004263983108103275f, 0.92148357629776f, 0.2153126746416092f, 0.7510402798652649f, 0.950914740562439f, 0.30018362402915955f, 0.7003219723701477f, -0.2416999191045761f, 0.8764957189559937f, 0.23458431661128998f, 0.15198540687561035f, 0.5359652042388916f, 0.799979567527771f, 0.0845700055360794f, 0.860568642616272f, -0.34921810030937195f, 0.7676643133163452f, 0.6491870284080505f, 0.9619361162185669f, 0.9848409295082092f, 0.9693207740783691f, 0.32163169980049133f, 0.45136597752571106f, -0.8977629542350769f, 0.6249802112579346f, 0.5905187726020813f, 0.9022172093391418f, 0.5623435378074646f, 0.38295015692710876f, 0.4596315622329712f, 0.7405049204826355f, -0.33213260769844055f, 0.1867848038673401f, 0.505077064037323f, 0.05444416403770447f, 0.1707421839237213f, 0.2874520719051361f, 0.6503887176513672f, 0.12238400429487228f, -0.36702239513397217f, 0.8406921029090881f, 0.35129910707473755f, 0.17982825636863708f, 0.8744916319847107f, 0.9648523926734924f, 0.788057804107666f, 0.7599930167198181f, -0.3503512442111969f, 0.8087756037712097f, 0.31318849325180054f, 0.009901778772473335f, 0.20010262727737427f, 0.16116781532764435f, 0.5254855751991272f, 0.14596931636333466f, -0.057407356798648834f, 0.6809573769569397f, 0.439752459526062f, 0.9946645498275757f, 0.5435055494308472f, 0.725226879119873f, 0.2156447470188141f, 0.2640155255794525f, -0.5193167924880981f, 0.595082700252533f, 0.05638929083943367f, 0.584405779838562f, 0.8677568435668945f, 0.6149603724479675f, 0.30104929208755493f, 0.721737265586853f, -0.8921446800231934f, 0.4675838053226471f, 0.6639330983161926f, 0.11774782836437225f, 0.28965863585472107f, 0.1954650580883026f, 0.355337530374527f, 0.17442476749420166f, -0.6273512840270996f, 0.8599639534950256f, 0.7170019149780273f, 0.7297012209892273f, 0.20555514097213745f, 0.552720844745636f, 0.8064215183258057f, 0.15565364062786102f, -0.37503933906555176f, 0.8369659185409546f, 0.8669872879981995f, 0.31984657049179077f, 0.11765076220035553f, 0.9918588399887085f, 0.15771937370300293f, 0.9144057631492615f, -0.3235912024974823f, 0.6629010438919067f, 0.056677475571632385f, 0.11002695560455322f, 0.21752940118312836f, 0.07179030030965805f, 0.2883276045322418f, 0.5759541392326355f, -0.6372010707855225f, 0.6420190334320068f, 0.13327278196811676f, 0.7995483875274658f, 0.041188161820173264f, 0.48157450556755066f, 0.5005348920822144f, 0.5030037760734558f, -0.7571049332618713f, 0.996755063533783f, 0.4696432650089264f, 0.9045993685722351f, 0.5295789241790771f, 0.9077165722846985f, 0.15683813393115997f, 0.255439817905426f, -0.40165627002716064f, 0.9527212977409363f, 0.09121022373437881f, 0.8033525943756104f, 0.4441911280155182f, 0.5008941292762756f, 0.8825255632400513f, 0.3605731129646301f, -0.6701581478118896f, 0.05547160655260086f, 0.9759179949760437f, 0.8450019955635071f, 0.6641969084739685f, 0.2252500355243683f, 0.021426089107990265f, 0.5218903422355652f, -0.2613483965396881f, 0.5640990734100342f, 0.5425491333007812f, 0.30252718925476074f, 0.7069452404975891f, 0.32729363441467285f, 0.23671475052833557f, 0.6186963319778442f, -0.37853366136550903f, 0.44330456852912903f, 0.5852874517440796f, 0.20569536089897156f, 0.23712322115898132f, 0.37627580761909485f, 0.13656185567378998f, 0.15649837255477905f, -0.9071074724197388f, 0.8851686120033264f, 0.6298452019691467f, 0.2998923659324646f, 0.43353572487831116f, 0.8894169926643372f, 0.27133244276046753f, 0.5109109282493591f, -0.9188361763954163f, 0.6576882004737854f, 0.45623213052749634f, 0.8066568970680237f, 0.48107632994651794f, 0.4030013680458069f, 0.2688012421131134f, 0.0503869466483593f, -0.22386351227760315f, 0.19220493733882904f, 0.9998496770858765f, 0.4852096438407898f, 0.29877185821533203f, 0.3934405446052551f, 0.7141159176826477f, 0.10885825753211975f, -0.9943127036094666f, 0.8303973078727722f, 0.12212654948234558f, 0.2928909361362457f, 0.10890685021877289f, 0.1322995275259018f, 0.6613433361053467f, 0.696942150592804f, -0.20106689631938934f, 0.958639919757843f, 0.297679603099823f, 0.9060731530189514f, 0.32537519931793213f, 0.7319023609161377f, 0.2698710262775421f, 0.2483459711074829f, -0.48559749126434326f, 0.30843761563301086f, 0.5791342854499817f, 0.8723186254501343f, 0.3724954426288605f, 0.30085915327072144f, 0.9381599426269531f, 0.0877138078212738f, -0.6483923196792603f, 0.29325246810913086f, 0.4205971360206604f, 0.2857415974140167f, 0.2574368417263031f, 0.28995850682258606f, 0.5522850155830383f, 0.39361080527305603f, -0.3056158721446991f, 0.1267586350440979f, 0.5797008872032166f, 0.4117470383644104f, 0.2992078363895416f, 0.04905223101377487f, 0.8608720302581787f, 0.1911674439907074f, -0.0337311252951622f, 0.05716941878199577f, 0.5147520899772644f, 0.01762934774160385f, 0.0015902591403573751f, 0.2456277757883072f, 0.7720967531204224f, 0.8965550661087036f, -0.0841866061091423f, 0.8686405420303345f, 0.7331650257110596f, 0.3177855610847473f, 0.7376785278320312f, 0.986275315284729f, 0.751591145992279f, 0.37550416588783264f, -0.9978925585746765f, 0.2806253135204315f, 0.4466690719127655f, 0.93732088804245f, 0.7433355450630188f, 0.20734232664108276f, 0.2878016531467438f, 0.5444427132606506f, -0.412389874458313f, 0.3355221748352051f, 0.9661913514137268f, 0.48197296261787415f, 0.2605549395084381f, 0.9628284573554993f, 0.9825571179389954f, 0.26852113008499146f, -0.8116364479064941f, 0.15626803040504456f, 0.1925319880247116f, 0.5270895957946777f, 0.6981474161148071f, 0.907904863357544f, 0.686885416507721f, 0.6945272088050842f, -0.22835759818553925f, 0.37963157892227173f, 0.046815864741802216f, 0.5982253551483154f, 0.6001048684120178f, 0.776883065700531f, 0.16460442543029785f, 0.01748681254684925f, -0.3429003357887268f, 0.589046835899353f, 0.24039101600646973f, 0.48047226667404175f, 0.8475649952888489f, 0.21322980523109436f, 0.22910404205322266f, 0.6128541827201843f, -0.3221002519130707f, 0.7056020498275757f, 0.9307419657707214f, 0.3951186239719391f, 0.5290430188179016f, 0.02150852605700493f, 0.9387052059173584f, 0.8596096038818359f, -0.8058806657791138f, 0.6046236753463745f, 0.6911448240280151f, 0.42596882581710815f, 0.9322170615196228f, 0.7449386119842529f, 0.3720351457595825f, 0.7509231567382812f, -0.014653516001999378f, 0.5522019863128662f, 0.9664014577865601f, 0.6224545836448669f, 0.22985683381557465f, 0.5720829367637634f, 0.8626929521560669f, 0.1426069140434265f, -0.38297510147094727f, 0.2081989347934723f, 0.37272322177886963f, 0.5751729011535645f, 0.8864657878875732f, 0.8293857574462891f, 0.2123837172985077f, 0.03069806843996048f, -0.03952446207404137f, 0.22272488474845886f, 0.4728885293006897f, 0.8279077410697937f, 0.21706783771514893f, 0.5505533814430237f, 0.45116034150123596f, 0.9870542287826538f, -0.38378196954727173f, 0.3617563545703888f, 0.4341539442539215f, 0.42774876952171326f, 0.33415067195892334f, 0.7503829598426819f, 0.3287278115749359f, 0.871131956577301f, -0.8932732343673706f, 0.2953779399394989f, 0.6043586730957031f, 0.8079859018325806f, 0.6981144547462463f, 0.9866360425949097f, 0.046766385436058044f, 0.8975428938865662f, -0.12789620459079742f, 0.6555418372154236f, 0.7558274269104004f, 0.06729929894208908f, 0.12037663161754608f, 0.21799160540103912f, 0.3994172215461731f, 0.15424466133117676f, -0.05732070282101631f, 0.8375729918479919f, 0.9992215037345886f, 0.49286791682243347f, 0.5903722643852234f, 0.6501914262771606f, 0.8643896579742432f, 0.9217404127120972f, -0.05991965904831886f, 0.3536646068096161f, 0.7028996348381042f, 0.9103108048439026f, 0.15193991363048553f, 0.3741985857486725f, 0.7297923564910889f, 0.9826868772506714f, -0.3142128586769104f, 0.3908431828022003f, 0.9154449701309204f, 0.4841044545173645f, 0.341341495513916f, 0.8822973966598511f, 0.39885202050209045f, 0.7418305277824402f, -0.3183230757713318f, 0.8603256344795227f, 0.2124634087085724f, 0.14808155596256256f, 0.8915233016014099f, 0.15872983634471893f, 0.5986233949661255f, 0.05697786435484886f, -0.12405295670032501f, 0.7692000269889832f, 0.14155806601047516f, 0.930129885673523f, 0.21099334955215454f, 0.8279332518577576f, 0.8897152543067932f, 0.7737302184104919f, -0.7220988869667053f, 0.17812182009220123f, 0.08894242346286774f, 0.3890228569507599f, 0.8260707259178162f, 0.26011815667152405f, 0.4601847529411316f, 0.10397948324680328f, -0.13323035836219788f, 0.37271103262901306f, 0.002710179192945361f, 0.4242062568664551f, 0.3059524595737457f, 0.3005809783935547f, 0.14687693119049072f, 0.008333912119269371f, -0.38189709186553955f, 0.020953036844730377f, 0.6521888971328735f, 0.6589439511299133f, 0.906968355178833f, 0.024040227755904198f, 0.6378615498542786f, 0.9480423927307129f, -0.6481318473815918f, 0.12697286903858185f, 0.4336959719657898f, 0.7241360545158386f, 0.8707826137542725f, 0.7920971512794495f, 0.2870766222476959f, 0.6825985312461853f, -0.9385056495666504f, 0.5320359468460083f, 0.9448765516281128f, 0.8049640655517578f, 0.8989481925964355f, 0.08528602123260498f, 0.205366313457489f, 0.8237550854682922f, -0.28310272097587585f, 0.6187649965286255f, 0.4676693081855774f, 0.7800388932228088f, 0.48069292306900024f, 0.8727925419807434f, 0.5406463742256165f, 0.043684862554073334f, -0.7940405607223511f, 0.7776786088943481f, 0.38798850774765015f, 0.9636895060539246f, 0.43188032507896423f, 0.697583019733429f, 0.049277134239673615f, 0.968029797077179f, -0.6806850433349609f, 0.4362410604953766f, 0.6425647139549255f, 0.9670255184173584f, 0.9780343770980835f, 0.06515812873840332f, 0.8592169284820557f, 0.26453202962875366f, -0.39224594831466675f, 0.21566124260425568f, 0.5301984548568726f, 0.8825157880783081f, 0.9234338402748108f, 0.5320540070533752f, 0.32565975189208984f, 0.6343507170677185f, -0.1109059676527977f, 0.574160635471344f, 0.13296587765216827f, 0.9018316864967346f, 0.5688161253929138f, 0.43655046820640564f, 0.6994112133979797f, 0.35886457562446594f, -0.7365073561668396f, 0.46971237659454346f, 0.4443962872028351f, 0.6460726261138916f, 0.8415731191635132f, 0.9269930124282837f, 0.591148853302002f, 0.8145018219947815f, -0.6014907360076904f, 0.20646218955516815f, 0.518303394317627f, 0.6760032773017883f, 0.6472018361091614f, 0.057544857263565063f, 0.015988022089004517f, 0.5029685497283936f, -0.08250493556261063f, 0.29067450761795044f, 0.32210761308670044f, 0.12022492289543152f, 0.2470802217721939f, 0.354261577129364f, 0.9291468858718872f, 0.9260110259056091f, -0.4306906461715698f, 0.9055190682411194f, 0.42322927713394165f, 0.19105392694473267f, 0.5226914882659912f, 0.8537940979003906f, 0.6336831450462341f, 0.8504210114479065f, -0.3353462219238281f, 0.6168761849403381f, 0.06020846217870712f, 0.07600845396518707f, 0.9800004363059998f, 0.12283428758382797f, 0.549239993095398f, 0.30757632851600647f, -0.7638946175575256f, 0.7865796685218811f, 0.01465314906090498f, 0.5957459807395935f, 0.13168230652809143f, 0.673198401927948f, 0.3184095025062561f, 0.08066394180059433f, -0.3201299011707306f, 0.1541946530342102f, 0.4491015076637268f, 0.5092358589172363f, 0.8692843317985535f, 0.859748899936676f, 0.7541651725769043f, 0.7439422011375427f, -0.9231047034263611f, 0.8894770741462708f, 0.8530313968658447f, 0.8135825991630554f, 0.24425852298736572f, 0.5871891379356384f, 0.5469972491264343f, 0.08029017597436905f, -0.8482852578163147f, 0.8629912734031677f, 0.2697204053401947f, 0.7952772378921509f, 0.9467086791992188f, 0.18852190673351288f, 0.6913992166519165f, 0.834727942943573f, -0.9912371635437012f, 0.4447990953922272f, 0.07562123239040375f, 0.9170410633087158f, 0.17254184186458588f, 0.8692681789398193f, 0.14908166229724884f, 0.01268179900944233f, -0.5882204174995422f, 0.2928040027618408f, 0.9023088216781616f, 0.24827761948108673f, 0.20135633647441864f, 0.18908846378326416f, 0.04161985218524933f, 0.685034990310669f, -0.7901329398155212f, 0.08941122889518738f, 0.27603012323379517f, 0.9117317795753479f, 0.30440792441368103f, 0.06247791647911072f, 0.6174769997596741f, 0.5810073018074036f, -0.5840834379196167f, 0.2992589473724365f, 0.27895262837409973f, 0.47697997093200684f, 0.5592089891433716f, 0.05821941792964935f, 0.9468029141426086f, 0.9642845988273621f, -0.5269272327423096f, 0.43833887577056885f, 0.4467412829399109f, 0.7587758302688599f, 0.41631701588630676f, 0.19755473732948303f, 0.49746233224868774f, 0.3634263873100281f, -0.9582734704017639f, 0.5576706528663635f, 0.8625293374061584f, 0.0852573812007904f, 0.3829641044139862f, 0.7110127806663513f, 0.6637140512466431f, 0.032761771231889725f, -0.2065727263689041f, 0.17351192235946655f, 0.6931246519088745f, 0.8023019433021545f, 0.9950640797615051f, 0.0014781201025471091f, 0.5902861952781677f, 0.6843980550765991f, -0.3796055018901825f, 0.7744323015213013f, 0.9633086919784546f, 0.9609535336494446f, 0.990933358669281f, 0.8937370181083679f, 0.44185611605644226f, 0.41022101044654846f, -0.9724262356758118f, 0.35984253883361816f, 0.0017585002351552248f, 0.10243210196495056f, 0.7663994431495667f, 0.5955460667610168f, 0.48203662037849426f, 0.8583953380584717f, -0.3250900208950043f, 0.2992374897003174f, 0.4439338743686676f, 0.3272952139377594f, 0.9199041724205017f, 0.701744794845581f, 0.07294254004955292f, 0.7615912556648254f, -0.6568779349327087f, 0.5773929953575134f, 0.4684869050979614f, 0.8655313849449158f, 0.3252388834953308f, 0.723703920841217f, 0.5397276878356934f, 0.1262511909008026f, -0.49639859795570374f, 0.7330117225646973f, 0.6165671348571777f, 0.42476171255111694f, 0.08251085877418518f, 0.8422832489013672f, 0.6213581562042236f, 0.1764046549797058f, -0.3531774878501892f, 0.6972469687461853f, 0.4918070435523987f, 0.7047173380851746f, 0.47288352251052856f, 0.6920251846313477f, 0.6949927806854248f, 0.3888739049434662f, -0.18786542117595673f, 0.0506928376853466f, 0.3081478774547577f, 0.24291928112506866f, 0.8484292030334473f, 0.7502049803733826f, 0.7877904772758484f, 0.8223394751548767f, -0.9420867562294006f, 0.4930473268032074f, 0.6538440585136414f, 0.05623745545744896f, 0.2180124819278717f, 0.4099156856536865f, 0.07076122611761093f, 0.8950555920600891f, -0.9265369176864624f, 0.35778161883354187f, 0.5800959467887878f, 0.494147390127182f, 0.6572495698928833f, 0.7231204509735107f, 0.1960982084274292f, 0.3870161175727844f, -0.1263730376958847f, 0.5374763607978821f, 0.15792813897132874f, 0.712493360042572f, 0.05586128309369087f, 0.8915008306503296f, 0.4192187786102295f, 0.3728117346763611f, -0.9631701707839966f, 0.767774760723114f, 0.06238870695233345f, 0.7189014554023743f, 0.8150330781936646f, 0.08465985953807831f, 0.7600553035736084f, 0.36219143867492676f, -0.33250612020492554f, 0.6053124070167542f, 0.7389784455299377f, 0.4562002718448639f, 0.03517691418528557f, 0.3673893213272095f, 0.7301834225654602f, 0.004493572749197483f, -0.24908196926116943f, 0.1410229206085205f, 0.07152071595191956f, 0.3022385537624359f, 0.3836750388145447f, 0.9935259819030762f, 0.3506718575954437f, 0.39111143350601196f, -0.3227382302284241f, 0.0016191666945815086f, 0.7449867129325867f, 0.3465649485588074f, 0.6828774809837341f, 0.6018246412277222f, 0.2575244605541229f, 0.7921215295791626f, -0.11354345828294754f, 0.79552161693573f, 0.5069249868392944f, 0.3593067526817322f, 0.7164254188537598f, 0.5356458425521851f, 0.575870931148529f, 0.8996071815490723f, -0.2295277863740921f, 0.013797162100672722f, 0.6257302761077881f, 0.5427382588386536f, 0.6698080897331238f, 0.42511042952537537f, 0.7426242232322693f, 0.058919768780469894f, -0.834260106086731f, 0.6530179977416992f, 0.3292534351348877f, 0.3154662251472473f, 0.9381086230278015f, 0.20410767197608948f, 0.18707279860973358f, 0.8126471042633057f, -0.3523629605770111f, 0.07862962782382965f, 0.3640306890010834f, 0.020911473780870438f, 0.5063567757606506f, 0.4081230163574219f, 0.15156592428684235f, 0.801247239112854f, -0.3236306309700012f, 0.5196754336357117f, 0.5732837319374084f, 0.012595818378031254f, 0.4702182710170746f, 0.9728786945343018f, 0.9843611121177673f, 0.45863473415374756f, -0.48318302631378174f, 0.7455740571022034f, 0.9766472578048706f, 0.1943710297346115f, 0.25262993574142456f, 0.6119558215141296f, 0.2372118979692459f, 0.2626838684082031f, -0.69432133436203f, 0.9896538257598877f, 0.403213769197464f, 0.19644607603549957f, 0.2567533850669861f, 0.45829251408576965f, 0.9901021122932434f, 0.9470375776290894f, -0.9825393557548523f, 0.9092210531234741f, 0.9772028923034668f, 0.26596131920814514f, 0.7384533286094666f, 0.6457648277282715f, 0.44226697087287903f, 0.3154626190662384f, -0.06683558970689774f, 0.24812129139900208f, 0.011178774759173393f, 0.31760939955711365f, 0.14057131111621857f, 0.5890153646469116f, 0.7321844100952148f, 0.2204936146736145f, -0.47417402267456055f, 0.17864488065242767f, 0.2517032325267792f, 0.14916491508483887f, 0.057831913232803345f, 0.8800539970397949f, 0.03591521456837654f, 0.3002088665962219f, -0.8887231349945068f, 0.5657685995101929f, 0.8471734523773193f, 0.8068514466285706f, 0.020612815394997597f, 0.3523499071598053f, 0.04631650447845459f, 0.42858797311782837f, -0.3892003893852234f, 0.15306277573108673f, 0.9933003783226013f, 0.37263983488082886f, 0.32101303339004517f, 0.702405571937561f, 0.12630867958068848f, 0.9787499904632568f, -0.7703548073768616f, 0.8389214873313904f, 0.07198543846607208f, 0.4211859703063965f, 0.12251060456037521f, 0.8662732839584351f, 0.817354679107666f, 0.878930389881134f, -0.8299947381019592f, 0.4211319088935852f, 0.7734254002571106f, 0.9168877601623535f, 0.01438058726489544f, 0.795996367931366f, 0.522448718547821f, 0.18086384236812592f, -0.7328550219535828f, 0.06336317956447601f, 0.7271295189857483f, 0.40785616636276245f, 0.6756390333175659f, 0.2192845642566681f, 0.3469781279563904f, 0.3405124247074127f, -0.2999340295791626f, 0.46807727217674255f, 0.8703572154045105f, 0.34142860770225525f, 0.701223611831665f, 0.9523027539253235f, 0.5044273138046265f, 0.12308702617883682f, -0.7034080028533936f, 0.19048941135406494f, 0.7293766140937805f, 0.13779960572719574f, 0.27325934171676636f, 0.690116286277771f, 0.6512118577957153f, 0.7342364192008972f, -0.5479070544242859f, 0.6180860996246338f, 0.09576866775751114f, 0.84699946641922f, 0.3002205491065979f, 0.7711268663406372f, 0.8530663251876831f, 0.7560414671897888f, -0.5167146325111389f, 0.028851529583334923f, 0.9529917240142822f, 0.4702768623828888f, 0.7476068139076233f, 0.3109476864337921f, 0.9018705487251282f, 0.13337425887584686f, -0.7372015714645386f, 0.2909424602985382f, 0.8207889795303345f, 0.5794481635093689f, 0.7863816022872925f, 0.9381285905838013f, 0.2697434723377228f, 0.4768868088722229f, -0.3167046010494232f, 0.005721201188862324f, 0.2577938735485077f, 0.9345535039901733f, 0.6765194535255432f, 0.06257711350917816f, 0.393530011177063f, 0.9635814428329468f, -0.8156911134719849f, 0.45842844247817993f, 0.6758660674095154f, 0.34621328115463257f, 0.8534374833106995f, 0.8356568217277527f, 0.525516927242279f, 0.09442596137523651f, -0.645244836807251f, 0.6898002624511719f, 0.4159514009952545f, 0.8526154160499573f, 0.48746246099472046f, 0.7124136090278625f, 0.6219274401664734f, 0.5100529193878174f, -0.24025416374206543f, 0.5143436193466187f, 0.7778511047363281f, 0.2633451223373413f, 0.8729451298713684f, 0.667363703250885f, 0.11897198855876923f, 0.8945607542991638f, -0.6999271512031555f, 0.26257848739624023f, 0.4510381817817688f, 0.780704915523529f, 0.5954321026802063f, 0.6014936566352844f, 0.036174315959215164f, 0.042144209146499634f, -0.5799720883369446f, 0.9078604578971863f, 0.02697613462805748f, 0.7835837006568909f, 0.9513658285140991f, 0.4000023305416107f, 0.42930126190185547f, 0.16090472042560577f, -0.7322884202003479f, 0.9502310752868652f, 0.23232346773147583f, 0.6098822951316833f, 0.07562693953514099f, 0.9836245179176331f, 0.2907206118106842f, 0.32781982421875f, -0.7815368175506592f, 0.26448333263397217f, 0.5419425368309021f, 0.9448872804641724f, 0.975286602973938f, 0.1973162442445755f, 0.18936878442764282f, 0.7666527628898621f, -0.8192943930625916f, 0.5753176212310791f, 0.7220736145973206f, 0.5380356907844543f, 0.7760536670684814f, 0.11792400479316711f, 0.44381335377693176f, 0.21018780767917633f, -0.9399087429046631f, 0.38282766938209534f, 0.6841317415237427f, 0.11663094162940979f, 0.8218046426773071f, 0.2605915367603302f, 0.4003916382789612f, 0.7573870420455933f, -0.24580775201320648f, 0.1826891005039215f, 0.6927310824394226f, 0.49349159002304077f, 0.7270998954772949f, 0.11495024710893631f, 0.4858814775943756f, 0.04188001528382301f, -0.5420323610305786f, 0.21003501117229462f, 0.08245697617530823f, 0.7969885468482971f, 0.7400672435760498f, 0.8392943739891052f, 0.3898865580558777f, 0.7862509489059448f, -0.14249718189239502f, 0.7369590401649475f, 0.6000670194625854f, 0.6654218435287476f, 0.10495324432849884f, 0.9554861783981323f, 0.4865725636482239f, 0.21281743049621582f, -0.01989348605275154f, 0.0483294352889061f, 0.6825946569442749f, 0.09779015183448792f, 0.4711710214614868f, 0.4006771445274353f, 0.6339776515960693f, 0.18884879350662231f, -0.34647393226623535f, 0.8398820161819458f, 0.6316810846328735f, 0.7373176217079163f, 0.7384556531906128f, 0.19085721671581268f, 0.2058320939540863f, 0.865280032157898f, -0.9332506656646729f, 0.7108270525932312f, 0.6657335162162781f, 0.18934699892997742f, 0.7957866787910461f, 0.5824907422065735f, 0.17394377291202545f, 0.7530060410499573f, -0.8945919871330261f, 0.15846166014671326f, 0.00971499178558588f, 0.5923409461975098f, 0.5069420337677002f, 0.2549794316291809f, 0.31643450260162354f, 0.7914447784423828f, -0.46804314851760864f, 0.6696497201919556f, 0.7215604186058044f, 0.04533740133047104f, 0.5200772881507874f, 0.07125519216060638f, 0.9293013215065002f, 0.04898807033896446f, -0.5964076519012451f, 0.35966652631759644f, 0.5498558878898621f, 0.7155109643936157f, 0.05427718535065651f, 0.43460381031036377f, 0.9211729764938354f, 0.5766322612762451f, -0.7172203063964844f, 0.6798092722892761f, 0.8827467560768127f, 0.5536670088768005f, 0.8901135921478271f, 0.6956885457038879f, 0.7480291724205017f, 0.3659687638282776f, -0.295169472694397f, 0.07144948840141296f, 0.9793951511383057f, 0.3130967915058136f, 0.5567444562911987f, 0.025519125163555145f, 0.08874261379241943f, 0.3808027505874634f, -0.8734635710716248f, 0.9093502759933472f, 0.500512957572937f, 0.9070951342582703f, 0.16423733532428741f, 0.6916522979736328f, 0.4262479543685913f, 0.2230689525604248f, -0.2527484893798828f, 0.9649089574813843f, 0.6318374872207642f, 0.9650604128837585f, 0.4106561243534088f, 0.017621420323848724f, 0.2963758409023285f, 0.008823653683066368f, -0.6429600715637207f, 0.846705436706543f, 0.9732060432434082f, 0.5321859121322632f, 0.574695885181427f, 0.8566172122955322f, 0.373982697725296f, 0.2349129021167755f, -0.8666837811470032f, 0.504971444606781f, 0.7965521216392517f, 0.46822628378868103f, 0.9488915205001831f, 0.48033127188682556f, 0.27764198184013367f, 0.2926288843154907f, -0.15181571245193481f, 0.09997806698083878f, 0.9959989190101624f, 0.8222100138664246f, 0.6993786096572876f, 0.07953136414289474f, 0.31690508127212524f, 0.8474339842796326f, -0.7398325800895691f, 0.7257754802703857f, 0.3364482820034027f, 0.09355079382658005f, 0.10359986871480942f, 0.6413685083389282f, 0.7808670401573181f, 0.6184114813804626f, -0.5584026575088501f, 0.9640134572982788f, 0.5009971857070923f, 0.08599529415369034f, 0.21771349012851715f, 0.9118973016738892f, 0.5336120128631592f, 0.7623555064201355f, -0.787677526473999f, 0.06939037144184113f, 0.3502340614795685f, 0.0008081454434432089f, 0.39979276061058044f, 0.11219709366559982f, 0.27008265256881714f, 0.2564159035682678f, -0.5447825193405151f, 0.491603821516037f, 0.18084575235843658f, 0.7774885892868042f, 0.39557042717933655f, 0.5624005198478699f, 0.2891331911087036f, 0.18092738091945648f, -0.20311003923416138f, 0.7252472639083862f, 0.624764621257782f, 0.016761384904384613f, 0.03645152226090431f, 0.3906906843185425f, 0.18491782248020172f, 0.5073743462562561f, -0.09918838739395142f, 0.5939717292785645f, 0.3750513195991516f, 0.6661867499351501f, 0.5002310276031494f, 0.741568922996521f, 0.30793389678001404f, 0.6142239570617676f, -0.944080114364624f, 0.6929060816764832f, 0.2667180299758911f, 0.03605471923947334f, 0.5029687881469727f, 0.8604825735092163f, 0.9743987917900085f, 0.5805802345275879f, -0.3897370994091034f, 0.047901496291160583f, 0.5571076273918152f, 0.15307928621768951f, 0.9132369756698608f, 0.5191807150840759f, 0.7434471845626831f, 0.33641424775123596f, -0.6729034781455994f, 0.5002120733261108f, 0.7373862862586975f, 0.9074085354804993f, 0.8213053941726685f, 0.03461793065071106f, 0.4830297827720642f, 0.8210756778717041f, -0.5100035071372986f, 0.9969193339347839f, 0.10539045929908752f, 0.2517381012439728f, 0.38817670941352844f, 0.09194637089967728f, 0.7361150979995728f, 0.785252034664154f, -0.37071889638900757f, 0.4045695662498474f, 0.9824291467666626f, 0.10613032430410385f, 0.48895812034606934f, 0.7798752188682556f, 0.1572055071592331f, 0.88156658411026f, -0.07068455964326859f, 0.23272758722305298f, 0.36021876335144043f, 0.1848899871110916f, 0.13165076076984406f, 0.36683347821235657f, 0.5039734840393066f, 0.5396592020988464f, -0.7678109407424927f, 0.8085659146308899f, 0.8054336905479431f, 0.8516414165496826f, 0.9514042139053345f, 0.399980753660202f, 0.8418750762939453f, 0.19323118031024933f, -0.3814204931259155f, 0.38941314816474915f, 0.10128913819789886f, 0.7301215529441833f, 0.43767091631889343f, 0.31926798820495605f, 0.18015216290950775f, 0.2161940187215805f, -0.15663784742355347f, 0.9481244683265686f, 0.2548125684261322f, 0.18101735413074493f, 0.048459623008966446f, 0.7322942018508911f, 0.8113926649093628f, 0.7409518957138062f, -0.2561960816383362f, 0.0036534692626446486f, 0.0074430485256016254f, 0.16114257276058197f, 0.8115869760513306f, 0.19553042948246002f, 0.44845542311668396f, 0.7302870154380798f, -0.2671283483505249f, 0.3387623429298401f, 0.7116662859916687f, 0.39683079719543457f, 0.3906329274177551f, 0.7642868161201477f, 0.8383406400680542f, 0.6529095768928528f, -0.21841251850128174f, 0.4570530951023102f, 0.649882972240448f, 0.4060545861721039f, 0.12225787341594696f, 0.8986129760742188f, 0.7477558851242065f, 0.9233649969100952f, -0.5561463832855225f, 0.5299481153488159f, 0.25158193707466125f, 0.40054067969322205f, 0.8130883574485779f, 0.9000774621963501f, 0.8956478238105774f, 0.15976721048355103f, -0.11559862643480301f, 0.7816242575645447f, 0.2238849699497223f, 0.059175483882427216f, 0.02593705989420414f, 0.9798725247383118f, 0.8630113005638123f, 0.5946632027626038f, -0.3270162045955658f, 0.6598746180534363f, 0.4395730495452881f, 0.5281118154525757f, 0.3040635287761688f, 0.42277026176452637f, 0.41819238662719727f, 0.4835304021835327f, -0.8049959540367126f, 0.5482285618782043f, 0.03360256552696228f, 0.4310809373855591f, 0.3065752685070038f, 0.8323973417282104f, 0.5008170008659363f, 0.9077177047729492f, -0.9143469929695129f, 0.9554517865180969f, 0.5267784595489502f, 0.471963107585907f, 0.36863693594932556f, 0.8857070803642273f, 0.47662463784217834f, 0.5948560237884521f, -0.14174111187458038f, 0.5343092679977417f, 0.002266878494992852f, 0.9040429592132568f, 0.16995364427566528f, 0.663605809211731f, 0.8657029867172241f, 0.03585032746195793f, -0.3350223898887634f, 0.6782559156417847f, 0.17074351012706757f, 0.5769646167755127f, 0.9065242409706116f, 0.7574099898338318f, 0.3718809485435486f, 0.2575570344924927f, -0.9845151901245117f, 0.8677229285240173f, 0.8530397415161133f, 0.4874482750892639f, 0.11350128054618835f, 0.6897880434989929f, 0.6846539378166199f, 0.43442240357398987f, -0.945733368396759f, 0.8453440070152283f, 0.9616429209709167f, 0.11384674161672592f, 0.2493453472852707f, 0.8480675220489502f, 0.833527147769928f, 0.835878849029541f, -0.789342999458313f, 0.2103295624256134f, 0.1478305459022522f, 0.17373929917812347f, 0.5214487910270691f, 0.6594905853271484f, 0.5636882781982422f, 0.21764503419399261f, -0.40220576524734497f, 0.8325750231742859f, 0.47666800022125244f, 0.7208366394042969f, 0.9633928537368774f, 0.31721052527427673f, 0.7862592935562134f, 0.1927807331085205f, -0.9481651782989502f, 0.7259020805358887f, 0.5727611184120178f, 0.3671380579471588f, 0.36212578415870667f, 0.394866019487381f, 0.18779034912586212f, 0.6736065149307251f, -0.5179552435874939f, 0.2881609797477722f, 0.2995147705078125f, 0.23230192065238953f, 0.46498915553092957f, 0.6851158142089844f, 0.3285496234893799f, 0.9531189203262329f, -0.9376148581504822f, 0.8338908553123474f, 0.894860029220581f, 0.5462207794189453f, 0.9030287861824036f, 0.514670193195343f, 0.9220023155212402f, 0.21256600320339203f, -0.16951854526996613f, 0.5446107387542725f, 0.8475713729858398f, 0.3646290600299835f, 0.9923233985900879f, 0.35749301314353943f, 0.05060947313904762f, 0.07440236210823059f, -0.5903186202049255f, 0.07611832022666931f, 0.7891684174537659f, 0.4165467917919159f, 0.8562824130058289f, 0.4273848533630371f, 0.06152566894888878f, 0.4197486937046051f, -0.9732921719551086f, 0.8623043298721313f, 0.5333186388015747f, 0.2628508508205414f, 0.3637881875038147f, 0.9259710907936096f, 0.5370128154754639f, 0.8624117374420166f, -0.8220005035400391f, 0.9940534830093384f, 0.05793985351920128f, 0.6502689719200134f, 0.42209210991859436f, 0.7822222113609314f, 0.8949398398399353f, 0.40254974365234375f, -0.8964766263961792f, 0.8164166212081909f, 0.7002978324890137f, 0.8186649680137634f, 0.29365092515945435f, 0.7294096350669861f, 0.874141275882721f, 0.9275861978530884f, -0.842782199382782f, 0.7879704833030701f, 0.46593981981277466f, 0.9638135433197021f, 0.7772975564002991f, 0.22403670847415924f, 0.8113394379615784f, 0.03450383245944977f, -0.09057919681072235f, 0.5024442672729492f, 0.39362332224845886f, 0.6229113936424255f, 0.1155877634882927f, 0.4239373207092285f, 0.5425839424133301f, 0.2928585708141327f, -0.8539450168609619f, 0.41937440633773804f, 0.13340549170970917f, 0.8897327780723572f, 0.5145988464355469f, 0.9380345344543457f, 0.7444042563438416f, 0.7215725183486938f, -0.902769923210144f, 0.9699739813804626f, 0.34040433168411255f, 0.5498762726783752f, 0.24392995238304138f, 0.7741461396217346f, 0.45956769585609436f, 0.9302864074707031f, -0.3905089199542999f, 0.6643845438957214f, 0.40086767077445984f, 0.6490750908851624f, 0.9787843227386475f, 0.4338560700416565f, 0.6886391043663025f, 0.40331578254699707f, -0.17090477049350739f, 0.3822140693664551f, 0.4659942090511322f, 0.24876300990581512f, 0.003109379205852747f, 0.5636481642723083f, 0.8364142179489136f, 0.6073921322822571f, -0.5111057758331299f, 0.25947582721710205f, 0.18419060111045837f, 0.9107294082641602f, 0.22529052197933197f, 0.5474758744239807f, 0.49324047565460205f, 0.8607977628707886f, -0.2635978162288666f, 0.572068989276886f, 0.5574241876602173f, 0.11985413730144501f, 0.935003399848938f, 0.5093207955360413f, 0.29598522186279297f, 0.17425067722797394f, -0.5570917129516602f, 0.9492963552474976f, 0.9716888070106506f, 0.7972239851951599f, 0.06839033216238022f, 0.6385146379470825f, 0.33058813214302063f, 0.4130968153476715f, -0.5782682299613953f, 0.5090876817703247f, 0.6993298530578613f, 0.8476294875144958f, 0.03531721606850624f, 0.20594345033168793f, 0.4206443428993225f, 0.30785760283470154f, -0.17403742671012878f, 0.5137488842010498f, 0.057210784405469894f, 0.11691907793283463f, 0.11476697027683258f, 0.09943987429141998f, 0.38549453020095825f, 0.584226131439209f, -0.9718912839889526f, 0.76457679271698f, 0.14563991129398346f, 0.17349952459335327f, 0.9088607430458069f, 0.4144786298274994f, 0.6274221539497375f, 0.19264592230319977f, -0.4925897717475891f, 0.9839274883270264f, 0.8766404390335083f, 0.24805927276611328f, 0.5756791830062866f, 0.018433380872011185f, 0.27865538001060486f, 0.6270867586135864f, -0.03016280010342598f, 0.7577951550483704f, 0.9548195004463196f, 0.7672468423843384f, 0.762125551700592f, 0.4231509864330292f, 0.4281834065914154f, 0.34565800428390503f, -0.7102309465408325f, 0.48849359154701233f, 0.12874631583690643f, 0.7028597593307495f, 0.7143552303314209f, 0.4919443130493164f, 0.29798951745033264f, 0.05977911129593849f, -0.3337843716144562f, 0.872505247592926f, 0.5492419600486755f, 0.715897262096405f, 0.07099982351064682f, 0.6579394340515137f, 0.4387541711330414f, 0.7458181977272034f, -0.9377562999725342f, 0.5084964036941528f, 0.5052834749221802f, 0.42792758345603943f, 0.6310713291168213f, 0.2291368544101715f, 0.036524202674627304f, 0.47499680519104004f, -0.5839069485664368f, 0.3040829002857208f, 0.5352731347084045f, 0.9429923295974731f, 0.030197469517588615f, 0.520656168460846f, 0.8171201944351196f, 0.6128524541854858f, -0.32454612851142883f, 0.536297619342804f, 0.13308773934841156f, 0.6012122631072998f, 0.14250776171684265f, 0.7318201661109924f, 0.870216429233551f, 0.3008359968662262f, -0.6645738482475281f, 0.6487786769866943f, 0.42854544520378113f, 0.009441751055419445f, 0.1842162162065506f, 0.7532262206077576f, 0.5578020811080933f, 0.8619926571846008f, -0.4865431487560272f, 0.5634554028511047f, 0.9166261553764343f, 0.7623153328895569f, 0.6381914615631104f, 0.5762360692024231f, 0.5835548043251038f, 0.12911178171634674f, -0.8762557506561279f, 0.6140825748443604f, 0.44769683480262756f, 0.40269356966018677f, 0.2720124125480652f, 0.08659665286540985f, 0.7844828963279724f, 0.9448928236961365f, -0.8198423981666565f, 0.1992732733488083f, 0.22337165474891663f, 0.8354431986808777f, 0.9671014547348022f, 0.20708343386650085f, 0.8696221709251404f, 0.4380056858062744f, -0.6285136938095093f, 0.5150378942489624f, 0.6589917540550232f, 0.22535215318202972f, 0.4937838613986969f, 0.9835681915283203f, 0.33521050214767456f, 0.7720932960510254f, -0.6912242770195007f, 0.4273936450481415f, 0.8148806691169739f, 0.5573092699050903f, 0.20583216845989227f, 0.9298247694969177f, 0.7527887225151062f, 0.33079373836517334f, -0.1115109771490097f, 0.09755820035934448f, 0.02338903583586216f, 0.6335987448692322f, 0.619392454624176f, 0.506381094455719f, 0.1949152797460556f, 0.7958926558494568f, -0.6133884191513062f, 0.41031414270401f, 0.566209614276886f, 0.8065422773361206f, 0.9630222916603088f, 0.4197615385055542f, 0.32493433356285095f, 0.33756110072135925f, -0.6925292611122131f, 0.7020444273948669f, 0.49486443400382996f, 0.009436212480068207f, 0.2697892189025879f, 0.8473039269447327f, 0.9739410877227783f, 0.43451449275016785f, -0.7231351733207703f, 0.32980868220329285f, 0.08304513990879059f, 0.21246759593486786f, 0.7827677130699158f, 0.6793961524963379f, 0.27789390087127686f, 0.6515805125236511f, -0.30899757146835327f, 0.12458716332912445f, 0.16556775569915771f, 0.6241073608398438f, 0.26561567187309265f, 0.3170701861381531f, 0.6746702790260315f, 0.8307318091392517f, -0.13776826858520508f, 0.6612840890884399f, 0.9233661890029907f, 0.6830783486366272f, 0.13112179934978485f, 0.5294524431228638f, 0.08519455790519714f, 0.11654596775770187f, -0.9384016394615173f, 0.6104586124420166f, 0.783136785030365f, 0.4905274510383606f, 0.10477613657712936f, 0.16677133738994598f, 0.4091341495513916f, 0.8473148345947266f, -0.8990002870559692f, 0.7024690508842468f, 0.006235724315047264f, 0.40851497650146484f, 0.19762283563613892f, 0.4844273328781128f, 0.5029885172843933f, 0.06899238377809525f, -0.6717476844787598f, 0.03977928310632706f, 0.7519128322601318f, 0.018612250685691833f, 0.07369022071361542f, 0.815853476524353f, 0.6829754114151001f, 0.42290201783180237f, -0.5344982147216797f, 0.02819162793457508f, 0.7782127261161804f, 0.10368649661540985f, 0.010795988142490387f, 0.7066565155982971f, 0.4690339267253876f, 0.6024826169013977f, -0.21200816333293915f, 0.5705068707466125f, 0.16368728876113892f, 0.8736882209777832f, 0.5484930872917175f, 0.6031513214111328f, 0.5348632335662842f, 0.9923921227455139f, -0.23387327790260315f, 0.09125056862831116f, 0.17903444170951843f, 0.8620765209197998f, 0.2888704240322113f, 0.3400005102157593f, 0.1133955642580986f, 0.9959433078765869f, -0.3782609701156616f, 0.7665411233901978f, 0.8145862221717834f, 0.8785721063613892f, 0.8934981226921082f, 0.2333846539258957f, 0.2562459111213684f, 0.2151322364807129f, -0.8931370377540588f, 0.35676294565200806f, 0.43094155192375183f, 0.13103435933589935f, 0.170680969953537f, 0.20717847347259521f, 0.7420116066932678f, 0.2971305549144745f, -0.04461777210235596f, 0.0756760910153389f, 0.1892947405576706f, 0.5164089202880859f, 0.6756570339202881f, 0.20494455099105835f, 0.8172062039375305f, 0.03968081250786781f, -0.03194775804877281f, 0.8893592953681946f, 0.018277760595083237f, 0.400881290435791f, 0.39801689982414246f, 0.5318244099617004f, 0.3861708343029022f, 0.3649846315383911f, -0.46578967571258545f, 0.037873122841119766f, 0.6699312925338745f, 0.31698206067085266f, 0.23354633152484894f, 0.6014474034309387f, 0.2458360344171524f, 0.12574979662895203f, -0.2875097692012787f, 0.7952837347984314f, 0.307013601064682f, 0.05027666687965393f, 0.006890789605677128f, 0.2658260762691498f, 0.24283510446548462f, 0.7702771425247192f, -0.2174188792705536f, 0.8674408793449402f, 0.4507789611816406f, 0.35915055871009827f, 0.11029992997646332f, 0.19593364000320435f, 0.022678887471556664f, 0.993559718132019f, -0.9592623710632324f, 0.9918233752250671f, 0.33801859617233276f, 0.36786943674087524f, 0.7165727615356445f, 0.6309090852737427f, 0.17471499741077423f, 0.30966201424598694f, -0.12497233599424362f, 0.14096595346927643f, 0.60985267162323f, 0.8583078384399414f, 0.005631584208458662f, 0.48651623725891113f, 0.8810874819755554f, 0.65977543592453f, -0.9864476323127747f, 0.6028304100036621f, 0.550166130065918f, 0.5557876229286194f, 0.8509979248046875f, 0.017861437052488327f, 0.6738723516464233f, 0.1657181680202484f, -0.04412328824400902f, 0.22506994009017944f, 0.4617314636707306f, 0.6902389526367188f, 0.33593863248825073f, 0.0016350859077647328f, 0.21240103244781494f, 0.4124610722064972f, -0.6588312983512878f, 0.6476274132728577f, 0.7231025099754333f, 0.514423131942749f, 0.8496972322463989f, 0.7744218707084656f, 0.5249308943748474f, 0.24148499965667725f, -0.8847430944442749f, 0.23325291275978088f, 0.320156455039978f, 0.35404419898986816f, 0.38546404242515564f, 0.5105699896812439f, 0.7315546870231628f, 0.760041356086731f, -0.6874627470970154f, 0.9866694808006287f, 0.13506117463111877f, 0.30883634090423584f, 0.9282501339912415f, 0.42860397696495056f, 0.476936012506485f, 0.7044151425361633f, -0.5887742638587952f, 0.15880799293518066f, 0.3937407433986664f, 0.4037875235080719f, 0.8967541456222534f, 0.7732842564582825f, 0.06408457458019257f, 0.23670265078544617f, -0.0877939909696579f, 0.5976595282554626f, 0.5903956890106201f, 0.21228370070457458f, 0.9995285868644714f, 0.41181227564811707f, 0.1670185625553131f, 0.21304142475128174f, -0.22728842496871948f, 0.2714166045188904f, 0.7553616762161255f, 0.551486611366272f, 0.2046627402305603f, 0.846795916557312f, 0.8350310921669006f, 0.684996485710144f, -0.15570123493671417f, 0.2804645597934723f, 0.6136696934700012f, 0.48009786009788513f, 0.5499900579452515f, 0.6619934439659119f, 0.6340556144714355f, 0.025071563199162483f, -0.29822707176208496f, 0.15812526643276215f, 0.9931057095527649f, 0.802044153213501f, 0.5353431105613708f, 0.5953086614608765f, 0.42122605443000793f, 0.21052047610282898f, -0.53802490234375f, 0.5434714555740356f, 0.024816716089844704f, 0.38065943121910095f, 0.9904264211654663f, 0.472024530172348f, 0.02938946895301342f, 0.28626489639282227f, -0.5273945331573486f, 0.011019972153007984f, 0.3118012845516205f, 0.26484236121177673f, 0.6423646807670593f, 0.0490897111594677f, 0.1492765247821808f, 0.7200826406478882f, -0.6249803900718689f, 0.7914420366287231f, 0.6799644231796265f, 0.348532497882843f, 0.30065640807151794f, 0.7958629131317139f, 0.33070382475852966f, 0.199365496635437f, -0.1662326455116272f, 0.46034976840019226f, 0.4098464548587799f, 0.37000125646591187f, 0.7133736610412598f, 0.21002687513828278f, 0.5940396785736084f, 0.7189812064170837f, -0.18427921831607819f, 0.9438139200210571f, 0.9553852081298828f, 0.2478598952293396f, 0.5953249335289001f, 0.3659074306488037f, 0.8684502243995667f, 0.2925896942615509f, -0.6494303345680237f, 0.02684422954916954f, 0.7100580930709839f, 0.13443322479724884f, 0.4831313192844391f, 0.363763689994812f, 0.8345851898193359f, 0.2071797400712967f, -0.04810374975204468f, 0.9444135427474976f, 0.6323080658912659f, 0.05765993520617485f, 0.8958672881126404f, 0.23337037861347198f, 0.9912437796592712f, 0.1495216339826584f, -0.264435350894928f, 0.4547335207462311f, 0.5704196691513062f, 0.5487553477287292f, 0.7930197715759277f, 0.17926926910877228f, 0.08991242200136185f, 0.9452490210533142f, -0.9290007948875427f, 0.3234957158565521f, 0.37982532382011414f, 0.39459720253944397f, 0.301223486661911f, 0.9375319480895996f, 0.8206888437271118f, 0.9727630615234375f, -0.611214816570282f, 0.06593701988458633f, 0.24722114205360413f, 0.9533549547195435f, 0.04941411688923836f, 0.26403751969337463f, 0.46119049191474915f, 0.18580438196659088f, -0.47764673829078674f, 0.8033403754234314f, 0.9705492854118347f, 0.19626666605472565f, 0.7510595321655273f, 0.885424017906189f, 0.73375403881073f, 0.7072511315345764f, -0.16019101440906525f, 0.9690775275230408f, 0.22133073210716248f, 0.9611921310424805f, 0.5884049534797668f, 0.7877441048622131f, 0.831277072429657f, 0.4384969472885132f, -0.3740001618862152f, 0.21862611174583435f, 0.7436392307281494f, 0.7104809284210205f, 0.5661182403564453f, 0.7578932046890259f, 0.16523897647857666f, 0.5589917898178101f, -0.6566990613937378f, 0.1502561867237091f, 0.9694215655326843f, 0.9453012943267822f, 0.454315185546875f, 0.08064443618059158f, 0.28907233476638794f, 0.38741448521614075f, -0.26804882287979126f, 0.8090448975563049f, 0.837427020072937f, 0.8209953904151917f, 0.24415472149848938f, 0.5123798847198486f, 0.23130996525287628f, 0.3109857141971588f, -0.5874025821685791f, 0.8122249245643616f, 0.6138858199119568f, 0.9131918549537659f, 0.720543384552002f, 0.14866620302200317f, 0.7747291326522827f, 0.7065228819847107f, -0.6844115257263184f, 0.054515291005373f, 0.11421189457178116f, 0.5360361337661743f, 0.3462434709072113f, 0.34481996297836304f, 0.9055117964744568f, 0.037947311997413635f, -0.4069212079048157f, 0.48536577820777893f, 0.4833521246910095f, 0.36308524012565613f, 0.177108496427536f, 0.9818484783172607f, 0.7414144277572632f, 0.8787909746170044f, -0.8264497518539429f, 0.31474894285202026f, 0.3906242251396179f, 0.8786593675613403f, 0.7897900342941284f, 0.5529066920280457f, 0.3412862718105316f, 0.47457656264305115f, -0.7719335556030273f, 0.6737387776374817f, 0.5963664650917053f, 0.3988725543022156f, 0.36601245403289795f, 0.18947634100914001f, 0.8297982215881348f, 0.1695348024368286f, -0.08486897498369217f, 0.25573015213012695f, 0.5914816856384277f, 0.5558606386184692f, 0.4108526408672333f, 0.5085985660552979f, 0.9231820702552795f, 0.5241642594337463f, -0.16787108778953552f, 0.02173679880797863f, 0.653664231300354f, 0.21234919130802155f, 0.3533603250980377f, 0.16377975046634674f, 0.89167320728302f, 0.3090333938598633f, -0.6194382905960083f, 0.5261535048484802f, 0.08727479726076126f, 0.12884995341300964f, 0.49121537804603577f, 0.23704129457473755f, 0.67491614818573f, 0.9554489254951477f, -0.43561050295829773f, 0.8539239764213562f, 0.20618601143360138f, 0.1063900962471962f, 0.09278889745473862f, 0.48468583822250366f, 0.00047219786210916936f, 0.3914828300476074f, -0.48617660999298096f, 0.5465205907821655f, 0.7628607749938965f, 0.5491355061531067f, 0.6934079527854919f, 0.3005061149597168f, 0.13648992776870728f, 0.0063376897014677525f, -0.6073758602142334f, 0.031721413135528564f, 0.7700510025024414f, 0.49631229043006897f, 0.29865702986717224f, 0.9784393310546875f, 0.479838490486145f, 0.2603704631328583f, -0.08102956414222717f, 0.4882776737213135f, 0.3069089651107788f, 0.1714426577091217f, 0.9061489105224609f, 0.3275659680366516f, 0.21527421474456787f, 0.7520322203636169f, -0.09361652284860611f, 0.5791473984718323f, 0.3471752107143402f, 0.966849684715271f, 0.8650578260421753f, 0.49381521344184875f, 0.05164608731865883f, 0.4209476113319397f, -0.8461459279060364f, 0.5890759229660034f, 0.6462993025779724f, 0.6047152876853943f, 0.44116008281707764f, 0.75663161277771f, 0.4487467408180237f, 0.3414299786090851f, -0.515078604221344f, 0.6455574631690979f, 0.3447525203227997f, 0.5569505095481873f, 0.655859649181366f, 0.7710274457931519f, 0.05328691378235817f, 0.8609042167663574f, -0.08464903384447098f, 0.7089830040931702f, 0.473885178565979f, 0.12708288431167603f, 0.8051374554634094f, 0.5575981736183167f, 0.27343612909317017f, 0.6281366944313049f, -0.6483380198478699f, 0.0633869394659996f, 0.3320918381214142f, 0.530802309513092f, 0.5899521112442017f, 0.24680952727794647f, 0.11599552631378174f, 0.5480436682701111f, -0.9482818841934204f, 0.8723905086517334f, 0.833685040473938f, 0.5077316164970398f, 0.0888238325715065f, 0.6677943468093872f, 0.20316162705421448f, 0.35759517550468445f, -0.42559507489204407f, 0.51739501953125f, 0.09014572203159332f, 0.6989580988883972f, 0.6250588297843933f, 0.07317379862070084f, 0.4308980703353882f, 0.7387874722480774f, -0.9895455241203308f, 0.22955527901649475f, 0.23798322677612305f, 0.8228382468223572f, 0.008995474316179752f, 0.45365267992019653f, 0.942065954208374f, 0.27948999404907227f, -0.4457786977291107f, 0.358839213848114f, 0.6702169179916382f, 0.9816985726356506f, 0.16913099586963654f, 0.6046497821807861f, 0.8526592254638672f, 0.24290220439434052f, -0.16495640575885773f, 0.3740544021129608f, 0.7702560424804688f, 0.31072840094566345f, 0.45540276169776917f, 0.2709084451198578f, 0.6133362054824829f, 0.8913413286209106f, -0.7728509902954102f, 0.9219152331352234f, 0.8590641021728516f, 0.20142000913619995f, 0.7495988011360168f, 0.33090370893478394f, 0.6487168073654175f, 0.9262773990631104f, -0.8809283375740051f, 0.2234848290681839f, 0.8347007036209106f, 0.577395498752594f, 0.4118899405002594f, 0.45486295223236084f, 0.2784463167190552f, 0.3968351483345032f, -0.9904143810272217f, 0.695062518119812f, 0.59722900390625f, 0.4007198214530945f, 0.18938544392585754f, 0.4244382679462433f, 0.28564104437828064f, 0.30589088797569275f, -0.9851652383804321f, 0.08359633386135101f, 0.048736292868852615f, 0.10531127452850342f, 0.2647840976715088f, 0.7737843990325928f, 0.6581946015357971f, 0.022057030349969864f, -0.5729715824127197f, 0.27720531821250916f, 0.2668572962284088f, 0.017281433567404747f, 0.9590826034545898f, 0.5033671855926514f, 0.35580548644065857f, 0.17730902135372162f, -0.6056245565414429f, 0.31728070974349976f, 0.4800446033477783f, 0.28866899013519287f, 0.7521399855613708f, 0.8306640982627869f, 0.4439472258090973f, 0.44413506984710693f, -0.7319558262825012f, 0.7637193202972412f, 0.30010735988616943f, 0.008586876094341278f, 0.6740075945854187f, 0.8685951828956604f, 0.41541165113449097f, 0.5898427963256836f, -0.37521156668663025f, 0.15266156196594238f, 0.8615013957023621f, 0.17838294804096222f, 0.9945680499076843f, 0.8615732192993164f, 0.10690975189208984f, 0.8562373518943787f, -0.5019879937171936f, 0.19708351790905f, 0.8317972421646118f, 0.30342867970466614f, 0.8689720630645752f, 0.4053124785423279f, 0.6236568689346313f, 0.0182744599878788f, -0.3289318382740021f, 0.7354621887207031f, 0.10539302974939346f, 0.5398092269897461f, 0.16172343492507935f, 0.6348288655281067f, 0.6172609925270081f, 0.05078096315264702f, -0.07129337638616562f, 0.8693591952323914f, 0.5621881484985352f, 0.9833127856254578f, 0.27217692136764526f, 0.8644669055938721f, 0.5531094074249268f, 0.6067617535591125f, -0.6878650784492493f, 0.23314911127090454f, 0.35681095719337463f, 0.31704506278038025f, 0.09264709055423737f, 0.6402730941772461f, 0.9315666556358337f, 0.20741727948188782f, -0.44989341497421265f, 0.9914031028747559f, 0.5582414269447327f, 0.22221310436725616f, 0.08350493013858795f, 0.25730037689208984f, 0.5294616222381592f, 0.6465800404548645f, -0.20847541093826294f, 0.9817613363265991f, 0.389283686876297f, 0.43614667654037476f, 0.964838445186615f, 0.929386556148529f, 0.9325239658355713f, 0.9398666024208069f, -0.7680257558822632f, 0.6447837948799133f, 0.5753151774406433f, 0.05352732166647911f, 0.38811981678009033f, 0.4964083433151245f, 0.7732695937156677f, 0.9503843784332275f, -0.17978057265281677f, 0.3560786247253418f, 0.5770525336265564f, 0.8349164724349976f, 0.3411196768283844f, 0.20170839130878448f, 0.9483910202980042f, 0.4998607933521271f, -0.21397924423217773f, 0.8570907711982727f, 0.4994219243526459f, 0.19376422464847565f, 0.9165491461753845f, 0.8302043676376343f, 0.6414017081260681f, 0.5147433876991272f, -0.0405411571264267f, 0.4212237298488617f, 0.98857182264328f, 0.3012082874774933f, 0.35751864314079285f, 0.40620940923690796f, 0.6585009694099426f, 0.7975993156433105f, -0.8537358641624451f, 0.9124047756195068f, 0.8952430486679077f, 0.43495339155197144f, 0.7895290851593018f, 0.5267171263694763f, 0.42987725138664246f, 0.34337180852890015f, -0.6422916054725647f, 0.4066201448440552f, 0.6696966886520386f, 0.6833367347717285f, 0.8398280739784241f, 0.15758700668811798f, 0.5718916654586792f, 0.9654130339622498f, -0.03319607675075531f, 0.15612925589084625f, 0.1300654113292694f, 0.06299212574958801f, 0.7986779808998108f, 0.3429484963417053f, 0.40371155738830566f, 0.4719697833061218f, -0.40535977482795715f, 0.0019219237146899104f, 0.678020179271698f, 0.512027382850647f, 0.31438878178596497f, 0.829369306564331f, 0.27044785022735596f, 0.47676077485084534f, -0.06388963758945465f, 0.5193498134613037f, 0.49714556336402893f, 0.371246874332428f, 0.09444550424814224f, 0.1821623593568802f, 0.9490556716918945f, 0.0245664045214653f, -0.7177625298500061f, 0.8291292786598206f, 0.5853493809700012f, 0.820962131023407f, 0.812204122543335f, 0.692550778388977f, 0.2973986268043518f, 0.6654303073883057f, -0.8262457847595215f, 0.17808495461940765f, 0.4437533915042877f, 0.6904022097587585f, 0.6829169988632202f, 0.885553777217865f, 0.2007569521665573f, 0.6481015682220459f, -0.03136071935296059f, 0.16296809911727905f, 0.18220701813697815f, 0.6288483142852783f, 0.9715272188186646f, 0.19024278223514557f, 0.16491304337978363f, 0.5718920826911926f, -0.8163048028945923f, 0.5597502589225769f, 0.6913527846336365f, 0.2460063397884369f, 0.7966251969337463f, 0.906544029712677f, 0.7958733439445496f, 0.14264142513275146f, -0.8805457353591919f, 0.30135154724121094f, 0.956951916217804f, 0.27867215871810913f, 0.44157737493515015f, 0.05476512759923935f, 0.4251956343650818f, 0.7601751089096069f, -0.8493848443031311f, 0.23035381734371185f, 0.36523428559303284f, 0.42113152146339417f, 0.8254643678665161f, 0.556628406047821f, 0.2909104824066162f, 0.22396141290664673f, -0.930821418762207f, 0.7102344036102295f, 0.42831504344940186f, 0.4448467195034027f, 0.38418179750442505f, 0.7501004934310913f, 0.4051344692707062f, 0.5263845920562744f, -0.06554587185382843f, 0.2847585678100586f, 0.19857342541217804f, 0.8495293259620667f, 0.8505091667175293f, 0.36818230152130127f, 0.40449899435043335f, 0.9077773690223694f, -0.966108500957489f, 0.5092926025390625f, 0.5033286809921265f, 0.8498461842536926f, 0.09254108369350433f, 0.6914638876914978f, 0.7890123724937439f, 0.16743135452270508f, -0.7180595993995667f, 0.6853142380714417f, 0.9999129772186279f, 0.28772708773612976f, 0.998946487903595f, 0.5115055441856384f, 0.31338629126548767f, 0.20593388378620148f, -0.9760140776634216f, 0.4716789126396179f, 0.2891062796115875f, 0.8020605444908142f, 0.8422637581825256f, 0.2536155581474304f, 0.7118483781814575f, 0.631348729133606f, -0.10337661951780319f, 0.27474552392959595f, 0.6922121644020081f, 0.1004943922162056f, 0.35608676075935364f, 0.9562610387802124f, 0.7573090195655823f, 0.7691593170166016f, -0.3969488739967346f, 0.7459669709205627f, 0.44367894530296326f, 0.1318325400352478f, 0.1254558116197586f, 0.574469268321991f, 0.5995946526527405f, 0.6003510355949402f, -0.055590447038412094f, 0.7145459651947021f, 0.645928144454956f, 0.3884691298007965f, 0.09979450702667236f, 0.5482760071754456f, 0.5396751761436462f, 0.3694385886192322f, -0.34850358963012695f, 0.9016052484512329f, 0.6772761344909668f, 0.2932179570198059f, 0.581640899181366f, 0.8505080938339233f, 0.7472463250160217f, 0.8005712032318115f, -0.2047225832939148f, 0.01041285041719675f, 0.010699586942791939f, 0.989941418170929f, 0.7698789834976196f, 0.17148800194263458f, 0.26784709095954895f, 0.9748218655586243f, -0.3403284549713135f, 0.789061427116394f, 0.9396002292633057f, 0.3456016182899475f, 0.5914620757102966f, 0.12289833277463913f, 0.8950477838516235f, 0.8510972857475281f, -0.12202072143554688f, 0.4443008005619049f, 0.7209018468856812f, 0.7421723008155823f, 0.12685246765613556f, 0.09214598685503006f, 0.17733584344387054f, 0.33213111758232117f, -0.5724008679389954f, 0.8697952032089233f, 0.5240011215209961f, 0.7983791828155518f, 0.25642046332359314f, 0.8032141327857971f, 0.10910170525312424f, 0.2203977108001709f, -0.14404265582561493f, 0.3310619294643402f, 0.3676661252975464f, 0.7415041923522949f, 0.8415567278862f, 0.9114106893539429f, 0.8330845832824707f, 0.5821347236633301f, -0.1732570081949234f, 0.5269287824630737f, 0.06875737011432648f, 0.8193994760513306f, 0.8354671597480774f, 0.3111630380153656f, 0.006763930898159742f, 0.2555614709854126f, -0.7732967138290405f, 0.9787930846214294f, 0.26210328936576843f, 0.6778006553649902f, 0.3848906457424164f, 0.9328038096427917f, 0.8023582696914673f, 0.22641190886497498f, -0.06193743273615837f, 0.38001877069473267f, 0.1490185707807541f, 0.23172159492969513f, 0.3815241754055023f, 0.18314193189144135f, 0.9381976127624512f, 0.6701768636703491f, -0.2521166503429413f, 0.18326295912265778f, 0.9979270696640015f, 0.6232414841651917f, 0.769061267375946f, 0.4582376778125763f, 0.5250652432441711f, 0.25977185368537903f, -0.5554300546646118f, 0.4324221611022949f, 0.9772067070007324f, 0.3220129609107971f, 0.7349507808685303f, 0.5669749975204468f, 0.5742639303207397f, 0.7912236452102661f, -0.10865636169910431f, 0.5793766379356384f, 0.3239891827106476f, 0.9840477705001831f, 0.252682626247406f, 0.3281051814556122f, 0.5985051989555359f, 0.006559949368238449f, -0.1264721006155014f, 0.2900770604610443f, 0.020832113921642303f, 0.9202184677124023f, 0.09535840898752213f, 0.8696869015693665f, 0.3417384624481201f, 0.6670767664909363f, -0.4025699496269226f, 0.9209638237953186f, 0.1574922651052475f, 0.6629573106765747f, 0.04612533748149872f, 0.298318088054657f, 0.22791685163974762f, 0.32500484585762024f, -0.4735568165779114f, 0.1360524743795395f, 0.24858547747135162f, 0.5013704895973206f, 0.2861195206642151f, 0.2066604197025299f, 0.3411915898323059f, 0.31057417392730713f, -0.6231677532196045f, 0.24595032632350922f, 0.029111184179782867f, 0.7430549263954163f, 0.6582192182540894f, 0.9767786264419556f, 0.05653078481554985f, 0.5962661504745483f, -0.32799097895622253f, 0.7924435138702393f, 0.7258055210113525f, 0.01811285689473152f, 0.49313804507255554f, 0.8726581931114197f, 0.8522465229034424f, 0.25358203053474426f, -0.8814881443977356f, 0.05418939143419266f, 0.5645227432250977f, 0.7705689668655396f, 0.25818467140197754f, 0.8954405188560486f, 0.5584715008735657f, 0.06394153833389282f, -0.012501776218414307f, 0.5822969079017639f, 0.23820681869983673f, 0.18296615779399872f, 0.6027433276176453f, 0.8194631338119507f, 0.6728438138961792f, 0.8558380603790283f, -0.5041235685348511f, 0.35762742161750793f, 0.5714879631996155f, 0.35302820801734924f, 0.8884764909744263f, 0.5279331803321838f, 0.550813615322113f, 0.6944794654846191f, -0.150870680809021f, 0.27661314606666565f, 0.45505720376968384f, 0.05796796455979347f, 0.5936659574508667f, 0.8607522249221802f, 0.9410210847854614f, 0.07117196917533875f, -0.6800937056541443f, 0.5602547526359558f, 0.9087141156196594f, 0.04663322493433952f, 0.7080621719360352f, 0.9800638556480408f, 0.5147055387496948f, 0.20585830509662628f, -0.7372767329216003f, 0.11103887110948563f, 0.9118396043777466f, 0.3725014925003052f, 0.10639481246471405f, 0.21371540427207947f, 0.06717891991138458f, 0.2376765012741089f, -0.05195574462413788f, 0.9595634937286377f, 0.47980692982673645f, 0.6918528079986572f, 0.7048925757408142f, 0.7461848855018616f, 0.4934277832508087f, 0.4430857002735138f, -0.053938139230012894f, 0.4097277522087097f, 0.4607248902320862f, 0.30138787627220154f, 0.07348114252090454f, 0.08198711276054382f, 0.6028748154640198f, 0.342874139547348f, -0.6039133071899414f, 0.924285352230072f, 0.7445535659790039f, 0.025498198345303535f, 0.32840481400489807f, 0.3014020621776581f, 0.10744868963956833f, 0.534766435623169f, -0.31254443526268005f, 0.20012567937374115f, 0.3661649525165558f, 0.8052697777748108f, 0.0016074138693511486f, 0.11281079798936844f, 0.890802264213562f, 0.49972057342529297f, -0.1398940533399582f, 0.874254584312439f, 0.28417009115219116f, 0.4830402135848999f, 0.3873654007911682f, 0.27594250440597534f, 0.046213723719120026f, 0.8768733143806458f, -0.729935348033905f, 0.02188848704099655f, 0.7780598998069763f, 0.8864982724189758f, 0.11722417920827866f, 0.8784399032592773f, 0.18289344012737274f, 0.02013028785586357f, -0.42777004837989807f, 0.9902313351631165f, 0.666113018989563f, 0.8239928483963013f, 0.5139865875244141f, 0.2788376808166504f, 0.2621893882751465f, 0.3665785491466522f, -0.3485044538974762f, 0.8423803448677063f, 0.2738792300224304f, 0.9290550947189331f, 0.29674065113067627f, 0.535554051399231f, 0.8989009857177734f, 0.6611794829368591f, -0.6645896434783936f, 0.7697225213050842f, 0.7580803036689758f, 0.436178594827652f, 0.02465898171067238f, 0.618821382522583f, 0.42209872603416443f, 0.4411015808582306f, -0.19181136786937714f, 0.26399850845336914f, 0.18590448796749115f, 0.9101950526237488f, 0.675039529800415f, 0.8492478132247925f, 0.5006072521209717f, 0.9295083284378052f, -0.5160033702850342f, 0.9716203808784485f, 0.5764989852905273f, 0.8476373553276062f, 0.11591457575559616f, 0.6436840891838074f, 0.9668232798576355f, 0.1492445170879364f, -0.4813658893108368f, 0.4049540162086487f, 0.08102084696292877f, 0.3497243821620941f, 0.38816937804222107f, 0.31829187273979187f, 0.35673049092292786f, 0.452311247587204f, -0.5355079174041748f, 0.7305692434310913f, 0.4612129032611847f, 0.6909831166267395f, 0.3900843858718872f, 0.5505803227424622f, 0.9240542650222778f, 0.7282214760780334f, -0.703680694103241f, 0.5931693911552429f, 0.11602528393268585f, 0.9065160155296326f, 0.2584509551525116f, 0.19189098477363586f, 0.5747808218002319f, 0.635741114616394f, -0.2776206135749817f, 0.06962985545396805f, 0.5123680233955383f, 0.8801896572113037f, 0.6409173607826233f, 0.8368821740150452f, 0.038637757301330566f, 0.08785523474216461f, -0.7766885161399841f, 0.6817798614501953f, 0.6926640272140503f, 0.2396276593208313f, 0.9200131297111511f, 0.44580790400505066f, 0.7022364735603333f, 0.9029130935668945f, -0.9342692494392395f, 0.9977774024009705f, 0.15024127066135406f, 0.601391613483429f, 0.07098525762557983f, 0.49605488777160645f, 0.7917298078536987f, 0.2922031879425049f, -0.08922469615936279f, 0.26952967047691345f, 0.6465463042259216f, 0.9564558863639832f, 0.725755512714386f, 0.6829241514205933f, 0.20492590963840485f, 0.3242625594139099f, -0.7909817099571228f, 0.14447733759880066f, 0.4664060175418854f, 0.04785722866654396f, 0.8483087420463562f, 0.6731708645820618f, 0.23312225937843323f, 0.7983750104904175f, -0.9258161187171936f, 0.9234640598297119f, 0.0276456531137228f, 0.13269992172718048f, 0.9790228605270386f, 0.3925642967224121f, 0.9435615539550781f, 0.8288720846176147f, -0.8975656628608704f, 0.5856754183769226f, 0.7964468598365784f, 0.5681218504905701f, 0.04334249347448349f, 0.9879015684127808f, 0.8092640042304993f, 0.8080934882164001f, -0.9635249376296997f, 0.7516718506813049f, 0.6973423957824707f, 0.9299173951148987f, 0.7463095784187317f, 0.9516242742538452f, 0.2788097560405731f, 0.8242694735527039f, -0.8920149803161621f, 0.6012747287750244f, 0.3953979015350342f, 0.5942972898483276f, 0.579519510269165f, 0.8172877430915833f, 0.7196824550628662f, 0.5987420678138733f, -0.9036490321159363f, 0.5726607441902161f, 0.32628554105758667f, 0.991720974445343f, 0.3219039738178253f, 0.16202571988105774f, 0.7645185589790344f, 0.7974689602851868f, -0.038317590951919556f, 0.235117569565773f, 0.10225073993206024f, 0.309025377035141f, 0.2828369140625f, 0.7676451206207275f, 0.28046324849128723f, 0.4859888553619385f, -0.9844574332237244f, 0.38226863741874695f, 0.44761690497398376f, 0.10046818107366562f, 0.24271540343761444f, 0.2392687350511551f, 0.761222779750824f, 0.9974168539047241f, -0.4800969958305359f, 0.5812432169914246f, 0.9762976169586182f, 0.3169664442539215f, 0.4667968153953552f, 0.06165790557861328f, 0.6438472270965576f, 0.4262148439884186f, -0.1586076319217682f, 0.6469537019729614f, 0.9546976685523987f, 0.21160024404525757f, 0.24520722031593323f, 0.14949974417686462f, 0.23793305456638336f, 0.2441142052412033f, -0.5775181651115417f, 0.9097344279289246f, 0.4929521083831787f, 0.23500566184520721f, 0.23185761272907257f, 0.833324134349823f, 0.7460309863090515f, 0.7505491971969604f, -0.3046407103538513f, 0.8874509334564209f, 0.853240430355072f, 0.025824429467320442f, 0.5309377312660217f, 0.307349294424057f, 0.5040934085845947f, 0.1304577887058258f, -0.9912045001983643f, 0.6928184032440186f, 0.7040227055549622f, 0.6911301612854004f, 0.674720823764801f, 0.7519454956054688f, 0.09072022140026093f, 0.7128710746765137f, -0.6833035349845886f, 0.6449859142303467f, 0.4446164071559906f, 0.47474420070648193f, 0.7665147185325623f, 0.7403727769851685f, 0.9262488484382629f, 0.09575039148330688f, -0.35635673999786377f, 0.04360417276620865f, 0.4607813060283661f, 0.3270915150642395f, 0.7633643746376038f, 0.7560318112373352f, 0.20625296235084534f, 0.4600083827972412f, -0.27570945024490356f, 0.8549793362617493f, 0.7527502775192261f, 0.4305895268917084f, 0.9760633707046509f, 0.8598251938819885f, 0.16955287754535675f, 0.7169482707977295f, -0.9816792607307434f, 0.5196791887283325f, 0.7580168843269348f, 0.09181135147809982f, 0.07989317923784256f, 0.6020978093147278f, 0.025593236088752747f, 0.48240479826927185f, -0.4091431796550751f, 0.09109903872013092f, 0.28996536135673523f, 0.6527930498123169f, 0.3626387417316437f, 0.3713933229446411f, 0.6219826936721802f, 0.33843961358070374f, -0.8037163615226746f, 0.4506087899208069f, 0.36244678497314453f, 0.7659187316894531f, 0.6356000304222107f, 0.9835702180862427f, 0.2650213837623596f, 0.10134037584066391f, -0.037078019231557846f, 0.7523444294929504f, 0.7430980205535889f, 0.30491045117378235f, 0.3348901569843292f, 0.246844083070755f, 0.6933766603469849f, 0.6414551138877869f, -0.842724621295929f, 0.1551564633846283f, 0.136764258146286f, 0.12944911420345306f, 0.07798950374126434f, 0.978691816329956f, 0.6427578926086426f, 0.06786885112524033f, -0.19751879572868347f, 0.2986404299736023f, 0.3627510964870453f, 0.8792117238044739f, 0.7392432689666748f, 0.8451374769210815f, 0.4851287603378296f, 0.8972732424736023f, -0.19054876267910004f, 0.23617888987064362f, 0.7224985361099243f, 0.17184612154960632f, 0.22205528616905212f, 0.6684339046478271f, 0.5394150018692017f, 0.8624641299247742f, -0.16457132995128632f, 0.6549584865570068f, 0.5067428350448608f, 0.36541080474853516f, 0.48266589641571045f, 0.39009132981300354f, 0.8112714886665344f, 0.24261511862277985f, -0.1502278596162796f, 0.48709025979042053f, 0.3746710419654846f, 0.7987730503082275f, 0.5324534773826599f, 0.7606622576713562f, 0.0001364214112982154f, 0.7726423144340515f, -0.14793308079242706f, 0.06353259831666946f, 0.17096878588199615f, 0.1486288160085678f, 0.43677818775177f, 0.3762510418891907f, 0.7972798943519592f, 0.18323643505573273f, -0.6353750228881836f, 0.7629829049110413f, 0.9442721009254456f, 0.8809760212898254f, 0.6133682131767273f, 0.22384445369243622f, 0.6428160667419434f, 0.7309018969535828f, -0.7196786403656006f, 0.1622915416955948f, 0.7602627277374268f, 0.14379456639289856f, 0.12448416650295258f, 0.986130952835083f, 0.8902947306632996f, 0.21874843537807465f, -0.19265887141227722f, 0.9769498109817505f, 0.12882429361343384f, 0.17542752623558044f, 0.6580223441123962f, 0.09280475974082947f, 0.9764995574951172f, 0.31225675344467163f, -0.2998768091201782f, 0.060303058475255966f, 0.2816012501716614f, 0.37972164154052734f, 0.8752331733703613f, 0.664716362953186f, 0.12619884312152863f, 0.8225199580192566f, -0.8250950574874878f, 0.1244087889790535f, 0.4396677017211914f, 0.6557883620262146f, 0.052129823714494705f, 0.9661304354667664f, 0.8538249135017395f, 0.9480207562446594f, -0.7856617569923401f, 0.9510024785995483f, 0.552731454372406f, 0.6569341421127319f, 0.18405725061893463f, 0.7619855999946594f, 0.9794353246688843f, 0.6570194959640503f, -0.6691845655441284f, 0.5134425163269043f, 0.8127147555351257f, 0.680942177772522f, 0.4752146899700165f, 0.9782357811927795f, 0.06652458757162094f, 0.9806376695632935f, -0.9216577410697937f, 0.5034422278404236f, 0.8438079357147217f, 0.14088688790798187f, 0.9185671210289001f, 0.7920917272567749f, 0.3206186890602112f, 0.17829905450344086f, -0.12261287122964859f, 0.4201618731021881f, 0.4688921570777893f, 0.9147254228591919f, 0.7092875838279724f, 0.1683913618326187f, 0.7199706435203552f, 0.7106906175613403f, -0.5110941529273987f, 0.5393465161323547f, 0.6930219531059265f, 0.48020294308662415f, 0.5008389353752136f, 0.0991738885641098f, 0.007200522348284721f, 0.7345117926597595f, -0.6909193396568298f, 0.7998381853103638f, 0.9494526982307434f, 0.3994086980819702f, 0.7445770502090454f, 0.05993472784757614f, 0.13954584300518036f, 0.5298604369163513f, -0.019899822771549225f, 0.2151394933462143f, 0.5308759808540344f, 0.858102560043335f, 0.19989141821861267f, 0.07572769373655319f, 0.5185877084732056f, 0.5758095383644104f, -0.592085599899292f, 0.3843232989311218f, 0.3524748384952545f, 0.5371063351631165f, 0.79947429895401f, 0.8072534203529358f, 0.9941834211349487f, 0.46271058917045593f, -0.8512960076332092f, 0.4904755651950836f, 0.7818201184272766f, 0.8486849665641785f, 0.3062902092933655f, 0.7412577271461487f, 0.00522993877530098f, 0.8207802176475525f, -0.25105151534080505f, 0.42963629961013794f, 0.0013421098701655865f, 0.6776370406150818f, 0.4804477393627167f, 0.3807762563228607f, 0.30710187554359436f, 0.8306540846824646f, -0.630393385887146f, 0.5918360948562622f, 0.8432130217552185f, 0.7956360578536987f, 0.04544010013341904f, 0.7728127837181091f, 0.1427161693572998f, 0.8918297290802002f, -0.981327474117279f, 0.5484439134597778f, 0.817455530166626f, 0.6148414015769958f, 0.05667819827795029f, 0.37501052021980286f, 0.6681243181228638f, 0.08071155846118927f, -0.7371551394462585f, 0.7618935704231262f, 0.1815795749425888f, 0.310170978307724f, 0.9878233075141907f, 0.010649620555341244f, 0.5548585057258606f, 0.4113292694091797f, -0.1030610203742981f, 0.04144345596432686f, 0.13490059971809387f, 0.9699437618255615f, 0.9268993139266968f, 0.9780731797218323f, 0.7002174258232117f, 0.2858772575855255f, -0.6518640518188477f, 0.4308839738368988f, 0.5253178477287292f, 0.8322375416755676f, 0.5298154950141907f, 0.8813503384590149f, 0.8818692564964294f, 0.561253011226654f, -0.7490543127059937f, 0.15336589515209198f, 0.8429654240608215f, 0.08584904670715332f, 0.9094710350036621f, 0.8194215297698975f, 0.9037240147590637f, 0.14561957120895386f, -0.9962972402572632f, 0.8098398447036743f, 0.06346913427114487f, 0.32094794511795044f, 0.9365588426589966f, 0.567080557346344f, 0.48827433586120605f, 0.4019230008125305f, -0.9993489980697632f, 0.8258777260780334f, 0.7371675968170166f, 0.008551189675927162f, 0.0020578266121447086f, 0.026744410395622253f, 0.012474719434976578f, 0.4809657335281372f, -0.8539042472839355f, 0.8005157113075256f, 0.23748718202114105f, 0.8679115176200867f, 0.9214052557945251f, 0.3623470067977905f, 0.807026207447052f, 0.8236849308013916f, -0.8223171234130859f, 0.23279064893722534f, 0.16926518082618713f, 0.05480487644672394f, 0.06098942086100578f, 0.9698732495307922f, 0.2396102249622345f, 0.623416006565094f, -0.8330224752426147f, 0.7179116010665894f, 0.9072619080543518f, 0.6492346525192261f, 0.805309534072876f, 0.00761366356164217f, 0.33055660128593445f, 0.15578536689281464f, -0.9058619737625122f, 0.07612264901399612f, 0.4155750572681427f, 0.12635180354118347f, 0.42669814825057983f, 0.46571266651153564f, 0.6877544522285461f, 0.32996854186058044f, -0.7253644466400146f, 0.3185655474662781f, 0.6361001133918762f, 0.8620615005493164f, 0.5782126188278198f, 0.9560472369194031f, 0.6778263449668884f, 0.36976709961891174f, -0.9688014984130859f, 0.8949726223945618f, 0.9722172021865845f, 0.8190303444862366f, 0.2765468657016754f, 0.2141604870557785f, 0.28716859221458435f, 0.6403501629829407f, -0.23000912368297577f, 0.15391376614570618f, 0.3356947898864746f, 0.4080931842327118f, 0.08650007098913193f, 0.0619061142206192f, 0.3383042812347412f, 0.7159287929534912f, -0.04782934859395027f, 0.7151762843132019f, 0.9351925849914551f, 0.33096498250961304f, 0.2531254291534424f, 0.8951820731163025f, 0.9382893443107605f, 0.07657827436923981f, -0.6709719896316528f, 0.36712366342544556f, 0.5424723029136658f, 0.58217853307724f, 0.6691267490386963f, 0.9254321455955505f, 0.6301239132881165f, 0.11813070625066757f, -0.09583964198827744f, 0.24608148634433746f, 0.6392087340354919f, 0.6383166313171387f, 0.3992099463939667f, 0.2534189522266388f, 0.09488970786333084f, 0.5582386255264282f, -0.18703559041023254f, 0.03927186131477356f, 0.14728499948978424f, 0.23612818121910095f, 0.295528769493103f, 0.16215269267559052f, 0.04205423966050148f, 0.3260939419269562f, -0.17749738693237305f, 0.9330450296401978f, 0.4586620330810547f, 0.6630018353462219f, 0.6071492433547974f, 0.5638163089752197f, 0.859891951084137f, 0.7054095268249512f, -0.6399174928665161f, 0.5947858691215515f, 0.3330133855342865f, 0.3233121335506439f, 0.3996712565422058f, 0.2401926964521408f, 0.2096283882856369f, 0.19099266827106476f, -0.7472410202026367f, 0.6712928414344788f, 0.3456292748451233f, 0.6381232738494873f, 0.1300879567861557f, 0.013765865936875343f, 0.6207457780838013f, 0.5539290308952332f, -0.9522562623023987f, 0.05065903067588806f, 0.9766431450843811f, 0.22234772145748138f, 0.2419556975364685f, 0.5378559231758118f, 0.7559086680412292f, 0.10903701186180115f, -0.6206161975860596f, 0.41756781935691833f, 0.9117467403411865f, 0.242579847574234f, 0.6026285886764526f, 0.34613940119743347f, 0.5465449094772339f, 0.6552530527114868f, -0.8955833315849304f, 0.20215627551078796f, 0.15056343376636505f, 0.4582787752151489f, 0.27379536628723145f, 0.028406137600541115f, 0.21692058444023132f, 0.3175756633281708f, -0.3975653648376465f, 0.24487565457820892f, 0.9865399599075317f, 0.7933229207992554f, 0.40393659472465515f, 0.757151186466217f, 0.7370879650115967f, 0.6229510307312012f, -0.898936927318573f, 0.19767002761363983f, 0.33024078607559204f, 0.46889275312423706f, 0.639221727848053f, 0.09030602127313614f, 0.22398510575294495f, 0.004325282759964466f, -0.7654393911361694f, 0.4959871470928192f, 0.4709198474884033f, 0.5605990290641785f, 0.08365737646818161f, 0.351421058177948f, 0.933454155921936f, 0.4060383439064026f, -0.9710267782211304f, 0.5432710647583008f, 0.354732483625412f, 0.32332518696784973f, 0.8638662099838257f, 0.9592711925506592f, 0.7815713882446289f, 0.38007164001464844f, -0.865258514881134f, 0.7491937279701233f, 0.8906434774398804f, 0.8672636151313782f, 0.27482613921165466f, 0.45723846554756165f, 0.579009473323822f, 0.37843793630599976f, -0.9528473019599915f, 0.3248059153556824f, 0.23809270560741425f, 0.18257105350494385f, 0.4534550607204437f, 0.3475179076194763f, 0.44397521018981934f, 0.9436627626419067f, -0.7972155809402466f, 0.4785064160823822f, 0.7343838810920715f, 0.39229270815849304f, 0.36810505390167236f, 0.3941343426704407f, 0.3559952974319458f, 0.23117667436599731f, -0.22539961338043213f, 0.5388550758361816f, 0.4444984793663025f, 0.6882035732269287f, 0.3339512050151825f, 0.367963582277298f, 0.33331066370010376f, 0.853386640548706f, -0.6963661313056946f, 0.6545628309249878f, 0.22654341161251068f, 0.07745581120252609f, 0.28477466106414795f, 0.1493842601776123f, 0.9261190891265869f, 0.2051987648010254f, -0.5362809300422668f, 0.707110583782196f, 0.5922465324401855f, 0.08115056157112122f, 0.727975606918335f, 0.26200294494628906f, 0.9006071090698242f, 0.22294586896896362f, -0.7043771147727966f, 0.40669652819633484f, 0.5708062052726746f, 0.14777657389640808f, 0.4950633943080902f, 0.07075387984514236f, 0.936249315738678f, 0.36112621426582336f, -0.008476819843053818f, 0.5126668810844421f, 0.8915421366691589f, 0.11350634694099426f, 0.09497033804655075f, 0.9863245487213135f, 0.5228267908096313f, 0.7792633175849915f, -0.051074229180812836f, 0.8466572761535645f, 0.4554423689842224f, 0.42451196908950806f, 0.6754006147384644f, 0.5069758296012878f, 0.9637853503227234f, 0.666098952293396f, -0.09292007237672806f, 0.5675390958786011f, 0.354206919670105f, 0.9369181394577026f, 0.1651991456747055f, 0.5929559469223022f, 0.04778796434402466f, 0.7544323205947876f, -0.5202406644821167f, 0.40682661533355713f, 0.4108559489250183f, 0.19418074190616608f, 0.06492610275745392f, 0.9859040379524231f, 0.8101534843444824f, 0.3841579258441925f, -0.12001954019069672f, 0.2580038011074066f, 0.8732996582984924f, 0.056604981422424316f, 0.4066244661808014f, 0.6466514468193054f, 0.4245634973049164f, 0.6177628040313721f, -0.20908161997795105f, 0.6449398398399353f, 0.3628159463405609f, 0.9497570395469666f, 0.23506692051887512f, 0.5465313196182251f, 0.025617409497499466f, 0.36522629857063293f, -0.07234051078557968f, 0.910822331905365f, 0.46945396065711975f, 0.9079207181930542f, 0.2759198844432831f, 0.002880472457036376f, 0.807325541973114f, 0.8982290029525757f, -0.027960946783423424f, 0.37559768557548523f, 0.11477614939212799f, 0.31224143505096436f, 0.6625634431838989f, 0.9155867695808411f, 0.21411198377609253f, 0.648903489112854f, -0.40874019265174866f, 0.07583703100681305f, 0.17603906989097595f, 0.5498891472816467f, 0.135728120803833f, 0.05543103069067001f, 0.3060016930103302f, 0.9712080359458923f, -0.2837165296077728f, 0.902795135974884f, 0.6245695352554321f, 0.08038964122533798f, 0.18887893855571747f, 0.9654741883277893f, 0.9386513233184814f, 0.31433573365211487f, -0.3847990334033966f, 0.8546366691589355f, 0.391989529132843f, 0.8635010719299316f, 0.14502666890621185f, 0.7251186370849609f, 0.5687109231948853f, 0.8115909695625305f, -0.030405554920434952f, 0.2749958336353302f, 0.42253679037094116f, 0.27376896142959595f, 0.5427888035774231f, 0.047986771911382675f, 0.04909714683890343f, 0.18982236087322235f, -0.2857204079627991f, 0.7959339022636414f, 0.8493020534515381f, 0.8836749792098999f, 0.4884352385997772f, 0.9336434602737427f, 0.3185715675354004f, 0.43959489464759827f, -0.975470244884491f, 0.6381034851074219f, 0.5907570123672485f, 0.17063899338245392f, 0.5143518447875977f, 0.2771933078765869f, 0.8019450306892395f, 0.4895399808883667f, -0.9668228030204773f, 0.7808511257171631f, 0.15554708242416382f, 0.6939932107925415f, 0.2544357180595398f, 0.7693967819213867f, 0.8916966915130615f, 0.4517015516757965f, -0.5035438537597656f, 0.2187850922346115f, 0.4733298122882843f, 0.15365634858608246f, 0.22016377747058868f, 0.37053340673446655f, 0.21210713684558868f, 0.267221063375473f, -0.4747847616672516f, 0.1553269624710083f, 0.4177701473236084f, 0.4211408197879791f, 0.8844760656356812f, 0.9387562870979309f, 0.38649845123291016f, 0.730426549911499f, -0.3450113534927368f, 0.07276743650436401f, 0.8900771737098694f, 0.8329645395278931f, 0.7742264866828918f, 0.7252048850059509f, 0.769372820854187f, 0.050221581012010574f, -0.08912134170532227f, 0.1888108104467392f, 0.04593195766210556f, 0.7903573513031006f, 0.8735907673835754f, 0.10363902151584625f, 0.029153848066926003f, 0.3157058656215668f, -0.8106839656829834f, 0.17914222180843353f, 0.4552542567253113f, 0.06016674265265465f, 0.6630744934082031f, 0.706524133682251f, 0.3164002597332001f, 0.3920079171657562f, -0.048116639256477356f, 0.16964936256408691f, 0.2683260440826416f, 0.938315749168396f, 0.8734388947486877f, 0.45423609018325806f, 0.9482793807983398f, 0.1934940665960312f, -0.3461028039455414f, 0.000940227007959038f, 0.51148921251297f, 0.14582177996635437f, 0.05629704147577286f, 0.727868378162384f, 0.31825631856918335f, 0.07242871820926666f, -0.9986907243728638f, 0.48326078057289124f, 0.15377317368984222f, 0.46553632616996765f, 0.4475000202655792f, 0.2275603860616684f, 0.5643784999847412f, 0.30849596858024597f, -0.6722480654716492f, 0.16973842680454254f, 0.49838945269584656f, 0.8817036747932434f, 0.3285324275493622f, 0.741958498954773f, 0.49570780992507935f, 0.7401301860809326f, -0.16914141178131104f, 0.7208046317100525f, 0.11837422847747803f, 0.2783738970756531f, 0.9220954775810242f, 0.790206253528595f, 0.1294993907213211f, 0.9661474823951721f, -0.5778738856315613f, 0.7857490181922913f, 0.9714425206184387f, 0.9217056632041931f, 0.28470563888549805f, 0.7436535954475403f, 0.14267462491989136f, 0.4345599114894867f, -0.3027852773666382f, 0.5754218101501465f, 0.23348531126976013f, 0.25316622853279114f, 0.5641770362854004f, 0.6125534176826477f, 0.749321460723877f, 0.20862875878810883f, -0.35982608795166016f, 0.24504907429218292f, 0.29244035482406616f, 0.9058955907821655f, 0.5905328989028931f, 0.18999753892421722f, 0.585506796836853f, 0.5042831301689148f, -0.40529701113700867f, 0.7462205290794373f, 0.7031925320625305f, 0.8654110431671143f, 0.4743732810020447f, 0.1820131242275238f, 0.14200948178768158f, 0.8841310143470764f, -0.8686608076095581f, 0.1685875654220581f, 0.5700473785400391f, 0.105486199259758f, 0.943594217300415f, 0.7970139980316162f, 0.13925229012966156f, 0.6297168135643005f, -0.7532787322998047f, 0.6269559860229492f, 0.09021440893411636f, 0.6790042519569397f, 0.4140830934047699f, 0.7353591322898865f, 0.6071420907974243f, 0.6672383546829224f, -0.8854030966758728f, 0.46956947445869446f, 0.5614851117134094f, 0.637709379196167f, 0.4431565999984741f, 0.6536794304847717f, 0.21905966103076935f, 0.06014333665370941f, -0.11591655761003494f, 0.2959144115447998f, 0.4215066432952881f, 0.09380894154310226f, 0.6834323406219482f, 0.8342395424842834f, 0.5129322409629822f, 0.13820603489875793f, -0.22760893404483795f, 0.6051031351089478f, 0.9961485266685486f, 0.690081775188446f, 0.8386476039886475f, 0.7515558004379272f, 0.03251982480287552f, 0.9858605861663818f, -0.2948015630245209f, 0.9862213134765625f, 0.10487060248851776f, 0.5172841548919678f, 0.2824570834636688f, 0.12539136409759521f, 0.5189659595489502f, 0.009832639247179031f, -0.29745861887931824f, 0.12600338459014893f, 0.4068109095096588f, 0.2529255449771881f, 0.47930341958999634f, 0.3480648398399353f, 0.03353644534945488f, 0.32536911964416504f, -0.7589764595031738f, 0.44086652994155884f, 0.2636762857437134f, 0.34730008244514465f, 0.830132782459259f, 0.4449950158596039f, 0.04796777293086052f, 0.18835559487342834f, -0.8155950903892517f, 0.7712684869766235f, 0.2194594442844391f, 0.9714905023574829f, 0.43043482303619385f, 0.5797613263130188f, 0.8251067399978638f, 0.8377664685249329f, -0.4232122600078583f, 0.13054628670215607f, 0.9100258946418762f, 0.4927730858325958f, 0.11517762392759323f, 0.27743181586265564f, 0.3596639633178711f, 0.6111584901809692f, -0.33927804231643677f, 0.09697192162275314f, 0.44217169284820557f, 0.7951989769935608f, 0.31118497252464294f, 0.5932741165161133f, 0.5539286136627197f, 0.21683527529239655f, -0.8479442596435547f, 0.5556548237800598f, 0.19777517020702362f, 0.8946126103401184f, 0.30928945541381836f, 0.4567728340625763f, 0.9975693821907043f, 0.9099357724189758f, -0.21814632415771484f, 0.8464170098304749f, 0.8807467818260193f, 0.10087739676237106f, 0.08119162917137146f, 0.7969595193862915f, 0.4392207860946655f, 0.8075885772705078f, -0.19227714836597443f, 0.7866947650909424f, 0.5896238088607788f, 0.9074782729148865f, 0.6411193609237671f, 0.41817429661750793f, 0.7672841548919678f, 0.5706689357757568f, -0.0004010988341178745f, 0.1152598187327385f, 0.5359805822372437f, 0.06146455928683281f, 0.7999177575111389f, 0.46325060725212097f, 0.347507119178772f, 0.5030959248542786f, -0.6632710695266724f, 0.737104594707489f, 0.1633082777261734f, 0.37590840458869934f, 0.013044580817222595f, 0.6017210483551025f, 0.27953940629959106f, 0.05752435326576233f, -0.4798031449317932f, 0.2378607839345932f, 0.23707444965839386f, 0.15476536750793457f, 0.3304118514060974f, 0.8635396361351013f, 0.7023770809173584f, 0.12038981914520264f, -0.8370131850242615f, 0.7159117460250854f, 0.19025178253650665f, 0.17927496135234833f, 0.40496623516082764f, 0.5851877331733704f, 0.1346285492181778f, 0.4498593211174011f, -0.48023882508277893f, 0.1848725527524948f, 0.4505358040332794f, 0.6877673864364624f, 0.3540288209915161f, 0.9750900864601135f, 0.31481316685676575f, 0.8056265711784363f, -0.8849716186523438f, 0.3770792782306671f, 0.04496317729353905f, 0.8600876331329346f, 0.2393622249364853f, 0.7084568738937378f, 0.44876766204833984f, 0.4536663889884949f, -0.37663450837135315f, 0.07755321264266968f, 0.03821581229567528f, 0.3104543685913086f, 0.7742990851402283f, 0.588126540184021f, 0.09171324968338013f, 0.8084211945533752f, -0.35961052775382996f, 0.7756255269050598f, 0.2506004869937897f, 0.017197776585817337f, 0.29503217339515686f, 0.3354906439781189f, 0.09925425052642822f, 0.5595736503601074f, -0.40747272968292236f, 0.5401390790939331f, 0.7559458017349243f, 0.7323471307754517f, 0.7876639366149902f, 0.5192499160766602f, 0.5634477138519287f, 0.5482356548309326f, -0.5241571068763733f, 0.49597325921058655f, 0.2769729197025299f, 0.6898642778396606f, 0.5250300168991089f, 0.19905073940753937f, 0.13679254055023193f, 0.48648563027381897f, -0.9460087418556213f, 0.6635103225708008f, 0.04769066721200943f, 0.9389727115631104f, 0.1666131317615509f, 0.7679092884063721f, 0.23815928399562836f, 0.05106911435723305f, -0.027741115540266037f, 0.1436661034822464f, 0.578304648399353f, 0.5122665166854858f, 0.8655325174331665f, 0.5100126266479492f, 0.3570556044578552f, 0.32937920093536377f, -0.16179411113262177f, 0.08213400840759277f, 0.8235787749290466f, 0.6764708757400513f, 0.6972485184669495f, 0.6339990496635437f, 0.08798980712890625f, 0.430983304977417f, -0.6578080058097839f, 0.039852894842624664f, 0.7794025540351868f, 0.5830854773521423f, 0.6732408404350281f, 0.7242538928985596f, 0.6968618035316467f, 0.8420792818069458f, -0.014441374689340591f, 0.44536837935447693f, 0.5798866152763367f, 0.12120107561349869f, 0.14360621571540833f, 0.9138954281806946f, 0.5503101348876953f, 0.06993419677019119f, -0.4483610689640045f, 0.49444401264190674f, 0.36164554953575134f, 0.03188261017203331f, 0.08751793205738068f, 0.012558440677821636f, 0.9148881435394287f, 0.879999041557312f, -0.7583984136581421f, 0.9788627624511719f, 0.3130732476711273f, 0.5233158469200134f, 0.4578743577003479f, 0.6841422915458679f, 0.7004146575927734f, 0.44746285676956177f, -0.4475809335708618f, 0.8230920433998108f, 0.9718331694602966f, 0.6463328003883362f, 0.2765553295612335f, 0.6533960103988647f, 0.20272691547870636f, 0.6962459087371826f, -0.5090042948722839f, 0.018095018342137337f, 0.050057630985975266f, 0.05253662168979645f, 0.6567042469978333f, 0.952953040599823f, 0.4624786972999573f, 0.05252183601260185f, -0.5480210781097412f, 0.6741757392883301f, 0.3983522951602936f, 0.9614754319190979f, 0.8168814182281494f, 0.13296309113502502f, 0.0028349575586616993f, 0.6683267951011658f, -0.39183592796325684f, 0.9540113806724548f, 0.06372900307178497f, 0.2885805368423462f, 0.748945415019989f, 0.9900226593017578f, 0.10285871475934982f, 0.6844251155853271f, -0.07730254530906677f, 0.1612314134836197f, 0.4248311519622803f, 0.07940907031297684f, 0.34175094962120056f, 0.4581860303878784f, 0.198409765958786f, 0.3265751898288727f, -0.256501168012619f, 0.7688357830047607f, 0.512937068939209f, 0.4277113080024719f, 0.42434588074684143f, 0.9341727495193481f, 0.14876489341259003f, 0.9351179003715515f, -0.5644823312759399f, 0.12773510813713074f, 0.06361141800880432f, 0.8665883541107178f, 0.6656553149223328f, 0.4490491449832916f, 0.009633731096982956f, 0.44168373942375183f, -0.3541507124900818f, 0.9288020730018616f, 0.7084948420524597f, 0.008468789048492908f, 0.8049022555351257f, 0.26085707545280457f, 0.6873499751091003f, 0.04647611826658249f, -0.7923862934112549f, 0.06992964446544647f, 0.629441499710083f, 0.4672895669937134f, 0.0020901544485241175f, 0.9350376725196838f, 0.20430368185043335f, 0.11437342315912247f, -0.8159857988357544f, 0.5927274227142334f, 0.021435195580124855f, 0.6537076830863953f, 0.5069971084594727f, 0.7061331868171692f, 0.9616955518722534f, 0.3658858835697174f, -0.814801037311554f, 0.8861988186836243f, 0.458010733127594f, 0.8842244744300842f, 0.2896896004676819f, 0.41269198060035706f, 0.7000483274459839f, 0.922209620475769f, -0.4782446324825287f, 0.8526979684829712f, 0.9767212271690369f, 0.2512723207473755f, 0.46679386496543884f, 0.6440516114234924f, 0.49130943417549133f, 0.8116934895515442f, -0.10763590782880783f, 0.7344856262207031f, 0.9077714681625366f, 0.6507005095481873f, 0.02970234677195549f, 0.5201928019523621f, 0.9503298401832581f, 0.09698650240898132f, -0.704718291759491f, 0.9479995965957642f, 0.6799901127815247f, 0.7295342087745667f, 0.7259117364883423f, 0.6679782867431641f, 0.6203404068946838f, 0.4444032609462738f, -0.9630061984062195f, 0.2114311307668686f, 0.002780607668682933f, 0.024689851328730583f, 0.37819477915763855f, 0.8933408856391907f, 0.09749525040388107f, 0.7529385685920715f, -0.5120521187782288f, 0.4985257387161255f, 0.6308256387710571f, 0.23426443338394165f, 0.29079246520996094f, 0.8599469065666199f, 0.4711499810218811f, 0.6304063200950623f, -0.8782622218132019f, 0.36874517798423767f, 0.7919462323188782f, 0.4591958522796631f, 0.42137202620506287f, 0.30995333194732666f, 0.0284190122038126f, 0.6739462614059448f, -0.518388569355011f, 0.48315367102622986f, 0.3761574327945709f, 0.9076200723648071f, 0.15828238427639008f, 0.4595755338668823f, 0.5814226269721985f, 0.29841822385787964f, -0.47386762499809265f, 0.4324425756931305f, 0.07744754105806351f, 0.5667301416397095f, 0.8211491703987122f, 0.6095400452613831f, 0.7806777358055115f, 0.29725202918052673f, -0.4982928931713104f, 0.9427886009216309f, 0.42935118079185486f, 0.3314588963985443f, 0.9121160507202148f, 0.1774633526802063f, 0.07088851928710938f, 0.5151680707931519f, -0.023337924852967262f, 0.31670841574668884f, 0.5959896445274353f, 0.317923903465271f, 0.8565654754638672f, 0.6290469765663147f, 0.3330366015434265f, 0.23103295266628265f, -0.7902374863624573f, 0.36277520656585693f, 0.4483228325843811f, 0.6301594972610474f, 0.3506041467189789f, 0.49802669882774353f, 0.6179144382476807f, 0.9545730352401733f, -0.040090978145599365f, 0.09120103716850281f, 0.7989528179168701f, 0.4144046902656555f, 0.1916193813085556f, 0.905068576335907f, 0.07558728009462357f, 0.876531183719635f, -0.705959677696228f, 0.3096439242362976f, 0.3076646327972412f, 0.9329801797866821f, 0.08181362599134445f, 0.18709921836853027f, 0.9123807549476624f, 0.9148482084274292f, -0.9329662322998047f, 0.1295928806066513f, 0.2852630019187927f, 0.8876718282699585f, 0.6751736402511597f, 0.34720346331596375f, 0.6187822818756104f, 0.028381744399666786f, -0.7636876106262207f, 0.4656466245651245f, 0.2796437442302704f, 0.025005599483847618f, 0.01091369055211544f, 0.7947790026664734f, 0.10164812207221985f, 0.11446435004472733f, -0.9700531959533691f, 0.8244809508323669f, 0.7749660611152649f, 0.7544474005699158f, 0.6765903234481812f, 0.0065141902305185795f, 0.5678808093070984f, 0.08277042955160141f, -0.5813987255096436f, 0.39247196912765503f, 0.8231649398803711f, 0.6579397320747375f, 0.4176236689090729f, 0.40528443455696106f, 0.996113657951355f, 0.5173190832138062f, -0.6978773474693298f, 0.9216814041137695f, 0.20472094416618347f, 0.8018783330917358f, 0.12100863456726074f, 0.7537968754768372f, 0.8354878425598145f, 0.5941768884658813f, -0.8734698295593262f, 0.18515250086784363f, 0.3800066113471985f, 0.42525437474250793f, 0.8968426585197449f, 0.08258086442947388f, 0.4492036700248718f, 0.9954866170883179f, -0.0964229479432106f, 0.7983531355857849f, 0.14429903030395508f, 0.325795441865921f, 0.7426354289054871f, 0.3565046787261963f, 0.929943323135376f, 0.798939049243927f, -0.771360456943512f, 0.4692058265209198f, 0.08277492225170135f, 0.7374017238616943f, 0.8747340440750122f, 0.1239713802933693f, 0.9334874153137207f, 0.19149546325206757f, -0.2655468285083771f, 0.08293166756629944f, 0.5434187650680542f, 0.3309219181537628f, 0.7116981744766235f, 0.4065549075603485f, 0.5917365550994873f, 0.2814953923225403f, -0.05464014410972595f, 0.4161573350429535f, 0.07486418634653091f, 0.7799698114395142f, 0.24234354496002197f, 0.4812498092651367f, 0.19398410618305206f, 0.48885291814804077f, -0.26262080669403076f, 0.625494122505188f, 0.05377839878201485f, 0.3657417297363281f, 0.9173396229743958f, 0.6513818502426147f, 0.016271980479359627f, 0.4577604830265045f, -0.02580445632338524f, 0.04796160012483597f, 0.0871945321559906f, 0.7392399907112122f, 0.9282801151275635f, 0.7865298390388489f, 0.8395862579345703f, 0.9795173406600952f, -0.2603546380996704f, 0.10279883444309235f, 0.6904399394989014f, 0.19414447247982025f, 0.9928819537162781f, 0.8679126501083374f, 0.906673789024353f, 0.20367000997066498f, -0.5869901180267334f, 0.9834204912185669f, 0.42316552996635437f, 0.8114650845527649f, 0.06138390302658081f, 0.6734783053398132f, 0.005090366117656231f, 0.20937833189964294f, -0.24230390787124634f, 0.5893834829330444f, 0.07453283667564392f, 0.6138355135917664f, 0.5591519474983215f, 0.10652673244476318f, 0.9558145403862f, 0.7175421714782715f, -0.3314123749732971f, 0.6891644597053528f, 0.4974406659603119f, 0.6455916166305542f, 0.8897937536239624f, 0.9291983246803284f, 0.42719003558158875f, 0.10084622353315353f, -0.895182192325592f, 0.7984734177589417f, 0.22423748672008514f, 0.18139980733394623f, 0.9111961126327515f, 0.8468161225318909f, 0.21329163014888763f, 0.06302977353334427f, -0.33292603492736816f, 0.9086056351661682f, 0.7192855477333069f, 0.7943524122238159f, 0.621201753616333f, 0.43071797490119934f, 0.4586479365825653f, 0.5888814926147461f, -0.2850654125213623f, 0.10988249629735947f, 0.6926595568656921f, 0.8620486855506897f, 0.3196997046470642f, 0.8976781368255615f, 0.23678448796272278f, 0.2002578228712082f, -0.2062159776687622f, 0.11755578964948654f, 0.6329647898674011f, 0.20576618611812592f, 0.8549295663833618f, 0.283090204000473f, 0.27117234468460083f, 0.3757580816745758f, -0.32380908727645874f, 0.7093048691749573f, 0.8331642746925354f, 0.5721822381019592f, 0.8974040746688843f, 0.3111088275909424f, 0.8167053461074829f, 0.17171569168567657f, -0.7699295282363892f, 0.4578414559364319f, 0.462040513753891f, 0.0066787912510335445f, 0.4411165714263916f, 0.8264000415802002f, 0.1346266120672226f, 0.8648207187652588f, -0.890018105506897f, 0.046149060130119324f, 0.49271804094314575f, 0.6843058466911316f, 0.35730522871017456f, 0.37400585412979126f, 0.7773075699806213f, 0.22664140164852142f, -0.8746980428695679f, 0.6524196267127991f, 0.6091398000717163f, 0.3053930699825287f, 0.17475806176662445f, 0.66270911693573f, 0.49381396174430847f, 0.29339784383773804f, -0.9789276123046875f, 0.9803923964500427f, 0.03675033152103424f, 0.3447827398777008f, 0.04599202424287796f, 0.8163677453994751f, 0.7786769866943359f, 0.5229527950286865f, -0.6564829349517822f, 0.4415198564529419f, 0.19805727899074554f, 0.9981576800346375f, 0.6849742531776428f, 0.9690917730331421f, 0.55842125415802f, 0.33105704188346863f, -0.8162609934806824f, 0.19510610401630402f, 0.3707737624645233f, 0.06408347934484482f, 0.22416995465755463f, 0.4945058226585388f, 0.8410181999206543f, 0.48184657096862793f, -0.10852764546871185f, 0.15078164637088776f, 0.9983089566230774f, 0.07083623856306076f, 0.16226191818714142f, 0.8235589861869812f, 0.41169416904449463f, 0.913079559803009f, -0.8117125034332275f, 0.9694818258285522f, 0.75721675157547f, 0.7216575741767883f, 0.5311806201934814f, 0.1476856917142868f, 0.19567255675792694f, 0.936255931854248f, -0.33468568325042725f, 0.9832174777984619f, 0.24712225794792175f, 0.4520624577999115f, 0.9430416822433472f, 0.1560051143169403f, 0.004241825081408024f, 0.43619054555892944f, -0.14402681589126587f, 0.534106433391571f, 0.759381115436554f, 0.40432026982307434f, 0.594858705997467f, 0.6630298495292664f, 0.06283657997846603f, 0.03368794918060303f, -0.6192169785499573f, 0.3900500237941742f, 0.13640376925468445f, 0.14919544756412506f, 0.6664336323738098f, 0.4018527865409851f, 0.38619816303253174f, 0.19495780766010284f, -0.5908392071723938f, 0.6915780305862427f, 0.7790831923484802f, 0.9412636160850525f, 0.6030304431915283f, 0.35742273926734924f, 0.6753796935081482f, 0.09233275800943375f, -0.8586652874946594f, 0.8626931309700012f, 0.58103346824646f, 0.9694607257843018f, 0.5016675591468811f, 0.5762854814529419f, 0.6252138018608093f, 0.927125871181488f, -0.8618747591972351f, 0.9174321293830872f, 0.6527827978134155f, 0.9344456791877747f, 0.1006830707192421f, 0.4750686287879944f, 0.597193717956543f, 0.3644532561302185f, -0.8708304762840271f, 0.6062145829200745f, 0.1006544977426529f, 0.7107487320899963f, 0.6289030909538269f, 0.8166599869728088f, 0.601671040058136f, 0.513123631477356f, -0.22227329015731812f, 0.3605075180530548f, 0.3458985686302185f, 0.5682852268218994f, 0.5888585448265076f, 0.9004151225090027f, 0.039005097001791f, 0.9120679497718811f, -0.7271935939788818f, 0.8765775561332703f, 0.41508713364601135f, 0.3492782413959503f, 0.17387303709983826f, 0.4353453814983368f, 0.9175996780395508f, 0.4528505504131317f, -0.28972673416137695f, 0.8543779850006104f, 0.8761434555053711f, 0.24124562740325928f, 0.8743346333503723f, 0.11936238408088684f, 0.992048978805542f, 0.6608076095581055f, -0.27960214018821716f, 0.37437203526496887f, 0.3110707104206085f, 0.14864882826805115f, 0.5812954306602478f, 0.9719281196594238f, 0.5823668241500854f, 0.6845861077308655f, -0.5550265312194824f, 0.7893396615982056f, 0.7452213764190674f, 0.08575978875160217f, 0.25871363282203674f, 0.1277589201927185f, 0.3195076882839203f, 0.26072970032691956f, -0.7999759316444397f, 0.5254610180854797f, 0.9628555774688721f, 0.6967372894287109f, 0.2677426338195801f, 0.5411489605903625f, 0.635084867477417f, 0.9192890524864197f, -0.8245854377746582f, 0.9960355162620544f, 0.5278162956237793f, 0.198527529835701f, 0.16599710285663605f, 0.6554795503616333f, 0.2842789888381958f, 0.20426201820373535f, -0.49705633521080017f, 0.896577775478363f, 0.09197258204221725f, 0.6876367330551147f, 0.6568629741668701f, 0.8628242611885071f, 0.9219138622283936f, 0.47885867953300476f, -0.1249745562672615f, 0.3917294144630432f, 0.9300874471664429f, 0.412832111120224f, 0.3388819098472595f, 0.05687683820724487f, 0.9606654644012451f, 0.28101009130477905f, -0.01671794056892395f, 0.7291354537010193f, 0.9396887421607971f, 0.3832525908946991f, 0.9964730143547058f, 0.7570905685424805f, 0.39963510632514954f, 0.6357243657112122f, -0.39005282521247864f, 0.7051287889480591f, 0.08361075073480606f, 0.5459464192390442f, 0.5674508213996887f, 0.3311697244644165f, 0.3517933189868927f, 0.9307668209075928f, -0.7648155093193054f, 0.806413471698761f, 0.7917253375053406f, 0.2651872932910919f, 0.14031973481178284f, 0.2416098266839981f, 0.17955268919467926f, 0.8375376462936401f, -0.909651517868042f, 0.10350493341684341f, 0.02323017828166485f, 0.5085310339927673f, 0.7421451807022095f, 0.22480805218219757f, 0.9435009956359863f, 0.09817099571228027f, -0.09775953739881516f, 0.9736524224281311f, 0.823189377784729f, 0.7355177998542786f, 0.6304232478141785f, 0.42748740315437317f, 0.16465111076831818f, 0.8680493831634521f, -0.10780376195907593f, 0.6900416612625122f, 0.5734936594963074f, 0.47629234194755554f, 0.9947890043258667f, 0.12133366614580154f, 0.39995288848876953f, 0.4210413992404938f, -0.15661099553108215f, 0.42952078580856323f, 0.5248149037361145f, 0.8678749799728394f, 0.42065325379371643f, 0.5758377313613892f, 0.09125813841819763f, 0.1801339089870453f, -0.02564803510904312f, 0.4437575042247772f, 0.8668684363365173f, 0.49004995822906494f, 0.7942729592323303f, 0.18306541442871094f, 0.22493834793567657f, 0.2171775996685028f, -0.12269392609596252f, 0.6353181600570679f, 0.0990922600030899f, 0.3299580514431f, 0.759364128112793f, 0.650206446647644f, 0.06093230098485947f, 0.3256477117538452f, -0.01590617373585701f, 0.8958163857460022f, 0.857554018497467f, 0.9141848087310791f, 0.7678455114364624f, 0.3886874318122864f, 0.39114633202552795f, 0.22325491905212402f, -0.7926153540611267f, 0.2799931466579437f, 0.8460150361061096f, 0.7726966142654419f, 0.7629765868186951f, 0.5362239480018616f, 0.8112188577651978f, 0.6414257287979126f, -0.6726288199424744f, 0.513164222240448f, 0.18624724447727203f, 0.14163300395011902f, 0.22615821659564972f, 0.3455566465854645f, 0.8983526229858398f, 0.4757823348045349f, -0.8303082585334778f, 0.13325800001621246f, 0.39751923084259033f, 0.20650409162044525f, 0.31380966305732727f, 0.35739412903785706f, 0.6646026372909546f, 0.1555148959159851f, -0.03945565223693848f, 0.9417543411254883f, 0.5741653442382812f, 0.8165904879570007f, 0.9571883082389832f, 0.02150649018585682f, 0.7356064319610596f, 0.8629142045974731f, -0.7497262954711914f, 0.6488533020019531f, 0.009299477562308311f, 0.36729615926742554f, 0.8872995376586914f, 0.8882614970207214f, 0.060987621545791626f, 0.20446327328681946f, -0.4689551889896393f, 0.4813368022441864f, 0.4344065189361572f, 0.8527385592460632f, 0.9003974199295044f, 0.40031763911247253f, 0.6243799924850464f, 0.6409673690795898f, -0.6496862173080444f, 0.9431684017181396f, 0.12753863632678986f, 0.9967572093009949f, 0.5155500769615173f, 0.12690873444080353f, 0.30892401933670044f, 0.33922111988067627f, -0.428401917219162f, 0.5889803171157837f, 0.3388160467147827f, 0.9294505715370178f, 0.9222037196159363f, 0.09265206754207611f, 0.6758279800415039f, 0.1839723289012909f, -0.965957522392273f, 0.18664175271987915f, 0.16799597442150116f, 0.2857961058616638f, 0.9285343289375305f, 0.4602203965187073f, 0.10855240374803543f, 0.4836224317550659f, -0.8127831220626831f, 0.5684154629707336f, 0.058552518486976624f, 0.34994614124298096f, 0.27373215556144714f, 0.7750016450881958f, 0.23065556585788727f, 0.9269821643829346f, -0.40081921219825745f, 0.6308311820030212f, 0.544748842716217f, 0.48166683316230774f, 0.07594642043113708f, 0.8047330975532532f, 0.18018586933612823f, 0.9700949192047119f, -0.08297690004110336f, 0.7506175637245178f, 0.37385648488998413f, 0.9076524972915649f, 0.8571788668632507f, 0.21974872052669525f, 0.27400368452072144f, 0.8935869336128235f, -0.3673410713672638f, 0.21083304286003113f, 0.28476521372795105f, 0.5424573421478271f, 0.009094350039958954f, 0.713745653629303f, 0.71310955286026f, 0.885013222694397f, -0.9043408036231995f, 0.40792226791381836f, 0.9247392416000366f, 0.6740391254425049f, 0.06737639009952545f, 0.16349084675312042f, 0.014684437774121761f, 0.006484470330178738f, -0.2850079834461212f, 0.6922030448913574f, 0.8861485719680786f, 0.6015477776527405f, 0.12227082997560501f, 0.7154315114021301f, 0.6911073923110962f, 0.28357434272766113f, -0.055136557668447495f, 0.11216510832309723f, 0.2332213670015335f, 0.007618896197527647f, 0.6821309924125671f, 0.7592487931251526f, 0.22575441002845764f, 0.6283423900604248f, -0.6607435345649719f, 0.18923555314540863f, 0.3031526803970337f, 0.5677884817123413f, 0.7123379111289978f, 0.44270411133766174f, 0.7403097152709961f, 0.10768453776836395f, -0.025559745728969574f, 0.5107122659683228f, 0.4641115367412567f, 0.7436976432800293f, 0.31585636734962463f, 0.6856188178062439f, 0.13399027287960052f, 0.1963345855474472f, -0.05362636223435402f, 0.6905140280723572f, 0.44913145899772644f, 0.8215577006340027f, 0.688916802406311f, 0.18080654740333557f, 0.34159180521965027f, 0.22417648136615753f, -0.48500141501426697f, 0.20840013027191162f, 0.841159999370575f, 0.7144265174865723f, 0.7278634905815125f, 0.11381477117538452f, 0.1846107393503189f, 0.9591460227966309f, -0.9837046265602112f, 0.2894805669784546f, 0.5686793327331543f, 0.2510039210319519f, 0.7701175808906555f, 0.2982338070869446f, 0.24409949779510498f, 0.12177850306034088f, -0.6745226383209229f, 0.2609543204307556f, 0.8976567387580872f, 0.31293991208076477f, 0.6855008602142334f, 0.8096410036087036f, 0.8732315301895142f, 0.7372477054595947f, -0.5898901224136353f, 0.849271297454834f, 0.09252920001745224f, 0.33562329411506653f, 0.12082502245903015f, 0.6892740726470947f, 0.9372288584709167f, 0.9844986796379089f, -0.31669971346855164f, 0.2906709611415863f, 0.5939869284629822f, 0.550486147403717f, 0.7643661499023438f, 0.563957154750824f, 0.8762628436088562f, 0.16295568645000458f, -0.8457837104797363f, 0.9241160154342651f, 0.3673003017902374f, 0.3813105821609497f, 0.4867531359195709f, 0.2529485523700714f, 0.30308669805526733f, 0.6987059712409973f, -0.5424379110336304f, 0.33916860818862915f, 0.26567402482032776f, 0.43126487731933594f, 0.2944619953632355f, 0.36008554697036743f, 0.3035660982131958f, 0.32656073570251465f, -0.45916876196861267f, 0.6750890016555786f, 0.3489469289779663f, 0.4249192774295807f, 0.559899628162384f, 0.22167247533798218f, 0.7562468647956848f, 0.465279221534729f, -0.8655000925064087f, 0.9601519107818604f, 0.9468885660171509f, 0.2073407620191574f, 0.5178113579750061f, 0.44900426268577576f, 0.3219912052154541f, 0.3845549523830414f, -0.49693289399147034f, 0.8011423349380493f, 0.6611756682395935f, 0.09737877547740936f, 0.11815358698368073f, 0.16572001576423645f, 0.7079306840896606f, 0.2481347620487213f, -0.12630152702331543f, 0.4784919321537018f, 0.0016754035605117679f, 0.4552266001701355f, 0.5852712392807007f, 0.7011396884918213f, 0.2710877060890198f, 0.3530965745449066f, -0.17369160056114197f, 0.8440536856651306f, 0.6758414506912231f, 0.6016039848327637f, 0.9126378297805786f, 0.7470175623893738f, 0.7235041856765747f, 0.5151270031929016f, -0.7413712739944458f, 0.4440406560897827f, 0.4286329746246338f, 0.5252554416656494f, 0.04358166456222534f, 0.6438264846801758f, 0.8149546384811401f, 0.6403496861457825f, -0.41090646386146545f, 0.0883939191699028f, 0.569286048412323f, 0.2557412385940552f, 0.4178285002708435f, 0.12927579879760742f, 0.5539112687110901f, 0.11073066294193268f, -0.07655803114175797f, 0.8371602296829224f, 0.09602361917495728f, 0.13728441298007965f, 0.6326887607574463f, 0.24303080141544342f, 0.9679518938064575f, 0.07254358381032944f, -0.08385374397039413f, 0.8684040307998657f, 0.7132601141929626f, 0.720390796661377f, 0.4469427466392517f, 0.5538361072540283f, 0.3076171278953552f, 0.8224702477455139f, -0.08227302134037018f, 0.9612975716590881f, 0.633665144443512f, 0.9231676459312439f, 0.1756860315799713f, 0.2745995819568634f, 0.5621321201324463f, 0.8537796139717102f, -0.6555911898612976f, 0.041764385998249054f, 0.4187797009944916f, 0.9148240685462952f, 0.7684349417686462f, 0.6273493766784668f, 0.6229406595230103f, 0.3404700756072998f, -0.37935543060302734f, 0.976550281047821f, 0.8227263689041138f, 0.16593797504901886f, 0.3462187945842743f, 0.4871348738670349f, 0.9404013156890869f, 0.08363417536020279f, -0.1287672221660614f, 0.6844508051872253f, 0.8449923992156982f, 0.9373670220375061f, 0.0946040153503418f, 0.3459379971027374f, 0.8464142084121704f, 0.647133469581604f, -0.270802766084671f, 0.5576959848403931f, 0.9117850661277771f, 0.08363300561904907f, 0.7759185433387756f, 0.7920106649398804f, 0.034983426332473755f, 0.26387137174606323f, -0.6693989634513855f, 0.5592203140258789f, 0.3192697763442993f, 0.04545693099498749f, 0.35282737016677856f, 0.46792471408843994f, 0.6573768854141235f, 0.5654168128967285f, -0.9705425500869751f, 0.35596928000450134f, 0.7961609363555908f, 0.7374656200408936f, 0.2230670005083084f, 0.9520291090011597f, 0.9841638207435608f, 0.7584847807884216f, -0.3611443340778351f, 0.23489315807819366f, 0.24198991060256958f, 0.33764147758483887f, 0.46691223978996277f, 0.793046772480011f, 0.8127099871635437f, 0.6640537977218628f, -0.5582485198974609f, 0.28450122475624084f, 0.8462432622909546f, 0.9333443641662598f, 0.6409127116203308f, 0.8849723935127258f, 0.5788201093673706f, 0.5500873923301697f, -0.4943992495536804f, 0.7236458659172058f, 0.7691282033920288f, 0.36135393381118774f, 0.6928625106811523f, 0.18919382989406586f, 0.36942213773727417f, 0.5546094179153442f, -0.8797121644020081f, 0.42520463466644287f, 0.18401886522769928f, 0.04507305845618248f, 0.18239830434322357f, 0.2205151915550232f, 0.4532729685306549f, 0.23454950749874115f, -0.8723581433296204f, 0.3350153863430023f, 0.7939462661743164f, 0.4658460319042206f, 0.29002755880355835f, 0.14680612087249756f, 0.4501017928123474f, 0.8647994995117188f, -0.6406159996986389f, 0.15781398117542267f, 0.9691412448883057f, 0.7997035384178162f, 0.6749915480613708f, 0.17258667945861816f, 0.682649552822113f, 0.04583410173654556f, -0.03846772015094757f, 0.349006325006485f, 0.9039595127105713f, 0.9845970869064331f, 0.19984984397888184f, 0.12661145627498627f, 0.45997923612594604f, 0.11786095052957535f, -0.8413671255111694f, 0.547067403793335f, 0.3934110999107361f, 0.724673867225647f, 0.2721313238143921f, 0.6467245817184448f, 0.9080004096031189f, 0.7217759490013123f, -0.837797224521637f, 0.6675623059272766f, 0.6747857928276062f, 0.043352603912353516f, 0.8780126571655273f, 0.28226229548454285f, 0.8033129572868347f, 0.42734745144844055f, -0.8143987059593201f, 0.632408082485199f, 0.4375849962234497f, 0.8084573149681091f, 0.28718265891075134f, 0.6917858123779297f, 0.7127849459648132f, 0.4990820586681366f, -0.7828923463821411f, 0.42034104466438293f, 0.4778001010417938f, 0.1473933756351471f, 0.2067977637052536f, 0.1338927000761032f, 0.37186580896377563f, 0.7046142220497131f, -0.8391563296318054f, 0.8900661468505859f, 0.7600237727165222f, 0.6255747675895691f, 0.6965195536613464f, 0.9132246971130371f, 0.8627706170082092f, 0.3410521149635315f, -0.4711076617240906f, 0.1860729604959488f, 0.3271503448486328f, 0.9428375363349915f, 0.9473742246627808f, 0.6525470018386841f, 0.1627112627029419f, 0.2674708068370819f, -0.7915828824043274f, 0.09271136671304703f, 0.7361083626747131f, 0.8619407415390015f, 0.8710571527481079f, 0.14189627766609192f, 0.24113154411315918f, 0.5954194068908691f, -0.3228954076766968f, 0.4256415367126465f, 0.3516960144042969f, 0.6590234041213989f, 0.9909094572067261f, 0.8649609684944153f, 0.09438099712133408f, 0.6162113547325134f, -0.5213442444801331f, 0.8716083765029907f, 0.32945096492767334f, 0.496185302734375f, 0.5361036062240601f, 0.3503744602203369f, 0.9961517453193665f, 0.08941011130809784f, -0.6484599113464355f, 0.48837971687316895f, 0.9414522647857666f, 0.9088823795318604f, 0.10893966257572174f, 0.04789455607533455f, 0.24183189868927002f, 0.4697778820991516f, -0.443170428276062f, 0.6778573393821716f, 0.24834686517715454f, 0.8167640566825867f, 0.6001344919204712f, 0.42589396238327026f, 0.7789468765258789f, 0.9346034526824951f, -0.04275340959429741f, 0.1991288810968399f, 0.6924257874488831f, 0.2881137728691101f, 0.616396963596344f, 0.8450077176094055f, 0.9858490228652954f, 0.19117723405361176f, -0.6084972620010376f, 0.7871056795120239f, 0.4194922149181366f, 0.8072115182876587f, 0.232412189245224f, 0.17235733568668365f, 0.017294391989707947f, 0.8041496276855469f, -0.9111849665641785f, 0.15389609336853027f, 0.7521823048591614f, 0.8040235042572021f, 0.586065948009491f, 0.14882318675518036f, 0.8159805536270142f, 0.9781651496887207f, -0.7558873891830444f, 0.5656195282936096f, 0.7684750556945801f, 0.5339491367340088f, 0.47192344069480896f, 0.6510041356086731f, 0.9666579365730286f, 0.28502944111824036f, -0.8961231708526611f, 0.10902798920869827f, 0.5085938572883606f, 0.3714636266231537f, 0.16380159556865692f, 0.8375502824783325f, 0.4718899428844452f, 0.8165096640586853f, -0.09730296581983566f, 0.5847142934799194f, 0.3088145852088928f, 0.05287907272577286f, 0.319782018661499f, 0.1268199235200882f, 0.7555964589118958f, 0.1075902059674263f, -0.9672850966453552f, 0.8566212058067322f, 0.39292189478874207f, 0.291610449552536f, 0.9270207285881042f, 0.9078058004379272f, 0.976004421710968f, 0.15112949907779694f, -0.14474262297153473f, 0.8387640118598938f, 0.8168760538101196f, 0.005177837330847979f, 0.7367753982543945f, 0.9069569110870361f, 0.4534400701522827f, 0.9379587769508362f, -0.9524520635604858f, 0.5721111297607422f, 0.4803713858127594f, 0.1888524740934372f, 0.23404961824417114f, 0.4551113247871399f, 0.3079749345779419f, 0.9693865180015564f, -0.808000922203064f, 0.43350350856781006f, 0.5480109453201294f, 0.09014047682285309f, 0.8264458179473877f, 0.23887549340724945f, 0.11156484484672546f, 0.09851469099521637f, -0.46088895201683044f, 0.694271445274353f, 0.5459176898002625f, 0.8373810648918152f, 0.41518935561180115f, 0.5987111926078796f, 0.3365407884120941f, 0.3727381229400635f, -0.572701632976532f, 0.9782775640487671f, 0.42664477229118347f, 0.728774905204773f, 0.7810642719268799f, 0.33411842584609985f, 0.32931798696517944f, 0.10125194489955902f, -0.31196892261505127f, 0.02265896648168564f, 0.34039515256881714f, 0.5668860077857971f, 0.6183294653892517f, 0.23443232476711273f, 0.18366847932338715f, 0.4836517572402954f, -0.14498832821846008f, 0.9834625720977783f, 0.9399606585502625f, 0.5854928493499756f, 0.326313853263855f, 0.9820814728736877f, 0.6239581108093262f, 0.6215041875839233f, -0.8424826264381409f, 0.7503342032432556f, 0.39861318469047546f, 0.9045019745826721f, 0.8517073392868042f, 0.49163490533828735f, 0.32343775033950806f, 0.538062334060669f, -0.5346395373344421f, 0.5220151543617249f, 0.8421036601066589f, 0.7382708191871643f, 0.6898077726364136f, 0.5317967534065247f, 0.9509987831115723f, 0.7149127721786499f, -0.3277544677257538f, 0.0715506374835968f, 0.5593999028205872f, 0.868598222732544f, 0.22104033827781677f, 0.19309915602207184f, 0.12132511287927628f, 0.1117926687002182f, -0.5790812969207764f, 0.12509247660636902f, 0.5624380707740784f, 0.40827304124832153f, 0.9346904158592224f, 0.17877696454524994f, 0.9619581699371338f, 0.8961393237113953f, -0.06542770564556122f, 0.47393444180488586f, 0.11388347297906876f, 0.978813111782074f, 0.32136452198028564f, 0.6235525608062744f, 0.7871607542037964f, 0.620328962802887f, -0.32515639066696167f, 0.346203088760376f, 0.01901438646018505f, 0.023161325603723526f, 0.9802848100662231f, 0.9852339029312134f, 0.28913718461990356f, 0.40665894746780396f, -0.194994255900383f, 0.1350124180316925f, 0.018706785514950752f, 0.9653154611587524f, 0.10227292776107788f, 0.4379866123199463f, 0.44148626923561096f, 0.043288808315992355f, -0.5609085559844971f, 0.9540665745735168f, 0.6497026681900024f, 0.4969228506088257f, 0.3338606357574463f, 0.6302682161331177f, 0.12883727252483368f, 0.815631091594696f, -0.3506653308868408f, 0.5296201705932617f, 0.28328779339790344f, 0.2888529896736145f, 0.633571445941925f, 0.2231605350971222f, 0.8696396350860596f, 0.440417617559433f, -0.7571228742599487f, 0.8350810408592224f, 0.3195662200450897f, 0.1594589650630951f, 0.5619506239891052f, 0.05276423692703247f, 0.546134352684021f, 0.19218723475933075f, -0.6574867367744446f, 0.5865893959999084f, 0.4795459508895874f, 0.8639801740646362f, 0.8386573791503906f, 0.9167623519897461f, 0.8544082045555115f, 0.5940340161323547f, -0.6494836211204529f, 0.6375734806060791f, 0.8612819314002991f, 0.35063454508781433f, 0.8892552256584167f, 0.18937063217163086f, 0.8283548355102539f, 0.16642458736896515f, -0.013733550906181335f, 0.37297776341438293f, 0.4426235258579254f, 0.09381797164678574f, 0.20426706969738007f, 0.2158864289522171f, 0.018761901184916496f, 0.9103838205337524f, -0.05694546923041344f, 0.036759160459041595f, 0.7596153020858765f, 0.6457990407943726f, 0.737494707107544f, 0.6941156387329102f, 0.6769853830337524f, 0.3805796205997467f, -0.8418927192687988f, 0.46255916357040405f, 0.4798177182674408f, 0.5669645667076111f, 0.7623076438903809f, 0.22870220243930817f, 0.07450491189956665f, 0.14404818415641785f, -0.6046022772789001f, 0.04154585674405098f, 0.7355191707611084f, 0.4589862525463104f, 0.5727096796035767f, 0.6585240364074707f, 0.5545608997344971f, 0.9056341648101807f, -0.5668179392814636f, 0.8068886399269104f, 0.7273958921432495f, 0.6424257755279541f, 0.8524369597434998f, 0.34905269742012024f, 0.19559049606323242f, 0.8820946216583252f, -0.5898945331573486f, 0.5970900058746338f, 0.5654643774032593f, 0.6034458875656128f, 0.3513489365577698f, 0.8293266892433167f, 0.15527527034282684f, 0.934282124042511f, -0.7925012707710266f, 0.9056612253189087f, 0.4910515248775482f, 0.6839771270751953f, 0.8514149188995361f, 0.218420147895813f, 0.608788013458252f, 0.9106059670448303f, -0.3892221748828888f, 0.01055300235748291f, 0.04352252557873726f, 0.48463383316993713f, 0.07626895606517792f, 0.43959933519363403f, 0.5967651009559631f, 0.666374146938324f, -0.941000759601593f, 0.8699889183044434f, 0.569049060344696f, 0.25736817717552185f, 0.4797729253768921f, 0.09096238762140274f, 0.31913912296295166f, 0.735748827457428f, -0.14712095260620117f, 0.3175134062767029f, 0.9737507700920105f, 0.8726694583892822f, 0.5853458046913147f, 0.07204369455575943f, 0.3649490475654602f, 0.27422627806663513f, -0.1437227576971054f, 0.9335148334503174f, 0.8615722060203552f, 0.8009343147277832f, 0.9159615635871887f, 0.5901170372962952f, 0.6955406665802002f, 0.4138268828392029f, -0.35031428933143616f, 0.35434484481811523f, 0.33394041657447815f, 0.3177418112754822f, 0.11585698276758194f, 0.5657684803009033f, 0.6944908499717712f, 0.4525323510169983f, -0.8447492718696594f, 0.8438023328781128f, 0.49491965770721436f, 0.6802406311035156f, 0.7467771768569946f, 0.11318644881248474f, 0.33585265278816223f, 0.5950025320053101f, -0.8842587471008301f, 0.060458529740571976f, 0.3336276710033417f, 0.3086779713630676f, 0.5969394445419312f, 0.5948282480239868f, 0.01174708642065525f, 0.15383853018283844f, -0.3003653883934021f, 0.14467279613018036f, 0.8836199045181274f, 0.8049367070198059f, 0.5381786227226257f, 0.8511708974838257f, 0.6808708906173706f, 0.22624677419662476f, -0.39674821496009827f, 0.9596908688545227f, 0.8770784139633179f, 0.795717179775238f, 0.15133807063102722f, 0.10492673516273499f, 0.8325409293174744f, 0.5701379776000977f, -0.12483330816030502f, 0.47216710448265076f, 0.2788814902305603f, 0.45732638239860535f, 0.7936761975288391f, 0.8082588315010071f, 0.34372711181640625f, 0.5397011041641235f, -0.4744202196598053f, 0.09903578460216522f, 0.012987335212528706f, 0.34760308265686035f, 0.4203946888446808f, 0.8481997847557068f, 0.39890873432159424f, 0.2919462323188782f, -0.5481598973274231f, 0.7576261162757874f, 0.65767502784729f, 0.9487118124961853f, 0.9770836234092712f, 0.6423355937004089f, 0.6203495860099792f, 0.7680906653404236f, -0.6454582214355469f, 0.10366687923669815f, 0.9573532938957214f, 0.17183803021907806f, 0.8998079895973206f, 0.4016832411289215f, 0.22918689250946045f, 0.595331609249115f, -0.3078024983406067f, 0.7379280924797058f, 0.37719613313674927f, 0.4487450122833252f, 0.7596803307533264f, 0.5378738641738892f, 0.41554924845695496f, 0.07663510739803314f, -0.6490235924720764f, 0.9975316524505615f, 0.8603821992874146f, 0.5187722444534302f, 0.8543211817741394f, 0.0810813382267952f, 0.6806600093841553f, 0.6740545034408569f, -0.6930246949195862f, 0.7507729530334473f, 0.5430638790130615f, 0.48831650614738464f, 0.3821444809436798f, 0.7396177649497986f, 0.7555691003799438f, 0.3157680034637451f, -0.16216978430747986f, 0.41145703196525574f, 0.8498453497886658f, 0.3002997636795044f, 0.2384137660264969f, 0.8572951555252075f, 0.7085416316986084f, 0.1917603462934494f, -0.19857680797576904f, 0.02536853775382042f, 0.2871490716934204f, 0.6526758670806885f, 0.571159839630127f, 0.565741777420044f, 0.09566330909729004f, 0.201053649187088f, -0.6133891344070435f, 0.41734760999679565f, 0.6780125498771667f, 0.137222558259964f, 0.2928280532360077f, 0.4169134199619293f, 0.4321191608905792f, 0.9302982091903687f, -0.35619741678237915f, 0.8848552703857422f, 0.19959256052970886f, 0.5169464349746704f, 0.6196813583374023f, 0.9486631751060486f, 0.8666016459465027f, 0.8272039294242859f, -0.7223175168037415f, 0.7754552364349365f, 0.7136975526809692f, 0.42274847626686096f, 0.972097635269165f, 0.4546155035495758f, 0.32475191354751587f, 0.06592077016830444f, -0.7861869931221008f, 0.0542663037776947f, 0.6093177795410156f, 0.19029755890369415f, 0.640821635723114f, 0.5486480593681335f, 0.7448166012763977f, 0.536881148815155f, -0.571326494216919f, 0.3850638270378113f, 0.2844342887401581f, 0.5538886189460754f, 0.780857264995575f, 0.9295697808265686f, 0.6512764096260071f, 0.10168985277414322f, -0.49977758526802063f, 0.23986834287643433f, 0.29027053713798523f, 0.764087975025177f, 0.47841882705688477f, 0.04560670256614685f, 0.1468077003955841f, 0.2179664969444275f, -0.8026308417320251f, 0.8132880926132202f, 0.25555625557899475f, 0.19571544229984283f, 0.9823535680770874f, 0.5579182505607605f, 0.9772424697875977f, 0.5651070475578308f, -0.16663728654384613f, 0.10260209441184998f, 0.5621121525764465f, 0.7282854914665222f, 0.689012885093689f, 0.5599919557571411f, 0.5146951079368591f, 0.9251806139945984f, -0.4631980359554291f, 0.45007655024528503f, 0.5302678346633911f, 0.9593169093132019f, 0.67149418592453f, 0.08636721223592758f, 0.0739462599158287f, 0.9236336946487427f, -0.978592038154602f, 0.2180410623550415f, 0.9033886790275574f, 0.004017371218651533f, 0.7723474502563477f, 0.7237837910652161f, 0.6414586901664734f, 0.743649423122406f, -0.6890329718589783f, 0.6153958439826965f, 0.44085177779197693f, 0.3015400767326355f, 0.5932666063308716f, 0.207272469997406f, 0.8558326363563538f, 0.8044650554656982f, -0.5817237496376038f, 0.9609249234199524f, 0.1726050227880478f, 0.6345056295394897f, 0.8222580552101135f, 0.5282889008522034f, 0.37281307578086853f, 0.42404669523239136f, -0.2388841211795807f, 0.3343963921070099f, 0.7831940650939941f, 0.021465443074703217f, 0.450962096452713f, 0.543942391872406f, 0.8019179701805115f, 0.059141576290130615f, -0.03438448905944824f, 0.585891842842102f, 0.9958832263946533f, 0.6029295325279236f, 0.8263872265815735f, 0.29804015159606934f, 0.1633589267730713f, 0.09893877059221268f, -0.48731353878974915f, 0.7583052515983582f, 0.17294269800186157f, 0.0049384660087525845f, 0.015979154035449028f, 0.7163466215133667f, 0.8428847789764404f, 0.7979581356048584f, -0.16637562215328217f, 0.5658549070358276f, 0.9296001195907593f, 0.7344208359718323f, 0.9009230732917786f, 0.03030925802886486f, 0.36221951246261597f, 0.046058591455221176f, -0.6298319101333618f, 0.18420511484146118f, 0.34328004717826843f, 0.5286803841590881f, 0.1593029797077179f, 0.40856385231018066f, 0.9157305955886841f, 0.5314626693725586f, -0.5525758266448975f, 0.1400044709444046f, 0.5074260830879211f, 0.22953081130981445f, 0.8183158040046692f, 0.8227508664131165f, 0.8028780817985535f, 0.8765757083892822f, -0.10186970978975296f, 0.7077849507331848f, 0.7384283542633057f, 0.5540648102760315f, 0.9553717374801636f, 0.9578167796134949f, 0.9106877446174622f, 0.9777970314025879f, -0.800599217414856f, 0.580310046672821f, 0.8165706992149353f, 0.3787723183631897f, 0.5544465780258179f, 0.5883464217185974f, 0.9562356472015381f, 0.7275526523590088f, -0.9562231302261353f, 0.42272841930389404f, 0.29840075969696045f, 0.125940203666687f, 0.3440247178077698f, 0.3640460968017578f, 0.7136870622634888f, 0.7599141597747803f, -0.8531108498573303f, 0.547722339630127f, 0.6501573920249939f, 0.12654641270637512f, 0.39818188548088074f, 0.34436142444610596f, 0.05057952553033829f, 0.5157154202461243f, -0.6191403865814209f, 0.912054717540741f, 0.6562516093254089f, 0.5041925311088562f, 0.28382566571235657f, 0.7402653098106384f, 0.9223166704177856f, 0.7440967559814453f, -0.41509518027305603f, 0.6099956631660461f, 0.059428419917821884f, 0.5971365571022034f, 0.22959274053573608f, 0.2759808897972107f, 0.8725630640983582f, 0.5417957305908203f, -0.32506775856018066f, 0.9540033340454102f, 0.8539900779724121f, 0.5671975016593933f, 0.5626959800720215f, 0.07635512202978134f, 0.8576594591140747f, 0.2591150999069214f, -0.458728164434433f, 0.9651968479156494f, 0.9800368547439575f, 0.6998807191848755f, 0.7768673896789551f, 0.4564052224159241f, 0.38651201128959656f, 0.29385873675346375f, -0.7667909860610962f, 0.05659199878573418f, 0.8292171955108643f, 0.29586267471313477f, 0.37468859553337097f, 0.7833823561668396f, 0.2524982690811157f, 0.5630500316619873f, -0.3497062027454376f, 0.6755569577217102f, 0.5479681491851807f, 0.28523001074790955f, 0.5490294694900513f, 0.2660149037837982f, 0.10739157348871231f, 0.7316622734069824f, -0.13701285421848297f, 0.9765061736106873f, 0.07669790089130402f, 0.9666189551353455f, 0.33110854029655457f, 0.24687395989894867f, 0.7588509321212769f, 0.42907610535621643f, -0.29995089769363403f, 0.43747678399086f, 0.44371452927589417f, 0.846091628074646f, 0.4709945619106293f, 0.19668009877204895f, 0.2645486295223236f, 0.5084923505783081f, -0.04048556834459305f, 0.3931306302547455f, 0.35510510206222534f, 0.422793984413147f, 0.12145668268203735f, 0.5429190397262573f, 0.7451192736625671f, 0.973275363445282f, -0.8742004632949829f, 0.26679283380508423f, 0.6579141616821289f, 0.6983384490013123f, 0.14860956370830536f, 0.14784152805805206f, 0.25818532705307007f, 0.3450820744037628f, -0.45070892572402954f, 0.9427591562271118f, 0.8346372246742249f, 0.4181073307991028f, 0.17233312129974365f, 0.41661086678504944f, 0.7062559723854065f, 0.26070818305015564f, -0.9412517547607422f, 0.3770790696144104f, 0.7604717016220093f, 0.5653793811798096f, 0.16075558960437775f, 0.49451032280921936f, 0.9166377186775208f, 0.09207021445035934f, -0.10551856458187103f, 0.04863479360938072f, 0.045464616268873215f, 0.8202808499336243f, 0.5052435398101807f, 0.8127766251564026f, 0.9981480836868286f, 0.3454056978225708f, -0.5598047971725464f, 0.16579608619213104f, 0.9927023649215698f, 0.8091564774513245f, 0.41793712973594666f, 0.452513188123703f, 0.17844940721988678f, 0.23161637783050537f, -0.022252090275287628f, 0.21484127640724182f, 0.7666813135147095f, 0.2580610513687134f, 0.09434821456670761f, 0.685324490070343f, 0.15576590597629547f, 0.9326278567314148f, -0.553534746170044f, 0.49864551424980164f, 0.49640917778015137f, 0.5968117117881775f, 0.5164402723312378f, 0.23866555094718933f, 0.7962774038314819f, 0.9065167307853699f, -0.12787438929080963f, 0.6244819760322571f, 0.2682982385158539f, 0.9008007049560547f, 0.41399139165878296f, 0.46647462248802185f, 0.30455338954925537f, 0.4032699465751648f, -0.9561032652854919f, 0.2609896659851074f, 0.5425817370414734f, 0.817126452922821f, 0.6753510236740112f, 0.2084358185529709f, 0.37061184644699097f, 0.707943320274353f, -0.22237518429756165f, 0.23681361973285675f, 0.07172146439552307f, 0.5802664756774902f, 0.5197915434837341f, 0.9160407781600952f, 0.7138373851776123f, 0.7510772347450256f, -0.04869654402136803f, 0.33610060811042786f, 0.36637037992477417f, 0.46625274419784546f, 0.11012620478868484f, 0.004532214719802141f, 0.5285487771034241f, 0.9125214219093323f, -0.9884007573127747f, 0.7421707510948181f, 0.38351166248321533f, 0.8699132204055786f, 0.5915073752403259f, 0.5858888626098633f, 0.5984307527542114f, 0.6845172643661499f, -0.5892966389656067f, 0.1273488849401474f, 0.1919488161802292f, 0.3425922691822052f, 0.5207251906394958f, 0.8938520550727844f, 0.49853456020355225f, 0.935312032699585f, -0.890602707862854f, 0.23840169608592987f, 0.6514185667037964f, 0.5116173624992371f, 0.5187777280807495f, 0.7179705500602722f, 0.33574816584587097f, 0.4690755009651184f, -0.6188321113586426f, 0.2941298186779022f, 0.8675827383995056f, 0.11472784727811813f, 0.5470029711723328f, 0.24644599854946136f, 0.010438049212098122f, 0.22649402916431427f, -0.23323401808738708f, 0.7740039825439453f, 0.03188768029212952f, 0.2896498441696167f, 0.147780179977417f, 0.3733876049518585f, 0.36437463760375977f, 0.13910530507564545f, -0.19808922708034515f, 0.48388978838920593f, 0.8276761770248413f, 0.5002532005310059f, 0.6573771238327026f, 0.034651029855012894f, 0.28301697969436646f, 0.8341266512870789f, -0.1553972065448761f, 0.2693963050842285f, 0.2851014733314514f, 0.2979046702384949f, 0.1479121446609497f, 0.6826395988464355f, 0.08813443034887314f, 0.15467259287834167f, -0.17856036126613617f, 0.3059455454349518f, 0.08193431794643402f, 0.36286798119544983f, 0.5007749795913696f, 0.20314958691596985f, 0.5360244512557983f, 0.693983793258667f, -0.44061076641082764f, 0.6155683398246765f, 0.45020225644111633f, 0.7424858808517456f, 0.7631123065948486f, 0.6182618141174316f, 0.45699355006217957f, 0.6510027647018433f, -0.21839971840381622f, 0.560548722743988f, 0.3287801146507263f, 0.6319026947021484f, 0.8752661943435669f, 0.35789191722869873f, 0.022872652858495712f, 0.6655635237693787f, -0.9945999979972839f, 0.01981404796242714f, 0.05657126009464264f, 0.15427955985069275f, 0.6638613343238831f, 0.07047072798013687f, 0.6691403985023499f, 0.08762049674987793f, -0.387270450592041f, 0.844571053981781f, 0.7250718474388123f, 0.2325059175491333f, 0.8436790704727173f, 0.9834647178649902f, 0.7031375765800476f, 0.8233503699302673f, -0.09331440180540085f, 0.7597438097000122f, 0.9445589184761047f, 0.08469418436288834f, 0.7770610451698303f, 0.20358753204345703f, 0.19653566181659698f, 0.4490779638290405f, -0.013311345130205154f, 0.48363590240478516f, 0.4226865768432617f, 0.9200101494789124f, 0.2939800024032593f, 0.5971664190292358f, 0.3385125696659088f, 0.3217419981956482f, -0.2429058998823166f, 0.3126446604728699f, 0.19909535348415375f, 0.48307475447654724f, 0.052244171500205994f, 0.9921363592147827f, 0.6385849714279175f, 0.12082074582576752f, -0.8357197642326355f, 0.28416743874549866f, 0.20697857439517975f, 0.3937024772167206f, 0.7852540016174316f, 0.05847735330462456f, 0.2923603355884552f, 0.786628007888794f, -0.8869121074676514f, 0.3351006507873535f, 0.9281889200210571f, 0.427543044090271f, 0.5222486853599548f, 0.8326805233955383f, 0.5490161180496216f, 0.07690534740686417f, -0.7615965604782104f, 0.6369633078575134f, 0.7308168411254883f, 0.1394374668598175f, 0.002514466643333435f, 0.290514200925827f, 0.03267771750688553f, 0.4663524925708771f, -0.09657903015613556f, 0.4217448830604553f, 0.3092300295829773f, 0.08718132227659225f, 0.6058720350265503f, 0.7452613115310669f, 0.8195725083351135f, 0.017832200974225998f, -0.31500446796417236f, 0.37617114186286926f, 0.46546003222465515f, 0.9915533065795898f, 0.09614045917987823f, 0.9595932960510254f, 0.47347292304039f, 0.2794913649559021f, -0.33475005626678467f, 0.10124499350786209f, 0.4656095802783966f, 0.4790011942386627f, 0.29735422134399414f, 0.9617979526519775f, 0.25736141204833984f, 0.5402342081069946f, -0.5947325825691223f, 0.6557981371879578f, 0.8535703420639038f, 0.6667965054512024f, 0.06802774965763092f, 0.9019110798835754f, 0.010148895904421806f, 0.5157342553138733f, -0.1932734251022339f, 0.5898855328559875f, 0.19535863399505615f, 0.6119667291641235f, 0.9775914549827576f, 0.12799431383609772f, 0.8645601868629456f, 0.26462501287460327f, -0.43855246901512146f, 0.9213702082633972f, 0.6329778432846069f, 0.8033270835876465f, 0.2117508202791214f, 0.021357960999011993f, 0.2283305674791336f, 0.4971681535243988f, -0.20045815408229828f, 0.08725006878376007f, 0.3675575256347656f, 0.24164284765720367f, 0.4845649003982544f, 0.7093554735183716f, 0.8341127038002014f, 0.6347561478614807f, -0.767730176448822f, 0.567736804485321f, 0.09911534935235977f, 0.5065085291862488f, 0.7346622943878174f, 0.21845032274723053f, 0.136243999004364f, 0.9109355211257935f, -0.30950358510017395f, 0.7308454513549805f, 0.7965331077575684f, 0.6564999222755432f, 0.38102957606315613f, 0.4450811743736267f, 0.8645416498184204f, 0.09755702316761017f, -0.04221469163894653f, 0.6049732565879822f, 0.04598597437143326f, 0.13441050052642822f, 0.8548550009727478f, 0.34382179379463196f, 0.33407777547836304f, 0.016983166337013245f, -0.031871676445007324f, 0.4876440763473511f, 0.7642459869384766f, 0.023069551214575768f, 0.21006283164024353f, 0.7748590707778931f, 0.25412413477897644f, 0.16579808294773102f, -0.1141936331987381f, 0.9996858835220337f, 0.5651909112930298f, 0.5906991958618164f, 0.6568933129310608f, 0.9563372731208801f, 0.7809664011001587f, 0.37565526366233826f, -0.22806484997272491f, 0.5793979167938232f, 0.6893762946128845f, 0.29954391717910767f, 0.17811359465122223f, 0.13685913383960724f, 0.38732635974884033f, 0.42297154664993286f, -0.6105256676673889f, 0.26687392592430115f, 0.011402620002627373f, 0.801663875579834f, 0.21504367887973785f, 0.06319010257720947f, 0.939606249332428f, 0.6895385980606079f, -0.5135305523872375f, 0.5043131709098816f, 0.6599707007408142f, 0.6499229073524475f, 0.22539454698562622f, 0.5120095014572144f, 0.7519488334655762f, 0.27420327067375183f, -0.008371531963348389f, 0.7443520426750183f, 0.157077357172966f, 0.15494641661643982f, 0.10060235112905502f, 0.25977733731269836f, 0.515404224395752f, 0.6712545156478882f, -0.8195123076438904f, 0.45420700311660767f, 0.4707471430301666f, 0.5884284973144531f, 0.6444569826126099f, 0.21689777076244354f, 0.8228161931037903f, 0.38015055656433105f, -0.24873502552509308f, 0.8226260542869568f, 0.41383862495422363f, 0.3985957205295563f, 0.5778418183326721f, 0.5875564217567444f, 0.6476314663887024f, 0.16371071338653564f, -0.253955602645874f, 0.7163568139076233f, 0.4252803921699524f, 0.30493685603141785f, 0.349560409784317f, 0.15914848446846008f, 0.7852895259857178f, 0.9585908651351929f, -0.7784723043441772f, 0.04625065252184868f, 0.016710961237549782f, 0.8029348850250244f, 0.029198287054896355f, 0.8379709124565125f, 0.357573539018631f, 0.29631003737449646f, -0.6201075315475464f, 0.11883977800607681f, 0.031382717192173004f, 0.8344253301620483f, 0.9467401504516602f, 0.15463373064994812f, 0.9213812351226807f, 0.734005868434906f, -0.1088055893778801f, 0.3075142502784729f, 0.8146933913230896f, 0.6064997315406799f, 0.6614122986793518f, 0.9767274260520935f, 0.6857179403305054f, 0.40818294882774353f, -0.7716557383537292f, 0.46427643299102783f, 0.3376457393169403f, 0.41984957456588745f, 0.018055634573101997f, 0.7942578196525574f, 0.2729538381099701f, 0.7820062041282654f, -0.4343554675579071f, 0.1992618590593338f, 0.8842148780822754f, 0.05145271122455597f, 0.8353388905525208f, 0.09412477165460587f, 0.5177263021469116f, 0.1822623312473297f, -0.5869091153144836f, 0.43297842144966125f, 0.40838971734046936f, 0.5846019387245178f, 0.2772391438484192f, 0.6147730946540833f, 0.7844535112380981f, 0.9389476776123047f, -0.2453455775976181f, 0.9746426939964294f, 0.5659788250923157f, 0.7877557277679443f, 0.48725825548171997f, 0.6660171151161194f, 0.48968005180358887f, 0.8128915429115295f, -0.5430408120155334f, 0.8900361657142639f, 0.7909623980522156f, 0.8216084241867065f, 0.9554109573364258f, 0.36893749237060547f, 0.03310086205601692f, 0.6217030882835388f, -0.43187078833580017f, 0.6093645095825195f, 0.7524925470352173f, 0.7966594099998474f, 0.6129021048545837f, 0.2938077449798584f, 0.6568275690078735f, 0.3016669452190399f, -0.8229682445526123f, 0.6020894646644592f, 0.7352709770202637f, 0.14533212780952454f, 0.7739270329475403f, 0.3178347647190094f, 0.74189293384552f, 0.4970003068447113f, -0.0442868247628212f, 0.07682159543037415f, 0.8898542523384094f, 0.2341502159833908f, 0.009924894198775291f, 0.5574576258659363f, 0.8638818264007568f, 0.3990887403488159f, -0.7998144626617432f, 0.4602653682231903f, 0.06554021686315536f, 0.8552647233009338f, 0.45515021681785583f, 0.7551124095916748f, 0.22067628800868988f, 0.6143247485160828f, -0.014869308099150658f, 0.4086717665195465f, 0.9866605997085571f, 0.8201406598091125f, 0.4452897906303406f, 0.8870790004730225f, 0.6549956798553467f, 0.09220132231712341f, -0.749200701713562f, 0.629309892654419f, 0.6397115588188171f, 0.04561769217252731f, 0.790913462638855f, 0.8558219075202942f, 0.9261177182197571f, 0.4361434876918793f, -0.574977695941925f, 0.617507815361023f, 0.1338505744934082f, 0.9763814210891724f, 0.1743459403514862f, 0.652425229549408f, 0.6560846567153931f, 0.9382926225662231f, -0.9042579531669617f, 0.6282464861869812f, 0.9090076088905334f, 0.8503795862197876f, 0.8707733750343323f, 0.47029274702072144f, 0.3513791859149933f, 0.6304794549942017f, -0.015415294095873833f, 0.6885669827461243f, 0.3893386125564575f, 0.25600290298461914f, 0.31459376215934753f, 0.5317378640174866f, 0.22493869066238403f, 0.31818559765815735f, -0.5448722839355469f, 0.17692479491233826f, 0.6677927374839783f, 0.3552677631378174f, 0.7322791218757629f, 0.38481611013412476f, 0.459546834230423f, 0.385276198387146f, -0.7334826588630676f, 0.5934941172599792f, 0.23996123671531677f, 0.2120659202337265f, 0.6573072671890259f, 0.8753529191017151f, 0.968497097492218f, 0.4460807740688324f, -0.38495877385139465f, 0.5997920036315918f, 0.5430586338043213f, 0.09297885745763779f, 0.27016589045524597f, 0.39139533042907715f, 0.21714580059051514f, 0.40008050203323364f, -0.6985281109809875f, 0.1823732554912567f, 0.6283516883850098f, 0.024006493389606476f, 0.169626846909523f, 0.9378196597099304f, 0.22611384093761444f, 0.17320223152637482f, -0.7714921236038208f, 0.462204247713089f, 0.4723072648048401f, 0.3123026192188263f, 0.5344440937042236f, 0.8297295570373535f, 0.6148020029067993f, 0.8696753978729248f, -0.08517199009656906f, 0.9355615973472595f, 0.3066116273403168f, 0.5585065484046936f, 0.07051846385002136f, 0.8932825326919556f, 0.7698503732681274f, 0.9732434153556824f, -0.31726783514022827f, 0.35429027676582336f, 0.12045486271381378f, 0.5572668313980103f, 0.4340326189994812f, 0.22424565255641937f, 0.8580123782157898f, 0.9074723124504089f, -0.1670699268579483f, 0.023375513032078743f, 0.005829703528434038f, 0.9129470586776733f, 0.5226494073867798f, 0.48055538535118103f, 0.2105925977230072f, 0.9963451027870178f, -0.8952671885490417f, 0.6032847762107849f, 0.07149660587310791f, 0.7768651247024536f, 0.06131930649280548f, 0.4523938000202179f, 0.09893789887428284f, 0.7527331709861755f, -0.19567295908927917f, 0.26869043707847595f, 0.5149948000907898f, 0.9748107194900513f, 0.3099454343318939f, 0.6969453692436218f, 0.010542700998485088f, 0.6621844172477722f, -0.4993211627006531f, 0.9017418026924133f, 0.5229533910751343f, 0.07114505767822266f, 0.4018796980381012f, 0.3726721704006195f, 0.039436474442481995f, 0.18218104541301727f, -0.14667169749736786f, 0.13327254354953766f, 0.22524212300777435f, 0.3030979335308075f, 0.049741942435503006f, 0.5965562462806702f, 0.25408506393432617f, 0.016300508752465248f, -0.1641092747449875f, 0.5749256014823914f, 0.03282511979341507f, 0.9774221777915955f, 0.42521604895591736f, 0.9187307357788086f, 0.40962621569633484f, 0.4096074402332306f, -0.5374189019203186f, 0.913317859172821f, 0.5673277974128723f, 0.6569012999534607f, 0.869742751121521f, 0.46190014481544495f, 0.36870554089546204f, 0.21890194714069366f, -0.4419272541999817f, 0.9692065715789795f, 0.5162498950958252f, 0.5685682892799377f, 0.015411161817610264f, 0.5410330295562744f, 0.28345105051994324f, 0.5714081525802612f, -0.07840001583099365f, 0.7473624348640442f, 0.6028253436088562f, 0.35458609461784363f, 0.863727867603302f, 0.8567834496498108f, 0.1426127851009369f, 0.019281582906842232f, -0.9574796557426453f, 0.44533759355545044f, 0.49796271324157715f, 0.16964830458164215f, 0.9406083822250366f, 0.5040054321289062f, 0.421532541513443f, 0.576648473739624f, -0.6706634163856506f, 0.6798522472381592f, 0.6378399133682251f, 0.7727358341217041f, 0.5629021525382996f, 0.058401890099048615f, 0.1304151564836502f, 0.3478527069091797f, -0.8756484389305115f, 0.7953497767448425f, 0.5949314832687378f, 0.5822330117225647f, 0.5361485481262207f, 0.578433096408844f, 0.6781120300292969f, 0.5267541408538818f, -0.065127432346344f, 0.6297270059585571f, 0.7494972944259644f, 0.4126569330692291f, 0.7958983182907104f, 0.0568879060447216f, 0.20789051055908203f, 0.08811938017606735f, -0.42904385924339294f, 0.7027654647827148f, 0.6115458607673645f, 0.3114224076271057f, 0.7808285355567932f, 0.39625024795532227f, 0.42172566056251526f, 0.6219984889030457f, -0.1200011670589447f, 0.18748699128627777f, 0.24797558784484863f, 0.1414991170167923f, 0.6958195567131042f, 0.35028520226478577f, 0.3876505196094513f, 0.4909755289554596f, -0.21665839850902557f, 0.7808777093887329f, 0.04029321298003197f, 0.7381937503814697f, 0.699905514717102f, 0.6787438988685608f, 0.6507581472396851f, 0.396870493888855f, -0.9550904035568237f, 0.7097867131233215f, 0.6462947130203247f, 0.23031073808670044f, 0.03576081991195679f, 0.5806544423103333f, 0.63916015625f, 0.0838427022099495f, -0.149383082985878f, 0.595340371131897f, 0.16265960037708282f, 0.3954910337924957f, 0.8139365315437317f, 0.9397068619728088f, 0.6181126832962036f, 0.16088472306728363f, -0.13041208684444427f, 0.7272637486457825f, 0.9839509129524231f, 0.4615451395511627f, 0.08771773427724838f, 0.648904025554657f, 0.30334052443504333f, 0.43503764271736145f, -0.34125542640686035f, 0.44326984882354736f, 0.05509583279490471f, 0.30046167969703674f, 0.45343098044395447f, 0.44127190113067627f, 0.21412603557109833f, 0.49714088439941406f, -0.40331366658210754f, 0.7589098215103149f, 0.7237369418144226f, 0.8355899453163147f, 0.2087763398885727f, 0.07501780241727829f, 0.6454891562461853f, 0.8710755109786987f, -0.40875789523124695f, 0.7604044675827026f, 0.17876239120960236f, 0.8344573378562927f, 0.5406169295310974f, 0.4131917357444763f, 0.5444881319999695f, 0.7976641654968262f, -0.7912575602531433f, 0.21216829121112823f, 0.12292136996984482f, 0.5166784524917603f, 0.3492618203163147f, 0.5423621535301208f, 0.3150249123573303f, 0.09279699623584747f, -0.7944507002830505f, 0.36441999673843384f, 0.11476896703243256f, 0.46584317088127136f, 0.9178310632705688f, 0.4644983112812042f, 0.5081011056900024f, 0.8264354467391968f, -0.2732446491718292f, 0.19777743518352509f, 0.9551512598991394f, 0.30916017293930054f, 0.9864633679389954f, 0.9696825742721558f, 0.21960949897766113f, 0.050759706646203995f, -0.47064822912216187f, 0.8398041129112244f, 0.6431854963302612f, 0.3562360107898712f, 0.6596785187721252f, 0.2122497409582138f, 0.5320772528648376f, 0.6483961343765259f, -0.44588178396224976f, 0.13615600764751434f, 0.5055800676345825f, 0.4374461770057678f, 0.6359736919403076f, 0.292374849319458f, 0.08170706033706665f, 0.35488036274909973f, -0.021561628207564354f, 0.19006645679473877f, 0.09057524800300598f, 0.5963505506515503f, 0.9993888139724731f, 0.8737936019897461f, 0.0888693705201149f, 0.75076824426651f, -0.4572288990020752f, 0.5926324725151062f, 0.6758850812911987f, 0.8647615313529968f, 0.6170743703842163f, 0.422921359539032f, 0.05660717561841011f, 0.3374280333518982f, -0.9945685863494873f, 0.7481607794761658f, 0.7231476902961731f, 0.4154372811317444f, 0.4458261728286743f, 0.26965856552124023f, 0.7295532822608948f, 0.09520049393177032f, -0.9426208138465881f, 0.13568736612796783f, 0.5576450824737549f, 0.8290243744850159f, 0.19478635489940643f, 0.3137006163597107f, 0.8307012915611267f, 0.2157413810491562f, -0.4132857322692871f, 0.8360196948051453f, 0.18835139274597168f, 0.9657498598098755f, 0.8361114859580994f, 0.2756466567516327f, 0.024818969890475273f, 0.0027443573344498873f, -0.38214316964149475f, 0.819202184677124f, 0.1516541689634323f, 0.7574657201766968f, 0.8453144431114197f, 0.40309011936187744f, 0.25501227378845215f, 0.041482195258140564f, -0.6124917268753052f, 0.12077409029006958f, 0.6866743564605713f, 0.3627359867095947f, 0.13380646705627441f, 0.5890852212905884f, 0.7407841086387634f, 0.5440883040428162f, -0.4661741256713867f, 0.25503799319267273f, 0.12735897302627563f, 0.2833976447582245f, 0.911687433719635f, 0.47519832849502563f, 0.16906560957431793f, 0.40087613463401794f, -0.5481018424034119f, 0.7079694867134094f, 0.9055728912353516f, 0.04845406860113144f, 0.8781169056892395f, 0.40423765778541565f, 0.27327942848205566f, 0.7458196878433228f, -0.800559937953949f, 0.12268011271953583f, 0.6921689510345459f, 0.8501626253128052f, 0.007867220789194107f, 0.3449597656726837f, 0.7592018246650696f, 0.8623772263526917f, -0.6889387369155884f, 0.08553656935691833f, 0.1120724305510521f, 0.19636988639831543f, 0.6411614418029785f, 0.1527501344680786f, 0.038069043308496475f, 0.08129770308732986f, -0.3569895327091217f, 0.3337584137916565f, 0.2761353850364685f, 0.01676192693412304f, 0.3595006763935089f, 0.8286221623420715f, 0.11462618410587311f, 0.5306154489517212f, -0.3653380274772644f, 0.1975909173488617f, 0.15577393770217896f, 0.877387285232544f, 0.05367960035800934f, 0.567310094833374f, 0.12285345792770386f, 0.9507032632827759f, -0.8125550746917725f, 0.26318109035491943f, 0.2490662783384323f, 0.3518819510936737f, 0.9440258145332336f, 0.6562062501907349f, 0.4191533327102661f, 0.5656295418739319f, -0.5235134363174438f, 0.8047582507133484f, 0.9125440120697021f, 0.42598506808280945f, 0.2273314744234085f, 0.6973357796669006f, 0.2546786367893219f, 0.1398061066865921f, -0.4568498432636261f, 0.44183048605918884f, 0.01071904320269823f, 0.47749629616737366f, 0.47135475277900696f, 0.6133410334587097f, 0.4900275468826294f, 0.09416335076093674f, -0.06514633446931839f, 0.22700996696949005f, 0.14199019968509674f, 0.715603768825531f, 0.14258311688899994f, 0.022603105753660202f, 0.4081127345561981f, 0.2318286895751953f, -0.13364602625370026f, 0.9547637701034546f, 0.0212416872382164f, 0.8605378270149231f, 0.8186411261558533f, 0.8348776698112488f, 0.6645104885101318f, 0.9505473375320435f, -0.5913138389587402f, 0.05117795616388321f, 0.05038702115416527f, 0.7347308993339539f, 0.4525873363018036f, 0.8238128423690796f, 0.7975826859474182f, 0.02417704649269581f, -0.5030921697616577f, 0.011222146451473236f, 0.9791391491889954f, 0.5629008412361145f, 0.6039721369743347f, 0.14075203239917755f, 0.7138895988464355f, 0.7478355765342712f, -0.5943285822868347f, 0.5311577916145325f, 0.6839660406112671f, 0.5928083658218384f, 0.03259582072496414f, 0.8620595335960388f, 0.18312223255634308f, 0.4982852041721344f, -0.05283990502357483f, 0.8667044639587402f, 0.5802772641181946f, 0.01351192407310009f, 0.5928527116775513f, 0.4914059042930603f, 0.7796770930290222f, 0.7267748713493347f, -0.2784041464328766f, 0.917339563369751f, 0.07917994260787964f, 0.4591641128063202f, 0.505443274974823f, 0.49223431944847107f, 0.9755482077598572f, 0.2155337631702423f, -0.4673527777194977f, 0.2818102240562439f, 0.030223244801163673f, 0.10452285408973694f, 0.43434661626815796f, 0.28461185097694397f, 0.07135612517595291f, 0.12196151912212372f, -0.7059363722801208f, 0.7337434887886047f, 0.4050200283527374f, 0.3613796532154083f, 0.8322113752365112f, 0.3622269630432129f, 0.024333512410521507f, 0.8625353574752808f, -0.5758901238441467f, 0.08995811641216278f, 0.9011985063552856f, 0.9975745677947998f, 0.6657969355583191f, 0.5841735005378723f, 0.06516890972852707f, 0.06831428408622742f, -0.7013012766838074f, 0.9085066914558411f, 0.5249353051185608f, 0.11745718866586685f, 0.285333514213562f, 0.5958430767059326f, 0.9527171850204468f, 0.6078888177871704f, -0.6593550443649292f, 0.5978918671607971f, 0.3344598412513733f, 0.27267682552337646f, 0.21708063781261444f, 0.3406975269317627f, 0.3906852602958679f, 0.2694500982761383f, -0.973895788192749f, 0.6107914447784424f, 0.5278735160827637f, 0.24771565198898315f, 0.3222702145576477f, 0.7202987670898438f, 0.6658678650856018f, 0.5596429109573364f, -0.939044177532196f, 0.6416250467300415f, 0.5804696679115295f, 0.26815342903137207f, 0.648818850517273f, 0.6591957211494446f, 0.17739224433898926f, 0.26152437925338745f, -0.10823995620012283f, 0.8677722215652466f, 0.6364566683769226f, 0.1399688571691513f, 0.042525723576545715f, 0.9437466859817505f, 0.9020317792892456f, 0.5327423214912415f, -0.1183299645781517f, 0.964774489402771f, 0.2891153395175934f, 0.6231315732002258f, 0.06241022050380707f, 0.8380143642425537f, 0.4872163236141205f, 0.9677347540855408f, -0.8858006596565247f, 0.05061962082982063f, 0.4865442216396332f, 0.6694040298461914f, 0.08202385902404785f, 0.9804871082305908f, 0.9702462553977966f, 0.5269064903259277f, -0.2191186398267746f, 0.04534239321947098f, 0.9812413454055786f, 0.31654661893844604f, 0.4995279014110565f, 0.30242207646369934f, 0.0714382529258728f, 0.5783684253692627f, -0.8381806015968323f, 0.7389525771141052f, 0.7655229568481445f, 0.8390331864356995f, 0.9685980677604675f, 0.2891215682029724f, 0.9036178588867188f, 0.3458488881587982f, -0.14999280869960785f, 0.33422383666038513f, 0.14800295233726501f, 0.5416836142539978f, 0.8613149523735046f, 0.28565144538879395f, 0.6650139093399048f, 0.7835116386413574f, -0.24371154606342316f, 0.18931688368320465f, 0.7129859924316406f, 0.3647417724132538f, 0.8189460039138794f, 0.33796238899230957f, 0.18656674027442932f, 0.09693854302167892f, -0.5183601379394531f, 0.013749287463724613f, 0.033091142773628235f, 0.01882622390985489f, 0.8015996217727661f, 0.39396482706069946f, 0.6455643177032471f, 0.39944007992744446f, -0.9064040780067444f, 0.8547985553741455f, 0.8368915915489197f, 0.9536107182502747f, 0.5907731056213379f, 0.676893949508667f, 0.9973596334457397f, 0.17096489667892456f, -0.5521183609962463f, 0.7070504426956177f, 0.36052000522613525f, 0.07212429493665695f, 0.21406906843185425f, 0.8811119198799133f, 0.403940349817276f, 0.48128291964530945f, -0.6671767830848694f, 0.07077563554048538f, 0.8714585304260254f, 0.8337085843086243f, 0.17201460897922516f, 0.296118825674057f, 0.3538476526737213f, 0.30895712971687317f, -0.8342952728271484f, 0.17972785234451294f, 0.043647076934576035f, 0.4676039516925812f, 0.7262374758720398f, 0.2699752449989319f, 0.7384724020957947f, 0.2515278160572052f, -0.2886689305305481f, 0.20454254746437073f, 0.7680227160453796f, 0.017544372007250786f, 0.1758810430765152f, 0.6048486232757568f, 0.15645891427993774f, 0.6925740242004395f, -0.5775827169418335f, 0.8102414011955261f, 0.1320473700761795f, 0.5062366127967834f, 0.39037057757377625f, 0.6551806926727295f, 0.578109622001648f, 0.13248588144779205f, -0.8462768197059631f, 0.49582183361053467f, 0.49973493814468384f, 0.7783365249633789f, 0.44223183393478394f, 0.8930637836456299f, 0.0143373291939497f, 0.2970232665538788f, -0.3554936647415161f, 0.47536516189575195f, 0.9034615159034729f, 0.24181720614433289f, 0.4830892086029053f, 0.42457881569862366f, 0.7942586541175842f, 0.34068071842193604f, -0.8485503196716309f, 0.847213625907898f, 0.00028493895661085844f, 0.26627278327941895f, 0.01493625994771719f, 0.15868905186653137f, 0.39646628499031067f, 0.45512068271636963f, -0.27188029885292053f, 0.4713763892650604f, 0.4883042573928833f, 0.6028802990913391f, 0.4756224751472473f, 0.4543202221393585f, 0.8172831535339355f, 0.7616668343544006f, -0.34957194328308105f, 0.36702850461006165f, 0.2266688346862793f, 0.663027822971344f, 0.06445258855819702f, 0.4596445858478546f, 0.21574920415878296f, 0.2920711934566498f, -0.24698954820632935f, 0.17211362719535828f, 0.411425918340683f, 0.4452768862247467f, 0.24487189948558807f, 0.3272576928138733f, 0.25363579392433167f, 0.9016926884651184f, -0.9052233695983887f, 0.9436159729957581f, 0.30900871753692627f, 0.9976465702056885f, 0.14474357664585114f, 0.8693176507949829f, 0.44344034790992737f, 0.25975796580314636f, -0.29497116804122925f, 0.38955968618392944f, 0.5711030960083008f, 0.41468822956085205f, 0.568455159664154f, 0.2546637952327728f, 0.8164005279541016f, 0.8723140954971313f, -0.7268623113632202f, 0.43066251277923584f, 0.4566937983036041f, 0.5367550849914551f, 0.7085674405097961f, 0.5670899152755737f, 0.7729302644729614f, 0.7322848439216614f, -0.6446900367736816f, 0.5059552192687988f, 0.7282719016075134f, 0.691901445388794f, 0.32471963763237f, 0.11400822550058365f, 0.7197796702384949f, 0.2646063566207886f, -0.7484192848205566f, 0.7344132661819458f, 0.9246203303337097f, 0.47906777262687683f, 0.6107216477394104f, 0.7567223906517029f, 0.2776002883911133f, 0.42238202691078186f, -0.338581919670105f, 0.7048711776733398f, 0.7247509360313416f, 0.35854583978652954f, 0.7172719240188599f, 0.02701086923480034f, 0.4989759922027588f, 0.37416139245033264f, -0.9454524517059326f, 0.7272323369979858f, 0.030885402113199234f, 0.8309367299079895f, 0.5742493271827698f, 0.3031870126724243f, 0.8572216033935547f, 0.8426511883735657f, -0.10798775404691696f, 0.35407203435897827f, 0.7517939209938049f, 0.6670063138008118f, 0.22912736237049103f, 0.7392468452453613f, 0.9293457865715027f, 0.681085467338562f, -0.4705382287502289f, 0.8498907089233398f, 0.07970558106899261f, 0.43845340609550476f, 0.7585096955299377f, 0.23946057260036469f, 0.11968211084604263f, 0.3568497598171234f, -0.9257818460464478f, 0.8729246258735657f, 0.7273591160774231f, 0.8958113193511963f, 0.964748203754425f, 0.33470264077186584f, 0.3811333477497101f, 0.7440683245658875f, -0.04585205391049385f, 0.22665606439113617f, 0.38371342420578003f, 0.022561486810445786f, 0.9454577565193176f, 0.3826218247413635f, 0.05693786218762398f, 0.5588026642799377f, -0.12477292865514755f, 0.4979560971260071f, 0.2492906004190445f, 0.3511444926261902f, 0.9965897798538208f, 0.021007858216762543f, 0.5612763166427612f, 0.5646694898605347f, -0.2665305435657501f, 0.7594227194786072f, 0.5363712906837463f, 0.22533981502056122f, 0.15526889264583588f, 0.4229157567024231f, 0.5851037502288818f, 0.04826745390892029f, -0.1179359182715416f, 0.3368561267852783f, 0.424507737159729f, 0.769402027130127f, 0.3479260802268982f, 0.00919985119253397f, 0.8204460740089417f, 0.1414218246936798f, -0.08615895360708237f, 0.6591918468475342f, 0.41126078367233276f, 0.6145492196083069f, 0.5460386872291565f, 0.4671664237976074f, 0.579930305480957f, 0.4637300372123718f, -0.6484242677688599f, 0.9671593308448792f, 0.3520597219467163f, 0.8537496328353882f, 0.38519781827926636f, 0.30484893918037415f, 0.40989425778388977f, 0.8482250571250916f, -0.3078107535839081f, 0.5078858137130737f, 0.7644492387771606f, 0.1674892157316208f, 0.27392247319221497f, 0.5181412696838379f, 0.35835057497024536f, 0.08414816856384277f, -0.6268779635429382f, 0.011239382438361645f, 0.48150715231895447f, 0.8837683796882629f, 0.21175436675548553f, 0.8332299590110779f, 0.03857475519180298f, 0.8034984469413757f, -0.35405316948890686f, 0.5546971559524536f, 0.3335670828819275f, 0.3205941617488861f, 0.18627266585826874f, 0.022667640820145607f, 0.8090994358062744f, 0.5605264902114868f, -0.3830839693546295f, 0.941475510597229f, 0.9941936135292053f, 0.7092800140380859f, 0.15142899751663208f, 0.4118812382221222f, 0.429703027009964f, 0.12376030534505844f, -0.013255451805889606f, 0.39169472455978394f, 0.7240994572639465f, 0.9122769832611084f, 0.7799520492553711f, 0.5002619624137878f, 0.17282584309577942f, 0.686981737613678f, -0.15473560988903046f, 0.9658717513084412f, 0.9971224665641785f, 0.12511174380779266f, 0.3665570914745331f, 0.41177240014076233f, 0.6810212731361389f, 0.6325497031211853f, -0.65863436460495f, 0.05041184648871422f, 0.2511084973812103f, 0.8989523649215698f, 0.7969578504562378f, 0.04592103883624077f, 0.39277639985084534f, 0.2501462996006012f, -0.7773315906524658f, 0.26837900280952454f, 0.5767156481742859f, 0.9806299805641174f, 0.8513436317443848f, 0.2887527346611023f, 0.4373528063297272f, 0.5156379342079163f, -0.1417648047208786f, 0.44970911741256714f, 0.4261557459831238f, 0.4807536005973816f, 0.7727843523025513f, 0.6566081643104553f, 0.7805473208427429f, 0.46537134051322937f, -0.41243746876716614f, 0.5044002532958984f, 0.2642858624458313f, 0.11196110397577286f, 0.07397046685218811f, 0.5943901538848877f, 0.878903329372406f, 0.5863185524940491f, -0.31457245349884033f, 0.9984798431396484f, 0.5432153940200806f, 0.46712663769721985f, 0.3223642110824585f, 0.47486817836761475f, 0.20913062989711761f, 0.4714132845401764f, -0.6438313722610474f, 0.5407165884971619f, 0.021219579502940178f, 0.4055587351322174f, 0.03361175209283829f, 0.9934346079826355f, 0.38928675651550293f, 0.7884813547134399f, -0.9668828845024109f, 0.12113199383020401f, 0.1426762193441391f, 0.8663025498390198f, 0.8732476830482483f, 0.4445004463195801f, 0.4218846261501312f, 0.10726503282785416f, -0.1950547844171524f, 0.12606029212474823f, 0.9774017930030823f, 0.46641817688941956f, 0.9227265119552612f, 0.6658572554588318f, 0.09692046046257019f, 0.20821884274482727f, -0.292724609375f, 0.051532428711652756f, 0.830589771270752f, 0.7585253119468689f, 0.4827381372451782f, 0.15788201987743378f, 0.39267581701278687f, 0.9489816427230835f, -0.8839859962463379f, 0.3378267288208008f, 0.6310445666313171f, 0.34860360622406006f, 0.17178067564964294f, 0.03893701359629631f, 0.8813800811767578f, 0.6257457137107849f, -0.9876512289047241f, 0.7483140826225281f, 0.8685299158096313f, 0.9192180633544922f, 0.47534435987472534f, 0.5231711864471436f, 0.1926458179950714f, 0.019321832805871964f, -0.03836726024746895f, 0.9340930581092834f, 0.4329109787940979f, 0.8679236769676208f, 0.15612435340881348f, 0.7002968192100525f, 0.8011676669120789f, 0.9225367903709412f, -0.19270530343055725f, 0.5663388967514038f, 0.8200154304504395f, 0.6666884422302246f, 0.26582658290863037f, 0.2313385009765625f, 0.6528120040893555f, 0.03775133565068245f, -0.8008703589439392f, 0.34303542971611023f, 0.2266470491886139f, 0.8677593469619751f, 0.9549827575683594f, 0.9572351574897766f, 0.9061740636825562f, 0.5038570761680603f, -0.06163667514920235f, 0.1925395280122757f, 0.00774642638862133f, 0.7875379920005798f, 0.6663299202919006f, 0.9982012510299683f, 0.9943870902061462f, 0.6267213225364685f, -0.3950819969177246f, 0.3390563130378723f, 0.5297670960426331f, 0.3478206396102905f, 0.37288278341293335f, 0.16237026453018188f, 0.1402900218963623f, 0.04053357243537903f, -0.05004938691854477f, 0.1243935152888298f, 0.2301199734210968f, 0.36394545435905457f, 0.28494566679000854f, 0.6292767524719238f, 0.932515561580658f, 0.36972394585609436f, -0.8697963953018188f, 0.7542570233345032f, 0.6447027325630188f, 0.9673635363578796f, 0.7472339272499084f, 0.8412820100784302f, 0.20258545875549316f, 0.20913547277450562f, -0.6417856812477112f, 0.5732734203338623f, 0.16374333202838898f, 0.13157621026039124f, 0.6033344268798828f, 0.7639254331588745f, 0.010114333592355251f, 0.2909977436065674f, -0.5558221340179443f, 0.29670077562332153f, 0.4900730848312378f, 0.7831056118011475f, 0.027019592002034187f, 0.7727911472320557f, 0.9750553369522095f, 0.49521276354789734f, -0.633176863193512f, 0.5157322287559509f, 0.6399803757667542f, 0.22430260479450226f, 0.47176557779312134f, 0.297199010848999f, 0.5658372044563293f, 0.1996673196554184f, -0.9775893092155457f, 0.09457021951675415f, 0.8904250264167786f, 0.275644987821579f, 0.9416215419769287f, 0.8605055212974548f, 0.7561608552932739f, 0.9053369164466858f, -0.038629088550806046f, 0.07609455287456512f, 0.44859442114830017f, 0.39623191952705383f, 0.9733183979988098f, 0.5980339646339417f, 0.590361475944519f, 0.3132740557193756f, -0.23079365491867065f, 0.13292378187179565f, 0.8414338231086731f, 0.4580563008785248f, 0.22159844636917114f, 0.6476268768310547f, 0.7084150314331055f, 0.9315027594566345f, -0.5904114246368408f, 0.17429184913635254f, 0.286556601524353f, 0.22351312637329102f, 0.8871809840202332f, 0.7621434926986694f, 0.25867244601249695f, 0.3093072175979614f, -0.06853039562702179f, 0.44521859288215637f, 0.9328976273536682f, 0.15083466470241547f, 0.6237279772758484f, 0.9783839583396912f, 0.1943569928407669f, 0.284678190946579f, -0.7366509437561035f, 0.5894444584846497f, 0.701958179473877f, 0.09300215542316437f, 0.6340581178665161f, 0.0915788933634758f, 0.9884628653526306f, 0.9714219570159912f, -0.3384705185890198f, 0.821520984172821f, 0.7523596286773682f, 0.7190125584602356f, 0.14122864603996277f, 0.7697578072547913f, 0.3646417260169983f, 0.18577535450458527f, -0.07970602810382843f, 0.7176031470298767f, 0.7306300401687622f, 0.7984692454338074f, 0.9280053973197937f, 0.6038626432418823f, 0.9266368746757507f, 0.6493854522705078f, -0.13428018987178802f, 0.9289843440055847f, 0.258087158203125f, 0.8470433354377747f, 0.2002800852060318f, 0.37043246626853943f, 0.815829873085022f, 0.4706588387489319f, -0.5720000267028809f, 0.1622636765241623f, 0.03235804662108421f, 0.7055075764656067f, 0.6482402086257935f, 0.9466394782066345f, 0.17123311758041382f, 0.5494840741157532f, -0.860987663269043f, 0.10361012816429138f, 0.15740971267223358f, 0.17791125178337097f, 0.5116934180259705f, 0.5181965827941895f, 0.2575255334377289f, 0.8878380060195923f, -0.2310839295387268f, 0.7402544021606445f, 0.391212522983551f, 0.5204917192459106f, 0.5311657786369324f, 0.8752933740615845f, 0.29602229595184326f, 0.34963715076446533f, -0.5208508372306824f, 0.2034848928451538f, 0.6831521391868591f, 0.8106855750083923f, 0.33187422156333923f, 0.38588497042655945f, 0.4484993517398834f, 0.3497059941291809f, -0.42520326375961304f, 0.8469862341880798f, 0.2340088039636612f, 0.2811846435070038f, 0.34947657585144043f, 0.42621755599975586f, 0.2997463345527649f, 0.3062954843044281f, -0.5769904255867004f, 0.5851696133613586f, 0.17304278910160065f, 0.8046548366546631f, 0.7947982549667358f, 0.1893899291753769f, 0.2064565122127533f, 0.7973220348358154f, -0.8992711901664734f, 0.07811161875724792f, 0.3639068603515625f, 0.47353121638298035f, 0.3548324406147003f, 0.2511727809906006f, 0.5943740606307983f, 0.8688438534736633f, -0.6344490647315979f, 0.6450708508491516f, 0.25638654828071594f, 0.9837442636489868f, 0.4759633243083954f, 0.0544801689684391f, 0.03737751767039299f, 0.9206336140632629f, -0.5032801032066345f, 0.6417168974876404f, 0.9083157777786255f, 0.4112520217895508f, 0.45590633153915405f, 0.46868419647216797f, 0.5204451680183411f, 0.8785086274147034f, -0.41934695839881897f, 0.44692230224609375f, 0.09691943228244781f, 0.7248910665512085f, 0.7572018504142761f, 0.02540079690515995f, 0.47572988271713257f, 0.3111925721168518f, -0.45721134543418884f, 0.9738987684249878f, 0.11482542753219604f, 0.29767507314682007f, 0.04597141593694687f, 0.5331369042396545f, 0.23322799801826477f, 0.42664602398872375f, -0.44114944338798523f, 0.34087419509887695f, 0.7841855883598328f, 0.2557581663131714f, 0.7480978965759277f, 0.45815417170524597f, 0.2462017685174942f, 0.2858295440673828f, -0.4573144018650055f, 0.9952889680862427f, 0.4563782811164856f, 0.7939286828041077f, 0.5241610407829285f, 0.4244363307952881f, 0.8507025837898254f, 0.35898178815841675f, -0.5369986891746521f, 0.7744920253753662f, 0.13249467313289642f, 0.08721452206373215f, 0.7445864081382751f, 0.6549901366233826f, 0.4029693901538849f, 0.9553594589233398f, -0.4269818663597107f, 0.3232268989086151f, 0.4429692029953003f, 0.6813588738441467f, 0.20862384140491486f, 0.7105647921562195f, 0.9243482351303101f, 0.3360845744609833f, -0.545258641242981f, 0.1222299113869667f, 0.5221955180168152f, 0.5206576585769653f, 0.7017532587051392f, 0.5204159617424011f, 0.8407676219940186f, 0.6425126791000366f, -0.12963001430034637f, 0.8480867743492126f, 0.7174088954925537f, 0.8462285399436951f, 0.5667020678520203f, 0.4121035933494568f, 0.3162873685359955f, 0.6780503988265991f, -0.3822040557861328f, 0.7063775658607483f, 0.4313020706176758f, 0.2237725704908371f, 0.6947845816612244f, 0.2973652482032776f, 0.7127487063407898f, 0.7627550363540649f, -0.08205347508192062f, 0.5394781827926636f, 0.6787774562835693f, 0.6461648344993591f, 0.5056236386299133f, 0.9608848094940186f, 0.30269017815589905f, 0.45124363899230957f, -0.20383037626743317f, 0.6524989604949951f, 0.13377951085567474f, 0.21528086066246033f, 0.6499632596969604f, 0.987331211566925f, 0.853660523891449f, 0.3024277985095978f, -0.020159585401415825f, 0.9112796783447266f, 0.8562846183776855f, 0.3357033133506775f, 0.5954826474189758f, 0.724608302116394f, 0.9316444993019104f, 0.15722261369228363f, -0.4643472135066986f, 0.14591775834560394f, 0.9037349820137024f, 0.45535093545913696f, 0.7096764445304871f, 0.7643343806266785f, 0.8915576338768005f, 0.06897877901792526f, -0.02097162790596485f, 0.6054970026016235f, 0.2865349054336548f, 0.021489161998033524f, 0.7589945793151855f, 0.9950699806213379f, 0.907640814781189f, 0.11289875209331512f, -0.8532453775405884f, 0.8812112212181091f, 0.871798038482666f, 0.5005189776420593f, 0.14014367759227753f, 0.08491957187652588f, 0.9134561419487f, 0.1740913689136505f, -0.8648759722709656f, 0.6700441837310791f, 0.9131290912628174f, 0.1988467425107956f, 0.3965538442134857f, 0.49990397691726685f, 0.29645583033561707f, 0.6445833444595337f, -0.0229587871581316f, 0.9639635682106018f, 0.29564720392227173f, 0.4321339428424835f, 0.5329552292823792f, 0.7288673520088196f, 0.7107374668121338f, 0.22609645128250122f, -0.3302415907382965f, 0.6391828656196594f, 0.19586920738220215f, 0.26197072863578796f, 0.06162617355585098f, 0.8308209180831909f, 0.641459047794342f, 0.05746491253376007f, -0.8386222720146179f, 0.1083197221159935f, 0.0843082070350647f, 0.890559196472168f, 0.34073400497436523f, 0.3697753846645355f, 0.269072562456131f, 0.920852780342102f, -0.24273627996444702f, 0.746744692325592f, 0.5659509897232056f, 0.20488810539245605f, 0.2147890329360962f, 0.2667594850063324f, 0.07236674427986145f, 0.2658344805240631f, -0.8394709229469299f, 0.6124916076660156f, 0.3668728470802307f, 0.4241044223308563f, 0.5484573245048523f, 0.880395233631134f, 0.3110032379627228f, 0.0036787681747227907f, -0.4884248673915863f, 0.16553296148777008f, 0.2050197571516037f, 0.6081820726394653f, 0.5283691883087158f, 0.8168280124664307f, 0.24715936183929443f, 0.00880558229982853f, -0.34786033630371094f, 0.599123477935791f, 0.32009053230285645f, 0.17677590250968933f, 0.6324827075004578f, 0.7266175746917725f, 0.02218882367014885f, 0.6258788704872131f, -0.7376405596733093f, 0.1958022117614746f, 0.6880795955657959f, 0.8445165753364563f, 0.9747859835624695f, 0.3039701581001282f, 0.09590122103691101f, 0.009450215846300125f, -0.4839852452278137f, 0.8928187489509583f, 0.4097904860973358f, 0.005334998946636915f, 0.7028831243515015f, 0.23537567257881165f, 0.3437839448451996f, 0.4557740390300751f, -0.09666699171066284f, 0.5393470525741577f, 0.04225583374500275f, 0.532070517539978f, 0.0889548510313034f, 0.704243540763855f, 0.5018322467803955f, 0.17345531284809113f, -0.7563541531562805f, 0.3880041539669037f, 0.5781568288803101f, 0.32719165086746216f, 0.31523042917251587f, 0.8327775597572327f, 0.02957351878285408f, 0.49899789690971375f, -0.8051798939704895f, 0.1923934370279312f, 0.8749380111694336f, 0.4235667288303375f, 0.9641748666763306f, 0.6158350110054016f, 0.8918182849884033f, 0.7732304334640503f, -0.42189696431159973f, 0.6926324367523193f, 0.2753116488456726f, 0.6766369938850403f, 0.7817671895027161f, 0.1496986299753189f, 0.4517945349216461f, 0.5846266746520996f, -0.9222012162208557f, 0.013569170609116554f, 0.6623305678367615f, 0.05809563770890236f, 0.4964127242565155f, 0.4719637334346771f, 0.9548100233078003f, 0.7643404006958008f, -0.3712819814682007f, 0.30676114559173584f, 0.04113881289958954f, 0.9600538611412048f, 0.33604544401168823f, 0.8523902893066406f, 0.5188127756118774f, 0.5498620867729187f, -0.4652702212333679f, 0.5063067078590393f, 0.5652542114257812f, 0.5372863411903381f, 0.2873437702655792f, 0.10394486039876938f, 0.7508255243301392f, 0.4096277952194214f, -0.4985736906528473f, 0.25718674063682556f, 0.7528268694877625f, 0.3028580844402313f, 0.9404021501541138f, 0.8055821657180786f, 0.952875554561615f, 0.9652875661849976f, -0.2521505653858185f, 0.4171450734138489f, 0.044238679111003876f, 0.8875125050544739f, 0.3360469937324524f, 0.06677445024251938f, 0.7220527529716492f, 0.3544466495513916f, -0.17727473378181458f, 0.45299795269966125f, 0.3502626121044159f, 0.2009745091199875f, 0.6778216361999512f, 0.4756288230419159f, 0.4010891914367676f, 0.8656895756721497f, -0.27079570293426514f, 0.2226899266242981f, 0.12925536930561066f, 0.7366558313369751f, 0.9898875951766968f, 0.5349563956260681f, 0.5391998887062073f, 0.404769629240036f, -0.85657799243927f, 0.8759817481040955f, 0.04244634881615639f, 0.35506799817085266f, 0.610988974571228f, 0.4469606280326843f, 0.6703288555145264f, 0.9803907871246338f, -0.4315129220485687f, 0.2687636613845825f, 0.8500992655754089f, 0.7857012152671814f, 0.601652204990387f, 0.36525604128837585f, 0.9014002680778503f, 0.21973492205142975f, -0.23100142180919647f, 0.5378580689430237f, 0.6199426651000977f, 0.16439199447631836f, 0.4685743451118469f, 0.9958102703094482f, 0.23936504125595093f, 0.5495176315307617f, -0.6381919980049133f, 0.8233972787857056f, 0.5683494806289673f, 0.9273194074630737f, 0.905889093875885f, 0.5360301733016968f, 0.19374287128448486f, 0.20883889496326447f, -0.12813451886177063f, 0.8115655779838562f, 0.09651155769824982f, 0.7039064168930054f, 0.018432097509503365f, 0.030667908489704132f, 0.7498494982719421f, 0.17672009766101837f, -0.010755036026239395f, 0.46594423055648804f, 0.14501187205314636f, 0.17687369883060455f, 0.8233295679092407f, 0.5737418532371521f, 0.6003881692886353f, 0.5050594806671143f, -0.4340960681438446f, 0.7129352688789368f, 0.3367617726325989f, 0.35147687792778015f, 0.8480964303016663f, 0.529690146446228f, 0.9321401715278625f, 0.9860198497772217f, -0.530516505241394f, 0.2587187886238098f, 0.529471755027771f, 0.3108244240283966f, 0.14959678053855896f, 0.45362013578414917f, 0.2289152592420578f, 0.19879209995269775f, -0.17272593080997467f, 0.9392351508140564f, 0.8130757808685303f, 0.26500266790390015f, 0.4546630084514618f, 0.9480554461479187f, 0.5064085125923157f, 0.11720263957977295f, -0.07589066028594971f, 0.6498408317565918f, 0.1493978351354599f, 0.07582055032253265f, 0.6523956060409546f, 0.909940779209137f, 0.8980166912078857f, 0.7775181531906128f, -0.0301774051040411f, 0.20177210867404938f, 0.985480010509491f, 0.5407167077064514f, 0.2577366828918457f, 0.42200955748558044f, 0.9748528003692627f, 0.11330349743366241f, -0.5719009041786194f, 0.35193997621536255f, 0.2368432581424713f, 0.05226816236972809f, 0.28615790605545044f, 0.9618993997573853f, 0.093022920191288f, 0.9428563714027405f, -0.6634396910667419f, 0.38143467903137207f, 0.2701667547225952f, 0.8242222666740417f, 0.7468047142028809f, 0.9697278738021851f, 0.5791534781455994f, 0.26139530539512634f, -0.35676309466362f, 0.08333948999643326f, 0.2616302967071533f, 0.5764269232749939f, 0.3896441161632538f, 0.7951319217681885f, 0.4432894289493561f, 0.39549654722213745f, -0.08471965789794922f, 0.9549102187156677f, 0.0849214419722557f, 0.6567127108573914f, 0.9790566563606262f, 0.5148583650588989f, 0.6759212017059326f, 0.982138454914093f, -0.4599747061729431f, 0.955058217048645f, 0.25013604760169983f, 0.8246423602104187f, 0.9174319505691528f, 0.07375305891036987f, 0.8481263518333435f, 0.5536609888076782f, -0.12582401931285858f, 0.561945378780365f, 0.6728574633598328f, 0.05542049556970596f, 0.2542708218097687f, 0.21682295203208923f, 0.5826498866081238f, 0.2486421912908554f, -0.4298580288887024f, 0.27473652362823486f, 0.8791984915733337f, 0.49278366565704346f, 0.1915612816810608f, 0.4985893666744232f, 0.2820497155189514f, 0.47192469239234924f, -0.8117519021034241f, 0.2865210771560669f, 0.4365423917770386f, 0.6223505735397339f, 0.5188080072402954f, 0.9160342216491699f, 0.36494648456573486f, 0.12727054953575134f, -0.46696022152900696f, 0.27054083347320557f, 0.8948140740394592f, 0.10575059056282043f, 0.8389483094215393f, 0.016836589202284813f, 0.4005233943462372f, 0.622309684753418f, -0.18626052141189575f, 0.8335582613945007f, 0.3168562352657318f, 0.9502975344657898f, 0.3503137230873108f, 0.8411795496940613f, 0.09350837767124176f, 0.016515852883458138f, -0.654650092124939f, 0.3931862413883209f, 0.13163749873638153f, 0.6584778428077698f, 0.5732296705245972f, 0.09589793533086777f, 0.7456266283988953f, 0.5007337331771851f, -0.04437128081917763f, 0.23743879795074463f, 0.041287925094366074f, 0.06775684654712677f, 0.6393285989761353f, 0.10238262265920639f, 0.08998952060937881f, 0.900812029838562f, -0.7655840516090393f, 0.24160709977149963f, 0.46397727727890015f, 0.9996955990791321f, 0.776462197303772f, 0.20556458830833435f, 0.7928156852722168f, 0.07116421312093735f, -0.10690519958734512f, 0.18878793716430664f, 0.6127982139587402f, 0.9826339483261108f, 0.7574803829193115f, 0.3635067939758301f, 0.9468554854393005f, 0.8933969140052795f, -0.15763726830482483f, 0.4323351979255676f, 0.6592699289321899f, 0.45380914211273193f, 0.10898836702108383f, 0.9591783285140991f, 0.501211941242218f, 0.6799278259277344f, -0.4930381178855896f, 0.9932897686958313f, 0.853386640548706f, 0.7026985883712769f, 0.623587965965271f, 0.7324370741844177f, 0.7619137763977051f, 0.636894702911377f, -0.42119714617729187f, 0.03586424142122269f, 0.05857525020837784f, 0.3143930733203888f, 0.19609586894512177f, 0.9040132164955139f, 0.15906815230846405f, 0.22382484376430511f, -0.18080447614192963f, 0.3578656017780304f, 0.6128409504890442f, 0.1584038883447647f, 0.9661482572555542f, 0.45585212111473083f, 0.02598484791815281f, 0.699561357498169f, -0.7364090085029602f, 0.5046483278274536f, 0.9411197304725647f, 0.27313554286956787f, 0.3909330666065216f, 0.7848176956176758f, 0.5905792117118835f, 0.08937999606132507f, -0.8675217032432556f, 0.6750701069831848f, 0.9651059508323669f, 0.9049789905548096f, 0.28579673171043396f, 0.2261103391647339f, 0.11343792080879211f, 0.9738718271255493f, -0.22182181477546692f, 0.4262336492538452f, 0.4027944803237915f, 0.35947662591934204f, 0.16700834035873413f, 0.3456331789493561f, 0.41904574632644653f, 0.32237252593040466f, -0.6327586770057678f, 0.3225076198577881f, 0.7855257987976074f, 0.2806232273578644f, 0.1425391286611557f, 0.8036461472511292f, 0.3425998389720917f, 0.6175026297569275f, -0.05847559869289398f, 0.9561954140663147f, 0.47789326310157776f, 0.7625539898872375f, 0.3050664961338043f, 0.29648876190185547f, 0.2917289733886719f, 0.17975862324237823f, -0.7020731568336487f, 0.9013985395431519f, 0.8711678385734558f, 0.28929781913757324f, 0.5521906018257141f, 0.015009730122983456f, 0.14610081911087036f, 0.7697171568870544f, -0.5765363574028015f, 0.6771954894065857f, 0.0817580446600914f, 0.6781864762306213f, 0.33271217346191406f, 0.8840441703796387f, 0.8112481832504272f, 0.9822280406951904f, -0.7922574281692505f, 0.7946273684501648f, 0.18248233199119568f, 0.7111208438873291f, 0.6807355284690857f, 0.5396272540092468f, 0.13228167593479156f, 0.9000591039657593f, -0.494578093290329f, 0.09116596728563309f, 0.00896462518721819f, 0.9123103618621826f, 0.3237290680408478f, 0.6341441869735718f, 0.0807110071182251f, 0.9173051118850708f, -0.1258217692375183f, 0.0007838416495360434f, 0.7411322593688965f, 0.01164007093757391f, 0.20946530997753143f, 0.3558003008365631f, 0.521432638168335f, 0.18634116649627686f, -0.9064692854881287f, 0.5071955323219299f, 0.5374454855918884f, 0.8258160948753357f, 0.5779698491096497f, 0.1547132283449173f, 0.7838048338890076f, 0.6621567010879517f, -0.7283915877342224f, 0.6767477989196777f, 0.3329986333847046f, 0.47876814007759094f, 0.10171061754226685f, 0.24838410317897797f, 0.2984222173690796f, 0.8116021752357483f, -0.06388183683156967f, 0.46728330850601196f, 0.0207746010273695f, 0.9480386972427368f, 0.47214993834495544f, 0.007463115267455578f, 0.6229239702224731f, 0.9692777395248413f, -0.2762543559074402f, 0.22908611595630646f, 0.30396950244903564f, 0.5731948018074036f, 0.12156113982200623f, 0.3346444070339203f, 0.0855308324098587f, 0.21116410195827484f, -0.8475596308708191f, 0.054280634969472885f, 0.14557574689388275f, 0.8429498076438904f, 0.9695600271224976f, 0.27560052275657654f, 0.13139961659908295f, 0.08193199336528778f, -0.8322218060493469f, 0.8684750199317932f, 0.7475084066390991f, 0.44096872210502625f, 0.3333197236061096f, 0.2583439350128174f, 0.23048028349876404f, 0.5107651352882385f, -0.5565460324287415f, 0.648324191570282f, 0.9917296171188354f, 0.20260219275951385f, 0.009763306006789207f, 0.22706042230129242f, 0.08352389186620712f, 0.7542645335197449f, -0.34367451071739197f, 0.6684656739234924f, 0.14953413605690002f, 0.3921699523925781f, 0.6547715663909912f, 0.5559660196304321f, 0.3442941904067993f, 0.651157021522522f, -0.9081818461418152f, 0.21864181756973267f, 0.4833698868751526f, 0.004058755002915859f, 0.26926490664482117f, 0.4577925503253937f, 0.4617128372192383f, 0.9823752641677856f, -0.832184910774231f, 0.6427454352378845f, 0.4060444235801697f, 0.05930726230144501f, 0.2344817966222763f, 0.07276167720556259f, 0.08286130428314209f, 0.38921642303466797f, -0.5965839624404907f, 0.2270609438419342f, 0.690414309501648f, 0.6093534827232361f, 0.9796188473701477f, 0.3177630603313446f, 0.6022523045539856f, 0.6043108701705933f, -0.9366940855979919f, 0.01544793602079153f, 0.2957460582256317f, 0.555077075958252f, 0.4326821267604828f, 0.8420554995536804f, 0.6595340967178345f, 0.7487021088600159f, -0.5330079197883606f, 0.22193464636802673f, 0.3391730487346649f, 0.48830145597457886f, 0.5494571924209595f, 0.6516194939613342f, 0.32403749227523804f, 0.5438770055770874f, -0.13843707740306854f, 0.8421611189842224f, 0.7232145071029663f, 0.022174624726176262f, 0.4432353675365448f, 0.9939529895782471f, 0.8030136823654175f, 0.5857791304588318f, -0.6748896837234497f, 0.024741804227232933f, 0.8182404637336731f, 0.5578576922416687f, 0.532795786857605f, 0.04513975977897644f, 0.32596537470817566f, 0.06930481642484665f, -0.9524587988853455f, 0.5206530690193176f, 0.5475634932518005f, 0.8196038603782654f, 0.6124514937400818f, 0.7165676951408386f, 0.6872714161872864f, 0.4490668773651123f, -0.04233763739466667f, 0.43820589780807495f, 0.004446199629455805f, 0.19576653838157654f, 0.11172723770141602f, 0.12894147634506226f, 0.8216140866279602f, 0.39030134677886963f, -0.4382425546646118f, 0.14714059233665466f, 0.665786862373352f, 0.7700603008270264f, 0.473284512758255f, 0.6894498467445374f, 0.11166216433048248f, 0.8992038369178772f, -0.6751723289489746f, 0.725256085395813f, 0.7320267558097839f, 0.40798163414001465f, 0.009012352675199509f, 0.9511246085166931f, 0.5084532499313354f, 0.5951330661773682f, -0.6841533184051514f, 0.2566092014312744f, 0.7518296241760254f, 0.4097823202610016f, 0.7454982995986938f, 0.5304445624351501f, 0.27320900559425354f, 0.2821768522262573f, -0.49658551812171936f, 0.25339335203170776f, 0.4792870283126831f, 0.9192187786102295f, 0.8401005864143372f, 0.9560965895652771f, 0.13863390684127808f, 0.12533007562160492f, -0.2239660620689392f, 0.8712157011032104f, 0.7208171486854553f, 0.9909030199050903f, 0.024205174297094345f, 0.42219874262809753f, 0.4932610094547272f, 0.07354319840669632f, -0.3286074697971344f, 0.468310683965683f, 0.6997582316398621f, 0.7134997248649597f, 0.7906695604324341f, 0.30763429403305054f, 0.5101741552352905f, 0.6714828014373779f, -0.4951631426811218f, 0.6876668930053711f, 0.48338377475738525f, 0.8991976380348206f, 0.7036334276199341f, 0.24579009413719177f, 0.5721808671951294f, 0.6887859106063843f, -0.4136820137500763f, 0.10560432821512222f, 0.3633033335208893f, 0.2863008975982666f, 0.8455132842063904f, 0.9591155648231506f, 0.30250832438468933f, 0.7654536962509155f, -0.6351255774497986f, 0.11314479261636734f, 0.11036116629838943f, 0.7016534209251404f, 0.45401132106781006f, 0.043453507125377655f, 0.31653469800949097f, 0.10535469651222229f, -0.8019876480102539f, 0.3489285707473755f, 0.8760397434234619f, 0.5995849370956421f, 0.20223267376422882f, 0.36664319038391113f, 0.6401366591453552f, 0.9008789658546448f, -0.16236844658851624f, 0.7346416115760803f, 0.2444668859243393f, 0.3818260133266449f, 0.5568416118621826f, 0.5752328038215637f, 0.49177446961402893f, 0.32281920313835144f, -0.7899287343025208f, 0.4520872235298157f, 0.9969499111175537f, 0.5052056908607483f, 0.06392190605401993f, 0.3094944953918457f, 0.5666970610618591f, 0.6171514987945557f, -0.2628958523273468f, 0.25416144728660583f, 0.34000149369239807f, 0.10847268998622894f, 0.10644108802080154f, 0.5029589533805847f, 0.36004313826560974f, 0.29013243317604065f, -0.6977707147598267f, 0.3769455552101135f, 0.3152955174446106f, 0.9565456509590149f, 0.6393994092941284f, 0.18539294600486755f, 0.6249165534973145f, 0.7505317330360413f, -0.6286114454269409f, 0.7396957278251648f, 0.19325046241283417f, 0.6647769212722778f, 0.3585841655731201f, 0.9251715540885925f, 0.16671836376190186f, 0.6002312302589417f, -0.13590365648269653f, 0.3469280004501343f, 0.4733069837093353f, 0.8414196372032166f, 0.9709331393241882f, 0.3829466700553894f, 0.430682510137558f, 0.5888708829879761f, -0.7903270721435547f, 0.8139210939407349f, 0.42291340231895447f, 0.2460094839334488f, 0.9731041193008423f, 0.8003431558609009f, 0.20905813574790955f, 0.2447892427444458f, -0.9311978816986084f, 0.14134064316749573f, 0.16965477168560028f, 0.6841517686843872f, 0.7660045027732849f, 0.6809929609298706f, 0.18786779046058655f, 0.8081908226013184f, -0.019869215786457062f, 0.5301581621170044f, 0.7860199809074402f, 0.4369385242462158f, 0.9823477268218994f, 0.43952107429504395f, 0.2974449098110199f, 0.8617845773696899f, -0.5364749431610107f, 0.9141088724136353f, 0.8261948227882385f, 0.7436478734016418f, 0.6140726804733276f, 0.728053092956543f, 0.11047963798046112f, 0.921711802482605f, -0.22696855664253235f, 0.5358686447143555f, 0.04311523959040642f, 0.20691809058189392f, 0.3552456498146057f, 0.21674565970897675f, 0.5999317169189453f, 0.028325609862804413f, -0.31242460012435913f, 0.7300243377685547f, 0.15843074023723602f, 0.07263879477977753f, 0.07223117351531982f, 0.029240576550364494f, 0.6327087879180908f, 0.07318909466266632f, -0.8035412430763245f, 0.9924060702323914f, 0.38351497054100037f, 0.7883786559104919f, 0.0337718240916729f, 0.467413067817688f, 0.23592224717140198f, 0.4880194664001465f, -0.4046626687049866f, 0.7102497220039368f, 0.4004446268081665f, 0.15470585227012634f, 0.951457679271698f, 0.28144407272338867f, 0.8073594570159912f, 0.13325510919094086f, -0.5288628339767456f, 0.089516781270504f, 0.37991151213645935f, 0.21707689762115479f, 0.18010284006595612f, 0.35246706008911133f, 0.644786536693573f, 0.7316376566886902f, -0.42832690477371216f, 0.15430273115634918f, 0.8174893856048584f, 0.601940393447876f, 0.7923216223716736f, 0.32978925108909607f, 0.8409305810928345f, 0.9152829051017761f, -0.8315926194190979f, 0.7157814502716064f, 0.28002727031707764f, 0.12347794324159622f, 0.9225850701332092f, 0.14227981865406036f, 0.5899637341499329f, 0.24093617498874664f, -0.4336302876472473f, 0.6489095091819763f, 0.9551835656166077f, 0.3025895357131958f, 0.2205122411251068f, 0.6985950469970703f, 0.5517397522926331f, 0.061476413160562515f, -0.6275856494903564f, 0.41915494203567505f, 0.5031588673591614f, 0.8683112859725952f, 0.24864889681339264f, 0.37140411138534546f, 0.06194497272372246f, 0.2217901647090912f, -0.9982573390007019f, 0.7484900951385498f, 0.8079437017440796f, 0.3747757375240326f, 0.828933596611023f, 0.7393784523010254f, 0.38992181420326233f, 0.7834439873695374f, -0.9646286964416504f, 0.6983054876327515f, 0.4252227246761322f, 0.24797847867012024f, 0.26807281374931335f, 0.5946770310401917f, 0.5286142826080322f, 0.5084397792816162f, -0.6100232601165771f, 0.3036675751209259f, 0.16218329966068268f, 0.32200226187705994f, 0.6125907301902771f, 0.7468511462211609f, 0.5463789105415344f, 0.8847496509552002f, -0.9916860461235046f, 0.7270771265029907f, 0.18234698474407196f, 0.3415102958679199f, 0.6593968272209167f, 0.9223819971084595f, 0.6648727059364319f, 0.6046757698059082f, -0.5050835013389587f, 0.9139278531074524f, 0.7998493313789368f, 0.6691511273384094f, 0.21014778316020966f, 0.9836529493331909f, 0.531673014163971f, 0.5695310831069946f, -0.5504001975059509f, 0.9993723034858704f, 0.2794986963272095f, 0.22575689852237701f, 0.21086183190345764f, 0.8233810663223267f, 0.8912575840950012f, 0.17415568232536316f, -0.3190632462501526f, 0.5335731506347656f, 0.8376070261001587f, 0.6892250776290894f, 0.4655936658382416f, 0.21886639297008514f, 0.6962947249412537f, 0.5936211347579956f, -0.5642417669296265f, 0.30975136160850525f, 0.6604390740394592f, 0.6512485146522522f, 0.5065417885780334f, 0.7334088683128357f, 0.9633904099464417f, 0.45186808705329895f, -0.09021467715501785f, 0.13957716524600983f, 0.5006042718887329f, 0.44165822863578796f, 0.30566155910491943f, 0.30843859910964966f, 0.013949332758784294f, 0.8990923166275024f, -0.24357786774635315f, 0.25038039684295654f, 0.28925666213035583f, 0.9611153602600098f, 0.23421579599380493f, 0.08114318549633026f, 0.2960517406463623f, 0.8221947550773621f, -0.3719935715198517f, 0.2662281095981598f, 0.7781785130500793f, 0.9293131232261658f, 0.7853548526763916f, 0.28298407793045044f, 0.9360784888267517f, 0.84873366355896f, -0.1002064198255539f, 0.4005160331726074f, 0.17080363631248474f, 0.03708287328481674f, 0.790492057800293f, 0.10900884866714478f, 0.9293902516365051f, 0.2935734987258911f, -0.7736580967903137f, 0.2698441445827484f, 0.20419327914714813f, 0.5306872725486755f, 0.8555410504341125f, 0.24970081448554993f, 0.06146209314465523f, 0.8752709627151489f, -0.717068076133728f, 0.6543054580688477f, 0.966372013092041f, 0.3582671284675598f, 0.9204273223876953f, 0.947613000869751f, 0.9897927641868591f, 0.2914729416370392f, -0.2875630259513855f, 0.5631552338600159f, 0.31765660643577576f, 0.8268606662750244f, 0.23812486231327057f, 0.9729340076446533f, 0.12158443033695221f, 0.15905295312404633f, -0.5511109828948975f, 0.3180561065673828f, 0.7353650331497192f, 0.48313406109809875f, 0.5507939457893372f, 0.21708610653877258f, 0.40592390298843384f, 0.159956157207489f, -0.5074528455734253f, 0.2298615723848343f, 0.03341313824057579f, 0.02771441824734211f, 0.2588081657886505f, 0.19656239449977875f, 0.20251061022281647f, 0.561013400554657f, -0.8971746563911438f, 0.7726226449012756f, 0.13081049919128418f, 0.6785510778427124f, 0.18264329433441162f, 0.4382723271846771f, 0.7763738036155701f, 0.8611577749252319f, -0.7358916401863098f, 0.06512387096881866f, 0.5471451282501221f, 0.8408572673797607f, 0.9700459837913513f, 0.32379812002182007f, 0.23282663524150848f, 0.3591565191745758f, -0.014318923465907574f, 0.8352154493331909f, 0.7187632918357849f, 0.16228224337100983f, 0.4158598482608795f, 0.15505489706993103f, 0.2973381280899048f, 0.5574766993522644f, -0.038148488849401474f, 0.2044644057750702f, 0.4595582187175751f, 0.6792212128639221f, 0.46675291657447815f, 0.4953262507915497f, 0.008941782638430595f, 0.8887830376625061f, -0.037842798978090286f, 0.08339324593544006f, 0.24353115260601044f, 0.8310431838035583f, 0.22972461581230164f, 0.18181531131267548f, 0.3749913275241852f, 0.6695075631141663f, -0.7592554688453674f, 0.2740764915943146f, 0.5574080944061279f, 0.49508073925971985f, 0.2495645433664322f, 0.6499559283256531f, 0.41760849952697754f, 0.42967119812965393f, -0.8696377873420715f, 0.5860385298728943f, 0.3110939562320709f, 0.511600911617279f, 0.85983806848526f, 0.6822413206100464f, 0.643578827381134f, 0.7810512185096741f, -0.600814163684845f, 0.3867134749889374f, 0.6323843002319336f, 0.14769968390464783f, 0.7303892970085144f, 0.943001389503479f, 0.6445093154907227f, 0.30844229459762573f, -0.8361515998840332f, 0.7310155034065247f, 0.5046492218971252f, 0.557178258895874f, 0.23462313413619995f, 0.670870304107666f, 0.14306041598320007f, 0.36595475673675537f, -0.7061768770217896f, 0.5600144863128662f, 0.08982747048139572f, 0.6522244215011597f, 0.41365742683410645f, 0.1383524239063263f, 0.6657601594924927f, 0.13106177747249603f, -0.7567325234413147f, 0.2996996343135834f, 0.6470378637313843f, 0.9787167906761169f, 0.7882773876190186f, 0.6986240148544312f, 0.512978732585907f, 0.21871528029441833f, -0.5833810567855835f, 0.2025212198495865f, 0.44172731041908264f, 0.2115176022052765f, 0.932880699634552f, 0.5554172992706299f, 0.6615010499954224f, 0.8377779126167297f, -0.4315497577190399f, 0.32316654920578003f, 0.9119052886962891f, 0.7258097529411316f, 0.0748438760638237f, 0.13641133904457092f, 0.3597413897514343f, 0.1541486531496048f, -0.717914879322052f, 0.6926581263542175f, 0.36565613746643066f, 0.3399198055267334f, 0.9282596111297607f, 0.07291606813669205f, 0.4516598880290985f, 0.14599484205245972f, -0.4461199641227722f, 0.22970569133758545f, 0.0203566811978817f, 0.33852100372314453f, 0.903770923614502f, 0.8124459981918335f, 0.7040055394172668f, 0.2639431357383728f, -0.5416466593742371f, 0.3361254930496216f, 0.5660873651504517f, 0.3117433488368988f, 0.3365252912044525f, 0.534623384475708f, 0.23984146118164062f, 0.47922423481941223f, -0.6029635071754456f, 0.7398233413696289f, 0.6118142604827881f, 0.666912317276001f, 0.02380157634615898f, 0.023264558985829353f, 0.870114803314209f, 0.1104937493801117f, -0.3087451457977295f, 0.8186345100402832f, 0.4538775682449341f, 0.9766642451286316f, 0.010360467247664928f, 0.8195041418075562f, 0.7882665991783142f, 0.16683490574359894f, -0.24433284997940063f, 0.06889567524194717f, 0.8367651104927063f, 0.2450312376022339f, 0.25914236903190613f, 0.8665857911109924f, 0.47329390048980713f, 0.730063796043396f, -0.4456033706665039f, 0.07357173413038254f, 0.3971918523311615f, 0.5348520278930664f, 0.12221100926399231f, 0.31439152359962463f, 0.17360344529151917f, 0.010711362585425377f, -0.4402429163455963f, 0.7759625911712646f, 0.04226735234260559f, 0.8106247186660767f, 0.8194819688796997f, 0.3157045543193817f, 0.24272726476192474f, 0.4102168083190918f, -0.4755900204181671f, 0.9755038619041443f, 0.5175928473472595f, 0.2850617468357086f, 0.6268668174743652f, 0.3982282876968384f, 0.704905092716217f, 0.07707473635673523f, -0.8283491134643555f, 0.4290889501571655f, 0.7504658102989197f, 0.3393879532814026f, 0.07043998688459396f, 0.020488787442445755f, 0.12659339606761932f, 0.4422357380390167f, -0.06243142858147621f, 0.223670095205307f, 0.7388098239898682f, 0.8008903861045837f, 0.5487006306648254f, 0.3467162251472473f, 0.3593532145023346f, 0.06196919083595276f, -0.2772211730480194f, 0.11898665875196457f, 0.9013203978538513f, 0.038237255066633224f, 0.22402189671993256f, 0.42689600586891174f, 0.04139566421508789f, 0.9694862961769104f, -0.33423012495040894f, 0.3208984136581421f, 0.07137805223464966f, 0.7030258774757385f, 0.8519940376281738f, 0.6680073738098145f, 0.8061862587928772f, 0.77138751745224f, -0.42777368426322937f, 0.4527019262313843f, 0.4452088475227356f, 0.6496046185493469f, 0.8944332003593445f, 0.7800140976905823f, 0.7960849404335022f, 0.351628839969635f, -0.6474839448928833f, 0.9891530871391296f, 0.3318120241165161f, 0.2159629613161087f, 0.9865155220031738f, 0.9482553005218506f, 0.20239488780498505f, 0.9511345624923706f, -0.17116719484329224f, 0.6895133256912231f, 0.08993184566497803f, 0.7664440870285034f, 0.18473529815673828f, 0.8711977005004883f, 0.4295549988746643f, 0.4574061334133148f, -0.2849118113517761f, 0.770728588104248f, 0.8158960938453674f, 0.8896552324295044f, 0.34374597668647766f, 0.7179747223854065f, 0.8675769567489624f, 0.9939098954200745f, -0.6904375553131104f, 0.326713889837265f, 0.8642971515655518f, 0.9370332360267639f, 0.7352054119110107f, 0.8226646184921265f, 0.9062042236328125f, 0.4971298575401306f, -0.3994215130805969f, 0.3158074915409088f, 0.9047670364379883f, 0.8210129737854004f, 0.8294722437858582f, 0.9896811842918396f, 0.9486945271492004f, 0.30981001257896423f, -0.7136912941932678f, 0.8223385214805603f, 0.28153350949287415f, 0.28956449031829834f, 0.9922322630882263f, 0.2916771471500397f, 0.9365285038948059f, 0.8349144458770752f, -0.1124279722571373f, 0.810545027256012f, 0.09548847377300262f, 0.1797383427619934f, 0.2624363899230957f, 0.8167358040809631f, 0.04169157147407532f, 0.6839852333068848f, -0.7273472547531128f, 0.634071409702301f, 0.6459649205207825f, 0.45068126916885376f, 0.6004704236984253f, 0.21081623435020447f, 0.623612105846405f, 0.4828396141529083f, -0.9501892328262329f, 0.7355466485023499f, 0.6273952722549438f, 0.07223280519247055f, 0.15772698819637299f, 0.13320477306842804f, 0.9413062334060669f, 0.8880720138549805f, -0.7609084248542786f, 0.08278308808803558f, 0.6754040718078613f, 0.16790671646595f, 0.8557825684547424f, 0.35773226618766785f, 0.42216357588768005f, 0.1861204355955124f, -0.6555624008178711f, 0.351734459400177f, 0.10797431319952011f, 0.9458757042884827f, 0.3878132402896881f, 0.7410046458244324f, 0.04995676502585411f, 0.42277857661247253f, -0.1400427371263504f, 0.857278048992157f, 0.44466355443000793f, 0.7372856140136719f, 0.3129720091819763f, 0.6690477728843689f, 0.46637046337127686f, 0.2510649263858795f, -0.22207370400428772f, 0.7048923373222351f, 0.37048786878585815f, 0.5923693776130676f, 0.3301129639148712f, 0.9466001391410828f, 0.4427426755428314f, 0.24886807799339294f, -0.09502854198217392f, 0.5336188673973083f, 0.9298677444458008f, 0.3370848298072815f, 0.9798545241355896f, 0.8007960915565491f, 0.9206538796424866f, 0.07064935564994812f, -0.09498931467533112f, 0.12542477250099182f, 0.028421001508831978f, 0.5220159888267517f, 0.46555426716804504f, 0.5623615384101868f, 0.3906913697719574f, 0.802889883518219f, -0.06117190048098564f, 0.5281882882118225f, 0.446157842874527f, 0.5921306610107422f, 0.06955065578222275f, 0.5965591669082642f, 0.3402770459651947f, 0.9856573939323425f, -0.14991937577724457f, 0.6336951851844788f, 0.32308894395828247f, 0.5255821347236633f, 0.8558223247528076f, 0.03581039607524872f, 0.3886922001838684f, 0.4453420639038086f, -0.3870595693588257f, 0.14245590567588806f, 0.7350552082061768f, 0.11321039497852325f, 0.5735008120536804f, 0.35671576857566833f, 0.5901896953582764f, 0.4183037281036377f, -0.03577965497970581f, 0.5245057344436646f, 0.08627132326364517f, 0.19502608478069305f, 0.9282714128494263f, 0.507305920124054f, 0.3170657455921173f, 0.2857438027858734f, -0.8169098496437073f, 0.046475302428007126f, 0.07100245356559753f, 0.6728788018226624f, 0.5737357139587402f, 0.2779805064201355f, 0.6984549760818481f, 0.3565644919872284f, -0.2979969084262848f, 0.7539869546890259f, 0.671930193901062f, 0.5185304284095764f, 0.8315635919570923f, 0.400461345911026f, 0.021020961925387383f, 0.2586250305175781f, -0.6297250986099243f, 0.07306546717882156f, 0.2714574337005615f, 0.5725510716438293f, 0.3143346607685089f, 0.7461822628974915f, 0.3288523554801941f, 0.6904898285865784f, -0.00420060008764267f, 0.5726943016052246f, 0.2903765141963959f, 0.6507969498634338f, 0.9802058935165405f, 0.5858554840087891f, 0.48991432785987854f, 0.9548555612564087f, -0.6623603701591492f, 0.06307084858417511f, 0.7047266364097595f, 0.678963303565979f, 0.3693154454231262f, 0.23271235823631287f, 0.4683115780353546f, 0.363511860370636f, -0.7455058693885803f, 0.016592418774962425f, 0.5275694727897644f, 0.2699981927871704f, 0.4703438878059387f, 0.5484850406646729f, 0.5205414891242981f, 0.9856333136558533f, -0.006558012217283249f, 0.887441098690033f, 0.7959167957305908f, 0.33178797364234924f, 0.265231192111969f, 0.8663814067840576f, 0.8562757968902588f, 0.40063920617103577f, -0.8707262277603149f, 0.6755101680755615f, 0.47749805450439453f, 0.5823104381561279f, 0.9758129119873047f, 0.9241567254066467f, 0.1420036405324936f, 0.2325950562953949f, -0.28011205792427063f, 0.010430561378598213f, 0.3969857394695282f, 0.3252618908882141f, 0.9826428890228271f, 0.24181342124938965f, 0.6402348875999451f, 0.43777212500572205f, -0.5706987977027893f, 0.48585113883018494f, 0.9199040532112122f, 0.660267174243927f, 0.9089730381965637f, 0.20467005670070648f, 0.9297597408294678f, 0.6179773807525635f, -0.3839261829853058f, 0.5141823291778564f, 0.4138256311416626f, 0.9561923146247864f, 0.9252978563308716f, 0.49191728234291077f, 0.03641865774989128f, 0.34406599402427673f, -0.15123578906059265f, 0.8635458946228027f, 0.24445131421089172f, 0.3581703007221222f, 0.27994751930236816f, 0.9000564217567444f, 0.7260122895240784f, 0.11682037264108658f, -0.1135900691151619f, 0.7984004020690918f, 0.044519346207380295f, 0.6716601848602295f, 0.07820989936590195f, 0.16138386726379395f, 0.9271359443664551f, 0.5806356072425842f, -0.5334423184394836f, 0.11757883429527283f, 0.02806737832725048f, 0.0023395090829581022f, 0.15151594579219818f, 0.21411101520061493f, 0.7856576442718506f, 0.9528596997261047f, -0.7915459871292114f, 0.5368552803993225f, 0.4295269846916199f, 0.17545421421527863f, 0.5891209244728088f, 0.5119518041610718f, 0.5963066220283508f, 0.732342004776001f, -0.29789862036705017f, 0.010825248435139656f, 0.9401662349700928f, 0.8685292601585388f, 0.3048619329929352f, 0.2928064465522766f, 0.6082512736320496f, 0.329446405172348f, -0.13044600188732147f, 0.9909996390342712f, 0.30281633138656616f, 0.2777341306209564f, 0.4791511595249176f, 0.5889505743980408f, 0.6935154795646667f, 0.4774518609046936f, -0.1369909942150116f, 0.7275018692016602f, 0.3334725797176361f, 0.8129111528396606f, 0.5065328478813171f, 0.5956737995147705f, 0.5048596262931824f, 0.8740737438201904f, -0.15971700847148895f, 0.2526090145111084f, 0.8046221733093262f, 0.12398108839988708f, 0.5282185077667236f, 0.11353635042905807f, 0.7131919264793396f, 0.16011887788772583f, -0.7600829601287842f, 0.6496555209159851f, 0.6234109997749329f, 0.2060772031545639f, 0.476904958486557f, 0.516372799873352f, 0.41471412777900696f, 0.7579601407051086f, -0.4143616557121277f, 0.33931565284729004f, 0.9118471741676331f, 0.64104163646698f, 0.6278387308120728f, 0.49810707569122314f, 0.6538493037223816f, 0.37762874364852905f, -0.17195658385753632f, 0.5404389500617981f, 0.533765435218811f, 0.3813837766647339f, 0.05597894266247749f, 0.06137986481189728f, 0.44662827253341675f, 0.20475786924362183f, -0.01335496362298727f, 0.16446572542190552f, 0.9684725403785706f, 0.3414343297481537f, 0.24614444375038147f, 0.1507318615913391f, 0.4256065785884857f, 0.19894355535507202f, -0.5186823010444641f, 0.5050492286682129f, 0.0066929953172802925f, 0.7738257646560669f, 0.6395884156227112f, 0.8889954686164856f, 0.18129588663578033f, 0.7161238193511963f, -0.9079116582870483f, 0.7157001495361328f, 0.228682279586792f, 0.10229501873254776f, 0.7527469396591187f, 0.8793184757232666f, 0.815441906452179f, 0.16447751224040985f, -0.6911047697067261f, 0.18888619542121887f, 0.6874290704727173f, 0.30130594968795776f, 0.06695639342069626f, 0.20971502363681793f, 0.2604256570339203f, 0.20131708681583405f, -0.1276184469461441f, 0.5123385190963745f, 0.6240889430046082f, 0.20029211044311523f, 0.9493135809898376f, 0.17903167009353638f, 0.5042605400085449f, 0.3205757141113281f, -0.059154096990823746f, 0.7103747129440308f, 0.2852382957935333f, 0.8801781535148621f, 0.365852028131485f, 0.8432976603507996f, 0.2801840603351593f, 0.14674867689609528f, -0.9708359241485596f, 0.129043310880661f, 0.37474414706230164f, 0.20343218743801117f, 0.07895705848932266f, 0.1191571056842804f, 0.951492428779602f, 0.7124094367027283f, -0.06959757208824158f, 0.8000116348266602f, 0.9772346019744873f, 0.3466237783432007f, 0.04107113927602768f, 0.7905629873275757f, 0.823020339012146f, 0.47158077359199524f, -0.7539021372795105f, 0.8718048930168152f, 0.8462989926338196f, 0.37513816356658936f, 0.13985832035541534f, 0.5674196481704712f, 0.09795378148555756f, 0.18779180943965912f, -0.5873010158538818f, 0.06591101735830307f, 0.6837477684020996f, 0.5786332488059998f, 0.5131651759147644f, 0.6728609800338745f, 0.06984397768974304f, 0.7912238836288452f, -0.5123411417007446f, 0.5484815239906311f, 0.08910776674747467f, 0.7038499116897583f, 0.22476845979690552f, 0.37628427147865295f, 0.023214273154735565f, 0.8917950987815857f, -0.0012315429048612714f, 0.4810636043548584f, 0.25682660937309265f, 0.7124268412590027f, 0.5857983827590942f, 0.6877121925354004f, 0.1935959905385971f, 0.32685229182243347f, -0.9744149446487427f, 0.4573109745979309f, 0.766252338886261f, 0.9120500087738037f, 0.8322474956512451f, 0.332174688577652f, 0.02634557895362377f, 0.6567147970199585f, -0.06181842461228371f, 0.31649279594421387f, 0.24713867902755737f, 0.28699588775634766f, 0.5067818760871887f, 0.33884161710739136f, 0.39847010374069214f, 0.8929684162139893f, -0.27429676055908203f, 0.08830918371677399f, 0.25542905926704407f, 0.5030395984649658f, 0.2754587233066559f, 0.35949695110321045f, 0.15295861661434174f, 0.33277469873428345f, -0.923913836479187f, 0.38449934124946594f, 0.6245399117469788f, 0.24798642098903656f, 0.9066970348358154f, 0.42034509778022766f, 0.44105833768844604f, 0.21525269746780396f, -0.33728083968162537f, 0.6525714993476868f, 0.03259652853012085f, 0.7976900339126587f, 0.5023762583732605f, 0.08409390598535538f, 0.05126142501831055f, 0.4288504123687744f, -0.8340663909912109f, 0.44266873598098755f, 0.18205681443214417f, 0.2265411913394928f, 0.2203417271375656f, 0.8397945761680603f, 0.9622684717178345f, 0.5126599073410034f, -0.9355233907699585f, 0.42824387550354004f, 0.051824335008859634f, 0.3588641881942749f, 0.36898332834243774f, 0.28540247678756714f, 0.2810010612010956f, 0.6087971329689026f, -0.7944757342338562f, 0.1352684199810028f, 0.41312921047210693f, 0.603381872177124f, 0.6352071166038513f, 0.023453429341316223f, 0.8556925654411316f, 0.815653383731842f, -0.7298507690429688f, 0.8569904565811157f, 0.3057527542114258f, 0.32696035504341125f, 0.20889483392238617f, 0.476168155670166f, 0.24121549725532532f, 0.8138872385025024f, -0.9593313932418823f, 0.7744131684303284f, 0.6396651268005371f, 0.31898659467697144f, 0.2112724781036377f, 0.5473967790603638f, 0.2856123149394989f, 0.2933333218097687f, -0.03160310909152031f, 0.7405330538749695f, 0.49883371591567993f, 0.2036440074443817f, 0.8359489440917969f, 0.8821344375610352f, 0.1551656424999237f, 0.9897886514663696f, -0.07141133397817612f, 0.14969150722026825f, 0.8919869661331177f, 0.30094587802886963f, 0.19101592898368835f, 0.2222779393196106f, 0.7660427689552307f, 0.5651304125785828f, -0.6034494638442993f, 0.3456595242023468f, 0.5076646208763123f, 0.5518657565116882f, 0.40464192628860474f, 0.2794484496116638f, 0.45566996932029724f, 0.5495609641075134f, -0.6313809752464294f, 0.5137726068496704f, 0.5714420676231384f, 0.20776571333408356f, 0.7301151752471924f, 0.38653048872947693f, 0.27541422843933105f, 0.06715666502714157f, -0.879839301109314f, 0.944616436958313f, 0.995404839515686f, 0.7023824453353882f, 0.063730388879776f, 0.6741400957107544f, 0.5738700032234192f, 0.5783268809318542f, -0.3576923906803131f, 0.3526303172111511f, 0.7022441625595093f, 0.37130892276763916f, 0.371820867061615f, 0.614610493183136f, 0.1882360279560089f, 0.3235631287097931f, -0.03359467163681984f, 0.761612594127655f, 0.9914688467979431f, 0.19474373757839203f, 0.24345017969608307f, 0.7143008708953857f, 0.9238582253456116f, 0.4567902386188507f, -0.5798501968383789f, 0.1588570475578308f, 0.9831440448760986f, 0.8874426484107971f, 0.796143651008606f, 0.336725115776062f, 0.2530423104763031f, 0.8276792764663696f, -0.7366170287132263f, 0.06825517117977142f, 0.7510483860969543f, 0.8052472472190857f, 0.4724271297454834f, 0.8645830154418945f, 0.7362255454063416f, 0.8609382510185242f, -0.9355127811431885f, 0.6777389049530029f, 0.16630326211452484f, 0.07999838888645172f, 0.09498489648103714f, 0.36383768916130066f, 0.6171978712081909f, 0.884334146976471f, -0.007650136481970549f, 0.641927182674408f, 0.18598420917987823f, 0.40833553671836853f, 0.27128326892852783f, 0.5902209877967834f, 0.5288811922073364f, 0.47224053740501404f, -0.07383178174495697f, 0.46452581882476807f, 0.2644480764865875f, 0.5330985188484192f, 0.4422498643398285f, 0.725627064704895f, 0.1990833878517151f, 0.07419238984584808f, -0.3708282709121704f, 0.24273554980754852f, 0.17597423493862152f, 0.0791097953915596f, 0.21316705644130707f, 0.06900474429130554f, 0.23982633650302887f, 0.9282726049423218f, -0.24769435822963715f, 0.7667573690414429f, 0.15021584928035736f, 0.023306269198656082f, 0.4847556948661804f, 0.5158091187477112f, 0.5806645154953003f, 0.4396478533744812f, -0.25206050276756287f, 0.17362435162067413f, 0.19143329560756683f, 0.3011816740036011f, 0.24135521054267883f, 0.8044136762619019f, 0.23005686700344086f, 0.08304014801979065f, -0.06131920590996742f, 0.02430836483836174f, 0.8017265200614929f, 0.4745575785636902f, 0.20865099132061005f, 0.2041800618171692f, 0.5043924450874329f, 0.1594894677400589f, -0.5175229907035828f, 0.35169678926467896f, 0.8260440826416016f, 0.6599069237709045f, 0.01866699941456318f, 0.6729202270507812f, 0.679662823677063f, 0.3044257164001465f, -0.67866051197052f, 0.21342545747756958f, 0.8438052535057068f, 0.48669999837875366f, 0.06192297115921974f, 0.5769873857498169f, 0.030100097879767418f, 0.7162250280380249f, -0.6884337663650513f, 0.8811260461807251f, 0.21232599020004272f, 0.43001478910446167f, 0.27182459831237793f, 0.4264953136444092f, 0.4865899384021759f, 0.08075277507305145f, -0.43618258833885193f, 0.7187606692314148f, 0.018893327564001083f, 0.10389482229948044f, 0.9762924909591675f, 0.46819189190864563f, 0.8718813061714172f, 0.6243248581886292f, -0.2948562204837799f, 0.05320574715733528f, 0.6093525290489197f, 0.058433596044778824f, 0.8426879644393921f, 0.22241708636283875f, 0.9815271496772766f, 0.11751660704612732f, -0.8465355634689331f, 0.11134642362594604f, 0.7803115844726562f, 0.46306025981903076f, 0.1492454558610916f, 0.46576595306396484f, 0.6023808121681213f, 0.7898734211921692f, -0.08260679244995117f, 0.01659579575061798f, 0.6986461877822876f, 0.5555770993232727f, 0.5488408803939819f, 0.7478358149528503f, 0.9682579040527344f, 0.8512323498725891f, -0.09369783103466034f, 0.8237338066101074f, 0.9418249130249023f, 0.15363536775112152f, 0.634414792060852f, 0.10646765679121017f, 0.19522692263126373f, 0.2272414267063141f, -0.002890191273763776f, 0.23169027268886566f, 0.3647681772708893f, 0.38067811727523804f, 0.886247456073761f, 0.8460949659347534f, 0.7836971879005432f, 0.7889523506164551f, -0.03602556139230728f, 0.3297537565231323f, 0.6926409006118774f, 0.795737624168396f, 0.1675138771533966f, 0.09344635158777237f, 0.9882815480232239f, 0.6679984927177429f, -0.5849872827529907f, 0.7784003019332886f, 0.8478856682777405f, 0.29352670907974243f, 0.6045506000518799f, 0.2645438611507416f, 0.5631431937217712f, 0.9030202627182007f, -0.49858754873275757f, 0.6617743968963623f, 0.6219804883003235f, 0.6726211905479431f, 0.11124483495950699f, 0.7492474913597107f, 0.4945896565914154f, 0.37190279364585876f, -0.852044939994812f, 0.49590301513671875f, 0.7590908408164978f, 0.77937251329422f, 0.572507917881012f, 0.7656670808792114f, 0.28836265206336975f, 0.925093412399292f, -0.5065951347351074f, 0.8429446220397949f, 0.9149578213691711f, 0.3108464479446411f, 0.8940805792808533f, 0.5532998442649841f, 0.9648550152778625f, 0.3635876774787903f, -0.011607982218265533f, 0.24621927738189697f, 0.9166836142539978f, 0.7054242491722107f, 0.6694196462631226f, 0.8288902640342712f, 0.01438141893595457f, 0.7834815979003906f, -0.30315297842025757f, 0.343787282705307f, 0.9311694502830505f, 0.20901569724082947f, 0.03163444250822067f, 0.3374660909175873f, 0.19144579768180847f, 0.787857711315155f, -0.8772508502006531f, 0.019687511026859283f, 0.7186130285263062f, 0.4151565134525299f, 0.5524119138717651f, 0.5511173605918884f, 0.15443240106105804f, 0.07157111167907715f, -0.5371878147125244f, 0.07474317401647568f, 0.1890295147895813f, 0.5113049745559692f, 0.20761175453662872f, 0.9918082356452942f, 0.45350736379623413f, 0.7689892649650574f, -0.8108172416687012f, 0.06834615021944046f, 0.10309352725744247f, 0.6994638442993164f, 0.9233081936836243f, 0.842613935470581f, 0.7306557893753052f, 0.08591291308403015f, -0.2543862760066986f, 0.6757669448852539f, 0.3334727883338928f, 0.3141815960407257f, 0.6865306496620178f, 0.44583386182785034f, 0.030016733333468437f, 0.6685934662818909f, -0.7179939150810242f, 0.551457405090332f, 0.08727549761533737f, 0.592344343662262f, 0.946656346321106f, 0.36807140707969666f, 0.788834810256958f, 0.7350102066993713f, -0.22958073019981384f, 0.16038978099822998f, 0.7733519077301025f, 0.4241805970668793f, 0.938801646232605f, 0.5152682662010193f, 0.7016167640686035f, 0.17849068343639374f, -0.26654547452926636f, 0.2721807658672333f, 0.47795507311820984f, 0.7346274852752686f, 0.9110202789306641f, 0.5490556359291077f, 0.08564358949661255f, 0.8049623370170593f, -0.9964652061462402f, 0.5699772238731384f, 0.24794186651706696f, 0.7018424272537231f, 0.04913261532783508f, 0.9011610746383667f, 0.12914824485778809f, 0.2025708258152008f, -0.6221342086791992f, 0.9996219873428345f, 0.1839059442281723f, 0.6072368621826172f, 0.41025081276893616f, 0.8251518607139587f, 0.2876962721347809f, 0.2485370635986328f, -0.32667380571365356f, 0.4687412977218628f, 0.1805250197649002f, 0.8628572821617126f, 0.3778517246246338f, 0.48793354630470276f, 0.8408243656158447f, 0.43974819779396057f, -0.6695202589035034f, 0.8919663429260254f, 0.7569398283958435f, 0.2153547704219818f, 0.47375860810279846f, 0.8212502002716064f, 0.5780112743377686f, 0.6174365282058716f, -0.6393510699272156f, 0.4698233902454376f, 0.8077614903450012f, 0.2736038565635681f, 0.6151328682899475f, 0.11210910230875015f, 0.47040659189224243f, 0.6066508889198303f, -0.6372498273849487f, 0.20890218019485474f, 0.07838974893093109f, 0.3537690043449402f, 0.25618287920951843f, 0.711003839969635f, 0.6685885787010193f, 0.889720618724823f, -0.515397310256958f, 0.16747325658798218f, 0.20433899760246277f, 0.24510331451892853f, 0.5622668862342834f, 0.14497660100460052f, 0.7957016825675964f, 0.4715547561645508f, -0.6947348713874817f, 0.5881384611129761f, 0.2209203988313675f, 0.2519475817680359f, 0.8177295923233032f, 0.5878086686134338f, 0.3591487407684326f, 0.881898820400238f, -0.021396229043602943f, 0.12294017523527145f, 0.043913424015045166f, 0.37616902589797974f, 0.4094470739364624f, 0.6461416482925415f, 0.7243949770927429f, 0.5817341208457947f, -0.582251250743866f, 0.3593549132347107f, 0.014340977184474468f, 0.6562785506248474f, 0.1270696222782135f, 0.22407400608062744f, 0.5634948015213013f, 0.06197506934404373f, -0.21825049817562103f, 0.5233862400054932f, 0.9017668962478638f, 0.3165607154369354f, 0.021450357511639595f, 0.875942587852478f, 0.030885476619005203f, 0.8726959824562073f, -0.11255159229040146f, 0.5837392807006836f, 0.9089059829711914f, 0.12913456559181213f, 0.28756704926490784f, 0.2140323966741562f, 0.3131519556045532f, 0.578076183795929f, -0.39085304737091064f, 0.4311429262161255f, 0.5526436567306519f, 0.49821895360946655f, 0.8460825085639954f, 0.32327237725257874f, 0.7199528217315674f, 0.6768356561660767f, -0.03667352721095085f, 0.9383607506752014f, 0.6627063155174255f, 0.09251082688570023f, 0.3371576964855194f, 0.9712247252464294f, 0.1346926987171173f, 0.17737232148647308f, -0.982562243938446f, 0.9695571660995483f, 0.8509716391563416f, 0.8927572965621948f, 0.12954168021678925f, 0.626775324344635f, 0.0675712525844574f, 0.3093441426753998f, -0.9981232285499573f, 0.7867425084114075f, 0.38259270787239075f, 0.2730534076690674f, 0.9601092338562012f, 0.12445731461048126f, 0.30084747076034546f, 0.4120347797870636f, -0.9581021666526794f, 0.305184006690979f, 0.1541977971792221f, 0.5748429894447327f, 0.618529200553894f, 0.3450320363044739f, 0.5540919899940491f, 0.3028991222381592f, -0.7240110635757446f, 0.09460745751857758f, 0.3566308319568634f, 0.27213239669799805f, 0.5972344875335693f, 0.6818827986717224f, 0.3483409285545349f, 0.5481618642807007f, -0.33366987109184265f, 0.989543080329895f, 0.027021003887057304f, 0.2902771234512329f, 0.856401264667511f, 0.39970844984054565f, 0.4337981641292572f, 0.058030448853969574f, -0.5352057218551636f, 0.7707526683807373f, 0.07804610580205917f, 0.4266733229160309f, 0.5810091495513916f, 0.23988302052021027f, 0.49268919229507446f, 0.3159509003162384f, -0.11218326538801193f, 0.3447572886943817f, 0.04230888932943344f, 0.0029914064798504114f, 0.5986618995666504f, 0.6213657259941101f, 0.7596821188926697f, 0.36301466822624207f, -0.27580466866493225f, 0.7269449830055237f, 0.9150973558425903f, 0.43682894110679626f, 0.07993876188993454f, 0.5405641794204712f, 0.7320513725280762f, 0.5479242205619812f, -0.5079942941665649f, 0.06558667868375778f, 0.623618483543396f, 0.06928163766860962f, 0.3158867061138153f, 0.9341907501220703f, 0.827805757522583f, 0.044489212334156036f, -0.7094587087631226f, 0.7323400974273682f, 0.4250940978527069f, 0.5722609758377075f, 0.08376237004995346f, 0.7181273102760315f, 0.5181013941764832f, 0.9864031672477722f, -0.8138813376426697f, 0.4875813126564026f, 0.7706190347671509f, 0.8672002553939819f, 0.21627044677734375f, 0.2735655605792999f, 0.05761905014514923f, 0.38821372389793396f, -0.7508622407913208f, 0.8620738983154297f, 0.8543381094932556f, 0.4461043179035187f, 0.07306385785341263f, 0.9659711718559265f, 0.035707026720047f, 0.9196047186851501f, -0.4579145312309265f, 0.2390071451663971f, 0.039659298956394196f, 0.07121697068214417f, 0.05260620266199112f, 0.8870981931686401f, 0.4915403723716736f, 0.9435128569602966f, -0.8088255524635315f, 0.7611140608787537f, 0.02446291409432888f, 0.41300371289253235f, 0.4991230070590973f, 0.4918166995048523f, 0.7286627888679504f, 0.1190524771809578f, -0.1642870008945465f, 0.9401220083236694f, 0.2835507392883301f, 0.3109196126461029f, 0.2953626215457916f, 0.1373773217201233f, 0.1907418817281723f, 0.018955940380692482f, -0.5850769877433777f, 0.28414463996887207f, 0.2500634789466858f, 0.06293409317731857f, 0.1828301101922989f, 0.7568896412849426f, 0.12789268791675568f, 0.9784479737281799f, -0.3787476420402527f, 0.03613610938191414f, 0.38545820116996765f, 0.26659753918647766f, 0.6716180443763733f, 0.36139798164367676f, 0.9990758299827576f, 0.8836432695388794f, -0.8857089281082153f, 0.4692755341529846f, 0.5891709923744202f, 0.09828638285398483f, 0.475411981344223f, 0.2973167300224304f, 0.9372856020927429f, 0.09688366204500198f, -0.7833572626113892f, 0.7324462532997131f, 0.6679421067237854f, 0.6439416408538818f, 0.6045898199081421f, 0.8910754919052124f, 0.19740039110183716f, 0.7247869372367859f, -0.7544324398040771f, 0.30057963728904724f, 0.3293069303035736f, 0.6991744637489319f, 0.8441499471664429f, 0.42249783873558044f, 0.9804831147193909f, 0.13358046114444733f, -0.05347807705402374f, 0.8339612483978271f, 0.04955323785543442f, 0.29330700635910034f, 0.4176426827907562f, 0.8991380333900452f, 0.5810479521751404f, 0.7047156691551208f, -0.4515124559402466f, 0.6190942525863647f, 0.19994357228279114f, 0.3569151759147644f, 0.11691555380821228f, 0.5109258890151978f, 0.002103495877236128f, 0.7366765141487122f, -0.3812560737133026f, 0.30075448751449585f, 0.7458950281143188f, 0.16429424285888672f, 0.8649501800537109f, 0.7319382429122925f, 0.8360223770141602f, 0.2848505675792694f, -0.469548761844635f, 0.8437161445617676f, 0.9901449680328369f, 0.019633140414953232f, 0.5165451765060425f, 0.8702456951141357f, 0.036574311554431915f, 0.2982325553894043f, -0.8520745635032654f, 0.45923396944999695f, 0.044684916734695435f, 0.8584467172622681f, 0.790010392665863f, 0.3001932203769684f, 0.50410395860672f, 0.19123263657093048f, -0.12163330614566803f, 0.7908264398574829f, 0.9985623359680176f, 0.26364004611968994f, 0.35037657618522644f, 0.2526565194129944f, 0.30122628808021545f, 0.748308539390564f, -0.6282336115837097f, 0.24680902063846588f, 0.3890484869480133f, 0.4817659556865692f, 0.5143810510635376f, 0.7311301827430725f, 0.9822348952293396f, 0.709623396396637f, -0.3108370006084442f, 0.7334948182106018f, 0.6199811697006226f, 0.7595679759979248f, 0.8889960646629333f, 0.3838682472705841f, 0.898160457611084f, 0.9930683374404907f, -0.2211810201406479f, 0.9840863943099976f, 0.7692766785621643f, 0.2710705101490021f, 0.07777215540409088f, 0.22730757296085358f, 0.8120085597038269f, 0.9981943368911743f, -0.4502356946468353f, 0.182204931974411f, 0.7314128875732422f, 0.9079766273498535f, 0.9648684859275818f, 0.17598804831504822f, 0.8872012495994568f, 0.1842181384563446f, -0.28481122851371765f, 0.24095870554447174f, 0.39342138171195984f, 0.7529118061065674f, 0.49897098541259766f, 0.9208551645278931f, 0.4404255151748657f, 0.8985962271690369f, -0.8431458473205566f, 0.7906520962715149f, 0.3014572560787201f, 0.7205560803413391f, 0.621608316898346f, 0.8388971090316772f, 0.17793990671634674f, 0.11045975983142853f, -0.8603841662406921f, 0.09695392102003098f, 0.13274313509464264f, 0.3723464906215668f, 0.9542103409767151f, 0.8940310478210449f, 0.2777183949947357f, 0.5529214143753052f, -0.1338357776403427f, 0.7901126146316528f, 0.1474047303199768f, 0.3004383444786072f, 0.21079611778259277f, 0.15621264278888702f, 0.2755606174468994f, 0.32015740871429443f, -0.6026579737663269f, 0.5759261250495911f, 0.27714863419532776f, 0.3623771369457245f, 0.591622531414032f, 0.2192573845386505f, 0.7895900011062622f, 0.6631714701652527f, -0.37245234847068787f, 0.18676570057868958f, 0.5086419582366943f, 0.09073431044816971f, 0.2156856805086136f, 0.5654429197311401f, 0.14353437721729279f, 0.1975679099559784f, -0.4457787871360779f, 0.16961556673049927f, 0.06751056760549545f, 0.2744520902633667f, 0.3834483325481415f, 0.4624060094356537f, 0.04402588680386543f, 0.696986198425293f, -0.9784624576568604f, 0.07901662588119507f, 0.008712285198271275f, 0.366759330034256f, 0.2059580534696579f, 0.19423650205135345f, 0.3880442678928375f, 0.023787153884768486f, -0.27691417932510376f, 0.2855020761489868f, 0.9481924772262573f, 0.07236888259649277f, 0.7339503765106201f, 0.3710402548313141f, 0.1913982629776001f, 0.5739847421646118f, -0.5404015779495239f, 0.41767507791519165f, 0.922250509262085f, 0.3158651888370514f, 0.49957913160324097f, 0.6765637397766113f, 0.34187644720077515f, 0.7898913025856018f, -0.0718044564127922f, 0.5190258622169495f, 0.9280303716659546f, 0.31672531366348267f, 0.49268996715545654f, 0.2952626943588257f, 0.34879621863365173f, 0.8767579197883606f, -0.8928529620170593f, 0.6296870112419128f, 0.13339033722877502f, 0.2743018865585327f, 0.7036749124526978f, 0.3902137875556946f, 0.2031456083059311f, 0.9974954128265381f, -0.05260002240538597f, 0.27026864886283875f, 0.930843710899353f, 0.7506945133209229f, 0.513475775718689f, 0.9936524033546448f, 0.16291029751300812f, 0.11593944579362869f, -0.4410337209701538f, 0.8287772536277771f, 0.7003839612007141f, 0.2805783748626709f, 0.615525484085083f, 0.30458077788352966f, 0.03934458643198013f, 0.757737398147583f, -0.19560113549232483f, 0.409323126077652f, 0.2160756140947342f, 0.6909145712852478f, 0.6684888601303101f, 0.635475218296051f, 0.08679692447185516f, 0.15582604706287384f, -0.1270751953125f, 0.8590400218963623f, 0.7781832814216614f, 0.8974502086639404f, 0.5819793939590454f, 0.23803368210792542f, 0.04227512329816818f, 0.14249230921268463f, -0.8773056268692017f, 0.8082444071769714f, 0.1248205155134201f, 0.27269041538238525f, 0.7455902695655823f, 0.46525174379348755f, 0.6285213232040405f, 0.5862853527069092f, -0.4583170711994171f, 0.9334164261817932f, 0.9712169766426086f, 0.3854079246520996f, 0.1929229497909546f, 0.3693482279777527f, 0.04355276748538017f, 0.4633778929710388f, -0.06082805246114731f, 0.8669633865356445f, 0.04868202283978462f, 0.38619038462638855f, 0.960212230682373f, 0.08168698847293854f, 0.5844712853431702f, 0.4545578956604004f, -0.900104284286499f, 0.8385890126228333f, 0.7153081893920898f, 0.35749706625938416f, 0.32435235381126404f, 0.9983905553817749f, 0.38674619793891907f, 0.7219309210777283f, -0.665869414806366f, 0.9192535281181335f, 0.5158875584602356f, 0.9156631231307983f, 0.031749848276376724f, 0.7354605197906494f, 0.8479849100112915f, 0.07958336174488068f, -0.3974558413028717f, 0.35564756393432617f, 0.3984565734863281f, 0.20238207280635834f, 0.5976213216781616f, 0.9798260927200317f, 0.4747878313064575f, 0.48889321088790894f, -0.4367660582065582f, 0.5626810193061829f, 0.7965846657752991f, 0.5844014883041382f, 0.03049435466527939f, 0.09400736540555954f, 0.9139723181724548f, 0.9175982475280762f, -0.42526787519454956f, 0.6669188737869263f, 0.155279278755188f, 0.27571919560432434f, 0.917189359664917f, 0.3665276765823364f, 0.6891955137252808f, 0.4195615351200104f, -0.7898486852645874f, 0.570287823677063f, 0.7952296733856201f, 0.8897441029548645f, 0.3348119258880615f, 0.6252914071083069f, 0.9236165285110474f, 0.25989431142807007f, -0.9273573160171509f, 0.29422926902770996f, 0.22125451266765594f, 0.7705805897712708f, 0.035689376294612885f, 0.5905158519744873f, 0.45423784852027893f, 0.23743487894535065f, -0.5312442183494568f, 0.32727235555648804f, 0.9593839645385742f, 0.06695403903722763f, 0.3520269989967346f, 0.01270472351461649f, 0.4525761008262634f, 0.38637879490852356f, -0.6682471632957458f, 0.5612847208976746f, 0.7908957004547119f, 0.7849839329719543f, 0.28283461928367615f, 0.7831971049308777f, 0.2414444386959076f, 0.42365896701812744f, -0.8988508582115173f, 0.9475301504135132f, 0.6572872996330261f, 0.0325995534658432f, 0.7706236839294434f, 0.4403219223022461f, 0.9234016537666321f, 0.910656213760376f, -0.4274269640445709f, 0.9601342082023621f, 0.8142226934432983f, 0.6112731695175171f, 0.18500228226184845f, 0.8968204259872437f, 0.8725782036781311f, 0.5040290951728821f, -0.7008283138275146f, 0.1469268500804901f, 0.9331091046333313f, 0.8449792861938477f, 0.3757284879684448f, 0.8620151281356812f, 0.27644360065460205f, 0.9813668131828308f, -0.5408294200897217f, 0.918728232383728f, 0.48711252212524414f, 0.8287350535392761f, 0.049515921622514725f, 0.7446660995483398f, 0.2677364945411682f, 0.6829983592033386f, -0.10432271659374237f, 0.563334584236145f, 0.5109773278236389f, 0.1114903911948204f, 0.18005114793777466f, 0.6602199673652649f, 0.8251546621322632f, 0.46968919038772583f, -0.09688439965248108f, 0.9547668695449829f, 0.6040931344032288f, 0.4552604854106903f, 0.19106397032737732f, 0.6452281475067139f, 0.30181026458740234f, 0.32611531019210815f, -0.22867751121520996f, 0.6442216634750366f, 0.7742848992347717f, 0.3040635585784912f, 0.834697425365448f, 0.17591112852096558f, 0.9564913511276245f, 0.2943313419818878f, -0.7360348105430603f, 0.01779766194522381f, 0.4541270136833191f, 0.6810733675956726f, 0.07545506954193115f, 0.9989390969276428f, 0.4267001152038574f, 0.20165720582008362f, -0.8882248997688293f, 0.9003507494926453f, 0.5370545983314514f, 0.15752075612545013f, 0.7125276327133179f, 0.6127645969390869f, 0.8398033380508423f, 0.3856160342693329f, -0.8338125944137573f, 0.6324543952941895f, 0.36705711483955383f, 0.643197774887085f, 0.7350969314575195f, 0.941743016242981f, 0.7264806628227234f, 0.28612977266311646f, -0.02949356473982334f, 0.09510542452335358f, 0.8570318818092346f, 0.897141695022583f, 0.5074977278709412f, 0.7793298959732056f, 0.0496818944811821f, 0.5376997590065002f, -0.364944726228714f, 0.05366247519850731f, 0.6806990504264832f, 0.33233633637428284f, 0.5341593027114868f, 0.43096575140953064f, 0.2547605335712433f, 0.7828775644302368f, -0.5023358464241028f, 0.8299338221549988f, 0.3525664210319519f, 0.6467911005020142f, 0.866820216178894f, 0.560322642326355f, 0.9399440288543701f, 0.6216250658035278f, -0.7617981433868408f, 0.2646304666996002f, 0.025964293628931046f, 0.5727476477622986f, 0.8749298453330994f, 0.005557444412261248f, 0.7935081720352173f, 0.15759211778640747f, -0.24657581746578217f, 0.29859456419944763f, 0.21264058351516724f, 0.08009370416402817f, 0.4936467111110687f, 0.16847415268421173f, 0.07826104760169983f, 0.8789875507354736f, -0.4665766656398773f, 0.920598566532135f, 0.46349677443504333f, 0.6919680833816528f, 0.6054619550704956f, 0.8874859809875488f, 0.8981916904449463f, 0.2769310474395752f, -0.8925811648368835f, 0.1449979543685913f, 0.3831627666950226f, 0.4630964696407318f, 0.01505066454410553f, 0.7855311632156372f, 0.6130115985870361f, 0.22855475544929504f, -0.591688334941864f, 0.607666552066803f, 0.43440988659858704f, 0.5966001152992249f, 0.8681831955909729f, 0.5765267014503479f, 0.9171448945999146f, 0.7056381106376648f, -0.3323950469493866f, 0.4971923530101776f, 0.14164556562900543f, 0.1855659931898117f, 0.5316653847694397f, 0.13160790503025055f, 0.5188389420509338f, 0.19202439486980438f, -0.8418950438499451f, 0.8554749488830566f, 0.49751362204551697f, 0.10819432884454727f, 0.37885430455207825f, 0.608906626701355f, 0.4411388039588928f, 0.34953537583351135f, -0.5999792814254761f, 0.8548124432563782f, 0.7580438256263733f, 0.3923238515853882f, 0.6012825965881348f, 0.5184241533279419f, 0.6045368909835815f, 0.898377001285553f, -0.8040817379951477f, 0.04608343541622162f, 0.17025339603424072f, 0.12941493093967438f, 0.3743678033351898f, 0.041844442486763f, 0.6952731013298035f, 0.03697677329182625f, -0.718549370765686f, 0.2802489995956421f, 0.32186031341552734f, 0.5408422350883484f, 0.19409306347370148f, 0.2341959923505783f, 0.27650922536849976f, 0.6086140871047974f, -0.6499473452568054f, 0.3488626480102539f, 0.021908599883317947f, 0.24189794063568115f, 0.2970775365829468f, 0.7017696499824524f, 0.9229640364646912f, 0.737134575843811f, -0.2963205873966217f, 0.190961092710495f, 0.6349189877510071f, 0.17626260221004486f, 0.9720255732536316f, 0.5652452707290649f, 0.617363691329956f, 0.40948912501335144f, -0.12041541934013367f, 0.9816982746124268f, 0.5357421636581421f, 0.7206700444221497f, 0.8854501843452454f, 0.12397732585668564f, 0.5724208950996399f, 0.7353929877281189f, -0.9372245073318481f, 0.20242398977279663f, 0.9328790903091431f, 0.021578095853328705f, 0.013153139501810074f, 0.4568987786769867f, 0.6758053302764893f, 0.9662733674049377f, -0.23867836594581604f, 0.21078833937644958f, 0.3624916970729828f, 0.47332486510276794f, 0.5813540816307068f, 0.5675532221794128f, 0.4080396890640259f, 0.3395008444786072f, -0.22668753564357758f, 0.010311695747077465f, 0.7820968627929688f, 0.409637987613678f, 0.2966823875904083f, 0.2655046582221985f, 0.8679233193397522f, 0.6748051047325134f, -0.9878333210945129f, 0.0009995171567425132f, 0.5162041783332825f, 0.3840506076812744f, 0.9792672991752625f, 0.8322229385375977f, 0.6581446528434753f, 0.7480389475822449f, -0.9581149816513062f, 0.5249365568161011f, 0.7742303609848022f, 0.6936571598052979f, 0.15626639127731323f, 0.5904139876365662f, 0.7475051879882812f, 0.7182372808456421f, -0.8351176381111145f, 0.7950302958488464f, 0.6927241086959839f, 0.025883756577968597f, 0.7636055946350098f, 0.6192069053649902f, 0.6432370543479919f, 0.12228994816541672f, -0.4578900933265686f, 0.8386763334274292f, 0.3990514278411865f, 0.46071723103523254f, 0.13802731037139893f, 0.40640854835510254f, 0.3625544309616089f, 0.6803394556045532f, -0.13991788029670715f, 0.6543972492218018f, 0.614884078502655f, 0.9878351092338562f, 0.2663015127182007f, 0.42997631430625916f, 0.9380136728286743f, 0.7456470131874084f, -0.7569973468780518f, 0.38309764862060547f, 0.16460327804088593f, 0.2074136584997177f, 0.8545089364051819f, 0.003929798491299152f, 0.5417223572731018f, 0.2667487859725952f, -0.6121549010276794f, 0.3346337080001831f, 0.24027390778064728f, 0.934942901134491f, 0.3792584538459778f, 0.7759948968887329f, 0.9126526713371277f, 0.23145928978919983f, -0.2971913814544678f, 0.6120193004608154f, 0.03306465595960617f, 0.027326850220561028f, 0.7039435505867004f, 0.21133948862552643f, 0.5873256921768188f, 0.31238508224487305f, -0.5827713012695312f, 0.0944298580288887f, 0.27882814407348633f, 0.663525402545929f, 0.596032440662384f, 0.3077148199081421f, 0.9977859258651733f, 0.29184359312057495f, -0.17271935939788818f, 0.8506672382354736f, 0.008344528265297413f, 0.3649138808250427f, 0.8817725777626038f, 0.5815324187278748f, 0.9471594095230103f, 0.16020533442497253f, -0.6045829057693481f, 0.07140357047319412f, 0.8130833506584167f, 0.008872699923813343f, 0.8921626806259155f, 0.4892973005771637f, 0.7892907857894897f, 0.9014286994934082f, -0.3621843457221985f, 0.8263819813728333f, 0.9237194657325745f, 0.08551690727472305f, 0.23621836304664612f, 0.8212858438491821f, 0.8871012330055237f, 0.9951843023300171f, -0.30428528785705566f, 0.42104318737983704f, 0.25728434324264526f, 0.5395596027374268f, 0.3556424081325531f, 0.7256873846054077f, 0.4353509843349457f, 0.6835750341415405f, -0.9133396744728088f, 0.11772459000349045f, 0.44263333082199097f, 0.470832496881485f, 0.8758931756019592f, 0.2256428450345993f, 0.3925136625766754f, 0.2797432839870453f, -0.18129056692123413f, 0.5048123598098755f, 0.3314325511455536f, 0.8188539147377014f, 0.6599600315093994f, 0.9256216287612915f, 0.7225265502929688f, 0.6523318290710449f, -0.3085877597332001f, 0.2858545780181885f, 0.41256117820739746f, 0.3306209146976471f, 0.1917559802532196f, 0.510397732257843f, 0.8673489093780518f, 0.5083721280097961f, -0.9293779730796814f, 0.832906186580658f, 0.6600126624107361f, 0.7885426878929138f, 0.5083682537078857f, 0.7804587483406067f, 0.9711667895317078f, 0.9341732859611511f, -0.7567885518074036f, 0.19518470764160156f, 0.501413106918335f, 0.794040858745575f, 0.48987075686454773f, 0.7848455905914307f, 0.4977274239063263f, 0.9442598223686218f, -0.9357163906097412f, 0.27411919832229614f, 0.22282756865024567f, 0.7463782429695129f, 0.6707057952880859f, 0.10607316344976425f, 0.7416541576385498f, 0.45387184619903564f, -0.13412728905677795f, 0.9676707983016968f, 0.8804501295089722f, 0.38914594054222107f, 0.5927761197090149f, 0.7452418208122253f, 0.4368624687194824f, 0.6022335886955261f, -0.7986619472503662f, 0.02174622006714344f, 0.34566530585289f, 0.7936260104179382f, 0.26191115379333496f, 0.365605890750885f, 0.2728256285190582f, 0.42086315155029297f, -0.4614507853984833f, 0.8055439591407776f, 0.46007412672042847f, 0.9623234272003174f, 0.6577586531639099f, 0.8859506249427795f, 0.7782798409461975f, 0.8401535749435425f, -0.9729214906692505f, 0.21712295711040497f, 0.7189800143241882f, 0.13196174800395966f, 0.9975947737693787f, 0.09733985364437103f, 0.9047946333885193f, 0.2257545292377472f, -0.32408320903778076f, 0.8007678389549255f, 0.8629552721977234f, 0.3510390818119049f, 0.539074182510376f, 0.056151989847421646f, 0.09285987168550491f, 0.7342820763587952f, -0.6359429955482483f, 0.8607731461524963f, 0.23097139596939087f, 0.31459206342697144f, 0.5424831509590149f, 0.5512003898620605f, 0.07945115864276886f, 0.4813055992126465f, -0.17882832884788513f, 0.5740710496902466f, 0.8562504053115845f, 0.9259157180786133f, 0.6239043474197388f, 0.24804362654685974f, 0.9472310543060303f, 0.46499478816986084f, -0.7130338549613953f, 0.9162270426750183f, 0.5538663268089294f, 0.5839828848838806f, 0.5573958158493042f, 0.924978494644165f, 0.24861371517181396f, 0.6412385106086731f, -0.8842841386795044f, 0.40002983808517456f, 0.1801733523607254f, 0.40647637844085693f, 0.6396904587745667f, 0.6666064262390137f, 0.3718838691711426f, 0.502200186252594f, -0.7299097776412964f, 0.06478989869356155f, 0.20852090418338776f, 0.4415574073791504f, 0.9293724298477173f, 0.08813481032848358f, 0.4099293351173401f, 0.7573805451393127f, -0.5820389986038208f, 0.6162617206573486f, 0.2795253098011017f, 0.031486447900533676f, 0.21183690428733826f, 0.6012778878211975f, 0.6750587821006775f, 0.18023474514484406f, -0.9667750597000122f, 0.3220099210739136f, 0.6550283432006836f, 0.9392325282096863f, 0.6678884625434875f, 0.07481079548597336f, 0.6543365120887756f, 0.21281415224075317f, -0.7605246901512146f, 0.4298371970653534f, 0.910841703414917f, 0.07454534620046616f, 0.53702712059021f, 0.10208197683095932f, 0.680138885974884f, 0.16424888372421265f, -0.08113893866539001f, 0.8799451589584351f, 0.816035270690918f, 0.7046423554420471f, 0.4927513897418976f, 0.17561444640159607f, 0.8236799240112305f, 0.8264367580413818f, -0.620945930480957f, 0.35737699270248413f, 0.9913866519927979f, 0.7193199992179871f, 0.6319969296455383f, 0.05140504613518715f, 0.06581291556358337f, 0.4371846318244934f, -0.8877448439598083f, 0.7431769967079163f, 0.5316871404647827f, 0.6810835599899292f, 0.9743124842643738f, 0.963657557964325f, 0.08533898741006851f, 0.0628245621919632f, -0.805252194404602f, 0.06569113582372665f, 0.5069155097007751f, 0.7635108232498169f, 0.7883887887001038f, 0.920667827129364f, 0.8327913880348206f, 0.04362229257822037f, -0.9773795008659363f, 0.11578171700239182f, 0.23088081181049347f, 0.3597413897514343f, 0.14138782024383545f, 0.7795767188072205f, 0.920731246471405f, 0.5594196319580078f, -0.925033450126648f, 0.7345218658447266f, 0.503506600856781f, 0.5367988348007202f, 0.010608697310090065f, 0.4062248766422272f, 0.8753417134284973f, 0.5436288714408875f, -0.8017826080322266f, 0.07347838580608368f, 0.4338362514972687f, 0.07733264565467834f, 0.0801984891295433f, 0.3199264109134674f, 0.5648439526557922f, 0.8935258984565735f, -0.24741989374160767f, 0.9762441515922546f, 0.12658141553401947f, 0.9108783602714539f, 0.04889227822422981f, 0.1259952187538147f, 0.038642704486846924f, 0.794116199016571f, -0.44953396916389465f, 0.8744425773620605f, 0.00622154725715518f, 0.40179479122161865f, 0.3944626450538635f, 0.599364697933197f, 0.8711247444152832f, 0.06100212410092354f, -0.5463660955429077f, 0.7826619148254395f, 0.515078067779541f, 0.7652891278266907f, 0.22105416655540466f, 0.6066440343856812f, 0.25577864050865173f, 0.6877878904342651f, -0.5680989027023315f, 0.8769969344139099f, 0.3398197591304779f, 0.04063747078180313f, 0.46773067116737366f, 0.4790322482585907f, 0.9420682787895203f, 0.19459064304828644f, -0.17758241295814514f, 0.7069278955459595f, 0.22949601709842682f, 0.20614509284496307f, 0.9516443014144897f, 0.2887978255748749f, 0.7986418604850769f, 0.5358546376228333f, -0.3603057563304901f, 0.012241637334227562f, 0.18840371072292328f, 0.1155792698264122f, 0.2606218755245209f, 0.7414966225624084f, 0.6027279496192932f, 0.5978645086288452f, -0.04355168342590332f, 0.14059780538082123f, 0.43307673931121826f, 0.5737596154212952f, 0.37674635648727417f, 0.11355647444725037f, 0.42484259605407715f, 0.5505791902542114f, -0.5043653845787048f, 0.984415590763092f, 0.38005590438842773f, 0.49786365032196045f, 0.6672791242599487f, 0.20999297499656677f, 0.3205336332321167f, 0.41771745681762695f, -0.3174888491630554f, 0.9778887033462524f, 0.9124601483345032f, 0.020953426137566566f, 0.2672605514526367f, 0.0010934534948319197f, 0.047773413360118866f, 0.38090747594833374f, -0.8884645700454712f, 0.30287694931030273f, 0.04833825305104256f, 0.18881411850452423f, 0.5979518294334412f, 0.399602472782135f, 0.17844945192337036f, 0.7882108092308044f, -0.677011251449585f, 0.8854313492774963f, 0.45342352986335754f, 0.44960567355155945f, 0.3298324644565582f, 0.052069589495658875f, 0.8119701147079468f, 0.5004726052284241f, -0.48004040122032166f, 0.15387000143527985f, 0.6655570268630981f, 0.7057616114616394f, 0.6684484481811523f, 0.9254857301712036f, 0.744014322757721f, 0.7026520371437073f, -0.8460713624954224f, 0.415122926235199f, 0.32672396302223206f, 0.2627194821834564f, 0.5217466354370117f, 0.19178913533687592f, 0.6349411606788635f, 0.8891187906265259f, -0.7440120577812195f, 0.3091934025287628f, 0.4263080358505249f, 0.9750504493713379f, 0.6826819777488708f, 0.8390824794769287f, 0.15991587936878204f, 0.3694080710411072f, -0.45558011531829834f, 0.8702945113182068f, 0.23215538263320923f, 0.9695906639099121f, 0.6097503304481506f, 0.9129814505577087f, 0.4736965298652649f, 0.3686486482620239f, -0.9296082854270935f, 0.6556851863861084f, 0.5548489093780518f, 0.004961545113474131f, 0.6717697381973267f, 0.1636216938495636f, 0.6075683832168579f, 0.9762537479400635f, -0.5228412747383118f, 0.16435839235782623f, 0.12992294132709503f, 0.4129725992679596f, 0.9182024598121643f, 0.7942736744880676f, 0.11258400976657867f, 0.5019041895866394f, -0.28664129972457886f, 0.03616790100932121f, 0.9722540378570557f, 0.5383954048156738f, 0.3356129229068756f, 0.48911669850349426f, 0.5281747579574585f, 0.7078421115875244f, -0.22735589742660522f, 0.45776987075805664f, 0.3195208013057709f, 0.7947978973388672f, 0.8533415198326111f, 0.9819122552871704f, 0.6028856039047241f, 0.6914821267127991f, -0.7636749744415283f, 0.7396550178527832f, 0.676313579082489f, 0.9343567490577698f, 0.34509456157684326f, 0.9981910586357117f, 0.3973073661327362f, 0.4229264259338379f, -0.8339991569519043f, 0.8953326940536499f, 0.6004531383514404f, 0.7345399260520935f, 0.2783049941062927f, 0.3783283233642578f, 0.3645496964454651f, 0.874805212020874f, -0.10884057730436325f, 0.18363234400749207f, 0.030484676361083984f, 0.2547590136528015f, 0.24082928895950317f, 0.11872278153896332f, 0.7448253631591797f, 0.798912525177002f, -0.933461606502533f, 0.26085835695266724f, 0.606980562210083f, 0.2861309051513672f, 0.23156456649303436f, 0.10583823174238205f, 0.7068204879760742f, 0.03734228014945984f, -0.042175132781267166f, 0.47357234358787537f, 0.5789156556129456f, 0.45286282896995544f, 0.2553878128528595f, 0.13594235479831696f, 0.07519525289535522f, 0.22167550027370453f, -0.16825780272483826f, 0.5727728009223938f, 0.9648455381393433f, 0.9725069999694824f, 0.1268131285905838f, 0.044792503118515015f, 0.3026411533355713f, 0.6727039813995361f, -0.4103625416755676f, 0.8215592503547668f, 0.3681996762752533f, 0.2313917577266693f, 0.0856224074959755f, 0.9730495810508728f, 0.5759740471839905f, 0.02660706266760826f, -0.06831255555152893f, 0.7057955265045166f, 0.33627018332481384f, 0.005357303190976381f, 0.44391191005706787f, 0.1340789496898651f, 0.5037074685096741f, 0.9535462260246277f, -0.7010871767997742f, 0.1054338589310646f, 0.7260611057281494f, 0.3896530270576477f, 0.0991886630654335f, 0.822773277759552f, 0.385873019695282f, 0.18796907365322113f, -0.6044596433639526f, 0.004040034022182226f, 0.862147331237793f, 0.8154231905937195f, 0.40174126625061035f, 0.10041078180074692f, 0.9442459344863892f, 0.16961249709129333f, -0.09166145324707031f, 0.15878458321094513f, 0.9637563824653625f, 0.4942142367362976f, 0.3061305284500122f, 0.3092150092124939f, 0.3976037800312042f, 0.8350924253463745f, -0.39813265204429626f, 0.6903368234634399f, 0.24681584537029266f, 0.06657544523477554f, 0.21150046586990356f, 0.1504402905702591f, 0.8427525162696838f, 0.46036383509635925f, -0.13827213644981384f, 0.5056079030036926f, 0.27298712730407715f, 0.9317548871040344f, 0.5449494123458862f, 0.8320332169532776f, 0.1620180457830429f, 0.2599216401576996f, -0.6704519391059875f, 0.3784875273704529f, 0.17294034361839294f, 0.2472543716430664f, 0.07147185504436493f, 0.88451087474823f, 0.6105734705924988f, 0.671800434589386f, -0.31106480956077576f, 0.061839405447244644f, 0.24210825562477112f, 0.7443496584892273f, 0.7372599840164185f, 0.1784939467906952f, 0.7548832893371582f, 0.46927356719970703f, -0.9519345760345459f, 0.167883962392807f, 0.4695723056793213f, 0.30838218331336975f, 0.7427016496658325f, 0.6073893308639526f, 0.020394153892993927f, 0.8634133338928223f, -0.2812332808971405f, 0.26214712858200073f, 0.8402667045593262f, 0.2711954116821289f, 0.7528697848320007f, 0.5795671343803406f, 0.43920546770095825f, 0.2091776728630066f, -0.444214791059494f, 0.3225474953651428f, 0.4212943911552429f, 0.7573381066322327f, 0.9821791648864746f, 0.7489244341850281f, 0.5347012877464294f, 0.18138134479522705f, -0.6270077228546143f, 0.7433095574378967f, 0.571861982345581f, 0.8675987720489502f, 0.42338988184928894f, 0.5377568006515503f, 0.9828140735626221f, 0.0568833202123642f, -0.9784805774688721f, 0.5070590972900391f, 0.40654951333999634f, 0.899846076965332f, 0.05688188225030899f, 0.4159352779388428f, 0.7509909272193909f, 0.8344524502754211f, -0.2696057856082916f, 0.5614613890647888f, 0.564357340335846f, 0.7834069728851318f, 0.363766074180603f, 0.052602365612983704f, 0.6403591632843018f, 0.2770768702030182f, -0.6130605936050415f, 0.1933237463235855f, 0.2667737305164337f, 0.909964382648468f, 0.0520508736371994f, 0.17801648378372192f, 0.6711950898170471f, 0.006274364423006773f, -0.8097144365310669f, 0.31527626514434814f, 0.7886291742324829f, 0.1496567726135254f, 0.12478365749120712f, 0.2728341519832611f, 0.6466277241706848f, 0.17396089434623718f, -0.35590535402297974f, 0.1949932724237442f, 0.7502039074897766f, 0.37593647837638855f, 0.6119386553764343f, 0.6154927015304565f, 0.6442830562591553f, 0.5875287055969238f, -0.771926999092102f, 0.189151331782341f, 0.846223771572113f, 0.7605885863304138f, 0.9594102501869202f, 0.6157747507095337f, 0.5411314368247986f, 0.3586638569831848f, -0.4225858151912689f, 0.8007842898368835f, 0.8070949912071228f, 0.408685564994812f, 0.6200571060180664f, 0.7012749910354614f, 0.6471378207206726f, 0.34390789270401f, -0.40557628870010376f, 0.4711100459098816f, 0.5219687819480896f, 0.3036375045776367f, 0.43855786323547363f, 0.5188291072845459f, 0.6622838973999023f, 0.1956409364938736f, -0.03612777590751648f, 0.6365073919296265f, 0.07221536338329315f, 0.5265085697174072f, 0.5973765254020691f, 0.3703961968421936f, 0.6563400030136108f, 0.16667254269123077f, -0.7403810620307922f, 0.7970815896987915f, 0.855979323387146f, 0.6003948450088501f, 0.8240017890930176f, 0.300899475812912f, 0.20029839873313904f, 0.3849489390850067f, -0.10787457972764969f, 0.8102700114250183f, 0.6488688588142395f, 0.505339503288269f, 0.29028815031051636f, 0.8658586740493774f, 0.9763928055763245f, 0.28194427490234375f, -0.1622023731470108f, 0.3139665424823761f, 0.8651318550109863f, 0.16491729021072388f, 0.7057092785835266f, 0.21198727190494537f, 0.8400357365608215f, 0.7909098863601685f, -0.3800571858882904f, 0.09037519991397858f, 0.8390635848045349f, 0.1650354564189911f, 0.5484389066696167f, 0.9864218235015869f, 0.6221427321434021f, 0.5218956470489502f, -0.7369908690452576f, 0.4158875048160553f, 0.7111475467681885f, 0.8155312538146973f, 0.54631507396698f, 0.8095486760139465f, 0.23364458978176117f, 0.9963705539703369f, -0.20014972984790802f, 0.764026403427124f, 0.16618014872074127f, 0.42977985739707947f, 0.5815058350563049f, 0.4922531247138977f, 0.15924513339996338f, 0.09451059252023697f, -0.8166179656982422f, 0.37239739298820496f, 0.14779305458068848f, 0.2800319790840149f, 0.7146039605140686f, 0.8448958992958069f, 0.32562968134880066f, 0.45240628719329834f, -0.6535614728927612f, 0.07263819873332977f, 0.9060655832290649f, 0.05295175686478615f, 0.3056860864162445f, 0.4304581880569458f, 0.9155386686325073f, 0.6722220778465271f, -0.4931163787841797f, 0.5672985911369324f, 0.4126390814781189f, 0.4613344073295593f, 0.35270845890045166f, 0.188294917345047f, 0.49973106384277344f, 0.6081303358078003f, -0.4307006597518921f, 0.139271080493927f, 0.43204036355018616f, 0.49851199984550476f, 0.35897836089134216f, 0.7799381613731384f, 0.620146632194519f, 0.2954597771167755f, -0.05694473534822464f, 0.7771864533424377f, 0.6036203503608704f, 0.7773945927619934f, 0.6737391352653503f, 0.6233006119728088f, 0.26410338282585144f, 0.06965098530054092f, -0.9696862697601318f, 0.7019414305686951f, 0.4374959468841553f, 0.10002098232507706f, 0.5967272520065308f, 0.5985307097434998f, 0.6067307591438293f, 0.1653425097465515f, -0.4807882308959961f, 0.29357853531837463f, 0.7427284717559814f, 0.07313022762537003f, 0.35720130801200867f, 0.7125546932220459f, 0.8820313811302185f, 0.44647061824798584f, -0.5536918640136719f, 0.584549605846405f, 0.8171143531799316f, 0.6710662245750427f, 0.06236039847135544f, 0.1417052447795868f, 0.9016069769859314f, 0.8484759330749512f, -0.34083810448646545f, 0.8402182459831238f, 0.8405411243438721f, 0.9666323661804199f, 0.5430439114570618f, 0.31219831109046936f, 0.5826084613800049f, 0.20848052203655243f, -0.48914578557014465f, 0.6062551736831665f, 0.3665560781955719f, 0.9611678123474121f, 0.9785478711128235f, 0.38634929060935974f, 0.2358333170413971f, 0.28737205266952515f, -0.4276410639286041f, 0.6685083508491516f, 0.11594510823488235f, 0.33120331168174744f, 0.282571405172348f, 0.8801300525665283f, 0.9111378788948059f, 0.3324480652809143f, -0.7587385773658752f, 0.09080538153648376f, 0.8407865166664124f, 0.3387264907360077f, 0.11774978786706924f, 0.46513012051582336f, 0.3404694199562073f, 0.6337873935699463f, -0.26892393827438354f, 0.8005001544952393f, 0.22360634803771973f, 0.8865064978599548f, 0.8743777275085449f, 0.18919631838798523f, 0.1981177031993866f, 0.03829490765929222f, -0.6500483155250549f, 0.009306036867201328f, 0.36411067843437195f, 0.08266031742095947f, 0.008345386013388634f, 0.20643627643585205f, 0.24354341626167297f, 0.9744816422462463f, -0.591185986995697f, 0.17402905225753784f, 0.9930526614189148f, 0.834691047668457f, 0.6547896265983582f, 0.646658182144165f, 0.459536075592041f, 0.15848363935947418f, -0.0775170847773552f, 0.48274436593055725f, 0.07832619547843933f, 0.060361821204423904f, 0.9787558913230896f, 0.23891140520572662f, 0.17265906929969788f, 0.48986631631851196f, -0.6932051181793213f, 0.5480526089668274f, 0.32976117730140686f, 0.9454007148742676f, 0.6797250509262085f, 0.19496260583400726f, 0.9705747961997986f, 0.679559051990509f, -0.39672526717185974f, 0.9894019365310669f, 0.20265938341617584f, 0.012506116181612015f, 0.626293420791626f, 0.2579537332057953f, 0.29380711913108826f, 0.7925621271133423f, -0.7605714797973633f, 0.8575484156608582f, 0.8613255620002747f, 0.821451723575592f, 0.9636286497116089f, 0.8372161388397217f, 0.9465959668159485f, 0.9620690941810608f, -0.5698416829109192f, 0.6589148640632629f, 0.7875661849975586f, 0.1332598477602005f, 0.31462034583091736f, 0.7254146337509155f, 0.555766224861145f, 0.2723972797393799f, -0.8879386782646179f, 0.8858312368392944f, 0.5856109857559204f, 0.6003392934799194f, 0.6061743497848511f, 0.6208295822143555f, 0.5039701461791992f, 0.5671778917312622f, -0.31351438164711f, 0.049646276980638504f, 0.6547864675521851f, 0.44449740648269653f, 0.36434048414230347f, 0.9203580021858215f, 0.8385347723960876f, 0.27131912112236023f, -0.833776593208313f, 0.7851735949516296f, 0.14119577407836914f, 0.20868200063705444f, 0.5986679196357727f, 0.5099581480026245f, 0.9017301201820374f, 0.6835969686508179f, -0.28509852290153503f, 0.16739468276500702f, 0.7900598049163818f, 0.3022211790084839f, 0.003612080356106162f, 0.942133367061615f, 0.9444113373756409f, 0.5084627270698547f, -0.2711412310600281f, 0.31727755069732666f, 0.4730336666107178f, 0.6640883684158325f, 0.19137395918369293f, 0.6538465619087219f, 0.11244332045316696f, 0.7322019934654236f, -0.5865882039070129f, 0.7861281633377075f, 0.4172727167606354f, 0.26177167892456055f, 0.44965845346450806f, 0.19200560450553894f, 0.18018148839473724f, 0.653134286403656f, -0.5594053268432617f, 0.19627287983894348f, 0.30752959847450256f, 0.9157074093818665f, 0.7477438449859619f, 0.0357174351811409f, 0.25804275274276733f, 0.42643460631370544f, -0.46987858414649963f, 0.54471355676651f, 0.8103408813476562f, 0.3974602222442627f, 0.46077960729599f, 0.8055732846260071f, 0.6391441822052002f, 0.4835341274738312f, -0.7419247627258301f, 0.6453018188476562f, 0.9842287302017212f, 0.01614964008331299f, 0.6276238560676575f, 0.192473903298378f, 0.44265690445899963f, 0.5579695105552673f, -0.2968972623348236f, 0.08195628225803375f, 0.4404749870300293f, 0.026951564475893974f, 0.20701175928115845f, 0.002376160118728876f, 0.6919177770614624f, 0.041785016655921936f, -0.010352949611842632f, 0.19518987834453583f, 0.9315083026885986f, 0.17270606756210327f, 0.5326797366142273f, 0.7444002628326416f, 0.6073132157325745f, 0.574566125869751f, -0.41895586252212524f, 0.4723639488220215f, 0.6665677428245544f, 0.28984516859054565f, 0.6220017671585083f, 0.28956079483032227f, 0.989417314529419f, 0.35670384764671326f, -0.7365808486938477f, 0.04337253049015999f, 0.19016671180725098f, 0.6427275538444519f, 0.82119220495224f, 0.4333341121673584f, 0.9795956611633301f, 0.5371379852294922f, -0.3717711567878723f, 0.2683793306350708f, 0.061247386038303375f, 0.7400310635566711f, 0.5975325703620911f, 0.25433236360549927f, 0.659572958946228f, 0.530849039554596f, -0.5623186230659485f, 0.694451093673706f, 0.4186108112335205f, 0.4181889295578003f, 0.16288621723651886f, 0.2826220989227295f, 0.3992467522621155f, 0.3148164451122284f, -0.508137047290802f, 0.2875794470310211f, 0.7093746662139893f, 0.9709956645965576f, 0.957690954208374f, 0.8447457551956177f, 0.3302139937877655f, 0.8378944396972656f, -0.271803081035614f, 0.8896716237068176f, 0.47795233130455017f, 0.11445415019989014f, 0.4652661979198456f, 0.21483442187309265f, 0.1365843117237091f, 0.36807385087013245f, -0.46811792254447937f, 0.3319743573665619f, 0.05963486060500145f, 0.014498576521873474f, 0.19276967644691467f, 0.8914100527763367f, 0.1175195500254631f, 0.6544328331947327f, -0.9305487871170044f, 0.543941855430603f, 0.17878739535808563f, 0.5389502644538879f, 0.5424853563308716f, 0.8428041338920593f, 0.10739333927631378f, 0.3330216109752655f, -0.42435944080352783f, 0.31902459263801575f, 0.2806607186794281f, 0.3417472243309021f, 0.8838842511177063f, 0.15976767241954803f, 0.4624760150909424f, 0.10116183757781982f, -0.1632988303899765f, 0.23951108753681183f, 0.3673311173915863f, 0.25919464230537415f, 0.45742514729499817f, 0.34233948588371277f, 0.975583553314209f, 0.03313435986638069f, -0.14791084825992584f, 0.2618393898010254f, 0.5636170506477356f, 0.14243823289871216f, 0.5926543474197388f, 0.4845777451992035f, 0.2057686150074005f, 0.2723183035850525f, -0.07713396847248077f, 0.6501951217651367f, 0.4723261296749115f, 0.5070583820343018f, 0.0122066056355834f, 0.3739427328109741f, 0.48710593581199646f, 0.4480968415737152f, -0.725607693195343f, 0.7692540884017944f, 0.11878605931997299f, 0.5225552320480347f, 0.5671935677528381f, 0.9961999654769897f, 0.0046299719251692295f, 0.18890711665153503f, -0.9625911116600037f, 0.41956284642219543f, 0.32376164197921753f, 0.9687389135360718f, 0.27799192070961f, 0.7932300567626953f, 0.2655269205570221f, 0.7263429760932922f, -0.8415409326553345f, 0.21565741300582886f, 0.2944166958332062f, 0.23240827023983002f, 0.40368780493736267f, 0.5965874791145325f, 0.2714657783508301f, 0.11942894011735916f, -0.6954628825187683f, 0.8338169455528259f, 0.903730571269989f, 0.23529234528541565f, 0.15558314323425293f, 0.09863317757844925f, 0.6679170727729797f, 0.27559491991996765f, -0.533854067325592f, 0.08792231231927872f, 0.9098185300827026f, 0.8387643098831177f, 0.8855341076850891f, 0.5365930199623108f, 0.8137586712837219f, 0.05904344841837883f, -0.9490351676940918f, 0.106611467897892f, 0.6834071278572083f, 0.013851548545062542f, 0.5999789237976074f, 0.40691787004470825f, 0.3971283733844757f, 0.4962903559207916f, -0.4969898760318756f, 0.03646503761410713f, 0.14552202820777893f, 0.4389643669128418f, 0.7045755386352539f, 0.7927735447883606f, 0.44864749908447266f, 0.41113150119781494f, -0.9388030767440796f, 0.746080219745636f, 0.8314694166183472f, 0.17704688012599945f, 0.4988608956336975f, 0.011550895869731903f, 0.7552914023399353f, 0.7213106751441956f, -0.7692390084266663f, 0.1532304435968399f, 0.9078415632247925f, 0.8234134912490845f, 0.13231976330280304f, 0.8756661415100098f, 0.914150595664978f, 0.4906480312347412f, -0.3873414397239685f, 0.512150764465332f, 0.11356320232152939f, 0.254444420337677f, 0.12637832760810852f, 0.08721303194761276f, 0.47592124342918396f, 0.6783040761947632f, -0.11591894179582596f, 0.31397417187690735f, 0.8670220971107483f, 0.7367643117904663f, 0.9072322845458984f, 0.009866297245025635f, 0.5598684549331665f, 0.8836888670921326f, -0.32538479566574097f, 0.07624677568674088f, 0.43853509426116943f, 0.7146497964859009f, 0.16533197462558746f, 0.5492109656333923f, 0.9672976136207581f, 0.6703537106513977f, -0.3609055280685425f, 0.6670821309089661f, 0.24820172786712646f, 0.5049997568130493f, 0.49510857462882996f, 0.9712989330291748f, 0.2897821068763733f, 0.8983100056648254f, -0.7678384780883789f, 0.4258418381214142f, 0.9942665100097656f, 0.43650224804878235f, 0.5328734517097473f, 0.12242831289768219f, 0.11055599898099899f, 0.1967138797044754f, -0.7831255197525024f, 0.4721035957336426f, 0.6201961040496826f, 0.9441260099411011f, 0.16278605163097382f, 0.6849381923675537f, 0.2083233892917633f, 0.06350357085466385f, -0.4771919846534729f, 0.5592228174209595f, 0.8268187642097473f, 0.2838377058506012f, 0.6088436245918274f, 0.0295572429895401f, 0.27473342418670654f, 0.40977898240089417f, -0.026430221274495125f, 0.22365613281726837f, 0.6673274040222168f, 0.49230891466140747f, 0.29827070236206055f, 0.8623630404472351f, 0.31082862615585327f, 0.5807880759239197f, -0.20767934620380402f, 0.15611419081687927f, 0.4044099450111389f, 0.4057665765285492f, 0.3867378830909729f, 0.6662331819534302f, 0.22749538719654083f, 0.3076525628566742f, -0.045047368854284286f, 0.7326507568359375f, 0.29942062497138977f, 0.9883783459663391f, 0.28427132964134216f, 0.7665137052536011f, 0.7767525315284729f, 0.6407413482666016f, -0.9373775124549866f, 0.645383894443512f, 0.9654213190078735f, 0.8145126104354858f, 0.9058122634887695f, 0.7650815844535828f, 0.3009765148162842f, 0.18720801174640656f, -0.48547443747520447f, 0.8568910956382751f, 0.7338923215866089f, 0.7821584939956665f, 0.42395099997520447f, 0.996785044670105f, 0.9837014079093933f, 0.16228090226650238f, -0.4528074562549591f, 0.5096973180770874f, 0.01049781870096922f, 0.7369263768196106f, 0.879584550857544f, 0.2852100431919098f, 0.759349524974823f, 0.8254513144493103f, -0.31243833899497986f, 0.3203682005405426f, 0.5354220867156982f, 0.16285178065299988f, 0.18431924283504486f, 0.17036683857440948f, 0.15172845125198364f, 0.635032594203949f, -0.6154482960700989f, 0.40875470638275146f, 0.3277050256729126f, 0.5189419984817505f, 0.4102509617805481f, 0.10382197052240372f, 0.9597969055175781f, 0.5113727450370789f, -0.8751571774482727f, 0.13302040100097656f, 0.7699622511863708f, 0.3846089243888855f, 0.9059504270553589f, 0.22646458446979523f, 0.5394835472106934f, 0.6173216700553894f, -0.5549989938735962f, 0.26676344871520996f, 0.9730051159858704f, 0.13597631454467773f, 0.790206789970398f, 0.2818346619606018f, 0.7440823912620544f, 0.961972177028656f, -0.43168219923973083f, 0.8462859988212585f, 0.7293583154678345f, 0.20174163579940796f, 0.9849982261657715f, 0.2141706347465515f, 0.053350552916526794f, 0.8837271332740784f, -0.8582066297531128f, 0.30339327454566956f, 0.34211644530296326f, 0.09037452936172485f, 0.9211709499359131f, 0.7114402055740356f, 0.15407222509384155f, 0.4327465891838074f, -0.6343165636062622f, 0.28452035784721375f, 0.6811808347702026f, 0.06718824058771133f, 0.721792995929718f, 0.8237798810005188f, 0.777059018611908f, 0.42129063606262207f, -0.4303091764450073f, 0.36162689328193665f, 0.24955178797245026f, 0.7637889981269836f, 0.04019307717680931f, 0.6044999361038208f, 0.7824038863182068f, 0.2683103084564209f, -0.07094312459230423f, 0.040061358362436295f, 0.6104920506477356f, 0.8361243009567261f, 0.42135241627693176f, 0.4460994005203247f, 0.2622123956680298f, 0.2773819863796234f, -0.29204219579696655f, 0.9354509115219116f, 0.24904337525367737f, 0.3919526934623718f, 0.44829726219177246f, 0.3891877830028534f, 0.3771398961544037f, 0.7463217973709106f, -0.6670991778373718f, 0.7177572250366211f, 0.5647544264793396f, 0.10663682967424393f, 0.173178032040596f, 0.8799243569374084f, 0.7203376889228821f, 0.7598806023597717f, -0.3540756404399872f, 0.31471532583236694f, 0.7853214144706726f, 0.5133505463600159f, 0.43388766050338745f, 0.6293902397155762f, 0.8638110160827637f, 0.24166013300418854f, -0.7787125706672668f, 0.21291996538639069f, 0.3370414078235626f, 0.21501481533050537f, 0.5400713682174683f, 0.4472717046737671f, 0.18745207786560059f, 0.849463939666748f, -0.9098230004310608f, 0.4078634977340698f, 0.14641764760017395f, 0.38237467408180237f, 0.7045917510986328f, 0.39147046208381653f, 0.13310085237026215f, 0.15966859459877014f, -0.0020451790187507868f, 0.3762141466140747f, 0.2515047490596771f, 0.7684207558631897f, 0.07031052559614182f, 0.5253793597221375f, 0.18483546376228333f, 0.42077264189720154f, -0.3275842070579529f, 0.717688262462616f, 0.9664614796638489f, 0.6322778463363647f, 0.1523241549730301f, 0.9796088337898254f, 0.5943257808685303f, 0.11061930656433105f, -0.7366321086883545f, 0.8852916955947876f, 0.15822452306747437f, 0.6990863084793091f, 0.6548894643783569f, 0.8937229514122009f, 0.6167212128639221f, 0.4006587564945221f, -0.4887903928756714f, 0.11436726897954941f, 0.7275571823120117f, 0.8332988619804382f, 0.9280864000320435f, 0.7521601915359497f, 0.32867008447647095f, 0.746923565864563f, -0.02886440046131611f, 0.03162917494773865f, 0.5147776007652283f, 0.7170936465263367f, 0.12445762753486633f, 0.9191029667854309f, 0.4909229874610901f, 0.2883457839488983f, -0.32708197832107544f, 0.407015323638916f, 0.08724937587976456f, 0.03839118033647537f, 0.7973744869232178f, 0.8031807541847229f, 0.1797371357679367f, 0.6593557000160217f, -0.3936898112297058f, 0.5641061067581177f, 0.7524095773696899f, 0.16857106983661652f, 0.9034513831138611f, 0.5293136239051819f, 0.14893083274364471f, 0.5431944131851196f, -0.7685979008674622f, 0.84193354845047f, 0.8363696336746216f, 0.07782135158777237f, 0.6193323135375977f, 0.9122920036315918f, 0.1485666185617447f, 0.9173501133918762f, -0.7151166796684265f, 0.13094587624073029f, 0.4497372508049011f, 0.9983950853347778f, 0.6769167184829712f, 0.5371173620223999f, 0.45148059725761414f, 0.286952942609787f, -0.3555085361003876f, 0.8425437211990356f, 0.47560444474220276f, 0.042200908064842224f, 0.013451792299747467f, 0.55763840675354f, 0.38838979601860046f, 0.4195408523082733f, -0.6299232244491577f, 0.6189432740211487f, 0.4319162964820862f, 0.624313473701477f, 0.07324018329381943f, 0.325261652469635f, 0.42146381735801697f, 0.6797844767570496f, -0.321650892496109f, 0.7232906222343445f, 0.5865238308906555f, 0.832703709602356f, 0.782405436038971f, 0.6188379526138306f, 0.8468232154846191f, 0.9514217376708984f, -0.3992912769317627f, 0.5516430735588074f, 0.8443314433097839f, 0.7187729477882385f, 0.28574466705322266f, 0.41176837682724f, 0.07823063433170319f, 0.10066080838441849f, -0.25602397322654724f, 0.7570359706878662f, 0.7638077735900879f, 0.7707843780517578f, 0.5059436559677124f, 0.6163693070411682f, 0.9212321639060974f, 0.8608729839324951f, -0.8104157447814941f, 0.1979411095380783f, 0.8056418299674988f, 0.22195561230182648f, 0.7515477538108826f, 0.5638439059257507f, 0.6609368324279785f, 0.9935469627380371f, -0.7613050937652588f, 0.472176730632782f, 0.15197859704494476f, 0.11034458130598068f, 0.24870122969150543f, 0.6061882972717285f, 0.3315753638744354f, 0.43108147382736206f, -0.8935296535491943f, 0.6876591444015503f, 0.9031840562820435f, 0.5248892903327942f, 0.5746605396270752f, 0.9435732960700989f, 0.3538028597831726f, 0.2747742533683777f, -0.7936022877693176f, 0.7067095041275024f, 0.5968209505081177f, 0.548354983329773f, 0.5139041543006897f, 0.538430392742157f, 0.4031567871570587f, 0.516243040561676f, -0.9020471572875977f, 0.9787185788154602f, 0.28990498185157776f, 0.38040614128112793f, 0.0687013790011406f, 0.7468912601470947f, 0.3508344888687134f, 0.1439666599035263f, -0.712916910648346f, 0.08311526477336884f, 0.9091669321060181f, 0.5176464915275574f, 0.2557835876941681f, 0.3339179754257202f, 0.31729811429977417f, 0.21087761223316193f, -0.7610986232757568f, 0.34836530685424805f, 0.5885502099990845f, 0.5773335695266724f, 0.5263015627861023f, 0.618472158908844f, 0.15282000601291656f, 0.16412830352783203f, -0.15619686245918274f, 0.4045253098011017f, 0.15869764983654022f, 0.645826518535614f, 0.6367990374565125f, 0.029707716777920723f, 0.9832934141159058f, 0.9595430493354797f, -0.6040931940078735f, 0.5881825685501099f, 0.8517171144485474f, 0.13486818969249725f, 0.5606174468994141f, 0.23510119318962097f, 0.9508532881736755f, 0.20676474273204803f, -0.5088498592376709f, 0.22566573321819305f, 0.09663791209459305f, 0.8043265342712402f, 0.7464483380317688f, 0.11581666767597198f, 0.17666244506835938f, 0.6208200454711914f, -0.41152721643447876f, 0.30306488275527954f, 0.312014102935791f, 0.977575957775116f, 0.6019393801689148f, 0.05982254445552826f, 0.6322872042655945f, 0.8261440396308899f, -0.6012784242630005f, 0.11126933991909027f, 0.07094410061836243f, 0.727690577507019f, 0.8254415988922119f, 0.5253117084503174f, 0.31656455993652344f, 0.6618501543998718f, -0.9037137031555176f, 0.4268539249897003f, 0.32236385345458984f, 0.06421594321727753f, 0.5196459889411926f, 0.2389390468597412f, 0.47386983036994934f, 0.429914653301239f, -0.937793493270874f, 0.34301334619522095f, 0.8779095411300659f, 0.280508428812027f, 0.792792558670044f, 0.10860254615545273f, 0.15102580189704895f, 0.9452743530273438f, -0.15582014620304108f, 0.19286061823368073f, 0.2131875604391098f, 0.8281524777412415f, 0.36936718225479126f, 0.4777294397354126f, 0.2775583267211914f, 0.05469357594847679f, -0.007924930192530155f, 0.679827868938446f, 0.4976731836795807f, 0.8417321443557739f, 0.7528247833251953f, 0.14627544581890106f, 0.37701770663261414f, 0.07393688708543777f, -0.8723589181900024f, 0.6130373477935791f, 0.7220580577850342f, 0.03408433124423027f, 0.5813632607460022f, 0.05327282473444939f, 0.4354342818260193f, 0.21724513173103333f, -0.44628751277923584f, 0.4865526854991913f, 0.6898394227027893f, 0.681554913520813f, 0.90875244140625f, 0.10277178883552551f, 0.9936130046844482f, 0.2917270064353943f, -0.9620303511619568f, 0.06987801194190979f, 0.24362649023532867f, 0.0051720342598855495f, 0.018798453733325005f, 0.4625922739505768f, 0.0975336879491806f, 0.002521490678191185f, -0.4112262725830078f, 0.5781759023666382f, 0.18558473885059357f, 0.43671727180480957f, 0.08701248466968536f, 0.10452698916196823f, 0.4962802529335022f, 0.6307324767112732f, -0.06618747860193253f, 0.0763457641005516f, 0.5470539927482605f, 0.25188833475112915f, 0.6294328570365906f, 0.612337052822113f, 0.35938146710395813f, 0.609495222568512f, -0.18825657665729523f, 0.24114584922790527f, 0.5355756282806396f, 0.09968645870685577f, 0.39902347326278687f, 0.13672444224357605f, 0.5192623138427734f, 0.2228262722492218f, -0.9435741901397705f, 0.6620460152626038f, 0.942135751247406f, 0.21953287720680237f, 0.814332127571106f, 0.032558638602495193f, 0.3215864896774292f, 0.625695526599884f, -0.46263477206230164f, 0.7415019869804382f, 0.1551731675863266f, 0.8049419522285461f, 0.8020268678665161f, 0.0402999110519886f, 0.23799008131027222f, 0.1844903975725174f, -0.6826640963554382f, 0.23227038979530334f, 0.7851903438568115f, 0.2686779499053955f, 0.2893185615539551f, 0.14502805471420288f, 0.6664957404136658f, 0.9198636412620544f, -0.8177050352096558f, 0.07128112018108368f, 0.8127525448799133f, 0.8604788184165955f, 0.9057804346084595f, 0.2625100910663605f, 0.565430223941803f, 0.20368091762065887f, -0.7418215274810791f, 0.4499324858188629f, 0.11380617320537567f, 0.9111624360084534f, 0.517171323299408f, 0.6952924132347107f, 0.07918299734592438f, 0.5716907382011414f, -0.2943904399871826f, 0.8322389125823975f, 0.5454317927360535f, 0.7463439106941223f, 0.6031607389450073f, 0.6603768467903137f, 0.8731411099433899f, 0.43748924136161804f, -0.49857020378112793f, 0.18975642323493958f, 0.44316262006759644f, 6.983755883993581e-05f, 0.5347565412521362f, 0.07904060184955597f, 0.8665599226951599f, 0.7552735805511475f, -0.9146917462348938f, 0.7973113656044006f, 0.7299874424934387f, 0.8492687940597534f, 0.5147866010665894f, 0.2967103123664856f, 0.7858167290687561f, 0.5519353747367859f, -0.5978220701217651f, 0.415010929107666f, 0.45898452401161194f, 0.48814278841018677f, 0.9492637515068054f, 0.69685959815979f, 0.5907543897628784f, 0.1498403549194336f, -0.9768056273460388f, 0.6638128757476807f, 0.32596147060394287f, 0.2108166366815567f, 0.4474639892578125f, 0.0439152754843235f, 0.6473573446273804f, 0.47416844964027405f, -0.8716512322425842f, 0.09022573381662369f, 0.3957134187221527f, 0.5531327724456787f, 0.09010428190231323f, 0.5733087658882141f, 0.4537200927734375f, 0.8653227090835571f, -0.11637737601995468f, 0.6185105443000793f, 0.429426372051239f, 0.006324832793325186f, 0.14795291423797607f, 0.9536460638046265f, 0.34291666746139526f, 0.0962425023317337f, -0.0955052599310875f, 0.7849918007850647f, 0.6299272775650024f, 0.7917014956474304f, 0.7618094682693481f, 0.03001175820827484f, 0.4414806663990021f, 0.19607166945934296f, -0.4245377480983734f, 0.9065585136413574f, 0.608715295791626f, 0.09212422370910645f, 0.5721312761306763f, 0.7020981907844543f, 0.2726181149482727f, 0.5911906361579895f, -0.8716753125190735f, 0.3453006446361542f, 0.12624874711036682f, 0.39290323853492737f, 0.9924445152282715f, 0.3453010618686676f, 0.9737502336502075f, 0.7283230423927307f, -0.07748351991176605f, 0.3311690390110016f, 0.8444952964782715f, 0.768478274345398f, 0.4317629933357239f, 0.5326514840126038f, 0.8280099630355835f, 0.8525687456130981f, -0.6260990500450134f, 0.9049381613731384f, 0.7743730545043945f, 0.7781369686126709f, 0.4082120656967163f, 0.14284846186637878f, 0.9536294341087341f, 0.7076330184936523f, -0.009453379549086094f, 0.24937258660793304f, 0.01748669706285f, 0.3226032555103302f, 0.1847710907459259f, 0.5583891272544861f, 0.17181263864040375f, 0.7925004363059998f, -0.6771546006202698f, 0.4291827380657196f, 0.36306604743003845f, 0.4323495924472809f, 0.16527332365512848f, 0.20120052993297577f, 0.11553840339183807f, 0.18321414291858673f, -0.2782846987247467f, 0.5452118515968323f, 0.8906779289245605f, 0.9583532810211182f, 0.8549636602401733f, 0.8893537521362305f, 0.8444620370864868f, 0.9646369814872742f, -0.47390541434288025f, 0.5972217321395874f, 0.7260549068450928f, 0.9564580917358398f, 0.4345371723175049f, 0.9936200976371765f, 0.3188203275203705f, 0.7372522354125977f, -0.5645861625671387f, 0.37963107228279114f, 0.37037530541419983f, 0.8223256468772888f, 0.22346194088459015f, 0.6288712024688721f, 0.3486076295375824f, 0.5827873945236206f, -0.6019104719161987f, 0.7610504031181335f, 0.6173200011253357f, 0.9740142822265625f, 0.8347939252853394f, 0.9850879907608032f, 0.6982242465019226f, 0.7994252443313599f, -0.08928888291120529f, 0.7853718400001526f, 0.8158285021781921f, 0.34392422437667847f, 0.9465630650520325f, 0.4196957051753998f, 0.25832876563072205f, 0.6052114367485046f, -0.16211064159870148f, 0.35370972752571106f, 0.33953410387039185f, 0.07125074416399002f, 0.5515926480293274f, 0.30111628770828247f, 0.8807748556137085f, 0.8056603670120239f, -0.5859729647636414f, 0.98881596326828f, 0.35196778178215027f, 0.16132311522960663f, 0.5128595232963562f, 0.11772632598876953f, 0.5774839520454407f, 0.5195878744125366f, -0.21304845809936523f, 0.2782920300960541f, 0.49115291237831116f, 0.06923556327819824f, 0.36917126178741455f, 0.44713422656059265f, 0.4524507224559784f, 0.8425262570381165f, -0.5461336374282837f, 0.3951931893825531f, 0.7843275666236877f, 0.9072834253311157f, 0.7976458668708801f, 0.773577094078064f, 0.45875996351242065f, 0.22829429805278778f, -0.24269235134124756f, 0.8309483528137207f, 0.47714313864707947f, 0.889731228351593f, 0.1883239448070526f, 0.22382700443267822f, 0.16481080651283264f, 0.03061469830572605f, -0.9060672521591187f, 0.39122965931892395f, 0.09189539402723312f, 0.10115744918584824f, 0.2448529750108719f, 0.7740107774734497f, 0.48527270555496216f, 0.13956333696842194f, -0.5743991732597351f, 0.8423774838447571f, 0.05358710139989853f, 0.40231460332870483f, 0.8718671798706055f, 0.6695539355278015f, 0.6447123289108276f, 0.14035528898239136f, -0.28247034549713135f, 0.6007376313209534f, 0.6599444150924683f, 0.25515681505203247f, 0.01638444885611534f, 0.31387192010879517f, 0.8016302585601807f, 0.5425150394439697f, -0.05795341730117798f, 0.44276535511016846f, 0.7976782321929932f, 0.530193030834198f, 0.49087485671043396f, 0.903365969657898f, 0.630344808101654f, 0.7220096588134766f, -0.619716227054596f, 0.5418136715888977f, 0.24659617245197296f, 0.5241878032684326f, 0.7486638426780701f, 0.19274842739105225f, 0.8359627723693848f, 0.5646980404853821f, -0.47638624906539917f, 0.292743444442749f, 0.4593885838985443f, 0.05324866250157356f, 0.452149361371994f, 0.30466949939727783f, 0.09031698107719421f, 0.5941102504730225f, -0.8069412112236023f, 0.0909104123711586f, 0.9859325885772705f, 0.17478087544441223f, 0.25581514835357666f, 0.796945333480835f, 0.5249836444854736f, 0.7166033387184143f, -0.2877085506916046f, 0.5617570281028748f, 0.4081679582595825f, 0.13945706188678741f, 0.681065559387207f, 0.786535918712616f, 0.5745649337768555f, 0.40158340334892273f, -0.3357584476470947f, 0.0077507030218839645f, 0.3870251178741455f, 0.2688267230987549f, 0.989449143409729f, 0.10330340266227722f, 0.6958611011505127f, 0.5440212488174438f, -0.8224202394485474f, 0.866252601146698f, 0.28362250328063965f, 0.6215625405311584f, 0.7212023735046387f, 0.5417895913124084f, 0.6805511713027954f, 0.740726113319397f, -0.8824375867843628f, 0.9704214334487915f, 0.2582492530345917f, 0.9548056721687317f, 0.15473103523254395f, 0.06813963502645493f, 0.3479475677013397f, 0.36107921600341797f, -0.40697672963142395f, 0.2710305154323578f, 0.41956210136413574f, 0.1770663857460022f, 0.7528901100158691f, 0.1278880387544632f, 0.8394837975502014f, 0.0934775248169899f, -0.8693529963493347f, 0.13390719890594482f, 0.6237444877624512f, 0.7818486094474792f, 0.3861686885356903f, 0.3697202205657959f, 0.5313715934753418f, 0.6897152662277222f, -0.19891147315502167f, 0.03879109397530556f, 0.9777467846870422f, 0.08724596351385117f, 0.5363439917564392f, 0.5319249033927917f, 0.5531821250915527f, 0.7295069098472595f, -0.7650759816169739f, 0.6299216151237488f, 0.406861275434494f, 0.8154638409614563f, 0.20705139636993408f, 0.1754792034626007f, 0.540041983127594f, 0.04508998990058899f, -0.36031386256217957f, 0.09632265567779541f, 0.678512454032898f, 0.8617214560508728f, 0.2733471095561981f, 0.8067993521690369f, 0.8873754143714905f, 0.8712619543075562f, -0.5611567497253418f, 0.5818712115287781f, 0.07824041694402695f, 0.5106337070465088f, 0.3729077875614166f, 0.8776640295982361f, 0.11725163459777832f, 0.5692316293716431f, -0.953792929649353f, 0.39240747690200806f, 0.1984146684408188f, 0.7099588513374329f, 0.8039830327033997f, 0.09104447811841965f, 0.7821099758148193f, 0.3733728528022766f, -0.4878755211830139f, 0.01198353711515665f, 0.7394906878471375f, 0.7228403687477112f, 0.9164584875106812f, 0.2317718118429184f, 0.18703699111938477f, 0.8750327229499817f, -0.5950536131858826f, 0.45884808897972107f, 0.06945383548736572f, 0.35290423035621643f, 0.7969561219215393f, 0.10286454856395721f, 0.866247832775116f, 0.6006062030792236f, -0.09943794459104538f, 0.744617760181427f, 0.6155154705047607f, 0.6238817572593689f, 0.13190960884094238f, 0.9976221919059753f, 0.4253352880477905f, 0.5461997389793396f, -0.18589650094509125f, 0.5067728757858276f, 0.3203522264957428f, 0.8296865224838257f, 0.22297421097755432f, 0.788659930229187f, 0.5949655771255493f, 0.7130817174911499f, -0.9956533908843994f, 0.21493007242679596f, 0.5553392171859741f, 0.5541546940803528f, 0.8083146214485168f, 0.24627268314361572f, 0.24104024469852448f, 0.42105624079704285f, -0.5869736075401306f, 0.7511434555053711f, 0.404193639755249f, 0.34571951627731323f, 0.48544031381607056f, 0.7384282946586609f, 0.11739248037338257f, 0.3551366329193115f, -0.2054719179868698f, 0.16062945127487183f, 0.3815939128398895f, 0.745781421661377f, 0.3803005516529083f, 0.910424530506134f, 0.7066053152084351f, 0.7027694582939148f, -0.4953709840774536f, 0.44554081559181213f, 0.9344726204872131f, 0.02750244550406933f, 0.6879798173904419f, 0.8510589599609375f, 0.08609112352132797f, 0.9393426179885864f, -0.8594370484352112f, 0.8162423372268677f, 0.3371943533420563f, 0.15501737594604492f, 0.8258843421936035f, 0.06284255534410477f, 0.03759938105940819f, 0.7148444652557373f, -0.450255423784256f, 0.7645806074142456f, 0.631844162940979f, 0.3389911949634552f, 0.6841591000556946f, 0.38084664940834045f, 0.5907280445098877f, 0.3646399676799774f, -0.3142799437046051f, 0.3199954926967621f, 0.23236174881458282f, 0.5800133943557739f, 0.9816415905952454f, 0.6498857736587524f, 0.14079077541828156f, 0.10489685833454132f, -0.46550077199935913f, 0.16944055259227753f, 0.37969663739204407f, 0.6779192090034485f, 0.4468561112880707f, 0.17321215569972992f, 0.3040425777435303f, 0.8195855021476746f, -0.2604721486568451f, 0.3296975791454315f, 0.34123679995536804f, 0.36118707060813904f, 0.4575856029987335f, 0.8175377249717712f, 0.8091602921485901f, 0.9030141830444336f, -0.7032922506332397f, 0.3191712200641632f, 0.000341095554176718f, 0.6103507876396179f, 0.9538896083831787f, 0.15996967256069183f, 0.43841060996055603f, 0.6019168496131897f, -0.25709882378578186f, 0.8801308870315552f, 0.941105306148529f, 0.8739894032478333f, 0.3440089523792267f, 0.2767378091812134f, 0.7691581845283508f, 0.26375553011894226f, -0.14882375299930573f, 0.6937806606292725f, 0.3029627501964569f, 0.7373985648155212f, 0.7732890248298645f, 0.2230478823184967f, 0.8414122462272644f, 0.14646176993846893f, -0.575310468673706f, 0.25331977009773254f, 0.33835169672966003f, 0.1114068478345871f, 0.5624164342880249f, 0.7118048667907715f, 0.33422645926475525f, 0.28996461629867554f, -0.880600094795227f, 0.08449819684028625f, 0.5055862069129944f, 0.4333864748477936f, 0.012839633971452713f, 0.5276995897293091f, 0.5849465131759644f, 0.4380248486995697f, -0.1154121533036232f, 0.05256691202521324f, 0.9121941924095154f, 0.6448869109153748f, 0.7270945310592651f, 0.1504988819360733f, 0.877301037311554f, 0.2727334499359131f, -0.17006708681583405f, 0.9651954174041748f, 0.6778701543807983f, 0.1574157029390335f, 0.7295137047767639f, 0.8788651823997498f, 0.6780194640159607f, 0.4324224293231964f, -0.9811031222343445f, 0.9336912631988525f, 0.17816585302352905f, 0.974938690662384f, 0.9900010228157043f, 0.4262349009513855f, 0.45526525378227234f, 0.8830282688140869f, -0.0847315639257431f, 0.5635290741920471f, 0.6880021095275879f, 0.970391571521759f, 0.4513353407382965f, 0.6973375678062439f, 0.44070732593536377f, 0.5671721696853638f, -0.09486944228410721f, 0.6908659338951111f, 0.8629666566848755f, 0.31924664974212646f, 0.9229938983917236f, 0.005577606614679098f, 0.32559874653816223f, 0.8876293897628784f, -0.7547886967658997f, 0.6963673830032349f, 0.14264921844005585f, 0.8059678673744202f, 0.677915632724762f, 0.598057210445404f, 0.6374203562736511f, 0.9995225667953491f, -0.025576673448085785f, 0.8356475234031677f, 0.10049678385257721f, 0.6277806162834167f, 0.8446578979492188f, 0.747154951095581f, 0.9849759340286255f, 0.4257746636867523f, -0.555391788482666f, 0.12848806381225586f, 0.4958812892436981f, 0.7057282328605652f, 0.4667394757270813f, 0.4264875650405884f, 0.7079384326934814f, 0.21150222420692444f, -0.9012676477432251f, 0.4678589701652527f, 0.14636042714118958f, 0.7948680520057678f, 0.8853469491004944f, 0.1660560816526413f, 0.403734028339386f, 0.5716443061828613f, -0.028789078816771507f, 0.7509702444076538f, 0.6810948848724365f, 0.34404256939888f, 0.12400750815868378f, 0.061153095215559006f, 0.009197061881422997f, 0.14611667394638062f, -0.5289410948753357f, 0.5822890996932983f, 0.5387926697731018f, 0.7750629186630249f, 0.053427085280418396f, 0.7776257395744324f, 0.16390888392925262f, 0.8552708029747009f, -0.8756377100944519f, 0.2572818994522095f, 0.3201913833618164f, 0.8883915543556213f, 0.6604008674621582f, 0.0777478888630867f, 0.5476941466331482f, 0.012489750981330872f, -0.9896881580352783f, 0.4937047064304352f, 0.0027301947120577097f, 0.9956791400909424f, 0.10775022208690643f, 0.31396397948265076f, 0.888135552406311f, 0.28055477142333984f, -0.38965749740600586f, 0.9795490503311157f, 0.27668625116348267f, 0.5509010553359985f, 0.124854177236557f, 0.9976965188980103f, 0.9717606902122498f, 0.6793277263641357f, -0.5125095844268799f, 0.9103071689605713f, 0.3432224988937378f, 0.3461343050003052f, 0.04100802168250084f, 0.7121938467025757f, 0.296980082988739f, 0.9065248966217041f, -0.7708389163017273f, 0.12717613577842712f, 0.30693870782852173f, 0.9004336595535278f, 0.16635262966156006f, 0.2957082986831665f, 0.6539150476455688f, 0.7506757974624634f, -0.7224403023719788f, 0.003404472256079316f, 0.031668033450841904f, 0.6432466506958008f, 0.19881561398506165f, 0.8143000602722168f, 0.49173328280448914f, 0.049232758581638336f, -0.12461427599191666f, 0.44680777192115784f, 0.7667660117149353f, 0.8594464063644409f, 0.5973219871520996f, 0.7249794602394104f, 0.14379066228866577f, 0.019831033423542976f, -0.7026041746139526f, 0.3347070813179016f, 0.7748610973358154f, 0.8660156726837158f, 0.7223536968231201f, 0.5585921406745911f, 0.49507108330726624f, 0.4675212800502777f, -0.8833733797073364f, 0.2892324924468994f, 0.9492325782775879f, 0.3157903552055359f, 0.08916300535202026f, 0.9925848841667175f, 0.14416193962097168f, 0.9287934899330139f, -0.8034802675247192f, 0.8109250664710999f, 0.6465789079666138f, 0.3902494013309479f, 0.7140994668006897f, 0.27650582790374756f, 0.6447917819023132f, 0.21397614479064941f, -0.8874156475067139f, 0.6323829293251038f, 0.7479973435401917f, 0.8095611333847046f, 0.23939289152622223f, 0.5617871880531311f, 0.741220235824585f, 0.5570691227912903f, -0.05888182297348976f, 0.4892392158508301f, 0.6545977592468262f, 0.592948317527771f, 0.3875872492790222f, 0.05168677493929863f, 0.8270453214645386f, 0.34167182445526123f, -0.27877116203308105f, 0.5016136169433594f, 0.31259313225746155f, 0.6886532306671143f, 0.3652629256248474f, 0.5139300227165222f, 0.20565783977508545f, 0.7182579040527344f, -0.38149353861808777f, 0.9239805936813354f, 0.004082588944584131f, 0.19890360534191132f, 0.6451380252838135f, 0.5356205701828003f, 0.1667386293411255f, 0.8040964007377625f, -0.6773591637611389f, 0.43357256054878235f, 0.43252450227737427f, 0.05147971585392952f, 0.1543145626783371f, 0.5924859046936035f, 0.8176112771034241f, 0.6313911080360413f, -0.812270998954773f, 0.14266492426395416f, 0.31615743041038513f, 0.4678249657154083f, 0.937034547328949f, 0.764889121055603f, 0.36713340878486633f, 0.9207326173782349f, -0.8266327381134033f, 0.12432663887739182f, 0.6528604030609131f, 0.9471820592880249f, 0.4985440969467163f, 0.6333796977996826f, 0.99062180519104f, 0.36672714352607727f, -0.5407466292381287f, 0.4010886549949646f, 0.4476568400859833f, 0.9790998101234436f, 0.38501545786857605f, 0.44023895263671875f, 0.8881924152374268f, 0.11870887130498886f, -0.3691818416118622f, 0.5664764046669006f, 0.2986762821674347f, 0.6249340176582336f, 0.9356926679611206f, 0.4259076714515686f, 0.732915997505188f, 0.09205542504787445f, -0.7703642845153809f, 0.5818997025489807f, 0.8502858877182007f, 0.5938451886177063f, 0.8573288917541504f, 0.178553506731987f, 0.01381558645516634f, 0.35879579186439514f, -0.6696009039878845f, 0.6523882746696472f, 0.23305922746658325f, 0.03800027072429657f, 0.8537224531173706f, 0.47447308897972107f, 0.4152829349040985f, 0.1894872635602951f, -0.36555951833724976f, 0.8992308974266052f, 0.4898283779621124f, 0.6739324927330017f, 0.23566165566444397f, 0.09069619327783585f, 0.46653932332992554f, 0.3783430755138397f, -0.8399925827980042f, 0.7041966915130615f, 0.1531023383140564f, 0.6371184587478638f, 0.18062059581279755f, 0.6961144804954529f, 0.6590582132339478f, 0.34156283736228943f, -0.5975109934806824f, 0.9983004331588745f, 0.8482440710067749f, 0.06952996551990509f, 0.6186106204986572f, 0.14766764640808105f, 0.7447496652603149f, 0.5768963694572449f, -0.7068055272102356f, 0.541756808757782f, 0.36735743284225464f, 0.33926907181739807f, 0.22000211477279663f, 0.9931629300117493f, 0.9401588439941406f, 0.823198676109314f, -0.6672641634941101f, 0.005398323759436607f, 0.5269225835800171f, 0.06546410918235779f, 0.19677123427391052f, 0.5841323137283325f, 0.6445091366767883f, 0.6480821371078491f, -0.784743070602417f, 0.4656243324279785f, 0.9268310070037842f, 0.39955934882164f, 0.8589759469032288f, 0.47467073798179626f, 0.9182717204093933f, 0.9689192771911621f, -0.2772842347621918f, 0.05680583417415619f, 0.9428519606590271f, 0.812343418598175f, 0.5332831144332886f, 0.3608133792877197f, 0.024375328794121742f, 0.6556554436683655f, -0.6908876299858093f, 0.24383161962032318f, 0.45154646039009094f, 0.40516915917396545f, 0.20267286896705627f, 0.7944217324256897f, 0.4737238585948944f, 0.43789809942245483f, -0.6003583073616028f, 0.30643168091773987f, 0.6462506055831909f, 0.8228254914283752f, 0.2885405421257019f, 0.8070845007896423f, 0.9875894784927368f, 0.40427038073539734f, -0.7154867053031921f, 0.2913540303707123f, 0.3342723548412323f, 0.004153707530349493f, 0.7068467736244202f, 0.9073240160942078f, 0.969099223613739f, 0.11867652088403702f, -0.40752464532852173f, 0.7649590373039246f, 0.17511698603630066f, 0.11660953611135483f, 0.8677133917808533f, 0.48487821221351624f, 0.8086408972740173f, 0.05848432332277298f, -0.15208286046981812f, 0.04139900207519531f, 0.6126111149787903f, 0.4034119248390198f, 0.7636808156967163f, 0.041633035987615585f, 0.3445882797241211f, 0.08738434314727783f, -0.4685080349445343f, 0.05433408543467522f, 0.053579770028591156f, 0.15831443667411804f, 0.1821662336587906f, 0.7601040005683899f, 0.6321256756782532f, 0.02009870857000351f, -0.19675281643867493f, 0.7614274621009827f, 0.7234383225440979f, 0.14782875776290894f, 0.3740658760070801f, 0.8295186758041382f, 0.6691678166389465f, 0.7126930952072144f, -0.7604465484619141f, 0.9908906817436218f, 0.9547745585441589f, 0.6415308117866516f, 0.6141220927238464f, 0.07570167630910873f, 0.846929132938385f, 0.4486221671104431f, -0.5919157266616821f, 0.9461131691932678f, 0.8287991285324097f, 0.339245468378067f, 0.2868049442768097f, 0.770814061164856f, 0.7412123680114746f, 0.7000530362129211f, -0.6995154619216919f, 0.7410442233085632f, 0.5030609369277954f, 0.08174297213554382f, 0.12884077429771423f, 0.1401926577091217f, 0.5764939785003662f, 0.429586261510849f, -0.30416321754455566f, 0.3095327615737915f, 0.14068672060966492f, 0.8307084441184998f, 0.9551011919975281f, 0.9663581848144531f, 0.12078291922807693f, 0.24973054230213165f, -0.9122723937034607f, 0.8885928988456726f, 0.5948247313499451f, 0.03396625071763992f, 0.7281215190887451f, 0.44910651445388794f, 0.4994751811027527f, 0.09574701637029648f, -0.6992459297180176f, 0.04939480498433113f, 0.4434335231781006f, 0.6447380185127258f, 0.7181873917579651f, 0.9745090007781982f, 0.6615013480186462f, 0.7166027426719666f, -0.024532288312911987f, 0.8607122302055359f, 0.2756635248661041f, 0.9827849268913269f, 0.1466778665781021f, 0.6729894280433655f, 0.59437096118927f, 0.9900925159454346f, -0.9275571703910828f, 0.7989718914031982f, 0.12883654236793518f, 0.805274486541748f, 0.22592905163764954f, 0.3449271023273468f, 0.3104754388332367f, 0.5318022966384888f, -0.5152270793914795f, 0.42017051577568054f, 0.04957260563969612f, 0.06457217037677765f, 0.7184571027755737f, 0.047726333141326904f, 0.9886648654937744f, 0.815446138381958f, -0.2272728979587555f, 0.8915484547615051f, 0.7642360925674438f, 0.21704277396202087f, 0.5381373167037964f, 0.6284278035163879f, 0.31728529930114746f, 0.18081091344356537f, -0.8599395751953125f, 0.7817064523696899f, 0.5805741548538208f, 0.07705429196357727f, 0.24709580838680267f, 0.27599039673805237f, 0.6973515152931213f, 0.5408116579055786f, -0.3554159700870514f, 0.08453505486249924f, 0.2618814706802368f, 0.25160273909568787f, 0.9839062094688416f, 0.5918498039245605f, 0.40555599331855774f, 0.6147164106369019f, -0.7509455680847168f, 0.9699158072471619f, 0.01720569096505642f, 0.36745133996009827f, 0.454200804233551f, 0.10501503944396973f, 0.1639639288187027f, 0.8086798191070557f, -0.5519586205482483f, 0.9524710178375244f, 0.14922107756137848f, 0.16064752638339996f, 0.24336284399032593f, 0.4597272574901581f, 0.34478598833084106f, 0.45106568932533264f, -0.9316025972366333f, 0.1681870073080063f, 0.4505406618118286f, 0.25429680943489075f, 0.5805848240852356f, 0.3339466154575348f, 0.6074861884117126f, 0.891034722328186f, -0.2915099263191223f, 0.7940891981124878f, 0.9180241227149963f, 0.4551801383495331f, 0.1716613471508026f, 0.1045721247792244f, 0.30257612466812134f, 0.7031441926956177f, -0.5615015625953674f, 0.5615136027336121f, 0.7457023859024048f, 0.1648615598678589f, 0.5555208921432495f, 0.9655007123947144f, 0.21972590684890747f, 0.31123363971710205f, -0.9385337829589844f, 0.3439059853553772f, 0.887579083442688f, 0.9766606688499451f, 0.3999704420566559f, 0.6262324452400208f, 0.06195235252380371f, 0.5651359558105469f, -0.06932353228330612f, 0.02067694067955017f, 0.5065999031066895f, 0.9407038688659668f, 0.4286517798900604f, 0.7800402641296387f, 0.9214192032814026f, 0.5345248579978943f, -0.5278276205062866f, 0.5302437543869019f, 0.4528139531612396f, 0.895175039768219f, 0.21394433081150055f, 0.5015261769294739f, 0.1591571420431137f, 0.5260874032974243f, -0.3145538568496704f, 0.5881122350692749f, 0.9762848019599915f, 0.4746265709400177f, 0.17543430626392365f, 0.53664231300354f, 0.7296833992004395f, 0.038481008261442184f, -0.9922879338264465f, 0.12550199031829834f, 0.01548281405121088f, 0.15855927765369415f, 0.6893773674964905f, 0.7881089448928833f, 0.05685422569513321f, 0.6482856273651123f, -0.6378992199897766f, 0.4053555130958557f, 0.640527069568634f, 0.6125614047050476f, 0.24669978022575378f, 0.9301769733428955f, 0.7810829281806946f, 0.14400096237659454f, -0.6391356587409973f, 0.12035133689641953f, 0.936598002910614f, 0.8646037578582764f, 0.8205286860466003f, 0.33612293004989624f, 0.8964592218399048f, 0.9923372268676758f, -0.389046847820282f, 0.403739333152771f, 0.1029653549194336f, 0.5525373816490173f, 0.8543006777763367f, 0.20695894956588745f, 0.013555333018302917f, 0.15435723960399628f, -0.17260436713695526f, 0.16086769104003906f, 0.7947986125946045f, 0.6923990845680237f, 0.47765594720840454f, 0.3180760145187378f, 0.326786607503891f, 0.6948397159576416f, -0.8675757050514221f, 0.2744790315628052f, 0.3517114222049713f, 0.7543752193450928f, 0.7711362838745117f, 0.9469327330589294f, 0.6369824409484863f, 0.3343900442123413f, -0.5334033966064453f, 0.04404490068554878f, 0.6759152412414551f, 0.6625367999076843f, 0.06829804927110672f, 0.396707683801651f, 0.4577946960926056f, 0.3502489924430847f, -0.28227487206459045f, 0.13857220113277435f, 0.05300053581595421f, 0.9147611260414124f, 0.04756763577461243f, 0.033351290971040726f, 0.6371238231658936f, 0.21438346803188324f, -0.07086629420518875f, 0.8775402307510376f, 0.29581326246261597f, 0.09109769016504288f, 0.7397406697273254f, 0.06358736753463745f, 0.8205204606056213f, 0.7349339127540588f, -0.9667542576789856f, 0.9031577110290527f, 0.8505868911743164f, 0.8494804501533508f, 0.6514735817909241f, 0.02888241969048977f, 0.8406327366828918f, 0.8735141754150391f, -0.9046912789344788f, 0.13579313457012177f, 0.23598800599575043f, 0.3710155487060547f, 0.2714608311653137f, 0.19910062849521637f, 0.710128128528595f, 0.256549596786499f, -0.911281406879425f, 0.6932957172393799f, 0.4813399314880371f, 0.038901276886463165f, 0.5639439225196838f, 0.8757312893867493f, 0.7887092232704163f, 0.4965929090976715f, -0.8531497716903687f, 0.1347714364528656f, 0.7478471398353577f, 0.3667818307876587f, 0.6700737476348877f, 0.24955147504806519f, 0.848624587059021f, 0.08820115774869919f, -0.6598376631736755f, 0.06726708263158798f, 0.4024765193462372f, 0.1904914379119873f, 0.22888101637363434f, 0.6892081499099731f, 0.9730727076530457f, 0.4007990062236786f, -0.6162058115005493f, 0.11256460100412369f, 0.522565484046936f, 0.09141048043966293f, 0.5814000368118286f, 0.41222089529037476f, 0.39861947298049927f, 0.673370897769928f, -0.8348118662834167f, 0.8475124835968018f, 0.9434541463851929f, 0.3240227997303009f, 0.13705305755138397f, 0.5912235975265503f, 0.5513601303100586f, 0.6142779588699341f, -0.8113373517990112f, 0.7232314944267273f, 0.6806574463844299f, 0.8309138417243958f, 0.5166325569152832f, 0.576686680316925f, 0.3092016875743866f, 0.1880403459072113f, -0.48959362506866455f, 0.6243846416473389f, 0.7445568442344666f, 0.13929857313632965f, 0.7640812993049622f, 0.4329265058040619f, 0.6420682072639465f, 0.7353877425193787f, -0.9041160345077515f, 0.37527790665626526f, 0.7867057919502258f, 0.8896756172180176f, 0.36397573351860046f, 0.7836901545524597f, 0.6592962741851807f, 0.3345969617366791f, -0.8983370065689087f, 0.4876171350479126f, 0.2568352520465851f, 0.7047891616821289f, 0.2085384726524353f, 0.2892420291900635f, 0.1488374024629593f, 0.41520440578460693f, -0.9050756692886353f, 0.030157487839460373f, 0.37567970156669617f, 0.1065400019288063f, 0.4051585793495178f, 0.785572350025177f, 0.13841038942337036f, 0.9658467173576355f, -0.9964156150817871f, 0.8927555680274963f, 0.7173246741294861f, 0.5087875127792358f, 0.8243860006332397f, 0.33084309101104736f, 0.5819961428642273f, 0.16759298741817474f, -0.9915720820426941f, 0.8067285418510437f, 0.8940203189849854f, 0.015688346698880196f, 0.5760545134544373f, 0.12770630419254303f, 0.15877892076969147f, 0.1047377660870552f, -0.7234990000724792f, 0.5260272026062012f, 0.07728378474712372f, 0.14665181934833527f, 0.7230839133262634f, 0.7716710567474365f, 0.8212485909461975f, 0.9272600412368774f, -0.2266577184200287f, 0.8590753674507141f, 0.23926205933094025f, 0.8510795831680298f, 0.7335338592529297f, 0.6991729140281677f, 0.5060652494430542f, 0.005111233331263065f, -0.7829078435897827f, 0.5016671419143677f, 0.06528753787279129f, 0.4934081733226776f, 0.3195931017398834f, 0.9004999995231628f, 0.8108497262001038f, 0.39539891481399536f, -0.2726075053215027f, 0.4903615117073059f, 0.17049358785152435f, 0.17324060201644897f, 0.4163163900375366f, 0.3176482915878296f, 0.5493969917297363f, 0.2359922230243683f, -0.4365030527114868f, 0.010878562927246094f, 0.6627322435379028f, 0.2977438271045685f, 0.9117284417152405f, 0.9567847847938538f, 0.4545128047466278f, 0.4754830300807953f, -0.28550073504447937f, 0.8885498642921448f, 0.7657763361930847f, 0.9812650084495544f, 0.04940054938197136f, 0.3328360915184021f, 0.6785821318626404f, 0.45161139965057373f, -0.4098942279815674f, 0.9265449047088623f, 0.13342154026031494f, 0.9627760052680969f, 0.061155982315540314f, 0.18871261179447174f, 0.6368939876556396f, 0.983329713344574f, -0.3126853406429291f, 0.5399633049964905f, 0.4559852182865143f, 0.950201153755188f, 0.48213282227516174f, 0.8454851508140564f, 0.312095582485199f, 0.19226811826229095f, -0.26122501492500305f, 0.47661474347114563f, 0.2360604703426361f, 0.21567535400390625f, 0.20958296954631805f, 0.221705824136734f, 0.048638131469488144f, 0.23999540507793427f, -0.7051072120666504f, 0.3554335832595825f, 0.1451377123594284f, 0.5590836405754089f, 0.5329970717430115f, 0.012603041715919971f, 0.7485321164131165f, 0.9549525380134583f, -0.16420681774616241f, 0.6933947205543518f, 0.12957561016082764f, 0.5776898264884949f, 0.1742178499698639f, 0.6364599466323853f, 0.5355567932128906f, 0.3738376498222351f, -0.40049049258232117f, 0.7421424984931946f, 0.5084964036941528f, 0.49674180150032043f, 0.0463537871837616f, 0.09525849670171738f, 0.3219534754753113f, 0.4918396770954132f, -0.010921580716967583f, 0.5613406896591187f, 0.29056107997894287f, 0.1386936753988266f, 0.7625772953033447f, 0.32371002435684204f, 0.6458648443222046f, 0.6838658452033997f, -0.1549079269170761f, 0.3481045961380005f, 0.5607970356941223f, 0.09865996241569519f, 0.8953478932380676f, 0.1891118288040161f, 0.08448584377765656f, 0.6824145317077637f, -0.15039364993572235f, 0.34003013372421265f, 0.9359164237976074f, 0.9839939475059509f, 0.1951717734336853f, 0.4381883442401886f, 0.7974062561988831f, 0.8784236907958984f, -0.1946176290512085f, 0.3883168399333954f, 0.9291514754295349f, 0.42585188150405884f, 0.5822921991348267f, 0.9641762375831604f, 0.36298272013664246f, 0.7545475959777832f, -0.7987940311431885f, 0.08636884391307831f, 0.8435553908348083f, 0.9281630516052246f, 0.43002647161483765f, 0.8935110569000244f, 0.1519247442483902f, 0.1849452257156372f, -0.9419882297515869f, 0.04295816272497177f, 0.9612911343574524f, 0.08386974036693573f, 0.5241042375564575f, 0.09058039635419846f, 0.2370527982711792f, 0.042031846940517426f, -0.508815348148346f, 0.6085156798362732f, 0.5991590023040771f, 0.2604529857635498f, 0.021256690844893456f, 0.7069776654243469f, 0.1039874479174614f, 0.43779152631759644f, -0.2136520892381668f, 0.6238812208175659f, 0.9441138505935669f, 0.5342090725898743f, 0.6052948236465454f, 0.38313814997673035f, 0.9607057571411133f, 0.17274218797683716f, -0.7401219010353088f, 0.18776284158229828f, 0.26395052671432495f, 0.962197482585907f, 0.13303914666175842f, 0.07813576608896255f, 0.8158083558082581f, 0.8412047624588013f, -0.3479447364807129f, 0.7992771863937378f, 0.09708770364522934f, 0.8588336110115051f, 0.6606152057647705f, 0.5869061946868896f, 0.3821367025375366f, 0.44262757897377014f, -0.22602520883083344f, 0.3533326983451843f, 0.7274686098098755f, 0.18946313858032227f, 0.2034388929605484f, 0.330596387386322f, 0.39647698402404785f, 0.3214511275291443f, -0.5025119781494141f, 0.5862865447998047f, 0.12179635465145111f, 0.8969322443008423f, 0.8869150876998901f, 0.1645512580871582f, 0.7362858653068542f, 0.2752062678337097f, -0.2908483147621155f, 0.6492133736610413f, 0.9862722158432007f, 0.7652477622032166f, 0.39182230830192566f, 0.6558084487915039f, 0.3591890335083008f, 0.5753031373023987f, -0.5673952102661133f, 0.9039931297302246f, 0.9681723117828369f, 0.663158118724823f, 0.417377233505249f, 0.4817817509174347f, 0.6123960614204407f, 0.7074647545814514f, -0.3050924241542816f, 0.7238611578941345f, 0.7862903475761414f, 0.49128544330596924f, 0.22984866797924042f, 0.1707826405763626f, 0.49936121702194214f, 0.9042518138885498f, -0.45055916905403137f, 0.13695412874221802f, 0.317286878824234f, 0.6780105829238892f, 0.9804973006248474f, 0.3038252294063568f, 0.49530351161956787f, 0.6190460324287415f, -0.6885323524475098f, 0.7409029603004456f, 0.49067220091819763f, 0.6884167790412903f, 0.7577952146530151f, 0.59488445520401f, 0.4033855199813843f, 0.7226436734199524f, -0.8417633771896362f, 0.9334734678268433f, 0.1640302687883377f, 0.26526522636413574f, 0.7931151986122131f, 0.15571479499340057f, 0.8250517845153809f, 0.18813703954219818f, -0.2791084051132202f, 0.36071938276290894f, 0.400958776473999f, 0.24134626984596252f, 0.11534910649061203f, 0.6269100308418274f, 0.001256757415831089f, 0.21833838522434235f, -0.2775944769382477f, 0.5177215337753296f, 0.22220702469348907f, 0.09634268283843994f, 0.751552939414978f, 0.6642023921012878f, 0.8439618349075317f, 0.658633828163147f, -0.9601231217384338f, 0.8713873624801636f, 0.3932928740978241f, 0.9036904573440552f, 0.43879565596580505f, 0.35696306824684143f, 0.8133607506752014f, 0.39999160170555115f, -0.6498238444328308f, 0.5745041966438293f, 0.8366757035255432f, 0.1298190802335739f, 0.4958805739879608f, 0.15505601465702057f, 0.009699421003460884f, 0.7778832912445068f, -0.533866822719574f, 0.121702179312706f, 0.5230792164802551f, 0.843227207660675f, 0.712168276309967f, 0.9798588752746582f, 0.8829266428947449f, 0.4365798532962799f, -0.9560376405715942f, 0.7159687280654907f, 0.7014780640602112f, 0.3394189476966858f, 0.7789750099182129f, 0.2008274495601654f, 0.31152623891830444f, 0.42292165756225586f, -0.5754998922348022f, 0.5497663617134094f, 0.37522462010383606f, 0.18414220213890076f, 0.03269113600254059f, 0.427275151014328f, 0.6751976013183594f, 0.4224676787853241f, -0.4705742597579956f, 0.29952213168144226f, 0.13536176085472107f, 0.7389308214187622f, 0.16264638304710388f, 0.8598836660385132f, 0.8474772572517395f, 0.7968056797981262f, -0.9709455966949463f, 0.2786126434803009f, 0.5465440154075623f, 0.6808867454528809f, 0.5469766855239868f, 0.1939748376607895f, 0.38255175948143005f, 0.807894229888916f, -0.873069703578949f, 0.0832587406039238f, 0.2843330204486847f, 0.2693554759025574f, 0.3920132517814636f, 0.717160701751709f, 0.040850769728422165f, 0.927808403968811f, -0.24761147797107697f, 0.4014740586280823f, 0.7461647391319275f, 0.2810559570789337f, 0.0415622852742672f, 0.039035387337207794f, 0.557427167892456f, 0.8321005702018738f, -0.6812009215354919f, 0.3869459331035614f, 0.19038504362106323f, 0.060074955224990845f, 0.30453523993492126f, 0.39624902606010437f, 0.2506827712059021f, 0.5410889387130737f, -0.12629690766334534f, 0.286379873752594f, 0.915403425693512f, 0.6837299466133118f, 0.8530269861221313f, 0.11057674884796143f, 0.3533717095851898f, 0.11013063043355942f, -0.45886939764022827f, 0.8684743642807007f, 0.6921112537384033f, 0.9136165380477905f, 0.6355336308479309f, 0.9928012490272522f, 0.03173685818910599f, 0.9008411765098572f, -0.09818407148122787f, 0.895086944103241f, 0.40064820647239685f, 0.37985944747924805f, 0.18375858664512634f, 0.09205622971057892f, 0.9461623430252075f, 0.14943675696849823f, -0.6475902795791626f, 0.4802597761154175f, 0.5193300843238831f, 0.12213966250419617f, 0.8000688552856445f, 0.5958932638168335f, 0.7228089570999146f, 0.4295611083507538f, -0.15483766794204712f, 0.5400691032409668f, 0.2146807610988617f, 0.24852201342582703f, 0.019074993208050728f, 0.9075049757957458f, 0.8682606816291809f, 0.43777385354042053f, -0.4542645215988159f, 0.8875735402107239f, 0.14703494310379028f, 0.03550338372588158f, 0.6502776145935059f, 0.5127357244491577f, 0.20750315487384796f, 0.34880658984184265f, -0.5169851779937744f, 0.4132079482078552f, 0.3164976239204407f, 0.11652672290802002f, 0.62558513879776f, 0.33311283588409424f, 0.5202757716178894f, 0.38679689168930054f, -0.002728915074840188f, 0.23230788111686707f, 0.201194629073143f, 0.2789579927921295f, 0.49287500977516174f, 0.682437002658844f, 0.7325343489646912f, 0.4132267236709595f, -0.871999204158783f, 0.9269272089004517f, 0.7783948183059692f, 0.6152552962303162f, 0.8734900951385498f, 0.4388236403465271f, 0.9884518980979919f, 0.6539275050163269f, -0.8955410122871399f, 0.651756763458252f, 0.24363788962364197f, 0.8721140623092651f, 0.2895912230014801f, 0.3461073637008667f, 0.402645081281662f, 0.10743037611246109f, -0.6022489666938782f, 0.29450222849845886f, 0.961442232131958f, 0.8548393249511719f, 0.46596813201904297f, 0.6208292841911316f, 0.7524641752243042f, 0.1945410966873169f, -0.18263593316078186f, 0.8696495890617371f, 0.0752178281545639f, 0.4296002984046936f, 0.7584073543548584f, 0.7181925177574158f, 0.1260867863893509f, 0.8862569332122803f, -0.7776638865470886f, 0.2618105113506317f, 0.773320734500885f, 0.7424293756484985f, 0.08441786468029022f, 0.7588907480239868f, 0.5411592721939087f, 0.6218657493591309f, -0.8746126890182495f, 0.09674224257469177f, 0.6733546257019043f, 0.8048838376998901f, 0.5497344136238098f, 0.7012168169021606f, 0.7706672549247742f, 0.7142792344093323f, -0.04918060451745987f, 0.749841034412384f, 0.8972081542015076f, 0.22844426333904266f, 0.7018308043479919f, 0.4963489770889282f, 0.9357761740684509f, 0.16032001376152039f, -0.5792621970176697f, 0.3278968930244446f, 0.9304185509681702f, 0.2625233829021454f, 0.8138962388038635f, 0.5282374620437622f, 0.6324379444122314f, 0.19579441845417023f, -0.8415753841400146f, 0.41232648491859436f, 0.11884600669145584f, 0.7414440512657166f, 0.03823054954409599f, 0.7150318622589111f, 0.9469173550605774f, 0.45123371481895447f, -0.20934218168258667f, 0.3539365530014038f, 0.9110342264175415f, 0.8021716475486755f, 0.19355633854866028f, 0.467924028635025f, 0.565794050693512f, 0.3955400586128235f, -0.3084738850593567f, 0.5483986735343933f, 0.11977148801088333f, 0.9836058616638184f, 0.9384028315544128f, 0.9986987709999084f, 0.645750880241394f, 0.0605643056333065f, -0.20484748482704163f, 0.48211541771888733f, 0.8674463033676147f, 0.43137478828430176f, 0.07805150747299194f, 0.13409923017024994f, 0.9186595678329468f, 0.6954293847084045f, -0.7766766548156738f, 0.6608179807662964f, 0.5150750875473022f, 0.7165483832359314f, 0.2608734369277954f, 0.491773396730423f, 0.017415698617696762f, 0.30723056197166443f, -0.495648592710495f, 0.44629764556884766f, 0.28842851519584656f, 0.37623757123947144f, 0.9658911824226379f, 0.2832755446434021f, 0.4317346215248108f, 0.5532484650611877f, -0.3872896432876587f, 0.23800629377365112f, 0.6334507465362549f, 0.7862723469734192f, 0.7801320552825928f, 0.15973499417304993f, 0.24789130687713623f, 0.05120539665222168f, -0.9001429080963135f, 0.963145911693573f, 0.7451936602592468f, 0.16640430688858032f, 0.20697952806949615f, 0.6880804300308228f, 0.044303178787231445f, 0.5879225730895996f, -0.6549526453018188f, 0.8188637495040894f, 0.700238049030304f, 0.838671863079071f, 0.1921015977859497f, 0.6948384642601013f, 0.15403735637664795f, 0.44408679008483887f, -0.41105860471725464f, 0.11085812002420425f, 0.9599835872650146f, 0.17621999979019165f, 0.945296585559845f, 0.8866705298423767f, 0.006622188724577427f, 0.7342132329940796f, -0.5399069786071777f, 0.7612489461898804f, 0.1518380492925644f, 0.9375191330909729f, 0.9630802273750305f, 0.3714708089828491f, 0.7238702178001404f, 0.32155609130859375f, -0.841580867767334f, 0.495847225189209f, 0.5877698659896851f, 0.3754110336303711f, 0.2974899709224701f, 0.37513965368270874f, 0.6195447444915771f, 0.2227540910243988f, -0.6788145899772644f, 0.11264271289110184f, 0.44027888774871826f, 0.47529032826423645f, 0.23033709824085236f, 0.3900220990180969f, 0.8812339305877686f, 0.9353894591331482f, -0.6115545034408569f, 0.421451210975647f, 0.0507383719086647f, 0.6762838363647461f, 0.01786169223487377f, 0.06961070746183395f, 0.13355478644371033f, 0.4840070903301239f, -0.28847700357437134f, 0.11744589358568192f, 0.06768595427274704f, 0.6919218301773071f, 0.6551365256309509f, 0.7198601365089417f, 0.04872717708349228f, 0.42889153957366943f, -0.7117154002189636f, 0.6025447249412537f, 0.3976508378982544f, 0.331184059381485f, 0.3490471839904785f, 0.5489289164543152f, 0.4589938521385193f, 0.05166223272681236f, -0.5940329432487488f, 0.8546459674835205f, 0.19834573566913605f, 0.39296042919158936f, 0.1430230289697647f, 0.8205055594444275f, 0.847845196723938f, 0.9072352051734924f, -0.03712446242570877f, 0.6428880095481873f, 0.3421383202075958f, 0.449365496635437f, 0.6606783866882324f, 0.8369714021682739f, 0.21036525070667267f, 0.03610047698020935f, -0.6175118088722229f, 0.37718597054481506f, 0.6668025851249695f, 0.541941225528717f, 0.6482390761375427f, 0.9516400098800659f, 0.2573772966861725f, 0.6759936213493347f, -0.9916340112686157f, 0.6173250675201416f, 0.25328779220581055f, 0.712656557559967f, 0.6097128391265869f, 0.3930477201938629f, 0.4314936697483063f, 0.9049229621887207f, -0.4046151638031006f, 0.5228598117828369f, 0.5630527138710022f, 0.7976044416427612f, 0.6066973805427551f, 0.925612211227417f, 0.012150511145591736f, 0.31424978375434875f, -0.21819204092025757f, 0.5792139172554016f, 0.9439706206321716f, 0.5902773141860962f, 0.4898759126663208f, 0.7873744368553162f, 0.41322025656700134f, 0.10230153053998947f, -0.18388815224170685f, 0.28740012645721436f, 0.4986484944820404f, 0.9825742840766907f, 0.3105465769767761f, 0.4841642677783966f, 0.9354446530342102f, 0.7854213118553162f, -0.6910917162895203f, 0.08224062621593475f, 0.5548055171966553f, 0.7973762154579163f, 0.8149477243423462f, 0.2636759877204895f, 0.4080032408237457f, 0.8040527105331421f, -0.2938854694366455f, 0.833778440952301f, 0.9902840852737427f, 0.0029551011975854635f, 0.5589485764503479f, 0.7020373344421387f, 0.12320037186145782f, 0.40083011984825134f, -0.673477053642273f, 0.032502662390470505f, 0.5158311128616333f, 0.21406465768814087f, 0.07314480096101761f, 0.5419561862945557f, 0.8119232654571533f, 0.11208542436361313f, -0.31117692589759827f, 0.6173633337020874f, 0.38520705699920654f, 0.04936036467552185f, 0.7747545838356018f, 0.19585733115673065f, 0.03694653883576393f, 0.8621004223823547f, -0.24495592713356018f, 0.4956050515174866f, 0.3594091832637787f, 0.8929274678230286f, 0.357383131980896f, 0.3763147294521332f, 0.3961414694786072f, 0.46327322721481323f, -0.7855424880981445f, 0.12762440741062164f, 0.5858439207077026f, 0.26740777492523193f, 0.6605316996574402f, 0.1447567492723465f, 0.8689097166061401f, 0.7946014404296875f, -0.3898536264896393f, 0.0020311942789703608f, 0.9248934388160706f, 0.6494950652122498f, 0.967574417591095f, 0.9785016179084778f, 0.4767763912677765f, 0.6907351016998291f, -0.26313555240631104f, 0.8482000231742859f, 0.43509483337402344f, 0.37557607889175415f, 0.1810425966978073f, 0.8531154990196228f, 0.6476980447769165f, 0.18097421526908875f, -0.9883592128753662f, 0.3826931416988373f, 0.027731625363230705f, 0.6708442568778992f, 0.8958496451377869f, 0.33869341015815735f, 0.5603029727935791f, 0.6229135394096375f, -0.218708798289299f, 0.9813204407691956f, 0.961088240146637f, 0.3719449043273926f, 0.08739225566387177f, 0.37977147102355957f, 0.6257171034812927f, 0.27212637662887573f, -0.46901950240135193f, 0.7158763408660889f, 0.9691244959831238f, 0.54908287525177f, 0.7975504994392395f, 0.8391512036323547f, 0.5636736750602722f, 0.15852749347686768f, -0.5031101107597351f, 0.44839906692504883f, 0.8324055075645447f, 0.6019351482391357f, 0.04175151139497757f, 0.29752951860427856f, 0.9463603496551514f, 0.3760203421115875f, -0.21701884269714355f, 0.759697437286377f, 0.7756156325340271f, 0.2657548487186432f, 0.17316536605358124f, 0.9018288254737854f, 0.15306223928928375f, 0.551310122013092f, -0.2243117392063141f, 0.510899543762207f, 0.9725614786148071f, 0.3307679295539856f, 0.4611845016479492f, 0.44556233286857605f, 0.003947418183088303f, 0.9510647058486938f, -0.607415497303009f, 0.01136865559965372f, 0.4222613275051117f, 0.9868600368499756f, 0.5357815623283386f, 0.7254189252853394f, 0.9514076709747314f, 0.3925112783908844f, -0.007777532562613487f, 0.6520833969116211f, 0.16340631246566772f, 0.6837939620018005f, 0.31009289622306824f, 0.30894434452056885f, 0.014918484725058079f, 0.6510624885559082f, -0.5595836639404297f, 0.7624285221099854f, 0.19347314536571503f, 0.6676853895187378f, 0.49555766582489014f, 0.546543538570404f, 0.2766449749469757f, 0.03720185533165932f, -0.7099671959877014f, 0.4448891878128052f, 0.7832029461860657f, 0.350302129983902f, 0.6769861578941345f, 0.031083302572369576f, 0.655971109867096f, 0.04959506168961525f, -0.7582138180732727f, 0.9726129174232483f, 0.028011955320835114f, 0.2519211769104004f, 0.4972204566001892f, 0.4418123960494995f, 0.7430997490882874f, 0.23017051815986633f, -0.8917436599731445f, 0.2674081027507782f, 0.8000820279121399f, 0.2599489688873291f, 0.11161307990550995f, 0.8513209223747253f, 0.4791162312030792f, 0.2629877030849457f, -0.8915493488311768f, 0.6754859089851379f, 0.0021353410556912422f, 0.4758095145225525f, 0.021155312657356262f, 0.3943853974342346f, 0.8313748240470886f, 0.0032636846881359816f, -0.7205235362052917f, 0.988365113735199f, 0.7607941031455994f, 0.6047651767730713f, 0.48086416721343994f, 0.2883665859699249f, 0.269356369972229f, 0.5849512815475464f, -0.6230580806732178f, 0.09361723810434341f, 0.7223215699195862f, 0.1148950606584549f, 0.17920547723770142f, 0.5447251200675964f, 0.823210597038269f, 0.38423898816108704f, -0.5568151473999023f, 0.8432204127311707f, 0.3583156168460846f, 0.5149145126342773f, 0.8504390716552734f, 0.2409631907939911f, 0.23156091570854187f, 0.5025146007537842f, -0.7888534069061279f, 0.5453885197639465f, 0.9227812886238098f, 0.7095359563827515f, 0.5274432301521301f, 0.13628403842449188f, 0.820164680480957f, 0.5315058827400208f, -0.6797677278518677f, 0.14257581532001495f, 0.6664245128631592f, 0.14873339235782623f, 0.6003360152244568f, 0.5588635802268982f, 0.35187333822250366f, 0.6558818221092224f, -0.25262972712516785f, 0.6443325281143188f, 0.15888142585754395f, 0.7356659173965454f, 0.32536381483078003f, 0.4213862419128418f, 0.054270777851343155f, 0.6593993902206421f, -0.34508559107780457f, 0.677112877368927f, 0.5531525015830994f, 0.6018171906471252f, 0.7435880303382874f, 0.9329378008842468f, 0.8484265804290771f, 0.7336880564689636f, -0.5616175532341003f, 0.3151552081108093f, 0.2502535581588745f, 0.5015808939933777f, 0.12493181228637695f, 0.5339244604110718f, 0.47727417945861816f, 0.31076672673225403f, -0.4038277864456177f, 0.36101198196411133f, 0.592239499092102f, 0.5507514476776123f, 0.22726646065711975f, 0.9730595350265503f, 0.22602716088294983f, 0.546532928943634f, -0.9134078621864319f, 0.21508921682834625f, 0.21273274719715118f, 0.3477347791194916f, 0.33148738741874695f, 0.42903390526771545f, 0.9008448719978333f, 0.35097283124923706f, -0.6535636186599731f, 0.5032427310943604f, 0.9948516488075256f, 0.8169650435447693f, 0.9384531378746033f, 0.3034573197364807f, 0.20736123621463776f, 0.8630384802818298f, -0.6930658221244812f, 0.40400177240371704f, 0.7946355938911438f, 0.939969003200531f, 0.7337632179260254f, 0.2842102646827698f, 0.33680158853530884f, 0.5741771459579468f, -0.8117149472236633f, 0.6236798167228699f, 0.5312785506248474f, 0.061067771166563034f, 0.4536164104938507f, 0.43326762318611145f, 0.46799033880233765f, 0.5777156352996826f, -0.23588046431541443f, 0.2757384777069092f, 0.011198457330465317f, 0.21861815452575684f, 0.6858676671981812f, 0.27364471554756165f, 0.018844470381736755f, 0.28854039311408997f, -0.8991094827651978f, 0.01264351885765791f, 0.5119007229804993f, 0.9972274899482727f, 0.3284660875797272f, 0.6729960441589355f, 0.7886438369750977f, 0.4117498993873596f, -0.528037965297699f, 0.5636448264122009f, 0.5721585154533386f, 0.2104550153017044f, 0.16724669933319092f, 0.02263815887272358f, 0.9948727488517761f, 0.511417031288147f, -0.14070668816566467f, 0.7991015911102295f, 0.14088751375675201f, 0.6192178726196289f, 0.9973006844520569f, 0.8426337242126465f, 0.8887962698936462f, 0.7683138251304626f, -0.12151999026536942f, 0.869881272315979f, 0.5403245687484741f, 0.7777119278907776f, 0.19597561657428741f, 0.4887941777706146f, 0.1411861628293991f, 0.7337222099304199f, -0.4510733187198639f, 0.4644406735897064f, 0.6622631549835205f, 0.36723947525024414f, 0.11937768757343292f, 0.14629895985126495f, 0.775697648525238f, 0.5342355370521545f, -0.4910259246826172f, 0.80459064245224f, 0.7961825132369995f, 0.19699642062187195f, 0.8389145731925964f, 0.8851839303970337f, 0.5990914702415466f, 0.38511404395103455f, -0.03903184086084366f, 0.17987221479415894f, 0.6250771880149841f, 0.313412606716156f, 0.37645137310028076f, 0.5095506906509399f, 0.512826144695282f, 0.32807156443595886f, -0.9078131914138794f, 0.251923143863678f, 0.3144402503967285f, 0.6809813380241394f, 0.004425565246492624f, 0.4455896317958832f, 0.03763207048177719f, 0.09901171177625656f, -0.7056940793991089f, 0.521952748298645f, 0.7973572015762329f, 0.41640573740005493f, 0.28473803400993347f, 0.9464510083198547f, 0.6239585876464844f, 0.7428925633430481f, -0.3588840663433075f, 0.8500490188598633f, 0.8131201863288879f, 0.764038622379303f, 0.11944829672574997f, 0.4379526674747467f, 0.7050716280937195f, 0.6697850823402405f, -0.2567388713359833f, 0.22527408599853516f, 0.34424903988838196f, 0.11070093512535095f, 0.6890242099761963f, 0.7970025539398193f, 0.6549165844917297f, 0.5055155158042908f, -0.0318637490272522f, 0.9801427721977234f, 0.45378851890563965f, 0.13137732446193695f, 0.05288134887814522f, 0.7019830942153931f, 0.694731593132019f, 0.6170365810394287f, -0.43126797676086426f, 0.30575382709503174f, 0.3492889404296875f, 0.4337555766105652f, 0.11185141652822495f, 0.6728864312171936f, 0.470753014087677f, 0.4661966860294342f, -0.6994218826293945f, 0.75475013256073f, 0.02574123628437519f, 0.04989302530884743f, 0.6143804788589478f, 0.8688938617706299f, 0.8139298558235168f, 0.14704664051532745f, -0.5992111563682556f, 0.37154749035835266f, 0.7297682166099548f, 0.39444613456726074f, 0.6673941612243652f, 0.4504737854003906f, 0.5223122835159302f, 0.34146302938461304f, -0.263251394033432f, 0.38439053297042847f, 0.11583548039197922f, 0.4863998591899872f, 0.5499683618545532f, 0.5221050977706909f, 0.46255064010620117f, 0.9036579728126526f, -0.3939616084098816f, 0.38815033435821533f, 0.0790560394525528f, 0.9939942955970764f, 0.42705342173576355f, 0.9853265285491943f, 0.7909041047096252f, 0.8861450552940369f, -0.5930643081665039f, 0.326633095741272f, 0.10748019814491272f, 0.32255446910858154f, 0.45910993218421936f, 0.2044675052165985f, 0.578694760799408f, 0.686529278755188f, -0.6416405439376831f, 0.6429755091667175f, 0.9113243222236633f, 0.11178244650363922f, 0.04105544090270996f, 0.2447310835123062f, 0.48582693934440613f, 0.21261952817440033f, -0.9720439910888672f, 0.7153652906417847f, 0.3715413510799408f, 0.8452891111373901f, 0.42634034156799316f, 0.41089144349098206f, 0.9600129723548889f, 0.5102835297584534f, -0.411039263010025f, 0.5549745559692383f, 0.23781733214855194f, 0.9016844630241394f, 0.3383098840713501f, 0.4849197566509247f, 0.8001959323883057f, 0.18291333317756653f, -0.6910961866378784f, 0.9087791442871094f, 0.5757625102996826f, 0.2917768359184265f, 0.759909987449646f, 0.6343470215797424f, 0.14584748446941376f, 0.6006488800048828f, -0.9918164610862732f, 0.7941421866416931f, 0.31885263323783875f, 0.09440898150205612f, 0.42285919189453125f, 0.9742766618728638f, 0.5579175353050232f, 0.3401194214820862f, -0.18527454137802124f, 0.057903338223695755f, 0.49435827136039734f, 0.5321003198623657f, 0.3088870048522949f, 0.5634181499481201f, 0.46672317385673523f, 0.28585028648376465f, -0.042958714067935944f, 0.10187029093503952f, 0.6709461212158203f, 0.07742279767990112f, 0.45275604724884033f, 0.9383948445320129f, 0.3779710531234741f, 0.5598633885383606f, -0.3205997347831726f, 0.020319277420639992f, 0.8281957507133484f, 0.5726107954978943f, 0.7158854007720947f, 0.36881446838378906f, 0.8422334790229797f, 0.993685245513916f, -0.940681517124176f, 0.3214515447616577f, 0.9764996767044067f, 0.32112565636634827f, 0.8933855891227722f, 0.2767370343208313f, 0.7793962359428406f, 0.5574954152107239f, -0.7386738061904907f, 0.912372887134552f, 0.6333993673324585f, 0.3688358664512634f, 0.8203150629997253f, 0.854092538356781f, 0.009177792817354202f, 0.3152841031551361f, -0.2488335818052292f, 0.8747442364692688f, 0.714910089969635f, 0.8232973217964172f, 0.23143251240253448f, 0.6716678738594055f, 0.7471494078636169f, 0.3534189760684967f, -0.3720395267009735f, 0.99819016456604f, 0.2641577422618866f, 0.7823049426078796f, 0.6941710114479065f, 0.9725685119628906f, 0.6317628026008606f, 0.505038857460022f, -0.3173685371875763f, 0.5581347346305847f, 0.09284529089927673f, 0.6076827645301819f, 0.07713001221418381f, 0.912852942943573f, 0.732949435710907f, 0.4672936797142029f, -0.7414104342460632f, 0.328233540058136f, 0.22498305141925812f, 0.6011675000190735f, 0.5642027854919434f, 0.49910393357276917f, 0.8264779448509216f, 0.596471905708313f, -0.4311310648918152f, 0.10083417594432831f, 0.978992760181427f, 0.026635808870196342f, 0.05402315780520439f, 0.9450759887695312f, 0.6355590224266052f, 0.40155184268951416f, -0.00033851049374789f, 0.978334367275238f, 0.4881213307380676f, 0.5039921998977661f, 0.5413790345191956f, 0.7944074273109436f, 0.8415842056274414f, 0.8911025524139404f, -0.3395920395851135f, 0.4180156886577606f, 0.1343945413827896f, 0.9498234987258911f, 0.48859870433807373f, 0.7824907898902893f, 0.700507402420044f, 0.968540608882904f, -0.5928065776824951f, 0.6452232599258423f, 0.03038160689175129f, 0.03857066482305527f, 0.8102975487709045f, 0.6971736550331116f, 0.245255246758461f, 0.7876275181770325f, -0.9988546967506409f, 0.22617650032043457f, 0.4876577854156494f, 0.8706817626953125f, 0.6354286074638367f, 0.28252100944519043f, 0.8061498999595642f, 0.7438231110572815f, -0.06196402385830879f, 0.10589462518692017f, 0.5279601216316223f, 0.3784610331058502f, 0.5531695485115051f, 0.3120723068714142f, 0.08999843895435333f, 0.9553102254867554f, -0.6403915286064148f, 0.8628188371658325f, 0.1444208025932312f, 0.5030882954597473f, 0.039085350930690765f, 0.0032730656675994396f, 0.6445192098617554f, 0.17778509855270386f, -0.8379386067390442f, 0.5680922269821167f, 0.5853700637817383f, 0.48934659361839294f, 0.9541139602661133f, 0.4235089421272278f, 0.5085089802742004f, 0.04835781455039978f, -0.24250394105911255f, 0.546130359172821f, 0.8984467387199402f, 0.3282007873058319f, 0.23792903125286102f, 0.46538832783699036f, 0.35427549481391907f, 0.6177929043769836f, -0.3343798816204071f, 0.8691491484642029f, 0.8647617697715759f, 0.7625415325164795f, 0.5489886999130249f, 0.7676653265953064f, 0.31005188822746277f, 0.3156082034111023f, -0.8148763179779053f, 0.5858784317970276f, 0.5227562189102173f, 0.21804559230804443f, 0.19970928132534027f, 0.2727806866168976f, 0.5646699666976929f, 0.18280068039894104f, -0.41883373260498047f, 0.19087883830070496f, 0.5927631258964539f, 0.4589002728462219f, 0.2718782126903534f, 0.4597635567188263f, 0.7971633076667786f, 0.37230974435806274f, -0.3252195119857788f, 0.9399233460426331f, 0.8833945989608765f, 0.15708792209625244f, 0.850659966468811f, 0.6134131550788879f, 0.1489035040140152f, 0.54837566614151f, -0.9323443174362183f, 0.554311990737915f, 0.7757826447486877f, 0.4109954535961151f, 0.3414306938648224f, 0.7823795080184937f, 0.6669013500213623f, 0.22230400145053864f, -0.6564820408821106f, 0.703610897064209f, 0.5639722347259521f, 0.49439290165901184f, 0.07184784859418869f, 0.566703200340271f, 0.6772522926330566f, 0.2730795443058014f, -0.8907034993171692f, 0.48982736468315125f, 0.1865234375f, 0.9734280705451965f, 0.34394344687461853f, 0.3305606544017792f, 0.2597629129886627f, 0.7577617168426514f, -0.02747827209532261f, 0.9012739658355713f, 0.6826156377792358f, 0.1646997630596161f, 0.14056283235549927f, 0.06616438180208206f, 0.9520687460899353f, 0.9691961407661438f, -0.3700578808784485f, 0.47630321979522705f, 0.7962452173233032f, 0.10890582948923111f, 0.21720069646835327f, 0.22533239424228668f, 0.386040061712265f, 0.9259741902351379f, -0.7523926496505737f, 0.2821952998638153f, 0.0475054569542408f, 0.009004194289445877f, 0.39646729826927185f, 0.7004511952400208f, 0.9135146141052246f, 0.9689399600028992f, -0.7493451833724976f, 0.29060789942741394f, 0.42887675762176514f, 0.678846001625061f, 0.9398511052131653f, 0.491129994392395f, 0.024408694356679916f, 0.7321566939353943f, -0.21529947221279144f, 0.5508617758750916f, 0.06894044578075409f, 0.9416759014129639f, 0.2343924641609192f, 0.8713195323944092f, 0.43518105149269104f, 0.587354302406311f, -0.6495798826217651f, 0.387901246547699f, 0.5779147148132324f, 0.15849094092845917f, 0.9439818859100342f, 0.3955082595348358f, 0.5409319400787354f, 0.7785307765007019f, -0.3218832015991211f, 0.3078466057777405f, 0.947486937046051f, 0.02057129144668579f, 0.15042679011821747f, 0.7187546491622925f, 0.8614609241485596f, 0.49868905544281006f, -0.04630520939826965f, 0.22824005782604218f, 0.8166060447692871f, 0.269991010427475f, 0.9486919641494751f, 0.48077887296676636f, 0.6709114909172058f, 0.5954924821853638f, -0.2415921986103058f, 0.8182185292243958f, 0.6171020269393921f, 0.8300920128822327f, 0.5422816276550293f, 0.9161363840103149f, 0.7502590417861938f, 0.4060313403606415f, -0.07354763150215149f, 0.9663260579109192f, 0.9775665998458862f, 0.4956648647785187f, 0.9561920762062073f, 0.6174377202987671f, 0.9854886531829834f, 0.4584362506866455f, -0.29901736974716187f, 0.14230993390083313f, 0.04707539454102516f, 0.8179594278335571f, 0.6094068288803101f, 0.6637405157089233f, 0.8573020696640015f, 0.1761510819196701f, -0.2743138372898102f, 0.536353588104248f, 0.6946559548377991f, 0.7885762453079224f, 0.793677031993866f, 0.5596778988838196f, 0.4868287444114685f, 0.10591059178113937f, -0.9696892499923706f, 0.9816507697105408f, 0.162825807929039f, 0.933678925037384f, 0.5795013904571533f, 0.13322368264198303f, 0.4484764039516449f, 0.4768223166465759f, -0.8545216917991638f, 0.46594348549842834f, 0.37228119373321533f, 0.12229686975479126f, 0.279573917388916f, 0.5526161789894104f, 0.9060502052307129f, 0.36769312620162964f, -0.26348191499710083f, 0.1662985384464264f, 0.9570569396018982f, 0.484423965215683f, 0.23232480883598328f, 0.6688134074211121f, 0.37254953384399414f, 0.029082441702485085f, -0.3582812249660492f, 0.2501557469367981f, 0.9127258062362671f, 0.6620250344276428f, 0.08880660682916641f, 0.7458958625793457f, 0.05528826639056206f, 0.042973875999450684f, -0.8681711554527283f, 0.6615197062492371f, 0.05247792229056358f, 0.5448155999183655f, 0.8273253440856934f, 0.7876215577125549f, 0.7662035822868347f, 0.6515625715255737f, -0.8242449760437012f, 0.08240720629692078f, 0.1703425645828247f, 0.9522204995155334f, 0.48818373680114746f, 0.6384443640708923f, 0.45304709672927856f, 0.573180079460144f, -0.12092335522174835f, 0.5906388759613037f, 0.4990793466567993f, 0.3487766683101654f, 0.38301241397857666f, 0.6710188388824463f, 0.6529412269592285f, 0.4919586181640625f, -0.6614671349525452f, 0.396836519241333f, 0.7746855616569519f, 0.00154579384252429f, 0.23059220612049103f, 0.1436091512441635f, 0.8237431645393372f, 0.941624641418457f, -0.9235729575157166f, 0.7036295533180237f, 0.6159203052520752f, 0.6773555278778076f, 0.5212363600730896f, 0.10476525127887726f, 0.9807055592536926f, 0.9266853928565979f, -0.8557446599006653f, 0.23122000694274902f, 0.2075960487127304f, 0.5676155686378479f, 0.4410879909992218f, 0.10449018329381943f, 0.6542861461639404f, 0.010105437599122524f, -0.007010611239820719f, 0.36349597573280334f, 0.5270922780036926f, 0.5654985904693604f, 0.8876317143440247f, 0.7808433175086975f, 0.3536568284034729f, 0.5028886795043945f, -0.9624536037445068f, 0.39121174812316895f, 0.47245660424232483f, 0.6076129078865051f, 0.44653183221817017f, 0.3103793263435364f, 0.10057812929153442f, 0.29405656456947327f, -0.022621512413024902f, 0.8003830313682556f, 0.06607256084680557f, 0.6833706498146057f, 0.06475652009248734f, 0.7361893653869629f, 0.00905616208910942f, 0.7037296891212463f, -0.7835355401039124f, 0.8510939478874207f, 0.035822153091430664f, 0.032144058495759964f, 0.34822696447372437f, 0.19183014333248138f, 0.21804198622703552f, 0.6904819011688232f, -0.7813060879707336f, 0.39158129692077637f, 0.9151942133903503f, 0.1864602118730545f, 0.6356975436210632f, 0.9761688113212585f, 0.6963937878608704f, 0.08940163999795914f, -0.8818292617797852f, 0.5683690905570984f, 0.7206926345825195f, 0.38285642862319946f, 0.0074328952468931675f, 0.18974874913692474f, 0.9441437125205994f, 0.21819068491458893f, -0.9407623410224915f, 0.35572606325149536f, 0.49842944741249084f, 0.21343332529067993f, 0.6664732098579407f, 0.3653286099433899f, 0.6311365365982056f, 0.05431311950087547f, -0.9750624299049377f, 0.6365641355514526f, 0.10921715945005417f, 0.346069872379303f, 0.2979867458343506f, 0.6930037140846252f, 0.6893668174743652f, 0.3691021800041199f, -0.3308424651622772f, 0.13491575419902802f, 0.4030841290950775f, 0.8834056258201599f, 0.8514201641082764f, 0.5943145751953125f, 0.6127081513404846f, 0.17740662395954132f, -0.5501542091369629f, 0.5249462723731995f, 0.33383411169052124f, 0.7127383351325989f, 0.34000664949417114f, 0.9628931879997253f, 0.22605165839195251f, 0.1815614551305771f, -0.6060766577720642f, 0.5971636772155762f, 0.06926462799310684f, 0.2425689846277237f, 0.235321044921875f, 0.4820883572101593f, 0.5953893661499023f, 0.040558986365795135f, -0.06553857028484344f, 0.27702122926712036f, 0.8989065885543823f, 0.36571380496025085f, 0.29343491792678833f, 0.969441831111908f, 0.8059677481651306f, 0.8747466802597046f, -0.17368768155574799f, 0.4076087176799774f, 0.544511616230011f, 0.9869614243507385f, 0.2661213278770447f, 0.7873492240905762f, 0.6034727692604065f, 0.6741252541542053f, -0.16738225519657135f, 0.03801204264163971f, 0.25885674357414246f, 0.5979043841362f, 0.3941510319709778f, 0.6196851134300232f, 0.5496000647544861f, 0.45036637783050537f, -0.2856711745262146f, 0.452374666929245f, 0.6123458743095398f, 0.061193183064460754f, 0.6730969548225403f, 0.6742287278175354f, 0.5823202133178711f, 0.6187453269958496f, -0.6102795600891113f, 0.3227536976337433f, 0.6646022796630859f, 0.44903936982154846f, 0.2755565345287323f, 0.20817703008651733f, 0.7955211997032166f, 0.9556249380111694f, -0.6165446043014526f, 0.7138726115226746f, 0.7333407998085022f, 0.4993847608566284f, 0.7498002052307129f, 0.3861660659313202f, 0.21729625761508942f, 0.7418412566184998f, -0.6914823651313782f, 0.30943164229393005f, 0.43941226601600647f, 0.6828984618186951f, 0.6571303009986877f, 0.18562579154968262f, 0.504555344581604f, 0.6022331118583679f, -0.779855489730835f, 0.7061077952384949f, 0.7473083734512329f, 0.5589010119438171f, 0.2209440916776657f, 0.6369757652282715f, 0.10795988887548447f, 0.766606867313385f, -0.9800021648406982f, 0.9000152349472046f, 0.5290818214416504f, 0.789116621017456f, 0.11936856806278229f, 0.8743138313293457f, 0.756686270236969f, 0.9798862338066101f, -0.9506279230117798f, 0.5816612839698792f, 0.870024561882019f, 0.3538784980773926f, 0.36674025654792786f, 0.8734074234962463f, 0.7246421575546265f, 0.9268219470977783f, -0.27072644233703613f, 0.5579131841659546f, 0.0763065442442894f, 0.4460434019565582f, 0.570756196975708f, 0.3542068600654602f, 0.28944554924964905f, 0.892817497253418f, -0.7545653581619263f, 0.6910479664802551f, 0.6448726654052734f, 0.6186347007751465f, 0.8423311114311218f, 0.30785903334617615f, 0.1656344085931778f, 0.6167271137237549f, -0.8375853896141052f, 0.7874917387962341f, 0.6298646926879883f, 0.07798536866903305f, 0.7208012342453003f, 0.340768963098526f, 0.895153284072876f, 0.24580179154872894f, -0.7079744338989258f, 0.10539406538009644f, 0.11039374768733978f, 0.8569270968437195f, 0.6247096657752991f, 0.09419187158346176f, 0.3905353248119354f, 0.4871200919151306f, -0.8413856625556946f, 0.23790684342384338f, 0.3401293158531189f, 0.469855397939682f, 0.18193846940994263f, 0.8280137181282043f, 0.19507792592048645f, 0.11369103938341141f, -0.766128420829773f, 0.09861426800489426f, 0.9204860925674438f, 0.06777800619602203f, 0.8841347098350525f, 0.37915629148483276f, 0.5345479846000671f, 0.075715072453022f, -0.5725312232971191f, 0.2375519573688507f, 0.11643155664205551f, 0.015230044722557068f, 0.18519361317157745f, 0.1647600531578064f, 0.4142778515815735f, 0.9477543830871582f, -0.17193350195884705f, 0.7567763924598694f, 0.8149558901786804f, 0.10189642757177353f, 0.9256594181060791f, 0.5578469038009644f, 0.8554946184158325f, 0.9599983096122742f, -0.9384986162185669f, 0.7992315292358398f, 0.48827746510505676f, 0.5404868125915527f, 0.09512587636709213f, 0.23075386881828308f, 0.4279228746891022f, 0.7507192492485046f, -0.06215781718492508f, 0.868758499622345f, 0.28486141562461853f, 0.661521852016449f, 0.28890329599380493f, 0.07870263606309891f, 0.4804648756980896f, 0.17188099026679993f, -0.06413721293210983f, 0.29591524600982666f, 0.8975363969802856f, 0.17307612299919128f, 0.6652193069458008f, 0.9029558897018433f, 0.7124038934707642f, 0.3733043670654297f, -0.3460340201854706f, 0.3275063633918762f, 0.7913082838058472f, 0.5769861936569214f, 0.5336520671844482f, 0.0874340832233429f, 0.879476010799408f, 0.3618776500225067f, -0.7107082009315491f, 0.26420632004737854f, 0.6305332779884338f, 0.5329316854476929f, 0.39990779757499695f, 0.7315101623535156f, 0.7059481143951416f, 0.217033252120018f, -0.38423827290534973f, 0.4539608359336853f, 0.06483414024114609f, 0.8625178933143616f, 0.9889082312583923f, 0.3268572688102722f, 0.5576281547546387f, 0.8545910120010376f, -0.4809595048427582f, 0.26016154885292053f, 0.42823418974876404f, 0.8921815156936646f, 0.5526517033576965f, 0.2937602996826172f, 0.659456729888916f, 0.2619764506816864f, -0.7032216787338257f, 0.4791017770767212f, 0.31435537338256836f, 0.9985946416854858f, 0.017426013946533203f, 0.07981108129024506f, 0.9777697324752808f, 0.7297348976135254f, -0.508898913860321f, 0.8023326396942139f, 0.5083048939704895f, 0.5338966846466064f, 0.21607047319412231f, 0.5646133422851562f, 0.5836161375045776f, 0.47522300481796265f, -0.040089212357997894f, 0.1836414486169815f, 0.4079347252845764f, 0.771300733089447f, 0.9248839616775513f, 0.5412924289703369f, 0.46933305263519287f, 0.46646490693092346f, -0.6630681157112122f, 0.6089784502983093f, 0.6900715231895447f, 0.5291547179222107f, 0.27619707584381104f, 0.9391583800315857f, 0.5003044009208679f, 0.9093749523162842f, -0.7839392423629761f, 0.917289137840271f, 0.4602172076702118f, 0.3166711926460266f, 0.4673771262168884f, 0.17448720335960388f, 0.6314738988876343f, 0.3531448543071747f, -0.4010876417160034f, 0.46035388112068176f, 0.29989710450172424f, 0.9247516393661499f, 0.7489041090011597f, 0.06674816459417343f, 0.6987163424491882f, 0.029443107545375824f, -0.05625617504119873f, 0.04517735168337822f, 0.43978407979011536f, 0.1493803709745407f, 0.5489813685417175f, 0.8970956206321716f, 0.1679859459400177f, 0.2579326927661896f, -0.7194654941558838f, 0.5774125456809998f, 0.1927989274263382f, 0.8863256573677063f, 0.4080135226249695f, 0.20909075438976288f, 0.9001119136810303f, 0.5732938051223755f, -0.7699151039123535f, 0.561984121799469f, 0.6905825138092041f, 0.23926177620887756f, 0.7202742099761963f, 0.07996369898319244f, 0.30797964334487915f, 0.19435915350914001f, -0.12107875943183899f, 0.517173707485199f, 0.25065723061561584f, 0.25831547379493713f, 0.06249811127781868f, 0.6817488074302673f, 0.2129332572221756f, 0.7287029027938843f, -0.3885374963283539f, 0.7685390710830688f, 0.11172769218683243f, 0.767819881439209f, 0.9099597930908203f, 0.926260232925415f, 0.28791749477386475f, 0.6788247227668762f, -0.7194720506668091f, 0.6961343884468079f, 0.5274182558059692f, 0.8803186416625977f, 0.7613384127616882f, 0.8306698799133301f, 0.22107891738414764f, 0.7365537881851196f, -0.32261449098587036f, 0.10110078006982803f, 0.3060525953769684f, 0.20876552164554596f, 0.0526941642165184f, 0.7470219731330872f, 0.9423542022705078f, 0.7444265484809875f, -0.5155850052833557f, 0.5026993751525879f, 0.11813772469758987f, 0.8662256002426147f, 0.7091996669769287f, 0.4450969696044922f, 0.5131310820579529f, 0.4705874025821686f, -0.5604768991470337f, 0.9771803021430969f, 0.6208159327507019f, 0.22964493930339813f, 0.7568234205245972f, 0.10694491863250732f, 0.13391193747520447f, 0.09025469422340393f, -0.4162980020046234f, 0.26428937911987305f, 0.6308416724205017f, 0.8196126818656921f, 0.8970203399658203f, 0.38211193680763245f, 0.013533503748476505f, 0.7788004875183105f, -0.5363409519195557f, 0.3285026252269745f, 0.7519382238388062f, 0.05765222758054733f, 0.427580863237381f, 0.5536032915115356f, 0.39723557233810425f, 0.10099383443593979f, -0.6551689505577087f, 0.9894604086875916f, 0.2515029311180115f, 0.6420024633407593f, 0.37080761790275574f, 0.02103389799594879f, 0.7110357284545898f, 0.9261355996131897f, -0.045269813388586044f, 0.9386844038963318f, 0.15741828083992004f, 0.00945335254073143f, 0.7189447283744812f, 0.20602352917194366f, 0.5478336215019226f, 0.9020267724990845f, -0.22458501160144806f, 0.6216718554496765f, 0.2601163983345032f, 0.9431588649749756f, 0.1695498675107956f, 0.3821162283420563f, 0.215028777718544f, 0.5109632015228271f, -0.8794366121292114f, 0.8072901964187622f, 0.11234168708324432f, 0.8892294764518738f, 0.40974992513656616f, 0.07301272451877594f, 0.8304972052574158f, 0.46331945061683655f, -0.9707668423652649f, 0.5115623474121094f, 0.6576913595199585f, 0.9658113718032837f, 0.16336245834827423f, 0.6608157753944397f, 0.16798637807369232f, 0.18825189769268036f, -0.8608551025390625f, 0.2104770839214325f, 0.5349326729774475f, 0.41853541135787964f, 0.8463390469551086f, 0.5877770185470581f, 0.648734450340271f, 0.842232346534729f, -0.1161390170454979f, 0.01397657860070467f, 0.18559260666370392f, 0.764542281627655f, 0.853341817855835f, 0.42070329189300537f, 0.041403234004974365f, 0.537939190864563f, -0.9320420026779175f, 0.1559373289346695f, 0.9074157476425171f, 0.05746212974190712f, 0.48751920461654663f, 0.3716600835323334f, 0.8373782634735107f, 0.4258347153663635f, -0.8977605700492859f, 0.8744047284126282f, 0.09765394777059555f, 0.09796161949634552f, 0.9691612720489502f, 0.05231155455112457f, 0.24743658304214478f, 0.7704868316650391f, -0.4950806796550751f, 0.12889060378074646f, 0.798984169960022f, 0.7729818820953369f, 0.19802899658679962f, 0.7141467332839966f, 0.7776866555213928f, 0.9788478016853333f, -0.16571640968322754f, 0.7309814691543579f, 0.378447949886322f, 0.3444053828716278f, 0.3786919116973877f, 0.08381740748882294f, 0.25455912947654724f, 0.0015865244204178452f, -0.1785447895526886f, 0.2645795941352844f, 0.11763889342546463f, 0.18338803946971893f, 0.971906304359436f, 0.8329254984855652f, 0.568318247795105f, 0.8884168863296509f, -0.4409007132053375f, 0.6949998736381531f, 0.7808368802070618f, 0.7424048185348511f, 0.13701124489307404f, 0.9294226765632629f, 0.19593165814876556f, 0.513351321220398f, -0.3925747871398926f, 0.9307478070259094f, 0.8775085806846619f, 0.41440796852111816f, 0.25597667694091797f, 0.01069521252065897f, 0.7036816477775574f, 0.20208564400672913f, -0.676354169845581f, 0.7748802900314331f, 0.842191755771637f, 0.5421608090400696f, 0.15927129983901978f, 0.744728684425354f, 0.7881850600242615f, 0.5889186859130859f, -0.13502788543701172f, 0.9133435487747192f, 0.30142492055892944f, 0.6144492626190186f, 0.18713510036468506f, 0.8589633107185364f, 0.4989674687385559f, 0.12112889438867569f, -0.2678641080856323f, 0.7022020816802979f, 0.6628212332725525f, 0.43742531538009644f, 0.34369349479675293f, 0.5358575582504272f, 0.9740193486213684f, 0.3255751132965088f, -0.27050697803497314f, 0.7701396346092224f, 0.0879712924361229f, 0.31761500239372253f, 0.2675335705280304f, 0.31528744101524353f, 0.4502004086971283f, 0.5082440972328186f, -0.501560628414154f, 0.9354714751243591f, 0.422674298286438f, 0.3394322395324707f, 0.018658608198165894f, 0.8901993632316589f, 0.8819093108177185f, 0.4628710448741913f, -0.21591374278068542f, 0.946265697479248f, 0.9388832449913025f, 0.5294329524040222f, 0.17625394463539124f, 0.9847299456596375f, 0.5872012972831726f, 0.8303890228271484f, -0.8107028007507324f, 0.389682799577713f, 0.9946613907814026f, 0.8741269111633301f, 0.8142005801200867f, 0.3331783413887024f, 0.0848413035273552f, 0.21983888745307922f, -0.9595906734466553f, 0.4478398263454437f, 0.9050512909889221f, 0.35715410113334656f, 0.8422778248786926f, 0.28716304898262024f, 0.1154603362083435f, 0.08691664040088654f, -0.79843670129776f, 0.7402071356773376f, 0.856908917427063f, 0.3654607832431793f, 0.0542064905166626f, 0.8810041546821594f, 0.06481281667947769f, 0.9153907299041748f, -0.0075549413450062275f, 0.6126909852027893f, 0.733334481716156f, 0.39906105399131775f, 0.2156164050102234f, 0.8317331671714783f, 0.27297985553741455f, 0.40190139412879944f, -0.9787377715110779f, 0.17839978635311127f, 0.09260707348585129f, 0.5143088698387146f, 0.4566955864429474f, 0.9782191514968872f, 0.3459201455116272f, 0.04165533930063248f, -0.6262428164482117f, 0.5360924601554871f, 0.7121527791023254f, 0.3735312819480896f, 0.7111036777496338f, 0.38903185725212097f, 0.42755839228630066f, 0.04859112575650215f, -0.3986940383911133f, 0.0985424593091011f, 0.6071227788925171f, 0.017021531239151955f, 0.23359204828739166f, 0.3987477123737335f, 0.3794216215610504f, 0.6212815642356873f, -0.1067725270986557f, 0.6998281478881836f, 0.8525787591934204f, 0.8194635510444641f, 0.5156749486923218f, 0.6309813261032104f, 0.14690053462982178f, 0.23481492698192596f, -0.6692904829978943f, 0.3331022262573242f, 0.9632400870323181f, 0.942275881767273f, 0.45787110924720764f, 0.37034982442855835f, 0.5990343689918518f, 0.3653930723667145f, -0.550219714641571f, 0.3775915503501892f, 0.649893581867218f, 0.45074567198753357f, 0.4521602988243103f, 0.33019161224365234f, 0.9200924634933472f, 0.6336539387702942f, -0.9913893938064575f, 0.6109431385993958f, 0.4626769423484802f, 0.3666764795780182f, 0.5438408255577087f, 0.21289697289466858f, 0.25773245096206665f, 0.23968647420406342f, -0.9278151988983154f, 0.6977630257606506f, 0.25890570878982544f, 0.9078007340431213f, 0.6964320540428162f, 0.011091473512351513f, 0.6072418093681335f, 0.02237027697265148f, -0.08842596411705017f, 0.2834007740020752f, 0.0992390364408493f, 0.06918155401945114f, 0.7911590337753296f, 0.3930562436580658f, 0.8224740028381348f, 0.6880872845649719f, -0.14500020444393158f, 0.9870249629020691f, 0.18044884502887726f, 0.4208804666996002f, 0.5684735178947449f, 0.31157881021499634f, 0.6373810768127441f, 0.44246986508369446f, -0.3219981789588928f, 0.312619149684906f, 0.8722897171974182f, 0.8076629638671875f, 0.7220999598503113f, 0.8560093641281128f, 0.2786513566970825f, 0.6014882326126099f, -0.13854065537452698f, 0.8760932683944702f, 0.012612669728696346f, 0.2580602169036865f, 0.848020613193512f, 0.16678263247013092f, 0.39494258165359497f, 0.02678084746003151f, -0.054726775735616684f, 0.5559869408607483f, 0.7213585376739502f, 0.7464368939399719f, 0.5622663497924805f, 0.10530909895896912f, 0.6843199729919434f, 0.6259945034980774f, -0.017614612355828285f, 0.8094946146011353f, 0.44718149304389954f, 0.1768752932548523f, 0.0853005200624466f, 0.29668721556663513f, 0.6685695648193359f, 0.839043140411377f, -0.3643515110015869f, 0.05469350889325142f, 0.3668299913406372f, 0.08471830934286118f, 0.01091979444026947f, 0.7689253687858582f, 0.3477800190448761f, 0.39740926027297974f, -0.4193771779537201f, 0.9908077716827393f, 0.7590086460113525f, 0.927154004573822f, 0.8556278347969055f, 0.031027507036924362f, 0.7517848014831543f, 0.8636539578437805f, -0.7878080010414124f, 0.3216811418533325f, 0.7154046893119812f, 0.09374283254146576f, 0.15191490948200226f, 0.7119295001029968f, 0.5632749795913696f, 0.7724762558937073f, -0.10086240619421005f, 0.27194109559059143f, 0.7986751794815063f, 0.09856276214122772f, 0.8566686511039734f, 0.43502041697502136f, 0.014369608834385872f, 0.6076424717903137f, -0.6878857016563416f, 0.07951764017343521f, 0.5980269908905029f, 0.6097196936607361f, 0.38860321044921875f, 0.6731060743331909f, 0.2613101005554199f, 0.06017011031508446f, -0.7392458915710449f, 0.686650812625885f, 0.2459191232919693f, 0.4951300323009491f, 0.5930199027061462f, 0.029237542301416397f, 0.4221394658088684f, 0.018714213743805885f, -0.517309308052063f, 0.3316619098186493f, 0.29545480012893677f, 0.7027825117111206f, 0.18456736207008362f, 0.9670054316520691f, 0.7567027807235718f, 0.3019777834415436f, -0.09695199877023697f, 0.1338140368461609f, 0.791449785232544f, 0.9699738621711731f, 0.09114599227905273f, 0.7624095678329468f, 0.5361694097518921f, 0.09182247519493103f, -0.28908616304397583f, 0.6787664294242859f, 0.03368707746267319f, 0.6969355940818787f, 0.5662027597427368f, 0.617324709892273f, 0.6210792660713196f, 0.6020500063896179f, -0.6978409290313721f, 0.36065036058425903f, 0.5212374925613403f, 0.9595285654067993f, 0.21460628509521484f, 0.48352184891700745f, 0.7621456384658813f, 0.5115317702293396f, -0.1606842279434204f, 0.3049049377441406f, 0.6834686994552612f, 0.19006694853305817f, 0.5350556373596191f, 0.5409301519393921f, 0.21875318884849548f, 0.49546560645103455f, -0.41126808524131775f, 0.8098549246788025f, 0.6383562684059143f, 0.02018802799284458f, 0.3857554793357849f, 0.2878815531730652f, 0.8775863647460938f, 0.6150847673416138f, -0.12718968093395233f, 0.1906416416168213f, 0.04951340705156326f, 0.39341747760772705f, 0.6462241411209106f, 0.5745751261711121f, 0.3416377902030945f, 0.5755965113639832f, -0.19807134568691254f, 0.7538582682609558f, 0.8889830112457275f, 0.8636934161186218f, 0.06778939068317413f, 0.08239584416151047f, 0.29686102271080017f, 0.8547099828720093f, -0.42768344283103943f, 0.2528081238269806f, 0.6681565642356873f, 0.7418393492698669f, 0.08164319396018982f, 0.7479462623596191f, 0.8115252256393433f, 0.7436510920524597f, -0.4447903037071228f, 0.28649547696113586f, 0.7202584743499756f, 0.018462693318724632f, 0.5547473430633545f, 0.8628146052360535f, 0.486209899187088f, 0.5466890931129456f, -0.5764071941375732f, 0.13320736587047577f, 0.4313037693500519f, 0.7920327186584473f, 0.7107272744178772f, 0.4345558285713196f, 0.8162958025932312f, 0.2573563754558563f, -0.9332738518714905f, 0.3965754210948944f, 0.06208106502890587f, 0.010586987249553204f, 0.9317112565040588f, 0.6569917798042297f, 0.4350057542324066f, 0.7270885705947876f, -0.23026277124881744f, 0.09640809148550034f, 0.7922936677932739f, 0.5791829824447632f, 0.6936526894569397f, 0.5299581289291382f, 0.5762085318565369f, 0.3187909424304962f, -0.5484635233879089f, 0.22135671973228455f, 0.32183897495269775f, 0.31184348464012146f, 0.0661095529794693f, 0.9902249574661255f, 0.34617185592651367f, 0.9226720929145813f, -0.21953287720680237f, 0.05037868395447731f, 0.8333597779273987f, 0.41406869888305664f, 0.7545977234840393f, 0.4709206819534302f, 0.16897346079349518f, 0.34772083163261414f, -0.5361233353614807f, 0.3737221658229828f, 0.9814756512641907f, 0.639661431312561f, 0.7116144895553589f, 0.4122391641139984f, 0.6798588037490845f, 0.051106102764606476f, -0.3979780673980713f, 0.44877660274505615f, 0.8885287642478943f, 0.11347301304340363f, 0.312938928604126f, 0.8172827363014221f, 0.5579470992088318f, 0.7907732129096985f, -0.3252505660057068f, 0.12208756804466248f, 0.8500216007232666f, 0.01585155725479126f, 0.20288445055484772f, 0.6657299399375916f, 0.12867958843708038f, 0.40491676330566406f, -0.38311058282852173f, 0.6950218081474304f, 0.6570680141448975f, 0.37365394830703735f, 0.6713294386863708f, 0.16182471811771393f, 0.8668895959854126f, 0.6813985705375671f, -0.030223235487937927f, 0.9227741360664368f, 0.9121068120002747f, 0.5595481395721436f, 0.5730186104774475f, 0.289378821849823f, 0.5740906000137329f, 0.2607540190219879f, -0.26725098490715027f, 0.20682285726070404f, 0.19818167388439178f, 0.5718388557434082f, 0.5648156404495239f, 0.28996506333351135f, 0.0014152841176837683f, 0.9720141291618347f, -0.6614707708358765f, 0.8660023808479309f, 0.4584815204143524f, 0.7686945796012878f, 0.578277587890625f, 0.6064056158065796f, 0.5514493584632874f, 0.7091630101203918f, -0.3194684088230133f, 0.15191440284252167f, 0.29456576704978943f, 0.22623121738433838f, 0.3501364290714264f, 0.020950570702552795f, 0.32959628105163574f, 0.4416596293449402f, -0.06803231686353683f, 0.8410183191299438f, 0.008292577229440212f, 0.15429890155792236f, 0.9850075244903564f, 0.7724277377128601f, 0.5576082468032837f, 0.9965870976448059f, -0.21293146908283234f, 0.2323429137468338f, 0.9496766328811646f, 0.3736704885959625f, 0.9818214774131775f, 0.6997653245925903f, 0.9746350049972534f, 0.19928571581840515f, -0.44806668162345886f, 0.17053812742233276f, 0.5854223370552063f, 0.7636781334877014f, 0.05979287996888161f, 0.024478673934936523f, 0.7320849895477295f, 0.43981385231018066f, -0.3585832118988037f, 0.9650896191596985f, 0.41818246245384216f, 0.8912603855133057f, 0.17540153861045837f, 0.7802974581718445f, 0.02628430910408497f, 0.9496892094612122f, -0.1189633458852768f, 0.12970639765262604f, 0.28208133578300476f, 0.016746757552027702f, 0.7859082221984863f, 0.9523947834968567f, 0.442699134349823f, 0.8763079047203064f, -0.3276914954185486f, 0.5691182613372803f, 0.03306714445352554f, 0.29971715807914734f, 0.4180509150028229f, 0.6940785050392151f, 0.15208324790000916f, 0.2797686755657196f, -0.2098878026008606f, 0.5007427930831909f, 0.3244757354259491f, 0.666161835193634f, 0.46747127175331116f, 0.2596801817417145f, 0.6885274648666382f, 0.4306353032588959f, -0.9557551145553589f, 0.04197562113404274f, 0.13027340173721313f, 0.48479554057121277f, 0.8990371227264404f, 0.25216126441955566f, 0.006152040790766478f, 0.6132809519767761f, -0.18006551265716553f, 0.675344705581665f, 0.6942197680473328f, 0.731023371219635f, 0.3882514536380768f, 0.34748372435569763f, 0.5562260150909424f, 0.13597571849822998f, -0.4837874472141266f, 0.21821293234825134f, 0.6761711239814758f, 0.5647134780883789f, 0.6646028757095337f, 0.8279608488082886f, 0.3047114312648773f, 0.598180890083313f, -0.16715483367443085f, 0.40504366159439087f, 0.7446907758712769f, 0.978287935256958f, 0.3305358290672302f, 0.30450430512428284f, 0.7735396027565002f, 0.20231600105762482f, -0.02924126759171486f, 0.07142455875873566f, 0.534968376159668f, 0.9442000985145569f, 0.8781101107597351f, 0.19963917136192322f, 0.029589921236038208f, 0.8294009566307068f, -0.3732461929321289f, 0.49663373827934265f, 0.7674719095230103f, 0.073756143450737f, 0.4335505962371826f, 0.7079633474349976f, 0.8259373307228088f, 0.019488710910081863f, -0.7935985326766968f, 0.08449067920446396f, 0.31851476430892944f, 0.8361495733261108f, 0.19041427969932556f, 0.3157324194908142f, 0.3367769122123718f, 0.23008094727993011f, -0.8915138840675354f, 0.3404487371444702f, 0.6281368732452393f, 0.9271761178970337f, 0.18325093388557434f, 0.07227087765932083f, 0.7130718231201172f, 0.4496075510978699f, -0.6078712344169617f, 0.23587636649608612f, 0.03774907812476158f, 0.5155775547027588f, 0.5708128213882446f, 0.7532306909561157f, 0.6647844910621643f, 0.9288338422775269f, -0.8040325045585632f, 0.03320466727018356f, 0.09162396937608719f, 0.6111520528793335f, 0.22394387423992157f, 0.03899578005075455f, 0.09350976347923279f, 0.4631883502006531f, -0.21415476500988007f, 0.9630467295646667f, 0.2598896324634552f, 0.9645819067955017f, 0.4068434238433838f, 0.02216530218720436f, 0.40197113156318665f, 0.33820128440856934f, -0.6482378840446472f, 0.0849258229136467f, 0.16617922484874725f, 0.5086949467658997f, 0.5366050004959106f, 0.11857938766479492f, 0.38030970096588135f, 0.8625600934028625f, -0.9168334007263184f, 0.9110574126243591f, 0.25697973370552063f, 0.05413932353258133f, 0.49402299523353577f, 0.09263437986373901f, 0.4209686517715454f, 0.4783099889755249f, -0.9728642106056213f, 0.8905662298202515f, 0.7498005628585815f, 0.5604617595672607f, 0.2798365354537964f, 0.20981095731258392f, 0.9163956642150879f, 0.5814818739891052f, -0.27059274911880493f, 0.8492231965065002f, 0.6648664474487305f, 0.9846417903900146f, 0.5565967559814453f, 0.97004634141922f, 0.26653021574020386f, 0.648116409778595f, -0.4758726954460144f, 0.9165980815887451f, 0.5001253485679626f, 0.4451143145561218f, 0.9689169526100159f, 0.6304513216018677f, 0.10524018853902817f, 0.7981559634208679f, -0.677851140499115f, 0.2004341334104538f, 0.6080682873725891f, 0.9788087010383606f, 0.18016372621059418f, 0.31943750381469727f, 0.439528226852417f, 0.6045070886611938f, -0.9834738969802856f, 0.17246825993061066f, 0.3475964367389679f, 0.577628493309021f, 0.7183694243431091f, 0.21382173895835876f, 0.48043185472488403f, 0.8205974698066711f, -0.20089173316955566f, 0.7753589153289795f, 0.5071290731430054f, 0.30927425622940063f, 0.4169940948486328f, 0.10481434315443039f, 0.6317101120948792f, 0.3360787630081177f, -0.19152571260929108f, 0.7430706024169922f, 0.21751464903354645f, 0.10585368424654007f, 0.740841269493103f, 0.8430477976799011f, 0.1250932663679123f, 0.05612439289689064f, -0.9577332735061646f, 0.7167832851409912f, 0.9957576394081116f, 0.006588407326489687f, 0.1825491040945053f, 0.35038211941719055f, 0.6901392340660095f, 0.915641188621521f, -0.6591182351112366f, 0.12975181639194489f, 0.2950376570224762f, 0.6346355676651001f, 0.9881988763809204f, 0.8729308247566223f, 0.12780539691448212f, 0.7554487586021423f, -0.05546732619404793f, 0.08252917230129242f, 0.8384830355644226f, 0.8371989727020264f, 0.9624392986297607f, 0.5308302640914917f, 0.4296092987060547f, 0.4176340103149414f, -0.3338634669780731f, 0.8070487380027771f, 0.6527805924415588f, 0.8911917805671692f, 0.4954097270965576f, 0.8181582093238831f, 0.3589875102043152f, 0.44754505157470703f, -0.4344668984413147f, 0.3537355959415436f, 0.5213349461555481f, 0.2941638231277466f, 0.9286671280860901f, 0.875968337059021f, 0.15883494913578033f, 0.4603377878665924f, -0.5562682151794434f, 0.9099859595298767f, 0.8975509405136108f, 0.12289776653051376f, 0.4054478108882904f, 0.009570809081196785f, 0.295061320066452f, 0.5860901474952698f, -0.07941581308841705f, 0.01513203326612711f, 0.42031437158584595f, 0.7325050830841064f, 0.5451654195785522f, 0.4586661756038666f, 0.4901959300041199f, 0.673590898513794f, -0.9588332772254944f, 0.5052648782730103f, 0.993757426738739f, 0.35226213932037354f, 0.4238780736923218f, 0.8801948428153992f, 0.7738646864891052f, 0.28653383255004883f, -0.8456802368164062f, 0.039699628949165344f, 0.4898070991039276f, 0.06425472348928452f, 0.03905373439192772f, 0.673221230506897f, 0.6513038873672485f, 0.5983673930168152f, -0.845553457736969f, 0.8013990521430969f, 0.7935695648193359f, 0.02240576408803463f, 0.32553666830062866f, 0.6741030812263489f, 0.6602820754051208f, 0.7082642912864685f, -0.22362664341926575f, 0.048080191016197205f, 0.896481990814209f, 0.11814334243535995f, 0.00898988638073206f, 0.0904543325304985f, 0.0033019117545336485f, 0.4633066654205322f, -0.40621981024742126f, 0.37200039625167847f, 0.8369619250297546f, 0.1787838190793991f, 0.4522396922111511f, 0.9300085306167603f, 0.8154387474060059f, 0.8625229001045227f, -0.42359039187431335f, 0.30059680342674255f, 0.9687580466270447f, 0.9839513301849365f, 0.4590100049972534f, 0.7234275341033936f, 0.5357480645179749f, 0.9705718159675598f, -0.8367967009544373f, 0.5362453460693359f, 0.4267219305038452f, 0.3306552767753601f, 0.9202241897583008f, 0.05806088447570801f, 0.3484857380390167f, 0.5453370809555054f, -0.22983931005001068f, 0.7622780799865723f, 0.22358164191246033f, 0.6340879201889038f, 0.6007121205329895f, 0.6460464596748352f, 0.008283022791147232f, 0.3836888074874878f, -0.049741972237825394f, 0.47991055250167847f, 0.28369441628456116f, 0.27492639422416687f, 0.8830851316452026f, 0.6539984941482544f, 0.7537190914154053f, 0.08028655499219894f, -0.8594200015068054f, 0.6103743314743042f, 0.5321940183639526f, 0.5371087193489075f, 0.0221384447067976f, 0.18081118166446686f, 0.7761903405189514f, 0.7477813959121704f, -0.9953823685646057f, 0.2715240716934204f, 0.46523743867874146f, 0.03723141923546791f, 0.7811445593833923f, 0.7763808369636536f, 0.860396146774292f, 0.17018917202949524f, -0.46739333868026733f, 0.038744498044252396f, 0.7799227833747864f, 0.864016056060791f, 0.4846195578575134f, 0.908868134021759f, 0.26628047227859497f, 0.5916927456855774f, -0.8178882002830505f, 0.9530433416366577f, 0.8697757720947266f, 0.23527634143829346f, 0.695941150188446f, 0.5908064246177673f, 0.5125755071640015f, 0.25303006172180176f, -0.6960205435752869f, 0.7529997229576111f, 0.2872960865497589f, 0.5782718658447266f, 0.3536209464073181f, 0.7259600162506104f, 0.7692898511886597f, 0.5413761138916016f, -0.5239277482032776f, 0.9061086773872375f, 0.6926467418670654f, 0.717857301235199f, 0.3584822416305542f, 0.032747380435466766f, 0.4520505368709564f, 0.011937541887164116f, -0.591895580291748f, 0.9633195400238037f, 0.2626534700393677f, 0.32145050168037415f, 0.3320077359676361f, 0.20548208057880402f, 0.4550568163394928f, 0.670590341091156f, -0.5602396726608276f, 0.6606017351150513f, 0.7885128259658813f, 0.3574523627758026f, 0.439168244600296f, 0.39672431349754333f, 0.17666760087013245f, 0.40059608221054077f, -0.7326012253761292f, 0.7814857363700867f, 0.870071530342102f, 0.9225850701332092f, 0.05975111946463585f, 0.02467554807662964f, 0.8509154319763184f, 0.3095104396343231f, -0.03065362758934498f, 0.9268482327461243f, 0.06257464736700058f, 0.6600292325019836f, 0.575607180595398f, 0.13222557306289673f, 0.8482028245925903f, 0.7091987133026123f, -0.15397638082504272f, 0.9300622344017029f, 0.02445727214217186f, 0.49895983934402466f, 0.20531287789344788f, 0.05337683483958244f, 0.2458208203315735f, 0.6020381450653076f, -0.18594615161418915f, 0.0462319552898407f, 0.47013941407203674f, 0.45315077900886536f, 0.2825959324836731f, 0.3574177622795105f, 0.45457687973976135f, 0.005002864170819521f, -0.1028461828827858f, 0.35699954628944397f, 0.35694780945777893f, 0.5093987584114075f, 0.5200936198234558f, 0.3804170787334442f, 0.9793781042098999f, 0.07634273916482925f, -0.09038320183753967f, 0.8240712285041809f, 0.9971902966499329f, 0.22709135711193085f, 0.7117510437965393f, 0.2979166805744171f, 0.4840947389602661f, 0.205315500497818f, -0.04394254833459854f, 0.3695394992828369f, 0.6529965996742249f, 0.233026921749115f, 0.9353073239326477f, 0.8053308725357056f, 0.25401780009269714f, 0.9427227973937988f, -0.5850463509559631f, 0.2019040733575821f, 0.7712884545326233f, 0.4657934606075287f, 0.7630996704101562f, 0.6308419108390808f, 0.5758159160614014f, 0.4829947054386139f, -0.9330980181694031f, 0.344066321849823f, 0.3955029845237732f, 0.007191067095845938f, 0.9787857532501221f, 0.019773269072175026f, 0.18028706312179565f, 0.8103294968605042f, -0.06819196790456772f, 0.09417317062616348f, 0.20017096400260925f, 0.4757063686847687f, 0.48213866353034973f, 0.8828403353691101f, 0.5890823602676392f, 0.3531567454338074f, -0.3266785144805908f, 0.5094590187072754f, 0.7856016755104065f, 0.7093802690505981f, 0.5805476903915405f, 0.7799642086029053f, 0.23321078717708588f, 0.5988847613334656f, -0.08350169658660889f, 0.8286000490188599f, 0.8331344723701477f, 0.20944716036319733f, 0.9725663661956787f, 0.6837334036827087f, 0.23563842475414276f, 0.1114652007818222f, -0.04127930849790573f, 0.861104428768158f, 0.5933923721313477f, 0.1255430281162262f, 0.8681300282478333f, 0.23394490778446198f, 0.06345301866531372f, 0.32500746846199036f, -0.6924082636833191f, 0.715977132320404f, 0.47562375664711f, 0.1581645905971527f, 0.6245629787445068f, 0.6350677013397217f, 0.47763270139694214f, 0.5218604207038879f, -0.44475314021110535f, 0.9883589148521423f, 0.17783720791339874f, 0.9691201448440552f, 0.7371574640274048f, 0.2799459397792816f, 0.9283799529075623f, 0.36883851885795593f, -0.5433052778244019f, 0.7339169383049011f, 0.7597161531448364f, 0.22232244908809662f, 0.13891564309597015f, 0.7162091135978699f, 0.10203736275434494f, 0.7863969802856445f, -0.09793758392333984f, 0.08272158354520798f, 0.06929411739110947f, 0.2876312732696533f, 0.2515351474285126f, 0.9781405329704285f, 0.32935619354248047f, 0.1514403522014618f, -0.7805795073509216f, 0.4396588206291199f, 0.5341600179672241f, 0.08043994009494781f, 0.9858793020248413f, 0.2872086465358734f, 0.5831618905067444f, 0.4913329482078552f, -0.7883275151252747f, 0.7289077639579773f, 0.37710174918174744f, 0.6398155689239502f, 0.5576426982879639f, 0.7587305307388306f, 0.04505342245101929f, 0.36055228114128113f, -0.744148313999176f, 0.2772783935070038f, 0.7646996974945068f, 0.947160542011261f, 0.1204896867275238f, 0.323166161775589f, 0.9931287169456482f, 0.6044021248817444f, -0.9083681106567383f, 0.4053356945514679f, 0.8335109353065491f, 0.5411781072616577f, 0.20381174981594086f, 0.4312644898891449f, 0.6042803525924683f, 0.1900952309370041f, -0.7421908974647522f, 0.07866600155830383f, 0.9772084951400757f, 0.10729260742664337f, 0.3923325538635254f, 0.30558812618255615f, 0.6701117157936096f, 0.10259649157524109f, -0.15463219583034515f, 0.9787874817848206f, 0.3725113868713379f, 0.4867554008960724f, 0.22860151529312134f, 0.6741013526916504f, 0.07522255182266235f, 0.29131880402565f, -0.29138243198394775f, 0.981066882610321f, 0.7853763699531555f, 0.363998144865036f, 0.3113759756088257f, 0.17099277675151825f, 0.630984365940094f, 0.25850027799606323f, -0.6338139772415161f, 0.33599594235420227f, 0.7729310393333435f, 0.14880292117595673f, 0.053806159645318985f, 0.1803968846797943f, 0.9053244590759277f, 0.6516568064689636f, -0.5603159070014954f, 0.7565913796424866f, 0.09029193222522736f, 0.7516254782676697f, 0.947889506816864f, 0.24501082301139832f, 0.0024814156349748373f, 0.19230793416500092f, -0.5961729288101196f, 0.14762242138385773f, 0.9469332098960876f, 0.12338552623987198f, 0.5497122406959534f, 0.11443574726581573f, 0.34186726808547974f, 0.9527332186698914f, -0.16946041584014893f, 0.7459638118743896f, 0.015064239501953125f, 0.8895142078399658f, 0.9841530323028564f, 0.6165193915367126f, 0.33437737822532654f, 0.9127079844474792f, -0.6325571537017822f, 0.04127494618296623f, 0.8817164897918701f, 0.16888146102428436f, 0.9997180104255676f, 0.9026392102241516f, 0.20863698422908783f, 0.03005531057715416f, -0.23853929340839386f, 0.11560818552970886f, 0.956473171710968f, 0.6068459749221802f, 0.6143065690994263f, 0.2270449846982956f, 0.35614848136901855f, 0.7474701404571533f, -0.07858150452375412f, 0.05161471664905548f, 0.26306551694869995f, 0.10198606550693512f, 0.6440097689628601f, 0.3985918462276459f, 0.7904298305511475f, 0.8966982960700989f, -0.8773238658905029f, 0.8574565649032593f, 0.1911626011133194f, 0.7461848855018616f, 0.03555966913700104f, 0.4398939311504364f, 0.3690841794013977f, 0.9846489429473877f, -0.4530359208583832f, 0.9525443315505981f, 0.43316325545310974f, 0.5978875756263733f, 0.044281914830207825f, 0.010294657200574875f, 0.5118671655654907f, 0.3299502730369568f, -0.34560325741767883f, 0.7431355714797974f, 0.16189169883728027f, 0.11572965234518051f, 0.4174138307571411f, 0.8396960496902466f, 0.9226711988449097f, 0.43295419216156006f, -0.29527124762535095f, 0.17102748155593872f, 0.7099395990371704f, 0.6492990255355835f, 0.28897103667259216f, 0.9431401491165161f, 0.22655336558818817f, 0.2505294680595398f, -0.6283953785896301f, 0.06544078886508942f, 0.6653873324394226f, 0.9790551662445068f, 0.7797723412513733f, 0.9112390875816345f, 0.2553825378417969f, 0.6322450041770935f, -0.9172882437705994f, 0.09674641489982605f, 0.44055017828941345f, 0.1896892786026001f, 0.5514092445373535f, 0.08990787714719772f, 0.12471486628055573f, 0.6913546323776245f, -0.808731198310852f, 0.3013533651828766f, 0.6439438462257385f, 0.02673383243381977f, 0.5422048568725586f, 0.9596866369247437f, 0.3315642178058624f, 0.6265388131141663f, -0.10990075767040253f, 0.8464183807373047f, 0.6865875720977783f, 0.6194475293159485f, 0.7739723324775696f, 0.3360387682914734f, 0.0033669525291770697f, 0.35966816544532776f, -0.8243694305419922f, 0.07249558717012405f, 0.5308659672737122f, 0.7415115237236023f, 0.0020250817760825157f, 0.8568634986877441f, 0.3402416408061981f, 0.128152534365654f, -0.8401597142219543f, 0.6921029090881348f, 0.44418400526046753f, 0.0409504733979702f, 0.018164362758398056f, 0.14996181428432465f, 0.8633564710617065f, 0.0010150889866054058f, -0.35746699571609497f, 0.8109773993492126f, 0.3259657621383667f, 0.7576730251312256f, 0.845468282699585f, 0.5775684118270874f, 0.7235901355743408f, 0.317489892244339f, -0.30024784803390503f, 0.3111768066883087f, 0.5002538561820984f, 0.7768069505691528f, 0.8330472707748413f, 0.09048303961753845f, 0.8227598071098328f, 0.6601259708404541f, -0.15504679083824158f, 0.7637980580329895f, 0.5476281642913818f, 0.8938215374946594f, 0.1730586439371109f, 0.04477756470441818f, 0.5679687857627869f, 0.24850967526435852f, -0.8574439287185669f, 0.6929284334182739f, 0.7570871710777283f, 0.3438096046447754f, 0.30186524987220764f, 0.06268260627985f, 0.21283912658691406f, 0.007709682919085026f, -0.49398353695869446f, 0.5130795240402222f, 0.12858633697032928f, 0.464261919260025f, 0.16043218970298767f, 0.34452757239341736f, 0.0983334481716156f, 0.6131796836853027f, -0.1774825006723404f, 0.27053529024124146f, 0.526723325252533f, 0.9321634769439697f, 0.6449347734451294f, 0.5338690280914307f, 0.4674304127693176f, 0.9044675827026367f, -0.8803032040596008f, 0.17467403411865234f, 0.31493085622787476f, 0.7168556451797485f, 0.9242559671401978f, 0.06698178499937057f, 0.7579479217529297f, 0.4964180886745453f, -0.07567304372787476f, 0.17318470776081085f, 0.9976656436920166f, 0.6644458174705505f, 0.11916586756706238f, 0.7191925644874573f, 0.4601004719734192f, 0.30081644654273987f, -0.238340362906456f, 0.8165369033813477f, 0.8614946007728577f, 0.4331308901309967f, 0.9734402298927307f, 0.5767503976821899f, 0.7054798603057861f, 0.5252938866615295f, -0.3334711492061615f, 0.11475207656621933f, 0.2163052260875702f, 0.6118928790092468f, 0.7187875509262085f, 0.9403335452079773f, 0.23637817800045013f, 0.47514808177948f, -0.8418305516242981f, 0.9157339334487915f, 0.03980730473995209f, 0.676824152469635f, 0.35316959023475647f, 0.42355677485466003f, 0.9473837614059448f, 0.28419235348701477f, -0.12595027685165405f, 0.43732205033302307f, 0.37932518124580383f, 0.851516842842102f, 0.016111008822917938f, 0.3775729835033417f, 0.27421459555625916f, 0.2697254717350006f, -0.3453596532344818f, 0.8282147645950317f, 0.4295634329319f, 0.7247188687324524f, 0.6988692283630371f, 0.10956746339797974f, 0.18902014195919037f, 0.8121922016143799f, -0.9029249548912048f, 0.812404215335846f, 0.9870736598968506f, 0.27518102526664734f, 0.3592652976512909f, 0.21303270757198334f, 0.26806318759918213f, 0.8404551148414612f, -0.5507922768592834f, 0.8745683431625366f, 0.5034745931625366f, 0.3640671968460083f, 0.812800407409668f, 0.1756354421377182f, 0.9284740090370178f, 0.21218648552894592f, -0.6234568953514099f, 0.9883828163146973f, 0.5667160153388977f, 0.1579606682062149f, 0.39175087213516235f, 0.9352291822433472f, 0.02487015165388584f, 0.5655571818351746f, -0.09625706076622009f, 0.48545488715171814f, 0.8140901923179626f, 0.014993988908827305f, 0.7003141641616821f, 0.8717542886734009f, 0.019631624221801758f, 0.23004359006881714f, -0.8287176489830017f, 0.3745889961719513f, 0.9129638075828552f, 0.29655537009239197f, 0.16667704284191132f, 0.2882205545902252f, 0.2457471638917923f, 0.4755256175994873f, -0.19242902100086212f, 0.1674318164587021f, 0.9696478247642517f, 0.2076265662908554f, 0.08173833042383194f, 0.15998078882694244f, 0.7736113667488098f, 0.9948217868804932f, -0.5494101047515869f, 0.8907313942909241f, 0.982116162776947f, 0.10621248930692673f, 0.001778686884790659f, 0.0874943658709526f, 0.38794028759002686f, 0.6642045974731445f, -0.4296030104160309f, 0.8748411536216736f, 0.0037987723480910063f, 0.6290530562400818f, 0.6686503291130066f, 0.8615908026695251f, 0.7633976936340332f, 0.7902849316596985f, -0.7051461935043335f, 0.8630889058113098f, 0.8981894254684448f, 0.20741824805736542f, 0.1331937164068222f, 0.6569769382476807f, 0.585060715675354f, 0.9908561110496521f, -0.9571760296821594f, 0.7663341760635376f, 0.7041684985160828f, 0.5783565044403076f, 0.15748091042041779f, 0.08793884515762329f, 0.05693185329437256f, 0.5571058392524719f, -0.5889347791671753f, 0.6177483201026917f, 0.9871569871902466f, 0.6346295475959778f, 0.04331241548061371f, 0.1513666957616806f, 0.28161120414733887f, 0.4371502995491028f, -0.9377087950706482f, 0.05490110442042351f, 0.7684541344642639f, 0.04954340308904648f, 0.43443384766578674f, 0.08285287767648697f, 0.5056812763214111f, 0.9844139218330383f, -0.3190193474292755f, 0.1482716202735901f, 0.896582841873169f, 0.6213997602462769f, 0.3383128046989441f, 0.3882858157157898f, 0.35635119676589966f, 0.6639356017112732f, -0.8500449657440186f, 0.6392898559570312f, 0.7431687712669373f, 0.6048014760017395f, 0.25406575202941895f, 0.024157611653208733f, 0.7228133678436279f, 0.6511399745941162f, -0.7114103436470032f, 0.3109871447086334f, 0.3777240216732025f, 0.21773886680603027f, 0.3779856562614441f, 0.414275586605072f, 0.3110393285751343f, 0.7931544184684753f, -0.7393930554389954f, 0.1414618194103241f, 0.42630934715270996f, 0.8678199648857117f, 0.9908139109611511f, 0.8100768327713013f, 0.6658908724784851f, 0.12196654081344604f, -0.04581572115421295f, 0.9646046161651611f, 0.12374953925609589f, 0.024327842518687248f, 0.2105521261692047f, 0.724763810634613f, 0.4683970808982849f, 0.4761485755443573f, -0.0991910770535469f, 0.3501300811767578f, 0.825579047203064f, 0.05584943667054176f, 0.12265858054161072f, 0.3222450017929077f, 0.5417388677597046f, 0.19493241608142853f, -0.5847507119178772f, 0.38511595129966736f, 0.9104032516479492f, 0.4814039468765259f, 0.2281709462404251f, 0.794228732585907f, 0.2510201036930084f, 0.6915052533149719f, -0.38462337851524353f, 0.2795434892177582f, 0.7267798781394958f, 0.977540135383606f, 0.4385823607444763f, 0.5602309703826904f, 0.11455684155225754f, 0.21045683324337006f, -0.19706295430660248f, 0.3734979033470154f, 0.7634388208389282f, 0.6782359480857849f, 0.7347209453582764f, 0.22459159791469574f, 0.7024070620536804f, 0.506697952747345f, -0.7459802031517029f, 0.8558850288391113f, 0.05113084241747856f, 0.6802550554275513f, 0.217670276761055f, 0.12920881807804108f, 0.7994658350944519f, 0.34682396054267883f, -0.9798486828804016f, 0.048965130001306534f, 0.08935940265655518f, 0.428041011095047f, 0.8925387859344482f, 0.8850874900817871f, 0.771973192691803f, 0.9652717113494873f, -0.35199636220932007f, 0.5060732960700989f, 0.39447110891342163f, 0.9106725454330444f, 0.8100168704986572f, 0.2666122019290924f, 0.29479488730430603f, 0.1854240596294403f, -0.5782670974731445f, 0.4006507992744446f, 0.910381019115448f, 0.7169237732887268f, 0.05059725418686867f, 0.6245540380477905f, 0.7150274515151978f, 0.8918170928955078f, -0.21765834093093872f, 0.11130653321743011f, 0.9728332161903381f, 0.29440635442733765f, 0.6446227431297302f, 0.983508825302124f, 0.4274592995643616f, 0.26320990920066833f, -0.8109613060951233f, 0.7824759483337402f, 0.1705089807510376f, 0.33200564980506897f, 0.8261623978614807f, 0.6082013249397278f, 0.07709168642759323f, 0.13338348269462585f, -0.9743919372558594f, 0.9666141867637634f, 0.7865148782730103f, 0.7435668706893921f, 0.9067660570144653f, 0.1703774631023407f, 0.06755080819129944f, 0.9835125803947449f, -0.9922998547554016f, 0.3070111870765686f, 0.23492807149887085f, 0.22708894312381744f, 0.5353682041168213f, 0.48867368698120117f, 0.543570876121521f, 0.24092452228069305f, -0.9786099195480347f, 0.7045390009880066f, 0.08128266781568527f, 0.49180567264556885f, 0.3501981198787689f, 0.3882890045642853f, 0.7953492403030396f, 0.7387325167655945f, -0.3803306818008423f, 0.41856974363327026f, 0.3312056064605713f, 0.7057884335517883f, 0.1116684153676033f, 0.7650250196456909f, 0.7151912450790405f, 0.16608496010303497f, -0.24174629151821136f, 0.5475298762321472f, 0.03225094452500343f, 0.9599409699440002f, 0.7637659311294556f, 0.6911613941192627f, 0.8343602418899536f, 0.476618230342865f, -0.9959296584129333f, 0.39752426743507385f, 0.7346381545066833f, 0.09867580980062485f, 0.5790196657180786f, 0.8483794927597046f, 0.7447617650032043f, 0.17154087126255035f, -0.8917225003242493f, 0.8335119485855103f, 0.9031344652175903f, 0.6833791136741638f, 0.37158963084220886f, 0.5186612010002136f, 0.23595312237739563f, 0.4304613769054413f, -0.1826440840959549f, 0.5474139451980591f, 0.5341535806655884f, 0.41355231404304504f, 0.40357235074043274f, 0.8325862884521484f, 0.8689221143722534f, 0.4797590374946594f, -0.529254674911499f, 0.9570884704589844f, 0.6383726000785828f, 0.2690768241882324f, 0.613798975944519f, 0.4929340183734894f, 0.2966861426830292f, 0.03547624126076698f, -0.9315043091773987f, 0.22942598164081573f, 0.715189516544342f, 0.25316768884658813f, 0.346926748752594f, 0.4821951389312744f, 0.8201841115951538f, 0.7808155417442322f, -0.5288724303245544f, 0.6555580496788025f, 0.3246077001094818f, 0.19930516183376312f, 0.07513915747404099f, 0.3546521067619324f, 0.3186289668083191f, 0.7491073608398438f, -0.2392406314611435f, 0.5215702652931213f, 0.3415420651435852f, 0.13504329323768616f, 0.708870530128479f, 0.44194260239601135f, 0.1813652366399765f, 0.05644096061587334f, -0.5169374942779541f, 0.14700236916542053f, 0.7697039246559143f, 0.11169978231191635f, 0.6905611157417297f, 0.926284670829773f, 0.3232102692127228f, 0.6539837121963501f, -0.09758280962705612f, 0.5185990929603577f, 0.3448781371116638f, 0.2789575457572937f, 0.4679048955440521f, 0.36683887243270874f, 0.9399113655090332f, 0.4949987828731537f, -0.9986100196838379f, 0.2571299970149994f, 0.39528021216392517f, 0.029897280037403107f, 0.5557231903076172f, 0.5847218036651611f, 0.29097381234169006f, 0.16529060900211334f, -0.4323456883430481f, 0.9577469825744629f, 0.06384365260601044f, 0.3420529067516327f, 0.5201932787895203f, 0.0591825470328331f, 0.8778191804885864f, 0.3784383237361908f, -0.4206010699272156f, 0.7521267533302307f, 0.628480076789856f, 0.38147369027137756f, 0.5572671294212341f, 0.3800983726978302f, 0.5379423499107361f, 0.46111321449279785f, -0.9381077885627747f, 0.3048907518386841f, 0.45253345370292664f, 0.1807892769575119f, 0.34845882654190063f, 0.7034409046173096f, 0.41797250509262085f, 0.7364615797996521f, -0.2665344476699829f, 0.45810168981552124f, 0.1781587153673172f, 0.06742869317531586f, 0.6846743822097778f, 0.2258179485797882f, 0.4173889756202698f, 0.6344704627990723f, -0.8653790354728699f, 0.4595865309238434f, 0.28982308506965637f, 0.6942111849784851f, 0.08190320432186127f, 0.08676232397556305f, 0.8002302050590515f, 0.9881100654602051f, -0.54543137550354f, 0.4576736390590668f, 0.2880699634552002f, 0.9134833812713623f, 0.8484151363372803f, 0.896285891532898f, 0.6007772088050842f, 0.43642836809158325f, -0.5162505507469177f, 0.9667873382568359f, 0.8877289295196533f, 0.819338858127594f, 0.18204744160175323f, 0.09406040608882904f, 0.6606918573379517f, 0.837020993232727f, -0.5074947476387024f, 0.7334137558937073f, 0.4876847267150879f, 0.2924369275569916f, 0.637001097202301f, 0.9889281988143921f, 0.4889375567436218f, 0.036442145705223083f, -0.9825100898742676f, 0.6623260974884033f, 0.9734707474708557f, 0.726101815700531f, 0.7849080562591553f, 0.9267266988754272f, 0.32133200764656067f, 0.9384958148002625f, -0.5488156676292419f, 0.018900969997048378f, 0.4148555397987366f, 0.339180052280426f, 0.48721203207969666f, 0.3076029419898987f, 0.8375768065452576f, 0.9466830492019653f, -0.7139059901237488f, 0.13999219238758087f, 0.15506350994110107f, 0.06924352049827576f, 0.1413123607635498f, 0.9552755355834961f, 0.4835107624530792f, 0.7355546355247498f, -0.5882468819618225f, 0.48836442828178406f, 0.3444642424583435f, 0.2881788909435272f, 0.20517900586128235f, 0.6427797675132751f, 0.9446759819984436f, 0.7761804461479187f, -0.14739108085632324f, 0.5731103420257568f, 0.2845308780670166f, 0.6723713874816895f, 0.585686206817627f, 0.9965376853942871f, 0.11818964034318924f, 0.12934766709804535f, -0.2824871242046356f, 0.7400326132774353f, 0.5658823847770691f, 0.638667106628418f, 0.05317236855626106f, 0.1272280216217041f, 0.8904669284820557f, 0.18141719698905945f, -0.7840419411659241f, 0.653518795967102f, 0.2942602038383484f, 0.01585291139781475f, 0.4398071765899658f, 0.7374216318130493f, 0.6871134042739868f, 0.25833794474601746f, -0.6889682412147522f, 0.45905593037605286f, 0.014185402542352676f, 0.07085683196783066f, 0.36396101117134094f, 0.5872927904129028f, 0.510975182056427f, 0.26608967781066895f, -0.835481584072113f, 0.6443755030632019f, 0.6641927361488342f, 0.5779001116752625f, 0.7406139373779297f, 0.272263765335083f, 0.9438633322715759f, 0.3299434781074524f, -0.06795020401477814f, 0.5021567344665527f, 0.48717552423477173f, 0.3049526810646057f, 0.5043078064918518f, 0.6855690479278564f, 0.31698304414749146f, 0.19008250534534454f, -0.6645886301994324f, 0.8883990049362183f, 0.028254453092813492f, 0.25954902172088623f, 0.8860825300216675f, 0.9365979433059692f, 0.6908591389656067f, 0.18394967913627625f, -0.3604640066623688f, 0.40255895256996155f, 0.3660016655921936f, 0.4668593108654022f, 0.6162444353103638f, 0.373351514339447f, 0.48459163308143616f, 0.6273176074028015f, -0.2253904789686203f, 0.8598783016204834f, 0.7039534449577332f, 0.5023987889289856f, 0.9329602718353271f, 0.3894284665584564f, 0.47323572635650635f, 0.21225106716156006f, -0.11298105865716934f, 0.27511724829673767f, 0.05848909169435501f, 0.7718849778175354f, 0.2610427737236023f, 0.682496190071106f, 0.3558754324913025f, 0.8670517206192017f, -0.5818347930908203f, 0.16745063662528992f, 0.2945123016834259f, 0.19211667776107788f, 0.7025032043457031f, 0.2808406352996826f, 0.3877062201499939f, 0.2210499495267868f, -0.4029708206653595f, 0.17342878878116608f, 0.07022125273942947f, 0.4358709156513214f, 0.17614856362342834f, 0.5498760938644409f, 0.4661034643650055f, 0.9200084209442139f, -0.8558159470558167f, 0.4758993089199066f, 0.22407513856887817f, 0.6517810821533203f, 0.013127394020557404f, 0.10774537920951843f, 0.03663843497633934f, 0.8542860746383667f, -0.023573054000735283f, 0.14554829895496368f, 0.24706679582595825f, 0.6331690549850464f, 0.20315909385681152f, 0.28887107968330383f, 0.6297813653945923f, 0.13113287091255188f, -0.05813336372375488f, 0.9527954459190369f, 0.12398870289325714f, 0.08923441916704178f, 0.15786680579185486f, 0.8818455338478088f, 0.8513501286506653f, 0.8103443384170532f, -0.3480818569660187f, 0.343325674533844f, 0.8392167091369629f, 0.7223827838897705f, 0.48770126700401306f, 0.5473963022232056f, 0.299828439950943f, 0.8817452788352966f, -0.2855061888694763f, 0.6001622676849365f, 0.3082297742366791f, 0.8107348680496216f, 0.19553899765014648f, 0.7411385774612427f, 0.3653106093406677f, 0.910393476486206f, -0.3259146213531494f, 0.11223195493221283f, 0.0517437569797039f, 0.15500368177890778f, 0.988706111907959f, 0.11853265762329102f, 0.9919508099555969f, 0.3268185555934906f, -0.7494823336601257f, 0.1589738428592682f, 0.7192877531051636f, 0.25710299611091614f, 0.2755254805088043f, 0.1573074460029602f, 0.624488890171051f, 0.049737121909856796f, -0.8356232047080994f, 0.5285147428512573f, 0.5185831189155579f, 0.005354111082851887f, 0.3127138614654541f, 0.4979606568813324f, 0.7567536234855652f, 0.03356173634529114f, -0.4151688814163208f, 0.8965929746627808f, 0.7640743255615234f, 0.30308178067207336f, 0.33184993267059326f, 0.9852491617202759f, 0.6427088975906372f, 0.36574575304985046f, -0.9625359177589417f, 0.4739421010017395f, 0.03169037029147148f, 0.10427181422710419f, 0.6463159918785095f, 0.5695490837097168f, 0.735745370388031f, 0.3779100477695465f, -0.5479508638381958f, 0.2019168585538864f, 0.9600893259048462f, 0.7175135612487793f, 0.4597524106502533f, 0.3053654730319977f, 0.4123269021511078f, 0.45673689246177673f, -0.021440627053380013f, 0.5082962512969971f, 0.26483696699142456f, 0.4727788269519806f, 0.35513079166412354f, 0.30937278270721436f, 0.2931603491306305f, 0.8768772482872009f, -0.914095401763916f, 0.22673459351062775f, 0.5341920256614685f, 0.24266065657138824f, 0.46388527750968933f, 0.8633202314376831f, 0.439822793006897f, 0.8147412538528442f, -0.3407946527004242f, 0.4466579258441925f, 0.09420696645975113f, 0.5966090559959412f, 0.0500764362514019f, 0.710999071598053f, 0.5844111442565918f, 0.2387557327747345f, -0.17825046181678772f, 0.4592718780040741f, 0.9459413886070251f, 0.6964555978775024f, 0.10864429175853729f, 0.9888266324996948f, 0.6983397603034973f, 0.6302070021629333f, -0.5193623304367065f, 0.043141089379787445f, 0.17445363104343414f, 0.730524480342865f, 0.3148508369922638f, 0.14566659927368164f, 0.9736533761024475f, 0.2976369261741638f, -0.47753021121025085f, 0.9040621519088745f, 0.40929290652275085f, 0.007858777418732643f, 0.48396167159080505f, 0.5989073514938354f, 0.055777911096811295f, 0.39970776438713074f, -0.5213000774383545f, 0.9437620043754578f, 0.7432425022125244f, 0.14979511499404907f, 0.9711641073226929f, 0.05661671236157417f, 0.34375065565109253f, 0.8778714537620544f, -0.6263278126716614f, 0.5621893405914307f, 0.8987444043159485f, 0.011341247707605362f, 0.8376885652542114f, 0.9989498257637024f, 0.8126841187477112f, 0.5241520404815674f, -0.988888680934906f, 0.4669898450374603f, 0.9896947145462036f, 0.1932811588048935f, 0.4937284290790558f, 0.448733925819397f, 0.582655131816864f, 0.24580618739128113f, -0.1157110258936882f, 0.7872593998908997f, 0.7206552624702454f, 0.015900293365120888f, 0.6019904017448425f, 0.8048116564750671f, 0.6179031729698181f, 0.4005945920944214f, -0.723080039024353f, 0.27375689148902893f, 0.19160443544387817f, 0.46320581436157227f, 0.5595651268959045f, 0.05035262554883957f, 0.9994059205055237f, 0.7250964641571045f, -0.7599532604217529f, 0.031158510595560074f, 0.9300909042358398f, 0.4840501844882965f, 0.5780322551727295f, 0.4587109088897705f, 0.6277647614479065f, 0.7849656343460083f, -0.5165801644325256f, 0.7071850895881653f, 0.8843383193016052f, 0.7540406584739685f, 0.6094167828559875f, 0.2835918962955475f, 0.5728673934936523f, 0.9099873900413513f, -0.9050901532173157f, 0.8854191899299622f, 0.3511918783187866f, 0.8230850696563721f, 0.4330216348171234f, 0.4420974850654602f, 0.58884596824646f, 0.9846676588058472f, -0.9016929864883423f, 0.7085610032081604f, 0.06531531363725662f, 0.8593168258666992f, 0.23104552924633026f, 0.9114857912063599f, 0.4349695146083832f, 0.5474914312362671f, -0.06991646438837051f, 0.1493748277425766f, 0.7754225730895996f, 0.30280521512031555f, 0.9213871359825134f, 0.5134472250938416f, 0.7677057981491089f, 0.8069981336593628f, -0.3010697066783905f, 0.13635729253292084f, 0.7763009667396545f, 0.9436987638473511f, 0.36651915311813354f, 0.47654280066490173f, 0.07915908843278885f, 0.9813902378082275f, -0.05146264284849167f, 0.8949364423751831f, 0.1543668508529663f, 0.48538699746131897f, 0.7874312996864319f, 0.21508605778217316f, 0.8436727523803711f, 0.6203471422195435f, -0.7495216727256775f, 0.9921746253967285f, 0.3349524140357971f, 0.00560269458219409f, 0.5094823837280273f, 0.9970042705535889f, 0.46316418051719666f, 0.5588059425354004f, -0.5424361824989319f, 0.7697128057479858f, 0.09190227091312408f, 0.31006526947021484f, 0.5972321033477783f, 0.4621506333351135f, 0.9184767603874207f, 0.9393681883811951f, -0.629880964756012f, 0.8242090344429016f, 0.3640112578868866f, 0.05539492517709732f, 0.04113023355603218f, 0.650606095790863f, 0.8625918626785278f, 0.340017169713974f, -0.7546627521514893f, 0.3440109193325043f, 0.07567662000656128f, 0.6355293989181519f, 0.9682151079177856f, 0.7072078585624695f, 0.3655910789966583f, 0.23064027726650238f, -0.8629796504974365f, 0.35650327801704407f, 0.36782538890838623f, 0.22905924916267395f, 0.5038815140724182f, 0.5949404239654541f, 0.9727893471717834f, 0.6190431118011475f, -0.05817774310708046f, 0.3391098976135254f, 0.9716842174530029f, 0.03867710381746292f, 0.2542649209499359f, 0.6624393463134766f, 0.6806166172027588f, 0.9671292304992676f, -0.4034777283668518f, 0.746256411075592f, 0.12140434980392456f, 0.38944244384765625f, 0.34484460949897766f, 0.07188353687524796f, 0.38536813855171204f, 0.9463135004043579f, -0.1517215371131897f, 0.28396037220954895f, 0.851151704788208f, 0.4353499710559845f, 0.31178006529808044f, 0.8195927739143372f, 0.48385798931121826f, 0.21285654604434967f, -0.7663375735282898f, 0.760084331035614f, 0.8074498772621155f, 0.7265948057174683f, 0.7375020384788513f, 0.2327592521905899f, 0.6229243874549866f, 0.9537950754165649f, -0.22290438413619995f, 0.7295404076576233f, 0.8942434191703796f, 0.46538349986076355f, 0.841502845287323f, 0.49228978157043457f, 0.32030805945396423f, 0.9531174898147583f, -0.4063880741596222f, 0.5047917366027832f, 0.8161521553993225f, 0.9336909651756287f, 0.2512437701225281f, 0.6947355270385742f, 0.08816293627023697f, 0.013546762987971306f, -0.18901461362838745f, 0.5414716601371765f, 0.6026292443275452f, 0.21280232071876526f, 0.6799728274345398f, 0.9298731088638306f, 0.7246900200843811f, 0.6443287134170532f, -0.24662452936172485f, 0.31060612201690674f, 0.7342087030410767f, 0.05203566327691078f, 0.8437542915344238f, 0.47800445556640625f, 0.016634490340948105f, 0.7599059343338013f, -0.6110976934432983f, 0.6487447619438171f, 0.6869655847549438f, 0.33786314725875854f, 0.10955774039030075f, 0.4876721203327179f, 0.6066879034042358f, 0.06973819434642792f, -0.7946414351463318f, 0.14796240627765656f, 0.05323733016848564f, 0.18227256834506989f, 0.9100520014762878f, 0.7499924302101135f, 0.9394859075546265f, 0.4947102665901184f, -0.5309549570083618f, 0.8504711985588074f, 0.3678010106086731f, 0.8787175416946411f, 0.18571139872074127f, 0.8619023561477661f, 0.9882094264030457f, 0.10349000990390778f, -0.0329047292470932f, 0.6410572528839111f, 0.32152411341667175f, 0.33353155851364136f, 0.9194386601448059f, 0.2798613905906677f, 0.20018932223320007f, 0.11387763172388077f, -0.37605246901512146f, 0.36472824215888977f, 0.10408088564872742f, 0.8302131295204163f, 0.012293769977986813f, 0.15851642191410065f, 0.15085269510746002f, 0.8758438229560852f, -0.571818470954895f, 0.7194640636444092f, 0.8909088969230652f, 0.8045870065689087f, 0.8018649220466614f, 0.24547597765922546f, 0.33759447932243347f, 0.14343273639678955f, -0.0556190200150013f, 0.15096287429332733f, 0.033765409141778946f, 0.7493781447410583f, 0.21357788145542145f, 0.3873034417629242f, 0.32695943117141724f, 0.5902461409568787f, -0.4842202067375183f, 0.06709249317646027f, 0.34582626819610596f, 0.22341574728488922f, 0.5892191529273987f, 0.0033962023444473743f, 0.024385841563344002f, 0.2035675346851349f, -0.20867852866649628f, 0.35444650053977966f, 0.32550036907196045f, 0.808758556842804f, 0.6448944211006165f, 0.22270981967449188f, 0.10140746086835861f, 0.7064827084541321f, -0.09764263778924942f, 0.8848534226417542f, 0.25651630759239197f, 0.29352685809135437f, 0.12646764516830444f, 0.7042242884635925f, 0.17598269879817963f, 0.7263413667678833f, -0.48129525780677795f, 0.6372392177581787f, 0.6741305589675903f, 0.3318341374397278f, 0.8322691321372986f, 0.3080469071865082f, 0.31976503133773804f, 0.331514447927475f, -0.19947709143161774f, 0.0234992615878582f, 0.13215294480323792f, 0.21126434206962585f, 0.5515610575675964f, 0.7256007790565491f, 0.3870263397693634f, 0.19672730565071106f, -0.33143410086631775f, 0.24879838526248932f, 0.730173647403717f, 0.36157846450805664f, 0.12406633049249649f, 0.29090380668640137f, 0.69327712059021f, 0.8571803569793701f, -0.6348157525062561f, 0.029040992259979248f, 0.9175081849098206f, 0.26051580905914307f, 0.29872286319732666f, 0.7315078973770142f, 0.5143455862998962f, 0.017854511737823486f, -0.0002676918520592153f, 0.647577702999115f, 0.6347270607948303f, 0.41108617186546326f, 0.5546989440917969f, 0.1258966028690338f, 0.8987825512886047f, 0.7863695025444031f, -0.6682043671607971f, 0.3817405700683594f, 0.3124729096889496f, 0.7720654606819153f, 0.6522710919380188f, 0.1842787116765976f, 0.7862498164176941f, 0.5299605131149292f, -0.19081653654575348f, 0.9553314447402954f, 0.8662393689155579f, 0.7238922715187073f, 0.9210658669471741f, 0.7528306245803833f, 0.456494003534317f, 0.7222118377685547f, -0.8648166060447693f, 0.7255398631095886f, 0.828810453414917f, 0.7827127575874329f, 0.25290292501449585f, 0.3668020963668823f, 0.6715342402458191f, 0.6540765166282654f, -0.7667117118835449f, 0.2271995097398758f, 0.7613409757614136f, 0.5444003343582153f, 0.3197871446609497f, 0.3711705207824707f, 0.20917478203773499f, 0.18343603610992432f, -0.1955125629901886f, 0.7292175889015198f, 0.8757918477058411f, 0.6759181022644043f, 0.20110252499580383f, 0.587132453918457f, 0.39720454812049866f, 0.34576037526130676f, -0.03666786849498749f, 0.6313024759292603f, 0.5150494575500488f, 0.09322290867567062f, 0.24166063964366913f, 0.10327117145061493f, 0.9391456246376038f, 0.48155757784843445f, -0.7414336800575256f, 0.9104629755020142f, 0.42995819449424744f, 0.0010277426335960627f, 0.2143203467130661f, 0.49158814549446106f, 0.33828794956207275f, 0.7754648327827454f, -0.7139025926589966f, 0.1562407910823822f, 0.027835117653012276f, 0.3183289170265198f, 0.6488693356513977f, 0.27057304978370667f, 0.7648173570632935f, 0.2671031653881073f, -0.12138083577156067f, 0.8149963617324829f, 0.35120877623558044f, 0.45077279210090637f, 0.42325344681739807f, 0.9416666030883789f, 0.4519672095775604f, 0.15497858822345734f, -0.7559527158737183f, 0.22777988016605377f, 0.9734833240509033f, 0.2977459728717804f, 0.4682045578956604f, 0.3599222004413605f, 0.7039474844932556f, 0.5878499746322632f, -0.7127700448036194f, 0.13568146526813507f, 0.4913834035396576f, 0.5310912132263184f, 0.3722993731498718f, 0.7863622903823853f, 0.7111296057701111f, 0.6326438784599304f, -0.6062636375427246f, 0.7036479115486145f, 0.3781820833683014f, 0.47113049030303955f, 0.6903636455535889f, 0.6297850608825684f, 0.7658517956733704f, 0.7038655877113342f, -0.5440247654914856f, 0.879278302192688f, 0.7671670317649841f, 0.7662820816040039f, 0.5417630672454834f, 0.7694547772407532f, 0.13040786981582642f, 0.9410582780838013f, -0.28609582781791687f, 0.7048253417015076f, 0.6117249727249146f, 0.7835062146186829f, 0.17237184941768646f, 0.5835525393486023f, 0.45062342286109924f, 0.9339377880096436f, -0.44236305356025696f, 0.10025761276483536f, 0.39801403880119324f, 0.3398490846157074f, 0.6193363070487976f, 0.46361076831817627f, 0.977083146572113f, 0.7495510578155518f, -0.11760320514440536f, 0.15428520739078522f, 0.366264671087265f, 0.04556268826127052f, 0.30315926671028137f, 0.7057875990867615f, 0.2523816227912903f, 0.8597102165222168f, -0.4169498383998871f, 0.12117329984903336f, 0.7156602740287781f, 0.7812526822090149f, 0.41419529914855957f, 0.8577988743782043f, 0.14206835627555847f, 0.78634113073349f, -0.3535793721675873f, 0.6577750444412231f, 0.8016871213912964f, 0.002964746206998825f, 0.9200723767280579f, 0.9566196203231812f, 0.9316881895065308f, 0.29011157155036926f, -0.8158155083656311f, 0.541752278804779f, 0.7117184996604919f, 0.3977401852607727f, 0.3101613521575928f, 0.8325381278991699f, 0.15764808654785156f, 0.5360379219055176f, -0.8270900249481201f, 0.5863285660743713f, 0.49558505415916443f, 0.16196905076503754f, 0.09928363561630249f, 0.3101240396499634f, 0.8096107840538025f, 0.5918489694595337f, -0.5219364762306213f, 0.7304325699806213f, 0.6868824362754822f, 0.9402250647544861f, 0.2648279666900635f, 0.8088849186897278f, 0.5601277947425842f, 0.7779151201248169f, -0.6843887567520142f, 0.7720911502838135f, 0.3900112509727478f, 0.08530694246292114f, 0.9120359420776367f, 0.1723727285861969f, 0.6843074560165405f, 0.4363715648651123f, -0.8192699551582336f, 0.6958197355270386f, 0.9668262004852295f, 0.17884360253810883f, 0.7847649455070496f, 0.12831009924411774f, 0.876076340675354f, 0.5201009511947632f, -0.984134316444397f, 0.9319061040878296f, 0.3179777264595032f, 0.8303607702255249f, 0.024836892262101173f, 0.3018474280834198f, 0.061106566339731216f, 0.20321989059448242f, -0.8837239146232605f, 0.3311009109020233f, 0.8697266578674316f, 0.2717079818248749f, 0.48245978355407715f, 0.438277006149292f, 0.2552794814109802f, 0.31510767340660095f, -0.9285585880279541f, 0.8215342164039612f, 0.8610844612121582f, 0.03539934754371643f, 0.9769427180290222f, 0.9636960625648499f, 0.41519835591316223f, 0.9797840118408203f, -0.6572094559669495f, 0.6968370079994202f, 0.5815551280975342f, 0.6969664096832275f, 0.41211411356925964f, 0.37220898270606995f, 0.3691917657852173f, 0.7714099287986755f, -0.9586343765258789f, 0.40246304869651794f, 0.9555169343948364f, 0.46739456057548523f, 0.26313135027885437f, 0.07521133124828339f, 0.22167634963989258f, 0.6563831567764282f, -0.12398041784763336f, 0.5523239970207214f, 0.45803481340408325f, 0.17453691363334656f, 0.5422658324241638f, 0.1757550686597824f, 0.6843830347061157f, 0.08493485301733017f, -0.6518310308456421f, 0.3320659399032593f, 0.8786889910697937f, 0.11037258058786392f, 0.43549251556396484f, 0.5041408538818359f, 0.2187807708978653f, 0.8229902982711792f, -0.350588321685791f, 0.6980882287025452f, 0.6188509464263916f, 0.39811697602272034f, 0.8868879079818726f, 0.8869336843490601f, 0.6477549076080322f, 0.46869832277297974f, -0.5958889126777649f, 0.18999707698822021f, 0.6233060956001282f, 0.9167136549949646f, 0.5922702550888062f, 0.4775437116622925f, 0.9008815884590149f, 0.5255796313285828f, -0.2763066589832306f, 0.37267497181892395f, 0.18987680971622467f, 0.8353481888771057f, 0.2766917645931244f, 0.10760877281427383f, 0.029666222631931305f, 0.5004929304122925f, -0.6995730400085449f, 0.1851378232240677f, 0.2816559374332428f, 0.725019633769989f, 0.9689465761184692f, 0.43844276666641235f, 0.35347598791122437f, 0.03831588104367256f, -0.40963461995124817f, 0.13555657863616943f, 0.2990448772907257f, 0.12486302107572556f, 0.9507332444190979f, 0.5965597629547119f, 0.845246434211731f, 0.9869403839111328f, -0.9762100577354431f, 0.8768737316131592f, 0.184370219707489f, 0.20250169932842255f, 0.7547457218170166f, 0.12089836597442627f, 0.7517726421356201f, 0.429147869348526f, -0.9265243411064148f, 0.48947057127952576f, 0.057680632919073105f, 0.8616635799407959f, 0.3755429685115814f, 0.11015773564577103f, 0.686357319355011f, 0.2230849266052246f, -0.28634658455848694f, 0.7600414156913757f, 0.5896090865135193f, 0.6514057517051697f, 0.19675803184509277f, 0.7793872952461243f, 0.307229220867157f, 0.8585519790649414f, -0.9732642769813538f, 0.4893120527267456f, 0.4210392236709595f, 0.2920076251029968f, 0.021093854680657387f, 0.35462287068367004f, 0.08032683283090591f, 0.650155246257782f, -0.5097086429595947f, 0.8145240545272827f, 0.7109321355819702f, 0.6445747017860413f, 0.44813308119773865f, 0.44126272201538086f, 0.9241923689842224f, 0.6250885128974915f, -0.21355405449867249f, 0.3086432218551636f, 0.7594895958900452f, 0.9564326405525208f, 0.7988640666007996f, 0.6435278058052063f, 0.12048038095235825f, 0.23020727932453156f, -0.782669723033905f, 0.755611777305603f, 0.9225190281867981f, 0.3063226640224457f, 0.19590941071510315f, 0.8283639550209045f, 0.23015429079532623f, 0.8416709899902344f, -0.21603509783744812f, 0.7229783535003662f, 0.20320889353752136f, 0.8752821087837219f, 0.09737684577703476f, 0.7418441772460938f, 0.6894479990005493f, 0.9282471537590027f, -0.3204803764820099f, 0.48309826850891113f, 0.25655755400657654f, 0.19680339097976685f, 0.5295873880386353f, 0.4973399043083191f, 0.8930984139442444f, 0.7469072341918945f, -0.46848195791244507f, 0.9064427614212036f, 0.11064647138118744f, 0.3861128091812134f, 0.11339724063873291f, 0.44586220383644104f, 0.3568688929080963f, 0.4405268728733063f, -0.486102819442749f, 0.9688639640808105f, 0.05401420220732689f, 0.3229633569717407f, 0.4943943917751312f, 0.18261373043060303f, 0.42950674891471863f, 0.12625904381275177f, -0.9185101985931396f, 0.7233799695968628f, 0.7218074798583984f, 0.04169226065278053f, 0.9019367098808289f, 0.7845746278762817f, 0.7641507983207703f, 0.725125253200531f, -0.33104342222213745f, 0.6918752789497375f, 0.7457718253135681f, 0.4204145669937134f, 0.09220518171787262f, 0.508782684803009f, 0.25776904821395874f, 0.509256899356842f, -0.08195739984512329f, 0.4312623143196106f, 0.4860217869281769f, 0.5470867156982422f, 0.5517807602882385f, 0.7113944292068481f, 0.37010353803634644f, 0.03660305216908455f, -0.9036111831665039f, 0.5765672922134399f, 0.1573701947927475f, 0.815629243850708f, 0.3270587921142578f, 0.4700891375541687f, 0.3338024914264679f, 0.571097195148468f, -0.7777212858200073f, 0.6046575903892517f, 0.6170949935913086f, 0.2212967425584793f, 0.761810302734375f, 0.7702925205230713f, 0.4840623140335083f, 0.4769728481769562f, -0.06208895519375801f, 0.16440872848033905f, 0.3699309527873993f, 0.2990706264972687f, 0.8893583416938782f, 0.6151874661445618f, 0.2878594994544983f, 0.3039468824863434f, -0.7801263332366943f, 0.14276224374771118f, 0.4685947000980377f, 0.16168834269046783f, 0.2637971043586731f, 0.6959521770477295f, 0.8383884429931641f, 0.330346018075943f, -0.9238286018371582f, 0.3183450400829315f, 0.9389427304267883f, 0.28034573793411255f, 0.011256778612732887f, 0.9963247179985046f, 0.8511782288551331f, 0.44626516103744507f, -0.9572124481201172f, 0.0026339564938098192f, 0.7376948595046997f, 0.7587968111038208f, 0.6926119327545166f, 0.6222218871116638f, 0.017096273601055145f, 0.3631225526332855f, -0.9772095084190369f, 0.2677801549434662f, 0.3011229634284973f, 0.5700396299362183f, 0.09079958498477936f, 0.21527989208698273f, 0.6589393019676208f, 0.044140830636024475f, -0.5867781043052673f, 0.2969778776168823f, 0.3424051105976105f, 0.8412889242172241f, 0.3476923704147339f, 0.5856343507766724f, 0.3637523055076599f, 0.4353492259979248f, -0.018035851418972015f, 0.563008189201355f, 0.8663560748100281f, 0.044629182666540146f, 0.2128557413816452f, 0.6928982734680176f, 0.26456189155578613f, 0.7816261053085327f, -0.8125942945480347f, 0.44008171558380127f, 0.4992736279964447f, 0.5361356735229492f, 0.9582170844078064f, 0.29379984736442566f, 0.4844898283481598f, 0.686829686164856f, -0.550034761428833f, 0.3705882430076599f, 0.6352890133857727f, 0.5121428370475769f, 0.6489577293395996f, 0.460027277469635f, 0.3194723427295685f, 0.45018333196640015f, -0.8806376457214355f, 0.5345243811607361f, 0.5070479512214661f, 0.2123715579509735f, 0.3148110806941986f, 0.202137291431427f, 0.9069859385490417f, 0.13823285698890686f, -0.4820746183395386f, 0.6763467788696289f, 0.34451138973236084f, 0.14181360602378845f, 0.42404693365097046f, 0.529766321182251f, 0.27797627449035645f, 0.8077515959739685f, -0.30556029081344604f, 0.061082616448402405f, 0.7556395530700684f, 0.43478110432624817f, 0.32404181361198425f, 0.3224963843822479f, 0.024490918964147568f, 0.4647318422794342f, -0.6173415184020996f, 0.6142597198486328f, 0.42176389694213867f, 0.9348520040512085f, 0.2703784704208374f, 0.25474977493286133f, 0.8104774355888367f, 0.31054678559303284f, -0.4070886969566345f, 0.6541657447814941f, 0.14522384107112885f, 0.022503256797790527f, 0.3660144805908203f, 0.21066327393054962f, 0.39957255125045776f, 0.43651196360588074f, -0.025930827483534813f, 0.7480810284614563f, 0.4948108196258545f, 0.4558276832103729f, 0.9508975148200989f, 0.884378969669342f, 0.08742170035839081f, 0.6684065461158752f, -0.28319141268730164f, 0.31961944699287415f, 0.28678521513938904f, 0.5183112621307373f, 0.67765873670578f, 0.09476657211780548f, 0.9447268843650818f, 0.7038382887840271f, -0.39638519287109375f, 0.016577595844864845f, 0.5110682845115662f, 0.7207525968551636f, 0.9827397465705872f, 0.8347522616386414f, 0.7702317833900452f, 0.5556901693344116f, -0.28906258940696716f, 0.8165848851203918f, 0.07591503113508224f, 0.3016688823699951f, 0.044197238981723785f, 0.07920525968074799f, 0.8995399475097656f, 0.09593174606561661f, -0.6405210494995117f, 0.889767587184906f, 0.8124973773956299f, 0.2646878659725189f, 0.5354773998260498f, 0.7544533014297485f, 0.06558410078287125f, 0.056339576840400696f, -0.24610525369644165f, 0.14032672345638275f, 0.09599511325359344f, 0.5839258432388306f, 0.2905132472515106f, 0.5887675881385803f, 0.915583610534668f, 0.3902556300163269f, -0.7070056796073914f, 0.17175142467021942f, 0.7764211893081665f, 0.6445932984352112f, 0.5952694416046143f, 0.8162336945533752f, 0.25790631771087646f, 0.3391668200492859f, -0.5823484659194946f, 0.742472767829895f, 0.7382535934448242f, 0.029668444767594337f, 0.9861273765563965f, 0.6467803120613098f, 0.6573857069015503f, 0.8396117091178894f, -0.8030793070793152f, 0.7791253328323364f, 0.6655319333076477f, 0.6986188292503357f, 0.6821920871734619f, 0.580215573310852f, 0.11814165860414505f, 0.1729472279548645f, -0.5261193513870239f, 0.07352038472890854f, 0.5301592946052551f, 0.5237782001495361f, 0.1873760223388672f, 0.07762026786804199f, 0.4993191063404083f, 0.21679873764514923f, -0.06037663295865059f, 0.4366457760334015f, 0.852308452129364f, 0.19351384043693542f, 0.5922400951385498f, 0.6186972856521606f, 0.08303754776716232f, 0.29227393865585327f, -0.5114816427230835f, 0.253414124250412f, 0.08981305360794067f, 0.17758440971374512f, 0.6302429437637329f, 0.22373269498348236f, 0.05098962038755417f, 0.5494340062141418f, -0.28848689794540405f, 0.8352060317993164f, 0.3196193277835846f, 0.07384809851646423f, 0.23078255355358124f, 0.6455860137939453f, 0.4782344698905945f, 0.828794538974762f, -0.5696857571601868f, 0.21903346478939056f, 0.20811906456947327f, 0.7109610438346863f, 0.49652615189552307f, 0.6996985077857971f, 0.7631798386573792f, 0.23080986738204956f, -0.31886032223701477f, 0.06708475202322006f, 0.7746379971504211f, 0.250415176153183f, 0.5436505675315857f, 0.18374545872211456f, 0.48568081855773926f, 0.7486367225646973f, -0.09868109226226807f, 0.7805618643760681f, 0.7295793890953064f, 0.3399854302406311f, 0.05914871022105217f, 0.5526702404022217f, 0.6638706922531128f, 0.4737265706062317f, -0.7939107418060303f, 0.6063975095748901f, 0.03892761096358299f, 0.03101355768740177f, 0.9009974598884583f, 0.096387580037117f, 0.784358561038971f, 0.48309043049812317f, -0.2579365670681f, 0.05207465961575508f, 0.5037409663200378f, 0.9773632287979126f, 0.8460107445716858f, 0.9674569964408875f, 0.12829995155334473f, 0.5675376653671265f, -0.2533676028251648f, 0.6751073002815247f, 0.9993156790733337f, 0.18103396892547607f, 0.7326700687408447f, 0.20552575588226318f, 0.9412979483604431f, 0.19869178533554077f, -0.354755163192749f, 0.6944071054458618f, 0.5023896098136902f, 0.30898958444595337f, 0.12305207550525665f, 0.653984546661377f, 0.6767479181289673f, 0.7949553728103638f, -0.3043694794178009f, 0.7454448938369751f, 0.8739668726921082f, 0.9560887217521667f, 0.04924478009343147f, 0.37775281071662903f, 0.7377285361289978f, 0.7083311080932617f, -0.09763529151678085f, 0.8120577335357666f, 0.5789755582809448f, 0.3428247570991516f, 0.3304189443588257f, 0.9018877148628235f, 0.7560070753097534f, 0.2028442770242691f, -0.32727116346359253f, 0.7494356632232666f, 0.7165935039520264f, 0.12127886712551117f, 0.5273754000663757f, 0.7380316853523254f, 0.4732634723186493f, 0.7258403897285461f, -0.8152164816856384f, 0.6683850288391113f, 0.6242105960845947f, 0.5739879012107849f, 0.24692830443382263f, 0.7061614394187927f, 0.30151379108428955f, 0.20141378045082092f, -0.18605975806713104f, 0.947475016117096f, 0.06347215920686722f, 0.974093496799469f, 0.8182504177093506f, 0.9781991243362427f, 0.5787135362625122f, 0.5735978484153748f, -0.4462350606918335f, 0.9129699468612671f, 0.8899863362312317f, 0.5731551647186279f, 0.6124703884124756f, 0.45542460680007935f, 0.12654896080493927f, 0.6074938178062439f, -0.5504327416419983f, 0.979925811290741f, 0.8188679218292236f, 0.7815542221069336f, 0.7287420034408569f, 0.12161735445261002f, 0.7519457340240479f, 0.5397940874099731f, -0.7784219980239868f, 0.260416179895401f, 0.45976048707962036f, 0.16660338640213013f, 0.06492137908935547f, 0.18566171824932098f, 0.013625523075461388f, 0.16122359037399292f, -0.9066387414932251f, 0.4649258852005005f, 0.5844216346740723f, 0.7577582001686096f, 0.9378345012664795f, 0.03406324237585068f, 0.13942641019821167f, 0.9670500159263611f, -0.8671335577964783f, 0.29631033539772034f, 0.8539339303970337f, 0.07100267708301544f, 0.4967029094696045f, 0.25275182723999023f, 0.6442353129386902f, 0.1307714283466339f, -0.12230183184146881f, 0.8201109766960144f, 0.9881486892700195f, 0.46437928080558777f, 0.9687958359718323f, 0.5513514876365662f, 0.06525224447250366f, 0.19577153027057648f, -0.023920459672808647f, 0.5755379796028137f, 0.1766342669725418f, 0.188079833984375f, 0.4952547252178192f, 0.1364215761423111f, 0.6811562180519104f, 0.4013126790523529f, -0.5829911231994629f, 0.608174204826355f, 0.9535220861434937f, 0.8624703288078308f, 0.5848492383956909f, 0.6067143678665161f, 0.35131409764289856f, 0.33903953433036804f, -0.5850235819816589f, 0.7023607492446899f, 0.5574580430984497f, 0.08093267679214478f, 0.4197314381599426f, 0.3397914171218872f, 0.6930273175239563f, 0.13862209022045135f, -0.9200441241264343f, 0.12491811066865921f, 0.4302830100059509f, 0.8462346792221069f, 0.6075916886329651f, 0.9282721877098083f, 0.567664623260498f, 0.3730413615703583f, -0.33351555466651917f, 0.44914233684539795f, 0.8269515037536621f, 0.8070984482765198f, 0.5888935923576355f, 0.5748498439788818f, 0.5817112922668457f, 0.1738109290599823f, -0.7736651301383972f, 0.44259557127952576f, 0.004815960768610239f, 0.7746941447257996f, 0.30163976550102234f, 0.5671252608299255f, 0.19958536326885223f, 0.32126179337501526f, -0.7840143442153931f, 0.3941914737224579f, 0.4797866940498352f, 0.5047035217285156f, 0.0172648373991251f, 0.8394589424133301f, 0.2872298061847687f, 0.9798084497451782f, -0.21198680996894836f, 0.26373299956321716f, 0.9703330397605896f, 0.7697359919548035f, 0.7671615481376648f, 0.6798362731933594f, 0.7459176182746887f, 0.2562805712223053f, -0.7973002791404724f, 0.4125918447971344f, 0.4555307924747467f, 0.13338908553123474f, 0.1283341944217682f, 0.7814480066299438f, 0.18915843963623047f, 0.5683167576789856f, -0.8581791520118713f, 0.4963443875312805f, 0.5932249426841736f, 0.5906263589859009f, 0.17865633964538574f, 0.3099304437637329f, 0.5159228444099426f, 0.5706068277359009f, -0.28626081347465515f, 0.39739760756492615f, 0.9051046967506409f, 0.8670539259910583f, 0.9947876930236816f, 0.16744737327098846f, 0.9642038941383362f, 0.009881505742669106f, -0.5629321932792664f, 0.8046558499336243f, 0.29417285323143005f, 0.5005360245704651f, 0.8788782954216003f, 0.4523864686489105f, 0.20428714156150818f, 0.7960546612739563f, -0.2803427577018738f, 0.8711560368537903f, 0.4944838881492615f, 0.1162230521440506f, 0.9248526096343994f, 0.7936246395111084f, 0.7430911064147949f, 0.09049185365438461f, -0.9327986240386963f, 0.10867913067340851f, 0.6362585425376892f, 0.8573193550109863f, 0.4005878269672394f, 0.34170418977737427f, 0.5729016661643982f, 0.04841935634613037f, -0.21313051879405975f, 0.6143697500228882f, 0.5445208549499512f, 0.16745387017726898f, 0.4950680434703827f, 0.388339638710022f, 0.7368473410606384f, 0.326479434967041f, -0.11570894718170166f, 0.46214231848716736f, 0.9546570181846619f, 0.6970744729042053f, 0.6497443318367004f, 0.22758536040782928f, 0.24260969460010529f, 0.2961758077144623f, -0.5386770367622375f, 0.12781879305839539f, 0.5003089904785156f, 0.2167333960533142f, 0.13702985644340515f, 0.5123655796051025f, 0.5145744681358337f, 0.9870998859405518f, -0.6204931139945984f, 0.8937201499938965f, 0.4916972219944f, 0.038207411766052246f, 0.7880768179893494f, 0.7235478758811951f, 0.8052986264228821f, 0.1971258670091629f, -0.8834447860717773f, 0.3512352406978607f, 0.11903712153434753f, 0.40530648827552795f, 0.5434322357177734f, 0.6175007224082947f, 0.13288500905036926f, 0.7394198775291443f, -0.6617303490638733f, 0.527642548084259f, 0.9791761636734009f, 0.5258107781410217f, 0.6638623476028442f, 0.7337943315505981f, 0.43835580348968506f, 0.32022804021835327f, -0.130057230591774f, 0.571217954158783f, 0.9689761996269226f, 0.9157943725585938f, 0.9851599931716919f, 0.834844172000885f, 0.0023132632486522198f, 0.6871779561042786f, -0.6879017949104309f, 0.2741418182849884f, 0.9996921420097351f, 0.41700756549835205f, 0.8811731934547424f, 0.11355187743902206f, 0.8728336691856384f, 0.11598354578018188f, -0.651154637336731f, 0.6571816205978394f, 0.24606400728225708f, 0.8363072872161865f, 0.11506235599517822f, 0.15666042268276215f, 0.9671286344528198f, 0.3565927743911743f, -0.8735180497169495f, 0.016397394239902496f, 0.7078765034675598f, 0.8060152530670166f, 0.5664067268371582f, 0.22179915010929108f, 0.9533355236053467f, 0.9530671238899231f, -0.2619509696960449f, 0.24183449149131775f, 0.8241388201713562f, 0.06652627885341644f, 0.7515947818756104f, 0.6563743948936462f, 0.4220286011695862f, 0.1689966917037964f, -0.5728515386581421f, 0.8524338006973267f, 0.8990445137023926f, 0.7502285838127136f, 0.7291437983512878f, 0.26931047439575195f, 0.95355623960495f, 0.4349973201751709f, -0.032639279961586f, 0.7458638548851013f, 0.9126630425453186f, 0.33612382411956787f, 0.719209611415863f, 0.9582226276397705f, 0.8723844885826111f, 0.1556202918291092f, -0.422156423330307f, 0.7993345260620117f, 0.3564305603504181f, 0.08133722841739655f, 0.5791655778884888f, 0.919888436794281f, 0.7318750023841858f, 0.936819314956665f, -0.5289539098739624f, 0.3249911665916443f, 0.21055588126182556f, 0.3438588082790375f, 0.4854280650615692f, 0.19423095881938934f, 0.7375938296318054f, 0.11540861427783966f, -0.3054908514022827f, 0.8933079242706299f, 0.8284708857536316f, 0.6071187257766724f, 0.3520466089248657f, 0.16962678730487823f, 0.8069698810577393f, 0.7945840954780579f, -0.07045712321996689f, 0.9500342011451721f, 0.00993375014513731f, 0.34965959191322327f, 0.13530337810516357f, 0.6456528306007385f, 0.6668753027915955f, 0.8024968504905701f, -0.7852611541748047f, 0.2449660748243332f, 0.6468738317489624f, 0.237071231007576f, 0.8555198907852173f, 0.7594578266143799f, 0.6875103116035461f, 0.4729454219341278f, -0.4499302804470062f, 0.9038523435592651f, 0.9518172740936279f, 0.78531414270401f, 0.18709176778793335f, 0.04596502333879471f, 0.73312908411026f, 0.6979863047599792f, -0.9506227374076843f, 0.01111435703933239f, 0.019640956073999405f, 0.3760083317756653f, 0.8061020374298096f, 0.783054530620575f, 0.7802320122718811f, 0.11259555071592331f, -0.3692895770072937f, 0.05617440864443779f, 0.9444665908813477f, 0.49596107006073f, 0.15758536756038666f, 0.7721176147460938f, 0.3639339804649353f, 0.6532335877418518f, -0.16572080552577972f, 0.11375558376312256f, 0.5415387749671936f, 0.13390648365020752f, 0.760696291923523f, 0.8025068044662476f, 0.8330434560775757f, 0.11015982180833817f, -0.8315518498420715f, 0.7827228307723999f, 0.9284933805465698f, 0.07606599479913712f, 0.02194802276790142f, 0.8250427842140198f, 0.4770953357219696f, 0.26606109738349915f, -0.2773720324039459f, 0.6171050071716309f, 0.5602074265480042f, 0.310320109128952f, 0.12167254835367203f, 0.8626371026039124f, 0.8341390490531921f, 0.11076754331588745f, -0.9915847182273865f, 0.7575728893280029f, 0.4444611966609955f, 0.35475805401802063f, 0.39391589164733887f, 0.3372107148170471f, 0.4209432601928711f, 0.6455011367797852f, -0.9506304264068604f, 0.05802709236741066f, 0.5926901698112488f, 0.43190333247184753f, 0.6507312059402466f, 0.8814119696617126f, 0.6394358277320862f, 0.7500373721122742f, -0.24510887265205383f, 0.1604614406824112f, 0.2710249722003937f, 0.030619869008660316f, 0.5632047653198242f, 0.09311731159687042f, 0.23730763792991638f, 0.8432347774505615f, -0.13739831745624542f, 0.797083854675293f, 0.2231856882572174f, 0.4898090362548828f, 0.3290492296218872f, 0.4779263138771057f, 0.5603559613227844f, 0.8978231549263f, -0.6517666578292847f, 0.6697944402694702f, 0.2607780396938324f, 0.2577872574329376f, 0.16425038874149323f, 0.44346755743026733f, 0.4965320825576782f, 0.9944202303886414f, -0.10503388196229935f, 0.46109169721603394f, 0.8924588561058044f, 0.9064931273460388f, 0.44794297218322754f, 0.37191522121429443f, 0.5915117859840393f, 0.38609451055526733f, -0.5458146929740906f, 0.8709153532981873f, 0.25860795378685f, 0.8753332495689392f, 0.07240092754364014f, 0.8593654632568359f, 0.6924927234649658f, 0.606839120388031f, -0.42319226264953613f, 0.11704476177692413f, 0.23712466657161713f, 0.5729160308837891f, 0.7306275963783264f, 0.32265228033065796f, 0.9298008680343628f, 0.35188013315200806f, -0.9900370836257935f, 0.4728459417819977f, 0.4155484735965729f, 0.8865453004837036f, 0.44523173570632935f, 0.8708046078681946f, 0.15227527916431427f, 0.09354590624570847f, -0.4901924729347229f, 0.4819895029067993f, 0.3400535583496094f, 0.7390618324279785f, 0.8243891000747681f, 0.9803535342216492f, 0.5582290291786194f, 0.40355926752090454f, -0.09764809906482697f, 0.12668919563293457f, 0.43968287110328674f, 0.14145569503307343f, 0.9779887795448303f, 0.2675991654396057f, 0.0450579859316349f, 0.6149032711982727f, -0.2877633571624756f, 0.1560356765985489f, 0.874112069606781f, 0.6648551225662231f, 0.8097832202911377f, 0.19382552802562714f, 0.5403223037719727f, 0.9374005198478699f, -0.3227653205394745f, 0.5581836700439453f, 0.13331985473632812f, 0.8931854963302612f, 0.7893394827842712f, 0.48350635170936584f, 0.0785662978887558f, 0.7147420048713684f, -0.13276365399360657f, 0.8135690093040466f, 0.45733189582824707f, 0.25390350818634033f, 0.9559639096260071f, 0.6189452409744263f, 0.5631141662597656f, 0.8724851012229919f, -0.4355151951313019f, 0.5275893807411194f, 0.05799226462841034f, 0.3670835793018341f, 0.4016866981983185f, 0.450832337141037f, 0.9946516752243042f, 0.4210653305053711f, -7.887715014476271e-07f, 0.8541030883789062f, 0.2160603255033493f, 0.7456720471382141f, 0.8124228119850159f, 0.3380959928035736f, 0.9837729930877686f, 0.22580140829086304f, -0.7103567123413086f, 0.4887848198413849f, 0.34382548928260803f, 0.5684952139854431f, 0.47933200001716614f, 0.4802161455154419f, 0.6869224309921265f, 0.8312517404556274f, -0.934639036655426f, 0.6697928309440613f, 0.9587077498435974f, 0.2900812029838562f, 0.9091918468475342f, 0.23299343883991241f, 0.6400840282440186f, 0.8585448861122131f, -0.18274539709091187f, 0.32746434211730957f, 0.27992501854896545f, 0.33372849225997925f, 0.8711749911308289f, 0.4681583046913147f, 0.8914896845817566f, 0.6872515678405762f, -0.4696442484855652f, 0.10438890755176544f, 0.8393059968948364f, 0.6653679013252258f, 0.12052567303180695f, 0.877636194229126f, 0.5143945217132568f, 0.2523535192012787f, -0.32636651396751404f, 0.6270347833633423f, 0.986610472202301f, 0.34975433349609375f, 0.22596561908721924f, 0.7814382910728455f, 0.5057170987129211f, 0.06352311372756958f, -0.4978863000869751f, 0.8028119206428528f, 0.47054025530815125f, 0.4747001528739929f, 0.2692789137363434f, 0.6716471910476685f, 0.12972958385944366f, 0.07009240984916687f, -0.8688809871673584f, 0.4880139231681824f, 0.3796076774597168f, 0.2547514736652374f, 0.6151097416877747f, 0.0027393850032240152f, 0.2823256552219391f, 0.07011841237545013f, -0.5427374839782715f, 0.8083158731460571f, 0.5136790871620178f, 0.662300169467926f, 0.8449565172195435f, 0.4629906713962555f, 0.8125270009040833f, 0.5958014726638794f, -0.03733392432332039f, 0.4368106424808502f, 0.08562129735946655f, 0.6770259141921997f, 0.7384071946144104f, 0.5720245242118835f, 0.4488380253314972f, 0.7992932200431824f, -0.6756013631820679f, 0.8400331735610962f, 0.482615202665329f, 0.5616896152496338f, 0.9739734530448914f, 0.8826647400856018f, 0.2443259209394455f, 0.7600107192993164f, -0.1736074686050415f, 0.9260071516036987f, 0.10023780167102814f, 0.19203713536262512f, 0.3900620937347412f, 0.8807796835899353f, 0.9341383576393127f, 0.17450197041034698f, -0.03830733522772789f, 0.467383474111557f, 0.9867992401123047f, 0.12918299436569214f, 0.22675339877605438f, 0.7625183463096619f, 0.38181746006011963f, 0.18854810297489166f, -0.4433615803718567f, 0.8599392771720886f, 0.22241930663585663f, 0.26387330889701843f, 0.7401047348976135f, 0.08752825111150742f, 0.3886156976222992f, 0.8862602710723877f, -0.10759468376636505f, 0.8065922856330872f, 0.4265038073062897f, 0.5665184259414673f, 0.9971442818641663f, 0.7255457639694214f, 0.3277241289615631f, 0.20892179012298584f, -0.35783249139785767f, 0.692800760269165f, 0.4424561560153961f, 0.32427558302879333f, 0.4699122905731201f, 0.44944441318511963f, 0.6367751955986023f, 0.8327056765556335f, -0.9190241694450378f, 0.829328179359436f, 0.11291816830635071f, 0.2404218316078186f, 0.3530678153038025f, 0.6548080444335938f, 0.15878050029277802f, 0.5504274964332581f, -0.6967619061470032f, 0.1611717939376831f, 0.9084367156028748f, 0.6198029518127441f, 0.788936197757721f, 0.9869368672370911f, 0.4250756502151489f, 0.837610125541687f, -0.6317463517189026f, 0.7586085796356201f, 0.04653555527329445f, 0.7962476015090942f, 0.0511687733232975f, 0.27939143776893616f, 0.12174186110496521f, 0.09042908251285553f, -0.8002265095710754f, 0.42782002687454224f, 0.7504333257675171f, 0.8085069060325623f, 0.7888425588607788f, 0.6831537485122681f, 0.4000309109687805f, 0.31494444608688354f, -0.8213080167770386f, 0.9347108006477356f, 0.9004940390586853f, 0.3027322292327881f, 0.31088346242904663f, 0.993689239025116f, 0.1992328017950058f, 0.7095020413398743f, -0.2836439907550812f, 0.994194507598877f, 0.32029175758361816f, 0.06786496937274933f, 0.0628569945693016f, 0.330678254365921f, 0.3369627296924591f, 0.018513992428779602f, -0.22201529145240784f, 0.10567035526037216f, 0.9576055407524109f, 0.1421731859445572f, 0.7952075004577637f, 0.849292516708374f, 0.44460803270339966f, 0.4581003189086914f, -0.7214530110359192f, 0.6745737791061401f, 0.13309849798679352f, 0.09414042532444f, 0.6303117275238037f, 0.3453865945339203f, 0.9494759440422058f, 0.3998498320579529f, -0.5565493702888489f, 0.6154808402061462f, 0.9229327440261841f, 0.006698463577777147f, 0.6401299834251404f, 0.824556827545166f, 0.24411432445049286f, 0.6145719885826111f, -0.7615832686424255f, 0.09702487289905548f, 0.9176321029663086f, 0.8952127695083618f, 0.7056573629379272f, 0.355533242225647f, 0.9431501030921936f, 0.413687527179718f, -0.9224329590797424f, 0.5856985449790955f, 0.5788895487785339f, 0.9155356287956238f, 0.29501616954803467f, 0.2194913923740387f, 0.5048999786376953f, 0.2739117741584778f, -0.9205869436264038f, 0.1703435629606247f, 0.22483205795288086f, 0.7968289256095886f, 0.21160882711410522f, 0.47389402985572815f, 0.7769662141799927f, 0.7457379102706909f, -0.26933449506759644f, 0.845477283000946f, 0.32645073533058167f, 0.9610139727592468f, 0.251259982585907f, 0.5882113575935364f, 0.3325682580471039f, 0.8934418559074402f, -0.48526468873023987f, 0.9903740286827087f, 0.9867384433746338f, 0.5972373485565186f, 0.1518140435218811f, 0.1770695149898529f, 0.7532751560211182f, 0.2654804587364197f, -0.8842892050743103f, 0.5759420394897461f, 0.8992088437080383f, 0.8714014291763306f, 0.13439473509788513f, 0.644649863243103f, 0.49163535237312317f, 0.33371374011039734f, -0.5067132115364075f, 0.7378621101379395f, 0.09788557142019272f, 0.33442336320877075f, 0.8652764558792114f, 0.1042202040553093f, 0.5450566411018372f, 0.47439688444137573f, -0.6101008057594299f, 0.42990827560424805f, 0.5321069955825806f, 0.6050556898117065f, 0.9298257231712341f, 0.3664095401763916f, 0.36866873502731323f, 0.6029641032218933f, -0.2644102871417999f, 0.6833905577659607f, 0.34953573346138f, 0.5286375880241394f, 0.08800871670246124f, 0.825134813785553f, 0.8203194737434387f, 0.3648400902748108f, -0.9169591665267944f, 0.49634936451911926f, 0.22286902368068695f, 0.2052152454853058f, 0.999752402305603f, 0.3202189803123474f, 0.6790066361427307f, 0.4110521078109741f, -0.5325661897659302f, 0.23516011238098145f, 0.07926274836063385f, 0.7427093982696533f, 0.9088380336761475f, 0.5048372149467468f, 0.7723916172981262f, 0.9181632399559021f, -0.9621235728263855f, 0.3224213719367981f, 0.7938879132270813f, 0.9905560612678528f, 0.6898850798606873f, 0.014251353219151497f, 0.8755464553833008f, 0.031353142112493515f, -0.0659395083785057f, 0.3625277578830719f, 0.9422827363014221f, 0.8754749894142151f, 0.8441401720046997f, 0.6408196091651917f, 0.038356710225343704f, 0.6780201196670532f, -0.7597671151161194f, 0.1563536375761032f, 0.8769651651382446f, 0.8034953474998474f, 0.9568591713905334f, 0.7946056723594666f, 0.9002170562744141f, 0.9596739411354065f, -0.6074454188346863f, 0.9542087912559509f, 0.5297446846961975f, 0.39090126752853394f, 0.9635128974914551f, 0.7405064702033997f, 0.3046647012233734f, 0.9377668499946594f, -0.15173065662384033f, 0.7840090990066528f, 0.7375208735466003f, 0.7420248985290527f, 0.20991943776607513f, 0.15176503360271454f, 0.08386190980672836f, 0.16946791112422943f, -0.9454197883605957f, 0.9573321342468262f, 0.28108975291252136f, 0.9203330874443054f, 0.04371753707528114f, 0.15269185602664948f, 0.7390394806861877f, 0.9166892766952515f, -0.9580532312393188f, 0.6860169172286987f, 0.08069466054439545f, 0.6800984144210815f, 0.06703665852546692f, 0.12249615043401718f, 0.9112727642059326f, 0.0019528549164533615f, -0.5358595252037048f, 0.8509142398834229f, 0.7215450406074524f, 0.9876553416252136f, 0.4294898211956024f, 0.3833039700984955f, 0.4721928834915161f, 0.32671836018562317f, -0.0798828974366188f, 0.38971540331840515f, 0.3816215991973877f, 0.797540009021759f, 0.6569390892982483f, 0.7284756898880005f, 0.6902892589569092f, 0.2094709426164627f, -0.6794593334197998f, 0.8641424179077148f, 0.0351957269012928f, 0.21014465391635895f, 0.42334869503974915f, 0.7885995507240295f, 0.7771583795547485f, 0.21999886631965637f, -0.33726078271865845f, 0.061223678290843964f, 0.19355157017707825f, 0.46073904633522034f, 0.9590259790420532f, 0.49381330609321594f, 0.28380540013313293f, 0.9256012439727783f, -0.5689176321029663f, 0.37741324305534363f, 0.31296440958976746f, 0.1492830365896225f, 0.06356851756572723f, 0.34800729155540466f, 0.694526195526123f, 0.1887173056602478f, -0.8906269073486328f, 0.4754449129104614f, 0.35915642976760864f, 0.09865672886371613f, 0.15012386441230774f, 0.7890955805778503f, 0.7627100348472595f, 0.4604949653148651f, -0.7396094799041748f, 0.11503728479146957f, 0.9728178381919861f, 0.4958116114139557f, 0.1202896386384964f, 0.5280640125274658f, 0.84732586145401f, 0.1127210333943367f, -0.8346748352050781f, 0.6678552031517029f, 0.7419292330741882f, 0.8236429691314697f, 0.8921271562576294f, 0.4653903841972351f, 0.43495458364486694f, 0.3398858904838562f, -0.8895378112792969f, 0.6935415863990784f, 0.5151411294937134f, 0.24598179757595062f, 0.007333091460168362f, 0.06392015516757965f, 0.6124187111854553f, 0.7916722893714905f, -0.9932228922843933f, 0.6331550478935242f, 0.03209998831152916f, 0.024868125095963478f, 0.3508923649787903f, 0.6904819011688232f, 0.3949164152145386f, 0.4598039388656616f, -0.1793266385793686f, 0.6620334982872009f, 0.11043562740087509f, 0.7833656072616577f, 0.4543698728084564f, 0.7666049599647522f, 0.1386057436466217f, 0.6542176008224487f, -0.7375099658966064f, 0.5273168683052063f, 0.49608537554740906f, 0.9166656136512756f, 0.5441379547119141f, 0.21812793612480164f, 0.6574749946594238f, 0.1441103219985962f, -0.888416588306427f, 0.8544769287109375f, 0.5188562870025635f, 0.4441152513027191f, 0.8473835587501526f, 0.6339836716651917f, 0.9446626901626587f, 0.43194419145584106f, -0.8873464465141296f, 0.08678117394447327f, 0.853364884853363f, 0.8090408444404602f, 0.7518602013587952f, 0.9697545766830444f, 0.39387303590774536f, 0.7579564452171326f, -0.9540557265281677f, 0.6903772950172424f, 0.4806625247001648f, 0.20673932135105133f, 0.5804774761199951f, 0.5610354542732239f, 0.09954587370157242f, 0.9512192606925964f, -0.5132060647010803f, 0.6418009400367737f, 0.8692879676818848f, 0.39628392457962036f, 0.8204253911972046f, 0.028668878600001335f, 0.9399124979972839f, 0.8985626101493835f, -0.6818106770515442f, 0.42003941535949707f, 0.8013480305671692f, 0.9985883831977844f, 0.9930201172828674f, 0.6519546508789062f, 0.018269997090101242f, 0.11311595886945724f, -0.4352565407752991f, 0.3040957748889923f, 0.8653754591941833f, 0.09436821937561035f, 0.5976957678794861f, 0.8868577480316162f, 0.8119410872459412f, 0.8002337217330933f, -0.3968881666660309f, 0.14075948297977448f, 0.6308742761611938f, 0.9083505272865295f, 0.31335797905921936f, 0.905208170413971f, 0.26880764961242676f, 0.4077860414981842f, -0.46080729365348816f, 0.8883296847343445f, 0.6165393590927124f, 0.510818362236023f, 0.3476409316062927f, 0.39605507254600525f, 0.9668956398963928f, 0.42855194211006165f, -0.8225723505020142f, 0.7947043180465698f, 0.8102980852127075f, 0.6875920295715332f, 0.026064494624733925f, 0.9292138814926147f, 0.37759506702423096f, 0.910612165927887f, -0.3439277112483978f, 0.322165310382843f, 0.4016299545764923f, 0.3618631660938263f, 0.609627366065979f, 0.6057024598121643f, 0.23508238792419434f, 0.9679921269416809f, -0.9155517816543579f, 0.12234237045049667f, 0.5270295739173889f, 0.028615009039640427f, 0.27442359924316406f, 0.29675984382629395f, 0.9671427011489868f, 0.5473060607910156f, -0.3932410776615143f, 0.4070417881011963f, 0.9893831610679626f, 0.5636894106864929f, 0.27340272068977356f, 0.09576454013586044f, 0.8613439798355103f, 0.29371392726898193f, -0.44903847575187683f, 0.16443899273872375f, 0.418624609708786f, 0.32949182391166687f, 0.31969818472862244f, 0.5701483488082886f, 0.41293537616729736f, 0.5480596423149109f, -0.983617901802063f, 0.089063860476017f, 0.4136318266391754f, 0.8449324369430542f, 0.37359127402305603f, 0.28205597400665283f, 0.4955946207046509f, 0.014512591063976288f, -0.5060608386993408f, 0.540215253829956f, 0.07456399500370026f, 0.8326571583747864f, 0.2277354747056961f, 0.5879802107810974f, 0.6071314215660095f, 0.8390501141548157f, -0.19313186407089233f, 0.8728315830230713f, 0.7319994568824768f, 0.27546483278274536f, 0.6483020186424255f, 0.736356258392334f, 0.35687586665153503f, 0.6362573504447937f, -0.8543369174003601f, 0.17810139060020447f, 0.07990249246358871f, 0.765532374382019f, 0.6994825005531311f, 0.7821560502052307f, 0.9114612936973572f, 0.5254482626914978f, -0.19407117366790771f, 0.6142780184745789f, 0.5553027987480164f, 0.87235027551651f, 0.9759262800216675f, 0.5900736451148987f, 0.5451834797859192f, 0.06427130103111267f, -0.5055491328239441f, 0.4138340353965759f, 0.9410112500190735f, 0.3618324398994446f, 0.257572203874588f, 0.06012037396430969f, 0.06739724427461624f, 0.4532567262649536f, -0.45117852091789246f, 0.8166263699531555f, 0.7774461507797241f, 0.29948893189430237f, 0.7983455061912537f, 0.9034301042556763f, 0.34650495648384094f, 0.686747133731842f, -0.2487306296825409f, 0.6915072798728943f, 0.17571547627449036f, 0.309741735458374f, 0.8662810325622559f, 0.41077741980552673f, 0.7633088827133179f, 0.7760803699493408f, -0.9268457293510437f, 0.544538140296936f, 0.11704976111650467f, 0.6246239542961121f, 0.9342882633209229f, 0.9967560768127441f, 0.2994381785392761f, 0.21850290894508362f, -0.14982759952545166f, 0.7049227952957153f, 0.3845650851726532f, 0.10011279582977295f, 0.2694336771965027f, 0.3178895115852356f, 0.7670944929122925f, 0.22044600546360016f, -0.9366405010223389f, 0.7310611605644226f, 0.6388814449310303f, 0.17463158071041107f, 0.37106558680534363f, 0.4239574074745178f, 0.5106035470962524f, 0.9199612736701965f, -0.8492192029953003f, 0.4557889401912689f, 0.0010895697632804513f, 0.7180312275886536f, 0.41943711042404175f, 0.7423214912414551f, 0.6517560482025146f, 0.9434961080551147f, -0.8061683773994446f, 0.8338288068771362f, 0.7504538297653198f, 0.7938638925552368f, 0.7227733135223389f, 0.9455616474151611f, 0.5128595232963562f, 0.031959328800439835f, -0.5221807956695557f, 0.7185001969337463f, 0.06618569791316986f, 0.3623272478580475f, 0.4606306552886963f, 0.5194317698478699f, 0.31136757135391235f, 0.7773078680038452f, -0.29924654960632324f, 0.835967481136322f, 0.7503537535667419f, 0.4612090289592743f, 0.708999514579773f, 0.2578631341457367f, 0.2383056879043579f, 0.2029794454574585f, -0.12016255408525467f, 0.6531091332435608f, 0.670815646648407f, 0.1510055810213089f, 0.17441879212856293f, 0.8076526522636414f, 0.5158957839012146f, 0.13179466128349304f, -0.6233305335044861f, 0.8064240217208862f, 0.2072640359401703f, 0.4167211651802063f, 0.07208359986543655f, 0.6585187315940857f, 0.2113998532295227f, 0.749744713306427f, -0.6928607225418091f, 0.9979594349861145f, 0.3814736008644104f, 0.9145328402519226f, 0.15142925083637238f, 0.3465781509876251f, 0.6792379021644592f, 0.8971709609031677f, -0.29360851645469666f, 0.04930815473198891f, 0.8803437948226929f, 0.16929438710212708f, 0.6544999480247498f, 0.15578968822956085f, 0.10776164382696152f, 0.7070832252502441f, -0.20927023887634277f, 0.9663387537002563f, 0.733451783657074f, 0.6102795004844666f, 0.9235005378723145f, 0.511393666267395f, 0.8513396382331848f, 0.4205035865306854f, -0.7686656713485718f, 0.6603308320045471f, 0.8578159213066101f, 0.6115368604660034f, 0.6571130752563477f, 0.4136389493942261f, 0.07184109091758728f, 0.7515209913253784f, -0.7224106192588806f, 0.9856852293014526f, 0.912735641002655f, 0.8173191547393799f, 0.8270341157913208f, 0.28097325563430786f, 0.5628630518913269f, 0.674513041973114f, -0.26607030630111694f, 0.7725901007652283f, 0.5698130130767822f, 0.8937820196151733f, 0.32933539152145386f, 0.7020376920700073f, 0.3279774785041809f, 0.8663572669029236f, -0.09438329935073853f, 0.6691603064537048f, 0.015575517900288105f, 0.59256911277771f, 0.23477396368980408f, 0.9032467007637024f, 0.06742169708013535f, 0.24021132290363312f, -0.2976648211479187f, 0.3845965564250946f, 0.6087207794189453f, 0.7543524503707886f, 0.2367815226316452f, 0.6509885191917419f, 0.7808366417884827f, 0.14618733525276184f, -0.6255315542221069f, 0.48752859234809875f, 0.7753377556800842f, 0.27028337121009827f, 0.6551175713539124f, 0.479621022939682f, 0.6514650583267212f, 0.5621250867843628f, -0.9649907946586609f, 0.3469281494617462f, 0.6550408601760864f, 0.11066647619009018f, 0.25758662819862366f, 0.31445029377937317f, 0.29422977566719055f, 0.6401029825210571f, -0.7870473265647888f, 0.37173885107040405f, 0.9605351686477661f, 0.7857712507247925f, 0.9342317581176758f, 0.1720503717660904f, 0.7364431619644165f, 0.4261755049228668f, -0.10382754355669022f, 0.2342127561569214f, 0.7576867938041687f, 0.2910572290420532f, 0.441358357667923f, 0.626763641834259f, 0.32997024059295654f, 0.6615156531333923f, -0.7040537595748901f, 0.8915985822677612f, 0.7936193943023682f, 0.717823326587677f, 0.5599850416183472f, 0.6644544005393982f, 0.8887106776237488f, 0.8691815733909607f, -0.8922967910766602f, 0.3241478204727173f, 0.5748348236083984f, 0.8921335339546204f, 0.7053458094596863f, 0.894144594669342f, 0.9697031378746033f, 0.5186036825180054f, -0.30067178606987f, 0.6881906986236572f, 0.9944108128547668f, 0.7520749568939209f, 0.1516459733247757f, 0.4452453851699829f, 0.24668952822685242f, 0.2339237630367279f, -0.9370078444480896f, 0.9178197979927063f, 0.8433088660240173f, 0.6019798517227173f, 0.22881625592708588f, 0.522382915019989f, 0.7711188793182373f, 0.24895022809505463f, -0.6053511500358582f, 0.5887079238891602f, 0.17650535702705383f, 0.010515542700886726f, 0.7131238579750061f, 0.26964515447616577f, 0.8239210247993469f, 0.9118587374687195f, -0.5473196506500244f, 0.9824828505516052f, 0.3322821855545044f, 0.5556163191795349f, 0.0348210372030735f, 0.5009533762931824f, 0.5962473154067993f, 0.1665692925453186f, -0.7790480852127075f, 0.16297456622123718f, 0.6379625201225281f, 0.0516546405851841f, 0.33851683139801025f, 0.10361547768115997f, 0.3637971878051758f, 0.769570529460907f, -0.7517220973968506f, 0.5201272964477539f, 0.047383859753608704f, 0.023880042135715485f, 0.243942528963089f, 0.0006813387153670192f, 0.44803574681282043f, 0.07465188205242157f, -0.15981565415859222f, 0.41611725091934204f, 0.11108271032571793f, 0.16403308510780334f, 0.9385270476341248f, 0.4742244780063629f, 0.554088830947876f, 0.11591747403144836f, -0.012466268613934517f, 0.9313414692878723f, 0.11418253928422928f, 0.8099555373191833f, 0.4535142481327057f, 0.9763150215148926f, 0.28183069825172424f, 0.48187732696533203f, -0.6466158032417297f, 0.06343511492013931f, 0.38814011216163635f, 0.3858523368835449f, 0.5262462496757507f, 0.05897613987326622f, 0.6136128306388855f, 0.5352391004562378f, -0.9027418494224548f, 0.9529982209205627f, 0.4565548598766327f, 0.1606408655643463f, 0.8679718971252441f, 0.7169548869132996f, 0.4936753809452057f, 0.1243978962302208f, -0.22138695418834686f, 0.07291459292173386f, 0.18948225677013397f, 0.006202835123986006f, 0.13777963817119598f, 0.4192446172237396f, 0.705320417881012f, 0.4690644145011902f, -0.47293081879615784f, 0.43105050921440125f, 0.9128726720809937f, 0.002929156180471182f, 0.5520408153533936f, 0.5679441690444946f, 0.9712805151939392f, 0.030546406283974648f, -0.45485183596611023f, 0.29578936100006104f, 0.7838848233222961f, 0.6154628992080688f, 0.7859814167022705f, 0.29208821058273315f, 0.7559449076652527f, 0.31131428480148315f, -0.5035984516143799f, 0.7649044990539551f, 0.781768798828125f, 0.4323013722896576f, 0.35560518503189087f, 0.6569026112556458f, 0.35001635551452637f, 0.6431300044059753f, -0.8236377835273743f, 0.45004385709762573f, 0.08940188586711884f, 0.45543304085731506f, 0.9162799119949341f, 0.2049531638622284f, 0.35953250527381897f, 0.7952048778533936f, -0.06880543380975723f, 0.40265846252441406f, 0.8823071122169495f, 0.3987633287906647f, 0.8957613110542297f, 0.04720596969127655f, 0.18355660140514374f, 0.9383682012557983f, -0.7220950722694397f, 0.06845705956220627f, 0.7291759848594666f, 0.161240354180336f, 0.2116161584854126f, 0.2965734302997589f, 0.542681872844696f, 0.5904130935668945f, -0.5739909410476685f, 0.4849373698234558f, 0.7428868412971497f, 0.4627327620983124f, 0.7150166630744934f, 0.010664097033441067f, 0.7464138865470886f, 0.07763678580522537f, -0.025492554530501366f, 0.8025948405265808f, 0.47811806201934814f, 0.994354784488678f, 0.049337711185216904f, 0.027134034782648087f, 0.03056679479777813f, 0.8664189577102661f, -0.10728238523006439f, 0.7495890259742737f, 0.5429883599281311f, 0.47212284803390503f, 0.5529829859733582f, 0.7273911237716675f, 0.3368346393108368f, 0.8170921206474304f, -0.6470485329627991f, 0.9689925312995911f, 0.3394399583339691f, 0.15921461582183838f, 0.6389007568359375f, 0.9096766710281372f, 0.14295662939548492f, 0.6136378645896912f, -0.3723721504211426f, 0.5930810570716858f, 0.6625620722770691f, 0.16653193533420563f, 0.17949694395065308f, 0.2514705955982208f, 0.23739926517009735f, 0.05678822100162506f, -0.023354575037956238f, 0.019361507147550583f, 0.8454242944717407f, 0.7843014597892761f, 0.8935830593109131f, 0.9719927906990051f, 0.4184721112251282f, 0.23417450487613678f, -0.9915633201599121f, 0.38607069849967957f, 0.38547760248184204f, 0.018606482073664665f, 0.1361943632364273f, 0.8951467871665955f, 0.06350988149642944f, 0.3145713210105896f, -0.8803032636642456f, 0.42700526118278503f, 0.12404194474220276f, 0.618507981300354f, 0.7229433655738831f, 0.6112266182899475f, 0.5647586584091187f, 0.9245401620864868f, -0.7191651463508606f, 0.7330725193023682f, 0.9021559357643127f, 0.8984072804450989f, 0.6982421278953552f, 0.5399530529975891f, 0.513623058795929f, 0.7786931395530701f, -0.9439848065376282f, 0.010513758286833763f, 0.3061787486076355f, 0.03625674918293953f, 0.09499358385801315f, 0.8966212868690491f, 0.5314120650291443f, 0.9911163449287415f, -0.6685444712638855f, 0.9268480539321899f, 0.7515220046043396f, 0.9965947866439819f, 0.5392356514930725f, 0.6661189198493958f, 0.600801408290863f, 0.36350002884864807f, -0.22271960973739624f, 0.09638461470603943f, 0.24822446703910828f, 0.6253341436386108f, 0.9112716913223267f, 0.11901429295539856f, 0.5570023655891418f, 0.02373410202562809f, -0.39532193541526794f, 0.29616907238960266f, 0.9405421614646912f, 0.6407197713851929f, 0.33353492617607117f, 0.8935286402702332f, 0.779824435710907f, 0.15848083794116974f, -0.10525475442409515f, 0.9742811918258667f, 0.8830500841140747f, 0.7445805668830872f, 0.9296378493309021f, 0.39434516429901123f, 0.18350256979465485f, 0.5309868454933167f, -0.9039579629898071f, 0.9796327352523804f, 0.5537498593330383f, 0.3297644555568695f, 0.5233463644981384f, 0.7386770248413086f, 0.4720460772514343f, 0.535220742225647f, -0.28591084480285645f, 0.2934725880622864f, 0.25150397419929504f, 0.9754921793937683f, 0.8410500288009644f, 0.48066285252571106f, 0.9462727904319763f, 0.8687577247619629f, -0.6764662265777588f, 0.9645603895187378f, 0.2878885567188263f, 0.114853635430336f, 0.33012595772743225f, 0.962824821472168f, 0.3364775776863098f, 0.05895392596721649f, -0.8453137874603271f, 0.12239005416631699f, 0.8456758856773376f, 0.550176203250885f, 0.19149811565876007f, 0.2075681835412979f, 0.7839028835296631f, 0.7056294679641724f, -0.2160443365573883f, 0.63116854429245f, 0.187175452709198f, 0.7601271271705627f, 0.9443473815917969f, 0.762348473072052f, 0.6665814518928528f, 0.8288101553916931f, -0.44426846504211426f, 0.5097441673278809f, 0.7188343405723572f, 0.1965547651052475f, 0.44298744201660156f, 0.1764513999223709f, 0.3955424726009369f, 0.7599759101867676f, -0.6065437197685242f, 0.09719786047935486f, 0.9230111241340637f, 0.2116234004497528f, 0.6106765866279602f, 0.8281345367431641f, 0.1967659294605255f, 0.6048552989959717f, -0.3798277974128723f, 0.5861218571662903f, 0.40000247955322266f, 0.15895646810531616f, 0.007615493610501289f, 0.0992257222533226f, 0.24480530619621277f, 0.6262526512145996f, -0.4474705755710602f, 0.23543491959571838f, 0.6851174235343933f, 0.8597662448883057f, 0.43370765447616577f, 0.14056967198848724f, 0.38241469860076904f, 0.5805016160011292f, -0.12321428954601288f, 0.2956579923629761f, 0.46441560983657837f, 0.3043314516544342f, 0.18991224467754364f, 0.33680588006973267f, 0.5511821508407593f, 0.44826817512512207f, -0.680637776851654f, 0.24552275240421295f, 0.15188470482826233f, 0.32563602924346924f, 0.18355800211429596f, 0.039246540516614914f, 0.7509446144104004f, 0.6882036328315735f, -0.41201984882354736f, 0.7266331315040588f, 0.02447059378027916f, 0.03945178911089897f, 0.4709547758102417f, 0.9140299558639526f, 0.2978115379810333f, 0.6624518036842346f, -0.9578478336334229f, 0.7780820727348328f, 0.13610054552555084f, 0.8035439252853394f, 0.9606345891952515f, 0.7614472508430481f, 0.8771713376045227f, 0.010891108773648739f, -0.4402046203613281f, 0.3952431082725525f, 0.4774108827114105f, 0.08803325146436691f, 0.2536296248435974f, 0.0719885528087616f, 0.11820362508296967f, 0.7308667898178101f, -0.45429015159606934f, 0.9960500597953796f, 0.8816133737564087f, 0.9975641965866089f, 0.4384614825248718f, 0.16834811866283417f, 0.4946043789386749f, 0.3721291720867157f, -0.48161616921424866f, 0.3806585371494293f, 0.13128066062927246f, 0.6165496706962585f, 0.38906365633010864f, 0.2735809087753296f, 0.9191251397132874f, 0.4406042993068695f, -0.37680336833000183f, 0.10620133578777313f, 0.40601232647895813f, 0.03029605560004711f, 0.24127110838890076f, 0.46875056624412537f, 0.42669665813446045f, 0.776666522026062f, -0.46304595470428467f, 0.692110538482666f, 0.18319782614707947f, 0.9026079773902893f, 0.7391995787620544f, 0.9706639051437378f, 0.9513877034187317f, 0.1330466866493225f, -0.11231746524572372f, 0.9179990291595459f, 0.3147898018360138f, 0.32937106490135193f, 0.9932311177253723f, 0.7408031225204468f, 0.8900637626647949f, 0.924409031867981f, -0.6342147588729858f, 0.12289255857467651f, 0.06028951704502106f, 0.19226719439029694f, 0.42370396852493286f, 0.1164657399058342f, 0.00783413928002119f, 0.006255065556615591f, -0.9855587482452393f, 0.36660656332969666f, 0.3502747118473053f, 0.13829579949378967f, 0.38831764459609985f, 0.8360559940338135f, 0.5371018052101135f, 0.5955231785774231f, -0.09017814695835114f, 0.908625602722168f, 0.1909511685371399f, 0.25123491883277893f, 0.5662052035331726f, 0.14225386083126068f, 0.8840245008468628f, 0.6901652812957764f, -0.2814413607120514f, 0.2960660755634308f, 0.5017788410186768f, 0.6451075077056885f, 0.6471735239028931f, 0.2712670862674713f, 0.6391137838363647f, 0.052824657410383224f, -0.7207028865814209f, 0.21219830214977264f, 0.18240083754062653f, 0.5657395720481873f, 0.4646962881088257f, 0.8947061896324158f, 0.04949196055531502f, 0.13570140302181244f, -0.08251038193702698f, 0.5592337846755981f, 0.8005596995353699f, 0.5580880045890808f, 0.37437868118286133f, 0.7795342803001404f, 0.04789803922176361f, 0.8522555828094482f, -0.45168280601501465f, 0.5132583975791931f, 0.7323704957962036f, 0.1989414393901825f, 0.7488516569137573f, 0.7264683842658997f, 0.35697314143180847f, 0.6201162338256836f, -0.4084659814834595f, 0.7128720879554749f, 0.7677019834518433f, 0.2219625562429428f, 0.25761592388153076f, 0.05120212957262993f, 0.7836692929267883f, 0.662602961063385f, -0.7128427624702454f, 0.8131890892982483f, 0.9865390062332153f, 0.7728313207626343f, 0.7059581875801086f, 0.4179782569408417f, 0.06201596558094025f, 0.6378312706947327f, -0.09165369719266891f, 0.12168444693088531f, 0.015100257471203804f, 0.6981127262115479f, 0.7130579948425293f, 0.41978922486305237f, 0.6919600367546082f, 0.17895719408988953f, -0.4074591398239136f, 0.7951354384422302f, 0.47307896614074707f, 0.9711909890174866f, 0.9773391485214233f, 0.3243231177330017f, 0.27081498503685f, 0.320928156375885f, -0.5830065011978149f, 0.49424678087234497f, 0.2878704071044922f, 0.32157233357429504f, 0.15764926373958588f, 0.9388132691383362f, 0.2583220601081848f, 0.7469217777252197f, -0.14471182227134705f, 0.8731279373168945f, 0.01604139246046543f, 0.6996643543243408f, 0.5684108138084412f, 0.4724445939064026f, 0.31656622886657715f, 0.6354278326034546f, -0.0050322809256613255f, 0.9274793267250061f, 0.19014348089694977f, 0.08944379538297653f, 0.8348603844642639f, 0.020085059106349945f, 0.5718381404876709f, 0.6214977502822876f, -0.11438089609146118f, 0.8014317750930786f, 0.09591557830572128f, 0.624247670173645f, 0.7472620606422424f, 0.5248727798461914f, 0.18622298538684845f, 0.7886335849761963f, -0.40891027450561523f, 0.9281556010246277f, 0.8461557626724243f, 0.653481125831604f, 0.7902247905731201f, 0.9100868701934814f, 0.33556491136550903f, 0.46211329102516174f, -0.6566188335418701f, 0.904302716255188f, 0.49800312519073486f, 0.9393705725669861f, 0.9349028468132019f, 0.08156721293926239f, 0.6611701250076294f, 0.2737158238887787f, -0.7246151566505432f, 0.2222864180803299f, 0.3848837912082672f, 0.8930621147155762f, 0.4259154498577118f, 0.5049743056297302f, 0.2283364236354828f, 0.8974868655204773f, -0.5906029343605042f, 0.025960834696888924f, 0.047388020902872086f, 0.4686320126056671f, 0.9244982600212097f, 0.20922251045703888f, 0.1472938060760498f, 0.14413335919380188f, -0.4563419818878174f, 0.07467273622751236f, 0.5172775387763977f, 0.5635762214660645f, 0.3330795466899872f, 0.7202821969985962f, 0.30944302678108215f, 0.048233773559331894f, -0.1571992039680481f, 0.9721686840057373f, 0.8730611205101013f, 0.2720188498497009f, 0.46012163162231445f, 0.7723011374473572f, 0.8384811282157898f, 0.23742446303367615f, -0.20873235166072845f, 0.7765307426452637f, 0.2406264990568161f, 0.8207266330718994f, 0.6732690334320068f, 0.47368112206459045f, 0.6600564122200012f, 0.8185783624649048f, -0.927765429019928f, 0.7640742659568787f, 0.12535135447978973f, 0.6090704202651978f, 0.4427940547466278f, 0.3420613706111908f, 0.13483300805091858f, 0.9146156311035156f, -0.9032776355743408f, 0.6299057006835938f, 0.4066922664642334f, 0.4727220833301544f, 0.19685770571231842f, 0.467403769493103f, 0.8374848961830139f, 0.7291898727416992f, -0.6571415066719055f, 0.6659154295921326f, 0.4953947067260742f, 0.9459915161132812f, 0.4161001443862915f, 0.09345211833715439f, 0.6190837025642395f, 0.4060819149017334f, -0.07272196561098099f, 0.2922919690608978f, 0.11816244572401047f, 0.014685530215501785f, 0.21891556680202484f, 0.11972032487392426f, 0.5046172142028809f, 0.6152116656303406f, -0.13984619081020355f, 0.840855598449707f, 0.713885486125946f, 0.2161128968000412f, 0.6881608963012695f, 0.5456091165542603f, 0.5432074666023254f, 0.12542441487312317f, -0.5963141322135925f, 0.6051096320152283f, 0.8661707639694214f, 0.938913106918335f, 0.8024850487709045f, 0.1250729113817215f, 0.6001134514808655f, 0.056638363748788834f, -0.5952355861663818f, 0.9470217823982239f, 0.8509771227836609f, 0.1552302986383438f, 0.5346503257751465f, 0.4314354956150055f, 0.5051530599594116f, 0.8500701785087585f, -0.1795949637889862f, 0.6807265281677246f, 0.2933811545372009f, 0.7436761856079102f, 0.26550552248954773f, 0.7776693105697632f, 0.9863681793212891f, 0.8263154029846191f, -0.7210137248039246f, 0.010126068256795406f, 0.5116108655929565f, 0.1545623242855072f, 0.7512754797935486f, 0.9476591348648071f, 0.6560224294662476f, 0.5559536814689636f, -0.17710350453853607f, 0.920525312423706f, 0.32837584614753723f, 0.5045743584632874f, 0.9098601937294006f, 0.2937660813331604f, 0.09626375138759613f, 0.7369382977485657f, -0.2614390552043915f, 0.1276726871728897f, 0.6643008589744568f, 0.7565915584564209f, 0.1352342814207077f, 0.5918404459953308f, 0.22427789866924286f, 0.11775331199169159f, -0.47529467940330505f, 0.6597480177879333f, 0.6681857705116272f, 0.06990042328834534f, 0.6328172087669373f, 0.4634284973144531f, 0.8241262435913086f, 0.8813496828079224f, -0.9193483591079712f, 0.05749839171767235f, 0.17215637862682343f, 0.29156792163848877f, 0.5869982838630676f, 0.6954888701438904f, 0.5858415961265564f, 0.11912721395492554f, -0.05826267600059509f, 0.48981356620788574f, 0.9869398474693298f, 0.1605357974767685f, 0.9013192057609558f, 0.5807241201400757f, 0.6614418029785156f, 0.18990831077098846f, -0.2528141438961029f, 0.7200369834899902f, 0.30691757798194885f, 0.7823469042778015f, 0.9233659505844116f, 0.9153579473495483f, 0.5461035370826721f, 0.5479515194892883f, -0.1185351237654686f, 0.808368980884552f, 0.4065375328063965f, 0.7343418598175049f, 0.6255055665969849f, 0.5140575170516968f, 0.8444969654083252f, 0.857014536857605f, -0.8715606927871704f, 0.7407775521278381f, 0.2752127945423126f, 0.4223769009113312f, 0.7091705203056335f, 0.8761881589889526f, 0.36792925000190735f, 0.9035210013389587f, -0.1346990466117859f, 0.3743870258331299f, 0.24982766807079315f, 0.8868088722229004f, 0.9954030513763428f, 0.028505392372608185f, 0.617039680480957f, 0.8338156938552856f, -0.38369911909103394f, 0.4881257116794586f, 0.5892663598060608f, 0.31406888365745544f, 0.20431235432624817f, 0.5543268322944641f, 0.6019948720932007f, 0.8373265266418457f, -0.18251600861549377f, 0.06618140637874603f, 0.20159544050693512f, 0.4536029100418091f, 0.08890121430158615f, 0.17546959221363068f, 0.012633916921913624f, 0.12775008380413055f, -0.5627694129943848f, 0.24354399740695953f, 0.17141194641590118f, 0.23006954789161682f, 0.3102613389492035f, 0.08768422156572342f, 0.0004200980765745044f, 0.1448296308517456f, -0.6812071800231934f, 0.7605481743812561f, 0.3928992748260498f, 0.8346197009086609f, 0.7342049479484558f, 0.6707897782325745f, 0.2760426104068756f, 0.8327244520187378f, -0.24206526577472687f, 0.5960180163383484f, 0.875304102897644f, 0.06060199439525604f, 0.843586802482605f, 0.1908808946609497f, 0.5377862453460693f, 0.26594939827919006f, -0.7439135313034058f, 0.2845594584941864f, 0.868575394153595f, 0.7774621248245239f, 0.15425996482372284f, 0.7628189325332642f, 0.5393264293670654f, 0.2945326864719391f, -0.9039642214775085f, 0.7309687733650208f, 0.8661210536956787f, 0.27359768748283386f, 0.17799854278564453f, 0.5008803606033325f, 0.31955763697624207f, 0.3182467222213745f, -0.58180832862854f, 0.9663501977920532f, 0.020875753834843636f, 0.01176028698682785f, 0.6492229700088501f, 0.8298657536506653f, 0.25017407536506653f, 0.45885875821113586f, -0.6136859059333801f, 0.044321224093437195f, 0.5526344776153564f, 0.2646613121032715f, 0.3663945198059082f, 0.9120883345603943f, 0.05708274617791176f, 0.9071598052978516f, -0.731268048286438f, 0.9718244075775146f, 0.7668494582176208f, 0.07375341653823853f, 0.7680211663246155f, 0.13130712509155273f, 0.7263690829277039f, 0.4269023835659027f, -0.30090513825416565f, 0.08750849962234497f, 0.054921966046094894f, 0.9914084076881409f, 0.6836538910865784f, 0.518713116645813f, 0.9661560654640198f, 0.48065289855003357f, -0.20734041929244995f, 0.6288772225379944f, 0.47931578755378723f, 0.33244335651397705f, 0.11166907846927643f, 0.03338529169559479f, 0.2964950203895569f, 0.339509516954422f, -0.81090247631073f, 0.9264026284217834f, 0.2847055494785309f, 0.5429268479347229f, 0.6649433970451355f, 0.36217188835144043f, 0.9393895864486694f, 0.7038547396659851f, -0.832446277141571f, 0.13372910022735596f, 0.6967410445213318f, 0.691938579082489f, 0.560077428817749f, 0.16460682451725006f, 0.21869242191314697f, 0.7275866866111755f, -0.6000016331672668f, 0.3560178875923157f, 0.2563895881175995f, 0.6897763013839722f, 0.24083054065704346f, 0.13180668652057648f, 0.6944037079811096f, 0.6345018744468689f, -0.4435221552848816f, 0.3818599283695221f, 0.6223254799842834f, 0.13631632924079895f, 0.35186928510665894f, 0.9500159621238708f, 0.9292505979537964f, 0.8609728217124939f, -0.8670525550842285f, 0.6601061224937439f, 0.029409779235720634f, 0.9636797904968262f, 0.2531996965408325f, 0.26008766889572144f, 0.7700565457344055f, 0.025262121111154556f, -0.7299379110336304f, 0.4760982096195221f, 0.7681010365486145f, 0.6189386248588562f, 0.4757686257362366f, 0.7484144568443298f, 0.3410695791244507f, 0.3344108760356903f, -0.15968942642211914f, 0.5010729432106018f, 0.5744949579238892f, 0.3018920421600342f, 0.8812851905822754f, 0.19090354442596436f, 0.5108181834220886f, 0.30272015929222107f, -0.855832576751709f, 0.01682019606232643f, 0.6725308895111084f, 0.513978898525238f, 0.7231558561325073f, 0.7457623481750488f, 0.7352665662765503f, 0.8589575290679932f, -0.15370328724384308f, 0.097968690097332f, 0.5470354557037354f, 0.1701967716217041f, 0.3980516493320465f, 0.09524642676115036f, 0.5233121514320374f, 0.020610623061656952f, -0.7475913763046265f, 0.059026047587394714f, 0.87472003698349f, 0.3477936089038849f, 0.5717546939849854f, 0.29943257570266724f, 0.33252450823783875f, 0.34259065985679626f, -0.1307266503572464f, 0.14911548793315887f, 0.9785605669021606f, 0.1898990422487259f, 0.4014125168323517f, 0.7917410731315613f, 0.9914776682853699f, 0.9470024704933167f, -0.06694343686103821f, 0.802141547203064f, 0.11816005408763885f, 0.8209700584411621f, 0.8046455383300781f, 0.5546182990074158f, 0.34096309542655945f, 0.10356909781694412f, -0.09289601445198059f, 0.27555134892463684f, 0.3731372654438019f, 0.35784488916397095f, 0.9301391243934631f, 0.9726642966270447f, 0.6266829967498779f, 0.30086132884025574f, -0.3984285891056061f, 0.2451000213623047f, 0.4810277223587036f, 0.3057732880115509f, 0.38395699858665466f, 0.1445024013519287f, 0.39977148175239563f, 0.009072547778487206f, -0.047196272760629654f, 0.09542988240718842f, 0.5055155158042908f, 0.2629089951515198f, 0.26813480257987976f, 0.8003388047218323f, 0.25782543420791626f, 0.14805097877979279f, -0.21617886424064636f, 0.651469886302948f, 0.04619525745511055f, 0.9382173418998718f, 0.39605557918548584f, 0.4766310155391693f, 0.3635139465332031f, 0.6277796626091003f, -0.5582244992256165f, 0.011674148961901665f, 0.3778867721557617f, 0.7347812056541443f, 0.3275909423828125f, 0.2524089515209198f, 0.6123921871185303f, 0.313350647687912f, -0.38531211018562317f, 0.9371435642242432f, 0.9971540570259094f, 0.8014906644821167f, 0.8904499411582947f, 0.10966166853904724f, 0.3910488784313202f, 0.7488356232643127f, -0.28191471099853516f, 0.2602645456790924f, 0.26360610127449036f, 0.6591086983680725f, 0.05643044039607048f, 0.8912011981010437f, 0.5764657855033875f, 0.6888786554336548f, -0.8199483752250671f, 0.7358336448669434f, 0.8000704646110535f, 0.4522779881954193f, 0.23414519429206848f, 0.3986351788043976f, 0.6169946789741516f, 0.27606508135795593f, -0.3404878079891205f, 0.7504263520240784f, 0.43130263686180115f, 0.680512011051178f, 0.1598081737756729f, 0.9438950419425964f, 0.4214193820953369f, 0.7106729745864868f, -0.2244635820388794f, 0.9566280245780945f, 0.4772648513317108f, 0.00860569067299366f, 0.8112910389900208f, 0.25959306955337524f, 0.34424492716789246f, 0.5691813826560974f, -0.8498429656028748f, 0.6574832201004028f, 0.3664867579936981f, 0.23811067640781403f, 0.5639883875846863f, 0.7253084182739258f, 0.529019296169281f, 0.8531491160392761f, -0.3755435347557068f, 0.9091315269470215f, 0.717705488204956f, 0.5003087520599365f, 0.8218762874603271f, 0.4184149205684662f, 0.6379798650741577f, 0.24824881553649902f, -0.8498408198356628f, 0.36653175950050354f, 0.290168821811676f, 0.1381906121969223f, 0.18360678851604462f, 0.3238220810890198f, 0.5738916397094727f, 0.1460181176662445f, -0.44306373596191406f, 0.7138555645942688f, 0.6805111765861511f, 0.5629780292510986f, 0.15327465534210205f, 0.5806712508201599f, 0.620064377784729f, 0.19826331734657288f, -0.03310873359441757f, 0.9495682120323181f, 0.13872574269771576f, 0.6499401926994324f, 0.044022221118211746f, 0.17829865217208862f, 0.13147220015525818f, 0.6321329474449158f, -0.16425393521785736f, 0.36918875575065613f, 0.1525997817516327f, 0.8980622291564941f, 0.6227561831474304f, 0.33493849635124207f, 0.5348947644233704f, 0.8713693618774414f, -0.1276431828737259f, 0.23796266317367554f, 0.9788485765457153f, 0.27766329050064087f, 0.6911447048187256f, 0.0729895681142807f, 0.008238544687628746f, 0.6565893292427063f, -0.8950185179710388f, 0.9465225338935852f, 0.04465162009000778f, 0.5272761583328247f, 0.1945713609457016f, 0.08023776113986969f, 0.9882856011390686f, 0.10570665448904037f, -0.017231104895472527f, 0.1961381435394287f, 0.8544827103614807f, 0.2661646902561188f, 0.10193924605846405f, 0.9788399934768677f, 0.508489727973938f, 0.00526279816403985f, -0.8364651203155518f, 0.008493051864206791f, 0.6340069770812988f, 0.27727681398391724f, 0.1852254420518875f, 0.8964882493019104f, 0.9138506054878235f, 0.3245462477207184f, -0.7644873857498169f, 0.3963848948478699f, 0.733256995677948f, 0.7597799897193909f, 0.10345931351184845f, 0.11297718435525894f, 0.2705014646053314f, 0.5685546398162842f, -0.5465238094329834f, 0.4824996590614319f, 0.8517687916755676f, 0.0675225481390953f, 0.48036515712738037f, 0.08381208032369614f, 0.25066184997558594f, 0.9994795322418213f, -0.9756842255592346f, 0.6248166561126709f, 0.4573745131492615f, 0.8627220392227173f, 0.7504269480705261f, 0.0696263462305069f, 0.7992243766784668f, 0.37001684308052063f, -0.31258586049079895f, 0.7522594332695007f, 0.8432745933532715f, 0.7058260440826416f, 0.999597430229187f, 0.5971941947937012f, 0.5094471573829651f, 0.6111138463020325f, -0.00859526451677084f, 0.3423653542995453f, 0.5699847936630249f, 0.02035381644964218f, 0.7792762517929077f, 0.26486754417419434f, 0.02963903546333313f, 0.7081286311149597f, -0.5412747859954834f, 0.40622973442077637f, 0.4763862192630768f, 0.25319623947143555f, 0.4532184898853302f, 0.7470301985740662f, 0.6268399953842163f, 0.6585128307342529f, -0.6282665133476257f, 0.6571022868156433f, 0.8814076781272888f, 0.6351767182350159f, 0.008085230365395546f, 0.8051799535751343f, 0.7337180376052856f, 0.3406299650669098f, -0.32629212737083435f, 0.4479820728302002f, 0.6894080638885498f, 0.8104581832885742f, 0.1689586639404297f, 0.18673370778560638f, 0.1218646839261055f, 0.6454970836639404f, -0.1362902671098709f, 0.7611746191978455f, 0.22897687554359436f, 0.7674141526222229f, 0.32386305928230286f, 0.514680802822113f, 0.11507764458656311f, 0.463783860206604f, -0.05839117243885994f, 0.1736578643321991f, 0.9634993076324463f, 0.06246181204915047f, 0.4285435974597931f, 0.8817585706710815f, 0.6656355857849121f, 0.1273033618927002f, -0.8168630003929138f, 0.058652590960264206f, 0.8519590497016907f, 0.7504180669784546f, 0.28106600046157837f, 0.5975583791732788f, 0.2872631847858429f, 0.600885808467865f, -0.5397189855575562f, 0.4786773920059204f, 0.07531861215829849f, 0.3884052336215973f, 0.5028911828994751f, 0.7205650806427002f, 0.5299140810966492f, 0.08490655571222305f, -0.7360885739326477f, 0.7116560935974121f, 0.3219931125640869f, 0.2901073098182678f, 0.055993951857089996f, 0.7497875690460205f, 0.9357072114944458f, 0.8967065811157227f, -0.763752818107605f, 0.3019894063472748f, 0.718966543674469f, 0.8273267149925232f, 0.11269308626651764f, 0.8655956387519836f, 0.4837299883365631f, 0.7921957969665527f, -0.036312080919742584f, 0.4438542127609253f, 0.7644456624984741f, 0.5098525881767273f, 0.8096886873245239f, 0.0901598334312439f, 0.13858211040496826f, 0.2009546309709549f, -0.06314581632614136f, 0.91472327709198f, 0.1600135713815689f, 0.6261599659919739f, 0.61641925573349f, 0.8604519963264465f, 0.4918613135814667f, 0.6094150543212891f, -0.684981107711792f, 0.945443332195282f, 0.7208923101425171f, 0.8101438879966736f, 0.6388096809387207f, 0.757826566696167f, 0.3468169569969177f, 0.039672624319791794f, -0.31801217794418335f, 0.3683360517024994f, 0.2815400958061218f, 0.8939177393913269f, 0.9494072794914246f, 0.5770612359046936f, 0.32395538687705994f, 0.2625291645526886f, -0.35465648770332336f, 0.5213935375213623f, 0.956351637840271f, 0.8212997913360596f, 0.1526707261800766f, 0.11852093040943146f, 0.10874094069004059f, 0.3347419202327728f, -0.5235441327095032f, 0.22166986763477325f, 0.6937387585639954f, 0.3143044412136078f, 0.5766142010688782f, 0.8288829922676086f, 0.25698569416999817f, 0.8507802486419678f, -0.37193551659584045f, 0.22580954432487488f, 0.853976309299469f, 0.44312962889671326f, 0.4873034358024597f, 0.4649302661418915f, 0.2054651826620102f, 0.9389467835426331f, -0.4288264513015747f, 0.3679085075855255f, 0.9263724684715271f, 0.9191169738769531f, 0.48183634877204895f, 0.6699249148368835f, 0.2602076530456543f, 0.26824790239334106f, -0.6311162710189819f, 0.37686604261398315f, 0.5676647424697876f, 0.7448882460594177f, 0.48302215337753296f, 0.4928364157676697f, 0.21424119174480438f, 0.08724778145551682f, -0.36940130591392517f, 0.6514480113983154f, 0.7076849341392517f, 0.7208107113838196f, 0.2726311683654785f, 0.7902769446372986f, 0.2274956852197647f, 0.6160095930099487f, -0.7293105125427246f, 0.6603074669837952f, 0.275064080953598f, 0.4701663553714752f, 0.9169285297393799f, 0.7150539755821228f, 0.3568819761276245f, 0.14766624569892883f, -0.041979286819696426f, 0.09019733220338821f, 0.5725971460342407f, 0.7754639387130737f, 0.5894076228141785f, 0.9792824983596802f, 0.7456132769584656f, 0.15305030345916748f, -0.5441170930862427f, 0.24569083750247955f, 0.23041664063930511f, 0.28891217708587646f, 0.9737464189529419f, 0.006431134417653084f, 0.48186972737312317f, 0.23027710616588593f, -0.039602816104888916f, 0.7802783250808716f, 0.14615054428577423f, 0.5415439009666443f, 0.761740505695343f, 0.8141151666641235f, 0.8614734411239624f, 0.3362327516078949f, -0.1406247764825821f, 0.6145464181900024f, 0.7242382168769836f, 0.918677031993866f, 0.5510053634643555f, 0.623396098613739f, 0.8726004958152771f, 0.2598295211791992f, -0.8027144074440002f, 0.7211681008338928f, 0.2740383446216583f, 0.9000723361968994f, 0.6900942921638489f, 0.29690176248550415f, 0.6063108444213867f, 0.7816162705421448f, -0.10917465388774872f, 0.24685709178447723f, 0.4007122814655304f, 0.5668666362762451f, 0.4584721624851227f, 0.93647700548172f, 0.9980688691139221f, 0.47564131021499634f, -0.8902285695075989f, 0.23314523696899414f, 0.9670830368995667f, 0.3169545531272888f, 0.5439472198486328f, 0.2100415974855423f, 0.9613769054412842f, 0.7707420587539673f, -0.8642554879188538f, 0.7604368925094604f, 0.5427983403205872f, 0.7394641041755676f, 0.7645577788352966f, 0.9107111096382141f, 0.9158008694648743f, 0.6578361988067627f, -0.4789242148399353f, 0.34665387868881226f, 0.08920182287693024f, 0.1596880853176117f, 0.05911737680435181f, 0.2908497750759125f, 0.15579809248447418f, 0.6464256644248962f, -0.2641558051109314f, 0.8235695362091064f, 0.045359063893556595f, 0.8105916976928711f, 0.09770447760820389f, 0.13608239591121674f, 0.3044452667236328f, 0.20681533217430115f, -0.7334978580474854f, 0.9760047793388367f, 0.3874240517616272f, 0.150523379445076f, 0.8990814089775085f, 0.3255769908428192f, 0.5126937627792358f, 0.37052014470100403f, -0.35804569721221924f, 0.5087688565254211f, 0.9414053559303284f, 0.08741389214992523f, 0.664091944694519f, 0.1492283046245575f, 0.6056227684020996f, 0.3105059862136841f, -0.6882418990135193f, 0.23193414509296417f, 0.4741823673248291f, 0.4121200442314148f, 0.8649951815605164f, 0.6697999238967896f, 0.16870391368865967f, 0.6975403428077698f, -0.3177304267883301f, 0.07133367657661438f, 0.2134525626897812f, 0.6214653849601746f, 0.09789023548364639f, 0.09051820635795593f, 0.7356042861938477f, 0.5260187387466431f, -0.8677350878715515f, 0.2310904562473297f, 0.6799161434173584f, 0.8327391147613525f, 0.7313752770423889f, 0.5930948853492737f, 0.8952397704124451f, 0.9682379961013794f, -0.017452610656619072f, 0.8231159448623657f, 0.3977448046207428f, 0.7989091873168945f, 0.8674840927124023f, 0.9549756050109863f, 0.7957454919815063f, 0.11032352596521378f, -0.6915755867958069f, 0.5938089489936829f, 0.3692536950111389f, 0.5266050696372986f, 0.7587047815322876f, 0.7927905321121216f, 0.5574981570243835f, 0.10064802318811417f, -0.5236501693725586f, 0.608356237411499f, 0.8670174479484558f, 0.8135973215103149f, 0.15079952776432037f, 0.6512184143066406f, 0.6761028170585632f, 0.5730655193328857f, -0.2015715092420578f, 0.7071123123168945f, 0.2637609541416168f, 0.2954899072647095f, 0.4651643931865692f, 0.8700369000434875f, 0.8602015972137451f, 0.7653390169143677f, -0.013911097310483456f, 0.27310070395469666f, 0.5510565042495728f, 0.7898263335227966f, 0.6384981274604797f, 0.9017696380615234f, 0.2586338520050049f, 0.826629102230072f, -0.2675137519836426f, 0.1780225783586502f, 0.6678904294967651f, 0.5043407082557678f, 0.8781993389129639f, 0.3559654951095581f, 0.211893692612648f, 0.6452958583831787f, -0.5325132012367249f, 0.011718629859387875f, 0.20981475710868835f, 0.7939326167106628f, 0.5838348269462585f, 0.11015857011079788f, 0.561355710029602f, 0.4356193244457245f, -0.6356310844421387f, 0.024307725951075554f, 0.8376628756523132f, 0.9442686438560486f, 0.4193347096443176f, 0.11734799295663834f, 0.5049760937690735f, 0.4821125268936157f, -0.5348940491676331f, 0.37032389640808105f, 0.718015193939209f, 0.1290174424648285f, 0.10870334506034851f, 0.11441036313772202f, 0.1928686499595642f, 0.30619025230407715f, -0.9615749716758728f, 0.3971867859363556f, 0.2927878201007843f, 0.2768006920814514f, 0.7377459406852722f, 0.9879685640335083f, 0.7314679622650146f, 0.06724771857261658f, -0.9222954511642456f, 0.2556686997413635f, 0.43419918417930603f, 0.1464882344007492f, 0.5155189633369446f, 0.9166248440742493f, 0.2932718098163605f, 0.2218017727136612f, -0.09410691261291504f, 0.26192691922187805f, 0.7963070869445801f, 0.2955492436885834f, 0.748132586479187f, 0.20535536110401154f, 0.4865565598011017f, 0.008651298470795155f, -0.43278923630714417f, 0.7985188961029053f, 0.1608806550502777f, 0.10816764086484909f, 0.3570184111595154f, 0.9582346677780151f, 0.2825400233268738f, 0.5934984087944031f, -0.9384073615074158f, 0.958225429058075f, 0.036693863570690155f, 0.30068060755729675f, 0.9045685529708862f, 0.30096498131752014f, 0.30064070224761963f, 0.30861249566078186f, -0.11464887112379074f, 0.5640683770179749f, 0.0008562649600207806f, 0.44492653012275696f, 0.3835830092430115f, 0.7498173117637634f, 0.7718920707702637f, 0.17056547105312347f, -0.038447026163339615f, 0.09513174742460251f, 0.3430221974849701f, 0.2615427076816559f, 0.39870452880859375f, 0.7056438326835632f, 0.1251922845840454f, 0.8077690005302429f, -0.01639156974852085f, 0.7095551490783691f, 0.24426893889904022f, 0.9087854623794556f, 0.05040924623608589f, 0.408217191696167f, 0.18423090875148773f, 0.21161238849163055f, -0.43543437123298645f, 0.6627578735351562f, 0.7146008610725403f, 0.6035900712013245f, 0.529333233833313f, 0.21340839564800262f, 0.8996151089668274f, 0.09386662393808365f, -0.2540862262248993f, 0.980165958404541f, 0.05390810966491699f, 0.7871012687683105f, 0.9074702858924866f, 0.2779761850833893f, 0.2004769891500473f, 0.9631006717681885f, -0.2806033492088318f, 0.4733009934425354f, 0.7789165377616882f, 0.6611096858978271f, 0.5042128562927246f, 0.3820691704750061f, 0.626338541507721f, 0.7811993956565857f, -0.6791056394577026f, 0.4821861982345581f, 0.9137478470802307f, 0.9918507933616638f, 0.9557873606681824f, 0.6202739477157593f, 0.4475477635860443f, 0.5761096477508545f, -0.6268888115882874f, 0.11185497790575027f, 0.959466814994812f, 0.16480134427547455f, 0.07352381944656372f, 0.19879421591758728f, 0.24810823798179626f, 0.4152156710624695f, -0.49357715249061584f, 0.6528423428535461f, 0.2859891355037689f, 0.5857186913490295f, 0.9987978339195251f, 0.730319619178772f, 0.43794646859169006f, 0.09959283471107483f, -0.24411262571811676f, 0.8150689005851746f, 0.4596823751926422f, 0.12228861451148987f, 0.6166091561317444f, 0.12531903386116028f, 0.6414034962654114f, 0.9573218822479248f, -0.8546504974365234f, 0.6751397848129272f, 0.3838517963886261f, 0.8683927655220032f, 0.07973464578390121f, 0.2179049253463745f, 0.9572743773460388f, 0.46801918745040894f, -0.8399494886398315f, 0.9681826233863831f, 0.66143399477005f, 0.7294362187385559f, 0.5193617343902588f, 0.7469568252563477f, 0.8567246198654175f, 0.33090299367904663f, -0.2288818359375f, 0.965274453163147f, 0.9835024476051331f, 0.9913169741630554f, 0.8859872817993164f, 0.44792261719703674f, 0.05869225040078163f, 0.6252506375312805f, -0.11327920854091644f, 0.5487222075462341f, 0.9073095321655273f, 0.6487051248550415f, 0.7844598293304443f, 0.4768316149711609f, 0.6877486705780029f, 0.7270609736442566f, -0.4481867849826813f, 0.23090021312236786f, 0.2683020234107971f, 0.5255069732666016f, 0.3224920332431793f, 0.382148802280426f, 0.18706415593624115f, 0.9204190969467163f, -0.015535577200353146f, 0.05500267073512077f, 0.2252250611782074f, 0.211472287774086f, 0.8297892808914185f, 0.23618873953819275f, 0.006582912057638168f, 0.8843339085578918f, -0.6393924355506897f, 0.8076550364494324f, 0.5183140635490417f, 0.26824337244033813f, 0.1480688601732254f, 0.39484676718711853f, 0.9487656354904175f, 0.7566969990730286f, -0.8432870507240295f, 0.02448856830596924f, 0.7658085227012634f, 0.9377791285514832f, 0.5420747399330139f, 0.6556604504585266f, 0.08747066557407379f, 0.5443596839904785f, -0.4052574038505554f, 0.3203507363796234f, 0.822787344455719f, 0.032003890722990036f, 0.6695392727851868f, 0.5446551442146301f, 0.6920169591903687f, 0.4448991119861603f, -0.06370392441749573f, 0.33296650648117065f, 0.6995439529418945f, 0.28529903292655945f, 0.7440990805625916f, 0.5105510950088501f, 0.7143868207931519f, 0.07066404074430466f, -0.385903537273407f, 0.5823546648025513f, 0.994720458984375f, 0.576806366443634f, 0.3940090537071228f, 0.3170064389705658f, 0.6699542999267578f, 0.19013872742652893f, -0.3893728256225586f, 0.7362281084060669f, 0.8920674920082092f, 0.7073817253112793f, 0.6037477850914001f, 0.6433694958686829f, 0.8289421200752258f, 0.035648733377456665f, -0.23307865858078003f, 0.6910347938537598f, 0.7364698648452759f, 0.11124001443386078f, 0.9497097730636597f, 0.2656404674053192f, 0.7701830863952637f, 0.6136803030967712f, -0.708391010761261f, 0.01412466075271368f, 0.577406644821167f, 0.4952826499938965f, 0.3777950406074524f, 0.7954854965209961f, 0.9261913299560547f, 0.7013722658157349f, -0.04999064654111862f, 0.3203633725643158f, 0.9947193264961243f, 0.6685425043106079f, 0.6150233745574951f, 0.2328808307647705f, 0.7066190838813782f, 0.5304735898971558f, -0.6411893367767334f, 0.9072098135948181f, 0.4077155292034149f, 0.6266298890113831f, 0.46517881751060486f, 0.5840455293655396f, 0.1599084734916687f, 0.5580611824989319f, -0.8466250896453857f, 0.7870544195175171f, 0.115798220038414f, 0.20253542065620422f, 0.4279564321041107f, 0.37540197372436523f, 0.3153150975704193f, 0.9703922867774963f, -0.19217200577259064f, 0.5648425817489624f, 0.09674515575170517f, 0.8675395846366882f, 0.7124395370483398f, 0.480272114276886f, 0.1501670777797699f, 0.1223861575126648f, -0.3021356761455536f, 0.7567285299301147f, 0.6520135402679443f, 0.24159522354602814f, 0.204560324549675f, 0.9165695905685425f, 0.31939250230789185f, 0.3525674045085907f, -0.7836206555366516f, 0.5017123222351074f, 0.006927590351551771f, 0.30687859654426575f, 0.11488955467939377f, 0.1854090690612793f, 0.24376583099365234f, 0.6002733111381531f, -0.40526220202445984f, 0.39353516697883606f, 0.9914536476135254f, 0.5037426948547363f, 0.4760286211967468f, 0.40774720907211304f, 0.5020732283592224f, 0.26212599873542786f, -0.09341031312942505f, 0.4905644655227661f, 0.6715548038482666f, 0.7712488174438477f, 0.5153745412826538f, 0.026756420731544495f, 0.5626112222671509f, 0.7768387794494629f, -0.7202670574188232f, 0.9843764901161194f, 0.19373257458209991f, 0.8554725646972656f, 0.4146493673324585f, 0.043504081666469574f, 0.6741847395896912f, 0.13825516402721405f, -0.8535534143447876f, 0.6937730312347412f, 0.3564263582229614f, 0.900119960308075f, 0.1355661302804947f, 0.5328006744384766f, 0.10197212547063828f, 0.7942118644714355f, -0.5651108622550964f, 0.5053865313529968f, 0.8503984212875366f, 0.01231599785387516f, 0.9142091274261475f, 0.15010766685009003f, 0.5202000737190247f, 0.46435636281967163f, -0.21617309749126434f, 0.004264758434146643f, 0.19209221005439758f, 0.4661063253879547f, 0.9118270874023438f, 0.38673850893974304f, 0.7500752806663513f, 0.16029423475265503f, -0.006145621184259653f, 0.9612389206886292f, 0.6962277293205261f, 0.6374860405921936f, 0.0933627188205719f, 0.5084052681922913f, 0.48220252990722656f, 0.5076528191566467f, -0.42093825340270996f, 0.8117958307266235f, 0.9111685156822205f, 0.2971266806125641f, 0.804532527923584f, 0.6563779711723328f, 0.4289886951446533f, 0.9603080749511719f, -0.6727513670921326f, 0.016241539269685745f, 0.9700590372085571f, 0.8172082901000977f, 0.4240187108516693f, 0.24469435214996338f, 0.05037347227334976f, 0.04742184281349182f, -0.38364163041114807f, 0.4397599697113037f, 0.7054752111434937f, 0.6870689392089844f, 0.28947657346725464f, 0.6738980412483215f, 0.1482684314250946f, 0.9846490025520325f, -0.35566970705986023f, 0.9052540063858032f, 0.773290753364563f, 0.08384224027395248f, 0.29624098539352417f, 0.22736598551273346f, 0.6411918997764587f, 0.5201940536499023f, -0.31900596618652344f, 0.7701492309570312f, 0.4361753761768341f, 0.92261803150177f, 0.4187772572040558f, 0.7681120038032532f, 0.6071146726608276f, 0.8849411010742188f, -0.6250904202461243f, 0.33532336354255676f, 0.5485544800758362f, 0.09889616072177887f, 0.7910281419754028f, 0.869133472442627f, 0.4044482707977295f, 0.6161046624183655f, -0.5378732085227966f, 0.7461917400360107f, 0.5541404485702515f, 0.8186034560203552f, 0.29536259174346924f, 0.327586829662323f, 0.21862228214740753f, 0.7868355512619019f, -0.06831581145524979f, 0.10693638771772385f, 0.9794858694076538f, 0.6168851256370544f, 0.625780463218689f, 0.3152378499507904f, 0.5503268241882324f, 0.8714452981948853f, -0.13587960600852966f, 0.02668643556535244f, 0.4368845224380493f, 0.32270509004592896f, 0.363224059343338f, 0.21380481123924255f, 0.768843948841095f, 0.133777916431427f, -0.14246666431427002f, 0.8847102522850037f, 0.9176287651062012f, 0.9171268939971924f, 0.8338689208030701f, 0.8515989780426025f, 0.5860781669616699f, 0.649692714214325f, -0.43401920795440674f, 0.569852352142334f, 0.10477466136217117f, 0.45109492540359497f, 0.0915578305721283f, 0.9149369597434998f, 0.16914333403110504f, 0.7073737382888794f, -0.7405987977981567f, 0.2897697985172272f, 0.23366416990756989f, 0.7129048109054565f, 0.8497933149337769f, 0.09334281831979752f, 0.14261764287948608f, 0.11232168972492218f, -0.5194309949874878f, 0.8770115971565247f, 0.6997612118721008f, 0.41989272832870483f, 0.006701534613966942f, 0.07158957421779633f, 0.5488724708557129f, 0.6789095401763916f, -0.5079797506332397f, 0.1910392940044403f, 0.8569587469100952f, 0.6905708909034729f, 0.4448414146900177f, 0.8031890392303467f, 0.18255019187927246f, 0.08394696563482285f, -0.7202576994895935f, 0.060032039880752563f, 0.14022915065288544f, 0.7460125088691711f, 0.7378683686256409f, 0.5510162711143494f, 0.44571125507354736f, 0.6370839476585388f, -0.9176910519599915f, 0.2984299957752228f, 0.6430026888847351f, 0.6238656044006348f, 0.4110470712184906f, 0.325793981552124f, 0.11117175221443176f, 0.6015374660491943f, -0.5517833828926086f, 0.12609638273715973f, 0.19085495173931122f, 0.9243777394294739f, 0.056373126804828644f, 0.6868749260902405f, 0.04444548860192299f, 0.008680449798703194f, -0.8110294938087463f, 0.38426440954208374f, 0.925113320350647f, 0.4869113564491272f, 0.38356414437294006f, 0.030035465955734253f, 0.050180330872535706f, 0.0036471823696047068f, -0.6445372104644775f, 0.7898935675621033f, 0.053584013134241104f, 0.6031231880187988f, 0.13457828760147095f, 0.08832281082868576f, 0.9330215454101562f, 0.9482473731040955f, -0.3624163269996643f, 0.004679799545556307f, 0.6188679933547974f, 0.49322953820228577f, 0.24209702014923096f, 0.2669011652469635f, 0.26405811309814453f, 0.5797443985939026f, -0.2851620614528656f, 0.7969651222229004f, 0.7816630601882935f, 0.007769216317683458f, 0.6522151827812195f, 0.3141825199127197f, 0.4911031126976013f, 0.32458817958831787f, -0.13677729666233063f, 0.6369267702102661f, 0.6397440433502197f, 0.7996035218238831f, 0.9710116982460022f, 0.42584341764450073f, 0.42546334862709045f, 0.3703427016735077f, -0.382591187953949f, 0.2484421283006668f, 0.11974845081567764f, 0.11404025554656982f, 0.8401291370391846f, 0.1401240974664688f, 0.8929972052574158f, 0.9942436814308167f, -0.6538568139076233f, 0.1783503293991089f, 0.767174482345581f, 0.9430117607116699f, 0.9849749803543091f, 0.43687111139297485f, 0.5201559066772461f, 0.18471813201904297f, -0.28158441185951233f, 0.8745139241218567f, 0.5279066562652588f, 0.020574364811182022f, 0.061986807733774185f, 0.9972028732299805f, 0.15948107838630676f, 0.6922028064727783f, -0.1952204555273056f, 0.2751502990722656f, 0.8873990178108215f, 0.33656084537506104f, 0.500852644443512f, 0.3003527522087097f, 0.8302664756774902f, 0.8108580708503723f, -0.31987321376800537f, 0.5984954833984375f, 0.8754511475563049f, 0.026963936164975166f, 0.29153627157211304f, 0.07258889079093933f, 0.2140178233385086f, 0.005140119232237339f, -0.9548718333244324f, 0.12547409534454346f, 0.07604391127824783f, 0.6667263507843018f, 0.9634590744972229f, 0.7385352253913879f, 0.2518521547317505f, 0.8992658853530884f, -0.6627513766288757f, 0.2979545295238495f, 0.7432037591934204f, 0.12519638240337372f, 0.9596320986747742f, 0.2638978362083435f, 0.31609827280044556f, 0.15316450595855713f, -0.1637657731771469f, 0.9772557020187378f, 0.28365761041641235f, 0.16771772503852844f, 0.08121037483215332f, 0.6655564308166504f, 0.7900506854057312f, 0.3919464945793152f, -0.40542125701904297f, 0.7182019948959351f, 0.4027900993824005f, 0.02943609282374382f, 0.6047344207763672f, 0.2595202922821045f, 0.22222471237182617f, 0.5052624344825745f, -0.0527794174849987f, 0.19468837976455688f, 0.7768763303756714f, 0.893054723739624f, 0.16386421024799347f, 0.6576530933380127f, 0.676825225353241f, 0.1079707220196724f, -0.40976405143737793f, 0.6181525588035583f, 0.842616856098175f, 0.7238441109657288f, 0.33888164162635803f, 0.13742245733737946f, 0.9008933305740356f, 0.5121082067489624f, -0.48709729313850403f, 0.041550006717443466f, 0.859318196773529f, 0.7564782500267029f, 0.22175750136375427f, 0.5469247102737427f, 0.09506642818450928f, 0.47149696946144104f, -0.7297288775444031f, 0.3460483253002167f, 0.07124141603708267f, 0.13049107789993286f, 0.24674734473228455f, 0.04640786349773407f, 0.29435744881629944f, 0.7441763877868652f, -0.6770779490470886f, 0.7957504987716675f, 0.676411509513855f, 0.6055048704147339f, 0.22792576253414154f, 0.8205337524414062f, 0.5172913670539856f, 0.9201855063438416f, -0.36456063389778137f, 0.8747440576553345f, 0.306564062833786f, 0.632875382900238f, 0.2421923577785492f, 0.1103879064321518f, 0.06829017400741577f, 0.9303755164146423f, -0.5233321785926819f, 0.7933428883552551f, 0.5025737881660461f, 0.44847458600997925f, 0.12457186728715897f, 0.47468727827072144f, 0.0009496762650087476f, 0.7442843317985535f, -0.6779741644859314f, 0.14771367609500885f, 0.48417821526527405f, 0.616725742816925f, 0.5811732411384583f, 0.9016885757446289f, 0.400730699300766f, 0.43372294306755066f, -0.7545782923698425f, 0.6026554703712463f, 0.9480524063110352f, 0.8154183030128479f, 0.09879112243652344f, 0.8041036128997803f, 0.4781009554862976f, 0.4869787096977234f, -0.7465505003929138f, 0.5283722281455994f, 0.38916128873825073f, 0.12342985719442368f, 0.810600996017456f, 0.2769741117954254f, 0.5049938559532166f, 0.7976837158203125f, -0.9056423902511597f, 0.9328929781913757f, 0.39615103602409363f, 0.7491140365600586f, 0.1310722827911377f, 0.2753143310546875f, 0.6224308609962463f, 0.49512243270874023f, -0.00449067447334528f, 0.9595667719841003f, 0.6340397596359253f, 0.9797345995903015f, 0.7734916806221008f, 0.8984467387199402f, 0.8886191248893738f, 0.47249162197113037f, -0.4393557012081146f, 0.6462767124176025f, 0.5933296084403992f, 0.42522722482681274f, 0.10916342586278915f, 0.08680140227079391f, 0.24664415419101715f, 0.47775715589523315f, -0.4855806231498718f, 0.6134840846061707f, 0.2898593246936798f, 0.8290701508522034f, 0.42900997400283813f, 0.49876919388771057f, 0.8487353920936584f, 0.319838285446167f, -0.23646484315395355f, 0.4137439429759979f, 0.6165494918823242f, 0.18418796360492706f, 0.8516511917114258f, 0.6952051520347595f, 0.046291109174489975f, 0.2549753487110138f, -0.0790400579571724f, 0.45487549901008606f, 0.6168434023857117f, 0.7066468596458435f, 0.017011823132634163f, 0.48776331543922424f, 0.6426578760147095f, 0.013052280992269516f, -0.6549369692802429f, 0.429256796836853f, 0.3049158453941345f, 0.6957093477249146f, 0.022187810391187668f, 0.03684202954173088f, 0.30731400847435f, 0.10517127811908722f, -0.26124000549316406f, 0.8894132971763611f, 0.8112437129020691f, 0.8357527852058411f, 0.9472554326057434f, 0.4329793155193329f, 0.6652222871780396f, 0.9298874139785767f, -0.6110408306121826f, 0.032409604638814926f, 0.08754116296768188f, 0.7463194727897644f, 0.5791641473770142f, 0.827066957950592f, 0.46519356966018677f, 0.5204598903656006f, -0.18158432841300964f, 0.3243331015110016f, 0.9342523813247681f, 0.15146799385547638f, 0.45928820967674255f, 0.8326301574707031f, 0.14005444943904877f, 0.09362005442380905f, -0.9953796863555908f, 0.7911762595176697f, 0.1267096996307373f, 0.34376588463783264f, 0.8510094881057739f, 0.46842941641807556f, 0.346457839012146f, 0.32749518752098083f, -0.18153725564479828f, 0.6782345771789551f, 0.4203369915485382f, 0.43732357025146484f, 0.6255802512168884f, 0.3704475462436676f, 0.20163412392139435f, 0.80680251121521f, -0.31801968812942505f, 0.4174995422363281f, 0.48962682485580444f, 0.06287279725074768f, 0.6986520290374756f, 0.6423591375350952f, 0.2377258539199829f, 0.4740665555000305f, -0.8590381741523743f, 0.39910250902175903f, 0.5029340386390686f, 0.8966150879859924f, 0.6496455669403076f, 0.5398135781288147f, 0.4770446717739105f, 0.788791298866272f, -0.8293825387954712f, 0.14845888316631317f, 0.9870501160621643f, 0.376336932182312f, 0.03848675638437271f, 0.9727913737297058f, 0.37619030475616455f, 0.42637157440185547f, -0.46650004386901855f, 0.7431149482727051f, 0.4175697863101959f, 0.640287458896637f, 0.568381130695343f, 0.2579547166824341f, 0.641636073589325f, 0.1478125900030136f, -0.31823575496673584f, 0.34915679693222046f, 0.18013985455036163f, 0.22360043227672577f, 0.04669598489999771f, 0.2913743555545807f, 0.6393958330154419f, 0.9391822218894958f, -0.11217108368873596f, 0.7453210949897766f, 0.9593744874000549f, 0.17173726856708527f, 0.9410608410835266f, 0.6299992799758911f, 0.8740059733390808f, 0.10466509312391281f, -0.17159409821033478f, 0.49536579847335815f, 0.9271700978279114f, 0.5727313756942749f, 0.957439661026001f, 0.839954674243927f, 0.5918412208557129f, 0.4700823426246643f, -0.1001657173037529f, 0.08427803963422775f, 0.03796070069074631f, 0.5527392029762268f, 0.7127602696418762f, 0.19607889652252197f, 0.7327172756195068f, 0.3460182845592499f, -0.620244562625885f, 0.6980122923851013f, 0.15063878893852234f, 0.8109145164489746f, 0.20532360672950745f, 0.8913280963897705f, 0.05896269530057907f, 0.3116239011287689f, -0.14898143708705902f, 0.8142029643058777f, 0.8496450781822205f, 0.4775434732437134f, 0.3105534017086029f, 0.5271511077880859f, 0.7324855923652649f, 0.05180090293288231f, -0.8541634678840637f, 0.31162986159324646f, 0.19724877178668976f, 0.3811572790145874f, 0.06359859555959702f, 0.04842301085591316f, 0.16851812601089478f, 0.516972005367279f, -0.32968616485595703f, 0.6283861398696899f, 0.3558507263660431f, 0.529520571231842f, 0.6685140132904053f, 0.00802494864910841f, 0.6823577284812927f, 0.4804893732070923f, -0.4705425500869751f, 0.7184487581253052f, 0.8632919192314148f, 0.7000611424446106f, 0.7056750655174255f, 0.8193451166152954f, 0.27268415689468384f, 0.4736228585243225f, -0.12253202497959137f, 0.3097652196884155f, 0.7067349553108215f, 0.8763047456741333f, 0.9348248243331909f, 0.37324681878089905f, 0.8631926774978638f, 0.0005795665783807635f, -0.16854460537433624f, 0.24294345080852509f, 0.5107361078262329f, 0.5216225981712341f, 0.5009351372718811f, 0.478626012802124f, 0.46375197172164917f, 0.7337203621864319f, -0.04044643044471741f, 0.36026376485824585f, 0.14224392175674438f, 0.8044446706771851f, 0.9371410012245178f, 0.0326550230383873f, 0.885744035243988f, 0.9980171322822571f, -0.7957698106765747f, 0.35966700315475464f, 0.4741291105747223f, 0.49295881390571594f, 0.7551672458648682f, 0.31813815236091614f, 0.9091549515724182f, 0.5421424508094788f, -0.8481045365333557f, 0.8547366261482239f, 0.013905303552746773f, 0.28406208753585815f, 0.3202040195465088f, 0.7735182046890259f, 0.08323010057210922f, 0.7832632064819336f, -0.18958406150341034f, 0.3535626530647278f, 0.568040132522583f, 0.8007280826568604f, 0.5416148900985718f, 0.6903647184371948f, 0.9646404981613159f, 0.7713019251823425f, -0.13623948395252228f, 0.8180462718009949f, 0.9199146628379822f, 0.9354081153869629f, 0.7662935256958008f, 0.9195414185523987f, 0.9703246355056763f, 0.7340379953384399f, -0.19422851502895355f, 0.6500479578971863f, 0.8765807747840881f, 0.6883804202079773f, 0.7623393535614014f, 0.027204981073737144f, 0.05161699652671814f, 0.41813552379608154f, -0.4538290500640869f, 0.2882668077945709f, 0.9704877138137817f, 0.15640610456466675f, 0.5917404890060425f, 0.8900675177574158f, 0.03289782628417015f, 0.32889458537101746f, -0.21154847741127014f, 0.13308213651180267f, 0.345159649848938f, 0.3570396900177002f, 0.06639862060546875f, 0.8183826804161072f, 0.30824461579322815f, 0.44301605224609375f, -0.6321741938591003f, 0.676125705242157f, 0.8871017098426819f, 0.3565536439418793f, 0.8391872048377991f, 0.14964871108531952f, 0.44758838415145874f, 0.3797122538089752f, -0.13498690724372864f, 0.07423631846904755f, 0.34774938225746155f, 0.9920380711555481f, 0.3515379726886749f, 0.0580490417778492f, 0.6425381302833557f, 0.7040601372718811f, -0.6312501430511475f, 0.1566656529903412f, 0.4331305921077728f, 0.6637678146362305f, 0.5297091603279114f, 0.7591109871864319f, 0.718058705329895f, 0.1331145018339157f, -0.34872937202453613f, 0.5667077302932739f, 0.009451565332710743f, 0.07611965388059616f, 0.6789050102233887f, 0.9318803548812866f, 0.3578347861766815f, 0.6367613077163696f, -0.08917607367038727f, 0.10701699554920197f, 0.07746382057666779f, 0.552294909954071f, 0.5610870718955994f, 0.0446443185210228f, 0.6468895077705383f, 0.787960946559906f, -0.2777068316936493f, 0.5759572386741638f, 0.4580576419830322f, 0.16439448297023773f, 0.7236723303794861f, 0.2549830675125122f, 0.010121823288500309f, 0.5820083618164062f, -0.8862976431846619f, 0.25246793031692505f, 0.47015830874443054f, 0.1000041514635086f, 0.11931253224611282f, 0.48751991987228394f, 0.06738389283418655f, 0.496472030878067f, -0.653569221496582f, 0.3714289963245392f, 0.4319644570350647f, 0.336825430393219f, 0.9956740736961365f, 0.42727360129356384f, 0.5465365648269653f, 0.5181028246879578f, -0.3833737075328827f, 0.19355764985084534f, 0.9675534963607788f, 0.06348181515932083f, 0.6089453101158142f, 0.3592234253883362f, 0.6000683307647705f, 0.061210520565509796f, -0.029101120308041573f, 0.5936784148216248f, 0.9095264077186584f, 0.2495739758014679f, 0.5873836874961853f, 0.1420622169971466f, 0.739567220211029f, 0.19578927755355835f, -0.7385765314102173f, 0.9067811965942383f, 0.8486055731773376f, 0.9837058186531067f, 0.29836440086364746f, 0.6877021193504333f, 0.5903028845787048f, 0.19642895460128784f, -0.8787137866020203f, 0.0841301903128624f, 0.7943556904792786f, 0.16527889668941498f, 0.8523125648498535f, 0.6870670914649963f, 0.6564018726348877f, 0.0742592066526413f, -0.1909959316253662f, 0.24246586859226227f, 0.1895219087600708f, 0.8358486890792847f, 0.0935959592461586f, 0.8047543168067932f, 0.15972061455249786f, 0.3503771126270294f, -0.1490609496831894f, 0.14397116005420685f, 0.26535898447036743f, 0.13074876368045807f, 0.27092283964157104f, 0.8563960790634155f, 0.46948665380477905f, 0.7743754982948303f, -0.7235698699951172f, 0.36247363686561584f, 0.3013670742511749f, 0.09727440029382706f, 0.8762600421905518f, 0.24587932229042053f, 0.40109652280807495f, 0.8649734258651733f, -0.9336647391319275f, 0.43708768486976624f, 0.6049294471740723f, 0.255655974149704f, 0.9328819513320923f, 0.2444666177034378f, 0.826948881149292f, 0.6702670454978943f, -0.6950446963310242f, 0.8281733989715576f, 0.08237987011671066f, 0.3642151951789856f, 0.1662401407957077f, 0.06372445076704025f, 0.006659379228949547f, 0.845617949962616f, -0.7541728615760803f, 0.9957898259162903f, 0.6618273258209229f, 0.9057500958442688f, 0.6916821599006653f, 0.5027392506599426f, 0.4648323655128479f, 0.3407818675041199f, -0.6749856472015381f, 0.03698443993926048f, 0.9009937047958374f, 0.10104287415742874f, 0.16467653214931488f, 0.9814313054084778f, 0.49538952112197876f, 0.3448074758052826f, -0.7691171169281006f, 0.3092241883277893f, 0.08165004849433899f, 0.2848353683948517f, 0.6640433073043823f, 0.19554990530014038f, 0.8237138390541077f, 0.5030222535133362f, -0.4206492602825165f, 0.25120389461517334f, 0.6046514511108398f, 0.07601730525493622f, 0.1330145299434662f, 0.6724989414215088f, 0.7874599099159241f, 0.14600715041160583f, -0.13476455211639404f, 0.3574252724647522f, 0.3986930847167969f, 0.7257353067398071f, 0.22837863862514496f, 0.7054581642150879f, 0.05976414680480957f, 0.3800572454929352f, -0.04882030561566353f, 0.05236385390162468f, 0.2687576711177826f, 0.6770342588424683f, 0.25999516248703003f, 0.0361470989882946f, 0.19319656491279602f, 0.8761172890663147f, -0.5444719791412354f, 0.8451128602027893f, 0.8813159465789795f, 0.4938143789768219f, 0.7055662870407104f, 0.8463300466537476f, 0.34398704767227173f, 0.11378219723701477f, -0.7325452566146851f, 0.1461954414844513f, 0.7555974125862122f, 0.7379223704338074f, 0.6819843053817749f, 0.7267434597015381f, 0.8767465353012085f, 0.2933420240879059f, -0.4890598952770233f, 0.0212069321423769f, 0.9891558289527893f, 0.4106234312057495f, 0.3450803756713867f, 0.1439986526966095f, 0.35904553532600403f, 0.3339088559150696f, -0.8315606713294983f, 0.21613307297229767f, 0.01344362460076809f, 0.5848115682601929f, 0.04564860463142395f, 0.7490732073783875f, 0.8253284096717834f, 0.4316701889038086f, -0.5979848504066467f, 0.44651979207992554f, 0.3943747878074646f, 0.5235708951950073f, 0.9926310777664185f, 0.29221388697624207f, 0.19680270552635193f, 0.6755350232124329f, -0.40159836411476135f, 0.987826406955719f, 0.745277464389801f, 0.9018792510032654f, 0.35084059834480286f, 0.20024383068084717f, 0.04896213114261627f, 0.49694904685020447f, -0.605735182762146f, 0.7954388856887817f, 0.19626253843307495f, 0.1956627070903778f, 0.5341795086860657f, 0.5024743676185608f, 0.014993392862379551f, 0.38540205359458923f, -0.5236415266990662f, 0.04877897724509239f, 0.6894568800926208f, 0.09259936958551407f, 0.23512321710586548f, 0.28606557846069336f, 0.9403725266456604f, 0.16200241446495056f, -0.009545564651489258f, 0.2548865079879761f, 0.6211538314819336f, 0.6058037877082825f, 0.11751123517751694f, 0.9841016530990601f, 0.868280827999115f, 0.6807576417922974f, -0.5288359522819519f, 0.7386897206306458f, 0.21845585107803345f, 0.8075259327888489f, 0.9664130210876465f, 0.7321689128875732f, 0.9266080260276794f, 0.28900957107543945f, -0.6708836555480957f, 0.5925166606903076f, 0.5760611891746521f, 0.6849597692489624f, 0.5411974787712097f, 0.5376175045967102f, 0.7623978853225708f, 0.2413891851902008f, -0.41113823652267456f, 0.06488040089607239f, 0.6999902725219727f, 0.15086820721626282f, 0.15376457571983337f, 0.9297424554824829f, 0.35885384678840637f, 0.7644932270050049f, -0.5517265200614929f, 0.8581104874610901f, 0.7613046169281006f, 0.37081804871559143f, 0.6909959316253662f, 0.75062495470047f, 0.6264210939407349f, 0.35734450817108154f, -0.41588640213012695f, 0.9325741529464722f, 0.1534324586391449f, 0.6147099137306213f, 0.2872954308986664f, 0.7505248785018921f, 0.34473681449890137f, 0.7266234755516052f, -0.3986111283302307f, 0.3822864890098572f, 0.1458597332239151f, 0.2963619530200958f, 0.5219767689704895f, 0.14067289233207703f, 0.5199370384216309f, 0.05432760342955589f, -0.8420214056968689f, 0.9314026236534119f, 0.5641862154006958f, 0.9931259751319885f, 0.2797068655490875f, 0.35241469740867615f, 0.44708967208862305f, 0.5367526412010193f, -0.9493468403816223f, 0.23425225913524628f, 0.08498836308717728f, 0.07983919978141785f, 0.7152637839317322f, 0.8234971165657043f, 0.3857296109199524f, 0.2826245129108429f, -0.2864370048046112f, 0.683264970779419f, 0.7781257629394531f, 0.4886723756790161f, 0.1549486368894577f, 0.2122451663017273f, 0.8452211022377014f, 0.2503514587879181f, -0.9887250065803528f, 0.9238770604133606f, 0.6595437526702881f, 0.48035746812820435f, 0.8619191646575928f, 0.9386931657791138f, 0.16051380336284637f, 0.9627431631088257f, -0.9744159579277039f, 0.941740095615387f, 0.10595807433128357f, 0.14068880677223206f, 0.35661211609840393f, 0.25669121742248535f, 0.6941850185394287f, 0.4722435772418976f, -0.603888750076294f, 0.4591353237628937f, 0.7980840802192688f, 0.013665251433849335f, 0.5599483251571655f, 0.38776999711990356f, 0.3471405804157257f, 0.8026894330978394f, -0.45743292570114136f, 0.21231234073638916f, 0.5065804719924927f, 0.14633575081825256f, 0.8950435519218445f, 0.5867763161659241f, 0.910106360912323f, 0.3098728060722351f, -0.9953082203865051f, 0.666747510433197f, 0.4353550374507904f, 0.8947281837463379f, 0.5719383358955383f, 0.7113384008407593f, 0.5519571900367737f, 0.5863171219825745f, -0.4874473214149475f, 0.1556743085384369f, 0.7369675636291504f, 0.925105631351471f, 0.19426105916500092f, 0.7343809604644775f, 0.961077094078064f, 0.05169342830777168f, -0.17810921370983124f, 0.7849077582359314f, 0.6843792796134949f, 0.35273537039756775f, 0.49280235171318054f, 0.12099360674619675f, 0.586336076259613f, 0.276228666305542f, -0.5898850560188293f, 0.7591930031776428f, 0.5276045799255371f, 0.31932228803634644f, 0.14917610585689545f, 0.9900056719779968f, 0.035668738186359406f, 0.8014650344848633f, -0.8675276041030884f, 0.2973172664642334f, 0.011039095930755138f, 0.14318662881851196f, 0.6018694043159485f, 0.18767878413200378f, 0.7140759229660034f, 0.04367468133568764f, -0.8636370301246643f, 0.4637971818447113f, 0.44434624910354614f, 0.3136444687843323f, 0.24275095760822296f, 0.7901705503463745f, 0.7493728995323181f, 0.712225615978241f, -0.617226243019104f, 0.4846939444541931f, 0.43818676471710205f, 0.14349178969860077f, 0.8476974368095398f, 0.9915418028831482f, 0.5379908084869385f, 0.5145414471626282f, -0.22534428536891937f, 0.177499920129776f, 0.05418362095952034f, 0.3038042187690735f, 0.890042245388031f, 0.7300527095794678f, 0.43033918738365173f, 0.9075498580932617f, -0.0817367359995842f, 0.5357419848442078f, 0.7102137804031372f, 0.4585888683795929f, 0.47434648871421814f, 0.31247830390930176f, 0.1745961308479309f, 0.7754708528518677f, -0.760891854763031f, 0.24993860721588135f, 0.127696231007576f, 0.16630099713802338f, 0.8305762410163879f, 0.34933575987815857f, 0.8312034010887146f, 0.13936792314052582f, -0.5457091927528381f, 0.9447354078292847f, 0.18837884068489075f, 0.12631545960903168f, 0.7557935118675232f, 0.20014186203479767f, 0.5930695533752441f, 0.6535324454307556f, -0.10266292840242386f, 0.4466666281223297f, 0.32241156697273254f, 0.8811149597167969f, 0.40873420238494873f, 0.10176324844360352f, 0.4897434413433075f, 0.6402870416641235f, -0.09185144305229187f, 0.9097386002540588f, 0.2922469973564148f, 0.3746076226234436f, 0.8549010753631592f, 0.5216160416603088f, 0.3484632968902588f, 0.3278653621673584f, -0.2106473594903946f, 0.8079742193222046f, 0.47818413376808167f, 0.15466813743114471f, 0.5743982791900635f, 0.8448567986488342f, 0.6751188039779663f, 0.07080978900194168f, -0.18363147974014282f, 0.6168310642242432f, 0.13339544832706451f, 0.8525232076644897f, 0.5058833360671997f, 0.42397794127464294f, 0.3505876660346985f, 0.9604939818382263f, -0.2642028331756592f, 0.37992793321609497f, 0.5808286666870117f, 0.8141929507255554f, 0.9258164167404175f, 0.9028341174125671f, 0.28576746582984924f, 0.6165903806686401f, -0.6079698801040649f, 0.8868979811668396f, 0.984846830368042f, 0.11293534189462662f, 0.9412662386894226f, 0.1541275531053543f, 0.8698506951332092f, 0.4054868519306183f, -0.6696673035621643f, 0.6919113397598267f, 0.5939169526100159f, 0.7070790529251099f, 0.10567263513803482f, 0.07390754669904709f, 0.2031622678041458f, 0.011950546875596046f, -0.9459242224693298f, 0.557091236114502f, 0.9020253419876099f, 0.8888943791389465f, 0.2947391867637634f, 0.09492527693510056f, 0.03916894271969795f, 0.24810683727264404f, -0.36396360397338867f, 0.8861457705497742f, 0.7965344190597534f, 0.23643285036087036f, 0.539009153842926f, 0.4458569288253784f, 0.20261484384536743f, 0.08120125532150269f, -0.3235679566860199f, 0.7854272127151489f, 0.2745527923107147f, 0.6078919172286987f, 0.24281729757785797f, 0.3804585337638855f, 0.5477403998374939f, 0.7534019351005554f, -0.8341045379638672f, 0.041788674890995026f, 0.31719809770584106f, 0.972295343875885f, 0.9705051779747009f, 0.1628628522157669f, 0.2669641673564911f, 0.6378756165504456f, -0.007693970110267401f, 0.48034048080444336f, 0.6566641926765442f, 0.1457960158586502f, 0.574688732624054f, 0.9541621804237366f, 0.4546724557876587f, 0.932988703250885f, -0.9245675206184387f, 0.3451533913612366f, 0.6417892575263977f, 0.44048336148262024f, 0.2965458929538727f, 0.20245221257209778f, 0.5818930864334106f, 0.8440730571746826f, -0.717804491519928f, 0.251512348651886f, 0.666396975517273f, 0.11559983342885971f, 0.13193731009960175f, 0.4154217839241028f, 0.4368267357349396f, 0.2550221085548401f, -0.546433687210083f, 0.8866614699363708f, 0.08191246539354324f, 0.6669028401374817f, 0.9791247844696045f, 0.9709983468055725f, 0.6143277287483215f, 0.5354726910591125f, -0.39897868037223816f, 0.3670482039451599f, 0.2712428867816925f, 0.1293182224035263f, 0.1646154373884201f, 0.0881526842713356f, 0.12815359234809875f, 0.41365504264831543f, -0.09762710332870483f, 0.25324270129203796f, 0.8131426572799683f, 0.25095656514167786f, 0.15666654706001282f, 0.15788330137729645f, 0.9365668296813965f, 0.4734070301055908f, -0.6768640279769897f, 0.046908847987651825f, 0.10930214822292328f, 0.6935444474220276f, 0.6828352212905884f, 0.12638987600803375f, 0.721992552280426f, 0.6756479740142822f, -0.33023473620414734f, 0.5741773843765259f, 0.7372897863388062f, 0.6733173131942749f, 0.6409128904342651f, 0.38033154606819153f, 0.5076431035995483f, 0.08001422882080078f, -0.032685380429029465f, 0.554818868637085f, 0.10047763586044312f, 0.10090874880552292f, 0.20586538314819336f, 0.23811626434326172f, 0.8398247957229614f, 0.23263637721538544f, -0.8982961773872375f, 0.4498746395111084f, 0.02213338017463684f, 0.7245732545852661f, 0.18894144892692566f, 0.5687286853790283f, 0.05452064052224159f, 0.7535034418106079f, -0.24626009166240692f, 0.515609622001648f, 0.6607335209846497f, 0.9440181851387024f, 0.6666401624679565f, 0.9391395449638367f, 0.5077047944068909f, 0.4204646348953247f, -0.5463350415229797f, 0.603030800819397f, 0.08892254531383514f, 0.7726907730102539f, 0.7363541126251221f, 0.06808415055274963f, 0.6957334280014038f, 0.9918890595436096f, -0.4092104136943817f, 0.861341118812561f, 0.5278350114822388f, 0.5429791808128357f, 0.8094887137413025f, 0.3691026568412781f, 0.7176559567451477f, 0.3797997534275055f, -0.037077128887176514f, 0.8268868327140808f, 0.6745821237564087f, 0.2963339686393738f, 0.5215017795562744f, 0.9377841353416443f, 0.3506775200366974f, 0.6761851906776428f, -0.9277333617210388f, 0.8971782326698303f, 0.25292110443115234f, 0.6078620553016663f, 0.2652546465396881f, 0.6661266684532166f, 0.4933360815048218f, 0.7067731022834778f, -0.7930018305778503f, 0.18984004855155945f, 0.09664733707904816f, 0.9106481075286865f, 0.4235892593860626f, 0.3733493983745575f, 0.9151094555854797f, 0.9574575424194336f, -0.09569920599460602f, 0.8420504331588745f, 0.6909136176109314f, 0.13545559346675873f, 0.8365452289581299f, 0.3395446836948395f, 0.5048313140869141f, 0.31063112616539f, -0.3375273048877716f, 0.7608191967010498f, 0.6526218056678772f, 0.6449888348579407f, 0.8752259016036987f, 0.8116570711135864f, 0.3017061650753021f, 0.48127180337905884f, -0.0490339919924736f, 0.36277881264686584f, 0.029885761439800262f, 0.3502733111381531f, 0.01064489409327507f, 0.2189999222755432f, 0.17385682463645935f, 0.9264314770698547f, -0.7102391123771667f, 0.4709911346435547f, 0.049544088542461395f, 0.05169917270541191f, 0.5023515820503235f, 0.6980788111686707f, 0.39642027020454407f, 0.5541932582855225f, -0.38103756308555603f, 0.6604898571968079f, 0.25120776891708374f, 0.1422131359577179f, 0.9153587222099304f, 0.10079639405012131f, 0.6642491221427917f, 0.13205602765083313f, -0.5378918051719666f, 0.5369938611984253f, 0.3311288058757782f, 0.39333394169807434f, 0.1961122453212738f, 0.2503056824207306f, 0.7321519255638123f, 0.7120757102966309f, -0.26968085765838623f, 0.4896053969860077f, 0.5828725099563599f, 0.8731486797332764f, 0.40951794385910034f, 0.5888460874557495f, 0.560192883014679f, 0.19731338322162628f, -0.44346219301223755f, 0.5832171440124512f, 0.8365072011947632f, 0.6300473809242249f, 0.14838984608650208f, 0.6930148005485535f, 0.25922253727912903f, 0.9826326966285706f, -0.5768308639526367f, 0.21410050988197327f, 0.7894343733787537f, 0.858282744884491f, 0.5488568544387817f, 0.10824324190616608f, 0.3466411530971527f, 0.5942052602767944f, -0.09315446019172668f, 0.479526162147522f, 0.483633816242218f, 0.9300212860107422f, 0.7830373644828796f, 0.36752572655677795f, 0.9860231876373291f, 0.11002332717180252f, -0.4585902690887451f, 0.27456042170524597f, 0.25441738963127136f, 0.4440583288669586f, 0.15981954336166382f, 0.08021632581949234f, 0.848548948764801f, 0.5581474304199219f, -0.8558072447776794f, 0.6878721714019775f, 0.3550647497177124f, 0.5066331028938293f, 0.6647652387619019f, 0.24956028163433075f, 0.02156021073460579f, 0.42487475275993347f, -0.7273074984550476f, 0.1519860327243805f, 0.320324569940567f, 0.782478392124176f, 0.3480818271636963f, 0.4853114187717438f, 0.5320809483528137f, 0.22358153760433197f, -0.4895569384098053f, 0.0805019736289978f, 0.32792770862579346f, 0.546891450881958f, 0.9876136183738708f, 0.703245997428894f, 0.284807413816452f, 0.4552628993988037f, -0.22630193829536438f, 0.40663206577301025f, 0.7898992896080017f, 0.459562748670578f, 0.6247838735580444f, 0.10018514096736908f, 0.6684134006500244f, 0.7139641046524048f, -0.9407328367233276f, 0.5798524022102356f, 0.9778851270675659f, 0.6712070107460022f, 0.3651317059993744f, 0.16025248169898987f, 0.41176989674568176f, 0.7949298024177551f, -0.02790662832558155f, 0.3318220376968384f, 0.9903255105018616f, 0.40104496479034424f, 0.07691575586795807f, 0.6623831391334534f, 0.9424975514411926f, 0.8333833813667297f, -0.4426030218601227f, 0.08652285486459732f, 0.8541547656059265f, 0.8526617884635925f, 0.409770667552948f, 0.8202263712882996f, 0.7143857479095459f, 0.22653530538082123f, -0.8036602139472961f, 0.5570456385612488f, 0.10643108934164047f, 0.7623821496963501f, 0.9085145592689514f, 0.23295366764068604f, 0.4527025520801544f, 0.049958355724811554f, -0.5537106394767761f, 0.3303345739841461f, 0.8835810422897339f, 0.7645825147628784f, 0.6098898649215698f, 0.723770260810852f, 0.6741186380386353f, 0.7277451753616333f, -0.41819027066230774f, 0.35524100065231323f, 0.5382643342018127f, 0.48375406861305237f, 0.06509391218423843f, 0.8670154213905334f, 0.44991177320480347f, 0.176230788230896f, -0.992196261882782f, 0.5325600504875183f, 0.8495878577232361f, 0.8498385548591614f, 0.35551875829696655f, 0.10933645069599152f, 0.7458608746528625f, 0.8718786835670471f, -0.9359868168830872f, 0.6083884239196777f, 0.506503701210022f, 0.4326796531677246f, 0.1999976634979248f, 0.6518645882606506f, 0.4355115592479706f, 0.6769134402275085f, -0.7504588961601257f, 0.10797321796417236f, 0.6228502988815308f, 0.38424843549728394f, 0.7148513793945312f, 0.06953305006027222f, 0.45669466257095337f, 0.060022301971912384f, -0.5564030408859253f, 0.5143964886665344f, 0.8678026795387268f, 0.8286373019218445f, 0.445830762386322f, 0.7358244061470032f, 0.3362480700016022f, 0.1812087744474411f, -0.44271743297576904f, 0.12033309787511826f, 0.325990229845047f, 0.055044058710336685f, 0.7029754519462585f, 0.6216760277748108f, 0.3363984227180481f, 0.02742784284055233f, -0.5106528401374817f, 0.35099175572395325f, 0.6231703162193298f, 0.8889961242675781f, 0.5041040778160095f, 0.8950603008270264f, 0.8489570021629333f, 0.09151620417833328f, -0.5116100907325745f, 0.37955793738365173f, 0.11838467419147491f, 0.2718537747859955f, 0.37925490736961365f, 0.9891994595527649f, 0.29833418130874634f, 0.19524477422237396f, -0.03274111449718475f, 0.6684471368789673f, 0.23304547369480133f, 0.7871783375740051f, 0.4240611791610718f, 0.7591089010238647f, 0.43611231446266174f, 0.6081869006156921f, -0.5224882364273071f, 0.8745976686477661f, 0.31391096115112305f, 0.27627038955688477f, 0.08618292957544327f, 0.06905623525381088f, 0.599532425403595f, 0.6902855634689331f, -0.09427240490913391f, 0.6545364260673523f, 0.42463260889053345f, 0.42722025513648987f, 0.3760266602039337f, 0.46181270480155945f, 0.3887801170349121f, 0.853600263595581f, -0.572342038154602f, 0.7150275707244873f, 0.65911865234375f, 0.17839790880680084f, 0.4749797582626343f, 0.6570034623146057f, 0.39376217126846313f, 0.7178229093551636f, -0.26442715525627136f, 0.5789557695388794f, 0.8399247527122498f, 0.8606277108192444f, 0.8570880889892578f, 0.5765933990478516f, 0.1599007099866867f, 0.07007572799921036f, -0.2320319265127182f, 0.9182584285736084f, 0.34612125158309937f, 0.12824296951293945f, 0.008818771690130234f, 0.6870012879371643f, 0.9464200735092163f, 0.19486334919929504f, -0.5482515692710876f, 0.8741905093193054f, 0.09999293833971024f, 0.20026718080043793f, 0.8771224021911621f, 0.24479348957538605f, 0.5007294416427612f, 0.8924708962440491f, -0.5325605273246765f, 0.3750086724758148f, 0.04341712221503258f, 0.17578347027301788f, 0.4798327684402466f, 0.4658958315849304f, 0.7551573514938354f, 0.040002837777137756f, -0.1988525390625f, 0.3836080729961395f, 0.5695306062698364f, 0.04553259164094925f, 0.8233017921447754f, 0.5205053687095642f, 0.5961462259292603f, 0.5336475968360901f, -0.026338927447795868f, 0.6117373108863831f, 0.0448208786547184f, 0.09197640419006348f, 0.7152290344238281f, 0.28065264225006104f, 0.6533054113388062f, 0.6635366678237915f, -0.34452709555625916f, 0.7216131091117859f, 0.39949193596839905f, 0.7840293645858765f, 0.20308828353881836f, 0.9969820380210876f, 0.8354828357696533f, 0.33814525604248047f, -0.6094691753387451f, 0.2842470407485962f, 0.09073427319526672f, 0.9237229228019714f, 0.9383808970451355f, 0.1932733952999115f, 0.9636887907981873f, 0.8879402875900269f, -0.7938163876533508f, 0.15728457272052765f, 0.7407130002975464f, 0.15618059039115906f, 0.036832161247730255f, 0.9110113978385925f, 0.517510712146759f, 0.02193748950958252f, -0.720331072807312f, 0.14084865152835846f, 0.02984820492565632f, 0.8724362850189209f, 0.0034287148155272007f, 0.027347764000296593f, 0.9975800514221191f, 0.8891942501068115f, -0.6979829668998718f, 0.7556827664375305f, 0.44628965854644775f, 0.8508198857307434f, 0.9762354493141174f, 0.21874713897705078f, 0.6013148427009583f, 0.8021357655525208f, -0.2770540714263916f, 0.8046837449073792f, 0.7514486312866211f, 0.515714704990387f, 0.5062435269355774f, 0.31842783093452454f, 0.080501489341259f, 0.6355966329574585f, -0.3547559082508087f, 0.9051510691642761f, 0.7093971371650696f, 0.019617829471826553f, 0.316661536693573f, 0.24828244745731354f, 0.3299453854560852f, 0.3613206148147583f, -0.7861557006835938f, 0.3016866147518158f, 0.846017062664032f, 0.5680771470069885f, 0.12001869827508926f, 0.7157798409461975f, 0.8276662826538086f, 0.7955881357192993f, -0.038620442152023315f, 0.06378243118524551f, 0.5852586627006531f, 0.13731420040130615f, 0.36775243282318115f, 0.6582111120223999f, 0.5286517143249512f, 0.7529075145721436f, -0.8703580498695374f, 0.6757429838180542f, 0.2862415015697479f, 0.6808806657791138f, 0.8398206830024719f, 0.7603329420089722f, 0.8953171968460083f, 0.22492891550064087f, -0.6778732538223267f, 0.3756856620311737f, 0.47237685322761536f, 0.7620033025741577f, 0.22512347996234894f, 0.9717448353767395f, 0.011926326900720596f, 0.7681434154510498f, -0.49656227231025696f, 0.8797814846038818f, 0.6952993869781494f, 0.6682776808738708f, 0.4113774001598358f, 0.5332358479499817f, 0.2452998161315918f, 0.10110023617744446f, -0.23814018070697784f, 0.6108277440071106f, 0.7930036187171936f, 0.9531936049461365f, 0.8671068549156189f, 0.631980836391449f, 0.7896178364753723f, 0.980977475643158f, -0.6013656258583069f, 0.8010143637657166f, 0.15508313477039337f, 0.6723225116729736f, 0.7369775772094727f, 0.5130260586738586f, 0.3495364487171173f, 0.6006545424461365f, -0.4741242527961731f, 0.046632010489702225f, 0.7651766538619995f, 0.5942623615264893f, 0.8387854099273682f, 0.373063325881958f, 0.9382030963897705f, 0.9757431149482727f, -0.15294994413852692f, 0.9043667912483215f, 0.9396803975105286f, 0.8900398015975952f, 0.3873211741447449f, 0.9107311367988586f, 0.9975069165229797f, 0.18321454524993896f, -0.3196714520454407f, 0.6756759285926819f, 0.6250665187835693f, 0.33264607191085815f, 0.07863347977399826f, 0.909110426902771f, 0.08573170751333237f, 0.26855456829071045f, -0.8767544031143188f, 0.2574629783630371f, 0.0005317803006619215f, 0.7693167328834534f, 0.44450604915618896f, 0.5296157002449036f, 0.7344702482223511f, 0.3719494044780731f, -0.08524391800165176f, 0.38506948947906494f, 0.2559145987033844f, 0.5218028426170349f, 0.5915688872337341f, 0.3247185945510864f, 0.11693836748600006f, 0.8932488560676575f, -0.9109140634536743f, 0.6224242448806763f, 0.9783322811126709f, 0.33886146545410156f, 0.30127641558647156f, 0.3195696473121643f, 0.9764009714126587f, 0.6527044177055359f, -0.4441547691822052f, 0.8732213377952576f, 0.46184852719306946f, 0.6144501566886902f, 0.6830255389213562f, 0.17869357764720917f, 0.8023977875709534f, 0.35826385021209717f, -0.893873929977417f, 0.45755448937416077f, 0.11095134913921356f, 0.6392453908920288f, 0.4293299615383148f, 0.7732008099555969f, 0.1079554632306099f, 0.6368362903594971f, -0.7132866978645325f, 0.5503641366958618f, 0.7558741569519043f, 0.8303778171539307f, 0.6058535575866699f, 0.22298665344715118f, 0.18454736471176147f, 0.14770348370075226f, -0.423056423664093f, 0.25665462017059326f, 0.09154161810874939f, 0.4157295823097229f, 0.033481042832136154f, 0.3825004994869232f, 0.5010682940483093f, 0.25852829217910767f, -0.559371829032898f, 0.12863780558109283f, 0.5646215081214905f, 0.010757002979516983f, 0.6997567415237427f, 0.5953899025917053f, 0.33987483382225037f, 0.9425778985023499f, -0.9525654315948486f, 0.5122256278991699f, 0.1531497985124588f, 0.7760136723518372f, 0.3884197771549225f, 0.6969675421714783f, 0.1047288328409195f, 0.889272153377533f, -0.8211045265197754f, 0.21103039383888245f, 0.6073434352874756f, 0.38904473185539246f, 0.1366620510816574f, 0.3592558801174164f, 0.12275779247283936f, 0.8271380066871643f, -0.4308004081249237f, 0.384325236082077f, 0.2599838376045227f, 0.4458942711353302f, 0.23434512317180634f, 0.47901225090026855f, 0.9724738001823425f, 0.6006140112876892f, -0.09934715926647186f, 0.15481151640415192f, 0.9775333404541016f, 0.042502857744693756f, 0.05163773149251938f, 0.5505097508430481f, 0.09058306366205215f, 0.15750089287757874f, -0.3928820490837097f, 0.4628291428089142f, 0.5629482269287109f, 0.12770870327949524f, 0.1869206428527832f, 0.039875201880931854f, 0.7597912549972534f, 0.805209755897522f, -0.8388697504997253f, 0.14351002871990204f, 0.27606120705604553f, 0.23201128840446472f, 0.49369627237319946f, 0.7591596245765686f, 0.769651472568512f, 0.05147520825266838f, -0.6566046476364136f, 0.9551059007644653f, 0.6784787178039551f, 0.4549998641014099f, 0.6688913702964783f, 0.5477402210235596f, 0.7628262042999268f, 0.6508806943893433f, -0.029603762552142143f, 0.8137189149856567f, 0.8111703395843506f, 0.5969607830047607f, 0.28925013542175293f, 0.8513815402984619f, 0.6257833242416382f, 0.7189033031463623f, -0.8821197152137756f, 0.9777650833129883f, 0.7207310795783997f, 0.9059339761734009f, 0.5930057168006897f, 0.22128282487392426f, 0.637529194355011f, 0.7730371356010437f, -0.9676164388656616f, 0.6414814591407776f, 0.2317180335521698f, 0.1693481206893921f, 0.30778437852859497f, 0.3853280246257782f, 0.6573169827461243f, 0.3459128737449646f, -0.33934348821640015f, 0.2464078664779663f, 0.7624453902244568f, 0.6106442809104919f, 0.9332108497619629f, 0.1397857815027237f, 0.05218008533120155f, 0.8606599569320679f, -0.12874238193035126f, 0.8773754239082336f, 0.10736633092164993f, 0.6756705641746521f, 0.08980050683021545f, 0.6690536141395569f, 0.4654780626296997f, 0.15202391147613525f, -0.3215864300727844f, 0.7764788866043091f, 0.7329744696617126f, 0.7185385227203369f, 0.5077691674232483f, 0.8035119771957397f, 0.39392998814582825f, 0.6056561470031738f, -0.04872054606676102f, 0.1132732555270195f, 0.5569062232971191f, 0.5457393527030945f, 0.7210847735404968f, 0.8074700236320496f, 0.8232975006103516f, 0.1086321771144867f, -0.9306393265724182f, 0.33325448632240295f, 0.48563989996910095f, 0.13312268257141113f, 0.352729856967926f, 0.00461895577609539f, 0.9949712753295898f, 0.8962917923927307f, -0.14059457182884216f, 0.2927376329898834f, 0.24321778118610382f, 0.07859116792678833f, 0.6867448091506958f, 0.4510015547275543f, 0.8773377537727356f, 0.9041028618812561f, -0.7227479219436646f, 0.7782629728317261f, 0.9712876677513123f, 0.45116126537323f, 0.7038934826850891f, 0.9853667616844177f, 0.9381389617919922f, 0.6217954754829407f, -0.7948276400566101f, 0.5645300149917603f, 0.6895213723182678f, 0.8479915857315063f, 0.3537923991680145f, 0.39519429206848145f, 0.5464913249015808f, 0.8366805911064148f, -0.47401127219200134f, 0.3365105092525482f, 0.62847501039505f, 0.41632089018821716f, 0.4431971311569214f, 0.22349287569522858f, 0.8722028136253357f, 0.6852238178253174f, -0.30757564306259155f, 0.28662988543510437f, 0.8340355753898621f, 0.5906062722206116f, 0.15296588838100433f, 0.1350877285003662f, 0.6604385375976562f, 0.05741661787033081f, -0.7567542791366577f, 0.8958142995834351f, 0.3143741488456726f, 0.34582817554473877f, 0.6032817959785461f, 0.9706339240074158f, 0.9807473421096802f, 0.7795408368110657f, -0.3446515202522278f, 0.45930829644203186f, 0.03493240848183632f, 0.1499815583229065f, 0.9148479700088501f, 0.36977922916412354f, 0.1064058393239975f, 0.19559024274349213f, -0.0998581200838089f, 0.38317424058914185f, 0.9174754619598389f, 0.5193679928779602f, 0.7578312158584595f, 0.713970959186554f, 0.7962563037872314f, 0.0039697010070085526f, -0.7514718174934387f, 0.1847594678401947f, 0.6325297951698303f, 0.1030801385641098f, 0.7122887372970581f, 0.40818533301353455f, 0.904939591884613f, 0.4448685050010681f, -0.024946216493844986f, 0.22246704995632172f, 0.7161776423454285f, 0.20076583325862885f, 0.1338380128145218f, 0.5355075597763062f, 0.36213448643684387f, 0.9704824090003967f, -0.015425745397806168f, 0.5144618153572083f, 0.8088392019271851f, 0.21244779229164124f, 0.28802016377449036f, 0.4783216714859009f, 0.1919523924589157f, 0.28284549713134766f, -0.9542834162712097f, 0.7230974435806274f, 0.723266065120697f, 0.6046608686447144f, 0.8107186555862427f, 0.9673299789428711f, 0.9483521580696106f, 0.5551886558532715f, -0.2067127227783203f, 0.5268499851226807f, 0.8562030792236328f, 0.7306550145149231f, 0.8111461400985718f, 0.09725182503461838f, 0.11374253779649734f, 0.3143535554409027f, -0.9909892678260803f, 0.4468109905719757f, 0.3421497344970703f, 0.20390285551548004f, 0.610725462436676f, 0.8973301649093628f, 0.8878032565116882f, 0.7018516659736633f, -0.913454532623291f, 0.45114660263061523f, 0.09306534379720688f, 0.8191595673561096f, 0.14514897763729095f, 0.7387875318527222f, 0.6801677942276001f, 0.5197777152061462f, -0.18038798868656158f, 0.6395491361618042f, 0.9985012412071228f, 0.09824063628911972f, 0.20881658792495728f, 0.845769464969635f, 0.721393346786499f, 0.6045709252357483f, -0.042908456176519394f, 0.03343719244003296f, 0.9229623675346375f, 0.040391433984041214f, 0.8507021069526672f, 0.5724685788154602f, 0.9574994444847107f, 0.9605609774589539f, -0.20834416151046753f, 0.9285430312156677f, 0.8424893021583557f, 0.7989919781684875f, 0.8770512342453003f, 0.45402249693870544f, 0.814994215965271f, 0.446805864572525f, -0.9830896854400635f, 0.08346068859100342f, 0.4486995339393616f, 0.8187926411628723f, 0.7686842083930969f, 0.28331759572029114f, 0.6841574311256409f, 0.2766795754432678f, -0.5353664755821228f, 0.9312995076179504f, 0.3612254559993744f, 0.24940505623817444f, 0.2047889083623886f, 0.037822987884283066f, 0.8138110637664795f, 0.8288482427597046f, -0.9913146495819092f, 0.5742608308792114f, 0.1858406364917755f, 0.12303704768419266f, 0.9842293858528137f, 0.7116801738739014f, 0.6655001044273376f, 0.6128020286560059f, -0.5044785737991333f, 0.08743476867675781f, 0.7419122457504272f, 0.5518147945404053f, 0.9284090399742126f, 0.8563547134399414f, 0.6871475577354431f, 0.6078091263771057f, -0.5633838176727295f, 0.6305198669433594f, 0.03566242381930351f, 0.857100784778595f, 0.8035311102867126f, 0.6083992719650269f, 0.4157586395740509f, 0.22304044663906097f, -0.8376439809799194f, 0.08274335414171219f, 0.7714594602584839f, 0.057178277522325516f, 0.5510745644569397f, 0.8761246800422668f, 0.8502876162528992f, 0.33856725692749023f, -0.9755787253379822f, 0.2373732179403305f, 0.27128928899765015f, 0.18162597715854645f, 0.032721567898988724f, 0.6057299375534058f, 0.9575737714767456f, 0.44453325867652893f, -0.2971247732639313f, 0.4566038250923157f, 0.2864784598350525f, 0.6323768496513367f, 0.3340752422809601f, 0.5155999064445496f, 0.41011741757392883f, 0.739654004573822f, -0.585935115814209f, 0.3374886214733124f, 0.10977756232023239f, 0.9858071804046631f, 0.8136922121047974f, 0.03934245556592941f, 0.2102304995059967f, 0.6704691052436829f, -0.5687127709388733f, 0.16026288270950317f, 0.9732903838157654f, 0.8860082030296326f, 0.04414355382323265f, 0.3661159574985504f, 0.16198554635047913f, 0.04616083204746246f, -0.6673576831817627f, 0.7647549510002136f, 0.5003604888916016f, 0.903540313243866f, 0.8841036558151245f, 0.996548056602478f, 0.5427283048629761f, 0.6886712908744812f, -0.7039667367935181f, 0.14485250413417816f, 0.009025190956890583f, 0.6983330845832825f, 0.29983583092689514f, 0.6032689213752747f, 0.9442793130874634f, 0.6708522439002991f, -0.24250498414039612f, 0.9477119445800781f, 0.9645832180976868f, 0.7027450799942017f, 0.014118577353656292f, 0.423955500125885f, 0.14938800036907196f, 0.26233839988708496f, -0.17616890370845795f, 0.09108108282089233f, 0.9638893008232117f, 0.3817029595375061f, 0.6002382636070251f, 0.007535201031714678f, 0.7808919548988342f, 0.9127117395401001f, -0.2369510680437088f, 0.514927327632904f, 0.7590769529342651f, 0.8481752276420593f, 0.08811453729867935f, 0.007157336920499802f, 0.3310653269290924f, 0.19866640865802765f, -0.11716976016759872f, 0.26918667554855347f, 0.9349493384361267f, 0.7276001572608948f, 0.2651275396347046f, 0.6959073543548584f, 0.6070328950881958f, 0.6220002174377441f, -0.9211285710334778f, 0.22494836151599884f, 0.9557855725288391f, 0.5475115776062012f, 0.6976746916770935f, 0.48630794882774353f, 0.865993082523346f, 0.2913392186164856f, -0.48289623856544495f, 0.09610999375581741f, 0.6319692730903625f, 0.7948591709136963f, 0.06546211242675781f, 0.766478419303894f, 0.3217979073524475f, 0.6060203909873962f, -0.16969327628612518f, 0.00491521367803216f, 0.2832395136356354f, 0.11096666753292084f, 0.8797050714492798f, 0.6811961531639099f, 0.8889905214309692f, 0.9935048818588257f, -0.26908984780311584f, 0.9907947182655334f, 0.4344026744365692f, 0.8098432421684265f, 0.9202736020088196f, 0.9034512042999268f, 0.5407631993293762f, 0.7550457715988159f, -0.3201233446598053f, 0.7905648350715637f, 0.9456155896186829f, 0.05413605645298958f, 0.11036445200443268f, 0.6147269010543823f, 0.6926757097244263f, 0.4449771046638489f, -0.9159889221191406f, 0.4600122570991516f, 0.47392576932907104f, 0.7959427237510681f, 0.6976642608642578f, 0.6664617657661438f, 0.2174452245235443f, 0.6960865259170532f, -0.8717775940895081f, 0.7303341031074524f, 0.9348641633987427f, 0.8973302245140076f, 0.5442581176757812f, 0.918400228023529f, 0.7128269076347351f, 0.3959946930408478f, -0.30866101384162903f, 0.6752097606658936f, 0.9654126167297363f, 0.5578235983848572f, 0.007246728055179119f, 0.46586060523986816f, 0.7609555125236511f, 0.7550605535507202f, -0.88303142786026f, 0.2343842089176178f, 0.018330665305256844f, 0.3785656988620758f, 0.07947449386119843f, 0.49638164043426514f, 0.37846100330352783f, 0.24600514769554138f, -0.2840862274169922f, 0.30637580156326294f, 0.06982944905757904f, 0.5021874904632568f, 0.7838940024375916f, 0.9204326272010803f, 0.8691641688346863f, 0.5096899271011353f, -0.5417361259460449f, 0.3536943197250366f, 0.06045740470290184f, 0.7956346273422241f, 0.04648903012275696f, 0.4163209795951843f, 0.33258169889450073f, 0.39959731698036194f, -0.8684490919113159f, 0.2877230942249298f, 0.627544105052948f, 0.4477761685848236f, 0.7577940821647644f, 0.3768470883369446f, 0.6327639818191528f, 0.14019253849983215f, -0.24855166673660278f, 0.19175536930561066f, 0.5014674067497253f, 0.7455834746360779f, 0.23544859886169434f, 0.7753332257270813f, 0.38619428873062134f, 0.276944100856781f, -0.9503690600395203f, 0.5324372053146362f, 0.8259367942810059f, 0.260375052690506f, 0.07509192079305649f, 0.9149211645126343f, 0.4719218909740448f, 0.7415463328361511f, -0.9957100749015808f, 0.26943719387054443f, 0.7066872119903564f, 0.17275243997573853f, 0.7584570050239563f, 0.36827531456947327f, 0.7360643744468689f, 0.4187202453613281f, -0.36013129353523254f, 0.20066122710704803f, 0.20838123559951782f, 0.41689690947532654f, 0.299686998128891f, 0.6431298851966858f, 0.20319117605686188f, 0.07774810492992401f, -0.6528030037879944f, 0.5921620726585388f, 0.5322174429893494f, 0.472768634557724f, 0.2553953230381012f, 0.8188716769218445f, 0.3986484408378601f, 0.6523889899253845f, -0.5148175358772278f, 0.27827292680740356f, 0.5616839528083801f, 0.29526790976524353f, 0.307503342628479f, 0.12122967094182968f, 0.6323279142379761f, 0.9695596098899841f, -0.9019704461097717f, 0.10840435326099396f, 0.3793989419937134f, 0.41084209084510803f, 0.7749930620193481f, 0.7309601306915283f, 0.2279362976551056f, 0.7642722725868225f, -0.9312896132469177f, 0.4593510627746582f, 0.27814728021621704f, 0.5709747672080994f, 0.40081921219825745f, 0.8979305028915405f, 0.7575047612190247f, 0.6177088618278503f, -0.49605998396873474f, 0.15913185477256775f, 0.10763601213693619f, 0.1305762529373169f, 0.40289565920829773f, 0.2599952220916748f, 0.7494314312934875f, 0.9596490859985352f, -0.4775046110153198f, 0.12172222137451172f, 0.3749174475669861f, 0.4384212791919708f, 0.8610798120498657f, 0.6715329885482788f, 0.8580382466316223f, 0.8837827444076538f, -0.867011547088623f, 0.3010965883731842f, 0.9380345940589905f, 0.6076131463050842f, 0.6031751036643982f, 0.526086151599884f, 0.26907068490982056f, 0.9765926003456116f, -0.6383601427078247f, 0.23284649848937988f, 0.5479863286018372f, 0.6487257480621338f, 0.33712342381477356f, 0.5726847052574158f, 0.7110127806663513f, 0.4075455367565155f, -0.8447532057762146f, 0.3807421326637268f, 0.926864743232727f, 0.9639424681663513f, 0.8335860371589661f, 0.18704795837402344f, 0.28174877166748047f, 0.9232895374298096f, -0.8518122434616089f, 0.8723942637443542f, 0.7440249919891357f, 0.3113434910774231f, 0.07014679163694382f, 0.6320801377296448f, 0.9721834659576416f, 0.2958389222621918f, -0.9899880886077881f, 0.28015273809432983f, 0.6701619029045105f, 0.9215591549873352f, 0.9513669013977051f, 0.5046969056129456f, 0.6892778873443604f, 0.05562473088502884f, -0.5742378830909729f, 0.6784007549285889f, 0.44935616850852966f, 0.8953295946121216f, 0.3592173755168915f, 0.4315917491912842f, 0.7659297585487366f, 0.275840163230896f, -0.37438446283340454f, 0.7156317234039307f, 0.8270437121391296f, 0.4998364746570587f, 0.02530284970998764f, 0.9367114305496216f, 0.5176697373390198f, 0.426770955324173f, -0.05662303417921066f, 0.5411436557769775f, 0.2977798283100128f, 0.21483658254146576f, 0.35634732246398926f, 0.22835677862167358f, 0.13168329000473022f, 0.012425078079104424f, -0.4041469097137451f, 0.6798292398452759f, 0.697068989276886f, 0.4485105276107788f, 0.9963545799255371f, 0.8223845362663269f, 0.13357295095920563f, 0.5890834927558899f, -0.748658299446106f, 0.821801483631134f, 0.9645285606384277f, 0.43656599521636963f, 0.8512595891952515f, 0.6685515642166138f, 0.6346368193626404f, 0.9077785015106201f, -0.6567128300666809f, 0.8412491679191589f, 0.17909027636051178f, 0.8022832870483398f, 0.7959365844726562f, 0.24984091520309448f, 0.5838943123817444f, 0.703170895576477f, -0.5278215408325195f, 0.5152245163917542f, 0.14510612189769745f, 0.2510916590690613f, 0.15137295424938202f, 0.31860196590423584f, 0.5108824372291565f, 0.9234541654586792f, -0.28629666566848755f, 0.6341835856437683f, 0.023167679086327553f, 0.733636200428009f, 0.7249231934547424f, 0.4657233655452728f, 0.3034360408782959f, 0.9029397964477539f, -0.48899945616722107f, 0.35820457339286804f, 0.5167754888534546f, 0.0983857661485672f, 0.8632006645202637f, 0.7371508479118347f, 0.056304048746824265f, 0.6424420475959778f, -0.7431307435035706f, 0.7225927710533142f, 0.8104196786880493f, 0.2735154628753662f, 0.8601329922676086f, 0.5296879410743713f, 0.9422160387039185f, 0.8763430118560791f, -0.009446523152291775f, 0.42571431398391724f, 0.8645026087760925f, 0.5954753160476685f, 0.6091187000274658f, 0.44635629653930664f, 0.2554641664028168f, 0.7719762325286865f, -0.03385046869516373f, 0.8952440023422241f, 0.34866538643836975f, 0.1981639713048935f, 0.9956116676330566f, 0.7024438977241516f, 0.38081786036491394f, 0.6877716779708862f, -0.4093041718006134f, 0.5602369904518127f, 0.33964014053344727f, 0.17153525352478027f, 0.029835190623998642f, 0.9522607922554016f, 0.8249517679214478f, 0.6582201719284058f, -0.972585916519165f, 0.46176379919052124f, 0.7293009161949158f, 0.9552901983261108f, 0.3445006012916565f, 0.81512451171875f, 0.9395172595977783f, 0.05070614442229271f, -0.10964390635490417f, 0.8262173533439636f, 0.8557229042053223f, 0.04672437906265259f, 0.12371256202459335f, 0.9976886510848999f, 0.5271507501602173f, 0.5968337059020996f, -0.9675321578979492f, 0.038063161075115204f, 0.5515777468681335f, 0.894267737865448f, 0.9678882360458374f, 0.44538888335227966f, 0.7507237195968628f, 0.6276279091835022f, -0.36343273520469666f, 0.9602980613708496f, 0.7963321208953857f, 0.6754871606826782f, 0.48426008224487305f, 0.2505757212638855f, 0.07192037999629974f, 0.743487536907196f, -0.6143540740013123f, 0.3770798444747925f, 0.5525672435760498f, 0.5374370813369751f, 0.630216121673584f, 0.5555043816566467f, 0.5014378428459167f, 0.4286201000213623f, -0.3688667118549347f, 0.6331983804702759f, 0.9577218294143677f, 0.0006682461826130748f, 0.5312002897262573f, 0.43462178111076355f, 0.6412337422370911f, 0.6700002551078796f, -0.9148932695388794f, 0.4491432011127472f, 0.9837546348571777f, 0.9457497596740723f, 0.7873235940933228f, 0.8990927934646606f, 0.7574506402015686f, 0.6166515350341797f, -0.9529327750205994f, 0.002293127356097102f, 0.5463166832923889f, 0.7736266255378723f, 0.45097804069519043f, 0.5239971280097961f, 0.8784290552139282f, 0.2713488042354584f, -0.05033933371305466f, 0.3049817681312561f, 0.2296534776687622f, 0.22325964272022247f, 0.4752686619758606f, 0.305662602186203f, 0.3301122188568115f, 0.42421552538871765f, -0.17592892050743103f, 0.5592299103736877f, 0.016510969027876854f, 0.9455240368843079f, 0.8268983960151672f, 0.8009055256843567f, 0.3450356423854828f, 0.5231825709342957f, -0.9909971952438354f, 0.8869367241859436f, 0.5049663782119751f, 0.758948802947998f, 0.6539322733879089f, 0.3182990849018097f, 0.6341833472251892f, 0.17150893807411194f, -0.3574969470500946f, 0.8019945621490479f, 0.723753809928894f, 0.3255978524684906f, 0.12255659699440002f, 0.01226789876818657f, 0.7919685244560242f, 0.06498675793409348f, -0.5968430042266846f, 0.21913430094718933f, 0.690750241279602f, 0.7437652349472046f, 0.7260442972183228f, 0.21389523148536682f, 0.9472689032554626f, 0.8594165444374084f, -0.6791732311248779f, 0.1314348429441452f, 0.0884917750954628f, 0.05478722229599953f, 0.6313697099685669f, 0.011419674381613731f, 0.9901469349861145f, 0.592887282371521f, -0.2535429894924164f, 0.9338556528091431f, 0.6093156933784485f, 0.17400021851062775f, 0.9079424142837524f, 0.33209121227264404f, 0.22224421799182892f, 0.3502602279186249f, -0.5413909554481506f, 0.5484564304351807f, 0.18339543044567108f, 0.7750393152236938f, 0.8126575946807861f, 0.15390092134475708f, 0.8048480749130249f, 0.41607749462127686f, -0.4968062937259674f, 0.5335316061973572f, 0.07949846237897873f, 0.8007310628890991f, 0.7200224995613098f, 0.35625335574150085f, 0.75433748960495f, 0.11109825223684311f, -0.8602502346038818f, 0.7052637338638306f, 0.5381062030792236f, 0.37052422761917114f, 0.5079168677330017f, 0.9649304747581482f, 0.012739305384457111f, 0.5286467671394348f, -0.703916072845459f, 0.27335456013679504f, 0.4071480929851532f, 0.20180746912956238f, 0.6145358681678772f, 0.41260868310928345f, 0.4141278862953186f, 0.9054768681526184f, -0.18651051819324493f, 0.2179078459739685f, 0.6260886192321777f, 0.19046616554260254f, 0.21339266002178192f, 0.6531323790550232f, 0.4836798906326294f, 0.23286139965057373f, -0.11363960057497025f, 0.10482563078403473f, 0.34136250615119934f, 0.7467058897018433f, 0.6500080227851868f, 0.6262098550796509f, 0.777948260307312f, 0.21677514910697937f, -0.8834183812141418f, 0.6587744355201721f, 0.8282718658447266f, 0.8647831082344055f, 0.7494906187057495f, 0.3758417069911957f, 0.33545130491256714f, 0.527656614780426f, -0.46979498863220215f, 0.5288849472999573f, 0.2980301082134247f, 0.8871885538101196f, 0.23230430483818054f, 0.6971616744995117f, 0.3593537211418152f, 0.0858883187174797f, -0.1223236694931984f, 0.6941242814064026f, 0.3479115962982178f, 0.2738812565803528f, 0.2436719834804535f, 0.9234733581542969f, 0.08806315064430237f, 0.9291527271270752f, -0.5819827318191528f, 0.9832672476768494f, 0.9068403840065002f, 0.5281804800033569f, 0.3609953820705414f, 0.28272169828414917f, 0.38234737515449524f, 0.7350556254386902f, -0.7785068154335022f, 0.5622876882553101f, 0.9918569922447205f, 0.5717543959617615f, 0.19422698020935059f, 0.1620587557554245f, 0.6589277982711792f, 0.9827947616577148f, -0.20880630612373352f, 0.9404321312904358f, 0.19299466907978058f, 0.6833294630050659f, 0.9017858505249023f, 0.1230887621641159f, 0.052198298275470734f, 0.7248196601867676f, -0.7470861673355103f, 0.6643120646476746f, 0.9316464066505432f, 0.6650326251983643f, 0.13274995982646942f, 0.45881912112236023f, 0.5114553570747375f, 0.8133028149604797f, -0.7217584848403931f, 0.9949097633361816f, 0.008722851052880287f, 0.7201312184333801f, 0.7852393984794617f, 0.3556274473667145f, 0.2603003978729248f, 0.20090781152248383f, -0.4685477614402771f, 0.08472888171672821f, 0.30825453996658325f, 0.7388415932655334f, 0.5474048256874084f, 0.711074948310852f, 0.2595856487751007f, 0.8045328259468079f, -0.8471150398254395f, 0.7804455161094666f, 0.5266507267951965f, 0.6636621952056885f, 0.1965191811323166f, 0.259916216135025f, 0.1315072923898697f, 0.4431953728199005f, -0.6219348907470703f, 0.4384540915489197f, 0.8480222225189209f, 0.8750519156455994f, 0.27549949288368225f, 0.7150961756706238f, 0.6509497165679932f, 0.8954421877861023f, -0.22512184083461761f, 0.03923637419939041f, 0.23660217225551605f, 0.24231581389904022f, 0.7818658947944641f, 0.607783317565918f, 0.995540976524353f, 0.001531111542135477f, -0.6602014899253845f, 0.04014154151082039f, 0.5314267873764038f, 0.8335944414138794f, 0.3923192620277405f, 0.05976869910955429f, 0.4291733205318451f, 0.5186637043952942f, -0.8102092146873474f, 0.44626978039741516f, 0.5324771404266357f, 0.24903742969036102f, 0.23577755689620972f, 0.6628642082214355f, 0.8948976397514343f, 0.9339426755905151f, -0.281825989484787f, 0.013897200115025043f, 0.8890209794044495f, 0.7995260953903198f, 0.4054073691368103f, 0.9600087404251099f, 0.3432188332080841f, 0.4468683898448944f, -0.20529095828533173f, 0.494557648897171f, 0.35917291045188904f, 0.8426930904388428f, 0.03430694714188576f, 0.5309574007987976f, 0.7160729765892029f, 0.16196061670780182f, -0.2857299745082855f, 0.6210113763809204f, 0.9468437433242798f, 0.1546618491411209f, 0.3106168806552887f, 0.2612750828266144f, 0.735420286655426f, 0.9391756057739258f, -0.38417109847068787f, 0.01545940712094307f, 0.9551305770874023f, 0.1143861636519432f, 0.31654495000839233f, 0.4640786051750183f, 0.293714314699173f, 0.30040407180786133f, -0.1632131189107895f, 0.25762638449668884f, 0.3738655745983124f, 0.6373353004455566f, 0.6063845753669739f, 0.5955920219421387f, 0.5048255324363708f, 0.4838704764842987f, -0.19423387944698334f, 0.898877739906311f, 0.40494897961616516f, 0.8626078963279724f, 0.17657579481601715f, 0.5701872110366821f, 0.824353814125061f, 0.13607147336006165f, -0.78316730260849f, 0.134770467877388f, 0.36323651671409607f, 0.6343511343002319f, 0.788781464099884f, 0.7815195918083191f, 0.8419547080993652f, 0.39452269673347473f, -0.24916571378707886f, 0.9085844159126282f, 0.3108423054218292f, 0.7126621603965759f, 0.8660742044448853f, 0.444569855928421f, 0.680525004863739f, 0.33914196491241455f, -0.18450215458869934f, 0.05382058769464493f, 0.8307873606681824f, 0.6294165253639221f, 0.2896615266799927f, 0.9298376441001892f, 0.10334955155849457f, 0.43316227197647095f, -0.7857722640037537f, 0.1965673714876175f, 0.7096876502037048f, 0.2983272969722748f, 0.18839427828788757f, 0.45120131969451904f, 0.09328941255807877f, 0.8785022497177124f, -0.6553847193717957f, 0.22590680420398712f, 0.9162073135375977f, 0.20038926601409912f, 0.9242610335350037f, 0.9673979878425598f, 0.30034878849983215f, 0.8976479172706604f, -0.4556541442871094f, 0.2836977541446686f, 0.9638945460319519f, 0.10042888671159744f, 0.22549153864383698f, 0.8527273535728455f, 0.8357393741607666f, 0.4293581247329712f, -0.5244467258453369f, 0.4449751079082489f, 0.01299598254263401f, 0.7491949200630188f, 0.1537310630083084f, 0.2705932855606079f, 0.8577218055725098f, 0.006974720396101475f, -0.1303303837776184f, 0.7396700382232666f, 0.6486045718193054f, 0.10766667872667313f, 0.9569745063781738f, 0.7830445170402527f, 0.7360118627548218f, 0.002489830367267132f, -0.13226255774497986f, 0.1478598713874817f, 0.5672105550765991f, 0.6617245078086853f, 0.19483806192874908f, 0.23053604364395142f, 0.538133442401886f, 0.4619283676147461f, -0.8587682843208313f, 0.7552186846733093f, 0.13271182775497437f, 0.8617205619812012f, 0.6774882078170776f, 0.32347214221954346f, 0.770860493183136f, 0.21085716784000397f, -0.5581300258636475f, 0.3437272012233734f, 0.06074150279164314f, 0.790026843547821f, 0.6665754914283752f, 0.45329704880714417f, 0.5595264434814453f, 0.30242371559143066f, -0.42388448119163513f, 0.6317212581634521f, 0.9338276982307434f, 0.8070067763328552f, 0.36843249201774597f, 0.7375654578208923f, 0.5757510662078857f, 0.9191681146621704f, -0.5304903984069824f, 0.9005082845687866f, 0.4657323956489563f, 0.168615460395813f, 0.7444961667060852f, 0.38045451045036316f, 0.4585951268672943f, 0.7285116314888f, -0.35339125990867615f, 0.1642724573612213f, 0.0047036330215632915f, 0.30405646562576294f, 0.7628235816955566f, 0.9453273415565491f, 0.9417745471000671f, 0.3162063658237457f, -0.8454365730285645f, 0.3344215154647827f, 0.5497786402702332f, 0.09069576859474182f, 0.04258517920970917f, 0.2228652983903885f, 0.26268744468688965f, 0.3471532166004181f, -0.7316282391548157f, 0.0367528460919857f, 0.41618460416793823f, 0.7842562794685364f, 0.8380981683731079f, 0.852325975894928f, 0.388251394033432f, 0.6781272888183594f, -0.09640275686979294f, 0.6460784077644348f, 0.9195218682289124f, 0.25551050901412964f, 0.6649413108825684f, 0.8284315466880798f, 0.5028055906295776f, 0.04895256459712982f, -0.5108769536018372f, 0.35089853405952454f, 0.6647348403930664f, 0.737023115158081f, 0.9567314982414246f, 0.10459847748279572f, 0.5581430196762085f, 0.9292016625404358f, -0.49000251293182373f, 0.8891557455062866f, 0.4546288251876831f, 0.3389221131801605f, 0.9510951638221741f, 0.7379727363586426f, 0.11694277077913284f, 0.7392750382423401f, -0.913534939289093f, 0.7515049576759338f, 0.9362069368362427f, 0.6345930099487305f, 0.7756669521331787f, 0.41646483540534973f, 0.6747717261314392f, 0.3555489480495453f, -0.8664533495903015f, 0.26331809163093567f, 0.6092929840087891f, 0.1703399121761322f, 0.07884924858808517f, 0.18191252648830414f, 0.0398084931075573f, 0.7719441056251526f, -0.9694722294807434f, 0.7943095564842224f, 0.01218261569738388f, 0.09572168439626694f, 0.8041671514511108f, 0.25490912795066833f, 0.49695369601249695f, 0.40040770173072815f, -0.9949111342430115f, 0.9471070170402527f, 0.7095869779586792f, 0.29842472076416016f, 0.05780057609081268f, 0.3726038634777069f, 0.9405673146247864f, 0.23233526945114136f, -0.23209461569786072f, 0.3309026062488556f, 0.38689541816711426f, 0.7507089376449585f, 0.19109947979450226f, 0.606445848941803f, 0.2886471152305603f, 0.7724235653877258f, -0.8716483116149902f, 0.48989322781562805f, 0.22010762989521027f, 0.12481638789176941f, 0.9758074879646301f, 0.001737001002766192f, 0.14825527369976044f, 0.9903921484947205f, -0.40513354539871216f, 0.7123857736587524f, 0.9667693972587585f, 0.5025437474250793f, 0.7334998250007629f, 0.1075938418507576f, 0.5984523296356201f, 0.6469193696975708f, -0.19638755917549133f, 0.2820534408092499f, 0.3103641867637634f, 0.5328770875930786f, 0.6691298484802246f, 0.4818776845932007f, 0.6895872354507446f, 0.700901985168457f, -0.6609440445899963f, 0.37479910254478455f, 0.029044020920991898f, 0.8595431447029114f, 0.5963095426559448f, 0.196661576628685f, 0.5726205706596375f, 0.012924357317388058f, -0.3758694529533386f, 0.6163020730018616f, 0.9168980717658997f, 0.6427534222602844f, 0.06950288265943527f, 0.15073688328266144f, 0.8791266083717346f, 0.9356991648674011f, -0.0056828586384654045f, 0.9139395952224731f, 0.2575838267803192f, 0.14340761303901672f, 0.7355185747146606f, 0.31460148096084595f, 0.02785368077456951f, 0.02497190795838833f, -0.6412166953086853f, 0.36041510105133057f, 0.16653399169445038f, 0.6873016357421875f, 0.7422190308570862f, 0.669548511505127f, 0.7879166603088379f, 0.3117032051086426f, -0.6001175045967102f, 0.3753640949726105f, 0.4121355712413788f, 0.2768390476703644f, 0.07232324033975601f, 0.6931626200675964f, 0.42211905121803284f, 0.8296990394592285f, -0.150676429271698f, 0.7927384972572327f, 0.1384475976228714f, 0.1380399763584137f, 0.11703130602836609f, 0.6836500763893127f, 0.2970035672187805f, 0.6624654531478882f, -0.21859462559223175f, 0.9043465852737427f, 0.24331872165203094f, 0.18824565410614014f, 0.8140929937362671f, 0.3336493968963623f, 0.42064300179481506f, 0.27172064781188965f, -0.5261943340301514f, 0.4660970866680145f, 0.22319182753562927f, 0.27227187156677246f, 0.28425735235214233f, 0.9226212501525879f, 0.9697425365447998f, 0.8443281054496765f, -0.02521015703678131f, 0.21308355033397675f, 0.4545953571796417f, 0.40408584475517273f, 0.18034029006958008f, 0.8647202849388123f, 0.433303564786911f, 0.7236074805259705f, -0.6227925419807434f, 0.9147005081176758f, 0.7465357184410095f, 0.5414436459541321f, 0.6358407139778137f, 0.23960331082344055f, 0.8091340661048889f, 0.24176235496997833f, -0.40837424993515015f, 0.9523812532424927f, 0.4648183286190033f, 0.18824905157089233f, 0.4263933598995209f, 0.00482573127374053f, 0.3349274694919586f, 0.5960267782211304f, -0.05401840806007385f, 0.6904950737953186f, 0.6425068974494934f, 0.34753793478012085f, 0.22425764799118042f, 0.06805922836065292f, 0.7584208846092224f, 0.047720737755298615f, -0.4381366968154907f, 0.4037100374698639f, 0.29558902978897095f, 0.02614188753068447f, 0.99174964427948f, 0.603954017162323f, 0.9753896594047546f, 0.6532032489776611f, -0.23467998206615448f, 0.1312124878168106f, 0.9184655547142029f, 0.7180514335632324f, 0.3310880661010742f, 0.5148598551750183f, 0.27781179547309875f, 0.4106866121292114f, -0.32349103689193726f, 0.2634592652320862f, 0.39980384707450867f, 0.528187096118927f, 0.9938582181930542f, 0.06590709090232849f, 0.004150870256125927f, 0.6843769550323486f, -0.04353739321231842f, 0.06577011197805405f, 0.1378924697637558f, 0.07646719366312027f, 0.8069848418235779f, 0.13661222159862518f, 0.889931857585907f, 0.2702482044696808f, -0.9454423189163208f, 0.4279058873653412f, 0.3728069067001343f, 0.9446166157722473f, 0.916491687297821f, 0.6685751676559448f, 0.9216980934143066f, 0.8803762197494507f, -0.12303705513477325f, 0.2939518094062805f, 0.3251921534538269f, 0.42222583293914795f, 0.3800838589668274f, 0.11827358603477478f, 0.8623957633972168f, 0.7563630938529968f, -0.7598099708557129f, 0.33132031559944153f, 0.12802501022815704f, 0.9924605488777161f, 0.13226646184921265f, 0.23409950733184814f, 0.9374352097511292f, 0.6602998375892639f, -0.421602725982666f, 0.15229962766170502f, 0.7338462471961975f, 0.44170212745666504f, 0.49151483178138733f, 0.10770256072282791f, 0.7690505385398865f, 0.5802888870239258f, -0.884482741355896f, 0.32211264967918396f, 0.9314882755279541f, 0.4001527428627014f, 0.5815477967262268f, 0.5191283226013184f, 0.7579115629196167f, 0.07354546338319778f, -0.8180201649665833f, 0.9014061689376831f, 0.5572209358215332f, 0.816368043422699f, 0.7056057453155518f, 0.19377338886260986f, 0.5202932953834534f, 0.20147237181663513f, -0.43685922026634216f, 0.8821878433227539f, 0.6937667727470398f, 0.6761592030525208f, 0.14377903938293457f, 0.4898832142353058f, 0.012562532909214497f, 0.3165320158004761f, -0.20079757273197174f, 0.1480884701013565f, 0.7148982286453247f, 0.453305721282959f, 0.27667438983917236f, 0.31566473841667175f, 0.4240211248397827f, 0.9500389695167542f, -0.7597892880439758f, 0.2747337222099304f, 0.938381016254425f, 0.45607367157936096f, 0.025639990344643593f, 0.5521294474601746f, 0.9150871634483337f, 0.9998987317085266f, -0.3637602627277374f, 0.6334837675094604f, 0.24593804776668549f, 0.07085557281970978f, 0.6126250624656677f, 0.6960261464118958f, 0.06337685883045197f, 0.817226231098175f, -0.048522286117076874f, 0.12567175924777985f, 0.9705779552459717f, 0.026457518339157104f, 0.1781870722770691f, 0.8608865141868591f, 0.7797741889953613f, 0.03180995583534241f, -0.06634954363107681f, 0.963784396648407f, 0.611225426197052f, 0.8738282322883606f, 0.1468476504087448f, 0.6706268787384033f, 0.4145299792289734f, 0.6438080668449402f, -0.43228790163993835f, 0.0757080465555191f, 0.7312192916870117f, 0.9022848606109619f, 0.7927120923995972f, 0.6249417066574097f, 0.8706899881362915f, 0.651115894317627f, -0.3931027352809906f, 0.791999101638794f, 0.6662787199020386f, 0.7126626372337341f, 0.17600825428962708f, 0.9914101362228394f, 0.2868220806121826f, 0.7298220992088318f, -0.5936115980148315f, 0.5938498973846436f, 0.13476169109344482f, 0.14511263370513916f, 0.36818426847457886f, 0.8802415132522583f, 0.5986102819442749f, 0.17154350876808167f, -0.4579024016857147f, 0.12022798508405685f, 0.6420391798019409f, 0.12860427796840668f, 0.7535989880561829f, 0.5408772826194763f, 0.3922906816005707f, 0.7342687249183655f, -0.9994257688522339f, 0.05007250979542732f, 0.6673775315284729f, 0.7992345690727234f, 0.45454564690589905f, 0.32813408970832825f, 0.8876968026161194f, 0.7922312617301941f, -0.5588912963867188f, 0.17809145152568817f, 0.0005913422792218626f, 0.45889005064964294f, 0.9574257135391235f, 0.14609716832637787f, 0.9328434467315674f, 0.5356998443603516f, -0.3763948082923889f, 0.9009709358215332f, 0.9861260652542114f, 0.3795395493507385f, 0.6252956390380859f, 0.8311404585838318f, 0.5075955390930176f, 0.6767555475234985f, -0.1716722548007965f, 0.6123384237289429f, 0.715898334980011f, 0.5884922742843628f, 0.6468710899353027f, 0.389512836933136f, 0.749606192111969f, 0.699306070804596f, -0.022008229047060013f, 0.7567429542541504f, 0.37565842270851135f, 0.29426300525665283f, 0.8046621084213257f, 0.5982944369316101f, 0.638808012008667f, 0.5323644280433655f, -0.1580299735069275f, 0.16704869270324707f, 0.4695805013179779f, 0.8827676177024841f, 0.502837598323822f, 0.9431726932525635f, 0.7132658362388611f, 0.2891847491264343f, -0.6059260368347168f, 0.6011334657669067f, 0.6996345520019531f, 0.7265007495880127f, 0.5309168696403503f, 0.08330516517162323f, 0.7215249538421631f, 0.7348156571388245f, -0.5582334995269775f, 0.9638331532478333f, 0.24309664964675903f, 0.3497503697872162f, 0.7775794863700867f, 0.5076946020126343f, 0.659552812576294f, 0.5883200168609619f, -0.6040177345275879f, 0.2649047374725342f, 0.09491478651762009f, 0.8327561020851135f, 0.8631116151809692f, 0.39812713861465454f, 0.9987000823020935f, 0.4728444516658783f, -0.2604425549507141f, 0.07319580763578415f, 0.8803784251213074f, 0.6236139535903931f, 0.06645488739013672f, 0.9001530408859253f, 0.901909351348877f, 0.9273833632469177f, -0.11708929389715195f, 0.3191380202770233f, 0.2855839133262634f, 0.18329085409641266f, 0.5482639670372009f, 0.7685087323188782f, 0.683128297328949f, 0.8253501057624817f, -0.7544650435447693f, 0.745614767074585f, 0.08042506128549576f, 0.798949122428894f, 0.25010761618614197f, 0.7835058569908142f, 0.01240797434002161f, 0.02851579710841179f, -0.18297579884529114f, 0.018852723762392998f, 0.5861648917198181f, 0.5893935561180115f, 0.30126532912254333f, 0.20812049508094788f, 0.8027144074440002f, 0.306340754032135f, -0.11212646216154099f, 0.8900507688522339f, 0.3115796446800232f, 0.22269682586193085f, 0.14160265028476715f, 0.9726541638374329f, 0.08885438740253448f, 0.374690443277359f, -0.07506370544433594f, 0.8187097907066345f, 0.950685977935791f, 0.5250310301780701f, 0.6387989521026611f, 0.011749778874218464f, 0.5740609765052795f, 0.6884390711784363f, -0.8573944568634033f, 0.5456916689872742f, 0.3298293650150299f, 0.6504356265068054f, 0.5906003713607788f, 0.011409998871386051f, 0.2105979174375534f, 0.6579597592353821f, -0.5102168917655945f, 0.5074188113212585f, 0.7559243440628052f, 0.007674126420170069f, 0.34405791759490967f, 0.15687021613121033f, 0.6188821196556091f, 0.32369840145111084f, -0.29172736406326294f, 0.8344177603721619f, 0.6640462875366211f, 0.921099841594696f, 0.8797847628593445f, 0.32464343309402466f, 0.7798641324043274f, 0.8068409562110901f, -0.23372238874435425f, 0.17780108749866486f, 0.012053816579282284f, 0.1725350320339203f, 0.9994097948074341f, 0.8361161947250366f, 0.6670166254043579f, 0.9958357214927673f, -0.6474374532699585f, 0.4099525511264801f, 0.8709437251091003f, 0.9109970331192017f, 0.2669084668159485f, 0.6475293636322021f, 0.2499506026506424f, 0.08861470222473145f, -0.6424916386604309f, 0.921134889125824f, 0.491838663816452f, 0.13940711319446564f, 0.12838253378868103f, 0.4071218967437744f, 0.6035711169242859f, 0.5518897771835327f, -0.32395434379577637f, 0.18008248507976532f, 0.7024235129356384f, 0.39357128739356995f, 0.9027884602546692f, 0.1152859479188919f, 0.8767822980880737f, 0.45457297563552856f, -0.2643769681453705f, 0.013377915136516094f, 0.2618071138858795f, 0.4815196692943573f, 0.27837637066841125f, 0.6781116724014282f, 0.46331873536109924f, 0.03340743109583855f, -0.3759555518627167f, 0.4370996952056885f, 0.5996848940849304f, 0.65096116065979f, 0.7303255796432495f, 0.19694916903972626f, 0.21506370604038239f, 0.6391711831092834f, -0.46855300664901733f, 0.1467827707529068f, 0.6727247834205627f, 0.7004778385162354f, 0.8924240469932556f, 0.9388634562492371f, 0.5914896130561829f, 0.6326204538345337f, -0.9763530492782593f, 0.3103146255016327f, 0.005357132293283939f, 0.7227360010147095f, 0.0489022359251976f, 0.08301350474357605f, 0.6002793908119202f, 0.11001197248697281f, -0.10883955657482147f, 0.8969624042510986f, 0.13411878049373627f, 0.4127636253833771f, 0.776948094367981f, 0.12376700341701508f, 0.8937339186668396f, 0.7925351858139038f, -0.38769209384918213f, 0.22180873155593872f, 0.9691826105117798f, 0.9549118280410767f, 0.23632487654685974f, 0.10668665170669556f, 0.03759784623980522f, 0.07586602121591568f, -0.18191929161548615f, 0.17097096145153046f, 0.7523255944252014f, 0.9629544615745544f, 0.978217363357544f, 0.0013290193164721131f, 0.4225204586982727f, 0.013883929699659348f, -0.38522306084632874f, 0.27618736028671265f, 0.19635061919689178f, 0.7245123386383057f, 0.5365189909934998f, 0.5704410672187805f, 0.2606392800807953f, 0.11814785748720169f, -0.34579214453697205f, 0.5976973176002502f, 0.3415590226650238f, 0.4012349843978882f, 0.6433846950531006f, 0.8842218518257141f, 0.1077926978468895f, 0.846373975276947f, -0.7600834369659424f, 0.711256742477417f, 0.904470682144165f, 0.34867170453071594f, 0.9496326446533203f, 0.9738163352012634f, 0.7376807332038879f, 0.684689998626709f, -0.9536866545677185f, 0.4087647497653961f, 0.3808711767196655f, 0.837454080581665f, 0.4984663128852844f, 0.15647339820861816f, 0.28385767340660095f, 0.49842071533203125f, -0.5655490159988403f, 0.6321134567260742f, 0.48660385608673096f, 0.8676222562789917f, 0.20956964790821075f, 0.8060823082923889f, 0.8478376865386963f, 0.5484328269958496f, -0.36017680168151855f, 0.09225580841302872f, 0.581139326095581f, 0.08849252760410309f, 0.8508648872375488f, 0.4510714113712311f, 0.09018164128065109f, 0.07747159898281097f, -0.3706352412700653f, 0.2852812707424164f, 0.5077770352363586f, 0.1550850123167038f, 0.5034259557723999f, 0.5746849179267883f, 0.3898797035217285f, 0.4206196665763855f, -0.7206194996833801f, 0.41834887862205505f, 0.7344006299972534f, 0.14607489109039307f, 0.42631375789642334f, 0.6556304693222046f, 0.17904727160930634f, 0.6766136288642883f, -0.19406110048294067f, 0.2406524419784546f, 0.17942480742931366f, 0.48083531856536865f, 0.26698121428489685f, 0.9597413539886475f, 0.19503536820411682f, 0.6652339100837708f, -0.3095211088657379f, 0.5248423218727112f, 0.6292746663093567f, 0.8424505591392517f, 0.8089560270309448f, 0.41929805278778076f, 0.32895877957344055f, 0.9011794924736023f, -0.3220996558666229f, 0.9962689280509949f, 0.915599524974823f, 0.6258321404457092f, 0.6240088939666748f, 0.5886769890785217f, 0.6270705461502075f, 0.7039200067520142f, -0.12215445190668106f, 0.732063353061676f, 0.8797100782394409f, 0.9710085988044739f, 0.18814116716384888f, 0.4274742901325226f, 0.851159930229187f, 0.5092177987098694f, -0.8980814814567566f, 0.3072432577610016f, 0.022659340873360634f, 0.7142468690872192f, 0.8678805232048035f, 0.4908098876476288f, 0.29085400700569153f, 0.5899925827980042f, -0.2656487822532654f, 0.8041359782218933f, 0.4059182107448578f, 0.11615210771560669f, 0.8547167778015137f, 0.5164147615432739f, 0.8180611729621887f, 0.04592100530862808f, -0.5120255351066589f, 0.4921623766422272f, 0.9874094724655151f, 0.661374568939209f, 0.4631957709789276f, 0.4623399078845978f, 0.6100829243659973f, 0.36802151799201965f, -0.5123931765556335f, 0.06452391296625137f, 0.8411259651184082f, 0.5903562903404236f, 0.7323795557022095f, 0.6354032754898071f, 0.7771496772766113f, 0.009139086119830608f, -0.2634497880935669f, 0.46135959029197693f, 0.05093565210700035f, 0.7471310496330261f, 0.8472092747688293f, 0.0924435406923294f, 0.15181894600391388f, 0.6325464248657227f, -0.13658171892166138f, 0.47527915239334106f, 0.0033942863810807467f, 0.8672570586204529f, 0.4863206446170807f, 0.905379593372345f, 0.20962345600128174f, 0.2077934294939041f, -0.7088032364845276f, 0.5872865319252014f, 0.5676897764205933f, 0.24487905204296112f, 0.7108381986618042f, 0.35753583908081055f, 0.37421315908432007f, 0.6327641010284424f, -0.6464446783065796f, 0.612452507019043f, 0.5137222409248352f, 0.8266171813011169f, 0.6604738831520081f, 0.682009756565094f, 0.05307679995894432f, 0.6086951494216919f, -0.8705718517303467f, 0.9478846192359924f, 0.04523850977420807f, 0.2938832938671112f, 0.5303419828414917f, 0.8904775977134705f, 0.5517228841781616f, 0.46300244331359863f, -0.1680186241865158f, 0.32427099347114563f, 0.9507001042366028f, 0.6936529278755188f, 0.7521001100540161f, 0.03757967799901962f, 0.8802232146263123f, 0.37531930208206177f, -0.6480273008346558f, 0.20249851047992706f, 0.8491779565811157f, 0.8453076481819153f, 0.23377077281475067f, 0.9011414051055908f, 0.6605890393257141f, 0.6626177430152893f, -0.3085109293460846f, 0.9161721467971802f, 0.057290252298116684f, 0.3963243067264557f, 0.6058439016342163f, 0.6233304142951965f, 0.4455447793006897f, 0.7026829719543457f, -0.6548274159431458f, 0.9335165619850159f, 0.4604884088039398f, 0.31538116931915283f, 0.09756875783205032f, 0.702044665813446f, 0.14867256581783295f, 0.631020188331604f, -0.948897123336792f, 0.15603463351726532f, 0.8115745782852173f, 0.8842867016792297f, 0.7267358303070068f, 0.9153817296028137f, 0.6434440016746521f, 0.23645025491714478f, -0.8380601406097412f, 0.575256884098053f, 0.668682873249054f, 0.8141114115715027f, 0.39054930210113525f, 0.3999587595462799f, 0.15031222999095917f, 0.5542188286781311f, -0.9159644246101379f, 0.6115137934684753f, 0.9582734704017639f, 0.8623583912849426f, 0.48424816131591797f, 0.9530035257339478f, 0.6883898377418518f, 0.9195133447647095f, -0.5235088467597961f, 0.1984763890504837f, 0.5630337595939636f, 0.1560564786195755f, 0.3269474506378174f, 0.37696346640586853f, 0.7445863485336304f, 0.3769642412662506f, -0.7180554866790771f, 0.6925472021102905f, 0.8113807439804077f, 0.5057851672172546f, 0.9312582612037659f, 0.1511586755514145f, 0.9119359850883484f, 0.5763038992881775f, -0.7357630729675293f, 0.8164611458778381f, 0.9918332695960999f, 0.7992156147956848f, 0.5826529264450073f, 0.9451660513877869f, 0.5010982751846313f, 0.8534886240959167f, -0.09677837789058685f, 0.46195700764656067f, 0.1631886512041092f, 0.5361619591712952f, 0.42026376724243164f, 0.42123234272003174f, 0.6973605155944824f, 0.3081471621990204f, -0.0928661972284317f, 0.9397026896476746f, 0.49792832136154175f, 0.9929203987121582f, 0.12149954587221146f, 0.5738222599029541f, 0.8248690962791443f, 0.8583927750587463f, -0.10473255068063736f, 0.9720054268836975f, 0.023930003866553307f, 0.2287077158689499f, 0.13186554610729218f, 0.5521939396858215f, 0.20844002068042755f, 0.34094053506851196f, -0.5385837554931641f, 0.4156711995601654f, 0.34128931164741516f, 0.09806852787733078f, 0.9658137559890747f, 0.03715034946799278f, 0.6620818376541138f, 0.07435820996761322f, -0.053868211805820465f, 0.724557638168335f, 0.3742399513721466f, 0.8336063623428345f, 0.7268776893615723f, 0.15470893681049347f, 0.42582380771636963f, 0.3958495259284973f, -0.5303125977516174f, 0.0899989977478981f, 0.2057734578847885f, 0.06417074054479599f, 0.23573502898216248f, 0.03300318121910095f, 0.9189570546150208f, 0.6848627328872681f, -0.9953303933143616f, 0.21843674778938293f, 0.0028283135034143925f, 0.6459667682647705f, 0.8278646469116211f, 0.6911270022392273f, 0.9491751790046692f, 0.9466667771339417f, -0.255785197019577f, 0.7749748229980469f, 0.20254993438720703f, 0.7885112762451172f, 0.8804710507392883f, 0.9947869777679443f, 0.69217848777771f, 0.3430640697479248f, -0.7194506525993347f, 0.7352939248085022f, 0.18990907073020935f, 0.7396179437637329f, 0.3137647807598114f, 0.013452406972646713f, 0.4047657549381256f, 0.5103721618652344f, -0.8073590993881226f, 0.5117344856262207f, 0.08372976630926132f, 0.8230308294296265f, 0.0880110040307045f, 0.24482759833335876f, 0.08170764893293381f, 0.14292795956134796f, -0.8286835551261902f, 0.9060487151145935f, 0.4098212718963623f, 0.8436718583106995f, 0.003640524810180068f, 0.1793203055858612f, 0.9782969355583191f, 0.6072483062744141f, -0.7159097790718079f, 0.9579094648361206f, 0.2019413858652115f, 0.8153513073921204f, 0.6220283508300781f, 0.23518425226211548f, 0.0928175076842308f, 0.8407275676727295f, -0.12475880980491638f, 0.28923413157463074f, 0.9518457055091858f, 0.4044106900691986f, 0.1661737710237503f, 0.4706701934337616f, 0.24697230756282806f, 0.8255764842033386f, -0.95651775598526f, 0.66843181848526f, 0.7056296467781067f, 0.5852400660514832f, 0.9264401197433472f, 0.5535321235656738f, 0.7520114779472351f, 0.9085343480110168f, -0.9286194443702698f, 0.6364472508430481f, 0.8361963033676147f, 0.25310230255126953f, 0.31081661581993103f, 0.11200880259275436f, 0.5792148113250732f, 0.7620754837989807f, -0.01713300496339798f, 0.8132001161575317f, 0.7742248773574829f, 0.680984616279602f, 0.9065360426902771f, 0.9357202053070068f, 0.8423483371734619f, 0.24971269071102142f, -0.2680943012237549f, 0.6888535618782043f, 0.715429425239563f, 0.8136537075042725f, 0.6245977282524109f, 0.502871572971344f, 0.4600231349468231f, 0.9779858589172363f, -0.9305253028869629f, 0.5131142735481262f, 0.4459194839000702f, 0.7433153390884399f, 0.4122483432292938f, 0.19531215727329254f, 0.11314757168292999f, 0.20767900347709656f, -0.6287128925323486f, 0.9836614727973938f, 0.9843947887420654f, 0.3122434616088867f, 0.5192176699638367f, 0.1762741655111313f, 0.019997436553239822f, 0.4425174295902252f, -0.3413539528846741f, 0.217861145734787f, 0.6935694813728333f, 0.5264921188354492f, 0.5728018283843994f, 0.944494366645813f, 0.5733996033668518f, 0.36299633979797363f, -0.918735682964325f, 0.3896719515323639f, 0.5639475584030151f, 0.22782427072525024f, 0.29171550273895264f, 0.06314029544591904f, 0.5437745451927185f, 0.6025647521018982f, -0.6530779004096985f, 0.11340921372175217f, 0.15931297838687897f, 0.8859219551086426f, 0.10476326942443848f, 0.3878239691257477f, 0.9796555638313293f, 0.23764696717262268f, -0.009339384734630585f, 0.6327117681503296f, 0.7177192568778992f, 0.9131103157997131f, 0.2186642587184906f, 0.23175694048404694f, 0.9613164663314819f, 0.2557537853717804f, -0.41095176339149475f, 0.04080921411514282f, 0.018096087500452995f, 0.912071943283081f, 0.27590426802635193f, 0.5443924069404602f, 0.601586103439331f, 0.7896128296852112f, -0.5409807562828064f, 0.644919216632843f, 0.5141023993492126f, 0.6645184755325317f, 0.3832707107067108f, 0.4711245000362396f, 0.4885990619659424f, 0.44739121198654175f, -0.8151643872261047f, 0.8397124409675598f, 0.03518925607204437f, 0.12020941823720932f, 0.41885268688201904f, 0.40908682346343994f, 0.8566334843635559f, 0.9009210467338562f, -0.5852878093719482f, 0.7591903209686279f, 0.4815216660499573f, 0.6150361895561218f, 0.002780772978439927f, 0.7090287208557129f, 0.2720402777194977f, 0.45701858401298523f, -0.7256922125816345f, 0.19050996005535126f, 0.0033321331720799208f, 0.14254771173000336f, 0.2390497773885727f, 0.3583844006061554f, 0.2590574026107788f, 0.5760293006896973f, -0.8745294809341431f, 0.7264587879180908f, 0.39833712577819824f, 0.4892517924308777f, 0.46461009979248047f, 0.27534812688827515f, 0.9784760475158691f, 0.5529805421829224f, -0.13837629556655884f, 0.6258798837661743f, 0.8802316188812256f, 0.6961367726325989f, 0.6867219805717468f, 0.39490166306495667f, 0.9281678199768066f, 0.5519179105758667f, -0.5776680111885071f, 0.39439985156059265f, 0.9282171130180359f, 0.1807888150215149f, 0.950588047504425f, 0.16663002967834473f, 0.5761595368385315f, 0.967328667640686f, -0.5946275591850281f, 0.8147463202476501f, 0.20593217015266418f, 0.9020094275474548f, 0.03908611834049225f, 0.4208827316761017f, 0.6010823845863342f, 0.992222011089325f, -0.3175388276576996f, 0.7569497227668762f, 0.14390341937541962f, 0.0888281837105751f, 0.10847306996583939f, 0.14829744398593903f, 0.1707635074853897f, 0.6393539309501648f, -0.12584508955478668f, 0.3668360412120819f, 0.6938067674636841f, 0.8901730179786682f, 0.221979022026062f, 0.8287132382392883f, 0.6781018376350403f, 0.034799519926309586f, -0.026113012805581093f, 0.24789199233055115f, 0.3031165599822998f, 0.30760011076927185f, 0.5554941296577454f, 0.6639075875282288f, 0.21357639133930206f, 0.34197038412094116f, -0.968994677066803f, 0.6488819718360901f, 0.9019933938980103f, 0.07573776692152023f, 0.5801653861999512f, 0.7980650663375854f, 0.4610859751701355f, 0.4558097720146179f, -0.19684302806854248f, 0.18616646528244019f, 0.23337583243846893f, 0.4990341067314148f, 0.7037010192871094f, 0.6436198353767395f, 0.24457307159900665f, 0.7770310640335083f, -0.625368595123291f, 0.8756439685821533f, 0.1259891539812088f, 0.11284938454627991f, 0.7426440715789795f, 0.3927590847015381f, 0.13194480538368225f, 0.3025219440460205f, -0.8224303126335144f, 0.05171584337949753f, 0.11280544847249985f, 0.7752953767776489f, 0.26151880621910095f, 0.383064329624176f, 0.4948292672634125f, 0.5192846655845642f, -0.6777672171592712f, 0.25491082668304443f, 0.3068833351135254f, 0.17029447853565216f, 0.6997418999671936f, 0.26349207758903503f, 0.10692159831523895f, 0.7205324769020081f, -0.9339208006858826f, 0.8421981930732727f, 0.010263236239552498f, 0.2301403433084488f, 0.6057261824607849f, 0.7291828989982605f, 0.3980230391025543f, 0.4214962422847748f, -0.5965882539749146f, 0.24511700868606567f, 0.22667744755744934f, 0.015498572029173374f, 0.004228321835398674f, 0.5320065021514893f, 0.6332719922065735f, 0.30852237343788147f, -0.6483232378959656f, 0.9721153974533081f, 0.9734839797019958f, 0.06258569657802582f, 0.031315192580223083f, 0.6412638425827026f, 0.3138943314552307f, 0.5934697389602661f, -0.46374693512916565f, 0.2936100363731384f, 0.23298673331737518f, 0.38931047916412354f, 0.9177299737930298f, 0.1505364626646042f, 0.6530308127403259f, 0.41215163469314575f, -0.3533901572227478f, 0.26822251081466675f, 0.5154330730438232f, 0.2701168954372406f, 0.32972458004951477f, 0.9368245005607605f, 0.7502865791320801f, 0.32148057222366333f, -0.45290932059288025f, 0.511681318283081f, 0.47808510065078735f, 0.32327747344970703f, 0.6841997504234314f, 0.9678027629852295f, 0.520334780216217f, 0.7473534345626831f, -0.7772625088691711f, 0.736623227596283f, 0.8607732057571411f, 0.9667275547981262f, 0.4560672640800476f, 0.2704223394393921f, 0.14544269442558289f, 0.7545318603515625f, -0.21486550569534302f, 0.32769015431404114f, 0.9914677143096924f, 0.14687076210975647f, 0.7242969870567322f, 0.48633360862731934f, 0.05656072869896889f, 0.22735507786273956f, -0.22011402249336243f, 0.1942322701215744f, 0.6536839604377747f, 0.04057272523641586f, 0.921172559261322f, 0.8877853751182556f, 0.8904338479042053f, 0.963942289352417f, -0.3033596873283386f, 0.5611979365348816f, 0.20628410577774048f, 0.6207795143127441f, 0.7757342457771301f, 0.6627216339111328f, 0.7927178740501404f, 0.2980692982673645f, -0.2086225152015686f, 0.30454549193382263f, 0.36816319823265076f, 0.08973460644483566f, 0.47017985582351685f, 0.9059226512908936f, 0.5155017375946045f, 0.2997702956199646f, -0.9775611758232117f, 0.44504690170288086f, 0.49955689907073975f, 0.5331793427467346f, 0.7267279624938965f, 0.027646107599139214f, 0.28859299421310425f, 0.9044886827468872f, -0.9083901047706604f, 0.6211917996406555f, 0.5834125280380249f, 0.8343560695648193f, 0.820085883140564f, 0.8083056211471558f, 0.23108093440532684f, 0.18827801942825317f, -0.6375491619110107f, 0.7014376521110535f, 0.6173043847084045f, 0.46051594614982605f, 0.08899050951004028f, 0.10323163866996765f, 0.5111736059188843f, 0.0859539732336998f, -0.3361329436302185f, 0.4249497950077057f, 0.8635343313217163f, 0.4651188254356384f, 0.8286846280097961f, 0.35903990268707275f, 0.722398579120636f, 0.45630571246147156f, -0.7320118546485901f, 0.02249559387564659f, 0.4390084445476532f, 0.06687837839126587f, 0.737313449382782f, 0.9499161839485168f, 0.2841919958591461f, 0.4376446306705475f, -0.7691289186477661f, 0.4071823060512543f, 0.9268417358398438f, 0.8048044443130493f, 0.8108023405075073f, 0.07472708821296692f, 0.5681334733963013f, 0.3138206899166107f, -0.7968219518661499f, 0.5361623764038086f, 0.6111031174659729f, 0.9574801325798035f, 0.5141287446022034f, 0.6091421246528625f, 0.5552446246147156f, 0.7305402755737305f, -0.6869174242019653f, 0.7220655679702759f, 0.01160413958132267f, 0.26996347308158875f, 0.9663212299346924f, 0.9342283606529236f, 0.866258978843689f, 0.9614925384521484f, -0.7826036810874939f, 0.19767844676971436f, 0.8379046320915222f, 0.7208091616630554f, 0.21902018785476685f, 0.34691035747528076f, 0.951633095741272f, 0.7052266597747803f, -0.8822177052497864f, 0.13436762988567352f, 0.8909662961959839f, 0.02244945615530014f, 0.03455391526222229f, 0.6343105435371399f, 0.5374130606651306f, 0.11731892079114914f, -0.958832323551178f, 0.6493907570838928f, 0.9362882971763611f, 0.3232359290122986f, 0.7699669003486633f, 0.14523302018642426f, 0.7012053728103638f, 0.8065226674079895f, -0.22717222571372986f, 0.773811936378479f, 0.2162395566701889f, 0.8171474933624268f, 0.7106422781944275f, 0.5410327911376953f, 0.6743998527526855f, 0.7309591770172119f, -0.1880522221326828f, 0.63120436668396f, 0.07585440576076508f, 0.25412288308143616f, 0.7189539074897766f, 0.1874363273382187f, 0.9149954915046692f, 0.5606078505516052f, -0.8735684752464294f, 0.4764938950538635f, 0.8693786263465881f, 0.49560078978538513f, 0.6698500514030457f, 0.38088878989219666f, 0.4925190806388855f, 0.31201452016830444f, -0.8557817935943604f, 0.8840526342391968f, 0.24972622096538544f, 0.11217586696147919f, 0.3044652044773102f, 0.44784003496170044f, 0.1953824758529663f, 0.06765623390674591f, -0.2819681167602539f, 0.18423594534397125f, 0.6537865996360779f, 0.3090730607509613f, 0.8102256655693054f, 0.5572554469108582f, 0.7171205282211304f, 0.7119795083999634f, -0.3128449618816376f, 0.07396766543388367f, 0.9286286234855652f, 0.3329910933971405f, 0.9173661470413208f, 0.9977117776870728f, 0.9327548742294312f, 0.9613074660301208f, -0.16328644752502441f, 0.23726463317871094f, 0.16397921741008759f, 0.18301767110824585f, 0.37396109104156494f, 0.65533447265625f, 0.9598321914672852f, 0.8546414375305176f, -0.5098034739494324f, 0.45903506875038147f, 0.3981446921825409f, 0.32993775606155396f, 0.3548332452774048f, 0.10424980521202087f, 0.7991273403167725f, 0.4561648368835449f, -0.32177525758743286f, 0.5217376351356506f, 0.7849901914596558f, 0.26172903180122375f, 0.2665896713733673f, 0.8127756714820862f, 0.7565352916717529f, 0.0929248034954071f, -0.4228709936141968f, 0.14052163064479828f, 0.08509344607591629f, 0.9088320732116699f, 0.8366007804870605f, 0.15718698501586914f, 0.7729631662368774f, 0.2785957157611847f, -0.3122621178627014f, 0.6649373769760132f, 0.1986953467130661f, 0.28200504183769226f, 0.6024459600448608f, 0.7998850345611572f, 0.4479917287826538f, 0.11024370044469833f, -0.5104821920394897f, 0.1692775934934616f, 0.02598620392382145f, 0.02297394536435604f, 0.6753804087638855f, 0.4539739787578583f, 0.9070771336555481f, 0.34343618154525757f, -0.710096001625061f, 0.9398519992828369f, 0.09208697080612183f, 0.17440995573997498f, 0.3983447253704071f, 0.0036354491021484137f, 0.17980138957500458f, 0.031070047989487648f, -0.4170043468475342f, 0.8832696676254272f, 0.3382854461669922f, 0.7332472205162048f, 0.15009430050849915f, 0.8131722211837769f, 0.9990054965019226f, 0.6338061690330505f, -0.28043705224990845f, 0.27732259035110474f, 0.38039207458496094f, 0.6770486235618591f, 0.1413707286119461f, 0.5973291993141174f, 0.3304830491542816f, 0.8328955173492432f, -0.2675318419933319f, 0.5526405572891235f, 0.8674792647361755f, 0.624355673789978f, 0.9622538685798645f, 0.6940979361534119f, 0.17657724022865295f, 0.6876315474510193f, -0.04030831530690193f, 0.036505501717329025f, 0.011325394734740257f, 0.3815472722053528f, 0.4294596314430237f, 0.0864260345697403f, 0.6942504644393921f, 0.14878854155540466f, -0.8035461902618408f, 0.4775734543800354f, 0.6287046074867249f, 0.17529265582561493f, 0.2967870235443115f, 0.9250869154930115f, 0.2387814074754715f, 0.35020098090171814f, -0.5488494038581848f, 0.8577283024787903f, 0.18183034658432007f, 0.6741934418678284f, 0.695472002029419f, 0.8447900414466858f, 0.8269122242927551f, 0.809901237487793f, -0.6217423677444458f, 0.9431862235069275f, 0.6641582250595093f, 0.8796884417533875f, 0.16510985791683197f, 0.11654093861579895f, 0.7086746096611023f, 0.8552731871604919f, -0.7938231229782104f, 0.15012085437774658f, 0.03865816444158554f, 0.5424082279205322f, 0.8734539151191711f, 0.9900194406509399f, 0.18357162177562714f, 0.9707738757133484f, -0.5348612070083618f, 0.21551357209682465f, 0.5600320100784302f, 0.1728658825159073f, 0.6501113176345825f, 0.5577988028526306f, 0.19069279730319977f, 0.5834340453147888f, -0.6960987448692322f, 0.17347130179405212f, 0.02112433686852455f, 0.18725721538066864f, 0.9123945236206055f, 0.9113566875457764f, 0.03998378664255142f, 0.33660319447517395f, -0.6905257701873779f, 0.0040684533305466175f, 0.16499754786491394f, 0.6672759056091309f, 0.3976270854473114f, 0.4745728373527527f, 0.739020049571991f, 0.41671109199523926f, -0.4183257222175598f, 0.26837512850761414f, 0.8260937929153442f, 0.6609271764755249f, 0.30912721157073975f, 0.9379354119300842f, 0.5672388076782227f, 0.27081891894340515f, -0.23061466217041016f, 0.6897791028022766f, 0.33352723717689514f, 0.3870077431201935f, 0.7784287929534912f, 0.5306746363639832f, 0.13070955872535706f, 0.744329571723938f, -0.24107398092746735f, 0.1638122946023941f, 0.8282036185264587f, 0.48497870564460754f, 0.706311821937561f, 0.9202195405960083f, 0.18515071272850037f, 0.4991157650947571f, -0.6355981230735779f, 0.36662885546684265f, 0.6665900349617004f, 0.9570690393447876f, 0.6728377938270569f, 0.5506444573402405f, 0.40894055366516113f, 0.6040019989013672f, -0.7523337006568909f, 0.10914149880409241f, 0.8219217658042908f, 0.9520633220672607f, 0.4442506730556488f, 0.892663300037384f, 0.14485475420951843f, 0.14616549015045166f, -0.9282236099243164f, 0.5728079080581665f, 0.45919182896614075f, 0.9322077631950378f, 0.11782011389732361f, 0.6026315093040466f, 0.8043122887611389f, 0.2586747705936432f, -0.20907734334468842f, 0.036516956984996796f, 0.530368983745575f, 0.9362868666648865f, 0.37948769330978394f, 0.8088100552558899f, 0.8937749862670898f, 0.16933253407478333f, -0.3121739625930786f, 0.2842176854610443f, 0.5096632242202759f, 0.3547835648059845f, 0.23382259905338287f, 0.9367581605911255f, 0.8489781618118286f, 0.5572274327278137f, -0.9847395420074463f, 0.8873686790466309f, 0.40718019008636475f, 0.37934252619743347f, 0.27246594429016113f, 0.6738012433052063f, 0.6979975700378418f, 0.4551076889038086f, -0.4098145365715027f, 0.010339970700442791f, 0.7415696978569031f, 0.13307255506515503f, 0.48812049627304077f, 0.5587825179100037f, 0.995302677154541f, 0.18250548839569092f, -0.8729076385498047f, 0.5519697070121765f, 0.7374035716056824f, 0.3695720434188843f, 0.21864627301692963f, 0.664120078086853f, 0.5381128787994385f, 0.6757503151893616f, -0.24285979568958282f, 0.3267253637313843f, 0.3182052969932556f, 0.35925912857055664f, 0.9323779940605164f, 0.9922254681587219f, 0.9141061305999756f, 0.7681183218955994f, -0.8368917107582092f, 0.24760043621063232f, 0.5673061013221741f, 0.7383669018745422f, 0.25867488980293274f, 0.0017137769609689713f, 0.7745900750160217f, 0.12540675699710846f, -0.3258209526538849f, 0.5276515483856201f, 0.17417694628238678f, 0.8095035552978516f, 0.7251359820365906f, 0.4378311038017273f, 0.3379090428352356f, 0.9904748201370239f, -0.7334962487220764f, 0.6266423463821411f, 0.026366258040070534f, 0.8018198609352112f, 0.08561381697654724f, 0.8486039042472839f, 0.46338996291160583f, 0.013374606147408485f, -0.6582152247428894f, 0.9484530687332153f, 0.5979982018470764f, 0.7422192692756653f, 0.06930296123027802f, 0.3919375538825989f, 0.2755202353000641f, 0.07475316524505615f, -0.665478527545929f, 0.6880860924720764f, 0.4892694056034088f, 0.30474361777305603f, 0.548564076423645f, 0.00436699902638793f, 0.6329146027565002f, 0.5490009188652039f, -0.6099494695663452f, 0.0313592329621315f, 0.7599168419837952f, 0.9707520008087158f, 0.039397746324539185f, 0.22317290306091309f, 0.09303828328847885f, 0.06531816720962524f, -0.6547723412513733f, 0.2948116064071655f, 0.4515645503997803f, 0.91733717918396f, 0.24207042157649994f, 0.419939786195755f, 0.7757521271705627f, 0.8168008923530579f, -0.1615350842475891f, 0.620139479637146f, 0.6968688368797302f, 0.25275951623916626f, 0.29847267270088196f, 0.4407472014427185f, 0.22841095924377441f, 0.6896411180496216f, -0.26546794176101685f, 0.9123073816299438f, 0.731774091720581f, 0.2933315932750702f, 0.07020459324121475f, 0.3073844313621521f, 0.021693218499422073f, 0.7431932687759399f, -0.6753187775611877f, 0.18546181917190552f, 0.42905211448669434f, 0.04261061176657677f, 0.5001127123832703f, 0.8334839344024658f, 0.17142131924629211f, 0.6141620874404907f, -0.25461041927337646f, 0.6722091436386108f, 0.47305017709732056f, 0.7768329381942749f, 0.30969807505607605f, 0.08711927384138107f, 0.7568771839141846f, 0.8818832039833069f, -0.595696747303009f, 0.05078177899122238f, 0.0692070722579956f, 0.8771646618843079f, 0.7494382262229919f, 0.19025753438472748f, 0.546052098274231f, 0.14395397901535034f, -0.5114080309867859f, 0.5800368785858154f, 0.3223957419395447f, 0.20980462431907654f, 0.440080851316452f, 0.28211095929145813f, 0.1618337780237198f, 0.42222073674201965f, -0.29263317584991455f, 0.3261815011501312f, 0.5779665112495422f, 0.9771426320075989f, 0.5264603495597839f, 0.10635195672512054f, 0.31840604543685913f, 0.8687031865119934f, -0.4234425127506256f, 0.8960047960281372f, 0.04621966555714607f, 0.9405215978622437f, 0.7990832924842834f, 0.37564003467559814f, 0.8749397397041321f, 0.6793010234832764f, -0.9013640880584717f, 0.7023375034332275f, 0.8674442768096924f, 0.8533419370651245f, 0.5783987641334534f, 0.27090927958488464f, 0.7262323498725891f, 0.8797038793563843f, -0.43710702657699585f, 0.7733926177024841f, 0.3474160432815552f, 0.2304585874080658f, 0.9421567916870117f, 0.7727038264274597f, 0.6270948052406311f, 0.8863624930381775f, -0.5395956039428711f, 0.9814590215682983f, 0.6347394585609436f, 0.31617671251296997f, 0.918760359287262f, 0.5230608582496643f, 0.3623059093952179f, 0.7970762252807617f, -0.8534966707229614f, 0.9517311453819275f, 0.0009764263522811234f, 0.5764568448066711f, 0.5747760534286499f, 0.5762202143669128f, 0.48032864928245544f, 0.014829064719378948f, -0.07078199088573456f, 0.5588500499725342f, 0.40077972412109375f, 0.9920223355293274f, 0.3103049397468567f, 0.9755693674087524f, 0.6624073386192322f, 0.6714904308319092f, -0.06279388815164566f, 0.3690985143184662f, 0.3322991728782654f, 0.7071717381477356f, 0.4154139757156372f, 0.48446810245513916f, 0.5266222953796387f, 0.03435739129781723f, -0.17276929318904877f, 0.5595134496688843f, 0.10138633847236633f, 0.37887415289878845f, 0.8606154322624207f, 0.9777480959892273f, 0.9633443355560303f, 0.6435752511024475f, -0.9349085688591003f, 0.2167203426361084f, 0.9038199782371521f, 0.5627761483192444f, 0.7916793823242188f, 0.7354964017868042f, 0.2184157371520996f, 0.24099208414554596f, -0.8859689831733704f, 0.6580483317375183f, 0.8547531962394714f, 0.2058832049369812f, 0.8956504464149475f, 0.8298039436340332f, 0.05256554111838341f, 0.6722875237464905f, -0.12486384809017181f, 0.44831177592277527f, 0.8290076851844788f, 0.030408354476094246f, 0.3842383325099945f, 0.3097141981124878f, 0.3102969825267792f, 0.707987368106842f, -0.571068286895752f, 0.3839150369167328f, 0.2528071999549866f, 0.6597869396209717f, 0.7299755811691284f, 0.36246490478515625f, 0.6493623852729797f, 0.826108455657959f, -0.9000794887542725f, 0.0020253953989595175f, 0.19493505358695984f, 0.08128095418214798f, 0.0009971775580197573f, 0.9545018672943115f, 0.4380250871181488f, 0.8812942504882812f, -0.4311160147190094f, 0.2543269991874695f, 0.9479711055755615f, 0.327338308095932f, 0.6535859704017639f, 0.26821041107177734f, 0.28765907883644104f, 0.23947811126708984f, -0.26806870102882385f, 0.9572628140449524f, 0.17777258157730103f, 0.233714759349823f, 0.841732382774353f, 0.5951212644577026f, 0.12545272707939148f, 0.5834788084030151f, -0.7472609281539917f, 0.5151287317276001f, 0.9030259847640991f, 0.6347557902336121f, 0.7382781505584717f, 0.9115778803825378f, 0.7413359880447388f, 0.8278276324272156f, -0.8064123392105103f, 0.9620784521102905f, 0.8681958913803101f, 0.0096723148599267f, 0.3599185645580292f, 0.6556843519210815f, 0.10393641889095306f, 0.041924849152565f, -0.7004203796386719f, 0.8849185705184937f, 0.10941017419099808f, 0.7745969295501709f, 0.1032097339630127f, 0.33555078506469727f, 0.5527595281600952f, 0.028606943786144257f, -0.10105562955141068f, 0.6001749038696289f, 0.9409510493278503f, 0.7192438840866089f, 0.7898900508880615f, 0.016621986404061317f, 0.45908719301223755f, 0.7509690523147583f, -0.5669559836387634f, 0.21026258170604706f, 0.4324885904788971f, 0.7443158030509949f, 0.05768974870443344f, 0.47957345843315125f, 0.9484496116638184f, 0.16025231778621674f, -0.8433896899223328f, 0.5172806978225708f, 0.15699337422847748f, 0.39412394165992737f, 0.9029998779296875f, 0.05565311014652252f, 0.7805940508842468f, 0.49641117453575134f, -0.742900013923645f, 0.0009576164302416146f, 0.9255560636520386f, 0.3388074040412903f, 0.6240367889404297f, 0.2354528307914734f, 0.22893789410591125f, 0.45684829354286194f, -0.2076472043991089f, 0.0160797368735075f, 0.5067601203918457f, 0.8569696545600891f, 0.20644959807395935f, 0.44650983810424805f, 0.16425400972366333f, 0.5767872929573059f, -0.31276699900627136f, 0.6515252590179443f, 0.6615145206451416f, 0.059994857758283615f, 0.6590124368667603f, 0.33635255694389343f, 0.7618539929389954f, 0.3432113230228424f, -0.668323814868927f, 0.2509884536266327f, 0.5598640441894531f, 0.864422619342804f, 0.64923095703125f, 0.8521081805229187f, 0.44377222657203674f, 0.23381102085113525f, -0.9203548431396484f, 0.8050975799560547f, 0.12310810387134552f, 0.43640851974487305f, 0.0700916200876236f, 0.5961264967918396f, 0.6583603620529175f, 0.7161843776702881f, -0.2644091844558716f, 0.6761126518249512f, 0.7385233640670776f, 0.0768115296959877f, 0.9691441059112549f, 0.3516393303871155f, 0.8615303039550781f, 0.864913821220398f, -0.8201194405555725f, 0.7011891603469849f, 0.10016994178295135f, 0.7037471532821655f, 0.6949594020843506f, 0.3695797026157379f, 0.6242754459381104f, 0.46427464485168457f, -0.587787389755249f, 0.9990074038505554f, 0.932110607624054f, 0.22033880650997162f, 0.8005419969558716f, 0.2120874673128128f, 0.3722267150878906f, 0.3969506621360779f, -0.37687328457832336f, 0.7831511497497559f, 0.6460131406784058f, 0.45549240708351135f, 0.36278098821640015f, 0.4357337951660156f, 0.4908127188682556f, 0.29748064279556274f, -0.9864791631698608f, 0.5022042989730835f, 0.458183616399765f, 0.18255457282066345f, 0.9839524030685425f, 0.7691742777824402f, 0.6712758541107178f, 0.03780341148376465f, -0.4035791754722595f, 0.06905360519886017f, 0.4823743999004364f, 0.5344927310943604f, 0.5701014995574951f, 0.002795039676129818f, 0.36970800161361694f, 0.732533872127533f, -0.8997992873191833f, 0.19869877398014069f, 0.9822761416435242f, 0.3639777600765228f, 0.19913999736309052f, 0.0745854601264f, 0.6719855666160583f, 0.551808774471283f, -0.06207812950015068f, 0.45313066244125366f, 0.4869347810745239f, 0.28743478655815125f, 0.5369775891304016f, 0.7787058353424072f, 0.8427631258964539f, 0.42971765995025635f, -0.6539419889450073f, 0.7801956534385681f, 0.44619283080101013f, 0.022647062316536903f, 0.47011440992355347f, 0.950774073600769f, 0.35346290469169617f, 0.959039032459259f, -0.17646877467632294f, 0.48085901141166687f, 0.07073989510536194f, 0.6566789746284485f, 0.6471821069717407f, 0.341950923204422f, 0.043988343328237534f, 0.802250325679779f, -0.04233984276652336f, 0.7129372358322144f, 0.7723221778869629f, 0.6101589202880859f, 0.7257767915725708f, 0.9755493402481079f, 0.8899168372154236f, 0.07783762365579605f, -0.6766654253005981f, 0.16853374242782593f, 0.2341274470090866f, 0.10599900782108307f, 0.8851604461669922f, 0.38784319162368774f, 0.7576138377189636f, 0.717671275138855f, -0.11523041874170303f, 0.972602367401123f, 0.22093762457370758f, 0.556819498538971f, 0.2504953145980835f, 0.7919850945472717f, 0.319614976644516f, 0.9590424299240112f, -0.1373860090970993f, 0.39504435658454895f, 0.07128208130598068f, 0.9273471832275391f, 0.5470618009567261f, 0.5043644309043884f, 0.937738835811615f, 0.8609659671783447f, -0.5345695614814758f, 0.2872750163078308f, 0.8521103262901306f, 0.764343798160553f, 0.47805243730545044f, 0.19100405275821686f, 0.9727306962013245f, 0.5236259698867798f, -0.2733485996723175f, 0.06391589343547821f, 0.8815306425094604f, 0.261038601398468f, 0.7892217636108398f, 0.1460680216550827f, 0.41093599796295166f, 0.7578021883964539f, -0.059340156614780426f, 0.5730094313621521f, 0.6489822864532471f, 0.6817975640296936f, 0.9338338971138f, 0.683379054069519f, 0.3668810725212097f, 0.377388596534729f, -0.47466719150543213f, 0.2252691090106964f, 0.2841656506061554f, 0.0817435085773468f, 0.16671620309352875f, 0.9078832268714905f, 0.8216068744659424f, 0.07410648465156555f, -0.016470374539494514f, 0.10984552651643753f, 0.6139592528343201f, 0.8617428541183472f, 0.859324038028717f, 0.19758352637290955f, 0.6357488632202148f, 0.9915022850036621f, -0.9386872053146362f, 0.6344822645187378f, 0.6415310502052307f, 0.9157065749168396f, 0.05109546706080437f, 0.7300078868865967f, 0.7509719729423523f, 0.7929390072822571f, -0.10796733945608139f, 0.8958497047424316f, 0.261611670255661f, 0.40592971444129944f, 0.6320244669914246f, 0.423672080039978f, 0.048959020525217056f, 0.38431936502456665f, -0.6976810693740845f, 0.3439382016658783f, 0.5227338075637817f, 0.12095381319522858f, 0.42177462577819824f, 0.2487444430589676f, 0.049534011632204056f, 0.09143513441085815f, -0.45842665433883667f, 0.2003227323293686f, 0.9713295102119446f, 0.1685362458229065f, 0.7934980988502502f, 0.6430714726448059f, 0.6651642322540283f, 0.007919831201434135f, -0.8962521553039551f, 0.6655483245849609f, 0.629794716835022f, 0.8912329077720642f, 0.9143483638763428f, 0.5503464341163635f, 0.29173514246940613f, 0.2483099400997162f, -0.47554075717926025f, 0.9476751089096069f, 0.940896213054657f, 0.8833431601524353f, 0.9345458745956421f, 0.1314116269350052f, 0.5438298583030701f, 0.9854875802993774f, -0.296745628118515f, 0.23630478978157043f, 0.45277777314186096f, 0.562343418598175f, 0.2577274441719055f, 0.3881419003009796f, 0.904939591884613f, 0.2553179860115051f, -0.2742343544960022f, 0.7655369639396667f, 0.8616006374359131f, 0.8969881534576416f, 0.43742573261260986f, 0.5795735120773315f, 0.8086353540420532f, 0.7746292352676392f, -0.22819223999977112f, 0.6081107258796692f, 0.3018743395805359f, 0.6815782785415649f, 0.21558493375778198f, 0.43023350834846497f, 0.8313943147659302f, 0.8649519681930542f, -0.80108243227005f, 0.025904303416609764f, 0.7156311869621277f, 0.04977964609861374f, 0.4497387409210205f, 0.9668256044387817f, 0.13522809743881226f, 0.6230608224868774f, -0.473552405834198f, 0.014564136043190956f, 0.2917288839817047f, 0.8265286087989807f, 0.3387892246246338f, 0.8865255117416382f, 0.4675596356391907f, 0.1398005336523056f, -0.4302213490009308f, 0.2167520374059677f, 0.10270655155181885f, 0.3724081814289093f, 0.01779848337173462f, 0.8992986083030701f, 0.20081882178783417f, 0.7082951664924622f, -0.9578156471252441f, 0.8292114734649658f, 0.14453528821468353f, 0.8524420857429504f, 0.11437153071165085f, 0.6209902167320251f, 0.20385856926441193f, 0.5757230520248413f, -0.2959881126880646f, 0.2169235348701477f, 0.7060796618461609f, 0.3839469850063324f, 0.519993782043457f, 0.4705554246902466f, 0.20948776602745056f, 0.42345502972602844f, -0.9436777830123901f, 0.40182194113731384f, 0.6938789486885071f, 0.6443411707878113f, 0.6797475814819336f, 0.5907683372497559f, 0.6512773633003235f, 0.2224283069372177f, -0.885246753692627f, 0.21644440293312073f, 0.449653685092926f, 0.3770533502101898f, 0.7346650958061218f, 0.33062228560447693f, 0.9166184067726135f, 0.3380100727081299f, -0.7891934514045715f, 0.9438181519508362f, 0.8316969871520996f, 0.6313284635543823f, 0.11420761048793793f, 0.4500621557235718f, 0.07425041496753693f, 0.11449921131134033f, -0.7080784440040588f, 0.027876775711774826f, 0.6743224263191223f, 0.5929796099662781f, 0.3852424919605255f, 0.26271864771842957f, 0.18910177052021027f, 0.40242621302604675f, -0.5370210409164429f, 0.08933506160974503f, 0.2106688916683197f, 0.5228551030158997f, 0.1901853382587433f, 0.4335349500179291f, 0.534393846988678f, 0.558064877986908f, -0.31281179189682007f, 0.7737579345703125f, 0.7967098951339722f, 0.7916972041130066f, 0.5073855519294739f, 0.8013333082199097f, 0.32083258032798767f, 0.6307439804077148f, -0.9025900959968567f, 0.673750638961792f, 0.42550086975097656f, 0.3165123462677002f, 0.40310296416282654f, 0.911356508731842f, 0.2102242261171341f, 0.9676262140274048f, -0.2056160718202591f, 0.8439857363700867f, 0.44888290762901306f, 0.13172709941864014f, 0.2357032150030136f, 0.21107421815395355f, 0.059168532490730286f, 0.3782702088356018f, -0.8687679767608643f, 0.9234156608581543f, 0.5733844637870789f, 0.20290502905845642f, 0.24106387794017792f, 0.8615338206291199f, 0.7958470582962036f, 0.6313828229904175f, -0.42465463280677795f, 0.7964861989021301f, 0.21290750801563263f, 0.5191752314567566f, 0.2530255913734436f, 0.11879558116197586f, 0.25661394000053406f, 0.6743849515914917f, -0.7503969669342041f, 0.7566319108009338f, 0.23875868320465088f, 0.6668164730072021f, 0.708486020565033f, 0.355316162109375f, 0.6546711325645447f, 0.211620032787323f, -0.20146146416664124f, 0.7588347792625427f, 0.5720488429069519f, 0.5407357215881348f, 0.4373607039451599f, 0.7948766946792603f, 0.0056547909043729305f, 0.4924445152282715f, -0.23144152760505676f, 0.7103550434112549f, 0.8261276483535767f, 0.6242372989654541f, 0.5091700553894043f, 0.0037001213058829308f, 0.9267654418945312f, 0.8515664935112f, -0.9522439241409302f, 0.8391945362091064f, 0.9271841645240784f, 0.23406800627708435f, 0.045585859566926956f, 0.43475791811943054f, 0.8167415857315063f, 0.24166445434093475f, -0.2640747129917145f, 0.15177837014198303f, 0.19665805995464325f, 0.409382164478302f, 0.7564517259597778f, 0.4927217662334442f, 0.1945665031671524f, 0.8488059639930725f, -0.4694051444530487f, 0.45683833956718445f, 0.358881413936615f, 0.17192761600017548f, 0.8884893655776978f, 0.18958647549152374f, 0.03507309406995773f, 0.45744580030441284f, -0.40306606888771057f, 0.36260852217674255f, 0.44432124495506287f, 0.363284707069397f, 0.3858494162559509f, 0.21642999351024628f, 0.9769437313079834f, 0.34269440174102783f, -0.29677093029022217f, 0.0736883282661438f, 0.39014312624931335f, 0.5362541079521179f, 0.4118554890155792f, 0.8467485904693604f, 0.9219390749931335f, 0.833507776260376f, -0.07194607704877853f, 0.17670348286628723f, 0.8933617472648621f, 0.4909079968929291f, 0.33026212453842163f, 0.707797110080719f, 0.9560204744338989f, 0.31656062602996826f, -0.40110069513320923f, 0.8497166633605957f, 0.7877151370048523f, 0.8019854426383972f, 0.23527668416500092f, 0.26168522238731384f, 0.7472476363182068f, 0.24450337886810303f, -0.3317723572254181f, 0.7411072254180908f, 0.3684198558330536f, 0.5679813027381897f, 0.017185036092996597f, 0.27803128957748413f, 0.28154540061950684f, 0.2092972695827484f, -0.23818819224834442f, 0.7264262437820435f, 0.8670294284820557f, 0.35353443026542664f, 0.142163947224617f, 0.4065586030483246f, 0.8585960268974304f, 0.6521030068397522f, -0.5668304562568665f, 0.3979693651199341f, 0.9908129572868347f, 0.9470103979110718f, 0.8061237335205078f, 0.16447514295578003f, 0.6730362176895142f, 0.5396556258201599f, -0.3640780746936798f, 0.7644920349121094f, 0.6940240859985352f, 0.3050464689731598f, 0.09718422591686249f, 0.6245433688163757f, 0.3024922311306f, 0.5825129747390747f, -0.7330371141433716f, 0.39582911133766174f, 0.8433105945587158f, 0.2741164267063141f, 0.43456658720970154f, 0.8757627606391907f, 0.10976860672235489f, 0.8747717142105103f, -0.0647740438580513f, 0.1112329289317131f, 0.7740201950073242f, 0.5562590956687927f, 0.9756235480308533f, 0.7774123549461365f, 0.8113250136375427f, 0.1691053807735443f, -0.61800616979599f, 0.5195786356925964f, 0.14912791550159454f, 0.9175516366958618f, 0.5801228880882263f, 0.7070158123970032f, 0.8864395618438721f, 0.6095439791679382f, -0.994306743144989f, 0.9732892513275146f, 0.5486581921577454f, 0.28849348425865173f, 0.45767003297805786f, 0.07480042427778244f, 0.22946041822433472f, 0.5304427146911621f, -0.644124448299408f, 0.4204535484313965f, 0.3707827925682068f, 0.30884286761283875f, 0.9524882435798645f, 0.7009897828102112f, 0.9319521188735962f, 0.12486722320318222f, -0.6799519062042236f, 0.9275238513946533f, 0.10676932334899902f, 0.18945784866809845f, 0.6571061611175537f, 0.29697927832603455f, 0.3203149437904358f, 0.10203506052494049f, -0.9904554486274719f, 0.09614608436822891f, 0.7559593319892883f, 0.49443697929382324f, 0.21448281407356262f, 0.504718005657196f, 0.9347584247589111f, 0.6927289366722107f, -0.3172609806060791f, 0.5124843120574951f, 0.27338483929634094f, 0.26003769040107727f, 0.9731898307800293f, 0.8164818286895752f, 0.1454087495803833f, 0.8696098327636719f, -0.745995283126831f, 0.9996111392974854f, 0.3951227068901062f, 0.2586195468902588f, 0.6126495599746704f, 0.6458156704902649f, 0.8579901456832886f, 0.7706219553947449f, -0.8201382756233215f, 0.43494299054145813f, 0.6367515921592712f, 0.6634368300437927f, 0.24273741245269775f, 0.4105190932750702f, 0.8586304783821106f, 0.10334539413452148f, -0.4801006019115448f, 0.6270561218261719f, 0.7532644271850586f, 0.6810053586959839f, 0.3099173903465271f, 0.9624936580657959f, 0.06371531635522842f, 0.10250752419233322f, -0.8727610111236572f, 0.8711733818054199f, 0.7626160383224487f, 0.8453850150108337f, 0.06238942593336105f, 0.18293137848377228f, 0.931363582611084f, 0.12623313069343567f, -0.692129373550415f, 0.2064296454191208f, 0.4022400677204132f, 0.3111339509487152f, 0.16522198915481567f, 0.9553125500679016f, 0.5214489698410034f, 0.6597180962562561f, -0.7251784801483154f, 0.3080044984817505f, 0.31029611825942993f, 0.2311733514070511f, 0.8871330618858337f, 0.933870255947113f, 0.8942176103591919f, 0.2060198336839676f, -0.5559906959533691f, 0.9469042420387268f, 0.24264883995056152f, 0.8136751651763916f, 0.1507953703403473f, 0.8965033292770386f, 0.09230393916368484f, 0.8279618620872498f, -0.6549814939498901f, 0.6941879391670227f, 0.5809257626533508f, 0.3518980145454407f, 0.9233973622322083f, 0.009194904938340187f, 0.5895130038261414f, 0.5167726874351501f, -0.6715549230575562f, 0.3558105528354645f, 0.9062415957450867f, 0.019659454002976418f, 0.015171688050031662f, 0.0844106674194336f, 0.5525129437446594f, 0.372904509305954f, -0.01641629822552204f, 0.24462145566940308f, 0.3086024224758148f, 0.9697414636611938f, 0.7774602174758911f, 0.8223057985305786f, 0.6524856686592102f, 0.5930004715919495f, -0.7709630727767944f, 0.24234332144260406f, 0.3643973469734192f, 0.6883869767189026f, 0.8157514333724976f, 0.10903248190879822f, 0.7205037474632263f, 0.6046950221061707f, -0.9001808762550354f, 0.5030016899108887f, 0.48876968026161194f, 0.7157906293869019f, 0.8293609023094177f, 0.924971878528595f, 0.7385571002960205f, 0.4830736517906189f, -0.533187210559845f, 0.8207802772521973f, 0.9800187349319458f, 0.526749849319458f, 0.28805336356163025f, 0.9790270924568176f, 0.5193004608154297f, 0.5837844610214233f, -0.389374703168869f, 0.4516046345233917f, 0.5047821402549744f, 0.8923551440238953f, 0.054200250655412674f, 0.751899242401123f, 0.9738599061965942f, 0.07879529893398285f, -0.8330599665641785f, 0.5675544142723083f, 0.04826875030994415f, 0.6931273937225342f, 0.8694228529930115f, 0.19401445984840393f, 0.5882992744445801f, 0.390125036239624f, -0.3203933835029602f, 0.5150889158248901f, 0.01883171685039997f, 0.04040174558758736f, 0.8450819253921509f, 0.8820137977600098f, 0.9289305210113525f, 0.014973503537476063f, -0.4736469089984894f, 0.2958020269870758f, 0.8659952878952026f, 0.3513164520263672f, 0.6805540919303894f, 0.8087159991264343f, 0.6962084174156189f, 0.026316458359360695f, -0.3410683870315552f, 0.7736333608627319f, 0.3837701082229614f, 0.36468979716300964f, 0.377444863319397f, 0.5813465118408203f, 0.8334623575210571f, 0.6664111614227295f, -0.5036194920539856f, 0.27175402641296387f, 0.05914819985628128f, 0.4083687961101532f, 0.7839493155479431f, 0.7662079334259033f, 0.8354814052581787f, 0.9060285687446594f, -0.0888555645942688f, 0.8888338208198547f, 0.8094357252120972f, 0.48300907015800476f, 0.44886404275894165f, 0.8283036351203918f, 0.2886839807033539f, 0.04227234050631523f, -0.04732397943735123f, 0.3157482445240021f, 0.11242332309484482f, 0.8150988817214966f, 0.6353703737258911f, 0.9325249791145325f, 0.56136155128479f, 0.1847657859325409f, -0.039601609110832214f, 0.9551551938056946f, 0.6380464434623718f, 0.6730518937110901f, 0.6615184545516968f, 0.953544020652771f, 0.03330446034669876f, 0.12671880424022675f, -0.2586456835269928f, 0.31586068868637085f, 0.4050179123878479f, 0.8971955180168152f, 0.9494673609733582f, 0.8823329210281372f, 0.022304760292172432f, 0.08666924387216568f, -0.524452805519104f, 0.046784449368715286f, 0.09237763285636902f, 0.08856141567230225f, 0.9569364190101624f, 0.7261368036270142f, 0.043521247804164886f, 0.23872007429599762f, -0.8090552091598511f, 0.689422607421875f, 0.16481271386146545f, 0.7908642292022705f, 0.9266812205314636f, 0.6924310326576233f, 0.39163658022880554f, 0.4215131998062134f, -0.18739725649356842f, 0.5462121367454529f, 0.3282211422920227f, 0.02299114689230919f, 0.8904401063919067f, 0.23001036047935486f, 0.5673338770866394f, 0.9426717758178711f, -0.007027411833405495f, 0.6398887038230896f, 0.7413935661315918f, 0.12651538848876953f, 0.9198367595672607f, 0.052194271236658096f, 0.86134272813797f, 0.9321885704994202f, -0.494291216135025f, 0.48342692852020264f, 0.5992767214775085f, 0.4412491023540497f, 0.8309970498085022f, 0.3484353721141815f, 0.3077968955039978f, 0.2631545662879944f, -0.9634693264961243f, 0.2880363464355469f, 0.39275676012039185f, 0.754668653011322f, 0.9258909821510315f, 0.32919299602508545f, 0.9425109624862671f, 0.10759278386831284f, -0.4269903600215912f, 0.1753050833940506f, 0.026127314195036888f, 0.21388326585292816f, 0.467974454164505f, 0.02186032570898533f, 0.3118401765823364f, 0.0615234337747097f, -0.16676120460033417f, 0.8444554805755615f, 0.02629641816020012f, 0.33686360716819763f, 0.3204424977302551f, 0.8993013501167297f, 0.15559908747673035f, 0.3512670695781708f, -0.684712827205658f, 0.19166259467601776f, 0.19686712324619293f, 0.5003060698509216f, 0.25367480516433716f, 0.30688491463661194f, 0.17800888419151306f, 0.31943178176879883f, -0.9773035645484924f, 0.4616990387439728f, 0.35979437828063965f, 0.3930831551551819f, 0.7088274359703064f, 0.7534606456756592f, 0.7380592226982117f, 0.46868276596069336f, -0.444095253944397f, 0.11556065827608109f, 0.2519468665122986f, 0.2869359850883484f, 0.00442848727107048f, 0.4892222285270691f, 0.08402656763792038f, 0.9699243903160095f, -0.32360637187957764f, 0.6353713274002075f, 0.7778244018554688f, 0.9855338931083679f, 0.4412904977798462f, 0.893733561038971f, 0.44472014904022217f, 0.5362493395805359f, -0.5158112645149231f, 0.33244645595550537f, 0.12762843072414398f, 0.5311443209648132f, 0.6837429404258728f, 0.015633562579751015f, 0.5409162640571594f, 0.011603380553424358f, -0.3632024824619293f, 0.12350483983755112f, 0.0381486602127552f, 0.5721734762191772f, 0.5076586008071899f, 0.12293870002031326f, 0.6341758370399475f, 0.10380803793668747f, -0.1963498741388321f, 0.6188239455223083f, 0.3730088770389557f, 0.8349074125289917f, 0.2766418755054474f, 0.16908825933933258f, 0.38118237257003784f, 0.04124295711517334f, -0.8133368492126465f, 0.22798074781894684f, 0.5032622218132019f, 0.8591880202293396f, 0.6855159997940063f, 0.5846792459487915f, 0.8554911613464355f, 0.9368709921836853f, -0.35795822739601135f, 0.8628109693527222f, 0.6264200210571289f, 0.40308356285095215f, 0.4781380891799927f, 0.08016745001077652f, 0.8334801197052002f, 0.5110160112380981f, -0.44757789373397827f, 0.7466632723808289f, 0.4661709666252136f, 0.5104187726974487f, 0.21975895762443542f, 0.3775799572467804f, 0.27157217264175415f, 0.6883200407028198f, -0.2288740873336792f, 0.8370267152786255f, 0.6636441349983215f, 0.45123013854026794f, 0.7155916094779968f, 0.9218657612800598f, 0.6105198860168457f, 0.8405524492263794f, -0.8059226274490356f, 0.6427260041236877f, 0.48268917202949524f, 0.6152743101119995f, 0.4784468412399292f, 0.2984730303287506f, 0.49476656317710876f, 0.12010471522808075f, -0.15524758398532867f, 0.1850532442331314f, 0.8215470910072327f, 0.9758322834968567f, 0.152985617518425f, 0.6449772715568542f, 0.895112931728363f, 0.49207794666290283f, -0.8450387120246887f, 0.17143578827381134f, 0.043262675404548645f, 0.7762381434440613f, 0.010832966305315495f, 0.8630898594856262f, 0.3114236295223236f, 0.7611533999443054f, -0.5097024440765381f, 0.512317955493927f, 0.606094241142273f, 0.9848892688751221f, 0.7499810457229614f, 0.9023502469062805f, 0.07344614714384079f, 0.13178813457489014f, -0.9359869956970215f, 0.7738385796546936f, 0.28580722212791443f, 0.283035010099411f, 0.7454330921173096f, 0.13692297041416168f, 0.973791241645813f, 0.6471089124679565f, -0.4636807441711426f, 0.635063648223877f, 0.26916325092315674f, 0.5977080464363098f, 0.40559831261634827f, 0.8106534481048584f, 0.4880765378475189f, 0.14508365094661713f, -0.8245252966880798f, 0.7719858288764954f, 0.11064572632312775f, 0.876197874546051f, 0.059555888175964355f, 0.9716214537620544f, 0.5570669174194336f, 0.6692269444465637f, -0.2639993727207184f, 0.3762960731983185f, 0.9350243806838989f, 0.8484987020492554f, 0.9019511938095093f, 0.800804078578949f, 0.6419447064399719f, 0.9093068242073059f, -0.8737375140190125f, 0.2080996036529541f, 0.3416890501976013f, 0.5694039463996887f, 0.5972733497619629f, 0.3635706603527069f, 0.35292425751686096f, 0.1985456645488739f, -0.3112685978412628f, 0.6610969305038452f, 0.41377556324005127f, 0.6519953012466431f, 0.07815106958150864f, 0.7148643136024475f, 0.5627297759056091f, 0.18598219752311707f, -0.5858990550041199f, 0.8269054293632507f, 0.9919370412826538f, 0.696322500705719f, 0.3118491470813751f, 0.0021353259216994047f, 0.6054897904396057f, 0.9670655131340027f, -0.6990734934806824f, 0.21771380305290222f, 0.22680364549160004f, 0.8259546756744385f, 0.5151885151863098f, 0.14562919735908508f, 0.09088316559791565f, 0.44437897205352783f, -0.32975417375564575f, 0.36533087491989136f, 0.7809739112854004f, 0.44537243247032166f, 0.8698124289512634f, 0.7800475358963013f, 0.7727870941162109f, 0.6565377712249756f, -0.8575450778007507f, 0.2589978873729706f, 0.5089700222015381f, 0.8921910524368286f, 0.7414709329605103f, 0.8526254892349243f, 0.3038969337940216f, 0.903849720954895f, -0.34238752722740173f, 0.31269991397857666f, 0.8940096497535706f, 0.02348097413778305f, 0.6514947414398193f, 0.5689778327941895f, 0.6964431405067444f, 0.7507457733154297f, -0.7125465273857117f, 0.1491505652666092f, 0.3000146746635437f, 0.8912087678909302f, 0.402913361787796f, 0.4538082182407379f, 0.2632506787776947f, 0.8979530930519104f, -0.6558071970939636f, 0.353982537984848f, 0.9720497727394104f, 0.1485484391450882f, 0.5267608761787415f, 0.5093576908111572f, 0.7235599756240845f, 0.41806069016456604f, -0.7697361707687378f, 0.02811494469642639f, 0.47714295983314514f, 0.38379040360450745f, 0.11620178818702698f, 0.5316370725631714f, 0.17780038714408875f, 0.6168404221534729f, -0.0028416814748197794f, 0.8721422553062439f, 0.6424496173858643f, 0.5991102457046509f, 0.7126385569572449f, 0.5814030170440674f, 0.6695123910903931f, 0.4722326099872589f, -0.2501074969768524f, 0.3065382242202759f, 0.21444904804229736f, 0.6343613266944885f, 0.7066254615783691f, 0.6773326396942139f, 0.29134103655815125f, 0.17650069296360016f, -0.8849918842315674f, 0.12537582218647003f, 0.3271317481994629f, 0.26973703503608704f, 0.698867917060852f, 0.47434133291244507f, 0.6242581009864807f, 0.6299951076507568f, -0.7891302108764648f, 0.677315354347229f, 0.48282521963119507f, 0.4638901650905609f, 0.4643646776676178f, 0.1405869722366333f, 0.7121812105178833f, 0.3342694044113159f, -0.4634302258491516f, 0.441054105758667f, 0.24007394909858704f, 0.6836484670639038f, 0.9958284497261047f, 0.33813419938087463f, 0.2737356126308441f, 0.4055398404598236f, -0.9670783281326294f, 0.0761931836605072f, 0.3301424980163574f, 0.7337782382965088f, 0.8947241306304932f, 0.595270574092865f, 0.1768801361322403f, 0.6157928109169006f, -0.49247077107429504f, 0.024797217920422554f, 0.0558152012526989f, 0.46747514605522156f, 0.8433341979980469f, 0.8711885809898376f, 0.9472224712371826f, 0.14876314997673035f, -0.4765990674495697f, 0.09445542097091675f, 0.11239154636859894f, 0.894499659538269f, 0.06131958216428757f, 0.5342497229576111f, 0.07726632058620453f, 0.4227023124694824f, -0.9854303002357483f, 0.39747485518455505f, 0.2426832616329193f, 0.6045747399330139f, 0.1777685433626175f, 0.9997921586036682f, 0.44672316312789917f, 0.41913285851478577f, -0.876876950263977f, 0.5575183629989624f, 0.16769680380821228f, 0.2267216593027115f, 0.838180661201477f, 0.7455008029937744f, 0.4765687882900238f, 0.7732824087142944f, -0.5824287533760071f, 0.6972090005874634f, 0.28677698969841003f, 0.3838687539100647f, 0.41170182824134827f, 0.3420121371746063f, 0.7691941261291504f, 0.008055374957621098f, -0.4529761075973511f, 0.9712681174278259f, 0.2808668911457062f, 0.8727770447731018f, 0.01370217464864254f, 0.40627482533454895f, 0.7614097595214844f, 0.8612634539604187f, -0.84740149974823f, 0.27630653977394104f, 0.12484759837388992f, 0.6005390882492065f, 0.1984296441078186f, 0.42372363805770874f, 0.9078010320663452f, 0.8739092946052551f, -0.26883751153945923f, 0.6464000344276428f, 0.3212457597255707f, 0.5276156663894653f, 0.1020810455083847f, 0.8194741606712341f, 0.17870455980300903f, 0.43703073263168335f, -0.4340631365776062f, 0.7909150719642639f, 0.015279077924787998f, 0.7779556512832642f, 0.7753434181213379f, 0.8989629745483398f, 0.7484355568885803f, 0.1759990006685257f, -0.19008946418762207f, 0.1194164827466011f, 0.34938788414001465f, 0.872988224029541f, 0.5380540490150452f, 0.14792411029338837f, 0.21633626520633698f, 0.8376331329345703f, -0.20597417652606964f, 0.6583303213119507f, 0.8077905774116516f, 0.14204041659832f, 0.19620630145072937f, 0.4054994285106659f, 0.8762431144714355f, 0.20472820103168488f, -0.571017324924469f, 0.43248608708381653f, 0.12304431200027466f, 0.1774805784225464f, 0.9867499470710754f, 0.14538849890232086f, 0.9512861371040344f, 0.1521678864955902f, -0.16180633008480072f, 0.5579320788383484f, 0.6618553996086121f, 0.2771189510822296f, 0.823382556438446f, 0.19385987520217896f, 0.26248568296432495f, 0.09097370505332947f, -0.09530330449342728f, 0.48109668493270874f, 0.21713528037071228f, 0.4884636700153351f, 0.029886500909924507f, 0.22968760132789612f, 0.9771642088890076f, 0.7313836216926575f, -0.3428197205066681f, 0.08979527652263641f, 0.3952036499977112f, 0.01522860024124384f, 0.11024109274148941f, 0.8782704472541809f, 0.8326648473739624f, 0.29398438334465027f, -0.9600158333778381f, 0.5923871397972107f, 0.9128473997116089f, 0.762816309928894f, 0.8570948243141174f, 0.6674134135246277f, 0.9605916738510132f, 0.341316282749176f, -0.8660340905189514f, 0.05820464715361595f, 0.5151492357254028f, 0.25354504585266113f, 0.35862112045288086f, 0.4976247549057007f, 0.9955111145973206f, 0.09623619168996811f, -0.17178036272525787f, 0.5833774209022522f, 0.47640150785446167f, 0.5888926982879639f, 0.18900622427463531f, 0.9949857592582703f, 0.7957537770271301f, 0.5884354710578918f, -0.5848965644836426f, 0.9096075296401978f, 0.15743742883205414f, 0.7576790452003479f, 0.3109329044818878f, 0.6704959869384766f, 0.3711370527744293f, 0.6574203372001648f, -0.7677435874938965f, 0.8892070055007935f, 0.2464229017496109f, 0.3204133212566376f, 0.9025220274925232f, 0.7617312669754028f, 0.15595291554927826f, 0.9145935773849487f, -0.16388839483261108f, 0.507226288318634f, 0.7778400182723999f, 0.11199192702770233f, 0.1622602790594101f, 0.8602219820022583f, 0.03406958654522896f, 0.8269080519676208f, -0.3129514157772064f, 0.22437743842601776f, 0.9112619161605835f, 0.15721814334392548f, 0.6281946301460266f, 0.9685693383216858f, 0.1785425990819931f, 0.4812193214893341f, -0.9857288599014282f, 0.9454476833343506f, 0.7721094489097595f, 0.2550323009490967f, 0.06484745442867279f, 0.45302021503448486f, 0.3316231966018677f, 0.5716488361358643f, -0.36505332589149475f, 0.13488054275512695f, 0.22704648971557617f, 0.16871005296707153f, 0.3198990821838379f, 0.8874760270118713f, 0.16326762735843658f, 0.2006612867116928f, -0.32112985849380493f, 0.49041351675987244f, 0.683646023273468f, 0.6821746230125427f, 0.6999041438102722f, 0.743340015411377f, 0.21337169408798218f, 0.7792158722877502f, -0.9529654383659363f, 0.6351174116134644f, 0.22786076366901398f, 0.9187535047531128f, 0.6707831621170044f, 0.8210642337799072f, 0.5818725824356079f, 0.6535683274269104f, -0.3072464168071747f, 0.7221120595932007f, 0.2506568133831024f, 0.9589303731918335f, 0.052149973809719086f, 0.3296607732772827f, 0.883632481098175f, 0.30164408683776855f, -0.08237363398075104f, 0.7855849266052246f, 0.45882242918014526f, 0.039213620126247406f, 0.48246559500694275f, 0.6163098216056824f, 0.34344571828842163f, 0.11802785843610764f, -0.9559881091117859f, 0.1257394701242447f, 0.03775947540998459f, 0.07726376503705978f, 0.8486904501914978f, 0.008229833096265793f, 0.8634248375892639f, 0.6487492322921753f, -0.6649401187896729f, 0.9341372847557068f, 0.7451905608177185f, 0.5231621265411377f, 0.20947358012199402f, 0.7719269394874573f, 0.210763618350029f, 0.914899468421936f, -0.2317173182964325f, 0.8707761764526367f, 0.5133278965950012f, 0.5927375555038452f, 0.36203625798225403f, 0.2678263187408447f, 0.7186779975891113f, 0.8894500136375427f, -0.7448763251304626f, 0.5630152225494385f, 0.4682900309562683f, 0.910763680934906f, 0.7955174446105957f, 0.44630667567253113f, 0.4186893403530121f, 0.2270500510931015f, -0.40391257405281067f, 0.39324644207954407f, 0.30836716294288635f, 0.05712191015481949f, 0.26243138313293457f, 0.2429870367050171f, 0.24060243368148804f, 0.8398052453994751f, -0.4348810017108917f, 0.6015021800994873f, 0.16941341757774353f, 0.6366556286811829f, 0.47563281655311584f, 0.9076570272445679f, 0.7771797180175781f, 0.5478881001472473f, -0.6257125735282898f, 0.7029789090156555f, 0.46996694803237915f, 0.24726934731006622f, 0.8421853184700012f, 0.9010248184204102f, 0.6572127342224121f, 0.09037493914365768f, -0.6716561317443848f, 0.1550692468881607f, 0.343142569065094f, 0.1597922295331955f, 0.1510336548089981f, 0.7532699704170227f, 0.8070440888404846f, 0.23521241545677185f, -0.7624782919883728f, 0.4135829508304596f, 0.8608501553535461f, 0.15805791318416595f, 0.6586843729019165f, 0.9386387467384338f, 0.6275258660316467f, 0.40457963943481445f, -0.3225772976875305f, 0.3894023597240448f, 0.016372067853808403f, 0.9533519148826599f, 0.3415775001049042f, 0.8862135410308838f, 0.1352238953113556f, 0.13737523555755615f, -0.38364410400390625f, 0.02351313829421997f, 0.13009397685527802f, 0.3022285997867584f, 0.9825703501701355f, 0.18333826959133148f, 0.7999200820922852f, 0.4440001845359802f, -0.24120354652404785f, 0.6462265253067017f, 0.9412413835525513f, 0.23956790566444397f, 0.3190760612487793f, 0.4407746493816376f, 0.16193366050720215f, 0.20314376056194305f, -0.4848494827747345f, 0.05472628027200699f, 0.9342249631881714f, 0.016663776710629463f, 0.23166431486606598f, 0.45340248942375183f, 0.8177987933158875f, 0.5868021249771118f, -0.2458696812391281f, 0.7564008235931396f, 0.5033793449401855f, 0.7863461971282959f, 0.816318154335022f, 0.7927945852279663f, 0.38137415051460266f, 0.34212079644203186f, -0.7187096476554871f, 0.7939257621765137f, 0.4040096700191498f, 0.2707328200340271f, 0.2975538969039917f, 0.5212052464485168f, 0.08541768044233322f, 0.8645995259284973f, -0.9411545991897583f, 0.9250122308731079f, 0.8687351942062378f, 0.9144859910011292f, 0.8525909185409546f, 0.2280828058719635f, 0.9958666563034058f, 0.19541046023368835f, -0.2465771585702896f, 0.997704803943634f, 0.18452084064483643f, 0.675279974937439f, 0.027943124994635582f, 0.8435496091842651f, 0.5456218123435974f, 0.30856743454933167f, -0.842222273349762f, 0.4160909354686737f, 0.17078551650047302f, 0.7538081407546997f, 0.8092955946922302f, 0.7522768974304199f, 0.45318928360939026f, 0.4737348258495331f, -0.0796622708439827f, 0.08214228600263596f, 0.6277581453323364f, 0.9581322073936462f, 0.030843188986182213f, 0.08755392581224442f, 0.9305947422981262f, 0.663183867931366f, -0.04472385719418526f, 0.10494132339954376f, 0.35385358333587646f, 0.185502827167511f, 0.2924422323703766f, 0.5872787833213806f, 0.270582377910614f, 0.5253468751907349f, -0.9776925444602966f, 0.8124510049819946f, 0.36754733324050903f, 0.3945724070072174f, 0.5904313325881958f, 0.07513022422790527f, 0.10351139307022095f, 0.25640586018562317f, -0.48395588994026184f, 0.6094140410423279f, 0.933689534664154f, 0.1481490433216095f, 0.7268136143684387f, 0.17722941935062408f, 0.3127038776874542f, 0.7544736266136169f, -0.04688645154237747f, 0.9836608171463013f, 0.9222339391708374f, 0.01654743030667305f, 0.29974037408828735f, 0.6609544157981873f, 0.1167256236076355f, 0.47648653388023376f, -0.3401852548122406f, 0.8443659543991089f, 0.11344482004642487f, 0.24881814420223236f, 0.9855681657791138f, 0.1865653395652771f, 0.12461047619581223f, 0.9105961918830872f, -0.26765450835227966f, 0.09866883605718613f, 0.963412344455719f, 0.20205701887607574f, 0.6164401173591614f, 0.46736571192741394f, 0.7866107821464539f, 0.9104943871498108f, -0.18533925712108612f, 0.6919140815734863f, 0.4811919927597046f, 0.4493477940559387f, 0.8978879451751709f, 0.9988517165184021f, 0.13042639195919037f, 0.8625016212463379f, -0.7359868288040161f, 0.11559244245290756f, 0.5169746279716492f, 0.6249846816062927f, 0.7543278336524963f, 0.028034664690494537f, 0.5184826850891113f, 0.6787132024765015f, -0.6925483345985413f, 0.8371835947036743f, 0.16620108485221863f, 0.997288167476654f, 0.3994983434677124f, 0.3461013436317444f, 0.3573247790336609f, 0.02355431392788887f, -0.23913639783859253f, 0.6146891117095947f, 0.6808330416679382f, 0.949176013469696f, 0.727698802947998f, 0.37852752208709717f, 0.7908371090888977f, 0.03897903114557266f, -0.6405796408653259f, 0.640907883644104f, 0.6664533019065857f, 0.14766521751880646f, 0.9031990766525269f, 0.5302349925041199f, 0.29579296708106995f, 0.11098453402519226f, -0.24198050796985626f, 0.2893810272216797f, 0.979772686958313f, 0.5150758028030396f, 0.8458326458930969f, 0.5770998001098633f, 0.6945254802703857f, 0.6344648599624634f, -0.4345102310180664f, 0.9673374891281128f, 0.1641848385334015f, 0.9216915965080261f, 0.9949144124984741f, 0.22361280024051666f, 0.023883521556854248f, 0.11782679706811905f, -0.47946301102638245f, 0.06124085187911987f, 0.9681490659713745f, 0.6641875505447388f, 0.1159682497382164f, 0.7753599882125854f, 0.5651656985282898f, 0.3626432716846466f, -0.5857465863227844f, 0.12972286343574524f, 0.7025216221809387f, 0.1702786684036255f, 0.04083564132452011f, 0.9058369994163513f, 0.6795292496681213f, 0.9197670221328735f, -0.9081413745880127f, 0.47133833169937134f, 0.21058285236358643f, 0.1390405148267746f, 0.8160561323165894f, 0.15884824097156525f, 0.5167125463485718f, 0.22846274077892303f, -0.27097979187965393f, 0.09091709554195404f, 0.6901914477348328f, 0.3936575651168823f, 0.5100973844528198f, 0.13926832377910614f, 0.9496234059333801f, 0.7130466103553772f, -0.37862974405288696f, 0.418671190738678f, 0.7950969934463501f, 0.3821651339530945f, 0.8140628933906555f, 0.26626837253570557f, 0.9972334504127502f, 0.43487226963043213f, -0.21859507262706757f, 0.06526626646518707f, 0.6311957836151123f, 0.044055212289094925f, 0.10057571530342102f, 0.2549797296524048f, 0.5193795561790466f, 0.6690198183059692f, -0.005833504721522331f, 0.8992670178413391f, 0.2175576090812683f, 0.3997724950313568f, 0.09597194939851761f, 0.6655437350273132f, 0.6835293173789978f, 0.2760695219039917f, -0.40006643533706665f, 0.7450650930404663f, 0.5902217030525208f, 0.3855305016040802f, 0.7905116081237793f, 0.04378052055835724f, 0.6355416774749756f, 0.0523134246468544f, -0.8998422026634216f, 0.09488414227962494f, 0.17660170793533325f, 0.22050218284130096f, 0.01889217458665371f, 0.34074848890304565f, 0.5057805180549622f, 0.30304816365242004f, -0.5218847393989563f, 0.3606114685535431f, 0.3865993916988373f, 0.2408483922481537f, 0.6629759073257446f, 0.9621040225028992f, 0.2550106346607208f, 0.10436037927865982f, -0.5941291451454163f, 0.5152314901351929f, 0.1179882287979126f, 0.20401060581207275f, 0.9827929139137268f, 0.08192011713981628f, 0.8961889743804932f, 0.07820627838373184f, -0.38752302527427673f, 0.4152550995349884f, 0.6169353723526001f, 0.9013767838478088f, 0.46947717666625977f, 0.05866463854908943f, 0.7217665314674377f, 0.4173435568809509f, -0.3330438435077667f, 0.49656084179878235f, 0.4791775047779083f, 0.2923811674118042f, 0.14966678619384766f, 0.7330684661865234f, 0.8647547364234924f, 0.38121670484542847f, -0.4714329242706299f, 0.6569143533706665f, 0.960026741027832f, 0.5890307426452637f, 0.2520894706249237f, 0.8019898533821106f, 0.18765297532081604f, 0.8098591566085815f, -0.4464205801486969f, 0.009105432778596878f, 0.8723030686378479f, 0.8260712623596191f, 0.12282045185565948f, 0.8733399510383606f, 0.8028754591941833f, 0.4031834900379181f, -0.4865309000015259f, 0.5977393984794617f, 0.5346341729164124f, 0.054676733911037445f, 0.17828688025474548f, 0.5286720395088196f, 0.16156400740146637f, 0.7243064641952515f, -0.13362620770931244f, 0.8255720734596252f, 0.5824184417724609f, 0.24548988044261932f, 0.6105424761772156f, 0.6257903575897217f, 0.4841214120388031f, 0.3688715696334839f, -0.11087122559547424f, 0.00037574503221549094f, 0.7813282012939453f, 0.6603894829750061f, 0.06932122260332108f, 0.5405842661857605f, 0.5221712589263916f, 0.34136053919792175f, -0.5217997431755066f, 0.44894859194755554f, 0.0630204975605011f, 0.8676700592041016f, 0.43050646781921387f, 0.3050735294818878f, 0.5738087296485901f, 0.0987951010465622f, -0.6826534271240234f, 0.5799707174301147f, 0.7261894345283508f, 0.7598523497581482f, 0.013592001050710678f, 0.25802022218704224f, 0.013794902712106705f, 0.5361649990081787f, -0.3838050961494446f, 0.8720365166664124f, 0.5562665462493896f, 0.05823845788836479f, 0.8523164391517639f, 0.7834991812705994f, 0.9626134634017944f, 0.0792112722992897f, -0.617660641670227f, 0.2258809506893158f, 0.756855845451355f, 0.030639097094535828f, 0.3946434259414673f, 0.15005706250667572f, 0.7944032549858093f, 0.8044276833534241f, -0.9834257364273071f, 0.7126683592796326f, 0.7358422875404358f, 0.5052173733711243f, 0.5338025689125061f, 0.19165177643299103f, 0.6682611107826233f, 0.8838972449302673f, -0.3028661906719208f, 0.9965956807136536f, 0.6190192699432373f, 0.8508062958717346f, 0.5701853036880493f, 0.812674343585968f, 0.14463409781455994f, 0.9340330362319946f, -0.9239820241928101f, 0.7860618829727173f, 0.6616600155830383f, 0.5459474325180054f, 0.344907283782959f, 0.34733524918556213f, 0.9553871154785156f, 0.7035515904426575f, -0.27192750573158264f, 0.856812059879303f, 0.8108180165290833f, 0.1466367095708847f, 0.8252931833267212f, 0.6633336544036865f, 0.17177695035934448f, 0.5977120995521545f, -0.33584585785865784f, 0.8429064154624939f, 0.4780152440071106f, 0.9910538196563721f, 0.710830569267273f, 0.5969858169555664f, 0.674477219581604f, 0.4091997742652893f, -0.65428227186203f, 0.35473257303237915f, 0.8038563132286072f, 0.7764438986778259f, 0.0767531767487526f, 0.9506561160087585f, 0.9772939682006836f, 0.7161555886268616f, -0.06003856286406517f, 0.2654556930065155f, 0.020031463354825974f, 0.2227911651134491f, 0.784339427947998f, 0.5683453679084778f, 0.6098812818527222f, 0.6443908214569092f, -0.8392379283905029f, 0.922890305519104f, 0.9158754348754883f, 0.8753456473350525f, 0.7693092823028564f, 0.4631848633289337f, 0.9283735156059265f, 0.40096333622932434f, -0.19214287400245667f, 0.9452899098396301f, 0.3711049556732178f, 0.14137934148311615f, 0.2941572368144989f, 0.12803053855895996f, 0.40424755215644836f, 0.08766347169876099f, -0.25417008996009827f, 0.6841766834259033f, 0.5603693127632141f, 0.9606766104698181f, 0.7850642800331116f, 0.8083050847053528f, 0.42458415031433105f, 0.17675656080245972f, -0.6136630773544312f, 0.5104683041572571f, 0.1719248741865158f, 0.01427887100726366f, 0.4359234869480133f, 0.3012741506099701f, 0.3895488977432251f, 0.19326341152191162f, -0.9277644753456116f, 0.5013232827186584f, 0.6806567311286926f, 0.8932347297668457f, 0.41999027132987976f, 0.4262784421443939f, 0.025096865370869637f, 0.20769798755645752f, -0.942634642124176f, 0.03714030608534813f, 0.9835420250892639f, 0.18314823508262634f, 0.9199904203414917f, 0.3962537348270416f, 0.4056301712989807f, 0.21377012133598328f, -0.35082218050956726f, 0.0877215564250946f, 0.8777085542678833f, 0.7574694752693176f, 0.7223902940750122f, 0.09337987750768661f, 0.5921595692634583f, 0.8584424257278442f, -0.6573155522346497f, 0.7712372541427612f, 0.23729664087295532f, 0.6602380871772766f, 0.3875819742679596f, 0.5338596701622009f, 0.17777277529239655f, 0.4483356773853302f, -0.7155423760414124f, 0.3851141929626465f, 0.3203034996986389f, 0.5479453802108765f, 0.23491868376731873f, 0.9561964869499207f, 0.23937170207500458f, 0.7763174176216125f, -0.9693330526351929f, 0.7079871296882629f, 0.08109777420759201f, 0.8317723274230957f, 0.2597599923610687f, 0.408739298582077f, 0.47825944423675537f, 0.42540088295936584f, -0.9240532517433167f, 0.37624022364616394f, 0.5513948798179626f, 0.687410831451416f, 0.5447274446487427f, 0.03491579741239548f, 0.17608052492141724f, 0.31898167729377747f, -0.044822435826063156f, 0.9035279154777527f, 0.5416943430900574f, 0.6049482226371765f, 0.017600037157535553f, 0.7033964395523071f, 0.8462026119232178f, 0.25864067673683167f, -0.16904331743717194f, 0.7370445132255554f, 0.022372087463736534f, 0.7204954624176025f, 0.47800755500793457f, 0.6822973489761353f, 0.9231510758399963f, 0.36081287264823914f, -0.8334733247756958f, 0.014998343773186207f, 0.006281435955315828f, 0.8255448341369629f, 0.21300780773162842f, 0.7811838388442993f, 0.5024568438529968f, 0.04865196347236633f, -0.4529929757118225f, 0.9744080305099487f, 0.2216951549053192f, 0.5258119106292725f, 0.7237051725387573f, 0.9519912600517273f, 0.011291529051959515f, 0.9731654524803162f, -0.6105307340621948f, 0.9235201478004456f, 0.9891803860664368f, 0.9877558946609497f, 0.9651535153388977f, 0.5655521750450134f, 0.3757078945636749f, 0.15173457562923431f, -0.15562595427036285f, 0.4349546730518341f, 0.4004567861557007f, 0.5816259980201721f, 0.13866162300109863f, 0.26819977164268494f, 0.38505813479423523f, 0.9631554484367371f, -0.3200841248035431f, 0.6789893507957458f, 0.6542686223983765f, 0.10502953827381134f, 0.4193173944950104f, 0.9581048488616943f, 0.23154401779174805f, 0.014680741354823112f, -0.06000849977135658f, 0.4189620912075043f, 0.6103081703186035f, 0.8494487404823303f, 0.9456722736358643f, 0.9676061272621155f, 0.6382483839988708f, 0.4047470688819885f, -0.6191638112068176f, 0.06407394260168076f, 0.8626271486282349f, 0.7766171097755432f, 0.5924504399299622f, 0.778675377368927f, 0.3004037141799927f, 0.37997299432754517f, -0.7693842649459839f, 0.2291460633277893f, 0.2495335340499878f, 0.34269410371780396f, 0.30020084977149963f, 0.27313584089279175f, 0.02255861461162567f, 0.07156629115343094f, -0.035703353583812714f, 0.6122387647628784f, 0.08044379949569702f, 0.013605928048491478f, 0.8514787554740906f, 0.9683285355567932f, 0.2818059027194977f, 0.47714030742645264f, -0.7241522669792175f, 0.8466861844062805f, 0.35340258479118347f, 0.6508187055587769f, 0.6597620248794556f, 0.8685571551322937f, 0.6780083775520325f, 0.2655569612979889f, -0.40939319133758545f, 0.34739017486572266f, 0.4481114447116852f, 0.7700107097625732f, 0.6790555715560913f, 0.1226966455578804f, 0.4752260744571686f, 0.22464898228645325f, -0.5328739285469055f, 0.30997487902641296f, 0.1978561133146286f, 0.7651469707489014f, 0.5458963513374329f, 0.4574863910675049f, 0.8942184448242188f, 0.7158977389335632f, -0.08890672028064728f, 0.6566501259803772f, 0.016226937994360924f, 0.08052363991737366f, 0.399943083524704f, 0.5985741019248962f, 0.7989616990089417f, 0.33162760734558105f, -0.8568928241729736f, 0.8470648527145386f, 0.9615238308906555f, 0.06687279790639877f, 0.5205214023590088f, 0.5414374470710754f, 0.6289202570915222f, 0.3887979984283447f, -0.9167708158493042f, 0.992545485496521f, 0.4961756765842438f, 0.36807534098625183f, 0.8483051061630249f, 0.9788938164710999f, 0.3276105523109436f, 0.25197505950927734f, -0.4365144968032837f, 0.5730103254318237f, 0.8608278036117554f, 0.5315098762512207f, 0.44345754384994507f, 0.3624642491340637f, 0.7963812351226807f, 0.3537352979183197f, -0.9049098491668701f, 0.34576892852783203f, 0.5239514112472534f, 0.03006592020392418f, 0.002020456362515688f, 0.2677692174911499f, 0.4011034369468689f, 0.49212831258773804f, -0.27223846316337585f, 0.4264707565307617f, 0.41163167357444763f, 0.12087008357048035f, 0.5017157793045044f, 0.31489571928977966f, 0.5094754099845886f, 0.7655280828475952f, -0.6427309513092041f, 0.4422833025455475f, 0.23380379378795624f, 0.26780787110328674f, 0.2535342872142792f, 0.5196977853775024f, 0.12555567920207977f, 0.7023228406906128f, -0.6513808369636536f, 0.05560288950800896f, 0.452675998210907f, 0.28775501251220703f, 0.45194387435913086f, 0.20646129548549652f, 0.3738493323326111f, 0.12898656725883484f, -0.8748905658721924f, 0.20740476250648499f, 0.4870305359363556f, 0.00967243779450655f, 0.03459087386727333f, 0.3471221327781677f, 0.1306210607290268f, 0.7193246483802795f, -0.28305086493492126f, 0.3618927299976349f, 0.702593982219696f, 0.2947550117969513f, 0.016334088519215584f, 0.6952775716781616f, 0.838331937789917f, 0.5129631757736206f, -0.7427069544792175f, 0.9013065099716187f, 0.9946025609970093f, 0.9542257785797119f, 0.6473783850669861f, 0.68980473279953f, 0.5014914274215698f, 0.5715034604072571f, -0.9091396331787109f, 0.8439159393310547f, 0.9869949221611023f, 0.9220036268234253f, 0.21150164306163788f, 0.7041181921958923f, 0.12045299261808395f, 0.404587984085083f, -0.45977136492729187f, 0.528810977935791f, 0.7158005237579346f, 0.0212521031498909f, 0.7465468645095825f, 0.605613112449646f, 0.5757834315299988f, 0.6318722367286682f, -0.5170577168464661f, 0.19614478945732117f, 0.6970398426055908f, 0.6670947670936584f, 0.5492041707038879f, 0.4227645695209503f, 0.7919453382492065f, 0.4034317433834076f, -0.5273734331130981f, 0.26267892122268677f, 0.5494799017906189f, 0.5747438669204712f, 0.16065938770771027f, 0.6429186463356018f, 0.8165642619132996f, 0.8533572554588318f, -0.4256489872932434f, 0.9116482138633728f, 0.3176973760128021f, 0.3814033269882202f, 0.689426839351654f, 0.11291399598121643f, 0.09587781876325607f, 0.426434725522995f, -0.3525044620037079f, 0.235499307513237f, 0.021543582901358604f, 0.6125870943069458f, 0.19337378442287445f, 0.8834088444709778f, 0.364098459482193f, 0.6109872460365295f, -0.398185133934021f, 0.5236717462539673f, 0.1665436178445816f, 0.03788694739341736f, 0.5838470458984375f, 0.38190189003944397f, 0.4636659622192383f, 0.6195858716964722f, -0.030586745589971542f, 0.20294004678726196f, 0.8428605198860168f, 0.8760571479797363f, 0.9035816192626953f, 0.2573540508747101f, 0.9256206154823303f, 0.9216637015342712f, -0.05309552699327469f, 0.7107692956924438f, 0.45237475633621216f, 0.05815040320158005f, 0.046798452734947205f, 0.26077818870544434f, 0.3188604414463043f, 0.4394797682762146f, -0.15507178008556366f, 0.01675654575228691f, 0.8172454833984375f, 0.7158721685409546f, 0.5041349530220032f, 0.9606093764305115f, 0.24666625261306763f, 0.047721076756715775f, -0.34579890966415405f, 0.8017789125442505f, 0.3666471540927887f, 0.04347522556781769f, 0.406527578830719f, 0.6754574179649353f, 0.30911266803741455f, 0.8530905246734619f, -0.9870363473892212f, 0.6467958688735962f, 0.7547317147254944f, 0.20951129496097565f, 0.3652810752391815f, 0.8303020000457764f, 0.6789172887802124f, 0.5370679497718811f, -0.0228510070592165f, 0.9963330030441284f, 0.6033815741539001f, 0.9962599873542786f, 0.30330201983451843f, 0.6603178381919861f, 0.20008623600006104f, 0.6380163431167603f, -0.4862326681613922f, 0.11130072176456451f, 0.4321548044681549f, 0.018995439633727074f, 0.6273927688598633f, 0.7769182324409485f, 0.9553254246711731f, 0.9734311103820801f, -0.2834567427635193f, 0.681551456451416f, 0.9388037323951721f, 0.6831141710281372f, 0.7749729752540588f, 0.7507419586181641f, 0.7429967522621155f, 0.14560551941394806f, -0.9048205018043518f, 0.1589333415031433f, 0.08555281907320023f, 0.9324326515197754f, 0.4219590127468109f, 0.8103891611099243f, 0.9930342435836792f, 0.640789270401001f, -0.7118847966194153f, 0.9257346987724304f, 0.9670305848121643f, 0.09029455482959747f, 0.24778175354003906f, 0.45691969990730286f, 0.9832443594932556f, 0.14696259796619415f, -0.8533732295036316f, 0.5891649127006531f, 0.7899357676506042f, 0.6130102872848511f, 0.9939360618591309f, 0.7424476146697998f, 0.4763124883174896f, 0.9004846215248108f, -0.960956335067749f, 0.16504913568496704f, 0.3421562910079956f, 0.6188567876815796f, 0.6711655855178833f, 0.5067749619483948f, 0.17937591671943665f, 0.06545291095972061f, -0.13533861935138702f, 0.5038856863975525f, 0.6817749738693237f, 0.002296984428539872f, 0.4728809893131256f, 0.5888122320175171f, 0.9913061261177063f, 0.8935142755508423f, -0.2276076227426529f, 0.4584313631057739f, 0.4508020877838135f, 0.6257754564285278f, 0.2619384527206421f, 0.6680242419242859f, 0.7401310801506042f, 0.5889957547187805f, -0.9342812895774841f, 0.7075281739234924f, 0.5029522180557251f, 0.08012396097183228f, 0.5697131752967834f, 0.027381310239434242f, 0.39375874400138855f, 0.922075629234314f, -0.4357559382915497f, 0.3111100196838379f, 0.9035667777061462f, 0.3056427538394928f, 0.3167491853237152f, 0.29925480484962463f, 0.7985809445381165f, 0.32990455627441406f, -0.18766969442367554f, 0.2612457275390625f, 0.37321537733078003f, 0.6192373037338257f, 0.6987658143043518f, 0.7345194816589355f, 0.41496583819389343f, 0.45652273297309875f, -0.2197815328836441f, 0.764522135257721f, 0.7870184183120728f, 0.6088377833366394f, 0.3446628451347351f, 0.5823990106582642f, 0.9092398881912231f, 0.7849797010421753f, -0.21147742867469788f, 0.3807166516780853f, 0.36622464656829834f, 0.9512821435928345f, 0.7049868106842041f, 0.15313385426998138f, 0.17101895809173584f, 0.523274302482605f, -0.1750478297472f, 0.9202596545219421f, 0.3780533969402313f, 0.5916029214859009f, 0.6898735165596008f, 0.5669100880622864f, 0.14170262217521667f, 0.495777428150177f, -0.0023855604231357574f, 0.5469815731048584f, 0.07521592825651169f, 0.5028269290924072f, 0.4502023458480835f, 0.9996427297592163f, 0.8052548766136169f, 0.6532044410705566f, -0.3278338611125946f, 0.23488561809062958f, 0.43977439403533936f, 0.9340307712554932f, 0.2527478039264679f, 0.23581324517726898f, 0.3152056634426117f, 0.03218458220362663f, -0.7663291096687317f, 0.2989293932914734f, 0.16552108526229858f, 0.4872937798500061f, 0.12070826441049576f, 0.18155977129936218f, 0.8611400127410889f, 0.9580256938934326f, -0.7313923239707947f, 0.15857042372226715f, 0.934082567691803f, 0.5113591551780701f, 0.46454736590385437f, 0.20818912982940674f, 0.6071004271507263f, 0.23125401139259338f, -0.6641892194747925f, 0.2669774293899536f, 0.7357626557350159f, 0.9462431073188782f, 0.9123800992965698f, 0.36338457465171814f, 0.14181509613990784f, 0.26046136021614075f, -0.815746009349823f, 0.2205248475074768f, 0.5667375922203064f, 0.08932609856128693f, 0.9259594082832336f, 0.36681076884269714f, 0.8980943560600281f, 0.32572266459465027f, -0.6590762734413147f, 0.6093413829803467f, 0.12960657477378845f, 0.5930185914039612f, 0.8333390951156616f, 0.9731943607330322f, 0.837321937084198f, 0.9922711849212646f, -0.6681870818138123f, 0.27374911308288574f, 0.7355114221572876f, 0.3028092086315155f, 0.4792872369289398f, 0.7698060274124146f, 0.17887069284915924f, 0.3868282437324524f, -0.8370124101638794f, 0.24586540460586548f, 0.5996515154838562f, 0.9534965753555298f, 0.8624243140220642f, 0.8051519393920898f, 0.3576148748397827f, 0.19329005479812622f, -0.7326384782791138f, 0.4787130653858185f, 0.41462060809135437f, 0.2415287047624588f, 0.3376425504684448f, 0.25820279121398926f, 0.5139526128768921f, 0.36159318685531616f, -0.5794234871864319f, 0.7606413960456848f, 0.5239865183830261f, 0.6290261745452881f, 0.055398471653461456f, 0.3791690468788147f, 0.5366314053535461f, 0.9951208233833313f, -0.3502260148525238f, 0.8858413100242615f, 0.7163110375404358f, 0.19947446882724762f, 0.4579830467700958f, 0.014174330979585648f, 0.2446925789117813f, 0.3414309620857239f, -0.4072417616844177f, 0.0791848823428154f, 0.25344201922416687f, 0.3053256869316101f, 0.1600322276353836f, 0.41598251461982727f, 0.3335754871368408f, 0.6460068821907043f, -0.34193724393844604f, 0.7434719204902649f, 0.005988352466374636f, 0.7712967991828918f, 0.27055811882019043f, 0.0078439274802804f, 0.12007400393486023f, 0.8447235226631165f, -0.0791362076997757f, 0.14313682913780212f, 0.508359432220459f, 0.7851096987724304f, 0.3996513783931732f, 0.7308434844017029f, 0.6455370783805847f, 0.8107802867889404f, -0.26079392433166504f, 0.6314176917076111f, 0.12042216956615448f, 0.17530962824821472f, 0.050116702914237976f, 0.06582267582416534f, 0.08655764907598495f, 0.8652197122573853f, -0.4000997841358185f, 0.8782271146774292f, 0.5909013748168945f, 0.7025498747825623f, 0.724763035774231f, 0.003351846244186163f, 0.5415880680084229f, 0.2944686710834503f, -0.7722193598747253f, 0.31718909740448f, 0.20943714678287506f, 0.804436445236206f, 0.4096069037914276f, 0.27587902545928955f, 0.0027455950621515512f, 0.9408443570137024f, -0.8699133992195129f, 0.7470458745956421f, 0.9905157089233398f, 0.05449604615569115f, 0.5949684977531433f, 0.22178883850574493f, 0.6504505276679993f, 0.7186533212661743f, -0.41675740480422974f, 0.998819887638092f, 0.505225419998169f, 0.871701180934906f, 0.6633145213127136f, 0.5961070656776428f, 0.31913313269615173f, 0.4234476089477539f, -0.8272688388824463f, 0.9861772060394287f, 0.6764849424362183f, 0.3306165337562561f, 0.8316692113876343f, 0.4988337457180023f, 0.9359182119369507f, 0.5473150014877319f, -0.661737322807312f, 0.5369064807891846f, 0.13664673268795013f, 0.7288101315498352f, 0.03427201136946678f, 0.6041696667671204f, 0.746576189994812f, 0.6365392804145813f, -0.2769131362438202f, 0.3371001183986664f, 0.9100361466407776f, 0.6994214057922363f, 0.11873947083950043f, 0.657072126865387f, 0.33539140224456787f, 0.805550754070282f, -0.21787719428539276f, 0.5863829255104065f, 0.7570540904998779f, 0.04281175881624222f, 0.7694802284240723f, 0.08797822892665863f, 0.1430666148662567f, 0.7328653335571289f, -0.9110062122344971f, 0.529931902885437f, 0.48581960797309875f, 0.5931344628334045f, 0.15786875784397125f, 0.7772520184516907f, 0.9926816821098328f, 0.148953378200531f, -0.3176131248474121f, 0.863444447517395f, 0.9017736315727234f, 0.14254413545131683f, 0.8229118585586548f, 0.778200089931488f, 0.7322726845741272f, 0.6296079754829407f, -0.8886850476264954f, 0.015668027102947235f, 0.046255532652139664f, 0.16859307885169983f, 0.5999705791473389f, 0.48666125535964966f, 0.26862987875938416f, 0.5795055031776428f, -0.9060096740722656f, 0.4433535039424896f, 0.7685344219207764f, 0.6772983074188232f, 0.5784711837768555f, 0.42927759885787964f, 0.726402997970581f, 0.44768112897872925f, -0.47020789980888367f, 0.1048450767993927f, 0.5641710162162781f, 0.9279101490974426f, 0.6224499940872192f, 0.17901726067066193f, 0.018220409750938416f, 0.3972336947917938f, -0.45310530066490173f, 0.7804028391838074f, 0.15252484381198883f, 0.27927523851394653f, 0.7458125352859497f, 0.03326472267508507f, 0.8378304839134216f, 0.6648920178413391f, -0.8947811722755432f, 0.18875332176685333f, 0.3730006814002991f, 0.72630375623703f, 0.7042096257209778f, 0.10834169387817383f, 0.8895192742347717f, 0.3356451094150543f, -0.9128196835517883f, 0.09996464848518372f, 0.2779408097267151f, 0.27732938528060913f, 0.8434429168701172f, 0.9563950300216675f, 0.009613835252821445f, 0.15259042382240295f, -0.6461194753646851f, 0.09269309043884277f, 0.24371156096458435f, 0.3870115578174591f, 0.049682844430208206f, 0.29778337478637695f, 0.7648861408233643f, 0.1618955433368683f, -0.3151703476905823f, 0.9398744702339172f, 0.5037279725074768f, 0.8385923504829407f, 0.8435193300247192f, 0.007962752133607864f, 0.6520388722419739f, 0.8890889883041382f, -0.6791888475418091f, 0.6186034083366394f, 0.4151743948459625f, 0.2380618005990982f, 0.3992981016635895f, 0.15941746532917023f, 0.43269261717796326f, 0.5282964110374451f, -0.03304531052708626f, 0.585328221321106f, 0.16107337176799774f, 0.46240919828414917f, 0.6719024777412415f, 0.4978694021701813f, 0.8324963450431824f, 0.22603780031204224f, -0.06485191732645035f, 0.7653141617774963f, 0.9242449402809143f, 0.8261539340019226f, 0.782170832157135f, 0.7524861097335815f, 0.4632451832294464f, 0.25765460729599f, -0.3398013710975647f, 0.936778724193573f, 0.5281080603599548f, 0.13471786677837372f, 0.9277204871177673f, 0.4041079878807068f, 0.326332688331604f, 0.7864869832992554f, -0.7447057962417603f, 0.16849839687347412f, 0.7852485775947571f, 0.7923140525817871f, 0.653203010559082f, 0.5927959084510803f, 0.42237576842308044f, 0.19988399744033813f, -0.9731553792953491f, 0.154871866106987f, 0.45774197578430176f, 0.41085532307624817f, 0.3076859414577484f, 0.855945885181427f, 0.9388959407806396f, 0.44691330194473267f, -0.26723453402519226f, 0.23093129694461823f, 0.7664783596992493f, 0.5327093601226807f, 0.493800550699234f, 0.8143611550331116f, 0.25589945912361145f, 0.3070675730705261f, -0.46147191524505615f, 0.16711744666099548f, 0.0598558746278286f, 0.5612905621528625f, 0.7561416625976562f, 0.7504088282585144f, 0.9409792423248291f, 0.34089648723602295f, -0.1390804648399353f, 0.38892504572868347f, 0.3922911286354065f, 0.43621107935905457f, 0.3452676832675934f, 0.5053984522819519f, 0.8788795471191406f, 0.9767193794250488f, -0.9006637930870056f, 0.8815063834190369f, 0.964030921459198f, 0.08540834486484528f, 0.47893449664115906f, 0.8165516257286072f, 0.23885098099708557f, 0.3222641944885254f, -0.06964407116174698f, 0.4492987394332886f, 0.4616808295249939f, 0.5428813695907593f, 0.5362764596939087f, 0.6180576086044312f, 0.697014570236206f, 0.851092517375946f, -0.030262917280197144f, 0.16341331601142883f, 0.9578641057014465f, 0.3350561559200287f, 0.349532812833786f, 0.44915664196014404f, 0.6489526629447937f, 0.8504227995872498f, -0.7657878398895264f, 0.7089443206787109f, 0.4345797002315521f, 0.2551591396331787f, 0.5331854224205017f, 0.8160229921340942f, 0.5410831570625305f, 0.40642303228378296f, -0.11129805445671082f, 0.24758192896842957f, 0.36303070187568665f, 0.5709317326545715f, 0.5020251870155334f, 0.3135274648666382f, 0.6154084205627441f, 0.1601545512676239f, -0.7251759171485901f, 0.6226760745048523f, 0.24580417573451996f, 0.8089255690574646f, 0.5379562377929688f, 0.35002586245536804f, 0.3676684498786926f, 0.6105183959007263f, -0.064308300614357f, 0.8580672740936279f, 0.35963982343673706f, 0.22169940173625946f, 0.39272820949554443f, 0.047151077538728714f, 0.27121540904045105f, 0.5184298157691956f, -0.8127463459968567f, 0.46301406621932983f, 0.019107619300484657f, 0.06719069927930832f, 0.7585834264755249f, 0.3138373792171478f, 0.8271400928497314f, 0.8970226645469666f, -0.6135584115982056f, 0.6009877920150757f, 0.47749602794647217f, 0.2839789092540741f, 0.37027764320373535f, 0.30380386114120483f, 0.24230064451694489f, 0.7938929796218872f, -0.7926009893417358f, 0.7400261759757996f, 0.7886980175971985f, 0.30751633644104004f, 0.13077764213085175f, 0.6247094869613647f, 0.8133363723754883f, 0.2946244180202484f, -0.9651926755905151f, 0.9980027675628662f, 0.5608288645744324f, 0.07155779749155045f, 0.27253827452659607f, 0.4239330291748047f, 0.8194717764854431f, 0.5625944137573242f, -0.40785717964172363f, 0.9491235613822937f, 0.056486643850803375f, 0.4876164197921753f, 0.3956603705883026f, 0.3626271188259125f, 0.8031384944915771f, 0.8572723865509033f, -0.6009153723716736f, 0.04782673344016075f, 0.5070682764053345f, 0.6859241724014282f, 0.48638397455215454f, 0.5227308869361877f, 0.9583191275596619f, 0.5519843101501465f, -0.4490281939506531f, 0.845426082611084f, 0.0040471190586686134f, 0.6714401245117188f, 0.788536012172699f, 0.5530459880828857f, 0.8521206974983215f, 0.9667750597000122f, -0.1899038553237915f, 0.14015522599220276f, 0.21240262687206268f, 0.06162331625819206f, 0.3743637800216675f, 0.9131104946136475f, 0.5142458081245422f, 0.010482998564839363f, -0.9036118388175964f, 0.7724249362945557f, 0.37515148520469666f, 0.17222416400909424f, 0.5442739725112915f, 0.19069060683250427f, 0.11655233800411224f, 0.146914541721344f, -0.4995453357696533f, 0.7221554517745972f, 0.5747063159942627f, 0.529983639717102f, 0.6917024254798889f, 0.6357343792915344f, 0.11705999076366425f, 0.7907328605651855f, -0.1570265293121338f, 0.5205065011978149f, 0.47770750522613525f, 0.9637705087661743f, 0.29946398735046387f, 0.49023330211639404f, 0.5715799927711487f, 0.10176398605108261f, -0.5335097312927246f, 0.234365314245224f, 0.5741044282913208f, 0.49208658933639526f, 0.7332715392112732f, 0.0737125426530838f, 0.5873178243637085f, 0.5201934576034546f, -0.6331714391708374f, 0.7747862339019775f, 0.2843453586101532f, 0.24678076803684235f, 0.7056248784065247f, 0.40709710121154785f, 0.7460780143737793f, 0.2576872706413269f, -0.39845848083496094f, 0.18982450664043427f, 0.14684782922267914f, 0.43302181363105774f, 0.7850289940834045f, 0.3833773732185364f, 0.35816097259521484f, 0.8216935992240906f, -0.7989897727966309f, 0.833615779876709f, 0.40386345982551575f, 0.641422688961029f, 0.2802581787109375f, 0.9784031510353088f, 0.42657050490379333f, 0.5559663772583008f, -0.7491622567176819f, 0.35686349868774414f, 0.6362830400466919f, 0.18487580120563507f, 0.18513990938663483f, 0.3692854940891266f, 0.1938529908657074f, 0.5964424014091492f, -0.4012472331523895f, 0.4045508801937103f, 0.452761173248291f, 0.7008565664291382f, 0.7523708343505859f, 0.4169078767299652f, 0.9553346037864685f, 0.7962601184844971f, -0.1322527825832367f, 0.5861921310424805f, 0.87958824634552f, 0.5572225451469421f, 0.4857018291950226f, 0.46152248978614807f, 0.3019712567329407f, 0.6113126873970032f, -0.04110750928521156f, 0.878924548625946f, 0.9324800968170166f, 0.5637655854225159f, 0.6685288548469543f, 0.5355955958366394f, 0.03140844404697418f, 0.5425611734390259f, -0.487268328666687f, 0.5192486643791199f, 0.8521589636802673f, 0.7973272204399109f, 0.14166751503944397f, 0.5006649494171143f, 0.18133172392845154f, 0.2762526869773865f, -0.6962611079216003f, 0.2999909520149231f, 0.5526027679443359f, 0.8872278928756714f, 0.3564038872718811f, 0.38243839144706726f, 0.7597616314888f, 0.4012088477611542f, -0.9237352609634399f, 0.28231021761894226f, 0.09646948426961899f, 0.6714897751808167f, 0.5043734908103943f, 0.6060844659805298f, 0.8807926774024963f, 0.23581534624099731f, -0.954433798789978f, 0.9618269205093384f, 0.9960209131240845f, 0.9973694086074829f, 0.41071751713752747f, 0.2493620663881302f, 0.8382611274719238f, 0.6184896230697632f, -0.8054929375648499f, 0.07383239269256592f, 0.7981867790222168f, 0.18747948110103607f, 0.8484606742858887f, 0.5539311170578003f, 0.03268638625741005f, 0.8615500926971436f, -0.4542137384414673f, 0.7465187907218933f, 0.6366891264915466f, 0.7148553133010864f, 0.4585575759410858f, 0.2657719850540161f, 0.7294484376907349f, 0.21664486825466156f, -0.10042797774076462f, 0.422899067401886f, 0.1308695524930954f, 0.46666666865348816f, 0.6523040533065796f, 0.9634865522384644f, 0.7768650650978088f, 0.581139087677002f, -0.37267300486564636f, 0.6537182331085205f, 0.5417563915252686f, 0.6429400444030762f, 0.29845646023750305f, 0.9042994976043701f, 0.07072793692350388f, 0.2289782613515854f, -0.04506538808345795f, 0.6312122941017151f, 0.055022113025188446f, 0.5570036768913269f, 0.8956995010375977f, 0.7554948329925537f, 0.8213028907775879f, 0.769038736820221f, -0.49096769094467163f, 0.49514201283454895f, 0.02616790682077408f, 0.10243289172649384f, 0.2668556869029999f, 0.5845155119895935f, 0.9082800149917603f, 0.7066318392753601f, -0.7121745944023132f, 0.22020888328552246f, 0.46553805470466614f, 0.5884962677955627f, 0.5119771361351013f, 0.34393996000289917f, 0.5049230456352234f, 0.7340148091316223f, -0.027271956205368042f, 0.7089832425117493f, 0.9539350271224976f, 0.07504377514123917f, 0.9152854681015015f, 0.6071692705154419f, 0.40056362748146057f, 0.5354809761047363f, -0.6063610911369324f, 0.6894783973693848f, 0.5683833360671997f, 0.17594029009342194f, 0.5479456782341003f, 0.5955703258514404f, 0.3722628653049469f, 0.2814019024372101f, -0.06383797526359558f, 0.6795668005943298f, 0.44798392057418823f, 0.2913673520088196f, 0.5476081967353821f, 0.34340742230415344f, 0.11946889013051987f, 0.21034792065620422f, -0.7156696915626526f, 0.5937713980674744f, 0.6486111283302307f, 0.47521960735321045f, 0.8819036483764648f, 0.8538327813148499f, 0.5997673273086548f, 0.47870445251464844f, -0.6028214693069458f, 0.8941771984100342f, 0.6326302289962769f, 0.5168649554252625f, 0.5207794308662415f, 0.27280664443969727f, 0.16246570646762848f, 0.12529604136943817f, -0.9035731554031372f, 0.591334879398346f, 0.9578881859779358f, 0.17103327810764313f, 0.12819764018058777f, 0.7038173675537109f, 0.4356310963630676f, 0.4213002026081085f, -0.6873278021812439f, 0.3165976405143738f, 0.11485131084918976f, 0.15543566644191742f, 0.3888850808143616f, 0.32986846566200256f, 0.08383366465568542f, 0.12513263523578644f, -0.9471328854560852f, 0.47203901410102844f, 0.6679334044456482f, 0.794109046459198f, 0.89597088098526f, 0.3857167065143585f, 0.8991684913635254f, 0.05694802850484848f, -0.5596457719802856f, 0.4535037875175476f, 0.7803483605384827f, 0.28201428055763245f, 0.3346971273422241f, 0.1777588427066803f, 0.5990262627601624f, 0.25373879075050354f, -0.7098056077957153f, 0.5723106265068054f, 0.5631372332572937f, 0.5646886825561523f, 0.6566600203514099f, 0.2602112293243408f, 0.22391776740550995f, 0.4844922423362732f, -0.08918935805559158f, 0.1807994693517685f, 0.8355202674865723f, 0.5180812478065491f, 0.6250575184822083f, 0.5621309280395508f, 0.014487449079751968f, 0.6778110265731812f, -0.8965717554092407f, 0.0198938250541687f, 0.9565654397010803f, 0.23975801467895508f, 0.9900928139686584f, 0.6459873914718628f, 0.9062353372573853f, 0.4844605326652527f, -0.4414706230163574f, 0.6701395511627197f, 0.23433487117290497f, 0.1561756283044815f, 0.1437443643808365f, 0.06316845864057541f, 0.9999440908432007f, 0.7324222922325134f, -0.11394210159778595f, 0.5871449708938599f, 0.7526248097419739f, 0.5900729298591614f, 0.4475020468235016f, 0.019100487232208252f, 0.178951695561409f, 0.07405571639537811f, -0.7707442045211792f, 0.5161166191101074f, 0.2847212255001068f, 0.27308666706085205f, 0.8516044020652771f, 0.050345469266176224f, 0.4095757007598877f, 0.663080096244812f, -0.8324225544929504f, 0.254406601190567f, 0.5778502225875854f, 0.03840354457497597f, 0.46257272362709045f, 0.7098190188407898f, 0.14373897016048431f, 0.6513025760650635f, -0.1434212327003479f, 0.7635031342506409f, 0.05326263606548309f, 0.724234402179718f, 0.422201931476593f, 0.6522886753082275f, 0.7185320258140564f, 0.27537083625793457f, -0.735108494758606f, 0.8074356913566589f, 0.19922368228435516f, 0.44919541478157043f, 0.032548751682043076f, 0.9786482453346252f, 0.06138111278414726f, 0.6796675324440002f, -0.8240801095962524f, 0.7973252534866333f, 0.8526728749275208f, 0.4565717875957489f, 0.8146008849143982f, 0.40921345353126526f, 0.934229850769043f, 0.002639202866703272f, -0.6937144994735718f, 0.2938564419746399f, 0.5010280609130859f, 0.6735903024673462f, 0.871627688407898f, 0.34628793597221375f, 0.3694281280040741f, 0.4418915808200836f, -0.5140633583068848f, 0.8171901702880859f, 0.16454705595970154f, 0.6979969143867493f, 0.1448454111814499f, 0.4825076162815094f, 0.18534520268440247f, 0.4294411540031433f, -0.8034066557884216f, 0.6138280630111694f, 0.15633687376976013f, 0.7424849271774292f, 0.8523796200752258f, 0.9189934134483337f, 0.6093264222145081f, 0.865563690662384f, -0.5555226802825928f, 0.7167648673057556f, 0.9457657933235168f, 0.5710174441337585f, 0.6736713647842407f, 0.9871743321418762f, 0.33685562014579773f, 0.21444839239120483f, -0.12882474064826965f, 0.30413445830345154f, 0.1688614785671234f, 0.4376496970653534f, 0.6517241597175598f, 0.7497408390045166f, 0.020400704815983772f, 0.6372640132904053f, -0.910872220993042f, 0.7075249552726746f, 0.21821042895317078f, 0.4254271686077118f, 0.03039398603141308f, 0.35695916414260864f, 0.1808696687221527f, 0.8477505445480347f, -0.4157232940196991f, 0.7713919878005981f, 0.005091388709843159f, 0.7107065320014954f, 0.5972775220870972f, 0.6406885385513306f, 0.07513189315795898f, 0.10924434661865234f, -0.9973832368850708f, 0.37279608845710754f, 0.6311399340629578f, 0.9525197148323059f, 0.07212036848068237f, 0.7729926109313965f, 0.0561884306371212f, 0.6934810280799866f, -0.47460848093032837f, 0.7144622206687927f, 0.8783223628997803f, 0.37543952465057373f, 0.08888263255357742f, 0.5208850502967834f, 0.03129621967673302f, 0.48347488045692444f, -0.6695353984832764f, 0.47327420115470886f, 0.33874213695526123f, 0.794999361038208f, 0.5598095059394836f, 0.20629721879959106f, 0.10402480512857437f, 0.7065555453300476f, -0.35813647508621216f, 0.242061585187912f, 0.3456060290336609f, 0.8430100083351135f, 0.9199737906455994f, 0.32368627190589905f, 0.43745073676109314f, 0.5214145183563232f, -0.19030162692070007f, 0.5245694518089294f, 0.18640492856502533f, 0.466020792722702f, 0.20398271083831787f, 0.7511326670646667f, 0.29804638028144836f, 0.24645185470581055f, -0.3531821370124817f, 0.32867202162742615f, 0.3468358814716339f, 0.9673507213592529f, 0.8806026577949524f, 0.9265866875648499f, 0.5149341225624084f, 0.9226978421211243f, -0.6712832450866699f, 0.03356464207172394f, 0.5242088437080383f, 0.6898278594017029f, 0.19708608090877533f, 0.5126095414161682f, 0.3662595748901367f, 0.3047427833080292f, -0.006742801982909441f, 0.3407621383666992f, 0.645534098148346f, 0.09595900028944016f, 0.6671896576881409f, 0.8612439036369324f, 0.8218377232551575f, 0.38787978887557983f, -0.5652521848678589f, 0.6719322204589844f, 0.9842085242271423f, 0.9371309876441956f, 0.49322423338890076f, 0.42448437213897705f, 0.16510242223739624f, 0.6109526753425598f, -0.35980263352394104f, 0.6301953196525574f, 0.49707669019699097f, 0.2723991572856903f, 0.5818613171577454f, 0.9544309973716736f, 0.14220643043518066f, 0.9731791615486145f, -0.5346968173980713f, 0.9078060984611511f, 0.16912882030010223f, 0.4938087463378906f, 0.24067193269729614f, 0.03835579752922058f, 0.6244019865989685f, 0.8802337050437927f, -0.5508968234062195f, 0.8408150672912598f, 0.04073292762041092f, 0.5113542675971985f, 0.4116781949996948f, 0.9768810868263245f, 0.3568381071090698f, 0.998822808265686f, -0.65535569190979f, 0.47159016132354736f, 0.19286826252937317f, 0.8727167248725891f, 0.8802834749221802f, 0.6698796153068542f, 0.14071543514728546f, 0.8359838724136353f, -0.4626886546611786f, 0.6550349593162537f, 0.42482802271842957f, 0.9451971650123596f, 0.11071307957172394f, 0.23219336569309235f, 0.8555033802986145f, 0.045476850122213364f, -0.44243860244750977f, 0.044133465737104416f, 0.06564086675643921f, 0.3167705237865448f, 0.5971126556396484f, 0.3235583007335663f, 0.9949468374252319f, 0.5818015336990356f, -0.1526222974061966f, 0.15473681688308716f, 0.03866894543170929f, 0.7333623170852661f, 0.16272468864917755f, 0.3337458670139313f, 0.8799098134040833f, 0.48101919889450073f, -0.5401842594146729f, 0.44024157524108887f, 0.02713000401854515f, 0.9003867506980896f, 0.435819536447525f, 0.3801767826080322f, 0.714280366897583f, 0.6630645990371704f, -0.20798154175281525f, 0.9730138182640076f, 0.8717684745788574f, 0.35136035084724426f, 0.8240002393722534f, 0.5504804253578186f, 0.7637561559677124f, 0.12383856624364853f, -0.18550507724285126f, 0.9561439156532288f, 0.8378667235374451f, 0.13358063995838165f, 0.5953336954116821f, 0.3618294596672058f, 0.5966847538948059f, 0.880975604057312f, -0.9418951869010925f, 0.0111558698117733f, 0.05483987182378769f, 0.9209890961647034f, 0.7423895001411438f, 0.7233306169509888f, 0.5590957403182983f, 0.5180341005325317f, -0.35814008116722107f, 0.9806167483329773f, 0.6574798226356506f, 0.6446336507797241f, 0.8104338049888611f, 0.6344273090362549f, 0.8435674905776978f, 0.6342395544052124f, -0.37018507719039917f, 0.019314611330628395f, 0.3553539514541626f, 0.5795184373855591f, 0.6385989189147949f, 0.5104120373725891f, 0.9510025978088379f, 0.5350344181060791f, -0.3153560757637024f, 0.8058688044548035f, 0.3963124752044678f, 0.9654682278633118f, 0.5450540781021118f, 0.31420567631721497f, 0.4467260241508484f, 0.5202133059501648f, -0.7131804823875427f, 0.6478794813156128f, 0.7251477241516113f, 0.07830096036195755f, 0.6401355862617493f, 0.3932613432407379f, 0.3584679365158081f, 0.91094571352005f, -0.39523500204086304f, 0.08907144516706467f, 0.45662516355514526f, 0.7109434604644775f, 0.7230480313301086f, 0.6053628325462341f, 0.30622196197509766f, 0.38770484924316406f, -0.5422073602676392f, 0.5639345049858093f, 0.1095707044005394f, 0.5614190697669983f, 0.9919993877410889f, 0.03836771100759506f, 0.20234869420528412f, 0.25325632095336914f, -0.7791091799736023f, 0.9991785883903503f, 0.1801302582025528f, 0.2184862196445465f, 0.8796088695526123f, 0.4260416328907013f, 0.8678127527236938f, 0.03663934767246246f, -0.012205268256366253f, 0.39760011434555054f, 0.17696164548397064f, 0.6593616008758545f, 0.5277931094169617f, 0.7898777723312378f, 0.2312561273574829f, 0.20099200308322906f, -0.8612154126167297f, 0.9631316661834717f, 0.4981361925601959f, 0.403207927942276f, 0.7446074485778809f, 0.03062167763710022f, 0.9258502721786499f, 0.7746843099594116f, -0.6947594285011292f, 0.9340320229530334f, 0.7091878652572632f, 0.8093006610870361f, 0.05367884412407875f, 0.4846416413784027f, 0.6088395118713379f, 0.39811018109321594f, -0.1312079131603241f, 0.34564483165740967f, 0.49910688400268555f, 0.7934744954109192f, 0.7890270352363586f, 0.9726294279098511f, 0.9277294874191284f, 0.6825648546218872f, -0.6767992377281189f, 0.9845876097679138f, 0.005407392047345638f, 0.10670120269060135f, 0.5060163140296936f, 0.2585422098636627f, 0.2062050998210907f, 0.03115996904671192f, -0.6255623698234558f, 0.5305595397949219f, 0.5546576380729675f, 0.3634301424026489f, 0.9094740748405457f, 0.2792908847332001f, 0.35963982343673706f, 0.4602079391479492f, -0.4093800187110901f, 0.16684138774871826f, 0.7128203511238098f, 0.05606738477945328f, 0.2659060060977936f, 0.3364273011684418f, 0.9775246977806091f, 0.42543789744377136f, -0.001242441707290709f, 0.7201417684555054f, 0.8536234498023987f, 0.4104852080345154f, 0.36432915925979614f, 0.4897150993347168f, 0.17385724186897278f, 0.053660452365875244f, -0.35944294929504395f, 0.49578040838241577f, 0.7099647521972656f, 0.27315399050712585f, 0.6493324041366577f, 0.0611613504588604f, 0.39927518367767334f, 0.37925225496292114f, -0.6364468932151794f, 0.2685614824295044f, 0.23535184562206268f, 0.21502675116062164f, 0.3463660180568695f, 0.24293406307697296f, 0.2888999879360199f, 0.09470298886299133f, -0.020922543480992317f, 0.626682698726654f, 0.1307544708251953f, 0.5583909153938293f, 0.026464300230145454f, 0.949379563331604f, 0.6844386458396912f, 0.5551152229309082f, -0.6242727637290955f, 0.7098765969276428f, 0.4415547847747803f, 0.47027674317359924f, 0.3067215085029602f, 0.8548253774642944f, 0.15056103467941284f, 0.11636115610599518f, -0.15903328359127045f, 0.2658291459083557f, 0.846552312374115f, 0.13244199752807617f, 0.24690945446491241f, 0.4811806082725525f, 0.40288159251213074f, 0.45966532826423645f, -0.8517621755599976f, 0.8950140476226807f, 0.6146064400672913f, 0.07919812202453613f, 0.0925937071442604f, 0.8610221147537231f, 0.18379390239715576f, 0.036380570381879807f, -0.41226324439048767f, 0.8227370381355286f, 0.13956181704998016f, 0.7293396592140198f, 0.5370288491249084f, 0.32435569167137146f, 0.9375349879264832f, 0.6014223098754883f, -0.7773137092590332f, 0.30621346831321716f, 0.7853850722312927f, 0.7652652263641357f, 0.2008773386478424f, 0.2622990906238556f, 0.8607255220413208f, 0.9252390265464783f, -0.013190124183893204f, 0.24822281301021576f, 0.955833375453949f, 0.27612581849098206f, 0.19126661121845245f, 0.30282357335090637f, 0.4654594361782074f, 0.7184689044952393f, -0.5572916865348816f, 0.05513860657811165f, 0.3736012876033783f, 0.456522136926651f, 0.19296595454216003f, 0.6982859969139099f, 0.8841006755828857f, 0.2518708109855652f, -0.3295402228832245f, 0.40198463201522827f, 0.5325913429260254f, 0.6255645751953125f, 0.7727678418159485f, 0.6649348139762878f, 0.7825260162353516f, 0.2039889246225357f, -0.9324197769165039f, 0.9628584384918213f, 0.5647438764572144f, 0.7876762747764587f, 0.4598176181316376f, 0.4387907385826111f, 0.49512097239494324f, 0.963189959526062f, -0.5835348963737488f, 0.912311315536499f, 0.9148164391517639f, 0.048494283109903336f, 0.585044264793396f, 0.48378312587738037f, 0.049229010939598083f, 0.11752228438854218f, -0.8442016839981079f, 0.015054738149046898f, 0.8315967321395874f, 0.481232225894928f, 0.38199666142463684f, 0.2949586808681488f, 0.587517261505127f, 0.8964964747428894f, -0.4940664768218994f, 0.5762439966201782f, 0.5760091543197632f, 0.9942789077758789f, 0.6940974593162537f, 0.9639072418212891f, 0.6132343411445618f, 0.07466455549001694f, -0.9357264041900635f, 0.9942341446876526f, 0.9383149147033691f, 0.6509715914726257f, 0.43462836742401123f, 0.40212711691856384f, 0.1805034875869751f, 0.6015692353248596f, -0.098844975233078f, 0.6329930424690247f, 0.7892093062400818f, 0.07530306279659271f, 0.2001446932554245f, 0.7211296558380127f, 0.2627964913845062f, 0.8585588335990906f, -0.32988789677619934f, 0.07067783176898956f, 0.7482434511184692f, 0.6544227004051208f, 0.6113494038581848f, 0.22236205637454987f, 0.8636207580566406f, 0.7521259188652039f, -0.8414170742034912f, 0.9159613847732544f, 0.9379368424415588f, 0.49066081643104553f, 0.0063842227682471275f, 0.9095509052276611f, 0.5977364778518677f, 0.4368002414703369f, -0.68254154920578f, 0.8748016953468323f, 0.5077117085456848f, 0.5059955716133118f, 0.7991615533828735f, 0.5640721321105957f, 0.6378844976425171f, 0.6470819711685181f, -0.9927375912666321f, 0.7129392027854919f, 0.4606061279773712f, 0.5653961896896362f, 0.012539353221654892f, 0.2926003634929657f, 0.49106815457344055f, 0.5772389769554138f, -0.5929942727088928f, 0.08156941086053848f, 0.3986402153968811f, 0.5527432560920715f, 0.879348874092102f, 0.1947343647480011f, 0.6006659865379333f, 0.6783597469329834f, -0.45431166887283325f, 0.7213973999023438f, 0.008066614158451557f, 0.9314553141593933f, 0.913729727268219f, 0.4468788504600525f, 0.5299719572067261f, 0.8615965843200684f, -0.20387819409370422f, 0.12620726227760315f, 0.9360736012458801f, 0.8347810506820679f, 0.574906587600708f, 0.12734849750995636f, 0.7645686864852905f, 0.9460065364837646f, -0.1237403005361557f, 0.10877121239900589f, 0.15875132381916046f, 0.7854172587394714f, 0.6815127730369568f, 0.19623887538909912f, 0.9560115337371826f, 0.46504926681518555f, -0.5653607249259949f, 0.5162233114242554f, 0.22280114889144897f, 0.09088745713233948f, 0.4671564996242523f, 0.9675595164299011f, 0.5884478688240051f, 0.14631405472755432f, -0.16656926274299622f, 0.01645512320101261f, 0.914462685585022f, 0.09624844789505005f, 0.3874826729297638f, 0.4739474654197693f, 0.750860869884491f, 0.23523393273353577f, -0.9284203052520752f, 0.8898579478263855f, 0.345284640789032f, 0.08784419298171997f, 0.7296627759933472f, 0.8968877196311951f, 0.6744242906570435f, 0.4944525361061096f, -0.10546044260263443f, 0.512357234954834f, 0.2921816408634186f, 0.0773330107331276f, 0.562795877456665f, 0.13140875101089478f, 0.1996130645275116f, 0.7234895825386047f, -0.877125084400177f, 0.42857682704925537f, 0.9933916926383972f, 0.9442976713180542f, 0.8135015964508057f, 0.3923358917236328f, 0.8295015692710876f, 0.436677485704422f, -0.18804648518562317f, 0.4523731470108032f, 0.6273171305656433f, 0.11732884496450424f, 0.933814287185669f, 0.5483222007751465f, 0.489371657371521f, 0.4894992411136627f, -0.14645743370056152f, 0.9219204783439636f, 0.02764289267361164f, 0.6256154775619507f, 0.41885825991630554f, 0.40766698122024536f, 0.8504123687744141f, 0.6370672583580017f, -0.14833253622055054f, 0.13100288808345795f, 0.9440075159072876f, 0.3893665373325348f, 0.8816218376159668f, 0.002656870521605015f, 0.41922372579574585f, 0.5249606966972351f, -0.6279345154762268f, 0.981545627117157f, 0.05514019355177879f, 0.665582537651062f, 0.9076485633850098f, 0.49085694551467896f, 0.8149339556694031f, 0.7207086086273193f, -0.596097469329834f, 0.09002416580915451f, 0.1664331704378128f, 0.6368628144264221f, 0.6534790396690369f, 0.22379475831985474f, 0.24387484788894653f, 0.7973232269287109f, -0.22872771322727203f, 0.8999351263046265f, 0.5423677563667297f, 0.04814422130584717f, 0.05455227568745613f, 0.8026018142700195f, 0.9179528951644897f, 0.02417031116783619f, -0.491120845079422f, 0.8830698728561401f, 0.9330478310585022f, 0.709904134273529f, 0.8034668564796448f, 0.45874330401420593f, 0.90679931640625f, 0.5565980672836304f, -0.6475761532783508f, 0.7880554795265198f, 0.40773922204971313f, 0.3230389654636383f, 0.9459826350212097f, 0.8571273684501648f, 0.3719262480735779f, 0.05620569363236427f, -0.41014543175697327f, 0.3619160056114197f, 0.8294211626052856f, 0.6503199338912964f, 0.958410382270813f, 0.944802463054657f, 0.8095158338546753f, 0.6894903182983398f, -0.6438779234886169f, 0.43745753169059753f, 0.13021022081375122f, 0.11162389814853668f, 0.34507378935813904f, 0.5268699526786804f, 0.6061200499534607f, 0.6572471857070923f, -0.8573631048202515f, 0.49089381098747253f, 0.39431145787239075f, 0.920922577381134f, 0.11359622329473495f, 0.026848040521144867f, 0.41631802916526794f, 0.5457457900047302f, -0.8318284153938293f, 0.45060333609580994f, 0.18538980185985565f, 0.11547336727380753f, 0.9438728094100952f, 0.9152460098266602f, 0.5432073473930359f, 0.6312512159347534f, -0.47967252135276794f, 0.08170054107904434f, 0.5649108290672302f, 0.08422406017780304f, 0.6506991982460022f, 0.690393328666687f, 0.7650669813156128f, 0.437112033367157f, -0.630125880241394f, 0.39230868220329285f, 0.33557915687561035f, 0.6362882256507874f, 0.29199135303497314f, 0.7268329858779907f, 0.6273782253265381f, 0.4277935326099396f, -0.4173533320426941f, 0.35611492395401f, 0.3242883086204529f, 0.23563051223754883f, 0.7943972945213318f, 0.6533637046813965f, 0.9669627547264099f, 0.36998888850212097f, -0.5255709886550903f, 0.919844388961792f, 0.04740649834275246f, 0.8462807536125183f, 0.9287967681884766f, 0.000578221632167697f, 0.366167277097702f, 0.2835240066051483f, -0.5096908211708069f, 0.6655353307723999f, 0.2750151753425598f, 0.12282820791006088f, 0.6700020432472229f, 0.5216217041015625f, 0.5535507798194885f, 0.07426565140485764f, -0.20571665465831757f, 0.1269632875919342f, 0.8273926973342896f, 0.9396179914474487f, 0.2893592417240143f, 0.2628929913043976f, 0.2609824240207672f, 0.29008427262306213f, -0.40871551632881165f, 0.1803678572177887f, 0.8327902555465698f, 0.5533181428909302f, 0.9492592811584473f, 0.6956058144569397f, 0.5136803388595581f, 0.556117594242096f, -0.16616129875183105f, 0.5397820472717285f, 0.06975921988487244f, 0.8726140856742859f, 0.08156910538673401f, 0.5377335548400879f, 0.6738261580467224f, 0.004160934593528509f, -0.6812497973442078f, 0.20221439003944397f, 0.09321874380111694f, 0.8111229538917542f, 0.9011240601539612f, 0.7704436182975769f, 0.20516306161880493f, 0.9694781303405762f, -0.47222715616226196f, 0.7506401538848877f, 0.25314757227897644f, 0.23936788737773895f, 0.22840985655784607f, 0.3329446017742157f, 0.2664230763912201f, 0.8423243761062622f, -0.5178266167640686f, 0.256544828414917f, 0.49587100744247437f, 0.731796145439148f, 0.5550515651702881f, 0.580971896648407f, 0.7920541167259216f, 0.6322890520095825f, -0.07652305066585541f, 0.26280677318573f, 0.3140948712825775f, 0.8829917311668396f, 0.16754814982414246f, 0.7582098841667175f, 0.5932511687278748f, 0.5260409712791443f, -0.7321266531944275f, 0.6327638030052185f, 0.4461165964603424f, 0.5977511405944824f, 0.5013430118560791f, 0.4487840533256531f, 0.3583388328552246f, 0.02157731167972088f, -0.6725533604621887f, 0.9005000591278076f, 0.3878537118434906f, 0.5505815148353577f, 0.2193973958492279f, 0.046159230172634125f, 0.8915140628814697f, 0.9715552926063538f, -0.9000949859619141f, 0.5201123356819153f, 0.308791846036911f, 0.575175404548645f, 0.5682863593101501f, 0.42111536860466003f, 0.6911582350730896f, 0.33515894412994385f, -0.580432116985321f, 0.8025619387626648f, 0.3250278830528259f, 0.37197452783584595f, 0.7757179141044617f, 0.09297219663858414f, 0.9441885352134705f, 0.6813203692436218f, -0.3385995924472809f, 0.09265825152397156f, 0.34913453459739685f, 0.34105193614959717f, 0.5994135141372681f, 0.7743740677833557f, 0.8132628202438354f, 0.2606622874736786f, -0.6190739870071411f, 0.4024336338043213f, 0.360497385263443f, 0.3546859323978424f, 0.3528267443180084f, 0.5951979160308838f, 0.7789790034294128f, 0.7506594061851501f, -0.1398140788078308f, 0.12158434838056564f, 0.1781354695558548f, 0.7782880663871765f, 0.30572694540023804f, 0.33442461490631104f, 0.08847449719905853f, 0.9923006296157837f, -0.7346971035003662f, 0.23760055005550385f, 0.7206740379333496f, 0.7971137166023254f, 0.17499865591526031f, 0.3274868130683899f, 0.010877865366637707f, 0.4916832745075226f, -0.07932444661855698f, 0.9094634056091309f, 0.8781993389129639f, 0.05918874591588974f, 0.04789320006966591f, 0.34256553649902344f, 0.06529450416564941f, 0.349341481924057f, -0.7741733193397522f, 0.28744664788246155f, 0.5205706357955933f, 0.996036946773529f, 0.7550404667854309f, 0.8185938596725464f, 0.015990125015378f, 0.8601167798042297f, -0.07088612765073776f, 0.9872831702232361f, 0.22133058309555054f, 0.5130488276481628f, 0.6148419976234436f, 0.5214371085166931f, 0.224678173661232f, 0.6941857933998108f, -0.8462607264518738f, 0.5612895488739014f, 0.7005034685134888f, 0.9731351137161255f, 0.706919252872467f, 0.23939961194992065f, 0.47226712107658386f, 0.288958340883255f, -0.1632612943649292f, 0.3644246757030487f, 0.27620992064476013f, 0.5908983945846558f, 0.577073872089386f, 0.8387545347213745f, 0.606082558631897f, 0.17242328822612762f, -0.6780416965484619f, 0.8477715849876404f, 0.39362144470214844f, 0.5353764295578003f, 0.3730315566062927f, 0.5718259811401367f, 0.8968987464904785f, 0.5358625054359436f, -0.9106656312942505f, 0.5014026165008545f, 0.9942001104354858f, 0.5649999976158142f, 0.42835700511932373f, 0.6273713111877441f, 0.46528345346450806f, 0.8340553641319275f, -0.7020429968833923f, 0.3365047574043274f, 0.8554931282997131f, 0.25257807970046997f, 0.7198328971862793f, 0.11579646915197372f, 0.41505539417266846f, 0.803216278553009f, -0.34114694595336914f, 0.4378233551979065f, 0.44413092732429504f, 0.810642421245575f, 0.9036762118339539f, 0.9930851459503174f, 0.7424336671829224f, 0.8015727400779724f, -0.3762965500354767f, 0.2593214809894562f, 0.41947048902511597f, 0.4807201027870178f, 0.49147164821624756f, 0.18950259685516357f, 0.8783829808235168f, 0.22442500293254852f, -0.5364100933074951f, 0.28213971853256226f, 0.6090237498283386f, 0.7463329434394836f, 0.6191139817237854f, 0.9471454620361328f, 0.4372428059577942f, 0.06917596608400345f, -0.25309231877326965f, 0.2031278759241104f, 0.45695701241493225f, 0.0855206772685051f, 0.23558780550956726f, 0.13026313483715057f, 0.6747074127197266f, 0.4663197100162506f, -0.18317700922489166f, 0.48581644892692566f, 0.19762513041496277f, 0.3102284073829651f, 0.009688161313533783f, 0.07029443234205246f, 0.9325435161590576f, 0.8636685609817505f, -0.10973648726940155f, 0.7683639526367188f, 0.30486202239990234f, 0.1413690596818924f, 0.4812808930873871f, 0.0037878863513469696f, 0.5862252712249756f, 0.46409913897514343f, -0.29582729935646057f, 0.5109610557556152f, 0.9758163094520569f, 0.0997094064950943f, 0.13451924920082092f, 0.5174908638000488f, 0.42662137746810913f, 0.49345874786376953f, -0.22107771039009094f, 0.9013388156890869f, 0.3545549511909485f, 0.23123115301132202f, 0.609027087688446f, 0.21690703928470612f, 0.16233330965042114f, 0.3423830270767212f, -0.5068972706794739f, 0.8592522144317627f, 0.3869503438472748f, 0.07876229286193848f, 0.9145485162734985f, 0.9046218395233154f, 0.8613150119781494f, 0.07517638802528381f, -0.9269258379936218f, 0.3521626889705658f, 0.12282021343708038f, 0.6112663149833679f, 0.6197463274002075f, 0.23260247707366943f, 0.023626327514648438f, 0.7596920132637024f, -0.984227180480957f, 0.265055388212204f, 0.40159332752227783f, 0.08216262608766556f, 0.7652533650398254f, 0.557206928730011f, 0.2657441794872284f, 0.48967254161834717f, -0.9161317944526672f, 0.23811747133731842f, 0.08809073269367218f, 0.18173643946647644f, 0.991630494594574f, 0.045766375958919525f, 0.4680631756782532f, 0.9266614317893982f, -0.15334098041057587f, 0.8577837944030762f, 0.7600253820419312f, 0.11719760298728943f, 0.6734116077423096f, 0.07569362968206406f, 0.38538292050361633f, 0.9463486671447754f, -0.7751149535179138f, 0.8812346458435059f, 0.5169534683227539f, 0.33563634753227234f, 0.7761154770851135f, 0.29781946539878845f, 0.7955983877182007f, 0.38434892892837524f, -0.8875398635864258f, 0.2883027195930481f, 0.39595550298690796f, 0.08271800726652145f, 0.35692548751831055f, 0.8558022379875183f, 0.9339277148246765f, 0.20825505256652832f, -0.1982089728116989f, 0.30056047439575195f, 0.1790497899055481f, 0.7300271987915039f, 0.9484142661094666f, 0.9006948471069336f, 0.17738643288612366f, 0.4413500428199768f, -0.746833324432373f, 0.6511883735656738f, 0.28097957372665405f, 0.6312543749809265f, 0.770594596862793f, 0.09150636196136475f, 0.5551800727844238f, 0.22652769088745117f, -0.007260436657816172f, 0.9536005854606628f, 0.8472560048103333f, 0.62981778383255f, 0.6432117223739624f, 0.9160747528076172f, 0.5114778280258179f, 0.19309715926647186f, -0.5929037928581238f, 0.3572833836078644f, 0.08392123878002167f, 0.9112808108329773f, 0.8250280022621155f, 0.717461109161377f, 0.1506928950548172f, 0.3080577254295349f, -0.8192904591560364f, 0.021140052005648613f, 0.1442725509405136f, 0.5845997929573059f, 0.798360288143158f, 0.8800599575042725f, 0.5271483659744263f, 0.828745424747467f, -0.49065694212913513f, 0.644886314868927f, 0.11567184329032898f, 0.33867061138153076f, 0.44096726179122925f, 0.7080311179161072f, 0.4329221546649933f, 0.7324601411819458f, -0.6880519986152649f, 0.87553870677948f, 0.023974591866135597f, 0.19589507579803467f, 0.8164528608322144f, 0.06554380804300308f, 0.43245768547058105f, 0.16461315751075745f, -0.23591864109039307f, 0.36495882272720337f, 0.664815366268158f, 0.24455763399600983f, 0.8319889307022095f, 0.5915864109992981f, 0.24350903928279877f, 0.7665870785713196f, -0.8239525556564331f, 0.41569435596466064f, 0.4577409625053406f, 0.9199193120002747f, 0.11064957827329636f, 0.6331505179405212f, 0.5273367166519165f, 0.858163595199585f, -0.7111417055130005f, 0.28479090332984924f, 0.25122538208961487f, 0.950268030166626f, 0.8152821063995361f, 0.8480714559555054f, 0.5625976324081421f, 0.7705398797988892f, -0.24206414818763733f, 0.3833453059196472f, 0.0385233536362648f, 0.9408911466598511f, 0.6362574696540833f, 0.7171552181243896f, 0.9499900937080383f, 0.650983452796936f, -0.694173276424408f, 0.5655614733695984f, 0.9170170426368713f, 0.9871682524681091f, 0.47735515236854553f, 0.8020693063735962f, 0.5587081909179688f, 0.5306077599525452f, -0.029000170528888702f, 0.4695947468280792f, 0.081451416015625f, 0.07092499732971191f, 0.48909199237823486f, 0.46006590127944946f, 0.19548912346363068f, 0.0801008865237236f, -0.7715778946876526f, 0.029973246157169342f, 0.8882471323013306f, 0.4579768776893616f, 0.23759455978870392f, 0.7892404198646545f, 0.42552563548088074f, 0.8278147578239441f, -0.3738517165184021f, 0.46497535705566406f, 0.8823816776275635f, 0.2885681688785553f, 0.7199065089225769f, 0.24896331131458282f, 0.2102147787809372f, 0.2935902178287506f, -0.2387196123600006f, 0.017142150551080704f, 0.521449863910675f, 0.7728006839752197f, 0.8690177202224731f, 0.6193624138832092f, 0.6610322594642639f, 0.21026292443275452f, -0.9390906691551208f, 0.40194588899612427f, 0.22486408054828644f, 0.34986284375190735f, 0.6508634090423584f, 0.3935806453227997f, 0.08424456417560577f, 0.8674931526184082f, -0.8073312044143677f, 0.4878312647342682f, 0.09906397014856339f, 0.08179544657468796f, 0.20693956315517426f, 0.5133844017982483f, 0.5939571261405945f, 0.987627387046814f, -0.6199519634246826f, 0.8935309648513794f, 0.8991830348968506f, 0.9232063293457031f, 0.01440335065126419f, 0.4801412522792816f, 0.9502384662628174f, 0.3825349807739258f, -0.20638173818588257f, 0.49269434809684753f, 0.09558821469545364f, 0.49012985825538635f, 0.649713933467865f, 0.9259368777275085f, 0.5160828232765198f, 0.6135209798812866f, -0.34184712171554565f, 0.3233814835548401f, 0.42266905307769775f, 0.3490358889102936f, 0.8436366319656372f, 0.9932474493980408f, 0.3121519982814789f, 0.7505271434783936f, -0.4573150873184204f, 0.8846268653869629f, 0.4710652530193329f, 0.1398211270570755f, 0.531554639339447f, 0.3350696563720703f, 0.015342649072408676f, 0.6510632634162903f, -0.41671499609947205f, 0.6425260305404663f, 0.6914798617362976f, 0.09794041514396667f, 0.5787659287452698f, 0.9501506686210632f, 0.6311306357383728f, 0.39493608474731445f, -0.39158645272254944f, 0.787916362285614f, 0.49311670660972595f, 0.050767816603183746f, 0.5038779377937317f, 0.4478056728839874f, 0.5222789645195007f, 0.3244708776473999f, -0.056937769055366516f, 0.4635751247406006f, 0.2123301476240158f, 0.5063125491142273f, 0.3734121024608612f, 0.4387141466140747f, 0.6882157325744629f, 0.12136664986610413f, -0.25651848316192627f, 0.27105143666267395f, 0.8521239161491394f, 0.8777908682823181f, 0.8091349005699158f, 0.35040754079818726f, 0.03872903436422348f, 0.948364794254303f, -0.48669496178627014f, 0.8669628500938416f, 0.8410266041755676f, 0.43898552656173706f, 0.8257231712341309f, 0.12990392744541168f, 0.007459595799446106f, 0.5590177178382874f, -0.8882207870483398f, 0.7490673065185547f, 0.3044125437736511f, 0.03870498016476631f, 0.35971683263778687f, 0.832971453666687f, 0.5091896057128906f, 0.3818274736404419f, -0.6440456509590149f, 0.815126359462738f, 0.20231804251670837f, 0.07156716287136078f, 0.9778147339820862f, 0.8262234330177307f, 0.7340518832206726f, 0.9655183553695679f, -0.9092749357223511f, 0.4460204839706421f, 0.4179432988166809f, 0.8560643792152405f, 0.15338380634784698f, 0.1326129138469696f, 0.6110950708389282f, 0.024828461930155754f, -0.31464046239852905f, 0.7242128849029541f, 0.5769892930984497f, 0.3994029760360718f, 0.6597794890403748f, 0.8704196214675903f, 0.4986950755119324f, 0.33430054783821106f, -0.5494232177734375f, 0.036911286413669586f, 0.9186204075813293f, 0.9582767486572266f, 0.17524653673171997f, 0.8742961287498474f, 0.3619728982448578f, 0.9065584540367126f, -0.1473480463027954f, 0.8031643033027649f, 0.9551005959510803f, 0.9971603751182556f, 0.29122498631477356f, 0.3015790581703186f, 0.41901910305023193f, 0.8682383298873901f, -0.16603051126003265f, 0.8079832792282104f, 0.2317589819431305f, 0.9163298606872559f, 0.2332499623298645f, 0.1096976101398468f, 0.05831237882375717f, 0.013277648016810417f, -0.2115469127893448f, 0.8468296527862549f, 0.43238189816474915f, 0.035137441009283066f, 0.21510884165763855f, 0.862380862236023f, 0.39914262294769287f, 0.4163088798522949f, -0.593568742275238f, 0.14700177311897278f, 0.471264511346817f, 0.22358053922653198f, 0.24728165566921234f, 0.3266306519508362f, 0.8124825358390808f, 0.8504367470741272f, -0.0623805858194828f, 0.24803024530410767f, 0.3107302784919739f, 0.5678427815437317f, 0.9508113861083984f, 0.7998749613761902f, 0.20824459195137024f, 0.0691915825009346f, -0.0030001283157616854f, 0.973446249961853f, 0.5283393263816833f, 0.47510024905204773f, 0.10351225733757019f, 0.14463074505329132f, 0.8011817932128906f, 0.43579742312431335f, -0.9389875531196594f, 0.7598330974578857f, 0.9031345844268799f, 0.13101251423358917f, 0.8686633110046387f, 0.8917835354804993f, 0.4894109070301056f, 0.14055775105953217f, -0.043689366430044174f, 0.07032018899917603f, 0.8187121152877808f, 0.338199257850647f, 0.011204932816326618f, 0.033808138221502304f, 0.8145556449890137f, 0.3610766530036926f, -0.4650612473487854f, 0.40930885076522827f, 0.7364897727966309f, 0.6427884101867676f, 0.9452829360961914f, 0.15778614580631256f, 0.5223269462585449f, 0.7149247527122498f, -0.2630883455276489f, 0.9625890851020813f, 0.4104280471801758f, 0.7794525027275085f, 0.10548470169305801f, 0.051900122314691544f, 0.6943750977516174f, 0.898152768611908f, -0.20327624678611755f, 0.9176768064498901f, 0.4855738878250122f, 0.7691695094108582f, 0.26318490505218506f, 0.8144839406013489f, 0.40909454226493835f, 0.5817102789878845f, -0.12623924016952515f, 0.5742148160934448f, 0.47863060235977173f, 0.6791473031044006f, 0.050853002816438675f, 0.9832772016525269f, 0.4386647343635559f, 0.7150806784629822f, -0.6092420816421509f, 0.22811098396778107f, 0.8127638101577759f, 0.6072084903717041f, 0.43018999695777893f, 0.2826089859008789f, 0.9270129799842834f, 0.2099776417016983f, -0.2705308794975281f, 0.9884142279624939f, 0.7800859808921814f, 0.3562110960483551f, 0.8703896999359131f, 0.7632835507392883f, 0.7839793562889099f, 0.4676569700241089f, -0.42634308338165283f, 0.4729289710521698f, 0.5807268619537354f, 0.16022811830043793f, 0.3857770562171936f, 0.9597312808036804f, 0.08834881335496902f, 0.8735696077346802f, -0.3242162764072418f, 0.8027030825614929f, 0.850906252861023f, 0.1653522253036499f, 0.43750420212745667f, 0.8985570669174194f, 0.8940912485122681f, 0.15043774247169495f, -0.528403103351593f, 0.5666365623474121f, 0.6896139979362488f, 0.046846214681863785f, 0.9717269539833069f, 0.6971933245658875f, 0.94808030128479f, 0.3824125826358795f, -0.16056117415428162f, 0.40435096621513367f, 0.8369169235229492f, 0.10599829256534576f, 0.3730519711971283f, 0.9398524165153503f, 0.619877278804779f, 0.8756394386291504f, -0.5422450304031372f, 0.1476966291666031f, 0.6302582025527954f, 0.793920636177063f, 0.22789199650287628f, 0.5609076619148254f, 0.8552502989768982f, 0.4433821439743042f, -0.6831298470497131f, 0.13816849887371063f, 0.8481001853942871f, 0.9752045273780823f, 0.9076375961303711f, 0.3447949290275574f, 0.7036790251731873f, 0.21453671157360077f, -0.2031686156988144f, 0.5044258832931519f, 0.05426368862390518f, 0.9910041689872742f, 0.2688594460487366f, 0.9024494886398315f, 0.571559727191925f, 0.726797342300415f, -0.1485346406698227f, 0.291119247674942f, 0.3303695321083069f, 0.6040306091308594f, 0.791942834854126f, 0.6429239511489868f, 0.9207299947738647f, 0.1637597531080246f, -0.5278788208961487f, 0.5905609130859375f, 0.2304648607969284f, 0.8695870041847229f, 0.4586903154850006f, 0.9733479619026184f, 0.96551114320755f, 0.02003653161227703f, -0.8629605770111084f, 0.7595798969268799f, 0.7144981026649475f, 0.6002734303474426f, 0.48848623037338257f, 0.10301364958286285f, 0.6005875468254089f, 0.7039933800697327f, -0.37721964716911316f, 0.9593431949615479f, 0.7894666194915771f, 0.8660193681716919f, 0.16734257340431213f, 0.5570094585418701f, 0.10355642437934875f, 0.5770846009254456f, -0.2158138006925583f, 0.8539754152297974f, 0.8433395624160767f, 0.1836121678352356f, 0.697469174861908f, 0.3749541640281677f, 0.8782673478126526f, 0.21654196083545685f, -0.14331167936325073f, 0.24347639083862305f, 0.48533549904823303f, 0.3337908089160919f, 0.6855584383010864f, 0.4035400152206421f, 0.9079757928848267f, 0.255190908908844f, -0.16722892224788666f, 0.030605729669332504f, 0.18326495587825775f, 0.8223832249641418f, 0.5841043591499329f, 0.6408272385597229f, 0.3940642774105072f, 0.6111985445022583f, -0.1483757197856903f, 0.0926131159067154f, 0.5979411005973816f, 0.1360807716846466f, 0.13326112926006317f, 0.7680708765983582f, 0.9880064725875854f, 0.16369640827178955f, -0.03526425361633301f, 0.24155782163143158f, 0.05852965638041496f, 0.9590888619422913f, 0.0947021022439003f, 0.3635580241680145f, 0.03060334548354149f, 0.30836477875709534f, -0.39187508821487427f, 0.9821379780769348f, 0.8486870527267456f, 0.6660338044166565f, 0.8791844844818115f, 0.5916897058486938f, 0.3092421293258667f, 0.5401073694229126f, -0.24966751039028168f, 0.08762587606906891f, 0.4103367030620575f, 0.3668580949306488f, 0.6737188100814819f, 0.008303871378302574f, 0.7335066795349121f, 0.9476314783096313f, -0.23927801847457886f, 0.306719571352005f, 0.7426089644432068f, 0.035788584500551224f, 0.3932966887950897f, 0.037085745483636856f, 0.46699902415275574f, 0.5126452445983887f, -0.42996808886528015f, 0.2669537663459778f, 0.8244670629501343f, 0.7631640434265137f, 0.6531066298484802f, 0.8037121891975403f, 0.7943021655082703f, 0.10930097103118896f, -0.7050992846488953f, 0.6544656753540039f, 0.40198904275894165f, 0.9408987164497375f, 0.8484829664230347f, 0.28050297498703003f, 0.8642184734344482f, 0.3287747800350189f, -0.026252252981066704f, 0.047863755375146866f, 0.718349039554596f, 0.9159729480743408f, 0.9348608255386353f, 0.19137023389339447f, 0.4112451374530792f, 0.8288905024528503f, -0.9221642017364502f, 0.6618903279304504f, 0.17987990379333496f, 0.7350476384162903f, 0.10492391884326935f, 0.9664602875709534f, 0.923636257648468f, 0.6115944385528564f, -0.16943754255771637f, 0.4841105043888092f, 0.6562164425849915f, 0.6002822518348694f, 0.8574981093406677f, 0.05680140480399132f, 0.3454750180244446f, 0.09877746552228928f, -0.9777671694755554f, 0.7824307680130005f, 0.3119942545890808f, 0.7204636335372925f, 0.46770232915878296f, 0.8608934879302979f, 0.33079004287719727f, 0.39730626344680786f, -0.9808794260025024f, 0.9575578570365906f, 0.764287531375885f, 0.9214178919792175f, 0.0645783543586731f, 0.637495756149292f, 0.17476633191108704f, 0.37086787819862366f, -0.9540402889251709f, 0.6059510111808777f, 0.4240674376487732f, 0.38462573289871216f, 0.4129798114299774f, 0.3445202708244324f, 0.22475925087928772f, 0.21639853715896606f, -0.614102303981781f, 0.6206591725349426f, 0.18422700464725494f, 0.037218671292066574f, 0.3426142632961273f, 0.8542953729629517f, 0.8552623987197876f, 0.4799243211746216f, -0.8665962219238281f, 0.5284790992736816f, 0.2657983899116516f, 0.46096986532211304f, 0.4431825280189514f, 0.3407555818557739f, 0.2943662703037262f, 0.9749453067779541f, -0.6106230616569519f, 0.15031559765338898f, 0.2735767066478729f, 0.5009169578552246f, 0.04185577109456062f, 0.6284672617912292f, 0.8613424301147461f, 0.6911043524742126f, -0.31053563952445984f, 0.8242689967155457f, 0.9513168931007385f, 0.22983461618423462f, 0.5963698029518127f, 0.9366469979286194f, 0.3693661391735077f, 0.8335773348808289f, -0.13490818440914154f, 0.1916419416666031f, 0.7563671469688416f, 0.5913371443748474f, 0.4517519474029541f, 0.9549094438552856f, 0.400436669588089f, 0.007120038848370314f, -0.6234480142593384f, 0.8198444247245789f, 0.9470192193984985f, 0.8137956261634827f, 0.6407521963119507f, 0.16783785820007324f, 0.2121816724538803f, 0.8586876392364502f, -0.015630705282092094f, 0.9493430852890015f, 0.1972871571779251f, 0.9846910238265991f, 0.5421859622001648f, 0.19604523479938507f, 0.2829907536506653f, 0.2602098286151886f, -0.6584094762802124f, 0.5232565999031067f, 0.5083087086677551f, 0.5459232330322266f, 0.12061743438243866f, 0.4143054187297821f, 0.7747611403465271f, 0.440393328666687f, -0.15947134792804718f, 0.7917476892471313f, 0.3459492325782776f, 0.09226857870817184f, 0.27136486768722534f, 0.4433935880661011f, 0.0979754626750946f, 0.5169127583503723f, -0.19680312275886536f, 0.7958139181137085f, 0.6678001880645752f, 0.19137009978294373f, 0.31272387504577637f, 0.8000611662864685f, 0.34603556990623474f, 0.21236516535282135f, -0.01951591484248638f, 0.11235333979129791f, 0.7172214984893799f, 0.6043177843093872f, 0.42752423882484436f, 0.3481273651123047f, 0.7283365726470947f, 0.6132356524467468f, -0.16897764801979065f, 0.0007807195652276278f, 0.1438034176826477f, 0.5549272298812866f, 0.5832964181900024f, 0.03422241657972336f, 0.4584687054157257f, 0.06837344169616699f, -0.5523499846458435f, 0.8466282486915588f, 0.30135422945022583f, 0.7438450455665588f, 0.6025938391685486f, 0.8480280637741089f, 0.7256223559379578f, 0.8150515556335449f, -0.5588323473930359f, 0.007195497862994671f, 0.8671315908432007f, 0.11131683737039566f, 0.6450126767158508f, 0.8956484198570251f, 0.6190277934074402f, 0.6325774788856506f, -0.778145968914032f, 0.25655508041381836f, 0.883120059967041f, 0.4163054823875427f, 0.5753334164619446f, 0.0004436727613210678f, 0.9072431325912476f, 0.7406535744667053f, -0.12013905495405197f, 0.47450125217437744f, 0.7021308541297913f, 0.5060895085334778f, 0.032257385551929474f, 0.4837624728679657f, 0.5158998966217041f, 0.5675989985466003f, -0.24236692488193512f, 0.3509606122970581f, 0.5784316658973694f, 0.8093425631523132f, 0.21853883564472198f, 0.06732476502656937f, 0.9311267137527466f, 0.7855325937271118f, -0.7652977705001831f, 0.9290730357170105f, 0.5731335282325745f, 0.12641271948814392f, 0.7028603553771973f, 0.6555680632591248f, 0.015854788944125175f, 0.9510052800178528f, -0.8723262548446655f, 0.15983085334300995f, 0.6991053223609924f, 0.18340753018856049f, 0.5320146679878235f, 0.3676303029060364f, 0.1894747018814087f, 0.18967962265014648f, -0.264847069978714f, 0.3868672549724579f, 0.11301529407501221f, 0.4060649275779724f, 0.8285214304924011f, 0.14288757741451263f, 0.5849402546882629f, 0.5220959186553955f, -0.540616512298584f, 0.9478784799575806f, 0.22253596782684326f, 0.13461834192276f, 0.8671337366104126f, 0.38491952419281006f, 0.8836873769760132f, 0.4789375066757202f, -0.7191035747528076f, 0.2809041440486908f, 0.07972310483455658f, 0.2783695459365845f, 0.7586045265197754f, 0.8100262880325317f, 0.8371826410293579f, 0.9719767570495605f, -0.9536291360855103f, 0.21521079540252686f, 0.09705490618944168f, 0.5819005966186523f, 0.6544351577758789f, 0.17734123766422272f, 0.9347724318504333f, 0.6856690049171448f, -0.4808816611766815f, 0.5286885499954224f, 0.6312552094459534f, 0.23589633405208588f, 0.3516086935997009f, 0.47821998596191406f, 0.5942447185516357f, 0.7837762832641602f, -0.0028282874263823032f, 0.34578680992126465f, 0.26758307218551636f, 0.18734155595302582f, 0.3033086955547333f, 0.15865373611450195f, 0.8444427251815796f, 0.7945296764373779f, -0.4804210066795349f, 0.7446842789649963f, 0.7228865027427673f, 0.7835599780082703f, 0.8287546038627625f, 0.33612367510795593f, 0.4810352623462677f, 0.25345560908317566f, -0.5431295037269592f, 0.7505230903625488f, 0.8888880610466003f, 0.6596397161483765f, 0.6339181661605835f, 0.8886434435844421f, 0.6925287246704102f, 0.7108995318412781f, -0.02794043906033039f, 0.3630233705043793f, 0.42593732476234436f, 0.36977607011795044f, 0.43634068965911865f, 0.6468888521194458f, 0.09753118455410004f, 0.3704761564731598f, -0.061140164732933044f, 0.26813870668411255f, 0.6115847826004028f, 0.5733893513679504f, 0.2678569257259369f, 0.4990190863609314f, 0.008216685615479946f, 0.5929709076881409f, -0.1570836901664734f, 0.0878911092877388f, 0.44015374779701233f, 0.9811526536941528f, 0.2434125393629074f, 0.5904507637023926f, 0.17357780039310455f, 0.8268932700157166f, -0.3981982171535492f, 0.928022027015686f, 0.7339058518409729f, 0.4310677647590637f, 0.27031803131103516f, 0.6993693113327026f, 0.3484872281551361f, 0.7740830779075623f, -0.8655160665512085f, 0.957706868648529f, 0.4490482211112976f, 0.5937590003013611f, 0.8412298560142517f, 0.5492183566093445f, 0.370606929063797f, 0.19431941211223602f, -0.2576330006122589f, 0.42992645502090454f, 0.16684159636497498f, 0.7566408514976501f, 0.9117031097412109f, 0.4201661944389343f, 0.011296657845377922f, 0.06720510125160217f, -0.7945694327354431f, 0.10713465511798859f, 0.8175801634788513f, 0.36869341135025024f, 0.5168217420578003f, 0.362461119890213f, 0.468130886554718f, 0.1675601750612259f, -0.6160256266593933f, 0.3058377206325531f, 0.6660053133964539f, 0.24635933339595795f, 0.32792162895202637f, 0.7708541750907898f, 0.9089305400848389f, 0.20351362228393555f, -0.7260991930961609f, 0.3007170855998993f, 0.3671262860298157f, 0.10861140489578247f, 0.4469834566116333f, 0.17466488480567932f, 0.3839651048183441f, 0.08765369653701782f, -0.6973205804824829f, 0.049962155520915985f, 0.42958658933639526f, 0.17866723239421844f, 0.07704882323741913f, 0.18417099118232727f, 0.3096950054168701f, 0.6340022683143616f, -0.08643634617328644f, 0.6609523892402649f, 0.7561352252960205f, 0.9487353563308716f, 0.10582276433706284f, 0.19454024732112885f, 0.8618329167366028f, 0.3238889276981354f, -0.35787057876586914f, 0.16376474499702454f, 0.23149868845939636f, 0.3619537055492401f, 0.3249804675579071f, 0.38776740431785583f, 0.05196923017501831f, 0.27591264247894287f, -0.7432647943496704f, 0.024910686537623405f, 0.7278044819831848f, 0.054502494633197784f, 0.2029266655445099f, 0.1642407327890396f, 0.9041558504104614f, 0.1894010752439499f, -0.8175778388977051f, 0.23293599486351013f, 0.5635069012641907f, 0.4335537254810333f, 0.2249782234430313f, 0.04058610275387764f, 0.4456125795841217f, 0.29313144087791443f, -0.294070303440094f, 0.32607653737068176f, 0.4160915017127991f, 0.4150952100753784f, 0.29006046056747437f, 0.2768794298171997f, 0.45414695143699646f, 0.0949375182390213f, -0.8960700631141663f, 0.5318973660469055f, 0.5304868221282959f, 0.16135123372077942f, 0.08520647883415222f, 0.8060282468795776f, 0.5889759063720703f, 0.7140882015228271f, -0.18520639836788177f, 0.9179180860519409f, 0.15459908545017242f, 0.1288103610277176f, 0.40690943598747253f, 0.11654497683048248f, 0.2654067277908325f, 0.9502845406532288f, -0.37992095947265625f, 0.892758309841156f, 0.499534547328949f, 0.12326978147029877f, 0.0474139079451561f, 0.14402282238006592f, 0.7819344401359558f, 0.5695631504058838f, -0.825009286403656f, 0.5711237192153931f, 0.8109490275382996f, 0.7128321528434753f, 0.5639234781265259f, 0.9191305041313171f, 0.8855945467948914f, 0.08575396239757538f, -0.23220109939575195f, 0.9099938273429871f, 0.595970630645752f, 0.40018072724342346f, 0.9046453833580017f, 0.6982000470161438f, 0.6012982726097107f, 0.05934341251850128f, -0.13325326144695282f, 0.6097130179405212f, 0.45702019333839417f, 0.4787065088748932f, 0.27978280186653137f, 0.30983105301856995f, 0.7426313757896423f, 0.8115976452827454f, -0.9401743412017822f, 0.09439300000667572f, 0.902269721031189f, 0.9668793082237244f, 0.6574303507804871f, 0.4414519667625427f, 0.38905027508735657f, 0.6170127391815186f, -0.8276174664497375f, 0.2788861095905304f, 0.6595304608345032f, 0.14441385865211487f, 0.05910181254148483f, 0.5633865594863892f, 0.888672947883606f, 0.6890159249305725f, -0.23771004378795624f, 0.9604065418243408f, 0.5221973657608032f, 0.4640384614467621f, 0.7013182640075684f, 0.7953991889953613f, 0.10175934433937073f, 0.9994770884513855f, -0.40792953968048096f, 0.4436379671096802f, 0.3647324740886688f, 0.055800437927246094f, 0.24418525397777557f, 0.6709725260734558f, 0.8084666132926941f, 0.35558807849884033f, -0.8831319212913513f, 0.5389668345451355f, 0.505882740020752f, 0.4420241713523865f, 0.07421953231096268f, 0.20656582713127136f, 0.5984596610069275f, 0.9260271787643433f, -0.6422170996665955f, 0.10111727565526962f, 0.5609521865844727f, 0.7642567157745361f, 0.7017594575881958f, 0.08325769752264023f, 0.7879993319511414f, 0.29322507977485657f, -0.9602352380752563f, 0.8413697481155396f, 0.2925180196762085f, 0.016499435529112816f, 0.8392943739891052f, 0.5716274976730347f, 0.5651977062225342f, 0.8037294149398804f, -0.9647114276885986f, 0.8615687489509583f, 0.30786800384521484f, 0.729218065738678f, 0.7056022882461548f, 0.45981577038764954f, 0.9565243124961853f, 0.05856209993362427f, -0.31916967034339905f, 0.4864477813243866f, 0.7622712850570679f, 0.19807212054729462f, 0.06423472613096237f, 0.9996717572212219f, 0.49248942732810974f, 0.8476677536964417f, -0.03690696135163307f, 0.797228217124939f, 0.7572812438011169f, 0.8083889484405518f, 0.5746069550514221f, 0.8134636878967285f, 0.20753532648086548f, 0.039043791592121124f, -0.9919372797012329f, 0.8512485027313232f, 0.27259430289268494f, 0.17635470628738403f, 0.2012537121772766f, 0.1969720870256424f, 0.6005719900131226f, 0.06718020886182785f, -0.12691427767276764f, 0.6226237416267395f, 0.17205829918384552f, 0.6205074787139893f, 0.8000485301017761f, 0.44026073813438416f, 0.351555198431015f, 0.23691575229167938f, -0.7048572301864624f, 0.4720473289489746f, 0.6457710862159729f, 0.28823649883270264f, 0.1272784024477005f, 0.11286032199859619f, 0.01569163240492344f, 0.7989340424537659f, -0.390990674495697f, 0.48098400235176086f, 0.9359906911849976f, 0.201895609498024f, 0.3477218449115753f, 0.580519437789917f, 0.6623498797416687f, 0.32896479964256287f, -0.006828047800809145f, 0.5393872857093811f, 0.5537377595901489f, 0.30913522839546204f, 0.9677290320396423f, 0.5004886388778687f, 0.3512107729911804f, 0.39091622829437256f, -0.24035683274269104f, 0.9310444593429565f, 0.467054545879364f, 0.2927834093570709f, 0.7007496356964111f, 0.4921973943710327f, 0.9037297368049622f, 0.33610838651657104f, -0.7542761564254761f, 0.8763344287872314f, 0.8870048522949219f, 0.974881112575531f, 0.6235992908477783f, 0.7423232197761536f, 0.06314639002084732f, 0.7477278113365173f, -0.3578687906265259f, 0.6062124967575073f, 0.09227955341339111f, 0.603508710861206f, 0.8409155011177063f, 0.13906161487102509f, 0.041837889701128006f, 0.08982342481613159f, -0.41574543714523315f, 0.9674440622329712f, 0.07284131646156311f, 0.4670821726322174f, 0.18993085622787476f, 0.649562418460846f, 0.7581999897956848f, 0.5251166224479675f, -0.27706465125083923f, 0.9805639982223511f, 0.8455171585083008f, 0.9363960027694702f, 0.11207371205091476f, 0.8577340841293335f, 0.12147458642721176f, 0.005086296238005161f, -0.777409553527832f, 0.5466611981391907f, 0.005985919386148453f, 0.07415121793746948f, 0.3858410716056824f, 0.4239594638347626f, 0.2826186418533325f, 0.8391445875167847f, -0.09688737243413925f, 0.6800577044487f, 0.851786732673645f, 0.08938092738389969f, 0.7576434016227722f, 0.5456912517547607f, 0.625384509563446f, 0.008736819960176945f, -0.9538983702659607f, 0.41681769490242004f, 0.821410059928894f, 0.8772037029266357f, 0.24860838055610657f, 0.8712560534477234f, 0.021311543881893158f, 0.04841886833310127f, -0.19568851590156555f, 0.335456520318985f, 0.7782842516899109f, 0.15578711032867432f, 0.6024556756019592f, 0.22544775903224945f, 0.2724454998970032f, 0.06550893932580948f, -0.775434672832489f, 0.7981260418891907f, 0.9890965819358826f, 0.16313914954662323f, 0.36868777871131897f, 0.6786972284317017f, 0.10003024339675903f, 0.8531438112258911f, -0.9204910397529602f, 0.5797150731086731f, 0.941853404045105f, 0.44475042819976807f, 0.5295396447181702f, 0.6624387502670288f, 0.6775606870651245f, 0.3526791036128998f, -0.48815858364105225f, 0.8355444669723511f, 0.5006981492042542f, 0.04803542420268059f, 0.7302091717720032f, 0.893435001373291f, 0.8712852597236633f, 0.44158926606178284f, -0.3279225826263428f, 0.9028953909873962f, 0.17561157047748566f, 0.3595573604106903f, 0.8873624205589294f, 0.25483280420303345f, 0.26132330298423767f, 0.9971845149993896f, -0.46782103180885315f, 0.917307436466217f, 0.014052903279662132f, 0.15234537422657013f, 0.9756497144699097f, 0.4478117823600769f, 0.11080148071050644f, 0.877007007598877f, -0.3772326111793518f, 0.6473819017410278f, 0.07021810859441757f, 0.6097720861434937f, 0.7620729207992554f, 0.13854262232780457f, 0.3624125123023987f, 0.8671474456787109f, -0.9701396226882935f, 0.5230612754821777f, 0.5388169884681702f, 0.8580335974693298f, 0.09689515829086304f, 0.6318455338478088f, 0.9267210364341736f, 0.9615128040313721f, -0.959266722202301f, 0.0766434520483017f, 0.8419438004493713f, 0.4925040602684021f, 0.05540134012699127f, 0.47638094425201416f, 0.16862599551677704f, 0.33895689249038696f, -0.4905138909816742f, 0.4564109742641449f, 0.3262558877468109f, 0.2978368401527405f, 0.8848337531089783f, 0.48985525965690613f, 0.14643418788909912f, 0.3479549288749695f, -0.9280268549919128f, 0.6502623558044434f, 0.3208962380886078f, 0.5999391078948975f, 0.5003381967544556f, 0.0060300747863948345f, 0.5955868363380432f, 0.45818522572517395f, -0.8960708975791931f, 0.588397204875946f, 0.5281157493591309f, 0.8958699703216553f, 0.9707770943641663f, 0.5734916925430298f, 0.27753719687461853f, 0.4620599150657654f, -0.315616637468338f, 0.7538094520568848f, 0.5513851642608643f, 0.4332631826400757f, 0.2375941127538681f, 0.1962735652923584f, 0.8229369521141052f, 0.4605933129787445f, -0.40803155303001404f, 0.15894421935081482f, 0.3520931005477905f, 0.6446044445037842f, 0.5019424557685852f, 0.0005880011012777686f, 0.16899260878562927f, 0.22857969999313354f, -0.6977784037590027f, 0.2931480407714844f, 0.15944501757621765f, 0.5441648364067078f, 0.30384716391563416f, 0.5889105796813965f, 0.48712068796157837f, 0.695157527923584f, -0.8770695328712463f, 0.5658621191978455f, 0.7606198191642761f, 0.8443379998207092f, 0.18922095000743866f, 0.11988980323076248f, 0.029513487592339516f, 0.37818044424057007f, -0.21439465880393982f, 0.7057740688323975f, 0.11636488139629364f, 0.4743667542934418f, 0.7787714600563049f, 0.46896234154701233f, 0.58470618724823f, 0.6723648309707642f, -0.7903940081596375f, 0.08876622468233109f, 0.029203573241829872f, 0.6110236048698425f, 0.8662855625152588f, 0.7182940244674683f, 0.4150349497795105f, 0.940092146396637f, -0.5570651888847351f, 0.885570228099823f, 0.2115577906370163f, 0.4162774085998535f, 0.46361079812049866f, 0.925413191318512f, 0.3009278178215027f, 0.23521754145622253f, -0.7965640425682068f, 0.7042579650878906f, 0.9185214638710022f, 0.7319431900978088f, 0.037859957665205f, 0.2852255403995514f, 0.9977867007255554f, 0.36928611993789673f, -0.8882667422294617f, 0.5523806810379028f, 0.3809061348438263f, 0.45396164059638977f, 0.9189316034317017f, 0.41825172305107117f, 0.53425532579422f, 0.5080647468566895f, -0.9667157530784607f, 0.042457323521375656f, 0.4640943109989166f, 0.13027676939964294f, 0.953005850315094f, 0.6437437534332275f, 0.741248607635498f, 0.2161075323820114f, -0.7917523980140686f, 0.25458934903144836f, 0.25780242681503296f, 0.18959882855415344f, 0.26390504837036133f, 0.022748680785298347f, 0.7968881130218506f, 0.5397112369537354f, -0.47252798080444336f, 0.8698082566261292f, 0.42042285203933716f, 0.8936896920204163f, 0.33602553606033325f, 0.005797917488962412f, 0.18484480679035187f, 0.8019466400146484f, -0.006403063423931599f, 0.6985098719596863f, 0.5629191994667053f, 0.2983896732330322f, 0.35308220982551575f, 0.9390084743499756f, 0.42216062545776367f, 0.4447689652442932f, -0.2983892858028412f, 0.9272488951683044f, 0.464118629693985f, 0.048607487231492996f, 0.1921876221895218f, 0.6554802656173706f, 0.21687519550323486f, 0.5496929287910461f, -0.6532245874404907f, 0.35411471128463745f, 0.6865168213844299f, 0.19027289748191833f, 0.7401288747787476f, 0.42726802825927734f, 0.06870941817760468f, 0.9844107627868652f, -0.301838219165802f, 0.9662032127380371f, 0.665595531463623f, 0.22128146886825562f, 0.8404145836830139f, 0.23165129125118256f, 0.8271008729934692f, 0.016781020909547806f, -0.7162794470787048f, 0.8377975225448608f, 0.6728551983833313f, 0.9202358722686768f, 0.6332002878189087f, 0.313384473323822f, 0.7873887419700623f, 0.31341302394866943f, -0.687384307384491f, 0.016673728823661804f, 0.14871083199977875f, 0.36502307653427124f, 0.5801568031311035f, 0.4414828419685364f, 0.4232623875141144f, 0.4503571391105652f, -0.7295133471488953f, 0.819192111492157f, 0.6401433944702148f, 0.713934063911438f, 0.07384061813354492f, 0.48457324504852295f, 0.5643014311790466f, 0.528032124042511f, -0.1428811252117157f, 0.11187805980443954f, 0.1403973549604416f, 0.49143558740615845f, 0.3980911076068878f, 0.7849522829055786f, 0.6521505117416382f, 0.36232495307922363f, -0.04486144334077835f, 0.5008663535118103f, 0.04317556694149971f, 0.43987569212913513f, 0.6534513235092163f, 0.70079106092453f, 0.8714777231216431f, 0.21534359455108643f, -0.9284048080444336f, 0.09178569912910461f, 0.8439619541168213f, 0.42126327753067017f, 0.7092680335044861f, 0.31877195835113525f, 0.08364274352788925f, 0.41250020265579224f, -0.3058212995529175f, 0.1579694002866745f, 0.651192843914032f, 0.9922699928283691f, 0.42213869094848633f, 0.509020984172821f, 0.8722463846206665f, 0.10834624618291855f, -0.27852627635002136f, 0.8734190464019775f, 0.5996342301368713f, 0.3827619254589081f, 0.21240253746509552f, 0.31473425030708313f, 0.23572967946529388f, 0.7288532853126526f, -0.35592952370643616f, 0.9910255670547485f, 0.5624173283576965f, 0.7986860275268555f, 0.8721681833267212f, 0.04341331124305725f, 0.6723489761352539f, 0.7330877184867859f, -0.027753809466958046f, 0.5303154587745667f, 0.907764196395874f, 0.6288213729858398f, 0.018108341842889786f, 0.38042017817497253f, 0.5746011734008789f, 0.27893897891044617f, -0.7212968468666077f, 0.2031823843717575f, 0.4648122787475586f, 0.01892554573714733f, 0.9026064872741699f, 0.6462382078170776f, 0.5934491157531738f, 0.3724883794784546f, -0.39381974935531616f, 0.8607680201530457f, 0.17299433052539825f, 0.19371236860752106f, 0.5544094443321228f, 0.7520345449447632f, 0.6458931565284729f, 0.6086829304695129f, -0.5895572304725647f, 0.9672800302505493f, 0.9551965594291687f, 0.8923064470291138f, 0.9591186046600342f, 0.05334797129034996f, 0.24469879269599915f, 0.1235688254237175f, -0.31784653663635254f, 0.5744257569313049f, 0.8119767308235168f, 0.23331806063652039f, 0.39811214804649353f, 0.05423199385404587f, 0.9306347370147705f, 0.7167654037475586f, -0.34510183334350586f, 0.917849600315094f, 0.35431280732154846f, 0.8188804984092712f, 0.964927613735199f, 0.46997854113578796f, 0.2915675938129425f, 0.8067923188209534f, -0.6194761395454407f, 0.45159783959388733f, 0.7550687193870544f, 0.2997559607028961f, 0.1810096800327301f, 0.46546170115470886f, 0.5410165786743164f, 0.47659066319465637f, -0.6997564435005188f, 0.3801865875720978f, 0.5688121318817139f, 0.3222130239009857f, 0.3910089135169983f, 0.6743937730789185f, 0.009039776399731636f, 0.07005223631858826f, -0.7524133324623108f, 0.7019193172454834f, 0.45754358172416687f, 0.25336501002311707f, 0.7497686743736267f, 0.42347317934036255f, 0.2236919403076172f, 0.8446716666221619f, -0.21357561647891998f, 0.2110658586025238f, 0.839157223701477f, 0.37911880016326904f, 0.8714489936828613f, 0.484927237033844f, 0.1589733213186264f, 0.5603060126304626f, -0.81361985206604f, 0.8381986021995544f, 0.5425510406494141f, 0.21851035952568054f, 0.013197490014135838f, 0.5946494936943054f, 0.6703346967697144f, 0.8237929344177246f, -0.17843955755233765f, 0.524376392364502f, 0.2063877135515213f, 0.3985165059566498f, 0.29280707240104675f, 0.4187224805355072f, 0.05762545019388199f, 0.31962335109710693f, -0.9393342733383179f, 0.5467918515205383f, 0.5924311876296997f, 0.7612255811691284f, 0.2235499769449234f, 0.3560076951980591f, 0.4695352613925934f, 0.564106285572052f, -0.29715496301651f, 0.37018418312072754f, 0.8002182245254517f, 0.18081752955913544f, 0.021188780665397644f, 0.9509347677230835f, 0.7531132102012634f, 0.24871492385864258f, -0.8073543906211853f, 0.29048654437065125f, 0.6298215985298157f, 0.8873562216758728f, 0.23396717011928558f, 0.7049941420555115f, 0.4058549404144287f, 0.21982765197753906f, -0.6882420182228088f, 0.32096201181411743f, 0.7932183742523193f, 0.9054760932922363f, 0.5769982933998108f, 0.015562760643661022f, 0.5714678168296814f, 0.5167279839515686f, -0.3880770802497864f, 0.36475732922554016f, 0.9506531357765198f, 0.4004315733909607f, 0.6511412262916565f, 0.1764528900384903f, 0.35199692845344543f, 0.5299108624458313f, -0.4015946388244629f, 0.42158547043800354f, 0.23378881812095642f, 0.07814636081457138f, 0.08229386061429977f, 0.42553097009658813f, 0.6284298300743103f, 0.09890905022621155f, -0.334084153175354f, 0.9938621520996094f, 0.4557456374168396f, 0.7937677502632141f, 0.3199128806591034f, 0.699122965335846f, 0.874841034412384f, 0.7023957967758179f, -0.7288681864738464f, 0.937921404838562f, 0.9077147245407104f, 0.9031950831413269f, 0.6686200499534607f, 0.2172016054391861f, 0.3305816054344177f, 0.7687236070632935f, -0.5730177760124207f, 0.16394294798374176f, 0.5382833480834961f, 0.6165270805358887f, 0.8732842803001404f, 0.2568347156047821f, 0.1245109885931015f, 0.820201575756073f, -0.7139118313789368f, 0.5094449520111084f, 0.3153921663761139f, 0.37945982813835144f, 0.8925643563270569f, 0.9302091598510742f, 0.44904375076293945f, 0.45290058851242065f, -0.29857707023620605f, 0.07445666939020157f, 0.23476971685886383f, 0.6322699785232544f, 0.5286797881126404f, 0.5771235227584839f, 0.7714168429374695f, 0.33229416608810425f, -0.15878057479858398f, 0.3072812259197235f, 0.004771864507347345f, 0.15014804899692535f, 0.47915709018707275f, 0.4503422975540161f, 0.15984947979450226f, 0.528197169303894f, -0.6944226026535034f, 0.2392735332250595f, 0.2079291194677353f, 0.7462050914764404f, 0.43707823753356934f, 0.19080489873886108f, 0.053921476006507874f, 0.3878278434276581f, -0.013919860124588013f, 0.30615732073783875f, 0.36163946986198425f, 0.014963737688958645f, 0.7772631049156189f, 0.6287007331848145f, 0.21555082499980927f, 0.11786506325006485f, -0.4538213908672333f, 0.9575459957122803f, 0.02196390926837921f, 0.9561746120452881f, 0.9758824110031128f, 0.19207356870174408f, 0.5294428467750549f, 0.7882832884788513f, -0.15124282240867615f, 0.6837484240531921f, 0.6214256286621094f, 0.23394517600536346f, 0.9523361325263977f, 0.2610885202884674f, 0.9510846734046936f, 0.6741993427276611f, -0.7537277936935425f, 0.5752679705619812f, 0.3755171597003937f, 0.2785089612007141f, 0.5216704607009888f, 0.1060330718755722f, 0.8050330281257629f, 0.35784196853637695f, -0.20949161052703857f, 0.4924499988555908f, 0.06198651343584061f, 0.5829361081123352f, 0.20081165432929993f, 0.783513605594635f, 0.05829455703496933f, 0.5699390769004822f, -0.7992810606956482f, 0.5197476744651794f, 0.36447104811668396f, 0.6004897952079773f, 0.7574167251586914f, 0.7452828884124756f, 0.28765764832496643f, 0.446636825799942f, -0.7599796056747437f, 0.5378347039222717f, 0.353752464056015f, 0.025641508400440216f, 0.5140120387077332f, 0.35988718271255493f, 0.42556527256965637f, 0.632785439491272f, -0.2294287383556366f, 0.9271490573883057f, 0.14493398368358612f, 0.9758065342903137f, 0.2612832486629486f, 0.024254202842712402f, 0.0750199630856514f, 0.7842451333999634f, -0.7813973426818848f, 0.27819499373435974f, 0.2600674331188202f, 0.5624069571495056f, 0.17804567515850067f, 0.2872774004936218f, 0.07393299043178558f, 0.04890415072441101f, -0.438466876745224f, 0.24706441164016724f, 0.20919643342494965f, 0.9846710562705994f, 0.5084645748138428f, 0.9610057473182678f, 0.013509383425116539f, 0.08859146386384964f, -0.3094245493412018f, 0.05912397429347038f, 0.46369537711143494f, 0.8669695854187012f, 0.9372279644012451f, 0.7053840160369873f, 0.6908172965049744f, 0.37926799058914185f, -0.8689422607421875f, 0.624511182308197f, 0.3661941885948181f, 0.8986074328422546f, 0.68231201171875f, 0.7346780896186829f, 0.4033206105232239f, 0.8218817114830017f, -0.5291635990142822f, 0.38685840368270874f, 0.5462462306022644f, 0.7270634174346924f, 0.8918612003326416f, 0.3022889196872711f, 0.3569483458995819f, 0.23700211942195892f, -0.8632548451423645f, 0.10034217685461044f, 0.18450352549552917f, 0.39271238446235657f, 0.9879974722862244f, 0.8192734122276306f, 0.4935154616832733f, 0.09951253980398178f, -0.8644577860832214f, 0.1961018592119217f, 0.8161185383796692f, 0.6858221292495728f, 0.2680346965789795f, 0.7680106163024902f, 0.16315163671970367f, 0.6212217807769775f, -0.4953015446662903f, 0.42022421956062317f, 0.5507172346115112f, 0.22405320405960083f, 0.10397335886955261f, 0.06048613414168358f, 0.6887930631637573f, 0.4839523732662201f, -0.6424888968467712f, 0.6222468614578247f, 0.023936990648508072f, 0.28109148144721985f, 0.2810346186161041f, 0.4032692313194275f, 0.5610337257385254f, 0.548689067363739f, -0.5032067894935608f, 0.6077311038970947f, 0.735826849937439f, 0.8099501729011536f, 0.8366785049438477f, 0.5082440376281738f, 0.6271710395812988f, 0.38559868931770325f, -0.2043740451335907f, 0.5289480090141296f, 0.41118910908699036f, 0.04152604937553406f, 0.3339235484600067f, 0.25895845890045166f, 0.4773017466068268f, 0.4316120445728302f, -0.28547969460487366f, 0.20411427319049835f, 0.8362213969230652f, 0.8687147498130798f, 0.7828008532524109f, 0.15786106884479523f, 0.349984347820282f, 0.7594353556632996f, -0.7520442008972168f, 0.21110445261001587f, 0.7772567868232727f, 0.8333317041397095f, 0.35380682349205017f, 0.417817085981369f, 0.6841844916343689f, 0.021905764937400818f, -0.03142762556672096f, 0.6619466543197632f, 0.7711803913116455f, 0.6896727681159973f, 0.8923365473747253f, 0.1899297535419464f, 0.04939785972237587f, 0.1377006620168686f, -0.7915573716163635f, 0.7948986887931824f, 0.431697279214859f, 0.6876394748687744f, 0.40242305397987366f, 0.18581454455852509f, 0.589067816734314f, 0.12502016127109528f, -0.7783874273300171f, 0.05580662935972214f, 0.13766950368881226f, 0.6996622085571289f, 0.4012327194213867f, 0.4624558389186859f, 0.31660792231559753f, 0.6386673450469971f, -0.11757994443178177f, 0.3576241433620453f, 0.4381485879421234f, 0.3472304940223694f, 0.5288342833518982f, 0.5466907620429993f, 0.9438456892967224f, 0.4966447651386261f, -0.39732977747917175f, 0.6834830641746521f, 0.7520975470542908f, 0.4794718623161316f, 0.15537117421627045f, 0.18753378093242645f, 0.23241597414016724f, 0.16679149866104126f, -0.8956969976425171f, 0.4169296622276306f, 0.42402327060699463f, 0.12986330687999725f, 0.516704797744751f, 0.9983184933662415f, 0.8766866326332092f, 0.5254004597663879f, -0.18229949474334717f, 0.519529402256012f, 0.8106110692024231f, 0.2190675437450409f, 0.293265163898468f, 0.9882149696350098f, 0.0970287173986435f, 0.7939143180847168f, -0.03590642660856247f, 0.654231071472168f, 0.8346909284591675f, 0.17594796419143677f, 0.7426590919494629f, 0.9489727020263672f, 0.6425093412399292f, 0.7034870982170105f, -0.44303858280181885f, 0.458699107170105f, 0.5231644511222839f, 0.9590665698051453f, 0.05438464134931564f, 0.2575888931751251f, 0.5712770819664001f, 0.7670767307281494f, -0.8022801876068115f, 0.25766685605049133f, 0.5517154335975647f, 0.17690613865852356f, 0.5217595100402832f, 0.30311185121536255f, 0.7695974111557007f, 0.39923569560050964f, -0.9408381581306458f, 0.6150451302528381f, 0.35479921102523804f, 0.01955980807542801f, 0.9091067314147949f, 0.508545458316803f, 0.7331540584564209f, 0.24681952595710754f, -0.027548469603061676f, 0.19176556169986725f, 0.2131754755973816f, 0.3513213098049164f, 0.8434374332427979f, 0.044843584299087524f, 0.749277651309967f, 0.5971949100494385f, -0.6563888192176819f, 0.1337520033121109f, 0.6561764478683472f, 0.8985982537269592f, 0.6299064755439758f, 0.26553675532341003f, 0.4281911253929138f, 0.5844019055366516f, -0.6072609424591064f, 0.704706072807312f, 0.23820218443870544f, 0.3150549829006195f, 0.13641266524791718f, 0.29499220848083496f, 0.8804570436477661f, 0.5443235635757446f, -0.060450609773397446f, 0.7269315719604492f, 0.46310949325561523f, 0.5718327164649963f, 0.7316991686820984f, 0.842413067817688f, 0.6966978311538696f, 0.687076210975647f, -0.21482707560062408f, 0.8193702697753906f, 0.8962634205818176f, 0.09076661616563797f, 0.10109413415193558f, 0.07487205415964127f, 0.2580733597278595f, 0.3563286364078522f, -0.9165140390396118f, 0.7022191882133484f, 0.3906008005142212f, 0.4697701334953308f, 0.2962527275085449f, 0.5772793889045715f, 0.6977093815803528f, 0.1959126889705658f, -0.8439453840255737f, 0.6743677854537964f, 0.8736213445663452f, 0.3429132103919983f, 0.051263608038425446f, 0.9815855622291565f, 0.89380943775177f, 0.7659469246864319f, -0.793502151966095f, 0.47815921902656555f, 0.5613683462142944f, 0.92656409740448f, 0.2246248424053192f, 0.9869731068611145f, 0.8338152766227722f, 0.564954400062561f, -0.4085352122783661f, 0.7527989745140076f, 0.6234870553016663f, 0.682719886302948f, 0.3183470368385315f, 0.3843110501766205f, 0.6802619099617004f, 0.0433548167347908f, -0.9483103156089783f, 0.14021740853786469f, 0.001633943640626967f, 0.5368114113807678f, 0.7195616364479065f, 0.546907365322113f, 0.36175522208213806f, 0.9153832197189331f, -0.3827231228351593f, 0.395027220249176f, 0.11891374737024307f, 0.9105477929115295f, 0.46282726526260376f, 0.13788673281669617f, 0.9429676532745361f, 0.5192977786064148f, -0.4420981705188751f, 0.3639383614063263f, 0.5281979441642761f, 0.8922379612922668f, 0.5553701519966125f, 0.737011194229126f, 0.03038216568529606f, 0.4920673668384552f, -0.6192810535430908f, 0.8451806306838989f, 0.16381250321865082f, 0.05461631342768669f, 0.4945214092731476f, 0.1150321215391159f, 0.39335501194000244f, 0.8898885250091553f, -0.5455487370491028f, 0.7792816758155823f, 0.49969375133514404f, 0.6145980954170227f, 0.27819135785102844f, 0.43398144841194153f, 0.385114461183548f, 0.5295103192329407f, -0.7491922974586487f, 0.4450540542602539f, 0.20985285937786102f, 0.16426996886730194f, 0.8976882696151733f, 0.3463824689388275f, 0.8857007622718811f, 0.42829155921936035f, -0.31136512756347656f, 0.43713444471359253f, 0.5581885576248169f, 0.695438802242279f, 0.5499984622001648f, 0.752829909324646f, 0.07857808470726013f, 0.8886012434959412f, -0.05938249081373215f, 0.24815785884857178f, 0.5577279925346375f, 0.541041374206543f, 0.9604321718215942f, 0.054902590811252594f, 0.2200559377670288f, 0.4530153274536133f, -0.6575153470039368f, 0.7014409303665161f, 0.40225884318351746f, 0.6057132482528687f, 0.21141831576824188f, 0.5124315023422241f, 0.33676350116729736f, 0.7609400749206543f, -0.002623931970447302f, 0.787254273891449f, 0.44434404373168945f, 0.3847542405128479f, 0.16621513664722443f, 0.4558976888656616f, 0.6868895888328552f, 0.3149009943008423f, -0.11138653010129929f, 0.9819275140762329f, 0.22390682995319366f, 0.31434518098831177f, 0.10568612068891525f, 0.42811766266822815f, 0.09985758364200592f, 0.27160146832466125f, -0.9381162524223328f, 0.9576501846313477f, 0.878541886806488f, 0.18039779365062714f, 0.3896731436252594f, 0.9967629313468933f, 0.6185286045074463f, 0.4317064881324768f, -0.4366112947463989f, 0.3497409224510193f, 0.9906592965126038f, 0.6763800978660583f, 0.26478058099746704f, 0.3308503329753876f, 0.8653013110160828f, 0.8325827121734619f, -0.37094733119010925f, 0.5834071040153503f, 0.1398797333240509f, 0.922717273235321f, 0.04131435230374336f, 0.9848062992095947f, 0.6574929356575012f, 0.26492100954055786f, -0.11597484350204468f, 0.23797373473644257f, 0.3544784188270569f, 0.6119136810302734f, 0.7691287994384766f, 0.11463494598865509f, 0.8811596035957336f, 0.14661285281181335f, -0.6941922903060913f, 0.9708694815635681f, 0.871356725692749f, 0.5539070963859558f, 0.10876040160655975f, 0.25673598051071167f, 0.2425660938024521f, 0.5328465104103088f, -0.506695032119751f, 0.814741849899292f, 0.39064881205558777f, 0.1463872492313385f, 0.3431810140609741f, 0.5793800354003906f, 0.22160322964191437f, 0.08063546568155289f, -0.874458372592926f, 0.13019496202468872f, 0.2634768486022949f, 0.11286133527755737f, 0.8061572313308716f, 0.3190253674983978f, 0.9830909371376038f, 0.5920678377151489f, -0.09980954229831696f, 0.7341018915176392f, 0.28304460644721985f, 0.2626553475856781f, 0.2332257330417633f, 0.0746818408370018f, 0.9400532841682434f, 0.36089959740638733f, -0.8952643275260925f, 0.3689083755016327f, 0.6778759360313416f, 0.0362304262816906f, 0.5306279063224792f, 0.23075446486473083f, 0.7561749219894409f, 0.2747475504875183f, -0.11600616574287415f, 0.6870352029800415f, 0.6649971008300781f, 0.31865671277046204f, 0.788766622543335f, 0.110710509121418f, 0.6903781294822693f, 0.32969164848327637f, -0.9018299579620361f, 0.5655155181884766f, 0.16298586130142212f, 0.8308546543121338f, 0.9458458423614502f, 0.4378262758255005f, 0.24735434353351593f, 0.02661280520260334f, -0.34846562147140503f, 0.510089099407196f, 0.6606185436248779f, 0.19791878759860992f, 0.7053223848342896f, 0.015483206138014793f, 0.729307234287262f, 0.5311715602874756f, -0.9363695383071899f, 0.8167518973350525f, 0.03775252774357796f, 0.28366127610206604f, 0.3060404658317566f, 0.9876776337623596f, 0.15489540994167328f, 0.3945222795009613f, -0.17633821070194244f, 0.5667176842689514f, 0.45685872435569763f, 0.7855088114738464f, 0.6756225228309631f, 0.39293351769447327f, 0.22821010649204254f, 0.5179244875907898f, -0.27841100096702576f, 0.3158692717552185f, 0.9256234765052795f, 0.961291491985321f, 0.9573110938072205f, 0.6929764747619629f, 0.7720636129379272f, 0.31506872177124023f, -0.3884672522544861f, 0.6251557469367981f, 0.5683544278144836f, 0.010351406410336494f, 0.15512189269065857f, 0.22711043059825897f, 0.6832786202430725f, 0.31106632947921753f, -0.7151873111724854f, 0.4496996998786926f, 0.7230236530303955f, 0.917670726776123f, 0.2188187539577484f, 0.5169369578361511f, 0.26073548197746277f, 0.3430219888687134f, -0.5252808928489685f, 0.5002608299255371f, 0.9483919143676758f, 0.5088211297988892f, 0.8662546277046204f, 0.9540798664093018f, 0.9607253074645996f, 0.1270977109670639f, -0.9082531929016113f, 0.6904487013816833f, 0.3088904917240143f, 0.47654059529304504f, 0.9422359466552734f, 0.13840465247631073f, 0.494537889957428f, 0.48051756620407104f, -0.25789329409599304f, 0.8581072092056274f, 0.1763962209224701f, 0.15158960223197937f, 0.07572829723358154f, 0.17649705708026886f, 0.08357001096010208f, 0.8953366875648499f, -0.9302242398262024f, 0.07039134204387665f, 0.3220342993736267f, 0.1815095990896225f, 0.4975452125072479f, 0.0053161028772592545f, 0.01700383797287941f, 0.429565966129303f, -0.5525976419448853f, 0.4975135326385498f, 0.41740527749061584f, 0.8733388781547546f, 0.3038650155067444f, 0.7210375666618347f, 0.31007811427116394f, 0.2448042929172516f, -0.4687861204147339f, 0.326163649559021f, 0.28952255845069885f, 0.32630595564842224f, 0.4215506613254547f, 0.7828609943389893f, 0.17943081259727478f, 0.7302614450454712f, -0.47123220562934875f, 0.028099527582526207f, 0.4910396635532379f, 0.5455614328384399f, 0.21304059028625488f, 0.9984355568885803f, 0.9440119862556458f, 0.787112832069397f, -0.34748348593711853f, 0.0069352444261312485f, 0.3573015332221985f, 0.7758439779281616f, 0.8687597513198853f, 0.17037153244018555f, 0.1864287406206131f, 0.9057275056838989f, -0.6272719502449036f, 0.5055411458015442f, 0.8275873064994812f, 0.35738658905029297f, 0.5007798671722412f, 0.7571007609367371f, 0.5193693041801453f, 0.30464616417884827f, -0.6029821038246155f, 0.43667033314704895f, 0.22273318469524384f, 0.5706658959388733f, 0.23196150362491608f, 0.9074828624725342f, 0.6262467503547668f, 0.06631328165531158f, -0.4891640841960907f, 0.4734813868999481f, 0.7874967455863953f, 0.37754911184310913f, 0.18371014297008514f, 0.2734706997871399f, 0.9941938519477844f, 0.24390389025211334f, -0.5335838198661804f, 0.934577226638794f, 0.6275895833969116f, 0.9307780265808105f, 0.9087885022163391f, 0.4412190914154053f, 0.727721095085144f, 0.18447084724903107f, -0.1939249038696289f, 0.9297860860824585f, 0.7434849143028259f, 0.20691972970962524f, 0.1200232207775116f, 0.46895861625671387f, 0.05578979477286339f, 0.6992902159690857f, -0.5069512128829956f, 0.38133662939071655f, 0.9221917986869812f, 0.877936840057373f, 0.23873549699783325f, 0.8565439581871033f, 0.5632796883583069f, 0.8793394565582275f, -0.9022432565689087f, 0.40463390946388245f, 0.4349292814731598f, 0.3357975482940674f, 0.7849439978599548f, 0.32500824332237244f, 0.5199988484382629f, 0.6115589737892151f, -0.0602620430290699f, 0.3542635142803192f, 0.7380070686340332f, 0.6618144512176514f, 0.7885358333587646f, 0.5714982748031616f, 0.2663276791572571f, 0.02826499566435814f, -0.737094521522522f, 0.26761913299560547f, 0.671829342842102f, 0.9815012812614441f, 0.43861380219459534f, 0.9023682475090027f, 0.8033406734466553f, 0.22455643117427826f, -0.3958321809768677f, 0.20763786137104034f, 0.5151225328445435f, 0.7464066743850708f, 0.6030444502830505f, 0.6293289661407471f, 0.24433103203773499f, 0.9058398604393005f, -0.5385536551475525f, 0.07813426107168198f, 0.5206442475318909f, 0.5202904939651489f, 0.31846168637275696f, 0.41914278268814087f, 0.6483868956565857f, 0.8742100596427917f, -0.6814498901367188f, 0.7082277536392212f, 0.45221400260925293f, 0.2972877025604248f, 0.7573525309562683f, 0.000741895753890276f, 0.8881750702857971f, 0.14976945519447327f, -0.37558144330978394f, 0.32184287905693054f, 0.891034722328186f, 0.536866307258606f, 0.08162840455770493f, 0.3229975700378418f, 0.5223709344863892f, 0.9021024703979492f, -0.7541704177856445f, 0.8695661425590515f, 0.3870810270309448f, 0.5286975502967834f, 0.7945801019668579f, 0.8205519914627075f, 0.17402473092079163f, 0.37576523423194885f, -0.9669231176376343f, 0.6300644874572754f, 0.47777512669563293f, 0.18026697635650635f, 0.6568112969398499f, 0.06698346883058548f, 0.8207373023033142f, 0.5928742289543152f, -0.23265349864959717f, 0.8355854749679565f, 0.340948224067688f, 0.6949176788330078f, 0.40291255712509155f, 0.4013975262641907f, 0.049074433743953705f, 0.5100562572479248f, -0.665803074836731f, 0.1674608737230301f, 0.06499425321817398f, 0.8440216779708862f, 0.055205658078193665f, 0.5539998412132263f, 0.8458644151687622f, 0.3812442421913147f, -0.3138316869735718f, 0.6215265393257141f, 0.6533716320991516f, 0.687853991985321f, 0.07401978224515915f, 0.6373162269592285f, 0.35556846857070923f, 0.6401655077934265f, -0.21045248210430145f, 0.7251916527748108f, 0.09030341356992722f, 0.25697416067123413f, 0.8982492089271545f, 0.9273892641067505f, 0.10523977875709534f, 0.2123071700334549f, -0.19891436398029327f, 0.15915364027023315f, 0.22968535125255585f, 0.16203923523426056f, 0.33113425970077515f, 0.860472559928894f, 0.3150220215320587f, 0.9804961085319519f, -0.742922842502594f, 0.8877488374710083f, 0.9949294924736023f, 0.3895074725151062f, 0.43939128518104553f, 0.18984480202198029f, 0.07485751062631607f, 0.052860554307699203f, -0.4665171504020691f, 0.14249634742736816f, 0.3371061682701111f, 0.46702998876571655f, 0.427093505859375f, 0.5266253352165222f, 0.0027094914112240076f, 0.6133628487586975f, -0.8140490651130676f, 0.22354580461978912f, 0.7162416577339172f, 0.7619525790214539f, 0.4910588264465332f, 0.9274623990058899f, 0.11726661771535873f, 0.5688713192939758f, -0.8479056358337402f, 0.5001158118247986f, 0.5974639058113098f, 0.5103623270988464f, 0.5022873878479004f, 0.9863380193710327f, 0.5371313095092773f, 0.7928696870803833f, -0.552036464214325f, 0.9143516421318054f, 0.06309547275304794f, 0.45360639691352844f, 0.04920996353030205f, 0.5736982822418213f, 0.9347835183143616f, 0.28962424397468567f, -0.9405979514122009f, 0.20340755581855774f, 0.7123169898986816f, 0.11732089519500732f, 0.7307777404785156f, 0.14530494809150696f, 0.8770613074302673f, 0.5008115172386169f, -0.1351395696401596f, 0.9122150540351868f, 0.6631205677986145f, 0.17364118993282318f, 0.08954296261072159f, 0.9581142067909241f, 0.0853218287229538f, 0.43068721890449524f, -0.6048358082771301f, 0.3396341800689697f, 0.19706608355045319f, 0.4319184720516205f, 0.12978917360305786f, 0.965814471244812f, 0.03732839226722717f, 0.26827341318130493f, -0.5981792211532593f, 0.6947371363639832f, 0.5086496472358704f, 0.9371224045753479f, 0.33626672625541687f, 0.6894577145576477f, 0.713952898979187f, 0.1306091696023941f, -0.41330409049987793f, 0.554049015045166f, 0.8499497175216675f, 0.7386609315872192f, 0.2526480257511139f, 0.5337377786636353f, 0.4095727503299713f, 0.2042350172996521f, -0.553290069103241f, 0.3659498691558838f, 0.19935813546180725f, 0.03068723902106285f, 0.31834080815315247f, 0.8882123827934265f, 0.9682662487030029f, 0.6368489861488342f, -0.49576178193092346f, 0.5142051577568054f, 0.4999999701976776f, 0.25200048089027405f, 0.30076363682746887f, 0.2365446835756302f, 0.8036765456199646f, 0.006295120343565941f, -0.6144669651985168f, 0.2709770202636719f, 0.38424041867256165f, 0.861217200756073f, 0.04452473297715187f, 0.8043332695960999f, 0.4212493598461151f, 0.40234073996543884f, -0.5895678997039795f, 0.14238838851451874f, 0.9999411106109619f, 0.11450711637735367f, 0.7312193512916565f, 0.24929256737232208f, 0.2557062804698944f, 0.6629925966262817f, -0.9936120510101318f, 0.8076635003089905f, 0.3923196792602539f, 0.5793879628181458f, 0.7255958914756775f, 0.3490178883075714f, 0.11402987688779831f, 0.47573477029800415f, -0.9488546252250671f, 0.6186788082122803f, 0.43683749437332153f, 0.1669970154762268f, 0.6312261819839478f, 0.91799396276474f, 0.43296298384666443f, 0.9174354076385498f, -0.479966938495636f, 0.14644506573677063f, 0.9386062622070312f, 0.3956495225429535f, 0.9755584597587585f, 0.537102222442627f, 0.7285752892494202f, 0.14323589205741882f, -0.7121624946594238f, 0.5007195472717285f, 0.1194005087018013f, 0.6056972742080688f, 0.1803838312625885f, 0.21512092649936676f, 0.9687042832374573f, 0.24446307122707367f, -0.3642323911190033f, 0.6233661770820618f, 0.010078049264848232f, 0.32727664709091187f, 0.2460496872663498f, 0.7177734971046448f, 0.39088013768196106f, 0.4389841556549072f, -0.16012337803840637f, 0.8151618838310242f, 0.7724827527999878f, 0.9668436050415039f, 0.23556889593601227f, 0.9719751477241516f, 0.4838482737541199f, 0.5158620476722717f, -0.06592462956905365f, 0.8640786409378052f, 0.8413878679275513f, 0.8530436754226685f, 0.054849233478307724f, 0.9378336071968079f, 0.1556609719991684f, 0.844078540802002f, -0.7455325722694397f, 0.19149333238601685f, 0.8661167025566101f, 0.2248932421207428f, 0.20376121997833252f, 0.743365466594696f, 0.7555328011512756f, 0.4222249686717987f, -0.783130943775177f, 0.6351322531700134f, 0.09192739427089691f, 0.05627827346324921f, 0.23579815030097961f, 0.3951568305492401f, 0.3606903553009033f, 0.538030207157135f, -0.7250666618347168f, 0.8718292713165283f, 0.6816357970237732f, 0.690772533416748f, 0.13263697922229767f, 0.32917311787605286f, 0.6919572353363037f, 0.2498437613248825f, -0.09248274564743042f, 0.48562687635421753f, 0.9482704401016235f, 0.9722994565963745f, 0.28270378708839417f, 0.28546103835105896f, 0.04061080515384674f, 0.9876853823661804f, -0.9136654138565063f, 0.4515925347805023f, 0.7209182381629944f, 0.5738859176635742f, 0.8653941750526428f, 0.2055852711200714f, 0.06760063767433167f, 0.2807345986366272f, -0.2656155824661255f, 0.2975560128688812f, 0.6951726078987122f, 0.7102617621421814f, 0.04041780158877373f, 0.03407792001962662f, 0.3995710611343384f, 0.6639994978904724f, -0.5864810943603516f, 0.3664812743663788f, 0.25849074125289917f, 0.49844297766685486f, 0.6389498114585876f, 0.8603463172912598f, 0.5697274804115295f, 0.4909147322177887f, -0.21347825229167938f, 0.37760746479034424f, 0.1405654102563858f, 0.7122565507888794f, 0.8190663456916809f, 0.956986129283905f, 0.8629456162452698f, 0.9217292070388794f, -0.5896527767181396f, 0.9397359490394592f, 0.03178047761321068f, 0.6395322680473328f, 0.6816725134849548f, 0.9364096522331238f, 0.8864309787750244f, 0.807066798210144f, -0.39713552594184875f, 0.716648280620575f, 0.08248725533485413f, 0.8960592150688171f, 0.029047297313809395f, 0.33672410249710083f, 0.08406410366296768f, 0.28328973054885864f, -0.27183496952056885f, 0.6094937920570374f, 0.31659558415412903f, 0.1950758993625641f, 0.5862370729446411f, 0.5347118973731995f, 0.7560182809829712f, 0.24155277013778687f, -0.8588567972183228f, 0.94813072681427f, 0.48589569330215454f, 0.8434963822364807f, 0.4146095812320709f, 0.18755429983139038f, 0.937013566493988f, 0.28685134649276733f, -0.4017999470233917f, 0.6669312119483948f, 0.9203083515167236f, 0.010830587707459927f, 0.4340304434299469f, 0.3352009057998657f, 0.06686212867498398f, 0.9448174238204956f, -0.38983598351478577f, 0.508368194103241f, 0.1460852324962616f, 0.9735545516014099f, 0.7871547341346741f, 0.5996699929237366f, 0.09596436470746994f, 0.4561861753463745f, -0.5358930826187134f, 0.489337295293808f, 0.8758570551872253f, 0.8669699430465698f, 0.917443573474884f, 0.8102179765701294f, 0.06737431138753891f, 0.7431821823120117f, -0.980305552482605f, 0.4020804464817047f, 0.15168717503547668f, 0.6205206513404846f, 0.0474095456302166f, 0.5568598508834839f, 0.7874427437782288f, 0.14277713000774384f, -0.8390764594078064f, 0.7245415449142456f, 0.7395471930503845f, 0.7938470840454102f, 0.3181617856025696f, 0.79000324010849f, 0.19897109270095825f, 0.7390887141227722f, -0.7991645336151123f, 0.17066048085689545f, 0.14663784205913544f, 0.6666942238807678f, 0.5695828199386597f, 0.3117179274559021f, 0.9971237778663635f, 0.5261254906654358f, -0.22664417326450348f, 0.06728462129831314f, 0.6144394278526306f, 0.5907293558120728f, 0.28466129302978516f, 0.0724155381321907f, 0.7587404847145081f, 0.2456645518541336f, -0.3650711476802826f, 0.23395118117332458f, 0.5996384024620056f, 0.5754063725471497f, 0.5908151268959045f, 0.1571042835712433f, 0.6468665599822998f, 0.27271372079849243f, -0.4355536699295044f, 0.4023094177246094f, 0.8813011050224304f, 0.839847207069397f, 0.10943825542926788f, 0.19872771203517914f, 0.30702126026153564f, 0.7183722853660583f, -0.7521951794624329f, 0.456581175327301f, 0.42544469237327576f, 0.8436134457588196f, 0.31055352091789246f, 0.6469821929931641f, 0.07077988982200623f, 0.774243175983429f, -0.2949880361557007f, 0.4284631609916687f, 0.7502443790435791f, 0.5823392271995544f, 0.0895346850156784f, 0.46913325786590576f, 0.6266928911209106f, 0.37998178601264954f, -0.9642103314399719f, 0.15913988649845123f, 0.7423658967018127f, 0.9772067070007324f, 0.22314153611660004f, 0.24575275182724f, 0.5183690786361694f, 0.7761886119842529f, -0.05885110795497894f, 0.08316635340452194f, 0.90764981508255f, 0.49297940731048584f, 0.6788033246994019f, 0.954931914806366f, 0.6089194416999817f, 0.09501785039901733f, -0.41455918550491333f, 0.6025488972663879f, 0.3756655156612396f, 0.15933969616889954f, 0.4197012782096863f, 0.38393762707710266f, 0.5350355505943298f, 0.7899780869483948f, -0.38181427121162415f, 0.5832356810569763f, 0.31332477927207947f, 0.10599823296070099f, 0.6135573983192444f, 0.33423110842704773f, 0.657893717288971f, 0.48824650049209595f, -0.40150994062423706f, 0.14511889219284058f, 0.5982810258865356f, 0.9290865063667297f, 0.5601365566253662f, 0.399265855550766f, 0.023320311680436134f, 0.33810365200042725f, -0.9514789581298828f, 0.13382157683372498f, 0.841078519821167f, 0.7219355702400208f, 0.645291805267334f, 0.20641106367111206f, 0.9252237677574158f, 0.07375076413154602f, -0.7474935054779053f, 0.043465498834848404f, 0.4515877962112427f, 0.6754986047744751f, 0.3694031834602356f, 0.5658338069915771f, 0.00991791021078825f, 0.4848971664905548f, -0.29970642924308777f, 0.42661964893341064f, 0.9521722793579102f, 0.3058026134967804f, 0.20734058320522308f, 0.20965981483459473f, 0.7750197052955627f, 0.07990747690200806f, -0.6329313516616821f, 0.9374279975891113f, 0.8776529431343079f, 0.8270032405853271f, 0.6082976460456848f, 0.5613398551940918f, 0.8375731110572815f, 0.21101322770118713f, -0.7632116675376892f, 0.20619159936904907f, 0.5032531023025513f, 0.5152089595794678f, 0.12655940651893616f, 0.45891451835632324f, 0.7721099853515625f, 0.013099294155836105f, -0.020129268988966942f, 0.12228735536336899f, 0.9184548258781433f, 0.855107843875885f, 0.18008233606815338f, 0.3665294349193573f, 0.9629281163215637f, 0.8689963817596436f, -0.7204821109771729f, 0.00782365445047617f, 0.9096296429634094f, 0.6743147373199463f, 0.15054498612880707f, 0.8855982422828674f, 0.9953760504722595f, 0.2342960238456726f, -0.21486137807369232f, 0.010642755776643753f, 0.8661168217658997f, 0.7767094969749451f, 0.5498416423797607f, 0.48734408617019653f, 0.41705968976020813f, 0.4810735285282135f, -0.14063623547554016f, 0.9064755439758301f, 0.5530451536178589f, 0.24301397800445557f, 0.8493247032165527f, 0.6579621434211731f, 0.3308105766773224f, 0.33836233615875244f, -0.8762569427490234f, 0.33993464708328247f, 0.5297503471374512f, 0.5075696706771851f, 0.8755141496658325f, 0.10166726261377335f, 0.5938194990158081f, 0.42169126868247986f, -0.8189908266067505f, 0.5010536909103394f, 0.24589025974273682f, 0.8698833584785461f, 0.07807473838329315f, 0.5245680212974548f, 0.9073594808578491f, 0.04977227374911308f, -0.6114117503166199f, 0.9417570233345032f, 0.5499677062034607f, 0.7098456025123596f, 0.610987663269043f, 0.25253236293792725f, 0.6736209392547607f, 0.33027559518814087f, -0.36009982228279114f, 0.6219809651374817f, 0.4030129611492157f, 0.6983134746551514f, 0.49425971508026123f, 0.2868335545063019f, 0.7436728477478027f, 0.9886341691017151f, -0.8844197988510132f, 0.5892860293388367f, 0.9588793516159058f, 0.5153228640556335f, 0.7331515550613403f, 0.02334776148200035f, 0.7341033816337585f, 0.654039740562439f, -0.02336764894425869f, 0.21480414271354675f, 0.6521868109703064f, 0.2029995173215866f, 0.8535292744636536f, 0.013913927599787712f, 0.11659619212150574f, 0.5306209921836853f, -0.9877078533172607f, 0.7760589122772217f, 0.6250143051147461f, 0.9674946665763855f, 0.6303703784942627f, 0.36869797110557556f, 0.8352388739585876f, 0.26151135563850403f, -0.8128652572631836f, 0.4938886761665344f, 0.5317216515541077f, 0.11546467244625092f, 0.8761950135231018f, 0.8622450232505798f, 0.2784028947353363f, 0.9902923703193665f, -0.9005955457687378f, 0.14937037229537964f, 0.2835140526294708f, 0.03342711925506592f, 0.9491041302680969f, 0.9593736529350281f, 0.6425940990447998f, 0.41354796290397644f, -0.4422036111354828f, 0.8777089715003967f, 0.026897290721535683f, 0.9333500266075134f, 0.05310777574777603f, 0.16963699460029602f, 0.37940120697021484f, 0.13424965739250183f, -0.820475161075592f, 0.6042131781578064f, 0.008803260512650013f, 0.04278222471475601f, 0.6337884664535522f, 0.9372578859329224f, 0.06660888344049454f, 0.3822890818119049f, -0.42344388365745544f, 0.17941750586032867f, 0.574454128742218f, 0.47360673546791077f, 0.07833104580640793f, 0.16101504862308502f, 0.9548658728599548f, 0.11794605851173401f, -0.08992644399404526f, 0.3869016766548157f, 0.27544525265693665f, 0.9262961745262146f, 0.5218294262886047f, 0.10981690883636475f, 0.8756978511810303f, 0.8045382499694824f, -0.3199377655982971f, 0.8776131868362427f, 0.5170968770980835f, 0.013812185265123844f, 0.6020521521568298f, 0.6093271970748901f, 0.5842968821525574f, 0.7782864570617676f, -0.40246570110321045f, 0.6218875050544739f, 0.08998648077249527f, 0.055575598031282425f, 0.964131772518158f, 0.8458167910575867f, 0.033421773463487625f, 0.20919641852378845f, -0.9669138789176941f, 0.4397798478603363f, 0.5850463509559631f, 0.9985837936401367f, 0.9280630350112915f, 0.39768674969673157f, 0.24384000897407532f, 0.4638986587524414f, -0.42610540986061096f, 0.3461116850376129f, 0.44907790422439575f, 0.75389164686203f, 0.6089869141578674f, 0.7544217705726624f, 0.7503736615180969f, 0.6575028896331787f, -0.13943412899971008f, 0.6338673830032349f, 0.7803010940551758f, 0.663397490978241f, 0.5628381967544556f, 0.013431119732558727f, 0.48310670256614685f, 0.6548905372619629f, -0.16776840388774872f, 0.9250476956367493f, 0.15188664197921753f, 0.010223654098808765f, 0.8439822196960449f, 0.4970812201499939f, 0.18959103524684906f, 0.42161092162132263f, -0.7348676323890686f, 0.6749838590621948f, 0.5831311345100403f, 0.15866537392139435f, 0.6631085276603699f, 0.9826967716217041f, 0.9860246777534485f, 0.28112199902534485f, -0.3997328281402588f, 0.1517743170261383f, 0.4751697778701782f, 0.9021201133728027f, 0.5267065763473511f, 0.33944764733314514f, 0.9745256304740906f, 0.47885870933532715f, -0.512580931186676f, 0.16289138793945312f, 0.7495571374893188f, 0.8579416871070862f, 0.34478047490119934f, 0.465550035238266f, 0.05895174667239189f, 0.8077240586280823f, -0.5671119093894958f, 0.8292648792266846f, 0.03208543732762337f, 0.2240477204322815f, 0.5502261519432068f, 0.9969164133071899f, 0.4164944589138031f, 0.22094200551509857f, -0.5465863347053528f, 0.5446666479110718f, 0.5820977091789246f, 0.9423134326934814f, 0.050616554915905f, 0.11983293294906616f, 0.15162795782089233f, 0.4466598331928253f, -0.0844881683588028f, 0.033010147511959076f, 0.2407447099685669f, 0.7957168221473694f, 0.02259252965450287f, 0.45275723934173584f, 0.7619990110397339f, 0.5747453570365906f, -0.2778272032737732f, 0.959588348865509f, 0.3336268365383148f, 0.6027340292930603f, 0.2825619876384735f, 0.14386436343193054f, 0.6747239232063293f, 0.8621385097503662f, -0.3660520315170288f, 0.6142761707305908f, 0.35288259387016296f, 0.5911229252815247f, 0.43277251720428467f, 0.5536354780197144f, 0.5366621017456055f, 0.1317017525434494f, -0.6651244759559631f, 0.4172523021697998f, 0.17230874300003052f, 0.3091702163219452f, 0.3559228777885437f, 0.2469065636396408f, 0.8657777309417725f, 0.4999144673347473f, -0.7663869261741638f, 0.9787999987602234f, 0.34161245822906494f, 0.12910686433315277f, 0.30553844571113586f, 0.18359459936618805f, 0.579456090927124f, 0.6034203171730042f, -0.7421525120735168f, 0.08390671014785767f, 0.6248146891593933f, 0.9668045043945312f, 0.43086960911750793f, 0.7060201168060303f, 0.26513582468032837f, 0.11915984004735947f, -0.45370081067085266f, 0.7549748420715332f, 0.6524123549461365f, 0.7762486934661865f, 0.7926264405250549f, 0.44759637117385864f, 0.8989713788032532f, 0.4018857181072235f, -0.11613704264163971f, 0.6472936272621155f, 0.5975446701049805f, 0.26566842198371887f, 0.16427010297775269f, 0.909593939781189f, 0.8975030779838562f, 0.7271829843521118f, -0.6537960767745972f, 0.686560332775116f, 0.19118443131446838f, 0.7702481746673584f, 0.18765424191951752f, 0.4080773591995239f, 0.0785478949546814f, 0.24979092180728912f, -0.12661564350128174f, 0.28007346391677856f, 0.46723413467407227f, 0.916641116142273f, 0.07719219475984573f, 0.1670488566160202f, 0.4937467873096466f, 0.41562750935554504f, -0.7349234223365784f, 0.3511163592338562f, 0.9585206508636475f, 0.33765479922294617f, 0.5622407793998718f, 0.5800995826721191f, 0.18363825976848602f, 0.4680875241756439f, -0.6678393483161926f, 0.2865120470523834f, 0.4387555420398712f, 0.6108279228210449f, 0.2981542944908142f, 0.018802376464009285f, 0.9408591985702515f, 0.877954363822937f, -0.24002395570278168f, 0.7110389471054077f, 0.8088162541389465f, 0.0655369758605957f, 0.6733160614967346f, 0.21907398104667664f, 0.71309494972229f, 0.5802186131477356f, -0.370662122964859f, 0.8217801451683044f, 0.24938344955444336f, 0.1502886563539505f, 0.00491794990375638f, 0.12127888947725296f, 0.8969987630844116f, 0.7847864031791687f, -0.6766705513000488f, 0.7766254544258118f, 0.8699789643287659f, 0.9680148363113403f, 0.32127001881599426f, 0.33962395787239075f, 0.6304550766944885f, 0.4086965322494507f, -0.5163869857788086f, 0.2692667543888092f, 0.7141598463058472f, 0.6554333567619324f, 0.3793385326862335f, 0.9901187419891357f, 0.6417030096054077f, 0.33757054805755615f, -0.9561861753463745f, 0.73911452293396f, 0.25861236453056335f, 0.8078831434249878f, 0.6002694964408875f, 0.730051577091217f, 0.5867310762405396f, 0.41898950934410095f, -0.6952238082885742f, 0.343127965927124f, 0.9144173264503479f, 0.983726441860199f, 0.4402165710926056f, 0.87212073802948f, 0.5374493598937988f, 0.059990424662828445f, -0.8456252217292786f, 0.5815447568893433f, 0.2573768198490143f, 0.30773109197616577f, 0.7475213408470154f, 0.13078780472278595f, 0.7534575462341309f, 0.9515696167945862f, -0.19406352937221527f, 0.6996543407440186f, 0.16112811863422394f, 0.42454957962036133f, 0.8945622444152832f, 0.044314153492450714f, 0.914675235748291f, 0.1886400729417801f, -0.712736964225769f, 0.6701332926750183f, 0.7670456171035767f, 0.8486848473548889f, 0.1576721966266632f, 0.01903870515525341f, 0.5597969889640808f, 0.19066853821277618f, -0.22884413599967957f, 0.007477091159671545f, 0.7675939798355103f, 0.5675948262214661f, 0.3082555830478668f, 0.16115735471248627f, 0.25351229310035706f, 0.696515679359436f, -0.1040247306227684f, 0.9648702144622803f, 0.615932047367096f, 0.10550373792648315f, 0.11026646196842194f, 0.9718517661094666f, 0.9279868602752686f, 0.792522132396698f, -0.12953922152519226f, 0.2963954508304596f, 0.8373047113418579f, 0.6081909537315369f, 0.5812074542045593f, 0.29802295565605164f, 0.457076758146286f, 0.33336982131004333f, -0.02289596199989319f, 0.7612300515174866f, 0.6047243475914001f, 0.6320415735244751f, 0.5796534419059753f, 0.35250210762023926f, 0.12713505327701569f, 0.8647878170013428f, -0.4455290734767914f, 0.3971705138683319f, 0.4403937757015228f, 0.11355222016572952f, 0.21342511475086212f, 0.6817852854728699f, 0.4613415598869324f, 0.9015331268310547f, -0.28986892104148865f, 0.6944735050201416f, 0.30652129650115967f, 0.2351975440979004f, 0.5389728546142578f, 0.3569335639476776f, 0.9098430275917053f, 0.44976606965065f, -0.15751193463802338f, 0.7858607172966003f, 0.7631257176399231f, 0.1906626671552658f, 0.6328547596931458f, 0.9927958250045776f, 0.2371617555618286f, 0.24091823399066925f, -0.48584240674972534f, 0.15126745402812958f, 0.9103139638900757f, 0.5505710244178772f, 0.5050509572029114f, 0.8202192783355713f, 0.9755001664161682f, 0.0648471936583519f, -0.2209896445274353f, 0.7382519245147705f, 0.20820698142051697f, 0.38022807240486145f, 0.5697156190872192f, 0.23909714818000793f, 0.46498191356658936f, 0.5606233477592468f, -0.8505098819732666f, 0.6559098362922668f, 0.2960300147533417f, 0.9196736216545105f, 0.06777694821357727f, 0.824849545955658f, 0.9982039928436279f, 0.8024788498878479f, -0.6491184234619141f, 0.6922586560249329f, 0.7774183750152588f, 0.611613392829895f, 0.28692227602005005f, 0.22211875021457672f, 0.19844196736812592f, 0.6712688207626343f, -0.5720700621604919f, 0.860282301902771f, 0.022722039371728897f, 0.6969629526138306f, 0.08402717113494873f, 0.11441945284605026f, 0.6622285842895508f, 0.8084470629692078f, -0.2091754525899887f, 0.8825013637542725f, 0.2614087462425232f, 0.9012037515640259f, 0.13724879920482635f, 0.15307562053203583f, 0.8890367746353149f, 0.3634323179721832f, -0.8744908571243286f, 0.10809791833162308f, 0.9995698928833008f, 0.13663659989833832f, 0.6414810419082642f, 0.5107943415641785f, 0.5763558149337769f, 0.03128589317202568f, -0.25986215472221375f, 0.17256183922290802f, 0.8778721690177917f, 0.185026615858078f, 0.8009241223335266f, 0.6068986654281616f, 0.01486833393573761f, 0.6928991079330444f, -0.09630253911018372f, 0.20391486585140228f, 0.8819414377212524f, 0.3280797600746155f, 0.1445978581905365f, 0.3003699779510498f, 0.43665456771850586f, 0.3562701344490051f, -0.7741573452949524f, 0.6363904476165771f, 0.6441741585731506f, 0.4117130935192108f, 0.8182581663131714f, 0.30694717168807983f, 0.3084075152873993f, 0.0243548434227705f, -0.16994211077690125f, 0.02053551934659481f, 0.534072995185852f, 0.7651124000549316f, 0.1418369710445404f, 0.7966756820678711f, 0.3587372601032257f, 0.9843900203704834f, -0.9573370814323425f, 0.454303115606308f, 0.9822601079940796f, 0.6452399492263794f, 0.8322422504425049f, 0.4840552806854248f, 0.48955297470092773f, 0.5884602069854736f, -0.9756754040718079f, 0.8560751676559448f, 0.9033782482147217f, 0.17100532352924347f, 0.9205875992774963f, 0.13954681158065796f, 0.6318442225456238f, 0.2741081714630127f, -0.8704876899719238f, 0.5035623908042908f, 0.4097936451435089f, 0.3598272502422333f, 0.8322830200195312f, 0.9393271803855896f, 0.9474148154258728f, 0.7772570848464966f, -0.544422447681427f, 0.27328526973724365f, 0.19748236238956451f, 0.3506205677986145f, 0.12472096085548401f, 0.979846179485321f, 0.050812382251024246f, 0.9124927520751953f, -0.9259257316589355f, 0.8557595610618591f, 0.022493161261081696f, 0.5637397170066833f, 0.8457836508750916f, 0.8140885233879089f, 0.21457476913928986f, 0.3927643299102783f, -0.3625797629356384f, 0.9977681636810303f, 0.4383465647697449f, 0.3117773234844208f, 0.7853323817253113f, 0.03395552560687065f, 0.5923846364021301f, 0.5094864368438721f, -0.4891434609889984f, 0.4578344225883484f, 0.46814414858818054f, 0.9036409854888916f, 0.7797157168388367f, 0.40888410806655884f, 0.8544442653656006f, 0.7424150705337524f, -0.6291454434394836f, 0.7263750433921814f, 0.499897301197052f, 0.5274013876914978f, 0.08247428387403488f, 0.724436342716217f, 0.27468204498291016f, 0.5016815066337585f, -0.9895030856132507f, 0.3286254405975342f, 0.5233525037765503f, 0.029539315029978752f, 0.7863646745681763f, 0.12837371230125427f, 0.312450110912323f, 0.7092705368995667f, -0.25869476795196533f, 0.8440492153167725f, 0.17473755776882172f, 0.8344540596008301f, 0.06991124898195267f, 0.5929237008094788f, 0.29570311307907104f, 0.03627486154437065f, -0.8733522891998291f, 0.6851329207420349f, 0.8690537810325623f, 0.9685436487197876f, 0.6269156336784363f, 0.39638110995292664f, 0.21118493378162384f, 0.5209707617759705f, -0.310798317193985f, 0.3328329026699066f, 0.6195908784866333f, 0.4065513610839844f, 0.9981672167778015f, 0.4565804898738861f, 0.5230465531349182f, 0.37744370102882385f, -0.6322051882743835f, 0.5247805714607239f, 0.2589588165283203f, 0.9539886116981506f, 0.40065842866897583f, 0.08313930034637451f, 0.020688459277153015f, 0.5549813508987427f, -0.9987668395042419f, 0.3392221927642822f, 0.24216501414775848f, 0.6950221061706543f, 0.6133421063423157f, 0.09079061448574066f, 0.76937335729599f, 0.6540171504020691f, -0.42916780710220337f, 0.41751545667648315f, 0.8548194766044617f, 0.716664731502533f, 0.5091843605041504f, 0.10278061032295227f, 0.5308751463890076f, 0.18507277965545654f, -0.9424280524253845f, 0.23100250959396362f, 0.9802524447441101f, 0.15505550801753998f, 0.9407384991645813f, 0.8232659697532654f, 0.8663775324821472f, 0.49893635511398315f, -0.20158296823501587f, 0.5664935111999512f, 0.5232141017913818f, 0.28143617510795593f, 0.6141130328178406f, 0.7882397174835205f, 0.2620338797569275f, 0.7323063611984253f, -0.5463298559188843f, 0.25504520535469055f, 0.8788695335388184f, 0.025798888877034187f, 0.8544082641601562f, 0.8371118903160095f, 0.7676588892936707f, 0.18126237392425537f, -0.8749513626098633f, 0.9017281532287598f, 0.42410361766815186f, 0.17967209219932556f, 0.13603828847408295f, 0.2817078232765198f, 0.6856237053871155f, 0.6719275116920471f, -0.29446083307266235f, 0.5721293091773987f, 0.5692983269691467f, 0.9816325306892395f, 0.9442548751831055f, 0.22393369674682617f, 0.5345975756645203f, 0.5969571471214294f, -0.43720898032188416f, 0.613240659236908f, 0.5192518830299377f, 0.02689460478723049f, 0.9009941220283508f, 0.6027310490608215f, 0.9372700452804565f, 0.47174179553985596f, -0.1253669410943985f, 0.5288437604904175f, 0.8877808451652527f, 0.8078119158744812f, 0.2547244429588318f, 0.6993666887283325f, 0.17429670691490173f, 0.32640573382377625f, -0.9922081828117371f, 0.5536330342292786f, 0.24260680377483368f, 0.09294875711202621f, 0.6635511517524719f, 0.4643667936325073f, 0.5218114256858826f, 0.640441358089447f, -0.16476356983184814f, 0.6782630085945129f, 0.2336403727531433f, 0.383335143327713f, 0.21327383816242218f, 0.33865198493003845f, 0.693735659122467f, 0.10588786751031876f, -0.899407148361206f, 0.1397673785686493f, 0.4649561941623688f, 0.1501777023077011f, 0.2848523259162903f, 0.4960465431213379f, 0.5000866651535034f, 0.402415931224823f, -0.4979690909385681f, 0.8990699648857117f, 0.37339356541633606f, 0.9790932536125183f, 0.24412287771701813f, 0.5171799659729004f, 0.1574344038963318f, 0.8151236176490784f, -0.9244844913482666f, 0.5377740263938904f, 0.12645433843135834f, 0.3949548304080963f, 0.2638651132583618f, 0.587193489074707f, 0.9702852368354797f, 0.4523155987262726f, -0.011184965260326862f, 0.04349730163812637f, 0.8529919981956482f, 0.8491761088371277f, 0.9291075468063354f, 0.12507089972496033f, 0.02300897054374218f, 0.26425641775131226f, -0.8464579582214355f, 0.11774266511201859f, 0.16282245516777039f, 0.3604595959186554f, 0.9144501686096191f, 0.14709830284118652f, 0.3306969106197357f, 0.0707390159368515f, -0.5725054740905762f, 0.3598947823047638f, 0.490479975938797f, 0.2415281981229782f, 0.18852920830249786f, 0.06864611804485321f, 0.1898973435163498f, 0.1537465751171112f, -0.8088328242301941f, 0.10649130493402481f, 0.215486079454422f, 0.6229307651519775f, 0.5075094699859619f, 0.7174268364906311f, 0.6067845225334167f, 0.7052367925643921f, -0.13761717081069946f, 0.0461287796497345f, 0.8717838525772095f, 0.38500234484672546f, 0.7466487884521484f, 0.1610455960035324f, 0.3980226218700409f, 0.22043313086032867f, -0.835182249546051f, 0.4754653871059418f, 0.050957903265953064f, 0.9136216640472412f, 0.39135032892227173f, 0.016339419409632683f, 0.3490811586380005f, 0.08054058998823166f, -0.5956954956054688f, 0.16342806816101074f, 0.031460925936698914f, 0.9745144844055176f, 0.13646405935287476f, 0.11544463783502579f, 0.7775295972824097f, 0.32060706615448f, -0.21075496077537537f, 0.1052437499165535f, 0.9651153683662415f, 0.14819473028182983f, 0.6451878547668457f, 0.5852503180503845f, 0.4340418577194214f, 0.03531723469495773f, -0.0867500901222229f, 0.7036788463592529f, 0.7731894850730896f, 0.2979937493801117f, 0.08166072517633438f, 0.6075977683067322f, 0.2660342752933502f, 0.48445993661880493f, -0.7184324264526367f, 0.5698716640472412f, 0.40568795800209045f, 0.4022165834903717f, 0.0073410081677138805f, 0.5958570241928101f, 0.6958220601081848f, 0.34545570611953735f, -0.5142090320587158f, 0.5933070182800293f, 0.6667215824127197f, 0.6427707672119141f, 0.9598016142845154f, 0.15292863547801971f, 0.05902967229485512f, 0.8972996473312378f, -0.3276490569114685f, 0.3645647466182709f, 0.782842755317688f, 0.5222712159156799f, 0.06421443074941635f, 0.6245308518409729f, 0.6725329756736755f, 0.950989842414856f, -0.13480593264102936f, 0.9829330444335938f, 0.25462988018989563f, 0.306545227766037f, 0.6088123917579651f, 0.8328044414520264f, 0.5472872257232666f, 0.3289313018321991f, -0.2909945845603943f, 0.34505462646484375f, 0.27081847190856934f, 0.7715924382209778f, 0.007928832434117794f, 0.2186979204416275f, 0.6768337488174438f, 0.09028763324022293f, -0.16060057282447815f, 0.25960400700569153f, 0.856278121471405f, 0.4170391857624054f, 0.6440203189849854f, 0.8190639615058899f, 0.5308107137680054f, 0.23072600364685059f, -0.5669978260993958f, 0.6856087446212769f, 0.6936901211738586f, 0.44972485303878784f, 0.7773739695549011f, 0.697333037853241f, 0.42887917160987854f, 0.946100652217865f, -0.712505578994751f, 0.9724234938621521f, 0.9793242812156677f, 0.26353001594543457f, 0.9683192372322083f, 0.1637977510690689f, 0.638185977935791f, 0.4731794595718384f, -0.6400042176246643f, 0.30351144075393677f, 0.5981403589248657f, 0.45432084798812866f, 0.23295281827449799f, 0.193884938955307f, 0.3489854633808136f, 0.7119020223617554f, -0.25457701086997986f, 0.08088052272796631f, 0.34742552042007446f, 0.7409347295761108f, 0.8658630847930908f, 0.8000184893608093f, 0.86785888671875f, 0.9362846612930298f, -0.029015731066465378f, 0.40538832545280457f, 0.4044042229652405f, 0.7257548570632935f, 0.3225384056568146f, 0.7726076245307922f, 0.46313172578811646f, 0.5420165061950684f, -0.857839047908783f, 0.01586969569325447f, 0.3779071867465973f, 0.9387090802192688f, 0.08591578900814056f, 0.06578546017408371f, 0.8859500885009766f, 0.5891554951667786f, -0.4713406264781952f, 0.2164197415113449f, 0.37092167139053345f, 0.11594532430171967f, 0.0988931804895401f, 0.6706556081771851f, 0.05773916095495224f, 0.5013232827186584f, -0.07399706542491913f, 0.9711412787437439f, 0.4290049374103546f, 0.7143682241439819f, 0.8167964816093445f, 0.6709949970245361f, 0.23231476545333862f, 0.03883926570415497f, -0.5972084403038025f, 0.9673944711685181f, 0.2561036944389343f, 0.8871629238128662f, 0.7188014388084412f, 0.06308700144290924f, 0.09229359030723572f, 0.4566594958305359f, -0.4687711298465729f, 0.5557236075401306f, 0.2885640859603882f, 0.6867939233779907f, 0.3353566825389862f, 0.7112772464752197f, 0.5950565338134766f, 0.829363226890564f, -0.9774673581123352f, 0.22509132325649261f, 0.9876238703727722f, 0.1541195660829544f, 0.5233604907989502f, 0.4968629777431488f, 0.532440721988678f, 0.003215404227375984f, -0.298264741897583f, 0.4141225516796112f, 0.3025375306606293f, 0.336784690618515f, 0.3264349699020386f, 0.7113994359970093f, 0.039382752031087875f, 0.3736729919910431f, -0.24543450772762299f, 0.9261094331741333f, 0.198773592710495f, 0.815653383731842f, 0.45526182651519775f, 0.040758952498435974f, 0.07593294978141785f, 0.9475750923156738f, -0.9761027097702026f, 0.1584261655807495f, 0.1276150345802307f, 0.29031893610954285f, 0.8821056485176086f, 0.44729775190353394f, 0.4758397340774536f, 0.846384584903717f, -0.5012364983558655f, 0.42541322112083435f, 0.5550585985183716f, 0.6842580437660217f, 0.8762435913085938f, 0.10811738669872284f, 0.3434441387653351f, 0.2578536570072174f, -0.6774731278419495f, 0.864246666431427f, 0.9274175763130188f, 0.3642163574695587f, 0.5907869338989258f, 0.015432562679052353f, 0.6646901965141296f, 0.1408078968524933f, -0.32037726044654846f, 0.8026347756385803f, 0.9999260902404785f, 0.650831937789917f, 0.16345804929733276f, 0.29717350006103516f, 0.5102206468582153f, 0.22368066012859344f, -0.6247531771659851f, 0.19446447491645813f, 0.659912645816803f, 0.09753616899251938f, 0.5677453279495239f, 0.8662947416305542f, 0.09460853040218353f, 0.026894764974713326f, -0.8175544142723083f, 0.6510277390480042f, 0.20101085305213928f, 0.5771527290344238f, 0.9429731369018555f, 0.30774742364883423f, 0.9066668748855591f, 0.9510536193847656f, -0.490496963262558f, 0.2397683709859848f, 0.8379817008972168f, 0.49963921308517456f, 0.5005128383636475f, 0.5550490021705627f, 0.4914635121822357f, 0.09341636300086975f, -0.06373510509729385f, 0.2152150422334671f, 0.39636939764022827f, 0.5806382894515991f, 0.339157372713089f, 0.12124576419591904f, 0.9450918436050415f, 0.5039234161376953f, -0.7650269269943237f, 0.6101396679878235f, 0.5964427590370178f, 0.05852186307311058f, 0.2056484967470169f, 0.20231206715106964f, 0.908451497554779f, 0.5357178449630737f, -0.0839221179485321f, 0.6672245860099792f, 0.5711321234703064f, 0.5896875858306885f, 0.9702087044715881f, 0.6265762448310852f, 0.4788423180580139f, 0.315117746591568f, -0.23374143242835999f, 0.9104884266853333f, 0.9678266048431396f, 0.7357335686683655f, 0.2822877764701843f, 0.7445002198219299f, 0.21118734776973724f, 0.15100792050361633f, -0.19749777019023895f, 0.24851226806640625f, 0.8690457344055176f, 0.6010186076164246f, 0.37805303931236267f, 0.6567282676696777f, 0.2840558588504791f, 0.18386751413345337f, -0.1515398770570755f, 0.8683323264122009f, 0.49137866497039795f, 0.18128931522369385f, 0.9296320080757141f, 0.45938509702682495f, 0.11443547904491425f, 0.03963309898972511f, -0.34336644411087036f, 0.04704032093286514f, 0.28609976172447205f, 0.3772124648094177f, 0.7970665693283081f, 0.5109233856201172f, 0.6030093431472778f, 0.30956557393074036f, -0.7807936072349548f, 0.9456930160522461f, 0.6589891910552979f, 0.6042744517326355f, 0.5803682804107666f, 0.024241365492343903f, 0.16711968183517456f, 0.6581803560256958f, -0.24213095009326935f, 0.8383891582489014f, 0.18398457765579224f, 0.20085065066814423f, 0.741653561592102f, 0.019786322489380836f, 0.6768407821655273f, 0.29381075501441956f, -0.8215121030807495f, 0.8378438949584961f, 0.17782415449619293f, 0.20954900979995728f, 0.12488064914941788f, 0.2472938597202301f, 0.9246111512184143f, 0.730626106262207f, -0.8161351680755615f, 0.7837691903114319f, 0.196015864610672f, 0.5511645078659058f, 0.574390709400177f, 0.8956894874572754f, 0.24968655407428741f, 0.7876851558685303f, -0.39774277806282043f, 0.6566423177719116f, 0.7456384897232056f, 0.5171092748641968f, 0.06589092314243317f, 0.7045842409133911f, 0.08930211514234543f, 0.9507758617401123f, -0.7241406440734863f, 0.5133554339408875f, 0.547972559928894f, 0.6071950793266296f, 0.5100707411766052f, 0.6722307205200195f, 0.5539525151252747f, 0.7718533873558044f, -0.12910208106040955f, 0.407229483127594f, 0.5343944430351257f, 0.11349406838417053f, 0.6831100583076477f, 0.2137930542230606f, 0.9305676221847534f, 0.48018744587898254f, -0.8799970149993896f, 0.38137245178222656f, 0.20331791043281555f, 0.2696593105792999f, 0.8341860771179199f, 0.02796640433371067f, 0.7429503798484802f, 0.04484252631664276f, -0.43835800886154175f, 0.699230968952179f, 0.5009745955467224f, 0.32444334030151367f, 0.3339098393917084f, 0.3466951251029968f, 0.7140638828277588f, 0.7157844305038452f, -0.12299374490976334f, 0.5386833548545837f, 0.5824617743492126f, 0.8678165078163147f, 0.4930863082408905f, 0.4728473424911499f, 0.47476932406425476f, 0.2450796514749527f, -0.14299367368221283f, 0.4024793803691864f, 0.01763872802257538f, 0.718542754650116f, 0.29606354236602783f, 0.995265543460846f, 0.8669660091400146f, 0.928361713886261f, -0.49341604113578796f, 0.2267567664384842f, 0.4024306833744049f, 0.8796087503433228f, 0.783650815486908f, 0.46987462043762207f, 0.29565659165382385f, 0.7376669049263f, -0.41031187772750854f, 0.11288615316152573f, 0.25718003511428833f, 0.4620547294616699f, 0.40922677516937256f, 0.9331170320510864f, 0.7704389691352844f, 0.6731839776039124f, -0.19208045303821564f, 0.36852481961250305f, 0.7868444323539734f, 0.6711450815200806f, 0.24983380734920502f, 0.24546897411346436f, 0.23487378656864166f, 0.12840677797794342f, -0.03621548414230347f, 0.03110121376812458f, 0.7998734712600708f, 0.5030122399330139f, 0.8399602174758911f, 0.4440891444683075f, 0.35943469405174255f, 0.6899924278259277f, -0.582268476486206f, 0.049439266324043274f, 0.9880722761154175f, 0.30309465527534485f, 0.6651945114135742f, 0.37355196475982666f, 0.8300942778587341f, 0.15279269218444824f, -0.6404317617416382f, 0.8439794778823853f, 0.263639897108078f, 0.9153802394866943f, 0.9670476317405701f, 0.4528195261955261f, 0.5656912326812744f, 0.6093077659606934f, -0.31222298741340637f, 0.653498113155365f, 0.1864202618598938f, 0.9054208993911743f, 0.3009989857673645f, 0.735494077205658f, 0.13576287031173706f, 0.6286699175834656f, -0.9051626920700073f, 0.7831075191497803f, 0.70465087890625f, 0.4776467978954315f, 0.7584555745124817f, 0.28049153089523315f, 0.6349897980690002f, 0.34962278604507446f, -0.959882915019989f, 0.06413329392671585f, 0.3363897502422333f, 0.22526493668556213f, 0.39909827709198f, 0.3884047567844391f, 0.24882303178310394f, 0.4740197956562042f, -0.16930656135082245f, 0.9298731088638306f, 0.6321435570716858f, 0.22867423295974731f, 0.9412305355072021f, 0.6973259449005127f, 0.04646079242229462f, 0.2771878242492676f, -0.4446122348308563f, 0.24116367101669312f, 0.8034369945526123f, 0.7179710865020752f, 0.053605299443006516f, 0.1762622743844986f, 0.4063654839992523f, 0.43569809198379517f, -0.47980979084968567f, 0.9202554821968079f, 0.2954277992248535f, 0.23755645751953125f, 0.1502331793308258f, 0.2850329279899597f, 0.27194055914878845f, 0.2662946283817291f, -0.3583921194076538f, 0.4851686954498291f, 0.9497074484825134f, 0.6751683950424194f, 0.1533925086259842f, 0.2770814299583435f, 0.006574873812496662f, 0.20082895457744598f, -0.6056220531463623f, 0.08379504829645157f, 0.44190970063209534f, 0.7667763233184814f, 0.7774247527122498f, 0.7929267883300781f, 0.25212863087654114f, 0.7390104532241821f, -0.378752738237381f, 0.5712329149246216f, 0.20438054203987122f, 0.9037566781044006f, 0.42437735199928284f, 0.9662784934043884f, 0.36235424876213074f, 0.06259854137897491f, -0.859161376953125f, 0.7150344848632812f, 0.5591403245925903f, 0.4771493375301361f, 0.181585893034935f, 0.4804728627204895f, 0.014980261214077473f, 0.11309245228767395f, -0.44151341915130615f, 0.6844494342803955f, 0.3499598801136017f, 0.8550112843513489f, 0.7140234708786011f, 0.7002838253974915f, 0.748950719833374f, 0.23549236357212067f, -0.22992053627967834f, 0.2570555508136749f, 0.5180507302284241f, 0.020596958696842194f, 0.669018566608429f, 0.5575445890426636f, 0.24553126096725464f, 0.2798119783401489f, -0.07228970527648926f, 0.4858243465423584f, 0.1873624324798584f, 0.20497524738311768f, 0.6439504027366638f, 0.0986470878124237f, 0.03755044564604759f, 0.874407947063446f, -0.9786698222160339f, 0.861809253692627f, 0.7407912015914917f, 0.6683793067932129f, 0.2762303948402405f, 0.3530198037624359f, 0.968321681022644f, 0.11977244168519974f, -0.3242684304714203f, 0.7713555097579956f, 0.12602560222148895f, 0.9895709753036499f, 0.6290177702903748f, 0.6326778531074524f, 0.9185503125190735f, 0.9385926723480225f, -0.4534803330898285f, 0.04609306529164314f, 0.985163688659668f, 0.9105927348136902f, 0.6917603015899658f, 0.8408221006393433f, 0.9893137812614441f, 0.8159297704696655f, -0.20896665751934052f, 0.9928479790687561f, 0.9053078889846802f, 0.44785040616989136f, 0.30237776041030884f, 0.3043661117553711f, 0.33352139592170715f, 0.11913561820983887f, -0.4244985580444336f, 0.18356525897979736f, 0.5301536917686462f, 0.8701390624046326f, 0.26768729090690613f, 0.7509540319442749f, 0.37207239866256714f, 0.8387240171432495f, -0.9675354957580566f, 0.3685992360115051f, 0.30485740303993225f, 0.7885465025901794f, 0.5839898586273193f, 0.8781318664550781f, 0.01512528769671917f, 0.24539130926132202f, -0.21859873831272125f, 0.950463593006134f, 0.1743960976600647f, 0.962601363658905f, 0.4799031615257263f, 0.23035643994808197f, 0.031875044107437134f, 0.14565300941467285f, -0.4376344680786133f, 0.4406422972679138f, 0.18595252931118011f, 0.5345203280448914f, 0.5688395500183105f, 0.9305279850959778f, 0.8745325803756714f, 0.6289214491844177f, -0.5678101181983948f, 0.5324417352676392f, 0.44809815287590027f, 0.20333488285541534f, 0.757013201713562f, 0.21513523161411285f, 0.72557133436203f, 0.6533830761909485f, -0.30186939239501953f, 0.920189380645752f, 0.1776171624660492f, 0.41003888845443726f, 0.40247470140457153f, 0.5447096228599548f, 0.7297569513320923f, 0.805472195148468f, -0.04760420694947243f, 0.8339961767196655f, 0.7169281244277954f, 0.1441437005996704f, 0.7126901149749756f, 0.8112591505050659f, 0.8514258861541748f, 0.8757140636444092f, -0.5717892050743103f, 0.24472226202487946f, 0.7514161467552185f, 0.2913859188556671f, 0.022262942045927048f, 0.4352470934391022f, 0.5704054236412048f, 0.5863993167877197f, -0.4244096279144287f, 0.14701339602470398f, 0.16315774619579315f, 0.42475733160972595f, 0.22275376319885254f, 0.6251451373100281f, 0.8836947083473206f, 0.19925472140312195f, -0.010280626825988293f, 0.5263882279396057f, 0.5062550902366638f, 0.6472221612930298f, 0.0017951498739421368f, 0.7572153806686401f, 0.6082440614700317f, 0.11885745078325272f, -0.3505210280418396f, 0.8787752985954285f, 0.9492725729942322f, 0.9478752613067627f, 0.05717576667666435f, 0.015187647193670273f, 0.5425156354904175f, 0.5730034708976746f, -0.49716418981552124f, 0.7860430479049683f, 0.906326949596405f, 0.27143779397010803f, 0.1725894659757614f, 0.47982022166252136f, 0.4707591235637665f, 0.9079653024673462f, -0.872298538684845f, 0.14456962049007416f, 0.020242320373654366f, 0.074233777821064f, 0.031041709706187248f, 0.9954102039337158f, 0.9901082515716553f, 0.30904507637023926f, -0.3817274272441864f, 0.581822395324707f, 0.9435237050056458f, 0.6477965116500854f, 0.028846237808465958f, 0.6314674615859985f, 0.15050461888313293f, 0.6690285205841064f, -0.48795169591903687f, 0.26313042640686035f, 0.3305005133152008f, 0.9021680355072021f, 0.4461251497268677f, 0.10883773863315582f, 0.3931204676628113f, 0.2434944212436676f, -0.4998060166835785f, 0.8154293894767761f, 0.2559761106967926f, 0.08370009809732437f, 0.9207408428192139f, 0.1762077510356903f, 0.7256526350975037f, 0.4701057970523834f, -0.5819528698921204f, 0.7152891755104065f, 0.9007322788238525f, 0.2950551509857178f, 0.2374456822872162f, 0.5685834884643555f, 0.34063732624053955f, 0.7273564338684082f, -0.20415814220905304f, 0.532619297504425f, 0.7361528277397156f, 0.5462527275085449f, 0.5965457558631897f, 0.480731338262558f, 0.15771996974945068f, 0.2641613483428955f, -0.02825080417096615f, 0.6892362833023071f, 0.8828085660934448f, 0.5769326686859131f, 0.6659591197967529f, 0.9515981674194336f, 0.1596297174692154f, 0.07575433701276779f, -0.244816392660141f, 0.9187169671058655f, 0.9102516174316406f, 0.802937924861908f, 0.2127799540758133f, 0.3919226825237274f, 0.47458210587501526f, 0.1428656131029129f, -0.3662322163581848f, 0.523303747177124f, 0.9786149263381958f, 0.289323627948761f, 0.7924054265022278f, 0.14414089918136597f, 0.8975058794021606f, 0.4715260863304138f, -0.07576049119234085f, 0.8449510335922241f, 0.7355978488922119f, 0.6616344451904297f, 0.4848272502422333f, 0.8697370886802673f, 0.6380600333213806f, 0.6068015098571777f, -0.9109243154525757f, 0.49929240345954895f, 0.5961235165596008f, 0.33955323696136475f, 0.010809183120727539f, 0.292485773563385f, 0.9546077847480774f, 0.0313398651778698f, -0.6684874892234802f, 0.6718423962593079f, 0.08365163207054138f, 0.9330489039421082f, 0.9273883104324341f, 0.8465248942375183f, 0.990851879119873f, 0.33307790756225586f, -0.38479024171829224f, 0.5457252860069275f, 0.3177923858165741f, 0.959277868270874f, 0.2333184778690338f, 0.5713552832603455f, 0.6477710008621216f, 0.00676847156137228f, -0.16601750254631042f, 0.8777891397476196f, 0.27010977268218994f, 0.3564143478870392f, 0.8147841691970825f, 0.2396632730960846f, 0.5654242038726807f, 0.17205508053302765f, -0.6767385601997375f, 0.5556703209877014f, 0.40194007754325867f, 0.8041860461235046f, 0.06930029392242432f, 0.27524814009666443f, 0.9625376462936401f, 0.8822896480560303f, -0.7882905602455139f, 0.25631606578826904f, 0.8194621801376343f, 0.48865634202957153f, 0.10804446041584015f, 0.6006139516830444f, 0.06023221090435982f, 0.8808001279830933f, -0.5025113821029663f, 0.756038248538971f, 0.39341244101524353f, 0.33235666155815125f, 0.5860518217086792f, 0.06519867479801178f, 0.024294236674904823f, 0.03619891777634621f, -0.5402524471282959f, 0.7233837246894836f, 0.04721071943640709f, 0.003143249312415719f, 0.29044413566589355f, 0.9511761665344238f, 0.5121824145317078f, 0.9090720415115356f, -0.024491706863045692f, 0.16378523409366608f, 0.46868836879730225f, 0.32548680901527405f, 0.9272577166557312f, 0.9524897336959839f, 0.8158968091011047f, 0.1780036985874176f, -0.2181708812713623f, 0.27805638313293457f, 0.20771175622940063f, 0.37083783745765686f, 0.9155291318893433f, 0.8243144750595093f, 0.5776776671409607f, 0.23624032735824585f, -0.21143582463264465f, 0.7015188336372375f, 0.17124763131141663f, 0.3087787926197052f, 0.2885594666004181f, 0.344832181930542f, 0.5352849364280701f, 0.5801262855529785f, -0.35304659605026245f, 0.5944249629974365f, 0.8116984963417053f, 0.3559935986995697f, 0.05424121394753456f, 0.1690642386674881f, 0.5060110092163086f, 0.187648206949234f, -0.8913069367408752f, 0.8195672631263733f, 0.30251333117485046f, 0.04055500030517578f, 0.5438158512115479f, 0.27725276350975037f, 0.9148840308189392f, 0.3919368088245392f, -0.5268850922584534f, 0.139042928814888f, 0.8016021251678467f, 0.38474196195602417f, 0.550327479839325f, 0.9914028644561768f, 0.8140372037887573f, 0.6945744752883911f, -0.12146157771348953f, 0.04018235206604004f, 0.5225809216499329f, 0.5222992897033691f, 0.9814411997795105f, 0.16606390476226807f, 0.8133182525634766f, 0.8304678797721863f, -0.8099530935287476f, 0.7359278798103333f, 0.4707910418510437f, 0.7119871377944946f, 0.9089267253875732f, 0.9624490141868591f, 0.1868036538362503f, 0.7046385407447815f, -0.8277350664138794f, 0.48850080370903015f, 0.40439438819885254f, 0.3816373348236084f, 0.4475876986980438f, 0.10597412288188934f, 0.2955576479434967f, 0.8477619886398315f, -0.8814154267311096f, 0.19100911915302277f, 0.7879447937011719f, 0.5796361565589905f, 0.4584203064441681f, 0.9600780606269836f, 0.5868396162986755f, 0.741527795791626f, -0.4948912560939789f, 0.6309706568717957f, 0.3829924464225769f, 0.953601062297821f, 0.40289202332496643f, 0.8233500719070435f, 0.630500853061676f, 0.6494344472885132f, -0.775250256061554f, 0.593277633190155f, 0.40420448780059814f, 0.739920973777771f, 0.45841899514198303f, 0.6250637173652649f, 0.024985814467072487f, 0.8143303990364075f, -0.41783449053764343f, 0.11708671599626541f, 0.4067927598953247f, 0.8120003938674927f, 0.17767268419265747f, 0.9785652756690979f, 0.007177749648690224f, 0.6883026361465454f, -0.45692387223243713f, 0.2879118323326111f, 0.76288241147995f, 0.4729735851287842f, 0.6327872276306152f, 0.15779589116573334f, 0.10754167288541794f, 0.8665542006492615f, -0.37450653314590454f, 0.28941288590431213f, 0.08504605293273926f, 0.738998532295227f, 0.8560700416564941f, 0.00272088753990829f, 0.611943781375885f, 0.5732319355010986f, -0.7957873344421387f, 0.5469284653663635f, 0.04457050934433937f, 0.10715384036302567f, 0.9485239386558533f, 0.5228095054626465f, 0.9790148735046387f, 0.6646155118942261f, -0.6046253442764282f, 0.47727900743484497f, 0.4616061747074127f, 0.5850698947906494f, 0.09813256561756134f, 0.6720648407936096f, 0.18379846215248108f, 0.1525370478630066f, -0.3205930292606354f, 0.056213729083538055f, 0.5164875388145447f, 0.6656560301780701f, 0.060123905539512634f, 0.24708585441112518f, 0.8959209322929382f, 0.20003682374954224f, -0.32624247670173645f, 0.7397834658622742f, 0.5432330369949341f, 0.9261719584465027f, 0.4801095426082611f, 0.5420216917991638f, 0.5221580862998962f, 0.6955903768539429f, -0.6192442178726196f, 0.597886323928833f, 0.7625312805175781f, 0.2299983948469162f, 0.9486119151115417f, 0.26087719202041626f, 0.5550937056541443f, 0.42689213156700134f, -0.6397444009780884f, 0.25481221079826355f, 0.0627579391002655f, 0.8226015567779541f, 0.34145355224609375f, 0.48941725492477417f, 0.03804990276694298f, 0.747272253036499f, -0.22404490411281586f, 0.600229799747467f, 0.45126649737358093f, 0.2847355008125305f, 0.638190746307373f, 0.8867998719215393f, 0.47397807240486145f, 0.7853775024414062f, -0.67425137758255f, 0.028682976961135864f, 0.42803460359573364f, 0.054915573447942734f, 0.33696404099464417f, 0.5515482425689697f, 0.993999183177948f, 0.2972677946090698f, -0.9264949560165405f, 0.8721991777420044f, 0.0756850317120552f, 0.13825355470180511f, 0.8389520049095154f, 0.830280065536499f, 0.14006522297859192f, 0.35751858353614807f, -0.6700766682624817f, 0.1715245246887207f, 0.5425676703453064f, 0.9739835262298584f, 0.7229200005531311f, 0.24282296001911163f, 0.5961825847625732f, 0.16310344636440277f, -0.1470889449119568f, 0.8455654382705688f, 0.8610484600067139f, 0.6831048727035522f, 0.9925550818443298f, 0.35234370827674866f, 0.695953369140625f, 0.4395471513271332f, -0.9396617412567139f, 0.4919414520263672f, 0.47921669483184814f, 0.9581127166748047f, 0.19938021898269653f, 0.3912712037563324f, 0.8147728443145752f, 0.6946303248405457f, -0.9450975656509399f, 0.44443416595458984f, 0.23007732629776f, 0.6878226399421692f, 0.6362124085426331f, 0.8748804926872253f, 0.8589153289794922f, 0.31454622745513916f, -0.7333141565322876f, 0.9188815355300903f, 0.03545037657022476f, 0.8163013458251953f, 0.913822591304779f, 0.47803789377212524f, 0.964864194393158f, 0.9381781220436096f, -0.953296959400177f, 0.9015073180198669f, 0.7550320029258728f, 0.8194496631622314f, 0.09750775992870331f, 0.6612869501113892f, 0.8192355632781982f, 0.5336025953292847f, -0.32662397623062134f, 0.49608296155929565f, 0.6372030973434448f, 0.9990853071212769f, 0.6474477648735046f, 0.22507323324680328f, 0.6981818079948425f, 0.5498898029327393f, -0.2928246557712555f, 0.9149419069290161f, 0.9366291761398315f, 0.5610530376434326f, 0.24838928878307343f, 0.41439175605773926f, 0.0004178197996225208f, 0.15466739237308502f, -0.9312634468078613f, 0.307435005903244f, 0.18890975415706635f, 0.3050459325313568f, 0.8720439076423645f, 0.8427389860153198f, 0.05053205415606499f, 0.7116084098815918f, -0.05968284234404564f, 0.01200730912387371f, 0.7105574607849121f, 0.10247731953859329f, 0.09135138243436813f, 0.28347960114479065f, 0.6474123001098633f, 0.20972652733325958f, -0.5889880061149597f, 0.6444649696350098f, 0.1383761167526245f, 0.9919374585151672f, 0.979897677898407f, 0.6916723251342773f, 0.1982783079147339f, 0.9112080335617065f, -0.8098083138465881f, 0.4723644256591797f, 0.7988685369491577f, 0.20656347274780273f, 0.8829374313354492f, 0.4796774089336395f, 0.4116480052471161f, 0.09440472722053528f, -0.9961065649986267f, 0.23990151286125183f, 0.9051458835601807f, 0.03448214754462242f, 0.30942869186401367f, 0.9337669014930725f, 0.5651817917823792f, 0.6052653193473816f, -0.3771324157714844f, 0.9783322215080261f, 0.44645625352859497f, 0.3442082107067108f, 0.13523221015930176f, 0.6380444765090942f, 0.5545798540115356f, 0.48615655303001404f, -0.3495215177536011f, 0.8044635057449341f, 0.4301108717918396f, 0.46405383944511414f, 0.1357654184103012f, 0.6790997385978699f, 0.5203574895858765f, 0.1910422146320343f, -0.949237585067749f, 0.3730519115924835f, 0.05218721181154251f, 0.24408487975597382f, 0.6192240715026855f, 0.08007499575614929f, 0.6373663544654846f, 0.11879485845565796f, -0.26000919938087463f, 0.1605425328016281f, 0.1703222543001175f, 0.6759224534034729f, 0.3301437199115753f, 0.04457497596740723f, 0.23409126698970795f, 0.9610105752944946f, -0.40293169021606445f, 0.43954867124557495f, 0.08190932124853134f, 0.8327074646949768f, 0.17249137163162231f, 0.920159637928009f, 0.08125925809144974f, 0.45123404264450073f, -0.8928550481796265f, 0.04086856171488762f, 0.18033643066883087f, 0.7184295058250427f, 0.18023918569087982f, 0.5510117411613464f, 0.8616350293159485f, 0.6295647025108337f, -0.1550898253917694f, 0.15313369035720825f, 0.9543505907058716f, 0.010402699932456017f, 0.6873225569725037f, 0.6707737445831299f, 0.5715696811676025f, 0.3937831521034241f, -0.49299800395965576f, 0.528325080871582f, 0.21677502989768982f, 0.6540788412094116f, 0.694633424282074f, 0.059238240122795105f, 0.7418937683105469f, 0.9671983122825623f, -0.05947708711028099f, 0.09807509183883667f, 0.32009148597717285f, 0.0698077380657196f, 0.7297875881195068f, 0.32005441188812256f, 0.715632438659668f, 0.7603557705879211f, -0.8476318120956421f, 0.19570942223072052f, 0.31346064805984497f, 0.558382511138916f, 0.5008715987205505f, 0.26589590311050415f, 0.42143091559410095f, 0.057281818240880966f, -0.649716854095459f, 0.13906405866146088f, 0.2789536416530609f, 0.2817164957523346f, 0.5132281184196472f, 0.42865678668022156f, 0.31728801131248474f, 0.3834112882614136f, -0.502117395401001f, 0.11838918924331665f, 0.10977540165185928f, 0.41813400387763977f, 0.2041425108909607f, 0.075737863779068f, 0.3756825625896454f, 0.9305644035339355f, -0.8897638320922852f, 0.5394087433815002f, 0.3560842275619507f, 0.21789489686489105f, 0.2043979912996292f, 0.956200122833252f, 0.340369313955307f, 0.7039575576782227f, -0.9538775682449341f, 0.5681999325752258f, 0.6872242093086243f, 0.1998501569032669f, 0.8932679295539856f, 0.5454466342926025f, 0.6304187774658203f, 0.3304609954357147f, -0.16117702424526215f, 0.0911204069852829f, 0.4864526093006134f, 0.7401793003082275f, 0.9272766709327698f, 0.5406969785690308f, 0.2930508553981781f, 0.953205406665802f, -0.18996089696884155f, 0.675624668598175f, 0.2722024619579315f, 0.7468850612640381f, 0.2306060642004013f, 0.45403796434402466f, 0.03888991102576256f, 0.4753023087978363f, -0.8088015913963318f, 0.0016956795006990433f, 0.2947351634502411f, 0.10646390169858932f, 0.0924852043390274f, 0.5649687051773071f, 0.6682704091072083f, 0.719153642654419f, -0.8349931836128235f, 0.40143418312072754f, 0.0018159401370212436f, 0.6815007925033569f, 0.49145153164863586f, 0.8763080835342407f, 0.27467501163482666f, 0.1736941933631897f, -0.31904080510139465f, 0.09574489295482635f, 0.012518960051238537f, 0.6899623870849609f, 0.4384022653102875f, 0.33765843510627747f, 0.4160042405128479f, 0.8324236869812012f, -0.07507480680942535f, 0.5011246800422668f, 0.6519518494606018f, 0.9609070420265198f, 0.8927927017211914f, 0.8906279802322388f, 0.2256464958190918f, 0.06626053899526596f, -0.4957631230354309f, 0.7799424529075623f, 0.7590692639350891f, 0.9152852296829224f, 0.047443047165870667f, 0.5009881854057312f, 0.6902526021003723f, 0.010139837861061096f, -0.8564945459365845f, 0.817176342010498f, 0.45834121108055115f, 0.6601168513298035f, 0.4152425527572632f, 0.13333861529827118f, 0.26155123114585876f, 0.8246096968650818f, -0.7799869775772095f, 0.01013496145606041f, 0.09538474678993225f, 0.7728439569473267f, 0.45645132660865784f, 0.11837950348854065f, 0.28121358156204224f, 0.5673339366912842f, -0.20554129779338837f, 0.8185209035873413f, 0.025746436789631844f, 0.8504111766815186f, 0.08678270876407623f, 0.9657407402992249f, 0.32375380396842957f, 0.6225475072860718f, -0.40285664796829224f, 0.7615630626678467f, 0.04133118689060211f, 0.8007699847221375f, 0.2930130064487457f, 0.680854856967926f, 0.11253568530082703f, 0.8083890676498413f, -0.8797996640205383f, 0.6862688064575195f, 0.6705549955368042f, 0.35161957144737244f, 0.4481073319911957f, 0.139131560921669f, 0.21178491413593292f, 0.30200204253196716f, -0.4936833381652832f, 0.18779997527599335f, 0.10040915012359619f, 0.846316397190094f, 0.9666178822517395f, 0.8714455366134644f, 0.4801557958126068f, 0.4639016091823578f, -0.7425347566604614f, 0.20353545248508453f, 0.7968098521232605f, 0.057621944695711136f, 0.759982705116272f, 0.39033347368240356f, 0.7789083123207092f, 0.11715914309024811f, -0.84483802318573f, 0.6951655745506287f, 0.5398299694061279f, 0.5506125688552856f, 0.6326553821563721f, 0.009119805879890919f, 0.053804606199264526f, 0.4106007218360901f, -0.08994533866643906f, 0.007783052045851946f, 0.3365236520767212f, 0.8188446164131165f, 0.5534752607345581f, 0.06871281564235687f, 0.1634562909603119f, 0.07227509468793869f, -0.1771024614572525f, 0.11929002404212952f, 0.8092410564422607f, 0.7279248237609863f, 0.8703627586364746f, 0.26788538694381714f, 0.7976884841918945f, 0.14021094143390656f, -0.8184428215026855f, 0.31351321935653687f, 0.18587003648281097f, 0.9736170768737793f, 0.2917996644973755f, 0.8513529896736145f, 0.21357625722885132f, 0.4467134177684784f, -0.4925177991390228f, 0.4307011663913727f, 0.739643931388855f, 0.4829351305961609f, 0.76798015832901f, 0.9443686008453369f, 0.7230417728424072f, 0.3001182973384857f, -0.2253430187702179f, 0.7052823901176453f, 0.05110074207186699f, 0.15644101798534393f, 0.1863742470741272f, 0.06424327194690704f, 0.16624021530151367f, 0.554631769657135f, -0.16670434176921844f, 0.4220797121524811f, 0.43492934107780457f, 0.9969965219497681f, 0.4854016602039337f, 0.18672826886177063f, 0.8090673089027405f, 0.7310456037521362f, -0.3631163537502289f, 0.5527341365814209f, 0.7825315594673157f, 0.8717166781425476f, 0.3561176359653473f, 0.7156240940093994f, 0.6534010171890259f, 0.3408660292625427f, -0.38021668791770935f, 0.8598050475120544f, 0.2699911296367645f, 0.8840999603271484f, 0.022739635780453682f, 0.7921729683876038f, 0.3309954106807709f, 0.7147392630577087f, -0.27228209376335144f, 0.5633963346481323f, 0.6985935568809509f, 0.6289895176887512f, 0.9607950448989868f, 0.8450431823730469f, 0.8783655762672424f, 0.800731360912323f, -0.17461231350898743f, 0.051687825471162796f, 0.4729435443878174f, 0.2266598641872406f, 0.02604522928595543f, 0.9194307923316956f, 0.4255858361721039f, 0.03447958827018738f, -0.2353089600801468f, 0.3639563322067261f, 0.6170145273208618f, 0.2356278896331787f, 0.01293475367128849f, 0.8141254782676697f, 0.4321984052658081f, 0.8888664841651917f, -0.5331920385360718f, 0.522537112236023f, 0.40898212790489197f, 0.20395688712596893f, 0.38992616534233093f, 0.6677069664001465f, 0.3342774212360382f, 0.30471083521842957f, -0.6337159276008606f, 0.1817837804555893f, 0.31850534677505493f, 0.17324620485305786f, 0.011759424582123756f, 0.08150359988212585f, 0.1267506182193756f, 0.992070734500885f, -0.021851027384400368f, 0.02016950212419033f, 0.9198415279388428f, 0.08610780537128448f, 0.45858606696128845f, 0.5834869742393494f, 0.04293594881892204f, 0.6340511441230774f, -0.20380499958992004f, 0.992979109287262f, 0.7194446921348572f, 0.9324501156806946f, 0.7122154831886292f, 0.9547684788703918f, 0.3571684658527374f, 0.6007928848266602f, -0.8826989531517029f, 0.8627487421035767f, 0.8822328448295593f, 0.8142712712287903f, 0.8261492848396301f, 0.6087396740913391f, 0.038861166685819626f, 0.8330602049827576f, -0.6437523365020752f, 0.6719015836715698f, 0.45825308561325073f, 0.6007629036903381f, 0.10502289235591888f, 0.5568029880523682f, 0.5144087076187134f, 0.364423006772995f, -0.11575974524021149f, 0.1700768619775772f, 0.29810893535614014f, 0.8599058389663696f, 0.060257554054260254f, 0.018105901777744293f, 0.5656142830848694f, 0.8904929161071777f, -0.8232106566429138f, 0.8021785616874695f, 0.3026006519794464f, 0.5006887316703796f, 0.4138922691345215f, 0.430816650390625f, 0.046029988676309586f, 0.14134080708026886f, -0.16877812147140503f, 0.3200533986091614f, 0.437410444021225f, 0.16230741143226624f, 0.08914045989513397f, 0.8880472183227539f, 0.6660052537918091f, 0.8600965738296509f, -0.4064374268054962f, 0.9619776010513306f, 0.7422902584075928f, 0.14847531914710999f, 0.212000772356987f, 0.3112747371196747f, 0.6720006465911865f, 0.126710906624794f, -0.04382110387086868f, 0.43030205368995667f, 0.279526948928833f, 0.7107056379318237f, 0.7808245420455933f, 0.3000311255455017f, 0.21698138117790222f, 0.5480284094810486f, -0.025672288611531258f, 0.3099992871284485f, 0.5327832102775574f, 0.3852824866771698f, 0.47987478971481323f, 0.059747908264398575f, 0.29998666048049927f, 0.06482549011707306f, -0.9001949429512024f, 0.7555608749389648f, 0.6736875176429749f, 0.09138316661119461f, 0.7418741583824158f, 0.07265272736549377f, 0.751050591468811f, 0.7487699389457703f, -0.9886808395385742f, 0.4064476788043976f, 0.14587821066379547f, 0.7038730978965759f, 0.46045801043510437f, 0.6433848142623901f, 0.034384917467832565f, 0.47438597679138184f, -0.4076192378997803f, 0.727441132068634f, 0.8172106146812439f, 0.843672513961792f, 0.6469435095787048f, 0.34395602345466614f, 0.6173887848854065f, 0.6963100433349609f, -0.8328786492347717f, 0.8673945665359497f, 0.14981992542743683f, 0.25260791182518005f, 0.04927946627140045f, 0.9429383277893066f, 0.30618560314178467f, 0.5938477516174316f, -0.47476068139076233f, 0.35188689827919006f, 0.804764449596405f, 0.4797121286392212f, 0.23583222925662994f, 0.2261999100446701f, 0.4072372317314148f, 0.958175003528595f, -0.5735421776771545f, 0.7546796202659607f, 0.7424707412719727f, 0.21694070100784302f, 0.3485276401042938f, 0.912182092666626f, 0.6389994025230408f, 0.12470100075006485f, -0.7542712688446045f, 0.8250465393066406f, 0.24534212052822113f, 0.4213961660861969f, 0.6646484732627869f, 0.5049254894256592f, 0.9791036248207092f, 0.02918754145503044f, -0.9687350392341614f, 0.8769969940185547f, 0.055947333574295044f, 0.6793023347854614f, 0.8075973391532898f, 0.8642953038215637f, 0.8282541632652283f, 0.13423506915569305f, -0.5512725710868835f, 0.8444053530693054f, 0.9482854604721069f, 0.7586898803710938f, 0.9338537454605103f, 0.9682561755180359f, 0.9185864329338074f, 0.266446590423584f, -0.6626818776130676f, 0.6219159364700317f, 0.8347325921058655f, 0.3516996502876282f, 0.4164264500141144f, 0.8474852442741394f, 0.004792226944118738f, 0.37985870242118835f, -0.8368960618972778f, 0.39337143301963806f, 0.39742743968963623f, 0.049814172089099884f, 0.20973724126815796f, 0.4270695447921753f, 0.7568926811218262f, 0.7094241976737976f, -0.6744946241378784f, 0.5358988642692566f, 0.8012903928756714f, 0.4301721453666687f, 0.1360321044921875f, 0.289996474981308f, 0.25667139887809753f, 0.8812751173973083f, -0.6757382750511169f, 0.9417088031768799f, 0.6871148347854614f, 0.35305720567703247f, 0.027234815061092377f, 0.9599509835243225f, 0.7076190710067749f, 0.04318729788064957f, -0.38618358969688416f, 0.5120627284049988f, 0.1926504224538803f, 0.6411837935447693f, 0.3053811490535736f, 0.3574315309524536f, 0.4986116290092468f, 0.362664133310318f, -0.22215136885643005f, 0.6775446534156799f, 0.2141321301460266f, 0.2858481705188751f, 0.556714653968811f, 0.9747669696807861f, 0.04154694080352783f, 0.6793271899223328f, -0.30256861448287964f, 0.09349839389324188f, 0.9104657173156738f, 0.1973668932914734f, 0.14286188781261444f, 0.9900773167610168f, 0.7326720356941223f, 0.4977331757545471f, -0.5662153363227844f, 0.31644079089164734f, 0.8082467317581177f, 0.9202192425727844f, 0.012733944691717625f, 0.1756974160671234f, 0.1412522941827774f, 0.08953433483839035f, -0.7456212639808655f, 0.5447540283203125f, 0.07275582104921341f, 0.3095259368419647f, 0.8205379247665405f, 0.7874599695205688f, 0.5019215941429138f, 0.28811728954315186f, -0.9549515247344971f, 0.7336360812187195f, 0.25365784764289856f, 0.7576362490653992f, 0.4359789192676544f, 0.6721818447113037f, 0.20230764150619507f, 0.6352649331092834f, -0.3118021786212921f, 0.7845876216888428f, 0.5565808415412903f, 0.5462230443954468f, 0.19291278719902039f, 0.9051464796066284f, 0.1057090312242508f, 0.2250228077173233f, -0.19338458776474f, 0.44089704751968384f, 0.7001292705535889f, 0.579766035079956f, 0.5722261667251587f, 0.8076464533805847f, 0.9179248809814453f, 0.8831737637519836f, -0.9836485385894775f, 0.21909397840499878f, 0.0830979123711586f, 0.11470089852809906f, 0.8007926344871521f, 0.09182751178741455f, 0.30762144923210144f, 0.2807992398738861f, -0.22347353398799896f, 0.37466591596603394f, 0.395366907119751f, 0.5147655010223389f, 0.24012233316898346f, 0.27215704321861267f, 0.055708229541778564f, 0.9904991984367371f, -0.5746542811393738f, 0.8636192679405212f, 0.921297013759613f, 0.6844774484634399f, 0.9488587975502014f, 0.19599966704845428f, 0.10284055024385452f, 0.4840276539325714f, -0.9145399332046509f, 0.27474722266197205f, 0.09347592294216156f, 0.21475037932395935f, 0.9730957746505737f, 0.5117285847663879f, 0.40458154678344727f, 0.9920262694358826f, -0.21966218948364258f, 0.8998318910598755f, 0.5955438613891602f, 0.41273748874664307f, 0.2765032649040222f, 0.6529977321624756f, 0.40484195947647095f, 0.12746500968933105f, -0.47304585576057434f, 0.873772382736206f, 0.947972297668457f, 0.3779195547103882f, 0.07858540117740631f, 0.9084036350250244f, 0.09918472915887833f, 0.2502397894859314f, -0.06642328202724457f, 0.6771432757377625f, 0.35960084199905396f, 0.3950878381729126f, 0.37220606207847595f, 0.07004351168870926f, 0.10050234198570251f, 0.5034158229827881f, -0.9729707837104797f, 0.7428815960884094f, 0.2921217083930969f, 0.3618812561035156f, 0.13853707909584045f, 0.031044483184814453f, 0.18751633167266846f, 0.7568118572235107f, -0.7649362087249756f, 0.5799715518951416f, 0.17409653961658478f, 0.710781991481781f, 0.4757665693759918f, 0.884502649307251f, 0.7850458025932312f, 0.3022877275943756f, -0.6879587769508362f, 0.6452663540840149f, 0.6489101648330688f, 0.3578853905200958f, 0.7512962222099304f, 0.7263358235359192f, 0.08734781295061111f, 0.932600736618042f, -0.7574428915977478f, 0.599605917930603f, 0.05858638510107994f, 0.5446451306343079f, 0.27544838190078735f, 0.8141818046569824f, 0.7817456722259521f, 0.4967486262321472f, -0.5784590244293213f, 0.3767627775669098f, 0.9132669568061829f, 0.6598643064498901f, 0.16624435782432556f, 0.8512204885482788f, 0.60211181640625f, 0.14312680065631866f, -0.28862932324409485f, 0.5175821781158447f, 0.17360271513462067f, 0.8066198229789734f, 0.6489598155021667f, 0.7824676632881165f, 0.5749697685241699f, 0.45132976770401f, -0.2742237150669098f, 0.6593456268310547f, 0.11956021189689636f, 0.2573208510875702f, 0.11976190656423569f, 0.08227936178445816f, 0.8615253567695618f, 0.6988564133644104f, -0.18527363240718842f, 0.702845573425293f, 0.5263648629188538f, 0.19588316977024078f, 0.7121209502220154f, 0.605078399181366f, 0.5332515239715576f, 0.19075220823287964f, -0.4591498076915741f, 0.5167111754417419f, 0.6882131695747375f, 0.7775528430938721f, 0.11123893409967422f, 0.6341277360916138f, 0.46344542503356934f, 0.667167067527771f, -0.24514949321746826f, 0.09152047336101532f, 0.0877513736486435f, 0.5162830948829651f, 0.5040165185928345f, 0.10703563690185547f, 0.6038723587989807f, 0.914831817150116f, -0.5116490721702576f, 0.014333942905068398f, 0.6135892868041992f, 0.5517163872718811f, 0.9064140319824219f, 0.20150792598724365f, 0.9139412641525269f, 0.7020189166069031f, -0.9005783200263977f, 0.5530694127082825f, 0.7040350437164307f, 0.10752428323030472f, 0.16019277274608612f, 0.4603216350078583f, 0.1817694753408432f, 0.6824235320091248f, -0.625116765499115f, 0.34621715545654297f, 0.508482813835144f, 0.7757054567337036f, 0.7925771474838257f, 0.2837293744087219f, 0.7123903632164001f, 0.3848974108695984f, -0.38800743222236633f, 0.5745458602905273f, 0.15122313797473907f, 0.6034003496170044f, 0.9373617172241211f, 0.24457071721553802f, 0.3976972699165344f, 0.7537534832954407f, -0.49549660086631775f, 0.225057452917099f, 0.910419762134552f, 0.07161850482225418f, 0.5422368049621582f, 0.6343650221824646f, 0.7615551948547363f, 0.3568102717399597f, -0.9085516333580017f, 0.10760126262903214f, 0.6928770542144775f, 0.741812527179718f, 0.6369242072105408f, 0.7890670299530029f, 0.8130139708518982f, 0.47264423966407776f, -0.4453471899032593f, 0.4484194815158844f, 0.4861784875392914f, 0.43345651030540466f, 0.8165120482444763f, 0.42167505621910095f, 0.18138106167316437f, 0.6384223699569702f, -0.9139552116394043f, 0.5628222823143005f, 0.21285375952720642f, 0.035018034279346466f, 0.02825591154396534f, 0.06692293286323547f, 0.20858195424079895f, 0.949039876461029f, -0.19047902524471283f, 0.8291892409324646f, 0.8940471410751343f, 0.6289017200469971f, 0.027572305873036385f, 0.6115290522575378f, 0.00011609558714553714f, 0.4264024496078491f, -0.6858066320419312f, 0.9265457987785339f, 0.5175769329071045f, 0.4313315749168396f, 0.20425990223884583f, 0.527152419090271f, 0.46833527088165283f, 0.48443830013275146f, -0.6115018129348755f, 0.2435867190361023f, 0.2794301211833954f, 0.9207515716552734f, 0.002712500048801303f, 0.01916317082941532f, 0.27093300223350525f, 0.0019236363004893064f, -0.12936541438102722f, 0.8807632923126221f, 0.8120659589767456f, 0.9173680543899536f, 0.30700254440307617f, 0.27177515625953674f, 0.44141635298728943f, 0.6020402908325195f, -0.6758346557617188f, 0.35667455196380615f, 0.4480486512184143f, 0.8232578039169312f, 0.8949404954910278f, 0.6798279285430908f, 0.5080233812332153f, 0.6416035890579224f, -0.22411975264549255f, 0.5196732878684998f, 0.8915151357650757f, 0.011599049903452396f, 0.8834361433982849f, 0.7905887961387634f, 0.3190956115722656f, 0.41890329122543335f, -0.2919917106628418f, 0.3527117669582367f, 0.8448998332023621f, 0.7389020919799805f, 0.02055712603032589f, 0.33069536089897156f, 0.866244912147522f, 0.5720354914665222f, -0.9864608645439148f, 0.22701093554496765f, 0.6921480298042297f, 0.689100980758667f, 0.008868514560163021f, 0.1564660370349884f, 0.2126576155424118f, 0.8967440128326416f, -0.15539127588272095f, 0.6992385387420654f, 0.577525794506073f, 0.30256375670433044f, 0.6307028532028198f, 0.602643609046936f, 0.5252479314804077f, 0.9734076261520386f, -0.35866424441337585f, 0.7723419666290283f, 0.9856523275375366f, 0.6327592134475708f, 0.8794516921043396f, 0.962631344795227f, 0.85416579246521f, 0.5865002274513245f, -0.6972666382789612f, 0.39791321754455566f, 0.24104587733745575f, 0.4453846216201782f, 0.42002102732658386f, 0.7104485630989075f, 0.12887732684612274f, 0.32319244742393494f, -0.6882505416870117f, 0.07524606585502625f, 0.15073513984680176f, 0.24929071962833405f, 0.030808327719569206f, 0.9552261829376221f, 0.5112539529800415f, 0.46912503242492676f, -0.8570418357849121f, 0.18809491395950317f, 0.9995650053024292f, 0.9554279446601868f, 0.7542095184326172f, 0.4114013612270355f, 0.2831808030605316f, 0.8584651350975037f, -0.09904707968235016f, 0.759385883808136f, 0.26964086294174194f, 0.3998293876647949f, 0.04295552894473076f, 0.8332571983337402f, 0.49411502480506897f, 0.23192057013511658f, -0.821130096912384f, 0.4218837022781372f, 0.9505336284637451f, 0.4320136606693268f, 0.02218930795788765f, 0.29655301570892334f, 0.8650375604629517f, 0.6106799244880676f, -0.04400523379445076f, 0.43757209181785583f, 0.678379476070404f, 0.8787438869476318f, 0.7661583423614502f, 0.6514391303062439f, 0.729596734046936f, 0.8294063806533813f, -0.11456050723791122f, 0.5307745337486267f, 0.7771000862121582f, 0.5018126964569092f, 0.7410933375358582f, 0.15373584628105164f, 0.6077488660812378f, 0.61533522605896f, -0.7669937610626221f, 0.8716803193092346f, 0.3945910632610321f, 0.2720884680747986f, 0.9455267190933228f, 0.9383415579795837f, 0.3713141083717346f, 0.19369769096374512f, -0.608108401298523f, 0.552903950214386f, 0.9014900326728821f, 0.6744849681854248f, 0.782991886138916f, 0.38662904500961304f, 0.8857437968254089f, 0.9237969517707825f, -0.1959225982427597f, 0.5131936073303223f, 0.5149292945861816f, 0.8866312503814697f, 0.7264081239700317f, 0.956798791885376f, 0.37846413254737854f, 0.8546585440635681f, -0.5476966500282288f, 0.21310168504714966f, 0.7205796241760254f, 0.6329439878463745f, 0.7481715083122253f, 0.742030680179596f, 0.27126094698905945f, 0.15448489785194397f, -0.0014023364055901766f, 0.09003240615129471f, 0.5803990364074707f, 0.010662573389708996f, 0.666201651096344f, 0.8062451481819153f, 0.44095808267593384f, 0.2391156107187271f, -0.031576599925756454f, 0.42752301692962646f, 0.5641255378723145f, 0.04645882546901703f, 0.7220320701599121f, 0.7825660705566406f, 0.06639769673347473f, 0.8910011053085327f, -0.2179066687822342f, 0.10429784655570984f, 0.8284217119216919f, 0.013434788212180138f, 0.128495454788208f, 0.5594042539596558f, 0.5880635976791382f, 0.3883599638938904f, -0.19071239233016968f, 0.17899364233016968f, 0.32145488262176514f, 0.8128741979598999f, 0.13335271179676056f, 0.18318688869476318f, 0.45581120252609253f, 0.3960452079772949f, -0.7834988236427307f, 0.832521378993988f, 0.8431254625320435f, 0.45833951234817505f, 0.46865156292915344f, 0.9336870312690735f, 0.1791948676109314f, 0.9412254095077515f, -0.8096494078636169f, 0.1940498650074005f, 0.950818657875061f, 0.4758463203907013f, 0.9253945350646973f, 0.5108751654624939f, 0.24475865066051483f, 0.721553385257721f, -0.08779063075780869f, 0.0029131746850907803f, 0.7409319281578064f, 0.719368040561676f, 0.0747734010219574f, 0.9589684009552002f, 0.945525586605072f, 0.8711368441581726f, -0.07782376557588577f, 0.48199841380119324f, 0.715713620185852f, 0.17350921034812927f, 0.5381613373756409f, 0.6366727948188782f, 0.600664496421814f, 0.5546736121177673f, -0.3256414830684662f, 0.42920738458633423f, 0.43107521533966064f, 0.697135329246521f, 0.23209038376808167f, 0.49164721369743347f, 0.9585630297660828f, 0.923857569694519f, -0.407415509223938f, 0.6451164484024048f, 0.05183757096529007f, 0.5170931220054626f, 0.21744774281978607f, 0.2918056845664978f, 0.17460642755031586f, 0.3458649516105652f, -0.3683813512325287f, 0.1346186101436615f, 0.9367364645004272f, 0.06436915695667267f, 0.5512567162513733f, 0.6417325735092163f, 0.7292706370353699f, 0.11784125119447708f, -0.9606375098228455f, 0.8899931311607361f, 0.2803776264190674f, 0.4885976314544678f, 0.1882026642560959f, 0.6310740113258362f, 0.5894138216972351f, 0.46215584874153137f, -0.999598503112793f, 0.9889219403266907f, 0.7472851276397705f, 0.6109963655471802f, 0.14938484132289886f, 0.0747770369052887f, 0.9884596467018127f, 0.7001200318336487f, -0.12499048560857773f, 0.7512878775596619f, 0.5636429190635681f, 0.44838225841522217f, 0.8767568469047546f, 0.8102828860282898f, 0.27771496772766113f, 0.46967944502830505f, -0.8906349539756775f, 0.8667610287666321f, 0.4476287066936493f, 0.6258744597434998f, 0.35917985439300537f, 0.6950854659080505f, 0.027834631502628326f, 0.9611038565635681f, -0.9644328355789185f, 0.5248767137527466f, 0.1859961748123169f, 0.24570699036121368f, 0.40046456456184387f, 0.9877550005912781f, 0.638343095779419f, 0.7626151442527771f, -0.15957847237586975f, 0.8784206509590149f, 0.334062784910202f, 0.018146231770515442f, 0.003986346069723368f, 0.44090884923934937f, 0.11640529334545135f, 0.9803619384765625f, -0.8931752443313599f, 0.6544902324676514f, 0.917317807674408f, 0.2956831455230713f, 0.24479565024375916f, 0.5068882703781128f, 0.2565244138240814f, 0.8267643451690674f, -0.12421736121177673f, 0.7238157391548157f, 0.5285807251930237f, 0.11589149385690689f, 0.5920779705047607f, 0.4436042904853821f, 0.871250331401825f, 0.18649226427078247f, -0.035946547985076904f, 0.035747986286878586f, 0.31437990069389343f, 0.1915559619665146f, 0.16140101850032806f, 0.8627863526344299f, 0.2411041557788849f, 0.06774383783340454f, -0.0015419163974002004f, 0.27295640110969543f, 0.8123871684074402f, 0.3415956497192383f, 0.17379465699195862f, 0.013714288361370564f, 0.6838107705116272f, 0.870792806148529f, -0.29682981967926025f, 0.46890297532081604f, 0.0800275206565857f, 0.4365953803062439f, 0.2552401125431061f, 0.24439221620559692f, 0.5517063736915588f, 0.3054737150669098f, -0.2738341689109802f, 0.24933283030986786f, 0.20572972297668457f, 0.8216943144798279f, 0.012085299007594585f, 0.1076848953962326f, 0.10037580877542496f, 0.22709156572818756f, -0.8854244947433472f, 0.00992053747177124f, 0.7347397804260254f, 0.20653241872787476f, 0.5230265259742737f, 0.1283951699733734f, 0.31202614307403564f, 0.5675027370452881f, -0.7679523229598999f, 0.3462872803211212f, 0.115977942943573f, 0.1351533681154251f, 0.3487451374530792f, 0.7020820379257202f, 0.08374005556106567f, 0.7459896206855774f, -0.6430078148841858f, 0.8671598434448242f, 0.6939516663551331f, 0.29277303814888f, 0.8677884936332703f, 0.46786344051361084f, 0.17862167954444885f, 0.9695031642913818f, -0.33383676409721375f, 0.9695616960525513f, 0.46963006258010864f, 0.6017812490463257f, 0.5737546682357788f, 0.9609493017196655f, 0.4427293539047241f, 0.03879391402006149f, -0.43622684478759766f, 0.2500348687171936f, 0.11761941015720367f, 0.14841316640377045f, 0.9872357249259949f, 0.7001159191131592f, 0.487904816865921f, 0.6423792839050293f, -0.43594062328338623f, 0.41923266649246216f, 0.6177123188972473f, 0.7084829211235046f, 0.824992835521698f, 0.3344026207923889f, 0.9481625556945801f, 0.5993435978889465f, -0.6407635807991028f, 0.25583896040916443f, 0.13422077894210815f, 0.851405680179596f, 0.3827565610408783f, 0.6531038284301758f, 0.6485079526901245f, 0.3020532727241516f, -0.7034984230995178f, 0.5602570176124573f, 0.7369681000709534f, 0.2513597905635834f, 0.11000945419073105f, 0.1043345034122467f, 0.11399733275175095f, 0.437299907207489f, -0.06743475049734116f, 0.9738433957099915f, 0.7360931038856506f, 0.03760874271392822f, 0.030226057395339012f, 0.9385604858398438f, 0.49027183651924133f, 0.9352966547012329f, -0.4269762933254242f, 0.45863866806030273f, 0.09340566396713257f, 0.48369598388671875f, 0.30446767807006836f, 0.585648775100708f, 0.6608307957649231f, 0.18050378561019897f, -0.575492799282074f, 0.8116934299468994f, 0.8170217275619507f, 0.998905599117279f, 0.8008027076721191f, 0.2834218442440033f, 0.2557845413684845f, 0.7358732223510742f, -0.4577771723270416f, 0.26915276050567627f, 0.1841009557247162f, 0.4964314103126526f, 0.9726253747940063f, 0.6482083797454834f, 0.22129738330841064f, 0.37617406249046326f, -0.473177969455719f, 0.674953281879425f, 0.8036667108535767f, 0.8452746272087097f, 0.6794590950012207f, 0.3044310212135315f, 0.4091518819332123f, 0.9115898013114929f, -0.5451825857162476f, 0.6260426640510559f, 0.02384820766746998f, 0.42503127455711365f, 0.609045147895813f, 0.00425884360447526f, 0.6802456378936768f, 0.5915873050689697f, -0.8054019212722778f, 0.5838785171508789f, 0.6263500452041626f, 0.14414414763450623f, 0.8043515086174011f, 0.7183211445808411f, 0.6391332149505615f, 0.02679002843797207f, -0.7917301654815674f, 0.41418883204460144f, 0.004044362343847752f, 0.3276982605457306f, 0.4225023686885834f, 0.3430732488632202f, 0.38398414850234985f, 0.5923868417739868f, -0.3929268717765808f, 0.05541626736521721f, 0.9411249160766602f, 0.5878344774246216f, 0.7079346179962158f, 0.7355606555938721f, 0.6004594564437866f, 0.5798717141151428f, -0.7963278889656067f, 0.285693883895874f, 0.280873566865921f, 0.11292638629674911f, 0.9578369855880737f, 0.7161239981651306f, 0.8364595174789429f, 0.12500426173210144f, -0.8040198087692261f, 0.4765760898590088f, 0.46886196732521057f, 0.6377648115158081f, 0.28500011563301086f, 0.1739032119512558f, 0.48012956976890564f, 0.33242857456207275f, -0.6923062801361084f, 0.027584709227085114f, 0.5300565958023071f, 0.9909337162971497f, 0.5673647522926331f, 0.27768492698669434f, 0.6985123157501221f, 0.834287166595459f, -0.32771557569503784f, 0.527012050151825f, 0.7578505277633667f, 0.21713091433048248f, 0.7872955799102783f, 0.7661837339401245f, 0.7759138941764832f, 0.7962363362312317f, -0.845504641532898f, 0.37489137053489685f, 0.05916990339756012f, 0.0525054968893528f, 0.9877582788467407f, 0.9462440609931946f, 0.933860719203949f, 0.8009701371192932f, -0.6099875569343567f, 0.9478536248207092f, 0.3880525231361389f, 0.7353836894035339f, 0.6469758152961731f, 0.4824097752571106f, 0.5675548911094666f, 0.7352166771888733f, -0.63973069190979f, 0.6425407528877258f, 0.25169312953948975f, 0.15256278216838837f, 0.06702002137899399f, 0.21704821288585663f, 0.5082177519798279f, 0.3916088938713074f, -0.4224531948566437f, 0.8894602060317993f, 0.05115016549825668f, 0.6960334181785583f, 0.5489827394485474f, 0.4035772383213043f, 0.328259140253067f, 0.23329073190689087f, -0.2956220209598541f, 0.8885484933853149f, 0.029975973069667816f, 0.2999560832977295f, 0.23371462523937225f, 0.8152376413345337f, 0.17364083230495453f, 0.04625971242785454f, -0.9030256271362305f, 0.5237070918083191f, 0.6525062918663025f, 0.4619503915309906f, 0.05878201127052307f, 0.3095548450946808f, 0.6789705753326416f, 0.27607589960098267f, -0.9960218667984009f, 0.7066206932067871f, 0.5595217943191528f, 0.34182995557785034f, 0.6101012229919434f, 0.2102108597755432f, 0.4362492859363556f, 0.09105025976896286f, -0.8165913224220276f, 0.02246117778122425f, 0.34650662541389465f, 0.32839375734329224f, 0.17416906356811523f, 0.7839311361312866f, 0.42291364073753357f, 0.741972029209137f, -0.7433167099952698f, 0.7084253430366516f, 0.10949241369962692f, 0.015685904771089554f, 0.013200762681663036f, 0.8718407154083252f, 0.9435716867446899f, 0.45234012603759766f, -0.1547936648130417f, 0.490083783864975f, 0.519139289855957f, 0.2543763220310211f, 0.5507507920265198f, 0.7788946032524109f, 0.7043504118919373f, 0.3506467938423157f, -0.8089906573295593f, 0.5845690965652466f, 0.05736199766397476f, 0.5281805992126465f, 0.6490604281425476f, 0.22726070880889893f, 0.20416516065597534f, 0.9576737880706787f, -0.25184527039527893f, 0.23590382933616638f, 0.14374545216560364f, 0.20490968227386475f, 0.13162095844745636f, 0.1368311643600464f, 0.39354774355888367f, 0.8372179865837097f, -0.025883428752422333f, 0.9604982137680054f, 0.37027451395988464f, 0.8731173872947693f, 0.3415451943874359f, 0.5663907527923584f, 0.1979900747537613f, 0.3101848065853119f, -0.21962714195251465f, 0.43629369139671326f, 0.6355951428413391f, 0.3451057970523834f, 0.2327928990125656f, 0.21673555672168732f, 0.43081462383270264f, 0.32363176345825195f, -0.36458247900009155f, 0.13974027335643768f, 0.8445781469345093f, 0.3346477448940277f, 0.5019313097000122f, 0.0551847368478775f, 0.7963668704032898f, 0.5560343861579895f, -0.7525001764297485f, 0.33748525381088257f, 0.36267104744911194f, 0.5625655055046082f, 0.36333414912223816f, 0.299141526222229f, 0.077696293592453f, 0.9785385131835938f, -0.6716899275779724f, 0.9277704954147339f, 0.8189449906349182f, 0.6569827795028687f, 0.6400269269943237f, 0.21801714599132538f, 0.5744499564170837f, 0.5613946914672852f, -0.23547576367855072f, 0.53035569190979f, 0.14269615709781647f, 0.17253592610359192f, 0.6902843713760376f, 0.9147325158119202f, 0.6906082034111023f, 0.4864528477191925f, -0.23893754184246063f, 0.8524616360664368f, 0.919346034526825f, 0.5448657274246216f, 0.010707731358706951f, 0.4862498641014099f, 0.2739153504371643f, 0.17075927555561066f, -0.48063457012176514f, 0.5172739624977112f, 0.17641063034534454f, 0.4491572082042694f, 0.3271346986293793f, 0.9917224049568176f, 0.841771125793457f, 0.41684699058532715f, -0.10531605035066605f, 0.18567268550395966f, 0.9848294258117676f, 0.4904586374759674f, 0.6611221432685852f, 0.4034270644187927f, 0.3407015800476074f, 0.5272548198699951f, -0.6585463881492615f, 0.47296908497810364f, 0.14740459620952606f, 0.574746310710907f, 0.8889474272727966f, 0.7713948488235474f, 0.47731825709342957f, 0.3970714211463928f, -0.10017678141593933f, 0.9971394538879395f, 0.36386412382125854f, 0.5859841704368591f, 0.8748923540115356f, 0.020474547520279884f, 0.10598302632570267f, 0.2018941044807434f, -0.7777747511863708f, 0.630311131477356f, 0.32905036211013794f, 0.3804550766944885f, 0.9826244711875916f, 0.7773954272270203f, 0.7292372584342957f, 0.5845248699188232f, -0.9713302254676819f, 0.4945027828216553f, 0.9381676912307739f, 0.2900974750518799f, 0.658196210861206f, 0.4303290843963623f, 0.2863849103450775f, 0.927125871181488f, -0.7021349668502808f, 0.5554143786430359f, 0.06703101843595505f, 0.10903404653072357f, 0.9172431230545044f, 0.6361879110336304f, 0.2022133767604828f, 0.598393976688385f, -0.046425480395555496f, 0.940883994102478f, 0.7211564183235168f, 0.6918285489082336f, 0.010346761904656887f, 0.3488915264606476f, 0.4718132019042969f, 0.6390873193740845f, -0.4477660655975342f, 0.41017094254493713f, 0.6626521944999695f, 0.27533283829689026f, 0.22659608721733093f, 0.20813874900341034f, 0.6401275396347046f, 0.8284783959388733f, -0.7613224387168884f, 0.9250794053077698f, 0.49362173676490784f, 0.2934940755367279f, 0.9237023591995239f, 0.4271954894065857f, 0.9810822606086731f, 0.27204689383506775f, -0.6747450828552246f, 0.7463721632957458f, 0.8549540042877197f, 0.24316895008087158f, 0.398759663105011f, 0.12549063563346863f, 0.2698388695716858f, 0.2602829039096832f, -0.8654287457466125f, 0.2284640669822693f, 0.36476388573646545f, 0.859826922416687f, 0.33891060948371887f, 0.6713320016860962f, 0.5152093172073364f, 0.953848123550415f, -0.6893352270126343f, 0.011100909672677517f, 0.31985145807266235f, 0.2396407574415207f, 0.2656266987323761f, 0.8849636316299438f, 0.06541598588228226f, 0.23615418374538422f, -0.11555306613445282f, 0.4328196048736572f, 0.17992843687534332f, 0.2256929576396942f, 0.8743962645530701f, 0.6142676472663879f, 0.6944760084152222f, 0.6653351783752441f, -0.593863308429718f, 0.7758690118789673f, 0.4266622066497803f, 0.8510804176330566f, 0.7855108380317688f, 0.7551458477973938f, 0.6576923131942749f, 0.2393808662891388f, -0.3908851444721222f, 0.9337491393089294f, 0.2412291020154953f, 0.8324950933456421f, 0.8728698492050171f, 0.8775038123130798f, 0.38495153188705444f, 0.020165013149380684f, -0.11824019998311996f, 0.6375328302383423f, 0.2571730613708496f, 0.8585969805717468f, 0.957417368888855f, 0.054418884217739105f, 0.8109280467033386f, 0.4010305404663086f, -0.8626127243041992f, 0.6105560660362244f, 0.8657082915306091f, 0.8476244211196899f, 0.36813685297966003f, 0.5695620179176331f, 0.7901738286018372f, 0.1405511200428009f, -0.5383368134498596f, 0.9254388213157654f, 0.6772762537002563f, 0.8714414238929749f, 0.9555021524429321f, 0.9425387978553772f, 0.11230836063623428f, 0.9981598258018494f, -0.5364984273910522f, 0.5238185524940491f, 0.3504769504070282f, 0.5664069652557373f, 0.13877375423908234f, 0.7852916121482849f, 0.028124524280428886f, 0.5206578969955444f, -0.4377850890159607f, 0.9841418266296387f, 0.5110912322998047f, 0.6629114747047424f, 0.48020920157432556f, 0.013283606618642807f, 0.7249330282211304f, 0.33129557967185974f, -0.6490767002105713f, 0.23444192111492157f, 0.5813066959381104f, 0.6070548295974731f, 0.9990589618682861f, 0.9503259658813477f, 0.946619987487793f, 0.5495600700378418f, -0.7452624440193176f, 0.6938759088516235f, 0.8053685426712036f, 0.48346754908561707f, 0.2794829308986664f, 0.9025143980979919f, 0.5623018741607666f, 0.9480205774307251f, -0.2645066976547241f, 0.08588762581348419f, 0.12130359560251236f, 0.07044775784015656f, 0.8278959393501282f, 0.1932148039340973f, 0.10263022035360336f, 0.00905725546181202f, -0.8764877915382385f, 0.5743195414543152f, 0.9192972779273987f, 0.3921400308609009f, 0.5808936357498169f, 0.7393859624862671f, 0.38597533106803894f, 0.4727981984615326f, -0.07748698443174362f, 0.0548577755689621f, 0.5987434387207031f, 0.5940167307853699f, 0.3663402795791626f, 0.2739356458187103f, 0.20732568204402924f, 0.21504871547222137f, -0.2203052043914795f, 0.6703042984008789f, 0.6379289031028748f, 0.849825382232666f, 0.6012911200523376f, 0.9038379788398743f, 0.49831774830818176f, 0.11828511953353882f, -0.6699315309524536f, 0.22050778567790985f, 0.3339211940765381f, 0.1189558133482933f, 0.2594643533229828f, 0.9552810788154602f, 0.17972272634506226f, 0.641941249370575f, -0.4376688301563263f, 0.7503699064254761f, 0.9836651682853699f, 0.6623392105102539f, 0.7849147915840149f, 0.1880466789007187f, 0.8358128666877747f, 0.6444553136825562f, -0.022364690899848938f, 0.05993551388382912f, 0.6547135710716248f, 0.8227047324180603f, 0.35463830828666687f, 0.7472566962242126f, 0.9140310287475586f, 0.09860743582248688f, -0.53891521692276f, 0.929094135761261f, 0.9087686538696289f, 0.2603832185268402f, 0.6058704853057861f, 0.6449857950210571f, 0.5333290100097656f, 0.47045260667800903f, -0.2382192611694336f, 0.7410556077957153f, 0.5587232112884521f, 0.4283190667629242f, 0.6284419298171997f, 0.3288472890853882f, 0.18757399916648865f, 0.558111846446991f, -0.33267903327941895f, 0.22543132305145264f, 0.1871381551027298f, 0.16190947592258453f, 0.8892136216163635f, 0.6640912294387817f, 0.0231914184987545f, 0.11203547567129135f, -0.14523859322071075f, 0.08105001598596573f, 0.551404595375061f, 0.13513001799583435f, 0.054510120302438736f, 0.556861400604248f, 0.5251590013504028f, 0.2572023570537567f, -0.21883292496204376f, 0.178252175450325f, 0.9664420485496521f, 0.3262875974178314f, 0.32109832763671875f, 0.5987136363983154f, 0.6698976159095764f, 0.5803446769714355f, -0.5540494322776794f, 0.9186410307884216f, 0.42619362473487854f, 0.137942373752594f, 0.772994339466095f, 0.8967946767807007f, 0.6629593968391418f, 0.43294382095336914f, -0.7296583652496338f, 0.7082252502441406f, 0.32996949553489685f, 0.4632800221443176f, 0.43966811895370483f, 0.7945134043693542f, 0.4219808578491211f, 0.2562454044818878f, -0.23456788063049316f, 0.6236985325813293f, 0.7115179300308228f, 0.25899040699005127f, 0.011607135646045208f, 0.7069773077964783f, 0.4049157500267029f, 0.5639521479606628f, -0.880137026309967f, 0.019543826580047607f, 0.6166476011276245f, 0.4452631175518036f, 0.22220131754875183f, 0.837725043296814f, 0.2236696183681488f, 0.698668360710144f, -0.9720428586006165f, 0.8401678800582886f, 0.2706647217273712f, 0.6741220355033875f, 0.5268198847770691f, 0.1714242547750473f, 0.06870399415493011f, 0.8916999697685242f, -0.7839110493659973f, 0.006341771222651005f, 0.24038581550121307f, 0.3028324842453003f, 0.7371463775634766f, 0.90196692943573f, 0.7620814442634583f, 0.2421891987323761f, -0.0766863152384758f, 0.2067355513572693f, 0.9459651112556458f, 0.1395578533411026f, 0.6672653555870056f, 0.9697915315628052f, 0.08623044192790985f, 0.6231251955032349f, -0.9221926927566528f, 0.6122410297393799f, 0.11654701083898544f, 0.5015802383422852f, 0.5801833868026733f, 0.24971753358840942f, 0.7057442665100098f, 0.9600102305412292f, -0.0803995206952095f, 0.3818836808204651f, 0.9467304348945618f, 0.34120747447013855f, 0.944674015045166f, 0.6226959824562073f, 0.0972394123673439f, 0.5313723087310791f, -0.28041091561317444f, 0.4634859561920166f, 0.637454092502594f, 0.22966448962688446f, 0.8442701101303101f, 0.7372494339942932f, 0.562932014465332f, 0.0789123922586441f, -0.8926166892051697f, 0.022196443751454353f, 0.17931734025478363f, 0.5250370502471924f, 0.3370990753173828f, 0.800125777721405f, 0.6963671445846558f, 0.019562499597668648f, -0.9510321021080017f, 0.44036686420440674f, 0.09264544397592545f, 0.6358749270439148f, 0.4401717483997345f, 0.42200446128845215f, 0.4668382406234741f, 0.7847115397453308f, -0.5932915806770325f, 0.504040539264679f, 0.4154696464538574f, 0.45735985040664673f, 0.4267028570175171f, 0.9649226665496826f, 0.5048077702522278f, 0.9650429487228394f, -0.9165566563606262f, 0.24675796926021576f, 0.650824785232544f, 0.7697982788085938f, 0.6227831840515137f, 0.5187870860099792f, 0.34438657760620117f, 0.9540200233459473f, -0.45045530796051025f, 0.30122822523117065f, 0.5497468113899231f, 0.9471703767776489f, 0.8367661237716675f, 0.8206148147583008f, 0.06275033205747604f, 0.9867265820503235f, -0.6674559712409973f, 0.8880168199539185f, 0.9505870938301086f, 0.38122954964637756f, 0.6478831171989441f, 0.17397497594356537f, 0.5584223866462708f, 0.3745862543582916f, -0.9359875321388245f, 0.05038207396864891f, 0.09219349175691605f, 0.3261112570762634f, 0.638942539691925f, 0.6539497375488281f, 0.03754659369587898f, 0.027051832526922226f, -0.3567552864551544f, 0.870337724685669f, 0.3040757477283478f, 0.9594529867172241f, 0.4891892075538635f, 0.967422366142273f, 0.2650989592075348f, 0.782787024974823f, -0.6185029149055481f, 0.06408670544624329f, 0.7182826995849609f, 0.5167738795280457f, 0.6692355871200562f, 0.5052168965339661f, 0.8398808836936951f, 0.3768790662288666f, -0.47901254892349243f, 0.053664401173591614f, 0.6508762836456299f, 0.7757333517074585f, 0.6274943947792053f, 0.13772794604301453f, 0.33055487275123596f, 0.6439469456672668f, -0.43341782689094543f, 0.27073967456817627f, 0.42459774017333984f, 0.2590506076812744f, 0.647409200668335f, 0.9562251567840576f, 0.6459338068962097f, 0.33001020550727844f, -0.3198246359825134f, 0.47638005018234253f, 0.6499596834182739f, 0.989534854888916f, 0.22873131930828094f, 0.9086695909500122f, 0.49075794219970703f, 0.5818153619766235f, -0.8638107776641846f, 0.47508135437965393f, 0.15688520669937134f, 0.5661684274673462f, 0.3946987986564636f, 0.578874945640564f, 0.6992926597595215f, 0.7891154885292053f, -0.5896353125572205f, 0.7985047101974487f, 0.7360572814941406f, 0.8194925785064697f, 0.24313141405582428f, 0.428930401802063f, 0.8007074594497681f, 0.9826352000236511f, -0.3646719753742218f, 0.4127574563026428f, 0.13489297032356262f, 0.6042711138725281f, 0.09946682304143906f, 0.24894306063652039f, 0.009401156567037106f, 0.7864463925361633f, -0.8322907090187073f, 0.3012373447418213f, 0.8355025053024292f, 0.3374333381652832f, 0.9004390835762024f, 0.6246515512466431f, 0.14018458127975464f, 0.5432835817337036f, -0.6364873647689819f, 0.8224033117294312f, 0.46635279059410095f, 0.6593016386032104f, 0.8612313270568848f, 0.9664086699485779f, 0.11456995457410812f, 0.24702312052249908f, -0.871366560459137f, 0.2691313624382019f, 0.5353479385375977f, 0.9799238443374634f, 0.2710442543029785f, 0.9145987629890442f, 0.1308830976486206f, 0.30001384019851685f, -0.10406124591827393f, 0.9644566774368286f, 0.9153711795806885f, 0.5972902774810791f, 0.47826090455055237f, 0.15742453932762146f, 0.5262393951416016f, 0.8918190002441406f, -0.1777166873216629f, 0.5424086451530457f, 0.6112608313560486f, 0.09402710199356079f, 0.8411575555801392f, 0.44813522696495056f, 0.7353988885879517f, 0.04846494272351265f, -0.6868284344673157f, 0.36112263798713684f, 0.07473516464233398f, 0.867351770401001f, 0.5689855813980103f, 0.5282079577445984f, 0.9219658374786377f, 0.13697192072868347f, -0.19058898091316223f, 0.945293128490448f, 0.9606396555900574f, 0.1542857587337494f, 0.7157274484634399f, 0.9454972147941589f, 0.12738102674484253f, 0.9805847406387329f, -0.13159525394439697f, 0.5814311504364014f, 0.03989245742559433f, 0.681980550289154f, 0.8149793744087219f, 0.10815870761871338f, 0.5338548421859741f, 0.8662128448486328f, -0.7750726342201233f, 0.4974120855331421f, 0.40570324659347534f, 0.06633506715297699f, 0.85379558801651f, 0.4079417884349823f, 0.1720997393131256f, 0.29807722568511963f, -0.15534742176532745f, 0.25355568528175354f, 0.7055612802505493f, 0.2639772593975067f, 0.4519561529159546f, 0.6374526619911194f, 0.564437747001648f, 0.25255364179611206f, -0.14410313963890076f, 0.8937348127365112f, 0.30186375975608826f, 0.004742330871522427f, 0.7486770153045654f, 0.2882745862007141f, 0.15800830721855164f, 0.12016886472702026f, -0.7535921931266785f, 0.2579747438430786f, 0.5671159625053406f, 0.369176983833313f, 0.028141142800450325f, 0.33904996514320374f, 0.34670543670654297f, 0.3256814181804657f, -0.018799064680933952f, 0.05875534191727638f, 0.8202084898948669f, 0.8423472046852112f, 0.6657400131225586f, 0.9222555756568909f, 0.32065221667289734f, 0.4129984974861145f, -0.4608258306980133f, 0.8546128869056702f, 0.9466021656990051f, 0.3853268325328827f, 0.9018946290016174f, 0.503328263759613f, 0.9853472113609314f, 0.6459287405014038f, -0.841452419757843f, 0.769062340259552f, 0.4514607787132263f, 0.8344885110855103f, 0.36347517371177673f, 0.567105233669281f, 0.7416226267814636f, 0.19259443879127502f, -0.3881741464138031f, 0.5381475687026978f, 0.8991402983665466f, 0.6139721870422363f, 0.3906267583370209f, 0.4197175204753876f, 0.43579933047294617f, 0.3646194040775299f, -0.9480772614479065f, 0.2746782600879669f, 0.6606110334396362f, 0.7746496200561523f, 0.9865921139717102f, 0.49007081985473633f, 0.08352432399988174f, 0.9696862101554871f, -0.9416578412055969f, 0.7761175036430359f, 0.44259682297706604f, 0.8325473666191101f, 0.29902026057243347f, 0.033296145498752594f, 0.9491974711418152f, 0.8743700385093689f, -0.20429956912994385f, 0.6544492840766907f, 0.8330094218254089f, 0.29098647832870483f, 0.9323240518569946f, 0.5557959079742432f, 0.6921854019165039f, 0.17257551848888397f, -0.6991177201271057f, 0.8931946754455566f, 0.8112689256668091f, 0.7265975475311279f, 0.03075980953872204f, 0.07450953125953674f, 0.8209006786346436f, 0.7218862175941467f, -0.9980560541152954f, 0.007414184045046568f, 0.7779539823532104f, 0.5444615483283997f, 0.5826734900474548f, 0.8599979877471924f, 0.5829547643661499f, 0.950016438961029f, -0.7359354496002197f, 0.9233250021934509f, 0.24696533381938934f, 0.43131813406944275f, 0.39592641592025757f, 0.010768722742795944f, 0.47521740198135376f, 0.728690505027771f, -0.6026642918586731f, 0.08859527856111526f, 0.5097073316574097f, 0.7401810884475708f, 0.36183878779411316f, 0.4539678990840912f, 0.8484031558036804f, 0.8153639435768127f, -0.48664143681526184f, 0.6553606986999512f, 0.03298697620630264f, 0.6354091763496399f, 0.5350593328475952f, 0.5508520603179932f, 0.7769056558609009f, 0.5482019186019897f, -0.6930274963378906f, 0.408363938331604f, 0.031817127019166946f, 0.6022899746894836f, 0.8751132488250732f, 0.5417942404747009f, 0.42867377400398254f, 0.6888954639434814f, -0.008253687992691994f, 0.5283327698707581f, 0.695951521396637f, 0.36446550488471985f, 0.8153117299079895f, 0.8467097282409668f, 0.5318707227706909f, 0.7678472995758057f, -0.5283277630805969f, 0.08530057966709137f, 0.7413552403450012f, 0.4073164463043213f, 0.6340913772583008f, 0.8902137279510498f, 0.26692527532577515f, 0.369900107383728f, -0.1977708488702774f, 0.4600166380405426f, 0.16656453907489777f, 0.9750156998634338f, 0.6534954309463501f, 0.7416335344314575f, 0.9812065362930298f, 0.8047905564308167f, -0.4215375483036041f, 0.7433963418006897f, 0.628676176071167f, 0.4996461272239685f, 0.5202676653862f, 0.4008168578147888f, 0.7899330258369446f, 0.13904869556427002f, -0.7293469309806824f, 0.1311502754688263f, 0.7449083924293518f, 0.06864075362682343f, 0.10144730657339096f, 0.9722304344177246f, 0.6055241823196411f, 0.8555783033370972f, -0.2619553208351135f, 0.7229821085929871f, 0.5955374836921692f, 0.9426236748695374f, 0.4643651247024536f, 0.4034847617149353f, 0.5775716304779053f, 0.7689318656921387f, -0.4166533350944519f, 0.5115914940834045f, 0.014809014275670052f, 0.5825909972190857f, 0.25518789887428284f, 0.8533931970596313f, 0.42723050713539124f, 0.0565459169447422f, -0.5608007311820984f, 0.9167903661727905f, 0.7954715490341187f, 0.08552618324756622f, 0.7079066634178162f, 0.4789716899394989f, 0.226069375872612f, 0.6560652852058411f, -0.9206095933914185f, 0.346813827753067f, 0.43992042541503906f, 0.7826024889945984f, 0.01259532105177641f, 0.49148234724998474f, 0.1241227462887764f, 0.553538978099823f, -0.6384918689727783f, 0.8107908964157104f, 0.27959775924682617f, 0.29615864157676697f, 0.9674429893493652f, 0.25628069043159485f, 0.8110972046852112f, 0.1299464851617813f, -0.8211657404899597f, 0.3807121217250824f, 0.3224244713783264f, 0.8557119369506836f, 0.6114742159843445f, 0.18008913099765778f, 0.29644739627838135f, 0.0711972638964653f, -0.9268586039543152f, 0.3072468936443329f, 0.6845261454582214f, 0.4189111292362213f, 0.5849963426589966f, 0.09547259658575058f, 0.9123214483261108f, 0.45774421095848083f, -0.28073325753211975f, 0.5246996879577637f, 0.9055814743041992f, 0.6411921977996826f, 0.4698924422264099f, 0.9296880960464478f, 0.7018519639968872f, 0.5555453300476074f, -0.6030348539352417f, 0.9442611932754517f, 0.862102746963501f, 0.13065561652183533f, 0.7428551912307739f, 0.089887835085392f, 0.8349022269248962f, 0.22093677520751953f, -0.62706059217453f, 0.4224664568901062f, 0.717909038066864f, 0.25190818309783936f, 0.3550203740596771f, 0.6868892908096313f, 0.9127346873283386f, 0.75168377161026f, -0.05575057119131088f, 0.610956072807312f, 0.9082698225975037f, 0.42537721991539f, 0.8715876340866089f, 0.9863252639770508f, 0.6059466600418091f, 0.6381977796554565f, -0.37894073128700256f, 0.5049183964729309f, 0.8276316523551941f, 0.5031446218490601f, 0.12055442482233047f, 0.6604576706886292f, 0.46170738339424133f, 0.008813168853521347f, -0.8129534125328064f, 0.7964780330657959f, 0.9033963680267334f, 0.8751097917556763f, 0.3567395806312561f, 0.14273345470428467f, 0.9116366505622864f, 0.05869365856051445f, -0.7753098607063293f, 0.03978491574525833f, 0.027943816035985947f, 0.8071192502975464f, 0.09065289795398712f, 0.7895413637161255f, 0.15708748996257782f, 0.5835909843444824f, -0.33339834213256836f, 0.4316744804382324f, 0.0325772762298584f, 0.43440958857536316f, 0.6735737323760986f, 0.5147027969360352f, 0.8432594537734985f, 0.7282364368438721f, -0.1491730809211731f, 0.008713227696716785f, 0.8630375266075134f, 0.5833693742752075f, 0.9060449004173279f, 0.23044231534004211f, 0.7917149662971497f, 0.8257706165313721f, -0.21745996177196503f, 0.1515902727842331f, 0.584568440914154f, 0.32005131244659424f, 0.14438436925411224f, 0.999013364315033f, 0.1938972771167755f, 0.498065710067749f, -0.9292812347412109f, 0.2768755257129669f, 0.99687260389328f, 0.18964307010173798f, 0.915587842464447f, 0.890499472618103f, 0.919916570186615f, 0.7509628534317017f, -0.3495084345340729f, 0.5866054892539978f, 0.39235159754753113f, 0.9009703397750854f, 0.7797912359237671f, 0.8138157725334167f, 0.7610775828361511f, 0.5588882565498352f, -0.1510234922170639f, 0.211854487657547f, 0.0773768350481987f, 0.9660536050796509f, 0.31438180804252625f, 0.10803685337305069f, 0.8364812731742859f, 0.8600490689277649f, -0.9603082537651062f, 0.48546311259269714f, 0.36170724034309387f, 0.7832410931587219f, 0.5907228589057922f, 0.9137275218963623f, 0.2976715564727783f, 0.8672059178352356f, -0.5493630170822144f, 0.9242767691612244f, 0.7370349168777466f, 0.7447311282157898f, 0.25310662388801575f, 0.5248445868492126f, 0.15025146305561066f, 0.2032455950975418f, -0.11844596266746521f, 0.07526271790266037f, 0.04327888414263725f, 0.7742019295692444f, 0.2795528471469879f, 0.3967982530593872f, 0.44570666551589966f, 0.8810935020446777f, -0.7850141525268555f, 0.765423595905304f, 0.1259797066450119f, 0.5011993050575256f, 0.46232712268829346f, 0.19373062252998352f, 0.9619619846343994f, 0.3353497087955475f, -0.8499560356140137f, 0.3535902500152588f, 0.6247311234474182f, 0.8738818168640137f, 0.34577879309654236f, 0.36052578687667847f, 0.3307296633720398f, 0.9106966257095337f, -0.2625380754470825f, 0.10992245376110077f, 0.7934103012084961f, 0.6752027273178101f, 0.7043600082397461f, 0.3502199947834015f, 0.8356950879096985f, 0.31589359045028687f, -0.1075635701417923f, 0.7881559133529663f, 0.06814615428447723f, 0.8641267418861389f, 0.1634434163570404f, 0.5627039670944214f, 0.4616905152797699f, 0.4267275929450989f, -0.03440219908952713f, 0.9626374244689941f, 0.4102998673915863f, 0.19661201536655426f, 0.785987377166748f, 0.3501493036746979f, 0.45890024304389954f, 0.7927202582359314f, -0.8227634429931641f, 0.851669430732727f, 0.8681896924972534f, 0.30824336409568787f, 0.33453887701034546f, 0.5349171757698059f, 0.5843902230262756f, 0.42893359065055847f, -0.9373374581336975f, 0.5859657526016235f, 0.7792366147041321f, 0.6260704398155212f, 0.9372153878211975f, 0.43618497252464294f, 0.21653129160404205f, 0.7973184585571289f, -0.9559740424156189f, 0.6473232507705688f, 0.2093440145254135f, 0.06185825541615486f, 0.4037777781486511f, 0.02414177544414997f, 0.7700398564338684f, 0.4471435248851776f, -0.855896532535553f, 0.5592546463012695f, 0.20344488322734833f, 0.2587364912033081f, 0.30292436480522156f, 0.07168305665254593f, 0.7912023663520813f, 0.5145909786224365f, -0.5367258787155151f, 0.5440421104431152f, 0.37233489751815796f, 0.9784544110298157f, 0.010826926678419113f, 0.7287864685058594f, 0.9092931747436523f, 0.8407500386238098f, -0.16180609166622162f, 0.366556316614151f, 0.5127003788948059f, 0.5444254875183105f, 0.6501441597938538f, 0.4437805712223053f, 0.8464637994766235f, 0.4911053776741028f, -0.4832935035228729f, 0.576169490814209f, 0.11248980462551117f, 0.3306509256362915f, 0.07224981486797333f, 0.8992146849632263f, 0.9206665754318237f, 0.45049813389778137f, -0.7599411606788635f, 0.8026430606842041f, 0.12659470736980438f, 0.613307774066925f, 0.821013867855072f, 0.3299083709716797f, 0.6961698532104492f, 0.8074813485145569f, -0.5423154830932617f, 0.9678118228912354f, 0.5202744603157043f, 0.44324010610580444f, 0.8460128903388977f, 0.44766727089881897f, 0.7881706357002258f, 0.23480941355228424f, -0.6237574219703674f, 0.6669124364852905f, 0.5058355331420898f, 0.5542149543762207f, 0.568932056427002f, 0.01571754552423954f, 0.44098755717277527f, 0.48318177461624146f, -0.9382522106170654f, 0.4193429946899414f, 0.3274020850658417f, 0.7588239312171936f, 0.867592453956604f, 0.9559412002563477f, 0.0183787290006876f, 0.7536418437957764f, -0.336743026971817f, 0.20377469062805176f, 0.843398928642273f, 0.7270738482475281f, 0.44699373841285706f, 0.9937622547149658f, 0.745599091053009f, 0.019088761880993843f, -0.698056161403656f, 0.2789161205291748f, 0.05828217789530754f, 0.35006389021873474f, 0.9963815808296204f, 0.45107632875442505f, 0.42970967292785645f, 0.14838024973869324f, -0.1424514353275299f, 0.7408438920974731f, 0.7559391856193542f, 0.30390384793281555f, 0.34864646196365356f, 0.4280627369880676f, 0.8675588369369507f, 0.6558072566986084f, -0.8822894096374512f, 0.8326694965362549f, 0.03456176444888115f, 0.9278855323791504f, 0.058965183794498444f, 0.41243812441825867f, 0.2282511442899704f, 0.46388596296310425f, -0.1006503477692604f, 0.6041289567947388f, 0.42950913310050964f, 0.47864457964897156f, 0.10171742737293243f, 0.7655824422836304f, 0.01729237660765648f, 0.6375658512115479f, -0.21090415120124817f, 0.41624921560287476f, 0.5767820477485657f, 0.5468649864196777f, 0.0007155948551371694f, 0.39375826716423035f, 0.7748661041259766f, 0.8826109170913696f, -0.7467769980430603f, 0.32441025972366333f, 0.33832451701164246f, 0.20827367901802063f, 0.4112537205219269f, 0.5279555916786194f, 0.5077512860298157f, 0.8059538006782532f, -0.6795365810394287f, 0.39290371537208557f, 0.19027911126613617f, 0.4987971782684326f, 0.2715652883052826f, 0.5917901992797852f, 0.28474128246307373f, 0.5074554681777954f, -0.2762262523174286f, 0.5069059133529663f, 0.1610468477010727f, 0.5718543529510498f, 0.4947015643119812f, 0.4043597877025604f, 0.999822735786438f, 0.7954707741737366f, -0.36522892117500305f, 0.5522646307945251f, 0.21070751547813416f, 0.8905276656150818f, 0.866939902305603f, 0.5496348738670349f, 0.2704673707485199f, 0.2263038158416748f, -0.054092902690172195f, 0.5508450269699097f, 0.4118022918701172f, 0.8293116092681885f, 0.7194193601608276f, 0.6863906383514404f, 0.40238216519355774f, 0.6034848690032959f, -0.7827696204185486f, 0.7232088446617126f, 0.17484267055988312f, 0.9986886382102966f, 0.8340759873390198f, 0.851154625415802f, 0.5384520292282104f, 0.6410347819328308f, -0.9374890923500061f, 0.8592233657836914f, 0.1814294457435608f, 0.0913844108581543f, 0.8378515839576721f, 0.2121567577123642f, 0.35363200306892395f, 0.014796385541558266f, -0.842933177947998f, 0.13182954490184784f, 0.3199869692325592f, 0.20553837716579437f, 0.1509498655796051f, 0.995708703994751f, 0.4041271209716797f, 0.263460636138916f, -0.4146168529987335f, 0.5561904907226562f, 0.7321357131004333f, 0.9300570487976074f, 0.834041953086853f, 0.592121422290802f, 0.6219155192375183f, 0.2570783495903015f, -0.12064278870820999f, 0.4104604423046112f, 0.9369287490844727f, 0.7645636200904846f, 0.565739095211029f, 0.15873290598392487f, 0.910092830657959f, 0.1386069506406784f, -0.1906060427427292f, 0.7654836177825928f, 0.4818180799484253f, 0.2695930600166321f, 0.37509840726852417f, 0.6355850696563721f, 0.8613282442092896f, 0.32247620820999146f, -0.02636747434735298f, 0.7072449922561646f, 0.35877278447151184f, 0.11998380720615387f, 0.46612879633903503f, 0.6345373392105103f, 0.7226580381393433f, 0.28090018033981323f, -0.2893041968345642f, 0.13938823342323303f, 0.4091885983943939f, 0.3758079707622528f, 0.5769702196121216f, 0.2091677039861679f, 0.1788436621427536f, 0.9114701747894287f, -0.5158066749572754f, 0.5923096537590027f, 0.1913343369960785f, 0.70323246717453f, 0.7050360441207886f, 0.5174484848976135f, 0.2002941071987152f, 0.012248052284121513f, -0.7502231597900391f, 0.5676530003547668f, 0.8414468765258789f, 0.03103511966764927f, 0.15610948204994202f, 0.5623884201049805f, 0.5096895694732666f, 0.908250093460083f, -0.9769390225410461f, 0.36577722430229187f, 0.7995736598968506f, 0.8235640525817871f, 0.6893813610076904f, 0.49070075154304504f, 0.44294601678848267f, 0.5968813896179199f, -0.3112508952617645f, 0.35715728998184204f, 0.3525586426258087f, 0.20558670163154602f, 0.6039813756942749f, 0.9933846592903137f, 0.8289521932601929f, 0.37441012263298035f, -0.8147486448287964f, 0.5734835863113403f, 0.8027675747871399f, 0.20782233774662018f, 0.34838077425956726f, 0.18190792202949524f, 0.3118547797203064f, 0.5106001496315002f, -0.48517143726348877f, 0.17018958926200867f, 0.47069641947746277f, 0.8742451667785645f, 0.4297236502170563f, 0.3824264109134674f, 0.7236146330833435f, 0.19642135500907898f, -0.5703650712966919f, 0.04443828761577606f, 0.228128582239151f, 0.7444793581962585f, 0.5355827212333679f, 0.0578174814581871f, 0.9752990007400513f, 0.5624306201934814f, -0.1496966928243637f, 0.928849995136261f, 0.5295156836509705f, 0.6484739184379578f, 0.014323919080197811f, 0.778117835521698f, 0.7874364852905273f, 0.41344624757766724f, -0.8695226907730103f, 0.7049169540405273f, 0.6284698247909546f, 0.7226837873458862f, 0.17261138558387756f, 0.3643718659877777f, 0.4779512286186218f, 0.9650896191596985f, -0.8621805906295776f, 0.39362451434135437f, 0.6090846657752991f, 0.035723138600587845f, 0.4931837022304535f, 0.38095515966415405f, 0.5284013152122498f, 0.8783228993415833f, -0.915614902973175f, 0.5470831990242004f, 0.29881012439727783f, 0.5750309228897095f, 0.07684019953012466f, 0.19202913343906403f, 0.7444280982017517f, 0.29139354825019836f, -0.9064098596572876f, 0.6956796646118164f, 0.7248205542564392f, 0.573190450668335f, 0.19291207194328308f, 0.19203956425189972f, 0.05269112065434456f, 0.056394319981336594f, -0.26546651124954224f, 0.5910957455635071f, 0.5485177636146545f, 0.29027509689331055f, 0.2735816538333893f, 0.3135020136833191f, 0.6895104050636292f, 0.9894519448280334f, -0.40864771604537964f, 0.07565218210220337f, 0.8559936285018921f, 0.9061775207519531f, 0.13462744653224945f, 0.07664304226636887f, 0.17693831026554108f, 0.708928108215332f, -0.007633379194885492f, 0.4981176257133484f, 0.29854145646095276f, 0.6620559096336365f, 0.7005531787872314f, 0.04147804155945778f, 0.3412880301475525f, 0.22981032729148865f, -0.699426531791687f, 0.9299072623252869f, 0.9166891574859619f, 0.66526859998703f, 0.3318842947483063f, 0.22859202325344086f, 0.9138965606689453f, 0.056285567581653595f, -0.45110437273979187f, 0.3070460855960846f, 0.7021768689155579f, 0.769537627696991f, 0.4719020128250122f, 0.3257657289505005f, 0.8687771558761597f, 0.06211065128445625f, -0.22909601032733917f, 0.9402356147766113f, 0.2543001174926758f, 0.6338851451873779f, 0.05332336202263832f, 0.9147613048553467f, 0.2260439544916153f, 0.44752228260040283f, -0.02793920785188675f, 0.9572232365608215f, 0.20042209327220917f, 0.6463640332221985f, 0.7303628325462341f, 0.8934346437454224f, 0.8672376275062561f, 0.8774375915527344f, -0.0032351110130548477f, 0.8338133096694946f, 0.6952432990074158f, 0.23443758487701416f, 0.1897825449705124f, 0.13301312923431396f, 0.2764192223548889f, 0.7921566963195801f, -0.1523365080356598f, 0.041360825300216675f, 0.12620575726032257f, 0.40953153371810913f, 0.7547062039375305f, 0.7656785249710083f, 0.2273067682981491f, 0.8622785806655884f, -0.6602594256401062f, 0.4956381022930145f, 0.04386727511882782f, 0.5638876557350159f, 0.07816863805055618f, 0.9282347559928894f, 0.9559932947158813f, 0.949683666229248f, -0.3883264660835266f, 0.22587813436985016f, 0.03350634127855301f, 0.7620106935501099f, 0.7858044505119324f, 0.2154935747385025f, 0.6644827723503113f, 0.25910478830337524f, -0.7708048224449158f, 0.530372679233551f, 0.9666953086853027f, 0.443063348531723f, 0.8115637302398682f, 0.3027447462081909f, 0.10168551653623581f, 0.7087714076042175f, -0.3278481066226959f, 0.10372496396303177f, 0.45532238483428955f, 0.04395560175180435f, 0.16517633199691772f, 0.34229278564453125f, 0.03883007913827896f, 0.5699621438980103f, -0.8935750722885132f, 0.6513714790344238f, 0.9635403752326965f, 0.7265933752059937f, 0.2603444457054138f, 0.4308323860168457f, 0.8526697754859924f, 0.5314345955848694f, -0.8800258040428162f, 0.8252757787704468f, 0.28216037154197693f, 0.4164634644985199f, 0.7866044640541077f, 0.6861607432365417f, 0.2345016896724701f, 0.8054500818252563f, -0.7395585179328918f, 0.7552778124809265f, 0.5670477151870728f, 0.3264714777469635f, 0.5961790680885315f, 0.31092369556427f, 0.43106573820114136f, 0.7052903175354004f, -0.269000768661499f, 0.4235988259315491f, 0.05868127942085266f, 0.42212092876434326f, 0.17379683256149292f, 0.4222390055656433f, 0.602871298789978f, 0.9431191682815552f, -0.4113869071006775f, 0.4898274838924408f, 0.46511998772621155f, 0.8291886448860168f, 0.17285701632499695f, 0.3945577144622803f, 0.18251320719718933f, 0.9661241769790649f, -0.37572231888771057f, 0.2464674711227417f, 0.9086164832115173f, 0.9630498886108398f, 0.8280327320098877f, 0.8075335025787354f, 0.19472375512123108f, 0.5621387362480164f, -0.6479425430297852f, 0.8324821591377258f, 0.6055590510368347f, 0.7791907787322998f, 0.8118930459022522f, 0.36595281958580017f, 0.17039668560028076f, 0.035512808710336685f, -0.856727659702301f, 0.7143254280090332f, 0.18362997472286224f, 0.33143752813339233f, 0.3729207515716553f, 0.8236104846000671f, 0.05455922335386276f, 0.9059659242630005f, -0.3536475896835327f, 0.5886189937591553f, 0.683087944984436f, 0.7004138827323914f, 0.7037487626075745f, 0.47869277000427246f, 0.9158058762550354f, 0.2746577560901642f, -0.11855930835008621f, 0.385226845741272f, 0.22011007368564606f, 0.0414605438709259f, 0.2921414077281952f, 0.6650614738464355f, 0.3387916684150696f, 0.951546311378479f, -0.93194180727005f, 0.8634629845619202f, 0.25367048382759094f, 0.8087610602378845f, 0.46454280614852905f, 0.9717197418212891f, 0.4287225008010864f, 0.0506557933986187f, -0.6101006865501404f, 0.5644593834877014f, 0.3193824589252472f, 0.3289216160774231f, 0.5047018527984619f, 0.8024407029151917f, 0.6455207467079163f, 0.8553745746612549f, -0.23744817078113556f, 0.5364178419113159f, 0.2704271376132965f, 0.12369532138109207f, 0.21901294589042664f, 0.16346299648284912f, 0.9035532474517822f, 0.7191408276557922f, -0.639571487903595f, 0.9678252935409546f, 0.1116635799407959f, 0.11049172282218933f, 0.5033186078071594f, 0.7770928740501404f, 0.6800697445869446f, 0.9908788204193115f, -0.20848329365253448f, 0.4091557264328003f, 0.8716433644294739f, 0.4644765257835388f, 0.6162759065628052f, 0.4569646120071411f, 0.23826123774051666f, 0.7391086220741272f, -0.1593221127986908f, 0.16380895674228668f, 0.12274955958127975f, 0.6008204221725464f, 0.39955100417137146f, 0.12317628413438797f, 0.9770308136940002f, 0.8319125175476074f, -0.768194854259491f, 0.6853364109992981f, 0.7558451294898987f, 0.07927430421113968f, 0.8842871785163879f, 0.6616427898406982f, 0.9252321124076843f, 0.18103085458278656f, -0.8635543584823608f, 0.4690260887145996f, 0.826902449131012f, 0.844913125038147f, 0.2294185608625412f, 0.5553662180900574f, 0.3468979299068451f, 0.7572212219238281f, -0.1527426689863205f, 0.8924693465232849f, 0.18103939294815063f, 0.9759874939918518f, 0.9810537099838257f, 0.7629536390304565f, 0.6753793954849243f, 0.26768597960472107f, -0.684603750705719f, 0.5922130346298218f, 0.5160776972770691f, 0.7787259817123413f, 0.23918147385120392f, 0.5032411813735962f, 0.8806113600730896f, 0.6606656312942505f, -0.07541855424642563f, 0.3051367402076721f, 0.562105119228363f, 0.04228835180401802f, 0.4800584316253662f, 0.5357306599617004f, 0.12229546904563904f, 0.4935590624809265f, -0.9839139580726624f, 0.871793806552887f, 0.7792264223098755f, 0.7404631972312927f, 0.3502906858921051f, 0.5433019995689392f, 0.7343246340751648f, 0.7916894555091858f, -0.9581377506256104f, 0.31043121218681335f, 0.6993855237960815f, 0.4098358750343323f, 0.6972544193267822f, 0.6614570617675781f, 0.018527282401919365f, 0.9494965076446533f, -0.17145852744579315f, 0.4449365437030792f, 0.642983078956604f, 0.30166974663734436f, 0.2798129916191101f, 0.21102406084537506f, 0.08529012650251389f, 0.8179988861083984f, -0.6173694729804993f, 0.2716391682624817f, 0.5247507691383362f, 0.3142513036727905f, 0.32841524481773376f, 0.022219812497496605f, 0.9088507294654846f, 0.22509564459323883f, -0.44956162571907043f, 0.2962169647216797f, 0.3284749686717987f, 0.1732272058725357f, 0.8098223805427551f, 0.21342144906520844f, 0.5576621890068054f, 0.7295339703559875f, -0.572669267654419f, 0.6043601036071777f, 0.6275768280029297f, 0.8235738277435303f, 0.6102627515792847f, 0.5096560120582581f, 0.195574551820755f, 0.20506982505321503f, -0.007635309360921383f, 0.765242338180542f, 0.2577986717224121f, 0.1029113382101059f, 0.6742112040519714f, 0.46447083353996277f, 0.39431530237197876f, 0.33792373538017273f, -0.8285050392150879f, 0.8263639807701111f, 0.38332587480545044f, 0.15949216485023499f, 0.9407081604003906f, 0.06260601431131363f, 0.3206555247306824f, 0.03941904380917549f, -0.7506226897239685f, 0.8745900392532349f, 0.7471809983253479f, 0.3384191393852234f, 0.24936175346374512f, 0.9142568707466125f, 0.8859516978263855f, 0.23027156293392181f, -0.3113008141517639f, 0.583977222442627f, 0.629967451095581f, 0.010665008798241615f, 0.8842276930809021f, 0.8697681427001953f, 0.8180223703384399f, 0.6647781729698181f, -0.34576401114463806f, 0.09410753101110458f, 0.5253910422325134f, 0.7056143879890442f, 0.4004898965358734f, 0.761290967464447f, 0.8198497891426086f, 0.5624760985374451f, -0.0005363355157896876f, 0.42392441630363464f, 0.5757200121879578f, 0.49253609776496887f, 0.37555262446403503f, 0.9818128943443298f, 0.018466489389538765f, 0.815751314163208f, -0.23644259572029114f, 0.39285165071487427f, 0.542668879032135f, 0.696900486946106f, 0.25007471442222595f, 0.20921768248081207f, 0.41270938515663147f, 0.5034736394882202f, -0.6016438603401184f, 0.44719669222831726f, 0.5143807530403137f, 0.9698296785354614f, 0.4769679605960846f, 0.6335652470588684f, 0.340339332818985f, 0.8960272669792175f, -0.300348699092865f, 0.0036436014343053102f, 0.6296029090881348f, 0.48262444138526917f, 0.995672881603241f, 0.13429415225982666f, 0.6212217807769775f, 0.5046564936637878f, -0.331651508808136f, 0.12842972576618195f, 0.813304603099823f, 0.6434200406074524f, 0.05808379501104355f, 0.7915510535240173f, 0.37356674671173096f, 0.24369391798973083f, -0.5802310705184937f, 0.32524508237838745f, 0.27317899465560913f, 0.6104955077171326f, 0.6403576731681824f, 0.0357295498251915f, 0.9136085510253906f, 0.08215925842523575f, -0.6603519916534424f, 0.7107301950454712f, 0.7081565856933594f, 0.2846948206424713f, 0.15655171871185303f, 0.9395102858543396f, 0.014910251833498478f, 0.8150469660758972f, -0.2838252782821655f, 0.6830089688301086f, 0.06936132162809372f, 0.5423089265823364f, 0.8044137358665466f, 0.9213212132453918f, 0.3029654920101166f, 0.3023965060710907f, -0.7864639759063721f, 0.18906089663505554f, 0.43657299876213074f, 0.47552311420440674f, 0.07715748995542526f, 0.7257282733917236f, 0.6867056488990784f, 0.796005368232727f, -0.6993430852890015f, 0.282246470451355f, 0.8027929067611694f, 0.23622097074985504f, 0.20148421823978424f, 0.21106426417827606f, 0.1942332684993744f, 0.21601857244968414f, -0.660800576210022f, 0.012447976507246494f, 0.6543583273887634f, 0.519095778465271f, 0.1909855455160141f, 0.8261252641677856f, 0.11307259649038315f, 0.4526149332523346f, -0.7570096254348755f, 0.9192043542861938f, 0.7028168439865112f, 0.7622546553611755f, 0.8415483236312866f, 0.9598397612571716f, 0.7899681925773621f, 0.1210215762257576f, -0.4337337613105774f, 0.6704515218734741f, 0.34822317957878113f, 0.8928492069244385f, 0.5470075011253357f, 0.3321479558944702f, 0.4404800832271576f, 0.013740809634327888f, -0.5238061547279358f, 0.05388936400413513f, 0.3100145161151886f, 0.8170335292816162f, 0.25401923060417175f, 0.8086166977882385f, 0.7605862021446228f, 0.07999613881111145f, -0.9342198967933655f, 0.4964749813079834f, 0.9227271676063538f, 0.4270027279853821f, 0.9223803281784058f, 0.7998969554901123f, 0.8879107236862183f, 0.6345372796058655f, -0.8965632915496826f, 0.5809388756752014f, 0.2751617729663849f, 0.9592809081077576f, 0.8357200622558594f, 0.6715741157531738f, 0.7325518131256104f, 0.2905230224132538f, -0.01879888027906418f, 0.904634952545166f, 0.426315575838089f, 0.5281484723091125f, 0.18034085631370544f, 0.4083886742591858f, 0.3948940336704254f, 0.5489615797996521f, -0.9166135191917419f, 0.4288693368434906f, 0.9241792559623718f, 0.8072030544281006f, 0.48308300971984863f, 0.6756996512413025f, 0.08117371052503586f, 0.836696982383728f, -0.08991176635026932f, 0.9201244711875916f, 0.2663198709487915f, 0.7128912210464478f, 0.04076575115323067f, 0.25852763652801514f, 0.09909213334321976f, 0.9381592869758606f, -0.8105595111846924f, 0.7417631149291992f, 0.24207079410552979f, 0.5008899569511414f, 0.6518822312355042f, 0.9100971817970276f, 0.8573886752128601f, 0.9533642530441284f, -0.6988818645477295f, 0.8905501961708069f, 0.9263713359832764f, 0.5522539019584656f, 0.476668119430542f, 0.2626575827598572f, 0.29798418283462524f, 0.9419410824775696f, -0.9737957715988159f, 0.5995526313781738f, 0.6413019299507141f, 0.6002839207649231f, 0.10779611766338348f, 0.38122305274009705f, 0.8027066588401794f, 0.052615005522966385f, -0.4885832965373993f, 0.6437211036682129f, 0.9593756198883057f, 0.5347092747688293f, 0.790242612361908f, 0.7521849274635315f, 0.6530173420906067f, 0.969667375087738f, -0.4827800393104553f, 0.8158297538757324f, 0.4678249657154083f, 0.0293177030980587f, 0.07658310234546661f, 0.3218388259410858f, 0.020802978426218033f, 0.834385871887207f, -0.03962147980928421f, 0.459096223115921f, 0.5202383995056152f, 0.588342547416687f, 0.617382824420929f, 0.21101778745651245f, 0.2024267613887787f, 0.06430909782648087f, -0.24006082117557526f, 0.3884958028793335f, 0.5016932487487793f, 0.6129369139671326f, 0.4028456509113312f, 0.8939777612686157f, 0.6224488615989685f, 0.24688594043254852f, -0.9571091532707214f, 0.5347527265548706f, 0.36772727966308594f, 0.24004942178726196f, 0.3955462872982025f, 0.516751229763031f, 0.9906906485557556f, 0.08837339282035828f, -0.153984934091568f, 0.13387255370616913f, 0.6668024063110352f, 0.7486540675163269f, 0.3102898597717285f, 0.43354788422584534f, 0.006377255544066429f, 0.26196688413619995f, -0.28266647458076477f, 0.8286129236221313f, 0.36017781496047974f, 0.2649487853050232f, 0.728076159954071f, 0.8187317848205566f, 0.11857722699642181f, 0.5384154319763184f, -0.20434577763080597f, 0.6232112050056458f, 0.5035123825073242f, 0.6898849010467529f, 0.8466709852218628f, 0.751868724822998f, 0.903544008731842f, 0.3090702295303345f, -0.32313159108161926f, 0.2570573389530182f, 0.0915645956993103f, 0.9493945240974426f, 0.9996245503425598f, 0.6630460619926453f, 0.025067593902349472f, 0.4025036692619324f, -0.3903188407421112f, 0.46707746386528015f, 0.30074018239974976f, 0.4388968050479889f, 0.6647027730941772f, 0.1687772274017334f, 0.2508566975593567f, 0.3987056314945221f, -0.7293086051940918f, 0.7243094444274902f, 0.4371218979358673f, 0.9600601196289062f, 0.2847795784473419f, 0.37292060256004333f, 0.6151398420333862f, 0.8359959721565247f, -0.2104983627796173f, 0.3736107647418976f, 0.7099607586860657f, 0.25952479243278503f, 0.22031575441360474f, 0.5784656405448914f, 0.4455453157424927f, 0.42218270897865295f, -0.7629344463348389f, 0.7047722339630127f, 0.545818030834198f, 0.48854273557662964f, 0.4269477427005768f, 0.1517508625984192f, 0.45613282918930054f, 0.7881573438644409f, -0.6980149149894714f, 0.05396485701203346f, 0.020567677915096283f, 0.7134687304496765f, 0.688771665096283f, 0.772697925567627f, 0.22160163521766663f, 0.7583547234535217f, -0.34859588742256165f, 0.1971626579761505f, 0.4246281087398529f, 0.5927053689956665f, 0.8903059363365173f, 0.09799341857433319f, 0.5768023133277893f, 0.2294529676437378f, -0.3537193536758423f, 0.5560513138771057f, 0.830673098564148f, 0.18385301530361176f, 0.5429514646530151f, 0.8757035136222839f, 0.5230299830436707f, 0.09597837924957275f, -0.5529240965843201f, 0.8762695789337158f, 0.602199137210846f, 0.9802056550979614f, 0.03861103951931f, 0.29327988624572754f, 0.6525843143463135f, 0.7977460622787476f, -0.5537592768669128f, 0.010473617352545261f, 0.35782715678215027f, 0.7574020624160767f, 0.19573266804218292f, 0.1298232078552246f, 0.6191068887710571f, 0.676011860370636f, -0.8097526431083679f, 0.5699955821037292f, 0.2141810655593872f, 0.6646502017974854f, 0.22923217713832855f, 0.5881469249725342f, 0.4259093105792999f, 0.25536081194877625f, -0.15225757658481598f, 0.4693499505519867f, 0.5602362751960754f, 0.512981116771698f, 0.24207356572151184f, 0.8509631156921387f, 0.1508050411939621f, 0.5363480448722839f, -0.3141010105609894f, 0.9005318284034729f, 0.6020007133483887f, 0.1443602591753006f, 0.21206511557102203f, 0.5861096382141113f, 0.04874275624752045f, 0.8534778356552124f, -0.4518912136554718f, 0.5703157782554626f, 0.828724205493927f, 0.9747130870819092f, 0.5254073739051819f, 0.4177856147289276f, 0.6620259284973145f, 0.5941286683082581f, -0.45314276218414307f, 0.5841764807701111f, 0.9734567999839783f, 0.29850947856903076f, 0.2129715383052826f, 0.4426017701625824f, 0.41701680421829224f, 0.3234352469444275f, -0.26676347851753235f, 0.8695616126060486f, 0.22608204185962677f, 0.9944987893104553f, 0.4593903124332428f, 0.9688195586204529f, 0.19460415840148926f, 0.8497216105461121f, -0.07943356037139893f, 0.5091153979301453f, 0.380085825920105f, 0.004405041225254536f, 0.4574469327926636f, 0.15463510155677795f, 0.4096347391605377f, 0.5006178021430969f, -0.20025403797626495f, 0.6109371781349182f, 0.1780332773923874f, 0.2730701267719269f, 0.35876840353012085f, 0.1590179204940796f, 0.971558153629303f, 0.7958972454071045f, -0.9652273654937744f, 0.1837223470211029f, 0.044829417020082474f, 0.08063691109418869f, 0.08318126946687698f, 0.6683223247528076f, 0.48251330852508545f, 0.9433320760726929f, -0.18191862106323242f, 0.22676965594291687f, 0.013446223922073841f, 0.4735150933265686f, 0.1937582790851593f, 0.3621455132961273f, 0.5107322931289673f, 0.40091606974601746f, -0.99763423204422f, 0.4323333203792572f, 0.0914551168680191f, 0.9940122961997986f, 0.869631826877594f, 0.20877499878406525f, 0.9572750329971313f, 0.9547985196113586f, -0.9424625039100647f, 0.3615661561489105f, 0.027989203110337257f, 0.6021400094032288f, 0.4399346709251404f, 0.7697715759277344f, 0.4445931017398834f, 0.6711310744285583f, -0.34496065974235535f, 0.4094763696193695f, 0.41739189624786377f, 0.7857021689414978f, 0.9517151713371277f, 0.19302527606487274f, 0.4082082509994507f, 0.952326774597168f, -0.8723828196525574f, 0.3114788234233856f, 0.876167356967926f, 0.7968365550041199f, 0.28908035159111023f, 0.08762077242136002f, 0.5818556547164917f, 0.7698723077774048f, -0.0644305944442749f, 0.16588900983333588f, 0.7400562763214111f, 0.612129271030426f, 0.16922427713871002f, 0.7902143001556396f, 0.08171535283327103f, 0.9303566217422485f, -0.7427831888198853f, 0.9335594177246094f, 0.5495306849479675f, 0.1422625482082367f, 0.2796914875507355f, 0.29351845383644104f, 0.030770761892199516f, 0.9163030385971069f, -0.9626980423927307f, 0.9512636065483093f, 0.43362268805503845f, 0.6669059991836548f, 0.08389929682016373f, 0.5308070182800293f, 0.843270480632782f, 0.6818481087684631f, -0.01485419925302267f, 0.0026354992296546698f, 0.3367418348789215f, 0.5564901232719421f, 0.37102094292640686f, 0.28907647728919983f, 0.9779204726219177f, 0.28665322065353394f, -0.9698176383972168f, 0.8656070828437805f, 0.9333028197288513f, 0.7489396929740906f, 0.5739642977714539f, 0.06270883977413177f, 0.057747408747673035f, 0.48011234402656555f, -0.3801781237125397f, 0.655841588973999f, 0.8344826102256775f, 0.5958617925643921f, 0.9006958603858948f, 0.04935063049197197f, 0.8188113570213318f, 0.5535025596618652f, -0.747641384601593f, 0.8324117660522461f, 0.11188771575689316f, 0.29061242938041687f, 0.6030914783477783f, 0.1742902249097824f, 0.9623550772666931f, 0.7394469976425171f, -0.45987144112586975f, 0.5768980979919434f, 0.3754120469093323f, 0.32522284984588623f, 0.15404444932937622f, 0.6967469453811646f, 0.8507188558578491f, 0.41739314794540405f, -0.2834266126155853f, 0.1366167962551117f, 0.3036595582962036f, 0.0754416361451149f, 0.051605306565761566f, 0.0312466062605381f, 0.06682541221380234f, 0.5849851369857788f, -0.6706703901290894f, 0.16626745462417603f, 0.06907811015844345f, 0.9936847686767578f, 0.875842273235321f, 0.2500562369823456f, 0.2632218301296234f, 0.8943344950675964f, -0.477667897939682f, 0.6820050477981567f, 0.2935869097709656f, 0.7433685064315796f, 0.30662479996681213f, 0.3729126751422882f, 0.41978928446769714f, 0.4388144612312317f, -0.42140811681747437f, 0.2786560654640198f, 0.5165058374404907f, 0.7638821005821228f, 0.2742445170879364f, 0.828049898147583f, 0.2415759265422821f, 0.7734129428863525f, -0.2889663577079773f, 0.22386960685253143f, 0.9515423774719238f, 0.9131027460098267f, 0.6204333901405334f, 0.09072922170162201f, 0.07087666541337967f, 0.07309485971927643f, -0.04589776694774628f, 0.8833428621292114f, 0.6106040477752686f, 0.7648274898529053f, 0.9543417096138f, 0.038446031510829926f, 0.8219302296638489f, 0.48305556178092957f, -0.4623887836933136f, 0.5942881107330322f, 0.7544837594032288f, 0.7272112369537354f, 0.08240848779678345f, 0.646886944770813f, 0.6664937138557434f, 0.9234912991523743f, -0.6150311827659607f, 0.920643150806427f, 0.5844698548316956f, 0.6345582604408264f, 0.7539254426956177f, 0.9451401233673096f, 0.09062530100345612f, 0.9343328475952148f, -0.4392825663089752f, 0.46675777435302734f, 0.25232821702957153f, 0.575046181678772f, 0.8780412077903748f, 0.8320307731628418f, 0.1132153570652008f, 0.3628867566585541f, -0.8652475476264954f, 0.05917561054229736f, 0.2986232340335846f, 0.6252793073654175f, 0.7693189978599548f, 0.9720708131790161f, 0.719862163066864f, 0.552768349647522f, -0.46127140522003174f, 0.33353254199028015f, 0.9748181700706482f, 0.5904383063316345f, 0.06903921812772751f, 0.34167391061782837f, 0.0923902615904808f, 0.994041919708252f, -0.38826295733451843f, 0.16106240451335907f, 0.13725492358207703f, 0.185682475566864f, 0.8921594619750977f, 0.22734875977039337f, 0.23604479432106018f, 0.2079768031835556f, -0.3726702928543091f, 0.6996623277664185f, 0.7499970197677612f, 0.4940485656261444f, 0.6114183068275452f, 0.05096839368343353f, 0.19250135123729706f, 0.43794503808021545f, -0.9203927516937256f, 0.2301502674818039f, 0.5664929151535034f, 0.48025864362716675f, 0.9659780859947205f, 0.25417008996009827f, 0.027553606778383255f, 0.8072524666786194f, -0.8173906207084656f, 0.9824744462966919f, 0.11870786547660828f, 0.47084280848503113f, 0.1125742644071579f, 0.006725751329213381f, 0.8284950852394104f, 0.43593519926071167f, -0.34264838695526123f, 0.6476005911827087f, 0.44195327162742615f, 0.6985320448875427f, 0.06777562946081161f, 0.522937536239624f, 0.23571887612342834f, 0.3582959473133087f, -0.6598618030548096f, 0.14645139873027802f, 0.6927798986434937f, 0.826826810836792f, 0.5678854584693909f, 0.4394661784172058f, 0.5843835473060608f, 0.2090592235326767f, -0.7385257482528687f, 0.09570657461881638f, 0.19490772485733032f, 0.6329184770584106f, 0.07288806885480881f, 0.09017837047576904f, 0.41348928213119507f, 0.00818400178104639f, -0.631602942943573f, 0.9440009593963623f, 0.18025192618370056f, 0.5792768597602844f, 0.8169216513633728f, 0.6983381509780884f, 0.049982454627752304f, 0.772471010684967f, -0.19333067536354065f, 0.7520151138305664f, 0.8166298866271973f, 0.8363980650901794f, 0.6410394310951233f, 0.5858458280563354f, 0.3041398823261261f, 0.8455954194068909f, -0.9483469724655151f, 0.20324891805648804f, 0.4640040397644043f, 0.5106426477432251f, 0.7625426650047302f, 0.6765406131744385f, 0.1697840541601181f, 0.9429811835289001f, -0.4570765495300293f, 0.029176775366067886f, 0.8317357301712036f, 0.9910029172897339f, 0.9934840202331543f, 0.34793487191200256f, 0.35187458992004395f, 0.6923243999481201f, -0.07369139045476913f, 0.5474799871444702f, 0.9217953681945801f, 0.015693336725234985f, 0.9851922392845154f, 0.12070050835609436f, 0.5599392652511597f, 0.42984265089035034f, -0.02050483413040638f, 0.4624652564525604f, 0.9884357452392578f, 0.27737000584602356f, 0.11687362194061279f, 0.536080539226532f, 0.31938281655311584f, 0.8874606490135193f, -0.14874859154224396f, 0.2117755115032196f, 0.45499899983406067f, 0.5154137015342712f, 0.7181100249290466f, 0.4227363169193268f, 0.5872603058815002f, 0.3519318103790283f, -0.2055002599954605f, 0.5274559855461121f, 0.7653648853302002f, 0.4517713785171509f, 0.4983452558517456f, 0.4328921437263489f, 0.8213747143745422f, 0.36312565207481384f, -0.3734649121761322f, 0.6040551066398621f, 0.2686409056186676f, 0.6509500741958618f, 0.9328741431236267f, 0.6161840558052063f, 0.8419626355171204f, 0.9483509659767151f, -0.3546929657459259f, 0.5041983127593994f, 0.3495355546474457f, 0.7378361821174622f, 0.22996684908866882f, 0.567269504070282f, 0.4176906645298004f, 0.9555425643920898f, -0.02885301224887371f, 0.09839744120836258f, 0.6138918995857239f, 0.9255605340003967f, 0.6399722695350647f, 0.04347008094191551f, 0.25861045718193054f, 0.9043576121330261f, -0.5964489579200745f, 0.9677312970161438f, 0.3578222990036011f, 0.7071089148521423f, 0.9287668466567993f, 0.61722332239151f, 0.2658930718898773f, 0.0943983867764473f, -0.6085066199302673f, 0.1540556252002716f, 0.11512837558984756f, 0.7583343386650085f, 0.15771356225013733f, 0.44397976994514465f, 0.16002850234508514f, 0.3973364531993866f, -0.19188813865184784f, 0.6238232851028442f, 0.23351314663887024f, 0.718563437461853f, 0.15160542726516724f, 0.5788350701332092f, 0.9033835530281067f, 0.3799131214618683f, -0.2627300024032593f, 0.5567068457603455f, 0.03429482504725456f, 0.6258171796798706f, 0.648137092590332f, 0.6958909630775452f, 0.7055286169052124f, 0.8485799431800842f, -0.9541481733322144f, 0.37002021074295044f, 0.13460852205753326f, 0.4816235899925232f, 0.06817977130413055f, 0.31300005316734314f, 0.8643892407417297f, 0.9263169765472412f, -0.4275237023830414f, 0.7191577553749084f, 0.9947720170021057f, 0.47068601846694946f, 0.8405026197433472f, 0.05803283676505089f, 0.4530935287475586f, 0.0714101567864418f, -0.21077260375022888f, 0.47569286823272705f, 0.2078133523464203f, 0.6841265559196472f, 0.5740995407104492f, 0.08618278056383133f, 0.14087606966495514f, 0.9256008267402649f, -0.9507672190666199f, 0.4864705204963684f, 0.8415930867195129f, 0.48262229561805725f, 0.7709434032440186f, 0.6731087565422058f, 0.1647825390100479f, 0.10406383872032166f, -0.7778822183609009f, 0.6586939096450806f, 0.1722625344991684f, 0.3377887010574341f, 0.329653799533844f, 0.5019599795341492f, 0.46233606338500977f, 0.9737785458564758f, -0.11984052509069443f, 0.36639541387557983f, 0.912293016910553f, 0.7975789904594421f, 0.19014456868171692f, 0.6147395372390747f, 0.2965388596057892f, 0.5329226851463318f, -0.8992180228233337f, 0.08186668902635574f, 0.17209789156913757f, 0.5737667083740234f, 0.8298890590667725f, 0.977578341960907f, 0.5403603315353394f, 0.37568041682243347f, -0.13592301309108734f, 0.9742003679275513f, 0.4791018068790436f, 0.4933066964149475f, 0.8650335669517517f, 0.2558598816394806f, 0.36317864060401917f, 0.34213826060295105f, -0.47336462140083313f, 0.7444307208061218f, 0.09607528895139694f, 0.7781095504760742f, 0.49500271677970886f, 0.3025868833065033f, 0.0025773150846362114f, 0.462985634803772f, -0.05275868624448776f, 0.4664860665798187f, 0.6961216926574707f, 0.011493795551359653f, 0.28984203934669495f, 0.5419854521751404f, 0.16080822050571442f, 0.6730135679244995f, -0.78413987159729f, 0.005323883146047592f, 0.20848272740840912f, 0.7771108150482178f, 0.2683199644088745f, 0.45375296473503113f, 0.9357743859291077f, 0.8867794275283813f, -0.5603445172309875f, 0.6902959942817688f, 0.13789162039756775f, 0.18552516400814056f, 0.8499255776405334f, 0.8739032745361328f, 0.9054996967315674f, 0.37921836972236633f, -0.2751818597316742f, 0.028722580522298813f, 0.6457902789115906f, 0.6085193753242493f, 0.5620608925819397f, 0.17224913835525513f, 0.07481234520673752f, 0.7364822626113892f, -0.09454777836799622f, 0.06640685349702835f, 0.431535542011261f, 0.2289125919342041f, 0.35716116428375244f, 0.9604290723800659f, 0.8729102611541748f, 0.007077951915562153f, -0.9978758692741394f, 0.03474694862961769f, 0.9146316051483154f, 0.8390886187553406f, 0.10374588519334793f, 0.39068710803985596f, 0.820578932762146f, 0.9734292030334473f, -0.20763888955116272f, 0.43997079133987427f, 0.022655688226222992f, 0.6658806204795837f, 0.7891227006912231f, 0.5289875864982605f, 0.5490849018096924f, 0.2625150680541992f, -0.7880313396453857f, 0.7042449116706848f, 0.3214661478996277f, 0.5475991368293762f, 0.06210744380950928f, 0.5479479432106018f, 0.032663773745298386f, 0.18908672034740448f, -0.070882648229599f, 0.659966766834259f, 0.5086272358894348f, 0.06796439737081528f, 0.623504102230072f, 0.05036170780658722f, 0.4279877245426178f, 0.19332030415534973f, -0.3369738757610321f, 0.3817440867424011f, 0.9482909440994263f, 0.3637794554233551f, 0.6683072447776794f, 0.5249865055084229f, 0.06086551398038864f, 0.9811998009681702f, -0.04690803587436676f, 0.17375566065311432f, 0.3687935769557953f, 0.5570880770683289f, 0.9910111427307129f, 0.8210697174072266f, 0.9557138681411743f, 0.23911815881729126f, -0.40537789463996887f, 0.8169114589691162f, 0.37923115491867065f, 0.07608182728290558f, 0.24546906352043152f, 0.48137885332107544f, 0.6230088472366333f, 0.6383041143417358f, -0.3691009283065796f, 0.4431726038455963f, 0.06325150281190872f, 0.8682757019996643f, 0.06563742458820343f, 0.19794861972332f, 0.8681601881980896f, 0.266804575920105f, -0.5370619893074036f, 0.3891420364379883f, 0.8021251559257507f, 0.061135418713092804f, 0.3222401440143585f, 0.9931699633598328f, 0.7192761301994324f, 0.8337288498878479f, -0.044789716601371765f, 0.9852505326271057f, 0.7110365629196167f, 0.8705730438232422f, 0.5994038581848145f, 0.9059849977493286f, 0.032661084085702896f, 0.8401535153388977f, -0.22395572066307068f, 0.8003281354904175f, 0.5068496465682983f, 0.8925954699516296f, 0.30414485931396484f, 0.5763803720474243f, 0.21739505231380463f, 0.8289868235588074f, -0.1234564259648323f, 0.8331651091575623f, 0.5589659810066223f, 0.04959991201758385f, 0.39711421728134155f, 0.15389004349708557f, 0.588824987411499f, 0.3179483413696289f, -0.1011100560426712f, 0.16767030954360962f, 0.800743818283081f, 0.027426498010754585f, 0.13421595096588135f, 0.754525899887085f, 0.7601049542427063f, 0.4068533778190613f, -0.22923420369625092f, 0.9097742438316345f, 0.045898184180259705f, 0.2802766263484955f, 0.5252999663352966f, 0.42052409052848816f, 0.4599216878414154f, 0.8714907765388489f, -0.19519171118736267f, 0.5705806612968445f, 0.10656990855932236f, 0.824768602848053f, 0.5775546431541443f, 0.3335314691066742f, 0.6678937077522278f, 0.9673326015472412f, -0.606163740158081f, 0.5291415452957153f, 0.6726921796798706f, 0.946994423866272f, 0.5340345501899719f, 0.3008868992328644f, 0.20379842817783356f, 0.09194841235876083f, -0.15589116513729095f, 0.47024112939834595f, 0.25262370705604553f, 0.5819081664085388f, 0.45361462235450745f, 0.594623863697052f, 0.8852953314781189f, 0.4987548887729645f, -0.9821918606758118f, 0.3336288630962372f, 0.4447966516017914f, 0.22677525877952576f, 0.5770084857940674f, 0.2652028501033783f, 0.7426324486732483f, 0.597416877746582f, -0.9491297006607056f, 0.4727189242839813f, 0.9876523017883301f, 0.7781710624694824f, 0.23281385004520416f, 0.17687369883060455f, 0.46230223774909973f, 0.007410925813019276f, -0.8577125668525696f, 0.5281519293785095f, 0.21702149510383606f, 0.5142185091972351f, 0.24534699320793152f, 0.8055418729782104f, 0.48400959372520447f, 0.7097487449645996f, -0.05883574113249779f, 0.16525162756443024f, 0.3390716314315796f, 0.23157818615436554f, 0.8968210220336914f, 0.46650266647338867f, 0.6016714572906494f, 0.6619519591331482f, -0.2737637460231781f, 0.8163610100746155f, 0.763282835483551f, 0.20257623493671417f, 0.9517196416854858f, 0.12003500759601593f, 0.7791969776153564f, 0.8980410695075989f, -0.1654389202594757f, 0.3307085633277893f, 0.4108135998249054f, 0.5674567818641663f, 0.833400309085846f, 0.630517840385437f, 0.31261298060417175f, 0.5854710340499878f, -0.7045813798904419f, 0.671992838382721f, 0.7875059843063354f, 0.2831651568412781f, 0.7883023619651794f, 0.018769290298223495f, 0.5785804390907288f, 0.845392644405365f, -0.5639707446098328f, 0.35234737396240234f, 0.08128917962312698f, 0.9221512675285339f, 0.13421253859996796f, 0.794546902179718f, 0.09996990859508514f, 0.18554751574993134f, -0.23921406269073486f, 0.6489213705062866f, 0.5632896423339844f, 0.766339123249054f, 0.20044636726379395f, 0.8234366774559021f, 0.6088196039199829f, 0.48470041155815125f, -0.5485720038414001f, 0.7468726634979248f, 0.42893746495246887f, 0.787432849407196f, 0.5212801098823547f, 0.37813061475753784f, 0.12739333510398865f, 0.7941597104072571f, -0.5732806921005249f, 0.31643128395080566f, 0.7959457635879517f, 0.3241267502307892f, 0.42480775713920593f, 0.587212324142456f, 0.8691753149032593f, 0.7191347479820251f, -0.7740439176559448f, 0.3549492359161377f, 0.7173081636428833f, 0.37347880005836487f, 0.2817983031272888f, 0.8260512351989746f, 0.17853491008281708f, 0.7339833974838257f, -0.6588062047958374f, 0.8248047828674316f, 0.40532928705215454f, 0.055626995861530304f, 0.4081254005432129f, 0.030843764543533325f, 0.7191371917724609f, 0.9678720831871033f, -0.5524154901504517f, 0.691243052482605f, 0.37078848481178284f, 0.40451136231422424f, 0.49664685130119324f, 0.554512619972229f, 0.022623399272561073f, 0.9520489573478699f, -0.6404207944869995f, 0.02063664048910141f, 0.9671487808227539f, 0.2418968677520752f, 0.6727787852287292f, 0.602557897567749f, 0.6403398513793945f, 0.13617020845413208f, -0.05762606859207153f, 0.26049184799194336f, 0.6933104395866394f, 0.8703709840774536f, 0.2844853401184082f, 0.8103657364845276f, 0.08043817430734634f, 0.7514108419418335f, -0.985102117061615f, 0.5662140846252441f, 0.47328898310661316f, 0.7577810883522034f, 0.4294936954975128f, 0.5632451176643372f, 0.3502071499824524f, 0.1864853799343109f, -0.8665152192115784f, 0.1536162942647934f, 0.7422971725463867f, 0.5860354900360107f, 0.4180344343185425f, 0.6823535561561584f, 0.11398402601480484f, 0.2559734582901001f, -0.6414368748664856f, 0.31535229086875916f, 0.6665693521499634f, 0.83720862865448f, 0.44292983412742615f, 0.9493645429611206f, 0.405058890581131f, 0.30615800619125366f, -0.8654115200042725f, 0.5892701148986816f, 0.5054564476013184f, 0.07026822119951248f, 0.4012802839279175f, 0.6926661133766174f, 0.1439620554447174f, 0.9534417390823364f, -0.6447319388389587f, 0.10749296098947525f, 0.3453868329524994f, 0.5043839812278748f, 0.12693598866462708f, 0.8754304051399231f, 0.820711076259613f, 0.20965903997421265f, -0.08153381198644638f, 0.8782892823219299f, 0.1301158219575882f, 0.18941527605056763f, 0.9321920275688171f, 0.04350116848945618f, 0.3910270929336548f, 0.1336711198091507f, -0.04126125946640968f, 0.5977622270584106f, 0.22484029829502106f, 0.10861753672361374f, 0.06274432688951492f, 0.391932874917984f, 0.8882194757461548f, 0.668134868144989f, -0.5951958894729614f, 0.22977513074874878f, 0.18624131381511688f, 0.09509971737861633f, 0.4671854078769684f, 0.30155375599861145f, 0.5070106983184814f, 0.10296794772148132f, -0.3509747385978699f, 0.5853185057640076f, 0.7494778037071228f, 0.650847852230072f, 0.891370952129364f, 0.28541073203086853f, 0.558700680732727f, 0.3296176791191101f, -0.38436955213546753f, 0.6738578677177429f, 0.9337341785430908f, 0.4246159493923187f, 0.04906682297587395f, 0.9556946158409119f, 0.30263006687164307f, 0.7117378115653992f, -0.9973833560943604f, 0.47101283073425293f, 0.19608551263809204f, 0.03198227286338806f, 0.26257315278053284f, 0.8873147964477539f, 0.636789858341217f, 0.5057327151298523f, -0.38348978757858276f, 0.9931568503379822f, 0.6463260650634766f, 0.009291806258261204f, 0.8544992804527283f, 0.5518521070480347f, 0.5669432878494263f, 0.32845720648765564f, -0.9952568411827087f, 0.11810365319252014f, 0.16415661573410034f, 0.425983726978302f, 0.8808797597885132f, 0.1592264324426651f, 0.6225457191467285f, 0.7997030019760132f, -0.33086028695106506f, 0.8828945159912109f, 0.9190752506256104f, 0.940666675567627f, 0.5533237457275391f, 0.7576636075973511f, 0.3182023763656616f, 0.00775443110615015f, -0.5123026371002197f, 0.051571186631917953f, 0.2982582449913025f, 0.9673544764518738f, 0.9531574249267578f, 0.6946870684623718f, 0.9608858823776245f, 0.023540878668427467f, -0.9379200339317322f, 0.6889216899871826f, 0.09872382879257202f, 0.33533644676208496f, 0.5261285305023193f, 0.17123866081237793f, 0.1830970048904419f, 0.027498045936226845f, -0.38552945852279663f, 0.5496695041656494f, 0.45966637134552f, 0.3622237741947174f, 0.29819655418395996f, 0.37950992584228516f, 0.23143449425697327f, 0.3990849554538727f, -0.5302361249923706f, 0.3437814712524414f, 0.8600744605064392f, 0.29869481921195984f, 0.7934383153915405f, 0.5516674518585205f, 0.9410515427589417f, 0.6093835830688477f, -0.9807067513465881f, 0.5805237293243408f, 0.3655347228050232f, 0.6517588496208191f, 0.4073626697063446f, 0.5525509119033813f, 0.45433005690574646f, 0.5554624795913696f, -0.5228123068809509f, 0.1243596002459526f, 0.375163197517395f, 0.4974195957183838f, 0.2881382703781128f, 0.43658414483070374f, 0.2893948554992676f, 0.999306857585907f, -0.1662144511938095f, 0.20561625063419342f, 0.6971157193183899f, 0.735734760761261f, 0.6285345554351807f, 0.7519679665565491f, 0.6036795973777771f, 0.9526137113571167f, -0.8725236058235168f, 0.026388773694634438f, 0.32381153106689453f, 0.6737509965896606f, 0.6726499199867249f, 0.5209272503852844f, 0.5062612891197205f, 0.8359955549240112f, -0.9966405630111694f, 0.07820247858762741f, 0.7578803896903992f, 0.38885948061943054f, 0.7363991737365723f, 0.6291284561157227f, 0.9806172847747803f, 0.6155566573143005f, -0.33720213174819946f, 0.20338396728038788f, 0.12152672559022903f, 0.9679871797561646f, 0.2893067002296448f, 0.4996803104877472f, 0.7650920748710632f, 0.58516925573349f, -0.4465826749801636f, 0.12652048468589783f, 0.2772881090641022f, 0.2457570880651474f, 0.3866603672504425f, 0.08726511150598526f, 0.810522735118866f, 0.24411357939243317f, -0.8515281081199646f, 0.6782422065734863f, 0.2960825562477112f, 0.1268361359834671f, 0.7357785105705261f, 0.36790427565574646f, 0.46112939715385437f, 0.38273826241493225f, -0.9502683281898499f, 0.8358911871910095f, 0.22543755173683167f, 0.36583635210990906f, 0.6549385786056519f, 0.2511042654514313f, 0.7665416598320007f, 0.7614628076553345f, -0.8194305896759033f, 0.18556949496269226f, 0.92945796251297f, 0.5776422023773193f, 0.35397782921791077f, 0.45746931433677673f, 0.7869539856910706f, 0.939351499080658f, -0.511642575263977f, 0.14665962755680084f, 0.8246169686317444f, 0.6820443868637085f, 0.8618874549865723f, 0.7455250024795532f, 0.5316562652587891f, 0.6497313976287842f, -0.7958055138587952f, 0.7005372047424316f, 0.052543818950653076f, 0.5121947526931763f, 0.005712240934371948f, 0.8615626692771912f, 0.5718104839324951f, 0.5181583166122437f, -0.26136142015457153f, 0.253414124250412f, 0.6676039695739746f, 0.6817158460617065f, 0.10841282457113266f, 0.06549036502838135f, 0.7526530623435974f, 0.6750487685203552f, -0.47466760873794556f, 0.18551035225391388f, 0.7134082913398743f, 0.19562098383903503f, 0.11899738758802414f, 0.749748945236206f, 0.17145149409770966f, 0.06523565948009491f, -0.8051576614379883f, 0.9348359704017639f, 0.9233439564704895f, 0.939874529838562f, 0.6702195405960083f, 0.8125284314155579f, 0.182163804769516f, 0.9070398807525635f, -0.827857494354248f, 0.671998918056488f, 0.6780608892440796f, 0.9066782593727112f, 0.15358050167560577f, 0.8545413613319397f, 0.6685978174209595f, 0.622040331363678f, -0.7030000686645508f, 0.5302785634994507f, 0.06186540797352791f, 0.6406458020210266f, 0.43497973680496216f, 0.46325984597206116f, 0.5633398294448853f, 0.7071283459663391f, -0.44967392086982727f, 0.22877338528633118f, 0.5870994329452515f, 0.6560526490211487f, 0.7302861213684082f, 0.04428640007972717f, 0.14150576293468475f, 0.00880635529756546f, -0.7558512687683105f, 0.8572755455970764f, 0.7478339672088623f, 0.9846768975257874f, 0.4959038197994232f, 0.3166709840297699f, 0.7535855174064636f, 0.14891476929187775f, -0.3824600577354431f, 0.8067463040351868f, 0.43956536054611206f, 0.6066262125968933f, 0.9641971588134766f, 0.8168866038322449f, 0.47326183319091797f, 0.17658738791942596f, -0.5628061294555664f, 0.49637916684150696f, 0.5457518696784973f, 0.28827613592147827f, 0.8397256135940552f, 0.7436685562133789f, 0.08214834332466125f, 0.5333360433578491f, -0.5167986154556274f, 0.10629189014434814f, 0.3879237473011017f, 0.11558869481086731f, 0.9330167770385742f, 0.4115952253341675f, 0.6305307149887085f, 0.03466172516345978f, -0.5728830099105835f, 0.10290553420782089f, 0.39021772146224976f, 0.10877110809087753f, 0.09983918815851212f, 0.0003135929291602224f, 0.521016001701355f, 0.7217257618904114f, -0.4894479811191559f, 0.4771828353404999f, 0.851604163646698f, 0.17210575938224792f, 0.021264728158712387f, 0.20171239972114563f, 0.035662081092596054f, 0.33695274591445923f, -0.34437254071235657f, 0.6748172640800476f, 0.36840227246284485f, 0.7632672190666199f, 0.4146226644515991f, 0.5081478357315063f, 0.13959559798240662f, 0.20897464454174042f, -0.31382128596305847f, 0.7153906226158142f, 0.23876740038394928f, 0.9241202473640442f, 0.7268504500389099f, 0.5550550222396851f, 0.20061522722244263f, 0.17804063856601715f, -0.6074908971786499f, 0.940274715423584f, 0.32627418637275696f, 0.2965828776359558f, 0.5974871516227722f, 0.28919482231140137f, 0.7647704482078552f, 0.4614568054676056f, -0.8382704257965088f, 0.9182372093200684f, 0.7799807786941528f, 0.5192328691482544f, 0.21987175941467285f, 0.526443600654602f, 0.003912885673344135f, 0.6297305822372437f, -0.3640662431716919f, 0.8575165867805481f, 0.9683382511138916f, 0.5953452587127686f, 0.7013522982597351f, 0.07437966018915176f, 0.5073524713516235f, 0.0589100606739521f, -0.32603561878204346f, 0.63795006275177f, 0.08676877617835999f, 0.8786547780036926f, 0.3489101827144623f, 0.589615523815155f, 0.3251112997531891f, 0.13004273176193237f, -0.5538479685783386f, 0.038234829902648926f, 0.9457506537437439f, 0.44364726543426514f, 0.9720478057861328f, 0.8107343316078186f, 0.7274510264396667f, 0.736583948135376f, -0.48499277234077454f, 0.9357761740684509f, 0.833634614944458f, 0.6574153304100037f, 0.5944344401359558f, 0.8862773180007935f, 0.6489359736442566f, 0.8860538005828857f, -0.5155234932899475f, 0.23535776138305664f, 0.49295321106910706f, 0.18965400755405426f, 0.46384891867637634f, 0.8623766303062439f, 0.13692884147167206f, 0.4012332856655121f, -0.45750972628593445f, 0.8585231900215149f, 0.4887571632862091f, 0.9975079894065857f, 0.24784135818481445f, 0.4290187358856201f, 0.11422345787286758f, 0.13166813552379608f, -0.81082683801651f, 0.46796101331710815f, 0.01836288720369339f, 0.3201501965522766f, 0.9850593209266663f, 0.7122407555580139f, 0.5602076649665833f, 0.7055837512016296f, -0.514335572719574f, 0.7905681729316711f, 0.5529311895370483f, 0.08506157994270325f, 0.10235782712697983f, 0.14325286448001862f, 0.5798048973083496f, 0.03145241364836693f, -0.22707678377628326f, 0.6784260272979736f, 0.836653470993042f, 0.029663382098078728f, 0.5533334016799927f, 0.4471062123775482f, 0.9907903671264648f, 0.9771203994750977f, -0.7274771928787231f, 0.9924739599227905f, 0.6474831700325012f, 0.7678118944168091f, 0.04223569110035896f, 0.5230406522750854f, 0.4351121783256531f, 0.5678744912147522f, -0.4365229904651642f, 0.6014263033866882f, 0.2588861286640167f, 0.8249694108963013f, 0.5781417489051819f, 0.9844984412193298f, 0.5221365094184875f, 0.779553234577179f, -0.20254871249198914f, 0.741337239742279f, 0.3772735893726349f, 0.4437466263771057f, 0.7288539409637451f, 0.1351514309644699f, 0.9596766829490662f, 0.19498217105865479f, -0.9088323712348938f, 0.8110380172729492f, 0.7030669450759888f, 0.354965478181839f, 0.4593796730041504f, 0.24461427330970764f, 0.9202210307121277f, 0.9792497158050537f, -0.3447341322898865f, 0.4114791750907898f, 0.7876830697059631f, 0.24545921385288239f, 0.12448113411664963f, 0.0676652193069458f, 0.5857973694801331f, 0.17500519752502441f, -0.6202642321586609f, 0.33858221769332886f, 0.3375547230243683f, 0.13678285479545593f, 0.8379462957382202f, 0.5307137370109558f, 0.44381991028785706f, 0.5337453484535217f, -0.7808498740196228f, 0.028330272063612938f, 0.3000357151031494f, 0.37091997265815735f, 0.43016257882118225f, 0.36322104930877686f, 0.18816520273685455f, 0.4718160629272461f, -0.24310271441936493f, 0.6290795803070068f, 0.5431156754493713f, 0.2524804472923279f, 0.15056787431240082f, 0.901423990726471f, 0.7963177561759949f, 0.6229839324951172f, -0.7778607606887817f, 0.38872963190078735f, 0.8000598549842834f, 0.5529597997665405f, 0.99114990234375f, 0.3996923267841339f, 0.10442711412906647f, 0.7337839007377625f, -0.5248962044715881f, 0.03396403789520264f, 0.5245859622955322f, 0.5495806336402893f, 0.7496196627616882f, 0.1597331315279007f, 0.3965104818344116f, 0.6588229537010193f, -0.35603955388069153f, 0.613568127155304f, 0.4577621519565582f, 0.29797661304473877f, 0.03469906747341156f, 0.7226178646087646f, 0.03020273894071579f, 0.8550517559051514f, -0.5847599506378174f, 0.4776467978954315f, 0.15653096139431f, 0.3757944703102112f, 0.6055437922477722f, 0.15082234144210815f, 0.3674483299255371f, 0.11537538468837738f, -0.021253718063235283f, 0.12785187363624573f, 0.02060268074274063f, 0.20169542729854584f, 0.5074602961540222f, 0.48019281029701233f, 0.7253338694572449f, 0.3611803948879242f, -0.15490485727787018f, 0.32432821393013f, 0.8673772215843201f, 0.05527065321803093f, 0.9390597343444824f, 0.14558549225330353f, 0.8208695650100708f, 0.9813418388366699f, -0.43797415494918823f, 0.15889078378677368f, 0.4826739728450775f, 0.31102705001831055f, 0.6893685460090637f, 0.014272859320044518f, 0.4778176546096802f, 0.40919822454452515f, -0.8951413631439209f, 0.4502648711204529f, 0.6092492938041687f, 0.37228211760520935f, 0.628821074962616f, 0.3401356637477875f, 0.7621679306030273f, 0.8635810017585754f, -0.5815231800079346f, 0.3140352964401245f, 0.9203589558601379f, 0.27524861693382263f, 0.922114372253418f, 0.4446648955345154f, 0.9969986081123352f, 0.997024655342102f, -0.45232251286506653f, 0.14686734974384308f, 0.2646973729133606f, 0.16235466301441193f, 0.8889168500900269f, 0.19496949017047882f, 0.7725172638893127f, 0.8071511387825012f, -0.31506526470184326f, 0.28304314613342285f, 0.7425385117530823f, 0.6636157631874084f, 0.9248343110084534f, 0.8405432105064392f, 0.9386308789253235f, 0.7870147824287415f, -0.7339434623718262f, 0.029015205800533295f, 0.762007474899292f, 0.07367566972970963f, 0.9609469175338745f, 0.6453973054885864f, 0.8681159019470215f, 0.8493165373802185f, -0.43752965331077576f, 0.08871359378099442f, 0.3964378833770752f, 0.8861418962478638f, 0.1156238466501236f, 0.8511363863945007f, 0.27617400884628296f, 0.4989303946495056f, -0.3965608477592468f, 0.505669116973877f, 0.4394943118095398f, 0.15800544619560242f, 0.4888930320739746f, 0.017558151856064796f, 0.5672895312309265f, 0.5777993202209473f, -0.6584753394126892f, 0.9754196405410767f, 0.7952612638473511f, 0.205718994140625f, 0.5116975903511047f, 0.947404146194458f, 0.11438159644603729f, 0.8747305274009705f, -0.12866465747356415f, 0.3071742355823517f, 0.2042979598045349f, 0.6697831749916077f, 0.9150676727294922f, 0.12610629200935364f, 0.5188136696815491f, 0.8199688196182251f, -0.4963698983192444f, 0.6811808943748474f, 0.7954205870628357f, 0.5625965595245361f, 0.33562228083610535f, 0.10983794182538986f, 0.8370032906532288f, 0.34858962893486023f, -0.7439895868301392f, 0.05402539297938347f, 0.6525096297264099f, 0.43370962142944336f, 0.6511754393577576f, 0.591590166091919f, 0.8703963756561279f, 0.6203203797340393f, -0.9518272876739502f, 0.6858985424041748f, 0.5342010259628296f, 0.5863373279571533f, 0.353082537651062f, 0.9798734784126282f, 0.40583789348602295f, 0.3278627097606659f, -0.6715220808982849f, 0.5590277314186096f, 0.2539166510105133f, 0.10198323428630829f, 0.697311520576477f, 0.14204955101013184f, 0.8501831889152527f, 0.02679208479821682f, -0.8431107997894287f, 0.9854994416236877f, 0.7237605452537537f, 0.0048249647952616215f, 0.1752406805753708f, 0.4543122351169586f, 0.11805956065654755f, 0.04776645824313164f, -0.618998110294342f, 0.03335326164960861f, 0.7176748514175415f, 0.5477495789527893f, 0.08677573502063751f, 0.06489977240562439f, 0.2269502580165863f, 0.13405777513980865f, -0.9637641906738281f, 0.6544299125671387f, 0.03564095497131348f, 0.37414300441741943f, 0.1396469920873642f, 0.9067655205726624f, 0.13964733481407166f, 0.032618824392557144f, -0.2581750154495239f, 0.39892664551734924f, 0.41882285475730896f, 0.5518748164176941f, 0.9058534502983093f, 0.13621993362903595f, 0.7855027914047241f, 0.9199416041374207f, -0.8281338214874268f, 0.5292882323265076f, 0.8091786503791809f, 0.9995948672294617f, 0.5205792784690857f, 0.6366419792175293f, 0.7365326285362244f, 0.7951216101646423f, -0.3639427125453949f, 0.07272479683160782f, 0.9888144135475159f, 0.6059120893478394f, 0.05780314281582832f, 0.8173868060112f, 0.575451672077179f, 0.03742346540093422f, -0.782191276550293f, 0.5159270167350769f, 0.13392102718353271f, 0.2952967584133148f, 0.1477925032377243f, 0.561943769454956f, 0.5371118783950806f, 0.9908484220504761f, -0.6092948317527771f, 0.7849521636962891f, 0.2854149043560028f, 0.34731000661849976f, 0.7523589730262756f, 0.24937781691551208f, 0.8920129537582397f, 0.848300039768219f, -0.7219622135162354f, 0.24292947351932526f, 0.5685269236564636f, 0.0015109007945284247f, 0.8592613339424133f, 0.4260432720184326f, 0.6199123859405518f, 0.40423136949539185f, -0.7712724208831787f, 0.9485026597976685f, 0.33058595657348633f, 0.5801970362663269f, 0.927703857421875f, 0.19127191603183746f, 0.9117486476898193f, 0.3234839141368866f, -0.42431870102882385f, 0.2140454649925232f, 0.3964783251285553f, 0.17165620625019073f, 0.7698838710784912f, 0.10523671656847f, 0.8022556900978088f, 0.8769394755363464f, -0.19431480765342712f, 0.08837510645389557f, 0.1506146639585495f, 0.8195670247077942f, 0.36388713121414185f, 0.0286966972053051f, 0.2236778736114502f, 0.9693959951400757f, -0.6961221694946289f, 0.04100210592150688f, 0.28068041801452637f, 0.7989394068717957f, 0.9662157893180847f, 0.1540292650461197f, 0.9807891845703125f, 0.13006868958473206f, -0.014840593561530113f, 0.6744272708892822f, 0.6957786083221436f, 0.007438780274242163f, 0.3435725271701813f, 0.8061956763267517f, 0.4880780577659607f, 0.2804388701915741f, -0.9674375653266907f, 0.2954961061477661f, 0.4458739757537842f, 0.6479395031929016f, 0.2777705192565918f, 0.4501405656337738f, 0.3461225628852844f, 0.37421512603759766f, -0.9834157824516296f, 0.2813575267791748f, 0.4471924304962158f, 0.6580562591552734f, 0.6918182373046875f, 0.8713445663452148f, 0.686772882938385f, 0.9612368941307068f, -0.4939577877521515f, 0.7950271368026733f, 0.2195637971162796f, 0.7068527936935425f, 0.482764333486557f, 0.7068995237350464f, 0.4409887492656708f, 0.032968029379844666f, -0.7269737124443054f, 0.5777522325515747f, 0.6352927088737488f, 0.38366785645484924f, 0.04809549078345299f, 0.9259005784988403f, 0.4210718870162964f, 0.4082460403442383f, -0.3907581567764282f, 0.585710883140564f, 0.42887717485427856f, 0.49474963545799255f, 0.8661177158355713f, 0.8216014504432678f, 0.9998708963394165f, 0.2482786476612091f, -0.37911880016326904f, 0.2842569351196289f, 0.08344979584217072f, 0.029586952179670334f, 0.48612576723098755f, 0.596997082233429f, 0.028591638430953026f, 0.8929302096366882f, -0.7357650995254517f, 0.6897855997085571f, 0.24264879524707794f, 0.6072697639465332f, 0.6250133514404297f, 0.7673855423927307f, 0.19875717163085938f, 0.7489628195762634f, -0.07985495775938034f, 0.9826089143753052f, 0.770475447177887f, 0.6219152212142944f, 0.9582580327987671f, 0.07309510558843613f, 0.15658026933670044f, 0.7770442366600037f, -0.795717716217041f, 0.25377053022384644f, 0.8248656988143921f, 0.6359008550643921f, 0.11615998297929764f, 0.4533775746822357f, 0.85225909948349f, 0.7696266174316406f, -0.20250241458415985f, 0.05185617506504059f, 0.2631126642227173f, 0.1345471888780594f, 0.5096443295478821f, 0.3082464337348938f, 0.08151165395975113f, 0.6903822422027588f, -0.38625288009643555f, 0.5007380843162537f, 0.8405200242996216f, 0.5743314027786255f, 0.46685612201690674f, 0.2760722041130066f, 0.40019890666007996f, 0.013941977173089981f, -0.743009626865387f, 0.6624737977981567f, 0.773337721824646f, 0.5794790983200073f, 0.8486834764480591f, 0.3616950809955597f, 0.7917782068252563f, 0.2999984323978424f, -0.6206958293914795f, 0.48703157901763916f, 0.6281446218490601f, 0.7620715498924255f, 0.6191098093986511f, 0.6793597936630249f, 0.5811392664909363f, 0.475232869386673f, -0.010220706462860107f, 0.5522018671035767f, 0.2080221325159073f, 0.09272293001413345f, 0.07247869670391083f, 0.05028604343533516f, 0.09388025104999542f, 0.35746797919273376f, -0.7438892126083374f, 0.3342413008213043f, 0.0646902397274971f, 0.7494254112243652f, 0.7535708546638489f, 0.8583678603172302f, 0.875648558139801f, 0.3386593759059906f, -0.1481133997440338f, 0.46949273347854614f, 0.3690568506717682f, 0.4744760990142822f, 0.5324437618255615f, 0.9584978818893433f, 0.08072150498628616f, 0.23198202252388f, -0.6368321180343628f, 0.07991819083690643f, 0.3652944564819336f, 0.276516854763031f, 0.83265221118927f, 0.2987110912799835f, 0.8549458384513855f, 0.18130427598953247f, -0.7262577414512634f, 0.805081844329834f, 0.22192880511283875f, 0.19848451018333435f, 0.893729031085968f, 0.2593947947025299f, 0.19686654210090637f, 0.12140144407749176f, -0.7184813618659973f, 0.017842581495642662f, 0.6352410912513733f, 0.20745094120502472f, 0.06009940430521965f, 0.9325243234634399f, 0.908892035484314f, 0.5596085786819458f, -0.2672594487667084f, 0.546662449836731f, 0.894364595413208f, 0.8831814527511597f, 0.28372350335121155f, 0.5351064205169678f, 0.5330005884170532f, 0.45375150442123413f, -0.8137293457984924f, 0.5758236050605774f, 0.31482088565826416f, 0.48008716106414795f, 0.8494545221328735f, 0.668674111366272f, 0.9415858387947083f, 0.9472675919532776f, -0.9663214087486267f, 0.5638880729675293f, 0.5172286033630371f, 0.36481985449790955f, 0.4434908330440521f, 0.6822364926338196f, 0.19726213812828064f, 0.17403486371040344f, -0.7750882506370544f, 0.7486043572425842f, 0.3553183376789093f, 0.4757477343082428f, 0.9899047613143921f, 0.2421644777059555f, 0.08957920223474503f, 0.06839572638273239f, -0.22577258944511414f, 0.9051005840301514f, 0.5002509951591492f, 0.2504154145717621f, 0.3446967899799347f, 0.8100619316101074f, 0.39551928639411926f, 0.10577400773763657f, -0.14482922852039337f, 0.7502979636192322f, 0.25587186217308044f, 0.6539561152458191f, 0.7677749991416931f, 0.832333505153656f, 0.12410958856344223f, 0.6929830312728882f, -0.32022055983543396f, 0.546133279800415f, 0.9678362011909485f, 0.20307324826717377f, 0.050734542310237885f, 0.6259127259254456f, 0.4828029274940491f, 0.02772694081068039f, -0.8350412249565125f, 0.34657979011535645f, 0.5147067308425903f, 0.2891896665096283f, 0.11843033879995346f, 0.1680980920791626f, 0.6925384402275085f, 0.9059128165245056f, -0.8294281363487244f, 0.5910061001777649f, 0.5298640131950378f, 0.6500616073608398f, 0.1871192455291748f, 0.6276876926422119f, 0.2936759889125824f, 0.6869901418685913f, -0.4909660518169403f, 0.2596893310546875f, 0.641935408115387f, 0.7764950394630432f, 0.5770291686058044f, 0.9631125926971436f, 0.2028009444475174f, 0.7987464070320129f, -0.38254863023757935f, 0.19394542276859283f, 0.27975958585739136f, 0.7424304485321045f, 0.2305699586868286f, 0.33512723445892334f, 0.24145114421844482f, 0.9421129822731018f, -0.6853762269020081f, 0.8823673129081726f, 0.18307141959667206f, 0.5726727247238159f, 0.06831527501344681f, 0.594807505607605f, 0.3290550410747528f, 0.08851637691259384f, -0.2059590220451355f, 0.1962268352508545f, 0.360007643699646f, 0.6880496740341187f, 0.778621256351471f, 0.9684771299362183f, 0.661986768245697f, 0.28624820709228516f, -0.02108326554298401f, 0.5961371660232544f, 0.8584960103034973f, 0.5173757076263428f, 0.004448202438652515f, 0.28462761640548706f, 0.5780196785926819f, 0.8695530295372009f, -0.8614647388458252f, 0.007875275798141956f, 0.7059983611106873f, 0.548166036605835f, 0.8072165250778198f, 0.22722353041172028f, 0.7205718755722046f, 0.34296754002571106f, -0.8757095336914062f, 0.749416172504425f, 0.541074275970459f, 0.3696472644805908f, 0.3958064615726471f, 0.9604020714759827f, 0.7814249992370605f, 0.742171585559845f, -0.4009411036968231f, 0.009165293537080288f, 0.782365620136261f, 0.7502267360687256f, 0.6581774950027466f, 0.4238986074924469f, 0.4832661747932434f, 0.613908588886261f, -0.8979986906051636f, 0.48575693368911743f, 0.5898045897483826f, 0.6031204462051392f, 0.9623010158538818f, 0.37239348888397217f, 0.44388312101364136f, 0.8466320633888245f, -0.4078614413738251f, 0.4270857870578766f, 0.5221225619316101f, 0.8123600482940674f, 0.8697554469108582f, 0.6855828762054443f, 0.9772334694862366f, 0.5428669452667236f, -0.7807204723358154f, 0.5235592722892761f, 0.7828933000564575f, 0.4594407379627228f, 0.6034437417984009f, 0.09204212576150894f, 0.6503937244415283f, 0.7657459378242493f, -0.04507746919989586f, 0.634140133857727f, 0.7560885548591614f, 0.8320286870002747f, 0.1851392686367035f, 0.647984504699707f, 0.3543058931827545f, 0.7409729361534119f, -0.24429160356521606f, 0.6837339401245117f, 0.8811014890670776f, 0.10836483538150787f, 0.4268575608730316f, 0.9401012659072876f, 0.6058384776115417f, 0.0744682103395462f, -0.09878015518188477f, 0.2840820252895355f, 0.32637280225753784f, 0.6854936480522156f, 0.38923266530036926f, 0.3777821660041809f, 0.6004565358161926f, 0.3615967631340027f, -0.4485911726951599f, 0.21882833540439606f, 0.6024044156074524f, 0.3471522331237793f, 0.26490330696105957f, 0.7077952027320862f, 0.09681251645088196f, 0.42014870047569275f, -0.2788298726081848f, 0.21451181173324585f, 0.8808774352073669f, 0.22456984221935272f, 0.1091708242893219f, 0.21085752546787262f, 0.2184714525938034f, 0.7303360104560852f, -0.002856506034731865f, 0.4849933087825775f, 0.9080345034599304f, 0.874958872795105f, 0.16379159688949585f, 0.6544602513313293f, 0.5117144584655762f, 0.6585589051246643f, -0.8655725717544556f, 0.5084279775619507f, 0.029835017397999763f, 0.8405466079711914f, 0.2664973735809326f, 0.4484840929508209f, 0.018766002729535103f, 0.7582393884658813f, -0.07824262231588364f, 0.40433260798454285f, 0.5927108526229858f, 0.26395535469055176f, 0.5495671629905701f, 0.6168673634529114f, 0.6841551065444946f, 0.11928082257509232f, -0.16859076917171478f, 0.9890210032463074f, 0.980246901512146f, 0.3312878906726837f, 0.28569909930229187f, 0.8510616421699524f, 0.4852164387702942f, 0.37478286027908325f, -0.6531619429588318f, 0.703201174736023f, 0.6013600826263428f, 0.6595534682273865f, 0.7277934551239014f, 0.40490344166755676f, 0.7183934450149536f, 0.6306233406066895f, -0.22372543811798096f, 0.23551911115646362f, 0.3198792040348053f, 0.5934371948242188f, 0.3571685254573822f, 0.7920152544975281f, 0.5571538805961609f, 0.2369990348815918f, -0.740654468536377f, 0.5350571274757385f, 0.9217746257781982f, 0.5686712861061096f, 0.8880099654197693f, 0.9880552887916565f, 0.3035638928413391f, 0.2872369885444641f, -0.6432114839553833f, 0.8177188038825989f, 0.5216895937919617f, 0.8889256119728088f, 0.6181478500366211f, 0.2088298350572586f, 0.8839645981788635f, 0.0024590077809989452f, -0.7586455345153809f, 0.14011433720588684f, 0.18221157789230347f, 0.07203301042318344f, 0.668224573135376f, 0.13042299449443817f, 0.7483303546905518f, 0.501537024974823f, -0.4854945242404938f, 0.9622754454612732f, 0.1345926970243454f, 0.2012535184621811f, 0.559634268283844f, 0.3791445791721344f, 0.49115800857543945f, 0.7673757076263428f, -0.534208357334137f, 0.4117735028266907f, 0.4690394997596741f, 0.4345090091228485f, 0.9895724654197693f, 0.3667803406715393f, 0.6393054127693176f, 0.37123507261276245f, -0.5020679831504822f, 0.1542985737323761f, 0.626161515712738f, 0.4753296971321106f, 0.6465240716934204f, 0.09328620880842209f, 0.9157583117485046f, 0.18580442667007446f, -0.41239845752716064f, 0.8234102129936218f, 0.9162956476211548f, 0.5697972178459167f, 0.11191771179437637f, 0.09761299192905426f, 0.63846755027771f, 0.9049421548843384f, -0.4811756908893585f, 0.9656208157539368f, 0.6736811995506287f, 0.8293781280517578f, 0.8069502711296082f, 0.20271778106689453f, 0.37056076526641846f, 0.2235444188117981f, -0.46914732456207275f, 0.8742765188217163f, 0.32681289315223694f, 0.19256411492824554f, 0.9861348271369934f, 0.46750733256340027f, 0.010061580687761307f, 0.49185487627983093f, -0.2639447748661041f, 0.2488403022289276f, 0.5247324705123901f, 0.11850141733884811f, 0.5159791707992554f, 0.858204185962677f, 0.3101901412010193f, 0.5502811670303345f, -0.9713990092277527f, 0.603950560092926f, 0.039159923791885376f, 0.8975397348403931f, 0.6199004650115967f, 0.13763664662837982f, 0.6605647802352905f, 0.7392449975013733f, -0.9399828910827637f, 0.6822134256362915f, 0.750813364982605f, 0.06764309108257294f, 0.1010069027543068f, 0.7754710912704468f, 0.38783273100852966f, 0.866326630115509f, -0.48204490542411804f, 0.668543815612793f, 0.10154345631599426f, 0.4870845675468445f, 0.8508899807929993f, 0.4997057020664215f, 0.7107654809951782f, 0.1889202743768692f, -0.6607154011726379f, 0.7687706351280212f, 0.08879673480987549f, 0.900454580783844f, 0.3956942558288574f, 0.573842465877533f, 0.7802828550338745f, 0.1396385282278061f, -0.6611436605453491f, 0.04058394953608513f, 0.5717177391052246f, 0.44366830587387085f, 0.2269136756658554f, 0.8321436643600464f, 0.8783527612686157f, 0.7345083355903625f, -0.6557598114013672f, 0.26602157950401306f, 0.29959216713905334f, 0.9767528772354126f, 0.07927162945270538f, 0.04926244169473648f, 0.22124555706977844f, 0.7977097034454346f, -0.2699490189552307f, 0.2945440113544464f, 0.08945035934448242f, 0.9043111801147461f, 0.4471026659011841f, 0.830346405506134f, 0.5129809379577637f, 0.1342553198337555f, -0.15505817532539368f, 0.6982521414756775f, 0.7896097302436829f, 0.7772288918495178f, 0.42575082182884216f, 0.4634993374347687f, 0.45181572437286377f, 0.8611677289009094f, -0.07186964154243469f, 0.33799800276756287f, 0.7521169781684875f, 0.7798817753791809f, 0.9460576176643372f, 0.3209370970726013f, 0.7708394527435303f, 0.8683664798736572f, -0.05359349399805069f, 0.8566159009933472f, 0.7019537091255188f, 0.9997614622116089f, 0.5400542616844177f, 0.7014610171318054f, 0.7448543906211853f, 0.6895955801010132f, -0.7439478635787964f, 0.7855595946311951f, 0.4861203134059906f, 0.1887156069278717f, 0.8897069692611694f, 0.8051069378852844f, 0.17086224257946014f, 0.14194373786449432f, -0.5037432312965393f, 0.9646239280700684f, 0.35515695810317993f, 0.8966683149337769f, 0.6355445981025696f, 0.26743754744529724f, 0.5522114634513855f, 0.702164888381958f, -0.6096299886703491f, 0.8539096713066101f, 0.8041170239448547f, 0.1469930112361908f, 0.08570597320795059f, 0.31125369668006897f, 0.5445441007614136f, 0.6885665655136108f, -0.3935145437717438f, 0.08043137937784195f, 0.4141426086425781f, 0.22589567303657532f, 0.4418717324733734f, 0.0919724777340889f, 0.8271751403808594f, 0.5368375182151794f, -0.37081441283226013f, 0.775985598564148f, 0.5014783143997192f, 0.04444769397377968f, 0.29541000723838806f, 0.8497023582458496f, 0.6077908873558044f, 0.14203272759914398f, -0.7409411668777466f, 0.7437683343887329f, 0.780134379863739f, 0.058973703533411026f, 0.5299658179283142f, 0.28535786271095276f, 0.6602894067764282f, 0.9686896800994873f, -0.19219297170639038f, 0.0769965872168541f, 0.6999155282974243f, 0.33419957756996155f, 0.7791058421134949f, 0.3848745822906494f, 0.7010776996612549f, 0.41375190019607544f, -0.005056245252490044f, 0.6387002468109131f, 0.16079342365264893f, 0.10846343636512756f, 0.8348641395568848f, 0.9818620085716248f, 0.2999754250049591f, 0.41069304943084717f, -0.7963196039199829f, 0.10040406137704849f, 0.3370950222015381f, 0.5837271809577942f, 0.8157236576080322f, 0.27838629484176636f, 0.06855659931898117f, 0.8791736960411072f, -0.26622438430786133f, 0.05426997318863869f, 0.9059378504753113f, 0.8441537618637085f, 0.539090096950531f, 0.5056672096252441f, 0.7378232479095459f, 0.7725490927696228f, -0.377370148897171f, 0.08727233856916428f, 0.8706377148628235f, 0.5557742714881897f, 0.3591110408306122f, 0.5212627649307251f, 0.028182150796055794f, 0.1432361900806427f, -0.6413195133209229f, 0.4053598940372467f, 0.9255797863006592f, 0.9739001989364624f, 0.33672216534614563f, 0.16126590967178345f, 0.0361313633620739f, 0.034848183393478394f, -0.27750009298324585f, 0.5873387455940247f, 0.7679440975189209f, 0.06002269312739372f, 0.6341772675514221f, 0.14255759119987488f, 0.10011681169271469f, 0.9239787459373474f, -0.21360470354557037f, 0.7797274589538574f, 0.46629083156585693f, 0.24129176139831543f, 0.94819575548172f, 0.20193563401699066f, 0.006557132583111525f, 0.8797309994697571f, -0.8262524604797363f, 0.6950076818466187f, 0.8978649973869324f, 0.2601946294307709f, 0.13034853339195251f, 0.4071269929409027f, 0.638962984085083f, 0.7104470133781433f, -0.015375572256743908f, 0.15328583121299744f, 0.5712693929672241f, 0.3440750539302826f, 0.4988975524902344f, 0.9629889726638794f, 0.30286484956741333f, 0.05486419051885605f, -0.028500787913799286f, 0.24014921486377716f, 0.46604225039482117f, 0.3979879319667816f, 0.009989670477807522f, 0.7051323652267456f, 0.8211914896965027f, 0.2251279503107071f, -0.2695159912109375f, 0.4184531569480896f, 0.3988650143146515f, 0.9290315508842468f, 0.6506268382072449f, 0.28814971446990967f, 0.49359339475631714f, 0.5824306607246399f, -0.29072311520576477f, 0.03856903687119484f, 0.8513404130935669f, 0.33405476808547974f, 0.24143029749393463f, 0.7638182640075684f, 0.5783237814903259f, 0.8693720102310181f, -0.43478602170944214f, 0.19260554015636444f, 0.06983912736177444f, 0.4444740116596222f, 0.548417866230011f, 0.7952758073806763f, 0.1361324042081833f, 0.2213362157344818f, -0.6169978380203247f, 0.3570958971977234f, 0.37947872281074524f, 0.5593295097351074f, 0.3500231206417084f, 0.5836698412895203f, 0.3235396146774292f, 0.2845858633518219f, -0.7362378239631653f, 0.9953521490097046f, 0.4822819232940674f, 0.34714722633361816f, 0.9165651202201843f, 0.21051402390003204f, 0.862342894077301f, 0.8977254033088684f, -0.744909942150116f, 0.09341228008270264f, 0.6547564268112183f, 0.13567595183849335f, 0.9182600378990173f, 0.30363279581069946f, 0.3000578284263611f, 0.2002100646495819f, -0.5633916258811951f, 0.4192992150783539f, 0.6769401431083679f, 0.1861143261194229f, 0.20967113971710205f, 0.458147257566452f, 0.7712141275405884f, 0.2569728493690491f, -0.6938304901123047f, 0.8213136792182922f, 0.6140605807304382f, 0.42386457324028015f, 0.12435252219438553f, 0.16914474964141846f, 0.6619660258293152f, 0.8341052532196045f, -0.7829451560974121f, 0.5509665012359619f, 0.6992354989051819f, 0.6108672618865967f, 0.6586024165153503f, 6.788093014620245e-05f, 0.7825978398323059f, 0.06299348175525665f, -0.5372483134269714f, 0.8701501488685608f, 0.7217757105827332f, 0.653339147567749f, 0.7825737595558167f, 0.6585037112236023f, 0.44640958309173584f, 0.8604297041893005f, -0.7308904528617859f, 0.4251772165298462f, 0.5973910689353943f, 0.10962605476379395f, 0.04488211125135422f, 0.5832961201667786f, 0.11914895474910736f, 0.615347683429718f, -0.5533078908920288f, 0.3719664514064789f, 0.2890377640724182f, 0.3794390857219696f, 0.22249747812747955f, 0.4110042154788971f, 0.36855268478393555f, 0.7087201476097107f, -0.2833794355392456f, 0.5172002911567688f, 0.4278075397014618f, 0.2872889041900635f, 0.06788702309131622f, 0.04396988824009895f, 0.5323996543884277f, 0.8865378499031067f, -0.3379475176334381f, 0.24477261304855347f, 0.43217143416404724f, 0.42270514369010925f, 0.27394068241119385f, 0.07657119631767273f, 0.5495730638504028f, 0.3577165901660919f, -0.5475307106971741f, 0.35566213726997375f, 0.8223688006401062f, 0.5791049003601074f, 0.833428144454956f, 0.010616308078169823f, 0.5633742809295654f, 0.6301381587982178f, -0.8961696028709412f, 0.4950914978981018f, 0.5702513456344604f, 0.8897867202758789f, 0.8340269327163696f, 0.7791606783866882f, 0.7472312450408936f, 0.8824437856674194f, -0.28677552938461304f, 0.9229739308357239f, 0.37306633591651917f, 0.5294065475463867f, 0.22745221853256226f, 0.3628557324409485f, 0.6338673233985901f, 0.5433777570724487f, -0.8795400857925415f, 0.15208666026592255f, 0.3095723092556f, 0.08110851049423218f, 0.08533157408237457f, 0.9311317801475525f, 0.910965621471405f, 0.8095068335533142f, -0.16108496487140656f, 0.47626522183418274f, 0.6292840838432312f, 0.3150286376476288f, 0.481328547000885f, 0.7743500471115112f, 0.10489466041326523f, 0.17524410784244537f, -0.6474065780639648f, 0.4345138370990753f, 0.9399706721305847f, 0.07064813375473022f, 0.612085223197937f, 0.4404478371143341f, 0.7863238453865051f, 0.7071899175643921f, -0.5007134675979614f, 0.07543506473302841f, 0.5733131766319275f, 0.8737905621528625f, 0.8880664110183716f, 0.19066616892814636f, 0.22915442287921906f, 0.5265549421310425f, -0.5258708596229553f, 0.07192936539649963f, 0.8672758340835571f, 0.4442291557788849f, 0.28419849276542664f, 0.27496808767318726f, 0.5560966730117798f, 0.9008033871650696f, -0.8416145443916321f, 0.9649797677993774f, 0.6466836333274841f, 0.36619722843170166f, 0.012326559983193874f, 0.8344380259513855f, 0.32514533400535583f, 0.9716378450393677f, -0.07719892263412476f, 0.5503405332565308f, 0.5721002817153931f, 0.7833536267280579f, 0.4300335645675659f, 0.49618881940841675f, 0.13155418634414673f, 0.06243690848350525f, -0.43804875016212463f, 0.6812213063240051f, 0.47899624705314636f, 0.897375226020813f, 0.2715482711791992f, 0.8505794405937195f, 0.9938238263130188f, 0.02399403415620327f, -0.8170634508132935f, 0.35305723547935486f, 0.5752179622650146f, 0.1112416684627533f, 0.22029978036880493f, 0.22104905545711517f, 0.6949148178100586f, 0.6300718188285828f, -0.6696141958236694f, 0.09406451135873795f, 0.3424312174320221f, 0.9600899815559387f, 0.47487854957580566f, 0.03396531939506531f, 0.890390932559967f, 0.2988736629486084f, -0.21147234737873077f, 0.993211567401886f, 0.2066822648048401f, 0.37754735350608826f, 0.12154388427734375f, 0.8673714995384216f, 0.3614409565925598f, 0.40470024943351746f, -0.26733437180519104f, 0.4626449942588806f, 0.3157980740070343f, 0.8570032119750977f, 0.7793510556221008f, 0.12880469858646393f, 0.10547314584255219f, 0.4809844195842743f, -0.898068904876709f, 0.48278167843818665f, 0.48748600482940674f, 0.0020980474073439837f, 0.03642629459500313f, 0.6371875405311584f, 0.03434492647647858f, 0.2934689223766327f, -0.9395478963851929f, 0.07898448407649994f, 0.16575731337070465f, 0.6891487836837769f, 0.6278306841850281f, 0.28794312477111816f, 0.9932796359062195f, 0.30949413776397705f, -0.9533140063285828f, 0.45554205775260925f, 0.22707721590995789f, 0.49104374647140503f, 0.7872242331504822f, 0.42813143134117126f, 0.2972985506057739f, 0.44496217370033264f, -0.9238265752792358f, 0.34557539224624634f, 0.12961158156394958f, 0.8744195699691772f, 0.6805844902992249f, 0.9265208840370178f, 0.20737631618976593f, 0.5808573961257935f, -0.876878559589386f, 0.8001008629798889f, 0.767578661441803f, 0.3949155807495117f, 0.27823805809020996f, 0.8799699544906616f, 0.9079720377922058f, 0.5001180768013f, -0.01563367433845997f, 0.18553733825683594f, 0.7008625864982605f, 0.9224280118942261f, 0.44491761922836304f, 0.3131485879421234f, 0.23677369952201843f, 0.21064938604831696f, -0.7113150954246521f, 0.834351658821106f, 0.5353257060050964f, 0.2556602656841278f, 0.3645399510860443f, 0.7067034840583801f, 0.5825963616371155f, 0.28707435727119446f, -0.6044476628303528f, 0.753376841545105f, 0.31061896681785583f, 0.6770352721214294f, 0.509679913520813f, 0.16041500866413116f, 0.913527250289917f, 0.8234191536903381f, -0.967807412147522f, 0.5753621459007263f, 0.04110821336507797f, 0.9214805364608765f, 0.3048037886619568f, 0.4584008753299713f, 0.26689380407333374f, 0.9430357217788696f, -0.5179170966148376f, 0.5551518797874451f, 0.4002380967140198f, 0.9378470182418823f, 0.8082282543182373f, 0.9026237726211548f, 0.546258807182312f, 0.4635221064090729f, -0.7043204307556152f, 0.5080568790435791f, 0.32928287982940674f, 0.3720323443412781f, 0.05246221274137497f, 0.43968838453292847f, 0.6984492540359497f, 0.6240730285644531f, -0.6771907210350037f, 0.16557170450687408f, 0.8617756962776184f, 0.6772826313972473f, 0.9230579137802124f, 0.0774926245212555f, 0.2032807618379593f, 0.024013379588723183f, -0.9338263869285583f, 0.9246485233306885f, 0.37563592195510864f, 0.5108509659767151f, 0.4865967035293579f, 0.6372641921043396f, 0.48614150285720825f, 0.6323134303092957f, -0.8520188927650452f, 0.4686298966407776f, 0.43208780884742737f, 0.6574472784996033f, 0.4507213830947876f, 0.37253788113594055f, 0.6457098126411438f, 0.8975489139556885f, -0.25962457060813904f, 0.9251453876495361f, 0.8730362057685852f, 0.686750590801239f, 0.7116571664810181f, 0.2036290317773819f, 0.6880611181259155f, 0.8996630311012268f, -0.20807036757469177f, 0.9955432415008545f, 0.6536830067634583f, 0.5905214548110962f, 0.9951984882354736f, 0.4572366178035736f, 0.01466117799282074f, 0.3819735646247864f, -0.35992276668548584f, 0.4558389484882355f, 0.9373090267181396f, 0.19116130471229553f, 0.6244397163391113f, 0.9685868620872498f, 0.0683973878622055f, 0.6491935849189758f, -0.14925719797611237f, 0.7171210646629333f, 0.26527494192123413f, 0.8647294044494629f, 0.4549039602279663f, 0.2508102357387543f, 0.045350510627031326f, 0.013498405925929546f, -0.4788321256637573f, 0.8531221747398376f, 0.7027316093444824f, 0.24545307457447052f, 0.6976422667503357f, 0.6281220316886902f, 0.795853853225708f, 0.6884772777557373f, -0.280258446931839f, 0.5686253309249878f, 0.7693634629249573f, 0.9371327757835388f, 0.04041091352701187f, 0.9096084237098694f, 0.9206255078315735f, 0.4633544087409973f, -0.16814731061458588f, 0.9710468053817749f, 0.36260393261909485f, 0.7102558016777039f, 0.9554492235183716f, 0.9942701458930969f, 0.41971340775489807f, 0.20598140358924866f, -0.3552199602127075f, 0.45863258838653564f, 0.7726737260818481f, 0.635272204875946f, 0.7526563405990601f, 0.9418795108795166f, 0.4645242989063263f, 0.14102815091609955f, -0.041579365730285645f, 0.004978567361831665f, 0.8241608142852783f, 0.3750932812690735f, 0.4712880551815033f, 0.2334706038236618f, 0.015930496156215668f, 0.4649028778076172f, -0.14878684282302856f, 0.213171124458313f, 0.47725310921669006f, 0.9945641756057739f, 0.7658790349960327f, 0.12400636076927185f, 0.10952640324831009f, 0.06694140285253525f, -0.8002189993858337f, 0.3628445863723755f, 0.7276899218559265f, 0.3817993104457855f, 0.12917977571487427f, 0.30655956268310547f, 0.8787631988525391f, 0.6821913719177246f, -0.599864661693573f, 0.8379710912704468f, 0.19907180964946747f, 0.29669779539108276f, 0.15978142619132996f, 0.9769914746284485f, 0.8793759942054749f, 0.32727882266044617f, -0.3842323422431946f, 0.021494578570127487f, 0.244103342294693f, 0.3702756464481354f, 0.9731506705284119f, 0.8538848757743835f, 0.8095857501029968f, 0.7088611721992493f, -0.02238759584724903f, 0.9902787804603577f, 0.30614423751831055f, 0.304332971572876f, 0.3814285397529602f, 0.7303066849708557f, 0.6909556984901428f, 0.8465949296951294f, -0.42060938477516174f, 0.781134307384491f, 0.04215447977185249f, 0.35506579279899597f, 0.7068646550178528f, 0.7532547116279602f, 0.40082624554634094f, 0.8668400645256042f, -0.5513830780982971f, 0.24435383081436157f, 0.7356663942337036f, 0.5568752288818359f, 0.09874507784843445f, 0.16196699440479279f, 0.3855268061161041f, 0.6983692646026611f, -0.6729947924613953f, 0.25480106472969055f, 0.07162546366453171f, 0.46531954407691956f, 0.13389982283115387f, 0.6567239761352539f, 0.10949325561523438f, 0.15850330889225006f, -0.5388126969337463f, 0.7979492545127869f, 0.6693495512008667f, 0.7140458226203918f, 0.01256802398711443f, 0.24817751348018646f, 0.5295504927635193f, 0.6268908977508545f, -0.8338629007339478f, 0.5669968128204346f, 0.12517134845256805f, 0.7334917187690735f, 0.14052844047546387f, 0.025975482538342476f, 0.9183132648468018f, 0.5438803434371948f, -0.20353712141513824f, 0.035321399569511414f, 0.5144281387329102f, 0.8826518654823303f, 0.7463238835334778f, 0.5495595932006836f, 0.49765750765800476f, 0.5815175175666809f, -0.8734198212623596f, 0.1601504534482956f, 0.2594132125377655f, 0.11829489469528198f, 0.5203102827072144f, 0.7502884268760681f, 0.7916166186332703f, 0.7424558401107788f, -0.37840384244918823f, 0.6974918246269226f, 0.1537046879529953f, 0.2341190129518509f, 0.43080753087997437f, 0.7695942521095276f, 0.6067766547203064f, 0.06089484319090843f, -0.0191167164593935f, 0.5348260998725891f, 0.5292133688926697f, 0.7860887050628662f, 0.065402552485466f, 0.08693324029445648f, 0.19686871767044067f, 0.32769477367401123f, -0.3056109547615051f, 0.2959640622138977f, 0.01598208025097847f, 0.42876482009887695f, 0.5683466792106628f, 0.14567315578460693f, 0.6403495669364929f, 0.02594081126153469f, -0.7584455609321594f, 0.13409985601902008f, 0.19196082651615143f, 0.3201986849308014f, 0.3924939036369324f, 0.6389229893684387f, 0.3890669047832489f, 0.806639552116394f, -0.26468396186828613f, 0.15563812851905823f, 0.2546696364879608f, 0.6829830408096313f, 0.4258398413658142f, 0.7003955245018005f, 0.33445048332214355f, 0.46775496006011963f, -0.6425880789756775f, 0.4713241457939148f, 0.5142050981521606f, 0.8296481370925903f, 0.404017835855484f, 0.4503074586391449f, 0.36779671907424927f, 0.09522001445293427f, -0.2845396101474762f, 0.738662600517273f, 0.903143584728241f, 0.5851620435714722f, 0.5458899736404419f, 0.49105575680732727f, 0.7463053464889526f, 0.3774296045303345f, -0.37302273511886597f, 0.5642194151878357f, 0.37428244948387146f, 0.09991376101970673f, 0.932405412197113f, 0.6231687068939209f, 0.13855378329753876f, 0.8612426519393921f, -0.1927923858165741f, 0.79952073097229f, 0.1686398833990097f, 0.3613830506801605f, 0.24467507004737854f, 0.712430477142334f, 0.7532739043235779f, 0.30761972069740295f, -0.42232444882392883f, 0.129599466919899f, 0.2280140221118927f, 0.004074804950505495f, 0.7785621881484985f, 0.013982728123664856f, 0.4872567057609558f, 0.31206268072128296f, -0.19989174604415894f, 0.3805282711982727f, 0.09638544917106628f, 0.14535370469093323f, 0.5408539175987244f, 0.6003782153129578f, 0.9586937427520752f, 0.7788253426551819f, -0.9156400561332703f, 0.12018150836229324f, 0.835074245929718f, 0.9321553707122803f, 0.16911450028419495f, 0.7299960255622864f, 0.15383276343345642f, 0.698401153087616f, -0.508574903011322f, 0.2919920086860657f, 0.027865277603268623f, 0.6596258878707886f, 0.0016990135191008449f, 0.948830783367157f, 0.26993444561958313f, 0.20935344696044922f, -0.3137335479259491f, 0.5294018387794495f, 0.061866458505392075f, 0.018276991322636604f, 0.9860706329345703f, 0.4374943673610687f, 0.2016453742980957f, 0.7064773440361023f, -0.6530309915542603f, 0.29633426666259766f, 0.8502733707427979f, 0.04357973113656044f, 0.4115458130836487f, 0.0903787836432457f, 0.016519177705049515f, 0.7900963425636292f, -0.956993818283081f, 0.42965811491012573f, 0.7517233490943909f, 0.8194264769554138f, 0.22475849092006683f, 0.5430304408073425f, 0.0816991925239563f, 0.7611340284347534f, -0.043793920427560806f, 0.16039174795150757f, 0.7694950103759766f, 0.6695916652679443f, 0.2894269526004791f, 0.23228080570697784f, 0.18783724308013916f, 0.417254775762558f, -0.49351680278778076f, 0.08584605902433395f, 0.16960476338863373f, 0.36183640360832214f, 0.767015278339386f, 0.2912159264087677f, 0.4906257688999176f, 0.04110268875956535f, -0.5837219953536987f, 0.48702314496040344f, 0.6210688948631287f, 0.3057730197906494f, 0.5715433955192566f, 0.88481605052948f, 0.4635286033153534f, 0.5017316937446594f, -0.9967090487480164f, 0.7887395620346069f, 0.9992724657058716f, 0.7979361414909363f, 0.7140807509422302f, 0.11669960618019104f, 0.6880618333816528f, 0.5282520651817322f, -0.27385005354881287f, 0.40373337268829346f, 0.5737649202346802f, 0.316106379032135f, 0.9252365827560425f, 0.6192630529403687f, 0.8013431429862976f, 0.25527510046958923f, -0.8778268694877625f, 0.07622402161359787f, 0.44443652033805847f, 0.24581043422222137f, 0.8417720794677734f, 0.5413957834243774f, 0.48048141598701477f, 0.1328505575656891f, -0.5649607181549072f, 0.7999762892723083f, 0.43840086460113525f, 0.6458122730255127f, 0.3770436644554138f, 0.7060313820838928f, 0.12088441103696823f, 0.4248312711715698f, -0.2463466376066208f, 0.21000976860523224f, 0.9977089166641235f, 0.13884174823760986f, 0.9712867140769958f, 0.11450833082199097f, 0.869155764579773f, 0.6114493608474731f, -0.5147747993469238f, 0.6270110607147217f, 0.43390998244285583f, 0.8759905695915222f, 0.8236561417579651f, 0.7017238736152649f, 0.846259593963623f, 0.18127454817295074f, -0.44410058856010437f, 0.7119821310043335f, 0.436992883682251f, 0.942834198474884f, 0.7582902312278748f, 0.6581388115882874f, 0.48623472452163696f, 0.10872151702642441f, -0.009488498792052269f, 0.6693046689033508f, 0.4282872676849365f, 0.9206402897834778f, 0.4693916440010071f, 0.6747542023658752f, 0.3475227653980255f, 0.6033715605735779f, -0.6744120121002197f, 0.9190305471420288f, 0.010803167708218098f, 0.960631787776947f, 0.9278732538223267f, 0.04739663004875183f, 0.5095768570899963f, 0.7098450064659119f, -0.5110453963279724f, 0.48303842544555664f, 0.5797938108444214f, 0.979780912399292f, 0.4648835361003876f, 0.6603361368179321f, 0.20197893679141998f, 0.5810224413871765f, -0.6855733394622803f, 0.019253956153988838f, 0.6465921401977539f, 0.6802799701690674f, 0.36940962076187134f, 0.08506481349468231f, 0.08189626783132553f, 0.6051520109176636f, -0.9248082041740417f, 0.8598560690879822f, 0.27409306168556213f, 0.1915857046842575f, 0.5937594771385193f, 0.5179744362831116f, 0.6674554944038391f, 0.8715982437133789f, -0.7321552634239197f, 0.3654909133911133f, 0.1648038774728775f, 0.808645486831665f, 0.3914024829864502f, 0.008621095679700375f, 0.6574975252151489f, 0.33193469047546387f, -0.03756053373217583f, 0.6694024801254272f, 0.792630672454834f, 0.2648026943206787f, 0.0654386430978775f, 0.5578194856643677f, 0.9958046078681946f, 0.7140806913375854f, -0.3391474783420563f, 0.7269556522369385f, 0.14819370210170746f, 0.694765567779541f, 0.3240601718425751f, 0.38215896487236023f, 0.9460567235946655f, 0.529640793800354f, -0.33819785714149475f, 0.21020860970020294f, 0.9672055244445801f, 0.4738265872001648f, 0.2745334208011627f, 0.40794000029563904f, 0.5122993588447571f, 0.7941614389419556f, -0.9049025177955627f, 0.3721408545970917f, 0.24982449412345886f, 0.6783753037452698f, 0.6516764760017395f, 0.14010243117809296f, 0.24995464086532593f, 0.11616102606058121f, -0.8096503615379333f, 0.11457668244838715f, 0.9680773019790649f, 0.8920392990112305f, 0.6669935584068298f, 0.38546115159988403f, 0.8634818196296692f, 0.22069856524467468f, -0.9800750017166138f, 0.10698124766349792f, 0.3806321918964386f, 0.023332824930548668f, 0.7266150712966919f, 0.22815603017807007f, 0.8515926003456116f, 0.9173736572265625f, -0.6229357123374939f, 0.4856102466583252f, 0.560881495475769f, 0.6929956078529358f, 0.9442391991615295f, 0.4157694876194f, 0.26210251450538635f, 0.4177757799625397f, -0.3010078966617584f, 0.9302086234092712f, 0.493813157081604f, 0.11726745218038559f, 0.9813064336776733f, 0.24853429198265076f, 0.20608727633953094f, 0.17295829951763153f, -0.6943541169166565f, 0.38768160343170166f, 0.20210231840610504f, 0.35975968837738037f, 0.8413394093513489f, 0.873729407787323f, 0.545120894908905f, 0.5884876847267151f, -0.5991291403770447f, 0.868105411529541f, 0.49327248334884644f, 0.7323741912841797f, 0.016623735427856445f, 0.2561255395412445f, 0.7034972906112671f, 0.38698744773864746f, -0.38424548506736755f, 0.2803581655025482f, 0.45698946714401245f, 0.5909536480903625f, 0.4940177798271179f, 0.16744811832904816f, 0.9352481961250305f, 0.24576321244239807f, -0.38566964864730835f, 0.05460237339138985f, 0.9676280617713928f, 0.37432044744491577f, 0.16896657645702362f, 0.21213698387145996f, 0.8058499693870544f, 0.6932947039604187f, -0.24262142181396484f, 0.018094198778271675f, 0.48023679852485657f, 0.3971962034702301f, 0.48406341671943665f, 0.27805450558662415f, 0.9877876043319702f, 0.21540969610214233f, -0.9686294198036194f, 0.10204440355300903f, 0.14445103704929352f, 0.20062652230262756f, 0.5515693426132202f, 0.7543866038322449f, 0.48806196451187134f, 0.7214775085449219f, -0.853646457195282f, 0.4915636479854584f, 0.09829462319612503f, 0.37209346890449524f, 0.8877992033958435f, 0.8541993498802185f, 0.3802463412284851f, 0.7031201124191284f, -0.15664318203926086f, 0.20225244760513306f, 0.2627983093261719f, 0.6609665155410767f, 0.14351487159729004f, 0.3427774906158447f, 0.9172892570495605f, 0.7773718237876892f, -0.9166693687438965f, 0.9340258240699768f, 0.34095606207847595f, 0.02933601848781109f, 0.24629086256027222f, 0.2608867883682251f, 0.15985606610774994f, 0.4847719371318817f, -0.8032018542289734f, 0.39677324891090393f, 0.795569896697998f, 0.9024463891983032f, 0.38618913292884827f, 0.7525546550750732f, 0.0727556049823761f, 0.832841157913208f, -0.007265039253979921f, 0.5499540567398071f, 0.6101250052452087f, 0.16326695680618286f, 0.8540379405021667f, 0.9778708815574646f, 0.7181738615036011f, 0.9762733578681946f, -0.7754652500152588f, 0.7336285710334778f, 0.6311824917793274f, 0.6722717881202698f, 0.33014237880706787f, 0.1472603976726532f, 0.7875304222106934f, 0.6375621557235718f, -0.7826400995254517f, 0.111310213804245f, 0.4639189541339874f, 0.21158310770988464f, 0.4050869643688202f, 0.016202254220843315f, 0.7802403569221497f, 0.2023700624704361f, -0.7706845998764038f, 0.7785431742668152f, 0.9986807703971863f, 0.9593590497970581f, 0.034135736525058746f, 0.38846150040626526f, 0.907546877861023f, 0.5802431702613831f, -0.7947680354118347f, 0.5570354461669922f, 0.6081153750419617f, 0.5456919074058533f, 0.6834809184074402f, 0.7547940611839294f, 0.05539100244641304f, 0.6808103322982788f, -0.2772529423236847f, 0.0032563607674092054f, 0.9811322093009949f, 0.8449628353118896f, 0.6410272121429443f, 0.3797086775302887f, 0.3478338122367859f, 0.6848946809768677f, -0.0854833796620369f, 0.9979122877120972f, 0.45967450737953186f, 0.23467029631137848f, 0.9804979562759399f, 0.997485339641571f, 0.8501412272453308f, 0.7274222373962402f, -0.3778629004955292f, 0.90169358253479f, 0.3771944046020508f, 0.4694553315639496f, 0.7808072566986084f, 0.23210468888282776f, 0.2720434069633484f, 0.8510408401489258f, -0.9148777723312378f, 0.06723527610301971f, 0.9631596207618713f, 0.27877071499824524f, 0.017494183033704758f, 0.4228443503379822f, 0.27419358491897583f, 0.03243840113282204f, -0.023695921525359154f, 0.09754520654678345f, 0.5388039946556091f, 0.5993323922157288f, 0.4483315348625183f, 0.862309455871582f, 0.5752883553504944f, 0.06771740317344666f, -0.9315274357795715f, 0.6947908997535706f, 0.5985186100006104f, 0.9167943000793457f, 0.5503076910972595f, 0.39993199706077576f, 0.6677072644233704f, 0.5514320731163025f, -0.13963176310062408f, 0.9990143179893494f, 0.4608648419380188f, 0.819915235042572f, 0.7362090349197388f, 0.2387685924768448f, 0.41104283928871155f, 0.1206025555729866f, -0.9255455136299133f, 0.6471118927001953f, 0.19104184210300446f, 0.22972092032432556f, 0.816389799118042f, 0.5437927842140198f, 0.5159336924552917f, 0.008545213378965855f, -0.7557406425476074f, 0.8460847735404968f, 0.7391180992126465f, 0.25521519780158997f, 0.9066748023033142f, 0.26527732610702515f, 0.12976135313510895f, 0.49335750937461853f, -0.04483924061059952f, 0.06120764836668968f, 0.9482352137565613f, 0.5904423594474792f, 0.28718671202659607f, 0.22812020778656006f, 0.7325590252876282f, 0.3892887532711029f, -0.1737184375524521f, 0.20230595767498016f, 0.040912430733442307f, 0.07672695070505142f, 0.23914900422096252f, 0.9636756777763367f, 0.9072934985160828f, 0.2928817868232727f, -0.2723594307899475f, 0.6831446886062622f, 0.44184231758117676f, 0.8900622725486755f, 0.754692792892456f, 0.5229988694190979f, 0.8595350384712219f, 0.2729009985923767f, -0.9216616749763489f, 0.3102339208126068f, 0.9276584982872009f, 0.7322905659675598f, 0.9800657033920288f, 0.25407856702804565f, 0.5842003226280212f, 0.9540134072303772f, -0.7476507425308228f, 0.4139613211154938f, 0.7646433115005493f, 0.1967623382806778f, 0.25900161266326904f, 0.6180506348609924f, 0.9013137221336365f, 0.5967767238616943f, -0.16657301783561707f, 0.09613087773323059f, 0.09077665954828262f, 0.9896658062934875f, 0.8540120720863342f, 0.9670114517211914f, 0.3203940987586975f, 0.6464014649391174f, -0.4017271399497986f, 0.016423029825091362f, 0.235050767660141f, 0.351662814617157f, 0.7458977699279785f, 0.18649323284626007f, 0.49752289056777954f, 0.8731170892715454f, -0.01612747274339199f, 0.43207064270973206f, 0.8632128238677979f, 0.9803330898284912f, 0.3109998404979706f, 0.6539173126220703f, 0.9083431959152222f, 0.0030954419635236263f, -0.6064468622207642f, 0.21265612542629242f, 0.42614513635635376f, 0.021436821669340134f, 0.6338603496551514f, 0.1850852370262146f, 0.4002671241760254f, 0.6919967532157898f, -0.30452167987823486f, 0.2835671603679657f, 0.7195050120353699f, 0.9327614903450012f, 0.8206732273101807f, 0.13622599840164185f, 0.8167605400085449f, 0.19853390753269196f, -0.13256661593914032f, 0.841566264629364f, 0.34201881289482117f, 0.6228691339492798f, 0.4257606565952301f, 0.7092775702476501f, 0.830020546913147f, 0.7244940400123596f, -0.6753594875335693f, 0.6145464181900024f, 0.5351256132125854f, 0.1670025736093521f, 0.6431213021278381f, 0.5085709691047668f, 0.40082958340644836f, 0.3341308832168579f, -0.3266734778881073f, 0.6555627584457397f, 0.40964484214782715f, 0.09459439665079117f, 0.8186319470405579f, 0.8699068427085876f, 0.7149965167045593f, 0.8374621868133545f, -0.09264024347066879f, 0.7896497845649719f, 0.6908477544784546f, 0.45501717925071716f, 0.4327504336833954f, 0.5749721527099609f, 0.8984386324882507f, 0.9366458654403687f, -0.7388848066329956f, 0.5903528332710266f, 0.4306105077266693f, 0.680381715297699f, 0.09445758163928986f, 0.3804057240486145f, 0.8410463929176331f, 0.6287848949432373f, -0.7950621247291565f, 0.23204727470874786f, 0.24331547319889069f, 0.1873844414949417f, 0.3389051556587219f, 0.5044851899147034f, 0.8380366563796997f, 0.7269929051399231f, -0.4073873460292816f, 0.7742605805397034f, 0.8884828090667725f, 0.540311336517334f, 0.10150651633739471f, 0.7602738738059998f, 0.7860926389694214f, 0.3286259174346924f, -0.9422852993011475f, 0.22888995707035065f, 0.4319392740726471f, 0.4320545792579651f, 0.9594772458076477f, 0.9686328768730164f, 0.854318380355835f, 0.15258783102035522f, -0.25303012132644653f, 0.15631529688835144f, 0.08836955577135086f, 0.7224048972129822f, 0.35478588938713074f, 0.3924228847026825f, 0.20406627655029297f, 0.10863003879785538f, -0.20648016035556793f, 0.5075289607048035f, 0.439919114112854f, 0.0948077067732811f, 0.28744032979011536f, 0.9725122451782227f, 0.866256833076477f, 0.37034082412719727f, -0.23509596288204193f, 0.10927798599004745f, 0.9852734804153442f, 0.6854712963104248f, 0.23914794623851776f, 0.9070647358894348f, 0.355861097574234f, 0.48402395844459534f, -0.4232644736766815f, 0.7885711193084717f, 0.8330613970756531f, 0.550039529800415f, 0.5453686118125916f, 0.6216733455657959f, 0.9549911022186279f, 0.4543273150920868f, -0.38947972655296326f, 0.42866790294647217f, 0.1376829743385315f, 0.15919356048107147f, 0.5632672309875488f, 0.40037575364112854f, 0.27405115962028503f, 0.9188055992126465f, -0.746151328086853f, 0.48975273966789246f, 0.607172429561615f, 0.9714221954345703f, 0.31764715909957886f, 0.40564781427383423f, 0.8394528031349182f, 0.7925266027450562f, -0.4584137499332428f, 0.9243836998939514f, 0.9797396063804626f, 0.05259336903691292f, 0.7440129518508911f, 0.5689318776130676f, 0.6582122445106506f, 0.7653684616088867f, -0.9256753325462341f, 0.22467954456806183f, 0.20261047780513763f, 0.03572113811969757f, 0.04185221716761589f, 0.37476488947868347f, 0.7030855417251587f, 0.36177006363868713f, -0.612316906452179f, 0.9951340556144714f, 0.4196871221065521f, 0.47710323333740234f, 0.1226520761847496f, 0.739427924156189f, 0.6476771831512451f, 0.4668125510215759f, -0.40002498030662537f, 0.49129486083984375f, 0.21436817944049835f, 0.7923551797866821f, 0.9190300703048706f, 0.35456204414367676f, 0.5235641598701477f, 0.9120540022850037f, -0.8985454440116882f, 0.48057350516319275f, 0.8687812089920044f, 0.8836726546287537f, 0.01771966740489006f, 0.4089236557483673f, 0.3472590148448944f, 0.5038709044456482f, -0.001907994388602674f, 0.09015166759490967f, 0.5219877362251282f, 0.5138106346130371f, 0.41089144349098206f, 0.6493511199951172f, 0.647856593132019f, 0.5328147411346436f, -0.44825443625450134f, 0.0958670973777771f, 0.6144843697547913f, 0.3448864221572876f, 0.7845417261123657f, 0.0058285510167479515f, 0.05890239030122757f, 0.06961385160684586f, -0.07117261737585068f, 0.6537531614303589f, 0.36414262652397156f, 0.28981655836105347f, 0.6735938191413879f, 0.9609072208404541f, 0.8192799091339111f, 0.1466650515794754f, -0.5166115760803223f, 0.04039359837770462f, 0.8479903936386108f, 0.9430758357048035f, 0.9386545419692993f, 0.7626662850379944f, 0.7795223593711853f, 0.7904196977615356f, -0.5271782279014587f, 0.6055422425270081f, 0.22549550235271454f, 0.10859844833612442f, 0.5132082104682922f, 0.636817455291748f, 0.42468559741973877f, 0.22186699509620667f, -0.4846877157688141f, 0.5604665279388428f, 0.3774147927761078f, 0.1536821573972702f, 0.9516497254371643f, 0.5616879463195801f, 0.013663704507052898f, 0.7862612009048462f, -0.6316548585891724f, 0.5302020311355591f, 0.8920670747756958f, 0.3431326746940613f, 0.21401754021644592f, 0.919908881187439f, 0.8310078382492065f, 0.07206984609365463f, -0.6236159801483154f, 0.8411481976509094f, 0.050874702632427216f, 0.003495845478028059f, 0.16735050082206726f, 0.5504980087280273f, 0.12978248298168182f, 0.18340997397899628f, -0.7677901387214661f, 0.8876310586929321f, 0.3122831881046295f, 0.27274587750434875f, 0.6461347937583923f, 0.6116035580635071f, 0.5961340665817261f, 0.4961085617542267f, -0.5845465064048767f, 0.851262629032135f, 0.8373483419418335f, 0.7453030347824097f, 0.35665905475616455f, 0.13923054933547974f, 0.8506196737289429f, 0.9248851537704468f, -0.30448460578918457f, 0.5242921710014343f, 0.20415475964546204f, 0.8298353552818298f, 0.9480898380279541f, 0.9521560668945312f, 0.5799688696861267f, 0.5339567065238953f, -0.8643753528594971f, 0.3694756031036377f, 0.9962741136550903f, 0.11186329275369644f, 0.2973957657814026f, 0.46244722604751587f, 0.5856291651725769f, 0.06370861828327179f, -0.2510484755039215f, 0.336577445268631f, 0.22250241041183472f, 0.7817389965057373f, 0.6427876353263855f, 0.4717034101486206f, 0.4606231451034546f, 0.2504478394985199f, -0.6962948441505432f, 0.514521062374115f, 0.10894559323787689f, 0.08758904039859772f, 0.7020917534828186f, 0.3619070053100586f, 0.929247260093689f, 0.6448563933372498f, -0.26675209403038025f, 0.3066915273666382f, 0.5687326192855835f, 0.8660831451416016f, 0.6888726949691772f, 0.5556823015213013f, 0.6964119076728821f, 0.2888413965702057f, -0.7035803198814392f, 0.8933183550834656f, 0.8570865988731384f, 0.8926764130592346f, 0.40450647473335266f, 0.6038784384727478f, 0.6329489350318909f, 0.6825330853462219f, -0.38239800930023193f, 0.1147514283657074f, 0.044479746371507645f, 0.7855353355407715f, 0.7377398014068604f, 0.2188931256532669f, 0.9708554148674011f, 0.21495413780212402f, -0.876587986946106f, 0.9236254692077637f, 0.7477875351905823f, 0.36267414689064026f, 0.5178771018981934f, 0.6169003844261169f, 0.10345344245433807f, 0.31547483801841736f, -0.9392874836921692f, 0.5346166491508484f, 0.87117600440979f, 0.9189932346343994f, 0.02615864761173725f, 0.8790804147720337f, 0.2523811161518097f, 0.8505458831787109f, -0.7948108315467834f, 0.5711237192153931f, 0.5941969156265259f, 0.7576868534088135f, 0.5477153658866882f, 0.013620197772979736f, 0.5252772569656372f, 0.6397767066955566f, -0.5033164620399475f, 0.7436898350715637f, 0.3195597231388092f, 0.28628477454185486f, 0.13732710480690002f, 0.34318122267723083f, 0.542523980140686f, 0.9443504214286804f, -0.3704898953437805f, 0.4168701171875f, 0.21035227179527283f, 0.27229008078575134f, 0.4776342511177063f, 0.7894713282585144f, 0.8247984647750854f, 0.4431575536727905f, -0.7330509424209595f, 0.3372998535633087f, 0.14864595234394073f, 0.4886476993560791f, 0.18230976164340973f, 0.40954816341400146f, 0.9945248365402222f, 0.7695276737213135f, -0.18916930258274078f, 0.6232892274856567f, 0.758052408695221f, 0.606824517250061f, 0.6528072357177734f, 0.19310426712036133f, 0.670815646648407f, 0.32863205671310425f, -0.3662942945957184f, 0.08159880340099335f, 0.9371761679649353f, 0.1841568946838379f, 0.4197988510131836f, 0.3430947959423065f, 0.9273672699928284f, 0.9777583479881287f, -0.10473266988992691f, 0.16074469685554504f, 0.8262401223182678f, 0.47874465584754944f, 0.5546848177909851f, 0.14376063644886017f, 0.6376017928123474f, 0.16069269180297852f, -0.8789228796958923f, 0.6720086336135864f, 0.3864651322364807f, 0.8959938883781433f, 0.9047126770019531f, 0.7898589372634888f, 0.4536924362182617f, 0.5919047594070435f, -0.04230007156729698f, 0.8348966240882874f, 0.7743330597877502f, 0.3052425682544708f, 0.8520111441612244f, 0.6707310080528259f, 0.7875641584396362f, 0.5436646938323975f, -0.6388326287269592f, 0.9741004109382629f, 0.08240970224142075f, 0.37378641963005066f, 0.4294452667236328f, 0.4293554723262787f, 0.6162562370300293f, 0.4322254955768585f, -0.1274576187133789f, 0.7300804853439331f, 0.5449144244194031f, 0.6223782300949097f, 0.5277700424194336f, 0.9430816173553467f, 0.8600888848304749f, 0.7150024175643921f, -0.6137323975563049f, 0.43746647238731384f, 0.9177656769752502f, 0.6551943421363831f, 0.18545080721378326f, 0.3216910660266876f, 0.6018350720405579f, 0.35587823390960693f, -0.8115383982658386f, 0.06582368165254593f, 0.6057740449905396f, 0.4147220849990845f, 0.8207165598869324f, 0.25279366970062256f, 0.8429536819458008f, 0.30474919080734253f, -0.3790932893753052f, 0.6501163840293884f, 0.9247793555259705f, 0.3077702522277832f, 0.020033540204167366f, 0.20965483784675598f, 0.3310319185256958f, 0.10595578700304031f, -0.1612815260887146f, 0.09194379299879074f, 0.9820212125778198f, 0.04432113096117973f, 0.034702952951192856f, 0.7190014123916626f, 0.2334715723991394f, 0.1716209352016449f, -0.5990522503852844f, 0.061099473387002945f, 0.3015628159046173f, 0.5098791122436523f, 0.09099328517913818f, 0.6943788528442383f, 0.5573386549949646f, 0.548552930355072f, -0.6597598195075989f, 0.27127978205680847f, 0.24855799973011017f, 0.5968572497367859f, 0.0658823698759079f, 0.9901134371757507f, 0.007652772590517998f, 0.09095614403486252f, -0.6954887509346008f, 0.29468774795532227f, 0.15712828934192657f, 0.8817355036735535f, 0.2864508330821991f, 0.8622812628746033f, 0.23085033893585205f, 0.8341875076293945f, -0.4063214659690857f, 0.9576500058174133f, 0.04511198401451111f, 0.7278541326522827f, 0.9072637557983398f, 0.34499356150627136f, 0.12116226553916931f, 0.5625568628311157f, -0.5483036637306213f, 0.42670926451683044f, 0.26002490520477295f, 0.5352361798286438f, 0.22825390100479126f, 0.826214075088501f, 0.05643504112958908f, 0.8807930946350098f, -0.1231270357966423f, 0.546163022518158f, 0.14102791249752045f, 0.6198656558990479f, 0.9373385310173035f, 0.914575457572937f, 0.6522895097732544f, 0.44241777062416077f, -0.33426880836486816f, 0.930557370185852f, 0.060492295771837234f, 0.17389515042304993f, 0.8419191837310791f, 0.7169820666313171f, 0.583343505859375f, 0.8288460373878479f, -0.4770827293395996f, 0.6725733876228333f, 0.7184404730796814f, 0.8645414710044861f, 0.7860618829727173f, 0.6687144041061401f, 0.1390531212091446f, 0.06331337988376617f, -0.6034309267997742f, 0.8162091374397278f, 0.25716832280158997f, 0.10017205774784088f, 0.06818186491727829f, 0.2594805061817169f, 0.6320279836654663f, 0.07310372591018677f, -0.04872364178299904f, 0.3754620850086212f, 0.0647391676902771f, 0.18725594878196716f, 0.9820082187652588f, 0.1678933948278427f, 0.09742160141468048f, 0.02576548419892788f, -0.4247012138366699f, 0.08104521781206131f, 0.00479593500494957f, 0.6245812177658081f, 0.2946189045906067f, 0.8736459016799927f, 0.3776407837867737f, 0.3477169871330261f, -0.9664015173912048f, 0.36364448070526123f, 0.9054651856422424f, 0.8065702319145203f, 0.9688304662704468f, 0.5719132423400879f, 0.3922630250453949f, 0.04892529174685478f, -0.985035240650177f, 0.7886759638786316f, 0.06848536431789398f, 0.9765436053276062f, 0.6807988882064819f, 0.7497562766075134f, 0.5786855220794678f, 0.5130793452262878f, -0.6954385042190552f, 0.810032069683075f, 0.6448460221290588f, 0.4892963469028473f, 0.19666633009910583f, 0.6164413094520569f, 0.8876124024391174f, 0.6202315092086792f, -0.2541098892688751f, 0.3874983787536621f, 0.13970635831356049f, 0.7730439305305481f, 0.9515385031700134f, 0.6787436604499817f, 0.14221693575382233f, 0.8497282266616821f, -0.6387390494346619f, 0.2836611270904541f, 0.20749051868915558f, 0.21091841161251068f, 0.3715521991252899f, 0.2497883439064026f, 0.5311022996902466f, 0.43322086334228516f, -0.6219586133956909f, 0.3599632680416107f, 0.514127254486084f, 0.4232456684112549f, 0.3842014670372009f, 0.1217150166630745f, 0.7278252243995667f, 0.3054034411907196f, -0.2688184976577759f, 0.3846357762813568f, 0.34994813799858093f, 0.0550900436937809f, 0.5274173617362976f, 0.49221640825271606f, 0.8863389492034912f, 0.28057587146759033f, -0.5604679584503174f, 0.17970973253250122f, 0.45149630308151245f, 0.31460273265838623f, 0.19145041704177856f, 0.5671475529670715f, 0.8317061066627502f, 0.27748751640319824f, -0.9990716576576233f, 0.1939706802368164f, 0.5067523717880249f, 0.9471727609634399f, 0.3297538161277771f, 0.31248778104782104f, 0.13769716024398804f, 0.33334365487098694f, -0.3035060465335846f, 0.2550010681152344f, 0.07658110558986664f, 0.567703902721405f, 0.6203104257583618f, 0.09582219272851944f, 0.9822304248809814f, 0.09628622978925705f, -0.5106123685836792f, 0.012552880682051182f, 0.4631510376930237f, 0.6424553990364075f, 0.696561336517334f, 0.7591790556907654f, 0.38835689425468445f, 0.9196176528930664f, -0.5592387318611145f, 0.6302908062934875f, 0.3951122760772705f, 0.6663301587104797f, 0.8124145269393921f, 0.04703003168106079f, 0.9940621852874756f, 0.7074666023254395f, -0.8094600439071655f, 0.7394309639930725f, 0.7138457894325256f, 0.9912670254707336f, 0.42319777607917786f, 0.2753744423389435f, 0.7599731087684631f, 0.9572793245315552f, -0.37402093410491943f, 0.4030511975288391f, 0.4139157831668854f, 0.9975020289421082f, 0.17116978764533997f, 0.570576548576355f, 0.2869463562965393f, 0.021483734250068665f, -0.7175933718681335f, 0.05629856139421463f, 0.19193674623966217f, 0.9251834154129028f, 0.02233344502747059f, 0.41505634784698486f, 0.6827272176742554f, 0.5617700815200806f, -0.7487131953239441f, 0.508885383605957f, 0.40322592854499817f, 0.8851900100708008f, 0.24322962760925293f, 0.16530026495456696f, 0.41587820649147034f, 0.4024949073791504f, -0.06284365803003311f, 0.7849252223968506f, 0.38381341099739075f, 0.3050974905490875f, 0.4253970980644226f, 0.012338821776211262f, 0.05702362582087517f, 0.2706100344657898f, -0.6906248927116394f, 0.6232818961143494f, 0.18422207236289978f, 0.8533688187599182f, 0.010891198180615902f, 0.957886815071106f, 0.22932006418704987f, 0.5875678658485413f, -0.6138865351676941f, 0.03946298733353615f, 0.9983786940574646f, 0.77168208360672f, 0.7809948921203613f, 0.9865626096725464f, 0.031900543719530106f, 0.9676066637039185f, -0.09638527035713196f, 0.1149933710694313f, 0.7150747776031494f, 0.7351671457290649f, 0.35825100541114807f, 0.5540539622306824f, 0.21948383748531342f, 0.6225317716598511f, -0.2592654824256897f, 0.8038116097450256f, 0.7429904937744141f, 0.19301220774650574f, 0.77079838514328f, 0.06874366104602814f, 0.22268134355545044f, 0.5747414827346802f, -0.7870672345161438f, 0.8281528353691101f, 0.7419628500938416f, 0.9265407919883728f, 0.9268707633018494f, 0.8179385662078857f, 0.28377118706703186f, 0.8042826056480408f, -0.014490197412669659f, 0.4404706358909607f, 0.7972197532653809f, 0.4795449376106262f, 0.23163434863090515f, 0.7548913359642029f, 0.8913363218307495f, 0.7421813011169434f, -0.9616747498512268f, 0.4877016246318817f, 0.18242937326431274f, 0.592785120010376f, 0.1528463214635849f, 0.7646703124046326f, 0.8412634134292603f, 0.24401405453681946f, -0.7715944051742554f, 0.5043012499809265f, 0.984335720539093f, 0.6338040828704834f, 0.7255619168281555f, 0.2137688547372818f, 0.9467554688453674f, 0.5887227654457092f, -0.8743223547935486f, 0.8333044052124023f, 0.7594596743583679f, 0.4222765564918518f, 0.9996627569198608f, 0.2770653963088989f, 0.15622511506080627f, 0.5028610229492188f, -0.40056300163269043f, 0.4945323169231415f, 0.41193678975105286f, 0.6025565266609192f, 0.8154260516166687f, 0.30157291889190674f, 0.3303353190422058f, 0.6921566128730774f, -0.3914291560649872f, 0.00011893217015312985f, 0.6041250824928284f, 0.22039775550365448f, 0.7072167992591858f, 0.27938374876976013f, 0.9425354599952698f, 0.4804478585720062f, -0.3636989891529083f, 0.8440240621566772f, 0.9243316054344177f, 0.451107382774353f, 0.11660907417535782f, 0.658039927482605f, 0.23537376523017883f, 0.04307258874177933f, -0.1865798830986023f, 0.3176616430282593f, 0.8328931927680969f, 0.9980413913726807f, 0.7543135285377502f, 0.5317484736442566f, 0.9098119735717773f, 0.7882426381111145f, -0.9336979389190674f, 0.8823871612548828f, 0.22620734572410583f, 0.5410254001617432f, 0.08906446397304535f, 0.5279510021209717f, 0.6848645806312561f, 0.6195412874221802f, -0.6161991953849792f, 0.624384343624115f, 0.15301984548568726f, 0.4182877540588379f, 0.44965192675590515f, 0.34930747747421265f, 0.6320300698280334f, 0.9394598603248596f, -0.8153047561645508f, 0.2571476399898529f, 0.2671918272972107f, 0.24279430508613586f, 0.29936689138412476f, 0.09296334534883499f, 0.728303849697113f, 0.1991277039051056f, -0.21940869092941284f, 0.661469578742981f, 0.2566283047199249f, 0.8839324116706848f, 0.3528484106063843f, 0.6024994254112244f, 0.5464267134666443f, 0.9061705470085144f, -0.9077553749084473f, 0.6398944854736328f, 0.289392352104187f, 0.1199103593826294f, 0.4870394468307495f, 0.8059713244438171f, 0.2077588587999344f, 0.20867840945720673f, -0.47447049617767334f, 0.8474595546722412f, 0.855608344078064f, 0.39585503935813904f, 0.6532098054885864f, 0.08810952305793762f, 0.8370568156242371f, 0.6161404252052307f, -0.1291966289281845f, 0.5801458358764648f, 0.9544243216514587f, 0.6078407168388367f, 0.9746458530426025f, 0.9705780148506165f, 0.2832568883895874f, 0.5161583423614502f, -0.15529094636440277f, 0.9160330295562744f, 0.36371421813964844f, 0.9139137864112854f, 0.7002090215682983f, 0.6834504008293152f, 0.6039513349533081f, 0.5582510232925415f, -0.7221887111663818f, 0.07490312308073044f, 0.901792049407959f, 0.9816958904266357f, 0.5280930995941162f, 0.5980634689331055f, 0.5909010171890259f, 0.9037137627601624f, -0.7340652942657471f, 0.10470087826251984f, 0.7765833735466003f, 0.6700018048286438f, 0.27875787019729614f, 0.8796710968017578f, 0.7170654535293579f, 0.761549174785614f, -0.8917375206947327f, 0.5089038014411926f, 0.1277913600206375f, 0.6397966742515564f, 0.955930233001709f, 0.6489157676696777f, 0.32506710290908813f, 0.5417078733444214f, -0.11963878571987152f, 0.8550238609313965f, 0.536160945892334f, 0.920766294002533f, 0.7608686089515686f, 0.20223397016525269f, 0.7198063135147095f, 0.12132592499256134f, -0.9416921734809875f, 0.19944967329502106f, 0.16361907124519348f, 0.17205479741096497f, 0.44135668873786926f, 0.6327633857727051f, 0.5610798597335815f, 0.8813105225563049f, -0.3921392858028412f, 0.19259272515773773f, 0.3770238757133484f, 0.6005770564079285f, 0.5563988089561462f, 0.04534309729933739f, 0.5517873167991638f, 0.7551060318946838f, -0.09029293805360794f, 0.6178345084190369f, 0.14832015335559845f, 0.4622407555580139f, 0.8937882781028748f, 0.21134322881698608f, 0.24392753839492798f, 0.9749911427497864f, -0.7757161259651184f, 0.3100235164165497f, 0.5839437246322632f, 0.09602464735507965f, 0.6385219097137451f, 0.6466106176376343f, 0.4320053160190582f, 0.35780400037765503f, -0.9953117966651917f, 0.6600435376167297f, 0.9191038012504578f, 0.8132482171058655f, 0.17622783780097961f, 0.16206873953342438f, 0.34509050846099854f, 0.8894644379615784f, -0.7102329134941101f, 0.18000490963459015f, 0.5770464539527893f, 0.721894383430481f, 0.2912991940975189f, 0.11456102877855301f, 0.9883803129196167f, 0.4325956702232361f, -0.40032920241355896f, 0.8893404006958008f, 0.3592194616794586f, 0.5260770916938782f, 0.740124523639679f, 0.741980254650116f, 0.06388424336910248f, 0.02617049776017666f, -0.2978733479976654f, 0.5820298790931702f, 0.16350017488002777f, 0.558695912361145f, 0.27780747413635254f, 0.8833180665969849f, 0.6676295399665833f, 0.5097100138664246f, -0.8549987077713013f, 0.6026153564453125f, 0.06353691965341568f, 0.0038403638172894716f, 0.7854499220848083f, 0.3165506422519684f, 0.5229659676551819f, 0.9792987704277039f, -0.8212881684303284f, 0.8736262321472168f, 0.5556317567825317f, 0.5561177134513855f, 0.24720847606658936f, 0.92204350233078f, 0.661915123462677f, 0.39409488439559937f, -0.9635412096977234f, 0.906349778175354f, 0.3396416902542114f, 0.03455992415547371f, 0.25489574670791626f, 0.9286022782325745f, 0.7445353865623474f, 0.4304940700531006f, -0.5710285902023315f, 0.7719500660896301f, 0.06627347320318222f, 0.22175367176532745f, 0.0668034702539444f, 0.45054373145103455f, 0.10096839815378189f, 0.24727994203567505f, -0.4731476306915283f, 0.11809862405061722f, 0.28709980845451355f, 0.503736138343811f, 0.34863439202308655f, 0.26479342579841614f, 0.5329681634902954f, 0.21120557188987732f, -0.7099509835243225f, 0.8513884544372559f, 0.08452462404966354f, 0.46265876293182373f, 0.7250176072120667f, 0.06905944645404816f, 0.3520808517932892f, 0.18934132158756256f, -0.9681686758995056f, 0.6441767811775208f, 0.27402517199516296f, 0.19739454984664917f, 0.7696865797042847f, 0.31842532753944397f, 0.8707987666130066f, 0.8884868621826172f, -0.5075603127479553f, 0.2966461479663849f, 0.7549481987953186f, 0.22479933500289917f, 0.8712832927703857f, 0.7572420239448547f, 0.815453290939331f, 0.9117019176483154f, -0.9565970301628113f, 0.5529212355613708f, 0.03749816119670868f, 0.32998430728912354f, 0.1131182461977005f, 0.2722610831260681f, 0.16442930698394775f, 0.38725852966308594f, -0.7928164005279541f, 0.0980580672621727f, 0.45503631234169006f, 0.321650892496109f, 0.9769431352615356f, 0.015727024525403976f, 0.8043693900108337f, 0.8244374394416809f, -0.033638518303632736f, 0.3221759498119354f, 0.33220618963241577f, 0.657096803188324f, 0.6120502948760986f, 0.9169121980667114f, 0.9622389674186707f, 0.7084532976150513f, -0.958511471748352f, 0.046166855841875076f, 0.8507704138755798f, 0.585773229598999f, 0.935327410697937f, 0.8491248488426208f, 0.9366632103919983f, 0.07023601979017258f, -0.680213451385498f, 0.1734429895877838f, 0.9971675276756287f, 0.6270991563796997f, 0.6722909212112427f, 0.5467101335525513f, 0.6756671071052551f, 0.31849056482315063f, -0.4614466726779938f, 0.7699968814849854f, 0.47748881578445435f, 0.04740245267748833f, 0.41199833154678345f, 0.6537607908248901f, 0.517254650592804f, 0.4998185336589813f, -0.9827328324317932f, 0.8971168994903564f, 0.7707666158676147f, 0.7200324535369873f, 0.03855897858738899f, 0.7007362246513367f, 0.051653433591127396f, 0.633264422416687f, -0.4648682475090027f, 0.20467618107795715f, 0.3387083411216736f, 0.2689858376979828f, 0.9751996397972107f, 0.5145916938781738f, 0.5946335196495056f, 0.9313286542892456f, -0.09885632991790771f, 0.09136553108692169f, 0.5818835496902466f, 0.10637614130973816f, 0.3699913024902344f, 0.022730311378836632f, 0.6462764739990234f, 0.9093555212020874f, -0.776551365852356f, 0.48647797107696533f, 0.3448397219181061f, 0.23655866086483002f, 0.7664127349853516f, 0.7077686786651611f, 0.665941059589386f, 0.2829773426055908f, -0.6527998447418213f, 0.7961286902427673f, 0.8213844299316406f, 0.3448885977268219f, 0.5182218551635742f, 0.2159503549337387f, 0.026012757793068886f, 0.8456002473831177f, -0.7202087044715881f, 0.5118826031684875f, 0.9994934797286987f, 0.33559703826904297f, 0.38558128476142883f, 0.4467739164829254f, 0.7589758038520813f, 0.19656680524349213f, -0.2929692566394806f, 0.6744066476821899f, 0.7594016194343567f, 0.37688806653022766f, 0.3996945023536682f, 0.30012303590774536f, 0.20466209948062897f, 0.282047837972641f, -0.41880273818969727f, 0.07917570322751999f, 0.14432059228420258f, 0.5102239847183228f, 0.6339208483695984f, 0.7393833994865417f, 0.3432939946651459f, 0.5206816792488098f, -0.39398497343063354f, 0.3508177101612091f, 0.5190199017524719f, 0.4454643726348877f, 0.726730227470398f, 0.8266979455947876f, 0.1819891333580017f, 0.747376024723053f, -0.2254602164030075f, 0.7025582790374756f, 0.27857279777526855f, 0.5974794626235962f, 0.01320501510053873f, 0.9731768369674683f, 0.6564763784408569f, 0.21689456701278687f, -0.558866560459137f, 0.738858699798584f, 0.6012544631958008f, 0.08493351936340332f, 0.6012988090515137f, 0.4505559206008911f, 0.42127862572669983f, 0.5785634517669678f, -0.6467776298522949f, 0.7991582751274109f, 0.60920250415802f, 0.7499440312385559f, 0.17002715170383453f, 0.5655946135520935f, 0.3360987603664398f, 0.5102676153182983f, -0.8432708382606506f, 0.31311824917793274f, 0.7813289165496826f, 0.0005474421195685863f, 0.8062556982040405f, 0.559286892414093f, 0.18978963792324066f, 0.898720383644104f, -0.9177845120429993f, 0.638531506061554f, 0.481449693441391f, 0.6327947378158569f, 0.9459864497184753f, 0.4268617331981659f, 0.34913182258605957f, 0.11150214076042175f, -0.18603277206420898f, 0.8696529865264893f, 0.2995028495788574f, 0.7617760896682739f, 0.30795609951019287f, 0.48806077241897583f, 0.5547081828117371f, 0.9431920051574707f, -0.5625826716423035f, 0.7680604457855225f, 0.8130608797073364f, 0.6464629173278809f, 0.9501805305480957f, 0.8770841956138611f, 0.7001534104347229f, 0.49904173612594604f, -0.6905718445777893f, 0.8729743361473083f, 0.6168837547302246f, 0.2286233901977539f, 0.02786649949848652f, 0.046479810029268265f, 0.8793403506278992f, 0.8027771711349487f, -0.00771375373005867f, 0.6056053638458252f, 0.4742746353149414f, 0.28337836265563965f, 0.0378970205783844f, 0.739387571811676f, 0.5062382817268372f, 0.6033216118812561f, -0.6261721253395081f, 0.6841152906417847f, 0.5054512619972229f, 0.14138402044773102f, 0.18699459731578827f, 0.9162114262580872f, 0.023625241592526436f, 0.014421229250729084f, -0.18007522821426392f, 0.1530931293964386f, 0.3934231698513031f, 0.33013930916786194f, 0.48483359813690186f, 0.9130833148956299f, 0.7415971755981445f, 0.8711586594581604f, -0.5104855298995972f, 0.3664601445198059f, 0.44171783328056335f, 0.10235178470611572f, 0.07041166722774506f, 0.49841687083244324f, 0.03287715092301369f, 0.09526527673006058f, -0.9490782618522644f, 0.43396130204200745f, 0.2885594666004181f, 0.8182670474052429f, 0.19917982816696167f, 0.3283197581768036f, 0.5506763458251953f, 0.3929837644100189f, -0.8610202670097351f, 0.3188372850418091f, 0.5853861570358276f, 0.30712467432022095f, 0.6249186992645264f, 0.7871152758598328f, 0.34550321102142334f, 0.00743010314181447f, -0.38550877571105957f, 0.12557558715343475f, 0.17640714347362518f, 0.3889397084712982f, 0.31466224789619446f, 0.29802006483078003f, 0.5476901531219482f, 0.5154994130134583f, -0.14679479598999023f, 0.7694514989852905f, 0.9949609041213989f, 0.533912181854248f, 0.049763455986976624f, 0.46264633536338806f, 0.2746008336544037f, 0.07554354518651962f, -0.03369029238820076f, 0.4412846267223358f, 0.2944554090499878f, 0.20863988995552063f, 0.0025100097991526127f, 0.619688093662262f, 0.4615163803100586f, 0.7179760932922363f, -0.18290163576602936f, 0.4964241087436676f, 0.5371955633163452f, 0.3353412449359894f, 0.7814688086509705f, 0.8885351419448853f, 0.8353687524795532f, 0.17325642704963684f, -0.40211784839630127f, 0.26700615882873535f, 0.4023614823818207f, 0.5139913558959961f, 0.4044492542743683f, 0.5327749252319336f, 0.025227464735507965f, 0.9439936876296997f, -0.42604702711105347f, 0.12295902520418167f, 0.8584008812904358f, 0.8320388793945312f, 0.05295313522219658f, 0.5447601675987244f, 0.7652881741523743f, 0.33634528517723083f, -0.3273598849773407f, 0.9293161034584045f, 0.2211311012506485f, 0.28838005661964417f, 0.77101069688797f, 0.25171247124671936f, 0.210292786359787f, 0.4722149670124054f, -0.7158846259117126f, 0.0013398851733654737f, 0.8942330479621887f, 0.83696049451828f, 0.9205953478813171f, 0.2989245355129242f, 0.7401729226112366f, 0.19774816930294037f, -0.4745139181613922f, 0.03860660269856453f, 0.4012051820755005f, 0.3074701428413391f, 0.35937440395355225f, 0.4723813533782959f, 0.8627308011054993f, 0.1640339493751526f, -0.8756986260414124f, 0.7828762531280518f, 0.10560807585716248f, 0.3787940740585327f, 0.7552379965782166f, 0.24030226469039917f, 0.009168441407382488f, 0.06419243663549423f, -0.05360983684659004f, 0.18612727522850037f, 0.7291337251663208f, 0.31933704018592834f, 0.5590562224388123f, 0.8407245874404907f, 0.6951716542243958f, 0.0419653095304966f, -0.6034387350082397f, 0.5597953796386719f, 0.10545405000448227f, 0.23389197885990143f, 0.899196445941925f, 0.8767936825752258f, 0.05365713685750961f, 0.7531750202178955f, -0.7956555485725403f, 0.5353896617889404f, 0.6839830279350281f, 0.6453654766082764f, 0.8835486173629761f, 0.17201532423496246f, 0.8124158978462219f, 0.7027843594551086f, -0.8628970980644226f, 0.5661525130271912f, 0.1838817149400711f, 0.252760648727417f, 0.23519502580165863f, 0.9157880544662476f, 0.9738876223564148f, 0.3883983790874481f, -0.6228118538856506f, 0.2154669165611267f, 0.4928683936595917f, 0.7441403269767761f, 0.17530140280723572f, 0.5675314664840698f, 0.08799713850021362f, 0.0987720787525177f, -0.4637138247489929f, 0.15405549108982086f, 0.12767361104488373f, 0.5080514550209045f, 0.008395216427743435f, 0.47097575664520264f, 0.6160333156585693f, 0.7500055432319641f, -0.2931375503540039f, 0.2886204421520233f, 0.1493557095527649f, 0.9543051719665527f, 0.388671338558197f, 0.5135669112205505f, 0.6168377995491028f, 0.21056228876113892f, -0.2159539759159088f, 0.8450248837471008f, 0.338236004114151f, 0.5436770915985107f, 0.14708250761032104f, 0.5061184167861938f, 0.5872531533241272f, 0.8771529197692871f, -0.4526467025279999f, 0.003515654243528843f, 0.5767818689346313f, 0.19126467406749725f, 0.6746192574501038f, 0.29280152916908264f, 0.3546941578388214f, 0.4696297347545624f, -0.821106493473053f, 0.7012077569961548f, 0.0353146567940712f, 0.784753143787384f, 0.4929860532283783f, 0.6740095019340515f, 0.4963577091693878f, 0.5704501867294312f, -0.9333449006080627f, 0.8069272637367249f, 0.8695408701896667f, 0.3447237014770508f, 0.03286674618721008f, 0.00575984688475728f, 0.6673791408538818f, 0.28553327918052673f, -0.012365300208330154f, 0.85286545753479f, 0.30995920300483704f, 0.357113778591156f, 0.8154539465904236f, 0.22758808732032776f, 0.9466062784194946f, 0.9043764472007751f, -0.8127455711364746f, 0.216728076338768f, 0.8169532418251038f, 0.014068396762013435f, 0.610209584236145f, 0.3644571006298065f, 0.8607555031776428f, 0.16328217089176178f, -0.048287875950336456f, 0.20796681940555573f, 0.06423958390951157f, 0.18240003287792206f, 0.930841326713562f, 0.8834697008132935f, 0.1384824961423874f, 0.5894091725349426f, -0.04095187410712242f, 0.6256791949272156f, 0.045056696981191635f, 0.5057145953178406f, 0.9311461448669434f, 0.8915037512779236f, 0.6679043769836426f, 0.0469072200357914f, -0.9077714085578918f, 0.81037837266922f, 0.6767708659172058f, 0.21657386422157288f, 0.8893676996231079f, 0.6631156206130981f, 0.5422667860984802f, 0.12140090763568878f,}; - -float In_G[8192] = { -27.177892684936523f, 0.0f, 21.266006469726562f, 4.962209701538086f, 20.070655822753906f, 3.5242319107055664f, 18.750019073486328f, 2.2480688095092773f, -21.266006469726562f, -4.962209701538086f, 25.269046783447266f, 0.0f, 18.907859802246094f, 0.1665058135986328f, 16.596904754638672f, -1.7733664512634277f, -20.070655822753906f, -3.5242319107055664f, 18.907859802246094f, -0.1665058135986328f, 22.46148109436035f, 0.0f, 15.849457740783691f, 0.39119815826416016f, -18.750019073486328f, -2.2480688095092773f, 16.596904754638672f, 1.7733664512634277f, 15.849457740783691f, -0.39119815826416016f, 21.43837547302246f, 0.0f, -26.69502067565918f, 0.0f, 19.260616302490234f, 1.3052730560302734f, 18.99789047241211f, -1.8223419189453125f, 16.98910140991211f, 0.6085538864135742f, -19.260616302490234f, -1.3052730560302734f, 22.60270881652832f, 0.0f, 17.74444580078125f, -4.701714992523193f, 16.21324920654297f, -2.386870861053467f, -18.99789047241211f, 1.8223419189453125f, 17.74444580078125f, 4.701714992523193f, 25.33054542541504f, 0.0f, 16.181133270263672f, 3.9560341835021973f, -16.98910140991211f, -0.6085538864135742f, 16.21324920654297f, 2.386870861053467f, 16.181133270263672f, -3.9560341835021973f, 20.574735641479492f, 0.0f, -23.917911529541016f, 0.0f, 17.064319610595703f, 5.072530746459961f, 17.139280319213867f, 3.9575858116149902f, 16.0948486328125f, 2.205960750579834f, -17.064319610595703f, -5.072530746459961f, 21.491031646728516f, 0.0f, 16.68302345275879f, -0.6771101951599121f, 15.327407836914062f, -0.2506828308105469f, -17.139280319213867f, -3.9575858116149902f, 16.68302345275879f, 0.6771101951599121f, 21.70703125f, 0.0f, 15.583761215209961f, -0.6962685585021973f, -16.0948486328125f, -2.205960750579834f, 15.327407836914062f, 0.2506828308105469f, 15.583761215209961f, 0.6962685585021973f, 20.797224044799805f, 0.0f, -25.779468536376953f, 0.0f, 19.103307723999023f, 2.874936103820801f, 19.40733528137207f, -0.538996696472168f, 17.46788215637207f, 1.129786491394043f, -19.103307723999023f, -2.874936103820801f, 24.02129364013672f, 0.0f, 18.017719268798828f, -2.08261775970459f, 16.907140731811523f, -1.0745034217834473f, -19.40733528137207f, 0.538996696472168f, 18.017719268798828f, 2.08261775970459f, 23.47435188293457f, 0.0f, 16.34310531616211f, 0.9331159591674805f, -17.46788215637207f, -1.129786491394043f, 16.907140731811523f, 1.0745034217834473f, 16.34310531616211f, -0.9331159591674805f, 19.93582534790039f, 0.0f, -21.227222442626953f, 0.0f, 13.865663528442383f, 1.0827255249023438f, 16.220834732055664f, -1.429786205291748f, 15.164009094238281f, -0.31860923767089844f, -13.865663528442383f, -1.0827255249023438f, 18.9834041595459f, 0.0f, 14.527589797973633f, -0.8998146057128906f, 14.195263862609863f, -0.45685291290283203f, -16.220834732055664f, 1.429786205291748f, 14.527589797973633f, 0.8998146057128906f, 20.385631561279297f, 0.0f, 13.386552810668945f, 0.6392717361450195f, -15.164009094238281f, 0.31860923767089844f, 14.195263862609863f, 0.45685291290283203f, 13.386552810668945f, -0.6392717361450195f, 19.890031814575195f, 0.0f, -24.845352172851562f, 0.0f, 17.52373695373535f, 1.3428339958190918f, 16.664827346801758f, 1.5078997611999512f, 16.90348243713379f, 1.536972999572754f, -17.52373695373535f, -1.3428339958190918f, 22.56801986694336f, 0.0f, 17.42030906677246f, -1.1565132141113281f, 16.122364044189453f, 0.6954717636108398f, -16.664827346801758f, -1.5078997611999512f, 17.42030906677246f, 1.1565132141113281f, 22.291236877441406f, 0.0f, 15.66874885559082f, 0.9849176406860352f, -16.90348243713379f, -1.536972999572754f, 16.122364044189453f, -0.6954717636108398f, 15.66874885559082f, -0.9849176406860352f, 22.1466064453125f, 0.0f, -25.36525535583496f, 0.0f, 18.178359985351562f, -1.600484848022461f, 17.825918197631836f, -2.7972450256347656f, 17.502653121948242f, 2.0532922744750977f, -18.178359985351562f, 1.600484848022461f, 22.82699203491211f, 0.0f, 15.443572998046875f, -0.7396001815795898f, 15.392995834350586f, 4.471595287322998f, -17.825918197631836f, 2.7972450256347656f, 15.443572998046875f, 0.7396001815795898f, 19.83134651184082f, 0.0f, 15.247118949890137f, 3.9542531967163086f, -17.502653121948242f, -2.0532922744750977f, 15.392995834350586f, -4.471595287322998f, 15.247118949890137f, -3.9542531967163086f, 21.919702529907227f, 0.0f, -20.236656188964844f, 0.0f, 12.74460506439209f, 1.7440204620361328f, 12.347569465637207f, 0.48871278762817383f, 13.225625038146973f, -0.7889471054077148f, -12.74460506439209f, -1.7440204620361328f, 16.617660522460938f, 0.0f, 12.402503967285156f, -0.9840092658996582f, 13.14319133758545f, -2.0305776596069336f, -12.347569465637207f, -0.48871278762817383f, 12.402503967285156f, 0.9840092658996582f, 18.906570434570312f, 0.0f, 11.51611328125f, 0.023788928985595703f, -13.225625038146973f, 0.7889471054077148f, 13.14319133758545f, 2.0305776596069336f, 11.51611328125f, -0.023788928985595703f, 18.628175735473633f, 0.0f, -24.680519104003906f, 0.0f, 19.667247772216797f, 0.47842979431152344f, 18.646270751953125f, -0.5574111938476562f, 21.376052856445312f, -0.7360925674438477f, -19.667247772216797f, -0.47842979431152344f, 22.964651107788086f, 0.0f, 17.403671264648438f, -2.2669644355773926f, 19.876659393310547f, -2.5046443939208984f, -18.646270751953125f, 0.5574111938476562f, 17.403671264648438f, 2.2669644355773926f, 25.14274787902832f, 0.0f, 19.709001541137695f, 0.6068830490112305f, -21.376052856445312f, 0.7360925674438477f, 19.876659393310547f, 2.5046443939208984f, 19.709001541137695f, -0.6068830490112305f, 27.85398292541504f, 0.0f, -18.592975616455078f, 0.0f, 15.146997451782227f, 1.2206501960754395f, 16.555694580078125f, 0.49425792694091797f, 14.446435928344727f, -0.8302502632141113f, -15.146997451782227f, -1.2206501960754395f, 19.620147705078125f, 0.0f, 16.874393463134766f, -0.13013267517089844f, 13.291919708251953f, -1.7602958679199219f, -16.555694580078125f, -0.49425792694091797f, 16.874393463134766f, 0.13013267517089844f, 23.165620803833008f, 0.0f, 16.13136863708496f, -0.35946178436279297f, -14.446435928344727f, 0.8302502632141113f, 13.291919708251953f, 1.7602958679199219f, 16.13136863708496f, 0.35946178436279297f, 19.05156898498535f, 0.0f, -16.72402572631836f, 0.0f, 11.882720947265625f, 0.30953550338745117f, 11.778053283691406f, 1.5259032249450684f, 12.472046852111816f, 0.0872197151184082f, -11.882720947265625f, -0.30953550338745117f, 19.806392669677734f, 0.0f, 14.791849136352539f, 1.182023048400879f, 12.914052963256836f, -1.3155598640441895f, -11.778053283691406f, -1.5259032249450684f, 14.791849136352539f, -1.182023048400879f, 20.742403030395508f, 0.0f, 14.015495300292969f, -1.7493839263916016f, -12.472046852111816f, -0.0872197151184082f, 12.914052963256836f, 1.3155598640441895f, 14.015495300292969f, 1.7493839263916016f, 19.611083984375f, 0.0f, -13.576042175292969f, 0.0f, 12.642881393432617f, -1.3826022148132324f, 12.529699325561523f, 0.560481071472168f, 11.49869155883789f, -2.2559890747070312f, -12.642881393432617f, 1.3826022148132324f, 23.241352081298828f, 0.0f, 14.995515823364258f, 0.5894937515258789f, 15.951659202575684f, 1.4363317489624023f, -12.529699325561523f, -0.560481071472168f, 14.995515823364258f, -0.5894937515258789f, 19.25178337097168f, 0.0f, 13.050592422485352f, -2.186861991882324f, -11.49869155883789f, 2.2559890747070312f, 15.951659202575684f, -1.4363317489624023f, 13.050592422485352f, 2.186861991882324f, 21.657243728637695f, 0.0f, -22.302532196044922f, 0.0f, 16.482433319091797f, -0.8774442672729492f, 15.107154846191406f, -0.36205101013183594f, 16.511653900146484f, -1.9313859939575195f, -16.482433319091797f, 0.8774442672729492f, 23.5340633392334f, 0.0f, 15.808082580566406f, 1.0215044021606445f, 16.188152313232422f, -0.692082405090332f, -15.107154846191406f, 0.36205101013183594f, 15.808082580566406f, -1.0215044021606445f, 19.870718002319336f, 0.0f, 14.429319381713867f, -0.3423142433166504f, -16.511653900146484f, 1.9313859939575195f, 16.188152313232422f, 0.692082405090332f, 14.429319381713867f, 0.3423142433166504f, 21.661985397338867f, 0.0f, -23.463829040527344f, 0.0f, 13.986510276794434f, 2.9792799949645996f, 16.674440383911133f, -0.763885498046875f, 16.037494659423828f, 1.2752408981323242f, -13.986510276794434f, -2.9792799949645996f, 17.340862274169922f, 0.0f, 14.606605529785156f, -2.254976272583008f, 13.844305038452148f, -1.0904502868652344f, -16.674440383911133f, 0.763885498046875f, 14.606605529785156f, 2.254976272583008f, 22.248817443847656f, 0.0f, 15.648115158081055f, 1.0533270835876465f, -16.037494659423828f, -1.2752408981323242f, 13.844305038452148f, 1.0904502868652344f, 15.648115158081055f, -1.0533270835876465f, 19.981189727783203f, 0.0f, -25.54735565185547f, 0.0f, 18.89197540283203f, -0.27568817138671875f, 19.276708602905273f, 0.5457372665405273f, 19.09323501586914f, 1.9891033172607422f, -18.89197540283203f, 0.27568817138671875f, 20.219505310058594f, 0.0f, 17.17298698425293f, 0.7178630828857422f, 17.110321044921875f, 1.6769599914550781f, -19.276708602905273f, -0.5457372665405273f, 17.17298698425293f, -0.7178630828857422f, 23.590185165405273f, 0.0f, 17.35452651977539f, 1.8237133026123047f, -19.09323501586914f, -1.9891033172607422f, 17.110321044921875f, -1.6769599914550781f, 17.35452651977539f, -1.8237133026123047f, 23.08430290222168f, 0.0f, -21.82386589050293f, 0.0f, 18.28636932373047f, -0.7912521362304688f, 15.926384925842285f, -1.9688825607299805f, 15.697019577026367f, 0.16793584823608398f, -18.28636932373047f, 0.7912521362304688f, 27.12199592590332f, 0.0f, 18.34685516357422f, -0.8344335556030273f, 17.645771026611328f, 0.5919928550720215f, -15.926384925842285f, 1.9688825607299805f, 18.34685516357422f, 0.8344335556030273f, 21.936885833740234f, 0.0f, 16.407054901123047f, 1.1277852058410645f, -15.697019577026367f, -0.16793584823608398f, 17.645771026611328f, -0.5919928550720215f, 16.407054901123047f, -1.1277852058410645f, 19.998172760009766f, 0.0f, -21.156646728515625f, 0.0f, 14.963040351867676f, -3.250469207763672f, 16.017105102539062f, -3.38919734954834f, 15.525463104248047f, -0.6299047470092773f, -14.963040351867676f, 3.250469207763672f, 21.190134048461914f, 0.0f, 15.777545928955078f, -0.26421642303466797f, 14.752311706542969f, 0.5402646064758301f, -16.017105102539062f, 3.38919734954834f, 15.777545928955078f, 0.26421642303466797f, 23.641849517822266f, 0.0f, 17.563173294067383f, 2.129687786102295f, -15.525463104248047f, 0.6299047470092773f, 14.752311706542969f, -0.5402646064758301f, 17.563173294067383f, -2.129687786102295f, 21.198810577392578f, 0.0f, -21.67420196533203f, 0.0f, 13.586511611938477f, -2.234363555908203f, 15.215188980102539f, 0.6189961433410645f, 16.819820404052734f, -0.047367095947265625f, -13.586511611938477f, 2.234363555908203f, 18.914813995361328f, 0.0f, 15.71336841583252f, 1.5280132293701172f, 15.871816635131836f, 1.3302769660949707f, -15.215188980102539f, -0.6189961433410645f, 15.71336841583252f, -1.5280132293701172f, 22.850418090820312f, 0.0f, 17.89726448059082f, 0.5366277694702148f, -16.819820404052734f, 0.047367095947265625f, 15.871816635131836f, -1.3302769660949707f, 17.89726448059082f, -0.5366277694702148f, 24.94632911682129f, 0.0f, -23.268756866455078f, 0.0f, 18.49648094177246f, -0.9258761405944824f, 16.45522117614746f, 0.23508453369140625f, 16.601776123046875f, -0.013431549072265625f, -18.49648094177246f, 0.9258761405944824f, 23.433210372924805f, 0.0f, 17.07427215576172f, -1.1038908958435059f, 17.92400360107422f, 0.5738315582275391f, -16.45522117614746f, -0.23508453369140625f, 17.07427215576172f, 1.1038908958435059f, 23.30770492553711f, 0.0f, 18.071334838867188f, -0.5397367477416992f, -16.601776123046875f, 0.013431549072265625f, 17.92400360107422f, -0.5738315582275391f, 18.071334838867188f, 0.5397367477416992f, 23.982877731323242f, 0.0f, -20.15037727355957f, 0.0f, 16.113107681274414f, 2.0874972343444824f, 18.73427391052246f, -1.6763982772827148f, 16.446359634399414f, -0.036620140075683594f, -16.113107681274414f, -2.0874972343444824f, 22.284868240356445f, 0.0f, 18.74179458618164f, -4.731660842895508f, 16.800756454467773f, -2.8222293853759766f, -18.73427391052246f, 1.6763982772827148f, 18.74179458618164f, 4.731660842895508f, 25.596961975097656f, 0.0f, 19.065216064453125f, 0.91595458984375f, -16.446359634399414f, 0.036620140075683594f, 16.800756454467773f, 2.8222293853759766f, 19.065216064453125f, -0.91595458984375f, 24.81493377685547f, 0.0f, -20.80281639099121f, 0.0f, 14.864089012145996f, -2.3611068725585938f, 16.177162170410156f, -1.2886238098144531f, 16.168249130249023f, -0.13654470443725586f, -14.864089012145996f, 2.3611068725585938f, 22.20869255065918f, 0.0f, 16.916973114013672f, 1.3737401962280273f, 16.078388214111328f, 0.8985466957092285f, -16.177162170410156f, 1.2886238098144531f, 16.916973114013672f, -1.3737401962280273f, 24.248790740966797f, 0.0f, 17.9483642578125f, -0.7808599472045898f, -16.168249130249023f, 0.13654470443725586f, 16.078388214111328f, -0.8985466957092285f, 17.9483642578125f, 0.7808599472045898f, 22.37759780883789f, 0.0f, -26.084135055541992f, 0.0f, 17.945409774780273f, 0.44154930114746094f, 15.904071807861328f, -1.0575032234191895f, 15.50037956237793f, -1.861058235168457f, -17.945409774780273f, -0.44154930114746094f, 20.685102462768555f, 0.0f, 14.988670349121094f, -3.0397934913635254f, 13.26390266418457f, -2.1889262199401855f, -15.904071807861328f, 1.0575032234191895f, 14.988670349121094f, 3.0397934913635254f, 18.75784683227539f, 0.0f, 12.285791397094727f, 0.33979082107543945f, -15.50037956237793f, 1.861058235168457f, 13.26390266418457f, 2.1889262199401855f, 12.285791397094727f, -0.33979082107543945f, 16.782711029052734f, 0.0f, -23.26570701599121f, 0.0f, 14.851203918457031f, -3.0146307945251465f, 14.983196258544922f, -1.2210745811462402f, 17.506500244140625f, -2.841442108154297f, -14.851203918457031f, 3.0146307945251465f, 22.041702270507812f, 0.0f, 14.917167663574219f, 2.5705461502075195f, 15.005529403686523f, 1.8538432121276855f, -14.983196258544922f, 1.2210745811462402f, 14.917167663574219f, -2.5705461502075195f, 18.744569778442383f, 0.0f, 13.813959121704102f, -0.8268122673034668f, -17.506500244140625f, 2.841442108154297f, 15.005529403686523f, -1.8538432121276855f, 13.813959121704102f, 0.8268122673034668f, 20.73076820373535f, 0.0f, -25.141897201538086f, 0.0f, 19.093374252319336f, 0.7537088394165039f, 19.636192321777344f, -0.9514970779418945f, 18.15658950805664f, -1.7708101272583008f, -19.093374252319336f, -0.7537088394165039f, 22.062088012695312f, 0.0f, 16.22108268737793f, -1.2323236465454102f, 16.578773498535156f, -1.650010108947754f, -19.636192321777344f, 0.9514970779418945f, 16.22108268737793f, 1.2323236465454102f, 21.277240753173828f, 0.0f, 15.185653686523438f, 0.9537439346313477f, -18.15658950805664f, 1.7708101272583008f, 16.578773498535156f, 1.650010108947754f, 15.185653686523438f, -0.9537439346313477f, 21.73825454711914f, 0.0f, -22.41545867919922f, 0.0f, 15.457216262817383f, 0.5130391120910645f, 14.543241500854492f, 1.0866379737854004f, 14.352521896362305f, -0.5860323905944824f, -15.457216262817383f, -0.5130391120910645f, 20.013647079467773f, 0.0f, 14.732290267944336f, -0.8432760238647461f, 12.986780166625977f, -1.6761822700500488f, -14.543241500854492f, -1.0866379737854004f, 14.732290267944336f, 0.8432760238647461f, 19.485126495361328f, 0.0f, 13.028422355651855f, -1.7077574729919434f, -14.352521896362305f, 0.5860323905944824f, 12.986780166625977f, 1.6761822700500488f, 13.028422355651855f, 1.7077574729919434f, 16.185359954833984f, 0.0f, -22.867944717407227f, 0.0f, 16.849197387695312f, 1.1407184600830078f, 17.800264358520508f, 1.7415447235107422f, 18.04013442993164f, 1.2347793579101562f, -16.849197387695312f, -1.1407184600830078f, 20.637941360473633f, 0.0f, 16.317440032958984f, 0.6403484344482422f, 15.822195053100586f, 1.0929651260375977f, -17.800264358520508f, -1.7415447235107422f, 16.317440032958984f, -0.6403484344482422f, 23.017236709594727f, 0.0f, 18.368335723876953f, 0.7027883529663086f, -18.04013442993164f, -1.2347793579101562f, 15.822195053100586f, -1.0929651260375977f, 18.368335723876953f, -0.7027883529663086f, 22.589834213256836f, 0.0f, -24.70705795288086f, 0.0f, 16.275598526000977f, 1.0680747032165527f, 17.70313262939453f, -1.370182991027832f, 17.663818359375f, 1.1964101791381836f, -16.275598526000977f, -1.0680747032165527f, 18.79515266418457f, 0.0f, 12.856111526489258f, -2.050729751586914f, 14.928178787231445f, -1.5368757247924805f, -17.70313262939453f, 1.370182991027832f, 12.856111526489258f, 2.050729751586914f, 20.860309600830078f, 0.0f, 16.415576934814453f, 1.7103967666625977f, -17.663818359375f, -1.1964101791381836f, 14.928178787231445f, 1.5368757247924805f, 16.415576934814453f, -1.7103967666625977f, 25.06394386291504f, 0.0f, -18.081737518310547f, 0.0f, 14.392688751220703f, 1.0410981178283691f, 10.879630088806152f, -1.1098532676696777f, 14.241168975830078f, -0.9523749351501465f, -14.392688751220703f, -1.0410981178283691f, 22.830793380737305f, 0.0f, 13.180607795715332f, -2.11100435256958f, 16.866233825683594f, -3.05134916305542f, -10.879630088806152f, 1.1098532676696777f, 13.180607795715332f, 2.11100435256958f, 18.85939598083496f, 0.0f, 14.053986549377441f, 0.443967342376709f, -14.241168975830078f, 0.9523749351501465f, 16.866233825683594f, 3.05134916305542f, 14.053986549377441f, -0.443967342376709f, 23.23431968688965f, 0.0f, -23.082521438598633f, 0.0f, 16.008705139160156f, 1.0954151153564453f, 16.438770294189453f, -0.6284170150756836f, 15.298803329467773f, 0.5248565673828125f, -16.008705139160156f, -1.0954151153564453f, 22.245431900024414f, 0.0f, 14.630025863647461f, -2.641328811645508f, 15.869367599487305f, -2.91703462600708f, -16.438770294189453f, 0.6284170150756836f, 14.630025863647461f, 2.641328811645508f, 22.628671646118164f, 0.0f, 16.52216148376465f, -1.3347516059875488f, -15.298803329467773f, -0.5248565673828125f, 15.869367599487305f, 2.91703462600708f, 16.52216148376465f, 1.3347516059875488f, 20.79539680480957f, 0.0f, -23.611989974975586f, 0.0f, 16.561416625976562f, 0.05605506896972656f, 15.031681060791016f, 0.523226261138916f, 17.32811164855957f, -0.5242290496826172f, -16.561416625976562f, -0.05605506896972656f, 21.584957122802734f, 0.0f, 12.999732971191406f, 0.6707658767700195f, 15.00607681274414f, 2.564518928527832f, -15.031681060791016f, -0.523226261138916f, 12.999732971191406f, -0.6707658767700195f, 18.67287254333496f, 0.0f, 13.768112182617188f, -1.1756277084350586f, -17.32811164855957f, 0.5242290496826172f, 15.00607681274414f, -2.564518928527832f, 13.768112182617188f, 1.1756277084350586f, 22.459548950195312f, 0.0f, -24.353317260742188f, 0.0f, 16.616954803466797f, -1.5211868286132812f, 16.458553314208984f, 0.6844158172607422f, 14.482272148132324f, 1.903658390045166f, -16.616954803466797f, 1.5211868286132812f, 24.40841293334961f, 0.0f, 18.68754005432129f, 1.865617275238037f, 14.65306568145752f, 3.11850643157959f, -16.458553314208984f, -0.6844158172607422f, 18.68754005432129f, -1.865617275238037f, 22.007356643676758f, 0.0f, 13.46875f, 0.7816581726074219f, -14.482272148132324f, -1.903658390045166f, 14.65306568145752f, -3.11850643157959f, 13.46875f, -0.7816581726074219f, 18.208791732788086f, 0.0f, -20.195283889770508f, 0.0f, 13.160262107849121f, -0.11548423767089844f, 12.830924034118652f, 0.2598271369934082f, 14.729646682739258f, 1.250256061553955f, -13.160262107849121f, 0.11548423767089844f, 17.437715530395508f, 0.0f, 12.61850357055664f, -0.3826875686645508f, 13.56833267211914f, 0.47177600860595703f, -12.830924034118652f, -0.2598271369934082f, 12.61850357055664f, 0.3826875686645508f, 19.65981101989746f, 0.0f, 15.4100923538208f, -0.5405468940734863f, -14.729646682739258f, -1.250256061553955f, 13.56833267211914f, -0.47177600860595703f, 15.4100923538208f, 0.5405468940734863f, 23.38736343383789f, 0.0f, -17.804702758789062f, 0.0f, 13.2633056640625f, 2.9313769340515137f, 13.813352584838867f, -0.9173941612243652f, 12.845422744750977f, 0.7344160079956055f, -13.2633056640625f, -2.9313769340515137f, 22.89776611328125f, 0.0f, 15.404380798339844f, -2.1690216064453125f, 13.345518112182617f, -1.9027013778686523f, -13.813352584838867f, 0.9173941612243652f, 15.404380798339844f, 2.1690216064453125f, 19.961578369140625f, 0.0f, 14.936476707458496f, 0.41643619537353516f, -12.845422744750977f, -0.7344160079956055f, 13.345518112182617f, 1.9027013778686523f, 14.936476707458496f, -0.41643619537353516f, 19.790599822998047f, 0.0f, -21.981555938720703f, 0.0f, 16.391460418701172f, 1.2731451988220215f, 17.22467803955078f, 0.0774993896484375f, 16.835166931152344f, -0.8849501609802246f, -16.391460418701172f, -1.2731451988220215f, 22.642932891845703f, 0.0f, 15.553901672363281f, -0.0038728713989257812f, 16.430368423461914f, -0.45658111572265625f, -17.22467803955078f, -0.0774993896484375f, 15.553901672363281f, 0.0038728713989257812f, 21.280921936035156f, 0.0f, 16.57863998413086f, -0.8810787200927734f, -16.835166931152344f, 0.8849501609802246f, 16.430368423461914f, 0.45658111572265625f, 16.57863998413086f, 0.8810787200927734f, 21.370887756347656f, 0.0f, -20.917613983154297f, 0.0f, 13.823062896728516f, 3.786651134490967f, 14.135078430175781f, -0.9553022384643555f, 13.866032600402832f, 0.9052104949951172f, -13.823062896728516f, -3.786651134490967f, 20.094514846801758f, 0.0f, 15.816417694091797f, -3.4392805099487305f, 12.99874496459961f, -2.256455898284912f, -14.135078430175781f, 0.9553022384643555f, 15.816417694091797f, 3.4392805099487305f, 20.721765518188477f, 0.0f, 13.898710250854492f, 1.0704536437988281f, -13.866032600402832f, -0.9052104949951172f, 12.99874496459961f, 2.256455898284912f, 13.898710250854492f, -1.0704536437988281f, 17.581926345825195f, 0.0f, -23.156063079833984f, 0.0f, 18.127716064453125f, -0.25254058837890625f, 18.012575149536133f, -2.3376564979553223f, 15.12016487121582f, 1.2785520553588867f, -18.127716064453125f, 0.25254058837890625f, 21.793302536010742f, 0.0f, 17.32638931274414f, -0.4588584899902344f, 13.868478775024414f, 2.7704286575317383f, -18.012575149536133f, 2.3376564979553223f, 17.32638931274414f, 0.4588584899902344f, 23.73375129699707f, 0.0f, 14.050281524658203f, 3.4162216186523438f, -15.12016487121582f, -1.2785520553588867f, 13.868478775024414f, -2.7704286575317383f, 14.050281524658203f, -3.4162216186523438f, 18.8512020111084f, 0.0f, -19.499664306640625f, 0.0f, 12.799896240234375f, 2.0342555046081543f, 15.55409049987793f, -1.5081262588500977f, 15.44590950012207f, 1.5322132110595703f, -12.799896240234375f, -2.0342555046081543f, 15.800932884216309f, 0.0f, 14.722105026245117f, -2.9356064796447754f, 15.268478393554688f, -1.2157306671142578f, -15.55409049987793f, 1.5081262588500977f, 14.722105026245117f, 2.9356064796447754f, 25.044694900512695f, 0.0f, 17.79886817932129f, 2.465226173400879f, -15.44590950012207f, -1.5322132110595703f, 15.268478393554688f, 1.2157306671142578f, 17.79886817932129f, -2.465226173400879f, 22.565834045410156f, 0.0f, -21.019433975219727f, 0.0f, 16.874849319458008f, 2.5363736152648926f, 17.013916015625f, 2.2694177627563477f, 15.209495544433594f, -1.995060920715332f, -16.874849319458008f, -2.5363736152648926f, 24.726512908935547f, 0.0f, 18.31914520263672f, -1.08038330078125f, 14.770549774169922f, -7.0016679763793945f, -17.013916015625f, -2.2694177627563477f, 18.31914520263672f, 1.08038330078125f, 21.463329315185547f, 0.0f, 14.936346054077148f, -5.353445053100586f, -15.209495544433594f, 1.995060920715332f, 14.770549774169922f, 7.0016679763793945f, 14.936346054077148f, 5.353445053100586f, 19.648958206176758f, 0.0f, -21.26702117919922f, 0.0f, 15.212791442871094f, -1.8736281394958496f, 13.884817123413086f, -1.9831476211547852f, 16.581018447875977f, -0.8674612045288086f, -15.212791442871094f, 1.8736281394958496f, 21.804275512695312f, 0.0f, 13.350414276123047f, -0.7240376472473145f, 16.212177276611328f, 1.765894889831543f, -13.884817123413086f, 1.9831476211547852f, 13.350414276123047f, 0.7240376472473145f, 20.65640640258789f, 0.0f, 15.064626693725586f, 1.3797168731689453f, -16.581018447875977f, 0.8674612045288086f, 16.212177276611328f, -1.765894889831543f, 15.064626693725586f, -1.3797168731689453f, 22.72187042236328f, 0.0f, -22.46858787536621f, 0.0f, 17.032556533813477f, 0.9991369247436523f, 15.747333526611328f, 1.6234846115112305f, 16.1398868560791f, 2.874476432800293f, -17.032556533813477f, -0.9991369247436523f, 19.42963218688965f, 0.0f, 15.21697998046875f, 2.2927470207214355f, 14.053506851196289f, 1.9305648803710938f, -15.747333526611328f, -1.6234846115112305f, 15.21697998046875f, -2.2927470207214355f, 22.829713821411133f, 0.0f, 15.032106399536133f, 1.9844837188720703f, -16.1398868560791f, -2.874476432800293f, 14.053506851196289f, -1.9305648803710938f, 15.032106399536133f, -1.9844837188720703f, 19.33261489868164f, 0.0f, -25.549419403076172f, 0.0f, 15.675451278686523f, 0.8803224563598633f, 17.922313690185547f, 2.5497593879699707f, 18.836423873901367f, -1.8564481735229492f, -15.675451278686523f, -0.8803224563598633f, 20.32132911682129f, 0.0f, 15.588417053222656f, 1.1158456802368164f, 15.76127815246582f, -0.6685242652893066f, -17.922313690185547f, -2.5497593879699707f, 15.588417053222656f, -1.1158456802368164f, 23.77366065979004f, 0.0f, 19.000553131103516f, -2.6699934005737305f, -18.836423873901367f, 1.8564481735229492f, 15.76127815246582f, 0.6685242652893066f, 19.000553131103516f, 2.6699934005737305f, 23.933731079101562f, 0.0f, -20.510786056518555f, 0.0f, 14.031176567077637f, 1.7911295890808105f, 15.563695907592773f, 0.635685920715332f, 16.307754516601562f, 1.5303435325622559f, -14.031176567077637f, -1.7911295890808105f, 20.08976173400879f, 0.0f, 15.02847671508789f, -1.692429542541504f, 17.853145599365234f, 1.5829029083251953f, -15.563695907592773f, -0.635685920715332f, 15.02847671508789f, 1.692429542541504f, 21.694198608398438f, 0.0f, 17.001422882080078f, 2.2233848571777344f, -16.307754516601562f, -1.5303435325622559f, 17.853145599365234f, -1.5829029083251953f, 17.001422882080078f, -2.2233848571777344f, 23.665809631347656f, 0.0f, -22.161157608032227f, 0.0f, 13.83482837677002f, -0.6875772476196289f, 17.99317741394043f, -3.4494028091430664f, 13.24556827545166f, 1.147223949432373f, -13.83482837677002f, 0.6875772476196289f, 17.62982177734375f, 0.0f, 14.38594913482666f, -0.9135289192199707f, 12.122658729553223f, 1.4173316955566406f, -17.99317741394043f, 3.4494028091430664f, 14.38594913482666f, 0.9135289192199707f, 24.43172264099121f, 0.0f, 14.622387886047363f, 2.3067116737365723f, -13.24556827545166f, -1.147223949432373f, 12.122658729553223f, -1.4173316955566406f, 14.622387886047363f, -2.3067116737365723f, 16.669797897338867f, 0.0f, -22.35337257385254f, 0.0f, 14.741241455078125f, 3.6107912063598633f, 14.99654769897461f, -0.4367256164550781f, 18.150379180908203f, 2.0325098037719727f, -14.741241455078125f, -3.6107912063598633f, 21.59644317626953f, 0.0f, 14.456125259399414f, -1.7215328216552734f, 16.163494110107422f, -2.385648727416992f, -14.99654769897461f, 0.4367256164550781f, 14.456125259399414f, 1.7215328216552734f, 19.49504280090332f, 0.0f, 15.389554977416992f, 1.232231616973877f, -18.150379180908203f, -2.0325098037719727f, 16.163494110107422f, 2.385648727416992f, 15.389554977416992f, -1.232231616973877f, 24.073657989501953f, 0.0f, -25.94482421875f, 0.0f, 17.61433219909668f, -2.1030750274658203f, 21.95477294921875f, -1.8008041381835938f, 16.66870880126953f, -4.108855724334717f, -17.61433219909668f, 2.1030750274658203f, 21.254602432250977f, 0.0f, 17.673030853271484f, -0.505009651184082f, 16.044530868530273f, -1.512312412261963f, -21.95477294921875f, 1.8008041381835938f, 17.673030853271484f, 0.505009651184082f, 27.040334701538086f, 0.0f, 19.0844783782959f, -1.209031105041504f, -16.66870880126953f, 4.108855724334717f, 16.044530868530273f, 1.512312412261963f, 19.0844783782959f, 1.209031105041504f, 21.569494247436523f, 0.0f, -19.40656852722168f, 0.0f, 17.483243942260742f, -1.3333191871643066f, 15.704228401184082f, 2.0586867332458496f, 15.042598724365234f, 0.2139272689819336f, -17.483243942260742f, 1.3333191871643066f, 24.39164924621582f, 0.0f, 18.819673538208008f, 1.5492687225341797f, 18.0701847076416f, 1.1819791793823242f, -15.704228401184082f, -2.0586867332458496f, 18.819673538208008f, -1.5492687225341797f, 23.73099708557129f, 0.0f, 15.596896171569824f, -0.5365066528320312f, -15.042598724365234f, -0.2139272689819336f, 18.0701847076416f, -1.1819791793823242f, 15.596896171569824f, 0.5365066528320312f, 20.535911560058594f, 0.0f, -22.42751121520996f, 0.0f, 13.360651969909668f, -1.4064407348632812f, 17.092111587524414f, 0.47804737091064453f, 16.72684097290039f, 0.15868282318115234f, -13.360651969909668f, 1.4064407348632812f, 18.306352615356445f, 0.0f, 12.919061660766602f, -0.5110950469970703f, 14.463268280029297f, 1.6586861610412598f, -17.092111587524414f, -0.47804737091064453f, 12.919061660766602f, 0.5110950469970703f, 21.857784271240234f, 0.0f, 15.654556274414062f, 1.0567073822021484f, -16.72684097290039f, -0.15868282318115234f, 14.463268280029297f, -1.6586861610412598f, 15.654556274414062f, -1.0567073822021484f, 23.10276985168457f, 0.0f, -21.924734115600586f, 0.0f, 16.51244354248047f, -1.9601187705993652f, 15.893945693969727f, -1.2328801155090332f, 14.592618942260742f, -0.7302284240722656f, -16.51244354248047f, 1.9601187705993652f, 22.73590660095215f, 0.0f, 16.96190643310547f, 1.8122553825378418f, 16.024229049682617f, 1.6697964668273926f, -15.893945693969727f, 1.2328801155090332f, 16.96190643310547f, -1.8122553825378418f, 25.29395294189453f, 0.0f, 16.39565658569336f, -0.30963706970214844f, -14.592618942260742f, 0.7302284240722656f, 16.024229049682617f, -1.6697964668273926f, 16.39565658569336f, 0.30963706970214844f, 20.12497329711914f, 0.0f, -23.10235023498535f, 0.0f, 15.63459300994873f, 0.34015464782714844f, 14.706644058227539f, 0.36768054962158203f, 16.83236312866211f, 0.07261466979980469f, -15.63459300994873f, -0.34015464782714844f, 20.072338104248047f, 0.0f, 14.449729919433594f, 0.5470728874206543f, 15.287260055541992f, 1.2270832061767578f, -14.706644058227539f, -0.36768054962158203f, 14.449729919433594f, -0.5470728874206543f, 21.202409744262695f, 0.0f, 14.099662780761719f, 0.7842984199523926f, -16.83236312866211f, -0.07261466979980469f, 15.287260055541992f, -1.2270832061767578f, 14.099662780761719f, -0.7842984199523926f, 22.463050842285156f, 0.0f, -21.445636749267578f, 0.0f, 15.752969741821289f, -3.3651366233825684f, 13.33331298828125f, -2.2903714179992676f, 14.344769477844238f, -0.9584107398986816f, -15.752969741821289f, 3.3651366233825684f, 22.835439682006836f, 0.0f, 14.135374069213867f, 0.688054084777832f, 15.988200187683105f, 1.2223381996154785f, -13.33331298828125f, 2.2903714179992676f, 14.135374069213867f, -0.688054084777832f, 18.21776580810547f, 0.0f, 12.741100311279297f, 1.7218761444091797f, -14.344769477844238f, 0.9584107398986816f, 15.988200187683105f, -1.2223381996154785f, 12.741100311279297f, -1.7218761444091797f, 19.920690536499023f, 0.0f, -17.897926330566406f, 0.0f, 14.2000732421875f, -0.06585693359375f, 15.886801719665527f, -1.3169355392456055f, 15.799428939819336f, -0.27390480041503906f, -14.2000732421875f, 0.06585693359375f, 23.399452209472656f, 0.0f, 18.581501007080078f, -1.5344934463500977f, 17.049884796142578f, 0.04734230041503906f, -15.886801719665527f, 1.3169355392456055f, 18.581501007080078f, 1.5344934463500977f, 24.7672176361084f, 0.0f, 17.873680114746094f, 0.7539587020874023f, -15.799428939819336f, 0.27390480041503906f, 17.049884796142578f, -0.04734230041503906f, 17.873680114746094f, -0.7539587020874023f, 24.66730499267578f, 0.0f, -22.369152069091797f, 0.0f, 18.483089447021484f, 2.9640464782714844f, 17.89056396484375f, 0.9298944473266602f, 15.652259826660156f, 3.3369665145874023f, -18.483089447021484f, -2.9640464782714844f, 28.491777420043945f, 0.0f, 20.589141845703125f, -0.8496484756469727f, 20.038917541503906f, 0.4415578842163086f, -17.89056396484375f, -0.9298944473266602f, 20.589141845703125f, 0.8496484756469727f, 23.422487258911133f, 0.0f, 18.042354583740234f, 1.8185062408447266f, -15.652259826660156f, -3.3369665145874023f, 20.038917541503906f, -0.4415578842163086f, 18.042354583740234f, -1.8185062408447266f, 23.615692138671875f, 0.0f, -21.090185165405273f, 0.0f, 15.784244537353516f, -0.8646383285522461f, 17.3502254486084f, 1.4915990829467773f, 14.425956726074219f, -0.74346923828125f, -15.784244537353516f, 0.8646383285522461f, 20.20342254638672f, 0.0f, 17.31070899963379f, 2.0346436500549316f, 14.924568176269531f, -0.30071401596069336f, -17.3502254486084f, -1.4915990829467773f, 17.31070899963379f, -2.0346436500549316f, 24.543437957763672f, 0.0f, 16.764122009277344f, -1.6620960235595703f, -14.425956726074219f, 0.74346923828125f, 14.924568176269531f, 0.30071401596069336f, 16.764122009277344f, 1.6620960235595703f, 19.287717819213867f, 0.0f, -22.688316345214844f, 0.0f, 16.278608322143555f, 2.1637229919433594f, 18.909774780273438f, 0.9045171737670898f, 18.42300796508789f, 2.228921890258789f, -16.278608322143555f, -2.1637229919433594f, 22.191226959228516f, 0.0f, 18.31256866455078f, -0.7545576095581055f, 16.71957015991211f, 0.06514644622802734f, -18.909774780273438f, -0.9045171737670898f, 18.31256866455078f, 0.7545576095581055f, 25.395681381225586f, 0.0f, 21.17438507080078f, 1.1358051300048828f, -18.42300796508789f, -2.228921890258789f, 16.71957015991211f, -0.06514644622802734f, 21.17438507080078f, -1.1358051300048828f, 24.571359634399414f, 0.0f, -22.866497039794922f, 0.0f, 15.675662994384766f, 1.9012560844421387f, 14.68310546875f, -0.7152795791625977f, 14.82040786743164f, -0.23811006546020508f, -15.675662994384766f, -1.9012560844421387f, 20.0151424407959f, 0.0f, 13.007207870483398f, -3.5422096252441406f, 13.582038879394531f, -1.868147850036621f, -14.68310546875f, 0.7152795791625977f, 13.007207870483398f, 3.5422096252441406f, 19.011985778808594f, 0.0f, 13.099071502685547f, 1.8876557350158691f, -14.82040786743164f, 0.23811006546020508f, 13.582038879394531f, 1.868147850036621f, 13.099071502685547f, -1.8876557350158691f, 19.041284561157227f, 0.0f, -23.660009384155273f, 0.0f, 16.749181747436523f, 0.9827003479003906f, 15.687440872192383f, 1.3182611465454102f, 17.842182159423828f, 1.1182174682617188f, -16.749181747436523f, -0.9827003479003906f, 22.08895492553711f, 0.0f, 15.935537338256836f, -0.4991326332092285f, 15.258272171020508f, 1.589139461517334f, -15.687440872192383f, -1.3182611465454102f, 15.935537338256836f, 0.4991326332092285f, 19.29421615600586f, 0.0f, 14.20648193359375f, 1.1718125343322754f, -17.842182159423828f, -1.1182174682617188f, 15.258272171020508f, -1.589139461517334f, 14.20648193359375f, -1.1718125343322754f, 21.383224487304688f, 0.0f, -23.22064971923828f, 0.0f, 14.34070110321045f, -0.9424943923950195f, 19.682327270507812f, 0.20128726959228516f, 18.030376434326172f, 0.26003170013427734f, -14.34070110321045f, 0.9424943923950195f, 16.20490074157715f, 0.0f, 15.35683822631836f, 0.7190814018249512f, 15.10354995727539f, 0.1688976287841797f, -19.682327270507812f, -0.20128726959228516f, 15.35683822631836f, -0.7190814018249512f, 25.170190811157227f, 0.0f, 18.81298065185547f, 0.32216358184814453f, -18.030376434326172f, -0.26003170013427734f, 15.10354995727539f, -0.1688976287841797f, 18.81298065185547f, -0.32216358184814453f, 25.898866653442383f, 0.0f, -21.245214462280273f, 0.0f, 17.499576568603516f, 1.84266996383667f, 17.596399307250977f, 0.3544197082519531f, 17.567392349243164f, -0.7829427719116211f, -17.499576568603516f, -1.84266996383667f, 23.833078384399414f, 0.0f, 17.566892623901367f, -3.2095279693603516f, 19.413240432739258f, -3.726628303527832f, -17.596399307250977f, -0.3544197082519531f, 17.566892623901367f, 3.2095279693603516f, 23.396589279174805f, 0.0f, 19.24372673034668f, 0.6454591751098633f, -17.567392349243164f, 0.7829427719116211f, 19.413240432739258f, 3.726628303527832f, 19.24372673034668f, -0.6454591751098633f, 23.73056411743164f, 0.0f, -21.05426788330078f, 0.0f, 15.851959228515625f, -0.8666439056396484f, 16.57944107055664f, 1.2585558891296387f, 17.66006851196289f, -0.8346357345581055f, -15.851959228515625f, 0.8666439056396484f, 20.23005485534668f, 0.0f, 17.357967376708984f, 0.15669918060302734f, 17.46744155883789f, 0.011808395385742188f, -16.57944107055664f, -1.2585558891296387f, 17.357967376708984f, -0.15669918060302734f, 23.257179260253906f, 0.0f, 18.789134979248047f, -0.11581230163574219f, -17.66006851196289f, 0.8346357345581055f, 17.46744155883789f, -0.011808395385742188f, 18.789134979248047f, 0.11581230163574219f, 25.464271545410156f, 0.0f, -25.74774932861328f, 0.0f, 16.283390045166016f, 0.4404745101928711f, 17.754215240478516f, 0.8522043228149414f, 17.75044822692871f, 1.09393310546875f, -16.283390045166016f, -0.4404745101928711f, 20.0675048828125f, 0.0f, 16.511205673217773f, -0.1415400505065918f, 14.79128646850586f, 1.7658653259277344f, -17.754215240478516f, -0.8522043228149414f, 16.511205673217773f, 0.1415400505065918f, 22.967079162597656f, 0.0f, 15.164581298828125f, 1.417862892150879f, -17.75044822692871f, -1.09393310546875f, 14.79128646850586f, -1.7658653259277344f, 15.164581298828125f, -1.417862892150879f, 20.73321533203125f, 0.0f, -18.034215927124023f, 0.0f, 13.358000755310059f, 1.1626267433166504f, 14.392923355102539f, 0.01716899871826172f, 14.31142807006836f, 0.7530360221862793f, -13.358000755310059f, -1.1626267433166504f, 20.391267776489258f, 0.0f, 13.86868667602539f, 0.15003585815429688f, 14.165078163146973f, 0.6651220321655273f, -14.392923355102539f, -0.01716899871826172f, 13.86868667602539f, -0.15003585815429688f, 20.551931381225586f, 0.0f, 15.683340072631836f, -1.833263874053955f, -14.31142807006836f, -0.7530360221862793f, 14.165078163146973f, -0.6651220321655273f, 15.683340072631836f, 1.833263874053955f, 20.74091911315918f, 0.0f, -21.193403244018555f, 0.0f, 15.914152145385742f, 0.5000205039978027f, 14.33572769165039f, -0.9060759544372559f, 15.561418533325195f, 1.4510993957519531f, -15.914152145385742f, -0.5000205039978027f, 23.22000503540039f, 0.0f, 13.840351104736328f, -0.7668333053588867f, 17.434032440185547f, 0.8929977416992188f, -14.33572769165039f, 0.9060759544372559f, 13.840351104736328f, 0.7668333053588867f, 15.906208992004395f, 0.0f, 13.495463371276855f, 2.7299442291259766f, -15.561418533325195f, -1.4510993957519531f, 17.434032440185547f, -0.8929977416992188f, 13.495463371276855f, -2.7299442291259766f, 21.271221160888672f, 0.0f, -17.941133499145508f, 0.0f, 14.047151565551758f, -1.762354850769043f, 14.096138000488281f, -0.13822555541992188f, 12.541434288024902f, -0.6228523254394531f, -14.047151565551758f, 1.762354850769043f, 22.918895721435547f, 0.0f, 15.5895357131958f, 0.09790658950805664f, 13.054038047790527f, -0.7226905822753906f, -14.096138000488281f, 0.13822555541992188f, 15.5895357131958f, -0.09790658950805664f, 19.945289611816406f, 0.0f, 12.592382431030273f, 0.09438467025756836f, -12.541434288024902f, 0.6228523254394531f, 13.054038047790527f, 0.7226905822753906f, 12.592382431030273f, -0.09438467025756836f, 16.13559913635254f, 0.0f, -20.415830612182617f, 0.0f, 12.051128387451172f, 1.0910415649414062f, 15.391805648803711f, -1.1770329475402832f, 13.27441692352295f, -1.0162811279296875f, -12.051128387451172f, -1.0910415649414062f, 16.476058959960938f, 0.0f, 13.58928108215332f, -1.9244861602783203f, 11.145223617553711f, -0.9013209342956543f, -15.391805648803711f, 1.1770329475402832f, 13.58928108215332f, 1.9244861602783203f, 22.09502601623535f, 0.0f, 14.57729721069336f, 0.27733278274536133f, -13.27441692352295f, 1.0162811279296875f, 11.145223617553711f, 0.9013209342956543f, 14.57729721069336f, -0.27733278274536133f, 19.021970748901367f, 0.0f, -20.795913696289062f, 0.0f, 16.356979370117188f, -2.0977654457092285f, 16.727378845214844f, -1.8282432556152344f, 13.724427223205566f, 1.4508099555969238f, -16.356979370117188f, 2.0977654457092285f, 22.317138671875f, 0.0f, 17.656774520874023f, 0.531740665435791f, 14.077089309692383f, 1.0662932395935059f, -16.727378845214844f, 1.8282432556152344f, 17.656774520874023f, -0.531740665435791f, 22.92874526977539f, 0.0f, 15.58102798461914f, 0.7558050155639648f, -13.724427223205566f, -1.4508099555969238f, 14.077089309692383f, -1.0662932395935059f, 15.58102798461914f, -0.7558050155639648f, 19.86005973815918f, 0.0f, -21.16354751586914f, 0.0f, 15.014411926269531f, 0.838930606842041f, 16.19933319091797f, -1.4883193969726562f, 14.829092025756836f, -1.9013452529907227f, -15.014411926269531f, -0.838930606842041f, 22.066131591796875f, 0.0f, 16.913047790527344f, -2.968407154083252f, 14.956172943115234f, -1.542983055114746f, -16.19933319091797f, 1.4883193969726562f, 16.913047790527344f, 2.968407154083252f, 22.373279571533203f, 0.0f, 16.385141372680664f, 0.6518683433532715f, -14.829092025756836f, 1.9013452529907227f, 14.956172943115234f, 1.542983055114746f, 16.385141372680664f, -0.6518683433532715f, 20.07228660583496f, 0.0f, -20.939693450927734f, 0.0f, 15.486648559570312f, 0.5890202522277832f, 15.387598037719727f, 0.37865638732910156f, 15.265425682067871f, 0.49555110931396484f, -15.486648559570312f, -0.5890202522277832f, 22.971166610717773f, 0.0f, 16.051822662353516f, 0.09737682342529297f, 15.499019622802734f, 1.4616079330444336f, -15.387598037719727f, -0.37865638732910156f, 16.051822662353516f, -0.09737682342529297f, 22.15044593811035f, 0.0f, 14.974760055541992f, 1.666071891784668f, -15.265425682067871f, -0.49555110931396484f, 15.499019622802734f, -1.4616079330444336f, 14.974760055541992f, -1.666071891784668f, 19.52289581298828f, 0.0f, -19.26387596130371f, 0.0f, 14.607610702514648f, 0.9970507621765137f, 16.224693298339844f, -1.0754199028015137f, 16.177013397216797f, -1.598191261291504f, -14.607610702514648f, -0.9970507621765137f, 22.14745330810547f, 0.0f, 17.49560546875f, -1.982450008392334f, 16.701770782470703f, -2.9738965034484863f, -16.224693298339844f, 1.0754199028015137f, 17.49560546875f, 1.982450008392334f, 22.72931671142578f, 0.0f, 18.174175262451172f, -0.17053890228271484f, -16.177013397216797f, 1.598191261291504f, 16.701770782470703f, 2.9738965034484863f, 18.174175262451172f, 0.17053890228271484f, 22.766277313232422f, 0.0f, -22.01527976989746f, 0.0f, 16.863927841186523f, 0.39845943450927734f, 19.615543365478516f, 0.491668701171875f, 16.16659927368164f, -0.46003150939941406f, -16.863927841186523f, -0.39845943450927734f, 25.136554718017578f, 0.0f, 19.746978759765625f, 0.1751422882080078f, 18.790752410888672f, -2.533597946166992f, -19.615543365478516f, -0.491668701171875f, 19.746978759765625f, -0.1751422882080078f, 25.086889266967773f, 0.0f, 19.44091033935547f, -2.8498291969299316f, -16.16659927368164f, 0.46003150939941406f, 18.790752410888672f, 2.533597946166992f, 19.44091033935547f, 2.8498291969299316f, 23.485015869140625f, 0.0f, -24.82882308959961f, 0.0f, 16.314058303833008f, 0.7417511940002441f, 20.66574478149414f, -1.0284204483032227f, 15.504640579223633f, -0.6863837242126465f, -16.314058303833008f, -0.7417511940002441f, 18.447160720825195f, 0.0f, 16.192007064819336f, -1.1030988693237305f, 12.960678100585938f, -1.2465314865112305f, -20.66574478149414f, 1.0284204483032227f, 16.192007064819336f, 1.1030988693237305f, 24.91758155822754f, 0.0f, 15.937692642211914f, -0.05182933807373047f, -15.504640579223633f, 0.6863837242126465f, 12.960678100585938f, 1.2465314865112305f, 15.937692642211914f, 0.05182933807373047f, 18.752578735351562f, 0.0f, -16.4666805267334f, 0.0f, 15.278779029846191f, -0.1742691993713379f, 12.707008361816406f, 1.5608959197998047f, 14.258344650268555f, -0.23121356964111328f, -15.278779029846191f, 0.1742691993713379f, 26.295637130737305f, 0.0f, 17.609355926513672f, 2.2331223487854004f, 18.394939422607422f, -1.4821290969848633f, -12.707008361816406f, -1.5608959197998047f, 17.609355926513672f, -2.2331223487854004f, 20.00629997253418f, 0.0f, 16.196516036987305f, -1.3783245086669922f, -14.258344650268555f, 0.23121356964111328f, 18.394939422607422f, 1.4821290969848633f, 16.196516036987305f, 1.3783245086669922f, 21.582286834716797f, 0.0f, -23.94916343688965f, 0.0f, 18.527225494384766f, 0.7116756439208984f, 16.46468162536621f, -0.6693401336669922f, 18.74114990234375f, -1.2761497497558594f, -18.527225494384766f, -0.7116756439208984f, 22.930789947509766f, 0.0f, 15.465734481811523f, -1.9685554504394531f, 18.170774459838867f, -0.9499788284301758f, -16.46468162536621f, 0.6693401336669922f, 15.465734481811523f, 1.9685554504394531f, 21.9248104095459f, 0.0f, 16.093120574951172f, 1.2939496040344238f, -18.74114990234375f, 1.2761497497558594f, 18.170774459838867f, 0.9499788284301758f, 16.093120574951172f, -1.2939496040344238f, 24.10863494873047f, 0.0f, -21.901514053344727f, 0.0f, 15.286444664001465f, -0.2093496322631836f, 16.259056091308594f, 1.5071139335632324f, 15.513851165771484f, 0.5434370040893555f, -15.286444664001465f, 0.2093496322631836f, 21.81385040283203f, 0.0f, 17.417301177978516f, 0.28313255310058594f, 16.010299682617188f, -0.3048582077026367f, -16.259056091308594f, -1.5071139335632324f, 17.417301177978516f, -0.28313255310058594f, 23.29054832458496f, 0.0f, 17.840538024902344f, -1.8098902702331543f, -15.513851165771484f, -0.5434370040893555f, 16.010299682617188f, 0.3048582077026367f, 17.840538024902344f, 1.8098902702331543f, 22.76242446899414f, 0.0f, -17.758514404296875f, 0.0f, 11.746064186096191f, -1.3203935623168945f, 13.989919662475586f, -0.5135855674743652f, 14.899458885192871f, -0.9409165382385254f, -11.746064186096191f, 1.3203935623168945f, 19.727130889892578f, 0.0f, 12.870875358581543f, 0.9098224639892578f, 16.268585205078125f, 1.9136419296264648f, -13.989919662475586f, 0.5135855674743652f, 12.870875358581543f, -0.9098224639892578f, 20.982318878173828f, 0.0f, 17.00764274597168f, 1.4646005630493164f, -14.899458885192871f, 0.9409165382385254f, 16.268585205078125f, -1.9136419296264648f, 17.00764274597168f, -1.4646005630493164f, 24.789888381958008f, 0.0f, -19.94606590270996f, 0.0f, 11.750603675842285f, -0.9445600509643555f, 15.489908218383789f, -1.5321297645568848f, 16.262311935424805f, -0.7620906829833984f, -11.750603675842285f, 0.9445600509643555f, 15.865667343139648f, 0.0f, 15.137062072753906f, -0.302091121673584f, 13.4806489944458f, -0.9630932807922363f, -15.489908218383789f, 1.5321297645568848f, 15.137062072753906f, 0.302091121673584f, 22.645132064819336f, 0.0f, 18.5898494720459f, 1.148463249206543f, -16.262311935424805f, 0.7620906829833984f, 13.4806489944458f, 0.9630932807922363f, 18.5898494720459f, -1.148463249206543f, 25.47704315185547f, 0.0f, -23.133440017700195f, 0.0f, 16.744600296020508f, 0.607421875f, 16.143157958984375f, -2.1258864402770996f, 17.58625030517578f, -2.7348251342773438f, -16.744600296020508f, -0.607421875f, 24.29714584350586f, 0.0f, 17.208805084228516f, -3.196427345275879f, 17.79437828063965f, -2.52114200592041f, -16.143157958984375f, 2.1258864402770996f, 17.208805084228516f, 3.196427345275879f, 22.354610443115234f, 0.0f, 16.741897583007812f, 1.073699951171875f, -17.58625030517578f, 2.7348251342773438f, 17.79437828063965f, 2.52114200592041f, 16.741897583007812f, -1.073699951171875f, 23.928359985351562f, 0.0f, -22.792774200439453f, 0.0f, 17.544626235961914f, 0.10979938507080078f, 17.287002563476562f, -0.7002968788146973f, 16.77655029296875f, 0.6475610733032227f, -17.544626235961914f, -0.10979938507080078f, 23.048208236694336f, 0.0f, 16.75667953491211f, -1.1260380744934082f, 18.442916870117188f, 1.731733798980713f, -17.287002563476562f, 0.7002968788146973f, 16.75667953491211f, 1.1260380744934082f, 21.883638381958008f, 0.0f, 16.73824691772461f, 0.2699155807495117f, -16.77655029296875f, -0.6475610733032227f, 18.442916870117188f, -1.731733798980713f, 16.73824691772461f, -0.2699155807495117f, 23.88330078125f, 0.0f, -22.20652198791504f, 0.0f, 16.880908966064453f, 1.5035343170166016f, 17.195026397705078f, 1.367851734161377f, 18.454402923583984f, 1.2681102752685547f, -16.880908966064453f, -1.5035343170166016f, 22.65154457092285f, 0.0f, 17.346094131469727f, 0.8976497650146484f, 19.082042694091797f, 1.592411994934082f, -17.195026397705078f, -1.367851734161377f, 17.346094131469727f, -0.8976497650146484f, 23.183900833129883f, 0.0f, 18.15692901611328f, 1.2207450866699219f, -18.454402923583984f, -1.2681102752685547f, 19.082042694091797f, -1.592411994934082f, 18.15692901611328f, -1.2207450866699219f, 25.273366928100586f, 0.0f, -26.0373592376709f, 0.0f, 15.591352462768555f, 0.1865701675415039f, 18.595073699951172f, 0.1199188232421875f, 17.07176971435547f, 1.7757577896118164f, -15.591352462768555f, -0.1865701675415039f, 20.721664428710938f, 0.0f, 14.518890380859375f, -1.8130826950073242f, 14.20799446105957f, 1.9324665069580078f, -18.595073699951172f, -0.1199188232421875f, 14.518890380859375f, 1.8130826950073242f, 24.4749698638916f, 0.0f, 16.511028289794922f, 0.8227553367614746f, -17.07176971435547f, -1.7757577896118164f, 14.20799446105957f, -1.9324665069580078f, 16.511028289794922f, -0.8227553367614746f, 23.053668975830078f, 0.0f, -22.053653717041016f, 0.0f, 15.96980094909668f, -0.9811935424804688f, 13.856279373168945f, -0.3745584487915039f, 14.317234992980957f, -3.840421676635742f, -15.96980094909668f, 0.9811935424804688f, 20.20424461364746f, 0.0f, 14.893767356872559f, 1.169931411743164f, 14.801254272460938f, -2.2258706092834473f, -13.856279373168945f, 0.3745584487915039f, 14.893767356872559f, -1.169931411743164f, 18.644716262817383f, 0.0f, 13.735296249389648f, -1.6686444282531738f, -14.317234992980957f, 3.840421676635742f, 14.801254272460938f, 2.2258706092834473f, 13.735296249389648f, 1.6686444282531738f, 20.03537368774414f, 0.0f, -19.542985916137695f, 0.0f, 15.017301559448242f, 1.324666976928711f, 11.95351505279541f, -0.9372386932373047f, 14.563850402832031f, -0.8484687805175781f, -15.017301559448242f, -1.324666976928711f, 19.356000900268555f, 0.0f, 12.80146312713623f, -0.12540054321289062f, 15.656510353088379f, -0.7020459175109863f, -11.95351505279541f, 0.9372386932373047f, 12.80146312713623f, 0.12540054321289062f, 16.591888427734375f, 0.0f, 12.902100563049316f, -1.4163460731506348f, -14.563850402832031f, 0.8484687805175781f, 15.656510353088379f, 0.7020459175109863f, 12.902100563049316f, 1.4163460731506348f, 21.4080753326416f, 0.0f, -21.213836669921875f, 0.0f, 15.033815383911133f, 1.674184799194336f, 18.877660751342773f, 0.6074743270874023f, 12.363697052001953f, 1.5059924125671387f, -15.033815383911133f, -1.674184799194336f, 21.4992733001709f, 0.0f, 20.44448471069336f, -1.6837539672851562f, 13.248878479003906f, -0.8164114952087402f, -18.877660751342773f, -0.6074743270874023f, 20.44448471069336f, 1.6837539672851562f, 28.312156677246094f, 0.0f, 16.292335510253906f, -0.7882256507873535f, -12.363697052001953f, -1.5059924125671387f, 13.248878479003906f, 0.8164114952087402f, 16.292335510253906f, 0.7882256507873535f, 17.797887802124023f, 0.0f, -23.477575302124023f, 0.0f, 17.596134185791016f, 0.37038326263427734f, 16.114347457885742f, 0.42877817153930664f, 16.035877227783203f, -0.19208145141601562f, -17.596134185791016f, -0.37038326263427734f, 23.49698257446289f, 0.0f, 15.869470596313477f, 1.4275493621826172f, 15.714534759521484f, -0.07774496078491211f, -16.114347457885742f, -0.42877817153930664f, 15.869470596313477f, -1.4275493621826172f, 19.568864822387695f, 0.0f, 15.612564086914062f, -1.0991930961608887f, -16.035877227783203f, 0.19208145141601562f, 15.714534759521484f, 0.07774496078491211f, 15.612564086914062f, 1.0991930961608887f, 19.109304428100586f, 0.0f, -21.140239715576172f, 0.0f, 16.100631713867188f, 0.5524520874023438f, 15.848217964172363f, 1.1240601539611816f, 15.016915321350098f, -3.5451607704162598f, -16.100631713867188f, -0.5524520874023438f, 24.394813537597656f, 0.0f, 17.81700897216797f, -1.5575714111328125f, 16.758342742919922f, -3.169351100921631f, -15.848217964172363f, -1.1240601539611816f, 17.81700897216797f, 1.5575714111328125f, 23.037147521972656f, 0.0f, 15.943785667419434f, -2.7244434356689453f, -15.016915321350098f, 3.5451607704162598f, 16.758342742919922f, 3.169351100921631f, 15.943785667419434f, 2.7244434356689453f, 19.44225311279297f, 0.0f, -23.072708129882812f, 0.0f, 17.417631149291992f, -0.5648469924926758f, 16.136432647705078f, 0.5540447235107422f, 18.16244125366211f, 1.2030372619628906f, -17.417631149291992f, 0.5648469924926758f, 22.551353454589844f, 0.0f, 14.79557991027832f, 0.24086666107177734f, 17.593761444091797f, 2.2200675010681152f, -16.136432647705078f, -0.5540447235107422f, 14.79557991027832f, -0.24086666107177734f, 18.704696655273438f, 0.0f, 15.140268325805664f, 0.6797909736633301f, -18.16244125366211f, -1.2030372619628906f, 17.593761444091797f, -2.2200675010681152f, 15.140268325805664f, -0.6797909736633301f, 23.437213897705078f, 0.0f, -19.748960494995117f, 0.0f, 15.54583740234375f, -1.8428497314453125f, 13.783454895019531f, -2.2728800773620605f, 11.323062896728516f, -3.8715157508850098f, -15.54583740234375f, 1.8428497314453125f, 25.39807891845703f, 0.0f, 15.759020805358887f, 0.3854494094848633f, 15.484354972839355f, -2.6777429580688477f, -13.783454895019531f, 2.2728800773620605f, 15.759020805358887f, -0.3854494094848633f, 17.752473831176758f, 0.0f, 13.27663803100586f, -2.449279308319092f, -11.323062896728516f, 3.8715157508850098f, 15.484354972839355f, 2.6777429580688477f, 13.27663803100586f, 2.449279308319092f, 18.981660842895508f, 0.0f, -22.937164306640625f, 0.0f, 17.105224609375f, -1.9051480293273926f, 18.294401168823242f, 1.6982097625732422f, 15.042192459106445f, -0.5910491943359375f, -17.105224609375f, 1.9051480293273926f, 22.467552185058594f, 0.0f, 17.939674377441406f, 4.222898006439209f, 16.588260650634766f, 2.743483543395996f, -18.294401168823242f, -1.6982097625732422f, 17.939674377441406f, -4.222898006439209f, 25.30509376525879f, 0.0f, 18.03375244140625f, -0.7987966537475586f, -15.042192459106445f, 0.5910491943359375f, 16.588260650634766f, -2.743483543395996f, 18.03375244140625f, 0.7987966537475586f, 21.539003372192383f, 0.0f, -26.229923248291016f, 0.0f, 18.09284210205078f, 0.4435110092163086f, 18.628028869628906f, -1.5833501815795898f, 18.85763931274414f, 0.5524740219116211f, -18.09284210205078f, -0.4435110092163086f, 20.850040435791016f, 0.0f, 15.808597564697266f, -1.3223986625671387f, 16.823680877685547f, 0.4735908508300781f, -18.628028869628906f, 1.5833501815795898f, 15.808597564697266f, 1.3223986625671387f, 20.742456436157227f, 0.0f, 16.619815826416016f, 2.165337562561035f, -18.85763931274414f, -0.5524740219116211f, 16.823680877685547f, -0.4735908508300781f, 16.619815826416016f, -2.165337562561035f, 22.37310218811035f, 0.0f, -21.83519172668457f, 0.0f, 16.202072143554688f, 0.3218069076538086f, 16.15850067138672f, 1.2423186302185059f, 13.690998077392578f, -0.6940169334411621f, -16.202072143554688f, -0.3218069076538086f, 23.25851058959961f, 0.0f, 16.390783309936523f, 1.228494644165039f, 15.709463119506836f, -0.25978565216064453f, -16.15850067138672f, -1.2423186302185059f, 16.390783309936523f, -1.228494644165039f, 20.241836547851562f, 0.0f, 13.190089225769043f, -1.1530179977416992f, -13.690998077392578f, 0.6940169334411621f, 15.709463119506836f, 0.25978565216064453f, 13.190089225769043f, 1.1530179977416992f, 20.095359802246094f, 0.0f, -20.593538284301758f, 0.0f, 17.16487693786621f, 3.175187110900879f, 17.40040397644043f, -1.4312019348144531f, 15.136289596557617f, -0.3656926155090332f, -17.16487693786621f, -3.175187110900879f, 25.67137908935547f, 0.0f, 18.594675064086914f, -4.798680782318115f, 18.922515869140625f, -1.0811004638671875f, -17.40040397644043f, 1.4312019348144531f, 18.594675064086914f, 4.798680782318115f, 24.689483642578125f, 0.0f, 17.696945190429688f, 3.0105767250061035f, -15.136289596557617f, 0.3656926155090332f, 18.922515869140625f, 1.0811004638671875f, 17.696945190429688f, -3.0105767250061035f, 24.089336395263672f, 0.0f, -21.53577995300293f, 0.0f, 15.143871307373047f, 0.03931140899658203f, 16.365795135498047f, 4.140313148498535f, 15.15461540222168f, 1.2077116966247559f, -15.143871307373047f, -0.03931140899658203f, 18.731124877929688f, 0.0f, 15.138962745666504f, 4.64652681350708f, 12.996230125427246f, 0.7344174385070801f, -16.365795135498047f, -4.140313148498535f, 15.138962745666504f, -4.64652681350708f, 23.60764503479004f, 0.0f, 16.753931045532227f, -2.2191996574401855f, -15.15461540222168f, -1.2077116966247559f, 12.996230125427246f, -0.7344174385070801f, 16.753931045532227f, 2.2191996574401855f, 21.541093826293945f, 0.0f, -24.148460388183594f, 0.0f, 18.211471557617188f, 0.2778501510620117f, 19.53975486755371f, 0.8894815444946289f, 13.918913841247559f, 1.2046241760253906f, -18.211471557617188f, -0.2778501510620117f, 24.600040435791016f, 0.0f, 18.480327606201172f, -1.523301124572754f, 14.582801818847656f, 1.3686132431030273f, -19.53975486755371f, -0.8894815444946289f, 18.480327606201172f, 1.523301124572754f, 23.759719848632812f, 0.0f, 13.237295150756836f, 2.0422182083129883f, -13.918913841247559f, -1.2046241760253906f, 14.582801818847656f, -1.3686132431030273f, 13.237295150756836f, -2.0422182083129883f, 16.17812156677246f, 0.0f, -26.976280212402344f, 0.0f, 17.320615768432617f, -1.4599223136901855f, 20.854217529296875f, 2.1797876358032227f, 21.103439331054688f, -2.5265026092529297f, -17.320615768432617f, 1.4599223136901855f, 18.342164993286133f, 0.0f, 15.553661346435547f, 1.605700969696045f, 14.952484130859375f, 0.13350391387939453f, -20.854217529296875f, -2.1797876358032227f, 15.553661346435547f, -1.605700969696045f, 25.237632751464844f, 0.0f, 19.811208724975586f, -4.893050670623779f, -21.103439331054688f, 2.5265026092529297f, 14.952484130859375f, -0.13350391387939453f, 19.811208724975586f, 4.893050670623779f, 25.52898597717285f, 0.0f, -23.887283325195312f, 0.0f, 17.252052307128906f, 0.1653890609741211f, 16.766727447509766f, 1.222083568572998f, 18.03781509399414f, 0.17104816436767578f, -17.252052307128906f, -0.1653890609741211f, 22.68276596069336f, 0.0f, 14.474630355834961f, -0.1755833625793457f, 15.741893768310547f, -2.298046112060547f, -16.766727447509766f, -1.222083568572998f, 14.474630355834961f, 0.1755833625793457f, 20.007980346679688f, 0.0f, 14.987287521362305f, -2.639578342437744f, -18.03781509399414f, -0.17104816436767578f, 15.741893768310547f, 2.298046112060547f, 14.987287521362305f, 2.639578342437744f, 21.491334915161133f, 0.0f, -18.961898803710938f, 0.0f, 12.199508666992188f, -1.5878114700317383f, 13.109575271606445f, -2.1793737411499023f, 12.546875f, -1.0348076820373535f, -12.199508666992188f, 1.5878114700317383f, 17.696434020996094f, 0.0f, 13.46824836730957f, 0.1546802520751953f, 14.135186195373535f, 0.367795467376709f, -13.109575271606445f, 2.1793737411499023f, 13.46824836730957f, -0.1546802520751953f, 19.552175521850586f, 0.0f, 12.834049224853516f, -0.33786678314208984f, -12.546875f, 1.0348076820373535f, 14.135186195373535f, -0.367795467376709f, 12.834049224853516f, 0.33786678314208984f, 18.67696189880371f, 0.0f, -22.373882293701172f, 0.0f, 17.114845275878906f, 1.293039321899414f, 14.637073516845703f, 0.9003291130065918f, 16.681438446044922f, 1.0997557640075684f, -17.114845275878906f, -1.293039321899414f, 24.075176239013672f, 0.0f, 16.245309829711914f, 0.6815652847290039f, 15.980727195739746f, -0.33420276641845703f, -14.637073516845703f, -0.9003291130065918f, 16.245309829711914f, -0.6815652847290039f, 18.522079467773438f, 0.0f, 14.666677474975586f, 0.48864221572875977f, -16.681438446044922f, -1.0997557640075684f, 15.980727195739746f, 0.33420276641845703f, 14.666677474975586f, -0.48864221572875977f, 21.145349502563477f, 0.0f, -22.402385711669922f, 0.0f, 15.276662826538086f, -1.3792662620544434f, 18.868505477905273f, 1.0780925750732422f, 16.563793182373047f, -1.2094244956970215f, -15.276662826538086f, 1.3792662620544434f, 18.815067291259766f, 0.0f, 17.25514030456543f, 1.7216486930847168f, 15.858339309692383f, 1.4533343315124512f, -18.868505477905273f, -1.0780925750732422f, 17.25514030456543f, -1.7216486930847168f, 28.199098587036133f, 0.0f, 18.143600463867188f, 0.16492652893066406f, -16.563793182373047f, 1.2094244956970215f, 15.858339309692383f, -1.4533343315124512f, 18.143600463867188f, -0.16492652893066406f, 22.631610870361328f, 0.0f, -18.244342803955078f, 0.0f, 14.288799285888672f, -2.4730381965637207f, 13.65835952758789f, -0.27791690826416016f, 12.608977317810059f, -3.6047487258911133f, -14.288799285888672f, 2.4730381965637207f, 22.836036682128906f, 0.0f, 15.504528045654297f, 1.5650105476379395f, 14.899205207824707f, -0.4607830047607422f, -13.65835952758789f, 0.27791690826416016f, 15.504528045654297f, -1.5650105476379395f, 21.280790328979492f, 0.0f, 14.01461410522461f, -1.8310718536376953f, -12.608977317810059f, 3.6047487258911133f, 14.899205207824707f, 0.4607830047607422f, 14.01461410522461f, 1.8310718536376953f, 19.21678352355957f, 0.0f, -26.87466812133789f, 0.0f, 17.9601993560791f, -0.1398487091064453f, 18.541994094848633f, 3.4069008827209473f, 20.433032989501953f, -0.07623577117919922f, -17.9601993560791f, 0.1398487091064453f, 21.067562103271484f, 0.0f, 17.225181579589844f, 1.5692076683044434f, 16.10256004333496f, -0.48484134674072266f, -18.541994094848633f, -3.4069008827209473f, 17.225181579589844f, -1.5692076683044434f, 23.7786922454834f, 0.0f, 16.85209083557129f, -1.0230436325073242f, -20.433032989501953f, 0.07623577117919922f, 16.10256004333496f, 0.48484134674072266f, 16.85209083557129f, 1.0230436325073242f, 23.581682205200195f, 0.0f, -23.04507827758789f, 0.0f, 18.357086181640625f, 0.3366222381591797f, 15.662004470825195f, 1.8177127838134766f, 17.47795867919922f, 2.0196375846862793f, -18.357086181640625f, -0.3366222381591797f, 23.425575256347656f, 0.0f, 16.894845962524414f, -0.1501913070678711f, 18.193937301635742f, 0.6035690307617188f, -15.662004470825195f, -1.8177127838134766f, 16.894845962524414f, 0.1501913070678711f, 24.99241828918457f, 0.0f, 19.03949737548828f, -0.6076955795288086f, -17.47795867919922f, -2.0196375846862793f, 18.193937301635742f, -0.6035690307617188f, 19.03949737548828f, 0.6076955795288086f, 24.944974899291992f, 0.0f, -21.876487731933594f, 0.0f, 16.51926612854004f, -1.3200774192810059f, 13.408472061157227f, 0.4334101676940918f, 16.676326751708984f, -2.8504810333251953f, -16.51926612854004f, 1.3200774192810059f, 21.707347869873047f, 0.0f, 13.192636489868164f, 3.1374239921569824f, 17.46282196044922f, 0.6383390426635742f, -13.408472061157227f, -0.4334101676940918f, 13.192636489868164f, -3.1374239921569824f, 16.567630767822266f, 0.0f, 13.733672142028809f, -2.8650875091552734f, -16.676326751708984f, 2.8504810333251953f, 17.46282196044922f, -0.6383390426635742f, 13.733672142028809f, 2.8650875091552734f, 21.854507446289062f, 0.0f, -18.811256408691406f, 0.0f, 14.469779968261719f, 1.8897762298583984f, 15.228975296020508f, 2.1301302909851074f, 13.609054565429688f, 0.7344684600830078f, -14.469779968261719f, -1.8897762298583984f, 20.8359375f, 0.0f, 16.031856536865234f, 0.118194580078125f, 13.934846878051758f, -1.1207361221313477f, -15.228975296020508f, -2.1301302909851074f, 16.031856536865234f, -0.118194580078125f, 22.30846405029297f, 0.0f, 14.309843063354492f, -0.5820860862731934f, -13.609054565429688f, -0.7344684600830078f, 13.934846878051758f, 1.1207361221313477f, 14.309843063354492f, 0.5820860862731934f, 18.385042190551758f, 0.0f, -21.811704635620117f, 0.0f, 12.959574699401855f, 1.3712148666381836f, 15.618633270263672f, 2.4819064140319824f, 15.50459098815918f, 0.7158732414245605f, -12.959574699401855f, -1.3712148666381836f, 19.189701080322266f, 0.0f, 15.01716423034668f, 0.886258602142334f, 13.834314346313477f, 1.2765088081359863f, -15.618633270263672f, -2.4819064140319824f, 15.01716423034668f, -0.886258602142334f, 22.45737648010254f, 0.0f, 14.977632522583008f, -0.03613996505737305f, -15.50459098815918f, -0.7158732414245605f, 13.834314346313477f, -1.2765088081359863f, 14.977632522583008f, 0.03613996505737305f, 19.231868743896484f, 0.0f, -20.922571182250977f, 0.0f, 15.238037109375f, 1.9878406524658203f, 16.205717086791992f, -0.5401873588562012f, 14.066888809204102f, -0.6804170608520508f, -15.238037109375f, -1.9878406524658203f, 20.350894927978516f, 0.0f, 15.714031219482422f, -1.5322189331054688f, 14.691532135009766f, -3.9000086784362793f, -16.205717086791992f, 0.5401873588562012f, 15.714031219482422f, 1.5322189331054688f, 25.38096046447754f, 0.0f, 16.562744140625f, 0.09419584274291992f, -14.066888809204102f, 0.6804170608520508f, 14.691532135009766f, 3.9000086784362793f, 16.562744140625f, -0.09419584274291992f, 21.616945266723633f, 0.0f, -27.487136840820312f, 0.0f, 18.24102783203125f, -2.3150157928466797f, 16.992034912109375f, -1.1863603591918945f, 20.118892669677734f, -1.202402114868164f, -18.24102783203125f, 2.3150157928466797f, 22.058429718017578f, 0.0f, 16.142127990722656f, -0.3955674171447754f, 15.94951343536377f, 0.9539375305175781f, -16.992034912109375f, 1.1863603591918945f, 16.142127990722656f, 0.3955674171447754f, 21.04903793334961f, 0.0f, 16.522987365722656f, -0.047916412353515625f, -20.118892669677734f, 1.202402114868164f, 15.94951343536377f, -0.9539375305175781f, 16.522987365722656f, 0.047916412353515625f, 22.727609634399414f, 0.0f, -22.30453109741211f, 0.0f, 16.493043899536133f, -0.8725547790527344f, 14.970111846923828f, -2.3403854370117188f, 15.417713165283203f, -0.5561809539794922f, -16.493043899536133f, 0.8725547790527344f, 21.237886428833008f, 0.0f, 14.585586547851562f, -3.8507442474365234f, 14.801040649414062f, -0.875241756439209f, -14.970111846923828f, 2.3403854370117188f, 14.585586547851562f, 3.8507442474365234f, 20.627243041992188f, 0.0f, 14.733753204345703f, 1.6528868675231934f, -15.417713165283203f, 0.5561809539794922f, 14.801040649414062f, 0.875241756439209f, 14.733753204345703f, -1.6528868675231934f, 19.37778091430664f, 0.0f, -22.24112319946289f, 0.0f, 17.820289611816406f, -0.629277229309082f, 15.531816482543945f, -0.24147319793701172f, 17.715579986572266f, -2.5577383041381836f, -17.820289611816406f, 0.629277229309082f, 26.41559600830078f, 0.0f, 17.789318084716797f, -0.22272682189941406f, 19.819713592529297f, -1.8753290176391602f, -15.531816482543945f, 0.24147319793701172f, 17.789318084716797f, 0.22272682189941406f, 20.450349807739258f, 0.0f, 16.50227165222168f, -2.868346691131592f, -17.715579986572266f, 2.5577383041381836f, 19.819713592529297f, 1.8753290176391602f, 16.50227165222168f, 2.868346691131592f, 24.160234451293945f, 0.0f, -23.985923767089844f, 0.0f, 17.595233917236328f, -0.1181802749633789f, 18.727191925048828f, -2.1876401901245117f, 17.593711853027344f, 1.2432270050048828f, -17.595233917236328f, 0.1181802749633789f, 22.141542434692383f, 0.0f, 17.64385986328125f, -0.9777975082397461f, 17.552547454833984f, 1.4858894348144531f, -18.727191925048828f, 2.1876401901245117f, 17.64385986328125f, 0.9777975082397461f, 22.933027267456055f, 0.0f, 18.58854866027832f, 1.6744089126586914f, -17.593711853027344f, -1.2432270050048828f, 17.552547454833984f, -1.4858894348144531f, 18.58854866027832f, -1.6744089126586914f, 24.342491149902344f, 0.0f, -21.39446258544922f, 0.0f, 16.624250411987305f, -2.189103126525879f, 17.096572875976562f, -3.1037683486938477f, 15.83506965637207f, -0.8253297805786133f, -16.624250411987305f, 2.189103126525879f, 22.32379722595215f, 0.0f, 18.39798355102539f, -1.9181337356567383f, 16.55183219909668f, 0.6326675415039062f, -17.096572875976562f, 3.1037683486938477f, 18.39798355102539f, 1.9181337356567383f, 24.288667678833008f, 0.0f, 16.56877326965332f, 0.41823387145996094f, -15.83506965637207f, 0.8253297805786133f, 16.55183219909668f, -0.6326675415039062f, 16.56877326965332f, -0.41823387145996094f, 20.142345428466797f, 0.0f, -21.572898864746094f, 0.0f, 17.413108825683594f, -0.6772065162658691f, 13.437103271484375f, 0.8204646110534668f, 17.201005935668945f, -0.4413890838623047f, -17.413108825683594f, 0.6772065162658691f, 22.87938117980957f, 0.0f, 15.34713363647461f, 0.07552957534790039f, 17.475135803222656f, -0.6590890884399414f, -13.437103271484375f, -0.8204646110534668f, 15.34713363647461f, -0.07552957534790039f, 17.355695724487305f, 0.0f, 17.243074417114258f, -1.471013069152832f, -17.201005935668945f, 0.4413890838623047f, 17.475135803222656f, 0.6590890884399414f, 17.243074417114258f, 1.471013069152832f, 26.561246871948242f, 0.0f, -17.104904174804688f, 0.0f, 12.734586715698242f, -2.5998992919921875f, 13.211210250854492f, -2.8937501907348633f, 12.376838684082031f, -2.5101046562194824f, -12.734586715698242f, 2.5998992919921875f, 18.17102813720703f, 0.0f, 13.138402938842773f, 1.2834320068359375f, 12.475953102111816f, -1.1568593978881836f, -13.211210250854492f, 2.8937501907348633f, 13.138402938842773f, -1.2834320068359375f, 20.048851013183594f, 0.0f, 12.849719047546387f, -0.9159278869628906f, -12.376838684082031f, 2.5101046562194824f, 12.475953102111816f, 1.1568593978881836f, 12.849719047546387f, 0.9159278869628906f, 17.6597900390625f, 0.0f, -19.9304141998291f, 0.0f, 14.781400680541992f, 0.1313190460205078f, 16.2719783782959f, 0.9841465950012207f, 15.994927406311035f, 0.8704595565795898f, -14.781400680541992f, -0.1313190460205078f, 22.438390731811523f, 0.0f, 17.787933349609375f, 0.45365238189697266f, 17.685199737548828f, -0.9635629653930664f, -16.2719783782959f, -0.9841465950012207f, 17.787933349609375f, -0.45365238189697266f, 22.555400848388672f, 0.0f, 17.45840072631836f, -1.4365978240966797f, -15.994927406311035f, -0.8704595565795898f, 17.685199737548828f, 0.9635629653930664f, 17.45840072631836f, 1.4365978240966797f, 22.528465270996094f, 0.0f, -21.591495513916016f, 0.0f, 16.1312313079834f, -0.5179386138916016f, 15.639726638793945f, -2.912006378173828f, 13.626493453979492f, 0.08458662033081055f, -16.1312313079834f, 0.5179386138916016f, 19.52189826965332f, 0.0f, 14.361430168151855f, -1.738560676574707f, 12.319280624389648f, 0.008731365203857422f, -15.639726638793945f, 2.912006378173828f, 14.361430168151855f, 1.738560676574707f, 22.948423385620117f, 0.0f, 11.794747352600098f, 1.5735044479370117f, -13.626493453979492f, -0.08458662033081055f, 12.319280624389648f, -0.008731365203857422f, 11.794747352600098f, -1.5735044479370117f, 14.172467231750488f, 0.0f, -21.687341690063477f, 0.0f, 14.31693172454834f, 1.2700762748718262f, 17.143461227416992f, 2.4749550819396973f, 15.807190895080566f, -2.2320451736450195f, -14.31693172454834f, -1.2700762748718262f, 20.02528190612793f, 0.0f, 14.329544067382812f, 0.8095989227294922f, 13.036154747009277f, -1.4384560585021973f, -17.143461227416992f, -2.4749550819396973f, 14.329544067382812f, -0.8095989227294922f, 21.07712173461914f, 0.0f, 15.679361343383789f, -3.0125813484191895f, -15.807190895080566f, 2.2320451736450195f, 13.036154747009277f, 1.4384560585021973f, 15.679361343383789f, 3.0125813484191895f, 20.241243362426758f, 0.0f, -20.588336944580078f, 0.0f, 16.0102596282959f, 0.0552520751953125f, 13.55153751373291f, -1.895836353302002f, 15.126644134521484f, -1.9621829986572266f, -16.0102596282959f, -0.0552520751953125f, 23.091283798217773f, 0.0f, 15.113353729248047f, -1.8142104148864746f, 17.3614501953125f, -0.9401082992553711f, -13.55153751373291f, 1.895836353302002f, 15.113353729248047f, 1.8142104148864746f, 17.784530639648438f, 0.0f, 13.87771224975586f, 2.0001416206359863f, -15.126644134521484f, 1.9621829986572266f, 17.3614501953125f, 0.9401082992553711f, 13.87771224975586f, -2.0001416206359863f, 20.498851776123047f, 0.0f, -19.20214080810547f, 0.0f, 15.341024398803711f, 0.9907441139221191f, 16.298023223876953f, 1.9966659545898438f, 13.252340316772461f, 0.2243485450744629f, -15.341024398803711f, -0.9907441139221191f, 22.77020263671875f, 0.0f, 18.556964874267578f, -0.4551420211791992f, 15.959012985229492f, -2.0526485443115234f, -16.298023223876953f, -1.9966659545898438f, 18.556964874267578f, 0.4551420211791992f, 25.518779754638672f, 0.0f, 16.68498992919922f, -1.5344429016113281f, -13.252340316772461f, -0.2243485450744629f, 15.959012985229492f, 2.0526485443115234f, 16.68498992919922f, 1.5344429016113281f, 21.16128921508789f, 0.0f, -21.821767807006836f, 0.0f, 14.760746955871582f, -1.1314711570739746f, 17.23377799987793f, -1.868708610534668f, 14.475648880004883f, -1.799184799194336f, -14.760746955871582f, 1.1314711570739746f, 18.884733200073242f, 0.0f, 15.146785736083984f, 0.30563926696777344f, 14.293328285217285f, -0.5108423233032227f, -17.23377799987793f, 1.868708610534668f, 15.146785736083984f, -0.30563926696777344f, 23.248863220214844f, 0.0f, 15.050016403198242f, -1.6057395935058594f, -14.475648880004883f, 1.799184799194336f, 14.293328285217285f, 0.5108423233032227f, 15.050016403198242f, 1.6057395935058594f, 19.814817428588867f, 0.0f, -16.111316680908203f, 0.0f, 12.936897277832031f, 1.0670080184936523f, 14.551607131958008f, -2.3501334190368652f, 14.628332138061523f, -2.399768829345703f, -12.936897277832031f, -1.0670080184936523f, 20.02128791809082f, 0.0f, 14.949377059936523f, -2.7313337326049805f, 14.784006118774414f, -4.022793769836426f, -14.551607131958008f, 2.3501334190368652f, 14.949377059936523f, 2.7313337326049805f, 24.40755271911621f, 0.0f, 19.282503128051758f, 1.5806350708007812f, -14.628332138061523f, 2.399768829345703f, 14.784006118774414f, 4.022793769836426f, 19.282503128051758f, -1.5806350708007812f, 24.952800750732422f, 0.0f, -22.102540969848633f, 0.0f, 16.12616539001465f, 0.8808197975158691f, 14.004426956176758f, 1.905311107635498f, 15.413140296936035f, 4.387392044067383f, -16.12616539001465f, -0.8808197975158691f, 21.924633026123047f, 0.0f, 13.583107948303223f, 0.11949014663696289f, 15.598108291625977f, 2.933773994445801f, -14.004426956176758f, -1.905311107635498f, 13.583107948303223f, -0.11949014663696289f, 17.577861785888672f, 0.0f, 14.050710678100586f, 1.2287726402282715f, -15.413140296936035f, -4.387392044067383f, 15.598108291625977f, -2.933773994445801f, 14.050710678100586f, -1.2287726402282715f, 20.489145278930664f, 0.0f, -22.985389709472656f, 0.0f, 16.888259887695312f, 0.7015542984008789f, 17.901081085205078f, 1.3672666549682617f, 15.577241897583008f, 2.033761978149414f, -16.888259887695312f, -0.7015542984008789f, 20.749780654907227f, 0.0f, 16.01176643371582f, -0.47277259826660156f, 15.480823516845703f, 1.7828168869018555f, -17.901081085205078f, -1.3672666549682617f, 16.01176643371582f, 0.47277259826660156f, 23.58531951904297f, 0.0f, 15.985233306884766f, 2.542098045349121f, -15.577241897583008f, -2.033761978149414f, 15.480823516845703f, -1.7828168869018555f, 15.985233306884766f, -2.542098045349121f, 18.993389129638672f, 0.0f, -18.488067626953125f, 0.0f, 14.99407958984375f, 1.5406279563903809f, 15.462581634521484f, 2.017393112182617f, 14.306474685668945f, -1.0958809852600098f, -14.99407958984375f, -1.5406279563903809f, 22.04218101501465f, 0.0f, 15.486895561218262f, 0.3238210678100586f, 16.446046829223633f, -1.380934715270996f, -15.462581634521484f, -2.017393112182617f, 15.486895561218262f, -0.3238210678100586f, 21.053081512451172f, 0.0f, 15.255721092224121f, -0.8742270469665527f, -14.306474685668945f, 1.0958809852600098f, 16.446046829223633f, 1.380934715270996f, 15.255721092224121f, 0.8742270469665527f, 21.367691040039062f, 0.0f, -18.54532814025879f, 0.0f, 14.14972972869873f, -0.2645750045776367f, 15.749005317687988f, -3.1528220176696777f, 14.943021774291992f, -1.1428375244140625f, -14.14972972869873f, 0.2645750045776367f, 20.523956298828125f, 0.0f, 17.669498443603516f, -1.8397889137268066f, 15.802692413330078f, -1.5151710510253906f, -15.749005317687988f, 3.1528220176696777f, 17.669498443603516f, 1.8397889137268066f, 24.49015998840332f, 0.0f, 18.391395568847656f, 0.19124126434326172f, -14.943021774291992f, 1.1428375244140625f, 15.802692413330078f, 1.5151710510253906f, 18.391395568847656f, -0.19124126434326172f, 21.56278419494629f, 0.0f, -19.01057243347168f, 0.0f, 13.756425857543945f, -1.3912720680236816f, 15.014806747436523f, -0.5823788642883301f, 12.493483543395996f, -0.3966670036315918f, -13.756425857543945f, 1.3912720680236816f, 20.920705795288086f, 0.0f, 14.940515518188477f, -0.2672429084777832f, 15.151918411254883f, 1.0776352882385254f, -15.014806747436523f, 0.5823788642883301f, 14.940515518188477f, 0.2672429084777832f, 19.805326461791992f, 0.0f, 13.746864318847656f, 0.35597944259643555f, -12.493483543395996f, 0.3966670036315918f, 15.151918411254883f, -1.0776352882385254f, 13.746864318847656f, -0.35597944259643555f, 20.23624038696289f, 0.0f, -19.835817337036133f, 0.0f, 12.345602989196777f, -0.38267993927001953f, 12.679959297180176f, 1.2073087692260742f, 14.22773551940918f, 1.7440829277038574f, -12.345602989196777f, 0.38267993927001953f, 18.58266830444336f, 0.0f, 12.680303573608398f, 3.152942180633545f, 15.031095504760742f, 2.5002975463867188f, -12.679959297180176f, -1.2073087692260742f, 12.680303573608398f, -3.152942180633545f, 18.550626754760742f, 0.0f, 15.112411499023438f, -1.1196708679199219f, -14.22773551940918f, -1.7440829277038574f, 15.031095504760742f, -2.5002975463867188f, 15.112411499023438f, 1.1196708679199219f, 21.767333984375f, 0.0f, -21.897083282470703f, 0.0f, 14.260169982910156f, -0.07391071319580078f, 17.08153533935547f, 1.807767391204834f, 15.183073997497559f, 1.9556050300598145f, -14.260169982910156f, 0.07391071319580078f, 20.19582748413086f, 0.0f, 16.208293914794922f, 1.1768698692321777f, 13.961179733276367f, 2.0600337982177734f, -17.08153533935547f, -1.807767391204834f, 16.208293914794922f, -1.1768698692321777f, 22.998903274536133f, 0.0f, 17.012989044189453f, 1.6497149467468262f, -15.183073997497559f, -1.9556050300598145f, 13.961179733276367f, -2.0600337982177734f, 17.012989044189453f, -1.6497149467468262f, 21.019216537475586f, 0.0f, -22.282424926757812f, 0.0f, 13.697905540466309f, -0.6117820739746094f, 16.879337310791016f, 1.646571159362793f, 16.772390365600586f, -0.39737653732299805f, -13.697905540466309f, 0.6117820739746094f, 16.056781768798828f, 0.0f, 12.443952560424805f, 0.8248229026794434f, 13.329978942871094f, 0.7228727340698242f, -16.879337310791016f, -1.646571159362793f, 12.443952560424805f, -0.8248229026794434f, 22.675397872924805f, 0.0f, 18.546886444091797f, -1.9303617477416992f, -16.772390365600586f, 0.39737653732299805f, 13.329978942871094f, -0.7228727340698242f, 18.546886444091797f, 1.9303617477416992f, 24.07941246032715f, 0.0f, -25.839750289916992f, 0.0f, 17.385177612304688f, -3.2057342529296875f, 17.17952537536621f, 0.9345979690551758f, 17.875999450683594f, -1.1553773880004883f, -17.385177612304688f, 3.2057342529296875f, 23.636884689331055f, 0.0f, 16.777456283569336f, 4.736817359924316f, 14.745793342590332f, 2.790985584259033f, -17.17952537536621f, -0.9345979690551758f, 16.777456283569336f, -4.736817359924316f, 22.12356948852539f, 0.0f, 15.067392349243164f, -0.907984733581543f, -17.875999450683594f, 1.1553773880004883f, 14.745793342590332f, -2.790985584259033f, 15.067392349243164f, 0.907984733581543f, 19.989240646362305f, 0.0f, -20.52828025817871f, 0.0f, 13.473374366760254f, 0.004489898681640625f, 15.562891960144043f, 0.2779421806335449f, 18.70197296142578f, -0.980743408203125f, -13.473374366760254f, -0.004489898681640625f, 16.761287689208984f, 0.0f, 13.819131851196289f, 0.8005805015563965f, 15.896586418151855f, 0.24280071258544922f, -15.562891960144043f, -0.2779421806335449f, 13.819131851196289f, -0.8005805015563965f, 21.150455474853516f, 0.0f, 19.827245712280273f, -1.6094036102294922f, -18.70197296142578f, 0.980743408203125f, 15.896586418151855f, -0.24280071258544922f, 19.827245712280273f, 1.6094036102294922f, 27.008575439453125f, 0.0f, -27.029170989990234f, 0.0f, 17.930641174316406f, 1.9853086471557617f, 18.718957901000977f, 1.0346975326538086f, 19.951480865478516f, 0.21124744415283203f, -17.930641174316406f, -1.9853086471557617f, 20.763872146606445f, 0.0f, 16.538589477539062f, -2.308715343475342f, 17.6463565826416f, -1.3890576362609863f, -18.718957901000977f, -1.0346975326538086f, 16.538589477539062f, 2.308715343475342f, 21.536962509155273f, 0.0f, 17.31304168701172f, -1.2490825653076172f, -19.951480865478516f, -0.21124744415283203f, 17.6463565826416f, 1.3890576362609863f, 17.31304168701172f, 1.2490825653076172f, 23.989009857177734f, 0.0f, -19.568130493164062f, 0.0f, 14.517946243286133f, 0.6197009086608887f, 13.75275993347168f, 1.3963446617126465f, 14.738399505615234f, 1.1570844650268555f, -14.517946243286133f, -0.6197009086608887f, 21.724397659301758f, 0.0f, 15.440465927124023f, -1.2506623268127441f, 14.940789222717285f, -0.15315485000610352f, -13.75275993347168f, -1.3963446617126465f, 15.440465927124023f, 1.2506623268127441f, 19.383718490600586f, 0.0f, 13.610416412353516f, 1.0511608123779297f, -14.738399505615234f, -1.1570844650268555f, 14.940789222717285f, 0.15315485000610352f, 13.610416412353516f, -1.0511608123779297f, 20.487234115600586f, 0.0f, -19.818504333496094f, 0.0f, 17.531936645507812f, 0.39038562774658203f, 13.995851516723633f, -0.46251916885375977f, 14.235815048217773f, -0.8292222023010254f, -17.531936645507812f, -0.39038562774658203f, 24.077363967895508f, 0.0f, 15.714537620544434f, 0.3090248107910156f, 16.726791381835938f, -0.8345546722412109f, -13.995851516723633f, 0.46251916885375977f, 15.714537620544434f, -0.3090248107910156f, 20.553016662597656f, 0.0f, 14.17746639251709f, -2.784634590148926f, -14.235815048217773f, 0.8292222023010254f, 16.726791381835938f, 0.8345546722412109f, 14.17746639251709f, 2.784634590148926f, 20.93682098388672f, 0.0f, -20.676353454589844f, 0.0f, 13.551310539245605f, -0.08127403259277344f, 16.08228302001953f, 1.728283405303955f, 15.339326858520508f, 1.0663766860961914f, -13.551310539245605f, 0.08127403259277344f, 18.5267276763916f, 0.0f, 15.265503883361816f, 1.2372345924377441f, 15.278657913208008f, 0.6004705429077148f, -16.08228302001953f, -1.728283405303955f, 15.265503883361816f, -1.2372345924377441f, 21.605871200561523f, 0.0f, 16.14678382873535f, -0.7661480903625488f, -15.339326858520508f, -1.0663766860961914f, 15.278657913208008f, -0.6004705429077148f, 16.14678382873535f, 0.7661480903625488f, 20.115238189697266f, 0.0f, -18.385602951049805f, 0.0f, 15.881963729858398f, -0.7497930526733398f, 15.534933090209961f, 1.139373779296875f, 14.998346328735352f, 0.8422031402587891f, -15.881963729858398f, 0.7497930526733398f, 23.393373489379883f, 0.0f, 17.696258544921875f, 2.069934368133545f, 16.188220977783203f, 0.24628734588623047f, -15.534933090209961f, -1.139373779296875f, 17.696258544921875f, -2.069934368133545f, 21.894691467285156f, 0.0f, 14.54233169555664f, -0.08267688751220703f, -14.998346328735352f, -0.8422031402587891f, 16.188220977783203f, -0.24628734588623047f, 14.54233169555664f, 0.08267688751220703f, 21.84213638305664f, 0.0f, -21.815189361572266f, 0.0f, 16.37476348876953f, -0.16496706008911133f, 16.57563591003418f, 1.073728084564209f, 14.57111644744873f, 1.5882558822631836f, -16.37476348876953f, 0.16496706008911133f, 21.956165313720703f, 0.0f, 16.068710327148438f, -1.2231574058532715f, 14.977871894836426f, 0.28809595108032227f, -16.57563591003418f, -1.073728084564209f, 16.068710327148438f, 1.2231574058532715f, 20.963483810424805f, 0.0f, 14.83864974975586f, 3.258152961730957f, -14.57111644744873f, -1.5882558822631836f, 14.977871894836426f, -0.28809595108032227f, 14.83864974975586f, -3.258152961730957f, 18.950496673583984f, 0.0f, -21.46596908569336f, 0.0f, 16.721342086791992f, -0.5975379943847656f, 15.611867904663086f, -2.6078925132751465f, 16.635486602783203f, -0.2064075469970703f, -16.721342086791992f, 0.5975379943847656f, 23.029808044433594f, 0.0f, 17.535564422607422f, -1.882277488708496f, 17.49394416809082f, 0.8557558059692383f, -15.611867904663086f, 2.6078925132751465f, 17.535564422607422f, 1.882277488708496f, 21.265316009521484f, 0.0f, 17.37450408935547f, 1.9381747245788574f, -16.635486602783203f, 0.2064075469970703f, 17.49394416809082f, -0.8557558059692383f, 17.37450408935547f, -1.9381747245788574f, 23.108882904052734f, 0.0f, -19.519731521606445f, 0.0f, 14.097164154052734f, 2.2474584579467773f, 16.26242446899414f, -1.1949553489685059f, 14.76553726196289f, 1.4681391716003418f, -14.097164154052734f, -2.2474584579467773f, 20.139049530029297f, 0.0f, 14.62242317199707f, -0.4704608917236328f, 16.004131317138672f, 0.3719491958618164f, -16.26242446899414f, 1.1949553489685059f, 14.62242317199707f, 0.4704608917236328f, 23.348764419555664f, 0.0f, 17.816987991333008f, 2.0117616653442383f, -14.76553726196289f, -1.4681391716003418f, 16.004131317138672f, -0.3719491958618164f, 17.816987991333008f, -2.0117616653442383f, 22.741804122924805f, 0.0f, -23.217531204223633f, 0.0f, 16.39156723022461f, 4.362850189208984f, 16.027862548828125f, 0.9156723022460938f, 18.464752197265625f, 0.3886146545410156f, -16.39156723022461f, -4.362850189208984f, 24.53815269470215f, 0.0f, 16.491310119628906f, -2.489562511444092f, 17.149078369140625f, -4.680747032165527f, -16.027862548828125f, -0.9156723022460938f, 16.491310119628906f, 2.489562511444092f, 20.971141815185547f, 0.0f, 17.459211349487305f, -1.248791217803955f, -18.464752197265625f, -0.3886146545410156f, 17.149078369140625f, 4.680747032165527f, 17.459211349487305f, 1.248791217803955f, 23.611125946044922f, 0.0f, -26.480085372924805f, 0.0f, 15.027824401855469f, -2.027468204498291f, 17.068294525146484f, 0.3658275604248047f, 19.50084114074707f, -1.1991071701049805f, -15.027824401855469f, 2.027468204498291f, 17.03862762451172f, 0.0f, 14.054291725158691f, 0.9035129547119141f, 14.7611665725708f, 1.2197861671447754f, -17.068294525146484f, -0.3658275604248047f, 14.054291725158691f, -0.9035129547119141f, 21.695037841796875f, 0.0f, 16.740514755249023f, -2.3722805976867676f, -19.50084114074707f, 1.1991071701049805f, 14.7611665725708f, -1.2197861671447754f, 16.740514755249023f, 2.3722805976867676f, 23.60053825378418f, 0.0f, -25.19286346435547f, 0.0f, 18.24681854248047f, 1.6140327453613281f, 16.798263549804688f, 3.91426420211792f, 16.753896713256836f, 2.1122665405273438f, -18.24681854248047f, -1.6140327453613281f, 24.43886947631836f, 0.0f, 16.063892364501953f, 1.2269635200500488f, 16.149246215820312f, -0.5192975997924805f, -16.798263549804688f, -3.91426420211792f, 16.063892364501953f, -1.2269635200500488f, 20.897994995117188f, 0.0f, 15.439716339111328f, -1.5274806022644043f, -16.753896713256836f, -2.1122665405273438f, 16.149246215820312f, 0.5192975997924805f, 15.439716339111328f, 1.5274806022644043f, 21.167673110961914f, 0.0f, -19.354480743408203f, 0.0f, 16.649629592895508f, -0.16416311264038086f, 13.318561553955078f, -1.4489340782165527f, 15.699348449707031f, -1.7692089080810547f, -16.649629592895508f, 0.16416311264038086f, 24.763322830200195f, 0.0f, 15.313268661499023f, 0.29273509979248047f, 16.87276840209961f, -1.1242265701293945f, -13.318561553955078f, 1.4489340782165527f, 15.313268661499023f, -0.29273509979248047f, 18.76451873779297f, 0.0f, 14.416690826416016f, 0.9236359596252441f, -15.699348449707031f, 1.7692089080810547f, 16.87276840209961f, 1.1242265701293945f, 14.416690826416016f, -0.9236359596252441f, 21.16741180419922f, 0.0f, -22.729005813598633f, 0.0f, 16.68958854675293f, 0.3741636276245117f, 16.12457275390625f, 1.0787129402160645f, 15.476301193237305f, 0.3956470489501953f, -16.68958854675293f, -0.3741636276245117f, 22.761510848999023f, 0.0f, 16.545650482177734f, 0.37404870986938477f, 16.08282470703125f, -0.7073183059692383f, -16.12457275390625f, -1.0787129402160645f, 16.545650482177734f, -0.37404870986938477f, 21.19246482849121f, 0.0f, 15.293941497802734f, -2.0139307975769043f, -15.476301193237305f, -0.3956470489501953f, 16.08282470703125f, 0.7073183059692383f, 15.293941497802734f, 2.0139307975769043f, 21.316614151000977f, 0.0f, -19.816373825073242f, 0.0f, 15.035913467407227f, 0.0680389404296875f, 16.30428123474121f, 0.7039575576782227f, 14.459831237792969f, 1.1706647872924805f, -15.035913467407227f, -0.0680389404296875f, 23.93771743774414f, 0.0f, 17.645076751708984f, 1.4169692993164062f, 15.732928276062012f, -0.28169727325439453f, -16.30428123474121f, -0.7039575576782227f, 17.645076751708984f, -1.4169692993164062f, 22.885862350463867f, 0.0f, 14.374212265014648f, 0.5441293716430664f, -14.459831237792969f, -1.1706647872924805f, 15.732928276062012f, 0.28169727325439453f, 14.374212265014648f, -0.5441293716430664f, 20.309322357177734f, 0.0f, -23.476337432861328f, 0.0f, 16.451984405517578f, -0.06769943237304688f, 15.651022911071777f, 1.5541930198669434f, 18.099666595458984f, -1.4295711517333984f, -16.451984405517578f, 0.06769943237304688f, 19.443557739257812f, 0.0f, 14.054019927978516f, 2.2278285026550293f, 16.018251419067383f, 1.4473004341125488f, -15.651022911071777f, -1.5541930198669434f, 14.054019927978516f, -2.2278285026550293f, 20.031251907348633f, 0.0f, 15.245319366455078f, -2.4473819732666016f, -18.099666595458984f, 1.4295711517333984f, 16.018251419067383f, -1.4473004341125488f, 15.245319366455078f, 2.4473819732666016f, 21.388999938964844f, 0.0f, -23.350927352905273f, 0.0f, 16.649139404296875f, -0.7746315002441406f, 18.467967987060547f, 0.8148317337036133f, 17.850723266601562f, -1.781792163848877f, -16.649139404296875f, 0.7746315002441406f, 21.150409698486328f, 0.0f, 16.523895263671875f, 2.158529281616211f, 16.941299438476562f, -2.2086939811706543f, -18.467967987060547f, -0.8148317337036133f, 16.523895263671875f, -2.158529281616211f, 22.27109146118164f, 0.0f, 17.568321228027344f, -2.0246801376342773f, -17.850723266601562f, 1.781792163848877f, 16.941299438476562f, 2.2086939811706543f, 17.568321228027344f, 2.0246801376342773f, 23.129047393798828f, 0.0f, -22.747337341308594f, 0.0f, 14.522342681884766f, 1.0052733421325684f, 15.720023155212402f, 0.6297726631164551f, 18.355745315551758f, -0.8878421783447266f, -14.522342681884766f, -1.0052733421325684f, 22.07148551940918f, 0.0f, 15.908496856689453f, -0.19504690170288086f, 16.152368545532227f, -0.9630904197692871f, -15.720023155212402f, -0.6297726631164551f, 15.908496856689453f, 0.19504690170288086f, 21.666574478149414f, 0.0f, 16.32341957092285f, -1.9645299911499023f, -18.355745315551758f, 0.8878421783447266f, 16.152368545532227f, 0.9630904197692871f, 16.32341957092285f, 1.9645299911499023f, 24.470104217529297f, 0.0f, -21.82316017150879f, 0.0f, 16.595468521118164f, 0.5713272094726562f, 14.811345100402832f, 1.187673568725586f, 18.478282928466797f, 1.0751047134399414f, -16.595468521118164f, -0.5713272094726562f, 21.56455421447754f, 0.0f, 15.695236206054688f, 1.6537456512451172f, 18.979644775390625f, 0.6400623321533203f, -14.811345100402832f, -1.187673568725586f, 15.695236206054688f, -1.6537456512451172f, 19.819047927856445f, 0.0f, 17.255107879638672f, -0.3891420364379883f, -18.478282928466797f, -1.0751047134399414f, 18.979644775390625f, -0.6400623321533203f, 17.255107879638672f, 0.3891420364379883f, 24.61712646484375f, 0.0f, -23.316007614135742f, 0.0f, 16.840328216552734f, -0.1714944839477539f, 15.745707511901855f, -1.7281394004821777f, 17.080114364624023f, -1.8122563362121582f, -16.840328216552734f, 0.1714944839477539f, 20.889936447143555f, 0.0f, 14.053730010986328f, 0.03265047073364258f, 15.681198120117188f, -0.9533553123474121f, -15.745707511901855f, 1.7281394004821777f, 14.053730010986328f, -0.03265047073364258f, 21.791568756103516f, 0.0f, 15.182169914245605f, 0.5048332214355469f, -17.080114364624023f, 1.8122563362121582f, 15.681198120117188f, 0.9533553123474121f, 15.182169914245605f, -0.5048332214355469f, 22.19715118408203f, 0.0f, -20.248323440551758f, 0.0f, 16.19462776184082f, -0.9227666854858398f, 12.742441177368164f, -1.2530441284179688f, 13.242361068725586f, -2.3555569648742676f, -16.19462776184082f, 0.9227666854858398f, 24.274850845336914f, 0.0f, 15.302762985229492f, 0.5109024047851562f, 13.591480255126953f, 0.7871513366699219f, -12.742441177368164f, 1.2530441284179688f, 15.302762985229492f, -0.5109024047851562f, 19.683853149414062f, 0.0f, 12.944292068481445f, -0.3013796806335449f, -13.242361068725586f, 2.3555569648742676f, 13.591480255126953f, -0.7871513366699219f, 12.944292068481445f, 0.3013796806335449f, 17.905780792236328f, 0.0f, -14.300933837890625f, 0.0f, 11.694249153137207f, 1.005842685699463f, 12.425750732421875f, 0.6236023902893066f, 12.261955261230469f, 1.1963133811950684f, -11.694249153137207f, -1.005842685699463f, 22.746501922607422f, 0.0f, 14.725868225097656f, 0.6643266677856445f, 16.83078956604004f, -0.5466632843017578f, -12.425750732421875f, -0.6236023902893066f, 14.725868225097656f, -0.6643266677856445f, 22.199668884277344f, 0.0f, 17.119123458862305f, 1.1405529975891113f, -12.261955261230469f, -1.1963133811950684f, 16.83078956604004f, 0.5466632843017578f, 17.119123458862305f, -1.1405529975891113f, 21.40943145751953f, 0.0f, -25.674694061279297f, 0.0f, 18.10837745666504f, -2.591520309448242f, 16.436161041259766f, -0.17813682556152344f, 17.630596160888672f, 2.0602645874023438f, -18.10837745666504f, 2.591520309448242f, 23.505779266357422f, 0.0f, 16.496971130371094f, 1.5505895614624023f, 17.315523147583008f, 3.713217258453369f, -16.436161041259766f, 0.17813682556152344f, 16.496971130371094f, -1.5505895614624023f, 22.55170249938965f, 0.0f, 15.5280179977417f, 0.9869365692138672f, -17.630596160888672f, -2.0602645874023438f, 17.315523147583008f, -3.713217258453369f, 15.5280179977417f, -0.9869365692138672f, 20.920623779296875f, 0.0f, -21.224489212036133f, 0.0f, 16.505794525146484f, -3.0338940620422363f, 13.695807456970215f, -4.129373550415039f, 14.16837215423584f, -1.065721035003662f, -16.505794525146484f, 3.0338940620422363f, 21.696077346801758f, 0.0f, 15.15660285949707f, 0.5639595985412598f, 14.225179672241211f, 0.8959450721740723f, -13.695807456970215f, 4.129373550415039f, 15.15660285949707f, -0.5639595985412598f, 20.93700408935547f, 0.0f, 12.428796768188477f, 2.724285125732422f, -14.16837215423584f, 1.065721035003662f, 14.225179672241211f, -0.8959450721740723f, 12.428796768188477f, -2.724285125732422f, 17.867216110229492f, 0.0f, -23.37602424621582f, 0.0f, 16.110506057739258f, -1.603409767150879f, 13.155975341796875f, -0.8047003746032715f, 15.20956802368164f, -0.5328030586242676f, -16.110506057739258f, 1.603409767150879f, 22.30881118774414f, 0.0f, 14.099899291992188f, 0.08048772811889648f, 14.721872329711914f, 1.1429238319396973f, -13.155975341796875f, 0.8047003746032715f, 14.099899291992188f, -0.08048772811889648f, 19.580577850341797f, 0.0f, 13.916540145874023f, 1.5321788787841797f, -15.20956802368164f, 0.5328030586242676f, 14.721872329711914f, -1.1429238319396973f, 13.916540145874023f, -1.5321788787841797f, 20.551471710205078f, 0.0f, -25.068078994750977f, 0.0f, 18.21402931213379f, 0.1940937042236328f, 16.039424896240234f, 2.531503200531006f, 16.997644424438477f, 3.549870491027832f, -18.21402931213379f, -0.1940937042236328f, 23.36961555480957f, 0.0f, 14.453336715698242f, 1.9518232345581055f, 15.166784286499023f, 2.540485382080078f, -16.039424896240234f, -2.531503200531006f, 14.453336715698242f, -1.9518232345581055f, 20.349637985229492f, 0.0f, 14.39632797241211f, -1.6428136825561523f, -16.997644424438477f, -3.549870491027832f, 15.166784286499023f, -2.540485382080078f, 14.39632797241211f, 1.6428136825561523f, 20.663663864135742f, 0.0f, -20.877182006835938f, 0.0f, 13.021966934204102f, -0.2794966697692871f, 15.731927871704102f, 0.47623300552368164f, 16.628196716308594f, -0.9239397048950195f, -13.021966934204102f, 0.2794966697692871f, 14.145975112915039f, 0.0f, 12.299859046936035f, -0.07525062561035156f, 14.15318489074707f, -0.8755784034729004f, -15.731927871704102f, -0.47623300552368164f, 12.299859046936035f, 0.07525062561035156f, 21.013072967529297f, 0.0f, 16.94312858581543f, -1.9787907600402832f, -16.628196716308594f, 0.9239397048950195f, 14.15318489074707f, 0.8755784034729004f, 16.94312858581543f, 1.9787907600402832f, 25.103281021118164f, 0.0f, -23.896392822265625f, 0.0f, 14.44388484954834f, -1.5416078567504883f, 17.827392578125f, 0.8429069519042969f, 20.88530158996582f, -0.23684978485107422f, -14.44388484954834f, 1.5416078567504883f, 20.83314323425293f, 0.0f, 14.28111457824707f, 3.594601631164551f, 17.89102554321289f, 3.0162405967712402f, -17.827392578125f, -0.8429069519042969f, 14.28111457824707f, -3.594601631164551f, 21.302108764648438f, 0.0f, 18.56533432006836f, -0.46427059173583984f, -20.88530158996582f, 0.23684978485107422f, 17.89102554321289f, -3.0162405967712402f, 18.56533432006836f, 0.46427059173583984f, 27.954952239990234f, 0.0f, -19.225210189819336f, 0.0f, 15.537734985351562f, -2.844268321990967f, 14.608118057250977f, -1.1739659309387207f, 15.199438095092773f, -1.3806538581848145f, -15.537734985351562f, 2.844268321990967f, 21.943195343017578f, 0.0f, 15.691598892211914f, 1.5360369682312012f, 15.191414833068848f, 1.5159168243408203f, -14.608118057250977f, 1.1739659309387207f, 15.691598892211914f, -1.5360369682312012f, 19.7520809173584f, 0.0f, 14.50395679473877f, 0.054375648498535156f, -15.199438095092773f, 1.3806538581848145f, 15.191414833068848f, -1.5159168243408203f, 14.50395679473877f, -0.054375648498535156f, 20.23719596862793f, 0.0f, -24.562166213989258f, 0.0f, 18.248456954956055f, -1.261307716369629f, 17.315780639648438f, 0.7666950225830078f, 18.92612075805664f, 1.7121801376342773f, -18.248456954956055f, 1.261307716369629f, 21.95799446105957f, 0.0f, 15.902925491333008f, 3.556591033935547f, 16.558889389038086f, 4.076242446899414f, -17.315780639648438f, -0.7666950225830078f, 15.902925491333008f, -3.556591033935547f, 21.359922409057617f, 0.0f, 19.199832916259766f, 0.5405926704406738f, -18.92612075805664f, -1.7121801376342773f, 16.558889389038086f, -4.076242446899414f, 19.199832916259766f, -0.5405926704406738f, 24.214460372924805f, 0.0f, -21.008956909179688f, 0.0f, 13.98458480834961f, 0.2941150665283203f, 15.619239807128906f, 1.2771711349487305f, 14.33474349975586f, 0.40009498596191406f, -13.98458480834961f, -0.2941150665283203f, 18.215177536010742f, 0.0f, 14.997282028198242f, 2.851795196533203f, 11.668320655822754f, 1.0240888595581055f, -15.619239807128906f, -1.2771711349487305f, 14.997282028198242f, -2.851795196533203f, 21.39068031311035f, 0.0f, 13.909944534301758f, 0.5609288215637207f, -14.33474349975586f, -0.40009498596191406f, 11.668320655822754f, -1.0240888595581055f, 13.909944534301758f, -0.5609288215637207f, 16.973464965820312f, 0.0f, -23.05857276916504f, 0.0f, 16.856597900390625f, -3.125516414642334f, 16.796703338623047f, -2.032315731048584f, 15.33858871459961f, -2.3408541679382324f, -16.856597900390625f, 3.125516414642334f, 24.39084815979004f, 0.0f, 18.71369743347168f, 0.29778480529785156f, 16.91756820678711f, 0.1454792022705078f, -16.796703338623047f, 2.032315731048584f, 18.71369743347168f, -0.29778480529785156f, 22.9479923248291f, 0.0f, 16.18106460571289f, -1.090634822845459f, -15.33858871459961f, 2.3408541679382324f, 16.91756820678711f, -0.1454792022705078f, 16.18106460571289f, 1.090634822845459f, 19.69454002380371f, 0.0f, -22.64739418029785f, 0.0f, 16.109371185302734f, -2.1354575157165527f, 16.188133239746094f, 1.5276713371276855f, 18.445343017578125f, -2.2559757232666016f, -16.109371185302734f, 2.1354575157165527f, 23.121217727661133f, 0.0f, 16.48171615600586f, 3.151197910308838f, 18.688018798828125f, -0.21932506561279297f, -16.188133239746094f, -1.5276713371276855f, 16.48171615600586f, -3.151197910308838f, 21.761823654174805f, 0.0f, 17.691831588745117f, -3.358661651611328f, -18.445343017578125f, 2.2559757232666016f, 18.688018798828125f, 0.21932506561279297f, 17.691831588745117f, 3.358661651611328f, 25.613744735717773f, 0.0f, -23.148714065551758f, 0.0f, 15.048717498779297f, -0.557988166809082f, 18.702512741088867f, -2.2494897842407227f, 15.005731582641602f, -1.842700481414795f, -15.048717498779297f, 0.557988166809082f, 19.117347717285156f, 0.0f, 17.592741012573242f, 0.06960296630859375f, 13.811508178710938f, 0.40750694274902344f, -18.702512741088867f, 2.2494897842407227f, 17.592741012573242f, -0.06960296630859375f, 26.9288272857666f, 0.0f, 18.228248596191406f, 2.3123960494995117f, -15.005731582641602f, 1.842700481414795f, 13.811508178710938f, -0.40750694274902344f, 18.228248596191406f, -2.3123960494995117f, 20.77059555053711f, 0.0f, -27.8686580657959f, 0.0f, 20.494844436645508f, 3.4361047744750977f, 17.84125518798828f, 0.8243036270141602f, 21.619888305664062f, -0.6334676742553711f, -20.494844436645508f, -3.4361047744750977f, 25.66379165649414f, 0.0f, 16.319040298461914f, -2.403961658477783f, 18.267738342285156f, -4.291955947875977f, -17.84125518798828f, -0.8243036270141602f, 16.319040298461914f, 2.403961658477783f, 20.881973266601562f, 0.0f, 16.648780822753906f, 0.09575557708740234f, -21.619888305664062f, 0.6334676742553711f, 18.267738342285156f, 4.291955947875977f, 16.648780822753906f, -0.09575557708740234f, 23.260892868041992f, 0.0f, -25.08969497680664f, 0.0f, 17.743778228759766f, -0.09798336029052734f, 18.747533798217773f, 1.2729787826538086f, 18.647491455078125f, 1.2894353866577148f, -17.743778228759766f, 0.09798336029052734f, 22.976255416870117f, 0.0f, 19.046043395996094f, 0.7506647109985352f, 16.745689392089844f, 1.402505874633789f, -18.747533798217773f, -1.2729787826538086f, 19.046043395996094f, -0.7506647109985352f, 24.068281173706055f, 0.0f, 18.246185302734375f, 0.1723003387451172f, -18.647491455078125f, -1.2894353866577148f, 16.745689392089844f, -1.402505874633789f, 18.246185302734375f, -0.1723003387451172f, 24.131458282470703f, 0.0f, -24.18777847290039f, 0.0f, 18.98159408569336f, -3.118265151977539f, 17.94524383544922f, -2.066533088684082f, 18.206119537353516f, -0.1573333740234375f, -18.98159408569336f, 3.118265151977539f, 22.774587631225586f, 0.0f, 16.383834838867188f, 0.5538411140441895f, 17.14815330505371f, 2.4304370880126953f, -17.94524383544922f, 2.066533088684082f, 16.383834838867188f, -0.5538411140441895f, 19.713497161865234f, 0.0f, 15.563642501831055f, 1.3309803009033203f, -18.206119537353516f, 0.1573333740234375f, 17.14815330505371f, -2.4304370880126953f, 15.563642501831055f, -1.3309803009033203f, 21.666305541992188f, 0.0f, -22.172109603881836f, 0.0f, 15.173959732055664f, -0.2990875244140625f, 15.856069564819336f, 0.44220638275146484f, 16.172658920288086f, -0.12421798706054688f, -15.173959732055664f, 0.2990875244140625f, 19.85472869873047f, 0.0f, 14.790227890014648f, -1.6778841018676758f, 14.134756088256836f, -1.5390615463256836f, -15.856069564819336f, -0.44220638275146484f, 14.790227890014648f, 1.6778841018676758f, 23.433210372924805f, 0.0f, 17.356876373291016f, -0.6984548568725586f, -16.172658920288086f, 0.12421798706054688f, 14.134756088256836f, 1.5390615463256836f, 17.356876373291016f, 0.6984548568725586f, 22.314167022705078f, 0.0f, -22.89899444580078f, 0.0f, 16.29467010498047f, -1.6370429992675781f, 15.891280174255371f, -4.164074897766113f, 16.48223114013672f, -1.6723666191101074f, -16.29467010498047f, 1.6370429992675781f, 21.211254119873047f, 0.0f, 16.139549255371094f, -2.6213765144348145f, 14.890134811401367f, 0.06409025192260742f, -15.891280174255371f, 4.164074897766113f, 16.139549255371094f, 2.6213765144348145f, 22.39773941040039f, 0.0f, 15.913775444030762f, 2.0997776985168457f, -16.48223114013672f, 1.6723666191101074f, 14.890134811401367f, -0.06409025192260742f, 15.913775444030762f, -2.0997776985168457f, 19.935577392578125f, 0.0f, -18.614761352539062f, 0.0f, 13.880041122436523f, 0.4582343101501465f, 14.173076629638672f, -1.2096099853515625f, 13.965913772583008f, -0.08162736892700195f, -13.880041122436523f, -0.4582343101501465f, 20.17448616027832f, 0.0f, 15.33076286315918f, -0.14642667770385742f, 15.48178482055664f, -0.10817861557006836f, -14.173076629638672f, 1.2096099853515625f, 15.33076286315918f, 0.14642667770385742f, 22.582542419433594f, 0.0f, 17.757171630859375f, 0.3805379867553711f, -13.965913772583008f, 0.08162736892700195f, 15.48178482055664f, 0.10817861557006836f, 17.757171630859375f, -0.3805379867553711f, 21.33770179748535f, 0.0f, -20.93999671936035f, 0.0f, 16.701562881469727f, -0.9822368621826172f, 12.2352933883667f, -0.11900854110717773f, 17.00183868408203f, -0.8340258598327637f, -16.701562881469727f, 0.9822368621826172f, 24.072553634643555f, 0.0f, 15.033855438232422f, 2.2775650024414062f, 16.501829147338867f, 1.1017498970031738f, -12.2352933883667f, 0.11900854110717773f, 15.033855438232422f, -2.2775650024414062f, 18.391952514648438f, 0.0f, 12.883002281188965f, -1.5941824913024902f, -17.00183868408203f, 0.8340258598327637f, 16.501829147338867f, -1.1017498970031738f, 12.883002281188965f, 1.5941824913024902f, 20.636030197143555f, 0.0f, -18.116464614868164f, 0.0f, 16.863239288330078f, 0.770658016204834f, 17.753019332885742f, -2.121142864227295f, 13.540090560913086f, -1.288076400756836f, -16.863239288330078f, -0.770658016204834f, 24.34797477722168f, 0.0f, 20.617145538330078f, -1.9144411087036133f, 16.841552734375f, -2.179537296295166f, -17.753019332885742f, 2.121142864227295f, 20.617145538330078f, 1.9144411087036133f, 26.582727432250977f, 0.0f, 18.376834869384766f, -1.4125146865844727f, -13.540090560913086f, 1.288076400756836f, 16.841552734375f, 2.179537296295166f, 18.376834869384766f, 1.4125146865844727f, 20.581804275512695f, 0.0f, -20.413799285888672f, 0.0f, 16.157527923583984f, -1.4802241325378418f, 14.642253875732422f, -2.1171960830688477f, 14.847321510314941f, -2.772264003753662f, -16.157527923583984f, 1.4802241325378418f, 24.43147850036621f, 0.0f, 17.499488830566406f, -0.9276633262634277f, 17.544618606567383f, 0.15003490447998047f, -14.642253875732422f, 2.1171960830688477f, 17.499488830566406f, 0.9276633262634277f, 22.111970901489258f, 0.0f, 15.336393356323242f, 0.48430967330932617f, -14.847321510314941f, 2.772264003753662f, 17.544618606567383f, -0.15003490447998047f, 15.336393356323242f, -0.48430967330932617f, 21.655902862548828f, 0.0f, -21.770164489746094f, 0.0f, 16.525981903076172f, 0.2548551559448242f, 13.539999961853027f, -0.25463390350341797f, 14.656803131103516f, 1.3059425354003906f, -16.525981903076172f, -0.2548551559448242f, 24.89470863342285f, 0.0f, 15.669025421142578f, -0.43921422958374023f, 15.43845272064209f, 2.2921314239501953f, -13.539999961853027f, 0.25463390350341797f, 15.669025421142578f, 0.43921422958374023f, 17.091798782348633f, 0.0f, 13.043052673339844f, 2.2332143783569336f, -14.656803131103516f, -1.3059425354003906f, 15.43845272064209f, -2.2921314239501953f, 13.043052673339844f, -2.2332143783569336f, 18.211524963378906f, 0.0f, -21.74067497253418f, 0.0f, 15.06584358215332f, -2.0531163215637207f, 15.09339427947998f, -0.8616137504577637f, 14.806436538696289f, -0.21899175643920898f, -15.06584358215332f, 2.0531163215637207f, 23.28290557861328f, 0.0f, 15.97799301147461f, 1.0986137390136719f, 15.27734088897705f, -0.2865123748779297f, -15.09339427947998f, 0.8616137504577637f, 15.97799301147461f, -1.0986137390136719f, 20.612146377563477f, 0.0f, 14.211112022399902f, 1.0467371940612793f, -14.806436538696289f, 0.21899175643920898f, 15.27734088897705f, 0.2865123748779297f, 14.211112022399902f, -1.0467371940612793f, 19.27246856689453f, 0.0f, -16.363292694091797f, 0.0f, 13.239751815795898f, -2.0081677436828613f, 13.550819396972656f, -2.105344295501709f, 12.190223693847656f, -0.45111703872680664f, -13.239751815795898f, 2.0081677436828613f, 21.993528366088867f, 0.0f, 17.180477142333984f, -0.8344640731811523f, 16.3370361328125f, -1.8893041610717773f, -13.550819396972656f, 2.105344295501709f, 17.180477142333984f, 0.8344640731811523f, 24.075576782226562f, 0.0f, 17.378543853759766f, 1.9318604469299316f, -12.190223693847656f, 0.45111703872680664f, 16.3370361328125f, 1.8893041610717773f, 17.378543853759766f, -1.9318604469299316f, 21.023651123046875f, 0.0f, -21.64317512512207f, 0.0f, 16.67047882080078f, 0.36072444915771484f, 16.21580696105957f, 1.6885032653808594f, 15.064492225646973f, 0.41719913482666016f, -16.67047882080078f, -0.36072444915771484f, 21.197574615478516f, 0.0f, 15.597684860229492f, 2.4071192741394043f, 15.059895515441895f, -1.0233402252197266f, -16.21580696105957f, -1.6885032653808594f, 15.597684860229492f, -2.4071192741394043f, 21.431421279907227f, 0.0f, 14.834247589111328f, -3.015810012817383f, -15.064492225646973f, -0.41719913482666016f, 15.059895515441895f, 1.0233402252197266f, 14.834247589111328f, 3.015810012817383f, 18.678560256958008f, 0.0f, -24.52552604675293f, 0.0f, 15.23515510559082f, -1.658677577972412f, 17.67181396484375f, -2.1414475440979004f, 17.374652862548828f, -0.46230220794677734f, -15.23515510559082f, 1.658677577972412f, 18.488218307495117f, 0.0f, 13.974861145019531f, -0.011626720428466797f, 14.151053428649902f, 1.1929049491882324f, -17.67181396484375f, 2.1414475440979004f, 13.974861145019531f, 0.011626720428466797f, 23.31497573852539f, 0.0f, 17.305265426635742f, 1.6757917404174805f, -17.374652862548828f, 0.46230220794677734f, 14.151053428649902f, -1.1929049491882324f, 17.305265426635742f, -1.6757917404174805f, 21.096492767333984f, 0.0f, -18.73418617248535f, 0.0f, 13.927091598510742f, 1.8228816986083984f, 14.029094696044922f, -1.749741554260254f, 14.825826644897461f, 0.07763910293579102f, -13.927091598510742f, -1.8228816986083984f, 22.763919830322266f, 0.0f, 15.753870964050293f, -1.893838882446289f, 18.093822479248047f, -2.267055034637451f, -14.029094696044922f, 1.749741554260254f, 15.753870964050293f, 1.893838882446289f, 19.38747215270996f, 0.0f, 15.678062438964844f, 0.0019507408142089844f, -14.825826644897461f, -0.07763910293579102f, 18.093822479248047f, 2.267055034637451f, 15.678062438964844f, -0.0019507408142089844f, 23.750146865844727f, 0.0f, -21.735530853271484f, 0.0f, 16.120681762695312f, 0.686251163482666f, 16.110275268554688f, -0.20938873291015625f, 17.86948013305664f, -0.7987174987792969f, -16.120681762695312f, -0.686251163482666f, 21.05569076538086f, 0.0f, 15.950641632080078f, -0.02298259735107422f, 16.993698120117188f, -1.6902251243591309f, -16.110275268554688f, 0.20938873291015625f, 15.950641632080078f, 0.02298259735107422f, 22.73456382751465f, 0.0f, 16.35416603088379f, -0.5007257461547852f, -17.86948013305664f, 0.7987174987792969f, 16.993698120117188f, 1.6902251243591309f, 16.35416603088379f, 0.5007257461547852f, 24.846946716308594f, 0.0f, -23.25253677368164f, 0.0f, 16.813678741455078f, -0.8590450286865234f, 16.26696014404297f, 0.7003445625305176f, 18.700786590576172f, -0.1021270751953125f, -16.813678741455078f, 0.8590450286865234f, 20.79606819152832f, 0.0f, 14.959863662719727f, 1.452056884765625f, 17.57802963256836f, 0.6053981781005859f, -16.26696014404297f, -0.7003445625305176f, 14.959863662719727f, -1.452056884765625f, 19.27092933654785f, 0.0f, 16.128372192382812f, -1.0110177993774414f, -18.700786590576172f, 0.1021270751953125f, 17.57802963256836f, -0.6053981781005859f, 16.128372192382812f, 1.0110177993774414f, 26.414409637451172f, 0.0f, -20.431377410888672f, 0.0f, 15.20034408569336f, -0.08928489685058594f, 16.121185302734375f, 2.422122001647949f, 17.589567184448242f, -0.02927398681640625f, -15.20034408569336f, 0.08928489685058594f, 26.82245445251465f, 0.0f, 18.063709259033203f, 2.0412826538085938f, 19.61909294128418f, 0.8823432922363281f, -16.121185302734375f, -2.422122001647949f, 18.063709259033203f, -2.0412826538085938f, 25.09491729736328f, 0.0f, 20.833311080932617f, -2.7100095748901367f, -17.589567184448242f, 0.02927398681640625f, 19.61909294128418f, -0.8823432922363281f, 20.833311080932617f, 2.7100095748901367f, 26.643770217895508f, 0.0f, -23.736888885498047f, 0.0f, 18.890960693359375f, 2.4609527587890625f, 19.19548988342285f, 4.577088356018066f, 19.60604476928711f, 3.847348690032959f, -18.890960693359375f, -2.4609527587890625f, 21.807994842529297f, 0.0f, 17.99551010131836f, 1.2316131591796875f, 18.100147247314453f, 1.1858320236206055f, -19.19548988342285f, -4.577088356018066f, 17.99551010131836f, -1.2316131591796875f, 23.461679458618164f, 0.0f, 18.576129913330078f, 0.2639198303222656f, -19.60604476928711f, -3.847348690032959f, 18.100147247314453f, -1.1858320236206055f, 18.576129913330078f, -0.2639198303222656f, 24.65268325805664f, 0.0f, -24.84334945678711f, 0.0f, 18.64190101623535f, 0.349700927734375f, 17.565662384033203f, -2.049570083618164f, 18.885648727416992f, 0.22190189361572266f, -18.64190101623535f, -0.349700927734375f, 24.897937774658203f, 0.0f, 16.70075798034668f, -1.7952642440795898f, 17.32637596130371f, 0.25629138946533203f, -17.565662384033203f, 2.049570083618164f, 16.70075798034668f, 1.7952642440795898f, 22.58943748474121f, 0.0f, 16.8226318359375f, 1.2174677848815918f, -18.885648727416992f, -0.22190189361572266f, 17.32637596130371f, -0.25629138946533203f, 16.8226318359375f, -1.2174677848815918f, 23.003868103027344f, 0.0f, -18.012109756469727f, 0.0f, 15.290613174438477f, 1.0699410438537598f, 14.674177169799805f, 1.125152587890625f, 14.19912338256836f, 0.7007002830505371f, -15.290613174438477f, -1.0699410438537598f, 24.333070755004883f, 0.0f, 17.815433502197266f, 2.165109634399414f, 17.078968048095703f, 0.33077049255371094f, -14.674177169799805f, -1.125152587890625f, 17.815433502197266f, -2.165109634399414f, 24.4340877532959f, 0.0f, 17.949970245361328f, -2.0194406509399414f, -14.19912338256836f, -0.7007002830505371f, 17.078968048095703f, -0.33077049255371094f, 17.949970245361328f, 2.0194406509399414f, 23.017383575439453f, 0.0f, -21.27462387084961f, 0.0f, 13.96728515625f, -0.33349084854125977f, 12.850662231445312f, -2.1970267295837402f, 16.89284896850586f, -0.2431173324584961f, -13.96728515625f, 0.33349084854125977f, 18.396873474121094f, 0.0f, 11.402549743652344f, -1.1238255500793457f, 16.393516540527344f, -0.022820472717285156f, -12.850662231445312f, 2.1970267295837402f, 11.402549743652344f, 1.1238255500793457f, 16.99885368347168f, 0.0f, 15.382194519042969f, 0.5876851081848145f, -16.89284896850586f, 0.2431173324584961f, 16.393516540527344f, 0.022820472717285156f, 15.382194519042969f, -0.5876851081848145f, 26.284900665283203f, 0.0f, -17.271957397460938f, 0.0f, 13.386289596557617f, -0.8927855491638184f, 14.87706184387207f, -1.3271684646606445f, 15.44038200378418f, -0.613795280456543f, -13.386289596557617f, 0.8927855491638184f, 22.54718780517578f, 0.0f, 16.871505737304688f, 0.0843362808227539f, 18.903099060058594f, -0.2741518020629883f, -14.87706184387207f, 1.3271684646606445f, 16.871505737304688f, -0.0843362808227539f, 25.234540939331055f, 0.0f, 19.899864196777344f, 0.8093862533569336f, -15.44038200378418f, 0.613795280456543f, 18.903099060058594f, 0.2741518020629883f, 19.899864196777344f, -0.8093862533569336f, 25.085838317871094f, 0.0f, -21.225830078125f, 0.0f, 17.805347442626953f, 2.1185379028320312f, 17.86257553100586f, 0.6172943115234375f, 16.028467178344727f, 0.4069094657897949f, -17.805347442626953f, -2.1185379028320312f, 27.128141403198242f, 0.0f, 19.509246826171875f, -1.3052539825439453f, 17.45037078857422f, -0.8915376663208008f, -17.86257553100586f, -0.6172943115234375f, 19.509246826171875f, 1.3052539825439453f, 24.46462059020996f, 0.0f, 17.26470947265625f, 0.6854982376098633f, -16.028467178344727f, -0.4069094657897949f, 17.45037078857422f, 0.8915376663208008f, 17.26470947265625f, -0.6854982376098633f, 18.901601791381836f, 0.0f, -26.63841438293457f, 0.0f, 18.469343185424805f, 0.4740476608276367f, 15.33172607421875f, -2.283236503601074f, 20.397846221923828f, -0.16810035705566406f, -18.469343185424805f, -0.4740476608276367f, 22.807233810424805f, 0.0f, 14.798961639404297f, -1.9063258171081543f, 18.004959106445312f, -2.7366065979003906f, -15.33172607421875f, 2.283236503601074f, 14.798961639404297f, 1.9063258171081543f, 16.909101486206055f, 0.0f, 15.939040184020996f, -0.010777473449707031f, -20.397846221923828f, 0.16810035705566406f, 18.004959106445312f, 2.7366065979003906f, 15.939040184020996f, 0.010777473449707031f, 25.47002410888672f, 0.0f, -21.90583610534668f, 0.0f, 15.592023849487305f, -0.019426822662353516f, 16.903663635253906f, 1.3381266593933105f, 16.267126083374023f, 2.5139989852905273f, -15.592023849487305f, 0.019426822662353516f, 20.356149673461914f, 0.0f, 15.116583824157715f, 1.6197237968444824f, 15.379796981811523f, 1.4327454566955566f, -16.903663635253906f, -1.3381266593933105f, 15.116583824157715f, -1.6197237968444824f, 24.902149200439453f, 0.0f, 17.09071159362793f, 0.6975317001342773f, -16.267126083374023f, -2.5139989852905273f, 15.379796981811523f, -1.4327454566955566f, 17.09071159362793f, -0.6975317001342773f, 21.144737243652344f, 0.0f, -19.124130249023438f, 0.0f, 13.847270965576172f, 2.057042121887207f, 15.43878173828125f, 2.0999183654785156f, 14.775691032409668f, -0.12742233276367188f, -13.847270965576172f, -2.057042121887207f, 20.6329288482666f, 0.0f, 17.060871124267578f, 0.6151666641235352f, 15.481949806213379f, -1.969503402709961f, -15.43878173828125f, -2.0999183654785156f, 17.060871124267578f, -0.6151666641235352f, 25.776288986206055f, 0.0f, 18.53174591064453f, -0.3560504913330078f, -14.775691032409668f, 0.12742233276367188f, 15.481949806213379f, 1.969503402709961f, 18.53174591064453f, 0.3560504913330078f, 23.37698745727539f, 0.0f, -23.327301025390625f, 0.0f, 16.653194427490234f, 1.4518694877624512f, 16.077404022216797f, 0.6905784606933594f, 17.752487182617188f, 0.5003261566162109f, -16.653194427490234f, -1.4518694877624512f, 21.694869995117188f, 0.0f, 14.357658386230469f, -0.5733137130737305f, 15.564322471618652f, -0.7151575088500977f, -16.077404022216797f, -0.6905784606933594f, 14.357658386230469f, 0.5733137130737305f, 21.731632232666016f, 0.0f, 17.64715576171875f, 0.2692089080810547f, -17.752487182617188f, -0.5003261566162109f, 15.564322471618652f, 0.7151575088500977f, 17.64715576171875f, -0.2692089080810547f, 24.174484252929688f, 0.0f, -21.163076400756836f, 0.0f, 14.537819862365723f, -1.81439208984375f, 16.34678077697754f, -2.2427430152893066f, 16.150577545166016f, -1.5915675163269043f, -14.537819862365723f, 1.81439208984375f, 21.649906158447266f, 0.0f, 17.063274383544922f, -0.708864688873291f, 17.20510482788086f, 0.1336069107055664f, -16.34678077697754f, 2.2427430152893066f, 17.063274383544922f, 0.708864688873291f, 23.341663360595703f, 0.0f, 17.181921005249023f, 1.5814075469970703f, -16.150577545166016f, 1.5915675163269043f, 17.20510482788086f, -0.1336069107055664f, 17.181921005249023f, -1.5814075469970703f, 23.65888214111328f, 0.0f, -24.533462524414062f, 0.0f, 18.46529769897461f, -0.19507312774658203f, 15.21469497680664f, 2.4161338806152344f, 16.827199935913086f, 0.9935364723205566f, -18.46529769897461f, 0.19507312774658203f, 21.29835319519043f, 0.0f, 16.10143280029297f, 1.3172988891601562f, 16.9044189453125f, 0.12248420715332031f, -15.21469497680664f, -2.4161338806152344f, 16.10143280029297f, -1.3172988891601562f, 19.623367309570312f, 0.0f, 14.711187362670898f, -0.4163637161254883f, -16.827199935913086f, -0.9935364723205566f, 16.9044189453125f, -0.12248420715332031f, 14.711187362670898f, 0.4163637161254883f, 21.182838439941406f, 0.0f, -24.191272735595703f, 0.0f, 18.21797752380371f, -0.279266357421875f, 18.100496292114258f, 1.5145745277404785f, 18.827959060668945f, -2.371593475341797f, -18.21797752380371f, 0.279266357421875f, 23.38195037841797f, 0.0f, 16.604469299316406f, 1.9431991577148438f, 17.92401695251465f, -3.162468910217285f, -18.100496292114258f, -1.5145745277404785f, 16.604469299316406f, -1.9431991577148438f, 25.047807693481445f, 0.0f, 18.343271255493164f, -4.777757167816162f, -18.827959060668945f, 2.371593475341797f, 17.92401695251465f, 3.162468910217285f, 18.343271255493164f, 4.777757167816162f, 23.887969970703125f, 0.0f, -19.980878829956055f, 0.0f, 13.69573974609375f, 1.734388828277588f, 17.41576385498047f, -1.0431766510009766f, 14.452264785766602f, -0.9472923278808594f, -13.69573974609375f, -1.734388828277588f, 19.974740982055664f, 0.0f, 18.95020866394043f, -2.8167247772216797f, 13.749837875366211f, -2.934793472290039f, -17.41576385498047f, 1.0431766510009766f, 18.95020866394043f, 2.8167247772216797f, 27.165483474731445f, 0.0f, 17.25852394104004f, 0.2213287353515625f, -14.452264785766602f, 0.9472923278808594f, 13.749837875366211f, 2.934793472290039f, 17.25852394104004f, -0.2213287353515625f, 20.43896484375f, 0.0f, -20.289827346801758f, 0.0f, 14.087936401367188f, 3.5652389526367188f, 15.791497230529785f, 2.7247133255004883f, 15.490589141845703f, 0.6967353820800781f, -14.087936401367188f, -3.5652389526367188f, 19.749311447143555f, 0.0f, 15.53228759765625f, -1.9985737800598145f, 16.643604278564453f, -1.6219406127929688f, -15.791497230529785f, -2.7247133255004883f, 15.53228759765625f, 1.9985737800598145f, 22.15505599975586f, 0.0f, 16.67080307006836f, -1.8190035820007324f, -15.490589141845703f, -0.6967353820800781f, 16.643604278564453f, 1.6219406127929688f, 16.67080307006836f, 1.8190035820007324f, 22.724685668945312f, 0.0f, -23.01767921447754f, 0.0f, 16.019668579101562f, -0.6165289878845215f, 19.009502410888672f, 2.0139598846435547f, 17.194671630859375f, 0.1773991584777832f, -16.019668579101562f, 0.6165289878845215f, 19.597599029541016f, 0.0f, 15.293000221252441f, 2.2960543632507324f, 14.21058464050293f, -0.567324161529541f, -19.009502410888672f, -2.0139598846435547f, 15.293000221252441f, -2.2960543632507324f, 23.86880874633789f, 0.0f, 16.719697952270508f, -1.8909077644348145f, -17.194671630859375f, -0.1773991584777832f, 14.21058464050293f, 0.567324161529541f, 16.719697952270508f, 1.8909077644348145f, 21.078907012939453f, 0.0f, -18.848512649536133f, 0.0f, 13.949182510375977f, -1.4250168800354004f, 13.637954711914062f, -3.466017723083496f, 12.519454956054688f, -0.45670032501220703f, -13.949182510375977f, 1.4250168800354004f, 22.587583541870117f, 0.0f, 14.234014511108398f, 1.844062328338623f, 14.555316925048828f, 1.9982013702392578f, -13.637954711914062f, 3.466017723083496f, 14.234014511108398f, -1.844062328338623f, 20.893550872802734f, 0.0f, 14.371576309204102f, -0.0943765640258789f, -12.519454956054688f, 0.45670032501220703f, 14.555316925048828f, -1.9982013702392578f, 14.371576309204102f, 0.0943765640258789f, 19.256559371948242f, 0.0f, -26.553144454956055f, 0.0f, 19.637889862060547f, 0.44392967224121094f, 19.784006118774414f, -1.7320432662963867f, 16.166208267211914f, -1.9987444877624512f, -19.637889862060547f, -0.44392967224121094f, 24.895992279052734f, 0.0f, 19.933696746826172f, -0.5357904434204102f, 16.259368896484375f, -1.239400863647461f, -19.784006118774414f, 1.7320432662963867f, 19.933696746826172f, 0.5357904434204102f, 25.267072677612305f, 0.0f, 16.142372131347656f, -1.3560523986816406f, -16.166208267211914f, 1.9987444877624512f, 16.259368896484375f, 1.239400863647461f, 16.142372131347656f, 1.3560523986816406f, 19.57831382751465f, 0.0f, -23.04789924621582f, 0.0f, 16.321693420410156f, -2.5668139457702637f, 16.791343688964844f, 2.135972499847412f, 16.718780517578125f, 0.5154290199279785f, -16.321693420410156f, 2.5668139457702637f, 22.471477508544922f, 0.0f, 16.48006248474121f, 2.857731819152832f, 16.499366760253906f, 1.2404212951660156f, -16.791343688964844f, -2.135972499847412f, 16.48006248474121f, -2.857731819152832f, 20.45549201965332f, 0.0f, 17.269329071044922f, -1.9975385665893555f, -16.718780517578125f, -0.5154290199279785f, 16.499366760253906f, -1.2404212951660156f, 17.269329071044922f, 1.9975385665893555f, 22.424266815185547f, 0.0f, -20.131834030151367f, 0.0f, 16.00091552734375f, -0.758969783782959f, 14.04541015625f, -2.1820406913757324f, 17.80875015258789f, 0.797999382019043f, -16.00091552734375f, 0.758969783782959f, 21.9018497467041f, 0.0f, 15.804376602172852f, -1.338921070098877f, 17.496803283691406f, 1.4387812614440918f, -14.04541015625f, 2.1820406913757324f, 15.804376602172852f, 1.338921070098877f, 18.42815399169922f, 0.0f, 15.489593505859375f, 0.7303152084350586f, -17.80875015258789f, -0.797999382019043f, 17.496803283691406f, -1.4387812614440918f, 15.489593505859375f, -0.7303152084350586f, 24.448253631591797f, 0.0f, -23.568313598632812f, 0.0f, 14.0460205078125f, -0.6413593292236328f, 15.920628547668457f, 0.17860794067382812f, 19.24582290649414f, -1.5342884063720703f, -14.0460205078125f, 0.6413593292236328f, 18.344953536987305f, 0.0f, 14.366621971130371f, 0.18474483489990234f, 15.248969078063965f, -1.338059902191162f, -15.920628547668457f, -0.17860794067382812f, 14.366621971130371f, -0.18474483489990234f, 21.153854370117188f, 0.0f, 16.70583724975586f, -0.37014198303222656f, -19.24582290649414f, 1.5342884063720703f, 15.248969078063965f, 1.338059902191162f, 16.70583724975586f, 0.37014198303222656f, 25.021631240844727f, 0.0f, -23.488780975341797f, 0.0f, 17.436376571655273f, -1.2474594116210938f, 17.67868995666504f, -1.5279407501220703f, 16.021820068359375f, -1.0124669075012207f, -17.436376571655273f, 1.2474594116210938f, 21.41313934326172f, 0.0f, 16.3671817779541f, -0.39748716354370117f, 13.854995727539062f, -1.1604290008544922f, -17.67868995666504f, 1.5279407501220703f, 16.3671817779541f, 0.39748716354370117f, 22.246488571166992f, 0.0f, 16.572307586669922f, 0.5810108184814453f, -16.021820068359375f, 1.0124669075012207f, 13.854995727539062f, 1.1604290008544922f, 16.572307586669922f, -0.5810108184814453f, 19.28145408630371f, 0.0f, -22.273761749267578f, 0.0f, 17.481887817382812f, 2.553635597229004f, 17.401031494140625f, 1.3727226257324219f, 15.398078918457031f, 3.2299623489379883f, -17.481887817382812f, -2.553635597229004f, 21.850154876708984f, 0.0f, 17.19963264465332f, -1.453857421875f, 14.927098274230957f, 0.7449016571044922f, -17.401031494140625f, -1.3727226257324219f, 17.19963264465332f, 1.453857421875f, 23.299047470092773f, 0.0f, 16.273515701293945f, 2.8816542625427246f, -15.398078918457031f, -3.2299623489379883f, 14.927098274230957f, -0.7449016571044922f, 16.273515701293945f, -2.8816542625427246f, 19.77521324157715f, 0.0f, -21.183963775634766f, 0.0f, 13.386272430419922f, -1.626939296722412f, 15.1171875f, -2.8652944564819336f, 15.178093910217285f, -3.400297164916992f, -13.386272430419922f, 1.626939296722412f, 19.869277954101562f, 0.0f, 14.719072341918945f, -1.2475132942199707f, 15.521930694580078f, -2.820934295654297f, -15.1171875f, 2.8652944564819336f, 14.719072341918945f, 1.2475132942199707f, 20.548900604248047f, 0.0f, 15.866316795349121f, -1.6820197105407715f, -15.178093910217285f, 3.400297164916992f, 15.521930694580078f, 2.820934295654297f, 15.866316795349121f, 1.6820197105407715f, 22.428953170776367f, 0.0f, -24.40384292602539f, 0.0f, 17.233335494995117f, -0.22369670867919922f, 19.431766510009766f, -0.5446949005126953f, 18.55576515197754f, -0.08618354797363281f, -17.233335494995117f, 0.22369670867919922f, 23.25176239013672f, 0.0f, 16.318994522094727f, -0.6753120422363281f, 19.26217269897461f, -0.10872936248779297f, -19.431766510009766f, 0.5446949005126953f, 16.318994522094727f, 0.6753120422363281f, 24.583637237548828f, 0.0f, 19.03276824951172f, 0.8566627502441406f, -18.55576515197754f, 0.08618354797363281f, 19.26217269897461f, 0.10872936248779297f, 19.03276824951172f, -0.8566627502441406f, 25.377344131469727f, 0.0f, -18.99209976196289f, 0.0f, 15.000825881958008f, 2.9242658615112305f, 14.52610969543457f, 0.02064037322998047f, 15.807966232299805f, 0.011048316955566406f, -15.000825881958008f, -2.9242658615112305f, 21.339214324951172f, 0.0f, 16.157024383544922f, -2.7338032722473145f, 16.22149658203125f, -1.8902082443237305f, -14.52610969543457f, -0.02064037322998047f, 16.157024383544922f, 2.7338032722473145f, 20.649349212646484f, 0.0f, 16.166568756103516f, 0.0031652450561523438f, -15.807966232299805f, -0.011048316955566406f, 16.22149658203125f, 1.8902082443237305f, 16.166568756103516f, -0.0031652450561523438f, 23.19734001159668f, 0.0f, -22.784133911132812f, 0.0f, 12.710981369018555f, 0.5308914184570312f, 17.891864776611328f, -0.7428388595581055f, 15.732990264892578f, 2.283944606781006f, -12.710981369018555f, -0.5308914184570312f, 17.815269470214844f, 0.0f, 15.695314407348633f, -1.3634696006774902f, 13.750286102294922f, -0.12127828598022461f, -17.891864776611328f, 0.7428388595581055f, 15.695314407348633f, 1.3634696006774902f, 27.31424331665039f, 0.0f, 17.774988174438477f, 1.8194952011108398f, -15.732990264892578f, -2.283944606781006f, 13.750286102294922f, 0.12127828598022461f, 17.774988174438477f, -1.8194952011108398f, 21.01193618774414f, 0.0f, -19.428205490112305f, 0.0f, 15.248598098754883f, -4.624457359313965f, 16.922338485717773f, -1.5945396423339844f, 15.623851776123047f, -4.073094844818115f, -15.248598098754883f, 4.624457359313965f, 24.79376220703125f, 0.0f, 17.0262508392334f, 3.6914854049682617f, 18.33782196044922f, 1.2018041610717773f, -16.922338485717773f, 1.5945396423339844f, 17.0262508392334f, -3.6914854049682617f, 24.516151428222656f, 0.0f, 17.757022857666016f, -3.1030735969543457f, -15.623851776123047f, 4.073094844818115f, 18.33782196044922f, -1.2018041610717773f, 17.757022857666016f, 3.1030735969543457f, 23.28403091430664f, 0.0f, -21.64803123474121f, 0.0f, 16.42295265197754f, -1.1854686737060547f, 14.65176010131836f, -0.3687577247619629f, 15.17987060546875f, -1.235720157623291f, -16.42295265197754f, 1.1854686737060547f, 24.046567916870117f, 0.0f, 17.272794723510742f, -0.7628564834594727f, 16.651641845703125f, -1.3498506546020508f, -14.65176010131836f, 0.3687577247619629f, 17.272794723510742f, 0.7628564834594727f, 20.737184524536133f, 0.0f, 14.795790672302246f, -2.105055332183838f, -15.17987060546875f, 1.235720157623291f, 16.651641845703125f, 1.3498506546020508f, 14.795790672302246f, 2.105055332183838f, 21.38180923461914f, 0.0f, -19.498779296875f, 0.0f, 13.911189079284668f, -1.642993450164795f, 13.391851425170898f, -0.1106257438659668f, 16.297990798950195f, 0.5796966552734375f, -13.911189079284668f, 1.642993450164795f, 17.936336517333984f, 0.0f, 11.607820510864258f, 1.3291292190551758f, 14.998821258544922f, 1.8147521018981934f, -13.391851425170898f, 0.1106257438659668f, 11.607820510864258f, -1.3291292190551758f, 16.2199649810791f, 0.0f, 14.04206657409668f, 0.8075909614562988f, -16.297990798950195f, -0.5796966552734375f, 14.998821258544922f, -1.8147521018981934f, 14.04206657409668f, -0.8075909614562988f, 22.67682456970215f, 0.0f, -27.848466873168945f, 0.0f, 17.92770004272461f, -3.408331871032715f, 19.68204689025879f, -2.6481103897094727f, 17.866252899169922f, -1.4211273193359375f, -17.92770004272461f, 3.408331871032715f, 21.236106872558594f, 0.0f, 16.023082733154297f, 3.3047842979431152f, 13.2866849899292f, 1.696906566619873f, -19.68204689025879f, 2.6481103897094727f, 16.023082733154297f, -3.3047842979431152f, 23.774349212646484f, 0.0f, 15.28111457824707f, -1.002978801727295f, -17.866252899169922f, 1.4211273193359375f, 13.2866849899292f, -1.696906566619873f, 15.28111457824707f, 1.002978801727295f, 21.347461700439453f, 0.0f, -24.8713321685791f, 0.0f, 17.893489837646484f, 1.7231178283691406f, 15.521163940429688f, -0.910881519317627f, 16.89021873474121f, 0.567042350769043f, -17.893489837646484f, -1.7231178283691406f, 20.177183151245117f, 0.0f, 12.90981674194336f, -2.3743443489074707f, 15.726655960083008f, -1.9974627494812012f, -15.521163940429688f, 0.910881519317627f, 12.90981674194336f, 2.3743443489074707f, 18.44573402404785f, 0.0f, 13.89358901977539f, 1.0981106758117676f, -16.89021873474121f, -0.567042350769043f, 15.726655960083008f, 1.9974627494812012f, 13.89358901977539f, -1.0981106758117676f, 19.972095489501953f, 0.0f, -22.38611602783203f, 0.0f, 17.085006713867188f, -0.016710281372070312f, 15.66354751586914f, -2.448312282562256f, 16.54210090637207f, 0.5182576179504395f, -17.085006713867188f, 0.016710281372070312f, 19.739572525024414f, 0.0f, 14.10295295715332f, -2.3332629203796387f, 15.152469635009766f, 1.6918988227844238f, -15.66354751586914f, 2.448312282562256f, 14.10295295715332f, 2.3332629203796387f, 20.741830825805664f, 0.0f, 13.677050590515137f, 3.0832481384277344f, -16.54210090637207f, -0.5182576179504395f, 15.152469635009766f, -1.6918988227844238f, 13.677050590515137f, -3.0832481384277344f, 19.15237808227539f, 0.0f, -21.002670288085938f, 0.0f, 14.990205764770508f, 1.4174809455871582f, 14.872331619262695f, 2.7500863075256348f, 15.876102447509766f, -0.6719026565551758f, -14.990205764770508f, -1.4174809455871582f, 22.663694381713867f, 0.0f, 16.32114028930664f, -0.25516700744628906f, 15.762189865112305f, -0.44542503356933594f, -14.872331619262695f, -2.7500863075256348f, 16.32114028930664f, 0.25516700744628906f, 21.66021156311035f, 0.0f, 15.947420120239258f, -2.134106159210205f, -15.876102447509766f, 0.6719026565551758f, 15.762189865112305f, 0.44542503356933594f, 15.947420120239258f, 2.134106159210205f, 19.70169448852539f, 0.0f, -23.280502319335938f, 0.0f, 15.192937850952148f, -1.435758113861084f, 16.206260681152344f, -0.4689474105834961f, 16.09491729736328f, -1.5743393898010254f, -15.192937850952148f, 1.435758113861084f, 20.204118728637695f, 0.0f, 14.68304443359375f, -1.3532028198242188f, 14.890092849731445f, -1.22633695602417f, -16.206260681152344f, 0.4689474105834961f, 14.68304443359375f, 1.3532028198242188f, 19.763538360595703f, 0.0f, 14.552599906921387f, 0.420717716217041f, -16.09491729736328f, 1.5743393898010254f, 14.890092849731445f, 1.22633695602417f, 14.552599906921387f, -0.420717716217041f, 20.333520889282227f, 0.0f, -21.32689094543457f, 0.0f, 16.15463638305664f, 0.7852678298950195f, 16.492992401123047f, 2.5348715782165527f, 14.797313690185547f, 2.1171751022338867f, -16.15463638305664f, -0.7852678298950195f, 20.85955238342285f, 0.0f, 17.13924217224121f, 1.984778881072998f, 15.585090637207031f, 0.8460912704467773f, -16.492992401123047f, -2.5348715782165527f, 17.13924217224121f, -1.984778881072998f, 22.83735466003418f, 0.0f, 15.359646797180176f, -1.027414321899414f, -14.797313690185547f, -2.1171751022338867f, 15.585090637207031f, -0.8460912704467773f, 15.359646797180176f, 1.027414321899414f, 21.107099533081055f, 0.0f, -23.86609649658203f, 0.0f, 18.504411697387695f, 1.621847152709961f, 17.582839965820312f, 3.1694231033325195f, 17.71129035949707f, 0.10686111450195312f, -18.504411697387695f, -1.621847152709961f, 24.439916610717773f, 0.0f, 17.164825439453125f, 1.15681791305542f, 15.147628784179688f, -0.28224945068359375f, -17.582839965820312f, -3.1694231033325195f, 17.164825439453125f, -1.15681791305542f, 21.98402976989746f, 0.0f, 15.914824485778809f, -2.003032684326172f, -17.71129035949707f, -0.10686111450195312f, 15.147628784179688f, 0.28224945068359375f, 15.914824485778809f, 2.003032684326172f, 21.364906311035156f, 0.0f, -19.871156692504883f, 0.0f, 16.74314308166504f, 3.343639373779297f, 13.132715225219727f, 1.1086711883544922f, 15.381746292114258f, -0.2808494567871094f, -16.74314308166504f, -3.343639373779297f, 27.509130477905273f, 0.0f, 15.456799507141113f, -0.2134718894958496f, 19.57361602783203f, -3.4266252517700195f, -13.132715225219727f, -1.1086711883544922f, 15.456799507141113f, 0.2134718894958496f, 17.93489646911621f, 0.0f, 13.537858963012695f, -0.1607651710510254f, -15.381746292114258f, 0.2808494567871094f, 19.57361602783203f, 3.4266252517700195f, 13.537858963012695f, 0.1607651710510254f, 22.224212646484375f, 0.0f, -22.449783325195312f, 0.0f, 16.46270751953125f, 1.541947364807129f, 15.389622688293457f, -1.2317485809326172f, 17.47652816772461f, -3.0112133026123047f, -16.46270751953125f, -1.541947364807129f, 23.785194396972656f, 0.0f, 14.467316627502441f, -0.4593648910522461f, 16.604055404663086f, -2.5043067932128906f, -15.389622688293457f, 1.2317485809326172f, 14.467316627502441f, 0.4593648910522461f, 19.405885696411133f, 0.0f, 14.153586387634277f, -1.076000690460205f, -17.47652816772461f, 3.0112133026123047f, 16.604055404663086f, 2.5043067932128906f, 14.153586387634277f, 1.076000690460205f, 22.995542526245117f, 0.0f, -23.659652709960938f, 0.0f, 17.644472122192383f, 0.07744026184082031f, 16.983386993408203f, -0.9804859161376953f, 17.148082733154297f, -0.054584503173828125f, -17.644472122192383f, -0.07744026184082031f, 22.936912536621094f, 0.0f, 16.510725021362305f, 0.9160761833190918f, 16.920137405395508f, 0.8215689659118652f, -16.983386993408203f, 0.9804859161376953f, 16.510725021362305f, -0.9160761833190918f, 21.530906677246094f, 0.0f, 15.918073654174805f, 0.4082365036010742f, -17.148082733154297f, 0.054584503173828125f, 16.920137405395508f, -0.8215689659118652f, 15.918073654174805f, -0.4082365036010742f, 22.401248931884766f, 0.0f, -19.65812873840332f, 0.0f, 13.91363525390625f, -0.765254020690918f, 14.522821426391602f, -0.13027191162109375f, 15.823526382446289f, 0.15809011459350586f, -13.91363525390625f, 0.765254020690918f, 22.674528121948242f, 0.0f, 15.849822998046875f, 0.9936785697937012f, 15.357732772827148f, 0.7884860038757324f, -14.522821426391602f, 0.13027191162109375f, 15.849822998046875f, -0.9936785697937012f, 21.133167266845703f, 0.0f, 15.60604476928711f, -0.46016550064086914f, -15.823526382446289f, -0.15809011459350586f, 15.357732772827148f, -0.7884860038757324f, 15.60604476928711f, 0.46016550064086914f, 20.30949592590332f, 0.0f, -22.799997329711914f, 0.0f, 16.20953369140625f, -1.933971881866455f, 14.815479278564453f, -3.525521755218506f, 16.113643646240234f, -0.1022653579711914f, -16.20953369140625f, 1.933971881866455f, 19.652481079101562f, 0.0f, 13.779863357543945f, -0.695889949798584f, 14.40199089050293f, -0.8212456703186035f, -14.815479278564453f, 3.525521755218506f, 13.779863357543945f, 0.695889949798584f, 19.349945068359375f, 0.0f, 13.543289184570312f, 1.649960994720459f, -16.113643646240234f, 0.1022653579711914f, 14.40199089050293f, 0.8212456703186035f, 13.543289184570312f, -1.649960994720459f, 19.734365463256836f, 0.0f, -19.85536766052246f, 0.0f, 16.379207611083984f, 0.9147820472717285f, 15.322175979614258f, -0.9732475280761719f, 13.475900650024414f, -1.4686555862426758f, -16.379207611083984f, -0.9147820472717285f, 23.85618782043457f, 0.0f, 18.833789825439453f, -1.967893123626709f, 16.337329864501953f, -2.2540154457092285f, -15.322175979614258f, 0.9732475280761719f, 18.833789825439453f, 1.967893123626709f, 22.51734733581543f, 0.0f, 17.055908203125f, -0.17067909240722656f, -13.475900650024414f, 1.4686555862426758f, 16.337329864501953f, 2.2540154457092285f, 17.055908203125f, 0.17067909240722656f, 20.255979537963867f, 0.0f, -20.18259048461914f, 0.0f, 15.472188949584961f, -3.473006248474121f, 13.629162788391113f, -0.3836679458618164f, 16.10544204711914f, -2.2226223945617676f, -15.472188949584961f, 3.473006248474121f, 21.59741973876953f, 0.0f, 14.010796546936035f, 2.0361461639404297f, 15.060954093933105f, -0.14653873443603516f, -13.629162788391113f, 0.3836679458618164f, 14.010796546936035f, -2.0361461639404297f, 21.681581497192383f, 0.0f, 15.187061309814453f, -3.603879451751709f, -16.10544204711914f, 2.2226223945617676f, 15.060954093933105f, 0.14653873443603516f, 15.187061309814453f, 3.603879451751709f, 22.937416076660156f, 0.0f, -24.517822265625f, 0.0f, 17.09076690673828f, 3.144324779510498f, 18.8651065826416f, 2.286344528198242f, 17.89851951599121f, 2.1832284927368164f, -17.09076690673828f, -3.144324779510498f, 22.85783576965332f, 0.0f, 15.929088592529297f, -1.3987421989440918f, 17.57402801513672f, -1.9225883483886719f, -18.8651065826416f, -2.286344528198242f, 15.929088592529297f, 1.3987421989440918f, 23.210189819335938f, 0.0f, 17.57235336303711f, 1.181868076324463f, -17.89851951599121f, -2.1832284927368164f, 17.57402801513672f, 1.9225883483886719f, 17.57235336303711f, -1.181868076324463f, 22.265995025634766f, 0.0f, -18.52529525756836f, 0.0f, 13.529010772705078f, 4.121129512786865f, 13.523946762084961f, 2.5757856369018555f, 12.76553726196289f, 3.2435660362243652f, -13.529010772705078f, -4.121129512786865f, 21.043460845947266f, 0.0f, 16.37519073486328f, -3.0538454055786133f, 15.001075744628906f, -2.882059097290039f, -13.523946762084961f, -2.5757856369018555f, 16.37519073486328f, 3.0538454055786133f, 21.164600372314453f, 0.0f, 14.13100814819336f, 0.4783153533935547f, -12.76553726196289f, -3.2435660362243652f, 15.001075744628906f, 2.882059097290039f, 14.13100814819336f, -0.4783153533935547f, 17.99212074279785f, 0.0f, -23.916305541992188f, 0.0f, 16.930696487426758f, -2.6385722160339355f, 17.96435546875f, 1.4977083206176758f, 15.800511360168457f, -1.0567898750305176f, -16.930696487426758f, 2.6385722160339355f, 20.32594871520996f, 0.0f, 15.423760414123535f, 3.9068078994750977f, 15.42624282836914f, 2.6363301277160645f, -17.96435546875f, -1.4977083206176758f, 15.423760414123535f, -3.9068078994750977f, 23.055438995361328f, 0.0f, 14.976785659790039f, -3.0124173164367676f, -15.800511360168457f, 1.0567898750305176f, 15.42624282836914f, -2.6363301277160645f, 14.976785659790039f, 3.0124173164367676f, 21.16156768798828f, 0.0f, -23.704097747802734f, 0.0f, 15.85894775390625f, -0.2608785629272461f, 17.188236236572266f, 1.712191104888916f, 15.999988555908203f, 3.4866013526916504f, -15.85894775390625f, 0.2608785629272461f, 19.72802734375f, 0.0f, 14.364541053771973f, 1.1947474479675293f, 13.7545166015625f, 0.605522632598877f, -17.188236236572266f, -1.712191104888916f, 14.364541053771973f, -1.1947474479675293f, 20.860916137695312f, 0.0f, 14.492664337158203f, 1.0920777320861816f, -15.999988555908203f, -3.4866013526916504f, 13.7545166015625f, -0.605522632598877f, 14.492664337158203f, -1.0920777320861816f, 19.893390655517578f, 0.0f, -18.566509246826172f, 0.0f, 16.456369400024414f, -1.0383591651916504f, 14.324183464050293f, 0.5429544448852539f, 15.534749031066895f, 0.5591530799865723f, -16.456369400024414f, 1.0383591651916504f, 26.736557006835938f, 0.0f, 18.558134078979492f, 4.256499767303467f, 21.22332191467285f, 3.530202865600586f, -14.324183464050293f, -0.5429544448852539f, 18.558134078979492f, -4.256499767303467f, 23.909391403198242f, 0.0f, 17.447998046875f, -0.44849109649658203f, -15.534749031066895f, -0.5591530799865723f, 21.22332191467285f, -3.530202865600586f, 17.447998046875f, 0.44849109649658203f, 23.920982360839844f, 0.0f, -21.548603057861328f, 0.0f, 13.30776596069336f, -0.6173553466796875f, 17.736778259277344f, 0.663640022277832f, 17.06753158569336f, 2.695591449737549f, -13.30776596069336f, 0.6173553466796875f, 17.8670597076416f, 0.0f, 13.401776313781738f, 0.16095304489135742f, 13.760469436645508f, 2.7757067680358887f, -17.736778259277344f, -0.663640022277832f, 13.401776313781738f, -0.16095304489135742f, 23.519723892211914f, 0.0f, 17.80951690673828f, 1.0558652877807617f, -17.06753158569336f, -2.695591449737549f, 13.760469436645508f, -2.7757067680358887f, 17.80951690673828f, -1.0558652877807617f, 22.58300018310547f, 0.0f, -24.615934371948242f, 0.0f, 15.204246520996094f, -1.2858409881591797f, 16.288236618041992f, -0.8260030746459961f, 16.154239654541016f, 0.20879173278808594f, -15.204246520996094f, 1.2858409881591797f, 16.222869873046875f, 0.0f, 12.068811416625977f, -0.7760629653930664f, 13.344903945922852f, 1.0873637199401855f, -16.288236618041992f, 0.8260030746459961f, 12.068811416625977f, 0.7760629653930664f, 20.00895881652832f, 0.0f, 14.55086898803711f, -0.11778736114501953f, -16.154239654541016f, -0.20879173278808594f, 13.344903945922852f, -1.0873637199401855f, 14.55086898803711f, 0.11778736114501953f, 20.095516204833984f, 0.0f, -22.02332305908203f, 0.0f, 16.366682052612305f, -1.2170476913452148f, 17.876693725585938f, 0.5230684280395508f, 14.88322925567627f, -0.05163097381591797f, -16.366682052612305f, 1.2170476913452148f, 21.917724609375f, 0.0f, 19.190128326416016f, 2.425320625305176f, 14.886526107788086f, 0.2229747772216797f, -17.876693725585938f, -0.5230684280395508f, 19.190128326416016f, -2.425320625305176f, 28.4399471282959f, 0.0f, 17.123804092407227f, -1.686389446258545f, -14.88322925567627f, 0.05163097381591797f, 14.886526107788086f, -0.2229747772216797f, 17.123804092407227f, 1.686389446258545f, 18.674819946289062f, 0.0f, -23.469139099121094f, 0.0f, 17.559894561767578f, 1.7193164825439453f, 18.0609130859375f, 0.5266885757446289f, 17.105056762695312f, 2.387969970703125f, -17.559894561767578f, -1.7193164825439453f, 25.545804977416992f, 0.0f, 20.521547317504883f, -0.12798404693603516f, 19.03376579284668f, 1.6387672424316406f, -18.0609130859375f, -0.5266885757446289f, 20.521547317504883f, 0.12798404693603516f, 25.032480239868164f, 0.0f, 17.20720672607422f, 2.9107937812805176f, -17.105056762695312f, -2.387969970703125f, 19.03376579284668f, -1.6387672424316406f, 17.20720672607422f, -2.9107937812805176f, 22.068164825439453f, 0.0f, -20.89256477355957f, 0.0f, 16.943058013916016f, 0.26320362091064453f, 15.120830535888672f, 0.0373687744140625f, 17.379669189453125f, -1.1355829238891602f, -16.943058013916016f, -0.26320362091064453f, 24.91421890258789f, 0.0f, 18.431663513183594f, 1.4376354217529297f, 20.833145141601562f, -1.6239032745361328f, -15.120830535888672f, -0.0373687744140625f, 18.431663513183594f, -1.4376354217529297f, 24.73811149597168f, 0.0f, 21.215259552001953f, -1.2147903442382812f, -17.379669189453125f, 1.1355829238891602f, 20.833145141601562f, 1.6239032745361328f, 21.215259552001953f, 1.2147903442382812f, 27.337596893310547f, 0.0f, -26.00118637084961f, 0.0f, 16.40736961364746f, 2.867128849029541f, 17.913166046142578f, -0.8670902252197266f, 18.597862243652344f, -0.5085773468017578f, -16.40736961364746f, -2.867128849029541f, 20.266525268554688f, 0.0f, 16.00124168395996f, -2.708531379699707f, 16.97739028930664f, -2.8679795265197754f, -17.913166046142578f, 0.8670902252197266f, 16.00124168395996f, 2.708531379699707f, 21.153703689575195f, 0.0f, 16.89202117919922f, 0.07211780548095703f, -18.597862243652344f, 0.5085773468017578f, 16.97739028930664f, 2.8679795265197754f, 16.89202117919922f, -0.07211780548095703f, 24.213420867919922f, 0.0f, -21.596914291381836f, 0.0f, 17.126407623291016f, -0.7002582550048828f, 13.308145523071289f, 0.5226917266845703f, 15.876094818115234f, -1.4352517127990723f, -17.126407623291016f, 0.7002582550048828f, 23.163589477539062f, 0.0f, 13.476672172546387f, -0.8218178749084473f, 16.320920944213867f, -1.3323793411254883f, -13.308145523071289f, -0.5226917266845703f, 13.476672172546387f, 0.8218178749084473f, 16.87248420715332f, 0.0f, 14.59999942779541f, -2.063549041748047f, -15.876094818115234f, 1.4352517127990723f, 16.320920944213867f, 1.3323793411254883f, 14.59999942779541f, 2.063549041748047f, 23.71837043762207f, 0.0f, -23.411666870117188f, 0.0f, 16.353443145751953f, -0.7244706153869629f, 18.9390869140625f, -0.9639301300048828f, 17.894317626953125f, 0.1347484588623047f, -16.353443145751953f, 0.7244706153869629f, 18.779436111450195f, 0.0f, 16.69635009765625f, 1.0941815376281738f, 15.475257873535156f, 1.8400816917419434f, -18.9390869140625f, 0.9639301300048828f, 16.69635009765625f, -1.0941815376281738f, 22.59479331970215f, 0.0f, 18.69055938720703f, 0.7254095077514648f, -17.894317626953125f, -0.1347484588623047f, 15.475257873535156f, -1.8400816917419434f, 18.69055938720703f, -0.7254095077514648f, 25.335819244384766f, 0.0f, -21.697378158569336f, 0.0f, 18.582595825195312f, 1.4628753662109375f, 17.01525115966797f, 1.818990707397461f, 17.259994506835938f, 0.7559194564819336f, -18.582595825195312f, -1.4628753662109375f, 23.825971603393555f, 0.0f, 18.36219024658203f, -0.23453426361083984f, 16.183786392211914f, -0.4878883361816406f, -17.01525115966797f, -1.818990707397461f, 18.36219024658203f, 0.23453426361083984f, 23.519746780395508f, 0.0f, 16.53221321105957f, -1.5394749641418457f, -17.259994506835938f, -0.7559194564819336f, 16.183786392211914f, 0.4878883361816406f, 16.53221321105957f, 1.5394749641418457f, 20.482711791992188f, 0.0f, -21.78971290588379f, 0.0f, 15.084455490112305f, 1.8960356712341309f, 13.222701072692871f, 0.1649174690246582f, 18.249950408935547f, 3.286966323852539f, -15.084455490112305f, -1.8960356712341309f, 21.616762161254883f, 0.0f, 12.269763946533203f, -2.5525336265563965f, 17.68858528137207f, -0.579625129699707f, -13.222701072692871f, -0.1649174690246582f, 12.269763946533203f, 2.5525336265563965f, 15.24647331237793f, 0.0f, 14.598503112792969f, 2.675394058227539f, -18.249950408935547f, -3.286966323852539f, 17.68858528137207f, 0.579625129699707f, 14.598503112792969f, -2.675394058227539f, 24.71462059020996f, 0.0f, -18.756118774414062f, 0.0f, 15.247663497924805f, 1.166663646697998f, 14.51630687713623f, -1.7954659461975098f, 14.40336799621582f, 1.6965699195861816f, -15.247663497924805f, -1.166663646697998f, 24.870946884155273f, 0.0f, 18.367984771728516f, -4.261307716369629f, 17.708005905151367f, 1.4381828308105469f, -14.51630687713623f, 1.7954659461975098f, 18.367984771728516f, 4.261307716369629f, 22.37517547607422f, 0.0f, 16.126556396484375f, 4.162751197814941f, -14.40336799621582f, -1.6965699195861816f, 17.708005905151367f, -1.4381828308105469f, 16.126556396484375f, -4.162751197814941f, 21.79039192199707f, 0.0f, -19.966524124145508f, 0.0f, 13.978801727294922f, 0.6308584213256836f, 13.333974838256836f, -0.5239400863647461f, 15.223443984985352f, 0.6955866813659668f, -13.978801727294922f, -0.6308584213256836f, 20.61100196838379f, 0.0f, 13.989616394042969f, 0.19777488708496094f, 15.080439567565918f, 0.5315065383911133f, -13.333974838256836f, 0.5239400863647461f, 13.989616394042969f, -0.19777488708496094f, 20.039804458618164f, 0.0f, 15.697820663452148f, -0.8908867835998535f, -15.223443984985352f, -0.6955866813659668f, 15.080439567565918f, -0.5315065383911133f, 15.697820663452148f, 0.8908867835998535f, 23.52448081970215f, 0.0f, -22.168548583984375f, 0.0f, 14.957574844360352f, -0.4506216049194336f, 16.130605697631836f, 1.1894712448120117f, 16.028972625732422f, 1.5670642852783203f, -14.957574844360352f, 0.4506216049194336f, 19.807212829589844f, 0.0f, 17.35369110107422f, 2.134904384613037f, 13.919153213500977f, 2.4787888526916504f, -16.130605697631836f, -1.1894712448120117f, 17.35369110107422f, -2.134904384613037f, 23.010725021362305f, 0.0f, 16.46804428100586f, 0.5132451057434082f, -16.028972625732422f, -1.5670642852783203f, 13.919153213500977f, -2.4787888526916504f, 16.46804428100586f, -0.5132451057434082f, 20.489248275756836f, 0.0f, -22.770099639892578f, 0.0f, 18.72587013244629f, 1.8425278663635254f, 17.160741806030273f, 1.9099116325378418f, 16.352413177490234f, 3.2327218055725098f, -18.72587013244629f, -1.8425278663635254f, 24.063417434692383f, 0.0f, 18.23518180847168f, 0.0200347900390625f, 17.114421844482422f, 0.41680240631103516f, -17.160741806030273f, -1.9099116325378418f, 18.23518180847168f, -0.0200347900390625f, 22.293582916259766f, 0.0f, 16.96527862548828f, 0.3287386894226074f, -16.352413177490234f, -3.2327218055725098f, 17.114421844482422f, -0.41680240631103516f, 16.96527862548828f, -0.3287386894226074f, 20.97092056274414f, 0.0f, -20.545658111572266f, 0.0f, 14.681381225585938f, -1.3886237144470215f, 16.098812103271484f, 0.5742588043212891f, 17.43914031982422f, 1.4859914779663086f, -14.681381225585938f, 1.3886237144470215f, 17.543825149536133f, 0.0f, 15.291704177856445f, 0.7088918685913086f, 17.134559631347656f, 4.131263732910156f, -16.098812103271484f, -0.5742588043212891f, 15.291704177856445f, -0.7088918685913086f, 22.754579544067383f, 0.0f, 20.498607635498047f, 4.19367790222168f, -17.43914031982422f, -1.4859914779663086f, 17.134559631347656f, -4.131263732910156f, 20.498607635498047f, -4.19367790222168f, 28.277984619140625f, 0.0f, -22.351409912109375f, 0.0f, 14.541938781738281f, 2.0549116134643555f, 16.903076171875f, 0.8656044006347656f, 16.265399932861328f, 0.8650631904602051f, -14.541938781738281f, -2.0549116134643555f, 17.715234756469727f, 0.0f, 14.480724334716797f, -1.3758063316345215f, 14.597700119018555f, -2.235351085662842f, -16.903076171875f, -0.8656044006347656f, 14.480724334716797f, 1.3758063316345215f, 22.98236083984375f, 0.0f, 16.526987075805664f, 0.6418476104736328f, -16.265399932861328f, -0.8650631904602051f, 14.597700119018555f, 2.235351085662842f, 16.526987075805664f, -0.6418476104736328f, 22.19980239868164f, 0.0f, -20.30024528503418f, 0.0f, 15.858031272888184f, -1.1120452880859375f, 16.522884368896484f, 1.6769413948059082f, 14.799956321716309f, 1.1932296752929688f, -15.858031272888184f, 1.1120452880859375f, 23.468156814575195f, 0.0f, 17.235382080078125f, 3.012862205505371f, 19.094844818115234f, 1.5177383422851562f, -16.522884368896484f, -1.6769413948059082f, 17.235382080078125f, -3.012862205505371f, 22.094860076904297f, 0.0f, 16.11214828491211f, -2.208981513977051f, -14.799956321716309f, -1.1932296752929688f, 19.094844818115234f, -1.5177383422851562f, 16.11214828491211f, 2.208981513977051f, 21.75168800354004f, 0.0f, -21.879064559936523f, 0.0f, 16.615615844726562f, -0.5341253280639648f, 16.300193786621094f, -2.837353229522705f, 16.435379028320312f, -0.4719552993774414f, -16.615615844726562f, 0.5341253280639648f, 24.040151596069336f, 0.0f, 15.479832649230957f, -1.6522068977355957f, 16.59063148498535f, 0.0002384185791015625f, -16.300193786621094f, 2.837353229522705f, 15.479832649230957f, 1.6522068977355957f, 21.91326904296875f, 0.0f, 15.948298454284668f, 1.4067192077636719f, -16.435379028320312f, 0.4719552993774414f, 16.59063148498535f, -0.0002384185791015625f, 15.948298454284668f, -1.4067192077636719f, 22.330936431884766f, 0.0f, -19.537736892700195f, 0.0f, 15.75684642791748f, -1.4128718376159668f, 13.170047760009766f, 0.5554347038269043f, 17.940921783447266f, 2.3264083862304688f, -15.75684642791748f, 1.4128718376159668f, 20.115833282470703f, 0.0f, 14.067028045654297f, 0.9059548377990723f, 16.362451553344727f, 2.931865692138672f, -13.170047760009766f, -0.5554347038269043f, 14.067028045654297f, -0.9059548377990723f, 17.698638916015625f, 0.0f, 13.75208568572998f, 0.5932283401489258f, -17.940921783447266f, -2.3264083862304688f, 16.362451553344727f, -2.931865692138672f, 13.75208568572998f, -0.5932283401489258f, 23.83642578125f, 0.0f, -24.44513702392578f, 0.0f, 16.723482131958008f, 0.6425619125366211f, 18.8398380279541f, 0.015585899353027344f, 18.02106475830078f, -0.23580265045166016f, -16.723482131958008f, -0.6425619125366211f, 21.851318359375f, 0.0f, 17.104938507080078f, -2.0445022583007812f, 15.62027645111084f, -0.9215970039367676f, -18.8398380279541f, -0.015585899353027344f, 17.104938507080078f, 2.0445022583007812f, 24.584896087646484f, 0.0f, 16.005712509155273f, -1.0969018936157227f, -18.02106475830078f, 0.23580265045166016f, 15.62027645111084f, 0.9215970039367676f, 16.005712509155273f, 1.0969018936157227f, 21.176776885986328f, 0.0f, -17.57014274597168f, 0.0f, 14.380300521850586f, 1.7514309883117676f, 14.160152435302734f, 1.1749582290649414f, 12.764008522033691f, 0.4643545150756836f, -14.380300521850586f, -1.7514309883117676f, 20.030797958374023f, 0.0f, 15.42302131652832f, -0.7721529006958008f, 12.91325569152832f, -0.4170370101928711f, -14.160152435302734f, -1.1749582290649414f, 15.42302131652832f, 0.7721529006958008f, 21.15298843383789f, 0.0f, 15.187512397766113f, -0.1256403923034668f, -12.764008522033691f, -0.4643545150756836f, 12.91325569152832f, 0.4170370101928711f, 15.187512397766113f, 0.1256403923034668f, 18.000320434570312f, 0.0f, -24.41747283935547f, 0.0f, 16.613454818725586f, 2.9913992881774902f, 15.86288833618164f, -0.8680601119995117f, 18.233173370361328f, 1.9475288391113281f, -16.613454818725586f, -2.9913992881774902f, 23.273292541503906f, 0.0f, 13.590555191040039f, -1.0894136428833008f, 18.326139450073242f, 0.18340778350830078f, -15.86288833618164f, 0.8680601119995117f, 13.590555191040039f, 1.0894136428833008f, 19.224729537963867f, 0.0f, 16.844058990478516f, 2.426448345184326f, -18.233173370361328f, -1.9475288391113281f, 18.326139450073242f, -0.18340778350830078f, 16.844058990478516f, -2.426448345184326f, 25.604393005371094f, 0.0f, -20.638484954833984f, 0.0f, 14.94726276397705f, -2.194331645965576f, 16.41602325439453f, -0.46245574951171875f, 17.187292098999023f, -2.6609230041503906f, -14.94726276397705f, 2.194331645965576f, 22.337984085083008f, 0.0f, 16.794818878173828f, 0.8455219268798828f, 18.26315689086914f, -2.0682849884033203f, -16.41602325439453f, 0.46245574951171875f, 16.794818878173828f, -0.8455219268798828f, 23.06778907775879f, 0.0f, 18.19284439086914f, -3.8802919387817383f, -17.187292098999023f, 2.6609230041503906f, 18.26315689086914f, 2.0682849884033203f, 18.19284439086914f, 3.8802919387817383f, 26.16499137878418f, 0.0f, -22.003551483154297f, 0.0f, 16.589323043823242f, 0.03010272979736328f, 16.983501434326172f, -0.4762544631958008f, 17.44463539123535f, -1.2149982452392578f, -16.589323043823242f, -0.03010272979736328f, 22.34552764892578f, 0.0f, 16.80978775024414f, -0.6717538833618164f, 18.581838607788086f, -1.6014175415039062f, -16.983501434326172f, 0.4762544631958008f, 16.80978775024414f, 0.6717538833618164f, 23.17429542541504f, 0.0f, 18.67078971862793f, -1.538893699645996f, -17.44463539123535f, 1.2149982452392578f, 18.581838607788086f, 1.6014175415039062f, 18.67078971862793f, 1.538893699645996f, 24.290443420410156f, 0.0f, -19.79700469970703f, 0.0f, 14.992420196533203f, 5.579376697540283f, 13.452474594116211f, 1.2792086601257324f, 14.489317893981934f, 0.8654975891113281f, -14.992420196533203f, -5.579376697540283f, 21.15625f, 0.0f, 14.224156379699707f, -2.9615731239318848f, 14.317689895629883f, -3.6753296852111816f, -13.452474594116211f, -1.2792086601257324f, 14.224156379699707f, 2.9615731239318848f, 20.983108520507812f, 0.0f, 14.005792617797852f, -0.1283254623413086f, -14.489317893981934f, -0.8654975891113281f, 14.317689895629883f, 3.6753296852111816f, 14.005792617797852f, 0.1283254623413086f, 18.71407699584961f, 0.0f, -24.166046142578125f, 0.0f, 18.734642028808594f, 0.9492931365966797f, 17.037338256835938f, -0.32271766662597656f, 17.781543731689453f, 2.548583507537842f, -18.734642028808594f, -0.9492931365966797f, 25.994871139526367f, 0.0f, 20.141250610351562f, -1.2515830993652344f, 20.713899612426758f, 1.048008918762207f, -17.037338256835938f, 0.32271766662597656f, 20.141250610351562f, 1.2515830993652344f, 23.74345588684082f, 0.0f, 17.802169799804688f, 3.222334384918213f, -17.781543731689453f, -2.548583507537842f, 20.713899612426758f, -1.048008918762207f, 17.802169799804688f, -3.222334384918213f, 24.650211334228516f, 0.0f, -26.946487426757812f, 0.0f, 16.535846710205078f, -1.0256295204162598f, 19.96299171447754f, 2.411512851715088f, 19.37932014465332f, 1.6759376525878906f, -16.535846710205078f, 1.0256295204162598f, 16.459304809570312f, 0.0f, 15.793869972229004f, 2.262589454650879f, 14.442221641540527f, 1.9158010482788086f, -19.96299171447754f, -2.411512851715088f, 15.793869972229004f, -2.262589454650879f, 23.68314552307129f, 0.0f, 18.20061492919922f, 0.18914127349853516f, -19.37932014465332f, -1.6759376525878906f, 14.442221641540527f, -1.9158010482788086f, 18.20061492919922f, -0.18914127349853516f, 23.666715621948242f, 0.0f, -19.278736114501953f, 0.0f, 12.580656051635742f, 0.8043432235717773f, 14.649720191955566f, 0.9063796997070312f, 13.079055786132812f, -1.674527645111084f, -12.580656051635742f, -0.8043432235717773f, 15.836713790893555f, 0.0f, 12.894441604614258f, 1.1554656028747559f, 12.838397979736328f, -2.5969672203063965f, -14.649720191955566f, -0.9063796997070312f, 12.894441604614258f, -1.1554656028747559f, 22.073633193969727f, 0.0f, 14.27613639831543f, -2.954784870147705f, -13.079055786132812f, 1.674527645111084f, 12.838397979736328f, 2.5969672203063965f, 14.27613639831543f, 2.954784870147705f, 18.925800323486328f, 0.0f,}; - -float In_b[16384] = { -0.260132372379303f, 0.5707322955131531f, 0.4444528818130493f, 0.07054164260625839f, 0.9749433994293213f, 0.6471541523933411f, 0.6466342210769653f, 0.7703948616981506f, -0.029497316107153893f, 0.33796918392181396f, 0.8483118414878845f, 0.07270840555429459f, 0.2525821328163147f, 0.7774352431297302f, 0.7526606917381287f, 0.7326483130455017f, -0.14816832542419434f, 0.546739935874939f, 0.20509812235832214f, 0.6329513788223267f, 0.6131656169891357f, 0.5271725654602051f, 0.5979462265968323f, 0.37513595819473267f, -0.7042052149772644f, 0.600959300994873f, 0.5821767449378967f, 0.7028127312660217f, 0.24254417419433594f, 0.9931508898735046f, 0.5802956819534302f, 0.6959530711174011f, -0.8865273594856262f, 0.161607563495636f, 0.43906518816947937f, 0.638484001159668f, 0.7844561338424683f, 0.6581523418426514f, 0.9310284852981567f, 0.27994081377983093f, -0.19498811662197113f, 0.6031240820884705f, 0.30786436796188354f, 0.00509768957272172f, 0.0918891653418541f, 0.5353398323059082f, 0.8476703763008118f, 0.43660449981689453f, -0.21121041476726532f, 0.12219154834747314f, 0.03435653820633888f, 0.9249069094657898f, 0.3841055631637573f, 0.19823607802391052f, 0.24406927824020386f, 0.6927865147590637f, -0.20966118574142456f, 0.5155885219573975f, 0.7182762026786804f, 0.469232439994812f, 0.6597546935081482f, 0.6690489053726196f, 0.5960277318954468f, 0.8119127750396729f, -0.2162567526102066f, 0.731680154800415f, 0.48179829120635986f, 0.5652619004249573f, 0.9355280995368958f, 0.25090131163597107f, 0.46436405181884766f, 0.40754255652427673f, -0.9235775470733643f, 0.13431240618228912f, 0.3477383553981781f, 0.9415425658226013f, 0.11287584900856018f, 0.42129504680633545f, 0.1513361781835556f, 0.8501724600791931f, -0.5014679431915283f, 0.36004772782325745f, 0.07427117228507996f, 0.5750910043716431f, 0.5383840203285217f, 0.49414315819740295f, 0.052318550646305084f, 0.5777069926261902f, -0.6740008592605591f, 0.6248106360435486f, 0.38829946517944336f, 0.8043050765991211f, 0.18481279909610748f, 0.5733885765075684f, 0.14995570480823517f, 0.06299673020839691f, -0.11195381730794907f, 0.2397424578666687f, 0.21025337278842926f, 0.5842437148094177f, 0.5224104523658752f, 0.6888477206230164f, 0.49020811915397644f, 0.06942857056856155f, -0.7516987323760986f, 0.42029011249542236f, 0.18266965448856354f, 0.11546182632446289f, 0.8245916962623596f, 0.15693141520023346f, 0.3794705271720886f, 0.3831562399864197f, -0.3560028672218323f, 0.824709951877594f, 0.8693404197692871f, 0.6031365394592285f, 0.9639285206794739f, 0.45341548323631287f, 0.7895622849464417f, 0.9707425832748413f, -0.035333313047885895f, 0.696482241153717f, 0.8627527952194214f, 0.24336913228034973f, 0.5621689558029175f, 0.9925902485847473f, 0.5552250742912292f, 0.7857624888420105f, -0.39375054836273193f, 0.28743574023246765f, 0.133693665266037f, 0.8070454001426697f, 0.6356288194656372f, 0.03731667995452881f, 0.48691195249557495f, 0.4488494396209717f, -0.8457177877426147f, 0.5933952927589417f, 0.013735508546233177f, 0.7754847407341003f, 0.6644737720489502f, 0.7047550082206726f, 0.633549153804779f, 0.7450068593025208f, -0.9646123051643372f, 0.3948090970516205f, 0.3153781592845917f, 0.8736077547073364f, 0.3969990015029907f, 0.3712220788002014f, 0.226725235581398f, 0.33575305342674255f, -0.6361620426177979f, 0.6191737651824951f, 0.6475685238838196f, 0.49397340416908264f, 0.7149061560630798f, 0.9586127400398254f, 0.5685760378837585f, 0.5657870173454285f, -0.9322713017463684f, 0.8024845123291016f, 0.7904845476150513f, 0.5931554436683655f, 0.31340235471725464f, 0.24407550692558289f, 0.6476615071296692f, 0.09683673828840256f, -0.4222886860370636f, 0.18725599348545074f, 0.14528876543045044f, 0.35258159041404724f, 0.8332845568656921f, 0.18140558898448944f, 0.03147735446691513f, 0.435569703578949f, -0.3423950970172882f, 0.03285568207502365f, 0.9513221979141235f, 0.10511583834886551f, 0.07108809053897858f, 0.9590820074081421f, 0.7884477972984314f, 0.6179443597793579f, -0.004230997059494257f, 0.45847997069358826f, 0.036354683339595795f, 0.18402406573295593f, 0.22960220277309418f, 0.6766432523727417f, 0.03956723213195801f, 0.7498965263366699f, -0.2291453778743744f, 0.17658008635044098f, 0.042823806405067444f, 0.09280847012996674f, 0.1323080062866211f, 0.5374109148979187f, 0.4943106770515442f, 0.10598446428775787f, -0.5252142548561096f, 0.6624343991279602f, 0.07220210134983063f, 0.859338641166687f, 0.27305811643600464f, 0.5577791333198547f, 0.10476710647344589f, 0.9802858233451843f, -0.5845445990562439f, 0.428905189037323f, 0.4821001887321472f, 0.03597239777445793f, 0.9046484231948853f, 0.660953938961029f, 0.6708701848983765f, 0.9264857769012451f, -0.5162613987922668f, 0.16560901701450348f, 0.5225597023963928f, 0.5110792517662048f, 0.38638344407081604f, 0.3851616382598877f, 0.03341478109359741f, 0.5718023777008057f, -0.13993030786514282f, 0.039045143872499466f, 0.34674564003944397f, 0.7156946659088135f, 0.7598434090614319f, 0.8409054279327393f, 0.8308669328689575f, 0.4344772398471832f, -0.08213742822408676f, 0.49884262681007385f, 0.08546571433544159f, 0.24172288179397583f, 0.29428064823150635f, 0.14786477386951447f, 0.3559037744998932f, 0.14495833218097687f, -0.22441962361335754f, 0.533079206943512f, 0.9181413054466248f, 0.005416100844740868f, 0.9157490134239197f, 0.8251500725746155f, 0.8143640160560608f, 0.04182540252804756f, -0.06305885314941406f, 0.290314644575119f, 0.9778771996498108f, 0.5867727398872375f, 0.6185789704322815f, 0.6682056784629822f, 0.21531392633914948f, 0.7169933319091797f, -0.9769085645675659f, 0.7740219235420227f, 0.2930079698562622f, 0.5797714591026306f, 0.32422006130218506f, 0.9443597793579102f, 0.7508134245872498f, 0.2314670979976654f, -0.9840885996818542f, 0.6504086256027222f, 0.3885771632194519f, 0.9998204708099365f, 0.6381199955940247f, 0.29896610975265503f, 0.4194517135620117f, 0.8588179349899292f, -0.03280193358659744f, 0.3862091600894928f, 0.8464667797088623f, 0.41049182415008545f, 0.7388141751289368f, 0.8288244009017944f, 0.32289478182792664f, 0.42766305804252625f, -0.5033539533615112f, 0.458447128534317f, 0.8563097715377808f, 0.9777584075927734f, 0.7575048804283142f, 0.0949457436800003f, 0.8161789774894714f, 0.03223893418908119f, -0.7494729161262512f, 0.5279968976974487f, 0.6718178987503052f, 0.17685839533805847f, 0.011923138983547688f, 0.9764546751976013f, 0.2864517271518707f, 0.9377442002296448f, -0.3083960711956024f, 0.13508524000644684f, 0.44741642475128174f, 0.4446461796760559f, 0.9166682362556458f, 0.8664417266845703f, 0.10099156200885773f, 0.7779579758644104f, -0.7892209887504578f, 0.7583697438240051f, 0.04079050570726395f, 0.35919684171676636f, 0.885735034942627f, 0.8646446466445923f, 0.21256546676158905f, 0.25833216309547424f, -0.744265615940094f, 0.08095725625753403f, 0.31209930777549744f, 0.8895136713981628f, 0.4524472653865814f, 0.4535287022590637f, 0.05452015623450279f, 0.5392270684242249f, -0.28901606798171997f, 0.5457925200462341f, 0.7327605485916138f, 0.11211490631103516f, 0.8819296956062317f, 0.4102199077606201f, 0.39940494298934937f, 0.8966069221496582f, -0.38398662209510803f, 0.6645416021347046f, 0.5740501284599304f, 0.9683557748794556f, 0.036853499710559845f, 0.33104875683784485f, 0.849036693572998f, 0.7586569786071777f, -0.5478441119194031f, 0.2585814893245697f, 0.36323800683021545f, 0.8693013191223145f, 0.22263804078102112f, 0.2132442593574524f, 0.10590023547410965f, 0.8052467107772827f, -0.5699171423912048f, 0.8806122541427612f, 0.7215487360954285f, 0.28348278999328613f, 0.912715494632721f, 0.6884876489639282f, 0.4031292796134949f, 0.18060237169265747f, -0.45519840717315674f, 0.19293658435344696f, 0.18224653601646423f, 0.6263710856437683f, 0.48668989539146423f, 0.8236882090568542f, 0.8950967788696289f, 0.12641116976737976f, -0.2631567120552063f, 0.5753070116043091f, 0.2400580644607544f, 0.5303892493247986f, 0.5729236602783203f, 0.7059364914894104f, 0.13457636535167694f, 0.9271267056465149f, -0.6600397229194641f, 0.6881739497184753f, 0.5007848143577576f, 0.8928514719009399f, 0.2957634925842285f, 0.39218688011169434f, 0.3704966604709625f, 0.9525309801101685f, -0.9229986667633057f, 0.0785030871629715f, 0.6559414267539978f, 0.7390230298042297f, 0.7102553844451904f, 0.19702303409576416f, 0.14498083293437958f, 0.15032964944839478f, -0.09708970040082932f, 0.1736590564250946f, 0.5966628193855286f, 0.4211288094520569f, 0.6431525945663452f, 0.1649881899356842f, 0.39234253764152527f, 0.9826042056083679f, -0.42907482385635376f, 0.892221212387085f, 0.8990438580513f, 0.668954610824585f, 0.30030888319015503f, 0.3952442407608032f, 0.4508737325668335f, 0.6494953036308289f, -0.3359583616256714f, 0.8206698894500732f, 0.004569157026708126f, 0.5446035265922546f, 0.5741413235664368f, 0.35784515738487244f, 0.6479583382606506f, 0.971043050289154f, -0.306821346282959f, 0.35655227303504944f, 0.5460143685340881f, 0.25937435030937195f, 0.8371931910514832f, 0.12577977776527405f, 0.4903062582015991f, 0.3746598958969116f, -0.9329313039779663f, 0.11994566023349762f, 0.8841805458068848f, 0.5386922955513f, 0.5794939398765564f, 0.12830430269241333f, 0.19747287034988403f, 0.3344869017601013f, -0.044406477361917496f, 0.9393004179000854f, 0.9158236980438232f, 0.6874189376831055f, 0.01992063969373703f, 0.9658291935920715f, 0.46477314829826355f, 0.5520534515380859f, -0.10097502917051315f, 0.05385761335492134f, 0.9938157796859741f, 0.16119568049907684f, 0.2899616062641144f, 0.0664118304848671f, 0.1271885186433792f, 0.6284430027008057f, -0.8770627379417419f, 0.3579413890838623f, 0.5017849206924438f, 0.7494836449623108f, 0.08528317511081696f, 0.6627708077430725f, 0.5484080910682678f, 0.8248951435089111f, -0.4402201473712921f, 0.5803354978561401f, 0.016593772917985916f, 0.002894612029194832f, 0.344892680644989f, 0.5219793915748596f, 0.3174438178539276f, 0.7348945140838623f, -0.033646948635578156f, 0.39362409710884094f, 0.3057243227958679f, 0.8977378010749817f, 0.3789607584476471f, 0.7182966470718384f, 0.8918778896331787f, 0.48661795258522034f, -0.03238270431756973f, 0.3131140470504761f, 0.1453840583562851f, 0.28028014302253723f, 0.22404706478118896f, 0.5329035520553589f, 0.8416388630867004f, 0.7897403836250305f, -0.3888387680053711f, 0.3381521701812744f, 0.9224621057510376f, 0.7174785733222961f, 0.18205362558364868f, 0.7487398982048035f, 0.41147708892822266f, 0.700311005115509f, -0.0036140468437224627f, 0.7272690534591675f, 0.32819682359695435f, 0.4266776740550995f, 0.8993661403656006f, 0.35837557911872864f, 0.3207745850086212f, 0.866645097732544f, -0.6276677846908569f, 0.06475108116865158f, 0.6858879923820496f, 0.9400948286056519f, 0.18072384595870972f, 0.4208120107650757f, 0.5035813450813293f, 0.6130173206329346f, -0.8112913966178894f, 0.1645624041557312f, 0.6613438725471497f, 0.7240160703659058f, 0.06953708827495575f, 0.9183176755905151f, 0.871452271938324f, 0.03253214806318283f, -0.19948530197143555f, 0.7173349261283875f, 0.021172532811760902f, 0.9977614879608154f, 0.17247232794761658f, 0.036776039749383926f, 0.12137170881032944f, 0.6295457482337952f, -0.4513227045536041f, 0.5363191962242126f, 0.8947281241416931f, 0.000849621370434761f, 0.44275566935539246f, 0.8368473052978516f, 0.5002321004867554f, 0.22745653986930847f, -0.22369417548179626f, 0.09320119023323059f, 0.6717198491096497f, 0.8472964763641357f, 0.7699881196022034f, 0.26988521218299866f, 0.19403783977031708f, 0.7448433637619019f, -0.8768332600593567f, 0.39861196279525757f, 0.11209307610988617f, 0.8629133105278015f, 0.34774142503738403f, 0.4887820780277252f, 0.1660575270652771f, 0.9425073862075806f, -0.3441481292247772f, 0.9188776016235352f, 0.007464615628123283f, 0.4918765127658844f, 0.10972917079925537f, 0.5648188591003418f, 0.5008701086044312f, 0.6510434150695801f, -0.6535208821296692f, 0.9378610253334045f, 0.2469630241394043f, 0.44415169954299927f, 0.40845927596092224f, 0.4192493259906769f, 0.49068009853363037f, 0.21006081998348236f, -0.42494580149650574f, 0.7905527949333191f, 0.25819966197013855f, 0.21856191754341125f, 0.6635616421699524f, 0.2057630568742752f, 0.9835163950920105f, 0.5619841814041138f, -0.042949873954057693f, 0.8185245394706726f, 0.5418641567230225f, 0.7634203433990479f, 0.5760137438774109f, 0.793097972869873f, 0.6973466873168945f, 0.045224692672491074f, -0.22690269351005554f, 0.7314131855964661f, 0.016740739345550537f, 0.5759345293045044f, 0.23614251613616943f, 0.8498052358627319f, 0.4466017782688141f, 0.1899464875459671f, -0.8493594527244568f, 0.3844228684902191f, 0.13120408356189728f, 0.006850035395473242f, 0.7564671635627747f, 0.23683568835258484f, 0.3423912823200226f, 0.3576728403568268f, -0.6444575190544128f, 0.1191994845867157f, 0.18439003825187683f, 0.5975936651229858f, 0.17597602307796478f, 0.32367318868637085f, 0.3831575810909271f, 0.08904044330120087f, -0.06591231375932693f, 0.7456642985343933f, 0.04445786401629448f, 0.35507166385650635f, 0.38890522718429565f, 0.5494250655174255f, 0.9836838841438293f, 0.7703099250793457f, -0.9248373508453369f, 0.7874390482902527f, 0.9750913977622986f, 0.29631394147872925f, 0.6460230350494385f, 0.6799210906028748f, 0.207085981965065f, 0.9451568126678467f, -0.5795978903770447f, 0.41389763355255127f, 0.6626607775688171f, 0.139654740691185f, 0.8864338994026184f, 0.32787761092185974f, 0.3605611324310303f, 0.6340569853782654f, -0.5525116324424744f, 0.5721584558486938f, 0.28509601950645447f, 0.5932701230049133f, 0.7416852116584778f, 0.1182495504617691f, 0.9756957292556763f, 0.7499107718467712f, -0.15243472158908844f, 0.9121984839439392f, 0.11087411642074585f, 0.03245778754353523f, 0.9943291544914246f, 0.4934941828250885f, 0.6901324391365051f, 0.4641507565975189f, -0.9842231273651123f, 0.6711669564247131f, 0.7508363127708435f, 0.904659628868103f, 0.46550729870796204f, 0.9838867783546448f, 0.316042959690094f, 0.8829602003097534f, -0.23008142411708832f, 0.8310450315475464f, 0.6973979473114014f, 0.29556378722190857f, 0.28693699836730957f, 0.32447537779808044f, 0.48872777819633484f, 0.8699179887771606f, -0.5834581255912781f, 0.14081911742687225f, 0.12036848813295364f, 0.16690221428871155f, 0.691471517086029f, 0.025010138750076294f, 0.3733491599559784f, 0.24484744668006897f, -0.6888552308082581f, 0.5619979500770569f, 0.6801847815513611f, 0.5808758735656738f, 0.7416706085205078f, 0.6177570223808289f, 0.7743444442749023f, 0.43618401885032654f, -0.653754711151123f, 0.7335893511772156f, 0.819568932056427f, 0.7494348883628845f, 0.6600579619407654f, 0.6386422514915466f, 0.7234811782836914f, 0.7330285906791687f, -0.21202456951141357f, 0.7343743443489075f, 0.24733899533748627f, 0.450408011674881f, 0.209120973944664f, 0.9505578279495239f, 0.14631783962249756f, 0.2804817259311676f, -0.6941124200820923f, 0.4670839011669159f, 0.7510749101638794f, 0.1635085642337799f, 0.8436742424964905f, 0.9978573322296143f, 0.5351163744926453f, 0.4136497974395752f, -0.5770986676216125f, 0.3873230814933777f, 0.7206869125366211f, 0.21046660840511322f, 0.3480176627635956f, 0.32505396008491516f, 0.9609791040420532f, 0.2660963237285614f, -0.9002363681793213f, 0.2791382074356079f, 0.02781498059630394f, 0.2625759243965149f, 0.915574312210083f, 0.5187253355979919f, 0.0042561073787510395f, 0.19130830466747284f, -0.5258352160453796f, 0.20387384295463562f, 0.32970350980758667f, 0.5883703827857971f, 0.11159887909889221f, 0.9698907732963562f, 0.8161001205444336f, 0.7254852652549744f, -0.10262482613325119f, 0.6731618642807007f, 0.6655147671699524f, 0.9633016586303711f, 0.3604082763195038f, 0.13254967331886292f, 0.8394315838813782f, 0.9345237016677856f, -0.8143061995506287f, 0.17836275696754456f, 0.40132206678390503f, 0.0736643448472023f, 0.16723015904426575f, 0.4782216548919678f, 0.7407071590423584f, 0.23207105696201324f, -0.5804053544998169f, 0.08406799286603928f, 0.718427300453186f, 0.28739649057388306f, 0.898040235042572f, 0.43218037486076355f, 0.5062083005905151f, 0.6788134574890137f, -0.9661386609077454f, 0.6844221353530884f, 0.8485507369041443f, 0.481406569480896f, 0.6479458212852478f, 0.5543241500854492f, 0.7479037642478943f, 0.7585002779960632f, -0.49282583594322205f, 0.4845770597457886f, 0.42393025755882263f, 0.6676655411720276f, 0.3658595383167267f, 0.2112152874469757f, 0.11691717058420181f, 0.21742600202560425f, -0.8129326105117798f, 0.3409653604030609f, 0.9304367303848267f, 0.07995583117008209f, 0.04674163833260536f, 0.49510812759399414f, 0.14163094758987427f, 0.8217379450798035f, -0.7021300792694092f, 0.7303779721260071f, 0.16368533670902252f, 0.015882976353168488f, 0.4495440423488617f, 0.22918272018432617f, 0.04930271580815315f, 0.9160557389259338f, -0.1298513561487198f, 0.2986730635166168f, 0.3438766598701477f, 0.6845625042915344f, 0.4037081301212311f, 0.8524446487426758f, 0.7030851244926453f, 0.864978551864624f, -0.1840374767780304f, 0.6836700439453125f, 0.9251481890678406f, 0.5649397373199463f, 0.7652665376663208f, 0.2705850601196289f, 0.47470343112945557f, 0.02705182321369648f, -0.3150542974472046f, 0.18098308145999908f, 0.9736851453781128f, 0.4614420533180237f, 0.503795325756073f, 0.6413339972496033f, 0.3446592092514038f, 0.25663840770721436f, -0.6861478686332703f, 0.1745103895664215f, 0.944871723651886f, 0.03057442605495453f, 0.19796499609947205f, 0.05986566096544266f, 0.012820379808545113f, 0.4265488386154175f, -0.31155940890312195f, 0.21390561759471893f, 0.10993199795484543f, 0.9194576740264893f, 0.900776743888855f, 0.9986320734024048f, 0.006582991220057011f, 0.6177489161491394f, -0.43599820137023926f, 0.7020277380943298f, 0.8571199178695679f, 0.8635338544845581f, 0.032833706587553024f, 0.8534716963768005f, 0.7022678852081299f, 0.37481066584587097f, -0.11494648456573486f, 0.11527208983898163f, 0.39132577180862427f, 0.9571203589439392f, 0.7943078279495239f, 0.6814721822738647f, 0.40061649680137634f, 0.2510151267051697f, -0.18307152390480042f, 0.8967546224594116f, 0.34284284710884094f, 0.6528465151786804f, 0.12424937635660172f, 0.081280916929245f, 0.09235237538814545f, 0.7051276564598083f, -0.19501248002052307f, 0.8447796106338501f, 0.2827829420566559f, 0.2557595670223236f, 0.6686839461326599f, 0.5047283172607422f, 0.8546197414398193f, 0.8224734663963318f, -0.2359910011291504f, 0.1097671389579773f, 0.625773549079895f, 0.060339927673339844f, 0.7781164646148682f, 0.2889244854450226f, 0.12169095873832703f, 0.5378408432006836f, -0.031678084284067154f, 0.0548391155898571f, 0.20044748485088348f, 0.4863305687904358f, 0.25877439975738525f, 0.6273824572563171f, 0.36055609583854675f, 0.9255139231681824f, -0.12228045612573624f, 0.8656201362609863f, 0.745745062828064f, 0.8714706897735596f, 0.6494741439819336f, 0.40712159872055054f, 0.7195429801940918f, 0.463344931602478f, -0.590538501739502f, 0.27465489506721497f, 0.48472970724105835f, 0.5044126510620117f, 0.42348918318748474f, 0.03939181566238403f, 0.8963903188705444f, 0.020480487495660782f, -0.10328447818756104f, 0.21031270921230316f, 0.12257982045412064f, 0.7301780581474304f, 0.6166980862617493f, 0.4700397253036499f, 0.7866290211677551f, 0.9383590817451477f, -0.31520411372184753f, 0.4106152653694153f, 0.5161222815513611f, 0.0657520443201065f, 0.5176533460617065f, 0.3298259973526001f, 0.6317790746688843f, 0.40554672479629517f, -0.07395634800195694f, 0.49296027421951294f, 0.6898394823074341f, 0.7501775622367859f, 0.7843242287635803f, 0.18758976459503174f, 0.6852796077728271f, 0.9387356638908386f, -0.4671337306499481f, 0.00438613211736083f, 0.47896477580070496f, 0.6878302097320557f, 0.7484369277954102f, 0.14383862912654877f, 0.9594095945358276f, 0.3341156244277954f, -0.35935676097869873f, 0.757971465587616f, 0.4414481818675995f, 0.24731610715389252f, 0.10165679454803467f, 0.7593971490859985f, 0.8832542300224304f, 0.6408689022064209f, -0.8096819519996643f, 0.22108173370361328f, 0.8799267411231995f, 0.5230720043182373f, 0.9113121032714844f, 0.4039669930934906f, 0.7517823576927185f, 0.6294279098510742f, -0.13228000700473785f, 0.5930740833282471f, 0.6646094918251038f, 0.21870172023773193f, 0.9020258784294128f, 0.2242555469274521f, 0.553591787815094f, 0.6704638600349426f, -0.5373786091804504f, 0.4850395917892456f, 0.7764983773231506f, 0.23066063225269318f, 0.79805588722229f, 0.8310136795043945f, 0.2894723117351532f, 0.5434646606445312f, -0.43650510907173157f, 0.42937180399894714f, 0.09006223827600479f, 0.5491916537284851f, 0.9884076714515686f, 0.921748161315918f, 0.8701103925704956f, 0.4314250946044922f, -0.14491963386535645f, 0.5148134231567383f, 0.3857784867286682f, 0.8531917929649353f, 0.9218465089797974f, 0.8637474775314331f, 0.927006721496582f, 0.253081351518631f, -0.9350725412368774f, 0.7971487641334534f, 0.25985971093177795f, 0.32133397459983826f, 0.4565750062465668f, 0.06387167423963547f, 0.15925396978855133f, 0.07776593416929245f, -0.38213443756103516f, 0.7239649295806885f, 0.003099301131442189f, 0.8019714951515198f, 0.08387518674135208f, 0.022641588002443314f, 0.3976125419139862f, 0.9702593684196472f, -0.7845594882965088f, 0.5605349540710449f, 0.25118130445480347f, 0.8556843400001526f, 0.45071518421173096f, 0.21472066640853882f, 0.2278060019016266f, 0.8507826328277588f, -0.005959398113191128f, 0.2593842148780823f, 0.9592525959014893f, 0.49154049158096313f, 0.8163002729415894f, 0.0034081002231687307f, 0.6294099688529968f, 0.12878300249576569f, -0.8248994946479797f, 0.5632463693618774f, 0.528012752532959f, 0.4999839663505554f, 0.2861819565296173f, 0.603050708770752f, 0.38978251814842224f, 0.7952907681465149f, -0.1378743052482605f, 0.871327817440033f, 0.04234355688095093f, 0.22479163110256195f, 0.3517553508281708f, 0.4660782217979431f, 0.16916535794734955f, 0.4971417486667633f, -0.21931840479373932f, 0.17102710902690887f, 0.0832771584391594f, 0.6708406209945679f, 0.9605860710144043f, 0.5827533602714539f, 0.6707764863967896f, 0.6510302424430847f, -0.020028693601489067f, 0.4731822609901428f, 0.7106837630271912f, 0.561617374420166f, 0.3338797390460968f, 0.9511041641235352f, 0.8649432063102722f, 0.29955750703811646f, -0.5983363389968872f, 0.9468579292297363f, 0.48214247822761536f, 0.10509388148784637f, 0.0018964193295687437f, 0.74931800365448f, 0.40934431552886963f, 0.031177058815956116f, -0.3879533112049103f, 0.8675764203071594f, 0.5755842328071594f, 0.17467840015888214f, 0.8778178691864014f, 0.5510972738265991f, 0.0030987951904535294f, 0.7163342237472534f, -0.9572005271911621f, 0.8063876032829285f, 0.46839702129364014f, 0.7692720890045166f, 0.9048581123352051f, 0.9442116022109985f, 0.595148503780365f, 0.6575492024421692f, -0.24037358164787292f, 0.263480544090271f, 0.8630988597869873f, 0.28460919857025146f, 0.963311493396759f, 0.4841264486312866f, 0.8758370876312256f, 0.15929847955703735f, -0.8904072046279907f, 0.022886771708726883f, 0.1654384583234787f, 0.5034860372543335f, 0.9142717719078064f, 0.06931567937135696f, 0.24585945904254913f, 0.6044294834136963f, -0.007235622499138117f, 0.723598837852478f, 0.30379951000213623f, 0.5768498778343201f, 0.7736324667930603f, 0.48152345418930054f, 0.9778895974159241f, 0.5967910289764404f, -0.29402095079421997f, 0.006803359370678663f, 0.6307949423789978f, 0.33662232756614685f, 0.42131003737449646f, 0.05792197212576866f, 0.8120740652084351f, 0.9050806760787964f, -0.5434430241584778f, 0.15922826528549194f, 0.4972509741783142f, 0.42790141701698303f, 0.7334644794464111f, 0.32202276587486267f, 0.7199519276618958f, 0.41223350167274475f, -0.4966394305229187f, 0.5684400796890259f, 0.5263673067092896f, 0.37576863169670105f, 0.33106735348701477f, 0.6235213875770569f, 0.20379167795181274f, 0.03397829458117485f, -0.7987450957298279f, 0.7287958860397339f, 0.5488384366035461f, 0.9960235357284546f, 0.6654267907142639f, 0.8897934556007385f, 0.14276859164237976f, 0.2590405344963074f, -0.7781820893287659f, 0.44107308983802795f, 0.02021847292780876f, 0.4590713083744049f, 0.21072915196418762f, 0.38565221428871155f, 0.5920577049255371f, 0.8049328327178955f, -0.6371197700500488f, 0.24909812211990356f, 0.08077855408191681f, 0.8520393967628479f, 0.9196292757987976f, 0.33843085169792175f, 0.7822694778442383f, 0.6610825061798096f, -0.08160724490880966f, 0.8695082068443298f, 0.32251083850860596f, 0.8340935707092285f, 0.4240493178367615f, 0.30525311827659607f, 0.6784435510635376f, 0.047781143337488174f, -0.27649638056755066f, 0.060027215629816055f, 0.9366239309310913f, 0.8722209930419922f, 0.7653302550315857f, 0.9369456768035889f, 0.9192169308662415f, 0.546256422996521f, -0.17700983583927155f, 0.9215964078903198f, 0.5144960284233093f, 0.0536346398293972f, 0.24649137258529663f, 0.13148096203804016f, 0.20103615522384644f, 0.8080869317054749f, -0.7751578688621521f, 0.4558834135532379f, 0.2359345406293869f, 0.6306803822517395f, 0.38532769680023193f, 0.841426432132721f, 0.2993302643299103f, 0.8672013282775879f, -0.4915035665035248f, 0.5368275046348572f, 0.22235077619552612f, 0.3718453347682953f, 0.5924391746520996f, 0.978258490562439f, 0.12494876980781555f, 0.4259082078933716f, -0.8424370288848877f, 0.42284756898880005f, 0.4121297597885132f, 0.10403972119092941f, 0.8398988246917725f, 0.07807048410177231f, 0.16750448942184448f, 0.9058853387832642f, -0.299190491437912f, 0.39591851830482483f, 0.06991293281316757f, 0.6541964411735535f, 0.676998496055603f, 0.3771090805530548f, 0.07001300156116486f, 0.197416290640831f, -0.07991216331720352f, 0.02134142816066742f, 0.3443974256515503f, 0.3582656979560852f, 0.5491822957992554f, 0.2839692533016205f, 0.03585841879248619f, 0.6522256731987f, -0.969809353351593f, 0.39251217246055603f, 0.06079450249671936f, 0.7802752256393433f, 0.4583390951156616f, 0.34403154253959656f, 0.017864299938082695f, 0.29214346408843994f, -0.01039330754429102f, 0.457042396068573f, 0.6140453815460205f, 0.2998403310775757f, 0.9169688820838928f, 0.3171006143093109f, 0.006915821693837643f, 0.9875908493995667f, -0.6325476169586182f, 0.010545879602432251f, 0.05459029600024223f, 0.8540306687355042f, 0.006826704367995262f, 0.523223340511322f, 0.35939139127731323f, 0.37014472484588623f, -0.8593000173568726f, 0.7164244055747986f, 0.4547605514526367f, 0.6478709578514099f, 0.7655104994773865f, 0.3906385004520416f, 0.794245719909668f, 0.1740388572216034f, -0.00976434163749218f, 0.6983436346054077f, 0.21590463817119598f, 0.6709470748901367f, 0.3256169557571411f, 0.32487961649894714f, 0.919424831867218f, 0.393938809633255f, -0.4873799681663513f, 0.2991560101509094f, 0.13993923366069794f, 0.08824187517166138f, 0.10887090116739273f, 0.49724578857421875f, 0.09453480690717697f, 0.8197774291038513f, -0.45724359154701233f, 0.28910914063453674f, 0.9272221326828003f, 0.34854549169540405f, 0.19729983806610107f, 0.4590694308280945f, 0.025644730776548386f, 0.1971912831068039f, -0.14340375363826752f, 0.3727012276649475f, 0.7965697646141052f, 0.6253013610839844f, 0.5110916495323181f, 0.9351341724395752f, 0.9340586066246033f, 0.5569403767585754f, -0.8964253664016724f, 0.20284956693649292f, 0.7157180905342102f, 0.47895365953445435f, 0.37411725521087646f, 0.4345564544200897f, 0.5649286508560181f, 0.10819988697767258f, -0.7197854518890381f, 0.11802462488412857f, 0.260004460811615f, 0.9004232883453369f, 0.6170105934143066f, 0.993986189365387f, 0.21369494497776031f, 0.5623698830604553f, -0.541039764881134f, 0.7667746543884277f, 0.7569741010665894f, 0.1079421415925026f, 0.23842336237430573f, 0.08471955358982086f, 0.8807858228683472f, 0.5017860531806946f, -0.35887059569358826f, 0.47137078642845154f, 0.1787107288837433f, 0.07277727872133255f, 0.8390043377876282f, 0.47310030460357666f, 0.4543873369693756f, 0.6530379056930542f, -0.9080957770347595f, 0.7899997234344482f, 0.6308811902999878f, 0.964057981967926f, 0.01384271401911974f, 0.6232048273086548f, 0.5865783095359802f, 0.99192875623703f, -0.8975649476051331f, 0.5274646282196045f, 0.5788947939872742f, 0.3580997884273529f, 0.34349295496940613f, 0.6155580282211304f, 0.4125887453556061f, 0.08548025786876678f, -0.459114134311676f, 0.7808835506439209f, 0.2715131342411041f, 0.3835029602050781f, 0.011046487838029861f, 0.2963337302207947f, 0.839772641658783f, 0.6880490183830261f, -0.05372020974755287f, 0.2548508644104004f, 0.8415346741676331f, 0.49338769912719727f, 0.9294074773788452f, 0.4601356089115143f, 0.9828478097915649f, 0.7460674047470093f, -0.8300994634628296f, 0.13037726283073425f, 0.409288614988327f, 0.2803468108177185f, 0.29275694489479065f, 0.6113483309745789f, 0.618617594242096f, 0.4711166024208069f, -0.9186878204345703f, 0.3686012625694275f, 0.5800565481185913f, 0.3454780578613281f, 0.025650883093476295f, 0.4329739212989807f, 0.7618618011474609f, 0.5422035455703735f, -0.8354079127311707f, 0.7198721170425415f, 0.4062104821205139f, 0.10577628761529922f, 0.4650289714336395f, 0.5558226108551025f, 0.8782486915588379f, 0.7771174907684326f, -0.4097832143306732f, 0.14847874641418457f, 0.6229903101921082f, 0.24866525828838348f, 0.23603659868240356f, 0.860104501247406f, 0.9667103886604309f, 0.1657254546880722f, -0.3351137340068817f, 0.3829136788845062f, 0.9810304045677185f, 0.7378004789352417f, 0.36342599987983704f, 0.09884103387594223f, 0.07285863161087036f, 0.12616126239299774f, -0.2500244081020355f, 0.19737301766872406f, 0.25760316848754883f, 0.5371701717376709f, 0.33280065655708313f, 0.6454740166664124f, 0.37830883264541626f, 0.06625446677207947f, -0.3138369023799896f, 0.7043986320495605f, 0.25270161032676697f, 0.9655129313468933f, 0.6873921155929565f, 0.9617375731468201f, 0.26878830790519714f, 0.9484566450119019f, -0.6039168834686279f, 0.5848008990287781f, 0.2906090021133423f, 0.5413908958435059f, 0.8423519134521484f, 0.5454041361808777f, 0.3370338976383209f, 0.21922390162944794f, -0.5703924894332886f, 0.2960348427295685f, 0.14405322074890137f, 0.09416235983371735f, 0.7606233358383179f, 0.5808349251747131f, 0.9358894228935242f, 0.5700657367706299f, -0.40855035185813904f, 0.4457913041114807f, 0.5175327062606812f, 0.5849459171295166f, 0.4475495517253876f, 0.6075235605239868f, 0.1829344779253006f, 0.886641800403595f, -0.4129158854484558f, 0.7100949883460999f, 0.3294685184955597f, 0.928376317024231f, 0.368554949760437f, 0.28600776195526123f, 0.6995542645454407f, 0.9520968198776245f, -0.2553238272666931f, 0.34580186009407043f, 0.7126041650772095f, 0.9699903130531311f, 0.46901562809944153f, 0.44702649116516113f, 0.0373542383313179f, 0.25636518001556396f, -0.4470074474811554f, 0.8288427591323853f, 0.3342958092689514f, 0.5172199606895447f, 0.930692195892334f, 0.10105212032794952f, 0.703860342502594f, 0.8842822909355164f, -0.5468170642852783f, 0.2451629489660263f, 0.09587420523166656f, 0.8061429858207703f, 0.42962414026260376f, 0.6341351270675659f, 0.6010788083076477f, 0.11281649768352509f, -0.19552873075008392f, 0.0032952558249235153f, 0.05346151441335678f, 0.007846579886972904f, 0.6032381653785706f, 0.7038737535476685f, 0.918709397315979f, 0.6101641654968262f, -0.0725708082318306f, 0.8836710453033447f, 0.12679482996463776f, 0.3639151453971863f, 0.6272132992744446f, 0.11167068034410477f, 0.8105350136756897f, 0.8578076362609863f, -0.26960650086402893f, 0.19011108577251434f, 0.15344451367855072f, 0.8164101839065552f, 0.5446792244911194f, 0.007330160588026047f, 0.061038922518491745f, 0.8849079608917236f, -0.39429348707199097f, 0.22945843636989594f, 0.8497421145439148f, 0.3446592688560486f, 0.8219310641288757f, 0.017826911062002182f, 0.951010525226593f, 0.6321815848350525f, -0.9425569176673889f, 0.860930323600769f, 0.6234796047210693f, 0.8933840394020081f, 0.5367473363876343f, 0.7611726522445679f, 0.39173948764801025f, 0.29644453525543213f, -0.1307864487171173f, 0.5435031652450562f, 0.22748272120952606f, 0.2477080374956131f, 0.8601729273796082f, 0.9544826149940491f, 0.08387422561645508f, 0.5999892950057983f, -0.8455895781517029f, 0.7769681215286255f, 0.5129140019416809f, 0.9357940554618835f, 0.1982899010181427f, 0.23411250114440918f, 0.36383676528930664f, 0.04368600621819496f, -0.33981093764305115f, 0.3248266875743866f, 0.3464520275592804f, 0.021597595885396004f, 0.850074052810669f, 0.7897982001304626f, 0.5253028273582458f, 0.6987738013267517f, -0.2977372109889984f, 0.5351803302764893f, 0.4249988794326782f, 0.8634909987449646f, 0.5354567170143127f, 0.9596627354621887f, 0.8205394744873047f, 0.24019668996334076f, -0.1054740771651268f, 0.3338995575904846f, 0.5024207830429077f, 0.7969232201576233f, 0.4185023009777069f, 0.4220898449420929f, 0.9286017417907715f, 0.6140216588973999f, -0.4565356373786926f, 0.7943820953369141f, 0.884819746017456f, 0.5801889896392822f, 0.44719845056533813f, 0.888669490814209f, 0.4784756600856781f, 0.03392251953482628f, -0.014747083187103271f, 0.639612078666687f, 0.4685419499874115f, 0.7422602772712708f, 0.8350401520729065f, 0.4462701976299286f, 0.660295844078064f, 0.21990732848644257f, -0.6597644090652466f, 0.31432080268859863f, 0.8694552779197693f, 0.34707581996917725f, 0.17040622234344482f, 0.9669569730758667f, 0.8192809224128723f, 0.21979230642318726f, -0.025265729054808617f, 0.8801124691963196f, 0.7276331186294556f, 0.9449021220207214f, 0.7168881893157959f, 0.012189971283078194f, 0.4240954518318176f, 0.8648985624313354f, -0.6112393736839294f, 0.4306609332561493f, 0.40099483728408813f, 0.18760946393013f, 0.5209935307502747f, 0.7952556610107422f, 0.600971519947052f, 0.21535681188106537f, -0.11741170287132263f, 0.5808698534965515f, 0.843967854976654f, 0.6970558762550354f, 0.30875682830810547f, 0.8726754784584045f, 0.0537848174571991f, 0.5606546401977539f, -0.5461828112602234f, 0.15647324919700623f, 0.08953030407428741f, 0.36861565709114075f, 0.6878689527511597f, 0.025359364226460457f, 0.48051512241363525f, 0.09523920714855194f, -0.6081700921058655f, 0.7136399149894714f, 0.6015183329582214f, 0.024444617331027985f, 0.2040029615163803f, 0.5457925796508789f, 0.9454005360603333f, 0.8075453639030457f, -0.5322995781898499f, 0.1390245407819748f, 0.4783960282802582f, 0.39086347818374634f, 0.9674325585365295f, 0.33893972635269165f, 0.8773861527442932f, 0.9430233836174011f, -0.8732762932777405f, 0.9752398133277893f, 0.2889818251132965f, 0.4137716591358185f, 0.03589268773794174f, 0.8365573287010193f, 0.8186769485473633f, 0.5807583332061768f, -0.6782791614532471f, 0.22673028707504272f, 0.14226794242858887f, 0.9717575907707214f, 0.5922916531562805f, 0.9124040007591248f, 0.575232207775116f, 0.6756262183189392f, -0.8887633085250854f, 0.16816632449626923f, 0.4977897107601166f, 0.03970857709646225f, 0.9129217267036438f, 0.3069285452365875f, 0.9098983407020569f, 0.1822790503501892f, -0.18598178029060364f, 0.7710704207420349f, 0.13968239724636078f, 0.0940074473619461f, 0.895713746547699f, 0.5306735634803772f, 0.9890227317810059f, 0.5259191393852234f, -0.4796432554721832f, 0.9077885746955872f, 0.3393925428390503f, 0.16173292696475983f, 0.4537891149520874f, 0.024406835436820984f, 0.05246861279010773f, 0.9506362676620483f, -0.3351658284664154f, 0.48813948035240173f, 0.312382310628891f, 0.49631428718566895f, 0.9734094738960266f, 0.5274960994720459f, 0.28486132621765137f, 0.5417637825012207f, -0.7120305299758911f, 0.4677559435367584f, 0.6088436245918274f, 0.2888926863670349f, 0.8355650305747986f, 0.1483520269393921f, 0.2388204038143158f, 0.3755837082862854f, -0.9238042235374451f, 0.994710385799408f, 0.2606599032878876f, 0.1129913181066513f, 0.5245384573936462f, 0.0474090538918972f, 0.0639704167842865f, 0.36943578720092773f, -0.6626556515693665f, 0.9422509074211121f, 0.048815611749887466f, 0.15797248482704163f, 0.02244883030653f, 0.2038598507642746f, 0.9035282135009766f, 0.35522371530532837f, -0.4417390525341034f, 0.6144898533821106f, 0.5828905701637268f, 0.7316933274269104f, 0.0647231787443161f, 0.4545711576938629f, 0.20682793855667114f, 0.9025222063064575f, -0.20397226512432098f, 0.9780237078666687f, 0.03324200585484505f, 0.30370616912841797f, 0.14461037516593933f, 0.0073113213293254375f, 0.9244728088378906f, 0.42346450686454773f, -0.6340591907501221f, 0.6709445714950562f, 0.442587286233902f, 0.863787055015564f, 0.16701261699199677f, 0.02477348782122135f, 0.13045825064182281f, 0.2614194452762604f, -0.7395967245101929f, 0.6494101285934448f, 0.06436193734407425f, 0.42907780408859253f, 0.7707551717758179f, 0.7466862797737122f, 0.5306037664413452f, 0.7564306259155273f, -0.15860892832279205f, 0.05955104902386665f, 0.16175280511379242f, 0.013701004907488823f, 0.2979050874710083f, 0.7504091858863831f, 0.8540748953819275f, 0.3588739037513733f, -0.7964194416999817f, 0.5970578193664551f, 0.5023670792579651f, 0.8918502330780029f, 0.2412637621164322f, 0.7782974243164062f, 0.2499406784772873f, 0.5963648557662964f, -0.14942558109760284f, 0.5699835419654846f, 0.5531222820281982f, 0.2236110419034958f, 0.40193095803260803f, 0.43187081813812256f, 0.9944794774055481f, 0.37903910875320435f, -0.23905135691165924f, 0.4270486831665039f, 0.3523890972137451f, 0.6489997506141663f, 0.6343730688095093f, 0.7462947368621826f, 0.9485473036766052f, 0.9839943051338196f, -0.3447187840938568f, 0.8749613761901855f, 0.19008423388004303f, 0.11159531027078629f, 0.6596611738204956f, 0.8542526960372925f, 0.003842431353405118f, 0.22297945618629456f, -0.8366417288780212f, 0.4619954228401184f, 0.5359227061271667f, 0.6329748034477234f, 0.4968235492706299f, 0.7874961495399475f, 0.1030203327536583f, 0.5512955784797668f, -0.057945217937231064f, 0.3607771098613739f, 0.4690614342689514f, 0.2554928660392761f, 0.9241013526916504f, 0.5885046124458313f, 0.0579441674053669f, 0.6956585645675659f, -0.8866296410560608f, 0.03094377927482128f, 0.2623597979545593f, 0.5787043571472168f, 0.2646109163761139f, 0.76835697889328f, 0.5797847509384155f, 0.27039140462875366f, -0.4516266882419586f, 0.7769573926925659f, 0.7239662408828735f, 0.46775704622268677f, 0.06426812708377838f, 0.12473545968532562f, 0.48062822222709656f, 0.9970142245292664f, -0.9829545617103577f, 0.41851985454559326f, 0.2265922874212265f, 0.505221426486969f, 0.49070069193840027f, 0.9154602289199829f, 0.5462839007377625f, 0.84299236536026f, -0.9951459169387817f, 0.27195438742637634f, 0.39943504333496094f, 0.40413978695869446f, 0.8587040901184082f, 0.4542403221130371f, 0.6652899980545044f, 0.23968371748924255f, -0.11108803749084473f, 0.9808860421180725f, 0.3292153477668762f, 0.37784698605537415f, 0.48010849952697754f, 0.7418050169944763f, 0.4522325098514557f, 0.8143232464790344f, -0.6145400404930115f, 0.09785199910402298f, 0.06556762754917145f, 0.9414976239204407f, 0.5121048092842102f, 0.6757389307022095f, 0.1332237720489502f, 0.7279758453369141f, -0.5692405104637146f, 0.12665539979934692f, 0.28395333886146545f, 0.7522232532501221f, 0.4190638065338135f, 0.8535575270652771f, 0.6418984532356262f, 0.13972529768943787f, -0.557788610458374f, 0.23728220164775848f, 0.9592398405075073f, 0.10586618632078171f, 0.5809319615364075f, 0.9234333038330078f, 0.380325049161911f, 0.8480905294418335f, -0.6032681465148926f, 0.987865149974823f, 0.2890220582485199f, 0.9846034049987793f, 0.11260504275560379f, 0.7394155859947205f, 0.15699590742588043f, 0.17537082731723785f, -0.3116837739944458f, 0.574407696723938f, 0.4074684977531433f, 0.4351085424423218f, 0.6070078015327454f, 0.27728578448295593f, 0.9733239412307739f, 0.49548327922821045f, -0.25498950481414795f, 0.04587099328637123f, 0.7040503621101379f, 0.5049269795417786f, 0.08244369179010391f, 0.7463153600692749f, 0.8201643228530884f, 0.6620906591415405f, -0.9550551176071167f, 0.9633144736289978f, 0.7037283778190613f, 0.3957952558994293f, 0.4420144855976105f, 0.14198531210422516f, 0.4342859089374542f, 0.6953241229057312f, -0.5300332903862f, 0.5085601806640625f, 0.6913920044898987f, 0.20672878623008728f, 0.9037980437278748f, 0.4697878360748291f, 0.4001751244068146f, 0.9599065184593201f, -0.11811581999063492f, 0.6327069997787476f, 0.2973669171333313f, 0.4918585419654846f, 0.8438740968704224f, 0.39239126443862915f, 0.9797354340553284f, 0.42316725850105286f, -0.31965404748916626f, 0.4830717146396637f, 0.5107787251472473f, 0.4955021142959595f, 0.4207141697406769f, 0.8701004981994629f, 0.7300317287445068f, 0.29356515407562256f, -0.020456673577427864f, 0.3119259178638458f, 0.2045077532529831f, 0.03856378793716431f, 0.3379459083080292f, 0.8395649194717407f, 0.9149749279022217f, 0.23982597887516022f, -0.01675354316830635f, 0.7708331346511841f, 0.38302332162857056f, 0.19910699129104614f, 0.85373854637146f, 0.7056142091751099f, 0.1966199278831482f, 0.3039989471435547f, -0.41898784041404724f, 0.6728096604347229f, 0.3986278176307678f, 0.9068235754966736f, 0.8320860862731934f, 0.10981521755456924f, 0.5754652619361877f, 0.9056469202041626f, -0.5999792814254761f, 0.380695104598999f, 0.01676652394235134f, 0.6997370719909668f, 0.03080235980451107f, 0.8087186217308044f, 0.1821793168783188f, 0.9220967292785645f, -0.36988911032676697f, 0.4253709614276886f, 0.7610157132148743f, 0.3661201000213623f, 0.8680257201194763f, 0.8100730180740356f, 0.1527157872915268f, 0.7659719586372375f, -0.06631096452474594f, 0.8254544734954834f, 0.9064136743545532f, 0.051143620163202286f, 0.16552042961120605f, 0.20035512745380402f, 0.9237549304962158f, 0.3487270474433899f, -0.034247398376464844f, 0.8678804636001587f, 0.4896242916584015f, 0.10224119573831558f, 0.7117990851402283f, 0.9283666610717773f, 0.04685795307159424f, 0.9524646401405334f, -0.7914733290672302f, 0.8077101707458496f, 0.12776856124401093f, 0.2256009876728058f, 0.36357688903808594f, 0.18333405256271362f, 0.9568731188774109f, 0.9604790210723877f, -0.24707749485969543f, 0.8043429851531982f, 0.5574144721031189f, 0.16698484122753143f, 0.5528436899185181f, 0.33654576539993286f, 0.5644718408584595f, 0.05351073294878006f, -0.21740654110908508f, 0.06302683055400848f, 0.370330274105072f, 0.3880470395088196f, 0.20934495329856873f, 0.6692440509796143f, 0.8248907327651978f, 0.8270333409309387f, -0.16881003975868225f, 0.9646315574645996f, 0.060613587498664856f, 0.8416626453399658f, 0.08172934502363205f, 0.3510708808898926f, 0.7176304459571838f, 0.7759733200073242f, -0.6154550313949585f, 0.25870001316070557f, 0.9455689191818237f, 0.26383310556411743f, 0.5875483751296997f, 0.5354381799697876f, 0.7502477765083313f, 0.27400699257850647f, -0.837999165058136f, 0.35784193873405457f, 0.6900624632835388f, 0.9677465558052063f, 0.3939059376716614f, 0.13959498703479767f, 0.29435107111930847f, 0.40688225626945496f, -0.49514028429985046f, 0.7425023317337036f, 0.6773648858070374f, 0.8525682687759399f, 0.9803110361099243f, 0.8883466124534607f, 0.5968344807624817f, 0.9577118754386902f, -0.6165522933006287f, 0.7309381365776062f, 0.2030191570520401f, 0.8337736129760742f, 0.2237599492073059f, 0.9921413660049438f, 0.1928205043077469f, 0.3365723192691803f, -0.9023409485816956f, 0.24869713187217712f, 0.9789868593215942f, 0.03929240629076958f, 0.11695683747529984f, 0.023251758888363838f, 0.28858235478401184f, 0.28808704018592834f, -0.3940223455429077f, 0.6188757419586182f, 0.4229521155357361f, 0.27469363808631897f, 0.860341489315033f, 0.23252271115779877f, 0.48824915289878845f, 0.8809365034103394f, -0.13353417813777924f, 0.5564216375350952f, 0.16971303522586823f, 0.1737789511680603f, 0.7512290477752686f, 0.21536867320537567f, 0.7583995461463928f, 0.4911721348762512f, -0.6430092453956604f, 0.45657846331596375f, 0.23850281536579132f, 0.927849531173706f, 0.16815511882305145f, 0.19372452795505524f, 0.46313124895095825f, 0.0036972765810787678f, -0.8504109382629395f, 0.04992625489830971f, 0.04561913013458252f, 0.9245433807373047f, 0.20808397233486176f, 0.5516261458396912f, 0.7528613209724426f, 0.06121591851115227f, -0.7237585783004761f, 0.38892003893852234f, 0.8081094026565552f, 0.953289270401001f, 0.7901846170425415f, 0.35017630457878113f, 0.05870829150080681f, 0.774914026260376f, -0.3453032970428467f, 0.7909635305404663f, 0.47412896156311035f, 0.9114777445793152f, 0.14577916264533997f, 0.35596969723701477f, 0.7209241390228271f, 0.45214706659317017f, -0.7328574657440186f, 0.37761780619621277f, 0.09314874559640884f, 0.9142218232154846f, 0.03118267096579075f, 0.5340690612792969f, 0.5756677389144897f, 0.476686030626297f, -0.5583667159080505f, 0.9967659711837769f, 0.8235061168670654f, 0.6059461832046509f, 0.534960150718689f, 0.6980161070823669f, 0.2847655713558197f, 0.6978345513343811f, -0.9365307092666626f, 0.05987687408924103f, 0.9373369812965393f, 0.2316499948501587f, 0.5066384077072144f, 0.9597339630126953f, 0.49583616852760315f, 0.8111740946769714f, -0.42667341232299805f, 0.3444914221763611f, 0.19312356412410736f, 0.9201809763908386f, 0.5057969689369202f, 0.1782410889863968f, 0.49657073616981506f, 0.660480797290802f, -0.3567686080932617f, 0.007089380640536547f, 0.8654558658599854f, 0.8726184964179993f, 0.008613096550107002f, 0.3579893112182617f, 0.5481314659118652f, 0.4175017774105072f, -0.7967519164085388f, 0.6554976105690002f, 0.04535472393035889f, 0.7249020338058472f, 0.6552581191062927f, 0.33459529280662537f, 0.6498463749885559f, 0.20392505824565887f, -0.9098231792449951f, 0.9394389986991882f, 0.25880834460258484f, 0.23354311287403107f, 0.5409868955612183f, 0.5365724563598633f, 0.1814885437488556f, 0.41519296169281006f, -0.6728554964065552f, 0.8166565299034119f, 0.15831926465034485f, 0.47492191195487976f, 0.1564437299966812f, 0.9397526979446411f, 0.48915553092956543f, 0.01843271031975746f, -0.6407870054244995f, 0.29003000259399414f, 0.4748421907424927f, 0.28702351450920105f, 0.7463215589523315f, 0.003355527063831687f, 0.763835072517395f, 0.6548022627830505f, -0.15626338124275208f, 0.20389702916145325f, 0.8571258783340454f, 0.35044631361961365f, 0.9963211417198181f, 0.47089362144470215f, 0.6520148515701294f, 0.9649228453636169f, -0.9744757413864136f, 0.241403728723526f, 0.07056044042110443f, 0.11046236753463745f, 0.700064480304718f, 0.02710329368710518f, 0.20177850127220154f, 0.6509073376655579f, -0.6441012024879456f, 0.7505170106887817f, 0.2705889046192169f, 0.7332003712654114f, 0.74518883228302f, 0.54465651512146f, 0.5517799258232117f, 0.6649396419525146f, -0.08345520496368408f, 0.8274570107460022f, 0.4515170753002167f, 0.11521600186824799f, 0.4462548494338989f, 0.17560453712940216f, 0.28889334201812744f, 0.24250206351280212f, -0.6143271923065186f, 0.019195031374692917f, 0.48286280035972595f, 0.1398613303899765f, 0.6341950297355652f, 0.7376027703285217f, 0.598569393157959f, 0.6965015530586243f, -0.02316967211663723f, 0.7988055944442749f, 0.8588842749595642f, 0.1411857306957245f, 0.6288434267044067f, 0.6262413859367371f, 0.9430145621299744f, 0.7663228511810303f, -0.8124332427978516f, 0.19167250394821167f, 0.46373453736305237f, 0.8586466312408447f, 0.36176374554634094f, 0.45996591448783875f, 0.0493086539208889f, 0.9311025142669678f, -0.8187568783760071f, 0.8378192186355591f, 0.030214089900255203f, 0.6935946345329285f, 0.8598066568374634f, 0.3857880234718323f, 0.3056846559047699f, 0.24412484467029572f, -0.8848139643669128f, 0.0254505667835474f, 0.3740002512931824f, 0.17300714552402496f, 0.6878271698951721f, 0.9604090452194214f, 0.2951669991016388f, 0.5590916275978088f, -0.6954740285873413f, 0.3942376673221588f, 0.8848286271095276f, 0.5572025179862976f, 0.3616635501384735f, 0.9735121130943298f, 0.9613204002380371f, 0.7781985998153687f, -0.9471666812896729f, 0.7943854331970215f, 0.19520509243011475f, 0.39686861634254456f, 0.6682755351066589f, 0.17348600924015045f, 0.8131114840507507f, 0.4081663191318512f, -0.12587732076644897f, 0.10725575685501099f, 0.9780873656272888f, 0.45745787024497986f, 0.853488028049469f, 0.7264538407325745f, 0.9574516415596008f, 0.9669331312179565f, -0.02894938364624977f, 0.45147889852523804f, 0.11504397541284561f, 0.30152279138565063f, 0.6476282477378845f, 0.2548311948776245f, 0.17237509787082672f, 0.954267680644989f, -0.7336511015892029f, 0.6683245897293091f, 0.3172115683555603f, 0.24566425383090973f, 0.6453496217727661f, 0.23286116123199463f, 0.30794912576675415f, 0.23845815658569336f, -0.4286870062351227f, 0.9769793152809143f, 0.1715640425682068f, 0.17552676796913147f, 0.11423777788877487f, 0.4002320468425751f, 0.9206235408782959f, 0.7924907207489014f, -0.950301468372345f, 0.464537650346756f, 0.5126034617424011f, 0.8598743677139282f, 0.12328220158815384f, 0.9858752489089966f, 0.4804183840751648f, 0.7682298421859741f, -0.8423612713813782f, 0.259949266910553f, 0.4094957709312439f, 0.590988039970398f, 0.6491184830665588f, 0.7934529781341553f, 0.47161999344825745f, 0.7304807305335999f, -0.006425475236028433f, 0.743012011051178f, 0.5525249242782593f, 0.45440977811813354f, 0.4222262501716614f, 0.7286943793296814f, 0.2924376428127289f, 0.8407782912254333f, -0.6428177356719971f, 0.6863739490509033f, 0.15515412390232086f, 0.6729956865310669f, 0.8956867456436157f, 0.2347303032875061f, 0.2077276110649109f, 0.0494280569255352f, -0.5450705289840698f, 0.5829173922538757f, 0.3630518615245819f, 0.32148033380508423f, 0.22588543593883514f, 0.38691750168800354f, 0.13559968769550323f, 0.29914307594299316f, -0.2107212394475937f, 0.8024481534957886f, 0.07426328957080841f, 0.7499511241912842f, 0.9043224453926086f, 0.7533439993858337f, 0.6105931401252747f, 0.35800090432167053f, -0.5273719429969788f, 0.42861831188201904f, 0.06693475693464279f, 0.0887698233127594f, 0.5787147283554077f, 0.004423694219440222f, 0.3960714340209961f, 0.1457676887512207f, -0.6483666300773621f, 0.13386449217796326f, 0.45530450344085693f, 0.2123357504606247f, 0.7290928363800049f, 0.6123234629631042f, 0.8653300404548645f, 0.6378061175346375f, -0.806420624256134f, 0.16903436183929443f, 0.6989834308624268f, 0.7346838712692261f, 0.8257285356521606f, 0.04829145595431328f, 0.7438396215438843f, 0.044466909021139145f, -0.12642806768417358f, 0.5037513375282288f, 0.09744684398174286f, 0.7791340351104736f, 0.671975314617157f, 0.8719903230667114f, 0.17190438508987427f, 0.09033027291297913f, -0.6864814162254333f, 0.9139289259910583f, 0.20843228697776794f, 0.8048595786094666f, 0.9892703294754028f, 0.9170348644256592f, 0.022617945447564125f, 0.5776330828666687f, -0.15542888641357422f, 0.37725862860679626f, 0.7647619843482971f, 0.9461772441864014f, 0.027325913310050964f, 0.3399756848812103f, 0.7542235255241394f, 0.856212854385376f, -0.6529627442359924f, 0.6268021464347839f, 0.28166458010673523f, 0.47364911437034607f, 0.060242339968681335f, 0.8209209442138672f, 0.3260587155818939f, 0.0001640729169594124f, -0.7448867559432983f, 0.41175293922424316f, 0.018204908818006516f, 0.25952813029289246f, 0.9964519143104553f, 0.4336795210838318f, 0.8897639513015747f, 0.21989822387695312f, -0.7814463376998901f, 0.7378251552581787f, 0.29727378487586975f, 0.19990800321102142f, 0.43126946687698364f, 0.7873287200927734f, 0.3138142228126526f, 0.2876642346382141f, -0.7016658782958984f, 0.6089133024215698f, 0.11734721064567566f, 0.8879112005233765f, 0.46416381001472473f, 0.8747069835662842f, 0.5990705490112305f, 0.6128226518630981f, -0.4946099817752838f, 0.745774507522583f, 0.8155998587608337f, 0.8317232131958008f, 0.10997088998556137f, 0.9162928462028503f, 0.22267498075962067f, 0.3637949824333191f, -0.4998303949832916f, 0.31884685158729553f, 0.9258963465690613f, 0.11640594899654388f, 0.5497346520423889f, 0.05394355580210686f, 0.28114190697669983f, 0.2375182807445526f, -0.9139414429664612f, 0.05836828798055649f, 0.893718421459198f, 0.40223705768585205f, 0.0021393706556409597f, 0.36805200576782227f, 0.35176125168800354f, 0.9300415515899658f, -0.22553683817386627f, 0.5211142897605896f, 0.009076792746782303f, 0.44429445266723633f, 0.42370107769966125f, 0.11432195454835892f, 0.6186831593513489f, 0.9781380295753479f, -0.14809085428714752f, 0.384361207485199f, 0.6864412426948547f, 0.5473632216453552f, 0.3332895040512085f, 0.5819441676139832f, 0.19231896102428436f, 0.8215128183364868f, -0.7153099179267883f, 0.8767112493515015f, 0.3545350730419159f, 0.5545632839202881f, 0.48470649123191833f, 0.6576506495475769f, 0.6988890767097473f, 0.1044425368309021f, -0.38495561480522156f, 0.8068277835845947f, 0.9648447036743164f, 0.10256095975637436f, 0.7352783679962158f, 0.0555301271378994f, 0.3201999366283417f, 0.9873960614204407f, -0.40216606855392456f, 0.8633415102958679f, 0.9427807331085205f, 0.9676252007484436f, 0.8005722165107727f, 0.3144543468952179f, 0.487180233001709f, 0.9214639067649841f, -0.05223847180604935f, 0.0883575826883316f, 0.09656693786382675f, 0.7067498564720154f, 0.33967554569244385f, 0.9260318875312805f, 0.09558107703924179f, 0.6503939628601074f, -0.5118846893310547f, 0.7655817270278931f, 0.1420423835515976f, 0.055122826248407364f, 0.01727961003780365f, 0.4256519079208374f, 0.8859559893608093f, 0.2755235731601715f, -0.0365583673119545f, 0.6433073878288269f, 0.7577797174453735f, 0.29695743322372437f, 0.6812909841537476f, 0.049503177404403687f, 0.898015558719635f, 0.31235241889953613f, -0.5510639548301697f, 0.66387939453125f, 0.4526039659976959f, 0.4380888342857361f, 0.5760678648948669f, 0.042365118861198425f, 0.8013266324996948f, 0.8491970896720886f, -0.22095513343811035f, 0.2795797288417816f, 0.9735501408576965f, 0.7939592599868774f, 0.4948482811450958f, 0.18128670752048492f, 0.538999617099762f, 0.757276177406311f, -0.3913819193840027f, 0.2256685495376587f, 0.9391065835952759f, 0.3296080231666565f, 0.7564560770988464f, 0.7573086619377136f, 0.30682942271232605f, 0.0968254879117012f, -0.8921389579772949f, 0.396354079246521f, 0.3914634585380554f, 0.5728265047073364f, 0.2163141816854477f, 0.3006160855293274f, 0.14316889643669128f, 0.03360931575298309f, -0.19683843851089478f, 0.7098407745361328f, 0.9429147243499756f, 0.16212573647499084f, 0.9868553280830383f, 0.6015674471855164f, 0.849655270576477f, 0.15357835590839386f, -0.8096426129341125f, 0.9293807148933411f, 0.04796478524804115f, 0.017842981964349747f, 0.8519650101661682f, 0.1050838977098465f, 0.9164649248123169f, 0.8772982954978943f, -0.09494336694478989f, 0.6273428797721863f, 0.6989830732345581f, 0.5065542459487915f, 0.5486889481544495f, 0.36412179470062256f, 0.04324464872479439f, 0.8036215901374817f, -0.8031323552131653f, 0.07139766961336136f, 0.06502583622932434f, 0.5062403082847595f, 0.20775656402111053f, 0.03789430484175682f, 0.9005048274993896f, 0.5102697014808655f, -0.298788458108902f, 0.37896519899368286f, 0.47848135232925415f, 0.4661542475223541f, 0.7732184529304504f, 0.41946688294410706f, 0.6269529461860657f, 0.5551499128341675f, -0.04416083171963692f, 0.23249514400959015f, 0.6501819491386414f, 0.49853238463401794f, 0.031546495854854584f, 0.11376656591892242f, 0.32588258385658264f, 0.7896535992622375f, -0.9239780902862549f, 0.6780317425727844f, 0.4913219213485718f, 0.9390518069267273f, 0.9170863032341003f, 0.39745205640792847f, 0.007718143984675407f, 0.9416697025299072f, -0.9352251291275024f, 0.7690147161483765f, 0.9981340169906616f, 0.8694754242897034f, 0.9972984194755554f, 0.42319628596305847f, 0.5671378970146179f, 0.696503221988678f, -0.9151027798652649f, 0.028024328872561455f, 0.2918287515640259f, 0.9304337501525879f, 0.37307846546173096f, 0.3464619219303131f, 0.4305386543273926f, 0.8300960659980774f, -0.5778043270111084f, 0.8111752271652222f, 0.13656412065029144f, 0.8565636873245239f, 0.7408909797668457f, 0.20980210602283478f, 0.6845217943191528f, 0.8139221668243408f, -0.24262069165706635f, 0.6815133690834045f, 0.9873573780059814f, 0.6828001737594604f, 0.26899072527885437f, 0.9103057980537415f, 0.26675647497177124f, 0.7841249704360962f, -0.578101634979248f, 0.7807080745697021f, 0.4710672199726105f, 0.8271394968032837f, 0.4892052412033081f, 0.8144481778144836f, 0.7078461647033691f, 0.38163477182388306f, -0.3825749158859253f, 0.3756454885005951f, 0.9975058436393738f, 0.6214891076087952f, 0.647551953792572f, 0.3791837692260742f, 0.13386006653308868f, 0.059728607535362244f, -0.7112236618995667f, 0.9622542858123779f, 0.376968652009964f, 0.9742438197135925f, 0.6803184151649475f, 0.6827352643013f, 0.1619379222393036f, 0.8326146006584167f, -0.27504441142082214f, 0.6388344764709473f, 0.22020594775676727f, 0.34436818957328796f, 0.200045645236969f, 0.09745067358016968f, 0.07920537889003754f, 0.25886470079421997f, -0.9356324672698975f, 0.8853225111961365f, 0.35097211599349976f, 0.46046575903892517f, 0.7470248341560364f, 0.8001919984817505f, 0.010631987825036049f, 0.2803708612918854f, -0.7046042084693909f, 0.2876489460468292f, 0.035514723509550095f, 0.7692643404006958f, 0.22261108458042145f, 0.6084657907485962f, 0.31870776414871216f, 0.30464157462120056f, -0.41328367590904236f, 0.7625457048416138f, 0.9405269622802734f, 0.907249927520752f, 0.894478976726532f, 0.7692955732345581f, 0.34160780906677246f, 0.5998509526252747f, -0.2811642587184906f, 0.4785471260547638f, 0.8681966066360474f, 0.04342266917228699f, 0.8750017881393433f, 0.9988105297088623f, 0.841713547706604f, 0.5425392985343933f, -0.1353013813495636f, 0.3384624123573303f, 0.2975703477859497f, 0.6618345975875854f, 0.14882269501686096f, 0.4923485219478607f, 0.83673095703125f, 0.9430660605430603f, -0.9084741473197937f, 0.7715400457382202f, 0.8326882123947144f, 0.6903112530708313f, 0.4572694003582001f, 0.9058242440223694f, 0.4985961616039276f, 0.6200729012489319f, -0.3182718753814697f, 0.7077697515487671f, 0.8532195091247559f, 0.6546608209609985f, 0.20373372733592987f, 0.6537269353866577f, 0.45938268303871155f, 0.4565517008304596f, -0.9647131562232971f, 0.4215519428253174f, 0.5000253915786743f, 0.11542151868343353f, 0.4554327130317688f, 0.6000188589096069f, 0.12204920500516891f, 0.6517630219459534f, -0.8578510880470276f, 0.7177325487136841f, 0.6538370251655579f, 0.5431165099143982f, 0.7448396682739258f, 0.9895415902137756f, 0.006765761412680149f, 0.45381686091423035f, -0.5699407458305359f, 0.6657756567001343f, 0.49198636412620544f, 0.874843180179596f, 0.576583981513977f, 0.9783938527107239f, 0.2075183391571045f, 0.8221939206123352f, -0.603064239025116f, 0.5286979675292969f, 0.4083762466907501f, 0.018294045701622963f, 0.6038996577262878f, 0.5505656003952026f, 0.37031063437461853f, 0.41625046730041504f, -0.7713103294372559f, 0.41492804884910583f, 0.7741436958312988f, 0.9152447581291199f, 0.1172502189874649f, 0.8453711867332458f, 0.9970516562461853f, 0.30002954602241516f, -0.30646777153015137f, 0.37412965297698975f, 0.29618120193481445f, 0.2637197971343994f, 0.22126756608486176f, 0.39385131001472473f, 0.7078040242195129f, 0.7641443014144897f, -0.9984588623046875f, 0.7173429131507874f, 0.7527623772621155f, 0.12689636647701263f, 0.9542233943939209f, 0.4893433749675751f, 0.17706020176410675f, 0.3610333800315857f, -0.12409777194261551f, 0.8995109796524048f, 0.13522504270076752f, 0.26750868558883667f, 0.444376677274704f, 0.21841618418693542f, 0.5478275418281555f, 0.2886255383491516f, -0.6206606030464172f, 0.6738200187683105f, 0.158323734998703f, 0.42921799421310425f, 0.15447404980659485f, 0.518659770488739f, 0.18431456387043f, 0.05029036104679108f, -0.29617229104042053f, 0.9971966743469238f, 0.5439448356628418f, 0.6628648638725281f, 0.4310348629951477f, 0.555101215839386f, 0.048232302069664f, 0.27059200406074524f, -0.8113362193107605f, 0.7586269974708557f, 0.8897688984870911f, 0.99323970079422f, 0.07896990329027176f, 0.8480687141418457f, 0.11247201263904572f, 0.7173124551773071f, -0.3567980229854584f, 0.6399664878845215f, 0.2412218600511551f, 0.9931946992874146f, 0.2666199505329132f, 0.9203693866729736f, 0.43284741044044495f, 0.49965545535087585f, -0.5921038389205933f, 0.9212735295295715f, 0.9582502841949463f, 0.12173107266426086f, 0.3559035360813141f, 0.6854214072227478f, 0.8951027393341064f, 0.5683135390281677f, -0.9394803047180176f, 0.16145673394203186f, 0.6533332467079163f, 0.30025458335876465f, 0.71486896276474f, 0.7423697710037231f, 0.22422030568122864f, 0.7648594379425049f, -0.37454208731651306f, 0.3082922697067261f, 0.9173159003257751f, 0.6679877042770386f, 0.8164969086647034f, 0.2819782793521881f, 0.15595120191574097f, 0.48055341839790344f, -0.7878451347351074f, 0.0837680920958519f, 0.16027775406837463f, 0.6946912407875061f, 0.36564600467681885f, 0.6583799719810486f, 0.5570698380470276f, 0.021441010758280754f, -0.4204503297805786f, 0.7097898721694946f, 0.0070629604160785675f, 0.29771363735198975f, 0.0011921445839107037f, 0.8723564743995667f, 0.33225804567337036f, 0.8411946892738342f, -0.6021048426628113f, 0.8702071905136108f, 0.8372960686683655f, 0.4768415093421936f, 0.6902289390563965f, 0.8520441055297852f, 0.5622596144676208f, 0.6735870242118835f, -0.6224834322929382f, 0.6817695498466492f, 0.5565117597579956f, 0.5936611294746399f, 0.7094128131866455f, 0.2606695890426636f, 0.5054524540901184f, 0.0687117874622345f, -0.5004580020904541f, 0.9922334551811218f, 0.751595675945282f, 0.4209754168987274f, 0.0611504428088665f, 0.265168160200119f, 0.6701803207397461f, 0.8896877765655518f, -0.9830138683319092f, 0.5702942609786987f, 0.7824578881263733f, 0.5019682049751282f, 0.8770473003387451f, 0.5228215456008911f, 0.25887182354927063f, 0.9993405342102051f, -0.9901755452156067f, 0.9114287495613098f, 0.6676598191261292f, 0.7684841752052307f, 0.9104709029197693f, 0.2068871408700943f, 0.615935206413269f, 0.8890359997749329f, -0.9013625979423523f, 0.3610665202140808f, 0.5584561824798584f, 0.8807449340820312f, 0.862128496170044f, 0.33648252487182617f, 0.7057212591171265f, 0.22927136719226837f, -0.7856196165084839f, 0.21340331435203552f, 0.6417996883392334f, 0.8436668515205383f, 0.6758657693862915f, 0.4389921724796295f, 0.7482907176017761f, 0.4895883798599243f, -0.44884079694747925f, 0.19506467878818512f, 0.9749286770820618f, 0.2137926071882248f, 0.36347097158432007f, 0.9332455396652222f, 0.23681636154651642f, 0.6302573084831238f, -0.28731629252433777f, 0.7293248176574707f, 0.7536763548851013f, 0.6063036322593689f, 0.47240325808525085f, 0.07746565341949463f, 0.3298625946044922f, 0.18175645172595978f, -0.9023533463478088f, 0.23960869014263153f, 0.2517194449901581f, 0.7087815403938293f, 0.37948355078697205f, 0.0269472636282444f, 0.5993933081626892f, 0.5510429739952087f, -0.7004274129867554f, 0.7245900630950928f, 0.07333897054195404f, 0.4100145399570465f, 0.5141205191612244f, 0.8322973847389221f, 0.34670671820640564f, 0.5609953999519348f, -0.7789194583892822f, 0.35751309990882874f, 0.5639124512672424f, 0.35280540585517883f, 0.4892583191394806f, 0.6447136998176575f, 0.4593861699104309f, 0.23209942877292633f, -0.9707139134407043f, 0.7321913838386536f, 0.036259301006793976f, 0.6876112222671509f, 0.41126787662506104f, 0.7567342519760132f, 0.09293091297149658f, 0.07258584350347519f, -0.481166809797287f, 0.13309623301029205f, 0.9530408382415771f, 0.0765300765633583f, 0.37413907051086426f, 0.8615156412124634f, 0.7708081603050232f, 0.03253917023539543f, -0.4016287922859192f, 0.8811249732971191f, 0.43406617641448975f, 0.5107806324958801f, 0.5046225786209106f, 0.24141618609428406f, 0.4562465250492096f, 0.8215422630310059f, -0.5319868326187134f, 0.8800548911094666f, 0.9495132565498352f, 0.5784745812416077f, 0.18635153770446777f, 0.1393432766199112f, 0.9817385077476501f, 0.8113709092140198f, -0.8548088669776917f, 0.8628193140029907f, 0.9865127205848694f, 0.7508739829063416f, 0.8469505310058594f, 0.1381654292345047f, 0.8876730799674988f, 0.6717658042907715f, -0.7826068997383118f, 0.09217774122953415f, 0.03546474128961563f, 0.7104117274284363f, 0.8600329160690308f, 0.43038326501846313f, 0.7977439761161804f, 0.3793554902076721f, -0.39853957295417786f, 0.07593464851379395f, 0.9236675500869751f, 0.4149061441421509f, 0.3563193082809448f, 0.8375599980354309f, 0.6187517642974854f, 0.4451048672199249f, -0.7569819092750549f, 0.9983177781105042f, 0.8050602078437805f, 0.8659498691558838f, 0.46472904086112976f, 0.6620948314666748f, 0.3287769854068756f, 0.8689994812011719f, -0.12002751231193542f, 0.9837472438812256f, 0.027220340445637703f, 0.9517334699630737f, 0.05057011917233467f, 0.23613744974136353f, 0.3358243703842163f, 0.15302009880542755f, -0.8928970694541931f, 0.5062786936759949f, 0.9317892789840698f, 0.14213934540748596f, 0.1545996516942978f, 0.22332420945167542f, 0.8606374263763428f, 0.9920529127120972f, -0.4836844503879547f, 0.22814446687698364f, 0.6554035544395447f, 0.8539131283760071f, 0.9143315553665161f, 0.8804396986961365f, 0.26331672072410583f, 0.36035585403442383f, -0.15503086149692535f, 0.3448675572872162f, 0.85392826795578f, 0.9434925317764282f, 0.6181796193122864f, 0.908858060836792f, 0.6520962119102478f, 0.350146621465683f, -0.8274497389793396f, 0.7100204229354858f, 0.6260897517204285f, 0.29512926936149597f, 0.9818930625915527f, 0.550724446773529f, 0.4442194104194641f, 0.9289306402206421f, -0.6247345805168152f, 0.4651590585708618f, 0.7432096004486084f, 0.043095365166664124f, 0.5397086143493652f, 0.071221262216568f, 0.07869796454906464f, 0.3499850928783417f, -0.49823349714279175f, 0.7364708781242371f, 0.6612979173660278f, 0.714434802532196f, 0.06475402414798737f, 0.3401035964488983f, 0.6456628441810608f, 0.03249778971076012f, -0.2846565246582031f, 0.8218938708305359f, 0.7555005550384521f, 0.22640958428382874f, 0.3500674068927765f, 0.9590960144996643f, 0.9986200332641602f, 0.3281600773334503f, -0.5695921778678894f, 0.6426911950111389f, 0.9102038145065308f, 0.4739628732204437f, 0.978011429309845f, 0.6661853790283203f, 0.7266901135444641f, 0.16946858167648315f, -0.7925025820732117f, 0.3053385317325592f, 0.7468429207801819f, 0.2859566807746887f, 0.7194824814796448f, 0.09432879090309143f, 0.05183150991797447f, 0.48865488171577454f, -0.8528358340263367f, 0.9188558459281921f, 0.5497276186943054f, 0.8130354285240173f, 0.44653943181037903f, 0.6815072894096375f, 0.7590802907943726f, 0.8556429147720337f, -0.7837921977043152f, 0.5903109908103943f, 0.8594547510147095f, 0.11533815413713455f, 0.42749929428100586f, 0.6516762375831604f, 0.9317508935928345f, 0.9361156225204468f, -0.5998687744140625f, 0.38291966915130615f, 0.02505493350327015f, 0.1195448786020279f, 0.36782997846603394f, 0.13853506743907928f, 0.683484673500061f, 0.1759127974510193f, -0.2888198494911194f, 0.8162463307380676f, 0.3495335876941681f, 0.33045318722724915f, 0.8551762700080872f, 0.12902040779590607f, 0.8526456952095032f, 0.6026912331581116f, -0.9031690955162048f, 0.12291357666254044f, 0.11076387017965317f, 0.48999106884002686f, 0.23687255382537842f, 0.4950760006904602f, 0.1313445121049881f, 0.7395028471946716f, -0.945259153842926f, 0.847944438457489f, 0.6307790875434875f, 0.15542152523994446f, 0.362673819065094f, 0.07219218462705612f, 0.8951852321624756f, 0.023518426343798637f, -0.47683364152908325f, 0.37850990891456604f, 0.2546291649341583f, 0.4534418284893036f, 0.9762526750564575f, 0.5246965289115906f, 0.30161210894584656f, 0.23999106884002686f, -0.1940041482448578f, 0.5456339120864868f, 0.5447190403938293f, 0.3386000096797943f, 0.45292532444000244f, 0.5539417862892151f, 0.7663055062294006f, 0.2305140495300293f, -0.6197627186775208f, 0.5203630924224854f, 0.9027498364448547f, 0.06286884844303131f, 0.5112097859382629f, 0.4646309018135071f, 0.11890284717082977f, 0.19570323824882507f, -0.5785254836082458f, 0.6810398697853088f, 0.4217357039451599f, 0.49573248624801636f, 0.4974251389503479f, 0.6556512117385864f, 0.27472683787345886f, 0.029438799247145653f, -0.40592968463897705f, 0.9925691485404968f, 0.2642507255077362f, 0.31170085072517395f, 0.01780054159462452f, 0.23047764599323273f, 0.9060454964637756f, 0.15023024380207062f, -0.09392143785953522f, 0.6725542545318604f, 0.7883683443069458f, 0.2556827962398529f, 0.6868558526039124f, 0.5984870791435242f, 0.7098873853683472f, 0.35747650265693665f, -0.9376078248023987f, 0.014860245399177074f, 0.2308744341135025f, 0.2642052471637726f, 0.286639541387558f, 0.19264324009418488f, 0.7159547209739685f, 0.11384451389312744f, -0.6161707639694214f, 0.2469342052936554f, 0.1410863995552063f, 0.00480957655236125f, 0.003287730272859335f, 0.1772860288619995f, 0.2126922458410263f, 0.37575557827949524f, -0.2981877624988556f, 0.5445948243141174f, 0.619447648525238f, 0.5673018097877502f, 0.8829959630966187f, 0.7973681688308716f, 0.5181303024291992f, 0.7534231543540955f, -0.04105183109641075f, 0.6726353764533997f, 0.1301283985376358f, 0.9870744943618774f, 0.1091657504439354f, 0.7091976404190063f, 0.8226519227027893f, 0.44246163964271545f, -0.7288203835487366f, 0.42583417892456055f, 0.9343949556350708f, 0.41134533286094666f, 0.6353251934051514f, 0.16817890107631683f, 0.29728519916534424f, 0.2855398654937744f, -0.17064626514911652f, 0.4171828627586365f, 0.47764796018600464f, 0.39098185300827026f, 0.7374704480171204f, 0.295517235994339f, 0.8360936641693115f, 0.5607746243476868f, -0.09620551764965057f, 0.42256301641464233f, 0.8445187211036682f, 0.32487162947654724f, 0.14150547981262207f, 0.3104754090309143f, 0.6761274337768555f, 0.5348890423774719f, -0.0611630417406559f, 0.7707911133766174f, 0.002775043249130249f, 0.05505431443452835f, 0.9561864137649536f, 0.05034531280398369f, 0.4498441815376282f, 0.6266584396362305f, -0.48641473054885864f, 0.8483188152313232f, 0.6240183711051941f, 0.7955682873725891f, 0.275173157453537f, 0.5563943386077881f, 0.038127586245536804f, 0.49156516790390015f, -0.6324081420898438f, 0.1854536384344101f, 0.38899075984954834f, 0.706200361251831f, 0.3130177855491638f, 0.4753991365432739f, 0.1640709638595581f, 0.9542667865753174f, -0.6874528527259827f, 0.21772974729537964f, 0.5608426928520203f, 0.09105092287063599f, 0.8310830593109131f, 0.35704994201660156f, 0.5737921595573425f, 0.8126915693283081f, -0.5339692234992981f, 0.22240179777145386f, 0.017596397548913956f, 0.5455433130264282f, 0.9479324817657471f, 0.5249329805374146f, 0.2460850179195404f, 0.8192827701568604f, -0.1885460466146469f, 0.8553906083106995f, 0.14218193292617798f, 0.34177571535110474f, 0.01726694032549858f, 0.3658693730831146f, 0.399275004863739f, 0.2632695138454437f, -0.9342396259307861f, 0.5454329252243042f, 0.38481828570365906f, 0.5611515045166016f, 0.8285773396492004f, 0.687662661075592f, 0.5872284770011902f, 0.37782323360443115f, -0.9510570168495178f, 0.7520553469657898f, 0.9492166638374329f, 0.5253994464874268f, 0.592908501625061f, 0.8740895390510559f, 0.12451174855232239f, 0.2710726261138916f, -0.38854020833969116f, 0.27767303586006165f, 0.39873719215393066f, 0.1751260608434677f, 0.19254814088344574f, 0.9540883898735046f, 0.20747345685958862f, 0.950761079788208f, -0.6689170598983765f, 0.628460705280304f, 0.2607229948043823f, 0.5261057615280151f, 0.3162969648838043f, 0.09850014001131058f, 0.6620252728462219f, 0.8404297828674316f, -0.7776497602462769f, 0.5076927542686462f, 0.8068526387214661f, 0.2330116480588913f, 0.6603296995162964f, 0.04880397021770477f, 0.806317925453186f, 0.30225127935409546f, -0.34156233072280884f, 0.30000433325767517f, 0.4389573633670807f, 0.6019353270530701f, 0.662102222442627f, 0.11809296905994415f, 0.18435625731945038f, 0.013071178458631039f, -0.15909142792224884f, 0.04032843932509422f, 0.11912672221660614f, 0.9137143492698669f, 0.17312178015708923f, 0.06644637137651443f, 0.5226843357086182f, 0.6849826574325562f, -0.092234306037426f, 0.5215609669685364f, 0.8396924734115601f, 0.46853509545326233f, 0.10330253839492798f, 0.9781199097633362f, 0.33666378259658813f, 0.9785668849945068f, -0.8296507596969604f, 0.20910227298736572f, 0.4234447777271271f, 0.2954486906528473f, 0.7645148634910583f, 0.2158399373292923f, 0.4346522390842438f, 0.5703012347221375f, -0.16971828043460846f, 0.008963853120803833f, 0.4497103989124298f, 0.9006527662277222f, 0.5784854292869568f, 0.33597514033317566f, 0.9365482926368713f, 0.40152162313461304f, -0.5636050701141357f, 0.9224168658256531f, 0.024563629180192947f, 0.9719236493110657f, 0.4911777973175049f, 0.41761526465415955f, 0.3465155363082886f, 0.6801859140396118f, -0.28988054394721985f, 0.6040023565292358f, 0.6836473345756531f, 0.3703387677669525f, 0.8778159022331238f, 0.5898664593696594f, 0.8392235636711121f, 0.9342520236968994f, -0.39376401901245117f, 0.6189244985580444f, 0.3945833444595337f, 0.959201455116272f, 0.18584157526493073f, 0.8416770696640015f, 0.5313221216201782f, 0.3275904059410095f, -0.6532284617424011f, 0.5108333230018616f, 0.5820698142051697f, 0.9787764549255371f, 0.5388308167457581f, 0.4284767508506775f, 0.6212252974510193f, 0.2098814994096756f, -0.0832664892077446f, 0.2242649346590042f, 0.6129127144813538f, 0.852306067943573f, 0.9579082131385803f, 0.9610037207603455f, 0.7290349006652832f, 0.30446550250053406f, -0.2983359396457672f, 0.5723592638969421f, 0.2531810402870178f, 0.38558244705200195f, 0.22180208563804626f, 0.8805043697357178f, 0.7430662512779236f, 0.9269949197769165f, -0.4839819371700287f, 0.7721084952354431f, 0.8779027462005615f, 0.4551205635070801f, 0.5337694883346558f, 0.525178849697113f, 0.9384798407554626f, 0.8429659008979797f, -0.7369313836097717f, 0.16575637459754944f, 0.19293935596942902f, 0.08313659578561783f, 0.8936373591423035f, 0.5036971569061279f, 0.6456759572029114f, 0.17635062336921692f, -0.21307773888111115f, 0.168702632188797f, 0.8314955234527588f, 0.7078732848167419f, 0.8438335061073303f, 0.35762080550193787f, 0.4698794484138489f, 0.056162040680646896f, -0.45963194966316223f, 0.18977375328540802f, 0.1697784662246704f, 0.7778432965278625f, 0.5753327012062073f, 0.8983596563339233f, 0.6778154373168945f, 0.8906749486923218f, -0.4326530396938324f, 0.5134044885635376f, 0.16524934768676758f, 0.3705664873123169f, 0.30730658769607544f, 0.5285729169845581f, 0.2982843816280365f, 0.7873008251190186f, -0.4696899950504303f, 0.516478419303894f, 0.6317961812019348f, 0.9175705313682556f, 0.23413315415382385f, 0.6038852334022522f, 0.7935447096824646f, 0.8418254256248474f, -0.08575562387704849f, 0.42893725633621216f, 0.4702005386352539f, 0.6991149187088013f, 0.45215776562690735f, 0.8048678040504456f, 0.48667699098587036f, 0.416405588388443f, -0.34541046619415283f, 0.842139482498169f, 0.08004928380250931f, 0.7808946967124939f, 0.6663949489593506f, 0.48848381638526917f, 0.1245521828532219f, 0.4211941063404083f, -0.7197526693344116f, 0.38088834285736084f, 0.6261341571807861f, 0.1780371069908142f, 0.30937761068344116f, 0.09990347921848297f, 0.5262606739997864f, 0.6637631058692932f, -0.2635948956012726f, 0.25248613953590393f, 0.3262144923210144f, 0.6107107400894165f, 0.2041628509759903f, 0.27515339851379395f, 0.6090614199638367f, 0.6360276341438293f, -0.5341176986694336f, 0.35997694730758667f, 0.38621601462364197f, 0.2935276925563812f, 0.0864829272031784f, 0.37365999817848206f, 0.966383159160614f, 0.8391196131706238f, -0.2463238537311554f, 0.0206930972635746f, 0.8295243382453918f, 0.6884793639183044f, 0.659052312374115f, 0.4620908200740814f, 0.09802640229463577f, 0.4069609045982361f, -0.04311691224575043f, 0.4386962950229645f, 0.3068404495716095f, 0.5699819922447205f, 0.405384361743927f, 0.1522197127342224f, 0.5490211248397827f, 0.020985931158065796f, -0.40770483016967773f, 0.4876936078071594f, 0.5308440923690796f, 0.7433078289031982f, 0.10752399265766144f, 0.7893761396408081f, 0.06511546671390533f, 0.731442391872406f, -0.21157298982143402f, 0.5583769083023071f, 0.30695998668670654f, 0.3996281921863556f, 0.2719220519065857f, 0.7775363326072693f, 0.29811039566993713f, 0.2053917497396469f, -0.6395459771156311f, 0.32320788502693176f, 0.5954601764678955f, 0.8613904714584351f, 0.7374956011772156f, 0.4940447211265564f, 0.7848524451255798f, 0.1194252222776413f, -0.5750316381454468f, 0.13991208374500275f, 0.7544143795967102f, 0.6484687328338623f, 0.5528277158737183f, 0.5713830590248108f, 0.9451169371604919f, 0.4428669214248657f, -0.2699156105518341f, 0.4058007001876831f, 0.16463275253772736f, 0.3086402416229248f, 0.5723624229431152f, 0.48775890469551086f, 0.0747891217470169f, 0.5084825754165649f, -0.47699013352394104f, 0.29154476523399353f, 0.5192393660545349f, 0.6859140396118164f, 0.5467963218688965f, 0.8826227188110352f, 0.3673993945121765f, 0.1505119502544403f, -0.29888737201690674f, 0.03413837030529976f, 0.10425505042076111f, 0.8754257559776306f, 0.0667472630739212f, 0.35916462540626526f, 0.401429146528244f, 0.17339305579662323f, -0.09136437624692917f, 0.5434245467185974f, 0.4791901111602783f, 0.5987166166305542f, 0.28794771432876587f, 0.4275851249694824f, 0.5637434720993042f, 0.20427468419075012f, -0.8958987593650818f, 0.7014939188957214f, 0.051173135638237f, 0.1763819307088852f, 0.9798639416694641f, 0.3243277370929718f, 0.9462725520133972f, 0.9189424514770508f, -0.08407679945230484f, 0.8061437606811523f, 0.4599795937538147f, 0.28690195083618164f, 0.45804286003112793f, 0.7293834090232849f, 0.6218646168708801f, 0.2583484351634979f, -0.2818162143230438f, 0.7938990592956543f, 0.5685887336730957f, 0.26104018092155457f, 0.112286776304245f, 0.18151132762432098f, 0.23522771894931793f, 0.4692642092704773f, -0.7858371138572693f, 0.9829822182655334f, 0.3500264286994934f, 0.6284287571907043f, 0.3278205096721649f, 0.5710650682449341f, 0.49897727370262146f, 0.0671551451086998f, -0.2615262269973755f, 0.39510729908943176f, 0.4935106337070465f, 0.7418432235717773f, 0.9543195962905884f, 0.8160495162010193f, 0.9953480362892151f, 0.3473759591579437f, -0.578188419342041f, 0.44195204973220825f, 0.15036022663116455f, 0.13645385205745697f, 0.671660304069519f, 0.1889510601758957f, 0.057356275618076324f, 0.8586337566375732f, -0.45280951261520386f, 0.03828735649585724f, 0.7651338577270508f, 0.053093135356903076f, 0.3955438435077667f, 0.9598299264907837f, 0.5730642676353455f, 0.3658107817173004f, -0.0183450635522604f, 0.06457221508026123f, 0.7341999411582947f, 0.28732895851135254f, 0.49511751532554626f, 0.9524901509284973f, 0.9869855642318726f, 0.004628547467291355f, -0.31522122025489807f, 0.2866796851158142f, 0.2086692899465561f, 0.1822485774755478f, 0.6720324158668518f, 0.45029622316360474f, 0.2937537133693695f, 0.35018372535705566f, -0.9139487147331238f, 0.24612461030483246f, 0.8388001918792725f, 0.055167101323604584f, 0.40085187554359436f, 0.41604214906692505f, 0.7579700946807861f, 0.9693965911865234f, -0.007737628184258938f, 0.9677200317382812f, 0.9478422403335571f, 0.06510114669799805f, 0.7274754643440247f, 0.14033056795597076f, 0.6506255269050598f, 0.9734686613082886f, -0.17994357645511627f, 0.6881433725357056f, 0.6037669777870178f, 0.524998664855957f, 0.9365692138671875f, 0.7066923975944519f, 0.98448246717453f, 0.1397305727005005f, -0.7160907983779907f, 0.5722663998603821f, 0.5994718670845032f, 0.29420480132102966f, 0.5026049613952637f, 0.676272988319397f, 0.25155654549598694f, 0.4818556606769562f, -0.7427701354026794f, 0.9087716937065125f, 0.5995118021965027f, 0.336716890335083f, 0.23088014125823975f, 0.12515488266944885f, 0.9814932346343994f, 0.030537225306034088f, -0.4794272184371948f, 0.29556554555892944f, 0.3098005950450897f, 0.8910598754882812f, 0.4342274069786072f, 0.1992369145154953f, 0.1941535770893097f, 0.7708661556243896f, -0.43474364280700684f, 0.08374408632516861f, 0.6303514242172241f, 0.7290739417076111f, 0.09584039449691772f, 0.8956767916679382f, 0.8654686808586121f, 0.7907619476318359f, -0.17547112703323364f, 0.07469063997268677f, 0.8193109035491943f, 0.6682966351509094f, 0.06646814942359924f, 0.06890471279621124f, 0.6157216429710388f, 0.9082525372505188f, -0.07462958246469498f, 0.6752410531044006f, 0.048876259475946426f, 0.4622892141342163f, 0.8204374313354492f, 0.6535975933074951f, 0.6099140644073486f, 0.21248458325862885f, -0.27769577503204346f, 0.35379675030708313f, 0.08517889678478241f, 0.30960264801979065f, 0.6726204752922058f, 0.992120087146759f, 0.47408297657966614f, 0.256498783826828f, -0.23793092370033264f, 0.20411549508571625f, 0.2950814962387085f, 0.10197949409484863f, 0.16163644194602966f, 0.48799654841423035f, 0.26741304993629456f, 0.11105706542730331f, -0.09857726097106934f, 0.4945825934410095f, 0.45651814341545105f, 0.9333265423774719f, 0.6037929058074951f, 0.8533493876457214f, 0.9187206029891968f, 0.05158821865916252f, -0.7099855542182922f, 0.6326844096183777f, 0.7748348712921143f, 0.45812493562698364f, 0.38787761330604553f, 0.04808440059423447f, 0.7806870937347412f, 0.22023355960845947f, -0.7163118124008179f, 0.6509333848953247f, 0.7174556851387024f, 0.8741976618766785f, 0.048581916838884354f, 0.2887367308139801f, 0.6274875402450562f, 0.6031047105789185f, -0.574472963809967f, 0.832726776599884f, 0.7412901520729065f, 0.21822653710842133f, 0.1956528276205063f, 0.7735253572463989f, 0.06299486756324768f, 0.1661321520805359f, -0.17393875122070312f, 0.811242401599884f, 0.9212049841880798f, 0.06166213005781174f, 0.09728740900754929f, 0.3771071135997772f, 0.4864107370376587f, 0.002277224790304899f, -0.14911064505577087f, 0.2623991072177887f, 0.087967149913311f, 0.8812525868415833f, 0.8786006569862366f, 0.7122893333435059f, 0.9497931003570557f, 0.496367871761322f, -0.9994882941246033f, 0.5317352414131165f, 0.506300687789917f, 0.2230735868215561f, 0.7357815504074097f, 0.056186940521001816f, 0.4230869710445404f, 0.6310372948646545f, -0.28849101066589355f, 0.8208775520324707f, 0.1679617464542389f, 0.5042926669120789f, 0.20606690645217896f, 0.43091848492622375f, 0.07331319898366928f, 0.030771948397159576f, -0.4339090883731842f, 0.4528922140598297f, 0.9150173664093018f, 0.8827791213989258f, 0.6573867201805115f, 0.11191564798355103f, 0.659295380115509f, 0.04559759795665741f, -0.3629274368286133f, 0.7592317461967468f, 0.7747867703437805f, 0.5691185593605042f, 0.6677122712135315f, 0.8014598488807678f, 0.008962249383330345f, 0.26155534386634827f, -0.9621247053146362f, 0.4117625951766968f, 0.2144370675086975f, 0.33351460099220276f, 0.8845661878585815f, 0.23629282414913177f, 0.5905978679656982f, 0.005060345865786076f, -0.7600565552711487f, 0.30678895115852356f, 0.022492531687021255f, 0.2675594389438629f, 0.8507698774337769f, 0.9885277152061462f, 0.46577537059783936f, 0.9299410581588745f, -0.6002746224403381f, 0.24473100900650024f, 0.6316812634468079f, 0.7274897694587708f, 0.37380069494247437f, 0.6805321574211121f, 0.4516732394695282f, 0.16875794529914856f, -0.9824519753456116f, 0.5265710949897766f, 0.9101687669754028f, 0.39852097630500793f, 0.4391036331653595f, 0.5620119571685791f, 0.10404970496892929f, 0.4016485810279846f, -0.39898625016212463f, 0.7827284932136536f, 0.8841509222984314f, 0.2814931571483612f, 0.7904929518699646f, 0.968015193939209f, 0.8971646428108215f, 0.03781774640083313f, -0.5655707716941833f, 0.3803272545337677f, 0.2600253224372864f, 0.5311211347579956f, 0.8228450417518616f, 0.8110784292221069f, 0.6978962421417236f, 0.8369046449661255f, -0.08615871518850327f, 0.7565610408782959f, 0.7988147139549255f, 0.5049692392349243f, 0.9648325443267822f, 0.19286580383777618f, 0.35822784900665283f, 0.019517680630087852f, -0.1653425693511963f, 0.5707922577857971f, 0.37451472878456116f, 0.6274303197860718f, 0.6800948977470398f, 0.8653841018676758f, 0.4521109461784363f, 0.365579217672348f, -0.007018651347607374f, 0.7824912667274475f, 0.6722573041915894f, 0.8659417629241943f, 0.13952063024044037f, 0.7690549492835999f, 0.5063453316688538f, 0.9875400066375732f, -0.25724613666534424f, 0.2566762864589691f, 0.11588819324970245f, 0.731927216053009f, 0.47208940982818604f, 0.669211745262146f, 0.5443520545959473f, 0.5950750708580017f, -0.9609253406524658f, 0.6426895260810852f, 0.3826417922973633f, 0.30285942554473877f, 0.8919384479522705f, 0.5223174095153809f, 0.9718109369277954f, 0.5030852556228638f, -0.9151466488838196f, 0.5998561978340149f, 0.7168008685112f, 0.47948506474494934f, 0.9734587073326111f, 0.9997189044952393f, 0.62806636095047f, 0.8662985563278198f, -0.7542369961738586f, 0.9293001294136047f, 0.9002092480659485f, 0.660448431968689f, 0.40117383003234863f, 0.9262562990188599f, 0.9819161891937256f, 0.6911081075668335f, -0.760516345500946f, 0.4810850918292999f, 0.2767205536365509f, 0.591758131980896f, 0.638964056968689f, 0.4446357190608978f, 0.9864932894706726f, 0.52243971824646f, -0.03723209351301193f, 0.7209857106208801f, 0.05685831978917122f, 0.8309366703033447f, 0.9554030299186707f, 0.5262980461120605f, 0.6005406379699707f, 0.3508489727973938f, -0.4308526813983917f, 0.8688364028930664f, 0.048758022487163544f, 0.21196556091308594f, 0.7812913656234741f, 0.05588048696517944f, 0.5149310231208801f, 0.6787821650505066f, -0.8627097606658936f, 0.3883627653121948f, 0.9379564523696899f, 0.6538522243499756f, 0.26079288125038147f, 0.19465559720993042f, 0.03254730626940727f, 0.20732417702674866f, -0.5877590775489807f, 0.6658494472503662f, 0.7913411855697632f, 0.6556693315505981f, 0.0648517981171608f, 0.981484055519104f, 0.02536119520664215f, 0.10094082355499268f, -0.833748459815979f, 0.42368337512016296f, 0.43482381105422974f, 0.971494197845459f, 0.11733884364366531f, 0.9014824032783508f, 0.14118874073028564f, 0.47940754890441895f, -0.7797805070877075f, 0.7845767140388489f, 0.2931007444858551f, 0.9479763507843018f, 0.4910568296909332f, 0.7359461188316345f, 0.3337729871273041f, 0.04678377881646156f, -0.7051306962966919f, 0.3782064914703369f, 0.1796783208847046f, 0.6080578565597534f, 0.30932196974754333f, 0.3053915500640869f, 0.250453919172287f, 0.9218175411224365f, -0.23293621838092804f, 0.8419591784477234f, 0.5207253694534302f, 0.08739648759365082f, 0.5318828225135803f, 0.3724205195903778f, 0.018459759652614594f, 0.2882010340690613f, -0.6757683753967285f, 0.13764336705207825f, 0.7202473282814026f, 0.4991072118282318f, 0.5994769930839539f, 0.592570424079895f, 0.5548906922340393f, 0.43760713934898376f, -0.935558557510376f, 0.1953103244304657f, 0.17590686678886414f, 0.34211352467536926f, 0.542031466960907f, 0.23923246562480927f, 0.5109034776687622f, 0.9008070826530457f, -0.6101613640785217f, 0.36498644948005676f, 0.11080779880285263f, 0.6651166677474976f, 0.360140860080719f, 0.3456724286079407f, 0.7364704012870789f, 0.9328043460845947f, -0.7363318204879761f, 0.34346750378608704f, 0.725214421749115f, 0.22997629642486572f, 0.0979001596570015f, 0.3978864252567291f, 0.47921428084373474f, 0.9071608185768127f, -0.6495940089225769f, 0.697964608669281f, 0.5261865854263306f, 0.38504287600517273f, 0.26720911264419556f, 0.08616527169942856f, 0.4635077118873596f, 0.3011544644832611f, -0.3652741312980652f, 0.8486945033073425f, 0.4895823895931244f, 0.1945134401321411f, 0.5598046183586121f, 0.1549801379442215f, 0.7565990686416626f, 0.016315482556819916f, -0.47090908885002136f, 0.8975157141685486f, 0.7096637487411499f, 0.41508737206459045f, 0.07132099568843842f, 0.3899962604045868f, 0.7019973397254944f, 0.6190866231918335f, -0.90423983335495f, 0.6503984928131104f, 0.4636870324611664f, 0.5898318290710449f, 0.9657814502716064f, 0.012407731264829636f, 0.9419548511505127f, 0.41732171177864075f, -0.508263349533081f, 0.8712491393089294f, 0.08287059515714645f, 0.22135628759860992f, 0.1977406144142151f, 0.021669704467058182f, 0.5061020255088806f, 0.6566483378410339f, -0.8917954564094543f, 0.4339748024940491f, 0.07321804761886597f, 0.540590763092041f, 0.020163411274552345f, 0.9070888757705688f, 0.2760370373725891f, 0.8888716101646423f, -0.8755115270614624f, 0.26383718848228455f, 0.30549871921539307f, 0.7631160616874695f, 0.9969722032546997f, 0.6135402917861938f, 0.705287516117096f, 0.23733900487422943f, -0.08615923672914505f, 0.9945247173309326f, 0.6944193243980408f, 0.7303643822669983f, 0.16895349323749542f, 0.14563481509685516f, 0.8856902122497559f, 0.421549916267395f, -0.875677227973938f, 0.49325692653656006f, 0.6884728670120239f, 0.9192825555801392f, 0.3600645363330841f, 0.7826414108276367f, 0.977539598941803f, 0.509164035320282f, -0.9846748113632202f, 0.6668704748153687f, 0.8322262167930603f, 0.3005584478378296f, 0.9460497498512268f, 0.5374778509140015f, 0.2098235785961151f, 0.1845027506351471f, -0.8199095726013184f, 0.05978011712431908f, 0.7789411544799805f, 0.6753519177436829f, 0.2650865316390991f, 0.491540789604187f, 0.536819577217102f, 0.7247172594070435f, -0.7693386673927307f, 0.49494972825050354f, 0.8719226121902466f, 0.1520419865846634f, 0.7423307299613953f, 0.43238669633865356f, 0.011314895004034042f, 0.9931563138961792f, -0.24723784625530243f, 0.40074798464775085f, 0.09784222394227982f, 0.9919655323028564f, 0.7054351568222046f, 0.9202175736427307f, 0.18762771785259247f, 0.7711175084114075f, -0.6568161845207214f, 0.3341640532016754f, 0.4591602385044098f, 0.5138874053955078f, 0.16144277155399323f, 0.5409726500511169f, 0.0771707072854042f, 0.23002146184444427f, -0.8298317193984985f, 0.9832111597061157f, 0.12776683270931244f, 0.14980478584766388f, 0.7715216279029846f, 0.9036014676094055f, 0.9847795963287354f, 0.3699982762336731f, -0.26295793056488037f, 0.3148934245109558f, 0.06381778419017792f, 0.9815942645072937f, 0.0752488300204277f, 0.8771342039108276f, 0.8736276030540466f, 0.6779417991638184f, -0.5732308626174927f, 0.9071075916290283f, 0.0019808588549494743f, 0.5240399241447449f, 0.28170672059059143f, 0.22658927738666534f, 0.8184428811073303f, 0.6776214241981506f, -0.30609259009361267f, 0.8634149432182312f, 0.14725139737129211f, 0.5387130975723267f, 0.779909610748291f, 0.6779021620750427f, 0.6346973776817322f, 0.4142448604106903f, -0.6465600728988647f, 0.47126105427742004f, 0.522064745426178f, 0.12594011425971985f, 0.8423010110855103f, 0.3845645785331726f, 0.39408352971076965f, 0.7395864129066467f, -0.7442447543144226f, 0.9888554811477661f, 0.13244691491127014f, 0.8665971755981445f, 0.6708739399909973f, 0.5377756953239441f, 0.7810347676277161f, 0.9828063249588013f, -0.3619764745235443f, 0.4237139821052551f, 0.5527353286743164f, 0.9381161332130432f, 0.4752235412597656f, 0.3936516046524048f, 0.4070160686969757f, 0.7063471078872681f, -0.11909569799900055f, 0.6360223293304443f, 0.810019314289093f, 2.6633308152668178e-05f, 0.5930951833724976f, 0.021356066688895226f, 0.560512363910675f, 0.369213730096817f, -0.19668738543987274f, 0.11357134580612183f, 0.43626198172569275f, 0.851570725440979f, 0.9771956205368042f, 0.16813284158706665f, 0.38764864206314087f, 0.5837044715881348f, -0.08376572281122208f, 0.4589250087738037f, 0.7353159785270691f, 0.6436023116111755f, 0.5531660914421082f, 0.386027455329895f, 0.19300417602062225f, 0.06838983297348022f, -0.9993038773536682f, 0.9888635277748108f, 0.05261003226041794f, 0.06543143093585968f, 0.18411949276924133f, 0.032550305128097534f, 0.8024260401725769f, 0.9668664336204529f, -0.6927982568740845f, 0.08397874981164932f, 0.6339503526687622f, 0.9981802701950073f, 0.6442863941192627f, 0.891064465045929f, 0.5911423563957214f, 0.9214357733726501f, -0.08861764520406723f, 0.8743223547935486f, 0.3660944998264313f, 0.7933511734008789f, 0.27845320105552673f, 0.7059577703475952f, 0.5684746503829956f, 0.16883882880210876f, -0.8019207119941711f, 0.36570313572883606f, 0.26496294140815735f, 0.01530928909778595f, 0.41811805963516235f, 0.21641701459884644f, 0.6997250914573669f, 0.8827694654464722f, -0.0860418751835823f, 0.24297603964805603f, 0.5897557139396667f, 0.4854969084262848f, 0.9217313528060913f, 0.5904665589332581f, 0.9972102046012878f, 0.03998727723956108f, -0.3813328146934509f, 0.5473147034645081f, 0.016352176666259766f, 0.1800081878900528f, 0.9523070454597473f, 0.024701397866010666f, 0.7235895991325378f, 0.4394855201244354f, -0.18722780048847198f, 0.569389283657074f, 0.9402238130569458f, 0.9012695550918579f, 0.3299551010131836f, 0.6383518576622009f, 0.012649446725845337f, 0.056295350193977356f, -0.00021978597214911133f, 0.5737628936767578f, 0.31911805272102356f, 0.9888516068458557f, 0.8901253938674927f, 0.5315712690353394f, 0.5394250750541687f, 0.9991908073425293f, -0.05878749489784241f, 0.011276914738118649f, 0.36718854308128357f, 0.5267137289047241f, 0.47730785608291626f, 0.27079376578330994f, 0.37006598711013794f, 0.7653077840805054f, -0.06379958242177963f, 0.37615564465522766f, 0.93356853723526f, 0.90879225730896f, 0.48355019092559814f, 0.6809117794036865f, 0.14991453289985657f, 0.977342963218689f, -0.01581074483692646f, 0.09761901199817657f, 0.6927123069763184f, 0.4484615921974182f, 0.3623245060443878f, 0.6136114001274109f, 0.2583824098110199f, 0.3651335835456848f, -0.8884844779968262f, 0.1787956953048706f, 0.2387474924325943f, 0.7337020635604858f, 0.041699301451444626f, 0.15157757699489594f, 0.7170830965042114f, 0.6654297709465027f, -0.9008473753929138f, 0.48236262798309326f, 0.9574246406555176f, 0.5117677450180054f, 0.05611037090420723f, 0.5102453827857971f, 0.7942280769348145f, 0.8935983777046204f, -0.47883176803588867f, 0.5919848680496216f, 0.11304086446762085f, 0.76060551404953f, 0.5467166304588318f, 0.9582470059394836f, 0.13439680635929108f, 0.9257378578186035f, -0.9940950274467468f, 0.3033845126628876f, 0.7922242879867554f, 0.03218749538064003f, 0.7335239052772522f, 0.21122126281261444f, 0.9958242774009705f, 0.7460929751396179f, -0.2666102945804596f, 0.8576001524925232f, 0.6136961579322815f, 0.4811500310897827f, 0.9528115391731262f, 0.42076581716537476f, 0.8788119554519653f, 0.46078768372535706f, -0.9699917435646057f, 0.033899810165166855f, 0.08371344953775406f, 0.5433631539344788f, 0.45206218957901f, 0.5250109434127808f, 0.9796788096427917f, 0.22065654397010803f, -0.6699917912483215f, 0.5801515579223633f, 0.06576201319694519f, 0.7236096262931824f, 0.3703228831291199f, 0.7768658995628357f, 0.8999099135398865f, 0.7195396423339844f, -0.3689476251602173f, 0.22909756004810333f, 0.3706482946872711f, 0.9261583685874939f, 0.44682326912879944f, 0.5958666801452637f, 0.2844378650188446f, 0.9264121055603027f, -0.9081171751022339f, 0.10542738437652588f, 0.07521884143352509f, 0.3199874758720398f, 0.6066154837608337f, 0.16844318807125092f, 0.5892269015312195f, 0.4354605972766876f, -0.7163946628570557f, 0.9378185272216797f, 0.7480183243751526f, 0.22079764306545258f, 0.1560530662536621f, 0.3589998781681061f, 0.8457366228103638f, 0.378071665763855f, -0.1284177303314209f, 0.5485025644302368f, 0.9635348916053772f, 0.09216739237308502f, 0.9349304437637329f, 0.8835311532020569f, 0.5348816514015198f, 0.889802098274231f, -0.6637775301933289f, 0.57881760597229f, 0.1067187711596489f, 0.18648777902126312f, 0.695540189743042f, 0.3760142922401428f, 0.454475998878479f, 0.5246728658676147f, -0.19446948170661926f, 0.44788673520088196f, 0.5930137634277344f, 0.5077561736106873f, 0.2951063811779022f, 0.1722114384174347f, 0.00791696086525917f, 0.9933266639709473f, -0.8951809406280518f, 0.359150767326355f, 0.4026963710784912f, 0.6852596402168274f, 0.06917638331651688f, 0.9892358183860779f, 0.6215890645980835f, 0.9082479476928711f, -0.031110001727938652f, 0.3897051215171814f, 0.7325595617294312f, 0.7901549935340881f, 0.9590626955032349f, 0.27187660336494446f, 0.6673740148544312f, 0.478260338306427f, -0.571444034576416f, 0.4589115083217621f, 0.5049058198928833f, 0.06044372171163559f, 0.7957624197006226f, 0.13340476155281067f, 0.8628571629524231f, 0.1247510239481926f, -0.818156898021698f, 0.14624729752540588f, 0.19708259403705597f, 0.2231711596250534f, 0.36713865399360657f, 0.9672079682350159f, 0.09486240148544312f, 0.4485372006893158f, -0.045363955199718475f, 0.43354660272598267f, 0.4399658441543579f, 0.5809313654899597f, 0.29303085803985596f, 0.6318140625953674f, 0.4001963436603546f, 0.9525929689407349f, -0.4225379228591919f, 0.9708455204963684f, 0.4277251362800598f, 0.03371981903910637f, 0.38455498218536377f, 0.9704114198684692f, 0.46314185857772827f, 0.1884257048368454f, -0.7708265781402588f, 0.2981903851032257f, 0.4836810827255249f, 0.7222177386283875f, 0.6989760994911194f, 0.41110777854919434f, 0.7267580628395081f, 0.9952706694602966f, -0.7894587516784668f, 0.7095082998275757f, 0.7833852171897888f, 0.6040787100791931f, 0.7560037970542908f, 0.5901641845703125f, 0.16228389739990234f, 0.9179514646530151f, -0.7595548629760742f, 0.5659668445587158f, 0.09053079038858414f, 0.9444442391395569f, 0.26835185289382935f, 0.927952766418457f, 0.7443640232086182f, 0.5090920329093933f, -0.08642827719449997f, 0.539168119430542f, 0.5232887864112854f, 0.25006940960884094f, 0.2387012541294098f, 0.9283301830291748f, 0.18201571702957153f, 0.7151692509651184f, -0.1632162481546402f, 0.9783587455749512f, 0.9966490268707275f, 0.7083399891853333f, 0.9894168376922607f, 0.3429831266403198f, 0.8950645923614502f, 0.08262684941291809f, -0.5534324049949646f, 0.755753755569458f, 0.11107043921947479f, 0.7124798893928528f, 0.6959860324859619f, 0.1275964379310608f, 0.021031459793448448f, 0.5463755130767822f, -0.17589464783668518f, 0.5754109621047974f, 0.5758915543556213f, 0.8832504749298096f, 0.4067441523075104f, 0.5442053079605103f, 0.3121766448020935f, 0.3026523292064667f, -0.07392343133687973f, 0.7414839267730713f, 0.5963916182518005f, 0.1352943778038025f, 0.9351076483726501f, 0.13725048303604126f, 0.7920308709144592f, 0.9912292957305908f, -0.7551430463790894f, 0.3397015333175659f, 0.6236693859100342f, 0.9873456954956055f, 0.38560858368873596f, 0.5284799337387085f, 0.5344756841659546f, 0.7371304631233215f, -0.8681150078773499f, 0.12008196860551834f, 0.4158805310726166f, 0.18373873829841614f, 0.9911958575248718f, 0.745146632194519f, 0.8964448571205139f, 0.11673462390899658f, -0.09183493256568909f, 0.518500804901123f, 0.13586664199829102f, 0.8413397073745728f, 0.5356965065002441f, 0.9753051996231079f, 0.7294628024101257f, 0.7264524102210999f, -0.664767861366272f, 0.495408833026886f, 0.10908236354589462f, 0.6457959413528442f, 0.9928189516067505f, 0.4665485918521881f, 0.3192882239818573f, 0.14031308889389038f, -0.4308617115020752f, 0.38650625944137573f, 0.7065386772155762f, 0.282787024974823f, 0.3087325394153595f, 0.4347570538520813f, 0.3858110308647156f, 0.6708813309669495f, -0.12273312360048294f, 0.5932598114013672f, 0.8410735130310059f, 0.6662210822105408f, 0.9882248044013977f, 0.7678346633911133f, 0.3602222502231598f, 0.051299650222063065f, -0.525519609451294f, 0.7459655404090881f, 0.8719441294670105f, 0.4646327793598175f, 0.13148759305477142f, 0.7302359342575073f, 0.9222093224525452f, 0.15958814322948456f, -0.24893635511398315f, 0.7355911731719971f, 0.06579647213220596f, 0.9501360058784485f, 0.9589226841926575f, 0.026924721896648407f, 0.9008616209030151f, 0.07004960626363754f, -0.6271240711212158f, 0.9011807441711426f, 0.6222898960113525f, 0.35115861892700195f, 0.4631500840187073f, 0.10699526965618134f, 0.21654364466667175f, 0.3077239692211151f, -0.10746869444847107f, 0.8762049078941345f, 0.9018765091896057f, 0.8584761023521423f, 0.5509456396102905f, 0.5025045275688171f, 0.07686669379472733f, 0.10372291505336761f, -0.38355398178100586f, 0.13195036351680756f, 0.6474214792251587f, 0.5604142546653748f, 0.3115234076976776f, 0.20096507668495178f, 0.5407562255859375f, 0.41388264298439026f, -0.36205190420150757f, 0.317363977432251f, 0.6756859421730042f, 0.13113029301166534f, 0.9094049334526062f, 0.5065644979476929f, 0.1106630340218544f, 0.5018395185470581f, -0.5458912253379822f, 0.4004424512386322f, 0.5050379633903503f, 0.7237043380737305f, 0.14436106383800507f, 0.894943118095398f, 0.3679138720035553f, 0.571205198764801f, -0.1508115530014038f, 0.0264686718583107f, 0.501754105091095f, 0.178629532456398f, 0.1487550586462021f, 0.8495885133743286f, 0.11197356134653091f, 0.7943138480186462f, -0.7464184165000916f, 0.9447202086448669f, 0.19359122216701508f, 0.018057111650705338f, 0.6975275874137878f, 0.9246779084205627f, 0.7355021238327026f, 0.8399577140808105f, -0.34021246433258057f, 0.916962206363678f, 0.024410728365182877f, 0.4690805673599243f, 0.5335363745689392f, 0.11504796147346497f, 0.4768942892551422f, 0.7140545845031738f, -0.6783592104911804f, 0.6566420793533325f, 0.2154093086719513f, 0.8640264868736267f, 0.14769041538238525f, 0.91053307056427f, 0.13789600133895874f, 0.8095691800117493f, -0.628040075302124f, 0.23846398293972015f, 0.9395817518234253f, 0.057777006179094315f, 0.23274466395378113f, 0.8745688796043396f, 0.5015578269958496f, 0.40923258662223816f, -0.28056302666664124f, 0.627571165561676f, 0.014021315611898899f, 0.9906707406044006f, 0.6060711741447449f, 0.3676062822341919f, 0.5354078412055969f, 0.9218676686286926f, -0.5582873821258545f, 0.43179282546043396f, 0.23808042705059052f, 0.5992022752761841f, 0.2711349427700043f, 0.6276721358299255f, 0.8207514882087708f, 0.5229189395904541f, -0.23410344123840332f, 0.7201432585716248f, 0.04126063734292984f, 0.16249313950538635f, 0.1576598733663559f, 0.183478444814682f, 0.34475693106651306f, 0.22882600128650665f, -0.4221920967102051f, 0.4229002594947815f, 0.7660142183303833f, 0.5351821184158325f, 0.4244362413883209f, 0.00021932866366114467f, 0.2373393326997757f, 0.32886144518852234f, -0.3290538489818573f, 0.21222123503684998f, 0.17322146892547607f, 0.0533236525952816f, 0.11662966758012772f, 0.4985993504524231f, 0.6017184853553772f, 0.34899815917015076f, -0.4130207896232605f, 0.06438605487346649f, 0.378511905670166f, 0.6394481658935547f, 0.4581349492073059f, 0.41293150186538696f, 0.9752081036567688f, 0.8377854228019714f, -0.7510355114936829f, 0.33636733889579773f, 0.8280028700828552f, 0.5620408654212952f, 0.9108021259307861f, 0.1852065771818161f, 0.5722578763961792f, 0.15641041100025177f, -0.3197670876979828f, 0.9801021218299866f, 0.8637512922286987f, 0.2212952822446823f, 0.12595030665397644f, 0.21978998184204102f, 0.2956025004386902f, 0.660743236541748f, -0.5355923175811768f, 0.8866249322891235f, 0.2725954055786133f, 0.20804794132709503f, 0.7734991312026978f, 0.8414015769958496f, 0.15521976351737976f, 0.7527894973754883f, -0.6687478423118591f, 0.03645721822977066f, 0.908223569393158f, 0.5469984412193298f, 0.6954716444015503f, 0.14487123489379883f, 0.8374518156051636f, 0.07809817790985107f, -0.3647848069667816f, 0.01334687601774931f, 0.5972472429275513f, 0.6819698810577393f, 0.3116241693496704f, 0.29968398809432983f, 0.6383519172668457f, 0.7910045981407166f, -0.811293363571167f, 0.12011591345071793f, 0.008832337334752083f, 0.5451347827911377f, 0.9474359750747681f, 0.5425127744674683f, 0.2782137989997864f, 0.5260543823242188f, -0.8566471338272095f, 0.832703173160553f, 0.2750454843044281f, 0.6586672067642212f, 0.976986825466156f, 0.47316664457321167f, 0.6548347473144531f, 0.5689510703086853f, -0.3560884892940521f, 0.5455610752105713f, 0.13041481375694275f, 0.7213568091392517f, 0.8606321811676025f, 0.10072746872901917f, 0.2633136510848999f, 0.7863550186157227f, -0.8760136961936951f, 0.945626437664032f, 0.2625526189804077f, 0.3650827705860138f, 0.8831875324249268f, 0.7515133619308472f, 0.9371910691261292f, 0.4941551387310028f, -0.7532053589820862f, 0.3810979425907135f, 0.42577695846557617f, 0.35887300968170166f, 0.18217049539089203f, 0.3680529296398163f, 0.4216970205307007f, 0.8597255945205688f, -0.8237282037734985f, 0.37845921516418457f, 0.05031588301062584f, 0.08651822060346603f, 0.5294850468635559f, 0.5110165476799011f, 0.06921250373125076f, 0.48618361353874207f, -0.05192819982767105f, 0.9642355442047119f, 0.23971772193908691f, 0.21735236048698425f, 0.7366701364517212f, 0.5280038714408875f, 0.9798381924629211f, 0.8272987604141235f, -0.26772254705429077f, 0.1932891458272934f, 0.4739648401737213f, 0.2206542044878006f, 0.20471630990505219f, 0.5594149827957153f, 0.838236927986145f, 0.6871776580810547f, -0.42867234349250793f, 0.4416159987449646f, 0.540359616279602f, 0.8169205784797668f, 0.6261215806007385f, 0.6271224021911621f, 0.6908761858940125f, 0.6217145919799805f, -0.8542003035545349f, 0.2140251249074936f, 0.8328459858894348f, 0.9803945422172546f, 0.9078041911125183f, 0.7010592222213745f, 0.8846733570098877f, 0.7824404835700989f, -0.13345447182655334f, 0.05311227962374687f, 0.28981950879096985f, 0.5767615437507629f, 0.0944836214184761f, 0.040088552981615067f, 0.48096323013305664f, 0.7129549384117126f, -0.21614187955856323f, 0.6729664206504822f, 0.7100368142127991f, 0.7146452069282532f, 0.7464884519577026f, 0.24451901018619537f, 0.9071619510650635f, 0.3187027871608734f, -0.4100157916545868f, 0.6176655292510986f, 0.9584053754806519f, 0.5549083948135376f, 0.22306950390338898f, 0.08390794694423676f, 0.6369912028312683f, 0.09534823149442673f, -0.6530535221099854f, 0.8194104433059692f, 0.6354818940162659f, 0.7342098355293274f, 0.6414404511451721f, 0.647431492805481f, 0.9510336518287659f, 0.33071479201316833f, -0.029445882886648178f, 0.9452979564666748f, 0.9715989828109741f, 0.27884745597839355f, 0.6697065830230713f, 0.4984792470932007f, 0.6316373944282532f, 0.5172708034515381f, -0.2663096487522125f, 0.3838469982147217f, 0.062301572412252426f, 0.2734086215496063f, 0.42910295724868774f, 0.29564571380615234f, 0.8307054042816162f, 0.17379900813102722f, -0.1848294585943222f, 0.18511822819709778f, 0.970272958278656f, 0.5022565722465515f, 0.19941358268260956f, 0.7261258959770203f, 0.1864062249660492f, 0.4505468010902405f, -0.3190252482891083f, 0.2453814446926117f, 0.9361451268196106f, 0.9993994235992432f, 0.4622650444507599f, 0.9557632803916931f, 0.6924253106117249f, 0.9569783210754395f, -0.3192681074142456f, 0.0647868663072586f, 0.7089366316795349f, 0.5443436503410339f, 0.8324979543685913f, 0.21543477475643158f, 0.9754494428634644f, 0.02162514068186283f, -0.6585572361946106f, 0.16402031481266022f, 0.9616122841835022f, 0.48955103754997253f, 0.028816217556595802f, 0.9148147106170654f, 0.8453441262245178f, 0.3562229573726654f, -0.8075996041297913f, 0.8389050364494324f, 0.19877751171588898f, 0.8029295802116394f, 0.9523884057998657f, 0.08592680841684341f, 0.4690622389316559f, 0.2325371354818344f, -0.008241512812674046f, 0.5986615419387817f, 0.7721908688545227f, 0.3839426636695862f, 0.0663275346159935f, 0.05714882165193558f, 0.08954174071550369f, 0.8917667865753174f, -0.2692962884902954f, 0.882309079170227f, 0.8557037115097046f, 0.09141437709331512f, 0.7632579207420349f, 0.25752007961273193f, 0.5393220782279968f, 0.35870739817619324f, -0.7855767011642456f, 0.43049806356430054f, 0.608367919921875f, 0.8087406158447266f, 0.5422240495681763f, 0.28822576999664307f, 0.4286518394947052f, 0.8018761277198792f, -0.6240404844284058f, 0.42930763959884644f, 0.07657740265130997f, 0.246654212474823f, 0.4268459379673004f, 0.5122673511505127f, 0.20180505514144897f, 0.4293704032897949f, -0.530621349811554f, 0.14854606986045837f, 0.44022229313850403f, 0.34158653020858765f, 0.1827850639820099f, 0.25025060772895813f, 0.2132958471775055f, 0.18907605111598969f, -0.408858984708786f, 0.6083966493606567f, 0.827290952205658f, 0.11797202378511429f, 0.7185970544815063f, 0.7130858898162842f, 0.7036057114601135f, 0.6381387710571289f, -0.6605591773986816f, 0.03511229529976845f, 0.3848620057106018f, 0.6665701270103455f, 0.5916727185249329f, 0.3616586923599243f, 0.668512761592865f, 0.5249313116073608f, -0.5598018765449524f, 0.22094546258449554f, 0.7965911626815796f, 0.3228101432323456f, 0.5515871047973633f, 0.9247456192970276f, 0.45478516817092896f, 0.4197218120098114f, -0.5736956000328064f, 0.530329704284668f, 0.2619335949420929f, 0.006732375826686621f, 0.6506837010383606f, 0.6140536665916443f, 0.16965728998184204f, 0.4327883720397949f, -0.04375634714961052f, 0.22801221907138824f, 0.32086268067359924f, 0.7026991844177246f, 0.4889148473739624f, 0.023593541234731674f, 0.11811763048171997f, 0.9963045716285706f, -0.35957348346710205f, 0.34028005599975586f, 0.09035026282072067f, 0.43342912197113037f, 0.13189704716205597f, 0.22106625139713287f, 0.7333466410636902f, 0.8362438082695007f, -0.8884353637695312f, 0.10082811862230301f, 0.4955531060695648f, 0.46308720111846924f, 0.08086346089839935f, 0.23511503636837006f, 0.940696656703949f, 0.08636421710252762f, -0.5810694098472595f, 0.5039339065551758f, 0.3731798231601715f, 0.4311974048614502f, 0.6966903805732727f, 0.40783989429473877f, 0.329746276140213f, 0.7624473571777344f, -0.36881887912750244f, 0.2297946810722351f, 0.9102556109428406f, 0.9907805323600769f, 0.05009463056921959f, 0.12897610664367676f, 0.2637806832790375f, 0.7478237152099609f, -0.48249414563179016f, 0.6198176741600037f, 0.24835819005966187f, 0.4352886974811554f, 0.962902843952179f, 0.4270780682563782f, 0.03443736210465431f, 0.7264461517333984f, -0.7373371720314026f, 0.7794026732444763f, 0.35326382517814636f, 0.8667505383491516f, 0.781528115272522f, 0.6850907802581787f, 0.8196992874145508f, 0.5392337441444397f, -0.8637182116508484f, 0.983750581741333f, 0.7210636138916016f, 0.9923118352890015f, 0.6822125315666199f, 0.6890132427215576f, 0.7291491031646729f, 0.7665805220603943f, -0.2203589230775833f, 0.4881346523761749f, 0.5743812322616577f, 0.2756667733192444f, 0.31867220997810364f, 0.016091927886009216f, 0.1661926805973053f, 0.22252772748470306f, -0.0435013584792614f, 0.4261374771595001f, 0.08308006078004837f, 0.008687096647918224f, 0.7735738158226013f, 0.187691792845726f, 0.7752366662025452f, 0.1202976256608963f, -0.501901388168335f, 0.5288212895393372f, 0.8168665170669556f, 0.4117810130119324f, 0.3800238072872162f, 0.24536065757274628f, 0.4745223820209503f, 0.4341067671775818f, -0.4501914978027344f, 0.8303790092468262f, 0.7335572242736816f, 0.031139463186264038f, 0.9070072174072266f, 0.8481468558311462f, 0.43152037262916565f, 0.07149477303028107f, -0.6114387512207031f, 0.5939207673072815f, 0.7746989130973816f, 0.3085688054561615f, 0.5718030333518982f, 0.33100274205207825f, 0.5492895841598511f, 0.43776097893714905f, -0.5663994550704956f, 0.44416606426239014f, 0.3060012757778168f, 0.7786826491355896f, 0.8743994235992432f, 0.6766529083251953f, 0.40800046920776367f, 0.8527894616127014f, -0.6376884579658508f, 0.817847728729248f, 0.9988347887992859f, 0.18136495351791382f, 0.6354825496673584f, 0.43443164229393005f, 0.0787319466471672f, 0.35502979159355164f, -0.4404357671737671f, 0.3186990022659302f, 0.030823875218629837f, 0.08278276026248932f, 0.28767290711402893f, 0.12352508306503296f, 0.6173965930938721f, 0.6316378712654114f, -0.5145511627197266f, 0.5834246873855591f, 0.8503324389457703f, 0.004869438242167234f, 0.384162962436676f, 0.18299274146556854f, 0.877174973487854f, 0.5330988168716431f, -0.18410316109657288f, 0.5229637026786804f, 0.8007857799530029f, 0.4084058701992035f, 0.35979804396629333f, 0.7376047968864441f, 0.9790882468223572f, 0.6289837956428528f, -0.7595638036727905f, 0.3460930585861206f, 0.1744658201932907f, 0.4038696885108948f, 0.33378857374191284f, 0.21316446363925934f, 0.677191436290741f, 0.22308413684368134f, -0.5848789215087891f, 0.18710149824619293f, 0.11210036277770996f, 0.8488476276397705f, 0.300546258687973f, 0.08043304830789566f, 0.0740458220243454f, 0.42948687076568604f, -0.5713151097297668f, 0.9823160767555237f, 0.7574862837791443f, 0.010058315470814705f, 0.4190952479839325f, 0.23539184033870697f, 0.700939953327179f, 0.18061193823814392f, -0.015956314280629158f, 0.7453824281692505f, 0.753801167011261f, 0.683667778968811f, 0.4638001024723053f, 0.6006297469139099f, 0.27532336115837097f, 0.6462768316268921f, -0.3347353935241699f, 0.6127497553825378f, 0.8505926132202148f, 0.8938919901847839f, 0.03274818882346153f, 0.555035412311554f, 0.21112871170043945f, 0.5241973996162415f, -0.7181292176246643f, 0.5970037579536438f, 0.29960688948631287f, 0.24338960647583008f, 0.4263562858104706f, 0.3760201036930084f, 0.18978610634803772f, 0.4632450044155121f, -0.9780886769294739f, 0.5325199365615845f, 0.3365023732185364f, 0.8157888054847717f, 0.8048189282417297f, 0.5378464460372925f, 0.34605512022972107f, 0.01711035519838333f, -0.41740697622299194f, 0.3092540204524994f, 0.6611872315406799f, 0.04894537478685379f, 0.8109414577484131f, 0.6753332018852234f, 0.15686267614364624f, 0.40756577253341675f, -0.0774141326546669f, 0.8451985716819763f, 0.3266431391239166f, 0.08992800116539001f, 0.6709786653518677f, 0.608465313911438f, 0.36474913358688354f, 0.14840394258499146f, -0.7929334044456482f, 0.27606284618377686f, 0.6865962147712708f, 0.8449602723121643f, 0.5722383856773376f, 0.7827025055885315f, 0.3326082229614258f, 0.2592546343803406f, -0.5913040041923523f, 0.2668590247631073f, 0.8375739455223083f, 0.3279573619365692f, 0.1699250489473343f, 0.3105706572532654f, 0.9985532164573669f, 0.7086818814277649f, -0.4680890738964081f, 0.2048414796590805f, 0.6447592377662659f, 0.09514788538217545f, 0.3314095437526703f, 0.6667085886001587f, 0.056504927575588226f, 0.42784616351127625f, -0.5961987972259521f, 0.5002983212471008f, 0.9040735960006714f, 0.8334683179855347f, 0.428006649017334f, 0.3619016110897064f, 0.1976393461227417f, 0.620029091835022f, -0.33150362968444824f, 0.9911347031593323f, 0.13792218267917633f, 0.41349804401397705f, 0.11511830985546112f, 0.005426245275884867f, 0.5071116089820862f, 0.7844904065132141f, -0.6904903650283813f, 0.2879205346107483f, 0.7033220529556274f, 0.559770941734314f, 0.18729369342327118f, 0.20336942374706268f, 0.9195337295532227f, 0.9188998341560364f, -0.4212280213832855f, 0.9369603991508484f, 0.0762803852558136f, 0.48905810713768005f, 0.17686672508716583f, 0.3262665271759033f, 0.4254465401172638f, 0.7409277558326721f, -0.3346324861049652f, 0.6484004855155945f, 0.9753602147102356f, 0.5730735659599304f, 0.010148384608328342f, 0.8876969814300537f, 0.15367282927036285f, 0.2969549000263214f, -0.77553391456604f, 0.5371474027633667f, 0.006119738798588514f, 0.1825719028711319f, 0.4728083312511444f, 0.3589038848876953f, 0.31602582335472107f, 0.5306341648101807f, -0.3426697850227356f, 0.1911904364824295f, 0.8667131066322327f, 0.21985137462615967f, 0.8237035274505615f, 0.3908269703388214f, 0.798248827457428f, 0.5737333297729492f, -0.1556190401315689f, 0.8907030820846558f, 0.4904624819755554f, 0.2762848734855652f, 0.5751527547836304f, 0.7396215200424194f, 0.9061834812164307f, 0.7211852669715881f, -0.8822771310806274f, 0.4226422607898712f, 0.9792129397392273f, 0.06844467669725418f, 0.6918613314628601f, 0.6128895878791809f, 0.32317501306533813f, 0.2853896915912628f, -0.2437100112438202f, 0.8170071840286255f, 0.7392115592956543f, 0.31569698452949524f, 0.9191780090332031f, 0.30329209566116333f, 0.781825602054596f, 0.48226237297058105f, -0.9172930121421814f, 0.5049543976783752f, 0.7138909101486206f, 0.08135681599378586f, 0.24532727897167206f, 0.21838079392910004f, 0.7382681369781494f, 0.6145296692848206f, -0.5621091723442078f, 0.0914851650595665f, 0.9384413361549377f, 0.799143373966217f, 0.10191566497087479f, 0.7107278108596802f, 0.022051246836781502f, 0.5756950974464417f, -0.08029044419527054f, 0.6461271643638611f, 0.30800098180770874f, 0.16126494109630585f, 0.04688449203968048f, 0.9154012799263f, 0.014255858957767487f, 0.7209731340408325f, -0.5772050619125366f, 0.4684923589229584f, 0.5041961669921875f, 0.2751055657863617f, 0.9250915050506592f, 0.23125918209552765f, 0.008753026835620403f, 0.7539231181144714f, -0.957497775554657f, 0.8348957300186157f, 0.8886655569076538f, 0.4112195372581482f, 0.6424184441566467f, 0.3717902600765228f, 0.6411327719688416f, 0.16051344573497772f, -0.7788704633712769f, 0.2914170026779175f, 0.43109169602394104f, 0.3474656045436859f, 0.038921281695365906f, 0.5014805197715759f, 0.2525540590286255f, 0.15632474422454834f, -0.6021268367767334f, 0.37164145708084106f, 0.870622992515564f, 0.3625127971172333f, 0.18470750749111176f, 0.3288916349411011f, 0.7486695647239685f, 0.8247238993644714f, -0.38301414251327515f, 0.2690703868865967f, 0.2636319696903229f, 0.7361226081848145f, 0.11188174039125443f, 0.10781563818454742f, 0.7993870377540588f, 0.18908806145191193f, -0.8412371873855591f, 0.4579855501651764f, 0.3395260274410248f, 0.4235658645629883f, 0.1396433562040329f, 0.18474534153938293f, 0.09159261733293533f, 0.6730505228042603f, -0.5549125671386719f, 0.7396169304847717f, 0.1674364060163498f, 0.36745479702949524f, 0.17711642384529114f, 0.17960716784000397f, 0.2507694959640503f, 0.16855373978614807f, -0.45858174562454224f, 0.7648335695266724f, 0.7990601658821106f, 0.6642943024635315f, 0.4356876611709595f, 0.15426965057849884f, 0.6044911742210388f, 0.7701521515846252f, -0.577133297920227f, 0.7927592396736145f, 0.15910501778125763f, 0.34873443841934204f, 0.8754333853721619f, 0.3216281831264496f, 0.28012359142303467f, 0.2472667545080185f, -0.0019535340834409f, 0.5924376249313354f, 0.16956877708435059f, 0.6992374062538147f, 0.38395750522613525f, 0.52225261926651f, 0.535045325756073f, 0.8873903155326843f, -0.7571605443954468f, 0.90192711353302f, 0.9350818991661072f, 0.24011756479740143f, 0.02942679636180401f, 0.4522431194782257f, 0.12972450256347656f, 0.13707830011844635f, -0.09826387465000153f, 0.9954836368560791f, 0.7098060846328735f, 0.2322702407836914f, 0.25102880597114563f, 0.6218942999839783f, 0.5387336015701294f, 0.10534012317657471f, -0.9136486053466797f, 0.5519229769706726f, 0.629787802696228f, 0.33493077754974365f, 0.49953749775886536f, 0.639205813407898f, 0.5039316415786743f, 0.8002790808677673f, -0.5880137085914612f, 0.500667154788971f, 0.9869639873504639f, 0.9468355178833008f, 0.20509283244609833f, 0.8984914422035217f, 0.5655477046966553f, 0.47990700602531433f, -0.8698902130126953f, 0.4788101017475128f, 0.54854816198349f, 0.9008951783180237f, 0.0003471774107310921f, 0.2796473205089569f, 0.3121134042739868f, 0.9665243029594421f, -0.4953087568283081f, 0.42559030652046204f, 0.3028500974178314f, 0.3603217601776123f, 0.7575143575668335f, 0.7167708873748779f, 0.8101570010185242f, 0.8994027972221375f, -0.6087509989738464f, 0.6351999640464783f, 0.9714100360870361f, 0.06940464675426483f, 0.5025054216384888f, 0.09593505412340164f, 0.20137150585651398f, 0.04752866178750992f, -0.3265060484409332f, 0.6759889125823975f, 0.358441025018692f, 0.8566532731056213f, 0.9915478825569153f, 0.9966002702713013f, 0.02083636447787285f, 0.913727343082428f, -0.21605980396270752f, 0.1504785120487213f, 0.12514899671077728f, 0.8315417766571045f, 0.09289973974227905f, 0.4394473135471344f, 0.8225728273391724f, 0.31023526191711426f, -0.30043715238571167f, 0.8114571571350098f, 0.4260548949241638f, 0.0943291038274765f, 0.6059228777885437f, 0.3369304835796356f, 0.5721158981323242f, 0.3222738206386566f, -0.7861450910568237f, 0.4763519763946533f, 0.6014969348907471f, 0.7508032917976379f, 0.40022313594818115f, 0.8380558490753174f, 0.7529599666595459f, 0.9654169082641602f, -0.7217185497283936f, 0.01512920018285513f, 0.9299748539924622f, 0.4354017674922943f, 0.657109260559082f, 0.9342187643051147f, 0.23224064707756042f, 0.4456816017627716f, -0.6356045603752136f, 0.18027643859386444f, 0.49407315254211426f, 0.8082943558692932f, 0.819379448890686f, 0.2085961550474167f, 0.4899669587612152f, 0.7976174354553223f, -0.27522990107536316f, 0.3475925028324127f, 0.9563697576522827f, 0.241404727101326f, 0.5511708855628967f, 0.7440304756164551f, 0.6392398476600647f, 0.5367797017097473f, -0.496286004781723f, 0.027332115918397903f, 0.3545832931995392f, 0.28632059693336487f, 0.33641713857650757f, 0.6138564944267273f, 0.15340274572372437f, 0.7162377238273621f, -0.7171165943145752f, 0.59581458568573f, 0.0994856059551239f, 0.9257265329360962f, 0.5319864153862f, 0.9273329973220825f, 0.857854425907135f, 0.43945303559303284f, -0.7806326150894165f, 0.6759011149406433f, 0.02824559435248375f, 0.18774385750293732f, 0.22409218549728394f, 0.18368172645568848f, 0.8172866702079773f, 0.4431943893432617f, -0.3701484501361847f, 0.806931734085083f, 0.49277395009994507f, 0.8988797068595886f, 0.14523398876190186f, 0.10466499626636505f, 0.1435655951499939f, 0.9337448477745056f, -0.2664249837398529f, 0.2623634338378906f, 0.9375194907188416f, 0.022536277770996094f, 0.6096028089523315f, 0.6004023551940918f, 0.5479812026023865f, 0.2971886396408081f, -0.5182094573974609f, 0.5410608649253845f, 0.50980144739151f, 0.08551183342933655f, 0.9136833548545837f, 0.10015620291233063f, 0.20144635438919067f, 0.26103729009628296f, -0.3709262013435364f, 0.33352020382881165f, 0.054750118404626846f, 0.3387603759765625f, 0.588334858417511f, 0.767773449420929f, 0.9349545836448669f, 0.783886194229126f, -0.14439916610717773f, 0.7823655605316162f, 0.1679019182920456f, 0.46471813321113586f, 0.14491142332553864f, 0.46796199679374695f, 0.059942230582237244f, 0.010717015713453293f, -0.03004479594528675f, 0.6699517369270325f, 0.6961281299591064f, 0.6403058767318726f, 0.8993024230003357f, 0.774698793888092f, 0.05950735881924629f, 0.9648548364639282f, -0.3361400365829468f, 0.6778846979141235f, 0.5147607326507568f, 0.9273344874382019f, 0.4442949593067169f, 0.13181185722351074f, 0.48766881227493286f, 0.4261191785335541f, -0.12362688034772873f, 0.32184281945228577f, 0.39738020300865173f, 0.7001238465309143f, 0.8631159067153931f, 0.8899819254875183f, 0.5326982140541077f, 0.34870707988739014f, -0.3853232264518738f, 0.21062934398651123f, 0.5544883608818054f, 0.2971360385417938f, 0.2627153992652893f, 0.26331111788749695f, 0.8372922539710999f, 0.7954920530319214f, -0.449966162443161f, 0.2909601032733917f, 0.16705211997032166f, 0.5464507937431335f, 0.810819685459137f, 0.3240965008735657f, 0.2858211100101471f, 0.8716675639152527f, -0.22742821276187897f, 0.058378513902425766f, 0.058107275515794754f, 0.14870679378509521f, 0.9405415654182434f, 0.7646322250366211f, 0.739646852016449f, 0.2248460203409195f, -0.2238379269838333f, 0.014098339714109898f, 0.13964009284973145f, 0.8734031319618225f, 0.29590144753456116f, 0.8981818556785583f, 0.8400155305862427f, 0.257267028093338f, -0.1186060979962349f, 0.12759524583816528f, 0.8968464732170105f, 0.9386991262435913f, 0.3230394423007965f, 0.5098698735237122f, 0.5429351329803467f, 0.2993137538433075f, -0.16252124309539795f, 0.6367336511611938f, 0.332526296377182f, 0.931858479976654f, 0.9638100266456604f, 0.5239924192428589f, 0.3206663131713867f, 0.9412164092063904f, -0.23294703662395477f, 0.1351110339164734f, 0.3286425471305847f, 0.39107605814933777f, 0.6112489700317383f, 0.44299614429473877f, 0.016191579401493073f, 0.1003384068608284f, -0.5593792796134949f, 0.2053934633731842f, 0.2250208705663681f, 0.3751731216907501f, 0.6544814705848694f, 0.15193994343280792f, 0.19569607079029083f, 0.35637804865837097f, -0.5257549285888672f, 0.6749984622001648f, 0.9322336912155151f, 0.604658305644989f, 0.22004282474517822f, 0.47784897685050964f, 0.5719831585884094f, 0.990469217300415f, -0.34838050603866577f, 0.06375470757484436f, 0.04857301339507103f, 0.7569082975387573f, 0.8504316806793213f, 0.8151203989982605f, 0.09184374660253525f, 0.02118249610066414f, -0.05170409008860588f, 0.038677215576171875f, 0.4502401053905487f, 0.6574715971946716f, 0.9681663513183594f, 0.4638209640979767f, 0.20332810282707214f, 0.7679345607757568f, -0.621955394744873f, 0.001260901102796197f, 0.42681702971458435f, 0.8860729336738586f, 0.5343813300132751f, 0.4681023955345154f, 0.024295270442962646f, 0.25814375281333923f, -0.28020456433296204f, 0.9065024852752686f, 0.8055277466773987f, 0.37837308645248413f, 0.3206954002380371f, 0.6026523113250732f, 0.28363311290740967f, 0.9707452654838562f, -0.5650525689125061f, 0.11257761716842651f, 0.608484148979187f, 0.024377286434173584f, 0.8284135460853577f, 0.24606291949748993f, 0.26561006903648376f, 0.44228795170783997f, -0.4788891673088074f, 0.3232104182243347f, 0.43647265434265137f, 0.8699467778205872f, 0.5136889219284058f, 0.11110696941614151f, 0.1070956289768219f, 0.04578430950641632f, -0.7179998159408569f, 0.3386523127555847f, 0.6982733607292175f, 0.6564353704452515f, 0.38595324754714966f, 0.636803150177002f, 0.7661226391792297f, 0.0076264371164143085f, -0.22002765536308289f, 0.6263518929481506f, 0.23277164995670319f, 0.36775776743888855f, 0.08380050957202911f, 0.7506154179573059f, 0.24435773491859436f, 0.7827968597412109f, -0.09206073731184006f, 0.620186984539032f, 0.12847059965133667f, 0.21052542328834534f, 0.7151557803153992f, 0.5419061183929443f, 0.07743533700704575f, 0.3157207667827606f, -0.8680981993675232f, 0.05587683245539665f, 0.4028995931148529f, 0.0559372678399086f, 0.9396454691886902f, 0.6424287557601929f, 0.7862708568572998f, 0.08036138117313385f, -0.7864803671836853f, 0.13440102338790894f, 0.32053011655807495f, 0.5980395674705505f, 0.8514880537986755f, 0.4039474129676819f, 0.9174891710281372f, 0.10805342346429825f, -0.24066755175590515f, 0.7581113576889038f, 0.5803324580192566f, 0.8761907815933228f, 0.04618668183684349f, 0.9468115568161011f, 0.8661092519760132f, 0.7348021864891052f, -0.92482990026474f, 0.41565805673599243f, 0.1541040986776352f, 0.21262356638908386f, 0.653236985206604f, 0.27476099133491516f, 0.6582420468330383f, 0.9907457828521729f, -0.05766468122601509f, 0.2637670338153839f, 0.3543861210346222f, 0.7176480293273926f, 0.17315053939819336f, 0.34765854477882385f, 0.3639664351940155f, 0.41121354699134827f, -0.6404571533203125f, 0.8853263854980469f, 0.3970893919467926f, 0.1731584668159485f, 0.625095546245575f, 0.3107199966907501f, 0.2703779637813568f, 0.9812841415405273f, -0.08167421817779541f, 0.8060241937637329f, 0.8986160159111023f, 0.25784263014793396f, 0.13990147411823273f, 0.12634336948394775f, 0.8748691082000732f, 0.7376542091369629f, -0.9611518979072571f, 0.5455068945884705f, 0.8574966788291931f, 0.6909998655319214f, 0.3857821822166443f, 0.4096216857433319f, 0.14174675941467285f, 0.3559526801109314f, -0.032969873398542404f, 0.2079625129699707f, 0.9717853665351868f, 0.8188678622245789f, 0.829477846622467f, 0.708890438079834f, 0.48937034606933594f, 0.08421435952186584f, -0.1299351155757904f, 0.2970893085002899f, 0.11668142676353455f, 0.8092253804206848f, 0.01953912153840065f, 0.689297616481781f, 0.7913970351219177f, 0.4709159731864929f, -0.6117097735404968f, 0.11250679939985275f, 0.06500918418169022f, 0.24485701322555542f, 0.5242945551872253f, 0.2791692316532135f, 0.3144454061985016f, 0.3465166389942169f, -0.48414868116378784f, 0.9556480050086975f, 0.5591384172439575f, 0.04848089814186096f, 0.14646053314208984f, 0.8559540510177612f, 0.6629430055618286f, 0.5920697450637817f, -0.4277642071247101f, 0.5134144425392151f, 0.15905241668224335f, 0.0331486351788044f, 0.8404709100723267f, 0.4738256335258484f, 0.7800297141075134f, 0.12751807272434235f, -0.7103203535079956f, 0.31917497515678406f, 0.4705432057380676f, 0.5106287002563477f, 0.1186150386929512f, 0.5041157603263855f, 0.6842405200004578f, 0.20217756927013397f, -0.3872647285461426f, 0.6892217397689819f, 0.3952968120574951f, 0.1975976824760437f, 0.3501327335834503f, 0.9018445014953613f, 0.07113654166460037f, 0.34841057658195496f, -0.28617313504219055f, 0.22777926921844482f, 0.8987040519714355f, 0.4237571060657501f, 0.44125860929489136f, 0.49189493060112f, 0.461812824010849f, 0.4412309527397156f, -0.45602259039878845f, 0.46943944692611694f, 0.016884008422493935f, 0.26105818152427673f, 0.5404030084609985f, 0.7687519788742065f, 0.739402174949646f, 0.8797420859336853f, -0.933696448802948f, 0.4669914245605469f, 0.23553217947483063f, 0.8120397329330444f, 0.46963873505592346f, 0.6538075804710388f, 0.23607726395130157f, 0.527273416519165f, -0.8784774541854858f, 0.41287702322006226f, 0.09814637154340744f, 0.203242689371109f, 0.8785141110420227f, 0.7996118068695068f, 0.5275879502296448f, 0.22146670520305634f, -0.27454981207847595f, 0.16150368750095367f, 0.7112952470779419f, 0.29926949739456177f, 0.3520502746105194f, 0.909842848777771f, 0.3503207564353943f, 0.7151540517807007f, -0.6030154228210449f, 0.5630579590797424f, 0.057260334491729736f, 0.16787585616111755f, 0.6530300378799438f, 0.8477206230163574f, 0.5597342252731323f, 0.25646960735321045f, -0.8631776571273804f, 0.8033219575881958f, 0.7758045792579651f, 0.7742009162902832f, 0.3656601011753082f, 0.3921717703342438f, 0.7686176896095276f, 0.19411109387874603f, -0.6392099261283875f, 0.5471025109291077f, 0.15787911415100098f, 0.22937452793121338f, 0.503790557384491f, 0.5154556632041931f, 0.7277136445045471f, 0.8657292723655701f, -0.3449056148529053f, 0.2956768274307251f, 0.6308916211128235f, 0.6122925281524658f, 0.9636062383651733f, 0.3381427824497223f, 0.6257869005203247f, 0.9299535751342773f, -0.7284884452819824f, 0.909953236579895f, 0.4943767786026001f, 0.7820038199424744f, 0.9318399429321289f, 0.9825010895729065f, 0.7530080080032349f, 0.5245336890220642f, -0.048018135130405426f, 0.4561740756034851f, 0.4426131248474121f, 0.9702586531639099f, 0.6898532509803772f, 0.10864511132240295f, 0.878344714641571f, 0.6315293908119202f, -0.16308218240737915f, 0.2327789068222046f, 0.9163687229156494f, 0.06273790448904037f, 0.3190004527568817f, 0.7616982460021973f, 0.8756677508354187f, 0.4636629521846771f, -0.4766356348991394f, 0.28847047686576843f, 0.27698034048080444f, 0.577751100063324f, 0.7177387475967407f, 0.02265753224492073f, 0.02719578519463539f, 0.3942880630493164f, -0.822600781917572f, 0.10300964117050171f, 0.3009021282196045f, 0.8780803680419922f, 0.21737785637378693f, 0.052027251571416855f, 0.9048323631286621f, 0.04196259751915932f, -0.9257462620735168f, 0.9458962082862854f, 0.7842293381690979f, 0.3619333803653717f, 0.69598788022995f, 0.3290434181690216f, 0.06117522343993187f, 0.6197401881217957f, -0.5543610453605652f, 0.9750494360923767f, 0.46055492758750916f, 0.7920054197311401f, 0.4908994734287262f, 0.569646954536438f, 0.5639709830284119f, 0.5581080317497253f, -0.7965160608291626f, 0.8198531866073608f, 0.6050980687141418f, 0.7166163921356201f, 0.04355703294277191f, 0.03598935157060623f, 0.10377522557973862f, 0.21946391463279724f, -0.7186120748519897f, 0.10853936523199081f, 0.7546297311782837f, 0.06257287412881851f, 0.26106375455856323f, 0.660200834274292f, 0.43541422486305237f, 0.6304566860198975f, -0.6593674421310425f, 0.10016738623380661f, 0.20877869427204132f, 0.663899302482605f, 0.29707980155944824f, 0.9422990679740906f, 0.772461473941803f, 0.7894607782363892f, -0.6448178887367249f, 0.7368708848953247f, 0.7605751752853394f, 0.18093815445899963f, 0.44999733567237854f, 0.6263946294784546f, 0.7237064242362976f, 0.3369208574295044f, -0.28418007493019104f, 0.7830799221992493f, 0.8702595233917236f, 0.5795636177062988f, 0.6032289266586304f, 0.3690928518772125f, 0.8390531539916992f, 0.44170132279396057f, -0.5852668881416321f, 0.3980071246623993f, 0.953632116317749f, 0.35733795166015625f, 0.8021227717399597f, 0.1534307450056076f, 0.26681625843048096f, 0.8547041416168213f, -0.4035550355911255f, 0.049769576638936996f, 0.8594427108764648f, 0.9269259572029114f, 0.6149231791496277f, 0.6187196373939514f, 0.7945013642311096f, 0.194220170378685f, -0.24123959243297577f, 0.07118742167949677f, 0.32068300247192383f, 0.4953100383281708f, 0.9639949798583984f, 0.07781530171632767f, 0.21411745250225067f, 0.882895290851593f, -0.6526772975921631f, 0.6897380352020264f, 0.597256600856781f, 0.18766075372695923f, 0.7536001205444336f, 0.734142541885376f, 0.9282724857330322f, 0.28018975257873535f, -0.6432045102119446f, 0.10631901770830154f, 0.4969343841075897f, 0.2701895833015442f, 0.9423393607139587f, 0.07808420807123184f, 0.17764988541603088f, 0.25093191862106323f, -0.8064326643943787f, 0.11595612019300461f, 0.16925756633281708f, 0.9540750980377197f, 0.26996779441833496f, 0.6377124786376953f, 0.8651028275489807f, 0.42725300788879395f, -0.4934048056602478f, 0.4100913107395172f, 0.3517068922519684f, 0.4344439208507538f, 0.3028528392314911f, 0.32427695393562317f, 0.7135677933692932f, 0.14501354098320007f, -0.41722050309181213f, 0.7054790258407593f, 0.9842159748077393f, 0.12943947315216064f, 0.2628370523452759f, 0.7392820715904236f, 0.2099725306034088f, 0.9014472365379333f, -0.54909348487854f, 0.8116652965545654f, 0.7484686374664307f, 0.3271888494491577f, 0.9518178105354309f, 0.7993628978729248f, 0.17547786235809326f, 0.9463900923728943f, -0.48915737867355347f, 0.2926233410835266f, 0.30136269330978394f, 0.6454530358314514f, 0.9648095369338989f, 0.9839211106300354f, 0.31854891777038574f, 0.1400894969701767f, -0.35106924176216125f, 0.01271904818713665f, 0.11574378609657288f, 0.023845242336392403f, 0.8400421142578125f, 0.9815496206283569f, 0.33165985345840454f, 0.8954227566719055f, -0.7488006353378296f, 0.34038683772087097f, 0.2712743282318115f, 0.1034851148724556f, 0.8074162602424622f, 0.930837094783783f, 0.39920827746391296f, 0.052608031779527664f, -0.5686343908309937f, 0.6993796229362488f, 0.8018646836280823f, 0.34227174520492554f, 0.8029371500015259f, 0.34822991490364075f, 0.3423404097557068f, 0.30295175313949585f, -0.43262767791748047f, 0.12353415042161942f, 0.25912463665008545f, 0.6948883533477783f, 0.6079266667366028f, 0.7130725383758545f, 0.9356048107147217f, 0.08653569221496582f, -0.0058343783020973206f, 0.7056031823158264f, 0.3248789608478546f, 0.5176699161529541f, 0.3879224956035614f, 0.7956275343894958f, 0.025138359516859055f, 0.9827994108200073f, -0.5614805817604065f, 0.7862809896469116f, 0.014198151417076588f, 0.7941557168960571f, 0.6162126660346985f, 0.4782457649707794f, 0.046520087867975235f, 0.9910227656364441f, -0.8671956062316895f, 0.49851536750793457f, 0.29944223165512085f, 0.7426451444625854f, 0.7242608070373535f, 0.8456466197967529f, 0.16153869032859802f, 0.8163052201271057f, -0.9842028617858887f, 0.6530867218971252f, 0.4738105237483978f, 0.3477137088775635f, 0.5995133519172668f, 0.4019671380519867f, 0.9642916321754456f, 0.7484514713287354f, -0.6111140847206116f, 0.8771831393241882f, 0.10662898421287537f, 0.035745732486248016f, 0.7779162526130676f, 0.4692192077636719f, 0.7727100849151611f, 0.9449385404586792f, -0.5782673358917236f, 0.989303708076477f, 0.7338470220565796f, 0.2482513189315796f, 0.8145818114280701f, 0.881729245185852f, 0.5171577334403992f, 0.7132847309112549f, -0.8889255523681641f, 0.934226393699646f, 0.7816445231437683f, 0.06953894346952438f, 0.05338693782687187f, 0.8483032584190369f, 0.7495178580284119f, 0.3597365617752075f, -0.9642563462257385f, 0.8716056942939758f, 0.9428830146789551f, 0.6181700825691223f, 0.1119290441274643f, 0.2722616195678711f, 0.7648196816444397f, 0.9074612259864807f, -0.4069083034992218f, 0.5628727078437805f, 0.7503560781478882f, 0.8223488330841064f, 0.008173779584467411f, 0.5041094422340393f, 0.45360642671585083f, 0.7417305111885071f, -0.6330482363700867f, 0.44177311658859253f, 0.4426082372665405f, 0.9037178158760071f, 0.48663175106048584f, 0.7660409212112427f, 0.33772847056388855f, 0.18466632068157196f, -0.36770501732826233f, 0.6229833960533142f, 0.09406299144029617f, 0.11297629028558731f, 0.650833249092102f, 0.7421762347221375f, 0.7775901556015015f, 0.874401330947876f, -0.9455944895744324f, 0.005906261038035154f, 0.6002261638641357f, 0.1899518221616745f, 0.9430942535400391f, 0.542553722858429f, 0.4034617841243744f, 0.3723416328430176f, -0.4260530173778534f, 0.24041661620140076f, 0.4312092959880829f, 0.599763035774231f, 0.45711278915405273f, 0.3620343506336212f, 0.21201258897781372f, 0.6556577682495117f, -0.678152859210968f, 0.22076363861560822f, 0.3079467713832855f, 0.8250532150268555f, 0.9855762124061584f, 0.5230781435966492f, 0.45381370186805725f, 0.7850443124771118f, -0.7261698842048645f, 0.8135749101638794f, 0.33925625681877136f, 0.02226574905216694f, 0.4281374216079712f, 0.5784098505973816f, 0.09870850294828415f, 0.15439647436141968f, -0.6980978846549988f, 0.2543356418609619f, 0.6546390652656555f, 0.4417404234409332f, 0.8391082286834717f, 0.1577204167842865f, 0.6275382041931152f, 0.43271273374557495f, -0.17637252807617188f, 0.8011540174484253f, 0.7812651991844177f, 0.6273053884506226f, 0.4664947986602783f, 0.006796292960643768f, 0.20944568514823914f, 0.18537066876888275f, -0.6390134692192078f, 0.5444878935813904f, 0.9569766521453857f, 0.9456713795661926f, 0.2527533769607544f, 0.6649144291877747f, 0.8122234344482422f, 0.1404782086610794f, -0.3841293752193451f, 0.79474276304245f, 0.20189182460308075f, 0.8612878322601318f, 0.887595534324646f, 0.2987343370914459f, 0.6681244969367981f, 0.8686928749084473f, -0.2706228792667389f, 0.5782015919685364f, 0.04099566861987114f, 0.06331100314855576f, 0.12906421720981598f, 0.44208022952079773f, 0.5565705299377441f, 0.49306100606918335f, -0.11601907759904861f, 0.9988796710968018f, 0.7642831802368164f, 0.4988817274570465f, 0.7769607901573181f, 0.07563064992427826f, 0.5242459177970886f, 0.6124475598335266f, -0.9224030375480652f, 0.4829946756362915f, 0.9743263721466064f, 0.3143327534198761f, 0.11972169578075409f, 0.6249790191650391f, 0.27963241934776306f, 0.3822382688522339f, -0.6712122559547424f, 0.4730337858200073f, 0.54830002784729f, 0.8820130825042725f, 0.20693226158618927f, 0.28086668252944946f, 0.24323587119579315f, 0.4131501019001007f, -0.6692589521408081f, 0.8058267831802368f, 0.9736827611923218f, 0.7469778656959534f, 0.7803829312324524f, 0.9809821844100952f, 0.6054527163505554f, 0.9500524401664734f, -0.2935018539428711f, 0.891819953918457f, 0.07335367053747177f, 0.42730870842933655f, 0.11460328102111816f, 0.5002465844154358f, 0.03564150631427765f, 0.5831686854362488f, -0.41243496537208557f, 0.5141292810440063f, 0.9926841855049133f, 0.91264408826828f, 0.45361191034317017f, 0.5071617364883423f, 0.031946469098329544f, 0.6036243438720703f, -0.36398372054100037f, 0.23387864232063293f, 0.8583866953849792f, 0.16811944544315338f, 0.6010708808898926f, 0.5961779356002808f, 0.9768539071083069f, 0.3632800281047821f, -0.21368175745010376f, 0.9274531602859497f, 0.964668333530426f, 0.19827520847320557f, 0.23932595551013947f, 0.885831892490387f, 0.6337722539901733f, 0.9627552032470703f, -0.5986185669898987f, 0.06462076306343079f, 0.16896460950374603f, 0.4246165454387665f, 0.5774641633033752f, 0.6039654612541199f, 0.9925373196601868f, 0.16019615530967712f, -0.9408078789710999f, 0.33328744769096375f, 0.5956119894981384f, 0.18007582426071167f, 0.9648593664169312f, 0.3104807734489441f, 0.30069202184677124f, 0.7188702821731567f, -0.4457683563232422f, 0.8636954426765442f, 0.8310862183570862f, 0.6033899188041687f, 0.5383630394935608f, 0.7205005884170532f, 0.9460569024085999f, 0.5709143280982971f, -0.44390609860420227f, 0.6093078851699829f, 0.5022509694099426f, 0.5651435256004333f, 0.6927131414413452f, 0.3831329047679901f, 0.9391557574272156f, 0.2667500674724579f, -0.4427245855331421f, 0.6360276937484741f, 0.6552993655204773f, 0.9345299601554871f, 0.6451433300971985f, 0.4087541401386261f, 0.8872923254966736f, 0.993327796459198f, -0.6726505160331726f, 0.3101227879524231f, 0.7541263699531555f, 0.7321222424507141f, 0.27630940079689026f, 0.042767591774463654f, 0.5367146730422974f, 0.5285932421684265f, -0.6167144775390625f, 0.5334307551383972f, 0.656223475933075f, 0.10072512179613113f, 0.7137128114700317f, 0.18209518492221832f, 0.09606660157442093f, 0.09515058994293213f, -0.4071235954761505f, 0.11703076958656311f, 0.6545117497444153f, 0.8022115230560303f, 0.17494279146194458f, 0.9072311520576477f, 0.818123459815979f, 0.3157068192958832f, -0.8141036629676819f, 0.9154764413833618f, 0.17803265154361725f, 0.005345477256923914f, 0.6708893775939941f, 0.580342173576355f, 0.6789324283599854f, 0.9807842969894409f, -0.04770250245928764f, 0.000721581862308085f, 0.6970294713973999f, 0.7149075865745544f, 0.7234565615653992f, 0.5385764241218567f, 0.3893669843673706f, 0.34932205080986023f, -0.7790898680686951f, 0.792131245136261f, 0.31720033288002014f, 0.05925094336271286f, 0.8677526116371155f, 0.9913186430931091f, 0.18590155243873596f, 0.3712713122367859f, -0.7132894992828369f, 0.5069312453269958f, 0.5409483313560486f, 0.5178145170211792f, 0.22613820433616638f, 0.11651097983121872f, 0.4982295632362366f, 0.05251503363251686f, -0.9829440712928772f, 0.9034884572029114f, 0.4179036319255829f, 0.16451974213123322f, 0.2803223431110382f, 0.1246265396475792f, 0.5875905156135559f, 0.23799042403697968f, -0.8617978692054749f, 0.8730332851409912f, 0.6315425038337708f, 0.34979262948036194f, 0.9927371144294739f, 0.17915242910385132f, 0.25107288360595703f, 0.9342483878135681f, -0.9305894374847412f, 0.6624715328216553f, 0.85882967710495f, 0.336712509393692f, 0.029966481029987335f, 0.1439971923828125f, 0.25821810960769653f, 0.5978325605392456f, -0.12609149515628815f, 0.8835583925247192f, 0.9450922012329102f, 0.7709787487983704f, 0.9276230931282043f, 0.4409927725791931f, 0.6215558648109436f, 0.4521143138408661f, -0.829023540019989f, 0.3660440146923065f, 0.34823673963546753f, 0.8295148015022278f, 0.8622278571128845f, 0.7014221549034119f, 0.8315393328666687f, 0.9644994139671326f, -0.5315943360328674f, 0.6151713132858276f, 0.06332091242074966f, 0.2078348994255066f, 0.30949515104293823f, 0.8191230297088623f, 0.31052064895629883f, 0.7752758860588074f, -0.3018757998943329f, 0.9303984045982361f, 0.717680037021637f, 0.5702398419380188f, 0.4663638770580292f, 0.36898383498191833f, 0.6601676940917969f, 0.19000695645809174f, -0.32085925340652466f, 0.47540712356567383f, 0.0262217428535223f, 0.8014992475509644f, 0.735499382019043f, 0.5438852906227112f, 0.057728759944438934f, 0.18876279890537262f, -0.968708336353302f, 0.39608192443847656f, 0.647757887840271f, 0.3963983356952667f, 0.8751054406166077f, 0.00015009849448688328f, 0.32598739862442017f, 0.7419369220733643f, -0.042921677231788635f, 0.6447097063064575f, 0.3250815272331238f, 0.4541773796081543f, 0.9106877446174622f, 0.48296481370925903f, 0.07701331377029419f, 0.7001394629478455f, -0.3227482736110687f, 0.7048130035400391f, 0.04986690357327461f, 0.04165894538164139f, 0.8688830137252808f, 0.6936748027801514f, 0.5823327898979187f, 0.8523034453392029f, -0.8889883756637573f, 0.9511672258377075f, 0.025991205126047134f, 0.7161531448364258f, 0.45135778188705444f, 0.8053043484687805f, 0.9962376356124878f, 0.3233889043331146f, -0.45579633116722107f, 0.3536668121814728f, 0.5365522503852844f, 0.20663347840309143f, 0.19456487894058228f, 0.504016637802124f, 0.04437744989991188f, 0.060358379036188126f, -0.7134724855422974f, 0.4739934206008911f, 0.47554704546928406f, 0.7006832361221313f, 0.7363136410713196f, 0.3713056445121765f, 0.04272095486521721f, 0.3048797845840454f, -0.9786534905433655f, 0.19193656742572784f, 0.5432624220848083f, 0.3559200167655945f, 0.6481971740722656f, 0.28504109382629395f, 0.2335381656885147f, 0.3284623622894287f, -0.6036224365234375f, 0.16591224074363708f, 0.6063321232795715f, 0.8663690686225891f, 0.568655252456665f, 0.5977252721786499f, 0.3552895486354828f, 0.3607657849788666f, -0.7984837889671326f, 0.7490066289901733f, 0.1534544676542282f, 0.47949594259262085f, 0.6412301063537598f, 0.22222067415714264f, 0.042538344860076904f, 0.9428794980049133f, -0.8639885187149048f, 0.0009349423344247043f, 0.09321492165327072f, 0.9450436234474182f, 0.33783912658691406f, 0.31351199746131897f, 0.44067516922950745f, 0.5443245768547058f, -0.17213867604732513f, 0.8898904919624329f, 0.9836643934249878f, 0.06907733529806137f, 0.867277979850769f, 0.14417162537574768f, 0.2713841199874878f, 0.5782406330108643f, -0.7129323482513428f, 0.08432808518409729f, 0.7337192893028259f, 0.9311186671257019f, 0.585777759552002f, 0.5491144061088562f, 0.850869357585907f, 0.45883283019065857f, -0.10753415524959564f, 0.7654266953468323f, 0.07249400019645691f, 0.8838416934013367f, 0.945712149143219f, 0.08671209961175919f, 0.16570785641670227f, 0.8319103121757507f, -0.808855414390564f, 0.2721400558948517f, 0.7451012134552002f, 0.9349868297576904f, 0.3024519085884094f, 0.9905514717102051f, 0.7062371373176575f, 0.168050155043602f, -0.5105443000793457f, 0.5609583854675293f, 0.3613084554672241f, 0.16769833862781525f, 0.5763028860092163f, 0.8214059472084045f, 0.16832073032855988f, 0.25677362084388733f, -0.2915043830871582f, 0.9719215035438538f, 0.6556411385536194f, 0.22936640679836273f, 0.7774644494056702f, 0.0859229788184166f, 0.7373678088188171f, 0.12926188111305237f, -0.3142651319503784f, 0.9635137319564819f, 0.2345956563949585f, 0.25149306654930115f, 0.843975841999054f, 0.5667732954025269f, 0.9096396565437317f, 0.5616241097450256f, -0.04197216406464577f, 0.49074575304985046f, 0.634490430355072f, 0.7028214931488037f, 0.5774420499801636f, 0.1435842216014862f, 0.7748657464981079f, 0.6708789467811584f, -0.8779076337814331f, 0.5889583230018616f, 0.7647926807403564f, 0.33181875944137573f, 0.6324511170387268f, 0.9314984679222107f, 0.7691919207572937f, 0.6229024529457092f, -0.4084717929363251f, 0.7247394323348999f, 0.09630313515663147f, 0.004266552627086639f, 0.5194789171218872f, 0.622816264629364f, 0.23397718369960785f, 0.5215924978256226f, -0.3068622648715973f, 0.5238447785377502f, 0.4393702447414398f, 0.860313355922699f, 0.38002732396125793f, 0.7683602571487427f, 0.15852904319763184f, 0.14263805747032166f, -0.9103568196296692f, 0.9802494049072266f, 0.9823074340820312f, 0.21053723990917206f, 0.01629568822681904f, 0.29782891273498535f, 0.03920430690050125f, 0.5181881785392761f, -0.6270059943199158f, 0.13840174674987793f, 0.5510337948799133f, 0.2971092760562897f, 0.9151813387870789f, 0.1411326378583908f, 0.8628212213516235f, 0.4964248239994049f, -0.0719209834933281f, 0.9404349327087402f, 0.8959749937057495f, 0.8766766786575317f, 0.21392904222011566f, 0.08303523808717728f, 0.7794816493988037f, 0.4339042901992798f, -0.2997802495956421f, 0.046614114195108414f, 0.7391679286956787f, 0.5049365758895874f, 0.6646974682807922f, 0.37817588448524475f, 0.05003758892416954f, 0.6381238102912903f, -0.4157024621963501f, 0.4490993618965149f, 0.21262617409229279f, 0.5733054876327515f, 0.5781734585762024f, 0.7491338849067688f, 0.15279607474803925f, 0.9690561890602112f, -0.12338342517614365f, 0.753312349319458f, 0.3285880982875824f, 0.8435595035552979f, 0.5787566304206848f, 0.02767658606171608f, 0.3456004559993744f, 0.6057891845703125f, -0.6544575691223145f, 0.354931116104126f, 0.49162060022354126f, 0.3553510904312134f, 0.8298798203468323f, 0.7997459173202515f, 0.32917606830596924f, 0.7736532688140869f, -0.4216707646846771f, 0.1804075837135315f, 0.5614598989486694f, 0.2677038311958313f, 0.7747086882591248f, 0.7480881214141846f, 0.9410672783851624f, 0.38153377175331116f, -0.018339553847908974f, 0.9877755641937256f, 0.07223229110240936f, 0.8492757678031921f, 0.7444782257080078f, 0.2059658169746399f, 0.44956985116004944f, 0.7702125906944275f, -0.7943695187568665f, 0.5606192350387573f, 0.4457750618457794f, 0.5994091629981995f, 0.6329724788665771f, 0.6880637407302856f, 0.9384908080101013f, 0.4009060561656952f, -0.41435933113098145f, 0.025758223608136177f, 0.2105962336063385f, 0.658098578453064f, 0.2516051232814789f, 0.5209670662879944f, 0.49828779697418213f, 0.3497597575187683f, -0.9237363934516907f, 0.8446557521820068f, 0.5537616610527039f, 0.8989111185073853f, 0.08280975371599197f, 0.5127158761024475f, 0.5486977100372314f, 0.8484154343605042f, -0.20802462100982666f, 0.977000892162323f, 0.8823769688606262f, 0.5603607296943665f, 0.9331434369087219f, 0.5040026307106018f, 0.0035340297035872936f, 0.2163696438074112f, -0.9974455833435059f, 0.22504031658172607f, 0.27523964643478394f, 0.3807903528213501f, 0.4400908052921295f, 0.8806363940238953f, 0.6359692215919495f, 0.32889196276664734f, -0.7104197144508362f, 0.7988142371177673f, 0.9570748209953308f, 0.2560233473777771f, 0.6627296805381775f, 0.423214852809906f, 0.8026673197746277f, 0.9556097388267517f, -0.043965548276901245f, 0.813364565372467f, 0.9576829075813293f, 0.18813295662403107f, 0.40331757068634033f, 0.3555091619491577f, 0.18575142323970795f, 0.171940416097641f, -0.013418094255030155f, 0.32236334681510925f, 0.1461159586906433f, 0.39386847615242004f, 0.7217600345611572f, 0.5364911556243896f, 0.30343005061149597f, 0.715421199798584f, -0.1997729241847992f, 0.836590051651001f, 0.3129154443740845f, 0.8092793226242065f, 0.9818861484527588f, 0.7738751173019409f, 0.6807781457901001f, 0.3603532910346985f, -0.6582445502281189f, 0.23919032514095306f, 0.8293980956077576f, 0.5472281575202942f, 0.34834399819374084f, 0.46909308433532715f, 0.49843040108680725f, 0.8902896642684937f, -0.25658977031707764f, 0.525367021560669f, 0.4220517575740814f, 0.9576948881149292f, 0.4059820771217346f, 0.6019579172134399f, 0.6028222441673279f, 0.37829944491386414f, -0.36965689063072205f, 0.5521267056465149f, 0.1517181098461151f, 0.20345324277877808f, 0.9654867649078369f, 0.5373077988624573f, 0.11403828859329224f, 0.9771957397460938f, -0.41707199811935425f, 0.4378163814544678f, 0.023339247331023216f, 0.6222458481788635f, 0.8754937052726746f, 0.7684306502342224f, 0.12553270161151886f, 0.587972104549408f, -0.000501865113619715f, 0.25455406308174133f, 0.26010042428970337f, 0.439541757106781f, 0.5408532023429871f, 0.9406962394714355f, 0.6268137693405151f, 0.5882735848426819f, -0.2611141502857208f, 0.21967153251171112f, 0.14815931022167206f, 0.6473905444145203f, 0.42245912551879883f, 0.3393997550010681f, 0.5873074531555176f, 0.5236234664916992f, -0.11800380051136017f, 0.630885660648346f, 0.566364586353302f, 0.8459683060646057f, 0.9754093885421753f, 0.8900245428085327f, 0.8419263362884521f, 0.19941745698451996f, -0.8323206305503845f, 0.869081974029541f, 0.6389018297195435f, 0.07380800694227219f, 0.7646723389625549f, 0.7207842469215393f, 0.6643975377082825f, 0.7746568322181702f, -0.0818289965391159f, 0.0013044176157563925f, 0.04907960072159767f, 0.08892539143562317f, 0.5050815939903259f, 0.8363115787506104f, 0.6167794466018677f, 0.34453874826431274f, -0.4683718979358673f, 0.03514600917696953f, 0.6178896427154541f, 0.19544106721878052f, 0.1128392443060875f, 0.7223660349845886f, 0.18785779178142548f, 0.09948159009218216f, -0.21896634995937347f, 0.031887542456388474f, 0.21806909143924713f, 0.8344054222106934f, 0.44281935691833496f, 0.5916294455528259f, 0.2257256954908371f, 0.48757049441337585f, -0.23079535365104675f, 0.8757179975509644f, 0.6919372081756592f, 0.2323681116104126f, 0.30295589566230774f, 0.34980466961860657f, 0.758025586605072f, 0.03994397073984146f, -0.8065571188926697f, 0.4367838203907013f, 0.3451150953769684f, 0.4463658630847931f, 0.9027522802352905f, 0.9947848916053772f, 0.4368416666984558f, 0.3487667739391327f, -0.66556715965271f, 0.3350934386253357f, 0.03252462297677994f, 0.6565872430801392f, 0.36222177743911743f, 0.1725676953792572f, 0.44842228293418884f, 0.42815107107162476f, -0.2055654674768448f, 0.08185692131519318f, 0.5870844721794128f, 0.3034864366054535f, 0.7917241454124451f, 0.02278195135295391f, 0.4135843515396118f, 0.8207254409790039f, -0.5376335978507996f, 0.09958571940660477f, 0.11622262001037598f, 0.5434495806694031f, 0.45978832244873047f, 0.7342290878295898f, 0.2965024411678314f, 0.20513826608657837f, -0.8181548118591309f, 0.6661482453346252f, 0.8862834572792053f, 0.9657912850379944f, 0.8193725943565369f, 0.2289673238992691f, 0.14240363240242004f, 0.7340920567512512f, -0.7611843347549438f, 0.3202770948410034f, 0.2692880630493164f, 0.31135985255241394f, 0.3293713927268982f, 0.4167378544807434f, 0.3477124869823456f, 0.6362581253051758f, -0.6681802868843079f, 0.4416278004646301f, 0.5454820990562439f, 0.23112763464450836f, 0.266264408826828f, 0.3003827631473541f, 0.36719805002212524f, 0.39932575821876526f, -0.16942337155342102f, 0.9617171883583069f, 0.7629466652870178f, 0.5653988122940063f, 0.9660711884498596f, 0.8709555268287659f, 0.3161655068397522f, 0.34291499853134155f, -0.047644395381212234f, 0.5752235651016235f, 0.8174907565116882f, 0.059304412454366684f, 0.07079123705625534f, 0.1410975456237793f, 0.3334200084209442f, 0.37232276797294617f, -0.6341149806976318f, 0.6295991539955139f, 0.14686092734336853f, 0.0900934711098671f, 0.27437537908554077f, 0.8671375513076782f, 0.8003177642822266f, 0.09079998731613159f, -0.9292823076248169f, 0.8191444277763367f, 0.6397839784622192f, 0.873594343662262f, 0.3865031599998474f, 0.428415983915329f, 0.7602844834327698f, 0.3317670524120331f, -0.9355236887931824f, 0.41358745098114014f, 0.5739431381225586f, 0.4066440165042877f, 0.7735415101051331f, 0.22038070857524872f, 0.04008669778704643f, 0.5101921558380127f, -0.08403272926807404f, 0.8861938118934631f, 0.5359827280044556f, 0.17105263471603394f, 0.9823418855667114f, 0.719394326210022f, 0.9328480362892151f, 0.6028350591659546f, -0.2739214301109314f, 0.346582293510437f, 0.8322019577026367f, 0.8751933574676514f, 0.28444239497184753f, 0.7223399877548218f, 0.7635599374771118f, 0.31384938955307007f, -0.30347293615341187f, 0.903433620929718f, 0.1122736930847168f, 0.5948749780654907f, 0.50578773021698f, 0.017924053594470024f, 0.026283567771315575f, 0.40830010175704956f, -0.21422737836837769f, 0.32036101818084717f, 0.2937755286693573f, 0.3473151624202728f, 0.6006588935852051f, 0.3315619230270386f, 0.6048083901405334f, 0.5548192262649536f, -0.061909839510917664f, 0.6305533051490784f, 0.3966982066631317f, 0.2740429639816284f, 0.0054782601073384285f, 0.6759213805198669f, 0.624861478805542f, 0.9020642042160034f, -0.35299867391586304f, 0.29949790239334106f, 0.04965892434120178f, 0.9242826700210571f, 0.7297841310501099f, 0.9797106981277466f, 0.11338645964860916f, 0.010718976147472858f, -0.20340335369110107f, 0.5013973712921143f, 0.17434895038604736f, 0.5627487897872925f, 0.3123907744884491f, 0.9254778027534485f, 0.7714986801147461f, 0.33678871393203735f, -0.8607701063156128f, 0.489315390586853f, 0.5248792171478271f, 0.6963207721710205f, 0.45425349473953247f, 0.5669882297515869f, 0.27317890524864197f, 0.9080923795700073f, -0.553530752658844f, 0.6442045569419861f, 0.4323040544986725f, 0.011986706405878067f, 0.9936623573303223f, 0.7779556512832642f, 0.8549953699111938f, 0.13301344215869904f, -0.687378466129303f, 0.9676215648651123f, 0.23784185945987701f, 0.34767183661460876f, 0.9565979838371277f, 0.01616457663476467f, 0.7985401153564453f, 0.5302053093910217f, -0.28185275197029114f, 0.532497763633728f, 0.4094184637069702f, 0.2990320920944214f, 0.592711865901947f, 0.2594357132911682f, 0.1571246087551117f, 0.02881450019776821f, -0.557580292224884f, 0.19628329575061798f, 0.8321601748466492f, 0.9174531102180481f, 0.6434765458106995f, 0.26706287264823914f, 0.642525851726532f, 0.05383206531405449f, -0.17389973998069763f, 0.3208145201206207f, 0.7359628677368164f, 0.30776479840278625f, 0.6649987697601318f, 0.30871543288230896f, 0.4080694913864136f, 0.05052683502435684f, -0.22577159106731415f, 0.4819130599498749f, 0.7091158628463745f, 0.008033058606088161f, 0.823577344417572f, 0.8930519819259644f, 0.3649440407752991f, 0.33171355724334717f, -0.5427645444869995f, 0.5433759689331055f, 0.04517075791954994f, 0.6447999477386475f, 0.1282452642917633f, 0.014851687476038933f, 0.5234280824661255f, 0.7126855254173279f, -0.6093373894691467f, 0.2221396118402481f, 0.491085022687912f, 0.7521764039993286f, 0.7880815863609314f, 0.7423375248908997f, 0.6614843606948853f, 0.7245064377784729f, -0.9348701238632202f, 0.10237083584070206f, 0.10885504633188248f, 0.7884747982025146f, 0.2669902741909027f, 0.7288358807563782f, 0.7340894937515259f, 0.9425387382507324f, -0.9592620134353638f, 0.8878792524337769f, 0.6938801407814026f, 0.2531968951225281f, 0.6193204522132874f, 0.2514832317829132f, 0.5453944802284241f, 0.25279930233955383f, -0.12664517760276794f, 0.5327041745185852f, 0.6340491771697998f, 0.28492164611816406f, 0.5720952153205872f, 0.870942234992981f, 0.08903639018535614f, 0.07246426492929459f, -0.5982228517532349f, 0.04921461641788483f, 0.4786341190338135f, 0.14545661211013794f, 0.7005316615104675f, 0.48022058606147766f, 0.41651368141174316f, 0.756188690662384f, -0.8971241116523743f, 0.7146160006523132f, 0.7603211998939514f, 0.40327152609825134f, 0.6539556980133057f, 0.46884778141975403f, 0.40624696016311646f, 0.4541179835796356f, -0.10554632544517517f, 0.19034263491630554f, 0.15238788723945618f, 0.28085464239120483f, 0.9173556566238403f, 0.7900065779685974f, 0.8443425893783569f, 0.2925129234790802f, -0.8982279300689697f, 0.9129948019981384f, 0.10749179124832153f, 0.02645350620150566f, 0.6694518327713013f, 0.5122164487838745f, 0.047355663031339645f, 0.1740802526473999f, -0.48008888959884644f, 0.7223691344261169f, 0.6988243460655212f, 0.05638204142451286f, 0.1115676537156105f, 0.19973382353782654f, 0.7698040008544922f, 0.84978848695755f, -0.8801103830337524f, 0.5547641515731812f, 0.5249173045158386f, 0.5656169652938843f, 0.07889485359191895f, 0.04466990381479263f, 0.17393574118614197f, 0.8391220569610596f, -0.8372706770896912f, 0.3190040588378906f, 0.04973406717181206f, 0.8301114439964294f, 0.9968568682670593f, 0.15273110568523407f, 0.028710389509797096f, 0.31652864813804626f, -0.9892463684082031f, 0.4008984863758087f, 0.2772408425807953f, 0.3645983636379242f, 0.1404254138469696f, 0.4089259207248688f, 0.285518616437912f, 0.9266089200973511f, -0.5564938187599182f, 0.8046037554740906f, 0.8682065010070801f, 0.9560765624046326f, 0.48660537600517273f, 0.6945685744285583f, 0.07087597250938416f, 0.08681467920541763f, -0.734801173210144f, 0.8630284070968628f, 0.4644680321216583f, 0.1333383172750473f, 0.01145651750266552f, 0.9848549962043762f, 0.7616958022117615f, 0.3105027973651886f, -0.5977436900138855f, 0.2647155821323395f, 0.09628120064735413f, 0.6033759713172913f, 0.8578786253929138f, 0.9551213979721069f, 0.39109593629837036f, 0.654151439666748f, -0.5684832334518433f, 0.379690945148468f, 0.19345755875110626f, 0.6912334561347961f, 0.23907700181007385f, 0.8141056299209595f, 0.8723076581954956f, 0.48333531618118286f, -0.5260719656944275f, 0.5730267763137817f, 0.6789444088935852f, 0.44040563702583313f, 0.9609959125518799f, 0.9013946056365967f, 0.11126439273357391f, 0.5477474331855774f, -0.6419422030448914f, 0.24112525582313538f, 0.2852044403553009f, 0.4726189076900482f, 0.4679878354072571f, 0.9083559513092041f, 0.741619348526001f, 0.06919194012880325f, -0.1662815511226654f, 0.13107475638389587f, 0.6580744385719299f, 0.808893084526062f, 0.16359122097492218f, 0.7134069204330444f, 0.6071567535400391f, 0.05781069025397301f, -0.7544057965278625f, 0.6701015830039978f, 0.3504011034965515f, 0.5180255770683289f, 0.5217419266700745f, 0.8497685790061951f, 0.4109673500061035f, 0.82735675573349f, -0.6649124622344971f, 0.5023850798606873f, 0.2643529176712036f, 0.9726359248161316f, 0.19802044332027435f, 0.905592143535614f, 0.5238567590713501f, 0.635380744934082f, -0.7038549184799194f, 0.4420148432254791f, 0.06752318888902664f, 0.42001721262931824f, 0.7615100741386414f, 0.768120288848877f, 0.26309019327163696f, 0.6178357601165771f, -0.9769749045372009f, 0.5404955744743347f, 0.16163553297519684f, 0.7664294242858887f, 0.9926788806915283f, 0.22821468114852905f, 0.15552307665348053f, 0.02929198183119297f, -0.9796938300132751f, 0.3617197275161743f, 0.6310458183288574f, 0.6557785272598267f, 0.8088107109069824f, 0.48865148425102234f, 0.484787255525589f, 0.022350607439875603f, -0.5568962693214417f, 0.08099709451198578f, 0.4393649399280548f, 0.724267840385437f, 0.8633223176002502f, 0.9791995286941528f, 0.11028297245502472f, 0.9178693294525146f, -0.7862024307250977f, 0.1838400661945343f, 0.926985502243042f, 0.7675090432167053f, 0.4967098534107208f, 0.8983486294746399f, 0.5385345816612244f, 0.42671558260917664f, -0.020253758877515793f, 0.824641227722168f, 0.7408159375190735f, 0.9445732235908508f, 0.5063771605491638f, 0.5174551010131836f, 0.7074541449546814f, 0.07717644423246384f, -0.10710456222295761f, 0.5436118841171265f, 0.15048560500144958f, 0.05555901676416397f, 0.7235037088394165f, 0.06580687314271927f, 0.8563459515571594f, 0.0844842940568924f, -0.6798257231712341f, 0.001493103220127523f, 0.6583220958709717f, 0.0901244655251503f, 0.14539922773838043f, 0.46288177371025085f, 0.169224351644516f, 0.23254705965518951f, -0.4690439701080322f, 0.6971064805984497f, 0.5025460720062256f, 0.7733452320098877f, 0.44192302227020264f, 0.5734786987304688f, 0.2605248689651489f, 0.9333096146583557f, -0.20503243803977966f, 0.5538547039031982f, 0.5792606472969055f, 0.32492679357528687f, 0.2872251868247986f, 0.7359387874603271f, 0.5458791851997375f, 0.9977984428405762f, -0.1974366009235382f, 0.2201913446187973f, 0.23176546394824982f, 0.8958871960639954f, 0.09360812604427338f, 0.28441762924194336f, 0.8550940752029419f, 0.02858087792992592f, -0.1940992921590805f, 0.27030327916145325f, 0.8756335377693176f, 0.45552858710289f, 0.9855018854141235f, 0.6809824109077454f, 0.765204668045044f, 0.17845800518989563f, -0.02919320948421955f, 0.9753574728965759f, 0.01141400821506977f, 0.1904420107603073f, 0.3880733549594879f, 0.643491268157959f, 0.21431806683540344f, 0.3438037931919098f, -0.20191191136837006f, 0.04600869119167328f, 0.332131564617157f, 0.8824116587638855f, 0.48801520466804504f, 0.5932869911193848f, 0.7084601521492004f, 0.1821584850549698f, -0.1576145887374878f, 0.29278817772865295f, 0.12965205311775208f, 0.8307098150253296f, 0.4978291392326355f, 0.36695560812950134f, 0.4181995689868927f, 0.33614999055862427f, -0.13265754282474518f, 0.5281840562820435f, 0.8201146125793457f, 0.44686904549598694f, 0.6625322699546814f, 0.4344870448112488f, 0.6245418190956116f, 0.030737241730093956f, -0.34593823552131653f, 0.327630877494812f, 0.49388089776039124f, 0.72198086977005f, 0.31169408559799194f, 0.5662874579429626f, 0.4861481189727783f, 0.07544086873531342f, -0.8298048377037048f, 0.5975834131240845f, 0.1348716914653778f, 0.4124131500720978f, 0.07504049688577652f, 0.8628972172737122f, 0.6879088878631592f, 0.476911336183548f, -0.28890857100486755f, 0.1999984234571457f, 0.743624210357666f, 0.5124650597572327f, 0.6467050909996033f, 0.009036993607878685f, 0.5484076142311096f, 0.8516402840614319f, -0.6373491883277893f, 0.8178590536117554f, 0.07205723971128464f, 0.5274140238761902f, 0.06374073028564453f, 0.7720595598220825f, 0.9237284660339355f, 0.23076938092708588f, -0.14843861758708954f, 0.5684818029403687f, 0.16443248093128204f, 0.7549114227294922f, 0.23071615397930145f, 0.8191092610359192f, 0.3873322606086731f, 0.0728459358215332f, -0.5703976154327393f, 0.4169009029865265f, 0.1154058501124382f, 0.7007790207862854f, 0.8418828248977661f, 0.8299359083175659f, 0.6350789070129395f, 0.15991930663585663f, -0.08475970476865768f, 0.42218735814094543f, 0.6813290119171143f, 0.225759819149971f, 0.02039586752653122f, 0.16710621118545532f, 0.48056915402412415f, 0.1058802530169487f, -0.5260244607925415f, 0.5823521018028259f, 0.5764318108558655f, 0.8572337031364441f, 0.9756572842597961f, 0.7463641166687012f, 0.596200704574585f, 0.6332003474235535f, -0.30776143074035645f, 0.7382820248603821f, 0.07193983346223831f, 0.9294529557228088f, 0.6522550582885742f, 0.9143828749656677f, 0.8992933630943298f, 0.7151002883911133f, -0.943658709526062f, 0.7699774503707886f, 0.08549731969833374f, 0.6579726338386536f, 0.2916625142097473f, 0.6110042929649353f, 0.7308086156845093f, 0.10500553250312805f, -0.8285953402519226f, 0.7316838502883911f, 0.4435209035873413f, 0.28986847400665283f, 0.6287516951560974f, 0.869385302066803f, 0.01408169325441122f, 0.18082717061042786f, -0.8381682634353638f, 0.6314626336097717f, 0.3756833076477051f, 0.6392922401428223f, 0.48727452754974365f, 0.9130403399467468f, 0.5950378179550171f, 0.788092315196991f, -0.09147649258375168f, 0.03527194634079933f, 0.7837324142456055f, 0.5082628726959229f, 0.029838595539331436f, 0.17905642092227936f, 0.97331303358078f, 0.38325637578964233f, -0.10943026095628738f, 0.4270715117454529f, 0.9121952056884766f, 0.8041030168533325f, 0.7243852615356445f, 0.041614167392253876f, 0.42893195152282715f, 0.9025886654853821f, -0.7330051064491272f, 0.7871759533882141f, 0.5098586678504944f, 0.3555881381034851f, 0.3506850600242615f, 0.6096670627593994f, 0.20163650810718536f, 0.42492222785949707f, -0.7980833649635315f, 0.29831549525260925f, 0.3901077210903168f, 0.2741940915584564f, 0.5100505352020264f, 0.05969962477684021f, 0.2206670194864273f, 0.5628340244293213f, -0.433803528547287f, 0.3454151153564453f, 0.07890209555625916f, 0.998487114906311f, 0.7749579548835754f, 0.2651655077934265f, 0.07215818017721176f, 0.02407127059996128f, -0.2861325144767761f, 0.06566178798675537f, 0.8470327258110046f, 0.4162040650844574f, 0.8683649897575378f, 0.27285197377204895f, 0.6207322478294373f, 0.4963393211364746f, -0.9233599305152893f, 0.7004709839820862f, 0.24482032656669617f, 0.7508669495582581f, 0.5348182916641235f, 0.8905187845230103f, 0.4666813015937805f, 0.6369298100471497f, -0.7426493167877197f, 0.7560936808586121f, 0.13290031254291534f, 0.04970937967300415f, 0.2480240911245346f, 0.6916287541389465f, 0.5116637945175171f, 0.36887070536613464f, -0.41268688440322876f, 0.28863099217414856f, 0.6418543457984924f, 0.1364140659570694f, 0.28658297657966614f, 0.604333221912384f, 0.5902146100997925f, 0.5134128332138062f, -0.9778324365615845f, 0.4580436646938324f, 0.5564291477203369f, 0.8303071856498718f, 0.030990418046712875f, 0.9753950238227844f, 0.5599873065948486f, 0.9941959381103516f, -0.5083175897598267f, 0.5714126229286194f, 0.13496553897857666f, 0.9210019707679749f, 0.7465526461601257f, 0.15679316222667694f, 0.11246255040168762f, 0.17266042530536652f, -0.26443225145339966f, 0.11272847652435303f, 0.8491462469100952f, 0.5754661560058594f, 0.6468778252601624f, 0.22393199801445007f, 0.013641896657645702f, 0.7000759243965149f, -0.8821797370910645f, 0.1301870495080948f, 0.03341703489422798f, 0.24413534998893738f, 0.9694473743438721f, 0.5581672787666321f, 0.25008201599121094f, 0.8201388120651245f, -0.019708694890141487f, 0.6735728979110718f, 0.48047077655792236f, 0.8843044638633728f, 0.6775790452957153f, 0.2576890289783478f, 0.6212453842163086f, 0.83254075050354f, -0.42675939202308655f, 0.5993826389312744f, 0.7338554859161377f, 0.6884956359863281f, 0.171565979719162f, 0.5593460202217102f, 0.7806524038314819f, 0.1797761172056198f, -0.2304888367652893f, 0.46435898542404175f, 0.8973613381385803f, 0.19353245198726654f, 0.8801175951957703f, 0.16151434183120728f, 0.07808235287666321f, 0.32673996686935425f, -0.1306258589029312f, 0.16176630556583405f, 0.044272877275943756f, 0.8328225612640381f, 0.2753751277923584f, 0.6371321678161621f, 0.6853768825531006f, 0.6606249809265137f, -0.1743381768465042f, 0.499859482049942f, 0.7320346832275391f, 0.04009399190545082f, 0.12651415169239044f, 0.16402746737003326f, 0.08141695708036423f, 0.6917479634284973f, -0.051670484244823456f, 0.31745123863220215f, 0.14853230118751526f, 0.5425845384597778f, 0.9246776700019836f, 0.8319268822669983f, 0.6095774173736572f, 0.9928776621818542f, -0.005085021257400513f, 0.347962886095047f, 0.26802369952201843f, 0.14932602643966675f, 0.1309174746274948f, 0.940594494342804f, 0.46650251746177673f, 0.11272779852151871f, -0.8767687082290649f, 0.6165632009506226f, 0.9615113139152527f, 0.1989990770816803f, 0.4486541450023651f, 0.019880138337612152f, 0.3096309006214142f, 0.3683820366859436f, -0.6496874690055847f, 0.6680347323417664f, 0.7816560864448547f, 0.7287664413452148f, 0.5872529149055481f, 0.7672795653343201f, 0.11367417871952057f, 0.47343704104423523f, -0.5056794881820679f, 0.4414787292480469f, 0.164357990026474f, 0.25948894023895264f, 0.00826238188892603f, 0.5672598481178284f, 0.17591427266597748f, 0.6062051653862f, -0.2390315979719162f, 0.47294506430625916f, 0.9763006567955017f, 0.49737152457237244f, 0.8710491061210632f, 0.4305832087993622f, 0.9389514327049255f, 0.8174286484718323f, -0.822201132774353f, 0.23961926996707916f, 0.573214590549469f, 0.1791331171989441f, 0.446870356798172f, 0.04386626183986664f, 0.4817042946815491f, 0.9913933277130127f, -0.41117697954177856f, 0.8226137757301331f, 0.28106507658958435f, 0.562231183052063f, 0.7732018232345581f, 0.9614210724830627f, 0.7297826409339905f, 0.3805975914001465f, -0.06640836596488953f, 0.6226550936698914f, 0.3070230484008789f, 0.18513056635856628f, 0.5636121034622192f, 0.5777974128723145f, 0.038341622799634933f, 0.22971349954605103f, -0.03099679760634899f, 0.6525496244430542f, 0.8125789165496826f, 0.1949489265680313f, 0.20959554612636566f, 0.7836439609527588f, 0.4832041263580322f, 0.44304075837135315f, -0.574436366558075f, 0.6301334500312805f, 0.4743224084377289f, 0.1400095820426941f, 0.9730342030525208f, 0.5033431649208069f, 0.2881820499897003f, 0.31216320395469666f, -0.6703228950500488f, 0.638441264629364f, 0.5533217191696167f, 0.2687790095806122f, 0.7946388721466064f, 0.08490137755870819f, 0.8931063413619995f, 0.25076478719711304f, -0.5220649838447571f, 0.08769703656435013f, 0.9453096389770508f, 0.10973351448774338f, 0.4363688826560974f, 0.8260613679885864f, 0.7807084321975708f, 0.5887714624404907f, -0.4644198715686798f, 0.023242715746164322f, 0.7769075632095337f, 0.578471839427948f, 0.12407642602920532f, 0.25617730617523193f, 0.8203296065330505f, 0.20195719599723816f, -0.37793004512786865f, 0.8826900124549866f, 0.058743320405483246f, 0.014728651382029057f, 0.6109330058097839f, 0.18539047241210938f, 0.7344358563423157f, 0.1968391239643097f, -0.22088755667209625f, 0.4064938426017761f, 0.4316568672657013f, 0.6589205265045166f, 0.5916208028793335f, 0.05187121033668518f, 0.7289045453071594f, 0.8225553035736084f, -0.7165597677230835f, 0.04882191866636276f, 0.4622739851474762f, 0.532526969909668f, 0.14850200712680817f, 0.5225207209587097f, 0.6688234806060791f, 0.07566259056329727f, -0.5638027787208557f, 0.1216139867901802f, 0.36483222246170044f, 0.16368639469146729f, 0.7322827577590942f, 0.3937952220439911f, 0.3428943455219269f, 0.7331043481826782f, -0.33714962005615234f, 0.29771265387535095f, 0.5469332933425903f, 0.4433325231075287f, 0.32397520542144775f, 0.20781411230564117f, 0.20777694880962372f, 0.8381088972091675f, -0.9918961524963379f, 0.8759636878967285f, 0.4122740626335144f, 0.8419222831726074f, 0.7327945828437805f, 0.9876636862754822f, 0.16956287622451782f, 0.36181196570396423f, -0.5004873275756836f, 0.13227735459804535f, 0.7936186194419861f, 0.5767793655395508f, 0.7490744590759277f, 0.7001764178276062f, 0.973517119884491f, 0.41802576184272766f, -0.603922963142395f, 0.20040328800678253f, 0.09561531990766525f, 0.24615073204040527f, 0.26064273715019226f, 0.017349526286125183f, 0.8626936078071594f, 0.9099628329277039f, -0.47141268849372864f, 0.7192619442939758f, 0.32237058877944946f, 0.4380188286304474f, 0.6579309105873108f, 0.7624373435974121f, 0.9745138883590698f, 0.5056889653205872f, -0.511924684047699f, 0.43763411045074463f, 0.8449320197105408f, 0.8476055860519409f, 0.8847246766090393f, 0.1001584604382515f, 0.14449438452720642f, 0.8335290551185608f, -0.5516011714935303f, 0.6577897667884827f, 0.6777940988540649f, 0.989366352558136f, 0.2304396778345108f, 0.1102205291390419f, 0.7618972063064575f, 0.14353492856025696f, -0.9406392574310303f, 0.7141033411026001f, 0.4391806125640869f, 0.49965474009513855f, 0.4398123323917389f, 0.2509928047657013f, 0.5801013112068176f, 0.38792675733566284f, -0.44768235087394714f, 0.21943020820617676f, 0.23810364305973053f, 0.05140057951211929f, 0.4406738579273224f, 0.294265478849411f, 0.7282229065895081f, 0.641684889793396f, -0.6443111300468445f, 0.5301662683486938f, 0.16126248240470886f, 0.331635445356369f, 0.0241349209100008f, 0.5562739372253418f, 0.5262752771377563f, 0.5941962599754333f, -0.5454599261283875f, 0.5138832330703735f, 0.9087511897087097f, 0.04623213782906532f, 0.1212984025478363f, 0.28967973589897156f, 0.48006579279899597f, 0.4454795718193054f, -0.9545271396636963f, 0.5961090326309204f, 0.7419070601463318f, 0.8787391781806946f, 0.3524719774723053f, 0.6655164957046509f, 0.5767902135848999f, 0.5005971193313599f, -0.5438854694366455f, 0.4547508955001831f, 0.9199574589729309f, 0.2835036814212799f, 0.4927181899547577f, 0.07757522910833359f, 0.9806613922119141f, 0.4699653685092926f, -0.9938104152679443f, 0.35129812359809875f, 0.18760941922664642f, 0.8040134310722351f, 0.15714579820632935f, 0.7989060878753662f, 0.5022174119949341f, 0.1743154674768448f, -0.2494174838066101f, 0.5187422633171082f, 0.2608911395072937f, 0.20384399592876434f, 0.3762468099594116f, 0.12235452234745026f, 0.47339487075805664f, 0.3895496726036072f, -0.49318262934684753f, 0.3021473288536072f, 0.6489495038986206f, 0.5718215703964233f, 0.14311428368091583f, 0.6570330858230591f, 0.4274815320968628f, 0.021707527339458466f, -0.9420396089553833f, 0.2416917234659195f, 0.15675324201583862f, 0.5887538194656372f, 0.5574888586997986f, 0.9329497218132019f, 0.5977138876914978f, 0.03142688050866127f, -0.2587999105453491f, 0.8153524994850159f, 0.3104356825351715f, 0.05196857079863548f, 0.08320658653974533f, 0.2057948112487793f, 0.4248500466346741f, 0.921305775642395f, -0.05616955831646919f, 0.3225013017654419f, 0.6989963054656982f, 0.32914745807647705f, 0.7411329746246338f, 0.5928831696510315f, 0.39742398262023926f, 0.4534674286842346f, -0.20422248542308807f, 0.6853445172309875f, 0.3156992197036743f, 0.04572880640625954f, 0.7117812037467957f, 0.8887865543365479f, 0.8311059474945068f, 0.3930806517601013f, -0.7269626259803772f, 0.32570508122444153f, 0.5217111706733704f, 0.06057373061776161f, 0.49884936213493347f, 0.6319891214370728f, 0.34282153844833374f, 0.39446282386779785f, -0.8033319711685181f, 0.28665149211883545f, 0.31306424736976624f, 0.17477719485759735f, 0.7152460217475891f, 0.020655464380979538f, 0.9186127185821533f, 0.55536288022995f, -0.8862031698226929f, 0.6877502202987671f, 0.9228847026824951f, 0.9989699125289917f, 0.6715086102485657f, 0.9465572237968445f, 0.18154916167259216f, 0.9557530879974365f, -0.8928394317626953f, 0.09839247912168503f, 0.8657498359680176f, 0.31321054697036743f, 0.9562740921974182f, 0.19960899651050568f, 0.4477292597293854f, 0.7594649791717529f, -0.44831332564353943f, 0.7474748492240906f, 0.0019159349612891674f, 0.7481603622436523f, 0.7906154990196228f, 0.22764559090137482f, 0.6125044822692871f, 0.6116602420806885f, -0.2714230418205261f, 0.028868384659290314f, 0.767421543598175f, 0.3425062894821167f, 0.8674520254135132f, 0.9174027442932129f, 0.3428083658218384f, 0.604993462562561f, -0.29364752769470215f, 0.26850205659866333f, 0.7455066442489624f, 0.9498069286346436f, 0.38457825779914856f, 0.40886229276657104f, 0.19698528945446014f, 0.1479610949754715f, -0.20658834278583527f, 0.355638325214386f, 0.10918949544429779f, 0.1877526193857193f, 0.27333778142929077f, 0.6423331499099731f, 0.005983336362987757f, 0.8369197845458984f, -0.8215952515602112f, 0.42101338505744934f, 0.17650552093982697f, 0.5601832270622253f, 0.322984904050827f, 0.10423479974269867f, 0.414760559797287f, 0.6935385465621948f, -0.055111709982156754f, 0.7391035556793213f, 0.5255892872810364f, 0.5281394720077515f, 0.37287744879722595f, 0.5518515706062317f, 0.8736200332641602f, 0.4418269097805023f, -0.22931091487407684f, 0.6674094200134277f, 0.6525464057922363f, 0.5139802098274231f, 0.5771846771240234f, 0.0021168373059481382f, 0.11776527017354965f, 0.7864798903465271f, -0.663391649723053f, 0.6758092045783997f, 0.11986206471920013f, 0.11360369622707367f, 0.9495155215263367f, 0.19671373069286346f, 0.2889757752418518f, 0.49278807640075684f, -0.035693295300006866f, 0.1749771237373352f, 0.4731345772743225f, 0.727647066116333f, 0.36294010281562805f, 0.3210253119468689f, 0.11869906634092331f, 0.9996867179870605f, -0.826018214225769f, 0.4807352125644684f, 0.6080946326255798f, 0.4984864890575409f, 0.4336033761501312f, 0.8697699904441833f, 0.020384253934025764f, 0.6708415150642395f, -0.9127264022827148f, 0.7086302638053894f, 0.8460437059402466f, 0.3306839168071747f, 0.6983009576797485f, 0.17739859223365784f, 0.9710475206375122f, 0.00505117466673255f, -0.3573206961154938f, 0.47065967321395874f, 0.49768561124801636f, 0.8360210061073303f, 0.14514011144638062f, 0.363074392080307f, 0.7007542252540588f, 0.6607638597488403f, -0.6708697080612183f, 0.3255118727684021f, 0.1059352308511734f, 0.38197997212409973f, 0.507297694683075f, 0.7920871376991272f, 0.043377045542001724f, 0.7510749101638794f, -0.09734944254159927f, 0.8036560416221619f, 0.8135017156600952f, 0.3217110335826874f, 0.31004631519317627f, 0.3494036793708801f, 0.9457760453224182f, 0.4340546727180481f, -0.8554873466491699f, 0.026740239933133125f, 0.7217108607292175f, 0.8649211525917053f, 0.2518629729747772f, 0.5347148776054382f, 0.32276082038879395f, 0.5528408288955688f, -0.6673521995544434f, 0.20200997591018677f, 0.3851352334022522f, 0.8284783959388733f, 0.09135856479406357f, 0.4241481125354767f, 0.7618409991264343f, 0.956284761428833f, -0.643366813659668f, 0.6963514089584351f, 0.9466925859451294f, 0.7943843007087708f, 0.4220356047153473f, 0.9055692553520203f, 0.6746031641960144f, 0.6649593114852905f, -0.3218785226345062f, 0.37349092960357666f, 0.36984315514564514f, 0.5614727139472961f, 0.41607433557510376f, 0.7082962393760681f, 0.021755170077085495f, 0.1139988899230957f, -0.22923390567302704f, 0.2532184422016144f, 0.0338289812207222f, 0.641770601272583f, 0.0009595275623723865f, 0.9843865633010864f, 0.36481690406799316f, 0.12089875340461731f, -0.4901275038719177f, 0.8107635974884033f, 0.054630305618047714f, 0.3034217953681946f, 0.6784799098968506f, 0.5885648727416992f, 0.2314395308494568f, 0.49543726444244385f, -0.8176440596580505f, 0.42605096101760864f, 0.9537820816040039f, 0.291404128074646f, 0.8530042767524719f, 0.06889006495475769f, 0.9894667863845825f, 0.43109777569770813f, -0.5991377234458923f, 0.42417100071907043f, 0.3081485629081726f, 0.07047644257545471f, 0.4637708365917206f, 0.2616733908653259f, 0.9589745998382568f, 0.337841659784317f, -0.856294572353363f, 0.19428162276744843f, 0.999349057674408f, 0.49971383810043335f, 0.7718424797058105f, 0.9644657373428345f, 0.6321110129356384f, 0.38084274530410767f, -0.4407954216003418f, 0.4800306558609009f, 0.3643098473548889f, 0.6574350595474243f, 0.030468543991446495f, 0.05022039636969566f, 0.5766916871070862f, 0.656147301197052f, -0.6030004024505615f, 0.0341261625289917f, 0.5941251516342163f, 0.32184284925460815f, 0.5978387594223022f, 0.9956324100494385f, 0.47766953706741333f, 0.9208345413208008f, -0.22129999101161957f, 0.6914438009262085f, 0.858814001083374f, 0.6362304091453552f, 0.6889188289642334f, 0.44812506437301636f, 0.7617208361625671f, 0.6054539084434509f, -0.3502535820007324f, 0.11377201229333878f, 0.2625247538089752f, 0.7378041744232178f, 0.971752941608429f, 0.8864575028419495f, 0.7956211566925049f, 0.34792038798332214f, -0.7169209122657776f, 0.5793432593345642f, 0.11280395835638046f, 0.9002237319946289f, 0.4581104516983032f, 0.01970858871936798f, 0.006217912770807743f, 0.7483567595481873f, -0.25800782442092896f, 0.09076284617185593f, 0.5265976190567017f, 0.7010523080825806f, 0.669736921787262f, 0.416006863117218f, 0.38678479194641113f, 0.5917368531227112f, -0.07850268483161926f, 0.46306586265563965f, 0.19845691323280334f, 0.3887704610824585f, 0.6751335859298706f, 0.18658679723739624f, 0.5058144927024841f, 0.26978734135627747f, -0.5374928116798401f, 0.5117012858390808f, 0.5598406791687012f, 0.17124471068382263f, 0.9241576194763184f, 0.5517176389694214f, 0.38747909665107727f, 0.8015073537826538f, -0.48562636971473694f, 0.6577883958816528f, 0.02290809154510498f, 0.19945582747459412f, 0.1906690150499344f, 0.6245693564414978f, 0.5498843193054199f, 0.510114848613739f, -0.018060820177197456f, 0.21552756428718567f, 0.6459119915962219f, 0.8613125681877136f, 0.20881031453609467f, 0.3069716691970825f, 0.6568637490272522f, 0.9318833351135254f, -0.9658496975898743f, 0.8332803845405579f, 0.5201877951622009f, 0.16956235468387604f, 0.4078385829925537f, 0.982097327709198f, 0.9161773920059204f, 0.8565466403961182f, -0.44683438539505005f, 0.021897153928875923f, 0.6775645613670349f, 0.3475712239742279f, 0.43748730421066284f, 0.2559880316257477f, 0.6092212200164795f, 0.13437294960021973f, -0.40291813015937805f, 0.10950563848018646f, 0.8444249033927917f, 0.6476284861564636f, 0.7873049378395081f, 0.2149692326784134f, 0.5016383528709412f, 0.1191442534327507f, -0.6555577516555786f, 0.5706090927124023f, 0.4666498005390167f, 0.18248063325881958f, 0.1796547919511795f, 0.7406003475189209f, 0.9996610283851624f, 0.8977080583572388f, -0.03640776127576828f, 0.7046642899513245f, 0.11881896108388901f, 0.8438845276832581f, 0.2193635106086731f, 0.3106851279735565f, 0.16907215118408203f, 0.22620469331741333f, -0.9677645564079285f, 0.264633446931839f, 0.885307252407074f, 0.8397852182388306f, 0.6127009391784668f, 0.5852488279342651f, 0.45067381858825684f, 0.17343850433826447f, -0.5728273391723633f, 0.4816382825374603f, 0.9649409055709839f, 0.20750154554843903f, 0.7286901473999023f, 0.28085950016975403f, 0.37792080640792847f, 0.3848073184490204f, -0.8834174871444702f, 0.259834885597229f, 0.24722255766391754f, 0.7330055832862854f, 0.729375422000885f, 0.9700654149055481f, 0.8338934183120728f, 0.3984375298023224f, -0.32316839694976807f, 0.9407759308815002f, 0.02559061162173748f, 0.449966162443161f, 0.12560303509235382f, 0.37369993329048157f, 0.7829886674880981f, 0.5330623388290405f, -0.23216022551059723f, 0.641197919845581f, 0.4673405885696411f, 0.7868173718452454f, 0.1366887092590332f, 0.4069221615791321f, 0.9026027321815491f, 0.7715770602226257f, -0.24653081595897675f, 0.7550144791603088f, 0.08597477525472641f, 0.32959291338920593f, 0.4131377637386322f, 0.9954462051391602f, 0.28635501861572266f, 0.08546721190214157f, -0.7796204090118408f, 0.6900402307510376f, 0.8324594497680664f, 0.40247488021850586f, 0.9462893605232239f, 0.44476455450057983f, 0.04787101224064827f, 0.15445251762866974f, -0.4414917528629303f, 0.8799588680267334f, 0.9286034107208252f, 0.3415723443031311f, 0.8266797661781311f, 0.17921088635921478f, 0.9250577688217163f, 0.21245114505290985f, -0.5476053357124329f, 0.951865017414093f, 0.6914633512496948f, 0.818781852722168f, 0.9263677000999451f, 0.7023738026618958f, 0.7477049231529236f, 0.7873215675354004f, -0.19083838164806366f, 0.6721335053443909f, 0.19240449368953705f, 0.38387930393218994f, 0.8426669836044312f, 0.5783917903900146f, 0.5452658534049988f, 0.1263735592365265f, -0.06109509989619255f, 0.7152552008628845f, 0.31002116203308105f, 0.9968963265419006f, 0.3106510639190674f, 0.5004693865776062f, 0.9636304378509521f, 0.6314550042152405f, -0.8346720933914185f, 0.2887505888938904f, 0.09102420508861542f, 0.7200502753257751f, 0.20575442910194397f, 0.16364382207393646f, 0.15197539329528809f, 0.18033277988433838f, -0.10130701214075089f, 0.4433540999889374f, 0.8618960976600647f, 0.9529145359992981f, 0.9091936945915222f, 0.8453708291053772f, 0.8480203747749329f, 0.2403145134449005f, -0.8378696441650391f, 0.20605388283729553f, 0.730049729347229f, 0.6862697005271912f, 0.29372259974479675f, 0.49623236060142517f, 0.28757068514823914f, 0.2922075092792511f, -0.05733809992671013f, 0.12533371150493622f, 0.6940526962280273f, 0.7835788130760193f, 0.6905121803283691f, 0.6025681495666504f, 0.4112236201763153f, 0.9575843214988708f, -0.3134559392929077f, 0.7390121221542358f, 0.6700992584228516f, 0.4745742976665497f, 0.49831220507621765f, 0.7820950150489807f, 0.3000723123550415f, 0.6176813244819641f, -0.5757899880409241f, 0.676360011100769f, 0.39168083667755127f, 0.367529958486557f, 0.36734023690223694f, 0.824592649936676f, 0.38376665115356445f, 0.01752924732863903f, -0.7155432105064392f, 0.7506282925605774f, 0.11336404830217361f, 0.6242191195487976f, 0.15014594793319702f, 0.8041836619377136f, 0.8169640898704529f, 0.23893111944198608f, -0.7443493604660034f, 0.9736831784248352f, 0.4822103679180145f, 0.45169809460639954f, 0.29289737343788147f, 0.2648152709007263f, 0.3688335120677948f, 0.9943825602531433f, -0.37205663323402405f, 0.8246164321899414f, 0.09152617305517197f, 0.9956223964691162f, 0.8485788702964783f, 0.30568811297416687f, 0.7484926581382751f, 0.46065381169319153f, -0.9433189630508423f, 0.48209044337272644f, 0.8818517327308655f, 0.4545420706272125f, 0.6868162155151367f, 0.714279055595398f, 0.29894721508026123f, 0.24437011778354645f, -0.663332462310791f, 0.10505145788192749f, 0.11046601086854935f, 0.0838393121957779f, 0.7676242589950562f, 0.9081233739852905f, 0.6522731184959412f, 0.534034252166748f, -0.643185019493103f, 0.7216682434082031f, 0.2814478278160095f, 0.9960008859634399f, 0.2755158245563507f, 0.6586474180221558f, 0.0691208690404892f, 0.5591328740119934f, -0.9908292889595032f, 0.3872111141681671f, 0.39691469073295593f, 0.07175099104642868f, 0.331676185131073f, 0.5519435405731201f, 0.20553992688655853f, 0.14383454620838165f, -0.5926419496536255f, 0.3688909113407135f, 0.5284740328788757f, 0.20921975374221802f, 0.6182534694671631f, 0.17996947467327118f, 0.5607049465179443f, 0.8409370183944702f, -0.17252111434936523f, 0.22818325459957123f, 0.9952152967453003f, 0.6723766922950745f, 0.4291750490665436f, 0.1892067790031433f, 0.16184119880199432f, 0.4849463701248169f, -0.8333225250244141f, 0.9972678422927856f, 0.03744739666581154f, 0.017925258725881577f, 0.42863860726356506f, 0.045293767005205154f, 0.9991825222969055f, 0.4444580078125f, -0.30205318331718445f, 0.5032695531845093f, 0.47199273109436035f, 0.33501148223876953f, 0.44374600052833557f, 0.7612390518188477f, 0.5701826214790344f, 0.7905033230781555f, -0.8435861468315125f, 0.011419102549552917f, 0.8841715455055237f, 0.9934428930282593f, 0.2945573925971985f, 0.7903575897216797f, 0.8443295359611511f, 0.5887891054153442f, -0.22043360769748688f, 0.23916742205619812f, 0.3840542137622833f, 0.3328299820423126f, 0.8633204102516174f, 0.5069549083709717f, 0.7649708390235901f, 0.28677278757095337f, -0.6340352296829224f, 0.9482622146606445f, 0.3092106282711029f, 0.6938597559928894f, 0.8898558616638184f, 0.7534502744674683f, 0.6657344698905945f, 0.1814941167831421f, -0.5780358910560608f, 0.3511519432067871f, 0.9388175010681152f, 0.7865152955055237f, 0.3583489656448364f, 0.6972689032554626f, 0.6315007209777832f, 0.07198870927095413f, -0.2614264488220215f, 0.3882600963115692f, 0.19943049550056458f, 0.9513925909996033f, 0.15643960237503052f, 0.02457214891910553f, 0.221976637840271f, 0.873569667339325f, -0.2665771245956421f, 0.39686429500579834f, 0.8277773857116699f, 0.7084474563598633f, 0.11600401997566223f, 0.34663504362106323f, 0.09538604319095612f, 0.3540371358394623f, -0.49086520075798035f, 0.2575437128543854f, 0.4299491345882416f, 0.7361075282096863f, 0.08352608978748322f, 0.47483545541763306f, 0.9250191450119019f, 0.5768277049064636f, -0.455036997795105f, 0.23895342648029327f, 0.9928149580955505f, 0.8759725093841553f, 0.9637998938560486f, 0.2593740224838257f, 0.6964228749275208f, 0.22209309041500092f, -0.3681991994380951f, 0.8996562957763672f, 0.865477442741394f, 0.13929761946201324f, 0.04842096194624901f, 0.026220543310046196f, 0.08956161886453629f, 0.702614426612854f, -0.7017608880996704f, 0.42584824562072754f, 0.7293702960014343f, 0.7351198792457581f, 0.08173925429582596f, 0.013268211856484413f, 0.8568801879882812f, 0.7125641107559204f, -0.4956730902194977f, 0.21632063388824463f, 0.23117278516292572f, 0.13183461129665375f, 0.0991540253162384f, 0.13755381107330322f, 0.19620560109615326f, 0.03823556751012802f, -0.15269872546195984f, 0.8819359540939331f, 0.5797867774963379f, 0.34592074155807495f, 0.4248307943344116f, 0.8873844742774963f, 0.8934760093688965f, 0.5850281715393066f, -0.22279483079910278f, 0.00867562834173441f, 0.42184722423553467f, 0.3537236750125885f, 0.4131655991077423f, 0.9387980699539185f, 0.9123123288154602f, 0.28923705220222473f, -0.024475131183862686f, 0.3421894609928131f, 0.0007497453480027616f, 0.5940815806388855f, 0.6171183586120605f, 0.3206196427345276f, 0.6696571707725525f, 0.8331029415130615f, -0.44379547238349915f, 0.3433822691440582f, 0.7014876008033752f, 0.9423767328262329f, 0.9182738661766052f, 0.1754683554172516f, 0.010628893971443176f, 0.42410340905189514f, -0.46143659949302673f, 0.5716990828514099f, 0.7354536652565002f, 0.0808810293674469f, 0.30684494972229004f, 0.3322228193283081f, 0.18693900108337402f, 0.59800785779953f, -0.3935930132865906f, 0.196236252784729f, 0.19280481338500977f, 0.5011991262435913f, 0.29917246103286743f, 0.7864106297492981f, 0.4310897886753082f, 0.22241123020648956f, -0.7328693866729736f, 0.1156802549958229f, 0.5916293859481812f, 0.1577697992324829f, 0.19730134308338165f, 0.5458986163139343f, 0.8413732647895813f, 0.25239571928977966f, -0.9732089042663574f, 0.8399273157119751f, 0.8054360747337341f, 0.5193305015563965f, 0.3006172776222229f, 0.507881224155426f, 0.06928662955760956f, 0.41015100479125977f, -0.6718527674674988f, 0.3809971809387207f, 0.20067790150642395f, 0.8336922526359558f, 0.9214654564857483f, 0.6297961473464966f, 0.9075505137443542f, 0.839735209941864f, -0.6426976323127747f, 0.8129429221153259f, 0.42403489351272583f, 0.5828205943107605f, 0.13563451170921326f, 0.9696363210678101f, 0.34691476821899414f, 0.9742147326469421f, -0.567789614200592f, 0.687567949295044f, 0.22371987998485565f, 0.7109919190406799f, 0.6944751739501953f, 0.1839684545993805f, 0.3146398961544037f, 0.9507308006286621f, -0.3440394997596741f, 0.895675778388977f, 0.07458975911140442f, 0.09881006181240082f, 0.3909684419631958f, 0.3022855818271637f, 0.6834869384765625f, 0.5985022783279419f, -0.16081881523132324f, 0.585810661315918f, 0.8494917154312134f, 0.8570507168769836f, 0.4656088948249817f, 0.25300994515419006f, 0.33135277032852173f, 0.40105947852134705f, -0.6006220579147339f, 0.8197458982467651f, 0.9058247208595276f, 0.6667229533195496f, 0.2654043436050415f, 0.44036388397216797f, 0.6381761431694031f, 0.8480828404426575f, -0.40471503138542175f, 0.8090921640396118f, 0.8746956586837769f, 0.022970885038375854f, 0.7697845101356506f, 0.0791405662894249f, 0.9471613168716431f, 0.07866538316011429f, -0.9485733509063721f, 0.2042415589094162f, 0.7080491185188293f, 0.552726686000824f, 0.6292600631713867f, 0.8293759226799011f, 0.23386088013648987f, 0.8215944766998291f, -0.5989246368408203f, 0.3997094929218292f, 0.4376206398010254f, 0.278190553188324f, 0.08285192400217056f, 0.5961280465126038f, 0.766330897808075f, 0.8029456734657288f, -0.9025040864944458f, 0.4726751148700714f, 0.4834594130516052f, 0.973669707775116f, 0.15436038374900818f, 0.5951085090637207f, 0.5773507952690125f, 0.6569332480430603f, -0.2780321538448334f, 0.38514310121536255f, 0.4544724225997925f, 0.8997114300727844f, 0.5377580523490906f, 0.9519044756889343f, 0.18721868097782135f, 0.5229097008705139f, -0.4539186656475067f, 0.22373193502426147f, 0.4548938572406769f, 0.10207296162843704f, 0.6018864512443542f, 0.5593612790107727f, 0.4178593158721924f, 0.012107063084840775f, -0.426613450050354f, 0.47786417603492737f, 0.5346884727478027f, 0.34555527567863464f, 0.41861677169799805f, 0.6165449619293213f, 0.5629603266716003f, 0.5068749189376831f, -0.3166080117225647f, 0.020932676270604134f, 0.9070135354995728f, 0.3611378073692322f, 0.9666105508804321f, 0.9347549080848694f, 0.19743265211582184f, 0.020241733640432358f, -0.2842206060886383f, 0.3757215440273285f, 0.3364964723587036f, 0.6084569692611694f, 0.224521204829216f, 0.25383591651916504f, 0.9280997514724731f, 0.9756805300712585f, -0.3338288366794586f, 0.5321622490882874f, 0.7567427754402161f, 0.9550291299819946f, 0.5534951686859131f, 0.538234293460846f, 0.8832513689994812f, 0.8004207015037537f, -0.6164373755455017f, 0.6824888586997986f, 0.14841613173484802f, 0.5532203912734985f, 0.30272307991981506f, 0.47301769256591797f, 0.28865107893943787f, 0.7141022682189941f, -0.19923865795135498f, 0.6056148409843445f, 0.7979135513305664f, 0.8820318579673767f, 0.2127968668937683f, 0.6746091246604919f, 0.4139557480812073f, 0.5569806694984436f, -0.7533877491950989f, 0.031082846224308014f, 0.9333008527755737f, 0.2831026613712311f, 0.9338594079017639f, 0.008825292810797691f, 0.28093448281288147f, 0.2704811692237854f, -0.8593222498893738f, 0.13306178152561188f, 0.624088704586029f, 0.21430011093616486f, 0.24855338037014008f, 0.3723893165588379f, 0.08667632937431335f, 0.3613998293876648f, -0.538569450378418f, 0.13298793137073517f, 0.6888000965118408f, 0.7741127610206604f, 0.9165404438972473f, 0.1139417290687561f, 0.8532021045684814f, 0.1766156554222107f, -0.7735534906387329f, 0.3386057913303375f, 0.26558080315589905f, 0.06607504934072495f, 0.8737804293632507f, 0.6565499901771545f, 0.4935606122016907f, 0.8344826698303223f, -0.8705153465270996f, 0.027236241847276688f, 0.5378430485725403f, 0.6521546840667725f, 0.5144896507263184f, 0.8615798950195312f, 0.7111536860466003f, 0.6902679800987244f, -0.24271953105926514f, 0.3741373121738434f, 0.09946959465742111f, 0.7602033019065857f, 0.1386098861694336f, 0.528960645198822f, 0.2715798616409302f, 0.6445472240447998f, -0.7997211813926697f, 0.4309033453464508f, 0.11942533403635025f, 0.5682259798049927f, 0.09071653336286545f, 0.7021583914756775f, 0.11241867393255234f, 0.11680873483419418f, -0.8848573565483093f, 0.23450559377670288f, 0.7480103969573975f, 0.9454141855239868f, 0.4325049817562103f, 0.889014720916748f, 0.7347328662872314f, 0.2513672113418579f, -0.8631196618080139f, 0.6582249999046326f, 0.44207265973091125f, 0.5969013571739197f, 0.05584759637713432f, 0.24914921820163727f, 0.2049184888601303f, 0.8055151104927063f, -0.9005333185195923f, 0.8744732141494751f, 0.0017717761220410466f, 0.8899904489517212f, 0.7052417993545532f, 0.07561620324850082f, 0.8488396406173706f, 0.8563253879547119f, -0.8680802583694458f, 0.43962982296943665f, 0.675849437713623f, 0.935348629951477f, 0.9935380220413208f, 0.7376629114151001f, 0.7482619881629944f, 0.29546451568603516f, -0.5321065783500671f, 0.802178144454956f, 0.9119234681129456f, 0.5573381185531616f, 0.9942142963409424f, 0.03699041157960892f, 0.9068109393119812f, 0.6015564203262329f, -0.8886932134628296f, 0.5619431138038635f, 0.5554257035255432f, 0.9865925908088684f, 0.7579287886619568f, 0.4281248450279236f, 0.5213546752929688f, 0.7222480177879333f, -0.5136228799819946f, 0.8729080557823181f, 0.09845545887947083f, 0.05852604657411575f, 0.7575664520263672f, 0.757964015007019f, 0.08733518421649933f, 0.37985557317733765f, -0.8017658591270447f, 0.045197658240795135f, 0.8894051909446716f, 0.458493709564209f, 0.030444184318184853f, 0.8153960704803467f, 0.29665955901145935f, 0.6993714570999146f, -0.3863806426525116f, 0.11218786239624023f, 0.3075599670410156f, 0.107085220515728f, 0.29377713799476624f, 0.4993508756160736f, 0.4749036729335785f, 0.6624202132225037f, -0.4865434765815735f, 0.25378331542015076f, 0.2800185978412628f, 0.6553037166595459f, 0.9064685106277466f, 0.8296746015548706f, 0.6812912225723267f, 0.07765112072229385f, -0.8107709288597107f, 0.15595564246177673f, 0.8180252313613892f, 0.955064058303833f, 0.7188154458999634f, 0.2848951816558838f, 0.7992626428604126f, 0.05813201144337654f, -0.6156145334243774f, 0.6595533490180969f, 0.7514896988868713f, 0.8430987000465393f, 0.5077255368232727f, 0.15497925877571106f, 0.09127837419509888f, 0.4667506515979767f, -0.8474674224853516f, 0.5904163718223572f, 0.7278627157211304f, 0.23454836010932922f, 0.41541334986686707f, 0.1444828063249588f, 0.1513838768005371f, 0.1966715157032013f, -0.7178812623023987f, 0.5927199721336365f, 0.9145883917808533f, 0.17968900501728058f, 0.637442409992218f, 0.8535216450691223f, 0.3998592495918274f, 0.01784474030137062f, -0.22775274515151978f, 0.4301902651786804f, 0.10746869444847107f, 0.8149464726448059f, 0.4158053696155548f, 0.6249077916145325f, 0.7465067505836487f, 0.5097619891166687f, -0.30697858333587646f, 0.79047691822052f, 0.03396783396601677f, 0.14860248565673828f, 0.17295444011688232f, 0.7151645421981812f, 0.7736029624938965f, 0.7657882571220398f, -0.8731749057769775f, 0.7796734571456909f, 0.7450496554374695f, 0.5865137577056885f, 0.33589643239974976f, 0.48012059926986694f, 0.03172733634710312f, 0.04120820015668869f, -0.11719898134469986f, 0.6614503264427185f, 0.21696646511554718f, 0.8104416131973267f, 0.3615497052669525f, 0.9573625922203064f, 0.48359453678131104f, 0.12411592155694962f, -0.48092034459114075f, 0.670763373374939f, 0.21016454696655273f, 0.8278915286064148f, 0.9570343494415283f, 0.30011293292045593f, 0.7868676781654358f, 0.3310468792915344f, -0.7496629953384399f, 0.8954429626464844f, 0.36865150928497314f, 0.5599627494812012f, 0.946995735168457f, 0.20703691244125366f, 0.6231535077095032f, 0.09673213213682175f, -0.9969525933265686f, 0.5613712668418884f, 0.13914348185062408f, 0.08953895419836044f, 0.023864850401878357f, 0.23024535179138184f, 0.8538162708282471f, 0.09939398616552353f, -0.07108583301305771f, 0.22193819284439087f, 0.2344362586736679f, 0.00411008158698678f, 0.11868097633123398f, 0.10504995286464691f, 0.4523202180862427f, 0.8992286920547485f, -0.9114627242088318f, 0.712778627872467f, 0.9398624300956726f, 0.6327052712440491f, 0.5721302628517151f, 0.13847678899765015f, 0.8891039490699768f, 0.9565439224243164f, -0.9658251404762268f, 0.3833451569080353f, 0.3991580009460449f, 0.7545945644378662f, 0.892488956451416f, 0.711062490940094f, 0.11912145465612411f, 0.23603448271751404f, -0.7672807574272156f, 0.6479119062423706f, 0.27084627747535706f, 0.4817172884941101f, 0.8930355906486511f, 0.7980086207389832f, 0.07935982942581177f, 0.019643792882561684f, -0.9906771779060364f, 0.17926755547523499f, 0.03488880768418312f, 0.6966283917427063f, 0.04400472342967987f, 0.3927561640739441f, 0.16166101396083832f, 0.04946080967783928f, -0.4586348235607147f, 0.40207022428512573f, 0.8297236561775208f, 0.3009175956249237f, 0.19454288482666016f, 0.9736635088920593f, 0.05952855944633484f, 0.18144699931144714f, -0.5870451927185059f, 0.6082636117935181f, 0.08952105790376663f, 0.9753749370574951f, 0.2302156388759613f, 0.7052534818649292f, 0.6235846281051636f, 0.5467206835746765f, -0.967749297618866f, 0.7565251588821411f, 0.30780574679374695f, 0.15410858392715454f, 0.24105539917945862f, 0.20234760642051697f, 0.8899744749069214f, 0.3916870355606079f, -0.4448583126068115f, 0.2331647276878357f, 0.7012551426887512f, 0.21418848633766174f, 0.3690764009952545f, 0.17276552319526672f, 0.4411827027797699f, 0.1908104419708252f, -0.28281450271606445f, 0.8941026329994202f, 0.19826148450374603f, 0.6704874038696289f, 0.5353639721870422f, 0.15096312761306763f, 0.26300811767578125f, 0.8316268920898438f, -0.7082419395446777f, 0.5354748368263245f, 0.9316532015800476f, 0.4539419710636139f, 0.6028091311454773f, 0.8889901041984558f, 0.5671985149383545f, 0.6527138352394104f, -0.49809297919273376f, 0.5285516381263733f, 0.76741623878479f, 0.7412425875663757f, 0.6331203579902649f, 0.763249397277832f, 0.5103987455368042f, 0.9494335651397705f, -0.7767101526260376f, 0.7285395860671997f, 0.02284364029765129f, 0.59523606300354f, 0.11580301821231842f, 0.5192999243736267f, 0.7598601579666138f, 0.9547953009605408f, -0.6937898993492126f, 0.4295063316822052f, 0.7376956343650818f, 0.6147812604904175f, 0.4382762610912323f, 0.11702452600002289f, 0.48456189036369324f, 0.7501532435417175f, -0.2889746427536011f, 0.8864260911941528f, 0.9362891316413879f, 0.3972752094268799f, 0.6359225511550903f, 0.4777991473674774f, 0.5007860064506531f, 0.8838427066802979f, -0.7806005477905273f, 0.6592121720314026f, 0.8942243456840515f, 0.23752139508724213f, 0.9646268486976624f, 0.578152596950531f, 0.3709929883480072f, 0.12342631816864014f, -0.31961074471473694f, 0.41303005814552307f, 0.6875320672988892f, 0.6108338236808777f, 0.24456122517585754f, 0.9528385400772095f, 0.49118801951408386f, 0.8486296534538269f, -0.18476469814777374f, 0.9340630769729614f, 0.7878355979919434f, 0.41298308968544006f, 0.01774900034070015f, 0.9198168516159058f, 0.8170116543769836f, 0.8406765460968018f, -0.266636461019516f, 0.9425080418586731f, 0.3581402897834778f, 0.5171331763267517f, 0.8131700754165649f, 0.6472709774971008f, 0.10759734362363815f, 0.4414585530757904f, -0.07118426263332367f, 0.7050855159759521f, 0.23050642013549805f, 0.1823466718196869f, 0.25933837890625f, 0.8959373831748962f, 0.4036302864551544f, 0.3020702004432678f, -0.8801434636116028f, 0.993869960308075f, 0.012565077282488346f, 0.7922346591949463f, 0.7768023014068604f, 0.9617478251457214f, 0.6856397390365601f, 0.7720442414283752f, -0.8674120903015137f, 0.4508616328239441f, 0.8111366629600525f, 0.06075368449091911f, 0.8936590552330017f, 0.5966545343399048f, 0.5592286586761475f, 0.817446231842041f, -0.28940585255622864f, 0.3501112163066864f, 0.320367693901062f, 0.8620802760124207f, 0.3637665808200836f, 0.030894573777914047f, 0.3768708109855652f, 0.9694539308547974f, -0.8956659436225891f, 0.3448103368282318f, 0.0664164274930954f, 0.11667411774396896f, 0.9556149840354919f, 0.5979580879211426f, 0.7703537344932556f, 0.49960067868232727f, -0.09811315685510635f, 0.5070708990097046f, 0.8386045098304749f, 0.010854648426175117f, 0.5589203238487244f, 0.7389598488807678f, 0.4062983989715576f, 0.21811585128307343f, -0.6624915599822998f, 0.6272541284561157f, 0.025265229865908623f, 0.7775862216949463f, 0.20453624427318573f, 0.7619680166244507f, 0.9712132215499878f, 0.14434202015399933f, -0.07215774059295654f, 0.008275831118226051f, 0.9336611032485962f, 0.013587900437414646f, 0.32332971692085266f, 0.7628589868545532f, 0.3369233310222626f, 0.03185252472758293f, -0.0172384362667799f, 0.2680381238460541f, 0.8888576030731201f, 0.42073413729667664f, 0.5178500413894653f, 0.29098108410835266f, 0.28423070907592773f, 0.829853355884552f, -0.8849615454673767f, 0.8192638158798218f, 0.028503546491265297f, 0.8759391903877258f, 0.21488970518112183f, 0.10258659720420837f, 0.7071928381919861f, 0.5769082307815552f, -0.043774113059043884f, 0.3636064827442169f, 0.07153955101966858f, 0.8808093667030334f, 0.5017990469932556f, 0.1005033478140831f, 0.35893920063972473f, 0.4080357253551483f, -0.09052307903766632f, 0.27714625000953674f, 0.3601438105106354f, 0.8234742283821106f, 0.3608275353908539f, 0.8766413331031799f, 0.10498117655515671f, 0.08485031127929688f, -0.6264183521270752f, 0.9477608799934387f, 0.6277065277099609f, 0.1332639455795288f, 0.6468744874000549f, 0.7659513354301453f, 0.23546767234802246f, 0.9249924421310425f, -0.17066419124603271f, 0.4406304359436035f, 0.20842881500720978f, 0.7122389674186707f, 0.5980934500694275f, 0.49614694714546204f, 0.4328332543373108f, 0.3399064242839813f, -0.9680753946304321f, 0.7331945896148682f, 0.49115756154060364f, 0.41226857900619507f, 0.40096497535705566f, 0.32785457372665405f, 0.6447014212608337f, 0.46790358424186707f, -0.02906673215329647f, 0.2324741631746292f, 0.6259361505508423f, 0.044415395706892014f, 0.02735280431807041f, 0.707902729511261f, 0.2761732339859009f, 0.7339937686920166f, -0.9737843871116638f, 0.6081010103225708f, 0.1628195196390152f, 0.5335363149642944f, 0.4440822899341583f, 0.43504422903060913f, 0.16937249898910522f, 0.1333097219467163f, -0.9096680879592896f, 0.20141807198524475f, 0.42866280674934387f, 0.7029931545257568f, 0.33584538102149963f, 0.5336997509002686f, 0.8941160440444946f, 0.4336162209510803f, -0.7904295921325684f, 0.35249337553977966f, 0.9004443883895874f, 0.9206012487411499f, 0.5281723141670227f, 0.27495336532592773f, 0.41563600301742554f, 0.5054490566253662f, -0.6198724508285522f, 0.39497706294059753f, 0.2756671607494354f, 0.9461072087287903f, 0.6769784092903137f, 0.17275330424308777f, 0.3567200303077698f, 0.9620147943496704f, -0.909801721572876f, 0.893854022026062f, 0.7553013563156128f, 0.48578116297721863f, 0.18572898209095f, 0.5549656748771667f, 0.03694365546107292f, 0.3165605366230011f, -0.9284353852272034f, 0.5038042664527893f, 0.8223986625671387f, 0.12872135639190674f, 0.9447718858718872f, 0.49307557940483093f, 0.3648271858692169f, 0.4156677722930908f, -0.6588870882987976f, 0.8849703073501587f, 0.18898548185825348f, 0.039296675473451614f, 0.48609113693237305f, 0.3997221291065216f, 0.2192040979862213f, 0.5382541418075562f, -0.9588985443115234f, 0.2792670428752899f, 0.8141441941261292f, 0.9704515337944031f, 0.33498960733413696f, 0.9855057597160339f, 0.14988860487937927f, 0.12686105072498322f, -0.43538686633110046f, 0.15081629157066345f, 0.9409805536270142f, 0.7634068727493286f, 0.2927582859992981f, 0.10882029682397842f, 0.13808059692382812f, 0.15232478082180023f, -0.8497768640518188f, 0.21562355756759644f, 0.1700114607810974f, 0.39404353499412537f, 0.3442111313343048f, 0.29397812485694885f, 0.6011974215507507f, 0.05526648834347725f, -0.6455023288726807f, 0.7962008118629456f, 0.835501492023468f, 0.4815954566001892f, 0.874049961566925f, 0.7376067638397217f, 0.13626660406589508f, 0.576381266117096f, -0.1784900575876236f, 0.9344083070755005f, 0.41110914945602417f, 0.27582040429115295f, 0.5986475944519043f, 0.39733630418777466f, 0.3910275995731354f, 0.05764475464820862f, -0.9780980944633484f, 0.02142956852912903f, 0.37416744232177734f, 0.49301207065582275f, 0.6431045532226562f, 0.7069488167762756f, 0.09697471559047699f, 0.6511247158050537f, -0.09958219528198242f, 0.237324059009552f, 0.13935895264148712f, 0.8871303200721741f, 0.2815406024456024f, 0.3030150532722473f, 0.6901524066925049f, 0.20360833406448364f, -0.6352816224098206f, 0.8864182233810425f, 0.658255398273468f, 0.24070806801319122f, 0.032603755593299866f, 0.7982106804847717f, 0.28274720907211304f, 0.8600456714630127f, -0.6058067679405212f, 0.12039528042078018f, 0.585389256477356f, 0.5945512652397156f, 0.1804225593805313f, 0.7067267298698425f, 0.5268838405609131f, 0.7651306986808777f, -0.3647378981113434f, 0.6694056391716003f, 0.599959135055542f, 0.28686290979385376f, 0.8619941473007202f, 0.7984136343002319f, 0.26494139432907104f, 0.1655009388923645f, -0.30762943625450134f, 0.9246708154678345f, 0.4733268618583679f, 0.6710407733917236f, 0.7833744883537292f, 0.12000646442174911f, 0.6890708208084106f, 0.7769585847854614f, -0.09267779439687729f, 0.9606451392173767f, 0.5695546865463257f, 0.2694926857948303f, 0.6995048522949219f, 0.24760940670967102f, 0.7519434690475464f, 0.9641171097755432f, -0.9140611886978149f, 0.38381463289260864f, 0.36141547560691833f, 0.6715387105941772f, 0.5316348075866699f, 0.6125316619873047f, 0.8230743408203125f, 0.10900150239467621f, -0.40825143456459045f, 0.5113581418991089f, 0.0012179597979411483f, 0.43471774458885193f, 0.4724096357822418f, 0.5038541555404663f, 0.221074640750885f, 0.016808589920401573f, -0.45043185353279114f, 0.027984410524368286f, 0.14514108002185822f, 0.29171544313430786f, 0.27613696455955505f, 0.890653669834137f, 0.3981020450592041f, 0.8605061173439026f, -0.6186049580574036f, 0.55461585521698f, 0.6411516666412354f, 0.7623034715652466f, 0.4178214371204376f, 0.7345101833343506f, 0.16771459579467773f, 0.21460548043251038f, -0.08357535302639008f, 0.6350504159927368f, 0.5457562804222107f, 0.5007926225662231f, 0.9958073496818542f, 0.8157316446304321f, 0.348256915807724f, 0.2935333549976349f, -0.2955392301082611f, 0.48028942942619324f, 0.29992973804473877f, 0.24901127815246582f, 0.39453262090682983f, 0.7532679438591003f, 0.4314354956150055f, 0.004799894522875547f, -0.31949084997177124f, 0.584568440914154f, 0.03399435430765152f, 0.15357142686843872f, 0.9338343739509583f, 0.9814574718475342f, 0.25271278619766235f, 0.9884554743766785f, -0.763780415058136f, 0.9317795634269714f, 0.10033100843429565f, 0.21833594143390656f, 0.6167795658111572f, 0.4277406930923462f, 0.09655296802520752f, 0.7366324663162231f, -0.695353627204895f, 0.2892583906650543f, 0.03297608718276024f, 0.1095660850405693f, 0.47041043639183044f, 0.819761335849762f, 0.7014118432998657f, 0.3046330511569977f, -0.6142534017562866f, 0.7282652258872986f, 0.5213883519172668f, 0.1963154822587967f, 0.15493656694889069f, 0.6615257263183594f, 0.7869516015052795f, 0.47127780318260193f, -0.14428864419460297f, 0.19850657880306244f, 0.8070625066757202f, 0.16439080238342285f, 0.2544357478618622f, 0.4712178707122803f, 0.7374105453491211f, 0.7120380401611328f, -0.3163427412509918f, 0.11544181406497955f, 0.5960126519203186f, 0.1537267565727234f, 0.4375033378601074f, 0.5082706809043884f, 0.6695029139518738f, 0.5657739639282227f, -0.36332690715789795f, 0.04864315316081047f, 0.36572423577308655f, 0.36793211102485657f, 0.8766265511512756f, 0.4558514952659607f, 0.23187975585460663f, 0.05286719277501106f, -0.5636146068572998f, 0.8764181137084961f, 0.9799311757087708f, 0.10461518168449402f, 0.2971600890159607f, 0.4197472631931305f, 0.059722039848566055f, 0.4201226234436035f, -0.11056175827980042f, 0.13373206555843353f, 0.005159344989806414f, 0.8528507947921753f, 0.5722512006759644f, 0.5170464515686035f, 0.0240006186068058f, 0.9438654780387878f, -0.7162630558013916f, 0.1626507043838501f, 0.5813173651695251f, 0.04003201425075531f, 0.9465613961219788f, 0.04737229645252228f, 0.5710336565971375f, 0.18544577062129974f, -0.7897458076477051f, 0.5336212515830994f, 0.5921635627746582f, 0.8075342178344727f, 0.34739482402801514f, 0.9379600882530212f, 0.8792927861213684f, 0.7734925746917725f, -0.41986143589019775f, 0.9000230431556702f, 0.575289785861969f, 0.7736859917640686f, 0.9333289861679077f, 0.8514533042907715f, 0.24166230857372284f, 0.03563036769628525f, -0.4479401707649231f, 0.08431943506002426f, 0.7574945688247681f, 0.6653275489807129f, 0.6349342465400696f, 0.12233353406190872f, 0.9642016291618347f, 0.7155507206916809f, -0.5548129081726074f, 0.6164847016334534f, 0.03224050626158714f, 0.49646496772766113f, 0.8768697381019592f, 0.1566014587879181f, 0.301678866147995f, 0.14048093557357788f, -0.27027130126953125f, 0.13366158306598663f, 0.16813115775585175f, 0.14926038682460785f, 0.13787870109081268f, 0.3831399381160736f, 0.4913150668144226f, 0.8881601691246033f, -0.32390740513801575f, 0.9595461487770081f, 0.20939557254314423f, 0.6431229114532471f, 0.6054539084434509f, 0.3611871302127838f, 0.7790926694869995f, 0.8200910687446594f, -0.24487540125846863f, 0.654064953327179f, 0.9088671207427979f, 0.41951680183410645f, 0.11971297115087509f, 0.028876272961497307f, 0.08551445603370667f, 0.5453680157661438f, -0.19011661410331726f, 0.04771013185381889f, 0.5023033022880554f, 0.8209497928619385f, 0.1646043360233307f, 0.6691616773605347f, 0.015089087188243866f, 0.8155934810638428f, -0.5394238233566284f, 0.34152472019195557f, 0.4974808692932129f, 0.46419376134872437f, 0.3711838722229004f, 0.11426911503076553f, 0.2847119867801666f, 0.45128434896469116f, -0.8542874455451965f, 0.8496076464653015f, 0.3044990599155426f, 0.5857883095741272f, 0.8646165728569031f, 0.7833556532859802f, 0.5081799030303955f, 0.8762178421020508f, -0.9543992877006531f, 0.5041333436965942f, 0.8373932838439941f, 0.26481330394744873f, 0.5549142360687256f, 0.5148109197616577f, 0.8503922820091248f, 0.5338233113288879f, -0.2924988865852356f, 0.6085301637649536f, 0.7904265522956848f, 0.2214818000793457f, 0.4818829596042633f, 0.47322937846183777f, 0.5468521118164062f, 0.5698341727256775f, -0.4639362394809723f, 0.82124263048172f, 0.8019956350326538f, 0.6445484757423401f, 0.5681195259094238f, 0.6131941676139832f, 0.9945957064628601f, 0.5926300883293152f, -0.19419588148593903f, 0.8320297002792358f, 0.4818383753299713f, 0.32714539766311646f, 0.26010915637016296f, 0.41338101029396057f, 0.6391153335571289f, 0.025629118084907532f, -0.5953728556632996f, 0.959469735622406f, 0.9658340215682983f, 0.5952717661857605f, 0.3944149911403656f, 0.6732067465782166f, 0.9883206486701965f, 0.38480833172798157f, -0.03523647412657738f, 0.5148118734359741f, 0.8186948299407959f, 0.4569062292575836f, 0.3039373755455017f, 0.8751054406166077f, 0.10899163037538528f, 0.39270827174186707f, -0.3528488874435425f, 0.11756469309329987f, 0.9889437556266785f, 0.7989634871482849f, 0.33824142813682556f, 0.9751781225204468f, 0.01594178006052971f, 0.8143644332885742f, -0.9214934706687927f, 0.33420267701148987f, 0.19079247117042542f, 0.2744453251361847f, 0.1785210520029068f, 0.48768359422683716f, 0.672185480594635f, 0.15070506930351257f, -0.706214427947998f, 0.7558348774909973f, 0.527289092540741f, 0.5358267426490784f, 0.7381532788276672f, 0.578363835811615f, 0.10489509254693985f, 0.6110727190971375f, -0.839688777923584f, 0.5024637579917908f, 0.7561997175216675f, 0.41341298818588257f, 0.5526441931724548f, 0.3586578369140625f, 0.39882394671440125f, 0.6611156463623047f, -0.8950952291488647f, 0.1677742898464203f, 0.7814263701438904f, 0.5433194041252136f, 0.3800484240055084f, 0.4631972312927246f, 0.04253604635596275f, 0.32391104102134705f, -0.18009336292743683f, 0.5946530103683472f, 0.9805663824081421f, 0.06611119210720062f, 0.88176029920578f, 0.6460591554641724f, 0.9170746207237244f, 0.4192136228084564f, -0.1203124150633812f, 0.9519872665405273f, 0.8645252585411072f, 0.5653997659683228f, 0.7812156677246094f, 0.07512792199850082f, 0.4027739465236664f, 0.5826901793479919f, -0.932325541973114f, 0.9429612755775452f, 0.37404733896255493f, 0.7523154020309448f, 0.9369997382164001f, 0.6246531009674072f, 0.2907901108264923f, 0.6285764575004578f, -0.8606933951377869f, 0.36545222997665405f, 0.04134626314043999f, 0.9560189843177795f, 0.6352322697639465f, 0.28407230973243713f, 0.704789400100708f, 0.8254528641700745f, -0.3555222749710083f, 0.19627444446086884f, 0.5296887159347534f, 0.6427385210990906f, 0.5754021406173706f, 0.4437430500984192f, 0.16583296656608582f, 0.11084830015897751f, -0.25153541564941406f, 0.18804742395877838f, 0.6537732481956482f, 0.6351886987686157f, 0.4644938111305237f, 0.49175459146499634f, 0.5005380511283875f, 0.7172085642814636f, -0.7427561283111572f, 0.4121660590171814f, 0.42341378331184387f, 0.6815829873085022f, 0.5559446811676025f, 0.7801082134246826f, 0.7170310020446777f, 0.8282152414321899f, -0.8012222051620483f, 0.5081880688667297f, 0.20906272530555725f, 0.23507976531982422f, 0.8555324077606201f, 0.262729674577713f, 0.20795655250549316f, 0.953989565372467f, -0.8356432318687439f, 0.21857765316963196f, 0.8445634841918945f, 0.3068687319755554f, 0.6826326847076416f, 0.6486747860908508f, 0.6300383806228638f, 0.15485970675945282f, -0.9324883222579956f, 0.6532115936279297f, 0.4606846868991852f, 0.26509976387023926f, 0.37666910886764526f, 0.9566888213157654f, 0.49910011887550354f, 0.6030312776565552f, -0.6685796976089478f, 0.21293966472148895f, 0.08257334679365158f, 0.8201034069061279f, 0.5659224390983582f, 0.7397338151931763f, 0.19276626408100128f, 0.5631613731384277f, -0.4366089403629303f, 0.04785851389169693f, 0.669846773147583f, 0.7544222474098206f, 0.6215550303459167f, 0.24418522417545319f, 0.8781964182853699f, 0.3230867087841034f, -0.0989537239074707f, 0.788969099521637f, 0.6317713260650635f, 0.5493330955505371f, 0.5517458319664001f, 0.3159341812133789f, 0.7731971144676208f, 0.06779047846794128f, -0.33060070872306824f, 0.9075924754142761f, 0.36218953132629395f, 0.217062309384346f, 0.31522059440612793f, 0.5386253595352173f, 0.8630767464637756f, 0.38557830452919006f, -0.13389898836612701f, 0.8357885479927063f, 0.020576493814587593f, 0.30093613266944885f, 0.663141667842865f, 0.6163278222084045f, 0.40271762013435364f, 0.8695200681686401f, -0.21001490950584412f, 0.7502163052558899f, 0.7492121458053589f, 0.8585382103919983f, 0.8426094055175781f, 0.17647525668144226f, 0.06029469519853592f, 0.006908086594194174f, -0.7265346050262451f, 0.4474167823791504f, 0.878913938999176f, 0.40752509236335754f, 0.48544371128082275f, 0.7543785572052002f, 0.8435586094856262f, 0.9000301957130432f, -0.7124914526939392f, 0.7225216627120972f, 0.41545742750167847f, 0.9484982490539551f, 0.058417562395334244f, 0.21329842507839203f, 0.7213636040687561f, 0.1427488774061203f, -0.4175091087818146f, 0.9545890688896179f, 0.6343070268630981f, 0.5026738047599792f, 0.2766598165035248f, 0.89500492811203f, 0.025314468890428543f, 0.41727808117866516f, -0.3354068100452423f, 0.4321885406970978f, 0.3306218087673187f, 0.6248205900192261f, 0.6491886973381042f, 0.4325404465198517f, 0.36194685101509094f, 0.5318222045898438f, -0.0783277228474617f, 0.32634231448173523f, 0.5571416020393372f, 0.8002071976661682f, 0.39089810848236084f, 0.4240254759788513f, 0.8474591374397278f, 0.6937807202339172f, -0.022068534046411514f, 0.8385031223297119f, 0.4738852083683014f, 0.607276439666748f, 0.6587486267089844f, 0.8698686957359314f, 0.9671000838279724f, 0.34620392322540283f, -0.7059159278869629f, 0.5338714718818665f, 0.692253828048706f, 0.7915824055671692f, 0.8556695580482483f, 0.08244775235652924f, 0.6058193445205688f, 0.840682864189148f, -0.05824786052107811f, 0.6335762143135071f, 0.10733524709939957f, 0.4531402885913849f, 0.7759823799133301f, 0.011076533235609531f, 0.3568643629550934f, 0.08111827075481415f, -0.34323278069496155f, 0.429426908493042f, 0.6495653390884399f, 0.7294284105300903f, 0.22314761579036713f, 0.05262443795800209f, 0.8211232423782349f, 0.13022814691066742f, -0.29404908418655396f, 0.6066248416900635f, 0.8953348398208618f, 0.1974886655807495f, 0.5534808039665222f, 0.19833756983280182f, 0.9435052871704102f, 0.9371183514595032f, -0.7443344593048096f, 0.06489409506320953f, 0.301994651556015f, 0.7772836685180664f, 0.9812718033790588f, 0.23296573758125305f, 0.44170495867729187f, 0.06989267468452454f, -0.9810081720352173f, 0.46009361743927f, 0.39358144998550415f, 0.7425920963287354f, 0.8261480927467346f, 0.3557555675506592f, 0.36742112040519714f, 0.7731348872184753f, -0.020627811551094055f, 0.49504026770591736f, 0.6812324523925781f, 0.008601825684309006f, 0.3583228290081024f, 0.5128819346427917f, 0.0839981660246849f, 0.41020041704177856f, -0.6787410974502563f, 0.32510173320770264f, 0.7882513403892517f, 0.6801074743270874f, 0.6949466466903687f, 0.8675017356872559f, 0.7906860709190369f, 0.8068878650665283f, -0.38261494040489197f, 0.8993313908576965f, 0.9632781744003296f, 0.9644467830657959f, 0.531512439250946f, 0.04265961796045303f, 0.7574250102043152f, 0.9606829285621643f, -0.8259238600730896f, 0.8688152432441711f, 0.3525133728981018f, 0.42541685700416565f, 0.5866315960884094f, 0.5574696660041809f, 0.15300136804580688f, 0.42430779337882996f, -0.11273158341646194f, 0.6003263592720032f, 0.9960207939147949f, 0.6282438039779663f, 0.9158509969711304f, 0.9999995827674866f, 0.5210548639297485f, 0.09219678491353989f, -0.7900345325469971f, 0.0751979649066925f, 0.6194165945053101f, 0.01490248367190361f, 0.702238142490387f, 0.9088271260261536f, 0.008490389212965965f, 0.8731591701507568f, -0.4973090887069702f, 0.8704148530960083f, 0.4468460977077484f, 0.1923879235982895f, 0.22253794968128204f, 0.29113373160362244f, 0.9081844687461853f, 0.2224767506122589f, -0.4353499412536621f, 0.5455520153045654f, 0.5955530405044556f, 0.7480762600898743f, 0.5258086323738098f, 0.5166946649551392f, 0.8484088182449341f, 0.439782053232193f, -0.9441090822219849f, 0.2624305486679077f, 0.870574951171875f, 0.1987667977809906f, 0.9370476603507996f, 0.1372140645980835f, 0.9956669211387634f, 0.6652153134346008f, -0.5631805658340454f, 0.775057315826416f, 0.8584571480751038f, 0.5993982553482056f, 0.6856229901313782f, 0.7876492738723755f, 0.18070748448371887f, 0.6948647499084473f, -0.269412636756897f, 0.1652282178401947f, 0.9613706469535828f, 0.3448968231678009f, 0.5868426561355591f, 0.8909010887145996f, 0.7117147445678711f, 0.9526493549346924f, -0.6316742300987244f, 0.757643461227417f, 0.4978841245174408f, 0.7819021344184875f, 0.947961688041687f, 0.20607027411460876f, 0.40012940764427185f, 0.31611961126327515f, -0.5202167630195618f, 0.6176827549934387f, 0.627357542514801f, 0.37962591648101807f, 0.9612859487533569f, 0.7369466423988342f, 0.40130168199539185f, 0.8771376609802246f, -0.0704299733042717f, 0.09555713087320328f, 0.0756063312292099f, 0.890472948551178f, 0.0044253310188651085f, 0.4277482330799103f, 0.5224087238311768f, 0.632057785987854f, -0.21825334429740906f, 0.4715113639831543f, 0.9680219888687134f, 0.8515114784240723f, 0.27095726132392883f, 0.2571865916252136f, 0.1500660479068756f, 0.6519718170166016f, -0.4485205411911011f, 0.34510669112205505f, 0.1910443902015686f, 0.09547426551580429f, 0.5959435105323792f, 0.7812671661376953f, 0.9889671802520752f, 0.11093269288539886f, -0.7983273863792419f, 0.46445533633232117f, 0.0009226800175383687f, 0.5316306948661804f, 0.36256352066993713f, 0.21792440116405487f, 0.3855572044849396f, 0.883346438407898f, -0.8637840747833252f, 0.31484195590019226f, 0.19248831272125244f, 0.6416841149330139f, 0.5335863828659058f, 0.5429270267486572f, 0.9306926727294922f, 0.023311922326683998f, -0.012156217359006405f, 0.649480938911438f, 0.06889281421899796f, 0.2548869848251343f, 0.3364255428314209f, 0.5971881151199341f, 0.5950292348861694f, 0.7570445537567139f, -0.4497750997543335f, 0.6685609817504883f, 0.6690855622291565f, 0.49668583273887634f, 0.7658900618553162f, 0.019164247438311577f, 0.5268640518188477f, 0.8652885556221008f, -0.8592517375946045f, 0.16555942595005035f, 0.7734037041664124f, 0.3797190189361572f, 0.5856907963752747f, 0.3832520842552185f, 0.8827168941497803f, 0.4374869465827942f, -0.6886065602302551f, 0.9113084673881531f, 0.8079761266708374f, 0.3197154700756073f, 0.26208406686782837f, 0.018900472670793533f, 0.19904807209968567f, 0.9427839517593384f, -0.18041430413722992f, 0.8034057021141052f, 0.133339524269104f, 0.8023066520690918f, 0.5334520936012268f, 0.5172219276428223f, 0.2713491916656494f, 0.7918562293052673f, -0.5120744705200195f, 0.5024634599685669f, 0.5937954187393188f, 0.31328463554382324f, 0.14701424539089203f, 0.9881421327590942f, 0.6626257300376892f, 0.17981703579425812f, -0.852037250995636f, 0.7268995642662048f, 0.9674025774002075f, 0.35078129172325134f, 0.029524222016334534f, 0.4765990078449249f, 0.11575094610452652f, 0.8106797933578491f, -0.10691814124584198f, 0.8326020240783691f, 0.5892381072044373f, 0.10300303250551224f, 0.3805795907974243f, 0.14300507307052612f, 0.7082318067550659f, 0.07486815005540848f, -0.016435539349913597f, 0.07297548651695251f, 0.8000211119651794f, 0.6467872858047485f, 0.004673698917031288f, 0.7721468210220337f, 0.2112165093421936f, 0.7773726582527161f, -0.32476121187210083f, 0.3947443664073944f, 0.5453697443008423f, 0.6925870180130005f, 0.6893799304962158f, 0.5198661684989929f, 0.566326379776001f, 0.3565301299095154f, -0.331309050321579f, 0.26582860946655273f, 0.14109468460083008f, 0.7187426090240479f, 0.2844092845916748f, 0.4898192882537842f, 0.21687673032283783f, 0.3660714626312256f, -0.7134491801261902f, 0.6528905034065247f, 0.33151426911354065f, 0.7505673170089722f, 0.4562789499759674f, 0.32350632548332214f, 0.4284874200820923f, 0.005367237608879805f, -0.2516211271286011f, 0.3434866964817047f, 0.24503327906131744f, 0.4892091155052185f, 0.5161845684051514f, 0.4304504096508026f, 0.6046362519264221f, 0.08875156193971634f, -0.4739346504211426f, 0.24764515459537506f, 0.24095022678375244f, 0.9737162590026855f, 0.2400193214416504f, 0.39356905221939087f, 0.6929008364677429f, 0.6591960191726685f, -0.39748743176460266f, 0.5949666500091553f, 0.6943937540054321f, 0.5257253646850586f, 0.8912562131881714f, 0.906907856464386f, 0.7302873730659485f, 0.9749301075935364f, -0.6186346411705017f, 0.6035533547401428f, 0.031757473945617676f, 0.4550754427909851f, 0.21696650981903076f, 0.690753698348999f, 0.21145106852054596f, 0.32063382863998413f, -0.5570397973060608f, 0.5899818539619446f, 0.24244999885559082f, 0.19826608896255493f, 0.006842211354523897f, 0.9063467383384705f, 0.13512906432151794f, 0.5539366602897644f, -0.6821413636207581f, 0.9021549820899963f, 0.0004639115068130195f, 0.2804035246372223f, 0.17434333264827728f, 0.9868206977844238f, 0.012877754867076874f, 0.9498142600059509f, -0.2109949141740799f, 0.9957405924797058f, 0.033614642918109894f, 0.05621282756328583f, 0.9676695466041565f, 0.8402448296546936f, 0.033368319272994995f, 0.049762435257434845f, -0.6997795104980469f, 0.05790417641401291f, 0.46467339992523193f, 0.5720816850662231f, 0.4398222267627716f, 0.28533682227134705f, 0.4517394006252289f, 0.5034474730491638f, -0.18217456340789795f, 0.4720931053161621f, 0.8540437817573547f, 0.9462619423866272f, 0.8646782636642456f, 0.9162802696228027f, 0.5632847547531128f, 0.2188168317079544f, -0.618502140045166f, 0.6066297888755798f, 0.6490415930747986f, 0.24861563742160797f, 0.545551061630249f, 0.2578328251838684f, 0.2847803235054016f, 0.6440727114677429f, -0.6847624778747559f, 0.9590231776237488f, 0.11423484981060028f, 0.07678865641355515f, 0.7607942223548889f, 0.18491075932979584f, 0.5738686919212341f, 0.1547468602657318f, -0.45251983404159546f, 0.6743136048316956f, 0.23439615964889526f, 0.097785584628582f, 0.37876665592193604f, 0.4165094494819641f, 0.4869270324707031f, 0.24306659400463104f, -0.36388689279556274f, 0.31004440784454346f, 0.044716816395521164f, 0.5888728499412537f, 0.2955337464809418f, 0.9925724267959595f, 0.42614537477493286f, 0.14088799059391022f, -0.1728695034980774f, 0.4864586889743805f, 0.47045204043388367f, 0.29681432247161865f, 0.4815525412559509f, 0.17081451416015625f, 0.4134413003921509f, 0.36664721369743347f, -0.8910846710205078f, 0.5268446207046509f, 0.9247599244117737f, 0.26017534732818604f, 0.3412822186946869f, 0.6246424913406372f, 0.1880471110343933f, 0.8998587727546692f, -0.21784734725952148f, 0.035079117864370346f, 0.3654824197292328f, 0.11514521390199661f, 0.5775947570800781f, 0.038280975073575974f, 0.17051325738430023f, 0.2656038999557495f, -0.8093340396881104f, 0.9792641401290894f, 0.6702958941459656f, 0.9819674491882324f, 0.42249736189842224f, 0.5649142265319824f, 0.8854942917823792f, 0.15134069323539734f, -0.2152681052684784f, 0.17170657217502594f, 0.10488195717334747f, 0.7321919202804565f, 0.34096768498420715f, 0.24568147957324982f, 0.40555334091186523f, 0.2803230583667755f, -0.5397576689720154f, 0.07474486529827118f, 0.16464541852474213f, 0.9494705200195312f, 0.44634154438972473f, 0.7268843054771423f, 0.10230591148138046f, 0.4949818551540375f, -0.10179132968187332f, 0.9270718693733215f, 0.2629360854625702f, 0.32815325260162354f, 0.8994763493537903f, 0.40217798948287964f, 0.10592988133430481f, 0.010881542228162289f, -0.09415663033723831f, 0.18203380703926086f, 0.4981597363948822f, 0.6474102735519409f, 0.9020639657974243f, 0.3172735273838043f, 0.4931943416595459f, 0.6754498481750488f, -0.3821221590042114f, 0.9304283857345581f, 0.03833660110831261f, 0.17349639534950256f, 0.46500757336616516f, 0.028365742415189743f, 0.5967007875442505f, 0.89198899269104f, -0.21896927058696747f, 0.15878918766975403f, 0.7663388848304749f, 0.0054788850247859955f, 0.6520549654960632f, 0.819892168045044f, 0.31559157371520996f, 0.21188373863697052f, -0.8105215430259705f, 0.13889531791210175f, 0.39265766739845276f, 0.14304539561271667f, 0.862684428691864f, 0.2840815484523773f, 0.4069441556930542f, 0.535599946975708f, -0.23846818506717682f, 0.06625060737133026f, 0.1713133454322815f, 0.6934599876403809f, 0.05045010522007942f, 0.9393295049667358f, 0.46614617109298706f, 0.7686586976051331f, -0.15932884812355042f, 0.1260678917169571f, 0.2446921020746231f, 0.35292431712150574f, 0.5732802748680115f, 0.05091950669884682f, 0.8297539353370667f, 0.5121617913246155f, -0.3921409845352173f, 0.5439451336860657f, 0.01665842905640602f, 0.5284290313720703f, 0.032217029482126236f, 0.4967179000377655f, 0.00984086375683546f, 0.03136410191655159f, -0.9074923992156982f, 0.613503098487854f, 0.9811693429946899f, 0.41152819991111755f, 0.2848868668079376f, 0.585657000541687f, 0.7311448454856873f, 0.1891975998878479f, -0.4760396480560303f, 0.1456403285264969f, 0.6433712244033813f, 0.26048746705055237f, 0.4169068932533264f, 0.6380230784416199f, 0.969073474407196f, 0.34679409861564636f, -0.3351154625415802f, 0.28518375754356384f, 0.8948298096656799f, 0.2841026782989502f, 0.625164270401001f, 0.4490307569503784f, 0.24365104734897614f, 0.17088904976844788f, -0.935252845287323f, 0.16043606400489807f, 0.5147174596786499f, 0.7125328779220581f, 0.23457829654216766f, 0.18035627901554108f, 0.024925988167524338f, 0.5677680373191833f, -0.6735149621963501f, 0.49275103211402893f, 0.13408933579921722f, 0.6258535385131836f, 0.7888192534446716f, 0.6412572264671326f, 0.6529911756515503f, 0.4759850800037384f, -0.6328000426292419f, 0.7213569283485413f, 0.01581476256251335f, 0.0020639379508793354f, 0.49224671721458435f, 0.6670241951942444f, 0.65067058801651f, 0.108655646443367f, -0.07827980071306229f, 0.9454650282859802f, 0.6343666315078735f, 0.8408446311950684f, 0.5967363119125366f, 0.034878119826316833f, 0.11019548028707504f, 0.4621303677558899f, -0.7456337213516235f, 0.09404461085796356f, 0.7328072786331177f, 0.014712191186845303f, 0.7017959356307983f, 0.5595592856407166f, 0.11107761412858963f, 0.8437672853469849f, -0.9183843731880188f, 0.5470305681228638f, 0.2842755615711212f, 0.667697012424469f, 0.08063576370477676f, 0.8503819108009338f, 0.6134195327758789f, 0.8112960457801819f, -0.5136600732803345f, 0.7880539298057556f, 0.3066578507423401f, 0.6087591648101807f, 0.09959091246128082f, 0.8377966284751892f, 0.08000252395868301f, 0.20143871009349823f, -0.6161847114562988f, 0.7632402777671814f, 0.9760121703147888f, 0.8827283978462219f, 0.8340935707092285f, 0.9205573201179504f, 0.317395955324173f, 0.6731090545654297f, -0.7198983430862427f, 0.9584868550300598f, 0.6013513207435608f, 0.0836818590760231f, 0.2297719568014145f, 0.024656014516949654f, 0.3803229033946991f, 0.8462591767311096f, -0.7928578853607178f, 0.8818442821502686f, 0.40419891476631165f, 0.12254712730646133f, 0.2391698956489563f, 0.8695746064186096f, 0.25634467601776123f, 0.9361945986747742f, -0.7827206254005432f, 0.7597795724868774f, 0.7472553253173828f, 0.9599264860153198f, 0.16205905377864838f, 0.8228172063827515f, 0.18871986865997314f, 0.300965279340744f, -0.3932720124721527f, 0.9362254738807678f, 0.12411072850227356f, 0.298675000667572f, 0.8344639539718628f, 0.19786489009857178f, 0.2897096872329712f, 0.21509990096092224f, -0.21882902085781097f, 0.769064724445343f, 0.5455405712127686f, 0.3628561198711395f, 0.19320380687713623f, 0.7566791772842407f, 0.18126747012138367f, 0.8481782674789429f, -0.632747232913971f, 0.16258887946605682f, 0.45011234283447266f, 0.833065390586853f, 0.8700846433639526f, 0.8169659972190857f, 0.8098655343055725f, 0.39938223361968994f, -0.4454561173915863f, 0.4295579195022583f, 0.7717559337615967f, 0.07662279903888702f, 0.9459494948387146f, 0.48446837067604065f, 0.9613399505615234f, 0.3516606092453003f, -0.21088355779647827f, 0.11228018254041672f, 0.8656455278396606f, 0.27236759662628174f, 0.18578532338142395f, 0.4629788398742676f, 0.9243083000183105f, 0.6568259596824646f, -0.11519217491149902f, 0.7326701879501343f, 0.34482303261756897f, 0.6491840481758118f, 0.5961363315582275f, 0.025887927040457726f, 0.54159015417099f, 0.8144723773002625f, -0.08489856868982315f, 0.2634275555610657f, 0.06896566599607468f, 0.11620379984378815f, 0.47897687554359436f, 0.728961706161499f, 0.4029559791088104f, 0.716450572013855f, -0.020359646528959274f, 0.9286381602287292f, 0.6328292489051819f, 0.4054769277572632f, 0.9265903830528259f, 0.58695387840271f, 0.22103890776634216f, 0.16898271441459656f, -0.35669848322868347f, 0.9691234230995178f, 0.48115500807762146f, 0.668554961681366f, 0.16587497293949127f, 0.6989029049873352f, 0.7804637551307678f, 0.21497569978237152f, -0.39804932475090027f, 0.36584657430648804f, 0.8506836891174316f, 0.79029780626297f, 0.3702521324157715f, 0.5850407481193542f, 0.9938464164733887f, 0.2575853765010834f, -0.3618197739124298f, 0.7965249419212341f, 0.3691486120223999f, 0.24796763062477112f, 0.24051813781261444f, 0.034123651683330536f, 0.9656895399093628f, 0.010329540818929672f, -0.7043086290359497f, 0.3101741373538971f, 0.6915522813796997f, 0.49473676085472107f, 0.09551488608121872f, 0.6588669419288635f, 0.5159049034118652f, 0.9020472168922424f, -0.28868865966796875f, 0.12737497687339783f, 0.365668386220932f, 0.768153727054596f, 0.46500834822654724f, 0.4486689269542694f, 0.4285493493080139f, 0.7986783981323242f, -0.722578227519989f, 0.5570022463798523f, 0.9107912182807922f, 0.2658027410507202f, 0.5207378268241882f, 0.28869420289993286f, 0.9849298596382141f, 0.7079266905784607f, -0.5969898700714111f, 0.5457621216773987f, 0.27520185708999634f, 0.2044338881969452f, 0.7416726350784302f, 0.3011470437049866f, 0.02093007229268551f, 0.16902557015419006f, -0.7134928703308105f, 0.5616956353187561f, 0.2241903841495514f, 0.9506548047065735f, 0.3260308802127838f, 0.2533942759037018f, 0.07489796727895737f, 0.845989465713501f, -0.06709250807762146f, 0.5185872912406921f, 0.10592292249202728f, 0.17854873836040497f, 0.768069326877594f, 0.36448782682418823f, 0.9084955453872681f, 0.29067686200141907f, -0.3803080916404724f, 0.5548429489135742f, 0.769641101360321f, 0.11953119188547134f, 0.7813851833343506f, 0.23010335862636566f, 0.457774817943573f, 0.046415142714977264f, -0.839573323726654f, 0.3191232681274414f, 0.8492969870567322f, 0.9069666862487793f, 0.9806301593780518f, 0.008125482127070427f, 0.7964816689491272f, 0.14507614076137543f, -0.3238358199596405f, 0.1973402053117752f, 0.6920222043991089f, 0.7794948220252991f, 0.9015448689460754f, 0.44927161931991577f, 0.7973402142524719f, 0.6497138142585754f, -0.36472025513648987f, 0.9194377064704895f, 0.233643040060997f, 0.31727656722068787f, 0.5820114016532898f, 0.35615861415863037f, 0.8403902053833008f, 0.2160719633102417f, -0.36512190103530884f, 0.6802118420600891f, 0.27713432908058167f, 0.2373269647359848f, 0.6077555418014526f, 0.32869547605514526f, 0.6264599561691284f, 0.8170322179794312f, -0.18019554018974304f, 0.7692321538925171f, 0.6890694499015808f, 0.5522161722183228f, 0.768290638923645f, 0.384884238243103f, 0.06143592670559883f, 0.44959941506385803f, -0.4137311577796936f, 0.5024427175521851f, 0.49768903851509094f, 0.08753690123558044f, 0.8152548670768738f, 0.8183655738830566f, 0.3779948651790619f, 0.7253682017326355f, -0.9944174885749817f, 0.4233684241771698f, 0.22756919264793396f, 0.0803501084446907f, 0.9859699010848999f, 0.27270910143852234f, 0.33302581310272217f, 0.7206165194511414f, -0.6530700922012329f, 0.7757905721664429f, 0.4237470328807831f, 0.30656787753105164f, 0.3548276424407959f, 0.03279231861233711f, 0.6275056004524231f, 0.7826792001724243f, -0.6683481931686401f, 0.8068348169326782f, 0.8720706701278687f, 0.6174620985984802f, 0.6009122133255005f, 0.25237733125686646f, 0.45281654596328735f, 0.523505449295044f, -0.8968448042869568f, 0.1506105214357376f, 0.4047999382019043f, 0.44759446382522583f, 0.5748518109321594f, 0.28915897011756897f, 0.8676045536994934f, 0.3693279027938843f, -0.474144846200943f, 0.4588528871536255f, 0.8078924417495728f, 0.7169371247291565f, 0.4409733712673187f, 0.3762623369693756f, 0.41929909586906433f, 0.6339395642280579f, -0.489970326423645f, 0.5415375232696533f, 0.29501840472221375f, 0.3447269797325134f, 0.6892313361167908f, 0.18452344834804535f, 0.33810099959373474f, 0.982621967792511f, -0.6404287815093994f, 0.6519356966018677f, 0.46634188294410706f, 0.18056179583072662f, 0.6730411052703857f, 0.06250088661909103f, 0.24695995450019836f, 0.38474106788635254f, -0.6449730396270752f, 0.42548486590385437f, 0.7295017838478088f, 0.9142715334892273f, 0.6304230690002441f, 0.8257361054420471f, 0.6665769815444946f, 0.7255026698112488f, -0.6885749697685242f, 0.7444212436676025f, 0.4521635174751282f, 0.07305145263671875f, 0.8755524754524231f, 0.22267870604991913f, 0.5249779224395752f, 0.8629011511802673f, -0.8511449694633484f, 0.7654288411140442f, 0.26796820759773254f, 0.4474528729915619f, 0.31718671321868896f, 0.47460687160491943f, 0.22520162165164948f, 0.43015921115875244f, -0.7436971068382263f, 0.17500519752502441f, 0.3044446110725403f, 0.9609566926956177f, 0.9148766994476318f, 0.2919759154319763f, 0.27793702483177185f, 0.07555877417325974f, -0.0411633737385273f, 0.468070387840271f, 0.5028437376022339f, 0.4342648983001709f, 0.10754243284463882f, 0.6695708632469177f, 0.25978657603263855f, 0.18577884137630463f, -0.11046736687421799f, 0.8635578751564026f, 0.6671925783157349f, 0.0805380716919899f, 0.1489657461643219f, 0.43869632482528687f, 0.4109417796134949f, 0.619905412197113f, -0.8314943909645081f, 0.1444564014673233f, 0.9208938479423523f, 0.3321130871772766f, 0.7116016149520874f, 0.058967433869838715f, 0.8132845759391785f, 0.11304949969053268f, -0.15158024430274963f, 0.8689829707145691f, 0.9024108052253723f, 0.7801779508590698f, 0.4762396812438965f, 0.6439815163612366f, 0.5240335464477539f, 0.6658006310462952f, -0.6762716770172119f, 0.4328400790691376f, 0.9358471632003784f, 0.33286818861961365f, 0.10881707817316055f, 0.654865562915802f, 0.24279172718524933f, 0.7885481715202332f, -0.5958308577537537f, 0.966174840927124f, 0.6321734189987183f, 0.9097291231155396f, 0.5676349997520447f, 0.3396586775779724f, 0.7042656540870667f, 0.5428643822669983f, -0.7702542543411255f, 0.7920713424682617f, 0.3374854624271393f, 0.8778969645500183f, 0.7712191343307495f, 0.5508826971054077f, 0.30947548151016235f, 0.9731083512306213f, -0.23330551385879517f, 0.21328105032444f, 0.7231725454330444f, 0.05882439762353897f, 0.8034452795982361f, 0.7430035471916199f, 0.12154997885227203f, 0.44050759077072144f, -0.9686374068260193f, 0.5575671195983887f, 0.8884938359260559f, 0.10229906439781189f, 0.27869632840156555f, 0.5259776711463928f, 0.5696955323219299f, 0.5958995819091797f, -0.8941903710365295f, 0.8397183418273926f, 0.7870414853096008f, 0.5664134621620178f, 0.31185081601142883f, 0.5333613157272339f, 0.24225756525993347f, 0.9127522110939026f, -0.09013980627059937f, 0.10029186308383942f, 0.44828057289123535f, 0.9354408979415894f, 0.21629302203655243f, 0.9680655002593994f, 0.9882928133010864f, 0.20094113051891327f, -0.8131553530693054f, 0.7170162796974182f, 0.9814850687980652f, 0.8151550889015198f, 0.3340410888195038f, 0.2377568632364273f, 0.9794661998748779f, 0.0993361622095108f, -0.4301910400390625f, 0.5643818378448486f, 0.2745996415615082f, 0.8065912127494812f, 0.797478973865509f, 0.7693564295768738f, 0.6331056356430054f, 0.5885671973228455f, -0.8890563249588013f, 0.09668616205453873f, 0.760499119758606f, 0.04775868356227875f, 0.5453307032585144f, 0.8690152168273926f, 0.46164995431900024f, 0.4316035211086273f, -0.01605721190571785f, 0.37518322467803955f, 0.9126317501068115f, 0.6925261616706848f, 0.9735733866691589f, 0.45734548568725586f, 0.7299558520317078f, 0.1698361188173294f, -0.4052150547504425f, 0.43755581974983215f, 0.2049030363559723f, 0.2944968044757843f, 0.195928156375885f, 0.031851306557655334f, 0.9818365573883057f, 0.8951334953308105f, -0.9007744789123535f, 0.380543977022171f, 0.6425513029098511f, 0.8801132440567017f, 0.05018624663352966f, 0.234900563955307f, 0.5996050834655762f, 0.8976916074752808f, -0.16668500006198883f, 0.39802226424217224f, 0.9054028391838074f, 0.35594817996025085f, 0.8421481251716614f, 0.2085137963294983f, 0.12647977471351624f, 0.27047932147979736f, -0.7919901013374329f, 0.20341500639915466f, 0.76832115650177f, 0.6817793250083923f, 0.2750360667705536f, 0.5881441235542297f, 0.7794610261917114f, 0.45326992869377136f, -0.8387887477874756f, 0.9613546133041382f, 0.09007905423641205f, 0.5449695587158203f, 0.05558318644762039f, 0.502077579498291f, 0.2155822068452835f, 0.7044483423233032f, -0.35898473858833313f, 0.12638038396835327f, 0.7138515114784241f, 0.7779897451400757f, 0.9715597629547119f, 0.7903083562850952f, 0.1275499314069748f, 0.6311168074607849f, -0.873206377029419f, 0.37075239419937134f, 0.6440925598144531f, 0.7375738024711609f, 0.5386644601821899f, 0.6038876175880432f, 0.1985950917005539f, 0.4992348551750183f, -0.9251441359519958f, 0.42425933480262756f, 0.6993886232376099f, 0.7118587493896484f, 0.05165091156959534f, 0.62614506483078f, 0.13911029696464539f, 0.2585947513580322f, -0.48077592253685f, 0.3004138469696045f, 0.1437838077545166f, 0.1767350286245346f, 0.4039812386035919f, 0.3243693709373474f, 0.4360383450984955f, 0.1297011524438858f, -0.4184298813343048f, 0.12977609038352966f, 0.7024354934692383f, 0.5832359194755554f, 0.13929973542690277f, 0.06816378980875015f, 0.463218092918396f, 0.7791445255279541f, -0.37677764892578125f, 0.24870499968528748f, 0.3811568021774292f, 0.4761793911457062f, 0.33194053173065186f, 0.5155930519104004f, 0.6449477672576904f, 0.940722644329071f, -0.7037180066108704f, 0.12850035727024078f, 0.44643908739089966f, 0.14562101662158966f, 0.3857780992984772f, 0.0516318753361702f, 0.26061010360717773f, 0.3995315730571747f, -0.20401768386363983f, 0.9852508902549744f, 0.26026326417922974f, 0.5464487075805664f, 0.6236940622329712f, 0.38094648718833923f, 0.8583185076713562f, 0.7655009031295776f, -0.34519872069358826f, 0.35275667905807495f, 0.24760368466377258f, 0.6476431488990784f, 0.7718538641929626f, 0.2927214801311493f, 0.49576932191848755f, 0.007578377611935139f, -0.16790397465229034f, 0.7409464716911316f, 0.02353145368397236f, 0.646636426448822f, 0.37412282824516296f, 0.12917524576187134f, 0.621111273765564f, 0.3817403316497803f, -0.7740989327430725f, 0.47836530208587646f, 0.6484864354133606f, 0.572395920753479f, 0.3578038811683655f, 0.5691309571266174f, 0.4652692377567291f, 0.24420665204524994f, -0.7200502157211304f, 0.21685032546520233f, 0.9809231758117676f, 0.5644835829734802f, 0.05652938783168793f, 0.520048201084137f, 0.2189079374074936f, 0.2791762351989746f, -0.4752516746520996f, 0.6990590691566467f, 0.19959397614002228f, 0.7768509984016418f, 0.8823392391204834f, 0.20568843185901642f, 0.43975764513015747f, 0.8903211355209351f, -0.9227629899978638f, 0.833564817905426f, 0.7625706791877747f, 0.27237987518310547f, 0.9125871062278748f, 0.8465613722801208f, 0.4892330765724182f, 0.6170153617858887f, -0.5935640335083008f, 0.18016520142555237f, 0.2705708146095276f, 0.6027311086654663f, 0.47301197052001953f, 0.9698240160942078f, 0.5722147822380066f, 0.9026473760604858f, -0.42375266551971436f, 0.1465693712234497f, 0.017826387658715248f, 0.2269732505083084f, 0.061783939599990845f, 0.7886557579040527f, 0.0857442244887352f, 0.3030097484588623f, -0.524372398853302f, 0.2900136411190033f, 0.8203864693641663f, 0.6234796047210693f, 0.7837367653846741f, 0.8825362920761108f, 0.8658465147018433f, 0.5487581491470337f, -0.9715086221694946f, 0.5801202654838562f, 0.6401927471160889f, 0.11692968010902405f, 0.882685124874115f, 0.34873777627944946f, 0.47532519698143005f, 0.475820392370224f, -0.651559591293335f, 0.22094066441059113f, 0.4339853525161743f, 0.7188149690628052f, 0.9023473262786865f, 0.6691390872001648f, 0.20803019404411316f, 0.6767955422401428f, -0.9755359888076782f, 0.07189752161502838f, 0.53739994764328f, 0.04697364568710327f, 0.018537156283855438f, 0.3458075225353241f, 0.5797749757766724f, 0.04053163155913353f, -0.12289463728666306f, 0.8435980081558228f, 0.501829206943512f, 0.7275902032852173f, 0.8993546962738037f, 0.6483800411224365f, 0.695604681968689f, 0.9215990900993347f, -0.2160620093345642f, 0.5393463373184204f, 0.031490929424762726f, 0.5288150310516357f, 0.05440438911318779f, 0.5690852999687195f, 0.6277978420257568f, 0.975605845451355f, -0.2589305639266968f, 0.29314398765563965f, 0.8324657082557678f, 0.4149470925331116f, 0.2296351045370102f, 0.30339887738227844f, 0.26923638582229614f, 0.7248966693878174f, -0.1604800969362259f, 0.32316648960113525f, 0.024837281554937363f, 0.9373462200164795f, 0.9836618304252625f, 0.35775160789489746f, 0.8316521048545837f, 0.2542143166065216f, -0.8237749338150024f, 0.6587185859680176f, 0.9077586531639099f, 0.666619062423706f, 0.699997067451477f, 0.6111745238304138f, 0.9259156584739685f, 0.2318519651889801f, -0.7143170833587646f, 0.7331566214561462f, 0.5100426077842712f, 0.9353430867195129f, 0.33197221159935f, 0.480425626039505f, 0.04417407885193825f, 0.16825109720230103f, -0.19289349019527435f, 0.015604166314005852f, 0.5777023434638977f, 0.1338588148355484f, 0.40912726521492004f, 0.3209958076477051f, 0.946765124797821f, 0.20302127301692963f, -0.5155153274536133f, 0.08853836357593536f, 0.9969274997711182f, 0.03340449556708336f, 0.023279771208763123f, 0.24485188722610474f, 0.09235721081495285f, 0.4382769465446472f, -0.6248921751976013f, 0.44272878766059875f, 0.29262781143188477f, 0.40634340047836304f, 0.992896556854248f, 0.015681162476539612f, 0.9375805854797363f, 0.9752385020256042f, -0.2951609194278717f, 0.9603526592254639f, 0.8578518033027649f, 0.05904097855091095f, 0.37050357460975647f, 0.9492390155792236f, 0.1896844506263733f, 0.7017371654510498f, -0.5820286273956299f, 0.18156804144382477f, 0.5311107635498047f, 0.768367350101471f, 0.05699538812041283f, 0.9431397318840027f, 0.44585564732551575f, 0.0930568277835846f, -0.39173147082328796f, 0.6009042859077454f, 0.3733382225036621f, 0.11554235219955444f, 0.3042975962162018f, 0.23355627059936523f, 0.21783746778964996f, 0.5458068251609802f, -0.6848887801170349f, 0.05987117439508438f, 0.07615875452756882f, 0.18157413601875305f, 0.7311235666275024f, 0.7151046991348267f, 0.21255147457122803f, 0.8008782863616943f, -0.3085658550262451f, 0.5119994878768921f, 0.6694273948669434f, 0.9189416170120239f, 0.4153320789337158f, 0.8532187342643738f, 0.018073851242661476f, 0.06737074255943298f, -0.5422680974006653f, 0.8460426330566406f, 0.35505592823028564f, 0.14907735586166382f, 0.5235685110092163f, 0.7057546377182007f, 0.4857725203037262f, 0.7529678344726562f, -0.9201968312263489f, 0.4954703748226166f, 0.42190149426460266f, 0.8737407326698303f, 0.23988457024097443f, 0.5450124144554138f, 0.09059648960828781f, 0.399003803730011f, -0.298259973526001f, 0.47653958201408386f, 0.8348923921585083f, 0.39316442608833313f, 0.07695629447698593f, 0.3085145354270935f, 0.11845269054174423f, 0.15542520582675934f, -0.8896017074584961f, 0.3313380479812622f, 0.1960618942975998f, 0.6334955096244812f, 0.7208755612373352f, 0.12762358784675598f, 0.8327174782752991f, 0.5468971133232117f, -0.0648946613073349f, 0.5305647850036621f, 0.21602515876293182f, 0.5521935820579529f, 0.09771774709224701f, 0.07658185064792633f, 0.02513956092298031f, 0.6060627698898315f, -0.4202997088432312f, 0.2826080620288849f, 0.364814817905426f, 0.28394442796707153f, 0.08171329647302628f, 0.24819053709506989f, 0.20454242825508118f, 0.9227218627929688f, -0.22432687878608704f, 0.0778932273387909f, 0.4421337842941284f, 0.7427088022232056f, 0.9766658544540405f, 0.23110540211200714f, 0.6598058938980103f, 0.8533505797386169f, -0.8964405655860901f, 0.6662988066673279f, 0.5650867223739624f, 0.8582037091255188f, 0.11465782672166824f, 0.42376708984375f, 0.25290796160697937f, 0.36439695954322815f, -0.5539544820785522f, 0.756178617477417f, 0.9377070665359497f, 0.1671285480260849f, 0.6252734065055847f, 0.12748558819293976f, 0.5211600661277771f, 0.7164546251296997f, -0.5598668456077576f, 0.36663931608200073f, 0.7414002418518066f, 0.9627320766448975f, 0.08894383162260056f, 0.4383687973022461f, 0.06118090823292732f, 0.0253712497651577f, -0.8703349828720093f, 0.7434394359588623f, 0.10693968832492828f, 0.9524338841438293f, 0.015380444005131721f, 0.2592204809188843f, 0.6441177725791931f, 0.09814902395009995f, -0.7900950908660889f, 0.9035889506340027f, 0.8906323909759521f, 0.5832040309906006f, 0.7443872094154358f, 0.5796338319778442f, 0.5848277807235718f, 0.03332807123661041f, -0.6737292408943176f, 0.4961836636066437f, 0.07937174290418625f, 0.5194979906082153f, 0.5661963820457458f, 0.9456261396408081f, 0.40298664569854736f, 0.06368542462587357f, -0.4190414249897003f, 0.10297795385122299f, 0.4515768885612488f, 0.280882328748703f, 0.5920803546905518f, 0.3249666094779968f, 0.5251192450523376f, 0.6399325132369995f, -0.09057238698005676f, 0.7380650639533997f, 0.4005962610244751f, 0.8284956216812134f, 0.6071075201034546f, 0.4030628502368927f, 0.6248244047164917f, 0.05289026349782944f, -0.6448023319244385f, 0.8500049114227295f, 0.34541797637939453f, 0.6214551329612732f, 0.450321763753891f, 0.15432286262512207f, 0.5371177196502686f, 0.9805941581726074f, -0.7697985768318176f, 0.7396242022514343f, 0.15015019476413727f, 0.8728706240653992f, 0.026268281042575836f, 0.753492534160614f, 0.8018702864646912f, 0.8287298679351807f, -0.050411809235811234f, 0.24458082020282745f, 0.4757521152496338f, 0.05783902853727341f, 0.2546771168708801f, 0.13587628304958344f, 0.24094179272651672f, 0.52687007188797f, -0.6759305596351624f, 0.07282081246376038f, 0.40914809703826904f, 0.5604459047317505f, 0.6414664387702942f, 0.2980596423149109f, 0.24181975424289703f, 0.7791805267333984f, -0.2113935798406601f, 0.34362462162971497f, 0.012252469547092915f, 0.3399299383163452f, 0.7704724669456482f, 0.5400708913803101f, 0.881158709526062f, 0.17066414654254913f, -0.392421156167984f, 0.36319512128829956f, 0.7414209842681885f, 0.793796718120575f, 0.8530361652374268f, 0.08805865049362183f, 0.5251430869102478f, 0.9980308413505554f, -0.3420942425727844f, 0.6846229434013367f, 0.012732384726405144f, 0.08513055741786957f, 0.9274165034294128f, 0.2972409725189209f, 0.19063612818717957f, 0.5478242635726929f, -0.7191104888916016f, 0.5990898609161377f, 0.5055907368659973f, 0.9817004799842834f, 0.3232725262641907f, 0.01677826978266239f, 0.16238433122634888f, 0.46220627427101135f, -0.5259698629379272f, 0.21523478627204895f, 0.8133013844490051f, 0.18591710925102234f, 0.5652654767036438f, 0.0041066003032028675f, 0.6219223141670227f, 0.561959445476532f, -0.647960364818573f, 0.8423689603805542f, 0.7214788198471069f, 0.8746069669723511f, 0.20953057706356049f, 0.1963188499212265f, 0.29030221700668335f, 0.29467031359672546f, -0.6161090135574341f, 0.8765718936920166f, 0.8195827603340149f, 0.7613756060600281f, 0.0664646327495575f, 0.6377745866775513f, 0.5667731165885925f, 0.7071390748023987f, -0.32804015278816223f, 0.3671989440917969f, 0.17571905255317688f, 0.9546250700950623f, 0.41946932673454285f, 0.14844964444637299f, 0.21383324265480042f, 0.21961495280265808f, -0.07627375423908234f, 0.26405227184295654f, 0.4583541452884674f, 0.9764470458030701f, 0.42818209528923035f, 0.3420397937297821f, 0.729606032371521f, 0.05508853867650032f, -0.9884949326515198f, 0.8653340935707092f, 0.8931441307067871f, 0.23472774028778076f, 0.24797423183918f, 0.15464983880519867f, 0.7339743971824646f, 0.1446106731891632f, -0.466209352016449f, 0.40189456939697266f, 0.1717805415391922f, 0.8223248720169067f, 0.5186774134635925f, 0.6997568607330322f, 0.1298588663339615f, 0.3988373279571533f, -0.39576613903045654f, 0.017724789679050446f, 0.3729308843612671f, 0.9682596325874329f, 0.6460968255996704f, 0.9021202921867371f, 0.6942688226699829f, 0.16936780512332916f, -0.13446572422981262f, 0.542041003704071f, 0.08238387107849121f, 0.04051773622632027f, 0.18301813304424286f, 0.754570484161377f, 0.9901618957519531f, 0.45681676268577576f, -0.05018091946840286f, 0.8719852566719055f, 0.19932213425636292f, 0.3807515501976013f, 0.3985646367073059f, 0.21002298593521118f, 0.6233668327331543f, 0.11232758313417435f, -0.11078976839780807f, 0.5710119605064392f, 0.7166930437088013f, 0.8143847584724426f, 0.9370527863502502f, 0.9717697501182556f, 0.4792243242263794f, 0.7749590277671814f, -0.18334583938121796f, 0.6026002764701843f, 0.9863400459289551f, 0.6529108881950378f, 0.5096645951271057f, 0.7281824350357056f, 0.5484619140625f, 0.6005834341049194f, -0.8293769359588623f, 0.4815351963043213f, 0.905572772026062f, 0.878887414932251f, 0.9024335741996765f, 0.14696218073368073f, 0.07057694345712662f, 0.3313710391521454f, -0.48807621002197266f, 0.42996275424957275f, 0.5708852410316467f, 0.9038164019584656f, 0.9809228777885437f, 0.9886960387229919f, 0.7712188959121704f, 0.8280402421951294f, -0.4788159728050232f, 0.5819692015647888f, 0.3893573582172394f, 0.7996431589126587f, 0.40470999479293823f, 0.11964810639619827f, 0.935915470123291f, 0.12705551087856293f, -0.6876958608627319f, 0.9326520562171936f, 0.43261370062828064f, 0.5359532237052917f, 0.09827646613121033f, 0.532647430896759f, 0.8824946284294128f, 0.7575718760490417f, -0.2654198110103607f, 0.9331481456756592f, 0.5375915765762329f, 0.3302265703678131f, 0.13030953705310822f, 0.4208560883998871f, 0.03937720134854317f, 0.5071874260902405f, -0.0076421587727963924f, 0.10962939262390137f, 0.1282034069299698f, 0.47776737809181213f, 0.5353039503097534f, 0.781931459903717f, 0.3592083156108856f, 0.28975585103034973f, -0.9775128364562988f, 0.05982791259884834f, 0.4503953754901886f, 0.09581902623176575f, 0.4169296622276306f, 0.14511220157146454f, 0.5446244478225708f, 0.5294812321662903f, -0.5327870845794678f, 0.9572910070419312f, 0.23666062951087952f, 0.841289758682251f, 0.48188120126724243f, 0.8051266074180603f, 0.7398433685302734f, 0.9495059251785278f, -0.9764514565467834f, 0.06939107179641724f, 0.5442582368850708f, 0.7668136954307556f, 0.6341524720191956f, 0.9617972373962402f, 0.4379780888557434f, 0.597213625907898f, -0.8143764734268188f, 0.7292799949645996f, 0.17292237281799316f, 0.017551202327013016f, 0.39436978101730347f, 0.948718786239624f, 0.7438516616821289f, 0.23938655853271484f, -0.3580012321472168f, 0.6762329936027527f, 0.34440118074417114f, 0.9392452836036682f, 0.21145108342170715f, 0.23642279207706451f, 0.22372399270534515f, 0.4606125056743622f, -0.9408085346221924f, 0.9423129558563232f, 0.6949818134307861f, 0.7776859402656555f, 0.9913526773452759f, 0.5095614790916443f, 0.6799577474594116f, 0.2598215341567993f, -0.3195866346359253f, 0.12467113137245178f, 0.2844441831111908f, 0.2545607089996338f, 0.512363851070404f, 0.029261957854032516f, 0.39963629841804504f, 0.48244422674179077f, -0.9893452525138855f, 0.036302350461483f, 0.9596548080444336f, 0.1535373479127884f, 0.8384538292884827f, 0.6843507885932922f, 0.5534106492996216f, 0.8891417980194092f, -0.6900064945220947f, 0.5294921398162842f, 0.7983659505844116f, 0.22235345840454102f, 0.9018808007240295f, 0.2907285690307617f, 0.08109933137893677f, 0.02731751836836338f, -0.6516051292419434f, 0.7332471013069153f, 0.9700567722320557f, 0.2380295991897583f, 0.38826102018356323f, 0.8219629526138306f, 0.46699219942092896f, 0.6754156947135925f, -0.6582767367362976f, 0.8231558203697205f, 0.6437590718269348f, 0.9752377867698669f, 0.07534314692020416f, 0.23961567878723145f, 0.5215247273445129f, 0.7723678350448608f, -0.7493119835853577f, 0.25491398572921753f, 0.06575949490070343f, 0.8767557740211487f, 0.005982902366667986f, 0.29787904024124146f, 0.6522375345230103f, 0.2247249037027359f, -0.39053258299827576f, 0.8935545086860657f, 0.6300236582756042f, 0.06085556373000145f, 0.37651073932647705f, 0.9697450399398804f, 0.90478515625f, 0.11750924587249756f, -0.78364098072052f, 0.27528703212738037f, 0.6917112469673157f, 0.38704025745391846f, 0.07115333527326584f, 0.49048134684562683f, 0.6320955753326416f, 0.4641872048377991f, -0.46626386046409607f, 0.7313578724861145f, 0.7562384605407715f, 0.8547454476356506f, 0.9718666076660156f, 0.28337278962135315f, 0.6770512461662292f, 0.8591740727424622f, -0.8376260995864868f, 0.36471301317214966f, 0.6614692807197571f, 0.1315762847661972f, 0.4221256673336029f, 0.8808842897415161f, 0.22248175740242004f, 0.6791949272155762f, -0.8138891458511353f, 0.13798832893371582f, 0.14267109334468842f, 0.768796980381012f, 0.38120439648628235f, 0.7448691129684448f, 0.34363457560539246f, 0.7956033945083618f, -0.2559936046600342f, 0.7924491167068481f, 0.9643315672874451f, 0.985781192779541f, 0.5628304481506348f, 0.7980625629425049f, 0.3482774794101715f, 0.02370946854352951f, -0.13631616532802582f, 0.8478081822395325f, 0.40516436100006104f, 0.5941365361213684f, 0.5830513834953308f, 0.8800041675567627f, 0.004404281731694937f, 0.41853415966033936f, -0.772289514541626f, 0.3340771794319153f, 0.44602978229522705f, 0.917977511882782f, 0.5320297479629517f, 0.4658898413181305f, 0.7595868706703186f, 0.7411482930183411f, -0.947602391242981f, 0.6744270920753479f, 0.39441388845443726f, 0.7998080849647522f, 0.8984761238098145f, 0.031066976487636566f, 0.37990424036979675f, 0.9593361616134644f, -0.26153019070625305f, 0.8330579996109009f, 0.9972578287124634f, 0.14244821667671204f, 0.04238319769501686f, 0.5823382139205933f, 0.7907544374465942f, 0.2554931640625f, -0.051184769719839096f, 0.616117537021637f, 0.12312210351228714f, 0.6957252621650696f, 0.6990768313407898f, 0.22979705035686493f, 0.8307909965515137f, 0.7138413786888123f, -0.20753051340579987f, 0.7406856417655945f, 0.11621985584497452f, 0.8197665810585022f, 0.5442694425582886f, 0.8985943794250488f, 0.8614349961280823f, 0.5975521206855774f, -0.7317834496498108f, 0.6289762258529663f, 0.050864849239587784f, 0.517719566822052f, 0.6982165575027466f, 0.792717456817627f, 0.6915873885154724f, 0.027052778750658035f, -0.44574832916259766f, 0.5311670899391174f, 0.2900637090206146f, 0.7158241868019104f, 0.6403201818466187f, 0.9177713990211487f, 0.1836969256401062f, 0.9619928002357483f, -0.677595853805542f, 0.08790378272533417f, 0.8232614994049072f, 0.1620819866657257f, 0.4524844288825989f, 0.37527403235435486f, 0.18180112540721893f, 0.716900110244751f, -0.9188135862350464f, 0.2565600574016571f, 0.017029035836458206f, 0.5731556415557861f, 0.9147714376449585f, 0.23646433651447296f, 0.009991487488150597f, 0.31011614203453064f, -0.5433748960494995f, 0.7347916960716248f, 0.5359813570976257f, 0.5676848888397217f, 0.005168534349650145f, 0.6399120688438416f, 0.600803792476654f, 0.5312530994415283f, -0.5072115659713745f, 0.2961713373661041f, 0.3745374083518982f, 0.8246535658836365f, 0.07630619406700134f, 0.667175829410553f, 0.6906141042709351f, 0.11031071841716766f, -0.4012756943702698f, 0.10487885028123856f, 0.07178407907485962f, 0.6737144589424133f, 0.37263160943984985f, 0.907791256904602f, 0.41214340925216675f, 0.9066957831382751f, -0.5041071772575378f, 0.11505350470542908f, 0.4956356883049011f, 0.5511969923973083f, 0.2954634130001068f, 0.6599929332733154f, 0.7117717862129211f, 0.3254775106906891f, -0.20747296512126923f, 0.2570396065711975f, 0.6963221430778503f, 0.6588484048843384f, 0.7091507315635681f, 0.789467990398407f, 0.715339720249176f, 0.5266334414482117f, -0.7629572153091431f, 0.32660502195358276f, 0.038516487926244736f, 0.2216878980398178f, 0.7833117842674255f, 0.20989741384983063f, 0.2620657980442047f, 0.7897934913635254f, -0.5482367277145386f, 0.6629089713096619f, 0.04797999933362007f, 0.6745023727416992f, 0.24208159744739532f, 0.8203657865524292f, 0.46605005860328674f, 0.5391342043876648f, -0.034219712018966675f, 0.07990221679210663f, 0.7713243365287781f, 0.8027374148368835f, 0.6192033290863037f, 0.8176872134208679f, 0.4698479175567627f, 0.5033197999000549f, -0.4948485791683197f, 0.6729456782341003f, 0.40006697177886963f, 0.6542238593101501f, 0.5309659838676453f, 0.1141095981001854f, 0.7628037333488464f, 0.26874086260795593f, -0.27836117148399353f, 0.7017362117767334f, 0.4510048031806946f, 0.16453838348388672f, 0.24258635938167572f, 0.06034072861075401f, 0.9704993963241577f, 0.888583779335022f, -0.022645050659775734f, 0.4251425862312317f, 0.7867478132247925f, 0.552402138710022f, 0.6575255393981934f, 0.8805707097053528f, 0.5358227491378784f, 0.52028888463974f, -0.9119669795036316f, 0.3398188054561615f, 0.40012869238853455f, 0.3082590699195862f, 0.7544519901275635f, 0.7942761182785034f, 0.870324969291687f, 0.3485989570617676f, -0.2809631824493408f, 0.523262619972229f, 0.14283110201358795f, 0.4497976005077362f, 0.015854204073548317f, 0.35874810814857483f, 0.4909206032752991f, 0.7331917881965637f, -0.5588675141334534f, 0.9457677006721497f, 0.31073465943336487f, 0.6378259658813477f, 0.8839350938796997f, 0.31594663858413696f, 0.03601828217506409f, 0.10196629166603088f, -0.5924462080001831f, 0.5397307872772217f, 0.6965233683586121f, 0.6840219497680664f, 0.3345322608947754f, 0.6065969467163086f, 0.2330477386713028f, 0.41822731494903564f, -0.5847901105880737f, 0.18230919539928436f, 0.11188769340515137f, 0.25010281801223755f, 0.2826535701751709f, 0.37780478596687317f, 0.7851635813713074f, 0.6490103006362915f, -0.8019334673881531f, 0.6048137545585632f, 0.30570438504219055f, 0.7740304470062256f, 0.7659318447113037f, 0.5117116570472717f, 0.3646126985549927f, 0.4041024446487427f, -0.34127938747406006f, 0.6229500770568848f, 0.4061002731323242f, 0.7927799224853516f, 0.5698621869087219f, 0.21838298439979553f, 0.21345773339271545f, 0.018244463950395584f, -0.24937385320663452f, 0.41040563583374023f, 0.3506212830543518f, 0.5420703887939453f, 0.1524893343448639f, 0.26094064116477966f, 0.4244249165058136f, 0.6134982109069824f, -0.15590865910053253f, 0.15642833709716797f, 0.7049757242202759f, 0.9453688263893127f, 0.939227819442749f, 0.575206458568573f, 0.3514586389064789f, 0.28522661328315735f, -0.23934735357761383f, 0.7532868385314941f, 0.2716018855571747f, 0.2526337206363678f, 0.2772010862827301f, 0.33364295959472656f, 0.884602963924408f, 0.7703647017478943f, -0.4052554965019226f, 0.1526150405406952f, 0.4798058569431305f, 0.3130347728729248f, 0.5701920986175537f, 0.10542488843202591f, 0.43768012523651123f, 0.7129590511322021f, -0.916871190071106f, 0.9145880341529846f, 0.0984496921300888f, 0.1614222377538681f, 0.2995913624763489f, 0.33532291650772095f, 0.06671570986509323f, 0.8916846513748169f, -0.7889299392700195f, 0.895544171333313f, 0.5636102557182312f, 0.785574197769165f, 0.985687792301178f, 0.4664655029773712f, 0.0237666517496109f, 0.2230013608932495f, -0.7046286463737488f, 0.30169549584388733f, 0.6886301636695862f, 0.2891302704811096f, 0.22145956754684448f, 0.03496035933494568f, 0.8134186863899231f, 0.20743486285209656f, -0.6427875757217407f, 0.7806717157363892f, 0.5912178754806519f, 0.6603990793228149f, 0.12230288982391357f, 0.5634171962738037f, 0.9945957660675049f, 0.7806464433670044f, -0.6108712553977966f, 0.9193326234817505f, 0.49410805106163025f, 0.9129492044448853f, 0.7712215185165405f, 0.42101603746414185f, 0.6140778660774231f, 0.5941694974899292f, -0.31899458169937134f, 0.9758026003837585f, 0.37993374466896057f, 0.6637130975723267f, 0.8372381925582886f, 0.8800548315048218f, 0.21328046917915344f, 0.7633598446846008f, -0.7762600183486938f, 0.16508841514587402f, 0.7507133483886719f, 0.3078191876411438f, 0.5199787616729736f, 0.3363800644874573f, 0.8176715970039368f, 0.11931336671113968f, -0.7870102524757385f, 0.03854765743017197f, 0.3393585681915283f, 0.010091983713209629f, 0.8461593389511108f, 0.2279762178659439f, 0.6807445883750916f, 0.8889646530151367f, -0.9370993971824646f, 0.18766064941883087f, 0.7921628952026367f, 0.21759730577468872f, 0.43642523884773254f, 0.4276871383190155f, 0.9890193343162537f, 0.6054940223693848f, -0.18724367022514343f, 0.40684565901756287f, 0.4596647620201111f, 0.4761226177215576f, 0.9713645577430725f, 0.7985358834266663f, 0.0847351998090744f, 0.14188174903392792f, -0.40653714537620544f, 0.9647101759910583f, 0.7102276682853699f, 0.6500880718231201f, 0.3015558123588562f, 0.05240750312805176f, 0.7236995697021484f, 0.6923487186431885f, -0.8121663928031921f, 0.6129750609397888f, 0.4771121144294739f, 0.840698778629303f, 0.6880500912666321f, 0.6067591309547424f, 0.9490622878074646f, 0.1351332813501358f, -0.3941422700881958f, 0.004169384017586708f, 0.26930779218673706f, 0.8109552264213562f, 0.15545742213726044f, 0.102641262114048f, 0.36635613441467285f, 0.7656313180923462f, -0.015638399869203568f, 0.5626364946365356f, 0.60660320520401f, 0.8759928345680237f, 0.4776349663734436f, 0.6707017421722412f, 0.06216634437441826f, 0.7944154739379883f, -0.8559041619300842f, 0.33509036898612976f, 0.7410001158714294f, 0.25082412362098694f, 0.37397319078445435f, 0.1760188490152359f, 0.44038867950439453f, 0.7205585241317749f, -0.05572398006916046f, 0.05685971677303314f, 0.8846626281738281f, 0.5168277621269226f, 0.8315814137458801f, 0.8729851841926575f, 0.9530291557312012f, 0.9023516178131104f, -0.5747236013412476f, 0.6941645741462708f, 0.7569423913955688f, 0.35734936594963074f, 0.7896062731742859f, 0.32909199595451355f, 0.7769509553909302f, 0.9107089042663574f, -0.8609774112701416f, 0.5406702756881714f, 0.8788456320762634f, 0.09407878667116165f, 0.5449047684669495f, 0.08004789799451828f, 0.41920626163482666f, 0.7434691190719604f, -0.9367178678512573f, 0.23661020398139954f, 0.664273738861084f, 0.5792757868766785f, 0.18142619729042053f, 0.9463620185852051f, 0.6059688925743103f, 0.8447571396827698f, -0.7109658122062683f, 0.7656036019325256f, 0.4111597239971161f, 0.08470601588487625f, 0.9481003880500793f, 0.19271914660930634f, 0.7592285871505737f, 0.9120123386383057f, -0.39590150117874146f, 0.20773708820343018f, 0.5898182392120361f, 0.7281332612037659f, 0.908596396446228f, 0.5439367294311523f, 0.27486297488212585f, 0.6029235124588013f, -0.472219318151474f, 0.7852831482887268f, 0.7093073129653931f, 0.7169013023376465f, 0.9975677728652954f, 0.4774650037288666f, 0.6811570525169373f, 0.6793038249015808f, -0.11447792500257492f, 0.03349784016609192f, 0.40111660957336426f, 0.055763036012649536f, 0.2982885241508484f, 0.031938906759023666f, 0.2920292615890503f, 0.12924519181251526f, -0.915117084980011f, 0.13509102165699005f, 0.033323682844638824f, 0.45092442631721497f, 0.24071034789085388f, 0.2895757257938385f, 0.9701871871948242f, 0.06338933855295181f, -0.6857168078422546f, 0.8493691682815552f, 0.4658844769001007f, 0.7817323803901672f, 0.24372510612010956f, 0.46814674139022827f, 0.5434326529502869f, 0.1870083510875702f, -0.7831511497497559f, 0.09297408908605576f, 0.15351761877536774f, 0.20036505162715912f, 0.17924544215202332f, 0.6105719208717346f, 0.3814656734466553f, 0.9182460308074951f, -0.12730588018894196f, 0.7391354441642761f, 0.7626371383666992f, 0.5899159908294678f, 0.15429066121578217f, 0.9838187098503113f, 0.8206751942634583f, 0.5557913184165955f, -0.8566687107086182f, 0.36743947863578796f, 0.197441965341568f, 0.34879451990127563f, 0.08952900022268295f, 0.8065697550773621f, 0.711189329624176f, 0.023168468847870827f, -0.4007379412651062f, 0.03539786487817764f, 0.38138699531555176f, 0.0005704914219677448f, 0.4647480249404907f, 0.7988265752792358f, 0.42005547881126404f, 0.12110809981822968f, -0.9250263571739197f, 0.9651793241500854f, 0.6374132037162781f, 0.9431817531585693f, 0.8913909792900085f, 0.9638698697090149f, 0.10536657273769379f, 0.9142216444015503f, -0.09247344732284546f, 0.5429978966712952f, 0.4198896586894989f, 0.9869391322135925f, 0.8470523953437805f, 0.4341953694820404f, 0.25264567136764526f, 0.619770348072052f, -0.33899176120758057f, 0.6008193492889404f, 0.6031297445297241f, 0.42927542328834534f, 0.14882875978946686f, 0.023977167904376984f, 0.7569643259048462f, 0.32179179787635803f, -0.5071777105331421f, 0.4718905985355377f, 0.7526112198829651f, 0.1390313357114792f, 0.8611719012260437f, 0.5013852119445801f, 0.2676656246185303f, 0.25660818815231323f, -0.183096244931221f, 0.13967891037464142f, 0.6203930377960205f, 0.45743662118911743f, 0.07643728703260422f, 0.8326098322868347f, 0.1551482230424881f, 0.0914476290345192f, -0.44416072964668274f, 0.7799756526947021f, 0.43501102924346924f, 0.6008460521697998f, 0.03355463221669197f, 0.7720829248428345f, 0.312173455953598f, 0.8634471893310547f, -0.5913782715797424f, 0.2321167290210724f, 0.412611186504364f, 0.257370263338089f, 0.9889753460884094f, 0.19729207456111908f, 0.20591570436954498f, 0.2948280870914459f, -0.2373211681842804f, 0.9719357490539551f, 0.5963024497032166f, 0.29174676537513733f, 0.9218248724937439f, 0.3328360617160797f, 0.8331387639045715f, 0.7868240475654602f, -0.6566796898841858f, 0.11188098043203354f, 0.9104672074317932f, 0.22038450837135315f, 0.9777699708938599f, 0.9459434747695923f, 0.05265610292553902f, 0.5764135122299194f, -0.02892560325562954f, 0.03500863537192345f, 0.06559604406356812f, 0.6320431232452393f, 0.9627847075462341f, 0.6113631129264832f, 0.146194189786911f, 0.38398635387420654f, -0.1516481339931488f, 0.8727790117263794f, 0.8583966493606567f, 0.9162805676460266f, 0.8081117868423462f, 0.8249426484107971f, 0.5676510334014893f, 0.6557797193527222f, -0.07115358114242554f, 0.8583621382713318f, 0.7087830305099487f, 0.6517683863639832f, 0.0372154675424099f, 0.8830097317695618f, 0.7660872340202332f, 0.10699757933616638f, -0.6778951287269592f, 0.4937162399291992f, 0.24496199190616608f, 0.06953255087137222f, 0.15216629207134247f, 0.3757782280445099f, 0.709985077381134f, 0.9404788017272949f, -0.24197834730148315f, 0.875282347202301f, 0.2350950539112091f, 0.8693494200706482f, 0.2234647572040558f, 0.1609480232000351f, 0.5309194922447205f, 0.4737657606601715f, -0.9976205825805664f, 0.3075754642486572f, 0.023811379447579384f, 0.8854823112487793f, 0.07640179246664047f, 0.025860635563731194f, 0.2955475151538849f, 0.2831481993198395f, -0.9716184139251709f, 0.8042572140693665f, 0.2920062839984894f, 0.6472099423408508f, 0.7530428171157837f, 0.5339102149009705f, 0.09312283247709274f, 0.8972517251968384f, -0.2302391529083252f, 0.9810234904289246f, 0.8544443845748901f, 0.9414316415786743f, 0.7889505624771118f, 0.7411698698997498f, 0.008757125586271286f, 0.2617546617984772f, -0.17004431784152985f, 0.5550775527954102f, 0.9644838571548462f, 0.761284351348877f, 0.7099866271018982f, 0.9461047649383545f, 0.5008956789970398f, 0.6151642799377441f, -0.6121829152107239f, 0.9996240139007568f, 0.2551173269748688f, 0.4050328731536865f, 0.5635873675346375f, 0.26787278056144714f, 0.8236581683158875f, 0.2232191562652588f, -0.04852156713604927f, 0.26440945267677307f, 0.921313464641571f, 0.9544477462768555f, 0.12876278162002563f, 0.6437650322914124f, 0.6569757461547852f, 0.3708394467830658f, -0.042461082339286804f, 0.7501153945922852f, 0.22921375930309296f, 0.5613901615142822f, 0.7496724724769592f, 0.9166321754455566f, 0.09409141540527344f, 0.9757943749427795f, -0.9046463966369629f, 0.17900368571281433f, 0.7609649896621704f, 0.2875477969646454f, 0.6955461502075195f, 0.21078598499298096f, 0.32954084873199463f, 0.9262716770172119f, -0.25247418880462646f, 0.02925734594464302f, 0.9502855539321899f, 0.14623941481113434f, 0.04673553258180618f, 0.608756959438324f, 0.45745256543159485f, 0.3939121961593628f, -0.2130630761384964f, 0.15560467541217804f, 0.03813568130135536f, 0.07859211415052414f, 0.4201876223087311f, 0.39100193977355957f, 0.8308178186416626f, 0.555492639541626f, -0.09015175700187683f, 0.5757625699043274f, 0.15937164425849915f, 0.30713969469070435f, 0.5869603753089905f, 0.7136351466178894f, 0.8513098359107971f, 0.8013846278190613f, -0.38542354106903076f, 0.2962934970855713f, 0.0648130252957344f, 0.8619766235351562f, 0.20867213606834412f, 0.2709263265132904f, 0.7931158542633057f, 0.23967473208904266f, -0.9768878817558289f, 0.43469545245170593f, 0.40451785922050476f, 0.5364834666252136f, 0.045514028519392014f, 0.783545196056366f, 0.045597366988658905f, 0.9130159616470337f, -0.8244937658309937f, 0.29604771733283997f, 0.9605045914649963f, 0.3517688512802124f, 0.7909899950027466f, 0.6267367601394653f, 0.324903666973114f, 0.8081892132759094f, -0.3353606164455414f, 0.5737735629081726f, 0.3173622786998749f, 0.6802349090576172f, 0.10157826542854309f, 0.6003993153572083f, 0.695041298866272f, 0.22733120620250702f, -0.6613648533821106f, 0.792127788066864f, 0.09171893447637558f, 0.9440019726753235f, 0.7217238545417786f, 0.45077183842658997f, 0.30391281843185425f, 0.4927472174167633f, -0.15367747843265533f, 0.5431295037269592f, 0.6741563081741333f, 0.7911004424095154f, 0.5339560508728027f, 0.19597101211547852f, 0.03825501725077629f, 0.6706081628799438f, -0.9904332756996155f, 0.44448137283325195f, 0.8553556203842163f, 0.9726470708847046f, 0.21354062855243683f, 0.6251053810119629f, 0.2827329635620117f, 0.41528835892677307f, -0.1487424373626709f, 0.5034641027450562f, 0.34436658024787903f, 0.6190438866615295f, 0.718425452709198f, 0.4933616816997528f, 0.15701033174991608f, 0.18083810806274414f, -0.04160480573773384f, 0.8362738490104675f, 0.752359926700592f, 0.6607713103294373f, 0.3411088287830353f, 0.5497353672981262f, 0.8664993643760681f, 0.8023867607116699f, -0.5418434143066406f, 0.7760578393936157f, 0.38510653376579285f, 0.8764508962631226f, 0.9953433275222778f, 0.5868661403656006f, 0.5472599267959595f, 0.3746141493320465f, -0.3941684663295746f, 0.6873875260353088f, 0.5180738568305969f, 0.2283748984336853f, 0.26341190934181213f, 0.24329493939876556f, 0.5651147961616516f, 0.09818897396326065f, -0.3813771903514862f, 0.08859949558973312f, 0.5011346936225891f, 0.9787418842315674f, 0.45863690972328186f, 0.19508075714111328f, 0.9464560151100159f, 0.18460413813591003f, -0.48285454511642456f, 0.6690672039985657f, 0.011327607557177544f, 0.886635959148407f, 0.12670831382274628f, 0.8344634175300598f, 0.21303576231002808f, 0.9903361201286316f, -0.9974676966667175f, 0.625837504863739f, 0.37034282088279724f, 0.7445782423019409f, 0.9640742540359497f, 0.641215980052948f, 0.30683013796806335f, 0.9631130695343018f, -0.5984596014022827f, 0.30426183342933655f, 0.3744676113128662f, 0.09202304482460022f, 0.1479109823703766f, 0.2685883641242981f, 0.005508306436240673f, 0.3834836781024933f, -0.5641466975212097f, 0.5460807681083679f, 0.2614704668521881f, 0.14758004248142242f, 0.405105859041214f, 0.40015020966529846f, 0.10715819895267487f, 0.6560660004615784f, -0.19786302745342255f, 0.5629675984382629f, 0.5711339712142944f, 0.915278971195221f, 0.9109115600585938f, 0.16133980453014374f, 0.984691321849823f, 0.4793170690536499f, -0.7870102524757385f, 0.2985795736312866f, 0.7949172258377075f, 0.921678900718689f, 0.8527989983558655f, 0.5795804858207703f, 0.8917873501777649f, 0.18391850590705872f, -0.049376264214515686f, 0.03496276214718819f, 0.8852554559707642f, 0.8295316100120544f, 0.6107553243637085f, 0.04398440197110176f, 0.5925895571708679f, 0.18128003180027008f, -0.16516292095184326f, 0.577867329120636f, 0.7012930512428284f, 0.527946949005127f, 0.38053154945373535f, 0.941746711730957f, 0.644178032875061f, 0.7286877036094666f, -0.48025527596473694f, 0.6938701272010803f, 0.263053297996521f, 0.5434345602989197f, 0.6900503039360046f, 0.8445508480072021f, 0.24816745519638062f, 0.4995254576206207f, -0.9251437187194824f, 0.4690643548965454f, 0.587532639503479f, 0.15356533229351044f, 0.518011748790741f, 0.708584189414978f, 0.665471613407135f, 0.4179159998893738f, -0.2619286775588989f, 0.7896315455436707f, 0.2593111991882324f, 0.21306335926055908f, 0.5561373233795166f, 0.18491853773593903f, 0.18914145231246948f, 0.4362950026988983f, -0.7668142318725586f, 0.15298378467559814f, 0.7582558393478394f, 0.553408682346344f, 0.006142911035567522f, 0.9517552852630615f, 0.834600031375885f, 0.8761930465698242f, -0.3730286657810211f, 0.47478967905044556f, 0.5116676092147827f, 0.6255168914794922f, 0.3668852746486664f, 0.6933405995368958f, 0.9142988920211792f, 0.8962354063987732f, -0.8363849520683289f, 0.9018120169639587f, 0.37367159128189087f, 0.11172707378864288f, 0.7432466745376587f, 0.42568039894104004f, 0.8440853357315063f, 0.6811791658401489f, -0.9739652872085571f, 0.7095328569412231f, 0.6258453726768494f, 0.9321867823600769f, 0.28567731380462646f, 0.16004031896591187f, 0.928221583366394f, 0.4682932198047638f, -0.6728033423423767f, 0.45422637462615967f, 0.9006820917129517f, 0.622493326663971f, 0.8174765706062317f, 0.7532594203948975f, 0.8702395558357239f, 0.614956796169281f, -0.6757739186286926f, 0.8277589082717896f, 0.25704920291900635f, 0.7581442594528198f, 0.04264257103204727f, 0.9076145887374878f, 0.7313598990440369f, 0.9602686166763306f, -0.18496793508529663f, 0.21354208886623383f, 0.9079195857048035f, 0.7029955983161926f, 0.3464880883693695f, 0.8162770867347717f, 0.7469685077667236f, 0.09611278772354126f, -0.9676019549369812f, 0.647880494594574f, 0.16003671288490295f, 0.9934067726135254f, 0.8754628896713257f, 0.9078615307807922f, 0.4913771450519562f, 0.07872465997934341f, -0.5204487442970276f, 0.33200985193252563f, 0.6073634028434753f, 0.04130310192704201f, 0.7810232639312744f, 0.8843774199485779f, 0.7086285948753357f, 0.9958426356315613f, -0.31790000200271606f, 0.09334303438663483f, 0.5095905065536499f, 0.20304809510707855f, 0.22425717115402222f, 0.5444309711456299f, 0.30982086062431335f, 0.18898019194602966f, -0.39499470591545105f, 0.7104973196983337f, 0.3023689389228821f, 0.14936983585357666f, 0.8951043486595154f, 0.5350731015205383f, 0.6362818479537964f, 0.14536884427070618f, -0.7159766554832458f, 0.8402668237686157f, 0.42277443408966064f, 0.9819446206092834f, 0.5815604329109192f, 0.8298920392990112f, 0.2456657588481903f, 0.5179193019866943f, -0.635002076625824f, 0.42253512144088745f, 0.7530344724655151f, 0.4051997661590576f, 0.8206124305725098f, 0.12707450985908508f, 0.43985500931739807f, 0.37509846687316895f, -0.35163572430610657f, 0.529150128364563f, 0.4840127229690552f, 0.9167166352272034f, 0.3366521894931793f, 0.7832621335983276f, 0.05623168125748634f, 0.3588826060295105f, -0.9776535630226135f, 0.4620829224586487f, 0.11245245486497879f, 0.08921575546264648f, 0.24584341049194336f, 0.026521028950810432f, 0.18080708384513855f, 0.27710598707199097f, -0.5376278162002563f, 0.41597166657447815f, 0.8289262652397156f, 0.15894795954227448f, 0.5498111248016357f, 0.20633113384246826f, 0.30309388041496277f, 0.12289053201675415f, -0.3362402319908142f, 0.3304944932460785f, 0.8787210583686829f, 0.07714958488941193f, 0.21767134964466095f, 0.7722057104110718f, 0.5068801045417786f, 0.07017076015472412f, -0.05446672812104225f, 0.8925707936286926f, 0.01840071752667427f, 0.1997142881155014f, 0.5496283173561096f, 0.42419177293777466f, 0.7829013466835022f, 0.9372300505638123f, -0.2263646423816681f, 0.910057544708252f, 0.46953946352005005f, 0.9727023243904114f, 0.7981176972389221f, 0.7522943019866943f, 0.5061867833137512f, 0.6222176551818848f, -0.8474730253219604f, 0.6590389609336853f, 0.11120055615901947f, 0.3644416630268097f, 0.13252083957195282f, 0.2045058310031891f, 0.4664309322834015f, 0.149965301156044f, -0.4245438575744629f, 0.12270602583885193f, 0.7622128129005432f, 0.09265734255313873f, 0.07727523148059845f, 0.07859931886196136f, 0.18893401324748993f, 0.8542779088020325f, -0.979069709777832f, 0.026001842692494392f, 0.9256742000579834f, 0.2954580783843994f, 0.4138757586479187f, 0.06663603335618973f, 0.07322806119918823f, 0.4853377640247345f, -0.8288593292236328f, 0.7975746989250183f, 0.4113594591617584f, 0.3914434015750885f, 0.0687233954668045f, 0.015930786728858948f, 0.309890478849411f, 0.17234152555465698f, -0.6733786463737488f, 0.6268067359924316f, 0.2114458531141281f, 0.7988678216934204f, 0.1916731894016266f, 0.7833173274993896f, 0.743143618106842f, 0.009693093597888947f, -0.01693768985569477f, 0.9257423877716064f, 0.4218791723251343f, 0.5585997700691223f, 0.6788370609283447f, 0.3533767759799957f, 0.8243109583854675f, 0.7715479135513306f, -0.2584224045276642f, 0.23257119953632355f, 0.8981675505638123f, 0.3659726679325104f, 0.7191193103790283f, 0.45129451155662537f, 0.1784813553094864f, 0.8132756948471069f, -0.5438653826713562f, 0.50180584192276f, 0.4223974645137787f, 0.5987582206726074f, 0.287420392036438f, 0.8272438049316406f, 0.599962055683136f, 0.8009018898010254f, -0.2055390626192093f, 0.5388213396072388f, 0.7953222990036011f, 0.976906418800354f, 0.11270494014024734f, 0.09987647086381912f, 0.785313069820404f, 0.1564103215932846f, -0.4527532458305359f, 0.6197271943092346f, 0.9088886380195618f, 0.32179558277130127f, 0.14342902600765228f, 0.5183727145195007f, 0.6001352667808533f, 0.493314266204834f, -0.24492958188056946f, 0.5689954161643982f, 0.437288373708725f, 0.1444416344165802f, 0.5546451210975647f, 0.26665231585502625f, 0.5688283443450928f, 0.2628230154514313f, -0.49820786714553833f, 0.9422752261161804f, 0.5491602420806885f, 0.8119193911552429f, 0.06854371726512909f, 0.49856385588645935f, 0.12758086621761322f, 0.6950381398200989f, -0.8973523378372192f, 0.7085297107696533f, 0.1033911481499672f, 0.7646450400352478f, 0.7173373699188232f, 0.09117016941308975f, 0.8784617781639099f, 0.6941430568695068f, -0.8871663212776184f, 0.9687736630439758f, 0.8527023196220398f, 0.23799659311771393f, 0.6000809073448181f, 0.2527574598789215f, 0.973836362361908f, 0.5001034736633301f, -0.37055718898773193f, 0.12052680552005768f, 0.47544461488723755f, 0.7480989694595337f, 0.8772831559181213f, 0.905596911907196f, 0.2724299132823944f, 0.7701270580291748f, -0.5545734167098999f, 0.36694979667663574f, 0.39126554131507874f, 0.2850789725780487f, 0.4338758885860443f, 0.061734963208436966f, 0.3793637156486511f, 0.2139706164598465f, -0.46599045395851135f, 0.43419647216796875f, 0.5332028269767761f, 0.5420579314231873f, 0.15402206778526306f, 0.34486815333366394f, 0.4944159686565399f, 0.38261741399765015f, -0.19280138611793518f, 0.0003538454184308648f, 0.3351622521877289f, 0.9439855813980103f, 0.630816638469696f, 0.22763028740882874f, 0.7197988629341125f, 0.8943166136741638f, -0.5434901118278503f, 0.23423071205615997f, 0.6908575296401978f, 0.92759770154953f, 0.4089511036872864f, 0.7353579998016357f, 0.22353363037109375f, 0.029106754809617996f, -0.19523495435714722f, 0.42592915892601013f, 0.7836815714836121f, 0.9726085066795349f, 0.07479426264762878f, 0.7009762525558472f, 0.5159069299697876f, 0.9571923017501831f, -0.8186147809028625f, 0.7459398508071899f, 0.25956133008003235f, 0.5177430510520935f, 0.9184516668319702f, 0.17929407954216003f, 0.893834114074707f, 0.6845125555992126f, -0.9364341497421265f, 0.035671666264534f, 0.9457685351371765f, 0.8727490901947021f, 0.44649872183799744f, 0.012485940009355545f, 0.9648953676223755f, 0.1282549947500229f, -0.6493239402770996f, 0.904880166053772f, 0.4976355731487274f, 0.30153074860572815f, 0.29110345244407654f, 0.4159877896308899f, 0.07884231954813004f, 0.3671603202819824f, -0.46719542145729065f, 0.26061326265335083f, 0.5842028260231018f, 0.9811488389968872f, 0.6800618171691895f, 0.9540634751319885f, 0.8888733386993408f, 0.6433219313621521f, -0.305309921503067f, 0.5807873010635376f, 0.7359471917152405f, 0.4457184076309204f, 0.7565143704414368f, 0.602370023727417f, 0.6142897605895996f, 0.9126349091529846f, -0.6735506057739258f, 0.9326567053794861f, 0.3332321345806122f, 0.9171470403671265f, 0.6498653888702393f, 0.6540703773498535f, 0.6908790469169617f, 0.6596338748931885f, -0.023348789662122726f, 0.1348007768392563f, 0.12044446915388107f, 0.021669557318091393f, 0.07400776445865631f, 0.35260769724845886f, 0.549329936504364f, 0.885087788105011f, -0.9381237030029297f, 0.4213968515396118f, 0.16182151436805725f, 0.9920276403427124f, 0.7689074277877808f, 0.6683995127677917f, 0.37397506833076477f, 0.9268506169319153f, -0.5371973514556885f, 0.8646385073661804f, 0.5448400378227234f, 0.6458491086959839f, 0.7562175393104553f, 0.03895300626754761f, 0.4845561385154724f, 0.11745757609605789f, -0.30459704995155334f, 0.8569848537445068f, 0.8517690300941467f, 0.4862665832042694f, 0.5720590353012085f, 0.7044697403907776f, 0.06913871318101883f, 0.8574113845825195f, -0.8710699081420898f, 0.08949190378189087f, 0.4312085211277008f, 0.23644396662712097f, 0.771388590335846f, 0.01973298192024231f, 0.6777477860450745f, 0.45660892128944397f, -0.24248111248016357f, 0.6980994343757629f, 0.7271937131881714f, 0.959662675857544f, 0.863506555557251f, 0.9754139184951782f, 0.8917611241340637f, 0.41385048627853394f, -0.08356010913848877f, 0.49382925033569336f, 0.2967846989631653f, 0.08271723985671997f, 0.3740461468696594f, 0.5245623588562012f, 0.18644213676452637f, 0.43321505188941956f, -0.8549153208732605f, 0.6816741824150085f, 0.3565124571323395f, 0.6510010361671448f, 0.09000895172357559f, 0.5808913707733154f, 0.9535579085350037f, 0.4997142255306244f, -0.4031287729740143f, 0.2915794849395752f, 0.8227657079696655f, 0.4218776822090149f, 0.8824841380119324f, 0.0346791036427021f, 0.5807449817657471f, 0.16925427317619324f, -0.8909933567047119f, 0.32174140214920044f, 0.8889937996864319f, 0.7122257947921753f, 0.4103727638721466f, 0.06890803575515747f, 0.5612239837646484f, 0.3363686800003052f, -0.68138587474823f, 0.8280645608901978f, 0.405568391084671f, 0.27289852499961853f, 0.11754167079925537f, 0.865017294883728f, 0.07390695065259933f, 0.22605720162391663f, -0.5991504192352295f, 0.5655038356781006f, 0.013448243029415607f, 0.3817788362503052f, 0.00023192174558062106f, 0.02981586381793022f, 0.9604929089546204f, 0.34057146310806274f, -0.39741450548171997f, 0.5897600054740906f, 0.8589064478874207f, 0.38361242413520813f, 0.6253991723060608f, 0.9960540533065796f, 0.655950665473938f, 0.3976384401321411f, -0.7810977697372437f, 0.09762301295995712f, 0.05772167071700096f, 0.46686726808547974f, 0.446812242269516f, 0.3795679211616516f, 0.5696738362312317f, 0.7410966157913208f, -0.7030643224716187f, 0.2710874378681183f, 0.06464404612779617f, 0.14424830675125122f, 0.1588638871908188f, 0.8390160799026489f, 0.019878700375556946f, 0.693142831325531f, -0.635662853717804f, 0.9930764436721802f, 0.5520342588424683f, 0.4958533048629761f, 0.7811242341995239f, 0.9074932932853699f, 0.708960235118866f, 0.045562464743852615f, -0.861546516418457f, 0.10474575310945511f, 0.9709967374801636f, 0.9348973631858826f, 0.32227712869644165f, 0.3651536703109741f, 0.46552789211273193f, 0.5922256708145142f, -0.7874557971954346f, 0.27054712176322937f, 0.7970820069313049f, 0.8687840104103088f, 0.12331545352935791f, 0.14919450879096985f, 0.4970439374446869f, 0.4232209324836731f, -0.9171646237373352f, 0.1900974065065384f, 0.3302340805530548f, 0.5532695651054382f, 0.14754028618335724f, 0.9947621822357178f, 0.3316832482814789f, 0.4047224521636963f, -0.5547870397567749f, 0.18159089982509613f, 0.7029035687446594f, 0.6662366390228271f, 0.4597175419330597f, 0.9938449263572693f, 0.6508486270904541f, 0.49457067251205444f, -0.6391886472702026f, 0.809927761554718f, 0.8295187950134277f, 0.8169699907302856f, 0.6985824108123779f, 0.721274733543396f, 0.41451868414878845f, 0.8836455941200256f, -0.15301035344600677f, 0.5215360522270203f, 0.6924465894699097f, 0.1266784816980362f, 0.6497663259506226f, 0.7236793637275696f, 0.6079990863800049f, 0.754190981388092f, -0.49958404898643494f, 0.7361701130867004f, 0.7745954394340515f, 0.32973334193229675f, 0.6011705994606018f, 0.44976213574409485f, 0.655564546585083f, 0.6525197625160217f, -0.7407925128936768f, 0.9921797513961792f, 0.1653125286102295f, 0.5307232141494751f, 0.3875713348388672f, 0.3718232810497284f, 0.2730114459991455f, 0.6542331576347351f, -0.9155259132385254f, 0.3981936573982239f, 0.8877066373825073f, 0.12585723400115967f, 0.5931613445281982f, 0.7007946968078613f, 0.8313655257225037f, 0.19041229784488678f, -0.056071992963552475f, 0.8775520324707031f, 0.5931506156921387f, 0.5295554399490356f, 0.020199930295348167f, 0.007187750656157732f, 0.49890705943107605f, 0.44307395815849304f, -0.0415969118475914f, 0.43825772404670715f, 0.23140856623649597f, 0.2623525857925415f, 0.5201368927955627f, 0.11842340975999832f, 0.5194467306137085f, 0.5449662804603577f, -0.8419175148010254f, 0.862845778465271f, 0.7369545102119446f, 0.8997739553451538f, 0.9506902694702148f, 0.7792516350746155f, 0.16908645629882812f, 0.5173951387405396f, -0.05093083158135414f, 0.0428900308907032f, 0.9716450572013855f, 0.571135401725769f, 0.5772769451141357f, 0.2550080120563507f, 0.7046663761138916f, 0.6010730266571045f, -0.6691240072250366f, 0.960567831993103f, 0.06353066116571426f, 0.33165574073791504f, 0.4638969600200653f, 0.6256901621818542f, 0.12602242827415466f, 0.11600972712039948f, -0.026360927149653435f, 0.26844295859336853f, 0.9199736714363098f, 0.15323735773563385f, 0.7773971557617188f, 0.9516456723213196f, 0.6914907097816467f, 0.7663447260856628f, -0.36724892258644104f, 0.5275505781173706f, 0.8728785514831543f, 0.20082929730415344f, 0.9445106387138367f, 0.8221352100372314f, 0.7205827236175537f, 0.5618849992752075f, -0.4530561566352844f, 0.7017512321472168f, 0.7795771956443787f, 0.13423854112625122f, 0.45261359214782715f, 0.580708920955658f, 0.6260254383087158f, 0.7518892884254456f, -0.7356866598129272f, 0.8336764574050903f, 0.1462617963552475f, 0.5974317789077759f, 0.863042950630188f, 0.7464902997016907f, 0.32912272214889526f, 0.855350136756897f, -0.42343688011169434f, 0.6168324947357178f, 0.9076586365699768f, 0.6638460159301758f, 0.8653425574302673f, 0.8151981234550476f, 0.04738243296742439f, 0.6852961778640747f, -0.29604896903038025f, 0.39004039764404297f, 0.5025851726531982f, 0.9557483792304993f, 0.24940122663974762f, 0.9485042095184326f, 0.538872480392456f, 0.7386822700500488f, -0.39646321535110474f, 0.9182835221290588f, 0.06617972254753113f, 0.23697447776794434f, 0.839539110660553f, 0.3716156780719757f, 0.31690046191215515f, 0.17037327587604523f, -0.2258276492357254f, 0.5810221433639526f, 0.523222804069519f, 0.5268309116363525f, 0.5566002130508423f, 0.019091205671429634f, 0.7231402397155762f, 0.9050281047821045f, -0.7776114344596863f, 0.04163634032011032f, 0.26088500022888184f, 0.8523324728012085f, 0.25768357515335083f, 0.42248573899269104f, 0.4899829030036926f, 0.5633457899093628f, -0.008641025982797146f, 0.32419389486312866f, 0.5762122273445129f, 0.8301464319229126f, 0.9375166893005371f, 0.15871529281139374f, 0.8907132148742676f, 0.867268979549408f, -0.8756611943244934f, 0.4533987045288086f, 0.08414452522993088f, 0.7092678546905518f, 0.4438495635986328f, 0.7219445109367371f, 0.6325488090515137f, 0.11486592888832092f, -0.057047050446271896f, 0.13107557594776154f, 0.10278073698282242f, 0.749092698097229f, 0.34488990902900696f, 0.4659130573272705f, 0.371565580368042f, 0.45258310437202454f, -0.7372241616249084f, 0.22317619621753693f, 0.808767557144165f, 0.6227247714996338f, 0.8903504014015198f, 0.9880383014678955f, 0.7456765174865723f, 0.056749142706394196f, -0.17909710109233856f, 0.4146718382835388f, 0.6397875547409058f, 0.19346681237220764f, 0.30033719539642334f, 0.43796515464782715f, 0.036521442234516144f, 0.7855824828147888f, -0.40126919746398926f, 0.36245816946029663f, 0.7154756188392639f, 0.8445553779602051f, 0.12230328470468521f, 0.4798928201198578f, 0.11951331049203873f, 0.9861404299736023f, -0.9468544125556946f, 0.5366407632827759f, 0.4433859586715698f, 0.7791962027549744f, 0.6846584677696228f, 0.8579397201538086f, 0.6733234524726868f, 0.9649763107299805f, -0.6384397745132446f, 0.27478358149528503f, 0.9696103930473328f, 0.7488610744476318f, 0.6179885864257812f, 0.23175852000713348f, 0.3777003586292267f, 0.32165828347206116f, -0.3466435968875885f, 0.9016608595848083f, 0.6992602348327637f, 0.15761525928974152f, 0.12843330204486847f, 0.17118199169635773f, 0.7484408020973206f, 0.10593696683645248f, -0.8938823938369751f, 0.10412676632404327f, 0.45759421586990356f, 0.27397671341896057f, 0.47883227467536926f, 0.03194144368171692f, 0.8030307292938232f, 0.38974353671073914f, -0.900877833366394f, 0.9919346570968628f, 0.8359882831573486f, 0.280291348695755f, 0.7962880730628967f, 0.050277262926101685f, 0.916737973690033f, 0.7674774527549744f, -0.49175846576690674f, 0.709013044834137f, 0.0547620989382267f, 0.027507234364748f, 0.11173591762781143f, 0.6771813035011292f, 0.7906509041786194f, 0.863330066204071f, -0.8993011116981506f, 0.6239309906959534f, 0.6906144022941589f, 0.1896914839744568f, 0.9171526432037354f, 0.9716116189956665f, 0.02617592364549637f, 0.9398753643035889f, -0.8727362751960754f, 0.885647177696228f, 0.19801874458789825f, 0.7734910845756531f, 0.054464563727378845f, 0.9375045895576477f, 0.2993529438972473f, 0.3161943554878235f, -0.5872412919998169f, 0.3487091064453125f, 0.24572345614433289f, 0.057702839374542236f, 0.9341103434562683f, 0.8465935587882996f, 0.6698520183563232f, 0.5858961343765259f, -0.9297887086868286f, 0.4039348363876343f, 0.741193950176239f, 0.6769829392433167f, 0.5916759967803955f, 0.19331641495227814f, 0.5289457440376282f, 0.35296517610549927f, -0.09073622524738312f, 0.710758626461029f, 0.06811884045600891f, 0.15691211819648743f, 0.15554110705852509f, 0.537395715713501f, 0.6399893164634705f, 0.3102248013019562f, -0.2227439284324646f, 0.7684405446052551f, 0.6495866179466248f, 0.16744081676006317f, 0.34274742007255554f, 0.6874616146087646f, 0.020267698913812637f, 0.4673866927623749f, -0.06166979297995567f, 0.7075294256210327f, 0.47834131121635437f, 0.37381792068481445f, 0.1569325029850006f, 0.6852728128433228f, 0.10994311422109604f, 0.705962061882019f, -0.003283668076619506f, 0.5443676114082336f, 0.781616747379303f, 0.7097291946411133f, 0.2545146346092224f, 0.8604431748390198f, 0.35907459259033203f, 0.4557513892650604f, -0.55193692445755f, 0.707905650138855f, 0.08072388172149658f, 0.7789795994758606f, 0.5086484551429749f, 0.7941063642501831f, 0.5381912589073181f, 0.45145243406295776f, -0.7025485038757324f, 0.14898627996444702f, 0.11186519265174866f, 0.36333850026130676f, 0.16336092352867126f, 0.06988176703453064f, 0.3866298496723175f, 0.28773537278175354f, -0.1363101601600647f, 0.6254558563232422f, 0.6355689764022827f, 0.5528642535209656f, 0.10381551831960678f, 0.824125349521637f, 0.42930084466934204f, 0.22371657192707062f, -0.9913948774337769f, 0.5625874996185303f, 0.13244906067848206f, 0.9856342673301697f, 0.40906819701194763f, 0.45350512862205505f, 0.8765644431114197f, 0.9452416896820068f, -0.6067332625389099f, 0.04371792450547218f, 0.6214206218719482f, 0.4148333668708801f, 0.05961346998810768f, 0.12632925808429718f, 0.2596105635166168f, 0.812911331653595f, -0.22277219593524933f, 0.39612749218940735f, 0.3892271816730499f, 0.1778634786605835f, 0.5763795971870422f, 0.4313110113143921f, 0.8921431303024292f, 0.620438277721405f, -0.8468148112297058f, 0.7662768363952637f, 0.369465708732605f, 0.877784013748169f, 0.5565646886825562f, 0.29648250341415405f, 0.6441013813018799f, 0.5970914363861084f, -0.5135436654090881f, 0.30243009328842163f, 0.5045496225357056f, 0.5892494916915894f, 0.010309712029993534f, 0.5110365748405457f, 0.3322920501232147f, 0.10046109557151794f, -0.3182286322116852f, 0.583412230014801f, 0.6269221305847168f, 0.8717913627624512f, 0.4166729748249054f, 0.18441930413246155f, 0.9433026909828186f, 0.3042832911014557f, -0.2670038938522339f, 0.21939261257648468f, 0.8417245745658875f, 0.371280699968338f, 0.5934112668037415f, 0.03351539373397827f, 0.6138454675674438f, 0.178282231092453f, -0.3983653485774994f, 0.011935972608625889f, 0.1542968600988388f, 0.6241846084594727f, 0.7092992663383484f, 0.5385780334472656f, 0.8040559887886047f, 0.5591136813163757f, -0.6869184970855713f, 0.21789978444576263f, 0.09548773616552353f, 0.2459525167942047f, 0.0972665324807167f, 0.6686098575592041f, 0.9178776144981384f, 0.6484200358390808f, -0.7282395362854004f, 0.10591381043195724f, 0.701198160648346f, 0.8738538026809692f, 0.0016683753347024322f, 0.3142552077770233f, 0.5560232996940613f, 0.6096855401992798f, -0.38167378306388855f, 0.39091646671295166f, 0.027226850390434265f, 0.14400340616703033f, 0.13757413625717163f, 0.8500956296920776f, 0.030576195567846298f, 0.8173727989196777f, -0.6621379852294922f, 0.5097590088844299f, 0.45946839451789856f, 0.08455345779657364f, 0.9800602793693542f, 0.44724148511886597f, 0.5255745649337769f, 0.34071066975593567f, -0.41940778493881226f, 0.524110734462738f, 0.42715927958488464f, 0.06887450069189072f, 0.6639610528945923f, 0.0436672605574131f, 0.08222535252571106f, 0.3115115463733673f, -0.38886335492134094f, 0.8207355737686157f, 0.012663737870752811f, 0.6298088431358337f, 0.6600008606910706f, 0.19943219423294067f, 0.23074419796466827f, 0.7605410814285278f, -0.008788219653069973f, 0.6590012907981873f, 0.7858361005783081f, 0.34464502334594727f, 0.8777232766151428f, 0.8254051804542542f, 0.9189988970756531f, 0.23405013978481293f, -0.4063561260700226f, 0.2838032841682434f, 0.21275167167186737f, 0.55016028881073f, 0.5945594310760498f, 0.3429712951183319f, 0.2536669075489044f, 0.4622984230518341f, -0.15203960239887238f, 0.2508876323699951f, 0.5790804028511047f, 0.05286594107747078f, 0.8341023325920105f, 0.8565414547920227f, 0.33198386430740356f, 0.5965681076049805f, -0.7905765175819397f, 0.48120078444480896f, 0.3780752718448639f, 0.11035269498825073f, 0.8306679725646973f, 0.8831413388252258f, 0.4434286057949066f, 0.2399500459432602f, -0.9672672152519226f, 0.4342055022716522f, 0.49780386686325073f, 0.15264344215393066f, 0.10150345414876938f, 0.642096221446991f, 0.03652616962790489f, 0.7298201322555542f, -0.06999026238918304f, 0.38695064187049866f, 0.40673255920410156f, 0.6246073842048645f, 0.4454566538333893f, 0.09529952704906464f, 0.6089017987251282f, 0.9780850410461426f, -0.13061244785785675f, 0.2573893070220947f, 0.1758720874786377f, 0.9605790972709656f, 0.22210867702960968f, 0.9603413939476013f, 0.5410769581794739f, 0.10853677242994308f, -0.8700067400932312f, 0.341079443693161f, 0.29491546750068665f, 0.913337230682373f, 0.6737116575241089f, 0.1872100830078125f, 0.8657957315444946f, 0.2492842823266983f, -0.8027249574661255f, 0.9381273984909058f, 0.13867080211639404f, 0.6301609873771667f, 0.14252333343029022f, 0.17933745682239532f, 0.33998143672943115f, 0.44590315222740173f, -0.5726522207260132f, 0.8557055592536926f, 0.10135317593812943f, 0.5030397176742554f, 0.7809653878211975f, 0.852866530418396f, 0.10034652054309845f, 0.19967086613178253f, -0.8478392958641052f, 0.9839821457862854f, 0.7744066119194031f, 0.6939817070960999f, 0.49090859293937683f, 0.4953497648239136f, 0.8410412669181824f, 0.8728727698326111f, -0.916652262210846f, 0.061146993190050125f, 0.9128919243812561f, 0.521712064743042f, 0.4546501040458679f, 0.7381760478019714f, 0.9149380922317505f, 0.5632997155189514f, -0.808247983455658f, 0.1554519087076187f, 0.6295226812362671f, 0.7787866592407227f, 0.8004422783851624f, 0.9029228091239929f, 0.5382003784179688f, 0.7070123553276062f, -0.8603086471557617f, 0.05657382681965828f, 0.5609371662139893f, 0.8941525220870972f, 0.7179728746414185f, 0.9212024211883545f, 0.7307766675949097f, 0.09798867255449295f, -0.5957114100456238f, 0.28949132561683655f, 0.46413400769233704f, 0.4308135211467743f, 0.9636873006820679f, 0.2744552195072174f, 0.8118507266044617f, 0.05061620846390724f, -0.5278590321540833f, 0.454677939414978f, 0.5124320983886719f, 0.8105030059814453f, 0.030544109642505646f, 0.5642328858375549f, 0.9033397436141968f, 0.7409629225730896f, -0.41462668776512146f, 0.28200891613960266f, 0.0636584684252739f, 0.012365825474262238f, 0.1525285542011261f, 0.9668785929679871f, 0.5411980152130127f, 0.5387870669364929f, -0.042839329689741135f, 0.5832463502883911f, 0.26647713780403137f, 0.5991941690444946f, 0.5846763849258423f, 0.5770500302314758f, 0.028005355969071388f, 0.8483461141586304f, -0.9480457901954651f, 0.32549577951431274f, 0.6579106450080872f, 0.02616022527217865f, 0.8347219228744507f, 0.8175514936447144f, 0.4430927336215973f, 0.7071930170059204f, -0.31220197677612305f, 0.6162671446800232f, 0.44918572902679443f, 0.5451298952102661f, 0.8881919980049133f, 0.5382782816886902f, 0.6926308870315552f, 0.38873162865638733f, -0.6923744082450867f, 0.7342716455459595f, 0.23887091875076294f, 0.14759880304336548f, 0.3385187089443207f, 0.8615862727165222f, 0.5787883400917053f, 0.40736714005470276f, -0.5659714341163635f, 0.6317517161369324f, 0.23725388944149017f, 0.9582233428955078f, 0.5078806281089783f, 0.9666696786880493f, 0.84642493724823f, 0.8324905037879944f, -0.6925447583198547f, 0.25867992639541626f, 0.5194672346115112f, 0.5933378338813782f, 0.5007231831550598f, 0.9358002543449402f, 0.48518452048301697f, 0.7742857933044434f, -0.8474887609481812f, 0.36035048961639404f, 0.05709578096866608f, 0.7281826138496399f, 0.056799065321683884f, 0.7733765244483948f, 0.22762221097946167f, 0.1896517276763916f, -0.9455147385597229f, 0.3803730607032776f, 0.9700945615768433f, 0.07116082310676575f, 0.2748677134513855f, 0.714898943901062f, 0.764710009098053f, 0.25165680050849915f, -0.6488096117973328f, 0.18132862448692322f, 0.39957571029663086f, 0.8197836875915527f, 0.41878896951675415f, 0.2603900134563446f, 0.8513904213905334f, 0.06486332416534424f, -0.1607232391834259f, 0.20571769773960114f, 0.6243146061897278f, 0.6621947288513184f, 0.7344430088996887f, 0.807942271232605f, 0.006891204044222832f, 0.2973162829875946f, -0.26241424679756165f, 0.13482855260372162f, 0.3438999056816101f, 0.1697881519794464f, 0.10485900193452835f, 0.36400526762008667f, 0.9422839283943176f, 0.8303740620613098f, -0.6227603554725647f, 0.7131972908973694f, 0.7337158918380737f, 0.1713576465845108f, 0.34887707233428955f, 0.2232305109500885f, 0.34500208497047424f, 0.17587128281593323f, -0.39604437351226807f, 0.7627406120300293f, 0.9962481260299683f, 0.8580620288848877f, 0.9987349510192871f, 0.18615803122520447f, 0.5463152527809143f, 0.14845016598701477f, -0.6307051181793213f, 0.9998037815093994f, 0.7833966016769409f, 0.6822342276573181f, 0.9394944310188293f, 0.40550678968429565f, 0.6920673847198486f, 0.7549446821212769f, -0.2973234951496124f, 0.9693022966384888f, 0.026740849018096924f, 0.7318828701972961f, 0.29252132773399353f, 0.7786511182785034f, 0.5004581212997437f, 0.08693813532590866f, -0.031911615282297134f, 0.33195629715919495f, 0.14075824618339539f, 0.11234671622514725f, 0.965217649936676f, 0.1324475258588791f, 0.3095289468765259f, 0.883931040763855f, -0.3418927490711212f, 0.3999195098876953f, 0.14099685847759247f, 0.5190558433532715f, 0.6022642254829407f, 0.019984349608421326f, 0.10725365579128265f, 0.9657295942306519f, -0.7678876519203186f, 0.6199920773506165f, 0.024575166404247284f, 0.7418535351753235f, 0.14726857841014862f, 0.7120387554168701f, 0.38571763038635254f, 0.6683090925216675f, -0.5560785531997681f, 0.836812436580658f, 0.43830376863479614f, 0.7556951642036438f, 0.17334391176700592f, 0.5739743113517761f, 0.8658677339553833f, 0.9075925946235657f, -0.05989538133144379f, 0.6255919933319092f, 0.830488920211792f, 0.052992068231105804f, 0.14486968517303467f, 0.7004730701446533f, 0.17240536212921143f, 0.8410204648971558f, -0.2144060581922531f, 0.9175940155982971f, 0.5414848923683167f, 0.4179702699184418f, 0.4035179018974304f, 0.7313283085823059f, 0.8058246970176697f, 0.1627219170331955f, -0.9714383482933044f, 0.08947145938873291f, 0.6538006663322449f, 0.44046515226364136f, 0.2594457268714905f, 0.41382527351379395f, 0.19109362363815308f, 0.44840648770332336f, -0.37997475266456604f, 0.9926891922950745f, 0.15517263114452362f, 0.08373963832855225f, 0.4971633851528168f, 0.20007988810539246f, 0.3061412274837494f, 0.46885883808135986f, -0.3674871325492859f, 0.311562716960907f, 0.684380054473877f, 0.5688530206680298f, 0.051766104996204376f, 0.8024843335151672f, 0.9693447947502136f, 0.35931143164634705f, -0.13512378931045532f, 0.45774179697036743f, 0.988280713558197f, 0.5780206918716431f, 0.7389180064201355f, 0.07637238502502441f, 0.6937816143035889f, 0.6016406416893005f, -0.050516389310359955f, 0.30529987812042236f, 0.3958769738674164f, 0.4278322160243988f, 0.8190206289291382f, 0.46257367730140686f, 0.9211657047271729f, 0.5123095512390137f, -0.3837595582008362f, 0.06155259907245636f, 0.9832792282104492f, 0.9472563862800598f, 0.604557454586029f, 0.6713085770606995f, 0.07622699439525604f, 0.1946197748184204f, -0.6863469481468201f, 0.22866778075695038f, 0.6258184313774109f, 0.5704471468925476f, 0.88714599609375f, 0.7691066861152649f, 0.36320504546165466f, 0.8138633370399475f, -0.4726933240890503f, 0.7322676777839661f, 0.23522213101387024f, 0.8019797801971436f, 0.7303545475006104f, 0.4074445962905884f, 0.3851357400417328f, 0.20197591185569763f, -0.13884194195270538f, 0.40173396468162537f, 0.8724960684776306f, 0.06189331039786339f, 0.4739001393318176f, 0.1823575645685196f, 0.5075441002845764f, 0.4713486135005951f, -0.3133333921432495f, 0.506558358669281f, 0.5271027088165283f, 0.17009717226028442f, 0.48559319972991943f, 0.7238346338272095f, 0.8848679065704346f, 0.9042202234268188f, -0.8004668951034546f, 0.2196241021156311f, 0.5720790028572083f, 0.6086868643760681f, 0.12913314998149872f, 0.14331883192062378f, 0.4782121777534485f, 0.06476152688264847f, -0.2707536816596985f, 0.04184640944004059f, 0.00402465695515275f, 0.605954110622406f, 0.7700033783912659f, 0.014650053344666958f, 0.18812745809555054f, 0.8818637728691101f, -0.3538709878921509f, 0.014734008349478245f, 0.5423263907432556f, 0.5352851748466492f, 0.41884034872055054f, 0.7486311793327332f, 0.8781949281692505f, 0.5945702195167542f, -0.553571343421936f, 0.30958089232444763f, 0.2447148561477661f, 0.6122839450836182f, 0.44181132316589355f, 0.4794240891933441f, 0.19312378764152527f, 0.07232069224119186f, -0.6656617522239685f, 0.2385260909795761f, 0.08195449411869049f, 0.17688047885894775f, 0.014317719265818596f, 0.4392175078392029f, 0.08692943304777145f, 0.7481346130371094f, -0.32293397188186646f, 0.43433287739753723f, 0.7289644479751587f, 0.13794851303100586f, 0.4437037706375122f, 0.8255017399787903f, 0.9176467061042786f, 0.14350412786006927f, -0.9042889475822449f, 0.024016743525862694f, 0.6156308650970459f, 0.2667912542819977f, 0.6490708589553833f, 0.22650675475597382f, 0.3021487295627594f, 0.8393789529800415f, -0.050586819648742676f, 0.22230850160121918f, 0.7735716700553894f, 0.1212683618068695f, 0.25435712933540344f, 0.6230965852737427f, 0.2509136199951172f, 0.3292880356311798f, -0.6881545186042786f, 0.2129141092300415f, 0.43132829666137695f, 0.9237195253372192f, 0.6101120710372925f, 0.15526966750621796f, 0.8273525834083557f, 0.14156366884708405f, -0.14507411420345306f, 0.3117932975292206f, 0.1091211810708046f, 0.5463243722915649f, 0.7126020789146423f, 0.7892510294914246f, 0.21647250652313232f, 0.12090970575809479f, -0.04259253665804863f, 0.9152112603187561f, 0.35346150398254395f, 0.725669801235199f, 0.811773419380188f, 0.1016753539443016f, 0.7824621200561523f, 0.4211890697479248f, -0.05443219095468521f, 0.5524899363517761f, 0.7121386528015137f, 0.8229703903198242f, 0.011169240809977055f, 0.9201413989067078f, 0.4027768671512604f, 0.6838198900222778f, -0.8426976799964905f, 0.42166754603385925f, 0.06171945855021477f, 0.20014630258083344f, 0.30965179204940796f, 0.18516941368579865f, 0.4060719609260559f, 0.021395593881607056f, -0.0745164230465889f, 0.955014169216156f, 0.4592737555503845f, 0.37504398822784424f, 0.4826611876487732f, 0.6002837419509888f, 0.8749001622200012f, 0.10187031328678131f, -0.7547332048416138f, 0.39021390676498413f, 0.5317190289497375f, 0.8231492042541504f, 0.15008988976478577f, 0.01715349592268467f, 0.5591834187507629f, 0.03124421276152134f, -0.29467499256134033f, 0.3686133325099945f, 0.8939729928970337f, 0.6028462052345276f, 0.07248661667108536f, 0.422424852848053f, 0.8102875351905823f, 0.9767305254936218f, -0.9835657477378845f, 0.24107807874679565f, 0.9891992807388306f, 0.16873957216739655f, 0.9815436601638794f, 0.7962912321090698f, 0.2180182784795761f, 0.5240694880485535f, -0.0771050900220871f, 0.40917330980300903f, 0.08447771519422531f, 0.7529621720314026f, 0.5414742231369019f, 0.297078937292099f, 0.6907907128334045f, 0.8203311562538147f, -0.826413631439209f, 0.8361658453941345f, 0.9764136672019958f, 0.6314533352851868f, 0.6474757790565491f, 0.4586411714553833f, 0.6693472266197205f, 0.5068139433860779f, -0.6437434554100037f, 0.6344888806343079f, 0.8378706574440002f, 0.968479573726654f, 0.5370219945907593f, 0.998403012752533f, 0.9878107309341431f, 0.9867854714393616f, -0.8461803793907166f, 0.5921627283096313f, 8.483971032546833e-05f, 0.3183756470680237f, 0.9787527322769165f, 0.2745174169540405f, 0.15694735944271088f, 0.022210562601685524f, -0.36331504583358765f, 0.9463760852813721f, 0.25524377822875977f, 0.2737308144569397f, 0.039302192628383636f, 0.7299782037734985f, 0.24655213952064514f, 0.9741951823234558f, -0.6835218071937561f, 0.6675282716751099f, 0.03172135353088379f, 0.5174742937088013f, 0.3505744934082031f, 0.7836264371871948f, 0.7979071736335754f, 0.9728307127952576f, -0.3003779351711273f, 0.6991623044013977f, 0.1262093186378479f, 0.14745861291885376f, 0.6155964136123657f, 0.8698604106903076f, 0.17937088012695312f, 0.7838676571846008f, -0.5321921706199646f, 0.8067259788513184f, 0.8873356580734253f, 0.9846228361129761f, 0.6888646483421326f, 0.09113959223031998f, 0.9369051456451416f, 0.5136660933494568f, -0.5290818810462952f, 0.941155195236206f, 0.6457819938659668f, 0.08003683388233185f, 0.7031726837158203f, 0.9743689298629761f, 0.09554015100002289f, 0.17978455126285553f, -0.2953212857246399f, 0.8722905516624451f, 0.7215217351913452f, 0.1368778496980667f, 0.36324945092201233f, 0.1898510605096817f, 0.498139351606369f, 0.5788564085960388f, -0.968830406665802f, 0.4835992157459259f, 0.7248443365097046f, 0.9813467264175415f, 0.6218180060386658f, 0.5746427774429321f, 0.8831740617752075f, 0.6131341457366943f, -0.3134967088699341f, 0.2123957723379135f, 0.2421252727508545f, 0.30410298705101013f, 0.848389744758606f, 0.5909835696220398f, 0.9368662238121033f, 0.4781763255596161f, -0.23087407648563385f, 0.8703815937042236f, 0.6273272037506104f, 0.6719515919685364f, 0.7957238554954529f, 0.28706368803977966f, 0.7622666954994202f, 0.5074629783630371f, -0.7379113435745239f, 0.9649437069892883f, 0.9259257912635803f, 0.26946109533309937f, 0.04215260222554207f, 0.5724170207977295f, 0.12500575184822083f, 0.6470443606376648f, -0.6105988025665283f, 0.06659136712551117f, 0.7699805498123169f, 0.9236717820167542f, 0.4981052875518799f, 0.2685336470603943f, 0.16707389056682587f, 0.5594112873077393f, -0.9908351302146912f, 0.49257200956344604f, 0.6178444027900696f, 0.3629229664802551f, 0.855919599533081f, 0.5557548403739929f, 0.4592917263507843f, 0.7265390157699585f, -0.6462175846099854f, 0.04917577654123306f, 0.09486232697963715f, 0.13945500552654266f, 0.42999324202537537f, 0.22078727185726166f, 0.33602041006088257f, 0.3452603220939636f, -0.23798812925815582f, 0.3535110354423523f, 0.0577220544219017f, 0.7880470752716064f, 0.09840046614408493f, 0.6961143612861633f, 0.13698112964630127f, 0.35154834389686584f, -0.9249104261398315f, 0.8350852727890015f, 0.6506111025810242f, 0.7861210107803345f, 0.5319370031356812f, 0.7363384962081909f, 0.9032660126686096f, 0.8327857255935669f, -0.5668654441833496f, 0.018713846802711487f, 0.5350425839424133f, 0.0001288993953494355f, 0.831549346446991f, 0.5277363061904907f, 0.4972880184650421f, 0.7123249769210815f, -0.09110477566719055f, 0.8466680645942688f, 0.8223631381988525f, 0.5267462134361267f, 0.7647098302841187f, 0.26806333661079407f, 0.22717618942260742f, 0.7563540935516357f, -0.12931036949157715f, 0.32731106877326965f, 0.5969735980033875f, 0.13274864852428436f, 0.9490395784378052f, 0.2693551480770111f, 0.22572894394397736f, 0.663489818572998f, -0.7159563899040222f, 0.798805296421051f, 0.21312132477760315f, 0.17883868515491486f, 0.12081315368413925f, 0.37582921981811523f, 0.3794640004634857f, 0.6722767353057861f, -0.008470878936350346f, 0.936212420463562f, 0.6895695328712463f, 0.24694697558879852f, 0.38395845890045166f, 0.21915145218372345f, 0.15472783148288727f, 0.8643792867660522f, -0.5709616541862488f, 0.6595275402069092f, 0.8874735832214355f, 0.7006044983863831f, 0.38168707489967346f, 0.7276337742805481f, 0.2974171042442322f, 0.2585064768791199f, -0.735336422920227f, 0.4539033770561218f, 0.7097203135490417f, 0.5821508169174194f, 0.031890541315078735f, 0.4830780029296875f, 0.5937584638595581f, 0.0367620475590229f, -0.649564266204834f, 0.5742663145065308f, 0.6445016264915466f, 0.053424738347530365f, 0.48074859380722046f, 0.843521773815155f, 0.8742074966430664f, 0.7669440507888794f, -0.537817120552063f, 0.3997623324394226f, 0.19322173297405243f, 0.3142634630203247f, 0.9396269917488098f, 0.35120493173599243f, 0.835405707359314f, 0.5433647036552429f, -0.27752554416656494f, 0.22641026973724365f, 0.4127315282821655f, 0.16502796113491058f, 0.6196577548980713f, 0.8748912215232849f, 0.4231988191604614f, 0.8461341261863708f, -0.538770854473114f, 0.5429622530937195f, 0.7715332508087158f, 0.4515422284603119f, 0.5673112869262695f, 0.7283257842063904f, 0.24747425317764282f, 0.2993665933609009f, -0.12834306061267853f, 0.42734721302986145f, 0.04961247369647026f, 0.9539231657981873f, 0.3657335937023163f, 0.12242598831653595f, 0.05228004977107048f, 0.8103463053703308f, -0.7923165559768677f, 0.8016811609268188f, 0.0030147135257720947f, 0.8466923236846924f, 0.8323585391044617f, 0.3116097152233124f, 0.9183052778244019f, 0.20230227708816528f, -0.15019962191581726f, 0.8141474723815918f, 0.9966683983802795f, 0.5403276085853577f, 0.28751304745674133f, 0.1895093321800232f, 0.7005000114440918f, 0.3541784882545471f, -0.7426652908325195f, 0.1885971873998642f, 0.916846513748169f, 0.026086900383234024f, 0.28614547848701477f, 0.3373873829841614f, 0.24760836362838745f, 0.3554852604866028f, -0.4369259178638458f, 0.9143813252449036f, 0.16404275596141815f, 0.7342933416366577f, 0.32145512104034424f, 0.9568206071853638f, 0.19835609197616577f, 0.05364439636468887f, -0.625396728515625f, 0.8747464418411255f, 0.16835474967956543f, 0.6180472373962402f, 0.39703357219696045f, 0.4797811508178711f, 0.8163659572601318f, 0.16738703846931458f, -0.6549625396728516f, 0.5812298059463501f, 0.2747138440608978f, 0.3100799024105072f, 0.351013720035553f, 0.8421410322189331f, 0.5266721844673157f, 0.15168820321559906f, -0.3087114095687866f, 0.826028048992157f, 0.7800272703170776f, 0.561997652053833f, 0.9133886694908142f, 0.3801001310348511f, 0.7085638642311096f, 0.7741738557815552f, -0.4348527491092682f, 0.8024892210960388f, 0.4470214247703552f, 0.025203168392181396f, 0.14578451216220856f, 0.13088107109069824f, 0.4679727554321289f, 0.6239373683929443f, -0.2005772441625595f, 0.969950258731842f, 0.761026918888092f, 0.18573437631130219f, 0.45840540528297424f, 0.5017170906066895f, 0.463076114654541f, 0.13432012498378754f, -0.13351717591285706f, 0.8928523063659668f, 0.4937794804573059f, 0.3039979040622711f, 0.8451482653617859f, 0.8913323879241943f, 0.43150702118873596f, 0.8788416981697083f, -0.6950298547744751f, 0.006471330299973488f, 0.9606835246086121f, 0.32699641585350037f, 0.805340051651001f, 0.5577394962310791f, 0.5970262289047241f, 0.7053236961364746f, -0.9161101579666138f, 0.540399432182312f, 0.5556789040565491f, 0.750504732131958f, 0.709051787853241f, 0.5841607451438904f, 0.14704056084156036f, 0.392869770526886f, -0.8816334009170532f, 0.49225088953971863f, 0.4564845561981201f, 0.5529015064239502f, 0.999424397945404f, 0.46046218276023865f, 0.7184696197509766f, 0.5391700863838196f, -0.921970546245575f, 0.7781166434288025f, 0.9569298624992371f, 0.4680142402648926f, 0.06928420066833496f, 0.2923167049884796f, 0.5000641942024231f, 0.12561379373073578f, -0.07015307247638702f, 0.8528094291687012f, 0.09145331382751465f, 0.40482208132743835f, 0.1832711398601532f, 0.8842129111289978f, 0.6330103874206543f, 0.1273336559534073f, -0.7312286496162415f, 0.5873199701309204f, 0.11974307149648666f, 0.6209946870803833f, 0.777276337146759f, 0.5791158080101013f, 0.3366360664367676f, 0.571943998336792f, -0.9430015087127686f, 0.2967003583908081f, 0.07121162861585617f, 0.4401717185974121f, 0.40782788395881653f, 0.3144240379333496f, 0.008303048089146614f, 0.5730811953544617f, -0.10390865802764893f, 0.4724791646003723f, 0.7883334755897522f, 0.836649477481842f, 0.6874783635139465f, 0.35822170972824097f, 0.7036668062210083f, 0.4639604091644287f, -0.7564786672592163f, 0.6221683025360107f, 0.30395448207855225f, 0.49296891689300537f, 0.7007388472557068f, 0.6092488765716553f, 0.917797327041626f, 0.9153348207473755f, -0.7646695971488953f, 0.8480907082557678f, 0.3166007101535797f, 0.6326658725738525f, 0.9509583115577698f, 0.1229153573513031f, 0.2105139195919037f, 0.628856360912323f, -0.3511291742324829f, 0.49738121032714844f, 0.27389711141586304f, 0.5067569017410278f, 0.498129278421402f, 0.3982817530632019f, 0.5639708638191223f, 0.09428811818361282f, -0.48137396574020386f, 0.9223377108573914f, 0.650699257850647f, 0.6210209131240845f, 0.6877498626708984f, 0.07604209333658218f, 0.7982264161109924f, 0.5868778824806213f, -0.020189139991998672f, 0.47886258363723755f, 0.06666627526283264f, 0.10702065378427505f, 0.8793841004371643f, 0.7797890901565552f, 0.4650103449821472f, 0.33028289675712585f, -0.16303357481956482f, 0.43719053268432617f, 0.18282048404216766f, 0.6786993741989136f, 0.4524783194065094f, 0.04714570567011833f, 0.9776638150215149f, 0.35707858204841614f, -0.2997470498085022f, 0.6929404735565186f, 0.737030029296875f, 0.5979675054550171f, 0.7591973543167114f, 0.2253972589969635f, 0.3705978989601135f, 0.25152596831321716f, -0.03427205607295036f, 0.00153980846516788f, 0.4383833110332489f, 0.779316782951355f, 0.03935295343399048f, 0.44631722569465637f, 0.16129951179027557f, 0.11198098212480545f, -0.2783936858177185f, 0.07448810338973999f, 0.37257254123687744f, 0.1258482187986374f, 0.6976115703582764f, 0.161648690700531f, 0.8866994380950928f, 0.9910746216773987f, -0.46823403239250183f, 0.8554412722587585f, 0.24132433533668518f, 0.6772088408470154f, 0.4788457453250885f, 0.20447014272212982f, 0.5178873538970947f, 0.27950018644332886f, -0.526036262512207f, 0.7430108189582825f, 0.11860787868499756f, 0.03872350603342056f, 0.34771138429641724f, 0.47186264395713806f, 0.893018364906311f, 0.5188338160514832f, -0.7497338056564331f, 0.7516059279441833f, 0.859852135181427f, 0.8946223855018616f, 0.381867378950119f, 0.7561991810798645f, 0.3325267434120178f, 0.34076857566833496f, -0.6796742677688599f, 0.6740769147872925f, 0.6589100956916809f, 0.772233784198761f, 0.6910625696182251f, 0.8734232783317566f, 0.12600040435791016f, 0.7373635172843933f, -0.5624504685401917f, 0.8240426182746887f, 0.04429985210299492f, 0.2218838334083557f, 0.780343770980835f, 0.5185145735740662f, 0.8236027359962463f, 0.5028604865074158f, -0.3262990415096283f, 0.4061799943447113f, 0.632134735584259f, 0.29112833738327026f, 0.7847244143486023f, 0.361896812915802f, 0.8102138042449951f, 0.12033682316541672f, -0.6779384016990662f, 0.022269031032919884f, 0.19069527089595795f, 0.9397087693214417f, 0.42851969599723816f, 0.3241814970970154f, 0.6038318276405334f, 0.5934661626815796f, -0.4193657338619232f, 0.20611318945884705f, 0.8546208739280701f, 0.768788754940033f, 0.18680423498153687f, 0.888044536113739f, 0.15988430380821228f, 0.9012097120285034f, -0.5412236452102661f, 0.28767314553260803f, 0.4882255494594574f, 0.4325183629989624f, 0.9992055296897888f, 0.9042702317237854f, 0.3962812125682831f, 0.7994615435600281f, -0.11203383654356003f, 0.6107642650604248f, 0.15803462266921997f, 0.6069328784942627f, 0.3462926149368286f, 0.07994961738586426f, 0.8744754195213318f, 0.7184984683990479f, -0.5638030767440796f, 0.12222733348608017f, 0.9981074333190918f, 0.4951826333999634f, 0.3601674437522888f, 0.7592781186103821f, 0.9814527034759521f, 0.5058776140213013f, -0.48640990257263184f, 0.849716067314148f, 0.300959050655365f, 0.7092606425285339f, 0.6664547324180603f, 0.7665006518363953f, 0.5836665630340576f, 0.7990036606788635f, -0.0718500018119812f, 0.9873455762863159f, 0.7068950533866882f, 0.8270871639251709f, 0.5544558167457581f, 0.956610918045044f, 0.7091013789176941f, 0.4074467420578003f, -0.867316484451294f, 0.611203670501709f, 0.4787341356277466f, 0.7639139294624329f, 0.4158186614513397f, 0.9808117747306824f, 0.059486765414476395f, 0.9424051642417908f, -0.6990278959274292f, 0.8657398819923401f, 0.7653173208236694f, 0.046440836042165756f, 0.6626991033554077f, 0.8131520748138428f, 0.8890544176101685f, 0.26709839701652527f, -0.9121502637863159f, 0.32595691084861755f, 0.255918025970459f, 0.30552080273628235f, 0.9450980424880981f, 0.46242207288742065f, 0.1797507405281067f, 0.613139808177948f, -0.2683838903903961f, 0.12463242560625076f, 0.7954955101013184f, 0.06124504283070564f, 0.7272171974182129f, 0.371594101190567f, 0.0867595225572586f, 0.8542028665542603f, -0.6608535051345825f, 0.7600292563438416f, 0.11230362951755524f, 0.11632246524095535f, 0.14872616529464722f, 0.12829375267028809f, 0.7885362505912781f, 0.04272805154323578f, -0.7802741527557373f, 0.8740448355674744f, 0.9310300946235657f, 0.5568282008171082f, 0.9109907150268555f, 0.6019694805145264f, 0.07778091728687286f, 0.628298819065094f, -0.9223507046699524f, 0.522781491279602f, 0.4877261221408844f, 0.718647837638855f, 0.6141273379325867f, 0.5045909285545349f, 0.1858665943145752f, 0.8697376847267151f, -0.17954252660274506f, 0.48695793747901917f, 0.05917833372950554f, 0.0011460889363661408f, 0.4493322968482971f, 0.2642425000667572f, 0.06259904056787491f, 0.10010753571987152f, -0.2330634742975235f, 0.20320019125938416f, 0.8143942952156067f, 0.8690366744995117f, 0.925682783126831f, 0.4295511543750763f, 0.9652143716812134f, 0.7015619277954102f, -0.5713951587677002f, 0.6124680042266846f, 0.11604292690753937f, 0.43763983249664307f, 0.523958146572113f, 0.3958621621131897f, 0.5425182580947876f, 0.43476271629333496f, -0.13880664110183716f, 0.4564340114593506f, 0.36978957056999207f, 0.11021295189857483f, 0.9505536556243896f, 0.5346085429191589f, 0.8852309584617615f, 0.936030924320221f, -0.6796066164970398f, 0.7811094522476196f, 0.38056352734565735f, 0.8598735928535461f, 0.33197492361068726f, 0.030059628188610077f, 0.46676576137542725f, 0.17679443955421448f, -0.1343555897474289f, 0.77547687292099f, 0.06549730151891708f, 0.870369017124176f, 0.2768420875072479f, 0.6186069250106812f, 0.057172197848558426f, 0.36402055621147156f, -0.9548019766807556f, 0.00885627418756485f, 0.4583386778831482f, 0.5759707689285278f, 0.725558876991272f, 0.06526581943035126f, 0.44932428002357483f, 0.8288025259971619f, -0.9265163540840149f, 0.8070802688598633f, 0.7769381403923035f, 0.41028308868408203f, 0.4169590175151825f, 0.8678728938102722f, 0.10135392099618912f, 0.18601752817630768f, -0.7998749613761902f, 0.16509351134300232f, 0.9225941300392151f, 0.4355248510837555f, 0.9446658492088318f, 0.6849249005317688f, 0.49286985397338867f, 0.8735185265541077f, -0.07241684198379517f, 0.677939236164093f, 0.5529172420501709f, 0.9799646735191345f, 0.019725818186998367f, 0.07412067800760269f, 0.6069708466529846f, 0.5558723211288452f, -0.8988546133041382f, 0.72250896692276f, 0.5236339569091797f, 0.27698373794555664f, 0.048145029693841934f, 0.923434317111969f, 0.34406137466430664f, 0.07712414115667343f, -0.14681106805801392f, 0.3789672553539276f, 0.9021933674812317f, 0.7036954760551453f, 0.41995805501937866f, 0.0008356301696039736f, 0.9018171429634094f, 0.5733211040496826f, -0.9443514347076416f, 0.009424752555787563f, 0.1521373987197876f, 0.6803715825080872f, 0.6133620738983154f, 0.5532705783843994f, 0.7746369242668152f, 0.3834342956542969f, -0.2538727819919586f, 0.4456463158130646f, 0.908859372138977f, 0.7724598050117493f, 0.2806829810142517f, 0.5047067403793335f, 0.6269327402114868f, 0.6810641288757324f, -0.27366864681243896f, 0.7618528008460999f, 0.3242712616920471f, 0.6524219512939453f, 0.6104459762573242f, 0.4156695008277893f, 0.5489541888237f, 0.4822938144207001f, -0.16407030820846558f, 0.5768393278121948f, 0.3038255572319031f, 0.14353445172309875f, 0.7784658074378967f, 0.9319252967834473f, 0.5224307179450989f, 0.5037311315536499f, -0.5667933225631714f, 0.22564835846424103f, 0.33881452679634094f, 0.38476526737213135f, 0.16546456515789032f, 0.47993916273117065f, 0.4219888746738434f, 0.4074688255786896f, -0.6189921498298645f, 0.2198202759027481f, 0.4804942309856415f, 0.3646875321865082f, 0.8997517228126526f, 0.6543367505073547f, 0.4813057780265808f, 0.9732898473739624f, -0.42887023091316223f, 0.8867766857147217f, 0.15021437406539917f, 0.011988628655672073f, 0.16229066252708435f, 0.9883352518081665f, 0.7264145016670227f, 0.6235121488571167f, -0.04242219775915146f, 0.8003212809562683f, 0.4070877134799957f, 0.8722836971282959f, 0.5692349672317505f, 0.2964061498641968f, 0.07232408225536346f, 0.6716666221618652f, -0.9537315368652344f, 0.3445543944835663f, 0.8071188926696777f, 0.47455933690071106f, 0.7136192321777344f, 0.5925541520118713f, 0.5410230159759521f, 0.6906411647796631f, -0.45312365889549255f, 0.997344970703125f, 0.3717181384563446f, 0.8539974689483643f, 0.6142306327819824f, 0.5574172735214233f, 0.3138544261455536f, 0.581608235836029f, -0.7427116632461548f, 0.514876127243042f, 0.15416468679904938f, 0.938551664352417f, 0.24192123115062714f, 0.6016284823417664f, 0.9774317741394043f, 0.008304505608975887f, -0.32761624455451965f, 0.7720999121665955f, 0.9446460604667664f, 0.8361031413078308f, 0.035042956471443176f, 0.14450424909591675f, 0.8627990484237671f, 0.572136640548706f, -0.2201155424118042f, 0.36015254259109497f, 0.15643441677093506f, 0.9616206884384155f, 0.10680919885635376f, 0.11065198481082916f, 0.7105772495269775f, 0.6557283401489258f, -0.7491822838783264f, 0.8567488193511963f, 0.03787337243556976f, 0.03914570435881615f, 0.4586825668811798f, 0.9993283152580261f, 0.4513271450996399f, 0.12728603184223175f, -0.8044844269752502f, 0.3644460141658783f, 0.24918785691261292f, 0.44835013151168823f, 0.42373451590538025f, 0.5173593759536743f, 0.24879564344882965f, 0.8455301523208618f, -0.6349515914916992f, 0.25515270233154297f, 0.9295302629470825f, 0.9545992016792297f, 0.6193975210189819f, 0.3145313262939453f, 0.07045087963342667f, 0.8612223863601685f, -0.5172550082206726f, 0.0835956335067749f, 0.523166835308075f, 0.7905939221382141f, 0.9709007740020752f, 0.7933496832847595f, 0.35763266682624817f, 0.6159170866012573f, -0.6950006484985352f, 0.053024858236312866f, 0.376754492521286f, 0.13542872667312622f, 0.8387617468833923f, 0.4120311141014099f, 0.4489906430244446f, 0.3724218010902405f, -0.4335933327674866f, 0.8072100281715393f, 0.7876506447792053f, 0.5708158612251282f, 0.154868021607399f, 0.3837158679962158f, 0.5654077529907227f, 0.8991553783416748f, -0.8930188417434692f, 0.19408567249774933f, 0.5904488563537598f, 0.8455779552459717f, 0.06351473182439804f, 0.9956891536712646f, 0.5684687495231628f, 0.1493452936410904f, -0.22943256795406342f, 0.210222989320755f, 0.6653785109519958f, 0.25408947467803955f, 0.570635974407196f, 0.16917581856250763f, 0.7542024850845337f, 0.763570249080658f, -0.20323283970355988f, 0.8526116609573364f, 0.228563591837883f, 0.8672409653663635f, 0.25285544991493225f, 0.13047607243061066f, 0.24930889904499054f, 0.07801846414804459f, -0.19666452705860138f, 0.3629969358444214f, 0.5736699104309082f, 0.3660913407802582f, 0.7239502668380737f, 0.6242629289627075f, 0.1975858211517334f, 0.6573595404624939f, -0.6847395300865173f, 0.8812453746795654f, 0.9494953155517578f, 0.2165084034204483f, 0.22664253413677216f, 0.6342077851295471f, 0.700442373752594f, 0.7330948114395142f, -0.4963517487049103f, 0.021992171183228493f, 0.5847495794296265f, 0.9379429221153259f, 0.5441240072250366f, 0.8818295001983643f, 0.5574934482574463f, 0.8956510424613953f, -0.9580993056297302f, 0.5756332278251648f, 0.2513192892074585f, 0.2502599060535431f, 0.7031328678131104f, 0.3613658547401428f, 0.26372092962265015f, 0.09080787003040314f, -0.6397987008094788f, 0.012096723541617393f, 0.5150009989738464f, 0.6992352604866028f, 0.0280615147203207f, 0.8973214030265808f, 0.8942071795463562f, 0.7377752065658569f, -0.1067381352186203f, 0.42729198932647705f, 0.5740039348602295f, 0.6718057990074158f, 0.6537759900093079f, 0.77326899766922f, 0.015031302347779274f, 0.92387455701828f, -0.33863699436187744f, 0.026296813040971756f, 0.12843859195709229f, 0.6636379361152649f, 0.0669807568192482f, 0.6165411472320557f, 0.5347767472267151f, 0.4878455102443695f, -0.4543989598751068f, 0.9346333146095276f, 0.2663910388946533f, 0.5058137774467468f, 0.3737861216068268f, 0.29024654626846313f, 0.9394534826278687f, 0.484409898519516f, -0.3381058871746063f, 0.4643098711967468f, 0.8921355605125427f, 0.14520427584648132f, 0.6906041502952576f, 0.7365270256996155f, 0.5543264746665955f, 0.6303040385246277f, -0.9170239567756653f, 0.49808838963508606f, 0.6582433581352234f, 0.17841148376464844f, 0.22744868695735931f, 0.7642497420310974f, 0.9081013202667236f, 0.7804152369499207f, -0.2352457344532013f, 0.11327797174453735f, 0.5051066279411316f, 0.7863503098487854f, 0.1290195733308792f, 0.04002858325839043f, 0.972217857837677f, 0.1238132044672966f, -0.2414388805627823f, 0.03533247485756874f, 0.36055463552474976f, 0.7500174045562744f, 0.19520321488380432f, 0.9561951160430908f, 0.25627729296684265f, 0.7616801857948303f, -0.13164763152599335f, 0.4794803857803345f, 0.6465516090393066f, 0.22483769059181213f, 0.46154338121414185f, 0.8797383904457092f, 0.5833224654197693f, 0.4123730957508087f, -0.21818207204341888f, 0.1547444760799408f, 0.252018004655838f, 0.008367805741727352f, 0.007382374722510576f, 0.02643946371972561f, 0.12685808539390564f, 0.5485720634460449f, -0.6818584203720093f, 0.027290068566799164f, 0.6702513098716736f, 0.2791168987751007f, 0.5842553973197937f, 0.08819591253995895f, 0.803495466709137f, 0.7844473123550415f, -0.14937572181224823f, 0.27681243419647217f, 0.9183805584907532f, 0.32409098744392395f, 0.24481648206710815f, 0.3446515202522278f, 0.2770843207836151f, 0.7749824523925781f, -0.2578839361667633f, 0.8394248485565186f, 0.20819486677646637f, 0.6055478453636169f, 0.014251289889216423f, 0.955371618270874f, 0.6721712350845337f, 0.2018413543701172f, -0.5687914490699768f, 0.9911134243011475f, 0.7018964290618896f, 0.24737432599067688f, 0.3417251408100128f, 0.7131198644638062f, 0.49788373708724976f, 0.0040666782297194f, -0.5911493301391602f, 0.7537407875061035f, 0.4164998233318329f, 0.26787516474723816f, 0.19863033294677734f, 0.9161843061447144f, 0.5137506127357483f, 0.6384720206260681f, -0.5420999526977539f, 0.6638864874839783f, 0.7945419549942017f, 0.31331005692481995f, 0.22596852481365204f, 0.36962395906448364f, 0.2807159423828125f, 0.07237241417169571f, -0.2866921126842499f, 0.16594013571739197f, 0.21454378962516785f, 0.6547919511795044f, 0.9877378940582275f, 0.871595561504364f, 0.46306923031806946f, 0.30997079610824585f, -0.8475274443626404f, 0.27052372694015503f, 0.8470573425292969f, 0.6551727652549744f, 0.6099196076393127f, 0.48524680733680725f, 0.386629581451416f, 0.8479192852973938f, -0.6500419974327087f, 0.6980540752410889f, 0.9839703440666199f, 0.7130079865455627f, 0.8226982355117798f, 0.9295118451118469f, 0.7721626162528992f, 0.2438858598470688f, -0.6258544921875f, 0.7061693668365479f, 0.06957489997148514f, 0.5346545577049255f, 0.000762591662351042f, 0.9531257748603821f, 0.6020506024360657f, 0.4105740487575531f, -0.8748246431350708f, 0.29464247822761536f, 0.24768288433551788f, 0.7243955731391907f, 0.20414625108242035f, 0.5823071002960205f, 0.40170562267303467f, 0.607999324798584f, -0.21146948635578156f, 0.2951343059539795f, 0.8332236409187317f, 0.8262430429458618f, 0.9528675079345703f, 0.9286748766899109f, 0.14171886444091797f, 0.6323878765106201f, -0.5502097606658936f, 0.6899924278259277f, 0.21010862290859222f, 0.7314841747283936f, 0.07488691806793213f, 0.5563390851020813f, 0.19976896047592163f, 0.024804983288049698f, -0.8789659142494202f, 0.7565084099769592f, 0.4117371439933777f, 0.388163298368454f, 0.06947681307792664f, 0.9330320954322815f, 0.9920491576194763f, 0.6191675662994385f, -0.8565192222595215f, 0.13032600283622742f, 0.6163799166679382f, 0.4497997760772705f, 0.24460875988006592f, 0.7925854325294495f, 0.03194123134016991f, 0.1488417685031891f, -0.25739508867263794f, 0.4251527488231659f, 0.5037309527397156f, 0.4959568381309509f, 0.13095301389694214f, 0.11846315115690231f, 0.7256908416748047f, 0.44717803597450256f, -0.053835395723581314f, 0.18857784569263458f, 0.881079912185669f, 0.12258859723806381f, 0.09038896858692169f, 0.684223473072052f, 0.04956772178411484f, 0.2893570065498352f, -0.04560200870037079f, 0.38101592659950256f, 0.045275863260030746f, 0.21818701922893524f, 0.763880729675293f, 0.34855881333351135f, 0.9965909123420715f, 0.7063118815422058f, -0.14734622836112976f, 0.06499028205871582f, 0.5613212585449219f, 0.28079286217689514f, 0.6603903770446777f, 0.6851951479911804f, 0.22515489161014557f, 0.3202206790447235f, -0.9140947461128235f, 0.02217591553926468f, 0.26437556743621826f, 0.2854997217655182f, 0.29570508003234863f, 0.431240439414978f, 0.3279663026332855f, 0.864062488079071f, -0.7172402739524841f, 0.5121611952781677f, 0.5627714991569519f, 0.34965673089027405f, 0.5061174631118774f, 0.043909087777137756f, 0.4503972828388214f, 0.9702949523925781f, -0.09436653554439545f, 0.0674937516450882f, 0.16461166739463806f, 0.27460920810699463f, 0.7677479386329651f, 0.17897100746631622f, 0.04748651012778282f, 0.29009386897087097f, -0.5461917519569397f, 0.3377794921398163f, 0.5837359428405762f, 0.36784976720809937f, 0.09174390137195587f, 0.3289709985256195f, 0.6162306070327759f, 0.6162461638450623f, -0.6796461939811707f, 0.7097705006599426f, 0.2714768648147583f, 0.07877521961927414f, 0.5556299090385437f, 0.15643230080604553f, 0.8198909163475037f, 0.562147855758667f, -0.3965064585208893f, 0.3895823359489441f, 0.213797926902771f, 0.6041263937950134f, 0.20658664405345917f, 0.7629477381706238f, 0.46838462352752686f, 0.45339176058769226f, -0.7312836647033691f, 0.24771840870380402f, 0.47664424777030945f, 0.73578280210495f, 0.4322025179862976f, 0.657357394695282f, 0.7886765599250793f, 0.09548743814229965f, -0.6024928689002991f, 0.9665852785110474f, 0.9844213128089905f, 0.9354187846183777f, 0.41431188583374023f, 0.9020562171936035f, 0.6957249045372009f, 0.532416820526123f, -0.19410042464733124f, 0.17196853458881378f, 0.873417854309082f, 0.27673324942588806f, 0.04166736081242561f, 0.04565935954451561f, 0.8854033350944519f, 0.523387610912323f, -0.05277030169963837f, 0.42699313163757324f, 0.4177713096141815f, 0.06095321103930473f, 0.11509694159030914f, 0.01559409312903881f, 0.0966225266456604f, 0.9881472587585449f, -0.37760308384895325f, 0.412803053855896f, 0.9216420650482178f, 0.11365899443626404f, 0.4718858301639557f, 0.01622425951063633f, 0.8799073696136475f, 0.4579886198043823f, -0.38103505969047546f, 0.3203819990158081f, 0.19693315029144287f, 0.6136348247528076f, 0.3254970610141754f, 0.12024582922458649f, 0.41681772470474243f, 0.4009663760662079f, -0.23850011825561523f, 0.16584749519824982f, 0.1918468326330185f, 0.6958019137382507f, 0.5479903221130371f, 0.334751695394516f, 0.8984487652778625f, 0.16323649883270264f, -0.7290191650390625f, 0.9249809384346008f, 0.8832550048828125f, 0.20717351138591766f, 0.4048188030719757f, 0.6475216150283813f, 0.7166389226913452f, 0.323018342256546f, -0.2433020919561386f, 0.1628706455230713f, 0.5985578894615173f, 0.4731261134147644f, 0.5372840166091919f, 0.14854685962200165f, 0.32542020082473755f, 0.9174700379371643f, -0.5363972187042236f, 0.11765797436237335f, 0.016085823997855186f, 0.8679062128067017f, 0.7948621511459351f, 0.8499992489814758f, 0.10732796043157578f, 0.8022366166114807f, -0.7949203848838806f, 0.38493770360946655f, 0.8977383375167847f, 0.258787602186203f, 0.9421302676200867f, 0.21556898951530457f, 0.9325746297836304f, 0.04454183205962181f, -0.789117693901062f, 0.23444372415542603f, 0.9317509531974792f, 0.9494500160217285f, 0.20003429055213928f, 0.5873164534568787f, 0.9328362941741943f, 0.8993790149688721f, -0.5550852417945862f, 0.011891121044754982f, 0.14164447784423828f, 0.29603567719459534f, 0.8697479367256165f, 0.4934566020965576f, 0.39942726492881775f, 0.837878406047821f, -0.13273553550243378f, 0.35571423172950745f, 0.2302258014678955f, 0.4956563711166382f, 0.3279326856136322f, 0.15200603008270264f, 0.92296302318573f, 0.9437651634216309f, -0.5026170015335083f, 0.5747421979904175f, 0.1941089630126953f, 0.7534852027893066f, 0.4280984401702881f, 0.3176613748073578f, 0.9164594411849976f, 0.4237469732761383f, -0.8815100193023682f, 0.33802586793899536f, 0.2883542776107788f, 0.3357306122779846f, 0.2964516282081604f, 0.5907508730888367f, 0.02298777550458908f, 0.38870903849601746f, -0.04820839315652847f, 0.0308598093688488f, 0.9309206008911133f, 0.9378772377967834f, 0.7769237160682678f, 0.1211458295583725f, 0.02953256480395794f, 0.01750687137246132f, -0.09695547819137573f, 0.4705870449542999f, 0.2405133694410324f, 0.6618264317512512f, 0.3320140540599823f, 0.6016886830329895f, 0.44490885734558105f, 0.9993435144424438f, -0.6285860538482666f, 0.8266373872756958f, 0.8930650353431702f, 0.5389110445976257f, 0.40823179483413696f, 0.88001948595047f, 0.2471722662448883f, 0.6695494651794434f, -0.09769881516695023f, 0.8844848275184631f, 0.34034231305122375f, 0.07986633479595184f, 0.7609387636184692f, 0.1990373432636261f, 0.22858832776546478f, 0.18876133859157562f, -0.33624905347824097f, 0.5109090805053711f, 0.8382045030593872f, 0.266774445772171f, 0.19555306434631348f, 0.2756313383579254f, 0.3378223180770874f, 0.23000867664813995f, -0.6205783486366272f, 0.3199126720428467f, 0.9102461338043213f, 0.6501680612564087f, 0.9446933269500732f, 0.723514974117279f, 0.6040597558021545f, 0.8694140911102295f, -0.45141518115997314f, 0.6991633176803589f, 0.11170747876167297f, 0.24758020043373108f, 0.8056709170341492f, 0.17892245948314667f, 0.6776937246322632f, 0.1086246445775032f, -0.7723947167396545f, 0.12374631315469742f, 0.10238562524318695f, 0.7809140086174011f, 0.0765109658241272f, 0.45535194873809814f, 0.983534038066864f, 0.9707149267196655f, -0.7112101316452026f, 0.39245280623435974f, 0.4763525128364563f, 0.3178066611289978f, 0.13490891456604004f, 0.9118974208831787f, 0.7882781624794006f, 0.5584540367126465f, -0.6687136292457581f, 0.988033652305603f, 0.1206790953874588f, 0.5296114683151245f, 0.05501734837889671f, 0.6322487592697144f, 0.061094168573617935f, 0.34619057178497314f, -0.6218760013580322f, 0.4733204245567322f, 0.6919275522232056f, 0.6597455739974976f, 0.251702219247818f, 0.051577597856521606f, 0.10009074956178665f, 0.26764172315597534f, -0.10175203531980515f, 0.5675656795501709f, 0.6184810400009155f, 0.7080932855606079f, 0.65877366065979f, 0.2782856523990631f, 0.9364927411079407f, 0.8554243445396423f, -0.012575892731547356f, 0.3640158474445343f, 0.09485222399234772f, 0.9603177309036255f, 0.05121238902211189f, 0.9107348322868347f, 0.2860284149646759f, 0.5585630536079407f, -0.7491348385810852f, 0.18386943638324738f, 0.971721887588501f, 0.8505309820175171f, 0.4525489807128906f, 0.42765340209007263f, 0.5187686085700989f, 0.4043740928173065f, -0.6214696764945984f, 0.5345438718795776f, 0.7960624098777771f, 0.559873640537262f, 0.6979494690895081f, 0.8585207462310791f, 0.847474217414856f, 0.052328839898109436f, -0.17325012385845184f, 0.061076994985342026f, 0.7202548980712891f, 0.8331173658370972f, 0.5736393928527832f, 0.6299102306365967f, 0.31687748432159424f, 0.8270981311798096f, -0.7815057039260864f, 0.2859137952327728f, 0.7275960445404053f, 0.24201960861682892f, 0.6441042423248291f, 0.9517537355422974f, 0.27067649364471436f, 0.7952486872673035f, -0.4632842540740967f, 0.6072502136230469f, 0.975266695022583f, 0.20586027204990387f, 0.074333555996418f, 0.2736295163631439f, 0.10718057304620743f, 0.9125975370407104f, -0.7915798425674438f, 0.3123677670955658f, 0.5537684559822083f, 0.9312453269958496f, 0.8589459657669067f, 0.43938976526260376f, 0.3731479048728943f, 0.03125005215406418f, -0.21673505008220673f, 0.05621898174285889f, 0.7164134979248047f, 0.019107822328805923f, 0.5659503936767578f, 0.6512454748153687f, 0.8061074614524841f, 0.3073124587535858f, -0.025154955685138702f, 0.527359664440155f, 0.6283292770385742f, 0.1874932199716568f, 0.4658109247684479f, 0.8098723292350769f, 0.8309626579284668f, 0.7231656908988953f, -0.7439679503440857f, 0.40549829602241516f, 0.700815737247467f, 0.2633644640445709f, 0.19939261674880981f, 0.5334491729736328f, 0.9536590576171875f, 0.8789807558059692f, -0.9115157127380371f, 0.43862560391426086f, 0.7105578780174255f, 0.9892081022262573f, 0.28349587321281433f, 0.7224060893058777f, 0.3214889168739319f, 0.3121379017829895f, -0.12006101757287979f, 0.6694589853286743f, 0.17342306673526764f, 0.03191552311182022f, 0.6841238141059875f, 0.01954171434044838f, 0.5875471234321594f, 0.3721298277378082f, -0.025648240000009537f, 0.7695770263671875f, 0.1888216733932495f, 0.28642216324806213f, 0.8500581383705139f, 0.6620202660560608f, 0.5818756222724915f, 0.05799625813961029f, -0.3834227919578552f, 0.2502022981643677f, 0.624570906162262f, 0.49923208355903625f, 0.4388851225376129f, 0.3828211724758148f, 0.26601627469062805f, 0.4171195328235626f, -0.04530157148838043f, 0.7237688899040222f, 0.20977824926376343f, 0.8430626392364502f, 0.8298400044441223f, 0.855656623840332f, 0.3678634762763977f, 0.5778059363365173f, -0.05044691264629364f, 0.13281841576099396f, 0.39861539006233215f, 0.8606916069984436f, 0.09247439354658127f, 0.9247101545333862f, 0.7485573887825012f, 0.7659798860549927f, -0.5078129768371582f, 0.6214956045150757f, 0.3256927728652954f, 0.1346295326948166f, 0.4980394244194031f, 0.8764867782592773f, 0.47456562519073486f, 0.5276111960411072f, -0.8094015717506409f, 0.251570463180542f, 0.7325568795204163f, 0.24738675355911255f, 0.4597991704940796f, 0.34514179825782776f, 0.6355096697807312f, 0.8323160409927368f, -0.36318597197532654f, 0.37362465262413025f, 0.12566399574279785f, 0.06505122035741806f, 0.8260106444358826f, 0.2978109121322632f, 0.5888323783874512f, 0.686206579208374f, -0.7089694738388062f, 0.6678945422172546f, 0.4721721112728119f, 0.4485892355442047f, 0.648609459400177f, 0.8072938919067383f, 0.07597042620182037f, 0.48757559061050415f, -0.20597852766513824f, 0.07266794890165329f, 0.5599859356880188f, 0.48371198773384094f, 0.6010847687721252f, 0.05981859192252159f, 0.9377518892288208f, 0.9356961250305176f, -0.218447744846344f, 0.1327844113111496f, 0.8266649842262268f, 0.7925978302955627f, 0.4478387236595154f, 0.34432515501976013f, 0.8902966976165771f, 0.11976752430200577f, -0.749365508556366f, 0.5522473454475403f, 0.5370491743087769f, 0.8766137361526489f, 0.5873093605041504f, 0.46128544211387634f, 0.3495996594429016f, 0.3566129505634308f, -0.8822782635688782f, 0.3597235083580017f, 0.7347091436386108f, 0.4775099456310272f, 0.5473312139511108f, 0.5999380946159363f, 0.4668295085430145f, 0.8466376066207886f, -0.02387039177119732f, 0.7970118522644043f, 0.38556572794914246f, 0.5841817259788513f, 0.7209129333496094f, 0.07217580825090408f, 0.21480371057987213f, 0.489272803068161f, -0.3418196141719818f, 0.3408263325691223f, 0.6256269812583923f, 0.10718858242034912f, 0.5574615001678467f, 0.3044128715991974f, 0.9099475145339966f, 0.10188428312540054f, -0.13041718304157257f, 0.8043453097343445f, 0.05225066468119621f, 0.20445360243320465f, 0.45868995785713196f, 0.314581960439682f, 0.7441253662109375f, 0.7493990063667297f, -0.20448504388332367f, 0.6316917538642883f, 0.17016614973545074f, 0.05327482894062996f, 0.11408213526010513f, 0.7099765539169312f, 0.647472620010376f, 0.3396087884902954f, -0.927403450012207f, 0.5630269646644592f, 0.7439547777175903f, 0.16769856214523315f, 0.4956189692020416f, 0.3803260028362274f, 0.7932846546173096f, 0.668781042098999f, -0.5146297216415405f, 0.4019991159439087f, 0.8796116709709167f, 0.06447439640760422f, 0.899379312992096f, 0.6479325890541077f, 0.26324227452278137f, 0.7495629191398621f, -0.319398432970047f, 0.3484692871570587f, 0.9294337630271912f, 0.13276271522045135f, 0.37205347418785095f, 0.8533207774162292f, 0.9543641805648804f, 0.3462478220462799f, -0.18638242781162262f, 0.7751101851463318f, 0.2498067319393158f, 0.6411479115486145f, 0.6110353469848633f, 0.10991352051496506f, 0.5421419143676758f, 0.8042234778404236f, -0.631300687789917f, 0.3206154406070709f, 0.24397921562194824f, 0.9538413286209106f, 0.585538387298584f, 0.7395239472389221f, 0.8358744382858276f, 0.17316237092018127f, -0.03077019564807415f, 0.7535247802734375f, 0.5997685194015503f, 0.43416765332221985f, 0.580325186252594f, 0.08352616429328918f, 0.10192324966192245f, 0.699887216091156f, -0.7682915329933167f, 0.863040030002594f, 0.8211961388587952f, 0.9404424428939819f, 0.2852998673915863f, 0.10950295627117157f, 0.740902841091156f, 0.0514635294675827f, -0.9925103783607483f, 0.9654169678688049f, 0.48505929112434387f, 0.9765698909759521f, 0.7731311917304993f, 0.5190554857254028f, 0.6473960876464844f, 0.20115017890930176f, -0.4396432638168335f, 0.7849363088607788f, 0.8646186590194702f, 0.17543378472328186f, 0.656896710395813f, 0.025051504373550415f, 0.8769131898880005f, 0.6785830855369568f, -0.6235566139221191f, 0.22960394620895386f, 0.6854838728904724f, 0.06668716669082642f, 0.7967543005943298f, 0.9358779191970825f, 0.4989520311355591f, 0.0036283822264522314f, -0.5259438157081604f, 0.6101304888725281f, 0.15975230932235718f, 0.5452824831008911f, 0.9918078780174255f, 0.9442862868309021f, 0.5847973823547363f, 0.32597365975379944f, -0.2379663735628128f, 0.9173555970191956f, 0.43957263231277466f, 0.7582163214683533f, 0.3730561137199402f, 0.11210712045431137f, 0.4095599353313446f, 0.9802188873291016f, -0.3512195646762848f, 0.03955418989062309f, 0.540226936340332f, 0.5819835662841797f, 0.24098238348960876f, 0.821946918964386f, 0.05157278850674629f, 0.6285600066184998f, -0.28561925888061523f, 0.5986971855163574f, 0.06525871902704239f, 0.2754939794540405f, 0.722315788269043f, 0.9604189395904541f, 0.23566286265850067f, 0.8948671817779541f, -0.9381489753723145f, 0.9288293123245239f, 0.28932806849479675f, 0.9652203321456909f, 0.9187749624252319f, 0.08628007769584656f, 0.05183621868491173f, 0.05459536239504814f, -0.1294974982738495f, 0.9324662685394287f, 0.527821958065033f, 0.8874970078468323f, 0.8304830193519592f, 0.5766451358795166f, 0.25608110427856445f, 0.23828625679016113f, -0.012229963205754757f, 0.08119566738605499f, 0.8317826390266418f, 0.23673850297927856f, 0.6301755905151367f, 0.5660436749458313f, 0.6490988731384277f, 0.25388088822364807f, -0.4727500379085541f, 0.8268986344337463f, 0.21820616722106934f, 0.6670913696289062f, 0.5205869674682617f, 0.7963395714759827f, 0.03513415902853012f, 0.896497368812561f, -0.7076584100723267f, 0.8458898663520813f, 0.6626611948013306f, 0.793410062789917f, 0.35897260904312134f, 0.8112713098526001f, 0.7736932635307312f, 0.6397004127502441f, -0.07360555976629257f, 0.6206903457641602f, 0.4909783899784088f, 0.47985002398490906f, 0.01376021932810545f, 0.7292565107345581f, 0.883520245552063f, 0.7795451283454895f, -0.9547770619392395f, 0.200700044631958f, 0.6138380765914917f, 0.9463630318641663f, 0.07627175003290176f, 0.3120371103286743f, 0.015392678789794445f, 0.4861224293708801f, -0.7504751086235046f, 0.815497875213623f, 0.41592511534690857f, 0.32969892024993896f, 0.2624202370643616f, 0.664740800857544f, 0.8465043902397156f, 0.9366026520729065f, -0.8977082967758179f, 0.7683748006820679f, 0.11201732605695724f, 0.9172691106796265f, 0.30671849846839905f, 0.37089821696281433f, 0.590361475944519f, 0.012834868393838406f, -0.9697223901748657f, 0.4896552264690399f, 0.40433159470558167f, 0.7076776027679443f, 0.3877793252468109f, 0.6459062099456787f, 0.9515710473060608f, 0.883719801902771f, -0.43382367491722107f, 0.6661791801452637f, 0.11805818974971771f, 0.29804185032844543f, 0.8773424029350281f, 0.9509552717208862f, 0.7106471061706543f, 0.3639799952507019f, -0.3282931447029114f, 0.24496252834796906f, 0.30054783821105957f, 0.6657482385635376f, 0.18521137535572052f, 0.7443210482597351f, 0.7933592200279236f, 0.2100292444229126f, -0.5216184258460999f, 0.9976193308830261f, 0.7871524691581726f, 0.3181033134460449f, 0.5189222693443298f, 0.3458350598812103f, 0.4645388126373291f, 0.20174385607242584f, -0.8800529837608337f, 0.5338774919509888f, 0.140053853392601f, 0.2122592329978943f, 0.9020605087280273f, 0.5105555653572083f, 0.8204542994499207f, 0.804246187210083f, -0.4503328800201416f, 0.7504672408103943f, 0.11055094003677368f, 0.9533310532569885f, 0.23182198405265808f, 0.8620400428771973f, 0.9717954993247986f, 0.022838789969682693f, -0.9352380037307739f, 0.16655121743679047f, 0.16195861995220184f, 0.14181789755821228f, 0.6955013871192932f, 0.1919352412223816f, 0.057079970836639404f, 0.34390395879745483f, -0.3665521740913391f, 0.5147813558578491f, 0.6298659443855286f, 0.728036105632782f, 0.8780357837677002f, 0.8830419182777405f, 0.3228723108768463f, 0.6190433502197266f, -0.3453957736492157f, 0.20499901473522186f, 0.9935480356216431f, 0.7491675019264221f, 0.9049039483070374f, 0.9481785297393799f, 0.146036759018898f, 0.6967729926109314f, -0.06799589097499847f, 0.00941681582480669f, 0.6360623240470886f, 0.17598222196102142f, 0.8918428421020508f, 0.6887487173080444f, 0.2807982563972473f, 0.005790764931589365f, -0.6320040225982666f, 0.6619711518287659f, 0.9049197435379028f, 0.3924795985221863f, 0.3717430531978607f, 0.7666711807250977f, 0.1807248294353485f, 0.8735899329185486f, -0.16986553370952606f, 0.6419961452484131f, 0.3509550988674164f, 0.681676983833313f, 0.44675129652023315f, 0.5717934966087341f, 0.5064542293548584f, 0.6746737957000732f, -0.052180711179971695f, 0.05229873210191727f, 0.9071551561355591f, 0.789225161075592f, 0.7448256015777588f, 0.804246187210083f, 0.35328584909439087f, 0.8345323801040649f, -0.9978457689285278f, 0.14402802288532257f, 0.39920687675476074f, 0.8892861604690552f, 0.22684116661548615f, 0.02526267245411873f, 0.8080248832702637f, 0.0194235946983099f, -0.49416083097457886f, 0.9589636921882629f, 0.9596973657608032f, 0.9783202409744263f, 0.986081600189209f, 0.9844754934310913f, 0.6290645003318787f, 0.3754052519798279f, -0.3457152247428894f, 0.5976424813270569f, 0.17620259523391724f, 0.8403452038764954f, 0.9901706576347351f, 0.6894403696060181f, 0.66701340675354f, 0.40022581815719604f, -0.6533433198928833f, 0.5420700907707214f, 0.4119185507297516f, 0.96302330493927f, 0.7479649186134338f, 0.8466736674308777f, 0.3256020247936249f, 0.7896134853363037f, -0.051108237355947495f, 0.4269155263900757f, 0.34026452898979187f, 0.615524172782898f, 0.3387546241283417f, 0.22901202738285065f, 0.8346856236457825f, 0.41714778542518616f, -0.23267997801303864f, 0.8576371669769287f, 0.4040602147579193f, 0.5258492231369019f, 0.2892734408378601f, 0.03147692233324051f, 0.004657975863665342f, 0.20028434693813324f, -0.020122436806559563f, 0.0034428101498633623f, 0.43369510769844055f, 0.03289351612329483f, 0.5247381925582886f, 0.7998275756835938f, 0.055322881788015366f, 0.8295836448669434f, -0.07859151810407639f, 0.23267458379268646f, 0.2926643192768097f, 0.7578957676887512f, 0.3313772976398468f, 0.12365508824586868f, 0.2537522614002228f, 0.47312378883361816f, -0.4504646062850952f, 0.9277100563049316f, 0.6476125121116638f, 0.8840274810791016f, 0.5043041706085205f, 0.7108195424079895f, 0.5068089962005615f, 0.34587353467941284f, -0.6893478035926819f, 0.2573961913585663f, 0.45160531997680664f, 0.8053309321403503f, 0.9778295159339905f, 0.18864306807518005f, 0.7389112710952759f, 0.6960806846618652f, -0.2959398627281189f, 0.5402992963790894f, 0.6048604249954224f, 0.1322639286518097f, 0.5222418904304504f, 0.2773587703704834f, 0.13000041246414185f, 0.024809451773762703f, -0.6364896893501282f, 0.26979589462280273f, 0.434684157371521f, 0.5187050700187683f, 0.4502527713775635f, 0.7325411438941956f, 0.14360411465168f, 0.39986687898635864f, -0.5851211547851562f, 0.19228394329547882f, 0.6061636805534363f, 0.29879480600357056f, 0.6557484269142151f, 0.21400223672389984f, 0.6749038696289062f, 0.18866966664791107f, -0.6043211221694946f, 0.44005611538887024f, 0.6377922296524048f, 0.7591021656990051f, 0.5912482142448425f, 0.4255479872226715f, 0.20093949139118195f, 0.2968050539493561f, -0.08931776136159897f, 0.2592693567276001f, 0.4533972442150116f, 0.22250334918498993f, 0.646665632724762f, 0.08550682663917542f, 0.0387868769466877f, 0.6202285885810852f, -0.9274745583534241f, 0.6108109354972839f, 0.823866605758667f, 0.8167110085487366f, 0.7150939702987671f, 0.6328380703926086f, 0.6461628675460815f, 0.03452836349606514f, -0.19508180022239685f, 0.035867031663656235f, 0.970580518245697f, 0.07118959724903107f, 0.5085878968238831f, 0.7408604025840759f, 0.8082484602928162f, 0.7150499820709229f, -0.39210668206214905f, 0.004783675540238619f, 0.4943873882293701f, 0.3486248254776001f, 0.06524766236543655f, 0.6122915148735046f, 0.012009775266051292f, 0.7172502279281616f, -0.32118290662765503f, 0.9107452630996704f, 0.5670130848884583f, 0.9809300899505615f, 0.5842679738998413f, 0.4917141795158386f, 0.8205588459968567f, 0.5633777379989624f, -0.16132085025310516f, 0.30262017250061035f, 0.6249425411224365f, 0.24484872817993164f, 0.39100053906440735f, 0.8686093091964722f, 0.6551936268806458f, 0.026413148269057274f, -0.5543649196624756f, 0.08249442279338837f, 0.7029948234558105f, 0.2511324882507324f, 0.7329193949699402f, 0.20906196534633636f, 0.7279837727546692f, 0.5547479391098022f, -0.0945931226015091f, 0.7902199029922485f, 0.21351949870586395f, 0.6620209217071533f, 0.13286347687244415f, 0.46720147132873535f, 0.7429227828979492f, 0.8297759294509888f, -0.78538978099823f, 0.9775568842887878f, 0.934665322303772f, 0.21225711703300476f, 0.18896426260471344f, 0.9364875555038452f, 0.026157056912779808f, 0.6277986764907837f, -0.6636785864830017f, 0.07325562834739685f, 0.5188377499580383f, 0.19137853384017944f, 0.3623592257499695f, 0.20581546425819397f, 0.3358655273914337f, 0.4762744605541229f, -0.4692263901233673f, 0.8830986022949219f, 0.6608346104621887f, 0.08083425462245941f, 0.5821168422698975f, 0.8890807032585144f, 0.7427088022232056f, 0.5154392123222351f, -0.8769221305847168f, 0.8339777588844299f, 0.4473980963230133f, 0.9606555104255676f, 0.4088256359100342f, 0.4399459958076477f, 0.289534330368042f, 0.25392961502075195f, -0.5494583249092102f, 0.5842244625091553f, 0.35579150915145874f, 0.7970911264419556f, 0.32386207580566406f, 0.04299045726656914f, 0.7110104560852051f, 0.12433458864688873f, -0.771793782711029f, 0.9774163961410522f, 0.6829473972320557f, 0.7958804368972778f, 0.20588962733745575f, 0.7102168202400208f, 0.21925382316112518f, 0.6408555507659912f, -0.7759309411048889f, 0.9033726453781128f, 0.3668912351131439f, 0.8330897092819214f, 0.5006714463233948f, 0.8211057186126709f, 0.483671635389328f, 0.4950055480003357f, -0.19451852142810822f, 0.023032115772366524f, 0.4204424023628235f, 0.41811516880989075f, 0.4050370454788208f, 0.06744213402271271f, 0.6114871501922607f, 0.9978018403053284f, -0.24763309955596924f, 0.8642326593399048f, 0.04450923949480057f, 0.16089996695518494f, 0.9871991872787476f, 0.05555744841694832f, 0.18855810165405273f, 0.004618773702532053f, -0.06400393694639206f, 0.1397949904203415f, 0.7715826034545898f, 0.8827731013298035f, 0.36242836713790894f, 0.7305105924606323f, 0.9534689784049988f, 0.5397558808326721f, -0.4507066011428833f, 0.4957054853439331f, 0.774326741695404f, 0.1646394431591034f, 0.4689464271068573f, 0.3714155852794647f, 0.568591296672821f, 0.9862359166145325f, -0.5021479725837708f, 0.5631090402603149f, 0.14754579961299896f, 0.47586697340011597f, 0.11165308952331543f, 0.2384871393442154f, 0.7936597466468811f, 0.37906286120414734f, -0.05212829262018204f, 0.26406776905059814f, 0.8541132807731628f, 0.4978564977645874f, 0.09925662726163864f, 0.3006703555583954f, 0.5874777436256409f, 0.10769994556903839f, -0.39724045991897583f, 0.6077349185943604f, 0.6407467126846313f, 0.6892392039299011f, 0.1903914213180542f, 0.3210482597351074f, 0.8352207541465759f, 0.5770560503005981f, -0.8185263872146606f, 0.9463508129119873f, 0.17598623037338257f, 0.7185189723968506f, 0.5679888725280762f, 0.11112795025110245f, 0.37294822931289673f, 0.6953957080841064f, -0.7205420136451721f, 0.6850758790969849f, 0.2542339265346527f, 0.9226571917533875f, 0.04777306318283081f, 0.6611952781677246f, 0.6077417731285095f, 0.10427765548229218f, -0.4219101071357727f, 0.7149779796600342f, 0.22192366421222687f, 0.7754475474357605f, 0.6870833039283752f, 0.1410052627325058f, 0.23289188742637634f, 0.36935558915138245f, -0.2758866548538208f, 0.2924119830131531f, 0.23703444004058838f, 0.5028741359710693f, 0.9716407656669617f, 0.833260178565979f, 0.4652724266052246f, 0.26978087425231934f, -0.7049933671951294f, 0.06266406178474426f, 0.3416546583175659f, 0.7710890173912048f, 0.8796519041061401f, 0.9226518869400024f, 0.6411920189857483f, 0.9002344608306885f, -0.5208137631416321f, 0.4269108474254608f, 0.8885385990142822f, 0.051861319690942764f, 0.4664933383464813f, 0.03795268386602402f, 0.01615736074745655f, 0.8027001619338989f, -0.5030381679534912f, 0.7744269371032715f, 0.9041978120803833f, 0.15082953870296478f, 0.7985468506813049f, 0.42750656604766846f, 0.6258354187011719f, 0.42917564511299133f, -0.5499619245529175f, 0.813245952129364f, 0.8489341139793396f, 0.2602534592151642f, 0.7651888132095337f, 0.08881856501102448f, 0.6978698372840881f, 0.25197264552116394f,}; - -float In_sigma[1024] = { -0.11689265817403793f, 0.2467169314622879f, 0.35400351881980896f, 0.4395318627357483f, 0.36204347014427185f, 0.8021157383918762f, 0.747388482093811f, 0.07204835116863251f, -0.10232573747634888f, 0.7581320405006409f, 0.48847609758377075f, 0.15311197936534882f, 0.47137367725372314f, 0.24634568393230438f, 0.08502849191427231f, 0.8770579099655151f, -0.1620415896177292f, 0.49037110805511475f, 0.39821043610572815f, 0.39397427439689636f, 0.5838229060173035f, 0.07900189608335495f, 0.31255340576171875f, 0.24150921404361725f, -0.780320405960083f, 0.7763270139694214f, 0.2575090229511261f, 0.7333694100379944f, 0.8334662318229675f, 0.41773977875709534f, 0.8050299882888794f, 0.8769149780273438f, -0.8292848467826843f, 0.3372485935688019f, 0.988706111907959f, 0.4455983340740204f, 0.4893266558647156f, 0.0403321199119091f, 0.868872344493866f, 0.6382668018341064f, -0.4082915186882019f, 0.7583655118942261f, 0.3854408264160156f, 0.8672602772712708f, 0.15097272396087646f, 0.8265698552131653f, 0.09626668691635132f, 0.33828940987586975f, -0.31423434615135193f, 0.8646763563156128f, 0.685523509979248f, 0.5134385228157043f, 0.5932109951972961f, 0.15475177764892578f, 0.6485854387283325f, 0.4720695912837982f, -0.04150087758898735f, 0.3990926444530487f, 0.4816795587539673f, 0.13091139495372772f, 0.6276296973228455f, 0.8205690979957581f, 0.9322721362113953f, 0.34068381786346436f, -0.12974457442760468f, 0.035310156643390656f, 0.6886703372001648f, 0.8505353331565857f, 0.7704477310180664f, 0.5905230045318604f, 0.6341044306755066f, 0.3873700797557831f, -0.8188624382019043f, 0.8457552790641785f, 0.9261512756347656f, 0.7310562133789062f, 0.29111799597740173f, 0.586874783039093f, 0.574058473110199f, 0.6101303696632385f, -0.8409935832023621f, 0.5936986207962036f, 0.088778555393219f, 0.023994630202651024f, 0.8011577725410461f, 0.8912450075149536f, 0.2746361792087555f, 0.32095372676849365f, -0.26131370663642883f, 0.7738499045372009f, 0.16021504998207092f, 0.6746912598609924f, 0.24674095213413239f, 0.8093141317367554f, 0.40956178307533264f, 0.6056181192398071f, -0.9471726417541504f, 0.5877026915550232f, 0.3201487064361572f, 0.04194461554288864f, 0.8063295483589172f, 0.5467976927757263f, 0.29223009943962097f, 0.45562565326690674f, -0.954988956451416f, 0.17467479407787323f, 0.5795596241950989f, 0.8569537401199341f, 0.5859256386756897f, 0.5748192667961121f, 0.33516940474510193f, 0.899272620677948f, -0.27416136860847473f, 0.5170063972473145f, 0.6964167356491089f, 0.5073971748352051f, 0.9418360590934753f, 0.1329541802406311f, 0.9141817688941956f, 0.37718144059181213f, -0.5931134223937988f, 0.4553605616092682f, 0.46964284777641296f, 0.7307958006858826f, 0.9483202695846558f, 0.8007456660270691f, 0.5530227422714233f, 0.8884268999099731f, -0.26341256499290466f, 0.9718483686447144f, 0.45165130496025085f, 0.7455402612686157f, 0.13348351418972015f, 0.9238466620445251f, 0.4795721173286438f, 0.5183440446853638f, -0.9730497002601624f, 0.3863202631473541f, 0.7531036734580994f, 0.5909245610237122f, 0.8430361151695251f, 0.4874168336391449f, 0.23161742091178894f, 0.4374247193336487f, -0.38854944705963135f, 0.523651659488678f, 0.5531869530677795f, 0.44617071747779846f, 0.15601147711277008f, 0.8724319338798523f, 0.2178734689950943f, 0.05484866350889206f, -0.8640298247337341f, 0.3444167375564575f, 0.18827804923057556f, 0.7781029939651489f, 0.35136163234710693f, 0.834035336971283f, 0.7655162215232849f, 0.9706397652626038f, -0.45952919125556946f, 0.8991692066192627f, 0.04962141439318657f, 0.883746862411499f, 0.6199917197227478f, 0.5095583200454712f, 0.4211578667163849f, 0.45683753490448f, -0.6555387377738953f, 0.7301681041717529f, 0.265340119600296f, 0.9574350714683533f, 0.6945063471794128f, 0.6725607514381409f, 0.19358299672603607f, 0.39031609892845154f, -0.42531999945640564f, 0.22607216238975525f, 0.7667399644851685f, 0.2351880520582199f, 0.09291572123765945f, 0.00828290730714798f, 0.5082283616065979f, 0.6393885612487793f, -0.6284805536270142f, 0.3692794740200043f, 0.23162008821964264f, 0.8930362462997437f, 0.0660834088921547f, 0.8024090528488159f, 0.7930588722229004f, 0.9922392964363098f, -0.4544239640235901f, 0.8984193801879883f, 0.4325515627861023f, 0.8466725945472717f, 0.9714475274085999f, 0.9687372446060181f, 0.9302032589912415f, 0.8579506874084473f, -0.0301801897585392f, 0.5409030914306641f, 0.6993503570556641f, 0.5328359603881836f, 0.40603265166282654f, 0.6067100167274475f, 0.7235324382781982f, 0.07070836424827576f, -0.5900334119796753f, 0.29856076836586f, 0.21763113141059875f, 0.7326951026916504f, 0.7193416357040405f, 0.4338211417198181f, 0.4409724473953247f, 0.048028118908405304f, -0.06018882244825363f, 0.9231281280517578f, 0.3362497091293335f, 0.08629199862480164f, 0.11896231025457382f, 0.4477853775024414f, 0.10548338294029236f, 0.505111038684845f, -0.6027252674102783f, 0.46420443058013916f, 0.556382954120636f, 0.6857425570487976f, 0.4119977355003357f, 0.7343285083770752f, 0.11917707324028015f, 0.5406915545463562f, -0.8227187395095825f, 0.31960529088974f, 0.8042799830436707f, 0.0774589255452156f, 0.2654269337654114f, 0.9590876698493958f, 0.7627483010292053f, 0.4788171052932739f, -0.5101990699768066f, 0.6234384775161743f, 0.4945291578769684f, 0.019590256735682487f, 0.4909948408603668f, 0.09558270871639252f, 0.3920014500617981f, 0.7703737020492554f, -0.0016195873031392694f, 0.6787610054016113f, 0.1950424313545227f, 0.1876571625471115f, 0.7310020923614502f, 0.10632246732711792f, 0.49586769938468933f, 0.011972982436418533f, -0.0949205607175827f, 0.9907462000846863f, 0.40861988067626953f, 0.9353277087211609f, 0.29833313822746277f, 0.9238429665565491f, 0.3056422472000122f, 0.14690981805324554f, -0.1316189020872116f, 0.6328217387199402f, 0.2042873203754425f, 0.40580087900161743f, 0.6063655018806458f, 0.8072845935821533f, 0.49953097105026245f, 0.5017461180686951f, -0.6992312669754028f, 0.10108249634504318f, 0.011805588379502296f, 0.6600307822227478f, 0.801591694355011f, 0.43874213099479675f, 0.648629367351532f, 0.027067584916949272f, -0.5425927042961121f, 0.044199541211128235f, 0.5027216076850891f, 0.1604902297258377f, 0.36498433351516724f, 0.45821893215179443f, 0.5722197890281677f, 0.9101643562316895f, -0.6786521673202515f, 0.07056745886802673f, 0.14276549220085144f, 0.8167349100112915f, 0.7060516476631165f, 0.7517520785331726f, 0.5913997888565063f, 0.0018866589525714517f, -0.7602080702781677f, 0.07765612006187439f, 0.5388971567153931f, 0.03037191741168499f, 0.5165350437164307f, 0.7961496710777283f, 0.6529839634895325f, 0.10343248397111893f, -0.09303322434425354f, 0.11425324529409409f, 0.49350517988204956f, 0.3027268946170807f, 0.7436472177505493f, 0.4509586989879608f, 0.39866530895233154f, 0.7628656625747681f, -0.5755448341369629f, 0.7603373527526855f, 0.9788110256195068f, 0.7695431709289551f, 0.3550418019294739f, 0.21567820012569427f, 0.9956938028335571f, 0.8039448261260986f, -0.0018132558325305581f, 0.18977326154708862f, 0.4303894639015198f, 0.7240707278251648f, 0.6900487542152405f, 0.744254469871521f, 0.6355741620063782f, 0.9342206120491028f, -0.16800838708877563f, 0.9573408961296082f, 0.2810388505458832f, 0.6049441695213318f, 0.6481732726097107f, 0.9232592582702637f, 0.838001549243927f, 0.21222759783267975f, -0.34920233488082886f, 0.31245899200439453f, 0.9395115375518799f, 0.35210609436035156f, 0.7654876708984375f, 0.6942261457443237f, 0.00754331611096859f, 0.3358291983604431f, -0.8444388508796692f, 0.8922650218009949f, 0.8733468055725098f, 0.1332407146692276f, 0.7767027616500854f, 0.0018076130654662848f, 0.13771627843379974f, 0.5648003220558167f, -0.8900164365768433f, 0.6461324095726013f, 0.688957691192627f, 0.6724677085876465f, 0.32536619901657104f, 0.45329222083091736f, 0.7098193764686584f, 0.28717824816703796f, -0.9944669604301453f, 0.1656416803598404f, 0.5795189142227173f, 0.09528867900371552f, 0.4117509722709656f, 0.5837749242782593f, 0.8199186325073242f, 0.40774837136268616f, -0.7566255331039429f, 0.8657139539718628f, 0.5927879214286804f, 0.1577250361442566f, 0.5600276589393616f, 0.7772480845451355f, 0.7369570136070251f, 0.4535496234893799f, -0.1168784350156784f, 0.36283981800079346f, 0.10096470266580582f, 0.23862658441066742f, 0.8859362006187439f, 0.7013126015663147f, 0.047634828835725784f, 0.32632166147232056f, -0.6607517600059509f, 0.12112850695848465f, 0.9673690795898438f, 0.8418400287628174f, 0.5208796262741089f, 0.717860996723175f, 0.887082576751709f, 0.44326257705688477f, -0.1631961464881897f, 0.0462222658097744f, 0.9811345338821411f, 0.5353263020515442f, 0.008691161870956421f, 0.8553956747055054f, 0.4193856120109558f, 0.740432858467102f, -0.9482516050338745f, 0.8152281045913696f, 0.4591265916824341f, 0.5676935911178589f, 0.28397053480148315f, 0.21825458109378815f, 0.13500957190990448f, 0.8190909624099731f, -0.7962963581085205f, 0.6488336324691772f, 0.0019086772808805108f, 0.4235464930534363f, 0.05577125400304794f, 0.47951868176460266f, 0.9745616912841797f, 0.4976494312286377f, -0.11211340874433517f, 0.03751678392291069f, 0.05792658403515816f, 0.8310478329658508f, 0.24481923878192902f, 0.7678748965263367f, 0.1423802375793457f, 0.12324778735637665f, -0.9016410112380981f, 0.6726689338684082f, 0.08516897261142731f, 0.9435439109802246f, 0.6818846464157104f, 0.5497561097145081f, 0.24496300518512726f, 0.7747273445129395f, -0.44522762298583984f, 0.16037137806415558f, 0.026090657338500023f, 0.19063270092010498f, 0.818203866481781f, 0.36031806468963623f, 0.18753941357135773f, 0.3798338770866394f, -0.03798162192106247f, 0.7890657782554626f, 0.10242816060781479f, 0.4302533268928528f, 0.5391097664833069f, 0.6117005944252014f, 0.47956788539886475f, 0.16976916790008545f, -0.26217740774154663f, 0.5734463334083557f, 0.44269371032714844f, 0.007691061124205589f, 0.2173902988433838f, 0.8239493370056152f, 0.18641237914562225f, 0.12716877460479736f, -0.05309422314167023f, 0.5637578368186951f, 0.8523844480514526f, 0.011856290511786938f, 0.12607184052467346f, 0.3616030216217041f, 0.8186268210411072f, 0.1630447655916214f, -0.12537120282649994f, 0.9064573645591736f, 0.7557605504989624f, 0.11284851282835007f, 0.23727433383464813f, 0.350187748670578f, 0.6676953434944153f, 0.33825868368148804f, -0.7902055978775024f, 0.954827606678009f, 0.32207611203193665f, 0.2727430462837219f, 0.026725634932518005f, 0.3932984173297882f, 0.7633886337280273f, 0.6128203272819519f, -0.30372586846351624f, 0.6097389459609985f, 0.3061111867427826f, 0.7558954358100891f, 0.6880775690078735f, 0.2763102948665619f, 0.05391868203878403f, 0.5340862274169922f, -0.8245275020599365f, 0.985747218132019f, 0.723487377166748f, 0.13036665320396423f, 0.4427930414676666f, 0.6840543746948242f, 0.9334239363670349f, 0.10305062681436539f, -0.7316536903381348f, 0.4168205261230469f, 0.15295885503292084f, 0.6556150317192078f, 0.16324569284915924f, 0.05100661516189575f, 0.8958780169487f, 0.5166792869567871f, -0.7001821994781494f, 0.9443345069885254f, 0.8308843970298767f, 0.11758160591125488f, 0.10146057605743408f, 0.10162842273712158f, 0.07098488509654999f, 0.17203590273857117f, -0.6045157313346863f, 0.18498972058296204f, 0.2930389940738678f, 0.0375409796833992f, 0.0718819797039032f, 0.46520817279815674f, 0.027045132592320442f, 0.1604020744562149f, -0.9777383804321289f, 0.6009768843650818f, 0.8727343678474426f, 0.7317337393760681f, 0.373760849237442f, 0.1552685648202896f, 0.5959195494651794f, 0.923004686832428f, -0.3376121520996094f, 0.9510446786880493f, 0.3992087244987488f, 0.591271162033081f, 0.059340327978134155f, 0.37558722496032715f, 0.31846535205841064f, 0.21400128304958344f, -0.40220239758491516f, 0.6996378898620605f, 0.5132907629013062f, 0.9635089635848999f, 0.2705954611301422f, 0.9889512658119202f, 0.8588915467262268f, 0.522341251373291f, -0.003940686583518982f, 0.7453941106796265f, 0.09352891892194748f, 0.48205050826072693f, 0.5924477577209473f, 0.41747549176216125f, 0.019311845302581787f, 0.9238364696502686f, -0.08085320144891739f, 0.8279151916503906f, 0.7779269814491272f, 0.34924188256263733f, 0.5497533082962036f, 0.6104522347450256f, 0.5720056891441345f, 0.5484848022460938f, -0.619345486164093f, 0.8031582832336426f, 0.8759815096855164f, 0.5690193772315979f, 0.7703840732574463f, 0.9980083107948303f, 0.6119787693023682f, 0.4251292943954468f, -0.7730526328086853f, 0.24040445685386658f, 0.7422881722450256f, 0.8617063760757446f, 0.15257684886455536f, 0.5328935384750366f, 0.1468314677476883f, 0.14519181847572327f, -0.2713277041912079f, 0.9136950373649597f, 0.9007433652877808f, 0.6116337180137634f, 0.5021854639053345f, 0.3689442276954651f, 0.1319066733121872f, 0.09138455241918564f, -0.15821576118469238f, 0.7425982356071472f, 0.8720356225967407f, 0.8397868871688843f, 0.9014117121696472f, 0.41579198837280273f, 0.9456367492675781f, 0.8623605370521545f, -0.3685755729675293f, 0.7515187859535217f, 0.7820186018943787f, 0.1861923485994339f, 0.31441256403923035f, 0.5142716765403748f, 0.12228439748287201f, 0.9255797863006592f, -0.09637375921010971f, 0.3504845201969147f, 0.14088808000087738f, 0.11502749472856522f, 0.6213272213935852f, 0.3297007381916046f, 0.29696351289749146f, 0.7034716606140137f, -0.3596513569355011f, 0.7558456063270569f, 0.9337987303733826f, 0.336419016122818f, 0.4247473180294037f, 0.0881442278623581f, 0.37021955847740173f, 0.8958501219749451f, -0.16550792753696442f, 0.9770092368125916f, 0.22535711526870728f, 0.9663206934928894f, 0.7554195523262024f, 0.7815595865249634f, 0.25235092639923096f, 0.054371338337659836f, -0.07548355311155319f, 0.5322763323783875f, 0.854196310043335f, 0.12972000241279602f, 0.3584443926811218f, 0.5590676069259644f, 0.16670815646648407f, 0.29862460494041443f, -0.8583824634552002f, 0.03429197147488594f, 0.3543001711368561f, 0.4601571559906006f, 0.8543834686279297f, 0.2921408712863922f, 0.2594376504421234f, 0.49281400442123413f, -0.9201021790504456f, 0.5465582609176636f, 0.03631199523806572f, 0.2908974587917328f, 0.043304555118083954f, 0.19665521383285522f, 0.30516517162323f, 0.15579508244991302f, -0.9015741348266602f, 0.16419146955013275f, 0.40220311284065247f, 0.5534806847572327f, 0.35675057768821716f, 0.4175119996070862f, 0.16465775668621063f, 0.682349443435669f, -0.16003325581550598f, 0.1394972801208496f, 0.9809169173240662f, 0.20103633403778076f, 0.9884829521179199f, 0.3515200614929199f, 0.2164960354566574f, 0.16569654643535614f, -0.13697488605976105f, 0.6454641819000244f, 0.42883095145225525f, 0.6638627648353577f, 0.13408292829990387f, 0.7496783137321472f, 0.4493669867515564f, 0.9011332988739014f, -0.02334117703139782f, 0.06639384478330612f, 0.5759127736091614f, 0.21562451124191284f, 0.730928361415863f, 0.10239692777395248f, 0.902746319770813f, 0.7705646753311157f, -0.8151745796203613f, 0.3242127597332001f, 0.5488758683204651f, 0.12319988012313843f, 0.8946775794029236f, 0.589245617389679f, 0.367146760225296f, 0.4890059232711792f, -0.7180240750312805f, 0.7522377371788025f, 0.5063939690589905f, 0.09991472214460373f, 0.5353367328643799f, 0.4761160910129547f, 0.15066424012184143f, 0.39127734303474426f, -0.4256579875946045f, 0.45398184657096863f, 0.7843067646026611f, 0.567985475063324f, 0.9182990193367004f, 0.12352035194635391f, 0.3993627727031708f, 0.904740035533905f, -0.7342119216918945f, 0.27705323696136475f, 0.7488490343093872f, 0.7010346055030823f, 0.7894091010093689f, 0.3089301288127899f, 0.6760730147361755f, 0.6100236177444458f, -0.8980515599250793f, 0.4058818817138672f, 0.5747562646865845f, 0.7425408959388733f, 0.6039819717407227f, 0.21052156388759613f, 0.02389276772737503f, 0.32814064621925354f, -0.8139840364456177f, 0.6776283979415894f, 0.6404213905334473f, 0.9388431310653687f, 0.3923338055610657f, 0.24888876080513f, 0.8937052488327026f, 0.80271977186203f, -0.5072593092918396f, 0.2510360777378082f, 0.26573124527931213f, 0.4005729556083679f, 0.2737358808517456f, 0.3456805944442749f, 0.9717509746551514f, 0.346527636051178f, -0.1388290375471115f, 0.5591649413108826f, 0.02301642671227455f, 0.45739176869392395f, 0.7061852216720581f, 0.790289580821991f, 0.39669662714004517f, 0.2082621455192566f, -0.8356881141662598f, 0.14609341323375702f, 0.8591567277908325f, 0.34549108147621155f, 0.7685353755950928f, 0.989119827747345f, 0.6361899971961975f, 0.4380817115306854f, -0.9033569097518921f, 0.6997379064559937f, 0.4480552077293396f, 0.5990074872970581f, 0.675520658493042f, 0.059193406254053116f, 0.593837320804596f, 0.51060950756073f, -0.9771186709403992f, 0.10578560829162598f, 0.8703282475471497f, 0.5799720883369446f, 0.3659078776836395f, 0.9799389839172363f, 0.21820193529129028f, 0.4417819082736969f, -0.6776696443557739f, 0.055717989802360535f, 0.8073399066925049f, 0.935375452041626f, 0.5239293575286865f, 0.6521480083465576f, 0.10747981816530228f, 0.3953242003917694f, -0.48728683590888977f, 0.3788796663284302f, 0.17494399845600128f, 0.36053141951560974f, 0.4040198028087616f, 0.8247475624084473f, 0.6015637516975403f, 0.13975487649440765f, -0.9385514855384827f, 0.9211812019348145f, 0.5659300684928894f, 0.29299142956733704f, 0.4725864827632904f, 0.7418127059936523f, 0.08799669146537781f, 0.2515806257724762f, -0.11886758357286453f, 0.2013980895280838f, 0.7535749077796936f, 0.45877525210380554f, 0.022275350987911224f, 0.7191108465194702f, 0.9838333129882812f, 0.7398595213890076f, -0.8545344471931458f, 0.8214917778968811f, 0.7144781351089478f, 0.0863775685429573f, 0.2429281622171402f, 0.5723655223846436f, 0.40922001004219055f, 0.8676475286483765f, -0.2558332085609436f, 0.8236950635910034f, 0.9382625222206116f, 0.3487195372581482f, 0.012564367614686489f, 0.4142198860645294f, 0.2282532900571823f, 0.6891986727714539f, -0.667195737361908f, 0.8055455684661865f, 0.7325087189674377f, 0.05404912680387497f, 0.5026273727416992f, 0.5397486090660095f, 0.8874012231826782f, 0.6460388898849487f, -0.1473940759897232f, 0.7836869359016418f, 0.2006499022245407f, 0.49742040038108826f, 0.78499835729599f, 0.35645076632499695f, 0.7748048901557922f, 0.6778374910354614f, -0.24995192885398865f, 0.6327089071273804f, 0.5497844219207764f, 0.3396678566932678f, 0.43897438049316406f, 0.47058185935020447f, 0.9855241179466248f, 0.8319184184074402f, -0.2508631944656372f, 0.1348162591457367f, 0.033628035336732864f, 0.08152353763580322f, 0.8991274237632751f, 0.013808795250952244f, 0.24169035255908966f, 0.9108691215515137f, -0.8253629803657532f, 0.6780310869216919f, 0.15916922688484192f, 0.36952489614486694f, 0.1305316537618637f, 0.7981705665588379f, 0.7622849941253662f, 0.4413783848285675f, -0.4987727701663971f, 0.016869988292455673f, 0.9767042994499207f, 0.724221408367157f, 0.8523921966552734f, 0.3821103870868683f, 0.9956909418106079f, 0.5074256062507629f, -0.532016396522522f, 0.7785588502883911f, 0.7480006814002991f, 0.2207447737455368f, 0.2156406044960022f, 0.8020538091659546f, 0.7752079963684082f, 0.7666467428207397f, -0.28807148337364197f, 0.44216910004615784f, 0.9059783220291138f, 0.5866817235946655f, 0.43455013632774353f, 0.9056369066238403f, 0.33689698576927185f, 0.9487079381942749f, -0.06916341930627823f, 0.5402114391326904f, 0.26469892263412476f, 0.5024582743644714f, 0.1612725555896759f, 0.037557151168584824f, 0.5208646655082703f, 0.3162776231765747f, -0.003066270612180233f, 0.27567601203918457f, 0.8926215767860413f, 0.8930356502532959f, 0.9501600861549377f, 0.6628292798995972f, 0.28915801644325256f, 0.19827231764793396f, -0.5275048613548279f, 0.17821544408798218f, 0.8159530162811279f, 0.04747926443815231f, 0.4674992859363556f, 0.3598923981189728f, 0.8993982076644897f, 0.6085290908813477f, -0.7711524367332458f, 0.6696610450744629f, 0.41640082001686096f, 0.13314351439476013f, 0.18926219642162323f, 0.6521342396736145f, 0.6422716379165649f, 0.3002513349056244f, -0.2779456675052643f, 0.8342841267585754f, 0.5171205997467041f, 0.5413863658905029f, 0.18911059200763702f, 0.6344980597496033f, 0.4966869056224823f, 0.8448182940483093f, -0.9720013737678528f, 0.41549035906791687f, 0.060339704155921936f, 0.867717981338501f, 0.7116788625717163f, 0.7767323851585388f, 0.5768259763717651f, 0.1466301828622818f, -0.25996240973472595f, 0.631668210029602f, 0.6588252782821655f, 0.8212853670120239f, 0.8574704527854919f, 0.9748243689537048f, 0.7069037556648254f, 0.7277145981788635f, -0.9337401390075684f, 0.9515047669410706f, 0.4619240164756775f, 0.3363686501979828f, 0.5261374711990356f, 0.022214099764823914f, 0.004720483906567097f, 0.1217842847108841f, -0.019976824522018433f, 0.3127657473087311f, 0.9258744716644287f, 0.36085057258605957f, 0.33290156722068787f, 0.6631250977516174f, 0.09495945274829865f, 0.08185221999883652f, -0.33456894755363464f, 0.2871270775794983f, 0.20957107841968536f, 0.045960091054439545f, 0.6409637928009033f, 0.2651117444038391f, 0.5790846943855286f, 0.8182479739189148f, -0.2760734558105469f, 0.22461915016174316f, 0.3103902339935303f, 0.2892277240753174f, 0.4424734115600586f, 0.8889606595039368f, 0.9764031767845154f, 0.15194374322891235f, -0.9577311277389526f, 0.26468172669410706f, 0.6613034009933472f, 0.9601970911026001f, 0.373727947473526f, 0.007485379930585623f, 0.7014734148979187f, 0.7339258790016174f, -0.7730243802070618f, 0.05939977243542671f, 0.4876604676246643f, 0.8530676960945129f, 0.16172432899475098f, 0.7556551098823547f, 0.41928744316101074f, 0.385524183511734f, -0.29883429408073425f, 0.16149351000785828f, 0.004572316538542509f, 0.31317493319511414f, 0.09326054155826569f, 0.058103471994400024f, 0.4712304174900055f, 0.7098045945167542f, -0.16637668013572693f, 0.1790591925382614f, 0.2858305871486664f, 0.38671016693115234f, 0.6913639307022095f, 0.9060277938842773f, 0.1847514808177948f, 0.35200175642967224f, -0.691990077495575f, 0.38661473989486694f, 0.39323148131370544f, 0.6882504820823669f, 0.4887654185295105f, 0.03763554245233536f, 0.5161174535751343f, 0.12924166023731232f, -0.41626793146133423f, 0.6575502157211304f, 0.9580339193344116f, 0.6333345770835876f, 0.651229202747345f, 0.4648277163505554f, 0.5281615257263184f, 0.348823219537735f, -0.7843822240829468f, 0.029953869059681892f, 0.19720704853534698f, 0.3816032409667969f, 0.34541627764701843f, 0.06242276728153229f, 0.09179863333702087f, 0.22804687917232513f,}; - -// Outputs - -float Out_x[2048] = { -0.3674013316631317f, 0.07299423962831497f, 0.20145273208618164f, -0.13362710177898407f, 0.06622416526079178f, 0.017177404835820198f, 0.22923976182937622f, 0.0686584934592247f, -0.20057275891304016f, 0.031244346871972084f, 0.26036930084228516f, -0.19417248666286469f, 0.1491304188966751f, 0.17123928666114807f, 0.22223007678985596f, 0.022208867594599724f, -0.29080730676651f, 0.07788332551717758f, -0.006121812388300896f, -0.21303439140319824f, 0.2132083922624588f, 0.039623361080884933f, 0.3642404079437256f, 0.10715588927268982f, -0.2464420050382614f, -0.12414322793483734f, 0.32796603441238403f, 0.003462474327534437f, -0.0758163332939148f, -0.023900451138615608f, 0.3085705637931824f, 0.13183198869228363f, -0.41522276401519775f, 0.15067604184150696f, 0.10532091557979584f, -0.07567983120679855f, 0.40855172276496887f, -0.16085971891880035f, 0.1415555328130722f, 0.08067471534013748f, -0.36441725492477417f, -0.06407608091831207f, 0.24309957027435303f, -0.0459878072142601f, 0.12175268679857254f, 0.07869434356689453f, 0.22014279663562775f, 0.09697768092155457f, -0.30199918150901794f, 0.025510426610708237f, 0.19753719866275787f, -0.04966748133301735f, 0.043870020657777786f, -0.10590315610170364f, 0.3644709885120392f, 0.1852845996618271f, -0.23058824241161346f, -0.08285145461559296f, 0.34032702445983887f, -0.05664307624101639f, 0.33229580521583557f, 0.32738229632377625f, 0.08772490918636322f, -0.1224224641919136f, -0.423434853553772f, 0.021324748173356056f, -0.023496214300394058f, 0.010722503066062927f, 0.15102633833885193f, -0.031562693417072296f, 0.2148701250553131f, 0.11828479915857315f, -0.1715228259563446f, -0.19180089235305786f, 0.44087061285972595f, -0.2887379229068756f, 0.12161170691251755f, 0.3300592303276062f, 0.2521006762981415f, 0.076515331864357f, -0.21822863817214966f, 0.15784621238708496f, 0.2649524211883545f, 0.02101503498852253f, 0.2437254637479782f, -0.02109784632921219f, 0.29216206073760986f, -0.19997386634349823f, -0.2472320795059204f, 0.0423908494412899f, 0.18674150109291077f, -0.045602377504110336f, 0.1932198405265808f, -0.013546464964747429f, 0.37750479578971863f, 0.01340490859001875f, -0.2879870533943176f, 0.08223339915275574f, 0.2501067519187927f, -0.015874894335865974f, 0.33463743329048157f, -0.05468413233757019f, 0.016642168164253235f, 0.014692581258714199f, -0.08085166662931442f, -0.010570728220045567f, 0.33757248520851135f, -0.02276238054037094f, 0.27798712253570557f, -0.06070571020245552f, 0.1753288209438324f, 0.04596125707030296f, -0.08687669783830643f, 0.026084506884217262f, 0.2468932718038559f, 0.03185927867889404f, 0.33305907249450684f, 0.04612235724925995f, 0.26889532804489136f, -0.19789764285087585f, -0.34998252987861633f, -0.1852187216281891f, 0.11978935450315475f, 0.15792128443717957f, 0.25096502900123596f, -0.09049329161643982f, 0.10444974899291992f, 0.18135105073451996f, -0.06400205940008163f, -0.021825898438692093f, 0.40318092703819275f, -0.0484030656516552f, 0.27997633814811707f, 0.23229901492595673f, 0.14370889961719513f, -0.24563738703727722f, -0.1953999400138855f, -0.05884880945086479f, 0.16026556491851807f, 0.011035111732780933f, 0.1680259108543396f, 0.12688927352428436f, 0.4453517198562622f, 0.053705912083387375f, -0.2052251100540161f, 0.1653064787387848f, 0.20096759498119354f, -0.12889942526817322f, 0.13597039878368378f, 0.020909873768687248f, 0.20785149931907654f, -0.04869209602475166f, -0.0063413591124117374f, 0.03589305281639099f, 0.12238851189613342f, 0.13637380301952362f, 0.4451405107975006f, -0.0978928655385971f, 0.2984052300453186f, -0.07099688798189163f, -0.2384197860956192f, -0.02789093181490898f, 0.2131316214799881f, 0.10312465578317642f, 0.2549988329410553f, -0.26899129152297974f, 0.14875774085521698f, 0.06528250128030777f, -0.09531953930854797f, 0.08652131259441376f, 0.27264726161956787f, 0.08209912478923798f, 0.2523857653141022f, 0.003602809039875865f, 0.41493991017341614f, -0.01421725656837225f, -0.20453979074954987f, 0.08300912380218506f, 0.24918639659881592f, 0.02752697840332985f, 0.27983856201171875f, -0.0005268404493108392f, 0.17257706820964813f, -0.08668003976345062f, -0.19900096952915192f, -0.10647443681955338f, 0.13921618461608887f, -0.021199382841587067f, 0.2660944163799286f, 0.059879228472709656f, 0.33645936846733093f, 0.06637105345726013f, -0.13994239270687103f, -0.09393536299467087f, 0.3791464567184448f, -0.052492979913949966f, 0.14452804625034332f, -0.1549854427576065f, 0.32451656460762024f, 0.22300221025943756f, -0.13245540857315063f, -0.0045321425423026085f, 0.3552628755569458f, -0.09757242351770401f, 0.290493905544281f, -0.045261070132255554f, 0.030361291021108627f, 0.18110769987106323f, -0.13325810432434082f, 0.0781092643737793f, 0.43753400444984436f, 0.0689648985862732f, 0.30496451258659363f, -0.13436679542064667f, 0.1099710538983345f, 0.04491032660007477f, -0.22795529663562775f, -0.22621531784534454f, 0.20586055517196655f, 0.21981576085090637f, 0.2870180308818817f, -0.025812121108174324f, 0.3309614956378937f, 0.03522571176290512f, -0.13095726072788239f, -0.05608547851443291f, 0.3666917681694031f, 0.05673566088080406f, 0.2562059462070465f, -0.09921761602163315f, 0.1635650396347046f, 0.10371150821447372f, --0.01616753078997135f, -0.042102545499801636f, 0.4689088463783264f, -0.030752740800380707f, 0.1390729546546936f, 0.11633192002773285f, 0.3447546362876892f, 0.03952989727258682f, -0.3425804674625397f, -0.01555558666586876f, 0.13852785527706146f, -0.0950864925980568f, 0.242001473903656f, 0.2021743804216385f, 0.27581530809402466f, -0.09049544483423233f, -0.3072648048400879f, 0.08203794062137604f, 0.17868083715438843f, -0.08532576262950897f, 0.17597715556621552f, 0.12922506034374237f, 0.2898835241794586f, -0.04240588843822479f, -0.23844386637210846f, 0.0520663820207119f, 0.18578724563121796f, -0.0011460495879873633f, 0.22259056568145752f, -0.04113715514540672f, 0.26846280694007874f, -0.08656236529350281f, -0.32090529799461365f, 0.05710636079311371f, 0.2052202671766281f, 0.1096583753824234f, 0.10470753163099289f, -0.2177446186542511f, 0.29120153188705444f, 0.1218048632144928f, -0.22868256270885468f, 0.21152552962303162f, 0.317672461271286f, -0.1677304357290268f, 0.14292064309120178f, 0.1296163946390152f, 0.30895450711250305f, -0.12347439676523209f, -0.11082492023706436f, -0.11223950237035751f, 0.12050198018550873f, -0.0850236564874649f, 0.4308348000049591f, 0.10700906068086624f, 0.19286538660526276f, 0.12396980822086334f, -0.11132515966892242f, 0.15651938319206238f, 0.20620259642601013f, -0.02812988869845867f, 0.2771626114845276f, 0.012917679734528065f, 0.27951064705848694f, -0.06653644144535065f, -0.06555495411157608f, -0.13140222430229187f, 0.3048659563064575f, -0.05939300358295441f, 0.09430614858865738f, 0.146390900015831f, 0.39628198742866516f, 0.18177162110805511f, -0.009371706284582615f, -0.07761510461568832f, 0.4054813086986542f, -0.014899194240570068f, 0.3603096306324005f, -0.1621396690607071f, 0.1227807030081749f, 0.15967686474323273f, -0.14657536149024963f, 0.14710496366024017f, 0.42642125487327576f, 0.06782953441143036f, 0.09420596063137054f, 0.08053626120090485f, 0.4030553698539734f, -0.20670951902866364f, -0.25660112500190735f, -0.06407678127288818f, 0.12077005207538605f, 0.03814795985817909f, 0.2740391492843628f, 0.11909805983304977f, 0.26952704787254333f, -0.06065267696976662f, -0.24174663424491882f, 0.03950792923569679f, 0.21417570114135742f, -0.03280504420399666f, 0.3557310402393341f, -0.09215255826711655f, 0.22533288598060608f, 0.08386887609958649f, -0.1364603042602539f, -0.01166803203523159f, 0.35958990454673767f, -0.032908227294683456f, 0.3014835715293884f, 0.2214171439409256f, 0.15683269500732422f, -0.11771231144666672f, -0.2711295187473297f, 0.05277106165885925f, 0.18295420706272125f, -0.0068458993919193745f, 0.5260401368141174f, 0.12189275771379471f, 0.07469471544027328f, -0.09922368079423904f, -0.21458356082439423f, -0.07290001958608627f, 0.4028192460536957f, 0.05734894797205925f, 0.22061312198638916f, 0.007511241361498833f, 0.03285303711891174f, -0.02343165874481201f, -0.09927545487880707f, 0.05424128472805023f, 0.28801414370536804f, 0.06302228569984436f, 0.4170801043510437f, -0.006498121190816164f, 0.1950811892747879f, -0.14548048377037048f, -0.2737060487270355f, 0.054991576820611954f, 0.22760137915611267f, -0.06499569863080978f, 0.1734248846769333f, 0.0006214946042746305f, 0.38732433319091797f, -0.12175525724887848f, -0.44253307580947876f, 0.06895224750041962f, 0.08141105622053146f, 0.05749180540442467f, 0.17324890196323395f, -0.2583502233028412f, 0.21875551342964172f, -0.0019605569541454315f, -0.34449711441993713f, -0.10571733862161636f, 0.01341454591602087f, 0.05345655605196953f, 0.32499831914901733f, -0.032733749598264694f, 0.13477395474910736f, -0.010210482403635979f, -0.22571367025375366f, 0.07459929585456848f, 0.15417812764644623f, -0.07506991922855377f, 0.308912992477417f, -0.0007390849059447646f, 0.2627045810222626f, 0.03199765086174011f, -0.29734668135643005f, -0.17961184680461884f, 0.2380302995443344f, -0.21772366762161255f, 0.24275095760822296f, 0.15112662315368652f, 0.07211107015609741f, 0.16649319231510162f, -0.2418895661830902f, -0.1059323400259018f, 0.368421345949173f, -0.00021813364583067596f, 0.11145122349262238f, 0.4084649980068207f, 0.14029794931411743f, -0.25480467081069946f, -0.03324123099446297f, -0.1670832633972168f, 0.08056364953517914f, 0.12585142254829407f, 0.483347624540329f, 0.027575474232435226f, 0.36535462737083435f, -0.03883440047502518f, -0.3467155694961548f, -0.05272512137889862f, 0.13434378802776337f, 0.0019458149326965213f, -0.025307876989245415f, 0.06709948182106018f, 0.3079177141189575f, 0.04996895417571068f, -0.20167729258537292f, -0.1722034513950348f, 0.22021637856960297f, 0.10402965545654297f, 0.13166429102420807f, 0.026801325380802155f, 0.3664950430393219f, 0.046182844787836075f, -0.21086852252483368f, -0.1533736139535904f, 0.30099552869796753f, 0.15333642065525055f, 0.18608500063419342f, 0.021633749827742577f, 0.14871938526630402f, -0.01939619891345501f, -0.40796270966529846f, -0.11081293970346451f, 0.20169326663017273f, -0.11517556011676788f, 0.1779555082321167f, 0.180989071726799f, 0.1868542730808258f, 0.035914987325668335f, -0.1303631216287613f, -0.08051769435405731f, 0.27326375246047974f, 0.1387196183204651f, 0.15833459794521332f, 0.1545427143573761f, 0.20230083167552948f, -0.2595282793045044f, -0.15097860991954803f, 0.21747374534606934f, 0.3313637375831604f, -0.17265553772449493f, 0.11549853533506393f, 0.06434587389230728f, 0.28037258982658386f, -0.18225102126598358f, -0.21456319093704224f, 0.10325442999601364f, 0.1417844444513321f, -0.06455820053815842f, 0.4194503724575043f, 0.04637440666556358f, 0.20856870710849762f, -0.025237806141376495f, -0.2991657555103302f, 0.0216770451515913f, 0.2535697817802429f, -0.06942882388830185f, 0.08931757509708405f, -0.01854921132326126f, 0.444098562002182f, 0.1706915646791458f, -0.13215859234333038f, 0.1924675554037094f, 0.18398171663284302f, 0.022497352212667465f, 0.3729272484779358f, -0.011717687360942364f, 0.2195219248533249f, -0.18405959010124207f, -0.2715506851673126f, -0.256139874458313f, 0.1079491451382637f, 0.08399047702550888f, 0.36255156993865967f, 0.014498167671263218f, 0.31144270300865173f, 0.15271461009979248f, -0.14463578164577484f, -0.08705037832260132f, 0.28707125782966614f, 0.01085358764976263f, 0.4642833173274994f, 0.13804775476455688f, 0.1454107165336609f, -0.01888839714229107f, -0.3510342538356781f, 0.021861432120203972f, 0.04829905554652214f, -0.071095772087574f, 0.3503723740577698f, 0.06702347844839096f, 0.1840127557516098f, -0.06231481954455376f, -0.2698260545730591f, 0.1234150379896164f, 0.22043010592460632f, -0.006602664012461901f, 0.3082667589187622f, -0.19547243416309357f, 0.14965124428272247f, 0.1055992841720581f, -0.09790850430727005f, 0.01634993404150009f, 0.4092886447906494f, -0.11818487197160721f, 0.2942161560058594f, 0.07346128672361374f, 0.20604194700717926f, 0.015538128092885017f, -0.328215628862381f, 0.11894401907920837f, 0.18084007501602173f, -0.0287056602537632f, 0.29977256059646606f, 0.11163534969091415f, 0.17977942526340485f, -0.134817436337471f, -0.5781823396682739f, -0.12911824882030487f, 0.36691588163375854f, -0.017706410959362984f, -0.05387866869568825f, 0.046454738825559616f, 0.03738589957356453f, 0.10717692971229553f, -0.07892008870840073f, -0.09207263588905334f, 0.20354098081588745f, 0.032574839890003204f, 0.2407551258802414f, -0.08042912930250168f, 0.4393980801105499f, 0.2603488862514496f, -0.49380046129226685f, -0.15973997116088867f, 0.0877760574221611f, -0.0653461366891861f, 0.29831820726394653f, -0.011382054537534714f, 0.10703171789646149f, 0.13209925591945648f, -0.39124101400375366f, -0.01653171144425869f, 0.09611799567937851f, -0.07244693487882614f, 0.1980976015329361f, 0.10452644526958466f, 0.14908236265182495f, 0.15793970227241516f, -0.18555870652198792f, -0.004464548081159592f, 0.19284403324127197f, 0.0995950996875763f, 0.22333739697933197f, -0.14129532873630524f, 0.1991288959980011f, 0.0120515376329422f, -0.14102119207382202f, -0.06210656464099884f, 0.1456698179244995f, -0.14951196312904358f, 0.3968893587589264f, -0.002107093809172511f, 0.2810044586658478f, 0.15798181295394897f, -0.4905635118484497f, -0.07717127352952957f, 0.35397088527679443f, -0.019456524401903152f, 0.027192603796720505f, 0.05791699141263962f, 0.19517485797405243f, 0.0027892848011106253f, -0.3266407251358032f, -0.19714795053005219f, 0.2491675168275833f, -0.04552215710282326f, 0.2364805042743683f, 0.024309322237968445f, 0.03395866975188255f, 0.1874420940876007f, -0.2705337703227997f, -0.0760887935757637f, 0.11113422363996506f, -0.028897656127810478f, 0.06798399239778519f, 0.10124559700489044f, 0.3616357445716858f, -0.044017743319272995f, -0.1886918693780899f, -0.011439742520451546f, 0.20632094144821167f, 0.18540829420089722f, 0.3191807270050049f, -0.0026091618929058313f, 0.21418562531471252f, -0.07070819288492203f, -0.05483186990022659f, -0.12739890813827515f, 0.3256615102291107f, 0.07212835550308228f, 0.30949532985687256f, 0.04030061513185501f, 0.12902802228927612f, -0.0346129909157753f, -0.14060570299625397f, -0.023206334561109543f, 0.4172710180282593f, -0.18304163217544556f, 0.04085085168480873f, 0.22249844670295715f, 0.2905995547771454f, 0.00482857646420598f, -0.17026592791080475f, 0.2146582156419754f, 0.37205445766448975f, 0.10111656785011292f, 0.3514629304409027f, -0.06839915364980698f, 0.04404180869460106f, -0.31142711639404297f, -0.3490842580795288f, 0.07257824391126633f, 0.5250997543334961f, 0.07595887780189514f, 0.05255642533302307f, -0.18430273234844208f, 0.012696901336312294f, 0.006303675472736359f, -0.2005423605442047f, 0.23359322547912598f, 0.2712323069572449f, -0.10151012986898422f, 0.03708339110016823f, -0.15859422087669373f, 0.352200448513031f, -0.003643645206466317f, -0.03157610446214676f, 0.06512724608182907f, 0.30104297399520874f, -0.13561008870601654f, 0.1858823448419571f, -0.05508934706449509f, 0.28434479236602783f, 0.1697147935628891f, -0.1669609099626541f, -0.1044192835688591f, 0.21843382716178894f, -0.028173265978693962f, 0.14434586465358734f, 0.2703413665294647f, 0.42242443561553955f, -0.06934404373168945f, -0.22710631787776947f, 0.02756909467279911f, 0.22245505452156067f, 0.05425933003425598f, 0.316189169883728f, -0.09649249166250229f, 0.2023811787366867f, -0.043493740260601044f, -0.02144833281636238f, 0.12036360055208206f, 0.2406473308801651f, -0.0733230710029602f, 0.3628343641757965f, -0.11270440369844437f, 0.17557920515537262f, 0.13623569905757904f, -0.2703733742237091f, 0.053627122193574905f, 0.25172361731529236f, 0.009688375517725945f, 0.03776652738451958f, 0.07660257816314697f, 0.2022516131401062f, -0.08030476421117783f, -0.1613379418849945f, -0.1152534931898117f, 0.11623390763998032f, 0.1439203917980194f, 0.26684585213661194f, -0.1244904100894928f, 0.2433747798204422f, 0.07913274317979813f, -0.2872787415981293f, 0.1559373140335083f, 0.2160201072692871f, -0.10841202735900879f, 0.10549794882535934f, 0.03435968980193138f, 0.2816990911960602f, -0.1241176426410675f, --0.06816821545362473f, -0.10297360271215439f, 0.48903384804725647f, 0.1412140280008316f, 0.14833612740039825f, 0.09448899328708649f, 0.28677648305892944f, -0.13867291808128357f, -0.24957668781280518f, -0.15275157988071442f, 0.19192354381084442f, 0.1492866575717926f, 0.24239851534366608f, 0.030891677364706993f, 0.28174126148223877f, 0.016965804621577263f, -0.026313483715057373f, 0.11431911587715149f, 0.2727257013320923f, 0.2122402936220169f, 0.2981148362159729f, 0.09618132561445236f, 0.354675829410553f, -0.38095709681510925f, -0.287664532661438f, -0.073734812438488f, 0.1438935548067093f, -0.14384521543979645f, 0.18014948070049286f, 0.09732551872730255f, 0.37456315755844116f, -0.015895109623670578f, -0.3264126181602478f, -0.06489983946084976f, 0.31317466497421265f, 0.07603908330202103f, 0.2256009876728058f, 0.054074712097644806f, 0.11637517809867859f, -0.06151876971125603f, -0.24719788134098053f, 0.07312145084142685f, 0.3180179297924042f, 0.07976450771093369f, 0.3668314218521118f, -0.11788760125637054f, 0.115232914686203f, 0.011249922215938568f, -0.1683887541294098f, -0.030177684500813484f, 0.18756012618541718f, -0.025260964408516884f, 0.3134365677833557f, -0.029935620725154877f, 0.29214298725128174f, 0.1357301026582718f, -0.1265699565410614f, -0.09260779619216919f, 0.31983882188796997f, -0.031070010736584663f, 0.2169153392314911f, 0.030654769390821457f, 0.25502708554267883f, -0.014320875518023968f, -0.21483898162841797f, 0.12656795978546143f, 0.35910311341285706f, 0.10149215161800385f, 0.02300354093313217f, -0.054397035390138626f, 0.346199631690979f, -0.16919516026973724f, -0.2580270767211914f, 0.10239746421575546f, 0.2617938220500946f, -0.041261859238147736f, 0.19442741572856903f, -0.11925874650478363f, 0.2222760021686554f, -0.005400833673775196f, -0.2326301485300064f, 0.12412463128566742f, 0.137290820479393f, -0.2198054939508438f, 0.3712562620639801f, -0.0558152049779892f, 0.31321150064468384f, 0.11076405644416809f, -0.18218232691287994f, 0.024974655359983444f, 0.14509673416614532f, -0.20466101169586182f, 0.32559090852737427f, 0.0783410593867302f, 0.2736845016479492f, 0.1226382926106453f, -0.2883044183254242f, -0.06639446318149567f, 0.15340609848499298f, -0.12397932261228561f, 0.378751665353775f, 0.002694611204788089f, 0.14632843434810638f, 0.09386564046144485f, -0.345389187335968f, -0.08780397474765778f, 0.07599805295467377f, 0.06546608358621597f, 0.21846482157707214f, 0.07226625084877014f, 0.30214783549308777f, -0.05784287676215172f, -0.27896177768707275f, 0.09597600996494293f, 0.4127386808395386f, -0.12398701161146164f, 0.36506780982017517f, -0.04569704085588455f, -0.10944624245166779f, 0.06453375518321991f, -0.21746960282325745f, 0.041354499757289886f, 0.3189782500267029f, -0.040863677859306335f, 0.439473420381546f, 0.16278164088726044f, -0.013503705151379108f, -0.14190325140953064f, -0.17723971605300903f, 0.12790831923484802f, 0.3437153697013855f, 0.06773288547992706f, 0.1696157604455948f, 0.020104439929127693f, 0.23146021366119385f, -0.07247140258550644f, -0.4273037314414978f, 0.006858971435576677f, 0.21260899305343628f, -0.13414619863033295f, -0.1414586752653122f, 0.09857144951820374f, 0.25485759973526f, -0.036077868193387985f, -0.3185267448425293f, 0.1476004421710968f, 0.24026937782764435f, 0.10628780722618103f, 0.16713298857212067f, -0.03403850644826889f, 0.17616508901119232f, -0.18673065304756165f, -0.17113259434700012f, -0.028418127447366714f, 0.14879371225833893f, 0.0768858939409256f, 0.18350449204444885f, 0.15932784974575043f, 0.36297789216041565f, -0.0600171722471714f, -0.37985435128211975f, -0.1332319974899292f, 0.0957486629486084f, 0.07293809950351715f, 0.13706381618976593f, -0.08660519868135452f, 0.3202333152294159f, -0.03175514191389084f, -0.400359570980072f, 0.007173385005444288f, 0.2591109275817871f, -0.0353323370218277f, 0.21671907603740692f, -0.03843139111995697f, 0.04737010598182678f, -0.04594743996858597f, -0.016143890097737312f, 0.2898006737232208f, 0.19829601049423218f, -0.06163456663489342f, 0.4890729486942291f, -0.13088387250900269f, 0.30158668756484985f, -0.012679100967943668f, -0.34976452589035034f, -0.004548818804323673f, 0.27857470512390137f, -0.0842122882604599f, 0.21747510135173798f, 0.16743309795856476f, 0.19215752184391022f, -0.06381319463253021f, -0.344060480594635f, -0.08379289507865906f, 0.26954132318496704f, 0.1861930638551712f, 0.13261760771274567f, -0.12362461537122726f, 0.17957359552383423f, 0.0041703530587255955f, -0.08388698101043701f, 0.1463880091905594f, 0.28203415870666504f, -0.06800635159015656f, 0.2732185423374176f, 0.014399017207324505f, 0.1759951263666153f, -0.08012095838785172f, -0.2776861786842346f, 0.07347242534160614f, 0.24139297008514404f, 0.12989892065525055f, 0.22440692782402039f, -0.17104105651378632f, 0.22042760252952576f, 0.08136390894651413f, -0.3423343002796173f, -0.13891953229904175f, 0.1985509693622589f, 0.14067327976226807f, 0.1685185432434082f, -0.07351043075323105f, 0.2705003321170807f, 0.02812926284968853f, -0.23906821012496948f, 0.12863391637802124f, 0.22450138628482819f, -0.02289973571896553f, 0.36605438590049744f, -0.08061587065458298f, 0.08457863330841064f, -0.023790471255779266f, -0.1705583930015564f, -0.11893688887357712f, 0.14569753408432007f, -0.09776584804058075f, 0.3185366690158844f, 0.019203972071409225f, 0.1870598942041397f, 0.317653626203537f, -0.16380445659160614f, -0.07170981168746948f, 0.16038155555725098f, -0.20531108975410461f, 0.3481743037700653f, 0.12572409212589264f, 0.28037551045417786f, 0.07309764623641968f, -0.20431745052337646f, -0.047025054693222046f, 0.2573670446872711f, -0.25253528356552124f, 0.2818011939525604f, 0.19489532709121704f, 0.10520487278699875f, -0.05606343597173691f, -0.29987937211990356f, -0.10187245905399323f, 0.09912977367639542f, -0.19730602204799652f, 0.03529774770140648f, 0.06316827237606049f, 0.4996391832828522f, 0.15810905396938324f, -0.12350728362798691f, -0.17230109870433807f, 0.35002002120018005f, 0.07970931380987167f, 0.28293779492378235f, 0.2174551784992218f, 0.15023921430110931f, -0.1413739025592804f, -0.21699480712413788f, 0.0721055120229721f, 0.34258753061294556f, -0.20138852298259735f, 0.19799619913101196f, 0.03469289839267731f, 0.2495233416557312f, -0.015453319065272808f, -0.1632743626832962f, -0.1433384120464325f, 0.3145337998867035f, 0.20513376593589783f, 0.254309743642807f, -0.07969113439321518f, 0.15731246769428253f, 0.10695963352918625f, -0.17545324563980103f, 0.12064739316701889f, 0.3121567964553833f, -0.09494277089834213f, 0.25745895504951477f, 0.09274453669786453f, 0.16298674046993256f, -0.01790015958249569f, -0.17013168334960938f, -0.09317883104085922f, 0.16446733474731445f, -0.11375926434993744f, 0.13120324909687042f, 0.0985819548368454f, 0.48001188039779663f, 0.032583609223365784f, -0.27345550060272217f, -0.003363480092957616f, 0.22009626030921936f, -0.03226817399263382f, 0.09390239417552948f, -0.0316178984940052f, 0.1981702744960785f, 0.11757507175207138f, -0.21919038891792297f, 0.003450654447078705f, 0.40215134620666504f, -0.11365167051553726f, 0.15903697907924652f, 0.06788361072540283f, 0.19751276075839996f, 0.05952894315123558f, --0.047372084110975266f, 0.11320913583040237f, 0.24061302840709686f, -0.15953847765922546f, 0.6426323652267456f, -0.0038236593827605247f, 0.1861402541399002f, 0.09358111768960953f, -0.4073740541934967f, -0.17137247323989868f, 0.15849369764328003f, 0.14696232974529266f, 0.26023682951927185f, -0.05663624405860901f, 0.16296954452991486f, 0.19053137302398682f, -0.22571825981140137f, -0.057454224675893784f, 0.1987779140472412f, -0.08914762735366821f, 0.12692736089229584f, -0.03315754979848862f, 0.3850746750831604f, 0.14021293818950653f, -0.0964144691824913f, 0.2916303277015686f, 0.30193665623664856f, -0.07248259335756302f, 0.1400395780801773f, -0.09744853526353836f, 0.3626280725002289f, -0.1422966718673706f, -0.22276034951210022f, -0.21319672465324402f, 0.29587361216545105f, 0.06403721868991852f, 0.10955033451318741f, -0.002911545103415847f, 0.1194232627749443f, 0.13421089947223663f, -0.29235363006591797f, -0.08642768859863281f, 0.23655137419700623f, 0.2280551791191101f, 0.0559564046561718f, 0.009278209879994392f, 0.4738025367259979f, -0.0759178027510643f, -0.16893158853054047f, 0.017829425632953644f, 0.43962985277175903f, 0.06259147077798843f, 0.12276975065469742f, -0.07395858317613602f, 0.2168710082769394f, -0.14285817742347717f, -0.1643979698419571f, -0.1950037181377411f, 0.2184765487909317f, 0.04243912175297737f, 0.20011894404888153f, 0.057166144251823425f, 0.3166404068470001f, 0.11114230751991272f, -0.25912028551101685f, 0.09704717993736267f, 0.08125336468219757f, -0.049134522676467896f, 0.2616294026374817f, 0.011210513301193714f, 0.40072792768478394f, -0.013661599718034267f, -0.06316054612398148f, -0.19989804923534393f, 0.21499012410640717f, -0.03881805017590523f, 0.283696711063385f, 0.22231625020503998f, 0.3819466233253479f, -0.07199309766292572f, -0.2485966682434082f, -0.15234141051769257f, 0.09729257971048355f, 0.023942621424794197f, 0.23723851144313812f, 0.08573244512081146f, 0.3314850628376007f, 0.055444248020648956f, -0.14677093923091888f, 0.132223442196846f, 0.11823194473981857f, -0.0861889123916626f, 0.22439755499362946f, -0.16269245743751526f, 0.4205840528011322f, 0.12509006261825562f, --0.009578234516084194f, 0.010892101563513279f, 0.25654247403144836f, -0.0671742707490921f, 0.3646606504917145f, -0.05611471086740494f, 0.41369420289993286f, 0.06698320806026459f, -0.23765571415424347f, 0.3169175386428833f, -0.08518806099891663f, 0.05173671618103981f, 0.19560475647449493f, -0.2782493531703949f, 0.5976496934890747f, 0.02384261041879654f, -0.26267990469932556f, 0.05165855213999748f, 0.2900089919567108f, 0.08782457560300827f, 0.035415586084127426f, -0.052391789853572845f, 0.22255893051624298f, -0.0009908931097015738f, -0.12484744191169739f, -0.027491232380270958f, 0.26635053753852844f, -0.171737939119339f, 0.23451152443885803f, -0.00045788189163431525f, 0.26105234026908875f, 0.19366325438022614f, -0.2946533262729645f, -0.15083082020282745f, 0.07349716871976852f, 0.0020260843448340893f, 0.1622534543275833f, 0.08056492358446121f, 0.3319438397884369f, -0.042083822190761566f, -0.1713225245475769f, 0.21443916857242584f, 0.1767619401216507f, -0.1565534472465515f, 0.2460433542728424f, 0.003225884400308132f, 0.39284297823905945f, 0.036422550678253174f, -0.27393007278442383f, 0.09914934635162354f, 0.22674135863780975f, 0.07520721852779388f, 0.29201871156692505f, 0.20929363369941711f, 0.10715258121490479f, -0.279362291097641f, -0.2596389651298523f, 0.17118704319000244f, 0.1095103845000267f, -0.12619735300540924f, 0.3431168794631958f, -0.12072493135929108f, 0.15193729102611542f, 0.05093412846326828f, --0.01653563603758812f, -0.16083818674087524f, 0.3060239255428314f, 0.22542330622673035f, 0.1996145099401474f, 0.08031732589006424f, 0.3590591251850128f, -0.04092884808778763f, -0.325325071811676f, -0.09088253974914551f, 0.10753490775823593f, 0.025691747665405273f, 0.3214399218559265f, -0.028931086882948875f, 0.29589784145355225f, 0.033253513276576996f, -0.23349668085575104f, -0.19273456931114197f, 0.2017166167497635f, 0.12093090265989304f, 0.1942465454339981f, -0.0713232085108757f, 0.3932432234287262f, 0.16481035947799683f, -0.37945815920829773f, 0.03527075797319412f, 0.22758080065250397f, -0.1573784202337265f, 0.12621167302131653f, -0.019679319113492966f, 0.28046417236328125f, 0.03935898467898369f, -0.21760395169258118f, -0.06381771713495255f, 0.24852529168128967f, -0.041191138327121735f, 0.23403316736221313f, -0.02483539469540119f, 0.22043339908123016f, 0.23438911139965057f, -0.17957790195941925f, 0.09553640335798264f, 0.045607790350914f, -0.09320387989282608f, 0.27027830481529236f, -0.1367853581905365f, 0.46314242482185364f, 0.06620948761701584f, -0.25002360343933105f, 0.17385919392108917f, 0.35895633697509766f, -0.17853327095508575f, 0.06241009011864662f, 0.18068158626556396f, 0.3439399003982544f, -0.2715699076652527f, -0.2890559434890747f, -0.053880300372838974f, 0.2769012153148651f, 0.1860070526599884f, 0.25678908824920654f, -0.08525574207305908f, 0.20240384340286255f, 0.0713428184390068f, -0.3661041855812073f, 0.020175352692604065f, 0.4410177767276764f, 0.03786996006965637f, -0.09767073392868042f, -0.06308334320783615f, 0.17777103185653687f, 0.04054296761751175f, -0.15330146253108978f, 0.08461680263280869f, 0.30721938610076904f, 0.04087332636117935f, 0.10358667373657227f, 0.19383342564105988f, 0.2785894274711609f, -0.19744762778282166f, -0.17622852325439453f, -0.1604500263929367f, 0.16588187217712402f, 0.031387604773044586f, 0.31077611446380615f, 0.07929878681898117f, 0.16814416646957397f, 0.1463942676782608f, -0.16847437620162964f, -0.09879796206951141f, 0.0993676483631134f, 0.04856050759553909f, 0.3629988133907318f, 0.027690427377820015f, 0.127920463681221f, 0.1060938611626625f, --0.04923972859978676f, -0.07237399369478226f, 0.08147013187408447f, 0.11010703444480896f, 0.2261064499616623f, -0.10551032423973083f, 0.43881985545158386f, 0.034938279539346695f, -0.219380185008049f, 0.04667606204748154f, -0.028799444437026978f, -0.3594679534435272f, 0.41466251015663147f, 0.20968638360500336f, 0.31044483184814453f, 0.014802456833422184f, -0.3426946997642517f, 0.05156766623258591f, 0.26153630018234253f, 0.2877666652202606f, 0.28151440620422363f, -0.011620068922638893f, 0.14716224372386932f, -0.09873341768980026f, -0.21455971896648407f, 0.1947103887796402f, 0.21441127359867096f, -0.1827191412448883f, 0.3921900689601898f, 0.017940854653716087f, 0.11297260224819183f, -0.0767609104514122f, -0.3438689410686493f, 0.061641134321689606f, 0.25245288014411926f, 0.1505928486585617f, 0.23513907194137573f, -0.16114938259124756f, 0.023496894165873528f, -0.08650317788124084f, -0.11114589869976044f, -0.05273813754320145f, 0.29826244711875916f, -0.0025246660225093365f, 0.39579588174819946f, -0.013402188196778297f, 0.1565610021352768f, -0.05751325190067291f, -0.38788124918937683f, -0.13400185108184814f, 0.18164537847042084f, 0.09380409121513367f, 0.10205130279064178f, -0.10814622044563293f, 0.3261004686355591f, 0.07147610932588577f, -0.32839474081993103f, 0.06213121861219406f, 0.1820249706506729f, -0.00917060300707817f, 0.12378247827291489f, -0.029337044805288315f, 0.36234498023986816f, 0.014792918227612972f, -0.324717253446579f, -0.02163812145590782f, 0.343988835811615f, -0.08416856080293655f, 0.17386341094970703f, 0.21422608196735382f, 0.15994323790073395f, -0.21480892598628998f, -0.09246169030666351f, 0.014415782876312733f, 0.34076330065727234f, 0.11780854314565659f, 0.1703716367483139f, 0.00390473660081625f, 0.37268561124801636f, -0.19625574350357056f, -0.28688356280326843f, -0.01054519321769476f, 0.17727284133434296f, 0.1528315395116806f, -0.10940917581319809f, -0.03668671473860741f, 0.4767647981643677f, -0.16845141351222992f, -0.07673013210296631f, -0.07214976102113724f, 0.22641322016716003f, 0.04692383110523224f, 0.28472158312797546f, 0.0631863996386528f, 0.42942091822624207f, -0.05230863764882088f, -0.24734395742416382f, -0.15157818794250488f, 0.5180985331535339f, -0.16914385557174683f, 0.212505504488945f, 0.09288590401411057f, -0.0594666562974453f, 0.2320762425661087f, -0.2561701238155365f, 0.04869368299841881f, 0.028054652735590935f, 0.024497654289007187f, 0.34648874402046204f, 0.08492764085531235f, 0.2675899267196655f, -0.10533515363931656f, -0.1847536712884903f, -0.06429446488618851f, 0.3179119825363159f, 0.15227794647216797f, 0.206842303276062f, 0.02950752153992653f, 0.11910183727741241f, -0.11019205302000046f, -0.3199531137943268f, 0.06424454599618912f, 0.21584756672382355f, 0.023852549493312836f, 0.047219689935445786f, -0.13028661906719208f, 0.2809962034225464f, 0.08154381811618805f, -0.2400926798582077f, 0.07531893998384476f, 0.23387864232063293f, -0.1238495409488678f, 0.2523966133594513f, 0.1500573605298996f, 0.09147909283638f, -0.11092821508646011f, -0.1876378357410431f, 0.2475314438343048f, 0.27476346492767334f, -0.09769217669963837f, 0.01652468927204609f, -0.0660792887210846f, 0.2729749083518982f, -0.025217469781637192f, -0.2619633376598358f, 0.016676869243383408f, 0.10611472278833389f, 0.05384040251374245f, 0.32751721143722534f, -0.14136388897895813f, 0.3322667181491852f, 0.16903361678123474f, -0.03255210071802139f, 0.0364203080534935f, 0.4118581712245941f, -0.11188368499279022f, 0.3912537693977356f, 0.023003200069069862f, 0.10715499520301819f, 0.005096278619021177f, -0.3275783360004425f, -0.1726587414741516f, 0.4214898943901062f, 0.051809195429086685f, 0.14912472665309906f, 0.12100052088499069f, 0.132669597864151f, 0.010260079987347126f, -0.2766353189945221f, -0.21571698784828186f, 0.2612059712409973f, -0.019271649420261383f, 0.19409582018852234f, -0.11476024240255356f, 0.2626368999481201f, 0.38837504386901855f, -0.25660425424575806f, 0.08449862897396088f, 0.23395173251628876f, -0.017423348501324654f, 0.26506251096725464f, -0.06860128045082092f, 0.06575041264295578f, 0.06979112327098846f, -0.08804477006196976f, 0.0034894454292953014f, 0.3165808618068695f, -0.08818786591291428f, -0.04003525897860527f, 0.1808978021144867f, 0.5035784840583801f, -0.0872921496629715f, -0.23847348988056183f, -0.0870281532406807f, 0.14882953464984894f, 0.08631955832242966f, 0.18850576877593994f, -0.0450354628264904f, 0.2684100568294525f, 0.1482229083776474f, -0.28410813212394714f, 0.09905032813549042f, 0.15635783970355988f, -0.07579843699932098f, 0.2972073256969452f, -0.008615312166512012f, 0.2221759855747223f, 0.04923945665359497f, -0.2525789439678192f, 0.01172748301178217f, 0.17818450927734375f, -0.04989584907889366f, 0.23442251980304718f, 0.031097400933504105f, 0.23711436986923218f, -0.11814742535352707f, -0.05090105161070824f, -0.01251291111111641f, 0.3192526400089264f, 0.13533374667167664f, 0.3313589096069336f, -0.12299034744501114f, 0.34163254499435425f, -0.02407979778945446f, -0.09596891701221466f, -0.04779433459043503f, 0.09301964193582535f, -0.07572756707668304f, 0.35461917519569397f, 0.05837750434875488f, 0.2784474194049835f, 0.03828898072242737f, -0.24506039917469025f, -0.23561327159404755f, 0.25145819783210754f, 0.022448984906077385f, 0.24829944968223572f, -0.12768930196762085f, 0.02821274660527706f, 0.35319676995277405f, -0.5325871109962463f, 0.13947193324565887f, 0.2014416754245758f, -0.07787446677684784f, 0.14713464677333832f, 0.010448610410094261f, 0.027167869731783867f, 0.05546307563781738f, -0.2747630476951599f, 0.13927000761032104f, 0.08076082915067673f, -0.11548350751399994f, 0.12173481285572052f, 0.0802268460392952f, 0.3943929374217987f, 0.0032588522881269455f, -0.08721943199634552f, 0.09904452413320541f, 0.19611677527427673f, -0.028265757486224174f, 0.44673147797584534f, -0.08140791952610016f, 0.16726747155189514f, 0.014987572096288204f, -0.3791655898094177f, 0.03559695556759834f, 0.03159315139055252f, -0.01427360437810421f, 0.20675049722194672f, 0.05008821561932564f, 0.39218586683273315f, 0.053035665303468704f, -0.3017602562904358f, 0.025929538533091545f, 0.23886002600193024f, -0.08290216326713562f, 0.13123619556427002f, 0.07182794064283371f, 0.2728116810321808f, -0.10614443570375443f, -0.33075499534606934f, 5.454132042359561e-05f, 0.1884169727563858f, 0.1006055399775505f, 0.31163260340690613f, 0.06928965449333191f, 0.30718541145324707f, -0.17553915083408356f, -0.2140207439661026f, 0.27999308705329895f, 0.12834443151950836f, -0.056825295090675354f, 0.32203346490859985f, -0.11403879523277283f, 0.13749708235263824f, -0.18318134546279907f, -0.06884541362524033f, 0.3488522171974182f, 0.21724998950958252f, -0.156174436211586f, 0.23915618658065796f, -0.05976281315088272f, 0.3139698803424835f, -0.051462020725011826f, -0.22434289753437042f, 0.028557749465107918f, 0.2991591989994049f, 0.04920385032892227f, 0.36360982060432434f, -0.1358557939529419f, 0.06769512593746185f, 0.09840036928653717f, -0.04817698523402214f, -0.1646803319454193f, 0.2745595872402191f, -0.09504230320453644f, 0.40922653675079346f, 0.21646326780319214f, 0.16556715965270996f, -0.10932332277297974f, -0.22392065823078156f, 0.08596887439489365f, 0.3717525005340576f, -0.013241278938949108f, 0.19060857594013214f, -0.01528267003595829f, 0.2538466453552246f, 0.08579675108194351f, --0.013309627771377563f, -0.1760527640581131f, 0.31398525834083557f, 0.1877581775188446f, 0.22138793766498566f, 0.10838279128074646f, 0.2920723855495453f, -0.15531420707702637f, -0.33512818813323975f, -0.07814117521047592f, 0.10798618197441101f, 0.006448499858379364f, 0.07366582006216049f, 0.09637974947690964f, 0.4438330829143524f, -0.054508619010448456f, -0.4401126205921173f, -0.14813388884067535f, 0.23620693385601044f, 0.0977184996008873f, 0.1553163230419159f, -0.032756634056568146f, 0.2494160234928131f, 0.10852093249559402f, -0.2463928759098053f, -0.17017103731632233f, 0.3983490765094757f, -0.08943641185760498f, 0.18529339134693146f, 0.32311663031578064f, 0.21066690981388092f, -0.02461535483598709f, -0.06671497970819473f, -0.08567497879266739f, 0.49571338295936584f, -0.14496280252933502f, 0.09627878665924072f, 0.02849287912249565f, 0.14150932431221008f, 0.1738997846841812f, -0.47256600856781006f, 0.12716062366962433f, 0.27806058526039124f, -0.09324763715267181f, 0.08524277061223984f, -0.09843195229768753f, 0.21041277050971985f, 0.06012330204248428f, -0.39011716842651367f, 0.008763523772358894f, 0.14165782928466797f, 0.09468631446361542f, 0.16621065139770508f, 0.002349856309592724f, 0.13142473995685577f, 0.030247047543525696f, -0.07878801226615906f, -0.0017997563118115067f, 0.2902434170246124f, 0.10144124180078506f, 0.33453044295310974f, -0.010316252708435059f, 0.18576034903526306f, -0.08689409494400024f, -0.07760492712259293f, 0.16233135759830475f, 0.23959390819072723f, 0.1869966983795166f, 0.33752915263175964f, -0.1826133131980896f, 0.16963784396648407f, -0.21618026494979858f, -0.21836137771606445f, 0.060575202107429504f, 0.2993684709072113f, -0.20701871812343597f, 0.07228629291057587f, -0.004831571131944656f, 0.27575358748435974f, 0.1881941705942154f, -0.41892239451408386f, -0.29478198289871216f, 0.30623310804367065f, -0.17474104464054108f, 0.06822701543569565f, 0.3107534348964691f, 0.2501808702945709f, 0.12935587763786316f, -0.1703202724456787f, 0.14459024369716644f, 0.393392413854599f, -0.057764533907175064f, 0.27592578530311584f, -0.029602428898215294f, 0.09922846406698227f, 0.020512782037258148f, -0.2200506627559662f, -0.07099420577287674f, 0.14878392219543457f, -0.10790703445672989f, 0.31318768858909607f, 0.03271699324250221f, 0.21857312321662903f, 0.028641246259212494f, -0.08876489847898483f, 0.032286617904901505f, 0.44670119881629944f, -0.04216637462377548f, 0.19988377392292023f, 0.1232944130897522f, 0.07423515617847443f, 0.05555012822151184f, -0.16762718558311462f, -0.0332069993019104f, 0.28155139088630676f, -0.07825887203216553f, 0.19040676951408386f, -0.019141267985105515f, 0.2838405668735504f, 0.05190867558121681f, -0.23748664557933807f, 0.024821866303682327f, 0.163224995136261f, 0.020967939868569374f, 0.19553257524967194f, -0.007748905103653669f, 0.0982130691409111f, -0.09661448001861572f, -0.1581234633922577f, 0.042575474828481674f, 0.20045261085033417f, -0.08380860835313797f, 0.33593112230300903f, 0.16865654289722443f, 0.16891491413116455f, -0.06107586622238159f, -0.1964244544506073f, 0.39855462312698364f, 0.38527095317840576f, -0.18458962440490723f, 0.4242146611213684f, 0.001339175389148295f, 0.114829421043396f, -0.109293632209301f, -0.3462825417518616f, -0.0017241317545995116f, 0.3279619812965393f, 0.21046096086502075f, 0.0812973603606224f, -0.18347807228565216f, 0.31088805198669434f, -0.16189917922019958f, -0.2178463190793991f, -0.2259265035390854f, 0.3105073869228363f, 0.10800646245479584f, -0.039035551249980927f, -0.008367884904146194f, 0.3575148284435272f, 0.17357303202152252f, -0.1264161914587021f, -0.03915379196405411f, 0.10385768115520477f, -0.06390288472175598f, 0.40297752618789673f, 0.13940730690956116f, 0.23745833337306976f, -0.013380268588662148f, -0.14533710479736328f, 0.09635704010725021f, 0.33099573850631714f, -0.13608627021312714f, 0.20348043739795685f, -0.05184612795710564f, 0.23677431046962738f, 0.03758006542921066f, -0.24862506985664368f, 0.0007123652030713856f, 0.29740771651268005f, 0.15774846076965332f, 0.22491097450256348f, -0.06623804569244385f, 0.1768319010734558f, -0.19444693624973297f, -0.3347178101539612f, 0.03615676611661911f, 0.3759303092956543f, -0.043232619762420654f, 0.05387814715504646f, 0.10396727174520493f, 0.142253115773201f, -0.12239181250333786f, -0.280105322599411f, -0.07137733697891235f, 0.1702551245689392f, 0.11909118294715881f, 0.1269391030073166f, -0.18522542715072632f, 0.26342323422431946f, 0.09910837560892105f, -0.10559793561697006f, 0.024540944024920464f, 0.3122856914997101f, -0.053651582449674606f, 0.354057639837265f, 0.02394477091729641f, 0.22640924155712128f, 0.050429731607437134f, -0.4072323143482208f, 0.0802478939294815f, 0.08097341656684875f, -0.050420571118593216f, 0.25263848900794983f, -0.01809912919998169f, 0.20324094593524933f, -0.06658300012350082f, -0.18899574875831604f, 0.10330960899591446f, 0.2328685075044632f, -0.17637956142425537f, 0.4711062014102936f, 0.04347896948456764f, 0.03976179286837578f, -0.027424359694123268f, -0.18303033709526062f, -0.12993092834949493f, 0.10653471946716309f, -0.05490601807832718f, 0.3002268671989441f, 0.08449023962020874f, 0.29607367515563965f, 0.08696993440389633f, -0.20123356580734253f, 0.23922349512577057f, 0.25560182332992554f, -0.18352779746055603f, 0.18276043236255646f, 0.13150767982006073f, 0.2714933753013611f, -0.0071914237923920155f, -0.19054637849330902f, 0.10425956547260284f, 0.045467477291822433f, -0.04283545911312103f, 0.25960877537727356f, -0.0009039107826538384f, 0.402561753988266f, -0.12929488718509674f, -0.18253253400325775f, 0.14095984399318695f, 0.15230797231197357f, 0.09374004602432251f, 0.38803279399871826f, -0.08430233597755432f, 0.25002285838127136f, -0.06258563697338104f, -0.21241742372512817f, -0.05153866112232208f, 0.23233573138713837f, 0.12590746581554413f, 0.07058662921190262f, -0.06321951001882553f, 0.29580360651016235f, -0.0865347757935524f, -0.3541422486305237f, 0.07779541611671448f, 0.2682926058769226f, -0.12321723997592926f, 0.2887161374092102f, 0.1457831859588623f, -0.04081074520945549f, -0.1237223818898201f, -0.05636183172464371f, 0.03376421704888344f, 0.3775418996810913f, 0.07684280723333359f, 0.29834333062171936f, 0.03755497932434082f, 0.16913150250911713f, -0.09891550987958908f, -0.26865455508232117f, 0.11470988392829895f, 0.13187873363494873f, -0.22289665043354034f, 0.1008404791355133f, -0.125203475356102f, 0.31694766879081726f, 0.17823515832424164f, -0.2164807766675949f, -0.08914526551961899f, 0.11487127840518951f, -0.08295818418264389f, 0.35209423303604126f, 0.003784975502640009f, 0.21370410919189453f, 0.03931345045566559f, -0.41149139404296875f, -0.042970817536115646f, 0.18908049166202545f, -0.11329081654548645f, 0.25756824016571045f, -0.01679527387022972f, 0.08031845837831497f, 0.17649826407432556f, -0.2264532595872879f, -0.043950002640485764f, 0.24091552197933197f, -0.03569059818983078f, 0.1745133101940155f, -0.030962442979216576f, 0.18182145059108734f, 0.13134153187274933f, -0.42705410718917847f, 0.06621623039245605f, 0.19486641883850098f, -0.06742231547832489f, 0.1279856264591217f, 0.11163962632417679f, 0.15105201303958893f, 0.03106086328625679f, -0.3365313708782196f, 0.023336302489042282f, 0.4893205463886261f, 0.0093760397285223f, 0.14846540987491608f, 0.007704544346779585f, 0.0028019538149237633f, -0.03526442125439644f, -0.04555924981832504f, 0.023580586537718773f, 0.2607725262641907f, -0.17983849346637726f, 0.3735107481479645f, 0.020889995619654655f, 0.23678888380527496f, 0.1646580994129181f, -0.1467605084180832f, -0.0668107122182846f, 0.07546301186084747f, -0.05426221340894699f, 0.39138200879096985f, 0.0925460085272789f, 0.24181541800498962f, -0.00042844846029765904f, --0.01464765053242445f, -0.04973243549466133f, 0.5133092403411865f, 0.1928214281797409f, 0.35551807284355164f, -0.06921301782131195f, 0.16392286121845245f, -0.09434692561626434f, -0.28984835743904114f, -0.067247174680233f, 0.2310168594121933f, 0.014132264070212841f, 0.3062607944011688f, 0.1336335986852646f, 0.09357526898384094f, -0.0754605233669281f, -0.22435253858566284f, 0.10995763540267944f, 0.41670864820480347f, -0.3020556569099426f, 0.03639917075634003f, 0.17051629722118378f, 0.4138936698436737f, 0.09153579920530319f, -0.21747390925884247f, -0.06995075941085815f, 0.32768958806991577f, -0.008644958958029747f, 0.191568061709404f, 0.006362521555274725f, 0.21327219903469086f, 0.09757932275533676f, -0.24041247367858887f, -0.008750745095312595f, 0.05186013504862785f, -0.027064628899097443f, 0.3408452868461609f, 0.10991989821195602f, 0.3729579746723175f, 0.030338449403643608f, -0.32021546363830566f, -0.03710804134607315f, 0.23192532360553741f, -0.03455325961112976f, 0.06179210916161537f, 0.006869988050311804f, 0.1410180628299713f, 0.13248416781425476f, -0.09994752705097198f, -0.11595572531223297f, 0.36386173963546753f, 0.05516989529132843f, 0.1752334088087082f, -0.05661597475409508f, 0.2738637924194336f, -0.020091649144887924f, -0.2395826280117035f, -0.03705981746315956f, 0.23219040036201477f, 0.086333267390728f, 0.29937082529067993f, -0.00406974833458662f, 0.1206282526254654f, 0.006705249659717083f, -0.3041342794895172f, -0.024293867871165276f, 0.21868616342544556f, 0.1130109652876854f, 0.04101648926734924f, 0.15430735051631927f, 0.2853291630744934f, -0.17071661353111267f, -0.2787691056728363f, 0.14171436429023743f, 0.052442558109760284f, 0.13100457191467285f, 0.3001658618450165f, -0.17431065440177917f, 0.3662460446357727f, -0.06547713279724121f,}; diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c index f9eb0a384..c0a50a6ea 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/mimo_mmse_f32/main.c @@ -9,13 +9,15 @@ #include "runtime.h" #include "synchronization.h" -dump(id,1); +dump(id, 1); -#include "mimo_mmse_f32s.h" -#include "mimo_mmse_f32p.h" +#include "kernel/mempool_cholesky_f32s.h" +#include "kernel/mempool_linearsolver_f32s.h" +#include "kernel/mempool_mimo_mmse_f32p.h" +#include "kernel/mempool_mimo_mmse_f32s.h" /* DATA */ -#include "data_mimo_mmse_f32.h" +#include "data/data_mimo_mmse_f32.h" #define PARALLEL //#define SINGLE @@ -25,30 +27,36 @@ dump(id,1); //#define JACOBI #ifdef SINGLE -float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); +float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); +float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); float sigma[2 * N_TX] __attribute__((section(".l1"))); -float b[2 * N_RX] __attribute__((section(".l1"))); +float b[2 * N_RX] __attribute__((section(".l1"))); -float s[2 * N_TX] __attribute__((section(".l1"))); -float x[2 * N_TX] __attribute__((section(".l1"))); -float y[2 * N_TX] __attribute__((section(".l1"))); +float s[2 * N_TX] __attribute__((section(".l1"))); +float x[2 * N_TX] __attribute__((section(".l1"))); +float y[2 * N_TX] __attribute__((section(".l1"))); #endif #ifdef PARALLEL -float in_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float out_matrix[2 * N_TX * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float s[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float x[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float y[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"), aligned(N_BANKS))); - -float ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -float b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -float sigma[N_TX * N_ITR] __attribute__((section(".l1_prio"))); +float in_matrix[2 * N_TX * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float out_matrix[2 * N_TX * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float s[2 * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float x[2 * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); +float y[2 * N_TX * N_ITR] + __attribute__((section(".l1_prio"), aligned(N_BANKS))); + +float ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +float b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +float sigma[N_TX * N_ITR] __attribute__((section(".l1_prio"))); #endif -void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { +void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, + uint32_t num_cores) { uint32_t i = 0; for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = data[i]; @@ -57,7 +65,8 @@ void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint return; } -void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { +void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, + uint32_t num_cores) { uint32_t i = 0; for (i = core_id; i < 2 * dim; i += num_cores) { matrix[i] = 0.0f; @@ -72,13 +81,13 @@ void verify_result(float *pRes, float *pExp, uint32_t dim, uint32_t core_id) { float error; float exp = pExp[i]; float res = pRes[i]; - asm volatile( - "fsub.s %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - : ); - if (*(int32_t*)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); + asm volatile("fsub.s %[error], %[res], %[exp];" + : [error] "=&r"(error) + : [res] "r"(res), [exp] "r"(exp) + :); + if (*(int32_t *)&error != 0) { + printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t *)&error, + *(int32_t *)&exp, *(int32_t *)&res); } } } @@ -89,8 +98,7 @@ void write_result(float *pRes, uint32_t dim, uint32_t core_id) { for (uint32_t i = 0; i < 2 * dim; i++) { float in = pRes[i]; - dump_id(*(uint32_t*)&in); - + dump_id(*(uint32_t *)&in); } } } @@ -105,9 +113,9 @@ void single_core_mimo_mmse_cholesky() { mempool_barrier_init(core_id); // Initialize barrier and synchronize// /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); + initialize(ch_matrix, In_H, N_RX * N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX * N_TX, core_id, num_cores); + initialize_zeros(out_matrix, N_TX * N_TX, core_id, num_cores); /* Initialize vectors */ initialize(sigma, In_sigma, N_TX, core_id, num_cores); initialize(b, In_b, N_RX, core_id, num_cores); @@ -116,12 +124,11 @@ void single_core_mimo_mmse_cholesky() { initialize_zeros(y, N_TX, core_id, num_cores); initialize_zeros(x, N_TX, core_id, num_cores); - /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); + mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0, 0); mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX, 0); mempool_stop_benchmark(); @@ -130,7 +137,6 @@ void single_core_mimo_mmse_cholesky() { mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); mempool_stop_benchmark(); - } mempool_barrier(num_cores); verify_result(x, Out_x, N_TX, core_id); @@ -146,8 +152,8 @@ void single_core_mimo_mmse_jacobi() { mempool_barrier_init(core_id); // Initialize barrier and synchronize// /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); + initialize(ch_matrix, In_H, N_RX * N_TX, core_id, num_cores); + initialize_zeros(in_matrix, N_TX * N_TX, core_id, num_cores); /* Initialize vectors */ initialize(sigma, In_sigma, N_TX, core_id, num_cores); initialize(b, In_b, N_RX, core_id, num_cores); @@ -158,7 +164,7 @@ void single_core_mimo_mmse_jacobi() { if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0); + mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0, 0); mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX, 0); mempool_stop_benchmark(); @@ -184,17 +190,16 @@ void parallel_mimo_mmse_cholesky() { mempool_barrier_init(core_id); // Initialize barrier and synchronize// /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX*N_ITR, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX*N_ITR, core_id, num_cores); + initialize(ch_matrix, In_H, N_RX * N_TX * N_ITR, core_id, num_cores); + initialize_zeros(in_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); + initialize_zeros(out_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); /* Initialize vectors */ - initialize(sigma, In_sigma, N_TX*N_ITR/2, core_id, num_cores); - initialize(b, In_b, N_RX*N_ITR, core_id, num_cores); - - initialize_zeros(s, N_TX*N_ITR, core_id, num_cores); - initialize_zeros(y, N_TX*N_ITR, core_id, num_cores); - initialize_zeros(x, N_TX*N_ITR, core_id, num_cores); + initialize(sigma, In_sigma, N_TX * N_ITR / 2, core_id, num_cores); + initialize(b, In_b, N_RX * N_ITR, core_id, num_cores); + initialize_zeros(s, N_TX * N_ITR, core_id, num_cores); + initialize_zeros(y, N_TX * N_ITR, core_id, num_cores); + initialize_zeros(x, N_TX * N_ITR, core_id, num_cores); /* Benchmark */ @@ -202,29 +207,37 @@ void parallel_mimo_mmse_cholesky() { mempool_start_benchmark(); // Each iteration is assigned to a pool of processors - // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix + // In a pool each PE gets a column of the H matrix, accumulating a row of the + // output matrix uint32_t pool_id = core_id / N_TX; uint32_t num_pools = num_cores / N_TX; for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { // Inputs - float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float* sigma_ptr = sigma + itr * N_TX; + float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float *sigma_ptr = sigma + itr * N_TX; // Intermediate results and outputs - float* in_matrix_ptr = in_matrix + (itr % num_pools) * N_TX + (itr / num_pools) * (2 * N_TX * N_BANKS); - mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1, core_id % N_TX, N_TX); + float *in_matrix_ptr = in_matrix + (itr % num_pools) * N_TX + + (itr / num_pools) * (2 * N_TX * N_BANKS); + mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, + 1, 0, core_id % N_TX, N_TX); } mempool_stop_benchmark(); mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { // Inputs - float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float* b_ptr = b + itr * (2 * N_RX); + float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float *b_ptr = b + itr * (2 * N_RX); // Intermediate results and outputs - float* in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); - float* out_matrix_ptr = out_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); - float* s_ptr = s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - float* y_ptr = y + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - float* x_ptr = x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float *in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + + (itr / num_cores) * (2 * N_TX * N_BANKS); + float *out_matrix_ptr = out_matrix + (itr % num_cores) * N_TX + + (itr / num_cores) * (2 * N_TX * N_BANKS); + float *s_ptr = + s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float *y_ptr = + y + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float *x_ptr = + x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); @@ -233,53 +246,58 @@ void parallel_mimo_mmse_cholesky() { mempool_log_barrier(2, core_id); mempool_stop_benchmark(); -// mempool_start_benchmark(); -// for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { -// // Inputs -// float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); -// float* sigma_ptr = sigma + itr * N_TX; -// float* b_ptr = b + itr * (2 * N_RX); -// // Intermediate results and outputs -// float* in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); -// float* out_matrix_ptr = out_matrix + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); -// float* s_ptr = s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); -// float* y_ptr = y + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); -// float* x_ptr = x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); -// mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 1); -// mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); -// mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); -// mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); -// mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); -// } -// mempool_log_barrier(2, core_id); -// mempool_stop_benchmark(); + // mempool_start_benchmark(); + // for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + // // Inputs + // float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + // float* sigma_ptr = sigma + itr * N_TX; + // float* b_ptr = b + itr * (2 * N_RX); + // // Intermediate results and outputs + // float* in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + (itr / + // num_cores) * (2 * N_TX * N_BANKS); float* out_matrix_ptr = out_matrix + + // (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); + // float* s_ptr = s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * + // N_BANKS); float* y_ptr = y + (itr % num_cores) * N_TX + (itr / + // num_cores) * (2 * N_BANKS); float* x_ptr = x + (itr % num_cores) * N_TX + // + (itr / num_cores) * (2 * N_BANKS); + // mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, + // N_TX, 1, 0); mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, + // N_RX, N_TX, 1); mempool_cholesky_folded_f32s(in_matrix_ptr, + // out_matrix_ptr, N_TX); mempool_Ltrisol_folded_f32s(out_matrix_ptr, + // s_ptr, y_ptr, N_TX); mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, + // x_ptr, N_TX); + // } + // mempool_log_barrier(2, core_id); + // mempool_stop_benchmark(); #else mempool_start_benchmark(); // Each iteration is assigned to a pool of processors - // In a pool each PE gets a column of the H matrix, accumulating a row of the output matrix + // In a pool each PE gets a column of the H matrix, accumulating a row of the + // output matrix uint32_t pool_id = core_id / N_TX; uint32_t num_pools = num_cores / N_TX; for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { - float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - float* sigma_ptr = sigma + itr * N_TX; - mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0, core_id % N_TX, N_TX); + float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float *in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + float *sigma_ptr = sigma + itr * N_TX; + mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, + 0, 0, core_id % N_TX, N_TX); } mempool_stop_benchmark(); mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { // Inputs - float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float* sigma_ptr = sigma + itr * N_TX; - float* b_ptr = b + itr * (2 * N_RX); + float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + float *sigma_ptr = sigma + itr * N_TX; + float *b_ptr = b + itr * (2 * N_RX); // Intermediate results and outputs - float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - float* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); - float* s_ptr = s + itr * (2 * N_TX); - float* y_ptr = y + itr * (2 * N_TX); - float* x_ptr = x + itr * (2 * N_TX); + float *in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + float *out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); + float *s_ptr = s + itr * (2 * N_TX); + float *y_ptr = y + itr * (2 * N_TX); + float *x_ptr = x + itr * (2 * N_TX); mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); @@ -288,27 +306,27 @@ void parallel_mimo_mmse_cholesky() { mempool_log_barrier(2, core_id); mempool_stop_benchmark(); -// // Each iteration is assigned to a pool of processors -// mempool_start_benchmark(); -// for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { -// // Inputs -// float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); -// float* sigma_ptr = sigma + itr * N_TX; -// float* b_ptr = b + itr * (2 * N_RX); -// // Intermediate results and outputs -// float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); -// float* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); -// float* s_ptr = s + itr * (2 * N_TX); -// float* y_ptr = y + itr * (2 * N_TX); -// float* x_ptr = x + itr * (2 * N_TX); -// mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, 0); -// mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); -// mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); -// mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); -// mempool_Lttrisol_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); -// } -// mempool_log_barrier(2, core_id); -// mempool_stop_benchmark(); + // // Each iteration is assigned to a pool of processors + // mempool_start_benchmark(); + // for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + // // Inputs + // float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); + // float* sigma_ptr = sigma + itr * N_TX; + // float* b_ptr = b + itr * (2 * N_RX); + // // Intermediate results and outputs + // float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); + // float* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); + // float* s_ptr = s + itr * (2 * N_TX); + // float* y_ptr = y + itr * (2 * N_TX); + // float* x_ptr = x + itr * (2 * N_TX); + // mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, + // N_TX, 0, 0); mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, + // N_RX, N_TX, 0); mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, + // N_TX); mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); + // mempool_Lttrisol_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + // } + // mempool_log_barrier(2, core_id); + // mempool_stop_benchmark(); #endif mempool_barrier(num_cores); @@ -319,17 +337,17 @@ void parallel_mimo_mmse_cholesky() { int main() { - #ifdef SINGLE - #if defined(CHOLESKY) +#ifdef SINGLE +#if defined(CHOLESKY) single_core_mimo_mmse_cholesky(); - #elif defined(JACOBI) +#elif defined(JACOBI) single_core_mimo_mmse_jacobi(); - #endif - #endif +#endif +#endif - #ifdef PARALLEL +#ifdef PARALLEL parallel_mimo_mmse_cholesky(); - #endif +#endif return 0; } diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32p.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32p.h deleted file mode 100644 index f0ec8e139..000000000 --- a/software/apps/mimo_mmse_f32/mimo_mmse_f32p.h +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded, const uint32_t core_id, const uint32_t nPE); -void mempool_cholesky_f32p(float *pSrc, float *pL, const uint32_t n, const uint32_t nPE); -void mempool_Ltrisol_f32p(float *pL, float *in, float *x, const uint32_t n, const uint32_t nPE); -void mempool_Lttrisol_f32p(float *pL, float *in, float *x, const uint32_t n, const uint32_t nPE); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, const uint32_t n_rx, - const uint32_t n_tx, const uint32_t folded, const uint32_t core_id, const uint32_t nPE) { - - uint32_t i, j, k; - float a; - float b; - float c0, c1, c2, c3; - float d0, d1, d2, d3; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - for (i = core_id; i < n_tx; i += nPE) { - for(j = 0; j < n_tx; j += 4) { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.s %[as0], %[a], %[c0], %[as0];" - "fmadd.s %[as1], %[a], %[c1], %[as1];" - "fmadd.s %[as2], %[a], %[c2], %[as2];" - "fmadd.s %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.s %[bs0], %[a], %[d0], %[bs0];" - "fmadd.s %[bs1], %[a], %[d1], %[bs1];" - "fmadd.s %[bs2], %[a], %[d2], %[bs2];" - "fmadd.s %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.s %[as0], %[b], %[d0], %[as0];" - "fmadd.s %[as1], %[b], %[d1], %[as1];" - "fmadd.s %[as2], %[b], %[d2], %[as2];" - "fmadd.s %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Compute diagonal element - float s = sigma[i]; - if (i == j) { - asm volatile ( - "fadd.s %[as0], %[as0], %[sigma];" - : [as0] "+&r" (as0) - : [sigma] "r" (s) - :); - bs0 = 0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.s %[as1], %[as1], %[sigma];" - : [as1] "+&r" (as1) - : [sigma] "r" (s) - :); - bs1 = 0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.s %[as2], %[as2], %[sigma];" - : [as2] "+&r" (as2) - : [sigma] "r" (s) - :); - bs2 = 0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.s %[as3], %[as3], %[sigma];" - : [as3] "+&r" (as3) - : [sigma] "r" (s) - :); - bs3 = 0.0f; - } - if (!folded) { - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - } else { - // Store - uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); - pG[addr] = as0; - pG[addr + 1U] = bs0; - pG[addr + 2U] = as1; - pG[addr + 3U] = bs1; - pG[addr + N_BANKS] = as2; - pG[addr + N_BANKS + 1U] = bs2; - pG[addr + N_BANKS + 2U] = as3; - pG[addr + N_BANKS + 3U] = bs3; - } - } - } - mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); - return; -} - -void mempool_MVP_conjtransp_f32p(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx, - const uint32_t core_id, const uint32_t nPE) { - - uint32_t i, j; - float a0, a1, a2, a3; - float b0, b1, b2, b3; - float c, d; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - - for (i = core_id; i < n_tx; i += 4 * nPE) { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.s %[as0], %[a0], %[c], %[as0];" - "fmadd.s %[as1], %[a1], %[c], %[as1];" - "fmadd.s %[as2], %[a2], %[c], %[as2];" - "fmadd.s %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.s %[bs0], %[a0], %[d], %[bs0];" - "fmadd.s %[bs1], %[a1], %[d], %[bs1];" - "fmadd.s %[bs2], %[a2], %[d], %[bs2];" - "fmadd.s %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.s %[as0], %[b0], %[d], %[as0];" - "fmadd.s %[as1], %[b1], %[d], %[as1];" - "fmadd.s %[as2], %[b2], %[d], %[as2];" - "fmadd.s %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } - mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); - return; -} diff --git a/software/apps/mimo_mmse_f32/mimo_mmse_f32s.h b/software/apps/mimo_mmse_f32/mimo_mmse_f32s.h deleted file mode 100644 index 034c80500..000000000 --- a/software/apps/mimo_mmse_f32/mimo_mmse_f32s.h +++ /dev/null @@ -1,703 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#pragma once -#define N_BANKS (NUM_CORES * 4) - -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded); -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { - - uint32_t i, j, k; - float a; - float b; - float c0, c1, c2, c3; - float d0, d1, d2, d3; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - for (j = 0; j < n_tx; j += 4) { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.s %[as0], %[a], %[c0], %[as0];" - "fmadd.s %[as1], %[a], %[c1], %[as1];" - "fmadd.s %[as2], %[a], %[c2], %[as2];" - "fmadd.s %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.s %[bs0], %[a], %[d0], %[bs0];" - "fmadd.s %[bs1], %[a], %[d1], %[bs1];" - "fmadd.s %[bs2], %[a], %[d2], %[bs2];" - "fmadd.s %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.s %[as0], %[b], %[d0], %[as0];" - "fmadd.s %[as1], %[b], %[d1], %[as1];" - "fmadd.s %[as2], %[b], %[d2], %[as2];" - "fmadd.s %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Compute diagonal elements - if (i == j) { - asm volatile ( - "fadd.s %[as0], %[as0], %[sigma];" - : [as0] "+&r" (as0) - : [sigma] "r" (sigma[i]) - :); - bs0 = 0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.s %[as1], %[as1], %[sigma];" - : [as1] "+&r" (as1) - : [sigma] "r" (sigma[i]) - :); - bs1 = 0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.s %[as2], %[as2], %[sigma];" - : [as2] "+&r" (as2) - : [sigma] "r" (sigma[i]) - :); - bs2 = 0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.s %[as3], %[as3], %[sigma];" - : [as3] "+&r" (as3) - : [sigma] "r" (sigma[i]) - :); - bs3 = 0.0f; - } - if (!folded) { - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - } else { - // Store - uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); - pG[addr] = as0; - pG[addr + 1U] = bs0; - pG[addr + 2U] = as1; - pG[addr + 3U] = bs1; - pG[addr + N_BANKS] = as2; - pG[addr + N_BANKS + 1U] = bs2; - pG[addr + N_BANKS + 2U] = as3; - pG[addr + N_BANKS + 3U] = bs3; - } - } - } - return; -} - -void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { - - uint32_t i, j; - float a0, a1, a2, a3; - float b0, b1, b2, b3; - float c, d; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - - i = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.s %[as0], %[a0], %[c], %[as0];" - "fmadd.s %[as1], %[a1], %[c], %[as1];" - "fmadd.s %[as2], %[a2], %[c], %[as2];" - "fmadd.s %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.s %[bs0], %[a0], %[d], %[bs0];" - "fmadd.s %[bs1], %[a1], %[d], %[bs1];" - "fmadd.s %[bs2], %[a2], %[d], %[bs2];" - "fmadd.s %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.s %[as0], %[b0], %[d], %[as0];" - "fmadd.s %[as1], %[b1], %[d], %[as1];" - "fmadd.s %[as2], %[b2], %[d], %[as2];" - "fmadd.s %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - if (!folded) { - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } else { - // Store - uint32_t addr = (i / 4) * 2 * N_BANKS; - py[addr] = as0; - py[addr + 1U] = bs0; - py[addr + 2U] = as1; - py[addr + 3U] = bs1; - py[addr + N_BANKS] = as2; - py[addr + N_BANKS + 1U] = bs2; - py[addr + N_BANKS + 2U] = as3; - py[addr + N_BANKS + 3U] = bs3; - i += 4; - } - } while (i < n_tx); - return; -} - -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { - - register float sum; - float a, b; - float c, d; - float diag; // Diagonal element - float ap, bp; // Pivot element - float as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.s %[sum], %[a], %[a], %[sum];" - "fmadd.s %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.s %[ap], %[ap], %[sum];" - "fsqrt.s %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = 0.0f; - bs = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.s %[ap], %[ap], %[as];" - "fsub.s %[bp], %[bp], %[bs];" - "fdiv.s %[ap], %[ap], %[diag];" - "fdiv.s %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - - -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = in[2U * i]; - bs = in[2U * i + 1]; - diag = pL[2 * (i * n + i)]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = in[2 * (n - i - 1)]; - bs = in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - -void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32_t n, const uint32_t max_iter) { - uint32_t i, j, k; - float error; - float register diff, den; - float register as0, as1; - float register bs0, bs1; - float a0, a1; - float b0, b1; - float c0, c1; - float d0, d1; - for (k = 0; k < max_iter; k++) { - - // Initialize the diff variable - diff = 0.0f; - - - /* COMPUTE THE SUM */ - for (i = 0; i < n; i++) { - - den = pA[2U * (i * n + i)]; - as0 = in[2U * i]; - bs0 = in[2U * i + 1]; - as1 = 0.0f; - bs1 = 0.0f; - asm volatile ( - // divide the result by the pivot - "fdiv.s %[den], %[imm], %[den];" - : [den] "+&r" (den) : [imm] "r" ((uint32_t)0x3F800000) - :); - - /* COMPUTE OUTPUT */ - for(j = 0U; j < n; j += 2) { - if (i == j) { - a0 = pA[2U * (i * n + j + 1U)]; - b0 = pA[2U * (i * n + j + 1U) + 1U]; - c0 = x[2U * (j + 1U)]; - d0 = x[2U * (j + 1U) + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fnmsub.s %[as0], %[a0], %[c0], %[as0];" - "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" - "fmadd.s %[as0], %[b0], %[d0], %[as0];" - "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) - :); - } else if(i == (j + 1U)) { - a0 = pA[2U * (i * n + j)]; - b0 = pA[2U * (i * n + j) + 1U]; - c0 = x[2U * j]; - d0 = x[2U * j + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fnmsub.s %[as0], %[a0], %[c0], %[as0];" - "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" - "fmadd.s %[as0], %[b0], %[d0], %[as0];" - "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) - :); - } else { - a0 = pA[2U * (i * n + j)]; - a1 = pA[2U * (i * n + j + 1U)]; - b0 = pA[2U * (i * n + j) + 1U]; - b1 = pA[2U * (i * n + j + 1U) + 1U]; - c0 = x[2U * j]; - c1 = x[2U * (j + 1U)]; - d0 = x[2U * j + 1U]; - d1 = x[2U * (j + 1U) + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fnmsub.s %[as0], %[a0], %[c0], %[as0];" - "fnmsub.s %[as1], %[a1], %[c1], %[as1];" - "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" - "fnmsub.s %[bs1], %[b1], %[c1], %[bs1];" - "fmadd.s %[as0], %[b0], %[d0], %[as0];" - "fmadd.s %[as1], %[b1], %[d1], %[as1];" - "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" - "fnmsub.s %[bs1], %[a1], %[d1], %[bs1];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1) - : [a0] "r" (a0), [a1] "r" (a1), - [b0] "r" (b0), [b1] "r" (b1), - [c0] "r" (c0), [c1] "r" (c1), - [d0] "r" (d0), [d1] "r" (d1) - :); - } - } - // Partial sums - asm volatile ( - "fadd.s %[as0], %[as1], %[as0];" - "fadd.s %[bs0], %[bs1], %[bs0];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [as1] "r" (as1), [bs1] "r" (bs1) - :); - - /* COMPUTE THE NEW DATA (& DIFFERENCE)*/ - asm volatile ( - // divide the result by the pivot & compute difference - "fmul.s %[as0], %[as0], %[den];" - "fmul.s %[bs0], %[bs0], %[den];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [den] "r" (den) - :); - // Load the previous result - a0 = x[2U * i]; - b0 = x[2U * i + 1]; - asm volatile ( - "fsub.s %[a0], %[a0], %[as0];" - "fsub.s %[b0], %[b0], %[bs0];" - : [a0] "+&r" (a0), [b0] "+&r" (b0) - : [as0] "r" (as0), [bs0] "r" (bs0) - :); - // Add absolute value to total difference - a0 = (a0 > 0.0f) ? a0 : (-a0); - b0 = (b0 > 0.0f) ? b0 : (-b0); - asm volatile ( - "fadd.s %[diff], %[a0], %[diff];" - "fadd.s %[diff], %[b0], %[diff];" - : [diff] "+&r" (diff) - : [a0] "r" (a0), [b0] "r" (b0) - :); - - /* STORE THE RESULT */ - x[2U * i] = as0; - x[2U * i + 1U] = bs0; - } - - /* COMPUTE THE ERROR */ - asm volatile ( - // divide the result by the pivot - "fdiv.s %[error], %[diff], %[n_samples];" - : [error] "+&r" (error) - : [diff] "r" (diff), [n_samples] "r" (2.0f * (float)n) - :); - if (error < tol) - break; - - } - return; -} - -void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { - - register float sum; - - // first matrix row: - // item[0-2] item[1-3] - // memrow[0] x x x x - // memrow[1] x x x x - // second matrix row: - // memrow[2] x x x x - // memrow[3] x x x x - // third matrix row: - // memrow[4] x x x x - // memrow[5] x x x x - // i * memrow_xrow * N_BANKS + (j / local_items) * N_BANKS + j % local_items - - float a, b; - float c, d; - float diag; // Diagonal element - float ap, bp; // Pivot element - float as, bs; // Sum element - uint32_t banks_per_row = (n / 2) * N_BANKS; - - uint32_t i, j, k; - for (j = 0; j < n; j++) { - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - sum = 0.0f; - for (k = 0; k < j; k++) { - a = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; - b = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; - asm volatile( - "fmadd.s %[sum], %[a], %[a], %[sum];" - "fmadd.s %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.s %[ap], %[ap], %[sum];" - "fsqrt.s %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[ j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) ] = ap; - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - bp = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; - // Diag - diag = pL[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = 0.0f; - bs = 0.0f; - for (k = 0; k < j; k++) { - a = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; - b = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; - c = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; - d = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.s %[ap], %[ap], %[as];" - "fsub.s %[bp], %[bp], %[bs];" - "fdiv.s %[ap], %[ap], %[diag];" - "fdiv.s %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)] = ap; - pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1] = bp; - } - } - return; -} - - -void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - uint32_t banks_per_row = (n / 2) * N_BANKS; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[i * banks_per_row + (i / 2) * N_BANKS + 2 * (i % 2)]; - as = in[(i / 2) * N_BANKS + 2 * (i % 2)]; - bs = in[(i / 2) * N_BANKS + 2 * (i % 2) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - b = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; - c = x[(j / 2) * N_BANKS + 2 * (j % 2)]; - d = x[(j / 2) * N_BANKS + 2 * (j % 2) + 1]; - asm volatile ( - "fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[(i / 2) * N_BANKS + 2 * (i % 2)] = ax; - x[(i / 2) * N_BANKS + 2 * (i % 2) + 1] = bx; - } - return; -} - -void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - uint32_t banks_per_row = (n / 2) * N_BANKS; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - // reversed i index - uint32_t rev_i = (n - 1 - i); - diag = pL[rev_i * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; - as = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; - bs = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - // reversed j index - uint32_t rev_j = (n - 1 - j); - a = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; - b = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + 1]; - c = x[2U * rev_j]; - d = x[2U * rev_j + 1]; - asm volatile ( - "fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile ( - "fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * rev_i] = ax; - x[2U * rev_i + 1] = bx; - } - return; -} diff --git a/software/apps/mimo_zf_f16/data_mimo_zf.h.tpl b/software/apps/mimo_zf_f16/data_mimo_zf.h.tpl deleted file mode 100644 index 9dd2719a6..000000000 --- a/software/apps/mimo_zf_f16/data_mimo_zf.h.tpl +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define N_TX (${N_tx}) -#define N_RX (${N_rx}) - -// Inputs - -__fp16 In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; - -__fp16 In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; - -__fp16 In_b[${2 * N_rx}] = ${array_to_cstr(b)}; - -// Outputs - -__fp16 Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; - -__fp16 Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; - -__fp16 Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; - -__fp16 Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; diff --git a/software/apps/mimo_zf_f16/data_mimo_zf.py b/software/apps/mimo_zf_f16/data_mimo_zf.py deleted file mode 100644 index 87d19b655..000000000 --- a/software/apps/mimo_zf_f16/data_mimo_zf.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 - -import numpy as np -import argparse -import pathlib -from mako.template import Template -from scipy.linalg import solve_triangular - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"data_{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path.cwd(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path.cwd() / "data_mimo_zf.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='First dimension.' - ) - - args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers - - # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float16) - # Create input vector - b = np.random.rand(N_rx).astype(np.float16) + 1.j * np.random.rand(N_rx).astype(np.float16) - - # Matrix to be inverted in ZF estimator - H_h = (np.asmatrix(H).H) - G = H_h * H - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Linear system solution - s = np.transpose(np.dot(H_h, b)) - y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.transpose(L), y) - - s = np.transpose(np.dot(np.asmatrix(H).H, b)) - y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.transpose(L), y) - - H = np.reshape(H, (N_tx*N_rx, -1), order='C') - G = np.reshape(G, (N_tx*N_tx, -1), order='C') - L = np.reshape(L, (N_tx*N_tx, -1), order='C') - H_RI = np.zeros(2*N_tx*N_rx) - G_RI = np.zeros(2*N_tx*N_tx) - L_RI = np.zeros(2*N_tx*N_tx) - b_RI = np.zeros(2*N_rx) - s_RI = np.zeros(2*N_tx) - x_RI = np.zeros(2*N_tx) - y_RI = np.zeros(2*N_tx) - - for i in range(N_tx*N_rx): - H_RI[2*i] = H[i].real - H_RI[2*i+1] = H[i].imag - for i in range(N_tx*N_tx): - G_RI[2*i] = G[i].real - G_RI[2*i+1] = G[i].imag - L_RI[2*i] = L[i].real - L_RI[2*i+1] = L[i].imag - - for i in range(N_rx): - b_RI[2*i] = b[i].real - b_RI[2*i+1] = b[i].imag - for i in range(N_tx): - s_RI[2*i] = s[i].real - s_RI[2*i+1] = s[i].imag - x_RI[2*i] = x[i].real - x_RI[2*i+1] = x[i].imag - y_RI[2*i] = y[i].real - y_RI[2*i+1] = y[i].imag - - H_RI = H_RI.astype(np.float16) - G_RI = G_RI.astype(np.float16) - L_RI = L_RI.astype(np.float16) - b_RI = b_RI.astype(np.float16) - x_RI = x_RI.astype(np.float16) - y_RI = y_RI.astype(np.float16) - s_RI = s_RI.astype(np.float16) - print("Channel matrix in (Re, Im) format:\n", H_RI) - print("Hermitian matrix in (Re, Im) format:\n", G_RI) - print("Cholesky dec. in (Re, Im) format:\n", L_RI) - print("Input vector in (Re, Im) format:\n", b_RI) - print("Output vector in (Re, Im) format:\n", x_RI) - - - kwargs = {'name': 'mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} - gen_data_header_file(args.outdir, args.tpl, **kwargs) - -if __name__ == "__main__": - main() diff --git a/software/apps/mimo_zf_f16/data_mimo_zf_f16.h b/software/apps/mimo_zf_f16/data_mimo_zf_f16.h deleted file mode 100644 index a7340c52c..000000000 --- a/software/apps/mimo_zf_f16/data_mimo_zf_f16.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -#define N_TX (4) -#define N_RX (32) - -// Inputs - -__fp16 In_H[256] = { -0.486328125f, 0.2607421875f, 0.55078125f, 0.15478515625f, 0.68505859375f, 0.1087646484375f, 0.81494140625f, 0.98291015625f, -0.34326171875f, 0.55517578125f, 0.88232421875f, 0.82666015625f, 0.625f, 0.0963134765625f, 0.67919921875f, 0.06829833984375f, -0.371826171875f, 0.63232421875f, 0.1622314453125f, 0.303466796875f, 0.88916015625f, 0.5693359375f, 0.2685546875f, 0.98828125f, -0.83447265625f, 0.71240234375f, 0.09796142578125f, 0.74951171875f, 0.071044921875f, 0.34326171875f, 0.701171875f, 0.1416015625f, -0.1551513671875f, 0.47314453125f, 0.1959228515625f, 0.1688232421875f, 0.94970703125f, 0.384765625f, 0.41552734375f, 0.80712890625f, -0.0760498046875f, 0.681640625f, 0.7861328125f, 0.81884765625f, 0.61083984375f, 0.52490234375f, 0.312744140625f, 0.0546875f, -0.765625f, 0.468994140625f, 0.39892578125f, 0.2408447265625f, 0.328125f, 0.44189453125f, 0.1298828125f, 0.054595947265625f, -0.67529296875f, 0.42431640625f, 0.382568359375f, 0.42138671875f, 0.43310546875f, 0.041595458984375f, 0.94580078125f, 0.05682373046875f, -0.54150390625f, 0.19091796875f, 0.7109375f, 0.8828125f, 0.6455078125f, 0.01959228515625f, 0.199462890625f, 0.160888671875f, -0.9541015625f, 0.20947265625f, 0.26953125f, 0.81591796875f, 0.350341796875f, 0.89599609375f, 0.1773681640625f, 0.420654296875f, -0.720703125f, 0.350341796875f, 0.69580078125f, 0.93310546875f, 0.61767578125f, 0.62890625f, 0.69775390625f, 0.88037109375f, -0.865234375f, 0.923828125f, 0.5263671875f, 0.7548828125f, 0.31396484375f, 0.8798828125f, 0.88232421875f, 0.97705078125f, -0.87451171875f, 0.1300048828125f, 0.08160400390625f, 0.6376953125f, 0.80712890625f, 0.650390625f, 0.56005859375f, 0.83935546875f, -0.136962890625f, 0.9365234375f, 0.8486328125f, 0.927734375f, 0.7431640625f, 0.8720703125f, 0.3857421875f, 0.060760498046875f, -0.5068359375f, 0.859375f, 0.89111328125f, 0.56640625f, 0.0009298324584960938f, 0.491943359375f, 0.08587646484375f, 0.7529296875f, -0.032806396484375f, 0.401123046875f, 0.78662109375f, 0.8662109375f, 0.52392578125f, 0.59033203125f, 0.77490234375f, 0.7744140625f, -0.75048828125f, 0.405517578125f, 0.07562255859375f, 0.978515625f, 0.96630859375f, 0.1373291015625f, 0.2354736328125f, 0.77294921875f, -0.96923828125f, 0.0382080078125f, 0.5166015625f, 0.66943359375f, 0.222412109375f, 0.0236663818359375f, 0.1715087890625f, 0.701171875f, -0.8271484375f, 0.31005859375f, 0.1357421875f, 0.2137451171875f, 0.25537109375f, 0.06292724609375f, 0.64013671875f, 0.8505859375f, -0.31494140625f, 0.59716796875f, 0.51708984375f, 0.8056640625f, 0.06427001953125f, 0.196533203125f, 0.5400390625f, 0.82666015625f, -0.45703125f, 0.99755859375f, 0.00197601318359375f, 0.484619140625f, 0.136962890625f, 0.321533203125f, 0.0987548828125f, 0.0845947265625f, -0.5498046875f, 0.80224609375f, 0.2181396484375f, 0.92626953125f, 0.255126953125f, 0.505859375f, 0.1473388671875f, 0.61865234375f, -0.95458984375f, 0.1343994140625f, 0.93994140625f, 0.206787109375f, 0.96142578125f, 0.69677734375f, 0.306396484375f, 0.9072265625f, -0.5986328125f, 0.52197265625f, 0.681640625f, 0.438720703125f, 0.1802978515625f, 0.9072265625f, 0.321533203125f, 0.80615234375f, -0.5361328125f, 0.47216796875f, 0.775390625f, 0.607421875f, 0.39453125f, 0.97314453125f, 0.206298828125f, 0.5380859375f, -0.54541015625f, 0.9560546875f, 0.900390625f, 0.64599609375f, 0.2161865234375f, 0.92626953125f, 0.159912109375f, 0.8642578125f, -0.52783203125f, 0.57275390625f, 0.31298828125f, 0.1982421875f, 0.98193359375f, 0.6328125f, 0.9296875f, 0.62744140625f, -0.027008056640625f, 0.0230865478515625f, 0.6708984375f, 0.42431640625f, 0.8017578125f, 0.1444091796875f, 0.28125f, 0.8798828125f, -0.841796875f, 0.34228515625f, 0.0726318359375f, 0.68603515625f, 0.86474609375f, 0.3125f, 0.943359375f, 0.4677734375f, -0.1356201171875f, 0.2071533203125f, 0.46923828125f, 0.58056640625f, 0.319580078125f, 0.54248046875f, 0.7490234375f, 0.67578125f, -0.796875f, 0.37890625f, 0.623046875f, 0.92578125f, 0.73388671875f, 0.1502685546875f, 0.206787109375f, 0.89990234375f, -0.998046875f, 0.67626953125f, 0.302978515625f, 0.87109375f, 0.0245361328125f, 0.78271484375f, 0.55224609375f, 0.044677734375f,}; - -__fp16 In_G[32] = { -23.6875f, 0.0f, 17.984375f, 3.66015625f, 16.796875f, 1.79296875f, 16.546875f, 3.775390625f, -17.984375f, -3.66015625f, 25.015625f, 0.0f, 17.03125f, -1.55859375f, 17.375f, 0.46826171875f, -16.796875f, -1.79296875f, 17.03125f, 1.55859375f, 21.125f, 0.0f, 16.578125f, 3.55859375f, -16.546875f, -3.775390625f, 17.375f, -0.46826171875f, 16.578125f, -3.55859375f, 23.9375f, 0.0f,}; - -__fp16 In_b[64] = { -0.94921875f, 0.853515625f, 0.413818359375f, 0.1746826171875f, 0.5927734375f, 0.419189453125f, 0.79638671875f, 0.56396484375f, -0.251953125f, 0.6005859375f, 0.1702880859375f, 0.66064453125f, 0.7001953125f, 0.810546875f, 0.7568359375f, 0.9443359375f, -0.7431640625f, 0.19482421875f, 0.131591796875f, 0.397705078125f, 0.65771484375f, 0.33251953125f, 0.94921875f, 0.3486328125f, -0.39453125f, 0.315673828125f, 0.462890625f, 0.2034912109375f, 0.229736328125f, 0.241455078125f, 0.057586669921875f, 0.88671875f, -0.83203125f, 0.5849609375f, 0.66064453125f, 0.943359375f, 0.54638671875f, 0.08807373046875f, 0.97900390625f, 0.7822265625f, -0.8037109375f, 0.92041015625f, 0.947265625f, 0.56884765625f, 0.038665771484375f, 0.61572265625f, 0.53955078125f, 0.420654296875f, -0.6689453125f, 0.97998046875f, 0.36083984375f, 0.673828125f, 0.28564453125f, 0.26513671875f, 0.26806640625f, 0.1317138671875f, -0.0416259765625f, 0.78271484375f, 0.68701171875f, 0.139892578125f, 0.0189208984375f, 0.87841796875f, 0.285888671875f, 0.38134765625f,}; - -__fp16 In_sigma[4] = { -0.320556640625f, 0.3251953125f, 0.83544921875f, 0.3818359375f}; - -// Outputs - -__fp16 Out_L[32] = { -4.8671875f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -3.6953125f, -0.751953125f, 3.287109375f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -3.44921875f, -0.3681640625f, 1.220703125f, 0.0989990234375f, 2.75390625f, 0.0f, 0.0f, 0.0f, -3.400390625f, -0.77587890625f, 1.2861328125f, -0.048431396484375f, 1.087890625f, -0.70703125f, 2.904296875f, 0.0f,}; - -__fp16 Out_x[8] = { -0.376708984375f, 0.06390380859375f, 0.26708984375f, -0.1295166015625f, -0.04095458984375f, 0.308837890625f, 0.293701171875f, -0.046783447265625f,}; - -__fp16 Out_s[8] = { -17.796875f, 1.5859375f, 17.609375f, -1.962890625f, 14.65625f, 1.3701171875f, 17.28125f, -1.822265625f,}; - -__fp16 Out_y[8] = { -3.658203125f, 0.32568359375f, 1.1728515625f, -0.126708984375f, 0.173583984375f, 0.59228515625f, 0.85302734375f, -0.1358642578125f,}; diff --git a/software/apps/mimo_zf_f16/main.c b/software/apps/mimo_zf_f16/main.c deleted file mode 100644 index 00038e40c..000000000 --- a/software/apps/mimo_zf_f16/main.c +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#include "encoding.h" -#include "printf.h" -#include "runtime.h" -#include "synchronization.h" -#include "mimo_zf_f16.h" - -/* DATA */ -//#include "data_choldec_f16.h" -//#include "data_Axb_f16.h" -#include "data_mimo_zf_f16.h" - -dump(res,1); - -__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 b[2 * N_RX] __attribute__((section(".l1"))); - -__fp16 s[2 * N_TX] __attribute__((section(".l1"))); -__fp16 x[2 * N_TX] __attribute__((section(".l1"))); -__fp16 y[2 * N_TX] __attribute__((section(".l1"))); - -void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = data[i]; - } - mempool_barrier(num_cores); - return; -} - -void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = (__fp16) (0x0000); - } - mempool_barrier(num_cores); - return; -} - -void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - __fp16 error; - __fp16 exp = pExp[i]; - __fp16 res = pRes[i]; - asm volatile( - "fsub.h %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - : ); - if (*(int32_t*)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); - } - } - } -} - -void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - - __fp16 in = pRes[i]; - // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ - float cvt_out; - asm volatile( - "fcvt.h.s %[cvt_out], %[in];" - : [cvt_out] "=&r"(cvt_out) - : [in] "r" (in) - : ); - dump_res(*(uint32_t*)&cvt_out); - - } - } -} - -// Driver program -void single_core_zf_mmse() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// - - /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(b, In_b, N_RX, core_id, num_cores); - - initialize_zeros(s, N_TX, core_id, num_cores); - initialize_zeros(y, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores); - - - /* Benchmark */ - if (core_id == 0) { - mempool_start_benchmark(); - - mempool_hermitian_f16s(ch_matrix, in_matrix, N_RX, N_TX); - mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX); - - mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); - mempool_Ltrisol_f16s(out_matrix, s, y, N_TX); - mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); - - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} - - -int main() { - // single_core_cholesky(); - // single_core_Axb(); - single_core_mimo_mmse(); - return 0; -} diff --git a/software/apps/mimo_zf_f16/mimo_zf_f16.h b/software/apps/mimo_zf_f16/mimo_zf_f16.h deleted file mode 100644 index 08b5e96c1..000000000 --- a/software/apps/mimo_zf_f16/mimo_zf_f16.h +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx); -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); - -/* Computes the Hermitian matrix G = (H'*H) */ -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j, k; - __fp16 a; - __fp16 b; - __fp16 c0, c1, c2, c3; - __fp16 d0, d1, d2, d3; - __fp16 as0, as1, as2, as3; - __fp16 bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = (__fp16)0.0f; - as1 = (__fp16)0.0f; - as2 = (__fp16)0.0f; - as3 = (__fp16)0.0f; - // Initialize the imag part of sums - bs0 = (__fp16)0.0f; - bs1 = (__fp16)0.0f; - bs2 = (__fp16)0.0f; - bs3 = (__fp16)0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.h %[as0], %[a], %[c0], %[as0];" - "fmadd.h %[as1], %[a], %[c1], %[as1];" - "fmadd.h %[as2], %[a], %[c2], %[as2];" - "fmadd.h %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.h %[bs0], %[a], %[d0], %[bs0];" - "fmadd.h %[bs1], %[a], %[d3], %[bs1];" - "fmadd.h %[bs2], %[a], %[d2], %[bs2];" - "fmadd.h %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.h %[as0], %[b], %[d0], %[as0];" - "fmadd.h %[as1], %[b], %[d1], %[as1];" - "fmadd.h %[as2], %[b], %[d2], %[as2];" - "fmadd.h %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - j += 4; - } while (j < (n_tx >> 2U)); - } - return; -} - -void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j; - __fp16 a0, a1, a2, a3; - __fp16 b0, b1, b2, b3; - __fp16 c, d; - __fp16 as0, as1, as2, as3; - __fp16 bs0, bs1, bs2, bs3; - - i = 0; - do { - // Initialize the real part of sums - as0 = (__fp16)0.0f; - as1 = (__fp16)0.0f; - as2 = (__fp16)0.0f; - as3 = (__fp16)0.0f; - // Initialize the imag part of sums - bs0 = (__fp16)0.0f; - bs1 = (__fp16)0.0f; - bs2 = (__fp16)0.0f; - bs3 = (__fp16)0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.h %[as0], %[a0], %[c], %[as0];" - "fmadd.h %[as1], %[a1], %[c], %[as1];" - "fmadd.h %[as2], %[a2], %[c], %[as2];" - "fmadd.h %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.h %[bs0], %[a0], %[d], %[bs0];" - "fmadd.h %[bs1], %[a1], %[d], %[bs1];" - "fmadd.h %[bs2], %[a2], %[d], %[bs2];" - "fmadd.h %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.h %[as0], %[b0], %[d], %[as0];" - "fmadd.h %[as1], %[b1], %[d], %[as1];" - "fmadd.h %[as2], %[b2], %[d], %[as2];" - "fmadd.h %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } while (i < (n_tx >> 4U)); - return; -} - -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ab, bb; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * (i * n + i)]; - ab = in[2U * i]; - bb = in[2U * i + 1]; - asm volatile ( - "fsub.h %[ax], %[ab], %[as];" - "fsub.h %[bx], %[bb], %[bs];" - "fdiv.h %[ax], %[ax], %[diag];" - "fdiv.h %[bx], %[bx], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ab, bb; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fmadd.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - ab = in[2 * (n - i - 1)]; - bb = in[2 * (n - i - 1) + 1]; - asm volatile ( - "fsub.h %[ax], %[ab], %[as];" - "fsub.h %[bx], %[bb], %[bs];" - "fdiv.h %[ax], %[ax], %[diag];" - "fdiv.h %[bx], %[bx], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - diff --git a/software/apps/mimo_zf_f32/data_mimo_zf.h.tpl b/software/apps/mimo_zf_f32/data_mimo_zf.h.tpl deleted file mode 100644 index fc8b71a7e..000000000 --- a/software/apps/mimo_zf_f32/data_mimo_zf.h.tpl +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define N_TX (${N_tx}) -#define N_RX (${N_rx}) - -// Inputs - -float In_H[${2 * N_tx * N_rx}] = ${array_to_cstr(H)}; - -float In_G[${2 * N_tx * N_tx}] = ${array_to_cstr(G)}; - -float In_b[${2 * N_rx}] = ${array_to_cstr(b)}; - -float In_sigma[${N_tx}] = ${array_to_cstr(sigma)}; - -// Outputs - -float Out_L[${2 * N_tx * N_tx}] = ${array_to_cstr(L)}; - -float Out_x[${2 * N_tx}] = ${array_to_cstr(x)}; - -float Out_s[${2 * N_tx}] = ${array_to_cstr(s)}; - -float Out_y[${2 * N_tx}] = ${array_to_cstr(y)}; diff --git a/software/apps/mimo_zf_f32/data_mimo_zf.py b/software/apps/mimo_zf_f32/data_mimo_zf.py deleted file mode 100644 index edbdbea5e..000000000 --- a/software/apps/mimo_zf_f32/data_mimo_zf.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python3 - -import numpy as np -import argparse -import pathlib -from mako.template import Template -from scipy.linalg import solve_triangular - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"data_{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path.cwd(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path.cwd() / "data_mimo_zf.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='First dimension.' - ) - - args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers - - # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float32) - # Create input vector - b = np.random.rand(N_rx).astype(np.float32) + 1.j * np.random.rand(N_rx).astype(np.float32) - # Generate noise variance - sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float32)) - - # Matrix to be inverted in MMSE estimator - H_h = (np.asmatrix(H).H) - G = H_h * H - G = G + np.diag(sigma) - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Linear system solution - s = np.transpose(np.dot(H_h, b)) - y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.transpose(L), y) - - H = np.reshape(H, (N_tx*N_rx, -1), order='C') - G = np.reshape(G, (N_tx*N_tx, -1), order='C') - L = np.reshape(L, (N_tx*N_tx, -1), order='C') - H_RI = np.zeros(2*N_tx*N_rx) - G_RI = np.zeros(2*N_tx*N_tx) - L_RI = np.zeros(2*N_tx*N_tx) - b_RI = np.zeros(2*N_rx) - s_RI = np.zeros(2*N_tx) - x_RI = np.zeros(2*N_tx) - y_RI = np.zeros(2*N_tx) - - for i in range(N_tx*N_rx): - H_RI[2*i] = H[i].real - H_RI[2*i+1] = H[i].imag - for i in range(N_tx*N_tx): - G_RI[2*i] = G[i].real - G_RI[2*i+1] = G[i].imag - L_RI[2*i] = L[i].real - L_RI[2*i+1] = L[i].imag - - for i in range(N_rx): - b_RI[2*i] = b[i].real - b_RI[2*i+1] = b[i].imag - for i in range(N_tx): - s_RI[2*i] = s[i].real - s_RI[2*i+1] = s[i].imag - x_RI[2*i] = x[i].real - x_RI[2*i+1] = x[i].imag - y_RI[2*i] = y[i].real - y_RI[2*i+1] = y[i].imag - - sigma = sigma.astype(np.float32) - H_RI = H_RI.astype(np.float32) - G_RI = G_RI.astype(np.float32) - L_RI = L_RI.astype(np.float32) - b_RI = b_RI.astype(np.float32) - x_RI = x_RI.astype(np.float32) - y_RI = y_RI.astype(np.float32) - s_RI = s_RI.astype(np.float32) - print("Channel matrix in (Re, Im) format:\n", H_RI) - print("Hermitian matrix in (Re, Im) format:\n", G_RI) - print("Cholesky dec. in (Re, Im) format:\n", L_RI) - print("Input vector in (Re, Im) format:\n", b_RI) - print("Output vector in (Re, Im) format:\n", x_RI) - - - kwargs = {'name': 'mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'L' : L_RI, 'b' : b_RI, 'x' : x_RI, 'y' : y_RI, 's' : s_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} - gen_data_header_file(args.outdir, args.tpl, **kwargs) - -if __name__ == "__main__": - main() diff --git a/software/apps/mimo_zf_f32/data_mimo_zf_f32.h b/software/apps/mimo_zf_f32/data_mimo_zf_f32.h deleted file mode 100644 index d0930ddff..000000000 --- a/software/apps/mimo_zf_f32/data_mimo_zf_f32.h +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -#define N_TX (4) -#define N_RX (32) - -// Inputs - -float In_H[256] = { -0.6897557377815247f, 0.9375356435775757f, 0.10870859771966934f, 0.7795871496200562f, 0.36894166469573975f, 0.7750101685523987f, 0.9160564541816711f, 0.17034123837947845f, -0.7056236863136292f, 0.27334508299827576f, 0.11579038202762604f, 0.6301944255828857f, 0.8777735233306885f, 0.4031212627887726f, 0.16747084259986877f, 0.08119920641183853f, -0.8847065567970276f, 0.2667674124240875f, 0.45241329073905945f, 0.13887004554271698f, 0.3745780289173126f, 0.31820598244667053f, 0.06127072870731354f, 0.6448251605033875f, -0.08859016746282578f, 0.832530677318573f, 0.14670366048812866f, 0.41125568747520447f, 0.5908426642417908f, 0.15285778045654297f, 0.12690463662147522f, 0.7779843807220459f, -0.7191795706748962f, 0.19999703764915466f, 0.8902764320373535f, 0.7238638401031494f, 0.9212520122528076f, 0.05499245971441269f, 0.5841647982597351f, 0.7354506254196167f, -0.3933694660663605f, 0.23663489520549774f, 0.10011333972215652f, 0.9983391165733337f, 0.44988447427749634f, 0.4403333365917206f, 0.8582252264022827f, 0.45730090141296387f, -0.5152258276939392f, 0.9973276257514954f, 0.17053824663162231f, 0.5374223589897156f, 0.5782082080841064f, 0.7768956422805786f, 0.26673752069473267f, 0.990588366985321f, -0.5027029514312744f, 0.2988073229789734f, 0.3256685733795166f, 0.06763900816440582f, 0.8348881602287292f, 0.6752308011054993f, 0.6536000370979309f, 0.2972516417503357f, -0.30210447311401367f, 0.42418965697288513f, 0.3848784863948822f, 0.942064642906189f, 0.4612175226211548f, 0.4401791989803314f, 0.7007406949996948f, 0.27294859290122986f, -0.8886638283729553f, 0.8026995062828064f, 0.6569862961769104f, 0.6011823415756226f, 0.30776262283325195f, 0.2230992466211319f, 0.18612661957740784f, 0.24618412554264069f, -0.8978050351142883f, 0.10150571167469025f, 0.7967559099197388f, 0.6299114227294922f, 0.09753811359405518f, 0.9603077173233032f, 0.04111746326088905f, 0.609610378742218f, -0.9992632269859314f, 0.5774734616279602f, 0.4679752290248871f, 0.6053263545036316f, 0.35806185007095337f, 0.1269548386335373f, 0.07291553169488907f, 0.06622314453125f, -0.7965883612632751f, 0.9495334625244141f, 0.660209596157074f, 0.016442935913801193f, 0.30878376960754395f, 0.005198406055569649f, 0.3548679053783417f, 0.42843592166900635f, -0.07762084901332855f, 0.9672970175743103f, 0.9423888921737671f, 0.1554131656885147f, 0.36317968368530273f, 0.24138855934143066f, 0.8689433932304382f, 0.8843641877174377f, -0.46789461374282837f, 0.7064928412437439f, 0.5725688338279724f, 0.6684339046478271f, 0.8895378708839417f, 0.049572233110666275f, 0.9692845344543457f, 0.13912451267242432f, -0.44184356927871704f, 0.4346783459186554f, 0.8803675770759583f, 0.8083904385566711f, 0.5910122990608215f, 0.21286213397979736f, 0.02254577912390232f, 0.7622904777526855f, -0.09437636286020279f, 0.4349789321422577f, 0.9496524930000305f, 0.2050684690475464f, 0.6889544725418091f, 0.12707267701625824f, 0.9470899105072021f, 0.8238529562950134f, -0.7702485918998718f, 0.3393433392047882f, 0.8587484955787659f, 0.9145575761795044f, 0.02471528947353363f, 0.6608330607414246f, 0.9423571228981018f, 0.19534248113632202f, -0.20729772746562958f, 0.46567320823669434f, 0.3595926761627197f, 0.17177632451057434f, 0.7940476536750793f, 0.9702233076095581f, 0.9400234222412109f, 0.31777530908584595f, -0.5900509357452393f, 0.3770889937877655f, 0.07090768963098526f, 0.6194389462471008f, 0.6601574420928955f, 0.0046559288166463375f, 0.8538184762001038f, 0.6262005567550659f, -0.8612818121910095f, 0.22162140905857086f, 0.7087401747703552f, 0.3004414737224579f, 0.07500012964010239f, 0.7666949033737183f, 0.5386490821838379f, 0.010200037620961666f, -0.029416149482131004f, 0.5284409523010254f, 0.4974640905857086f, 0.5397548079490662f, 0.2807556092739105f, 0.5129676461219788f, 0.7969377636909485f, 0.9361082911491394f, -0.5516034364700317f, 0.2685200870037079f, 0.4497321546077728f, 0.39106276631355286f, 0.8146396279335022f, 0.7131213545799255f, 0.7893998622894287f, 0.22323215007781982f, -0.9454063177108765f, 0.37871137261390686f, 0.15809187293052673f, 0.7792906761169434f, 0.6577600836753845f, 0.13144618272781372f, 0.9307937026023865f, 0.7527522444725037f, -0.979400634765625f, 0.14301803708076477f, 0.4216887056827545f, 0.02089082822203636f, 0.5287796258926392f, 0.210629403591156f, 0.8205571174621582f, 0.006929468363523483f, -0.1672324389219284f, 0.30972301959991455f, 0.41427892446517944f, 0.7197050452232361f, 0.6161407232284546f, 0.5662662386894226f, 0.7796007990837097f, 0.40706464648246765f, -0.8663144111633301f, 0.6405160427093506f, 0.4213223457336426f, 0.6278231143951416f, 0.27279362082481384f, 0.7468312382698059f, 0.5566102862358093f, 0.8310881853103638f, -0.8967872858047485f, 0.8528995513916016f, 0.9224050641059875f, 0.22050093114376068f, 0.06963960081338882f, 0.18302348256111145f, 0.47623223066329956f, 0.24480661749839783f, -0.13007594645023346f, 0.903130054473877f, 0.9736942648887634f, 0.2995285391807556f, 0.20108923316001892f, 0.48618343472480774f, 0.940943717956543f, 0.5837796330451965f, -0.4986701011657715f, 0.2912686765193939f, 0.18400995433330536f, 0.7026422619819641f, 0.18747784197330475f, 0.5563307404518127f, 0.33490902185440063f, 0.7021719217300415f, -0.3413770794868469f, 0.951179027557373f, 0.9150703549385071f, 0.9375289678573608f, 0.07147141546010971f, 0.6759666204452515f, 0.8945677876472473f, 0.8893424272537231f, -0.40491998195648193f, 0.42193523049354553f, 0.1483861804008484f, 0.9507951736450195f, 0.9218059778213501f, 0.0817909985780716f, 0.2722267210483551f, 0.012310515157878399f,}; - -float In_G[32] = { -24.25750732421875f, 0.0f, 17.349925994873047f, 0.5557441711425781f, 14.420886039733887f, -0.07548666000366211f, 17.74555206298828f, -2.6107892990112305f, -17.349925994873047f, -0.5557441711425781f, 23.721651077270508f, 0.0f, 13.834211349487305f, -1.6208009719848633f, 17.85639190673828f, -1.9040422439575195f, -14.420886039733887f, 0.07548666000366211f, 13.834211349487305f, 1.6208009719848633f, 18.477989196777344f, 0.0f, 15.409793853759766f, -1.2391786575317383f, -17.74555206298828f, 2.6107892990112305f, 17.85639190673828f, 1.9040422439575195f, 15.409793853759766f, 1.2391786575317383f, 24.90799331665039f, 0.0f,}; - -float In_b[64] = { -0.6690350770950317f, 0.8770641684532166f, 0.8081755638122559f, 0.5595823526382446f, 0.34648895263671875f, 0.7148478031158447f, 0.6602845788002014f, 0.7828576564788818f, -0.5714698433876038f, 0.37840455770492554f, 0.44473519921302795f, 0.07128163427114487f, 0.000651157577522099f, 0.61905837059021f, 0.9758675694465637f, 0.9353494048118591f, -0.24781666696071625f, 0.5510500073432922f, 0.3525501787662506f, 0.4439324140548706f, 0.22235047817230225f, 0.4755472242832184f, 0.09723395109176636f, 0.5387508869171143f, -0.5852324366569519f, 0.45369061827659607f, 0.4790390431880951f, 0.6127111315727234f, 0.49991247057914734f, 0.8593834638595581f, 0.7690622210502625f, 0.6138290762901306f, -0.3485807180404663f, 0.37408146262168884f, 0.6353916525840759f, 0.8206998109817505f, 0.5631452202796936f, 0.7861683368682861f, 0.8243831396102905f, 0.42831605672836304f, -0.7609893679618835f, 0.0559641569852829f, 0.4057948887348175f, 0.6814903616905212f, 0.21642974019050598f, 0.16290532052516937f, 0.38927870988845825f, 0.04039851576089859f, -0.3550775647163391f, 0.8469221591949463f, 0.07768834382295609f, 0.9962507486343384f, 0.6816981434822083f, 0.15270540118217468f, 0.07283550500869751f, 0.6096854209899902f, -0.24860939383506775f, 0.9116551280021667f, 0.40090224146842957f, 0.18256144225597382f, 0.5174822211265564f, 0.1793946623802185f, 0.7341713905334473f, 0.1344316154718399f,}; - -float In_sigma[4] = { -0.5048574209213257f, 0.7969616651535034f, 0.626442551612854f, 0.3913288712501526f}; - -// Outputs - -float Out_L[32] = { -4.9251909255981445f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -3.522691011428833f, -0.11283707618713379f, 3.361482858657837f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -2.927985191345215f, 0.015326646156609058f, 1.0476192235946655f, 0.36782118678092957f, 2.9448020458221436f, 0.0f, 0.0f, 0.0f, -3.603018045425415f, 0.5300889611244202f, 1.5540423393249512f, -0.11002621799707413f, 1.108567476272583f, 0.14574278891086578f, 2.8227546215057373f, 0.0f,}; - -float Out_x[8] = { -0.34475764632225037f, 0.013116016983985901f, 0.07680277526378632f, -0.055382680147886276f, 0.35594642162323f, 0.11056525260210037f, 0.14906658232212067f, -0.0037779947742819786f,}; - -float Out_s[8] = { -17.44455337524414f, 1.2580506801605225f, 15.267782211303711f, 0.6289433240890503f, 14.788368225097656f, 2.154991626739502f, 16.390758514404297f, 3.294201135635376f,}; - -float Out_y[8] = { -3.5419039726257324f, 0.2554318606853485f, 0.821639358997345f, 0.03831460699439049f, 1.213992714881897f, 0.3431299924850464f, 0.4207783639431f, -0.010664352215826511f,}; diff --git a/software/apps/mimo_zf_f32/main.c b/software/apps/mimo_zf_f32/main.c deleted file mode 100644 index ea285d9ff..000000000 --- a/software/apps/mimo_zf_f32/main.c +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#include "encoding.h" -#include "printf.h" -#include "runtime.h" -#include "synchronization.h" -#include "mimo_zf_f32.h" - -/* DATA */ -//#include "data_choldec_f32.h" -//#include "data_Axb_f32.h" -#include "data_mimo_zf_f32.h" - -dump(res,1); - -float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -float b[2 * N_RX] __attribute__((section(".l1"))); - -float s[2 * N_TX] __attribute__((section(".l1"))); -float x[2 * N_TX] __attribute__((section(".l1"))); -float y[2 * N_TX] __attribute__((section(".l1"))); - -void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = data[i]; - } - mempool_barrier(num_cores); - return; -} - -void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i++) { - matrix[i] = 0.0f; - } - mempool_barrier(num_cores); - return; -} - -void verify_result(float *pRes, float *pExp, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - float error; - float exp = pExp[i]; - float res = pRes[i]; - asm volatile( - "fsub.s %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - : ); - if (*(int32_t*)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t*)&error, *(int32_t*)&exp, *(int32_t*)&res); - } - } - } -} - -void write_result(float *pRes, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - - float in = pRes[i]; - dump_res(*(uint32_t*)&in); - - } - } -} - -// Driver program -void single_core_mimo_zf_cholesky() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// - - /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(b, In_b, N_RX, core_id, num_cores); - - initialize_zeros(s, N_TX, core_id, num_cores); - initialize_zeros(y, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores); - - - /* Benchmark */ - if (core_id == 0) { - mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, N_RX, N_TX); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); - - mempool_cholesky_f32s(in_matrix, out_matrix, N_TX); - mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); - mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); - - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} - - -void single_core_mimo_zf_jacobi() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// - - /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX*N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX*N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX*N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(b, In_b, N_RX, core_id, num_cores); - - initialize_zeros(s, N_TX, core_id, num_cores); - initialize_zeros(y, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores); - - - /* Benchmark */ - if (core_id == 0) { - mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, N_RX, N_TX); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX); - - mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); - - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} - -int main() { - single_core_mimo_zf_jacobi(); - return 0; -} diff --git a/software/apps/mimo_zf_f32/mimo_zf_f32.h b/software/apps/mimo_zf_f32/mimo_zf_f32.h deleted file mode 100644 index d43c0a3f7..000000000 --- a/software/apps/mimo_zf_f32/mimo_zf_f32.h +++ /dev/null @@ -1,473 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - - -dump(results,1); - -void mempool_hermitian_f32s(float *pH, float *pG, const uint32_t n_rx, const uint32_t n_tx); -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); - -/* Computes the Hermitian matrix G = (H'*H) */ -void mempool_hermitian_f32s(float *pH, float *pG, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j, k; - float a; - float b; - float c0, c1, c2, c3; - float d0, d1, d2, d3; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - a = pH[2U * (k * n_tx + i)]; - b = pH[2U * (k * n_tx + i) + 1U]; - // inputs from matrix H - c0 = pH[2U * (k * n_tx + j)]; - c1 = pH[2U * (k * n_tx + j + 1U)]; - c2 = pH[2U * (k * n_tx + j + 2U)]; - c3 = pH[2U * (k * n_tx + j + 3U)]; - d0 = pH[2U * (k * n_tx + j) + 1U]; - d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; - d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; - d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c - "fmadd.s %[as0], %[a], %[c0], %[as0];" - "fmadd.s %[as1], %[a], %[c1], %[as1];" - "fmadd.s %[as2], %[a], %[c2], %[as2];" - "fmadd.s %[as3], %[a], %[c3], %[as3];" - // a * d - "fmadd.s %[bs0], %[a], %[d0], %[bs0];" - "fmadd.s %[bs1], %[a], %[d3], %[bs1];" - "fmadd.s %[bs2], %[a], %[d2], %[bs2];" - "fmadd.s %[bs3], %[a], %[d3], %[bs3];" - // b * d - "fmadd.s %[as0], %[b], %[d0], %[as0];" - "fmadd.s %[as1], %[b], %[d1], %[as1];" - "fmadd.s %[as2], %[b], %[d2], %[as2];" - "fmadd.s %[as3], %[b], %[d3], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" - "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" - "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" - "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [a] "r" (a), [b] "r" (b), - [c0] "r" (c0), [c1] "r" (c1), [c2] "r" (c2), [c3] "r" (c3), - [d0] "r" (d0), [d1] "r" (d1), [d2] "r" (d2), [d3] "r" (d3) - :); - } - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - j += 4; - } while (j < (n_tx >> 2U)); - } - return; -} - -void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j; - float a0, a1, a2, a3; - float b0, b1, b2, b3; - float c, d; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - - i = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - a0 = pH[2U * (j * n_tx + i)]; - a1 = pH[2U * (j * n_tx + i + 1U)]; - a2 = pH[2U * (j * n_tx + i + 2U)]; - a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h - b0 = pH[2U * (j * n_tx + i) + 1U]; - b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; - b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; - b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; - asm volatile ( - // a * c - "fmadd.s %[as0], %[a0], %[c], %[as0];" - "fmadd.s %[as1], %[a1], %[c], %[as1];" - "fmadd.s %[as2], %[a2], %[c], %[as2];" - "fmadd.s %[as3], %[a3], %[c], %[as3];" - // a * d - "fmadd.s %[bs0], %[a0], %[d], %[bs0];" - "fmadd.s %[bs1], %[a1], %[d], %[bs1];" - "fmadd.s %[bs2], %[a2], %[d], %[bs2];" - "fmadd.s %[bs3], %[a3], %[d], %[bs3];" - // b * d - "fmadd.s %[as0], %[b0], %[d], %[as0];" - "fmadd.s %[as1], %[b1], %[d], %[as1];" - "fmadd.s %[as2], %[b2], %[d], %[as2];" - "fmadd.s %[as3], %[b3], %[d], %[as3];" - // - b * c - "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" - "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" - "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" - "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [c] "r" (c), [d] "r" (d), - [a0] "r" (a0), [a1] "r" (a1), [a2] "r" (a2), [a3] "r" (a3), - [b0] "r" (b0), [b1] "r" (b1), [b2] "r" (b2), [b3] "r" (b3) - :); - } - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } while (i < (n_tx >> 4U)); - return; -} - -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { - - register float sum; - float a, b; - float c, d; - float diag; // Diagonal element - float ap, bp; // Pivot element - float as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile( - "fmadd.s %[sum], %[a], %[a], %[sum];" - "fmadd.s %[sum], %[b], %[b], %[sum];" - : [sum] "+&r" (sum) - : [a] "r" (a), [b] "r" (b) :); - } - asm volatile( - "fsub.s %[ap], %[ap], %[sum];" - "fsqrt.s %[ap], %[ap];" - : [ap] "+&r" (ap) : [sum] "r" (sum) :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = 0.0f; - bs = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - asm volatile ( - "fsub.s %[ap], %[ap], %[as];" - "fsub.s %[bp], %[bp], %[bs];" - "fdiv.s %[ap], %[ap], %[diag];" - "fdiv.s %[bp], %[bp], %[diag];" - : [ap] "+&r" (ap), [bp] "+&r" (bp) - : [diag] "r" (diag), [as] "r" (as), [bs] "r" (bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - - } - return; -} - - -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ab, bb; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = 0.0f; - bs = 0.0f; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * (i * n + i)]; - ab = in[2U * i]; - bb = in[2U * i + 1]; - asm volatile ( - "fsub.s %[ax], %[ab], %[as];" - "fsub.s %[bx], %[bb], %[bs];" - "fdiv.s %[ax], %[ax], %[diag];" - "fdiv.s %[bx], %[bx], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ab, bb; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - as = 0.0f; - bs = 0.0f; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile ( - "fmadd.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r" (as), [bs] "+&r" (bs) - : [a] "r" (a), [b] "r" (b), [c] "r" (c), [d] "r" (d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - ab = in[2 * (n - i - 1)]; - bb = in[2 * (n - i - 1) + 1]; - asm volatile ( - "fsub.s %[ax], %[ab], %[as];" - "fsub.s %[bx], %[bb], %[bs];" - "fdiv.s %[ax], %[ax], %[diag];" - "fdiv.s %[bx], %[bx], %[diag];" - : [ax] "+&r" (ax), [bx] "+&r" (bx) - : [ab] "r" (ab), [bb] "r" (bb), - [as] "r" (as), [bs] "r" (bs), [diag] "r" (diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - -void mempool_jacobi_f32s(float* pA, float* in, float* x, float tol, const uint32_t n, const uint32_t max_iter) { - uint32_t i, j, k; - float diff, error, den; - float register as0, as1; - float register bs0, bs1; - float ab, bb; - float a0, a1; - float b0, b1; - float c0, c1; - float d0, d1; - for (k = 0; k < max_iter; k++) { - // Initialize the diff variable - diff = 0.0f; - /* COMPUTE THE SUM */ - for (i = 0; i < n; i++) { - as0 = 0.0f; - as1 = 0.0f; - bs0 = 0.0f; - bs1 = 0.0f; - /* COMPUTE OUTPUT */ - for(j = 0U; j < n; j += 2) { - if (i == j) { - a0 = pA[2U * (i * n + j + 1U)]; - b0 = pA[2U * (i * n + j + 1U) + 1U]; - c0 = x[2U * (j + 1U)]; - d0 = x[2U * (j + 1U) + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fmadd.s %[as0], %[a0], %[c0], %[as0];" - "fmadd.s %[bs0], %[a0], %[d0], %[bs0];" - "fnmsub.s %[as0], %[b0], %[d0], %[as0];" - "fmadd.s %[bs0], %[b0], %[c0], %[bs0];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) - :); - } else if(i == (j + 1U)) { - a0 = pA[2U * (i * n + j)]; - b0 = pA[2U * (i * n + j) + 1U]; - c0 = x[2U * j]; - d0 = x[2U * j + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fmadd.s %[as0], %[a0], %[c0], %[as0];" - "fmadd.s %[bs0], %[a0], %[d0], %[bs0];" - "fnmsub.s %[as0], %[b0], %[d0], %[as0];" - "fmadd.s %[bs0], %[b0], %[c0], %[bs0];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [a0] "r" (a0), [b0] "r" (b0), [c0] "r" (c0), [d0] "r" (d0) - :); - } else { - a0 = pA[2U * (i * n + j)]; - a1 = pA[2U * (i * n + j + 1U)]; - b0 = pA[2U * (i * n + j) + 1U]; - b1 = pA[2U * (i * n + j + 1U) + 1U]; - c0 = x[2U * j]; - c1 = x[2U * (j + 1U)]; - d0 = x[2U * j + 1U]; - d1 = x[2U * (j + 1U) + 1U]; - // (ac - bd) + j * (ad + bc) - asm volatile ( - "fmadd.s %[as0], %[a0], %[c0], %[as0];" - "fmadd.s %[as1], %[a1], %[c1], %[as1];" - "fmadd.s %[bs0], %[a0], %[d0], %[bs0];" - "fmadd.s %[bs1], %[a1], %[d1], %[bs1];" - "fnmsub.s %[as0], %[b0], %[d0], %[as0];" - "fnmsub.s %[as1], %[b1], %[d1], %[as1];" - "fmadd.s %[bs0], %[b0], %[c0], %[bs0];" - "fmadd.s %[bs1], %[b1], %[c1], %[bs1];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1) - : [a0] "r" (a0), [a1] "r" (a1), - [b0] "r" (b0), [b1] "r" (b1), - [c0] "r" (c0), [c1] "r" (c1), - [d0] "r" (d0), [d1] "r" (d1) - :); - } - } - // Partial sums - asm volatile ( - "fadd.s %[as0], %[as1], %[as0];" - "fadd.s %[bs0], %[as1], %[bs0];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [as1] "r" (as1), [bs1] "r" (bs1) - :); - ab = in[2U * i]; - bb = in[2U * i + 1]; - den = pA[2U * (i * n + i)]; - - /* COMPUTE THE NEW DATA */ - asm volatile ( - // subtract the sum from the input vector - "fsub.s %[as0], %[ab], %[as0];" - "fsub.s %[bs0], %[bb], %[bs0];" - // divide the result by the pivot - "fdiv.s %[as0], %[as0], %[den];" - "fdiv.s %[bs0], %[bs0], %[den];" - : [as0] "+&r" (as0), [bs0] "+&r" (bs0) - : [ab] "r" (ab), [bb] "r" (bb), [den] "r" (den) - :); - /* COMPUTE THE DIFFERENCE */ - // Load the previous result - a0 = x[2U * i]; - b0 = x[2U * i + 1]; - // Compute diff - asm volatile ( - "fsub.s %[a0], %[a0], %[as0];" - "fsub.s %[b0], %[b0], %[bs0];" - : [a0] "+&r" (a0), [b0] "+&r" (b0) - : [as0] "r" (as0), [bs0] "r" (bs0) - :); - a0 = (a0 > 0.0f) ? a0 : (-a0); - b0 = (b0 > 0.0f) ? b0 : (-b0); - asm volatile ( - "fadd.s %[diff], %[a0], %[diff];" - "fadd.s %[diff], %[b0], %[diff];" - : [diff] "+&r" (diff) - : [a0] "r" (a0), [b0] "r" (b0) - :); - /* STORE THE RESULT */ - x[2U * i] = as0; - x[2U * i + 1U] = bs0; - } - /* COMPUTE THE ERROR */ - error = diff / (2.0f * (float)n); - if (error < tol){ - break; - } - } - return; -} - diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h new file mode 100644 index 000000000..c47d0f481 --- /dev/null +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -0,0 +1,148 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); +void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); + +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile("fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r"(sum) + : [a] "r"(a), [b] "r"(b) + :); + } + asm volatile("fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r"(ap) + : [sum] "r"(sum) + :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile("fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + asm volatile("fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r"(ap), [bp] "+&r"(bp) + : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + } + return; +} + +void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + register __fp16 sum; + __fp16 a, b; + __fp16 c, d; + __fp16 diag; // Diagonal element + __fp16 ap, bp; // Pivot element + __fp16 as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[j * NUM_BANKS + 2 * j]; + sum = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[j * NUM_BANKS + 2 * k]; + b = pL[j * NUM_BANKS + 2 * k + 1]; + asm volatile("fmadd.h %[sum], %[a], %[a], %[sum];" + "fmadd.h %[sum], %[b], %[b], %[sum];" + : [sum] "+&r"(sum) + : [a] "r"(a), [b] "r"(b) + :); + } + asm volatile("fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r"(ap) + : [sum] "r"(sum) + :); + pL[j * NUM_BANKS + 2 * j] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[i * NUM_BANKS + 2 * j]; + bp = pSrc[i * NUM_BANKS + 2 * j + 1]; + // Diag + diag = pL[j * NUM_BANKS + 2 * j]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (__fp16)0.0f; + bs = (__fp16)0.0f; + for (k = 0; k < j; k++) { + a = pL[i * NUM_BANKS + 2 * k]; + b = pL[i * NUM_BANKS + 2 * k + 1]; + c = pL[j * NUM_BANKS + 2 * k]; + d = pL[j * NUM_BANKS + 2 * k + 1]; + asm volatile("fmadd.h %[as], %[a], %[c], %[as];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + asm volatile("fsub.h %[ap], %[ap], %[as];" + "fsub.h %[bp], %[bp], %[bs];" + "fdiv.h %[ap], %[ap], %[diag];" + "fdiv.h %[bp], %[bp], %[diag];" + : [ap] "+&r"(ap), [bp] "+&r"(bp) + : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) + :); + pL[i * NUM_BANKS + 2 * j] = ap; + pL[i * NUM_BANKS + 2 * j + 1] = bp; + } + } + return; +} diff --git a/software/kernels/baremetal/mempool_cholesky_f32s.h b/software/kernels/baremetal/mempool_cholesky_f32s.h new file mode 100644 index 000000000..050f70e96 --- /dev/null +++ b/software/kernels/baremetal/mempool_cholesky_f32s.h @@ -0,0 +1,160 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); +void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n); + +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { + + register float sum; + float a, b; + float c, d; + float diag; // Diagonal element + float ap, bp; // Pivot element + float as, bs; // Sum element + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (j * n + k)]; + b = pL[2U * (j * n + k) + 1]; + asm volatile("fmadd.s %[sum], %[a], %[a], %[sum];" + "fmadd.s %[sum], %[b], %[b], %[sum];" + : [sum] "+&r"(sum) + : [a] "r"(a), [b] "r"(b) + :); + } + asm volatile("fsub.s %[ap], %[ap], %[sum];" + "fsqrt.s %[ap], %[ap];" + : [ap] "+&r"(ap) + : [sum] "r"(sum) + :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j) + 1]; + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = 0.0f; + bs = 0.0f; + for (k = 0; k < j; k++) { + a = pL[2U * (i * n + k)]; + b = pL[2U * (i * n + k) + 1]; + c = pL[2U * (j * n + k)]; + d = pL[2U * (j * n + k) + 1]; + asm volatile("fmadd.s %[as], %[a], %[c], %[as];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + asm volatile("fsub.s %[ap], %[ap], %[as];" + "fsub.s %[bp], %[bp], %[bs];" + "fdiv.s %[ap], %[ap], %[diag];" + "fdiv.s %[bp], %[bp], %[diag];" + : [ap] "+&r"(ap), [bp] "+&r"(bp) + : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) + :); + pL[2U * (i * n + j)] = ap; + pL[2U * (i * n + j) + 1] = bp; + } + } + return; +} + +void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { + + register float sum; + + // first matrix row: + // item[0-2] item[1-3] + // memrow[0] x x x x + // memrow[1] x x x x + // second matrix row: + // memrow[2] x x x x + // memrow[3] x x x x + // third matrix row: + // memrow[4] x x x x + // memrow[5] x x x x + // i * memrow_xrow * N_BANKS + (j / local_items) * N_BANKS + j % local_items + + float a, b; + float c, d; + float diag; // Diagonal element + float ap, bp; // Pivot element + float as, bs; // Sum element + uint32_t banks_per_row = (n / 2) * N_BANKS; + + uint32_t i, j, k; + for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + sum = 0.0f; + for (k = 0; k < j; k++) { + a = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; + b = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + asm volatile("fmadd.s %[sum], %[a], %[a], %[sum];" + "fmadd.s %[sum], %[b], %[b], %[sum];" + : [sum] "+&r"(sum) + : [a] "r"(a), [b] "r"(b) + :); + } + asm volatile("fsub.s %[ap], %[ap], %[sum];" + "fsqrt.s %[ap], %[ap];" + : [ap] "+&r"(ap) + : [sum] "r"(sum) + :); + pL[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)] = ap; + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + bp = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; + // Diag + diag = pL[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = 0.0f; + bs = 0.0f; + for (k = 0; k < j; k++) { + a = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; + b = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + c = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; + d = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + asm volatile("fmadd.s %[as], %[a], %[c], %[as];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + asm volatile("fsub.s %[ap], %[ap], %[as];" + "fsub.s %[bp], %[bp], %[bs];" + "fdiv.s %[ap], %[ap], %[diag];" + "fdiv.s %[bp], %[bp], %[diag];" + : [ap] "+&r"(ap), [bp] "+&r"(bp) + : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) + :); + pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)] = ap; + pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1] = bp; + } + } + return; +} diff --git a/software/kernels/baremetal/mempool_linearsolver_f16s.h b/software/kernels/baremetal/mempool_linearsolver_f16s.h new file mode 100644 index 000000000..0b5f3013a --- /dev/null +++ b/software/kernels/baremetal/mempool_linearsolver_f16s.h @@ -0,0 +1,184 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); +void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, + const uint32_t n); +void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, + const uint32_t n); + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * (i * n + i)]; + as = (__fp16)in[2U * i]; + bs = (__fp16)in[2U * i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, + const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = (__fp16)in[2 * (n - i - 1)]; + bs = (__fp16)in[2 * (n - i - 1) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + +void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, + const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[i * N_BANKS + 2 * i]; + as = (__fp16)in[2U * i]; + bs = (__fp16)in[2U * i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[i * N_BANKS + 2 * j]; + b = pL[i * N_BANKS + 2 * j + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, + const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 ax, bx; + __fp16 diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + uint32_t rev_i = (n - 1 - i); + diag = pL[rev_i * N_BANKS + 2 * rev_i]; + as = (__fp16)in[2 * rev_i]; + bs = (__fp16)in[2 * rev_i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + uint32_t rev_j = (n - 1 - j); + a = pL[rev_j * N_BANKS + 2 * rev_i]; + b = pL[rev_j * N_BANKS + 2 * rev_i + 1]; + c = x[2U * rev_j]; + d = x[2U * rev_j + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.h %[ax], %[as], %[diag];" + "fdiv.h %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * rev_i] = ax; + x[2U * rev_i + 1] = bx; + } + return; +} diff --git a/software/kernels/baremetal/mempool_linearsolver_f32s.h b/software/kernels/baremetal/mempool_linearsolver_f32s.h new file mode 100644 index 000000000..221163439 --- /dev/null +++ b/software/kernels/baremetal/mempool_linearsolver_f32s.h @@ -0,0 +1,188 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); +void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, + const uint32_t n); +void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, + const uint32_t n); + +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + as = in[2U * i]; + bs = in[2U * i + 1]; + diag = pL[2 * (i * n + i)]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * i] = ax; + x[2U * i + 1] = bx; + } + return; +} + +void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = in[2 * (n - i - 1)]; + bs = in[2 * (n - i - 1) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * (n - i - 1)] = ax; + x[2U * (n - i - 1) + 1] = bx; + } + return; +} + +void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, + const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + uint32_t banks_per_row = (n / 2) * N_BANKS; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[i * banks_per_row + (i / 2) * N_BANKS + 2 * (i % 2)]; + as = in[(i / 2) * N_BANKS + 2 * (i % 2)]; + bs = in[(i / 2) * N_BANKS + 2 * (i % 2) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + b = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; + c = x[(j / 2) * N_BANKS + 2 * (j % 2)]; + d = x[(j / 2) * N_BANKS + 2 * (j % 2) + 1]; + asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[(i / 2) * N_BANKS + 2 * (i % 2)] = ax; + x[(i / 2) * N_BANKS + 2 * (i % 2) + 1] = bx; + } + return; +} + +void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, + const uint32_t n) { + + uint32_t i, j; + float a, b; + float c, d; + + float as, bs; + float ax, bx; + float diag; + uint32_t banks_per_row = (n / 2) * N_BANKS; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + // reversed i index + uint32_t rev_i = (n - 1 - i); + diag = pL[rev_i * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; + as = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; + bs = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + // reversed j index + uint32_t rev_j = (n - 1 - j); + a = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; + b = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + + 1]; + c = x[2U * rev_j]; + d = x[2U * rev_j + 1]; + asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" + "fnmsub.s %[as], %[b], %[d], %[as];" + "fnmsub.s %[bs], %[a], %[d], %[bs];" + "fmadd.s %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fdiv.s %[ax], %[as], %[diag];" + "fdiv.s %[bx], %[bs], %[diag];" + : [ax] "+&r"(ax), [bx] "+&r"(bx) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + x[2U * rev_i] = ax; + x[2U * rev_i + 1] = bx; + } + return; +} diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h new file mode 100644 index 000000000..3c6113b22 --- /dev/null +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -0,0 +1,347 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded, const uint32_t zf); +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded, const uint32_t zf) { + + uint32_t i, j, k; + __fp16 a; + __fp16 b; + __fp16 c0, c1, c2, c3; + __fp16 d0, d1, d2, d3; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + for (j = 0; j < n_tx; j += 4) { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + "fmadd.h %[as0], %[a], %[c0], %[as0];" + "fmadd.h %[as1], %[a], %[c1], %[as1];" + "fmadd.h %[as2], %[a], %[c2], %[as2];" + "fmadd.h %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.h %[bs0], %[a], %[d0], %[bs0];" + "fmadd.h %[bs1], %[a], %[d3], %[bs1];" + "fmadd.h %[bs2], %[a], %[d2], %[bs2];" + "fmadd.h %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.h %[as0], %[b], %[d0], %[as0];" + "fmadd.h %[as1], %[b], %[d1], %[as1];" + "fmadd.h %[as2], %[b], %[d2], %[as2];" + "fmadd.h %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.h %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.h %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.h %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [a] "r"(a), [b] "r"(b), [c0] "r"(c0), [c1] "r"(c1), [c2] "r"(c2), + [c3] "r"(c3), [d0] "r"(d0), [d1] "r"(d1), [d2] "r"(d2), + [d3] "r"(d3) + :); + } + if (zf == 0) { + // Compute diagonal elements + if (i == j) { + asm volatile("fadd.h %[as0], %[as0], %[sigma];" + : [as0] "+&r"(as0) + : [sigma] "r"(sigma[2 * i]) + :); + bs0 = (__fp16)0.0f; + } else if (i == (j + 1U)) { + asm volatile("fadd.h %[as1], %[as1], %[sigma];" + : [as1] "+&r"(as1) + : [sigma] "r"(sigma[2 * i]) + :); + bs1 = (__fp16)0.0f; + } else if (i == (j + 2U)) { + asm volatile("fadd.h %[as2], %[as2], %[sigma];" + : [as2] "+&r"(as2) + : [sigma] "r"(sigma[2 * i]) + :); + bs2 = (__fp16)0.0f; + } else if (i == (j + 3U)) { + asm volatile("fadd.h %[as3], %[as3], %[sigma];" + : [as3] "+&r"(as3) + : [sigma] "r"(sigma[2 * i]) + :); + bs3 = (__fp16)0.0f; + } + } + if (!folded) { + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + } else { + // uint32_t addr = i * (n_tx / 4) * N_BANKS + (j / 4) * N_BANKS; + uint32_t addr = i * N_BANKS; + // Store + pG[addr] = as0; + pG[addr + 1U] = bs0; + pG[addr + 2U] = as1; + pG[addr + 3U] = bs1; + pG[addr + 4U] = as2; + pG[addr + 5U] = bs2; + pG[addr + 6U] = as3; + pG[addr + 7U] = bs3; + } + } + } + return; +} + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *sigma, + const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + v2h ab; + v2h cd0, cd1, cd2, cd3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); + // inputs from matrix H + cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); + cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); + cd2 = (*(v2h *)&pH[2U * (k * n_tx + j + 2U)]); + cd3 = (*(v2h *)&pH[2U * (k * n_tx + j + 3U)]); + + uint32_t ndc0, ndc1, ndc2, ndc3; + const uint32_t val = 0x3C00BC00; + const uint32_t mask = 0x00010002; + + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + b * d + "vfdotpex.s.h %[as0], %[ab], %[cd0];" + "vfdotpex.s.h %[as1], %[ab], %[cd1];" + "vfdotpex.s.h %[as2], %[ab], %[cd2];" + "vfdotpex.s.h %[as3], %[ab], %[cd3];" + // + "pv.shuffle2.h %[ndc0], %[cd0], %[mask];" + "pv.shuffle2.h %[ndc1], %[cd1], %[mask];" + "pv.shuffle2.h %[ndc2], %[cd2], %[mask];" + "pv.shuffle2.h %[ndc3], %[cd3], %[mask];" + // + "vfmul.h %[ndc0], %[val], %[ndc0];" + "vfmul.h %[ndc1], %[val], %[ndc1];" + "vfmul.h %[ndc2], %[val], %[ndc2];" + "vfmul.h %[ndc3], %[val], %[ndc3];" + // a * d - b * c + "vfdotpex.s.h %[as0], %[ab], %[ndc0];" + "vfdotpex.s.h %[as1], %[ab], %[ndc1];" + "vfdotpex.s.h %[as2], %[ab], %[ndc2];" + "vfdotpex.s.h %[as3], %[ab], %[ndc3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [ndc0] "+r"(ndc0), + [ndc1] "+r"(ndc1), [ndc2] "+r"(ndc2), [ndc3] "+r"(ndc3) + : [ab] "r"(ab), [val] "r"(val), [mask] "r"(mask), [cd0] "r"(cd0), + [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile("fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r"(as0) + : [sigma] "r"(sigma[2 * i]) + :); + bs0 = 0.0f; + } else if (i == (j + 1U)) { + asm volatile("fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r"(as1) + : [sigma] "r"(sigma[2 * i]) + :); + bs1 = 0.0f; + } else if (i == (j + 2U)) { + asm volatile("fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r"(as2) + : [sigma] "r"(sigma[2 * i]) + :); + bs2 = 0.0f; + } else if (i == (j + 3U)) { + asm volatile("fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r"(as3) + : [sigma] "r"(sigma[2 * i]) + :); + bs3 = 0.0f; + } + // Store + v2h res0, res1, res2, res3; + asm volatile( + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), + [res3] "=&r"(res3) + : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), + [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) + :); + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; + (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; + (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; + j += 4; + } while (j < (n_tx >> 2U)); + } + return; +} + +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded) { + + uint32_t i, j; + __fp16 a0, a1, a2, a3; + __fp16 b0, b1, b2, b3; + __fp16 c, d; + __fp16 as0, as1, as2, as3; + __fp16 bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = (__fp16)0.0f; + as1 = (__fp16)0.0f; + as2 = (__fp16)0.0f; + as3 = (__fp16)0.0f; + // Initialize the imag part of sums + bs0 = (__fp16)0.0f; + bs1 = (__fp16)0.0f; + bs2 = (__fp16)0.0f; + bs3 = (__fp16)0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile( + // a * c + "fmadd.h %[as0], %[a0], %[c], %[as0];" + "fmadd.h %[as1], %[a1], %[c], %[as1];" + "fmadd.h %[as2], %[a2], %[c], %[as2];" + "fmadd.h %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.h %[bs0], %[a0], %[d], %[bs0];" + "fmadd.h %[bs1], %[a1], %[d], %[bs1];" + "fmadd.h %[bs2], %[a2], %[d], %[bs2];" + "fmadd.h %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.h %[as0], %[b0], %[d], %[as0];" + "fmadd.h %[as1], %[b1], %[d], %[as1];" + "fmadd.h %[as2], %[b2], %[d], %[as2];" + "fmadd.h %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.h %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.h %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.h %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.h %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [c] "r"(c), [d] "r"(d), [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), + [a3] "r"(a3), [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3) + :); + } + if (!folded) { + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } else { + // Store + uint32_t addr = (i / 4) * N_BANKS; + py[addr] = as0; + py[addr + 1U] = bs0; + py[addr + 2U] = as1; + py[addr + 3U] = bs1; + py[addr + 4U] = as2; + py[addr + 5U] = bs2; + py[addr + 6U] = as3; + py[addr + 7U] = bs3; + i += 4; + } + + } while (i < n_tx); + return; +} diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32p.h b/software/kernels/baremetal/mempool_mimo_mmse_f32p.h new file mode 100644 index 000000000..3bb29aa18 --- /dev/null +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32p.h @@ -0,0 +1,218 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded, const uint32_t zf, + const uint32_t core_id, const uint32_t nPE); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded, const uint32_t zf, + const uint32_t core_id, const uint32_t nPE) { + + uint32_t i, j, k; + float a; + float b; + float c0, c1, c2, c3; + float d0, d1, d2, d3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = core_id; i < n_tx; i += nPE) { + for (j = 0; j < n_tx; j += 4) { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + "fmadd.s %[as0], %[a], %[c0], %[as0];" + "fmadd.s %[as1], %[a], %[c1], %[as1];" + "fmadd.s %[as2], %[a], %[c2], %[as2];" + "fmadd.s %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.s %[bs0], %[a], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a], %[d1], %[bs1];" + "fmadd.s %[bs2], %[a], %[d2], %[bs2];" + "fmadd.s %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.s %[as0], %[b], %[d0], %[as0];" + "fmadd.s %[as1], %[b], %[d1], %[as1];" + "fmadd.s %[as2], %[b], %[d2], %[as2];" + "fmadd.s %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [a] "r"(a), [b] "r"(b), [c0] "r"(c0), [c1] "r"(c1), [c2] "r"(c2), + [c3] "r"(c3), [d0] "r"(d0), [d1] "r"(d1), [d2] "r"(d2), + [d3] "r"(d3) + :); + } + if (zf == 0) { + // Compute diagonal element + float s = sigma[i]; + if (i == j) { + asm volatile("fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r"(as0) + : [sigma] "r"(s) + :); + bs0 = 0.0f; + } else if (i == (j + 1U)) { + asm volatile("fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r"(as1) + : [sigma] "r"(s) + :); + bs1 = 0.0f; + } else if (i == (j + 2U)) { + asm volatile("fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r"(as2) + : [sigma] "r"(s) + :); + bs2 = 0.0f; + } else if (i == (j + 3U)) { + asm volatile("fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r"(as3) + : [sigma] "r"(s) + :); + bs3 = 0.0f; + } + } + if (!folded) { + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + } else { + // Store + uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); + pG[addr] = as0; + pG[addr + 1U] = bs0; + pG[addr + 2U] = as1; + pG[addr + 3U] = bs1; + pG[addr + N_BANKS] = as2; + pG[addr + N_BANKS + 1U] = bs2; + pG[addr + N_BANKS + 2U] = as3; + pG[addr + N_BANKS + 3U] = bs3; + } + } + } + mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); + return; +} + +void mempool_MVP_conjtransp_f32p(float *pH, float *pb, float *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t core_id, const uint32_t nPE) { + + uint32_t i, j; + float a0, a1, a2, a3; + float b0, b1, b2, b3; + float c, d; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + + for (i = core_id; i < n_tx; i += 4 * nPE) { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile( + // a * c + "fmadd.s %[as0], %[a0], %[c], %[as0];" + "fmadd.s %[as1], %[a1], %[c], %[as1];" + "fmadd.s %[as2], %[a2], %[c], %[as2];" + "fmadd.s %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.s %[bs0], %[a0], %[d], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d], %[bs1];" + "fmadd.s %[bs2], %[a2], %[d], %[bs2];" + "fmadd.s %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.s %[as0], %[b0], %[d], %[as0];" + "fmadd.s %[as1], %[b1], %[d], %[as1];" + "fmadd.s %[as2], %[b2], %[d], %[as2];" + "fmadd.s %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [c] "r"(c), [d] "r"(d), [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), + [a3] "r"(a3), [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3) + :); + } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } + mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); + return; +} diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h new file mode 100644 index 000000000..15d995fda --- /dev/null +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h @@ -0,0 +1,367 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded, const uint32_t zf); +void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded); +void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, + const uint32_t n, const uint32_t max_iter); + +/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded, const uint32_t zf) { + + uint32_t i, j, k; + float a; + float b; + float c0, c1, c2, c3; + float d0, d1, d2, d3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + for (j = 0; j < n_tx; j += 4) { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + "fmadd.s %[as0], %[a], %[c0], %[as0];" + "fmadd.s %[as1], %[a], %[c1], %[as1];" + "fmadd.s %[as2], %[a], %[c2], %[as2];" + "fmadd.s %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.s %[bs0], %[a], %[d0], %[bs0];" + "fmadd.s %[bs1], %[a], %[d1], %[bs1];" + "fmadd.s %[bs2], %[a], %[d2], %[bs2];" + "fmadd.s %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.s %[as0], %[b], %[d0], %[as0];" + "fmadd.s %[as1], %[b], %[d1], %[as1];" + "fmadd.s %[as2], %[b], %[d2], %[as2];" + "fmadd.s %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.s %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.s %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [a] "r"(a), [b] "r"(b), [c0] "r"(c0), [c1] "r"(c1), [c2] "r"(c2), + [c3] "r"(c3), [d0] "r"(d0), [d1] "r"(d1), [d2] "r"(d2), + [d3] "r"(d3) + :); + } + if (zf == 0) { + // Compute diagonal elements + if (i == j) { + asm volatile("fadd.s %[as0], %[as0], %[sigma];" + : [as0] "+&r"(as0) + : [sigma] "r"(sigma[i]) + :); + bs0 = 0.0f; + } else if (i == (j + 1U)) { + asm volatile("fadd.s %[as1], %[as1], %[sigma];" + : [as1] "+&r"(as1) + : [sigma] "r"(sigma[i]) + :); + bs1 = 0.0f; + } else if (i == (j + 2U)) { + asm volatile("fadd.s %[as2], %[as2], %[sigma];" + : [as2] "+&r"(as2) + : [sigma] "r"(sigma[i]) + :); + bs2 = 0.0f; + } else if (i == (j + 3U)) { + asm volatile("fadd.s %[as3], %[as3], %[sigma];" + : [as3] "+&r"(as3) + : [sigma] "r"(sigma[i]) + :); + bs3 = 0.0f; + } + } + if (!folded) { + // Store + pG[2 * (i * n_tx + j)] = as0; + pG[2 * (i * n_tx + j + 1U)] = as1; + pG[2 * (i * n_tx + j + 2U)] = as2; + pG[2 * (i * n_tx + j + 3U)] = as3; + pG[2 * (i * n_tx + j) + 1U] = bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; + } else { + // Store + uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); + pG[addr] = as0; + pG[addr + 1U] = bs0; + pG[addr + 2U] = as1; + pG[addr + 3U] = bs1; + pG[addr + N_BANKS] = as2; + pG[addr + N_BANKS + 1U] = bs2; + pG[addr + N_BANKS + 2U] = as3; + pG[addr + N_BANKS + 3U] = bs3; + } + } + } + return; +} + +void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded) { + + uint32_t i, j; + float a0, a1, a2, a3; + float b0, b1, b2, b3; + float c, d; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + + i = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from b + c = pb[2U * j]; + d = pb[2U * j + 1U]; + asm volatile( + // a * c + "fmadd.s %[as0], %[a0], %[c], %[as0];" + "fmadd.s %[as1], %[a1], %[c], %[as1];" + "fmadd.s %[as2], %[a2], %[c], %[as2];" + "fmadd.s %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.s %[bs0], %[a0], %[d], %[bs0];" + "fmadd.s %[bs1], %[a1], %[d], %[bs1];" + "fmadd.s %[bs2], %[a2], %[d], %[bs2];" + "fmadd.s %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.s %[as0], %[b0], %[d], %[as0];" + "fmadd.s %[as1], %[b1], %[d], %[as1];" + "fmadd.s %[as2], %[b2], %[d], %[as2];" + "fmadd.s %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.s %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.s %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.s %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [c] "r"(c), [d] "r"(d), [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), + [a3] "r"(a3), [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3) + :); + } + if (!folded) { + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; + } else { + // Store + uint32_t addr = (i / 4) * 2 * N_BANKS; + py[addr] = as0; + py[addr + 1U] = bs0; + py[addr + 2U] = as1; + py[addr + 3U] = bs1; + py[addr + N_BANKS] = as2; + py[addr + N_BANKS + 1U] = bs2; + py[addr + N_BANKS + 2U] = as3; + py[addr + N_BANKS + 3U] = bs3; + i += 4; + } + } while (i < n_tx); + return; +} + +void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, + const uint32_t n, const uint32_t max_iter) { + uint32_t i, j, k; + float error; + float register diff, den; + float register as0, as1; + float register bs0, bs1; + float a0, a1; + float b0, b1; + float c0, c1; + float d0, d1; + for (k = 0; k < max_iter; k++) { + + // Initialize the diff variable + diff = 0.0f; + + /* COMPUTE THE SUM */ + for (i = 0; i < n; i++) { + + den = pA[2U * (i * n + i)]; + as0 = in[2U * i]; + bs0 = in[2U * i + 1]; + as1 = 0.0f; + bs1 = 0.0f; + asm volatile( + // divide the result by the pivot + "fdiv.s %[den], %[imm], %[den];" + : [den] "+&r"(den) + : [imm] "r"((uint32_t)0x3F800000) + :); + + /* COMPUTE OUTPUT */ + for (j = 0U; j < n; j += 2) { + if (i == j) { + a0 = pA[2U * (i * n + j + 1U)]; + b0 = pA[2U * (i * n + j + 1U) + 1U]; + c0 = x[2U * (j + 1U)]; + d0 = x[2U * (j + 1U) + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile("fnmsub.s %[as0], %[a0], %[c0], %[as0];" + "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" + "fmadd.s %[as0], %[b0], %[d0], %[as0];" + "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" + : [as0] "+&r"(as0), [bs0] "+&r"(bs0) + : [a0] "r"(a0), [b0] "r"(b0), [c0] "r"(c0), [d0] "r"(d0) + :); + } else if (i == (j + 1U)) { + a0 = pA[2U * (i * n + j)]; + b0 = pA[2U * (i * n + j) + 1U]; + c0 = x[2U * j]; + d0 = x[2U * j + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile("fnmsub.s %[as0], %[a0], %[c0], %[as0];" + "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" + "fmadd.s %[as0], %[b0], %[d0], %[as0];" + "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" + : [as0] "+&r"(as0), [bs0] "+&r"(bs0) + : [a0] "r"(a0), [b0] "r"(b0), [c0] "r"(c0), [d0] "r"(d0) + :); + } else { + a0 = pA[2U * (i * n + j)]; + a1 = pA[2U * (i * n + j + 1U)]; + b0 = pA[2U * (i * n + j) + 1U]; + b1 = pA[2U * (i * n + j + 1U) + 1U]; + c0 = x[2U * j]; + c1 = x[2U * (j + 1U)]; + d0 = x[2U * j + 1U]; + d1 = x[2U * (j + 1U) + 1U]; + // (ac - bd) + j * (ad + bc) + asm volatile("fnmsub.s %[as0], %[a0], %[c0], %[as0];" + "fnmsub.s %[as1], %[a1], %[c1], %[as1];" + "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" + "fnmsub.s %[bs1], %[b1], %[c1], %[bs1];" + "fmadd.s %[as0], %[b0], %[d0], %[as0];" + "fmadd.s %[as1], %[b1], %[d1], %[as1];" + "fnmsub.s %[bs0], %[a0], %[d0], %[bs0];" + "fnmsub.s %[bs1], %[a1], %[d1], %[bs1];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [bs0] "+&r"(bs0), + [bs1] "+&r"(bs1) + : [a0] "r"(a0), [a1] "r"(a1), [b0] "r"(b0), [b1] "r"(b1), + [c0] "r"(c0), [c1] "r"(c1), [d0] "r"(d0), [d1] "r"(d1) + :); + } + } + // Partial sums + asm volatile("fadd.s %[as0], %[as1], %[as0];" + "fadd.s %[bs0], %[bs1], %[bs0];" + : [as0] "+&r"(as0), [bs0] "+&r"(bs0) + : [as1] "r"(as1), [bs1] "r"(bs1) + :); + + /* COMPUTE THE NEW DATA (& DIFFERENCE)*/ + asm volatile( + // divide the result by the pivot & compute difference + "fmul.s %[as0], %[as0], %[den];" + "fmul.s %[bs0], %[bs0], %[den];" + : [as0] "+&r"(as0), [bs0] "+&r"(bs0) + : [den] "r"(den) + :); + // Load the previous result + a0 = x[2U * i]; + b0 = x[2U * i + 1]; + asm volatile("fsub.s %[a0], %[a0], %[as0];" + "fsub.s %[b0], %[b0], %[bs0];" + : [a0] "+&r"(a0), [b0] "+&r"(b0) + : [as0] "r"(as0), [bs0] "r"(bs0) + :); + // Add absolute value to total difference + a0 = (a0 > 0.0f) ? a0 : (-a0); + b0 = (b0 > 0.0f) ? b0 : (-b0); + asm volatile("fadd.s %[diff], %[a0], %[diff];" + "fadd.s %[diff], %[b0], %[diff];" + : [diff] "+&r"(diff) + : [a0] "r"(a0), [b0] "r"(b0) + :); + + /* STORE THE RESULT */ + x[2U * i] = as0; + x[2U * i + 1U] = bs0; + } + + /* COMPUTE THE ERROR */ + asm volatile( + // divide the result by the pivot + "fdiv.s %[error], %[diff], %[n_samples];" + : [error] "+&r"(error) + : [diff] "r"(diff), [n_samples] "r"(2.0f * (float)n) + :); + if (error < tol) + break; + } + return; +} diff --git a/software/apps/choldec_f16/data_choldec.h.tpl b/software/runtime/data/data_cholesky_f16.h.tpl similarity index 72% rename from software/apps/choldec_f16/data_choldec.h.tpl rename to software/runtime/data/data_cholesky_f16.h.tpl index 8851c8fc4..58368c2dd 100644 --- a/software/apps/choldec_f16/data_choldec.h.tpl +++ b/software/runtime/data/data_cholesky_f16.h.tpl @@ -15,9 +15,8 @@ return out %> \ -#define N_TX (${N_tx}) -#define N_RX (${N_rx}) +#define N (${N}) -__fp16 In_G[${2 * N_tx * N_rx}] = ${array_to_cstr(G)}; +__fp16 In_G[${2 * N * N}] = ${array_to_cstr(G)}; -__fp16 Out_L[${2 * N_tx * N_rx}] = ${array_to_cstr(L)}; +__fp16 Out_L[${2 * N * N}] = ${array_to_cstr(L)}; diff --git a/software/apps/choldec_f16/data_choldec.py b/software/runtime/data/data_cholesky_f16.py similarity index 66% rename from software/apps/choldec_f16/data_choldec.py rename to software/runtime/data/data_cholesky_f16.py index 6d9211616..c0a44165d 100644 --- a/software/apps/choldec_f16/data_choldec.py +++ b/software/runtime/data/data_cholesky_f16.py @@ -1,5 +1,12 @@ #!/usr/bin/env python3 +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 cholesky. +# Author: Marco Bertuletti + import numpy as np import argparse import pathlib @@ -13,7 +20,7 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - file = outdir / f"data_{kwargs['name']}.h" + file = outdir / f"{kwargs['name']}.h" print(tpl, outdir, kwargs['name']) @@ -28,7 +35,7 @@ def main(): "-o", "--outdir", type=pathlib.Path, - default=pathlib.Path.cwd(), + default=pathlib.Path( __file__ ).parent.absolute(), required=False, help='Select out directory of generated data files' ) @@ -37,7 +44,7 @@ def main(): "--tpl", type=pathlib.Path, required=False, - default=pathlib.Path.cwd() / "data_axb.h.tpl", + default=pathlib.Path( __file__ ).parent.absolute() / "data_cholesky_f16.h.tpl", help='Path to mako template' ) parser.add_argument( @@ -48,38 +55,29 @@ def main(): ) parser.add_argument( "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", + "--dimension", type=int, required=False, default=4, - help='First dimension.' + help='Matrix dimension' ) args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers + N=args.dimension # Create hermitian matrix - H = np.random.rand(N_rx, N_tx) + 1.j * np.random.rand(N_tx, N_rx) + H = np.random.rand(N, N) + 1.j * np.random.rand(N, N) # Matrix to be inverted G = H*(np.asmatrix(H).H) # Cholesky decomposition L = np.linalg.cholesky(G) - G = np.reshape(G, (N_tx*N_rx, -1), order='C') - L = np.reshape(L, (N_tx*N_rx, -1), order='C') - G_RI = np.zeros(2*N_tx*N_rx) - L_RI = np.zeros(2*N_tx*N_rx) + G = np.reshape(G, (N*N, -1), order='C') + L = np.reshape(L, (N*N, -1), order='C') + G_RI = np.zeros(2*N*N) + L_RI = np.zeros(2*N*N) - for i in range(N_tx*N_rx): + for i in range(N*N): G_RI[2*i] = G[i].real G_RI[2*i+1] = G[i].imag L_RI[2*i] = L[i].real @@ -91,7 +89,7 @@ def main(): print("Output matrix in (Re, Im) format:\n", L_RI) - kwargs = {'name': 'choldec_f16', 'G': G_RI, 'L' : L_RI, 'N_tx' : N_tx, 'N_rx' : N_rx} + kwargs = {'name': 'data_cholesky_f16', 'G': G_RI, 'L' : L_RI, 'N' : N} gen_data_header_file(args.outdir, args.tpl, **kwargs) if __name__ == "__main__": diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl b/software/runtime/data/data_mimo_mmse_f16.h.tpl similarity index 100% rename from software/apps/mimo_mmse_f16/data_mimo_mmse.h.tpl rename to software/runtime/data/data_mimo_mmse_f16.h.tpl diff --git a/software/apps/mimo_mmse_f16/data_mimo_mmse.py b/software/runtime/data/data_mimo_mmse_f16.py similarity index 88% rename from software/apps/mimo_mmse_f16/data_mimo_mmse.py rename to software/runtime/data/data_mimo_mmse_f16.py index 49c07f21f..b70c3365a 100644 --- a/software/apps/mimo_mmse_f16/data_mimo_mmse.py +++ b/software/runtime/data/data_mimo_mmse_f16.py @@ -1,5 +1,12 @@ #!/usr/bin/env python3 +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 mmse. +# Author: Marco Bertuletti + import numpy as np import argparse import pathlib @@ -13,7 +20,7 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - file = outdir / f"data_{kwargs['name']}.h" + file = outdir / f"{kwargs['name']}.h" print(tpl, outdir, kwargs['name']) @@ -95,7 +102,7 @@ def main(): "-o", "--outdir", type=pathlib.Path, - default=pathlib.Path.cwd(), + default=pathlib.Path( __file__ ).parent.absolute(), required=False, help='Select out directory of generated data files' ) @@ -104,7 +111,7 @@ def main(): "--tpl", type=pathlib.Path, required=False, - default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", + default=pathlib.Path( __file__ ).parent.absolute() / "data_mimo_mmse_f16.h.tpl", help='Path to mako template' ) parser.add_argument( @@ -163,7 +170,7 @@ def main(): b_RI = b_RI.astype(np.float16) x_RI = x_RI.astype(np.float16) - kwargs = {'name': 'mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} + kwargs = {'name': 'data_mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) if __name__ == "__main__": diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl b/software/runtime/data/data_mimo_mmse_f32.h.tpl similarity index 100% rename from software/apps/mimo_mmse_f32/data_mimo_mmse.h.tpl rename to software/runtime/data/data_mimo_mmse_f32.h.tpl diff --git a/software/apps/mimo_mmse_f32/data_mimo_mmse.py b/software/runtime/data/data_mimo_mmse_f32.py similarity index 88% rename from software/apps/mimo_mmse_f32/data_mimo_mmse.py rename to software/runtime/data/data_mimo_mmse_f32.py index 6a46e2c40..9b4b795c1 100644 --- a/software/apps/mimo_mmse_f32/data_mimo_mmse.py +++ b/software/runtime/data/data_mimo_mmse_f32.py @@ -1,5 +1,12 @@ #!/usr/bin/env python3 +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp32 mmse. +# Author: Marco Bertuletti + import numpy as np import argparse import pathlib @@ -13,7 +20,7 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - file = outdir / f"data_{kwargs['name']}.h" + file = outdir / f"{kwargs['name']}.h" print(tpl, outdir, kwargs['name']) @@ -99,7 +106,7 @@ def main(): "-o", "--outdir", type=pathlib.Path, - default=pathlib.Path.cwd(), + default=pathlib.Path( __file__ ).parent.absolute(), required=False, help='Select out directory of generated data files' ) @@ -108,7 +115,7 @@ def main(): "--tpl", type=pathlib.Path, required=False, - default=pathlib.Path.cwd() / "data_mimo_mmse.h.tpl", + default=pathlib.Path( __file__ ).parent.absolute() / "data_mimo_mmse_f32.h.tpl", help='Path to mako template' ) parser.add_argument( @@ -162,7 +169,7 @@ def main(): x_RI = np.reshape(x_RI, (2*N_tx*itr)) - kwargs = {'name': 'mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} + kwargs = {'name': 'data_mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) if __name__ == "__main__": From 54dba065e891405b60e35c3d3e0b797c082ef4d4 Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Mon, 17 Jul 2023 17:52:07 +0200 Subject: [PATCH 07/39] [software] Add FFT f16 kernel --- software/apps/cfft_radix4_f16/main.c | 177 ++++++ .../mempool_cfft_radix4_butterfly_f16.h | 199 +++++++ .../baremetal/mempool_cfft_radix4_f16p.h | 526 ++++++++++++++++++ .../mempool_cfft_radix4_q16_bitreversal.h | 23 + .../runtime/data/data_cfft_radix4_f16.h.tpl | 45 ++ software/runtime/data/data_cfft_radix4_f16.py | 127 +++++ 6 files changed, 1097 insertions(+) create mode 100644 software/apps/cfft_radix4_f16/main.c create mode 100644 software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h create mode 100644 software/kernels/baremetal/mempool_cfft_radix4_f16p.h create mode 100644 software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h create mode 100644 software/runtime/data/data_cfft_radix4_f16.h.tpl create mode 100644 software/runtime/data/data_cfft_radix4_f16.py diff --git a/software/apps/cfft_radix4_f16/main.c b/software/apps/cfft_radix4_f16/main.c new file mode 100644 index 000000000..8174c52cd --- /dev/null +++ b/software/apps/cfft_radix4_f16/main.c @@ -0,0 +1,177 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include +#include +#include + +/* Mempool runtime libraries */ +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "xpulp/builtins_v2.h" + +#define SCHEDULED +#define FOLDED_TWIDDLES +#define BITREVERSETABLE + +#define WU_STRIDE (1) +#define STEP (4 * WU_STRIDE) +#ifndef N_FFTs_ROW +#define N_FFTs_ROW 1 +#endif +#ifndef N_FFTs_COL +#define N_FFTs_COL 4 +#endif + +#include "data/data_cfft_radix4_f16.h" +#include "kernel/mempool_cfft_radix4_butterfly_f16.h" +#include "kernel/mempool_cfft_radix4_f16p.h" +#include "kernel/mempool_cfft_radix4_q16_bitreversal.h" + +__fp16 l1_pSrc[N_FFTs_ROW * 8 * N_BANKS] + __attribute__((aligned(N_FFTs_ROW * 8 * N_BANKS), section(".l1"))); +__fp16 l1_pDst[N_FFTs_ROW * 8 * N_BANKS] + __attribute__((aligned(N_FFTs_ROW * 8 * N_BANKS), section(".l1"))); +__fp16 l1_pCoef_src[8 * N_BANKS] + __attribute__((aligned(8 * N_BANKS), section(".l1"))); +__fp16 l1_pCoef_dst[8 * N_BANKS] + __attribute__((aligned(8 * N_BANKS), section(".l1"))); +uint16_t l1_pRevT16[BITREVINDEXTABLE_FIXED_TABLE_LENGTH] + __attribute__((aligned(N_BANKS), section(".l1"))); + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/* INITIALIZATION FUNCTIONS*/ + +void initialize_l1() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + + // Initialize the inputs and results from the data.h file + for (uint32_t j = 0; j < N_FFTs_ROW; j++) { + for (uint32_t i = core_id; i < (8 * N_BANKS); i += num_cores) { + if (i < N_RSAMPLES * N_FFTs_COL) { + l1_pSrc[j * (8 * N_BANKS) + i] = (__fp16)pSrc[i % N_RSAMPLES]; + } else { + l1_pSrc[j * (8 * N_BANKS) + i] = (__fp16)0.0f; + } + l1_pDst[j * (8 * N_BANKS) + i] = (__fp16)0.0f; + } + } + // Initialize the Bitreversal table + for (uint32_t i = core_id; i < BITREVINDEXTABLE_FIXED_TABLE_LENGTH; + i += num_cores) { + *(v2h *)&l1_pRevT16[2U * i] = *(v2h *)&BitRevIndexTable[2U * i]; + } + mempool_barrier(num_cores); + +// Initialize the Twiddles +#ifdef FOLDED_TWIDDLES + for (uint32_t i = core_id; i < 8 * N_BANKS; i += num_cores) { + l1_pCoef_src[i] = (__fp16)0.0f; + l1_pCoef_dst[i] = (__fp16)0.0f; + } + mempool_barrier(num_cores); + for (uint32_t j = 0; j < N_FFTs_COL; j++) { + uint32_t N_WORDS_COL = (N_CSAMPLES / 4); + for (uint32_t i = core_id; i < N_WORDS_COL; i += num_cores) { + *(v2h *)&l1_pCoef_src[2U * (i + j * (N_CSAMPLES / 4))] = + *(v2h *)&pTwi[2U * i]; + *(v2h *)&l1_pCoef_src[2U * (i + j * (N_CSAMPLES / 4) + 1 * N_BANKS)] = + *(v2h *)&pTwi[2U * (i * 2U)]; + *(v2h *)&l1_pCoef_src[2U * (i + j * (N_CSAMPLES / 4) + 2 * N_BANKS)] = + *(v2h *)&pTwi[2U * (i * 3U)]; + } + } +#else + for (uint32_t i = core_id; i < 6 * (N_CSAMPLES / 4); i += num_cores) { + l1_pCoef_src[i] = pTwi[i]; + } +#endif + mempool_barrier(num_cores); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/* MAIN */ +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + uint32_t cores_fft = N_CSAMPLES / 16; // Each core gets 4 elements + mempool_barrier_init(core_id); + + initialize_l1(); + if (core_id == 0) { + printf("On the run...\n"); + } + mempool_barrier(num_cores); + + /////////////////////////////////////////////////////////////////////////////////////////////////// + /* MULTI-CORE FOLDED */ +#ifdef FOLDED + if (core_id < cores_fft) { + mempool_start_benchmark(); +#ifdef FOLDED_TWIDDLES + mempool_radix4_cfft_q16p_folded(l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src, + l1_pCoef_dst, cores_fft); +#else + mempool_radix4_cfft_q16p_folded(l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src, + cores_fft); +#endif + mempool_bitrev_q16p_xpulpimg((uint16_t *)l1_pDst, (uint16_t *)l1_pSrc, + N_CSAMPLES, cores_fft); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + /////////////////////////////////////////////////////////////////////////////////////////////////// + /* CHECK */ + if (core_id == 0) { + printf("Done!\n"); + for (uint32_t i = 0; i < 2 * N_CSAMPLES; i++) { + __fp16 exp = pDst[i]; + __fp16 res = l1_pDst[i]; + __fp16 dif; + float tol = (__fp16)0.05f; + float dif_f32; + asm volatile("fsub.h %[dif], %[res], %[exp];" + "fcvt.h.s %[dif_f32], %[dif];" + : [dif] "+&r"(dif), [dif_f32] "+&r"(dif_f32) + : [res] "r"(res), [exp] "r"(exp) + :); + if ((dif_f32 > tol) || (dif_f32 < (-tol))) { + printf("%d %x %x\n", i, *(int32_t *)&exp, *(int32_t *)&res); + } + } + } + mempool_barrier(num_cores); +#endif + + /////////////////////////////////////////////////////////////////////////////////////////////////// + /* MULTI-CORE SCHEDULED */ +#ifdef SCHEDULED + if (core_id < N_FFTs_COL * cores_fft) { + mempool_start_benchmark(); + uint32_t col_fftLen = N_CSAMPLES / 4; + uint32_t col_id = core_id / cores_fft; + // Distribute FFTs over columns + if (col_id < N_FFTs_COL) { + mempool_radix4_cfft_q16p_scheduler( + col_id, l1_pSrc, l1_pDst, N_CSAMPLES, + l1_pCoef_src + 2 * col_id * col_fftLen, + l1_pCoef_dst + 2 * col_id * col_fftLen, l1_pRevT16, + BITREVINDEXTABLE_FIXED_TABLE_LENGTH, 0, cores_fft); + } + mempool_log_partial_barrier(2, core_id, N_FFTs_COL * cores_fft); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + + return 0; +} diff --git a/software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h b/software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h new file mode 100644 index 000000000..5196fc30d --- /dev/null +++ b/software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h @@ -0,0 +1,199 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "xpulp/builtins_v2.h" + +/** + @brief First butterfly stage. + @param[in] pIn points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pOut points to output buffer of 16b data, Re and Im parts are + interleaved + @param[in] i0 points to the first element to be processed + @param[in] n2 number of elements in the first wing of the butterfly + @param[in] CoSi1 packed cosine and sine first twiddle + @param[in] CoSi2 packed cosine and sine second twiddle + @param[in] CoSi3 packed cosine and sine third twiddle + @param[in] C1 packed sine and cosine first twiddle + @param[in] C2 packed sine and cosine second twiddle + @param[in] C3 packed sine and cosine third twiddle + @return none +*/ +static inline void radix4_butterfly(__fp16 *pIn, __fp16 *pOut, + uint32_t i0, uint32_t n2, v2h CoSi1, + v2h CoSi2, v2h CoSi3, v2h C1, v2h C2, + v2h C3) { + uint32_t i1, i2, i3; + __fp16 t0, t1, t2, t3, t4, t5; + v2h A, B, C, D, E, F, G, H; + +#if defined(FOLDED) || defined(SCHEDULED) + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + N_BANKS; + i2 = i1 + N_BANKS; + i3 = i2 + N_BANKS; + uint32_t n2_store = n2 >> 2U; + uint32_t i0_store = + (i0 % n2_store) + (i0 / n2) * n2 + ((i0 % n2) / n2_store) * N_BANKS; + uint32_t i1_store = i0_store + n2_store; + uint32_t i2_store = i1_store + n2_store; + uint32_t i3_store = i2_store + n2_store; +#else + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; +#endif + /* Read ya (real), xa (imag) input */ + A = *(v2h *)&pIn[i0 * 2U]; + /* Read yb (real), xb(imag) input */ + B = *(v2h *)&pIn[i1 * 2U]; + /* Read yc (real), xc(imag) input */ + C = *(v2h *)&pIn[i2 * 2U]; + /* Read yd (real), xd(imag) input */ + D = *(v2h *)&pIn[i3 * 2U]; + asm volatile( + // xa + xc, ya + yc + "vfadd.h %[E],%[A],%[C];" + // xa - xc, ya - yc + "vfsub.h %[F],%[A],%[C];" + // xb + xd, yd + yd + "vfadd.h %[G],%[B],%[D];" + // xb - xd, yb - yd + "vfsub.h %[H],%[B],%[D];" + "pv.extract.h %[t0],%[H],0;" + "pv.extract.h %[t1],%[H],1;" + "fsub.h %[t3],zero,%[t1];" + "fsub.h %[t4],zero,%[t0];" + // yd - yb, xb - xd + "pv.pack.h %[C],%[t0],%[t3];" + // yb - yd, xd - xb + "pv.pack.h %[D],%[t4],%[t1];" + // xa + xc + xb + xd, ya + yb + yc + yd + "vfadd.h %[A],%[E],%[G];" + // xa - xc + yb - yd, ya - yc + xd - xb + "vfadd.h %[D],%[F],%[D];" + // xa + xc - xb - xd, ya + yc - yb - yd + "vfsub.h %[B],%[E],%[G];" + // xa - xc - yb + yd, ya - yc + xb - xd + "vfadd.h %[C],%[F],%[C];" + "vfdotpex.s.h %[t0],%[CoSi1],%[D];" + "vfdotpex.s.h %[t2],%[CoSi2],%[B];" + "vfdotpex.s.h %[t4],%[CoSi3],%[C];" + "vfdotpex.s.h %[t1],%[C1],%[D];" + "vfdotpex.s.h %[t3],%[C1],%[B];" + "vfdotpex.s.h %[t5],%[C3],%[C];" + "fcvt.h.s %[t0],%[t0];" + "fcvt.h.s %[t1],%[t1];" + "fcvt.h.s %[t2],%[t2];" + "fcvt.h.s %[t3],%[t3];" + "fcvt.h.s %[t4],%[t4];" + "fcvt.h.s %[t5],%[t5];" + "pv.pack.h %[E],%[t1],%[t0];" + "pv.pack.h %[F],%[t3],%[t2];" + "pv.pack.h %[G],%[t5],%[t4];" + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), + [E] "=&r"(E), [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), + [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), + [t4] "=&r"(t4), [t5] "=&r"(t5) + : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), + [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) + :); +#if defined(FOLDED) || defined(SCHEDULED) + *((v2h *)&pOut[i0_store * 2U]) = A; + *((v2h *)&pOut[i1_store * 2U]) = E; + *((v2h *)&pOut[i2_store * 2U]) = F; + *((v2h *)&pOut[i3_store * 2U]) = G; +#else + *((v2h *)&pOut[i0 * 2U]) = A; + *((v2h *)&pOut[i1 * 2U]) = E; + *((v2h *)&pOut[i2 * 2U]) = F; + *((v2h *)&pOut[i3 * 2U]) = G; +#endif + +} + +/** + @brief Last butterfly stage. + @param[in] pIn points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pOut points to output buffer of 16b data, Re and Im parts are + interleaved + @param[in] i0 points to the first element to be processed + @return none +*/ +static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, + uint32_t i0) { + __fp16 t0, t1; + uint32_t i1, i2, i3; + v2h A, B, C, D, E, F, G, H; + +#if defined(FOLDED) || defined(SCHEDULED) + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], + pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + N_BANKS; + i2 = i1 + N_BANKS; + i3 = i2 + N_BANKS; +#ifndef SCHEDULED + uint32_t i0_store = i0 * 4; + uint32_t i1_store = i0_store + 1; + uint32_t i2_store = i1_store + 1; + uint32_t i3_store = i2_store + 1; +#endif +#else + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], + pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + 1U; + i2 = i1 + 1U; + i3 = i2 + 1U; +#endif + + /* Read ya (real), xa(imag) input */ + A = *(v2h *)&pIn[i0 * 2U]; + /* Read yb (real), xb(imag) input */ + B = *(v2h *)&pIn[i1 * 2U]; + /* Read yc (real), xc(imag) input */ + C = *(v2h *)&pIn[i2 * 2U]; + /* Read yd (real), xd(imag) input */ + D = *(v2h *)&pIn[i3 * 2U]; + __fp16 t2, t3; + asm volatile( + "vfsub.h %[H],%[B],%[D];" + "vfadd.h %[G],%[B],%[D];" + "vfadd.h %[E],%[A],%[C];" + "vfsub.h %[F],%[A],%[C];" + "pv.extract.h %[t0],%[H],0;" + "pv.extract.h %[t1],%[H],1;" + "fsub.h %[t2], zero, %[t0];" + "fsub.h %[t3], zero, %[t1];" + "pv.pack.h %[A],%[t2],%[t1];" + "pv.pack.h %[B],%[t0],%[t3];" + "vfadd.h %[H],%[E],%[G];" + "vfsub.h %[E],%[E],%[G];" + "vfadd.h %[A],%[F],%[A];" + "vfadd.h %[B],%[F],%[B];" + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "=&r"(E), + [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), [t0] "=&r"(t0), + [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3) + : + :); +#if defined(FOLDED) + *((v2h *)&pOut[i0_store * 2U]) = H; + *((v2h *)&pOut[i1_store * 2U]) = E; + *((v2h *)&pOut[i2_store * 2U]) = A; + *((v2h *)&pOut[i3_store * 2U]) = B; +#else + *((v2h *)&pOut[i0 * 2U]) = H; + *((v2h *)&pOut[i1 * 2U]) = E; + *((v2h *)&pOut[i2 * 2U]) = A; + *((v2h *)&pOut[i3 * 2U]) = B; +#endif + +} diff --git a/software/kernels/baremetal/mempool_cfft_radix4_f16p.h b/software/kernels/baremetal/mempool_cfft_radix4_f16p.h new file mode 100644 index 000000000..d2220d090 --- /dev/null +++ b/software/kernels/baremetal/mempool_cfft_radix4_f16p.h @@ -0,0 +1,526 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "xpulp/builtins_v2.h" +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) + +/** + @brief Folding in local memory function + @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are + interleaved + @param[in] fftLen Length of the complex input vector + @param[in] nPE Number of PE + @return none +*/ + +static inline void fold_radix4(__fp16 *pSrc16, uint32_t fftLen, + uint32_t core_id, uint32_t nPE) { + uint32_t n2, i0, i1, i2, i3; + uint32_t i1_store, i2_store, i3_store; + volatile v2h A, B, C; + n2 = fftLen >> 2U; + for (i0 = core_id * STEP; i0 < MIN(core_id * STEP + STEP, n2); i0++) { + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; + A = *(v2h *)&pSrc16[i1 * 2U]; + B = *(v2h *)&pSrc16[i2 * 2U]; + C = *(v2h *)&pSrc16[i3 * 2U]; + i1_store = i0 + N_BANKS; + i2_store = i1_store + N_BANKS; + i3_store = i2_store + N_BANKS; + *(v2h *)&pSrc16[i1_store * 2U] = A; + *(v2h *)&pSrc16[i2_store * 2U] = B; + *(v2h *)&pSrc16[i3_store * 2U] = C; + } + mempool_log_partial_barrier(2 * WU_STRIDE, WU_STRIDE * core_id, + nPE * WU_STRIDE); +} + +#ifdef FOLDED_TWIDDLES +/** + @brief Full FFT butterfly + @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pDst16 points to output buffer of 16b data, Re and Im parts + are interleaved + @param[in] fftLen Length of the complex input vector + @param[in] pCoef_src Twiddle coefficients vector + @param[in] pCoef_dst Auxiliary twiddle coefficients vector + @param[in] nPE Number of PE + @return pointer to output vector +*/ +__fp16 *mempool_radix4_cfft_q16p_folded(__fp16 *pSrc16, __fp16 *pDst16, + uint32_t fftLen, __fp16 *pCoef_src, + __fp16 *pCoef_dst, uint32_t nPE) +#else +/** + Twiddles are not folded in memory + @brief Full FFT butterfly + @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pDst16 points to output buffer of 16b data, Re and Im parts + are interleaved + @param[in] fftLen Length of the complex input vector + @param[in] pCoef_src Twiddle coefficients vector + @param[in] nPE Number of PE + @return pointer to output vector +*/ +__fp16 *mempool_radix4_cfft_q16p_folded(__fp16 *pSrc16, __fp16 *pDst16, + uint32_t fftLen, __fp16 *pCoef_src, + uint32_t nPE) +#endif +{ + +#ifdef FOLDED_TWIDDLES + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id / WU_STRIDE; + __fp16 t0, t1, t2, t3, t4, t5; + v2h CoSi1, CoSi2, CoSi3; + v2h C1, C2, C3; + uint32_t n1, n2, n2_store, i0, j, k; + uint32_t ic, offset, wing_idx; + __fp16 *pTmp; +#else + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id / WU_STRIDE; + __fp16 t0, t1, t2, t3, t4, t5; + v2h CoSi1, CoSi2, CoSi3; + v2h C1, C2, C3; + uint32_t n1, n2, n2_store, i0, j, k; + uint32_t ic, offset, wing_id, bank_id; + __fp16 *pTmp; + uint32_t twidCoefModifier = 1U; +#endif + + if (fftLen <= N_BANKS) + fold_radix4(pSrc16, fftLen, core_id, nPE); + + /* START OF FIRST STAGE PROCESS */ + n1 = fftLen; + n2 = n1 >> 2U; + n2_store = n2 >> 2U; + for (i0 = core_id * STEP; i0 < MIN(core_id * STEP + STEP, n2); i0++) { + +#ifdef FOLDED_TWIDDLES + CoSi1 = *(v2h *)&pCoef_src[2U * i0]; + CoSi2 = *(v2h *)&pCoef_src[2U * (i0 + 1 * N_BANKS)]; + CoSi3 = *(v2h *)&pCoef_src[2U * (i0 + 2 * N_BANKS)]; + if (i0 % 4 == 0) { + ic = i0 >> 2U; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; + } +#else + CoSi1 = *(v2h *)&pCoef_src[2U * i0]; + CoSi2 = *(v2h *)&pCoef_src[2U * (i0 * 2U)]; + CoSi3 = *(v2h *)&pCoef_src[2U * (i0 * 3U)]; +#endif + asm volatile("pv.extract.h %[t1],%[CoSi1],0;" + "pv.extract.h %[t3],%[CoSi2],0;" + "pv.extract.h %[t5],%[CoSi3],0;" + "pv.extract.h %[t0],%[CoSi1],1;" + "pv.extract.h %[t2],%[CoSi2],1;" + "pv.extract.h %[t4],%[CoSi3],1;" + "fsub.h %[t0],zero,%[t0];" + "fsub.h %[t2],zero,%[t2];" + "fsub.h %[t4],zero,%[t4];" + "pv.pack.h %[C1],%[t1],%[t0];" + "pv.pack.h %[C2],%[t3],%[t2];" + "pv.pack.h %[C3],%[t5],%[t4];" + : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), [t0] "=&r"(t0), + [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), + [t4] "=&r"(t4), [t5] "=&r"(t5) + : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) + :); + radix4_butterfly(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; +#ifdef FOLDED_TWIDDLES + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; +#else + twidCoefModifier <<= 2U; +#endif + mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, nPE * WU_STRIDE); + /* END OF FIRST STAGE PROCESSING */ + + /* START OF MIDDLE STAGE PROCESS */ + for (k = fftLen / 4U; k > 4U; k >>= 2U) { + n1 = n2; + n2 >>= 2U; + n2_store = n2 >> 2U; + +#ifdef FOLDED_TWIDDLES + for (j = core_id * STEP; j < core_id * STEP + STEP; j++) { + CoSi1 = *(v2h *)&pCoef_src[2U * j]; + CoSi2 = *(v2h *)&pCoef_src[2U * (j + 1 * N_BANKS)]; + CoSi3 = *(v2h *)&pCoef_src[2U * (j + 2 * N_BANKS)]; + if (j % 4 == 0) { + wing_idx = j % n2; + offset = (j / n2); + ic = wing_idx >> 2U; + ic += offset * n2; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; + } +#else + bank_id = core_id / n2_store; + wing_id = core_id % n2_store; + offset = bank_id * n2; + for (j = wing_id * 4; j < MIN(wing_id * 4 + 4, n2); j++) { + ic = j * twidCoefModifier; + CoSi1 = *(v2h *)&pCoef_src[2U * ic]; + CoSi2 = *(v2h *)&pCoef_src[2U * (ic * 2U)]; + CoSi3 = *(v2h *)&pCoef_src[2U * (ic * 3U)]; +#endif + asm volatile("pv.extract.h %[t1],%[CoSi1],0;" + "pv.extract.h %[t3],%[CoSi2],0;" + "pv.extract.h %[t5],%[CoSi3],0;" + "pv.extract.h %[t0],%[CoSi1],1;" + "pv.extract.h %[t2],%[CoSi2],1;" + "pv.extract.h %[t4],%[CoSi3],1;" + "fsub.h %[t0],zero,%[t0];" + "fsub.h %[t2],zero,%[t2];" + "fsub.h %[t4],zero,%[t4];" + "pv.pack %[C1],%[t1],%[t0];" + "pv.pack %[C2],%[t3],%[t2];" + "pv.pack %[C3],%[t5],%[t4];" + : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), + [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), + [t3] "=&r"(t3), [t4] "=&r"(t4), [t5] "=&r"(t5) + : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) + :); +#ifdef FOLDED_TWIDDLES + i0 = j; + radix4_butterfly(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, + C2, C3); + } +#else + i0 = offset + j; + radix4_butterfly(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, + C2, C3); + } +#endif + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; +#ifdef FOLDED_TWIDDLES + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; +#else + twidCoefModifier <<= 2U; +#endif + mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, + nPE * WU_STRIDE); + } + /* END OF MIDDLE STAGE PROCESSING */ + + /* START OF LAST STAGE PROCESSING */ + n1 = n2; + n2 >>= 2U; + for (i0 = core_id * STEP; i0 < MIN(core_id * STEP + STEP, fftLen >> 2U); + i0++) { + radix4_butterfly_last(pSrc16, pDst16, i0); + } + mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, nPE * WU_STRIDE); + /* END OF LAST STAGE PROCESSING */ + + return pDst16; +} + +/** + SCHEDULER OF MULTIPLE FOLDED FFTS + Memory: + + 1st row of FFTS + + col_idx1 col_idx2 col_idx3 + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + + 2nd row of FFTS + + col_idx1 col_idx2 col_idx3 + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + + ... + + @brief Scheduler of folded FFTs + @param[in] column index of the current FFT + @param[in] pSrc16 input buffer of 16b data, Re and Im are interleaved + @param[out] pDst16 output buffer of 16b data, Re and Im are interleaved + @param[in] fftLen Length of the complex input vector + @param[in] pCoef_src Twiddle coefficients vector + @param[in] pCoef_dst Twiddle coefficients vector + @param[in] pBitRevTable Bitreversal table + @param[in] bitReverseLen Length of bitreversal table + @param[in] bitReverseFlag Flag for bitreversal + @param[in] nPE Number of PE + @return void +*/ + +void mempool_radix4_cfft_q16p_scheduler(uint32_t col_id, __fp16 *pSrc16, + __fp16 *pDst16, uint32_t fftLen, + __fp16 *pCoef_src, __fp16 *pCoef_dst, + __attribute__((unused)) + uint16_t *pBitRevTable, + __attribute__((unused)) + uint16_t bitReverseLen, + uint8_t bitReverseFlag, uint32_t nPE) { + + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id % (fftLen >> 4U); + + uint32_t n1, n2, i0, ic, j, k; + uint32_t n2_store; + uint32_t offset, wing_idx; + __fp16 *pTmp; + int32_t t0, t1, t2, t3, t4, t5; + v2h CoSi1, CoSi2, CoSi3; + v2h C1, C2, C3; + + /* FIRST STAGE */ + n1 = fftLen; + n2 = n1 >> 2U; + n2_store = n2 >> 2U; + for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, n2); i0++) { + CoSi1 = *(v2h *)&pCoef_src[2U * i0]; + CoSi2 = *(v2h *)&pCoef_src[2U * (i0 + 1 * N_BANKS)]; + CoSi3 = *(v2h *)&pCoef_src[2U * (i0 + 2 * N_BANKS)]; + if (i0 % 4 == 0) { + ic = i0 / 4; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; + } + asm volatile("pv.extract.h %[t1],%[CoSi1],0;" + "pv.extract.h %[t3],%[CoSi2],0;" + "pv.extract.h %[t5],%[CoSi3],0;" + "pv.extract.h %[t0],%[CoSi1],1;" + "pv.extract.h %[t2],%[CoSi2],1;" + "pv.extract.h %[t4],%[CoSi3],1;" + "fsub.h %[t0],zero,%[t0];" + "fsub.h %[t2],zero,%[t2];" + "fsub.h %[t4],zero,%[t4];" + "pv.pack.h %[C1],%[t1],%[t0];" + "pv.pack.h %[C2],%[t3],%[t2];" + "pv.pack.h %[C3],%[t5],%[t4];" + : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), [t0] "=&r"(t0), + [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), + [t4] "=&r"(t4), [t5] "=&r"(t5) + : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) + :); + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8); + __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8); + radix4_butterfly(pIn, pOut, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; + mempool_log_partial_barrier(2, absolute_core_id, nPE); + + /* MIDDLE STAGE */ + for (k = fftLen / 4U; k > 4U; k >>= 2U) { + n1 = n2; + n2 >>= 2U; + n2_store = n2 >> 2U; + + for (j = core_id * 4; j < core_id * 4 + 4; j++) { + CoSi1 = *(v2h *)&pCoef_src[2U * (j)]; + CoSi2 = *(v2h *)&pCoef_src[2U * (j + 1 * N_BANKS)]; + CoSi3 = *(v2h *)&pCoef_src[2U * (j + 2 * N_BANKS)]; + if (j % 4 == 0) { + + wing_idx = j % n2; + offset = (j / n2); + ic = wing_idx >> 2U; + ic += offset * n2; + + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; + ic += N_BANKS; + *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; + } + asm volatile("pv.extract.h %[t1],%[CoSi1],0;" + "pv.extract.h %[t3],%[CoSi2],0;" + "pv.extract.h %[t5],%[CoSi3],0;" + "pv.extract.h %[t0],%[CoSi1],1;" + "pv.extract.h %[t2],%[CoSi2],1;" + "pv.extract.h %[t4],%[CoSi3],1;" + "fsub.h %[t0],zero,%[t0];" + "fsub.h %[t2],zero,%[t2];" + "fsub.h %[t4],zero,%[t4];" + "pv.pack.h %[C1],%[t1],%[t0];" + "pv.pack.h %[C2],%[t3],%[t2];" + "pv.pack.h %[C3],%[t5],%[t4];" + : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), + [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), + [t3] "=&r"(t3), [t4] "=&r"(t4), [t5] "=&r"(t5) + : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) + :); + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8); + __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8); + radix4_butterfly(pIn, pOut, j, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; + mempool_log_partial_barrier(2, absolute_core_id, nPE); + } + + /* LAST STAGE */ + n1 = n2; + n2 >>= 2U; + for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, fftLen >> 2U); i0++) { + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8); + __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8); + radix4_butterfly_last(pIn, pOut, i0); + } + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; + mempool_log_partial_barrier(2, absolute_core_id, nPE); + + mempool_stop_benchmark(); + mempool_start_benchmark(); + + /* BITREVERSAL */ + // Bitreversal stage stores in the sequential addresses + if (bitReverseFlag) { +#ifdef BITREVERSETABLE + uint16_t *ptr1 = (uint16_t *)(pSrc16 + 2 * col_id * (fftLen >> 2U)); + uint16_t *ptr2 = (uint16_t *)(pDst16 + 2 * col_id * (3 * (fftLen >> 2))); + for (j = 2 * core_id; j < bitReverseLen; j += 2 * nPE) { + v2h addr, tmpa, tmpb; + addr = __SRA2(*(v2h *)&pBitRevTable[j], ((v2h){2, 2})); + for (int32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + int32_t a0 = addr[0] / 4 + (addr[0] % 4) * N_BANKS; + int32_t a1 = addr[1] / 4 + (addr[0] % 4) * N_BANKS; + tmpa = *(v2h *)&ptr1[a0 + idx_row * (N_BANKS * 8)]; + tmpb = *(v2h *)&ptr1[a1 + idx_row * (N_BANKS * 8)]; + *((v2h *)&ptr2[addr[0] + idx_row * (N_BANKS * 8)]) = tmpb; + *((v2h *)&ptr2[addr[1] + idx_row * (N_BANKS * 8)]) = tmpa; + } + } +#else + uint16_t *ptr1 = (uint16_t *)(pSrc16 + 2 * col_id * (fftLen >> 2U)); + uint16_t *ptr2 = (uint16_t *)(pDst16 + 2 * col_id * (3 * (fftLen >> 2))); + for (j = core_id * 16; j < MIN(core_id * 16 + 16, fftLen >> 2U); j += 4) { + uint32_t idx0 = j; + uint32_t idx1 = j + 1; + uint32_t idx2 = j + 2; + uint32_t idx3 = j + 3; + uint32_t idx_result0 = 0; + uint32_t idx_result1 = 0; + uint32_t idx_result2 = 0; + uint32_t idx_result3 = 0; + for (k = 0; k < LOG2; k++) { + idx_result0 = (idx_result0 << 1U) | (idx0 & 1U); + idx_result1 = (idx_result1 << 1U) | (idx1 & 1U); + idx_result2 = (idx_result2 << 1U) | (idx2 & 1U); + idx_result3 = (idx_result3 << 1U) | (idx3 & 1U); + idx0 = idx0 >> 1U; + idx1 = idx1 >> 1U; + idx2 = idx2 >> 1U; + idx3 = idx3 >> 1U; + } + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + uint32_t addr_src0 = (idx0 / 4) + (idx0 % 4) * N_BANKS; + uint32_t addr_src1 = (idx1 / 4) + (idx1 % 4) * N_BANKS; + uint32_t addr_src2 = (idx2 / 4) + (idx2 % 4) * N_BANKS; + uint32_t addr_src3 = (idx3 / 4) + (idx3 % 4) * N_BANKS; + uint32_t addr_dst0 = idx_result0; + uint32_t addr_dst1 = idx_result1; + uint32_t addr_dst2 = idx_result2; + uint32_t addr_dst3 = idx_result3; + addr_src0 += idx_row * (N_BANKS * 8); + addr_src1 += idx_row * (N_BANKS * 8); + addr_src2 += idx_row * (N_BANKS * 8); + addr_src3 += idx_row * (N_BANKS * 8); + addr_dst0 += idx_row * (N_BANKS * 8); + addr_dst1 += idx_row * (N_BANKS * 8); + addr_dst2 += idx_row * (N_BANKS * 8); + addr_dst3 += idx_row * (N_BANKS * 8); + *((uint32_t *)&ptr2[addr_dst0]) = (uint32_t)ptr1[addr_src0]; + *((uint32_t *)&ptr2[addr_dst1]) = (uint32_t)ptr1[addr_src1]; + *((uint32_t *)&ptr2[addr_dst2]) = (uint32_t)ptr1[addr_src2]; + *((uint32_t *)&ptr2[addr_dst3]) = (uint32_t)ptr1[addr_src3]; + } + } +#endif + } + mempool_log_partial_barrier(2, absolute_core_id, nPE); +} diff --git a/software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h b/software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h new file mode 100644 index 000000000..32f7a5265 --- /dev/null +++ b/software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h @@ -0,0 +1,23 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +void mempool_bitrev_q16p_xpulpimg(uint16_t *pSrc, uint16_t *pDst, + const uint16_t fftLen, const uint32_t nPE) { + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id / WU_STRIDE; + uint32_t idx_result, idx, i, j; + for (i = core_id; i < fftLen; i += nPE) { + idx_result = 0; + idx = i; + for (j = 0; j < LOG2; j++) { + idx_result = (idx_result << 1U) | (idx & 1U); + idx = idx >> 1U; + } + pDst[2 * idx_result] = pSrc[2 * i]; + pDst[2 * idx_result + 1] = pSrc[2 * i + 1]; + } + mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, nPE * WU_STRIDE); +} diff --git a/software/runtime/data/data_cfft_radix4_f16.h.tpl b/software/runtime/data/data_cfft_radix4_f16.h.tpl new file mode 100644 index 000000000..35a6302d4 --- /dev/null +++ b/software/runtime/data/data_cfft_radix4_f16.h.tpl @@ -0,0 +1,45 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +<% def array_to_str(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LOG2 (${Log2Len}) +#define N_CSAMPLES (${Len}) +#define N_RSAMPLES (2 * N_CSAMPLES) +#define N_TWIDDLES (3 * N_CSAMPLES / 4) +#define N_BANKS (NUM_CORES * BANKING_FACTOR) +#define BITREVINDEXTABLE_FIXED_TABLE_LENGTH (${BitrevLen}) + +__fp16 pSrc[${2 * Len}] = ${array_to_cstr(src)}; + +__fp16 pDst[${2 * Len}] = ${array_to_cstr(dst)}; + +__fp16 pTwi[${2 * Len}] = ${array_to_cstr(twi)}; + +// Bitreversal +uint16_t BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/runtime/data/data_cfft_radix4_f16.py b/software/runtime/data/data_cfft_radix4_f16.py new file mode 100644 index 000000000..0d42b7df7 --- /dev/null +++ b/software/runtime/data/data_cfft_radix4_f16.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 FFT. +# Author: Marco Bertuletti + +import numpy as np +import math as M +import argparse +import pathlib +from mako.template import Template +from sympy.combinatorics import Permutation + + +def compute_bitreversal(N, R): + # Decompose + logR2 = [] + idx = N + while (idx >= R): + logR2.append(int(M.log2(R))) + idx = idx // R + if (idx > 1): + logR2.append(int(M.log2(idx))) + # Bitreversal + indexes = [] + for x in range(N): + result = 0 + for bits in logR2: + mask = (0xffffffff >> (32 - bits)) + result = (result << bits) | (x & mask) + x = x >> bits + indexes.append(result) + + # Create transpositions table + tps = [] + for c in Permutation.from_sequence(indexes).cyclic_form: + for i in range(len(c) - 1): + tps.append([c[i] * 8, c[-1] * 8]) + return tps + + +def gen_data_header_file( + outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), + **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_cfft_radix4_f16.h.tpl", + help='Path to mako template') + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-d", + "--dimension", + type=int, + required=False, + default=4096, + help='FFT dimension' + ) + + args = parser.parse_args() + Len = args.dimension + + src = np.random.rand(Len) + 1.j * np.random.rand(Len) + dst = np.fft.fft(src) + + twi_RI = np.zeros(2 * int(3 * Len / 4)) + for i in range(int(3 * Len / 4)): + twi_RI[2 * i] = np.cos(i * 2 * np.pi / Len).astype(np.float16) + twi_RI[2 * i + 1] = np.sin(i * 2 * np.pi / Len).astype(np.float16) + + Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(Len, 2))) + + src_RI = np.zeros(2 * Len) + dst_RI = np.zeros(2 * Len) + for i in range(Len): + src_RI[2 * i] = (src[i].real).astype(np.float16) + src_RI[2 * i + 1] = (src[i].imag).astype(np.float16) + dst_RI[2 * i] = (dst[i].real).astype(np.float16) + dst_RI[2 * i + 1] = (dst[i].imag).astype(np.float16) + + kwargs = {'name': 'data_cfft_radix4_f16', + 'src': src_RI, + 'dst': dst_RI, + 'twi': twi_RI, + 'bitrev': Bitreversal, + 'Len': Len, + 'Log2Len': int(np.log2(Len)), + 'BitrevLen': len(Bitreversal)} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() From 7abe0ac4ddf2c86c9aa1699e54a0795034f076d1 Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Mon, 4 Sep 2023 16:39:10 +0200 Subject: [PATCH 08/39] [software] Add channel estimation f16 kernel --- software/apps/chest_f16/main.c | 109 +++++++++++++++ .../kernels/baremetal/mempool_chest_f16p.h | 62 +++++++++ .../kernels/baremetal/mempool_chest_f16s.h | 119 ++++++++++++++++ software/runtime/data/data_chest_f16.h.tpl | 30 ++++ software/runtime/data/data_chest_f16.py | 129 ++++++++++++++++++ software/runtime/kernel/chest_q16p.h | 0 6 files changed, 449 insertions(+) create mode 100644 software/apps/chest_f16/main.c create mode 100644 software/kernels/baremetal/mempool_chest_f16p.h create mode 100644 software/kernels/baremetal/mempool_chest_f16s.h create mode 100644 software/runtime/data/data_chest_f16.h.tpl create mode 100644 software/runtime/data/data_chest_f16.py create mode 100644 software/runtime/kernel/chest_q16p.h diff --git a/software/apps/chest_f16/main.c b/software/apps/chest_f16/main.c new file mode 100644 index 000000000..057d56229 --- /dev/null +++ b/software/apps/chest_f16/main.c @@ -0,0 +1,109 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include +#include + +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "xpulp/builtins_v2.h" + +#include "data/data_chest_f16.h" + +#include "kernel/mempool_chest_f16p.h" +#include "kernel/mempool_chest_f16s.h" + +//#define SINGLE +#define PARALLEL + +__fp16 PilotTX_l1[2 * N_TX * N_SAMPLES] + __attribute__((aligned(N_TX * N_SAMPLES), section(".l1"))); +__fp16 PilotRX_l1[2 * N_RX * N_SAMPLES] + __attribute__((aligned(N_TX * N_SAMPLES), section(".l1"))); +__fp16 HEST_l1[2 * N_RX * N_TX * N_SAMPLES] + __attribute__((aligned(N_TX * N_SAMPLES), section(".l1"))); + +void initialize_vector(__fp16 *pSrc_l2, __fp16 *pDst_l1, uint32_t N_el) { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + for (uint32_t i = core_id; i < N_el; i += num_cores) { + pDst_l1[i] = pSrc_l2[i]; + } + mempool_barrier(num_cores); + return; +} + +void zeros(__fp16 *pSrc_l1, uint32_t N_el) { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + for (uint32_t i = core_id; i < N_el; i += num_cores) { + pSrc_l1[i] = (__fp16)0.0f; + } + mempool_barrier(num_cores); + return; +} + +void check_result(__fp16 *pDst, __fp16 *l1_pDst, uint32_t N_samples) { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + if (core_id == 0) { + printf("Done!\n"); + for (uint32_t i = 0; i < 2 * N_samples; i++) { + __fp16 exp = pDst[i]; + __fp16 res = l1_pDst[i]; + __fp16 dif; + float tol = (__fp16)0.05f; + float dif_f32; + asm volatile("fsub.h %[dif], %[res], %[exp];" + "fcvt.h.s %[dif_f32], %[dif];" + : [dif] "+&r"(dif), [dif_f32] "+&r"(dif_f32) + : [res] "r"(res), [exp] "r"(exp) + :); + if ((dif_f32 > tol) || (dif_f32 < (-tol))) { + printf("%d %x %x\n", i, *(int32_t *)&exp, *(int32_t *)&res); + } + } + } + mempool_barrier(num_cores); +} + +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); + + initialize_vector(PilotRX, PilotRX_l1, 2 * (N_RX * N_SAMPLES)); + initialize_vector(PilotTX, PilotTX_l1, 2 * (N_TX * N_SAMPLES)); + +#ifdef SINGLE + if (core_id == 0) { + mempool_start_benchmark(); + mempool_chest_f16s_unrolled4(HEST_l1, PilotRX_l1, PilotTX_l1, N_RX, N_TX, + N_SAMPLES); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + +#ifdef PARALLEL + // uint32_t nPE = N_SAMPLES < num_cores ? N_SAMPLES : num_cores; + // if (core_id < N_SAMPLES) { + mempool_start_benchmark(); + mempool_chest_f16p_unrolled4(HEST_l1, PilotRX_l1, PilotTX_l1, N_RX, N_TX, + N_SAMPLES, core_id, num_cores); + mempool_stop_benchmark(); + //} + mempool_barrier(num_cores); +#endif + + // check_result(HEST, HEST_l1, (N_TX * N_RX * N_SAMPLES)); + + return 0; +} diff --git a/software/kernels/baremetal/mempool_chest_f16p.h b/software/kernels/baremetal/mempool_chest_f16p.h new file mode 100644 index 000000000..835b26237 --- /dev/null +++ b/software/kernels/baremetal/mempool_chest_f16p.h @@ -0,0 +1,62 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +// Includes inner loop +#include "mempool_chest_f16s.h" + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @return none +*/ +void mempool_chest_f16p_unrolled4(__fp16 *pH, __fp16 *pPilotRX, + __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc, uint32_t core_id, + uint32_t nPE) { + uint32_t ab0, ab1, ab2, ab3; + uint32_t ab_n0, ab_n1, ab_n2, ab_n3; + __fp16 *pTX; + __fp16 *pRX; + __fp16 *pOut; + for (uint32_t k = core_id; k < nSc; k += nPE) { + pTX = pPilotTX + k * (2 * nTX); + pRX = pPilotRX + k * (2 * nRX); + pOut = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i += 4) { + ab0 = *(uint32_t *)&pRX[2U * i]; + ab1 = *(uint32_t *)&pRX[2U * (i + 1)]; + ab2 = *(uint32_t *)&pRX[2U * (i + 2)]; + ab3 = *(uint32_t *)&pRX[2U * (i + 3)]; + asm volatile( + "xor %[ab_n0], %[ab0], %[neg_mask];" + "xor %[ab_n1], %[ab1], %[neg_mask];" + "xor %[ab_n2], %[ab2], %[neg_mask];" + "xor %[ab_n3], %[ab3], %[neg_mask];" + "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" + "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" + "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" + "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" + : [ab_n0] "=&r"(ab_n0), [ab_n1] "=&r"(ab_n1), [ab_n2] "=&r"(ab_n2), + [ab_n3] "=&r"(ab_n3) + : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), + [neg_mask] "r"(0x00008000), [mask] "r"(0x00020001) + :); + for (uint32_t j = 0; j < nTX; j += 4) { + chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab0, ab_n0, i, j); + chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab1, ab_n1, i + 1, j); + chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab2, ab_n2, i + 2, j); + chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab3, ab_n3, i + 3, j); + } + } + } + mempool_log_partial_barrier(2, core_id, nPE); + return; +} diff --git a/software/kernels/baremetal/mempool_chest_f16s.h b/software/kernels/baremetal/mempool_chest_f16s.h new file mode 100644 index 000000000..71b2cef05 --- /dev/null +++ b/software/kernels/baremetal/mempool_chest_f16s.h @@ -0,0 +1,119 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once + +/* a[i] = ar[i] + i * ai[j] + + out[i][j] = a[i] / c[j] + out[i][j + 1] = a[i] / c[j + 1h + out[i][j + 2] = a[i] / c[j + 2] + out[i][j + 3] = a[i] / c[j + 3]*/ + +static inline void chest_unrolled4_inner_loop_f16(__fp16 *pPilotTX, __fp16 *pH, + uint32_t nTX, uint32_t ab, + uint32_t ab_n, uint32_t i, + uint32_t j) { + + uint32_t cd0, cd1, cd2, cd3; + float re0 = 0.0f, re1 = 0.0f, re2 = 0.0f, re3 = 0.0f; + float im0 = 0.0f, im1 = 0.0f, im2 = 0.0f, im3 = 0.0f; + float D0 = 0.0f, D1 = 0.0f, D2 = 0.0f, D3 = 0.0f; + cd0 = *(uint32_t *)&pPilotTX[2U * j]; + cd1 = *(uint32_t *)&pPilotTX[2U * (j + 1)]; + cd2 = *(uint32_t *)&pPilotTX[2U * (j + 2)]; + cd3 = *(uint32_t *)&pPilotTX[2U * (j + 3)]; + asm volatile( + // Compute denominator + "vfdotpex.s.h %[D0], %[cd0], %[cd0];" + "vfdotpex.s.h %[D1], %[cd1], %[cd1];" + "vfdotpex.s.h %[D2], %[cd2], %[cd2];" + "vfdotpex.s.h %[D3], %[cd3], %[cd3];" + // Compute numerator + "vfdotpex.s.h %[re0], %[ab], %[cd0];" + "vfdotpex.s.h %[re1], %[ab], %[cd1];" + "vfdotpex.s.h %[re2], %[ab], %[cd2];" + "vfdotpex.s.h %[re3], %[ab], %[cd3];" + "vfdotpex.s.h %[im0], %[ab_n], %[cd0];" + "vfdotpex.s.h %[im1], %[ab_n], %[cd1];" + "vfdotpex.s.h %[im2], %[ab_n], %[cd2];" + "vfdotpex.s.h %[im3], %[ab_n], %[cd3];" + "fdiv.s %[re0], %[re0], %[D0];" + "fdiv.s %[re1], %[re1], %[D1];" + "fdiv.s %[re2], %[re2], %[D2];" + "fdiv.s %[re3], %[re3], %[D3];" + "fdiv.s %[im0], %[im0], %[D0];" + "fdiv.s %[im1], %[im1], %[D1];" + "fdiv.s %[im2], %[im2], %[D2];" + "fdiv.s %[im3], %[im3], %[D3];" + // Pack in 32b word + "vfcpka.h.s %[re0], %[re0], %[im0];" + "vfcpka.h.s %[re1], %[re1], %[im1];" + "vfcpka.h.s %[re2], %[re2], %[im2];" + "vfcpka.h.s %[re3], %[re3], %[im3];" + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), [D3] "+&r"(D3), + [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), [re3] "+&r"(re3), + [im0] "+&r"(im0), [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3), + [ab] "r"(ab), [ab_n] "r"(ab_n) + :); + *((uint32_t *)&pH[2 * (i * nTX + j)]) = *(uint32_t *)&re0; + *((uint32_t *)&pH[2 * (i * nTX + j + 1)]) = *(uint32_t *)&re1; + *((uint32_t *)&pH[2 * (i * nTX + j + 2)]) = *(uint32_t *)&re2; + *((uint32_t *)&pH[2 * (i * nTX + j + 3)]) = *(uint32_t *)&re3; + return; +} + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @return none +*/ +void mempool_chest_f16s_unrolled4(__fp16 *pH, __fp16 *pPilotRX, + __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc) { + + uint32_t ab0, ab1, ab2, ab3; + uint32_t ab_n0, ab_n1, ab_n2, ab_n3; + + for (uint32_t k = 0; k < nSc; k++) { + for (uint32_t i = 0; i < nRX; i++) { + ab0 = *(uint32_t *)&pPilotRX[2U * i]; + ab1 = *(uint32_t *)&pPilotRX[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX[2U * (i + 3)]; + asm volatile( + "xor %[ab_n0], %[ab0], %[neg_mask];" + "xor %[ab_n1], %[ab1], %[neg_mask];" + "xor %[ab_n2], %[ab2], %[neg_mask];" + "xor %[ab_n3], %[ab3], %[neg_mask];" + "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" + "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" + "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" + "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" + : [ab_n0] "+&r"(ab_n0), [ab_n1] "+&r"(ab_n1), [ab_n2] "+&r"(ab_n2), + [ab_n3] "+&r"(ab_n3) + : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), + [neg_mask] "r"(0x00008000), [mask] "r"(0x00020003) + :); + for (uint32_t j = 0; j < nTX; j += 4) { + chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab0, ab_n0, i, j); + chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab1, ab_n1, i + 1, j); + chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab2, ab_n2, i + 2, j); + chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab3, ab_n3, i + 3, j); + } + } + pPilotTX += 2 * nTX; + pPilotRX += 2 * nRX; + pH += 2 * (nTX * nRX); + } + return; +} diff --git a/software/runtime/data/data_chest_f16.h.tpl b/software/runtime/data/data_chest_f16.h.tpl new file mode 100644 index 000000000..99e802efe --- /dev/null +++ b/software/runtime/data/data_chest_f16.h.tpl @@ -0,0 +1,30 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Automatically generated by: +// data/data_chest_q16.py + +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:.5}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${nb_tx}) +#define N_RX (${nb_rx}) +#define N_SAMPLES (${nb_samples}) + +__fp16 PilotRX[${2*nb_rx*nb_samples}] = ${array_to_cstr(pilot_rx)}; + +__fp16 PilotTX[${2*nb_tx*nb_samples}] = ${array_to_cstr(pilot_tx)}; + +__fp16 HEST[${2*nb_rx*nb_tx*nb_samples}] = ${array_to_cstr(Hest)}; diff --git a/software/runtime/data/data_chest_f16.py b/software/runtime/data/data_chest_f16.py new file mode 100644 index 000000000..2f034175d --- /dev/null +++ b/software/runtime/data/data_chest_f16.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the Channel estimation. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib + +from mako.template import Template + +################## +# write_result # +################## + + +def gen_data_header_file( + outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), + **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_chest_f16.h.tpl", + help='Path to mako template') + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-b", + "--num_beams", + type=int, + required=False, + default=4, + help='Number beams' + ) + parser.add_argument( + "-l", + "--num_layers", + type=int, + required=False, + default=4, + help='Number layers' + ) + parser.add_argument( + "-s", + "--num_samples", + type=int, + required=False, + default=32, + help='Number samples' + ) + + args = parser.parse_args() + nb_rx = args.num_beams + nb_tx = args.num_layers + nb_samples = args.num_samples + + H = np.random.randn(nb_rx, nb_tx) + 1j * np.random.randn(nb_rx, nb_tx) + + vector_pilot_tx = [] + vector_pilot_rx = [] + vector_Hest = [] + for k in range(nb_samples): + + # Compute data + pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) + pilot_rx = np.dot(H, pilot_tx) + Hest = pilot_rx[:, np.newaxis] / pilot_tx[np.newaxis, :] + + # Interleaved real and imaginary parts + pilot_tx = np.column_stack((pilot_tx.real, pilot_tx.imag)).astype(np.float16).flatten() + pilot_rx = np.column_stack((pilot_rx.real, pilot_rx.imag)).astype(np.float16).flatten() + Hest = Hest.flatten() + Hest = np.column_stack((Hest.real, Hest.imag)).astype(np.float16).flatten() + + # Output vectors + vector_pilot_tx.append(pilot_tx) + vector_pilot_rx.append(pilot_rx) + vector_Hest.append(Hest) + + vector_pilot_rx = np.concatenate(vector_pilot_rx, axis=0) + vector_pilot_tx = np.concatenate(vector_pilot_tx, axis=0) + vector_Hest = np.concatenate(vector_Hest, axis=0) + print(vector_Hest) + + kwargs = {'name': 'data_chest_f16', + 'pilot_rx': vector_pilot_rx, + 'pilot_tx': vector_pilot_tx, + 'Hest': vector_Hest, + 'nb_tx': nb_tx, + 'nb_rx': nb_rx, + 'nb_samples': nb_samples} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/kernel/chest_q16p.h b/software/runtime/kernel/chest_q16p.h new file mode 100644 index 000000000..e69de29bb From e2dad4f8eacd36461c861af59c417965c37ab53e Mon Sep 17 00:00:00 2001 From: Marco Bertuletti Date: Wed, 13 Sep 2023 10:41:51 +0200 Subject: [PATCH 09/39] [software] Add complex matmul f16 kernel --- software/apps/cmatmul_f16/main.c | 91 +++ software/runtime/data/data_cmatmul_f16.h.tpl | 26 + software/runtime/data/data_cmatmul_f16.py | 115 ++++ software/runtime/kernel/cmatmul_f16.h | 217 ++++++++ software/runtime/kernel/mempool_cmatmul_f16.h | 518 ++++++++++++++++++ 5 files changed, 967 insertions(+) create mode 100644 software/apps/cmatmul_f16/main.c create mode 100644 software/runtime/data/data_cmatmul_f16.h.tpl create mode 100644 software/runtime/data/data_cmatmul_f16.py create mode 100644 software/runtime/kernel/cmatmul_f16.h create mode 100644 software/runtime/kernel/mempool_cmatmul_f16.h diff --git a/software/apps/cmatmul_f16/main.c b/software/apps/cmatmul_f16/main.c new file mode 100644 index 000000000..835914526 --- /dev/null +++ b/software/apps/cmatmul_f16/main.c @@ -0,0 +1,91 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Samuel Riedel, ETH Zurich + +#include +#include + +#include "encoding.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data/data_cmatmul_f16.h" +#include "kernel/cmatmul_f16.h" +#define PARALLEL + + +__fp16 matrix_a[2 * matrix_M * matrix_N] __attribute__((section(".l1"))); +__fp16 matrix_b[2 * matrix_N * matrix_P] __attribute__((section(".l1"))); +__fp16 matrix_c[2 * matrix_M * matrix_P] __attribute__((section(".l1"))); + +void init_matrix(__fp16 *matrix, __fp16 *input, uint32_t N, uint32_t core_id, uint32_t num_cores) { + for (uint32_t i = core_id; i < N; i += num_cores) { + v2h in = *(v2h*)&input[2 * i]; + (*(v2h*)&matrix[2 * i]) = in; + } + return; +} + +int verify_result(__fp16 *__restrict__ Res, __fp16 *__restrict__ Exp, + uint32_t N, uint32_t core_id, + uint32_t num_cores) { + if (core_id == 0) { + for (uint32_t i = 0; i < N; i++) { + __fp16 exp = Exp[i]; + __fp16 res = Res[i]; + __fp16 dif; + float tol = (__fp16)0.05f; + float dif_f32; + asm volatile("fsub.h %[dif], %[res], %[exp];" + "fcvt.h.s %[dif_f32], %[dif];" + : [dif] "+&r"(dif), [dif_f32] "+&r"(dif_f32) + : [res] "r"(res), [exp] "r"(exp) + :); + if ((dif_f32 > tol) || (dif_f32 < (-tol))) { + printf("ERROR(%d): %x - %x\n", i, *(int32_t *)&exp, *(int32_t *)&res); + } + } + } + // Wait at barrier before checking + mempool_barrier(num_cores); + return 0; +} + +int main() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + // Initialize barrier and synchronize + mempool_barrier_init(core_id); + + // Initialize Matrices + init_matrix(matrix_a, A, matrix_M * matrix_N, core_id, num_cores); + init_matrix(matrix_b, B, matrix_N * matrix_P, core_id, num_cores); + // Wait at barrier until everyone is ready + mempool_barrier(num_cores); + +#if defined(SINGLE) + // Execute function to test. + if (core_id == 0) { + mempool_start_benchmark(); + cmatmul_2x4_f16s(matrix_a, matrix_b, matrix_c, matrix_M, matrix_N, + matrix_P); + mempool_stop_benchmark(); + } +#endif + +#if defined(PARALLEL) + // Execute function to test. + mempool_start_benchmark(); + cmatmul_2x4_f16p(matrix_a, matrix_b, matrix_c, matrix_M, matrix_N, + matrix_P, core_id, num_cores); + mempool_barrier(num_cores); + mempool_stop_benchmark(); +#endif + + // Wait at barrier before checking + mempool_barrier(num_cores); + verify_result(matrix_c, C, 2*matrix_M*matrix_P, core_id, num_cores); + return 0; +} diff --git a/software/runtime/data/data_cmatmul_f16.h.tpl b/software/runtime/data/data_cmatmul_f16.h.tpl new file mode 100644 index 000000000..f451de702 --- /dev/null +++ b/software/runtime/data/data_cmatmul_f16.h.tpl @@ -0,0 +1,26 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:.5f}, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define matrix_M (${matrix_M}) +#define matrix_N (${matrix_N}) +#define matrix_P (${matrix_P}) + +__fp16 A[${2 * matrix_M * matrix_N}] = ${array_to_cstr(A)}; + +__fp16 B[${2 * matrix_N * matrix_P}] = ${array_to_cstr(B)}; + +__fp16 C[${2 * matrix_M * matrix_P}] = ${array_to_cstr(C)}; diff --git a/software/runtime/data/data_cmatmul_f16.py b/software/runtime/data/data_cmatmul_f16.py new file mode 100644 index 000000000..c7efad6e5 --- /dev/null +++ b/software/runtime/data/data_cmatmul_f16.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 matmul. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from mako.template import Template + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_cmatmul_f16.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-m", + "--dim_m", + type=int, + required=False, + default=16, + help='First dimension.' + ) + parser.add_argument( + "-n", + "--dim_n", + type=int, + required=False, + default=16, + help='Second dimension.' + ) + parser.add_argument( + "-p", + "--dim_p", + type=int, + required=False, + default=16, + help='Third dimension.' + ) + + args = parser.parse_args() + + matrix_M = args.dim_m + matrix_N = args.dim_n + matrix_P = args.dim_p + + # Create sparse matrix + A = np.random.rand(matrix_M, matrix_N) + 1j * np.random.rand(matrix_M, matrix_N) + B = np.random.rand(matrix_N, matrix_P) + 1j * np.random.rand(matrix_N, matrix_P) + C = np.matmul(A, B) + + A = np.reshape(A, (matrix_M * matrix_N), order='C') + B = np.reshape(B, (matrix_N * matrix_P), order='C') + C = np.reshape(C, (matrix_M * matrix_P), order='C') + + A = np.column_stack((A.real, A.imag)).astype(np.float16).flatten() + B = np.column_stack((B.real, B.imag)).astype(np.float16).flatten() + C = np.column_stack((C.real, C.imag)).astype(np.float16).flatten() + + kwargs = { + 'name': 'data_cmatmul_f16', + 'A': A, + 'B': B, + 'C': C, + 'matrix_M': matrix_M, + 'matrix_N': matrix_N, + 'matrix_P': matrix_P} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/kernel/cmatmul_f16.h b/software/runtime/kernel/cmatmul_f16.h new file mode 100644 index 000000000..c80473679 --- /dev/null +++ b/software/runtime/kernel/cmatmul_f16.h @@ -0,0 +1,217 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +/* This library implements the complex matrix multiplication in multiple + * different ways. The functions all follow the following format: + * + * A is an M x N matrix, B is a N x P matrix, and C is a M x P matrix + * C = AB + */ + +#include "xpulp/builtins_v2.h" + +#define CMATMUL_2x4_LOOP \ + float sum00_real = 0.0f; \ + float sum01_real = 0.0f; \ + float sum02_real = 0.0f; \ + float sum03_real = 0.0f; \ + float sum10_real = 0.0f; \ + float sum11_real = 0.0f; \ + float sum12_real = 0.0f; \ + float sum13_real = 0.0f; \ + float sum00_imag = 0.0f; \ + float sum01_imag = 0.0f; \ + float sum02_imag = 0.0f; \ + float sum03_imag = 0.0f; \ + float sum10_imag = 0.0f; \ + float sum11_imag = 0.0f; \ + float sum12_imag = 0.0f; \ + float sum13_imag = 0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 0))]); \ + v2h a01 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 1))]); \ + v2h a10 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 0))]); \ + v2h a11 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 1))]); \ + v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ + v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ + v2h b02 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 2))]); \ + v2h b03 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 3))]); \ + v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ + v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ + v2h b12 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 2))]); \ + v2h b13 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 3))]); \ + v2h a00s, a01s, a10s, a11s; \ + asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ + : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ + [a11s] "+r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x00020003) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ + : [sum00_imag] "+&r"(sum00_imag), [sum01_imag] "+&r"(sum01_imag), \ + [sum02_imag] "+&r"(sum02_imag), [sum03_imag] "+&r"(sum03_imag), \ + [sum10_imag] "+&r"(sum10_imag), [sum11_imag] "+&r"(sum11_imag), \ + [sum12_imag] "+&r"(sum12_imag), [sum13_imag] "+&r"(sum13_imag) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ + [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ + [b13] "r"(b13) \ + :); \ + asm volatile("xor %[a00s], %[a00], %[mask];" \ + "xor %[a01s], %[a01], %[mask];" \ + "xor %[a10s], %[a10], %[mask];" \ + "xor %[a11s], %[a11], %[mask];" \ + : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ + [a11s] "+r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x80000000) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ + : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ + [sum02_real] "+&r"(sum02_real), [sum03_real] "+&r"(sum03_real), \ + [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real), \ + [sum12_real] "+&r"(sum12_real), [sum13_real] "+&r"(sum13_real) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ + [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ + [b13] "r"(b13) \ + :); \ + } \ + v2h res00, res01, res02, res03; \ + v2h res10, res11, res12, res13; \ + asm volatile( \ + "vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ + "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ + "vfcpka.h.s %[res02], %[sum02_real], %[sum02_imag];" \ + "vfcpka.h.s %[res03], %[sum03_real], %[sum03_imag];" \ + "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ + "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ + "vfcpka.h.s %[res12], %[sum12_real], %[sum12_imag];" \ + "vfcpka.h.s %[res13], %[sum13_real], %[sum13_imag];" \ + : [res00] "+r"(res00), [res01] "+r"(res01), [res02] "+r"(res02), \ + [res03] "+r"(res03), [res10] "+r"(res10), [res11] "+r"(res11), \ + [res12] "+r"(res12), [res13] "+r"(res13) \ + : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ + [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ + [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ + [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag), \ + [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ + [sum02_real] "r"(sum02_real), [sum03_real] "r"(sum03_real), \ + [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real), \ + [sum12_real] "r"(sum12_real), [sum13_real] "r"(sum13_real) \ + :); \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = res02; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = res03; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = res12; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = res13; + +void cmatmul_f16s(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, + __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P) { + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + for (k = 0; k < P; k++) { + for (i = 0; i < M; i++) { + float sum_real = 0.0f; + float sum_imag = 0.0f; + for (j = 0; j < N; j++) { + v2h a = (*(v2h *)&A[2 * (i * N + j)]); + v2h b = (*(v2h *)&B[2 * (j * P + k)]); + v2h as; + asm volatile("pv.shuffle2.h %[as], %[a], %[mask_shuffle];" + "vfdotpex.s.h %[sum_imag], %[as], %[b];" + "xor %[as], %[a], %[mask_sign];" + "vfdotpex.s.h %[sum_real], %[as], %[b];" + : [sum_real] "+&r"(sum_real), [sum_imag] "+&r"(sum_imag), + [as] "+&r"(as) + : [a] "r"(a), [b] "r"(b), [mask_shuffle] "r"(0x00020003), + [mask_sign] "r"(0x80000000) + :); + } + v2h res; + asm volatile("vfcpka.h.s %[res], %[sum_real], %[sum_imag];" + : [res] "+r"(res) + : [sum_real] "r"(sum_real), [sum_imag] "r"(sum_imag) + :); + (*(v2h *)&C[2 * (i * P + k)]) = res; + } + } + return; +} + +void cmatmul_2x4_f16s(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P) { + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + for (k = 0; k < P; k += 4) { + for (i = 0; i < M; i += 2) { + CMATMUL_2x4_LOOP; + } + } + return; +} + +void cmatmul_2x4_f16p(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, + uint32_t numThreads) { + + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + + uint32_t shift_id = core_id % (M / 2); + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = 0; i < shift_id; i += 2) { + CMATMUL_2x4_LOOP; + } + for (i = shift_id; i < M; i += 2) { + CMATMUL_2x4_LOOP; + } + } + return; +} diff --git a/software/runtime/kernel/mempool_cmatmul_f16.h b/software/runtime/kernel/mempool_cmatmul_f16.h new file mode 100644 index 000000000..195af694b --- /dev/null +++ b/software/runtime/kernel/mempool_cmatmul_f16.h @@ -0,0 +1,518 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +/* This library implements the complex matrix multiplication in multiple + * different ways. The functions all follow the following format: + * + * A is an M x N matrix, B is a N x P matrix, and C is a M x P matrix + * C = AB + */ + +#include "xpulp/builtins_v2.h" + +#define CMATMUL_2x2_LOOP \ + float sum00_real = 0.0f; \ + float sum01_real = 0.0f; \ + float sum10_real = 0.0f; \ + float sum11_real = 0.0f; \ + float sum00_imag = 0.0f; \ + float sum01_imag = 0.0f; \ + float sum10_imag = 0.0f; \ + float sum11_imag = 0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 0))]); \ + v2h a01 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 1))]); \ + v2h a10 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 0))]); \ + v2h a11 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 1))]); \ + v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ + v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ + v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ + v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ + v2h a00s, a01s, a10s, a11s; \ + asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ + : [a00s] "=r"(a00s), [a01s] "=r"(a01s), [a10s] "=r"(a10s), \ + [a11s] "=r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x00020003) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ + : [sum00_imag] "=r"(sum00_imag), [sum01_imag] "=r"(sum01_imag), \ + [sum10_imag] "=r"(sum10_imag), [sum11_imag] "=r"(sum11_imag) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ + [b11] "r"(b11) \ + :); \ + asm volatile("xor %[a00s], %[a00], %[mask];" \ + "xor %[a10s], %[a10], %[mask];" \ + "xor %[a01s], %[a01], %[mask];" \ + "xor %[a11s], %[a11], %[mask];" \ + : [a00s] "=r"(a00s), [a01s] "=r"(a01s), [a10s] "=r"(a10s), \ + [a11s] "=r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x80000000) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ + : [sum00_real] "=r"(sum00_real), [sum01_real] "=r"(sum01_real), \ + [sum10_real] "=r"(sum10_real), [sum11_real] "=r"(sum11_real) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ + [b11] "r"(b11) \ + :); \ + } \ + v2h res00, res01; \ + v2h res10, res11; \ + asm volatile("vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ + "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ + "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ + "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ + : [res00] "=r"(res00), [res01] "=r"(res01), \ + [res10] "=r"(res10), [res11] "=r"(res11) \ + : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ + [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ + [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ + [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real) \ + :); \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; + +#define CMATMUL_2x4_LOOP \ + float sum00_real = 0.0f; \ + float sum01_real = 0.0f; \ + float sum02_real = 0.0f; \ + float sum03_real = 0.0f; \ + float sum10_real = 0.0f; \ + float sum11_real = 0.0f; \ + float sum12_real = 0.0f; \ + float sum13_real = 0.0f; \ + float sum00_imag = 0.0f; \ + float sum01_imag = 0.0f; \ + float sum02_imag = 0.0f; \ + float sum03_imag = 0.0f; \ + float sum10_imag = 0.0f; \ + float sum11_imag = 0.0f; \ + float sum12_imag = 0.0f; \ + float sum13_imag = 0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 0))]); \ + v2h a01 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 1))]); \ + v2h a10 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 0))]); \ + v2h a11 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 1))]); \ + v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ + v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ + v2h b02 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 2))]); \ + v2h b03 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 3))]); \ + v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ + v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ + v2h b12 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 2))]); \ + v2h b13 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 3))]); \ + v2h a00s, a01s, a10s, a11s; \ + asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ + : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ + [a11s] "+r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x00020003) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ + : [sum00_imag] "=r"(sum00_imag), [sum01_imag] "=r"(sum01_imag), \ + [sum02_imag] "=r"(sum02_imag), [sum03_imag] "=r"(sum03_imag), \ + [sum10_imag] "=r"(sum10_imag), [sum11_imag] "=r"(sum11_imag), \ + [sum12_imag] "=r"(sum12_imag), [sum13_imag] "=r"(sum13_imag) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ + [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ + [b13] "r"(b13) \ + :); \ + asm volatile("xor %[a00s], %[a00], %[mask];" \ + "xor %[a10s], %[a10], %[mask];" \ + "xor %[a01s], %[a01], %[mask];" \ + "xor %[a11s], %[a11], %[mask];" \ + : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ + [a11s] "+r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x80000000) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ + : [sum00_real] "=r"(sum00_real), [sum01_real] "=r"(sum01_real), \ + [sum02_real] "=r"(sum02_real), [sum03_real] "=r"(sum03_real), \ + [sum10_real] "=r"(sum10_real), [sum11_real] "=r"(sum11_real), \ + [sum12_real] "=r"(sum12_real), [sum13_real] "=r"(sum13_real) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ + [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ + [b13] "r"(b13) \ + :); \ + } \ + v2h res00, res01, res02, res03; \ + v2h res10, res11, res12, res13; \ + asm volatile( \ + "vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ + "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ + "vfcpka.h.s %[res02], %[sum02_real], %[sum02_imag];" \ + "vfcpka.h.s %[res03], %[sum03_real], %[sum03_imag];" \ + "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ + "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ + "vfcpka.h.s %[res12], %[sum12_real], %[sum12_imag];" \ + "vfcpka.h.s %[res13], %[sum13_real], %[sum13_imag];" \ + : [res00] "+r"(res00), [res01] "+r"(res01), [res02] "+r"(res02), \ + [res03] "+r"(res03), [res10] "+r"(res10), [res11] "+r"(res11), \ + [res12] "+r"(res12), [res13] "+r"(res13) \ + : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ + [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ + [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ + [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag), \ + [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ + [sum02_real] "r"(sum02_real), [sum03_real] "r"(sum03_real), \ + [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real), \ + [sum12_real] "r"(sum12_real), [sum13_real] "r"(sum13_real) \ + :); \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = res02; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = res03; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = res12; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = res13; + +#define CMATMUL_2x4_LOOP_FOLDED \ + float sum00_real = 0.0f; \ + float sum01_real = 0.0f; \ + float sum02_real = 0.0f; \ + float sum03_real = 0.0f; \ + float sum10_real = 0.0f; \ + float sum11_real = 0.0f; \ + float sum12_real = 0.0f; \ + float sum13_real = 0.0f; \ + float sum00_imag = 0.0f; \ + float sum01_imag = 0.0f; \ + float sum02_imag = 0.0f; \ + float sum03_imag = 0.0f; \ + float sum10_imag = 0.0f; \ + float sum11_imag = 0.0f; \ + float sum12_imag = 0.0f; \ + float sum13_imag = 0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = \ + (*(v2h *)&A_folded[2 * ((i + 0) * NUM_BANKS + shift * N + (j + 0))]); \ + v2h a01 = \ + (*(v2h *)&A_folded[2 * ((i + 0) * NUM_BANKS + shift * N + (j + 1))]); \ + v2h a10 = \ + (*(v2h *)&A_folded[2 * ((i + 1) * NUM_BANKS + shift * N + (j + 0))]); \ + v2h a11 = \ + (*(v2h *)&A_folded[2 * ((i + 1) * NUM_BANKS + shift * N + (j + 1))]); \ + v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ + v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ + v2h b02 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 2))]); \ + v2h b03 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 3))]); \ + v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ + v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ + v2h b12 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 2))]); \ + v2h b13 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 3))]); \ + v2h a00s, a01s, a10s, a11s; \ + asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ + : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ + [a11s] "+r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x00020003) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ + : [sum00_imag] "=r"(sum00_imag), [sum01_imag] "=r"(sum01_imag), \ + [sum02_imag] "=r"(sum02_imag), [sum03_imag] "=r"(sum03_imag), \ + [sum10_imag] "=r"(sum10_imag), [sum11_imag] "=r"(sum11_imag), \ + [sum12_imag] "=r"(sum12_imag), [sum13_imag] "=r"(sum13_imag) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ + [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ + [b13] "r"(b13) \ + :); \ + asm volatile("xor %[a00s], %[a00], %[mask];" \ + "xor %[a01s], %[a01], %[mask];" \ + "xor %[a10s], %[a10], %[mask];" \ + "xor %[a11s], %[a11], %[mask];" \ + : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ + [a11s] "+r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x80000000) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ + : [sum00_real] "=r"(sum00_real), [sum01_real] "=r"(sum01_real), \ + [sum02_real] "=r"(sum02_real), [sum03_real] "=r"(sum03_real), \ + [sum10_real] "=r"(sum10_real), [sum11_real] "=r"(sum11_real), \ + [sum12_real] "=r"(sum12_real), [sum13_real] "=r"(sum13_real) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ + [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ + [b13] "r"(b13) \ + :); \ + } \ + v2h res00, res01, res02, res03; \ + v2h res10, res11, res12, res13; \ + asm volatile( \ + "vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ + "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ + "vfcpka.h.s %[res02], %[sum02_real], %[sum02_imag];" \ + "vfcpka.h.s %[res03], %[sum03_real], %[sum03_imag];" \ + "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ + "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ + "vfcpka.h.s %[res12], %[sum12_real], %[sum12_imag];" \ + "vfcpka.h.s %[res13], %[sum13_real], %[sum13_imag];" \ + : [res00] "+r"(res00), [res01] "+r"(res01), [res02] "+r"(res02), \ + [res03] "+r"(res03), [res10] "+r"(res10), [res11] "+r"(res11), \ + [res12] "+r"(res12), [res13] "+r"(res13) \ + : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ + [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ + [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ + [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag), \ + [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ + [sum02_real] "r"(sum02_real), [sum03_real] "r"(sum03_real), \ + [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real), \ + [sum12_real] "r"(sum12_real), [sum13_real] "r"(sum13_real) \ + :); \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = res02; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = res03; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = res12; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = res13; + +void cmatmul_f16s(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, + __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P) { + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + for (k = 0; k < P; k++) { + for (i = 0; i < M; i++) { + float sum_real = 0.0f; + float sum_imag = 0.0f; + for (j = 0; j < N; j++) { + v2h a = (*(v2h *)&A[2 * (i * N + j)]); + v2h b = (*(v2h *)&B[2 * (j * P + k)]); + v2h as; + asm volatile("pv.shuffle2.h %[as], %[a], %[mask_shuffle];" + "vfdotpex.s.h %[sum_imag], %[as], %[b];" + "xor %[as], %[a], %[mask_sign];" + "vfdotpex.s.h %[sum_real], %[as], %[b];" + : [sum_real] "+&r"(sum_real), [sum_imag] "+&r"(sum_imag), + [as] "+&r"(as) + : [a] "r"(a), [b] "r"(b), [mask_shuffle] "r"(0x00020003), + [mask_sign] "r"(0x80000000) + :); + } + v2h res; + asm volatile("vfcpka.h.s %[res], %[sum_real], %[sum_imag];" + : [res] "+r"(res) + : [sum_real] "r"(sum_real), [sum_imag] "r"(sum_imag) + :); + (*(v2h *)&C[2 * (i * P + k)]) = res; + } + } + return; +} + +void cmatmul_2x4_f16s(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P) { + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + for (k = 0; k < P; k += 4) { + for (i = 0; i < M; i += 2) { + CMATMUL_2x4_LOOP; + } + } + return; +} + +void cmatmul_2x2_f16p(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, + uint32_t numThreads) { + + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); + for (k = core_id * 2; k < P; k += 2 * numThreads) { + // dump_prova(k); + for (i = shift_id; i < M; i += 2) { + CMATMUL_2x2_LOOP; + } + for (i = 0; i < shift_id; i += 2) { + CMATMUL_2x2_LOOP; + } + } + return; +} + +void cmatmul_2x4_f16p(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, + uint32_t numThreads) { + + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + // uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = 0; i < M; i += 2) { + CMATMUL_2x4_LOOP; + } + } + return; +} + +void cmatmul_2x4_folded_f16p(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, + __fp16 *__restrict__ A_folded, + __fp16 *__restrict__ C, uint32_t M, uint32_t N, + uint32_t P, uint32_t core_id, + uint32_t numThreads) { + + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + uint32_t NUM_BANKS = NUM_CORES * 4; + + // uint32_t core_id_shuffling = core_id / (N / 4); + // uint32_t numThreads_shuffling = numThreads / (N / 4); + // if ((core_id % (N / 4)) == 0) { + // // Loop over the rows with cores from different cluster locations + // for (i = core_id_shuffling; i < M; i += numThreads_shuffling) { + // for (j = 0; j < N; j += 4) { + // // Copy multiple A matrices in memory + // v2h a0 = (*(v2h *)&A[2 * (i * N + j)]); + // v2h a1 = (*(v2h *)&A[2 * (i * N + j + 1)]); + // v2h a2 = (*(v2h *)&A[2 * (i * N + j + 2)]); + // v2h a3 = (*(v2h *)&A[2 * (i * N + j + 3)]); + // for (k = 0; k < NUM_BANKS / N; k++) { + // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j)]) = a0; + // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j + 1)]) = a1; + // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j + 2)]) = a2; + // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j + 3)]) = a3; + // } + // } + // } + // } + + // Copy multiple A matrices in memory + uint32_t num_copy = NUM_BANKS / N; + for (k = core_id * 4; k < N * M; k += 4 * numThreads) { + v2h a0 = (*(v2h *)&A[2 * k]); + v2h a1 = (*(v2h *)&A[2 * (k + 1)]); + v2h a2 = (*(v2h *)&A[2 * (k + 2)]); + v2h a3 = (*(v2h *)&A[2 * (k + 3)]); + i = k / N; // row_index + j = k % N; // col_index + for (uint32_t idx_copy = 0; idx_copy < num_copy; idx_copy++) { + (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + idx_copy * N)]) = a0; + (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + 1 + idx_copy * N)]) = a1; + (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + 2 + idx_copy * N)]) = a2; + (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + 3 + idx_copy * N)]) = a3; + } + } + mempool_barrier(numThreads); + + uint32_t shift = core_id / N; + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = 0; i < M; i += 2) { + CMATMUL_2x4_LOOP_FOLDED; + } + } + return; +} From 8688a2d1028416bea56bf4b9dda8b09aa5671111 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 29 Sep 2023 16:43:27 +0200 Subject: [PATCH 10/39] [software] Add MIMO MMSE SIMD-vectorized code --- .../baremetal/mempool_mimo_mmse_f16s.h | 379 ++++++++++++------ 1 file changed, 248 insertions(+), 131 deletions(-) diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index 3c6113b22..a8d4bf0d5 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -3,19 +3,23 @@ // SPDX-License-Identifier: Apache-2.0 // Author: Marco Bertuletti, ETH Zurich +// Author: Aofeng Aoshen, ETH Zurich #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded, const uint32_t zf); -void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, +/** + @brief Computes the Hermitian matrix G = (H'*H + pS^2I). + @param[in] pH points to input matrix + @param[in] pG points to output matrix + @param[in] pS points to the noise vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @param[in] zf controls if the zero forcing is used + @return none +*/ +void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded, const uint32_t zf) { @@ -85,27 +89,27 @@ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, if (zf == 0) { // Compute diagonal elements if (i == j) { - asm volatile("fadd.h %[as0], %[as0], %[sigma];" + asm volatile("fadd.h %[as0], %[as0], %[pS];" : [as0] "+&r"(as0) - : [sigma] "r"(sigma[2 * i]) + : [pS] "r"(pS[2 * i]) :); bs0 = (__fp16)0.0f; } else if (i == (j + 1U)) { - asm volatile("fadd.h %[as1], %[as1], %[sigma];" + asm volatile("fadd.h %[as1], %[as1], %[pS];" : [as1] "+&r"(as1) - : [sigma] "r"(sigma[2 * i]) + : [pS] "r"(pS[2 * i]) :); bs1 = (__fp16)0.0f; } else if (i == (j + 2U)) { - asm volatile("fadd.h %[as2], %[as2], %[sigma];" + asm volatile("fadd.h %[as2], %[as2], %[pS];" : [as2] "+&r"(as2) - : [sigma] "r"(sigma[2 * i]) + : [pS] "r"(pS[2 * i]) :); bs2 = (__fp16)0.0f; } else if (i == (j + 3U)) { - asm volatile("fadd.h %[as3], %[as3], %[sigma];" + asm volatile("fadd.h %[as3], %[as3], %[pS];" : [as3] "+&r"(as3) - : [sigma] "r"(sigma[2 * i]) + : [pS] "r"(pS[2 * i]) :); bs3 = (__fp16)0.0f; } @@ -138,120 +142,16 @@ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *sigma, return; } -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *sigma, - const uint32_t n_rx, const uint32_t n_tx) { - - uint32_t i, j, k; - v2h ab; - v2h cd0, cd1, cd2, cd3; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - // Inner Loop - for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h - ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); - // inputs from matrix H - cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); - cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); - cd2 = (*(v2h *)&pH[2U * (k * n_tx + j + 2U)]); - cd3 = (*(v2h *)&pH[2U * (k * n_tx + j + 3U)]); - - uint32_t ndc0, ndc1, ndc2, ndc3; - const uint32_t val = 0x3C00BC00; - const uint32_t mask = 0x00010002; - - // dotproducts (ac + bd) + j (ad - bc) - asm volatile( - // a * c + b * d - "vfdotpex.s.h %[as0], %[ab], %[cd0];" - "vfdotpex.s.h %[as1], %[ab], %[cd1];" - "vfdotpex.s.h %[as2], %[ab], %[cd2];" - "vfdotpex.s.h %[as3], %[ab], %[cd3];" - // - "pv.shuffle2.h %[ndc0], %[cd0], %[mask];" - "pv.shuffle2.h %[ndc1], %[cd1], %[mask];" - "pv.shuffle2.h %[ndc2], %[cd2], %[mask];" - "pv.shuffle2.h %[ndc3], %[cd3], %[mask];" - // - "vfmul.h %[ndc0], %[val], %[ndc0];" - "vfmul.h %[ndc1], %[val], %[ndc1];" - "vfmul.h %[ndc2], %[val], %[ndc2];" - "vfmul.h %[ndc3], %[val], %[ndc3];" - // a * d - b * c - "vfdotpex.s.h %[as0], %[ab], %[ndc0];" - "vfdotpex.s.h %[as1], %[ab], %[ndc1];" - "vfdotpex.s.h %[as2], %[ab], %[ndc2];" - "vfdotpex.s.h %[as3], %[ab], %[ndc3];" - : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), - [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), - [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [ndc0] "+r"(ndc0), - [ndc1] "+r"(ndc1), [ndc2] "+r"(ndc2), [ndc3] "+r"(ndc3) - : [ab] "r"(ab), [val] "r"(val), [mask] "r"(mask), [cd0] "r"(cd0), - [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3) - :); - } - // Compute diagonal elements - if (i == j) { - asm volatile("fadd.s %[as0], %[as0], %[sigma];" - : [as0] "+&r"(as0) - : [sigma] "r"(sigma[2 * i]) - :); - bs0 = 0.0f; - } else if (i == (j + 1U)) { - asm volatile("fadd.s %[as1], %[as1], %[sigma];" - : [as1] "+&r"(as1) - : [sigma] "r"(sigma[2 * i]) - :); - bs1 = 0.0f; - } else if (i == (j + 2U)) { - asm volatile("fadd.s %[as2], %[as2], %[sigma];" - : [as2] "+&r"(as2) - : [sigma] "r"(sigma[2 * i]) - :); - bs2 = 0.0f; - } else if (i == (j + 3U)) { - asm volatile("fadd.s %[as3], %[as3], %[sigma];" - : [as3] "+&r"(as3) - : [sigma] "r"(sigma[2 * i]) - :); - bs3 = 0.0f; - } - // Store - v2h res0, res1, res2, res3; - asm volatile( - "vfcpka.h.s %[res0], %[as0], %[bs0];" - "vfcpka.h.s %[res1], %[as1], %[bs1];" - "vfcpka.h.s %[res2], %[as2], %[bs2];" - "vfcpka.h.s %[res3], %[as3], %[bs3];" - : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), - [res3] "=&r"(res3) - : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), - [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) - :); - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; - (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; - (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; - (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; - j += 4; - } while (j < (n_tx >> 2U)); - } - return; -} - +/** + @brief Computes the matrix-vector product y = H' * x. + @param[in] pH points to input matrix + @param[in] pb points to input vector + @param[in] py points to output vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @return none +*/ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { @@ -345,3 +245,220 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, } while (i < n_tx); return; } + +/** VECTORIZED CODE + @brief Computes the Hermitian matrix G = (H'*H + pS^2I). + @param[in] pH points to input matrix + @param[in] pG points to output matrix + @param[in] pS points to the noise vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @param[in] zf controls if the zero forcing is used + @return none +*/ +void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j, k; + v2h ab; + v2h cd0, cd1, cd2, cd3; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + ab = ( *(v2h*)&pH[2U * (k * n_tx + i)] ); + // inputs from matrix H + cd0 = ( *(v2h*)&pH[2U * (k * n_tx + j)] ); + cd1 = ( *(v2h*)&pH[2U * (k * n_tx + j + 1U)] ); + cd2 = ( *(v2h*)&pH[2U * (k * n_tx + j + 2U)] ); + cd3 = ( *(v2h*)&pH[2U * (k * n_tx + j + 3U)] ); + const uint32_t val = 0x80000000; + const uint32_t mask = 0x00020003; + + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + b * d + "vfdotpex.s.h %[as0], %[ab], %[cd0];" + "vfdotpex.s.h %[as1], %[ab], %[cd1];" + "vfdotpex.s.h %[as2], %[ab], %[cd2];" + "vfdotpex.s.h %[as3], %[ab], %[cd3];" + // + "pv.shuffle2.h %[cd0], %[cd0], %[mask];" + "pv.shuffle2.h %[cd1], %[cd1], %[mask];" + "pv.shuffle2.h %[cd2], %[cd2], %[mask];" + "pv.shuffle2.h %[cd3], %[cd3], %[mask];" + // + "xor %[cd0], %[val], %[cd0];" + "xor %[cd1], %[val], %[cd1];" + "xor %[cd2], %[val], %[cd2];" + "xor %[cd3], %[val], %[cd3];" + // a * d - b * c + "vfdotpex.s.h %[bs0], %[ab], %[cd0];" + "vfdotpex.s.h %[bs1], %[ab], %[cd1];" + "vfdotpex.s.h %[bs2], %[ab], %[cd2];" + "vfdotpex.s.h %[bs3], %[ab], %[cd3];" + : [cd0] "+&r" (cd0), [cd1] "+&r" (cd1), [cd2] "+&r" (cd2), [cd3] "+&r" (cd3), + [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) + : [ab] "r" (ab), [val] "r" (val), [mask] "r" (mask) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile ( + "fadd.s %[as0], %[as0], %[pS];" + : [as0] "+&r" (as0) + : [pS] "r" (pS[2 * i]) + :); + bs0 = 0.0f; + } + else if (i == (j + 1U)) { + asm volatile ( + "fadd.s %[as1], %[as1], %[pS];" + : [as1] "+&r" (as1) + : [pS] "r" (pS[2 * i]) + :); + bs1 = 0.0f; + } + else if (i == (j + 2U)) { + asm volatile ( + "fadd.s %[as2], %[as2], %[pS];" + : [as2] "+&r" (as2) + : [pS] "r" (pS[2 * i]) + :); + bs2 = 0.0f; + } + else if (i == (j + 3U)) { + asm volatile ( + "fadd.s %[as3], %[as3], %[pS];" + : [as3] "+&r" (as3) + : [pS] "r" (pS[2 * i]) + :); + bs3 = 0.0f; + } + // Store + v2h res0, res1, res2, res3; + asm volatile( + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r" (res0), [res1] "=&r" (res1), [res2] "=&r" (res2), [res3] "=&r" (res3) + : [as0] "r" (as0), [as1] "r" (as1), [as2] "r" (as2), [as3] "r" (as3), + [bs0] "r" (bs0), [bs1] "r" (bs1), [bs2] "r" (bs2), [bs3] "r" (bs3) + : + ); + + ( *(v2h*)&pG[2 * (i * n_tx + j)] ) = res0; + ( *(v2h*)&pG[2 * (i * n_tx + j + 1U)] ) = res1; + ( *(v2h*)&pG[2 * (i * n_tx + j + 2U)] ) = res2; + ( *(v2h*)&pG[2 * (i * n_tx + j + 3U)] ) = res3; + j += 4; + } while (j < n_tx); + } + return; +} + +/** VECTORIZED CODE + @brief Computes the matrix-vector product y = H' * x. + @param[in] pH points to input matrix + @param[in] px points to input vector + @param[in] py points to output vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @return none +*/ +void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { + + uint32_t i, j; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + v2h ab0, ab1, ab2, ab3; + v2h cd; + uint32_t ndc; + const uint32_t val = 0x80000000; + const uint32_t mask = 0x00020003; + + i = 0; + do { + // Initialize the real part of sums + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + // Initialize the imag part of sums + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + ab0 = *(v2h*)&pH[2U * (j * n_tx + i)]; + ab1 = *(v2h*)&pH[2U * (j * n_tx + i + 1U)]; + ab2 = *(v2h*)&pH[2U * (j * n_tx + i + 2U)]; + ab3 = *(v2h*)&pH[2U * (j * n_tx + i + 3U)]; + + // inputs from b + cd = *(v2h*)&px[2U * j]; + + // dotproducts (ac + bd) + j (ad - bc) + asm volatile ( + // a * c + b * d + "vfdotpex.s.h %[as0], %[ab0], %[cd];" + "vfdotpex.s.h %[as1], %[ab1], %[cd];" + "vfdotpex.s.h %[as2], %[ab2], %[cd];" + "vfdotpex.s.h %[as3], %[ab3], %[cd];" + // + "pv.shuffle2.h %[ndc], %[cd], %[mask];" + // + "xor %[ndc], %[val], %[ndc];" + // a * d - b * c + "vfdotpex.s.h %[bs0], %[ab0], %[ndc];" + "vfdotpex.s.h %[bs1], %[ab1], %[ndc];" + "vfdotpex.s.h %[bs2], %[ab2], %[ndc];" + "vfdotpex.s.h %[bs3], %[ab3], %[ndc];" + : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), + [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3), + [ndc] "+r" (ndc) + : [cd] "r" (cd), [val] "r" (val), [mask] "r" (mask), + [ab0] "r" (ab0), [ab1] "r" (ab1), [ab2] "r" (ab2), [ab3] "r" (ab3) + :); + } + if (!folded) { + v2h res0, res1, res2, res3; + asm volatile( + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r" (res0), [res1] "=&r" (res1), [res2] "=&r" (res2), [res3] "=&r" (res3) + : [as0] "r" (as0), [as1] "r" (as1), [as2] "r" (as2), [as3] "r" (as3), + [bs0] "r" (bs0), [bs1] "r" (bs1), [bs2] "r" (bs2), [bs3] "r" (bs3) + : + ); + // Store + *(v2h *)&py[2U * i] = res0; + *(v2h *)&py[2U * (i + 1U)] = res1; + *(v2h *)&py[2U * (i + 2U)] = res2; + *(v2h *)&py[2U * (i + 3U)] = res3; + i += 4; + } + + } while (i < n_tx); + return; +} From 74ba92a0ceb0e2403a33965473587c2d0db6e0af Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 29 Sep 2023 16:46:33 +0200 Subject: [PATCH 11/39] [software] Add function descriptions --- .../kernels/baremetal/mempool_cholesky_f16s.h | 18 +++- .../kernels/baremetal/mempool_cholesky_f32s.h | 10 +- .../baremetal/mempool_linearsolver_f16s.h | 45 +++++++-- .../baremetal/mempool_linearsolver_f32s.h | 45 +++++++-- .../baremetal/mempool_mimo_mmse_f16s.h | 8 +- .../baremetal/mempool_mimo_mmse_f32p.h | 27 ++++-- .../baremetal/mempool_mimo_mmse_f32s.h | 93 ++++++++++++------- 7 files changed, 182 insertions(+), 64 deletions(-) diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index c47d0f481..b53c6ce3f 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -7,9 +7,13 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); -void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n); - +/** + @brief Cholesky decomposition with Crout algorithm. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { register __fp16 sum; @@ -78,6 +82,14 @@ void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { return; } +/** + @brief Cholesky decomposition with Crout algorithm. + Output data is folded to the core's local memory. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { register __fp16 sum; diff --git a/software/kernels/baremetal/mempool_cholesky_f32s.h b/software/kernels/baremetal/mempool_cholesky_f32s.h index 050f70e96..351602d74 100644 --- a/software/kernels/baremetal/mempool_cholesky_f32s.h +++ b/software/kernels/baremetal/mempool_cholesky_f32s.h @@ -7,9 +7,13 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n); -void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n); - +/** + @brief Cholesky decomposition with Crout algorithm. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { register float sum; diff --git a/software/kernels/baremetal/mempool_linearsolver_f16s.h b/software/kernels/baremetal/mempool_linearsolver_f16s.h index 0b5f3013a..3e79dff7f 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f16s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f16s.h @@ -7,12 +7,14 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n); -void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, - const uint32_t n); -void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, - const uint32_t n); +/** + @brief Single-core solution of lower triangular system + @param[in] pL input triangular matrix + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { @@ -55,6 +57,16 @@ void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { return; } +/** + @brief Single-core solution of upper triangular system + (from transposed lower triangular system) + @param[in] pL input triangular matrix to be transposed + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { @@ -97,6 +109,16 @@ void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, return; } +/** + @brief Single-core solution of lower triangular system + (from transposed lower triangular system) + @param[in] pL input triangular matrix + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { @@ -139,6 +161,17 @@ void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, return; } +/** + @brief Single-core solution of upper triangular system + Output data is folded to the core's local memory. + (from transposed lower triangular system) + @param[in] pL input triangular matrix to be transposed + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { diff --git a/software/kernels/baremetal/mempool_linearsolver_f32s.h b/software/kernels/baremetal/mempool_linearsolver_f32s.h index 221163439..e7f53e712 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f32s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f32s.h @@ -7,12 +7,14 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n); -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n); -void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, - const uint32_t n); -void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, - const uint32_t n); +/** + @brief Single-core solution of lower triangular system + @param[in] pL input triangular matrix + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { @@ -55,6 +57,16 @@ void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { return; } +/** + @brief Single-core solution of upper triangular system + (from transposed lower triangular system) + @param[in] pL input triangular matrix to be transposed + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { uint32_t i, j; @@ -96,6 +108,16 @@ void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { return; } +/** + @brief Single-core solution of lower triangular system + (from transposed lower triangular system) + @param[in] pL input triangular matrix + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, const uint32_t n) { @@ -139,6 +161,17 @@ void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, return; } +/** + @brief Single-core solution of upper triangular system + Output data is folded to the core's local memory. + (from transposed lower triangular system) + @param[in] pL input triangular matrix to be transposed + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, const uint32_t n) { diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index a8d4bf0d5..a661c6158 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -145,14 +145,14 @@ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *pS, /** @brief Computes the matrix-vector product y = H' * x. @param[in] pH points to input matrix - @param[in] pb points to input vector + @param[in] px points to input vector @param[in] py points to output vector @param[in] nrx number of received samples @param[in] ntx number of transmitted samples @param[in] folded controls if output is folded @return none */ -void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, +void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { @@ -187,8 +187,8 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *pb, __fp16 *py, b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; + c = px[2U * j]; + d = px[2U * j + 1U]; asm volatile( // a * c "fmadd.h %[as0], %[a0], %[c], %[as0];" diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32p.h b/software/kernels/baremetal/mempool_mimo_mmse_f32p.h index 3bb29aa18..0dd492d33 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f32p.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32p.h @@ -7,12 +7,17 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded, const uint32_t zf, - const uint32_t core_id, const uint32_t nPE); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ +/** + @brief Computes the Hermitian matrix G = (H'*H + pS^2I). + @param[in] pH points to input matrix + @param[in] pG points to output matrix + @param[in] pS points to the noise vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @param[in] zf controls if the zero forcing is used + @return none +*/ void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded, const uint32_t zf, @@ -138,6 +143,16 @@ void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, return; } +/** + @brief Computes the matrix-vector product y = H' * x. + @param[in] pH points to input matrix + @param[in] pb points to input vector + @param[in] py points to output vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @return none +*/ void mempool_MVP_conjtransp_f32p(float *pH, float *pb, float *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t core_id, const uint32_t nPE) { diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h index 15d995fda..94485387c 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h @@ -7,17 +7,18 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded, const uint32_t zf); -void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded); -void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, - const uint32_t n, const uint32_t max_iter); - -/* Computes the Hermitian matrix G = (H'*H + sigma^2I) */ -void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, +/** + @brief Computes the Hermitian matrix G = (H'*H + pS^2I). + @param[in] pH points to input matrix + @param[in] pG points to output matrix + @param[in] pS points to the noise vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @param[in] zf controls if the zero forcing is used + @return none +*/ +void mempool_hermitian_f32s(float *pH, float *pG, float *pS, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded, const uint32_t zf) { @@ -87,27 +88,27 @@ void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, if (zf == 0) { // Compute diagonal elements if (i == j) { - asm volatile("fadd.s %[as0], %[as0], %[sigma];" + asm volatile("fadd.s %[as0], %[as0], %[pS];" : [as0] "+&r"(as0) - : [sigma] "r"(sigma[i]) + : [pS] "r"(pS[i]) :); bs0 = 0.0f; } else if (i == (j + 1U)) { - asm volatile("fadd.s %[as1], %[as1], %[sigma];" + asm volatile("fadd.s %[as1], %[as1], %[pS];" : [as1] "+&r"(as1) - : [sigma] "r"(sigma[i]) + : [pS] "r"(pS[i]) :); bs1 = 0.0f; } else if (i == (j + 2U)) { - asm volatile("fadd.s %[as2], %[as2], %[sigma];" + asm volatile("fadd.s %[as2], %[as2], %[pS];" : [as2] "+&r"(as2) - : [sigma] "r"(sigma[i]) + : [pS] "r"(pS[i]) :); bs2 = 0.0f; } else if (i == (j + 3U)) { - asm volatile("fadd.s %[as3], %[as3], %[sigma];" + asm volatile("fadd.s %[as3], %[as3], %[pS];" : [as3] "+&r"(as3) - : [sigma] "r"(sigma[i]) + : [pS] "r"(pS[i]) :); bs3 = 0.0f; } @@ -139,7 +140,17 @@ void mempool_hermitian_f32s(float *pH, float *pG, float *sigma, return; } -void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, +/** + @brief Computes the matrix-vector product y = H' * x. + @param[in] pH points to input matrix + @param[in] pb points to input vector + @param[in] py points to output vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @return none +*/ +void mempool_MVP_conjtransp_f32s(float *pH, float *px, float *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { @@ -174,8 +185,8 @@ void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; // inputs from b - c = pb[2U * j]; - d = pb[2U * j + 1U]; + c = px[2U * j]; + d = px[2U * j + 1U]; asm volatile( // a * c "fmadd.s %[as0], %[a0], %[c], %[as0];" @@ -232,8 +243,18 @@ void mempool_MVP_conjtransp_f32s(float *pH, float *pb, float *py, return; } -void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, - const uint32_t n, const uint32_t max_iter) { +/** + @brief Inverts a system using the Jacobi method + @param[in] pA points to input matrix + @param[in] py points to the known vector + @param[in] px points to the unknowns vector + @param[in] n dimension of the system + @param[in] tol tolerance on the result + @param[in] max_iter max number of iterations + @return none +*/ +void mempool_jacobi_f32s(float *pA, float *in, float *px, const uint32_t n, + const float tol, const uint32_t max_iter) { uint32_t i, j, k; float error; float register diff, den; @@ -268,8 +289,8 @@ void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, if (i == j) { a0 = pA[2U * (i * n + j + 1U)]; b0 = pA[2U * (i * n + j + 1U) + 1U]; - c0 = x[2U * (j + 1U)]; - d0 = x[2U * (j + 1U) + 1U]; + c0 = px[2U * (j + 1U)]; + d0 = px[2U * (j + 1U) + 1U]; // (ac - bd) + j * (ad + bc) asm volatile("fnmsub.s %[as0], %[a0], %[c0], %[as0];" "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" @@ -281,8 +302,8 @@ void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, } else if (i == (j + 1U)) { a0 = pA[2U * (i * n + j)]; b0 = pA[2U * (i * n + j) + 1U]; - c0 = x[2U * j]; - d0 = x[2U * j + 1U]; + c0 = px[2U * j]; + d0 = px[2U * j + 1U]; // (ac - bd) + j * (ad + bc) asm volatile("fnmsub.s %[as0], %[a0], %[c0], %[as0];" "fnmsub.s %[bs0], %[b0], %[c0], %[bs0];" @@ -296,10 +317,10 @@ void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, a1 = pA[2U * (i * n + j + 1U)]; b0 = pA[2U * (i * n + j) + 1U]; b1 = pA[2U * (i * n + j + 1U) + 1U]; - c0 = x[2U * j]; - c1 = x[2U * (j + 1U)]; - d0 = x[2U * j + 1U]; - d1 = x[2U * (j + 1U) + 1U]; + c0 = px[2U * j]; + c1 = px[2U * (j + 1U)]; + d0 = px[2U * j + 1U]; + d1 = px[2U * (j + 1U) + 1U]; // (ac - bd) + j * (ad + bc) asm volatile("fnmsub.s %[as0], %[a0], %[c0], %[as0];" "fnmsub.s %[as1], %[a1], %[c1], %[as1];" @@ -332,8 +353,8 @@ void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, : [den] "r"(den) :); // Load the previous result - a0 = x[2U * i]; - b0 = x[2U * i + 1]; + a0 = px[2U * i]; + b0 = px[2U * i + 1]; asm volatile("fsub.s %[a0], %[a0], %[as0];" "fsub.s %[b0], %[b0], %[bs0];" : [a0] "+&r"(a0), [b0] "+&r"(b0) @@ -349,8 +370,8 @@ void mempool_jacobi_f32s(float *pA, float *in, float *x, float tol, :); /* STORE THE RESULT */ - x[2U * i] = as0; - x[2U * i + 1U] = bs0; + px[2U * i] = as0; + px[2U * i + 1U] = bs0; } /* COMPUTE THE ERROR */ From 8f3beb79dd1316efd1b5ead2c1d2dc6926214f0e Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 2 Oct 2023 14:50:37 +0200 Subject: [PATCH 12/39] [software] Update data generation scripts --- .../runtime/data/data_cfft_radix4_f16.h.tpl | 2 +- software/runtime/data/data_cfft_radix4_f16.py | 4 +- software/runtime/data/data_chest_f16.py | 10 +- software/runtime/data/data_cholesky_f16.h.tpl | 9 +- software/runtime/data/data_cholesky_f16.py | 70 ++++++----- software/runtime/data/data_cmatmul_f16.h.tpl | 6 +- software/runtime/data/data_cmatmul_f16.py | 7 +- software/runtime/data/data_mimo_mmse_f16.py | 111 +++++++----------- software/runtime/data/data_mimo_mmse_f32.py | 91 ++++++-------- 9 files changed, 143 insertions(+), 167 deletions(-) diff --git a/software/runtime/data/data_cfft_radix4_f16.h.tpl b/software/runtime/data/data_cfft_radix4_f16.h.tpl index 35a6302d4..73c0cf277 100644 --- a/software/runtime/data/data_cfft_radix4_f16.h.tpl +++ b/software/runtime/data/data_cfft_radix4_f16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '{}f, '.format(a) + out += '(__fp16){:0.5}f, '.format(a) i += 1 if i % 8 == 0: out += '\n' diff --git a/software/runtime/data/data_cfft_radix4_f16.py b/software/runtime/data/data_cfft_radix4_f16.py index 0d42b7df7..3f382fd0a 100644 --- a/software/runtime/data/data_cfft_radix4_f16.py +++ b/software/runtime/data/data_cfft_radix4_f16.py @@ -96,8 +96,8 @@ def main(): src = np.random.rand(Len) + 1.j * np.random.rand(Len) dst = np.fft.fft(src) - twi_RI = np.zeros(2 * int(3 * Len / 4)) - for i in range(int(3 * Len / 4)): + twi_RI = np.zeros(int(2 * 3 * Len / 4), np.float16) + for i in range(0, int(3 * Len / 4)): twi_RI[2 * i] = np.cos(i * 2 * np.pi / Len).astype(np.float16) twi_RI[2 * i + 1] = np.sin(i * 2 * np.pi / Len).astype(np.float16) diff --git a/software/runtime/data/data_chest_f16.py b/software/runtime/data/data_chest_f16.py index 2f034175d..d6874270d 100644 --- a/software/runtime/data/data_chest_f16.py +++ b/software/runtime/data/data_chest_f16.py @@ -31,6 +31,7 @@ def gen_data_header_file( with file.open('w') as f: f.write(template.render(**kwargs)) + def main(): parser = argparse.ArgumentParser(description='Generate data for kernels') @@ -99,10 +100,13 @@ def main(): Hest = pilot_rx[:, np.newaxis] / pilot_tx[np.newaxis, :] # Interleaved real and imaginary parts - pilot_tx = np.column_stack((pilot_tx.real, pilot_tx.imag)).astype(np.float16).flatten() - pilot_rx = np.column_stack((pilot_rx.real, pilot_rx.imag)).astype(np.float16).flatten() + pilot_tx = np.column_stack( + (pilot_tx.real, pilot_tx.imag)).astype(np.float16).flatten() + pilot_rx = np.column_stack( + (pilot_rx.real, pilot_rx.imag)).astype(np.float16).flatten() Hest = Hest.flatten() - Hest = np.column_stack((Hest.real, Hest.imag)).astype(np.float16).flatten() + Hest = np.column_stack((Hest.real, Hest.imag) + ).astype(np.float16).flatten() # Output vectors vector_pilot_tx.append(pilot_tx) diff --git a/software/runtime/data/data_cholesky_f16.h.tpl b/software/runtime/data/data_cholesky_f16.h.tpl index 58368c2dd..f5bd001b3 100644 --- a/software/runtime/data/data_cholesky_f16.h.tpl +++ b/software/runtime/data/data_cholesky_f16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '{}f, '.format(a) + out += '(__fp16){:0.5f}f, '.format(a) i += 1 if i % 8 == 0: out += '\n' @@ -15,8 +15,9 @@ return out %> \ -#define N (${N}) +#define dim_N (${n_matrix}) +#define N_SAMPLES (${n_samples}) -__fp16 In_G[${2 * N * N}] = ${array_to_cstr(G)}; +__fp16 In_G[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; -__fp16 Out_L[${2 * N * N}] = ${array_to_cstr(L)}; +__fp16 Out_L[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; diff --git a/software/runtime/data/data_cholesky_f16.py b/software/runtime/data/data_cholesky_f16.py index c0a44165d..586d71d47 100644 --- a/software/runtime/data/data_cholesky_f16.py +++ b/software/runtime/data/data_cholesky_f16.py @@ -28,6 +28,7 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), ** with file.open('w') as f: f.write(template.render(**kwargs)) + def main(): parser = argparse.ArgumentParser(description='Generate data for kernels') @@ -35,7 +36,7 @@ def main(): "-o", "--outdir", type=pathlib.Path, - default=pathlib.Path( __file__ ).parent.absolute(), + default=pathlib.Path(__file__).parent.absolute(), required=False, help='Select out directory of generated data files' ) @@ -44,7 +45,8 @@ def main(): "--tpl", type=pathlib.Path, required=False, - default=pathlib.Path( __file__ ).parent.absolute() / "data_cholesky_f16.h.tpl", + default=pathlib.Path(__file__).parent.absolute() / + "data_cholesky_f16.h.tpl", help='Path to mako template' ) parser.add_argument( @@ -61,36 +63,46 @@ def main(): default=4, help='Matrix dimension' ) + parser.add_argument( + "-s", + "--num_samples", + type=int, + required=False, + default=256, + help='Number samples' + ) args = parser.parse_args() - N=args.dimension - - # Create hermitian matrix - H = np.random.rand(N, N) + 1.j * np.random.rand(N, N) - # Matrix to be inverted - G = H*(np.asmatrix(H).H) - # Cholesky decomposition - L = np.linalg.cholesky(G) - - G = np.reshape(G, (N*N, -1), order='C') - L = np.reshape(L, (N*N, -1), order='C') - G_RI = np.zeros(2*N*N) - L_RI = np.zeros(2*N*N) - - for i in range(N*N): - G_RI[2*i] = G[i].real - G_RI[2*i+1] = G[i].imag - L_RI[2*i] = L[i].real - L_RI[2*i+1] = L[i].imag - - G_RI = G_RI.astype(np.float16) - L_RI = L_RI.astype(np.float16) - print("Input matrix in (Re, Im) format:\n", G_RI) - print("Output matrix in (Re, Im) format:\n", L_RI) - - - kwargs = {'name': 'data_cholesky_f16', 'G': G_RI, 'L' : L_RI, 'N' : N} + n_matrix = args.dimension + n_samples = args.num_samples + + vector_G = [] + vector_L = [] + for k in range(n_samples): + # Create hermitian matrix + H = np.random.rand(n_matrix, n_matrix) + 1.j * \ + np.random.rand(n_matrix, n_matrix) + # Matrix to be inverted + # H_H = np.asmatrix(H).H + G = np.matmul(H, np.asmatrix(H).H) + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Reshape + G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C') + L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C') + G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.float16).flatten() + # Output vectors + vector_G.append(G) + vector_L.append(L) + + vector_G = np.concatenate(vector_G, axis=0) + vector_L = np.concatenate(vector_L, axis=0) + + kwargs = {'name': 'data_cholesky_f16', 'G': vector_G, + 'L': vector_L, 'n_matrix': n_matrix, 'n_samples': n_samples} gen_data_header_file(args.outdir, args.tpl, **kwargs) + if __name__ == "__main__": main() diff --git a/software/runtime/data/data_cmatmul_f16.h.tpl b/software/runtime/data/data_cmatmul_f16.h.tpl index f451de702..bc67d0f45 100644 --- a/software/runtime/data/data_cmatmul_f16.h.tpl +++ b/software/runtime/data/data_cmatmul_f16.h.tpl @@ -15,9 +15,9 @@ return out %> \ -#define matrix_M (${matrix_M}) -#define matrix_N (${matrix_N}) -#define matrix_P (${matrix_P}) +#define dim_M (${matrix_M}) +#define dim_N (${matrix_N}) +#define dim_P (${matrix_P}) __fp16 A[${2 * matrix_M * matrix_N}] = ${array_to_cstr(A)}; diff --git a/software/runtime/data/data_cmatmul_f16.py b/software/runtime/data/data_cmatmul_f16.py index c7efad6e5..847e12c48 100644 --- a/software/runtime/data/data_cmatmul_f16.py +++ b/software/runtime/data/data_cmatmul_f16.py @@ -87,13 +87,16 @@ def main(): matrix_P = args.dim_p # Create sparse matrix - A = np.random.rand(matrix_M, matrix_N) + 1j * np.random.rand(matrix_M, matrix_N) - B = np.random.rand(matrix_N, matrix_P) + 1j * np.random.rand(matrix_N, matrix_P) + A = np.random.rand(matrix_M, matrix_N) + 1j * \ + np.random.rand(matrix_M, matrix_N) + B = np.random.rand(matrix_N, matrix_P) + 1j * \ + np.random.rand(matrix_N, matrix_P) C = np.matmul(A, B) A = np.reshape(A, (matrix_M * matrix_N), order='C') B = np.reshape(B, (matrix_N * matrix_P), order='C') C = np.reshape(C, (matrix_M * matrix_P), order='C') + print(A) A = np.column_stack((A.real, A.imag)).astype(np.float16).flatten() B = np.column_stack((B.real, B.imag)).astype(np.float16).flatten() diff --git a/software/runtime/data/data_mimo_mmse_f16.py b/software/runtime/data/data_mimo_mmse_f16.py index b70c3365a..3d12986f8 100644 --- a/software/runtime/data/data_mimo_mmse_f16.py +++ b/software/runtime/data/data_mimo_mmse_f16.py @@ -28,11 +28,14 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), ** with file.open('w') as f: f.write(template.render(**kwargs)) + def gen_input_data(N_rx, N_tx): # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float16) + H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * \ + np.random.rand(N_rx, N_tx).astype(np.float16) # Create input vector - b = np.random.rand(N_rx).astype(np.float16) + 1.j * np.random.rand(N_rx).astype(np.float16) + b = np.random.rand(N_rx).astype(np.float16) + 1.j * \ + np.random.rand(N_rx).astype(np.float16) # Generate noise variance sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float16)) @@ -48,52 +51,20 @@ def gen_input_data(N_rx, N_tx): y = solve_triangular(L, s, lower=True) x = solve_triangular(np.asmatrix(L).H, y) - H = np.reshape(H, (N_tx*N_rx, -1), order='C') - G = np.reshape(G, (N_tx*N_tx, -1), order='C') - L = np.reshape(L, (N_tx*N_tx, -1), order='C') - H_RI = np.zeros(2*N_tx*N_rx) - G_RI = np.zeros(2*N_tx*N_tx) - L_RI = np.zeros(2*N_tx*N_tx) - b_RI = np.zeros(2*N_rx) - s_RI = np.zeros(2*N_tx) - x_RI = np.zeros(2*N_tx) - y_RI = np.zeros(2*N_tx) - - for i in range(N_tx*N_rx): - H_RI[2*i] = H[i].real - H_RI[2*i+1] = H[i].imag - for i in range(N_tx*N_tx): - G_RI[2*i] = G[i].real - G_RI[2*i+1] = G[i].imag - L_RI[2*i] = L[i].real - L_RI[2*i+1] = L[i].imag - - for i in range(N_rx): - b_RI[2*i] = b[i].real - b_RI[2*i+1] = b[i].imag - for i in range(N_tx): - s_RI[2*i] = s[i].real - s_RI[2*i+1] = s[i].imag - x_RI[2*i] = x[i].real - x_RI[2*i+1] = x[i].imag - y_RI[2*i] = y[i].real - y_RI[2*i+1] = y[i].imag - - sigma = sigma.astype(np.float16) - H_RI = H_RI.astype(np.float16) - G_RI = G_RI.astype(np.float16) - L_RI = L_RI.astype(np.float16) - b_RI = b_RI.astype(np.float16) - x_RI = x_RI.astype(np.float16) - y_RI = y_RI.astype(np.float16) - s_RI = s_RI.astype(np.float16) - # print("Channel matrix in (Re, Im) format:\n", H_RI) - # print("Hermitian matrix in (Re, Im) format:\n", G_RI) - # print("Cholesky dec. in (Re, Im) format:\n", L_RI) - # print("Input vector in (Re, Im) format:\n", b_RI) - # print("Output vector in (Re, Im) format:\n", x_RI) - - return sigma, H_RI, G_RI, b_RI, x_RI + H = np.reshape(np.asarray(H), (N_tx*N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') + L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') + H = np.column_stack((H.real, H.imag)).astype(np.float16).flatten() + G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.float16).flatten() + + b = np.column_stack((b.real, b.imag)).astype(np.float16).flatten() + s = np.column_stack((s.real, s.imag)).astype(np.float16).flatten() + x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() + y = np.column_stack((y.real, y.imag)).astype(np.float16).flatten() + + return sigma, H, G, b, x + def main(): @@ -102,7 +73,7 @@ def main(): "-o", "--outdir", type=pathlib.Path, - default=pathlib.Path( __file__ ).parent.absolute(), + default=pathlib.Path(__file__).parent.absolute(), required=False, help='Select out directory of generated data files' ) @@ -111,7 +82,8 @@ def main(): "--tpl", type=pathlib.Path, required=False, - default=pathlib.Path( __file__ ).parent.absolute() / "data_mimo_mmse_f16.h.tpl", + default=pathlib.Path(__file__).parent.absolute() / + "data_mimo_mmse_f16.h.tpl", help='Path to mako template' ) parser.add_argument( @@ -146,9 +118,9 @@ def main(): ) args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers - itr=args.iterations + N_tx = args.transmitters + N_rx = args.receivers + itr = args.iterations sigma = np.zeros([itr, N_tx]) H_RI = np.zeros([itr, 2*N_tx*N_rx]) @@ -156,22 +128,27 @@ def main(): b_RI = np.zeros([itr, 2*N_rx]) x_RI = np.zeros([itr, 2*N_tx]) for k in range(itr): - sigma[k,:], H_RI[k,:], G_RI[k,:], b_RI[k,:], x_RI[k,:] = gen_input_data(N_rx, N_tx) + sigma[k, :], H_RI[k, :], G_RI[k, :], b_RI[k, + :], x_RI[k, :] = gen_input_data(N_rx, N_tx) + + sigma = np.reshape(sigma, (N_tx*itr)).astype(np.float16) + H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)).astype(np.float16) + G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)).astype(np.float16) + b_RI = np.reshape(b_RI, (2*N_rx*itr)).astype(np.float16) + x_RI = np.reshape(x_RI, (2*N_tx*itr)).astype(np.float16) + + kwargs = {'name': 'data_mimo_mmse_f16', + 'H': H_RI, + 'G': G_RI, + 'sigma': sigma, + 'b': b_RI, + 'x': x_RI, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': itr} - sigma = np.reshape(sigma, (N_tx*itr)) - H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)) - G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)) - b_RI = np.reshape(b_RI, (2*N_rx*itr)) - x_RI = np.reshape(x_RI, (2*N_tx*itr)) - - sigma = sigma.astype(np.float16) - H_RI = H_RI.astype(np.float16) - G_RI = G_RI.astype(np.float16) - b_RI = b_RI.astype(np.float16) - x_RI = x_RI.astype(np.float16) - - kwargs = {'name': 'data_mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) + if __name__ == "__main__": main() diff --git a/software/runtime/data/data_mimo_mmse_f32.py b/software/runtime/data/data_mimo_mmse_f32.py index 9b4b795c1..0d98ec45a 100644 --- a/software/runtime/data/data_mimo_mmse_f32.py +++ b/software/runtime/data/data_mimo_mmse_f32.py @@ -32,9 +32,11 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), ** def gen_input_data(N_rx, N_tx): # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * np.random.rand(N_rx, N_tx).astype(np.float32) + H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * \ + np.random.rand(N_rx, N_tx).astype(np.float32) # Create input vector - b = np.random.rand(N_rx).astype(np.float32) + 1.j * np.random.rand(N_rx).astype(np.float32) + b = np.random.rand(N_rx).astype(np.float32) + 1.j * \ + np.random.rand(N_rx).astype(np.float32) # Generate noise variance sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float32)) @@ -42,7 +44,6 @@ def gen_input_data(N_rx, N_tx): H_h = np.asmatrix(H).H G = H_h * H - print(sigma) G = G + np.diag(sigma) # Cholesky decomposition L = np.linalg.cholesky(G) @@ -51,52 +52,19 @@ def gen_input_data(N_rx, N_tx): y = solve_triangular(L, s, lower=True) x = solve_triangular(np.asmatrix(L).H, y) - H = np.reshape(H, (N_tx*N_rx, -1), order='C') - G = np.reshape(G, (N_tx*N_tx, -1), order='C') - L = np.reshape(L, (N_tx*N_tx, -1), order='C') - H_RI = np.zeros(2*N_tx*N_rx) - G_RI = np.zeros(2*N_tx*N_tx) - L_RI = np.zeros(2*N_tx*N_tx) - b_RI = np.zeros(2*N_rx) - s_RI = np.zeros(2*N_tx) - x_RI = np.zeros(2*N_tx) - y_RI = np.zeros(2*N_tx) - - for i in range(N_tx*N_rx): - H_RI[2*i] = H[i].real - H_RI[2*i+1] = H[i].imag - for i in range(N_tx*N_tx): - G_RI[2*i] = G[i].real - G_RI[2*i+1] = G[i].imag - L_RI[2*i] = L[i].real - L_RI[2*i+1] = L[i].imag - - for i in range(N_rx): - b_RI[2*i] = b[i].real - b_RI[2*i+1] = b[i].imag - for i in range(N_tx): - s_RI[2*i] = s[i].real - s_RI[2*i+1] = s[i].imag - x_RI[2*i] = x[i].real - x_RI[2*i+1] = x[i].imag - y_RI[2*i] = y[i].real - y_RI[2*i+1] = y[i].imag - - sigma = sigma.astype(np.float32) - H_RI = H_RI.astype(np.float32) - G_RI = G_RI.astype(np.float32) - L_RI = L_RI.astype(np.float32) - b_RI = b_RI.astype(np.float32) - x_RI = x_RI.astype(np.float32) - y_RI = y_RI.astype(np.float32) - s_RI = s_RI.astype(np.float32) - # print("Channel matrix in (Re, Im) format:\n", H_RI) - # print("Hermitian matrix in (Re, Im) format:\n", G_RI) - # print("Cholesky dec. in (Re, Im) format:\n", L_RI) - # print("Input vector in (Re, Im) format:\n", b_RI) - # print("Output vector in (Re, Im) format:\n", x_RI) - - return sigma, H_RI, G_RI, b_RI, x_RI + H = np.reshape(np.asarray(H), (N_tx*N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') + L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') + H = np.column_stack((H.real, H.imag)).astype(np.float32).flatten() + G = np.column_stack((G.real, G.imag)).astype(np.float32).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.float32).flatten() + + b = np.column_stack((b.real, b.imag)).astype(np.float32).flatten() + s = np.column_stack((s.real, s.imag)).astype(np.float32).flatten() + x = np.column_stack((x.real, x.imag)).astype(np.float32).flatten() + y = np.column_stack((y.real, y.imag)).astype(np.float32).flatten() + + return sigma, H, G, b, x def main(): @@ -106,7 +74,7 @@ def main(): "-o", "--outdir", type=pathlib.Path, - default=pathlib.Path( __file__ ).parent.absolute(), + default=pathlib.Path(__file__).parent.absolute(), required=False, help='Select out directory of generated data files' ) @@ -115,7 +83,8 @@ def main(): "--tpl", type=pathlib.Path, required=False, - default=pathlib.Path( __file__ ).parent.absolute() / "data_mimo_mmse_f32.h.tpl", + default=pathlib.Path(__file__).parent.absolute() / + "data_mimo_mmse_f32.h.tpl", help='Path to mako template' ) parser.add_argument( @@ -150,9 +119,9 @@ def main(): ) args = parser.parse_args() - N_tx=args.transmitters - N_rx=args.receivers - itr=args.iterations + N_tx = args.transmitters + N_rx = args.receivers + itr = args.iterations sigma = np.zeros([itr, N_tx]) H_RI = np.zeros([itr, 2*N_tx*N_rx]) @@ -160,7 +129,8 @@ def main(): b_RI = np.zeros([itr, 2*N_rx]) x_RI = np.zeros([itr, 2*N_tx]) for k in range(itr): - sigma[k,:], H_RI[k,:], G_RI[k,:], b_RI[k,:], x_RI[k,:] = gen_input_data(N_rx, N_tx) + sigma[k, :], H_RI[k, :], G_RI[k, :], b_RI[k, + :], x_RI[k, :] = gen_input_data(N_rx, N_tx) sigma = np.reshape(sigma, (N_tx*itr)) H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)) @@ -168,9 +138,18 @@ def main(): b_RI = np.reshape(b_RI, (2*N_rx*itr)) x_RI = np.reshape(x_RI, (2*N_tx*itr)) + kwargs = {'name': 'data_mimo_mmse_f32', + 'H': H_RI, + 'G': G_RI, + 'sigma': sigma, + 'b': b_RI, + 'x': x_RI, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': itr} - kwargs = {'name': 'data_mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, 'b' : b_RI, 'x' : x_RI, 'N_tx' : N_tx, 'N_rx' : N_rx, 'N_itr' : itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) + if __name__ == "__main__": main() From bab47cc5577e1a47bb36336dbcfda74e90fee2d3 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 12 Dec 2023 16:20:13 +0100 Subject: [PATCH 13/39] [software] Transfer data using DMA --- software/apps/cfft_radix4_f16/main.c | 180 ++++--- software/apps/chest_f16/main.c | 91 ++-- software/apps/cholesky_f16/main.c | 85 ++-- software/apps/cmatmul_f16/main.c | 98 ++-- software/apps/mimo_mmse_f16/main.c | 450 +++++++++++------- software/apps/mimo_mmse_f32/main.c | 375 ++++----------- .../runtime/data/data_cfft_radix4_f16.h.tpl | 10 +- software/runtime/data/data_cfft_radix4_f16.py | 25 +- software/runtime/data/data_chest_f16.h.tpl | 6 +- software/runtime/data/data_cholesky_f16.h.tpl | 4 +- .../runtime/data/data_mimo_mmse_f16.h.tpl | 12 +- software/runtime/data/data_mimo_mmse_f16.py | 29 +- .../runtime/data/data_mimo_mmse_f32.h.tpl | 10 +- software/runtime/data/data_mimo_mmse_f32.py | 22 +- 14 files changed, 615 insertions(+), 782 deletions(-) diff --git a/software/apps/cfft_radix4_f16/main.c b/software/apps/cfft_radix4_f16/main.c index 8174c52cd..be9c4bd41 100644 --- a/software/apps/cfft_radix4_f16/main.c +++ b/software/apps/cfft_radix4_f16/main.c @@ -10,132 +10,136 @@ #include /* Mempool runtime libraries */ +#include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" #include "xpulp/builtins_v2.h" -#define SCHEDULED +/* CFFT data libraries */ +#include "data/data_cfft_radix4_f16.h" + +/* + CHOOSE ONE + - SINGLE: Single core FFT + - PARALLEL: Parallel FFT not "memory-aware" + - FOLDED: Parallel FFT with "memory-aware" load/store scheme + - SCHEDULED: Scheduling of multiple parallel FFTs with "memory-aware" + load/store scheme + - N_FFTs_COL: Independent FFTs scheduled on one row (default 1) + - N_FFTs_ROW: Independent FFTs scheduled on columns (default 1) + (OPTIONALLY ENABLE) + - FOLDED_TWIDDLES: Also the twiddles have "memory-aware" load/stores + - BITREVERSETABLE: The bitreversal indeces are loaded from a table + - ASM: Use asm_volatile statements +*/ + +#define FOLDED #define FOLDED_TWIDDLES #define BITREVERSETABLE +#define ASM -#define WU_STRIDE (1) -#define STEP (4 * WU_STRIDE) -#ifndef N_FFTs_ROW -#define N_FFTs_ROW 1 -#endif -#ifndef N_FFTs_COL -#define N_FFTs_COL 4 +#if !(defined(N_FFT_ROW) && defined(N_FFTs_COL)) +#define N_FFTs_ROW 2 +#define N_FFTs_COL 2 #endif -#include "data/data_cfft_radix4_f16.h" -#include "kernel/mempool_cfft_radix4_butterfly_f16.h" -#include "kernel/mempool_cfft_radix4_f16p.h" -#include "kernel/mempool_cfft_radix4_q16_bitreversal.h" +#include "kernel/mempool_radix4_cfft_butterfly_f16.h" +#include "kernel/mempool_radix4_cfft_f16p.h" +#include "kernel/mempool_radix4_cfft_q16_bitreversal.h" __fp16 l1_pSrc[N_FFTs_ROW * 8 * N_BANKS] - __attribute__((aligned(N_FFTs_ROW * 8 * N_BANKS), section(".l1"))); + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); __fp16 l1_pDst[N_FFTs_ROW * 8 * N_BANKS] - __attribute__((aligned(N_FFTs_ROW * 8 * N_BANKS), section(".l1"))); -__fp16 l1_pCoef_src[8 * N_BANKS] - __attribute__((aligned(8 * N_BANKS), section(".l1"))); -__fp16 l1_pCoef_dst[8 * N_BANKS] - __attribute__((aligned(8 * N_BANKS), section(".l1"))); -uint16_t l1_pRevT16[BITREVINDEXTABLE_FIXED_TABLE_LENGTH] - __attribute__((aligned(N_BANKS), section(".l1"))); + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +__fp16 l1_twiddleCoef_f16_src[8 * N_BANKS] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +__fp16 l1_twiddleCoef_f16_dst[8 * N_BANKS] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +uint16_t l1_BitRevIndexTable[BITREVINDEXTABLE_LENGTH] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); /////////////////////////////////////////////////////////////////////////////////////////////////// -/* INITIALIZATION FUNCTIONS*/ - -void initialize_l1() { +/* MAIN */ +int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); - // Initialize the inputs and results from the data.h file - for (uint32_t j = 0; j < N_FFTs_ROW; j++) { - for (uint32_t i = core_id; i < (8 * N_BANKS); i += num_cores) { - if (i < N_RSAMPLES * N_FFTs_COL) { - l1_pSrc[j * (8 * N_BANKS) + i] = (__fp16)pSrc[i % N_RSAMPLES]; - } else { - l1_pSrc[j * (8 * N_BANKS) + i] = (__fp16)0.0f; - } - l1_pDst[j * (8 * N_BANKS) + i] = (__fp16)0.0f; + /////////////////////////////////////////////////////////////////////////////////////////////////// + /* INITIALIZATION */ + if (core_id == 0) { + // Each FFT is folded over 4 memory rows + // Each memory row is 2 * N_BANKS samples + for (uint32_t j = 0; j < N_FFTs_ROW; j++) { + dma_memcpy_blocking(l1_pSrc + j * (8 * N_BANKS), l2_pSrc, (N_RSAMPLES * N_FFTs_COL) * sizeof(int32_t)); } + dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); + dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); } - // Initialize the Bitreversal table - for (uint32_t i = core_id; i < BITREVINDEXTABLE_FIXED_TABLE_LENGTH; - i += num_cores) { - *(v2h *)&l1_pRevT16[2U * i] = *(v2h *)&BitRevIndexTable[2U * i]; - } - mempool_barrier(num_cores); - -// Initialize the Twiddles + // Initialize the Twiddles folded #ifdef FOLDED_TWIDDLES - for (uint32_t i = core_id; i < 8 * N_BANKS; i += num_cores) { - l1_pCoef_src[i] = (__fp16)0.0f; - l1_pCoef_dst[i] = (__fp16)0.0f; - } - mempool_barrier(num_cores); for (uint32_t j = 0; j < N_FFTs_COL; j++) { uint32_t N_WORDS_COL = (N_CSAMPLES / 4); for (uint32_t i = core_id; i < N_WORDS_COL; i += num_cores) { - *(v2h *)&l1_pCoef_src[2U * (i + j * (N_CSAMPLES / 4))] = - *(v2h *)&pTwi[2U * i]; - *(v2h *)&l1_pCoef_src[2U * (i + j * (N_CSAMPLES / 4) + 1 * N_BANKS)] = - *(v2h *)&pTwi[2U * (i * 2U)]; - *(v2h *)&l1_pCoef_src[2U * (i + j * (N_CSAMPLES / 4) + 2 * N_BANKS)] = - *(v2h *)&pTwi[2U * (i * 3U)]; + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4))] = *(v2h *)&l2_twiddleCoef_f16[2U * i]; + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + 1 * N_BANKS)] = *(v2h *)&l2_twiddleCoef_f16[2U * (i * 2U)]; + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + 2 * N_BANKS)] = *(v2h *)&l2_twiddleCoef_f16[2U * (i * 3U)]; } } -#else - for (uint32_t i = core_id; i < 6 * (N_CSAMPLES / 4); i += num_cores) { - l1_pCoef_src[i] = pTwi[i]; - } #endif mempool_barrier(num_cores); -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// -/* MAIN */ -int main() { - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - uint32_t cores_fft = N_CSAMPLES / 16; // Each core gets 4 elements - mempool_barrier_init(core_id); - - initialize_l1(); if (core_id == 0) { printf("On the run...\n"); } mempool_barrier(num_cores); - /////////////////////////////////////////////////////////////////////////////////////////////////// - /* MULTI-CORE FOLDED */ +/////////////////////////////////////////////////////////////////////////////////////////////////// +/* MULTI-CORE FOLDED */ #ifdef FOLDED - if (core_id < cores_fft) { + __fp16 *pRes; + if (core_id < (N_CSAMPLES / 16)) { mempool_start_benchmark(); #ifdef FOLDED_TWIDDLES - mempool_radix4_cfft_q16p_folded(l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src, - l1_pCoef_dst, cores_fft); + mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, l1_twiddleCoef_f16_src, l1_twiddleCoef_f16_dst, (N_CSAMPLES / 16)); #else - mempool_radix4_cfft_q16p_folded(l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src, - cores_fft); + mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, l1_twiddleCoef_f16_src, (N_CSAMPLES / 16)); #endif - mempool_bitrev_q16p_xpulpimg((uint16_t *)l1_pDst, (uint16_t *)l1_pSrc, - N_CSAMPLES, cores_fft); + pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; + mempool_bitrevtable_q16p_xpulpimg((uint16_t *)pRes, BITREVINDEXTABLE_LENGTH, l1_BitRevIndexTable, (N_CSAMPLES / 16)); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/* MULTI-CORE SCHEDULED */ +#ifdef SCHEDULED + __fp16 *pRes; + if (core_id < N_FFTs_COL * (N_CSAMPLES / 16)) { + mempool_start_benchmark(); + uint32_t col_fftLen = N_CSAMPLES / 4; + uint32_t col_id = core_id / (N_CSAMPLES / 16); + // Distribute FFTs over columns + if (col_id < N_FFTs_COL) { + mempool_radix4_cfft_f16p_scheduler(l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src + 2 * col_id * col_fftLen, l1_pCoef_dst + 2 * col_id * col_fftLen, l1_pRevT16, BITREVINDEXTABLE_FIXED_TABLE_LENGTH, 1, (N_CSAMPLES / 16)); + } + pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; + mempool_log_partial_barrier(2, core_id, N_FFTs_COL * (N_CSAMPLES / 16)); mempool_stop_benchmark(); } mempool_barrier(num_cores); +#endif /////////////////////////////////////////////////////////////////////////////////////////////////// /* CHECK */ if (core_id == 0) { printf("Done!\n"); for (uint32_t i = 0; i < 2 * N_CSAMPLES; i++) { - __fp16 exp = pDst[i]; - __fp16 res = l1_pDst[i]; + __fp16 exp = l2_pRes[i]; + __fp16 res = pRes[i]; __fp16 dif; float tol = (__fp16)0.05f; float dif_f32; @@ -150,28 +154,6 @@ int main() { } } mempool_barrier(num_cores); -#endif - - /////////////////////////////////////////////////////////////////////////////////////////////////// - /* MULTI-CORE SCHEDULED */ -#ifdef SCHEDULED - if (core_id < N_FFTs_COL * cores_fft) { - mempool_start_benchmark(); - uint32_t col_fftLen = N_CSAMPLES / 4; - uint32_t col_id = core_id / cores_fft; - // Distribute FFTs over columns - if (col_id < N_FFTs_COL) { - mempool_radix4_cfft_q16p_scheduler( - col_id, l1_pSrc, l1_pDst, N_CSAMPLES, - l1_pCoef_src + 2 * col_id * col_fftLen, - l1_pCoef_dst + 2 * col_id * col_fftLen, l1_pRevT16, - BITREVINDEXTABLE_FIXED_TABLE_LENGTH, 0, cores_fft); - } - mempool_log_partial_barrier(2, core_id, N_FFTs_COL * cores_fft); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); -#endif return 0; } diff --git a/software/apps/chest_f16/main.c b/software/apps/chest_f16/main.c index 057d56229..7f8b991b6 100644 --- a/software/apps/chest_f16/main.c +++ b/software/apps/chest_f16/main.c @@ -8,6 +8,7 @@ #include #include +#include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" @@ -15,77 +16,43 @@ #include "xpulp/builtins_v2.h" #include "data/data_chest_f16.h" - +#include "kernel/mempool_checks.h" #include "kernel/mempool_chest_f16p.h" #include "kernel/mempool_chest_f16s.h" //#define SINGLE #define PARALLEL -__fp16 PilotTX_l1[2 * N_TX * N_SAMPLES] - __attribute__((aligned(N_TX * N_SAMPLES), section(".l1"))); -__fp16 PilotRX_l1[2 * N_RX * N_SAMPLES] - __attribute__((aligned(N_TX * N_SAMPLES), section(".l1"))); -__fp16 HEST_l1[2 * N_RX * N_TX * N_SAMPLES] - __attribute__((aligned(N_TX * N_SAMPLES), section(".l1"))); +__fp16 l1_PilotTX[2 * N_TX * N_SAMPLES] + __attribute__((aligned(NUM_CORES * BANKING_FACTOR * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 l1_PilotRX[2 * N_RX * N_SAMPLES] + __attribute__((aligned(NUM_CORES * BANKING_FACTOR * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 l1_HEST[2 * N_RX * N_TX * N_SAMPLES] + __attribute__((aligned(NUM_CORES * BANKING_FACTOR * sizeof(int32_t)), + section(".l1_prio"))); -void initialize_vector(__fp16 *pSrc_l2, __fp16 *pDst_l1, uint32_t N_el) { - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - for (uint32_t i = core_id; i < N_el; i += num_cores) { - pDst_l1[i] = pSrc_l2[i]; - } - mempool_barrier(num_cores); - return; -} +int main() { -void zeros(__fp16 *pSrc_l1, uint32_t N_el) { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); - for (uint32_t i = core_id; i < N_el; i += num_cores) { - pSrc_l1[i] = (__fp16)0.0f; - } - mempool_barrier(num_cores); - return; -} + mempool_barrier_init(core_id); -void check_result(__fp16 *pDst, __fp16 *l1_pDst, uint32_t N_samples) { - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); + /* Initialize matrices */ if (core_id == 0) { - printf("Done!\n"); - for (uint32_t i = 0; i < 2 * N_samples; i++) { - __fp16 exp = pDst[i]; - __fp16 res = l1_pDst[i]; - __fp16 dif; - float tol = (__fp16)0.05f; - float dif_f32; - asm volatile("fsub.h %[dif], %[res], %[exp];" - "fcvt.h.s %[dif_f32], %[dif];" - : [dif] "+&r"(dif), [dif_f32] "+&r"(dif_f32) - : [res] "r"(res), [exp] "r"(exp) - :); - if ((dif_f32 > tol) || (dif_f32 < (-tol))) { - printf("%d %x %x\n", i, *(int32_t *)&exp, *(int32_t *)&res); - } - } + dma_memcpy_blocking(l1_PilotRX, l2_PilotRX, + (N_RX * N_SAMPLES) * sizeof(int32_t)); + dma_memcpy_blocking(l1_PilotTX, l2_PilotTX, + (N_TX * N_SAMPLES) * sizeof(int32_t)); } + // Wait at barrier until everyone is ready mempool_barrier(num_cores); -} - -int main() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); - - initialize_vector(PilotRX, PilotRX_l1, 2 * (N_RX * N_SAMPLES)); - initialize_vector(PilotTX, PilotTX_l1, 2 * (N_TX * N_SAMPLES)); #ifdef SINGLE if (core_id == 0) { mempool_start_benchmark(); - mempool_chest_f16s_unrolled4(HEST_l1, PilotRX_l1, PilotTX_l1, N_RX, N_TX, + mempool_chest_f16s_unrolled4(l1_HEST, l1_PilotRX, l1_PilotTX, N_RX, N_TX, N_SAMPLES); mempool_stop_benchmark(); } @@ -93,17 +60,17 @@ int main() { #endif #ifdef PARALLEL - // uint32_t nPE = N_SAMPLES < num_cores ? N_SAMPLES : num_cores; - // if (core_id < N_SAMPLES) { - mempool_start_benchmark(); - mempool_chest_f16p_unrolled4(HEST_l1, PilotRX_l1, PilotTX_l1, N_RX, N_TX, - N_SAMPLES, core_id, num_cores); - mempool_stop_benchmark(); - //} + uint32_t nPE = N_SAMPLES < num_cores ? N_SAMPLES : num_cores; + if (core_id < N_SAMPLES) { + mempool_start_benchmark(); + mempool_chest_f16p_unrolled4(l1_HEST, l1_PilotRX, l1_PilotTX, N_RX, N_TX, + N_SAMPLES, core_id, nPE); + mempool_stop_benchmark(); + } mempool_barrier(num_cores); #endif - // check_result(HEST, HEST_l1, (N_TX * N_RX * N_SAMPLES)); - + mempool_check_f16(l1_HEST, l2_HEST, 2 * N_RX * N_TX, 0.01f, 0); + mempool_barrier(num_cores); return 0; } diff --git a/software/apps/cholesky_f16/main.c b/software/apps/cholesky_f16/main.c index 78e47750b..cdf17bf3e 100644 --- a/software/apps/cholesky_f16/main.c +++ b/software/apps/cholesky_f16/main.c @@ -4,78 +4,61 @@ // Author: Marco Bertuletti, ETH Zurich +#include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" +#include "xpulp/builtins_v2.h" #include "data/data_cholesky_f16.h" +#include "kernel/mempool_checks.h" #include "kernel/mempool_cholesky_f16s.h" -__fp16 in_matrix[2 * N * N] __attribute__((section(".l1"))); -__fp16 out_matrix[2 * N * N] __attribute__((section(".l1"))); +#define SINGLE -void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, - uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i += num_cores) { - matrix[i] = data[i]; - } - mempool_barrier(num_cores); - return; -} - -void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, - uint32_t num_cores) { - uint32_t i = 0; - __fp16 zero = (__fp16)(0x0000); - for (i = core_id; i < 2 * dim; i += num_cores) { - matrix[i] = zero; - } - mempool_barrier(num_cores); - return; -} - -void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, - uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - __fp16 error; - __fp16 exp = pExp[i]; - __fp16 res = pRes[i]; - asm volatile("fsub.h %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - :); - if (*(int32_t *)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t *)&error, - *(int32_t *)&exp, *(int32_t *)&res); - } - } - } -} +__fp16 l1_GIn[2 * dim_N * dim_N * N_SAMPLES] + __attribute__((section(".l1_prio"))); +__fp16 l1_LOut[2 * dim_N * dim_N * N_SAMPLES] + __attribute__((section(".l1_prio"))); -// Driver program -void single_core() { +int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); mempool_barrier_init(core_id); // Initialize barrier and synchronize + /* Initialize matrices */ - initialize(in_matrix, In_G, N * N, core_id, num_cores); - initialize_zeros(out_matrix, N * N, core_id, num_cores); + if (core_id == 0) { + dma_memcpy_blocking(l1_GIn, l2_GIn, + dim_N * dim_N * N_SAMPLES * sizeof(int32_t)); + dma_memcpy_blocking(l1_LOut, l2_LOut, + dim_N * dim_N * N_SAMPLES * sizeof(int32_t)); + } + // Wait at barrier until everyone is ready + mempool_barrier(num_cores); + +#ifdef SINGLE /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); - mempool_cholesky_f16s(in_matrix, out_matrix, N); + mempool_cholesky_f16s(l1_GIn, l1_LOut, dim_N); mempool_stop_benchmark(); } mempool_barrier(num_cores); - verify_result(out_matrix, Out_L, N * N, core_id); +#endif + +#ifdef PARALLEL + for (uint32_t i = core_id; i < N_SAMPLES; i += num_cores) { + mempool_start_benchmark(); + __fp16 *ptr_in_matrix = l1_GIn + i * 2 * dim_N * dim_N; + __fp16 *ptr_out_matrix = l1_LOut + i * 2 * dim_N * dim_N; + mempool_cholesky_f16s(ptr_in_matrix, ptr_out_matrix, dim_N); + } mempool_barrier(num_cores); - return; -} + mempool_stop_benchmark(); +#endif -int main() { - single_core(); + mempool_check_f16(l1_LOut, l2_LOut, 2 * dim_N * dim_N, 0.01f, 0); + mempool_barrier(num_cores); return 0; } diff --git a/software/apps/cmatmul_f16/main.c b/software/apps/cmatmul_f16/main.c index 835914526..1d999a0d8 100644 --- a/software/apps/cmatmul_f16/main.c +++ b/software/apps/cmatmul_f16/main.c @@ -7,51 +7,28 @@ #include #include +#include "dma.h" #include "encoding.h" #include "runtime.h" #include "synchronization.h" #include "data/data_cmatmul_f16.h" -#include "kernel/cmatmul_f16.h" -#define PARALLEL +#include "kernel/mempool_checks.h" +#include "kernel/mempool_cmatmul_f16.h" +#define PARALLEL_2x2 - -__fp16 matrix_a[2 * matrix_M * matrix_N] __attribute__((section(".l1"))); -__fp16 matrix_b[2 * matrix_N * matrix_P] __attribute__((section(".l1"))); -__fp16 matrix_c[2 * matrix_M * matrix_P] __attribute__((section(".l1"))); - -void init_matrix(__fp16 *matrix, __fp16 *input, uint32_t N, uint32_t core_id, uint32_t num_cores) { - for (uint32_t i = core_id; i < N; i += num_cores) { - v2h in = *(v2h*)&input[2 * i]; - (*(v2h*)&matrix[2 * i]) = in; - } - return; -} - -int verify_result(__fp16 *__restrict__ Res, __fp16 *__restrict__ Exp, - uint32_t N, uint32_t core_id, - uint32_t num_cores) { - if (core_id == 0) { - for (uint32_t i = 0; i < N; i++) { - __fp16 exp = Exp[i]; - __fp16 res = Res[i]; - __fp16 dif; - float tol = (__fp16)0.05f; - float dif_f32; - asm volatile("fsub.h %[dif], %[res], %[exp];" - "fcvt.h.s %[dif_f32], %[dif];" - : [dif] "+&r"(dif), [dif_f32] "+&r"(dif_f32) - : [res] "r"(res), [exp] "r"(exp) - :); - if ((dif_f32 > tol) || (dif_f32 < (-tol))) { - printf("ERROR(%d): %x - %x\n", i, *(int32_t *)&exp, *(int32_t *)&res); - } - } - } - // Wait at barrier before checking - mempool_barrier(num_cores); - return 0; -} +__fp16 matrix_a[2 * dim_M * dim_N] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 matrix_b[2 * dim_N * dim_P] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 matrix_c[2 * dim_M * dim_P] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 matrix_a_folded[2 * dim_M * (4 * NUM_CORES)] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); int main() { uint32_t core_id = mempool_get_core_id(); @@ -60,8 +37,10 @@ int main() { mempool_barrier_init(core_id); // Initialize Matrices - init_matrix(matrix_a, A, matrix_M * matrix_N, core_id, num_cores); - init_matrix(matrix_b, B, matrix_N * matrix_P, core_id, num_cores); + if (core_id == 0) { + dma_memcpy_blocking(matrix_a, A, dim_M * dim_N * sizeof(int32_t)); + dma_memcpy_blocking(matrix_b, B, dim_N * dim_P * sizeof(int32_t)); + } // Wait at barrier until everyone is ready mempool_barrier(num_cores); @@ -69,23 +48,42 @@ int main() { // Execute function to test. if (core_id == 0) { mempool_start_benchmark(); - cmatmul_2x4_f16s(matrix_a, matrix_b, matrix_c, matrix_M, matrix_N, - matrix_P); + cmatmul_2x4_f16s(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P); mempool_stop_benchmark(); } + mempool_barrier(num_cores); #endif -#if defined(PARALLEL) +#if defined(PARALLEL_2x2) // Execute function to test. - mempool_start_benchmark(); - cmatmul_2x4_f16p(matrix_a, matrix_b, matrix_c, matrix_M, matrix_N, - matrix_P, core_id, num_cores); + uint32_t nPE = core_id < (dim_P / 2) ? num_cores : (dim_P / 2); + if (core_id < nPE) { + mempool_start_benchmark(); + cmatmul_2x2_f16p(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, core_id, + nPE); + mempool_log_partial_barrier(2, core_id, nPE); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + +#if defined(PARALLEL_2x4) + // Execute function to test. + uint32_t nPE = core_id < (dim_P / 4) ? num_cores : (dim_P / 4); + if (core_id < nPE) { + mempool_start_benchmark(); + cmatmul_2x4_f16p(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, core_id, + nPE); + mempool_log_partial_barrier(2, core_id, nPE); + mempool_stop_benchmark(); + } mempool_barrier(num_cores); - mempool_stop_benchmark(); #endif - // Wait at barrier before checking +#if defined(TEST) + mempool_check_f32(matrix_c, C, 2 * dim_M * dim_P, 0.01f, 0); mempool_barrier(num_cores); - verify_result(matrix_c, C, 2*matrix_M*matrix_P, core_id, num_cores); +#endif + return 0; } diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/mimo_mmse_f16/main.c index 195cc8303..a7f579754 100644 --- a/software/apps/mimo_mmse_f16/main.c +++ b/software/apps/mimo_mmse_f16/main.c @@ -4,233 +4,323 @@ // Author: Marco Bertuletti, ETH Zurich +#include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" +#include "xpulp/builtins_v2.h" -typedef signed short v2s __attribute__((vector_size(4))); -typedef __fp16 v2f16 __attribute__((vector_size(4))); -typedef union { - float f32; - v2f16 vec; -} v2h; - +#include "data/data_mimo_mmse_f16.h" +#include "kernel/mempool_checks.h" #include "kernel/mempool_cholesky_f16s.h" #include "kernel/mempool_linearsolver_f16s.h" #include "kernel/mempool_mimo_mmse_f16s.h" -/* DATA */ -#include "data/data_mimo_mmse_f16.h" - -//#define SINGLE -#define PARALLEL -//#define FOLDED - -#ifdef SINGLE -__fp16 ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -__fp16 in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -__fp16 sigma[2 * N_TX] __attribute__((section(".l1"))); -__fp16 b[2 * N_RX] __attribute__((section(".l1"))); - -__fp16 s[2 * N_TX] __attribute__((section(".l1"))); -__fp16 x[2 * N_TX] __attribute__((section(".l1"))); -__fp16 y[2 * N_TX] __attribute__((section(".l1"))); -#endif - -#ifdef PARALLEL -__fp16 in_matrix[2 * N_TX * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 out_matrix[2 * N_TX * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 s[2 * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 x[2 * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -__fp16 y[2 * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); - -__fp16 ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -__fp16 b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -__fp16 sigma[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); -#endif +#define DOUBLE_BUFFERING -void initialize(__fp16 *matrix, __fp16 *data, uint32_t dim, uint32_t core_id, - uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i += num_cores) { - matrix[i] = data[i]; - } - mempool_barrier(num_cores); - return; -} +#ifndef DOUBLE_BUFFERING -void initialize_zeros(__fp16 *matrix, uint32_t dim, uint32_t core_id, - uint32_t num_cores) { - uint32_t i = 0; - __fp16 zero = (__fp16)(0x0000); - for (i = core_id; i < 2 * dim; i += num_cores) { - matrix[i] = zero; - } - mempool_barrier(num_cores); - return; -} +#define SINGLE +//#define PARALLEL +//#define FOLDED -void verify_result(__fp16 *pRes, __fp16 *pExp, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - __fp16 error; - __fp16 exp = pExp[i]; - __fp16 res = pRes[i]; - asm volatile("fsub.h %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - :); - if (*(int32_t *)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t *)&error, - *(int32_t *)&exp, *(int32_t *)&res); - } - } - } -} +__fp16 l1_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 l1_G[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 l1_L[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); -void write_result(__fp16 *pRes, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - - __fp16 in = pRes[i]; - // uint32_t out = "0xFFFF0000" || *(uint32_t*)∈ - float cvt_out; - asm volatile("fcvt.h.s %[cvt_out], %[in];" - : [cvt_out] "=&r"(cvt_out) - : [in] "r"(in) - :); - } - } -} +__fp16 l1_Sigma[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_y[2 * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 y2[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 y3[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 l1_x[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); // Driver program -void single_core_mimo_mmse() { +int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// + mempool_barrier_init(core_id); // Initialize barrier and synchronize /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX * N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX * N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX * N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(sigma, In_sigma, N_TX, core_id, num_cores); - initialize(b, In_b, N_RX, core_id, num_cores); - /* Initialize results */ - initialize_zeros(s, N_TX, core_id, num_cores); - initialize_zeros(y, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores); + if (core_id == 0) { + dma_memcpy_blocking(l1_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + } + mempool_barrier(num_cores); /* Benchmark */ +#ifdef SINGLE if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f16s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f16s(ch_matrix, b, s, N_RX, N_TX, 0); - mempool_cholesky_f16s(in_matrix, out_matrix, N_TX); - mempool_Ltrisol_f16s(out_matrix, s, y, N_TX); - mempool_Lttrisol_f16s(out_matrix, y, x, N_TX); + mempool_hermitian_f16s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f16s(l1_H, l1_y, y2, N_RX, N_TX, 0); + mempool_cholesky_f16s(l1_G, l1_L, N_TX); + mempool_Ltrisol_f16s(l1_L, y2, y3, N_TX); + mempool_Lttrisol_f16s(l1_L, y3, l1_x, N_TX); mempool_stop_benchmark(); } mempool_barrier(num_cores); +#endif - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} +#ifdef PARALLEL + // Each iteration is assigned to a processor + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { -// Driver program -void parallel_mimo_mmse_cholesky() { + __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); + __fp16 *Ptry = l1_y + itr * (2 * N_RX); + __fp16 *PtrSigma = l1_Sigma + itr * (2 * N_TX); - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// + __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); + __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + __fp16 *Ptry3 = y3 + itr * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX * N_TX * N_ITR, core_id, num_cores); - initialize_zeros(in_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); - initialize_zeros(out_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); - /* Initialize vectors */ - uint32_t i = 0; - for (i = core_id; i < (N_TX * N_ITR); i += num_cores) { - sigma[2 * i] = In_sigma[i]; + mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f16s(PtrG, PtrL, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); } - mempool_barrier(num_cores); - initialize(b, In_b, N_RX * N_ITR, core_id, num_cores); - /* Initialize results */ - initialize_zeros(s, N_TX * N_ITR, core_id, num_cores); - initialize_zeros(y, N_TX * N_ITR, core_id, num_cores); - initialize_zeros(x, N_TX * N_ITR, core_id, num_cores); + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); +#endif - /* Benchmark */ #ifdef FOLDED + // Each iteration is assigned to a processor mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - __fp16 *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - __fp16 *sigma_ptr = sigma + itr * (2 * N_TX); - __fp16 *b_ptr = b + itr * (2 * N_RX); - - __fp16 *in_matrix_ptr = in_matrix + (itr % num_cores) * (2 * N_TX) + - (itr / num_cores) * (N_TX * N_BANKS); - __fp16 *out_matrix_ptr = out_matrix + (itr % num_cores) * (2 * N_TX) + - (itr / num_cores) * (N_TX * N_BANKS); - __fp16 *s_ptr = - s + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); - __fp16 *y_ptr = - y + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); - __fp16 *x_ptr = x + itr * (2 * N_TX); - - mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, - 1, 0); - mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); - mempool_cholesky_folded_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); - mempool_Ltrisol_folded_f16s(out_matrix_ptr, s_ptr, y_ptr, N_TX); - mempool_Lttrisol_folded_f16s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); + __fp16 *Ptry = l1_y + itr * (2 * N_RX); + __fp16 *PtrSigma = l1_Sigma + itr * (2 * N_TX); + + __fp16 *PtrG = l1_G + (itr % num_cores) * (2 * N_TX) + + (itr / num_cores) * (N_TX * N_BANKS); + __fp16 *PtrL = l1_L + (itr % num_cores) * (2 * N_TX) + + (itr / num_cores) * (N_TX * N_BANKS); + __fp16 *Ptry2 = + y2 + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); + __fp16 *Ptry3 = + y3 + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); + + mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f16s(PtrG, PtrL, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); +#endif + + // Check the result + mempool_check_f16(l1_x, l2_x, 2 * N_TX, 0.1f, 0); + mempool_barrier(num_cores); + return 0; +} + #else - // Each iteration is assigned to a processor + +#define N_ROUNDS (3) +#define DMA_TRANSFER2 + +// Inputs-Outputs even double-buffering rounds +__fp16 l1A_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 l1A_Sigma[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1A_y[2 * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 l1A_x[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +// Inputs-Outputs odd double-buffering rounds +__fp16 l1B_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 l1B_Sigma[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1B_y[2 * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 l1B_x[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +// Auxiliary vectors +__fp16 G[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 L[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +__fp16 y2[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 y3[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +// Driver program +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize + +#ifdef DMA_TRANSFER1 + + // INITIALIZATION mempool_start_benchmark(); - for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + if (core_id == 0) { + dma_memcpy_blocking(l1A_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1A_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1A_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + } + mempool_barrier(num_cores); + + for (uint32_t round = 0; round < N_ROUNDS; round++) { + + // TRANSFER + mempool_start_benchmark(); + // Transfer vectors + __fp16 *trsf_H = ((round % 2) == 1) ? l1A_H : l1B_H; + __fp16 *trsf_y = ((round % 2) == 1) ? l1A_y : l1B_y; + __fp16 *trsf_Sigma = ((round % 2) == 1) ? l1A_Sigma : l1B_Sigma; + // Compute vectors + __fp16 *cmpt_H = ((round % 2) == 0) ? l1A_H : l1B_H; + __fp16 *cmpt_y = ((round % 2) == 0) ? l1A_y : l1B_y; + __fp16 *cmpt_Sigma = ((round % 2) == 0) ? l1A_Sigma : l1B_Sigma; + // On even rounds we transfer the result of odd computation and viceversa + __fp16 *trsf_x = ((round % 2) == 0) ? l1A_x : l1B_x; + __fp16 *cmpt_x = ((round % 2) == 1) ? l1A_x : l1B_x; + if (core_id == 0) { + dma_memcpy_nonblocking(trsf_H, l2_H, + N_TX * N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_Sigma, l2_Sigma, + N_TX * N_ITR * sizeof(int32_t)); + if (round >= 1) // Transfer to L2 is done only if not the + dma_memcpy_nonblocking(l2_x, trsf_x, (N_TX * N_ITR) * sizeof(int32_t)); + } - __fp16 *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - __fp16 *sigma_ptr = sigma + itr * (2 * N_TX); - __fp16 *b_ptr = b + itr * (2 * N_RX); - - __fp16 *in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - __fp16 *out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); - __fp16 *s_ptr = s + itr * (2 * N_TX); - __fp16 *y_ptr = y + itr * (2 * N_TX); - __fp16 *x_ptr = x + itr * (2 * N_TX); - - mempool_hermitian_f16s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, - 0, 0); - mempool_MVP_conjtransp_f16s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); - mempool_cholesky_f16s(in_matrix_ptr, out_matrix_ptr, N_TX); - mempool_Ltrisol_f16s(out_matrix_ptr, s_ptr, y_ptr, N_TX); - mempool_Lttrisol_f16s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + // COMPUTATION + // Each iteration is assigned to a processor + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp16 *PtrH = cmpt_H + itr * (2 * N_TX * N_RX); + __fp16 *Ptry = cmpt_y + itr * (2 * N_RX); + __fp16 *Ptrx = cmpt_x + itr * (2 * N_TX); + __fp16 *PtrSigma = cmpt_Sigma + itr * (2 * N_TX); + __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); + __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + __fp16 *Ptry3 = y3 + itr * (2 * N_TX); + mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_log_barrier(2, core_id); + + // WAIT FOR DMA + mempool_start_benchmark(); + dma_wait(); // Wait for the end of the dma transfer + mempool_stop_benchmark(); } - mempool_log_barrier(2, core_id); - mempool_stop_benchmark(); + #endif + +#ifdef DMA_TRANSFER2 + + // INITIALIZATION + mempool_start_benchmark(); + if (core_id == 0) { + dma_memcpy_blocking(l1A_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1A_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1A_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + } mempool_barrier(num_cores); - return; -} -int main() { -#ifdef SINGLE - single_core_mimo_mmse(); -#elif defined(PARALLEL) - parallel_mimo_mmse_cholesky(); + for (uint32_t round = 0; round < N_ROUNDS; round++) { + + // Transfer vectors + __fp16 *trsf_H = ((round % 2) == 1) ? l1A_H : l1B_H; + __fp16 *trsf_y = ((round % 2) == 1) ? l1A_y : l1B_y; + __fp16 *trsf_Sigma = ((round % 2) == 1) ? l1A_Sigma : l1B_Sigma; + // Compute vectors + __fp16 *cmpt_H = ((round % 2) == 0) ? l1A_H : l1B_H; + __fp16 *cmpt_y = ((round % 2) == 0) ? l1A_y : l1B_y; + __fp16 *cmpt_Sigma = ((round % 2) == 0) ? l1A_Sigma : l1B_Sigma; + // On even rounds we transfer the result of odd computation and viceversa + __fp16 *trsf_x = ((round % 2) == 0) ? l1A_x : l1B_x; + __fp16 *cmpt_x = ((round % 2) == 1) ? l1A_x : l1B_x; + + // COMPUTATION + // Each iteration is assigned to a processor + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp16 *PtrH = cmpt_H + itr * (2 * N_TX * N_RX); + __fp16 *Ptry = cmpt_y + itr * (2 * N_RX); + __fp16 *PtrSigma = cmpt_Sigma + itr * (2 * N_TX); + __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + } + mempool_log_barrier(2, core_id); + + // TRANSFER + mempool_start_benchmark(); + if (core_id == 0) { + dma_memcpy_nonblocking(trsf_H, l2_H, + N_TX * N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_Sigma, l2_Sigma, + N_TX * N_ITR * sizeof(int32_t)); + if (round >= 1) // Transfer to L2 is done only if not the + dma_memcpy_nonblocking(l2_x, trsf_x, (N_TX * N_ITR) * sizeof(int32_t)); + } + + // COMPUTATION + // Each iteration is assigned to a processor + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp16 *Ptrx = cmpt_x + itr * (2 * N_TX); + __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); + __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + __fp16 *Ptry3 = y3 + itr * (2 * N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_log_barrier(2, core_id); + + // WAIT FOR DMA + mempool_start_benchmark(); + dma_wait(); // Wait for the end of the dma transfer + mempool_stop_benchmark(); + } + #endif + + mempool_barrier(num_cores); return 0; } + +#endif diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/mimo_mmse_f32/main.c index c0a50a6ea..14e72a00c 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/mimo_mmse_f32/main.c @@ -4,274 +4,107 @@ // Author: Marco Bertuletti, ETH Zurich +#include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" -dump(id, 1); - +#include "data/data_mimo_mmse_f32.h" +#include "kernel/mempool_checks.h" #include "kernel/mempool_cholesky_f32s.h" #include "kernel/mempool_linearsolver_f32s.h" #include "kernel/mempool_mimo_mmse_f32p.h" #include "kernel/mempool_mimo_mmse_f32s.h" -/* DATA */ -#include "data/data_mimo_mmse_f32.h" - -#define PARALLEL //#define SINGLE - -#define FOLDED -#define CHOLESKY //#define JACOBI +#define PARALLEL -#ifdef SINGLE -float ch_matrix[2 * N_TX * N_RX] __attribute__((section(".l1"))); -float in_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -float out_matrix[2 * N_TX * N_TX] __attribute__((section(".l1"))); -float sigma[2 * N_TX] __attribute__((section(".l1"))); -float b[2 * N_RX] __attribute__((section(".l1"))); - -float s[2 * N_TX] __attribute__((section(".l1"))); -float x[2 * N_TX] __attribute__((section(".l1"))); -float y[2 * N_TX] __attribute__((section(".l1"))); -#endif - -#ifdef PARALLEL -float in_matrix[2 * N_TX * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float out_matrix[2 * N_TX * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float s[2 * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float x[2 * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); -float y[2 * N_TX * N_ITR] - __attribute__((section(".l1_prio"), aligned(N_BANKS))); - -float ch_matrix[2 * N_TX * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -float b[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -float sigma[N_TX * N_ITR] __attribute__((section(".l1_prio"))); -#endif - -void initialize(float *matrix, float *data, uint32_t dim, uint32_t core_id, - uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i += num_cores) { - matrix[i] = data[i]; - } - mempool_barrier(num_cores); - return; -} - -void initialize_zeros(float *matrix, uint32_t dim, uint32_t core_id, - uint32_t num_cores) { - uint32_t i = 0; - for (i = core_id; i < 2 * dim; i += num_cores) { - matrix[i] = 0.0f; - } - mempool_barrier(num_cores); - return; -} - -void verify_result(float *pRes, float *pExp, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - float error; - float exp = pExp[i]; - float res = pRes[i]; - asm volatile("fsub.s %[error], %[res], %[exp];" - : [error] "=&r"(error) - : [res] "r"(res), [exp] "r"(exp) - :); - if (*(int32_t *)&error != 0) { - printf("(%d): 0x%08x - 0x%08x - 0x%08x\n", i / 2, *(int32_t *)&error, - *(int32_t *)&exp, *(int32_t *)&res); - } - } - } -} - -void write_result(float *pRes, uint32_t dim, uint32_t core_id) { - if (core_id == 0) { - for (uint32_t i = 0; i < 2 * dim; i++) { - - float in = pRes[i]; - dump_id(*(uint32_t *)&in); - } - } -} - -#ifdef SINGLE +float l1_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +float l1_G[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +float l1_L[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +float l1_Sigma[N_TX * N_ITR] __attribute__((section(".l1_prio"))); + +float l1_y[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); +float y2[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); +float y3[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); +float l1_x[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); // Driver program -void single_core_mimo_mmse_cholesky() { +int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); mempool_barrier_init(core_id); // Initialize barrier and synchronize// /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX * N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX * N_TX, core_id, num_cores); - initialize_zeros(out_matrix, N_TX * N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(sigma, In_sigma, N_TX, core_id, num_cores); - initialize(b, In_b, N_RX, core_id, num_cores); - - initialize_zeros(s, N_TX, core_id, num_cores); - initialize_zeros(y, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores); + if (core_id == 0) { + dma_memcpy_blocking(l1_H, l2_H, 2 * N_ITR * N_RX * N_TX * sizeof(int32_t)); + dma_memcpy_blocking(l1_y, l2_y, 2 * N_ITR * N_RX * sizeof(int32_t)); + dma_memcpy_blocking(l1_Sigma, l2_Sigma, N_ITR * N_TX * sizeof(int32_t)); + } + mempool_barrier(num_cores); +#ifdef SINGLE /* Benchmark */ if (core_id == 0) { - mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX, 0); - mempool_stop_benchmark(); - - mempool_start_benchmark(); - mempool_cholesky_f32s(in_matrix, out_matrix, N_TX); - mempool_Ltrisol_f32s(out_matrix, s, y, N_TX); - mempool_Lttrisol_f32s(out_matrix, y, x, N_TX); + mempool_hermitian_f32s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f32s(l1_H, l1_y, y2, N_RX, N_TX, 0); + mempool_cholesky_f32s(l1_G, l1_L, N_TX); + mempool_Ltrisol_f32s(l1_L, y2, y3, N_TX); + mempool_Lttrisol_f32s(l1_L, y3, l1_x, N_TX); mempool_stop_benchmark(); } mempool_barrier(num_cores); - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} - -// Driver program -void single_core_mimo_mmse_jacobi() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// - - /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX * N_TX, core_id, num_cores); - initialize_zeros(in_matrix, N_TX * N_TX, core_id, num_cores); - /* Initialize vectors */ - initialize(sigma, In_sigma, N_TX, core_id, num_cores); - initialize(b, In_b, N_RX, core_id, num_cores); - initialize_zeros(s, N_TX, core_id, num_cores); - initialize_zeros(x, N_TX, core_id, num_cores); +#endif +#ifdef JACOBI /* Benchmark */ if (core_id == 0) { - mempool_start_benchmark(); - mempool_hermitian_f32s(ch_matrix, in_matrix, sigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f32s(ch_matrix, b, s, N_RX, N_TX, 0); + mempool_hermitian_f32s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f32s(l1_H, l1_y, y2, N_RX, N_TX, 0); mempool_stop_benchmark(); - mempool_start_benchmark(); - mempool_jacobi_f32s(in_matrix, s, x, 0.005f, N_TX, 20U); + mempool_jacobi_f32s(l1_G, y2, l1_x, N_TX, 0.005f, 20U); mempool_stop_benchmark(); } mempool_barrier(num_cores); - verify_result(x, Out_x, N_TX, core_id); - mempool_barrier(num_cores); - return; -} - #endif #ifdef PARALLEL - -// Driver program -void parallel_mimo_mmse_cholesky() { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize// - - /* Initialize matrices */ - initialize(ch_matrix, In_H, N_RX * N_TX * N_ITR, core_id, num_cores); - initialize_zeros(in_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); - initialize_zeros(out_matrix, N_TX * N_TX * N_ITR, core_id, num_cores); - /* Initialize vectors */ - initialize(sigma, In_sigma, N_TX * N_ITR / 2, core_id, num_cores); - initialize(b, In_b, N_RX * N_ITR, core_id, num_cores); - - initialize_zeros(s, N_TX * N_ITR, core_id, num_cores); - initialize_zeros(y, N_TX * N_ITR, core_id, num_cores); - initialize_zeros(x, N_TX * N_ITR, core_id, num_cores); - - /* Benchmark */ - -#ifdef FOLDED - - mempool_start_benchmark(); - // Each iteration is assigned to a pool of processors - // In a pool each PE gets a column of the H matrix, accumulating a row of the - // output matrix - uint32_t pool_id = core_id / N_TX; - uint32_t num_pools = num_cores / N_TX; - for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { - // Inputs - float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float *sigma_ptr = sigma + itr * N_TX; - // Intermediate results and outputs - float *in_matrix_ptr = in_matrix + (itr % num_pools) * N_TX + - (itr / num_pools) * (2 * N_TX * N_BANKS); - mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, - 1, 0, core_id % N_TX, N_TX); - } - mempool_stop_benchmark(); + // Each iteration is assigned to a processor mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { // Inputs - float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float *b_ptr = b + itr * (2 * N_RX); + float *PtrH = l1_H + itr * (2 * N_TX * N_RX); + float *PtrSigma = l1_Sigma + itr * N_TX; + float *Ptry = l1_y + itr * (2 * N_RX); // Intermediate results and outputs - float *in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + - (itr / num_cores) * (2 * N_TX * N_BANKS); - float *out_matrix_ptr = out_matrix + (itr % num_cores) * N_TX + - (itr / num_cores) * (2 * N_TX * N_BANKS); - float *s_ptr = - s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - float *y_ptr = - y + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - float *x_ptr = - x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 1); - mempool_cholesky_folded_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); - mempool_Ltrisol_folded_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); - mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + float *PtrG = l1_G + itr * (2 * N_TX * N_TX); + float *PtrL = l1_L + itr * (2 * N_TX * N_TX); + float *Ptry2 = y2 + itr * (2 * N_TX); + float *Ptry3 = y3 + itr * (2 * N_TX); + float *Ptrx = l1_x + itr * (2 * N_TX); + mempool_hermitian_f32s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f32s(PtrG, PtrL, N_TX); + mempool_Ltrisol_f32s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f32s(PtrL, Ptry3, Ptrx, N_TX); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); +#endif - // mempool_start_benchmark(); - // for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - // // Inputs - // float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - // float* sigma_ptr = sigma + itr * N_TX; - // float* b_ptr = b + itr * (2 * N_RX); - // // Intermediate results and outputs - // float* in_matrix_ptr = in_matrix + (itr % num_cores) * N_TX + (itr / - // num_cores) * (2 * N_TX * N_BANKS); float* out_matrix_ptr = out_matrix + - // (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_TX * N_BANKS); - // float* s_ptr = s + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * - // N_BANKS); float* y_ptr = y + (itr % num_cores) * N_TX + (itr / - // num_cores) * (2 * N_BANKS); float* x_ptr = x + (itr % num_cores) * N_TX - // + (itr / num_cores) * (2 * N_BANKS); - // mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, - // N_TX, 1, 0); mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, - // N_RX, N_TX, 1); mempool_cholesky_folded_f32s(in_matrix_ptr, - // out_matrix_ptr, N_TX); mempool_Ltrisol_folded_f32s(out_matrix_ptr, - // s_ptr, y_ptr, N_TX); mempool_Lttrisol_folded_f32s(out_matrix_ptr, y_ptr, - // x_ptr, N_TX); - // } - // mempool_log_barrier(2, core_id); - // mempool_stop_benchmark(); - -#else - +#ifdef PARALLEL_PARALLEL_HERMITIAN mempool_start_benchmark(); // Each iteration is assigned to a pool of processors // In a pool each PE gets a column of the H matrix, accumulating a row of the @@ -279,75 +112,63 @@ void parallel_mimo_mmse_cholesky() { uint32_t pool_id = core_id / N_TX; uint32_t num_pools = num_cores / N_TX; for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { - float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float *in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - float *sigma_ptr = sigma + itr * N_TX; - mempool_hermitian_f32p(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, N_TX, - 0, 0, core_id % N_TX, N_TX); + float *PtrH = l1_H + itr * (2 * N_TX * N_RX); + float *PtrG = l1_G + itr * (2 * N_TX * N_TX); + float *PtrSigma = l1_Sigma + itr * N_TX; + mempool_hermitian_f32p(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0, + core_id % N_TX, N_TX); } mempool_stop_benchmark(); mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { // Inputs - float *ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - float *sigma_ptr = sigma + itr * N_TX; - float *b_ptr = b + itr * (2 * N_RX); + float *PtrH = l1_H + itr * (2 * N_TX * N_RX); + float *Ptry = l1_y + itr * (2 * N_RX); // Intermediate results and outputs - float *in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - float *out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); - float *s_ptr = s + itr * (2 * N_TX); - float *y_ptr = y + itr * (2 * N_TX); - float *x_ptr = x + itr * (2 * N_TX); - mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, N_RX, N_TX, 0); - mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, N_TX); - mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); - mempool_Lttrisol_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); + float *PtrG = l1_G + itr * (2 * N_TX * N_TX); + float *PtrL = l1_L + itr * (2 * N_TX * N_TX); + float *Ptry2 = y2 + itr * (2 * N_TX); + float *Ptry3 = y3 + itr * (2 * N_TX); + float *Ptrx = l1_x + itr * (2 * N_TX); + mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f32s(PtrG, PtrL, N_TX); + mempool_Ltrisol_f32s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f32s(PtrL, Ptry3, Ptrx, N_TX); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); - - // // Each iteration is assigned to a pool of processors - // mempool_start_benchmark(); - // for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - // // Inputs - // float* ch_matrix_ptr = ch_matrix + itr * (2 * N_TX * N_RX); - // float* sigma_ptr = sigma + itr * N_TX; - // float* b_ptr = b + itr * (2 * N_RX); - // // Intermediate results and outputs - // float* in_matrix_ptr = in_matrix + itr * (2 * N_TX * N_TX); - // float* out_matrix_ptr = out_matrix + itr * (2 * N_TX * N_TX); - // float* s_ptr = s + itr * (2 * N_TX); - // float* y_ptr = y + itr * (2 * N_TX); - // float* x_ptr = x + itr * (2 * N_TX); - // mempool_hermitian_f32s(ch_matrix_ptr, in_matrix_ptr, sigma_ptr, N_RX, - // N_TX, 0, 0); mempool_MVP_conjtransp_f32s(ch_matrix_ptr, b_ptr, s_ptr, - // N_RX, N_TX, 0); mempool_cholesky_f32s(in_matrix_ptr, out_matrix_ptr, - // N_TX); mempool_Ltrisol_f32s(out_matrix_ptr, s_ptr, y_ptr, N_TX); - // mempool_Lttrisol_f32s(out_matrix_ptr, y_ptr, x_ptr, N_TX); - // } - // mempool_log_barrier(2, core_id); - // mempool_stop_benchmark(); - -#endif - mempool_barrier(num_cores); - return; -} - #endif -int main() { - -#ifdef SINGLE -#if defined(CHOLESKY) - single_core_mimo_mmse_cholesky(); -#elif defined(JACOBI) - single_core_mimo_mmse_jacobi(); -#endif -#endif - -#ifdef PARALLEL - parallel_mimo_mmse_cholesky(); +#ifdef FOLDED + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + // Inputs + float *PtrH = l1_H + itr * (2 * N_TX * N_RX); + float *PtrSigma = l1_Sigma + itr * N_TX; + float *Ptry = l1_y + itr * (2 * N_RX); + // Intermediate results and outputs + float *PtrG = l1_G + (itr % num_cores) * N_TX + + (itr / num_cores) * (2 * N_TX * N_BANKS); + float *PtrL = l1_L + (itr % num_cores) * N_TX + + (itr / num_cores) * (2 * N_TX * N_BANKS); + float *Ptry2 = + y2 + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float *Ptry3 = + y3 + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + float *Ptrx = + l1_x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); + mempool_hermitian_f32s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 1, 0); + mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX, 1); + mempool_cholesky_folded_f32s(PtrG, PtrL, N_TX); + mempool_Ltrisol_folded_f32s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_folded_f32s(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); #endif + // Check the result + mempool_check_f32(l1_x, l2_x, 2 * N_TX, 0.01f, 0); + mempool_barrier(num_cores); return 0; } diff --git a/software/runtime/data/data_cfft_radix4_f16.h.tpl b/software/runtime/data/data_cfft_radix4_f16.h.tpl index 73c0cf277..825780e1a 100644 --- a/software/runtime/data/data_cfft_radix4_f16.h.tpl +++ b/software/runtime/data/data_cfft_radix4_f16.h.tpl @@ -33,13 +33,13 @@ #define N_RSAMPLES (2 * N_CSAMPLES) #define N_TWIDDLES (3 * N_CSAMPLES / 4) #define N_BANKS (NUM_CORES * BANKING_FACTOR) -#define BITREVINDEXTABLE_FIXED_TABLE_LENGTH (${BitrevLen}) +#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) -__fp16 pSrc[${2 * Len}] = ${array_to_cstr(src)}; +__fp16 l2_pSrc[${2 * Len}] = ${array_to_cstr(src)}; -__fp16 pDst[${2 * Len}] = ${array_to_cstr(dst)}; +__fp16 l2_pRes[${2 * Len}] = ${array_to_cstr(dst)}; -__fp16 pTwi[${2 * Len}] = ${array_to_cstr(twi)}; +__fp16 l2_twiddleCoef_f16[${2 * Len}] = ${array_to_cstr(twi)}; // Bitreversal -uint16_t BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; +uint16_t l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/runtime/data/data_cfft_radix4_f16.py b/software/runtime/data/data_cfft_radix4_f16.py index 3f382fd0a..f927a8d5d 100644 --- a/software/runtime/data/data_cfft_radix4_f16.py +++ b/software/runtime/data/data_cfft_radix4_f16.py @@ -95,26 +95,19 @@ def main(): src = np.random.rand(Len) + 1.j * np.random.rand(Len) dst = np.fft.fft(src) - - twi_RI = np.zeros(int(2 * 3 * Len / 4), np.float16) - for i in range(0, int(3 * Len / 4)): - twi_RI[2 * i] = np.cos(i * 2 * np.pi / Len).astype(np.float16) - twi_RI[2 * i + 1] = np.sin(i * 2 * np.pi / Len).astype(np.float16) - + src = np.column_stack((src.real, src.imag)).astype(np.float16).flatten() + dst = np.column_stack((dst.real, dst.imag)).astype(np.float16).flatten() Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(Len, 2))) - src_RI = np.zeros(2 * Len) - dst_RI = np.zeros(2 * Len) - for i in range(Len): - src_RI[2 * i] = (src[i].real).astype(np.float16) - src_RI[2 * i + 1] = (src[i].imag).astype(np.float16) - dst_RI[2 * i] = (dst[i].real).astype(np.float16) - dst_RI[2 * i + 1] = (dst[i].imag).astype(np.float16) + twi = np.zeros(int(2 * 3 * Len / 4), np.float16) + for i in range(0, int(3 * Len / 4)): + twi[2 * i] = np.cos(i * 2 * np.pi / Len).astype(np.float16) + twi[2 * i + 1] = np.sin(i * 2 * np.pi / Len).astype(np.float16) kwargs = {'name': 'data_cfft_radix4_f16', - 'src': src_RI, - 'dst': dst_RI, - 'twi': twi_RI, + 'src': src, + 'dst': dst, + 'twi': twi, 'bitrev': Bitreversal, 'Len': Len, 'Log2Len': int(np.log2(Len)), diff --git a/software/runtime/data/data_chest_f16.h.tpl b/software/runtime/data/data_chest_f16.h.tpl index 99e802efe..baf203afe 100644 --- a/software/runtime/data/data_chest_f16.h.tpl +++ b/software/runtime/data/data_chest_f16.h.tpl @@ -23,8 +23,8 @@ #define N_RX (${nb_rx}) #define N_SAMPLES (${nb_samples}) -__fp16 PilotRX[${2*nb_rx*nb_samples}] = ${array_to_cstr(pilot_rx)}; +__fp16 l2_PilotRX[${2*nb_rx*nb_samples}] = ${array_to_cstr(pilot_rx)}; -__fp16 PilotTX[${2*nb_tx*nb_samples}] = ${array_to_cstr(pilot_tx)}; +__fp16 l2_PilotTX[${2*nb_tx*nb_samples}] = ${array_to_cstr(pilot_tx)}; -__fp16 HEST[${2*nb_rx*nb_tx*nb_samples}] = ${array_to_cstr(Hest)}; +__fp16 l2_HEST[${2*nb_rx*nb_tx*nb_samples}] = ${array_to_cstr(Hest)}; diff --git a/software/runtime/data/data_cholesky_f16.h.tpl b/software/runtime/data/data_cholesky_f16.h.tpl index f5bd001b3..5f96ae3ac 100644 --- a/software/runtime/data/data_cholesky_f16.h.tpl +++ b/software/runtime/data/data_cholesky_f16.h.tpl @@ -18,6 +18,6 @@ #define dim_N (${n_matrix}) #define N_SAMPLES (${n_samples}) -__fp16 In_G[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; +__fp16 l2_GIn[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; -__fp16 Out_L[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; +__fp16 l2_LOut[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; diff --git a/software/runtime/data/data_mimo_mmse_f16.h.tpl b/software/runtime/data/data_mimo_mmse_f16.h.tpl index 5f0ebf26b..ccfc80974 100644 --- a/software/runtime/data/data_mimo_mmse_f16.h.tpl +++ b/software/runtime/data/data_mimo_mmse_f16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '{}f, '.format(a) + out += '(__fp16){:0.5f}f, '.format(a) i += 1 if i % 8 == 0: out += '\n' @@ -21,14 +21,14 @@ // Inputs -__fp16 In_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; +__fp16 l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; -__fp16 In_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; +__fp16 l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; -__fp16 In_b[${2 * N_rx * N_itr}] = ${array_to_cstr(b)}; +__fp16 l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -__fp16 In_sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; +__fp16 l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; // Outputs -__fp16 Out_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; +__fp16 l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_f16.py b/software/runtime/data/data_mimo_mmse_f16.py index 3d12986f8..b3ba356ff 100644 --- a/software/runtime/data/data_mimo_mmse_f16.py +++ b/software/runtime/data/data_mimo_mmse_f16.py @@ -34,7 +34,7 @@ def gen_input_data(N_rx, N_tx): H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * \ np.random.rand(N_rx, N_tx).astype(np.float16) # Create input vector - b = np.random.rand(N_rx).astype(np.float16) + 1.j * \ + y = np.random.rand(N_rx).astype(np.float16) + 1.j * \ np.random.rand(N_rx).astype(np.float16) # Generate noise variance sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float16)) @@ -47,23 +47,24 @@ def gen_input_data(N_rx, N_tx): # Cholesky decomposition L = np.linalg.cholesky(G) # Linear system solution - s = np.transpose(np.dot(H_h, b)) - y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.asmatrix(L).H, y) + y1 = np.transpose(np.dot(H_h, y)) + y2 = solve_triangular(L, y1, lower=True) + x = solve_triangular(np.asmatrix(L).H, y2) + sigma = sigma + 0j H = np.reshape(np.asarray(H), (N_tx*N_rx), order='C') G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') + sigma = np.column_stack((sigma.real, sigma.imag) + ).astype(np.float16).flatten() H = np.column_stack((H.real, H.imag)).astype(np.float16).flatten() G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() L = np.column_stack((L.real, L.imag)).astype(np.float16).flatten() - b = np.column_stack((b.real, b.imag)).astype(np.float16).flatten() - s = np.column_stack((s.real, s.imag)).astype(np.float16).flatten() - x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() y = np.column_stack((y.real, y.imag)).astype(np.float16).flatten() + x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() - return sigma, H, G, b, x + return sigma, H, G, y, x def main(): @@ -122,26 +123,26 @@ def main(): N_rx = args.receivers itr = args.iterations - sigma = np.zeros([itr, N_tx]) + sigma = np.zeros([itr, 2*N_tx]) H_RI = np.zeros([itr, 2*N_tx*N_rx]) G_RI = np.zeros([itr, 2*N_tx*N_tx]) - b_RI = np.zeros([itr, 2*N_rx]) + y_RI = np.zeros([itr, 2*N_rx]) x_RI = np.zeros([itr, 2*N_tx]) for k in range(itr): - sigma[k, :], H_RI[k, :], G_RI[k, :], b_RI[k, + sigma[k, :], H_RI[k, :], G_RI[k, :], y_RI[k, :], x_RI[k, :] = gen_input_data(N_rx, N_tx) - sigma = np.reshape(sigma, (N_tx*itr)).astype(np.float16) + sigma = np.reshape(sigma, (2*N_tx*itr)).astype(np.float16) H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)).astype(np.float16) G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)).astype(np.float16) - b_RI = np.reshape(b_RI, (2*N_rx*itr)).astype(np.float16) + y_RI = np.reshape(y_RI, (2*N_rx*itr)).astype(np.float16) x_RI = np.reshape(x_RI, (2*N_tx*itr)).astype(np.float16) kwargs = {'name': 'data_mimo_mmse_f16', 'H': H_RI, 'G': G_RI, 'sigma': sigma, - 'b': b_RI, + 'y': y_RI, 'x': x_RI, 'N_tx': N_tx, 'N_rx': N_rx, diff --git a/software/runtime/data/data_mimo_mmse_f32.h.tpl b/software/runtime/data/data_mimo_mmse_f32.h.tpl index 9ad05570d..a15b87375 100644 --- a/software/runtime/data/data_mimo_mmse_f32.h.tpl +++ b/software/runtime/data/data_mimo_mmse_f32.h.tpl @@ -21,14 +21,14 @@ // Inputs -float In_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; +float l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; -float In_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; +float l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; -float In_b[${2 * N_rx * N_itr}] = ${array_to_cstr(b)}; +float l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -float In_sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; +float l2_Sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; // Outputs -float Out_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; +float l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_f32.py b/software/runtime/data/data_mimo_mmse_f32.py index 0d98ec45a..73ef8acda 100644 --- a/software/runtime/data/data_mimo_mmse_f32.py +++ b/software/runtime/data/data_mimo_mmse_f32.py @@ -35,7 +35,7 @@ def gen_input_data(N_rx, N_tx): H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * \ np.random.rand(N_rx, N_tx).astype(np.float32) # Create input vector - b = np.random.rand(N_rx).astype(np.float32) + 1.j * \ + y = np.random.rand(N_rx).astype(np.float32) + 1.j * \ np.random.rand(N_rx).astype(np.float32) # Generate noise variance sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float32)) @@ -48,9 +48,9 @@ def gen_input_data(N_rx, N_tx): # Cholesky decomposition L = np.linalg.cholesky(G) # Linear system solution - s = np.transpose(np.dot(H_h, b)) - y = solve_triangular(L, s, lower=True) - x = solve_triangular(np.asmatrix(L).H, y) + y1 = np.transpose(np.dot(H_h, y)) + y2 = solve_triangular(L, y1, lower=True) + x = solve_triangular(np.asmatrix(L).H, y2) H = np.reshape(np.asarray(H), (N_tx*N_rx), order='C') G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') @@ -59,12 +59,10 @@ def gen_input_data(N_rx, N_tx): G = np.column_stack((G.real, G.imag)).astype(np.float32).flatten() L = np.column_stack((L.real, L.imag)).astype(np.float32).flatten() - b = np.column_stack((b.real, b.imag)).astype(np.float32).flatten() - s = np.column_stack((s.real, s.imag)).astype(np.float32).flatten() - x = np.column_stack((x.real, x.imag)).astype(np.float32).flatten() y = np.column_stack((y.real, y.imag)).astype(np.float32).flatten() + x = np.column_stack((x.real, x.imag)).astype(np.float32).flatten() - return sigma, H, G, b, x + return sigma, H, G, y, x def main(): @@ -126,23 +124,23 @@ def main(): sigma = np.zeros([itr, N_tx]) H_RI = np.zeros([itr, 2*N_tx*N_rx]) G_RI = np.zeros([itr, 2*N_tx*N_tx]) - b_RI = np.zeros([itr, 2*N_rx]) + y_RI = np.zeros([itr, 2*N_rx]) x_RI = np.zeros([itr, 2*N_tx]) for k in range(itr): - sigma[k, :], H_RI[k, :], G_RI[k, :], b_RI[k, + sigma[k, :], H_RI[k, :], G_RI[k, :], y_RI[k, :], x_RI[k, :] = gen_input_data(N_rx, N_tx) sigma = np.reshape(sigma, (N_tx*itr)) H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)) G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)) - b_RI = np.reshape(b_RI, (2*N_rx*itr)) + y_RI = np.reshape(y_RI, (2*N_rx*itr)) x_RI = np.reshape(x_RI, (2*N_tx*itr)) kwargs = {'name': 'data_mimo_mmse_f32', 'H': H_RI, 'G': G_RI, 'sigma': sigma, - 'b': b_RI, + 'y': y_RI, 'x': x_RI, 'N_tx': N_tx, 'N_rx': N_rx, From 10a42e410b8e304e28ced924ca54397343199552 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 12 Dec 2023 17:19:00 +0100 Subject: [PATCH 14/39] [software] Fix MIMO MMSE Hermitian and matrix-vector product --- .../baremetal/mempool_mimo_mmse_f16s.h | 208 +++++++++--------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index a661c6158..a873a73f9 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -257,13 +257,17 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, @param[in] zf controls if the zero forcing is used @return none */ -void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_t n_rx, const uint32_t n_tx) { +void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, + const uint32_t n_rx, const uint32_t n_tx) { uint32_t i, j, k; v2h ab; v2h cd0, cd1, cd2, cd3; float as0, as1, as2, as3; float bs0, bs1, bs2, bs3; + const uint32_t neg_mask = 0x80000000; + const uint32_t shuffle_mask = 0x00020003; + for (i = 0; i < n_tx; i++) { j = 0; do { @@ -280,93 +284,86 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_ // Inner Loop for (k = 0; k < n_rx; k++) { // inputs from matrix H_h - ab = ( *(v2h*)&pH[2U * (k * n_tx + i)] ); + ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); // inputs from matrix H - cd0 = ( *(v2h*)&pH[2U * (k * n_tx + j)] ); - cd1 = ( *(v2h*)&pH[2U * (k * n_tx + j + 1U)] ); - cd2 = ( *(v2h*)&pH[2U * (k * n_tx + j + 2U)] ); - cd3 = ( *(v2h*)&pH[2U * (k * n_tx + j + 3U)] ); - const uint32_t val = 0x80000000; - const uint32_t mask = 0x00020003; + cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); + cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); + cd2 = (*(v2h *)&pH[2U * (k * n_tx + j + 2U)]); + cd3 = (*(v2h *)&pH[2U * (k * n_tx + j + 3U)]); // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( - // a * c + b * d - "vfdotpex.s.h %[as0], %[ab], %[cd0];" - "vfdotpex.s.h %[as1], %[ab], %[cd1];" - "vfdotpex.s.h %[as2], %[ab], %[cd2];" - "vfdotpex.s.h %[as3], %[ab], %[cd3];" - // - "pv.shuffle2.h %[cd0], %[cd0], %[mask];" - "pv.shuffle2.h %[cd1], %[cd1], %[mask];" - "pv.shuffle2.h %[cd2], %[cd2], %[mask];" - "pv.shuffle2.h %[cd3], %[cd3], %[mask];" - // - "xor %[cd0], %[val], %[cd0];" - "xor %[cd1], %[val], %[cd1];" - "xor %[cd2], %[val], %[cd2];" - "xor %[cd3], %[val], %[cd3];" - // a * d - b * c - "vfdotpex.s.h %[bs0], %[ab], %[cd0];" - "vfdotpex.s.h %[bs1], %[ab], %[cd1];" - "vfdotpex.s.h %[bs2], %[ab], %[cd2];" - "vfdotpex.s.h %[bs3], %[ab], %[cd3];" - : [cd0] "+&r" (cd0), [cd1] "+&r" (cd1), [cd2] "+&r" (cd2), [cd3] "+&r" (cd3), - [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3) - : [ab] "r" (ab), [val] "r" (val), [mask] "r" (mask) - :); + asm volatile( + // a * c + b * d + "vfdotpex.s.h %[as0], %[ab], %[cd0];" + "vfdotpex.s.h %[as1], %[ab], %[cd1];" + "vfdotpex.s.h %[as2], %[ab], %[cd2];" + "vfdotpex.s.h %[as3], %[ab], %[cd3];" + // + "pv.shuffle2.h %[cd0], %[cd0], %[shuffle_mask];" + "pv.shuffle2.h %[cd1], %[cd1], %[shuffle_mask];" + "pv.shuffle2.h %[cd2], %[cd2], %[shuffle_mask];" + "pv.shuffle2.h %[cd3], %[cd3], %[shuffle_mask];" + // + "xor %[cd0], %[neg_mask], %[cd0];" + "xor %[cd1], %[neg_mask], %[cd1];" + "xor %[cd2], %[neg_mask], %[cd2];" + "xor %[cd3], %[neg_mask], %[cd3];" + // a * d - b * c + "vfdotpex.s.h %[bs0], %[ab], %[cd0];" + "vfdotpex.s.h %[bs1], %[ab], %[cd1];" + "vfdotpex.s.h %[bs2], %[ab], %[cd2];" + "vfdotpex.s.h %[bs3], %[ab], %[cd3];" + : [cd0] "+&r"(cd0), [cd1] "+&r"(cd1), [cd2] "+&r"(cd2), + [cd3] "+&r"(cd3), [as0] "+&r"(as0), [as1] "+&r"(as1), + [as2] "+&r"(as2), [as3] "+&r"(as3), [bs0] "+&r"(bs0), + [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [ab] "r"(ab), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask) + :); } // Compute diagonal elements if (i == j) { - asm volatile ( - "fadd.s %[as0], %[as0], %[pS];" - : [as0] "+&r" (as0) - : [pS] "r" (pS[2 * i]) - :); + asm volatile("fadd.s %[as0], %[as0], %[pS];" + : [as0] "+&r"(as0) + : [pS] "r"(pS[2 * i]) + :); bs0 = 0.0f; - } - else if (i == (j + 1U)) { - asm volatile ( - "fadd.s %[as1], %[as1], %[pS];" - : [as1] "+&r" (as1) - : [pS] "r" (pS[2 * i]) - :); + } else if (i == (j + 1U)) { + asm volatile("fadd.s %[as1], %[as1], %[pS];" + : [as1] "+&r"(as1) + : [pS] "r"(pS[2 * i]) + :); bs1 = 0.0f; - } - else if (i == (j + 2U)) { - asm volatile ( - "fadd.s %[as2], %[as2], %[pS];" - : [as2] "+&r" (as2) - : [pS] "r" (pS[2 * i]) - :); + } else if (i == (j + 2U)) { + asm volatile("fadd.s %[as2], %[as2], %[pS];" + : [as2] "+&r"(as2) + : [pS] "r"(pS[2 * i]) + :); bs2 = 0.0f; - } - else if (i == (j + 3U)) { - asm volatile ( - "fadd.s %[as3], %[as3], %[pS];" - : [as3] "+&r" (as3) - : [pS] "r" (pS[2 * i]) - :); + } else if (i == (j + 3U)) { + asm volatile("fadd.s %[as3], %[as3], %[pS];" + : [as3] "+&r"(as3) + : [pS] "r"(pS[2 * i]) + :); bs3 = 0.0f; } // Store v2h res0, res1, res2, res3; asm volatile( - "vfcpka.h.s %[res0], %[as0], %[bs0];" - "vfcpka.h.s %[res1], %[as1], %[bs1];" - "vfcpka.h.s %[res2], %[as2], %[bs2];" - "vfcpka.h.s %[res3], %[as3], %[bs3];" - : [res0] "=&r" (res0), [res1] "=&r" (res1), [res2] "=&r" (res2), [res3] "=&r" (res3) - : [as0] "r" (as0), [as1] "r" (as1), [as2] "r" (as2), [as3] "r" (as3), - [bs0] "r" (bs0), [bs1] "r" (bs1), [bs2] "r" (bs2), [bs3] "r" (bs3) - : - ); + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), + [res3] "=&r"(res3) + : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), + [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) + :); - ( *(v2h*)&pG[2 * (i * n_tx + j)] ) = res0; - ( *(v2h*)&pG[2 * (i * n_tx + j + 1U)] ) = res1; - ( *(v2h*)&pG[2 * (i * n_tx + j + 2U)] ) = res2; - ( *(v2h*)&pG[2 * (i * n_tx + j + 3U)] ) = res3; + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; + (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; + (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; j += 4; } while (j < n_tx); } @@ -383,16 +380,18 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_ @param[in] folded controls if output is folded @return none */ -void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded) { +void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded) { uint32_t i, j; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; - v2h ab0, ab1, ab2, ab3; - v2h cd; + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + v2h ab0, ab1, ab2, ab3; + v2h cd; uint32_t ndc; - const uint32_t val = 0x80000000; - const uint32_t mask = 0x00020003; + const uint32_t neg_mask = 0x80000000; + const uint32_t shuffle_mask = 0x00020003; i = 0; do { @@ -408,51 +407,52 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, const ui bs3 = 0.0f; for (j = 0; j < n_rx; j++) { // inputs from matrix H_h - ab0 = *(v2h*)&pH[2U * (j * n_tx + i)]; - ab1 = *(v2h*)&pH[2U * (j * n_tx + i + 1U)]; - ab2 = *(v2h*)&pH[2U * (j * n_tx + i + 2U)]; - ab3 = *(v2h*)&pH[2U * (j * n_tx + i + 3U)]; + ab0 = *(v2h *)&pH[2U * (j * n_tx + i)]; + ab1 = *(v2h *)&pH[2U * (j * n_tx + i + 1U)]; + ab2 = *(v2h *)&pH[2U * (j * n_tx + i + 2U)]; + ab3 = *(v2h *)&pH[2U * (j * n_tx + i + 3U)]; // inputs from b - cd = *(v2h*)&px[2U * j]; + cd = *(v2h *)&px[2U * j]; - // dotproducts (ac + bd) + j (ad - bc) - asm volatile ( + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( // a * c + b * d "vfdotpex.s.h %[as0], %[ab0], %[cd];" "vfdotpex.s.h %[as1], %[ab1], %[cd];" "vfdotpex.s.h %[as2], %[ab2], %[cd];" "vfdotpex.s.h %[as3], %[ab3], %[cd];" // - "pv.shuffle2.h %[ndc], %[cd], %[mask];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" // - "xor %[ndc], %[val], %[ndc];" + "xor %[ndc], %[neg_mask], %[ndc];" // a * d - b * c "vfdotpex.s.h %[bs0], %[ab0], %[ndc];" "vfdotpex.s.h %[bs1], %[ab1], %[ndc];" "vfdotpex.s.h %[bs2], %[ab2], %[ndc];" "vfdotpex.s.h %[bs3], %[ab3], %[ndc];" - : [as0] "+&r" (as0), [as1] "+&r" (as1), [as2] "+&r" (as2), [as3] "+&r" (as3), - [bs0] "+&r" (bs0), [bs1] "+&r" (bs1), [bs2] "+&r" (bs2), [bs3] "+&r" (bs3), - [ndc] "+r" (ndc) - : [cd] "r" (cd), [val] "r" (val), [mask] "r" (mask), - [ab0] "r" (ab0), [ab1] "r" (ab1), [ab2] "r" (ab2), [ab3] "r" (ab3) + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [ndc] "+r"(ndc) + : [cd] "r"(cd), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask), [ab0] "r"(ab0), [ab1] "r"(ab1), + [ab2] "r"(ab2), [ab3] "r"(ab3) :); } if (!folded) { v2h res0, res1, res2, res3; asm volatile( - "vfcpka.h.s %[res0], %[as0], %[bs0];" - "vfcpka.h.s %[res1], %[as1], %[bs1];" - "vfcpka.h.s %[res2], %[as2], %[bs2];" - "vfcpka.h.s %[res3], %[as3], %[bs3];" - : [res0] "=&r" (res0), [res1] "=&r" (res1), [res2] "=&r" (res2), [res3] "=&r" (res3) - : [as0] "r" (as0), [as1] "r" (as1), [as2] "r" (as2), [as3] "r" (as3), - [bs0] "r" (bs0), [bs1] "r" (bs1), [bs2] "r" (bs2), [bs3] "r" (bs3) - : - ); + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), + [res3] "=&r"(res3) + : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), + [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) + :); // Store - *(v2h *)&py[2U * i] = res0; + *(v2h *)&py[2U * i] = res0; *(v2h *)&py[2U * (i + 1U)] = res1; *(v2h *)&py[2U * (i + 2U)] = res2; *(v2h *)&py[2U * (i + 3U)] = res3; From 08db9f07060beafa7641f5ea4376ca350cd4c0fa Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 12 Dec 2023 17:19:33 +0100 Subject: [PATCH 15/39] [software] Add Cholesky decomposition SIMD-vectorized code --- .../kernels/baremetal/mempool_cholesky_f16s.h | 289 +++++++++++++++++- 1 file changed, 276 insertions(+), 13 deletions(-) diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index b53c6ce3f..6da7aa8a2 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -3,6 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 // Author: Marco Bertuletti, ETH Zurich +// Author: Bowen Wang, ETH Zurich #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) @@ -104,11 +105,11 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { for (j = 0; j < n; j++) { // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[j * NUM_BANKS + 2 * j]; + ap = pSrc[2U * (j * N_BANKS + j)]; sum = (__fp16)0.0f; for (k = 0; k < j; k++) { - a = pL[j * NUM_BANKS + 2 * k]; - b = pL[j * NUM_BANKS + 2 * k + 1]; + a = pL[2U * (j * N_BANKS + k)]; + b = pL[2U * (j * N_BANKS + k) + 1]; asm volatile("fmadd.h %[sum], %[a], %[a], %[sum];" "fmadd.h %[sum], %[b], %[b], %[sum];" : [sum] "+&r"(sum) @@ -120,23 +121,23 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { : [ap] "+&r"(ap) : [sum] "r"(sum) :); - pL[j * NUM_BANKS + 2 * j] = ap; + pL[2U * (j * N_BANKS + j)] = ap; // Elements on rows for (i = j + 1; i < n; i++) { // Pivot - ap = pSrc[i * NUM_BANKS + 2 * j]; - bp = pSrc[i * NUM_BANKS + 2 * j + 1]; + ap = pSrc[2U * (i * N_BANKS + j)]; + bp = pSrc[2U * (i * N_BANKS + j) + 1]; // Diag - diag = pL[j * NUM_BANKS + 2 * j]; + diag = pL[2U * (j * N_BANKS + j)]; // Sum -> s = s + (ac + bd) + j*(bc - ad) as = (__fp16)0.0f; bs = (__fp16)0.0f; for (k = 0; k < j; k++) { - a = pL[i * NUM_BANKS + 2 * k]; - b = pL[i * NUM_BANKS + 2 * k + 1]; - c = pL[j * NUM_BANKS + 2 * k]; - d = pL[j * NUM_BANKS + 2 * k + 1]; + a = pL[2U * (i * N_BANKS + k)]; + b = pL[2U * (i * N_BANKS + k) + 1]; + c = pL[2U * (j * N_BANKS + k)]; + d = pL[2U * (j * N_BANKS + k) + 1]; asm volatile("fmadd.h %[as], %[a], %[c], %[as];" "fmadd.h %[as], %[b], %[d], %[as];" "fmadd.h %[bs], %[b], %[c], %[bs];" @@ -152,8 +153,270 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { : [ap] "+&r"(ap), [bp] "+&r"(bp) : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) :); - pL[i * NUM_BANKS + 2 * j] = ap; - pL[i * NUM_BANKS + 2 * j + 1] = bp; + pL[2U * (i * N_BANKS + j)] = ap; + pL[2U * (i * N_BANKS + j) + 1] = bp; + } + } + return; +} + +/** VECTORIZED CODE + @brief Cholesky decomposition with Crout algorithm. + Output data is folded to the core's local memory. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ +void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + float sum; // register float sum + __fp16 diag; // Diagonal element + __fp16 ap; + + float as, bs; + v2h abp, ab, cd, ndc; + v2h vec_sum; + v2h vec_diag; + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (float)0.0f; + for (k = 0; k < j; k++) { + ab = (*(v2h *)&pL[2U * (j * n + k)]); + asm volatile("vfdotpex.s.h %[sum], %[ab], %[ab];" + : [sum] "+&r"(sum) + : [ab] "r"(ab) + :); + } + asm volatile("fcvt.h.s %[sum], %[sum];" + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r"(ap) + : [sum] "r"(sum) + :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + abp = (*(v2h *)&pSrc[2U * (i * n + j)]); + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (float)0.0f; + bs = (float)0.0f; + for (k = 0; k < j; k++) { + ab = (*(v2h *)&pL[2U * (i * n + k)]); + cd = (*(v2h *)&pL[2U * (j * n + k)]); + const uint32_t neg_mask = 0x00008000; + const uint32_t shuffle_mask = 0x00020003; + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "vfdotpex.s.h %[as], %[ab], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "xor %[ndc], %[neg_mask], %[ndc];" + "vfdotpex.s.h %[bs], %[ab], %[ndc];" + : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) + : [ab] "r"(ab), [cd] "r"(cd), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask) + :); + } + asm volatile("vfcpka.h.s %[vec_sum], %[as], %[bs];" + "pv.pack.h %[vec_diag], %[diag], %[diag];" + "vfsub.h %[abp], %[abp], %[vec_sum];" + "vfdiv.h %[abp], %[abp], %[vec_diag];" + : [abp] "+&r"(abp), [vec_sum] "+&r"(vec_sum), + [vec_diag] "+&r"(vec_diag) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + (*(v2h *)&pL[2U * (i * n + j)]) = abp; + } + } + return; +} + +/** VECTORIZED CODE with unrolled inner loop + @brief Cholesky decomposition with Crout algorithm. + Output data is folded to the core's local memory. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ +void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, + const uint32_t n) { + + float sum; // register float sum + __fp16 diag; // Diagonal element + __fp16 ap; + + float as1, as2, as3, as4; + float bs1, bs2, bs3, bs4; + + v2h abp; + v2h abp1, abp2, abp3, abp4; + v2h ab1, ab2, ab3, ab4, cd; + v2h vec_diag; + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + sum = (float)0.0f; + for (k = 0; k < j; k++) { + ab1 = (*(v2h *)&pL[2U * (j * n + k)]); + asm volatile("vfdotpex.s.h %[sum], %[ab1], %[ab1];" + : [sum] "+&r"(sum) + : [ab1] "r"(ab1) + :); + } + + asm volatile("vfcpka.h.s %[sum], %[sum], %[sum];" + "fsub.h %[ap], %[ap], %[sum];" + "fsqrt.h %[ap], %[ap];" + : [ap] "+&r"(ap) + : [sum] "r"(sum) + :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + // calculate the first several elements based on number of columns + + uint32_t bound = (j + (n - j - 1) % 4 + 1); + for (i = j + 1; i < bound; i++) { + // Pivot + abp = (*(v2h *)&pSrc[2U * (i * n + j)]); + // Diag + diag = pL[2U * (j * n + j)]; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as1 = (float)0.0f; + bs1 = (float)0.0f; + for (k = 0; k < j; k++) { + ab1 = (*(v2h *)&pL[2U * (i * n + k)]); + cd = (*(v2h *)&pL[2U * (j * n + k)]); + const uint32_t neg_mask = 0x00008000; + const uint32_t shuffle_mask = 0x00020003; + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "vfdotpex.s.h %[as1], %[ab1], %[cd];" + "pv.shuffle2.h %[cd], %[cd], %[shuffle_mask];" + "xor %[cd], %[neg_mask], %[cd];" + "vfdotpex.s.h %[bs1], %[ab1], %[cd];" + : [as1] "+&r"(as1), [bs1] "+&r"(bs1), [cd] "+&r"(cd) + : [ab1] "r"(ab1), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask) + :); + } + + asm volatile("vfcpka.h.s %[vec_diag], %[as1], %[bs1];" + "vfsub.h %[abp], %[abp], %[vec_diag];" + "pv.pack.h %[vec_diag], %[diag], %[diag];" + "vfdiv.h %[abp], %[abp], %[vec_diag];" + : [abp] "+&r"(abp), [vec_diag] "+&r"(vec_diag) + : [as1] "r"(as1), [bs1] "r"(bs1), [diag] "r"(diag) + :); + + (*(v2h *)&pL[2U * (i * n + j)]) = abp; + } + + // Unroll the residual by a factor of four + for (; i < n; i = i + 4) { + asm volatile("andi %[as1], %[as1], 0;" + "andi %[bs1], %[as1], 0;" + "andi %[as2], %[as1], 0;" + "andi %[bs2], %[as1], 0;" + "andi %[as3], %[as1], 0;" + "andi %[bs3], %[as1], 0;" + "andi %[as4], %[as1], 0;" + "andi %[bs4], %[as1], 0;" + : [as1] "+&r"(as1), [as2] "+&r"(as2), [as3] "+&r"(as3), + [as4] "+&r"(as4), [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), + [bs3] "+&r"(bs3), [bs4] "+&r"(bs4) + : + :); + + for (k = 0; k < j; k++) { + cd = (*(v2h *)&pL[2U * (j * n + k)]); + ab1 = (*(v2h *)&pL[2U * (i * n + k)]); + ab2 = (*(v2h *)&pL[2U * ((i + 1) * n + k)]); + ab3 = (*(v2h *)&pL[2U * ((i + 2) * n + k)]); + ab4 = (*(v2h *)&pL[2U * ((i + 3) * n + k)]); + + const uint32_t neg_mask = 0x00008000; + const uint32_t shuffle_mask = 0x00020003; + // Row one + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "vfdotpex.s.h %[as1], %[ab1], %[cd];" + "vfdotpex.s.h %[as2], %[ab2], %[cd];" + "vfdotpex.s.h %[as3], %[ab3], %[cd];" + "vfdotpex.s.h %[as4], %[ab3], %[cd];" + + "pv.shuffle2.h %[cd], %[cd], %[shuffle_mask];" + "xor %[cd], %[neg_mask], %[cd];" + + "vfdotpex.s.h %[bs1], %[ab1], %[cd];" + "vfdotpex.s.h %[bs2], %[ab2], %[cd];" + "vfdotpex.s.h %[bs3], %[ab3], %[cd];" + "vfdotpex.s.h %[bs4], %[ab3], %[cd];" + : [as1] "+&r"(as1), [as2] "+&r"(as2), [as3] "+&r"(as3), + [as4] "+&r"(as4), [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), + [bs3] "+&r"(bs3), [bs4] "+&r"(bs4), [cd] "+r"(cd) + : [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), [ab4] "r"(ab4), + [neg_mask] "r"(neg_mask), [shuffle_mask] "r"(shuffle_mask) + :); + } + + // Diag + diag = pL[2U * (j * n + j)]; + + // Pivot + abp1 = (*(v2h *)&pSrc[2U * (i * n + j)]); + abp2 = (*(v2h *)&pSrc[2U * ((i + 1) * n + j)]); + abp3 = (*(v2h *)&pSrc[2U * ((i + 2) * n + j)]); + abp4 = (*(v2h *)&pSrc[2U * ((i + 3) * n + j)]); + asm volatile("vfcpka.h.s %[vec_diag], %[as1], %[bs1];" + "vfcpka.h.s %[vec_diag], %[as2], %[bs2];" + "vfcpka.h.s %[vec_diag], %[as3], %[bs3];" + "vfcpka.h.s %[vec_diag], %[as4], %[bs4];" + + "vfsub.h %[abp1], %[abp1], %[vec_diag];" + "vfsub.h %[abp2], %[abp2], %[vec_diag];" + "vfsub.h %[abp3], %[abp3], %[vec_diag];" + "vfsub.h %[abp4], %[abp4], %[vec_diag];" + + "pv.pack.h %[vec_diag], %[diag], %[diag];" + "vfdiv.h %[abp1], %[abp1], %[vec_diag];" + "vfdiv.h %[abp2], %[abp2], %[vec_diag];" + "vfdiv.h %[abp3], %[abp3], %[vec_diag];" + "vfdiv.h %[abp4], %[abp4], %[vec_diag];" + + "andi %[as1], %[as1], 0;" + "andi %[bs1], %[as1], 0;" + "andi %[as2], %[as1], 0;" + "andi %[bs2], %[as1], 0;" + "andi %[as3], %[as1], 0;" + "andi %[bs3], %[as1], 0;" + "andi %[as4], %[as1], 0;" + "andi %[bs4], %[as1], 0;" + + : [abp1] "+&r"(abp1), [abp2] "+&r"(abp2), [abp3] "+&r"(abp3), + [abp4] "+&r"(abp4), [vec_diag] "+&r"(vec_diag), + [as1] "+&r"(as1), [as2] "+&r"(as2), [as3] "+&r"(as3), + [as4] "+&r"(as4), [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), + [bs3] "+&r"(bs3), [bs4] "+&r"(bs4) + : [diag] "r"(diag) + :); + + (*(v2h *)&pL[2U * (i * n + j)]) = abp1; + (*(v2h *)&pL[2U * ((i + 1) * n + j)]) = abp2; + (*(v2h *)&pL[2U * ((i + 2) * n + j)]) = abp3; + (*(v2h *)&pL[2U * ((i + 3) * n + j)]) = abp4; } } return; From 7beb20dabebc56651797af591ff40a672ceb5866 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 12 Dec 2023 17:21:12 +0100 Subject: [PATCH 16/39] [software] Add OFDM application --- software/apps/ofdm/main.c | 132 ++++++ software/runtime/data/data_ofdm.h.tpl | 48 ++ software/runtime/data/data_ofdm.py | 133 ++++++ .../mempool_radix4_cfft_butterfly_f16.h | 337 +++++++++++++ .../runtime/kernel/mempool_radix4_cfft_f16p.h | 441 ++++++++++++++++++ 5 files changed, 1091 insertions(+) create mode 100644 software/apps/ofdm/main.c create mode 100644 software/runtime/data/data_ofdm.h.tpl create mode 100644 software/runtime/data/data_ofdm.py create mode 100644 software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h create mode 100644 software/runtime/kernel/mempool_radix4_cfft_f16p.h diff --git a/software/apps/ofdm/main.c b/software/apps/ofdm/main.c new file mode 100644 index 000000000..1808669c6 --- /dev/null +++ b/software/apps/ofdm/main.c @@ -0,0 +1,132 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include +#include +#include + +/* Mempool runtime libraries */ +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "xpulp/builtins_v2.h" + +#include "data/data_ofdm.h" + +// CFFT Parameters +#define SCHEDULED +#define FOLDED_TWIDDLES +#define BITREVERSETABLE +#define ASM +#define N_FFTs_COL 4 +#define N_FFTs_ROW (N_RX / N_FFTs_COL) +// CMATMUL Parameters +#define NUM_COPIES (N_BANKS / (N_BEAMS * N_RX)) + +#define ROUNDS 3 +dump(prova, 1); + +#include "kernel/mempool_cmatmul_f16.h" +#include "kernel/mempool_radix4_cfft_butterfly_f16.h" +#include "kernel/mempool_radix4_cfft_f16p.h" +#include "kernel/mempool_radix4_cfft_q16_bitreversal.h" + +uint32_t arrival_index __attribute__((section(".l1_prio"))); +__fp16 l1_pBF_Coef_folded[2 * N_BEAMS * N_RX * NUM_COPIES] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); + +__fp16 l1_pFFT_Src[N_FFTs_ROW * 8 * N_BANKS] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +__fp16 l1_pFFT_Dst[N_FFTs_ROW * 8 * N_BANKS] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +__fp16 l1_twiddleCoef_f16_src[6 * N_BANKS] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +__fp16 l1_twiddleCoef_f16_dst[6 * N_BANKS] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +uint16_t l1_BitRevIndexTable[BITREVINDEXTABLE_LENGTH] + __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/* MAIN */ +int main() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); + + /* INITIALIZATION */ + mempool_start_benchmark(); + if (core_id == 0) { + // Each FFT is folded over 4 memory rows + // Each memory row is 2 * N_BANKS samples + __atomic_store_n(&arrival_index, 0, __ATOMIC_RELAXED); + dma_memcpy_blocking(l1_pFFT_Src, l2_pFFT_Src, + (N_RX * N_SC) * sizeof(int32_t)); + dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); + for (uint32_t i = 0; i < NUM_COPIES; i++) { + dma_memcpy_blocking(l1_pBF_Coef_folded + i * (N_BEAMS * N_RX), + l2_pBF_Coef, (N_BEAMS * N_RX) * sizeof(int32_t)); + } + for (uint32_t i = 0; i < N_FFTs_COL; i++) { + dma_memcpy_blocking(l1_twiddleCoef_f16_src + (2 * i * N_BANKS), + l2_twiddleCoef_f16, 3 * (N_SC / 4) * sizeof(int32_t)); + } + } + mempool_barrier(num_cores); + mempool_stop_benchmark(); + dump_prova(0); + + // // Start of the iterations + // for (uint32_t round = 0; round < ROUNDS; round++) { + + /* FFT */ + mempool_start_benchmark(); + uint32_t col_fftLen = N_SC / 4; + uint32_t col_id = core_id / (N_SC / 16); + // Distribute FFTs over columns + mempool_radix4_cfft_f16p_scheduler( + l1_pFFT_Src, l1_pFFT_Dst, N_SC, + l1_twiddleCoef_f16_src + 2 * col_id * col_fftLen, + l1_twiddleCoef_f16_dst + 2 * col_id * col_fftLen, l1_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH, 1, (N_SC / 16)); + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); + dump_prova(1); + + /* BEAMFORMING */ + mempool_start_benchmark(); + cmatmul_2x4_folded_f16p(l1_pBF_Coef_folded, l1_pFFT_Src, l1_pFFT_Dst, N_BEAMS, + N_RX, N_SC, core_id, num_cores); + mempool_stop_benchmark(); + dump_prova(2); + + mempool_start_benchmark(); + // Transfer and synchronization + if ((num_cores - 1) == + __atomic_fetch_add(&arrival_index, 1, __ATOMIC_RELAXED)) { + dma_memcpy_blocking(l1_pFFT_Src, l2_pFFT_Src, + (N_RX * N_SC) * sizeof(int32_t)); + dma_memcpy_blocking(l2_pBF_Dst, l1_pFFT_Dst, + (N_RX * N_SC) * sizeof(int32_t)); + for (uint32_t i = 0; i < N_FFTs_COL; i++) { + dma_memcpy_blocking(l1_twiddleCoef_f16_src + (2 * i * N_BANKS), + l2_twiddleCoef_f16, 3 * (N_SC / 4) * sizeof(int32_t)); + } + __atomic_store_n(&arrival_index, 0, __ATOMIC_RELAXED); + __sync_synchronize(); // Full memory barrier + wake_up_all(); + } + mempool_wfi(); + mempool_stop_benchmark(); + dump_prova(3); + + // } + + return 0; +} diff --git a/software/runtime/data/data_ofdm.h.tpl b/software/runtime/data/data_ofdm.h.tpl new file mode 100644 index 000000000..fe7ff7fc6 --- /dev/null +++ b/software/runtime/data/data_ofdm.h.tpl @@ -0,0 +1,48 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:0.5}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +<% def array_to_str(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LOG2 (${Log2Len}) +#define N_RX (${N_rx}) +#define N_BEAMS (${N_bs}) +#define N_SC (${N_sc}) +#define N_BANKS (NUM_CORES * BANKING_FACTOR) +#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) + + +__fp16 l2_pFFT_Src[${2 * N_sc * N_rx}] = ${array_to_cstr(pFFT_src)}; + +__fp16 l2_twiddleCoef_f16[${2 * N_sc}] = ${array_to_cstr(pTw_coef)}; + +__fp16 l2_pBF_Coef[${2 * N_bs * N_rx}] = ${array_to_cstr(pBF_coef)}; + +__fp16 l2_pBF_Dst[${2 * N_bs * N_sc}] = ${array_to_cstr(pBF_dst)}; + +// Bitreversal +uint16_t l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/runtime/data/data_ofdm.py b/software/runtime/data/data_ofdm.py new file mode 100644 index 000000000..08cf091ce --- /dev/null +++ b/software/runtime/data/data_ofdm.py @@ -0,0 +1,133 @@ +# Copyright 2022 ETH Zurich and University of Bologna. +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +# Author: Marco Bertuletti, ETH Zurich + +#!/usr/bin/env python3 + +import numpy as np +import math as M +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular +from sympy.combinatorics import Permutation + +################## +# compute_result # +################## + +def compute_bitreversal(N, R): + # Decompose + logR2 = [] + idx = N + while (idx >= R): + logR2.append(int(M.log2(R))) + idx = idx // R + if (idx > 1): + logR2.append(int(M.log2(idx))) + # Bitreversal + indexes = [] + for x in range(N): + result = 0 + for bits in logR2: + mask = (0xffffffff >> (32 - bits)) + result = (result << bits) | (x & mask) + x = x >> bits + indexes.append(result) + + # Create transpositions table + tps = [] + for c in Permutation.from_sequence(indexes).cyclic_form: + for i in range(len(c) - 1): + tps.append([c[i] * 8, c[-1] * 8]) + return tps + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / "data_ofdm.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-rx", + "--receivers", + type=int, + required=False, + default=64, + help='First dimension.' + ) + parser.add_argument( + "-bs", + "--beams", + type=int, + required=False, + default=32, + help='Second dimension.' + ) + parser.add_argument( + "-sc", + "--subcarriers", + type=int, + required=False, + default=4096, + help='Iterations.' + ) + + args = parser.parse_args() + N_rx=args.receivers + N_bs=args.beams + N_sc=args.subcarriers + + pFFT_src = ( np.random.rand(2 * N_rx * N_sc) ).astype(np.float16) + pTw_coef = ( np.random.rand(int(3 * N_sc / 4)) ).astype(np.float16) + pBF_coef = ( np.random.rand(2 * N_rx * N_bs) ).astype(np.float16) + pBF_dst = ( np.random.rand(2 * N_bs * N_sc) ).astype(np.float16) + + Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(N_sc, 2))) + + kwargs = {'name': 'ofdm', + 'pFFT_src': pFFT_src, + 'pTw_coef': pTw_coef, + 'pBF_coef': pBF_coef, + 'pBF_dst': pBF_dst, + 'bitrev': Bitreversal, + 'N_rx' : N_rx, + 'N_bs' : N_bs, + 'N_sc' : N_sc, + 'Log2Len': int(np.log2(N_sc)), + 'BitrevLen': len(Bitreversal)} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h b/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h new file mode 100644 index 000000000..fbb6964ac --- /dev/null +++ b/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h @@ -0,0 +1,337 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "xpulp/builtins_v2.h" + +/** + @brief First butterfly stage. + @param[in] pIn points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pOut points to output buffer of 16b data, Re and Im parts are + interleaved + @param[in] i0 points to the first element to be processed + @param[in] n2 number of elements in the first wing of the butterfly + @param[in] CoSi1 packed cosine and sine first twiddle + @param[in] CoSi2 packed cosine and sine second twiddle + @param[in] CoSi3 packed cosine and sine third twiddle + @param[in] C1 packed sine and cosine first twiddle + @param[in] C2 packed sine and cosine second twiddle + @param[in] C3 packed sine and cosine third twiddle + @return none +*/ +static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, + uint32_t i0, uint32_t n2, v2h CoSi1, + v2h CoSi2, v2h CoSi3, v2h C1, v2h C2, + v2h C3) { + __fp16 t0, t1, t2, t3; + uint32_t i1, i2, i3; + uint32_t i0_store, i1_store, i2_store, i3_store; + float s0 = 0.0f, s1 = 0.0f, s2 = 0.0f, s3 = 0.0f, s4 = 0.0f, s5 = 0.0f; + v2h A, B, C, D, E, F, G, H; + +// LOAD INDEXES +#if defined(FOLDED) || defined(SCHEDULED) + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; +#else + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; +#endif +// STORE INDEXES +#if defined(FOLDED) || defined(SCHEDULED) + uint32_t n2_store = n2 >> 2U; + i0_store = (i0 % n2_store) + (i0 / n2_store) * N_BANKS; + i1_store = i0_store + n2_store; + i2_store = i1_store + n2_store; + i3_store = i2_store + n2_store; +#else + i0_store = i0; + i1_store = i1; + i2_store = i2; + i3_store = i3; +#endif + + /* Read yb (real), xb(imag) input */ + B = *(v2h *)&pIn[i1 * 2U]; + /* Read yd (real), xd(imag) input */ + D = *(v2h *)&pIn[i3 * 2U]; + /* Read ya (real), xa (imag) input */ + A = *(v2h *)&pIn[i0 * 2U]; + /* Read yc (real), xc(imag) input */ + C = *(v2h *)&pIn[i2 * 2U]; + asm volatile( + // xb - xd, yb - yd + "vfsub.h %[H],%[B],%[D];" + // xb + xd, yd + yd + "vfadd.h %[G],%[B],%[D];" + // xa + xc, ya + yc + "vfadd.h %[E],%[A],%[C];" + "pv.extract.h %[t0],%[H],0;" // yb - yd + "pv.extract.h %[t1],%[H],1;" // xb - xd + // xa - xc, ya - yc + "vfsub.h %[F],%[A],%[C];" + + "xor %[t2],%[t0],%[neg_mask];" // yd - yb + "xor %[t3],%[t1],%[neg_mask];" // xd - xb + "pv.pack.h %[D],%[t2],%[t1];" // yd - yb, xb - xd + "pv.pack.h %[C],%[t0],%[t3];" // yb - yd, xd - xb + + // xa + xc + xb + xd, ya + yb + yc + yd + "vfadd.h %[A],%[E],%[G];" + // xa + xc - xb - xd, ya + yc - yb - yd + "vfsub.h %[B],%[E],%[G];" + // xa - xc + yb - yd, ya - yc + xd - xb + "vfadd.h %[C],%[F],%[C];" + // xa - xc + yd - yb, ya - yc + xb - xd + "vfadd.h %[D],%[F],%[D];" + + // Co2(xa + xc - xb - xd), Si2(ya + yc - yb - yd) + "vfdotpex.s.h %[s0],%[CoSi2],%[B];" + //-Si2(xa + xc - xb - xd), Co2(ya + yc - yb - yd) + "vfdotpex.s.h %[s1],%[C2],%[B];" + + // Co1(xa - xc + yd - yb), Si1(ya - yc + xb - xd) + "vfdotpex.s.h %[s2],%[CoSi1],%[D];" + //-Si1(xa - xc + yd - yb), Co1(ya - yc + xb - xd) + "vfdotpex.s.h %[s3],%[C1],%[D];" + + // Co3(xa - xc + yb - yd), Si3(ya - yc + xd - xb) + "vfdotpex.s.h %[s4],%[CoSi3],%[C];" + //-Si3(xa - xc + yb - yd), Co3(ya - yc + xd - xb) + "vfdotpex.s.h %[s5],%[C3],%[C];" + + // xb', yb' + "vfcpka.h.s %[B], %[s0], %[s1];" + // xc', yc' + "vfcpka.h.s %[C], %[s2], %[s3];" + // xd', yd' + "vfcpka.h.s %[D], %[s4], %[s5];" + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), + [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "=&r"(t0), + [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [s0] "=&r"(s0), + [s1] "=&r"(s1), [s2] "=&r"(s2), [s3] "=&r"(s3), [s4] "=&r"(s4), + [s5] "=&r"(s5) + : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), + [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), [neg_mask] "r"(0x00008000) + :); + *((v2h *)&pOut[i0_store * 2U]) = A; + *((v2h *)&pOut[i1_store * 2U]) = B; + *((v2h *)&pOut[i2_store * 2U]) = D; + *((v2h *)&pOut[i3_store * 2U]) = C; +} + +/** + @brief Middle butterfly stage. + @param[in] pIn points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pOut points to output buffer of 16b data, Re and Im parts are + interleaved + @param[in] i0 points to the first element to be processed + @param[in] n2 number of elements in the first wing of the butterfly + @param[in] CoSi1 packed cosine and sine first twiddle + @param[in] CoSi2 packed cosine and sine second twiddle + @param[in] CoSi3 packed cosine and sine third twiddle + @param[in] C1 packed sine and cosine first twiddle + @param[in] C2 packed sine and cosine second twiddle + @param[in] C3 packed sine and cosine third twiddle + @return none +*/ +static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, + uint32_t i0, uint32_t n2, v2h CoSi1, + v2h CoSi2, v2h CoSi3, v2h C1, v2h C2, + v2h C3) { + __fp16 t0, t1, t2, t3; + uint32_t i1, i2, i3; + uint32_t i0_store, i1_store, i2_store, i3_store; + float s0 = 0.0f, s1 = 0.0f, s2 = 0.0f, s3 = 0.0f, s4 = 0.0f, s5 = 0.0f; + v2h A, B, C, D, E, F, G, H; + +// LOAD INDEXES +#if defined(FOLDED) || defined(SCHEDULED) + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + + * 3fftLen/4] */ + i1 = i0 + N_BANKS; + i2 = i1 + N_BANKS; + i3 = i2 + N_BANKS; +#else + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + + * 3fftLen/4] */ + i1 = i0 + n2; + i2 = i1 + n2; + i3 = i2 + n2; +#endif +// STORE INDEXES +#if defined(FOLDED) || defined(SCHEDULED) + uint32_t n2_store = n2 >> 2U; + i0_store = + (i0 % n2_store) + (i0 / n2) * n2 + ((i0 % n2) / n2_store) * N_BANKS; + i1_store = i0_store + n2_store; + i2_store = i1_store + n2_store; + i3_store = i2_store + n2_store; +#else + i0_store = i0; + i1_store = i1; + i2_store = i2; + i3_store = i3; +#endif + + /* Read yb (real), xb(imag) input */ + B = *(v2h *)&pIn[i1 * 2U]; + /* Read yd (real), xd(imag) input */ + D = *(v2h *)&pIn[i3 * 2U]; + /* Read ya (real), xa (imag) input */ + A = *(v2h *)&pIn[i0 * 2U]; + /* Read yc (real), xc(imag) input */ + C = *(v2h *)&pIn[i2 * 2U]; + asm volatile( + // xb - xd, yb - yd + "vfsub.h %[H],%[B],%[D];" + // xb + xd, yd + yd + "vfadd.h %[G],%[B],%[D];" + // xa + xc, ya + yc + "vfadd.h %[E],%[A],%[C];" + "pv.extract.h %[t0],%[H],1;" // yb - yd + "pv.extract.h %[t1],%[H],0;" // xb - xd + // xa - xc, ya - yc + "vfsub.h %[F],%[A],%[C];" + + "xor %[t2],%[t0],%[neg_mask];" // yd - yb + "xor %[t3],%[t1],%[neg_mask];" // xd - xb + "pv.pack.h %[D],%[t2],%[t1];" // yd - yb, xb - xd + "pv.pack.h %[C],%[t0],%[t3];" // yb - yd, xd - xb + + // xa + xc + xb + xd, ya + yb + yc + yd + "vfadd.h %[A],%[E],%[G];" + // xa + xc - xb - xd, ya + yc - yb - yd + "vfsub.h %[B],%[E],%[G];" + // xa - xc + yb - yd, ya - yc + xd - xb + "vfadd.h %[C],%[F],%[C];" + // xa - xc + yd - yb, ya - yc + xb - xd + "vfadd.h %[D],%[F],%[D];" + + // Co2(xa + xc - xb - xd), Si2(ya + yc - yb - yd) + "vfdotpex.s.h %[s0],%[CoSi2],%[B];" + //-Si2(xa + xc - xb - xd), Co2(ya + yc - yb - yd) + "vfdotpex.s.h %[s1],%[C2],%[B];" + + // Co1(xa - xc + yd - yb), Si1(ya - yc + xb - xd) + "vfdotpex.s.h %[s2],%[CoSi1],%[D];" + //-Si1(xa - xc + yd - yb), Co1(ya - yc + xb - xd) + "vfdotpex.s.h %[s3],%[C1],%[D];" + + // Co3(xa - xc + yb - yd), Si3(ya - yc + xd - xb) + "vfdotpex.s.h %[s4],%[CoSi3],%[C];" + //-Si3(xa - xc + yb - yd), Co3(ya - yc + xd - xb) + "vfdotpex.s.h %[s5],%[C3],%[C];" + + // xb', yb' + "vfcpka.h.s %[B], %[s0], %[s1];" + // xc', yc' + "vfcpka.h.s %[C], %[s2], %[s3];" + // xd', yd' + "vfcpka.h.s %[D], %[s4], %[s5];" + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), + [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "=&r"(t0), + [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [s0] "=&r"(s0), + [s1] "=&r"(s1), [s2] "=&r"(s2), [s3] "=&r"(s3), [s4] "=&r"(s4), + [s5] "=&r"(s5) + : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), + [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), [neg_mask] "r"(0x00008000) + :); + + *((v2h *)&pOut[i0_store * 2U]) = A; + *((v2h *)&pOut[i1_store * 2U]) = B; + *((v2h *)&pOut[i2_store * 2U]) = D; + *((v2h *)&pOut[i3_store * 2U]) = C; +} + +/** + @brief Last butterfly stage. + @param[in] pIn points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pOut points to output buffer of 16b data, Re and Im parts are + interleaved + @param[in] i0 points to the first element to be processed + @return none +*/ +static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, + uint32_t i0) { + __fp16 t0, t1; + uint32_t i1, i2, i3; + uint32_t i0_store, i1_store, i2_store, i3_store; + v2h A, B, C, D, E, F, G, H; + +// LOAD INDEXES +#if defined(FOLDED) || defined(SCHEDULED) + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], + pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + N_BANKS; + i2 = i1 + N_BANKS; + i3 = i2 + N_BANKS; +#else + /* index calculation for the input as, */ + /* pIn[i0 + 0], pIn[i0 + fftLen/4], + pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ + i1 = i0 + 1U; + i2 = i1 + 1U; + i3 = i2 + 1U; +#endif +// STORE INDEXES +#if defined(FOLDED) + i0_store = i0 * 4; + i1_store = i0_store + 1; + i2_store = i1_store + 1; + i3_store = i2_store + 1; +#else + i0_store = i0; + i1_store = i1; + i2_store = i2; + i3_store = i3; +#endif + + /* Read yb (real), xb(imag) input */ + B = *(v2h *)&pIn[i1 * 2U]; + /* Read yd (real), xd(imag) input */ + D = *(v2h *)&pIn[i3 * 2U]; + /* Read ya (real), xa(imag) input */ + A = *(v2h *)&pIn[i0 * 2U]; + /* Read yc (real), xc(imag) input */ + C = *(v2h *)&pIn[i2 * 2U]; + __fp16 t2, t3; + asm volatile("vfsub.h %[H],%[B],%[D];" + "vfadd.h %[G],%[B],%[D];" + "vfadd.h %[E],%[A],%[C];" + "vfsub.h %[F],%[A],%[C];" + "pv.extract.h %[t0],%[H],1;" + "pv.extract.h %[t1],%[H],0;" + "xor %[t2],%[t0],%[neg_mask];" + "xor %[t3],%[t1],%[neg_mask];" + "pv.pack.h %[A],%[t2],%[t1];" + "pv.pack.h %[B],%[t0],%[t3];" + "vfadd.h %[H],%[E],%[G];" + "vfsub.h %[E],%[E],%[G];" + "vfadd.h %[A],%[F],%[A];" + "vfadd.h %[B],%[F],%[B];" + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), + [E] "=&r"(E), [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), + [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3) + : [neg_mask] "r"(0x00008000) + :); + + *((v2h *)&pOut[i0_store * 2U]) = H; + *((v2h *)&pOut[i1_store * 2U]) = E; + *((v2h *)&pOut[i2_store * 2U]) = A; + *((v2h *)&pOut[i3_store * 2U]) = B; +} diff --git a/software/runtime/kernel/mempool_radix4_cfft_f16p.h b/software/runtime/kernel/mempool_radix4_cfft_f16p.h new file mode 100644 index 000000000..2076a108a --- /dev/null +++ b/software/runtime/kernel/mempool_radix4_cfft_f16p.h @@ -0,0 +1,441 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "xpulp/builtins_v2.h" +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) + +#define SHUFFLE_TWIDDLEFACT \ + asm volatile("pv.extract.h %[t1],%[CoSi1],0;" \ + "pv.extract.h %[t3],%[CoSi2],0;" \ + "pv.extract.h %[t5],%[CoSi3],0;" \ + "pv.extract.h %[t0],%[CoSi1],1;" \ + "pv.extract.h %[t2],%[CoSi2],1;" \ + "pv.extract.h %[t4],%[CoSi3],1;" \ + "xor %[t1],%[t1],%[neg_mask];" \ + "xor %[t3],%[t3],%[neg_mask];" \ + "xor %[t5],%[t5],%[neg_mask];" \ + "pv.pack.h %[C1],%[t0],%[t1];" \ + "pv.pack.h %[C2],%[t2],%[t3];" \ + "pv.pack.h %[C3],%[t4],%[t5];" \ + : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), [t0] "=&r"(t0), \ + [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), \ + [t4] "=&r"(t4), [t5] "=&r"(t5) \ + : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), \ + [neg_mask] "r"(0x00008000) \ + :); + +#ifdef FOLDED_TWIDDLES + +#define LOAD_STORE_TWIDDLEFACT \ + CoSi1 = *(v2h *)&pCoef_src[2U * ic]; \ + CoSi2 = *(v2h *)&pCoef_src[2U * (ic + 1 * N_BANKS)]; \ + CoSi3 = *(v2h *)&pCoef_src[2U * (ic + 2 * N_BANKS)]; \ + if (ic % 4 == 0) { \ + *((v2h *)&pCoef_dst[2U * (ic_store)]) = CoSi1; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic_store)]) = CoSi1; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic_store)]) = CoSi1; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic_store)]) = CoSi1; \ + ic_store += N_BANKS; \ + *((v2h *)&pCoef_dst[2U * (ic_store)]) = CoSi2; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic_store)]) = CoSi2; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic_store)]) = CoSi2; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic_store)]) = CoSi2; \ + ic_store += N_BANKS; \ + *((v2h *)&pCoef_dst[2U * (ic_store)]) = CoSi3; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic_store)]) = CoSi3; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic_store)]) = CoSi3; \ + *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic_store)]) = CoSi3; \ + } + +#else +#define LOAD_STORE_TWIDDLEFACT \ + CoSi1 = *(v2h *)&pCoef_src[2U * ic]; \ + CoSi2 = *(v2h *)&pCoef_src[2U * (ic * 2U)]; \ + CoSi3 = *(v2h *)&pCoef_src[2U * (ic * 3U)]; +#endif + + + +#ifdef FOLDED_TWIDDLES +/** + @brief Full FFT butterfly + @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pDst16 points to output buffer of 16b data, Re and Im parts + are interleaved + @param[in] fftLen Length of the complex input vector + @param[in] pCoef_src Twiddle coefficients vector + @param[in] pCoef_dst Auxiliary twiddle coefficients vector + @param[in] nPE Number of PE + @return pointer to output vector +*/ +void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, + uint32_t fftLen, __fp16 *pCoef_src, + __fp16 *pCoef_dst, uint32_t nPE) +#else +/** + Twiddles are not folded in memory + @brief Full FFT butterfly + @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are + interleaved + @param[out] pDst16 points to output buffer of 16b data, Re and Im parts + are interleaved + @param[in] fftLen Length of the complex input vector + @param[in] pCoef_src Twiddle coefficients vector + @param[in] nPE Number of PE + @return pointer to output vector +*/ +void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, + uint32_t fftLen, __fp16 *pCoef_src, + uint32_t nPE) +#endif +{ + + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id; + __fp16 t0, t1, t2, t3, t4, t5; + v2h CoSi1, CoSi2, CoSi3; + v2h C1, C2, C3; +#ifdef FOLDED_TWIDDLES + uint32_t n1, n2, n2_store; + uint32_t i0, k, ic, ic_store; + __fp16 *pTmp; +#else + uint32_t n1, n2; + uint32_t i0, k, ic; + __fp16 *pTmp; + uint32_t twidCoefModifier = 1U; +#endif + + /* START OF FIRST STAGE PROCESSING */ + n1 = fftLen; + n2 = n1 >> 2U; + for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, n2); i0++) { + +#ifdef FOLDED_TWIDDLES + ic = i0; + ic_store = ic >> 2U; + n2_store = n2 >> 2U; +#else + ic = i0; +#endif + LOAD_STORE_TWIDDLEFACT; + SHUFFLE_TWIDDLEFACT; + radix4_butterfly_first(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; +#ifdef FOLDED_TWIDDLES + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; +#else + twidCoefModifier <<= 2U; +#endif + mempool_log_partial_barrier(2, absolute_core_id, nPE); + /* END OF FIRST STAGE PROCESSING */ + + /* START OF MIDDLE STAGE PROCESSING */ + for (k = fftLen / 4U; k > 4U; k >>= 2U) { + n1 = n2; + n2 >>= 2U; + for (i0 = core_id * 4; i0 < core_id * 4 + 4; i0++) { +#ifdef FOLDED_TWIDDLES + ic = i0; + // (ic % n2) / 4 take only every 4th index in the wing + // (ic / n2) * n2 shift of the wing size + ic_store = ((ic % n2) >> 2) + (ic / n2) * n2; + n2_store = n2 >> 2U; +#else + ic = (i0 % n2) * twidCoefModifier; +#endif + LOAD_STORE_TWIDDLEFACT; + SHUFFLE_TWIDDLEFACT; + radix4_butterfly_middle(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, + C2, C3); + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; +#ifdef FOLDED_TWIDDLES + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; +#else + twidCoefModifier <<= 2U; +#endif + mempool_log_partial_barrier(2, absolute_core_id, nPE); + } + /* END OF MIDDLE STAGE PROCESSING */ + + /* START OF LAST STAGE PROCESSING */ + for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, fftLen >> 2U); i0++) { + radix4_butterfly_last(pSrc16, pDst16, i0); + } + mempool_log_partial_barrier(2, absolute_core_id, nPE); + /* END OF LAST STAGE PROCESSING */ + return; +} + +/** + SCHEDULER OF MULTIPLE FOLDED FFTS + Memory: + + 1st row of FFTS + + col_idx1 col_idx2 col_idx3 + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + + 2nd row of FFTS + + col_idx1 col_idx2 col_idx3 + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... + + ... + + @brief Scheduler of folded FFTs + @param[in] column index of the current FFT + @param[in] pSrc16 input buffer of 16b data, Re and Im are interleaved + @param[out] pDst16 output buffer of 16b data, Re and Im are interleaved + @param[in] fftLen Length of the complex input vector + @param[in] pCoef_src Twiddle coefficients vector + @param[in] pCoef_dst Twiddle coefficients vector + @param[in] pBitRevTable Bitreversal table + @param[in] bitReverseLen Length of bitreversal table + @param[in] bitReverseFlag Flag for bitreversal + @param[in] nPE Number of PE + @return void +*/ + +void mempool_radix4_cfft_f16p_scheduler( + __fp16 *pSrc16, __fp16 *pDst16, uint32_t fftLen, + __fp16 *pCoef_src, __fp16 *pCoef_dst, __attribute__((unused)) + uint16_t *pBitRevTable, __attribute__((unused)) uint16_t bitReverseLen, + uint8_t bitReverseFlag, uint32_t nPE) { + + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id % (fftLen >> 4U); + uint32_t col_id = absolute_core_id / (fftLen >> 4U); + + __fp16 t0, t1, t2, t3, t4, t5; + v2h CoSi1, CoSi2, CoSi3; + v2h C1, C2, C3; +#ifdef FOLDED_TWIDDLES + uint32_t n1, n2, n2_store; + uint32_t i0, k, ic, ic_store; +#else + uint32_t n1, n2; + uint32_t i0, k, ic; + uint32_t twidCoefModifier = 1U; +#endif + __fp16 *pTmp; + + /* FIRST STAGE */ + n1 = fftLen; + n2 = n1 >> 2U; + for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, n2); i0++) { + ic = i0; +#ifdef FOLDED_TWIDDLES + ic_store = ic >> 2U; + n2_store = n2 >> 2U; +#endif + LOAD_STORE_TWIDDLEFACT; + SHUFFLE_TWIDDLEFACT; + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * fftLen; + __fp16 *pOut = + pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + radix4_butterfly_first(pIn, pOut, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; + mempool_log_partial_barrier(2, absolute_core_id, nPE); + + /* MIDDLE STAGE */ + for (k = fftLen / 4U; k > 4U; k >>= 2U) { + n1 = n2; + n2 >>= 2U; + for (i0 = core_id * 4; i0 < core_id * 4 + 4; i0++) { +#ifdef FOLDED_TWIDDLES + ic = i0; + ic_store = ((ic % n2) >> 2) + (ic / n2) * n2; + n2_store = n2 >> 2U; +#else + ic = (i0 % n2) * twidCoefModifier; +#endif + LOAD_STORE_TWIDDLEFACT; + SHUFFLE_TWIDDLEFACT; + + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + __fp16 *pIn = + pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + __fp16 *pOut = + pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + radix4_butterfly_middle(pIn, pOut, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; + pTmp = pCoef_src; + pCoef_src = pCoef_dst; + pCoef_dst = pTmp; + mempool_log_partial_barrier(2, absolute_core_id, N_FFTs_COL * nPE); + } + + /* LAST STAGE */ + for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, fftLen >> 2U); i0++) { + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + __fp16 *pIn = + pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + __fp16 *pOut = + pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + radix4_butterfly_last(pIn, pOut, i0); + } + } + pTmp = pSrc16; + pSrc16 = pDst16; + pDst16 = pTmp; + mempool_log_partial_barrier(2, absolute_core_id, N_FFTs_COL * nPE); + mempool_stop_benchmark(); + mempool_start_benchmark(); + /* BITREVERSAL */ + // Bitreversal stage stores in the sequential addresses + if (bitReverseFlag) { +#ifdef BITREVERSETABLE + pSrc16 = pSrc16 + 2 * col_id * (fftLen / 4); + pDst16 = pDst16 + 2 * col_id * fftLen; + for (ic = 8 * core_id; ic < bitReverseLen; ic += 8 * nPE) { + uint32_t addr1, addr2, addr3, addr4; + uint32_t tmpa1, tmpa2, tmpa3, tmpa4; + uint32_t tmpb1, tmpb2, tmpb3, tmpb4; + uint32_t a1, a2, a3, a4; + uint32_t b1, b2, b3, b4; + uint32_t a1_load, a2_load, a3_load, a4_load; + uint32_t b1_load, b2_load, b3_load, b4_load; + uint32_t s2 = 0x00020002; + addr1 = *(uint32_t *)&pBitRevTable[ic]; + addr2 = *(uint32_t *)&pBitRevTable[ic + 2]; + addr3 = *(uint32_t *)&pBitRevTable[ic + 4]; + addr4 = *(uint32_t *)&pBitRevTable[ic + 6]; + asm volatile("pv.sra.h %[addr1],%[addr1],%[s2];" + "pv.sra.h %[addr2],%[addr2],%[s2];" + "pv.sra.h %[addr3],%[addr3],%[s2];" + "pv.sra.h %[addr4],%[addr4],%[s2];" + "pv.extract.h %[a1],%[addr1],0;" + "pv.extract.h %[a2],%[addr2],0;" + "pv.extract.h %[a3],%[addr3],0;" + "pv.extract.h %[a4],%[addr4],0;" + "pv.extract.h %[b1],%[addr1],1;" + "pv.extract.h %[b2],%[addr2],1;" + "pv.extract.h %[b3],%[addr3],1;" + "pv.extract.h %[b4],%[addr4],1;" + : [a1] "=r"(a1), [a2] "=r"(a2), [a3] "=r"(a3), [a4] "=r"(a4), + [b1] "=r"(b1), [b2] "=r"(b2), [b3] "=r"(b3), [b4] "=r"(b4), + [addr1] "+&r"(addr1), [addr2] "+&r"(addr2), + [addr3] "+&r"(addr3), [addr4] "+&r"(addr4) + : [s2] "r"(s2) + :); + // Compute the local addresses from the natural order ones + a1_load = (a1 % 4) * 2 * N_BANKS + 2 * (a1 / 4); + a2_load = (a2 % 4) * 2 * N_BANKS + 2 * (a2 / 4); + a3_load = (a3 % 4) * 2 * N_BANKS + 2 * (a3 / 4); + a4_load = (a4 % 4) * 2 * N_BANKS + 2 * (a4 / 4); + b1_load = (b1 % 4) * 2 * N_BANKS + 2 * (b1 / 4); + b2_load = (b2 % 4) * 2 * N_BANKS + 2 * (b2 / 4); + b3_load = (b3 % 4) * 2 * N_BANKS + 2 * (b3 / 4); + b4_load = (b4 % 4) * 2 * N_BANKS + 2 * (b4 / 4); + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + uint16_t *ptr1 = (uint16_t *)(pSrc16 + idx_row * (N_BANKS * 8)); + uint16_t *ptr2 = (uint16_t *)(pDst16 + idx_row * (N_BANKS * 8)); + // Load at address a + tmpa1 = *(uint32_t *)&ptr1[a1_load]; + tmpa2 = *(uint32_t *)&ptr1[a2_load]; + tmpa3 = *(uint32_t *)&ptr1[a3_load]; + tmpa4 = *(uint32_t *)&ptr1[a4_load]; + // Load at address b + tmpb1 = *(uint32_t *)&ptr1[b1_load]; + tmpb2 = *(uint32_t *)&ptr1[b2_load]; + tmpb3 = *(uint32_t *)&ptr1[b3_load]; + tmpb4 = *(uint32_t *)&ptr1[b4_load]; + // Swap a with b + *((uint32_t *)&ptr2[b1]) = tmpa1; + *((uint32_t *)&ptr2[b2]) = tmpa2; + *((uint32_t *)&ptr2[b3]) = tmpa3; + *((uint32_t *)&ptr2[b4]) = tmpa4; + // Swap b with a + *((uint32_t *)&ptr2[a1]) = tmpb1; + *((uint32_t *)&ptr2[a2]) = tmpb2; + *((uint32_t *)&ptr2[a3]) = tmpb3; + *((uint32_t *)&ptr2[a4]) = tmpb4; + } + } +#else + uint16_t *ptr1 = (uint16_t *)(pSrc16 + 2 * col_id * (fftLen / 4)); + uint16_t *ptr2 = (uint16_t *)(pDst16 + 2 * col_id * fftLen); + for (ic = core_id * 16; ic < MIN(core_id * 16 + 16, fftLen >> 2U); + ic += 4) { + uint32_t idx0 = ic; + uint32_t idx1 = ic + 1; + uint32_t idx2 = ic + 2; + uint32_t idx3 = ic + 3; + uint32_t idx_result0 = 0; + uint32_t idx_result1 = 0; + uint32_t idx_result2 = 0; + uint32_t idx_result3 = 0; + for (k = 0; k < LOG2; k++) { + idx_result0 = (idx_result0 << 1U) | (idx0 & 1U); + idx_result1 = (idx_result1 << 1U) | (idx1 & 1U); + idx_result2 = (idx_result2 << 1U) | (idx2 & 1U); + idx_result3 = (idx_result3 << 1U) | (idx3 & 1U); + idx0 = idx0 >> 1U; + idx1 = idx1 >> 1U; + idx2 = idx2 >> 1U; + idx3 = idx3 >> 1U; + } + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + uint32_t addr_src0 = (idx0 / 4) + (idx0 % 4) * N_BANKS; + uint32_t addr_src1 = (idx1 / 4) + (idx1 % 4) * N_BANKS; + uint32_t addr_src2 = (idx2 / 4) + (idx2 % 4) * N_BANKS; + uint32_t addr_src3 = (idx3 / 4) + (idx3 % 4) * N_BANKS; + uint32_t addr_dst0 = idx_result0; + uint32_t addr_dst1 = idx_result1; + uint32_t addr_dst2 = idx_result2; + uint32_t addr_dst3 = idx_result3; + addr_src0 += idx_row * (N_BANKS * 8); + addr_src1 += idx_row * (N_BANKS * 8); + addr_src2 += idx_row * (N_BANKS * 8); + addr_src3 += idx_row * (N_BANKS * 8); + addr_dst0 += idx_row * (N_BANKS * 8); + addr_dst1 += idx_row * (N_BANKS * 8); + addr_dst2 += idx_row * (N_BANKS * 8); + addr_dst3 += idx_row * (N_BANKS * 8); + *((uint32_t *)&ptr2[addr_dst0]) = (uint32_t)ptr1[addr_src0]; + *((uint32_t *)&ptr2[addr_dst1]) = (uint32_t)ptr1[addr_src1]; + *((uint32_t *)&ptr2[addr_dst2]) = (uint32_t)ptr1[addr_src2]; + *((uint32_t *)&ptr2[addr_dst3]) = (uint32_t)ptr1[addr_src3]; + } + } +#endif + } + mempool_log_partial_barrier(2, absolute_core_id, nPE); + return; +} From 38921abe168b9512c2a5db9f5625990de420cd09 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 4 Jan 2024 08:59:53 +0100 Subject: [PATCH 17/39] [software] Add kernel for fixed-point q16 MIMO MMSE estimation --- .../chest_q16p.h => apps/chest_q16/main.c} | 0 software/apps/cholesky_q16/main.c | 64 +++++ software/apps/mimo_mmse_q16/main.c | 104 +++++++ .../kernels/baremetal/mempool_cholesky_q32p.h | 4 +- .../kernels/baremetal/mempool_cholesky_q32s.h | 6 +- .../baremetal/mempool_linearsolver_q32p.h | 2 +- .../baremetal/mempool_linearsolver_q32s.h | 2 +- .../kernels/baremetal/mempool_sqrt_q32s.h | 4 +- software/runtime/data/data_cholesky_q16.h.tpl | 21 ++ software/runtime/data/data_cholesky_q16.py | 114 ++++++++ software/runtime/data/data_cholesky_q32.h.tpl | 22 ++ software/runtime/data/data_cholesky_q32.py | 98 +++++++ .../runtime/data/data_mimo_mmse_q16.h.tpl | 34 +++ software/runtime/data/data_mimo_mmse_q16.py | 161 +++++++++++ software/runtime/kernel/mempool_checks.h | 0 software/runtime/kernel/mempool_chest_q16p.h | 0 software/runtime/kernel/mempool_chest_q16s.h | 0 .../runtime/kernel/mempool_cholesky_q16s.h | 88 ++++++ .../kernel/mempool_linearsolver_q16s.h | 129 +++++++++ .../runtime/kernel/mempool_mimo_mmse_q16s.h | 259 ++++++++++++++++++ 20 files changed, 1103 insertions(+), 9 deletions(-) rename software/{runtime/kernel/chest_q16p.h => apps/chest_q16/main.c} (100%) create mode 100644 software/apps/cholesky_q16/main.c create mode 100644 software/apps/mimo_mmse_q16/main.c create mode 100644 software/runtime/data/data_cholesky_q16.h.tpl create mode 100644 software/runtime/data/data_cholesky_q16.py create mode 100644 software/runtime/data/data_cholesky_q32.h.tpl create mode 100644 software/runtime/data/data_cholesky_q32.py create mode 100644 software/runtime/data/data_mimo_mmse_q16.h.tpl create mode 100644 software/runtime/data/data_mimo_mmse_q16.py create mode 100644 software/runtime/kernel/mempool_checks.h create mode 100644 software/runtime/kernel/mempool_chest_q16p.h create mode 100644 software/runtime/kernel/mempool_chest_q16s.h create mode 100644 software/runtime/kernel/mempool_cholesky_q16s.h create mode 100644 software/runtime/kernel/mempool_linearsolver_q16s.h create mode 100644 software/runtime/kernel/mempool_mimo_mmse_q16s.h diff --git a/software/runtime/kernel/chest_q16p.h b/software/apps/chest_q16/main.c similarity index 100% rename from software/runtime/kernel/chest_q16p.h rename to software/apps/chest_q16/main.c diff --git a/software/apps/cholesky_q16/main.c b/software/apps/cholesky_q16/main.c new file mode 100644 index 000000000..3c9a50d35 --- /dev/null +++ b/software/apps/cholesky_q16/main.c @@ -0,0 +1,64 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "xpulp/builtins_v2.h" + +#include "data/data_cholesky_q16.h" +#include "kernel/mempool_checks.h" +#include "kernel/mempool_cholesky_q16s.h" + +#define SINGLE + +int16_t l1_GIn[2 * dim_N * dim_N * N_SAMPLES] + __attribute__((section(".l1_prio"))); +int16_t l1_LOut[2 * dim_N * dim_N * N_SAMPLES] + __attribute__((section(".l1_prio"))); + +int main() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize + + /* Initialize matrices */ + if (core_id == 0) { + dma_memcpy_blocking(l1_GIn, l2_GIn, + dim_N * dim_N * N_SAMPLES * sizeof(int32_t)); + dma_memcpy_blocking(l1_LOut, l2_LOut, + dim_N * dim_N * N_SAMPLES * sizeof(int32_t)); + } + // Wait at barrier until everyone is ready + mempool_barrier(num_cores); + +#ifdef SINGLE + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + mempool_cholesky_q16vecs(l1_GIn, l1_LOut, dim_N); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + +#ifdef PARALLEL + for (uint32_t i = core_id; i < N_SAMPLES; i += num_cores) { + mempool_start_benchmark(); + __fp16 *ptr_in_matrix = l1_GIn + i * 2 * dim_N * dim_N; + __fp16 *ptr_out_matrix = l1_LOut + i * 2 * dim_N * dim_N; + mempool_cholesky_q16s(ptr_in_matrix, ptr_out_matrix, dim_N); + } + mempool_barrier(num_cores); + mempool_stop_benchmark(); +#endif + + mempool_check_q16(l1_LOut, l2_LOut, 2 * dim_N * dim_N, 16, 0); + mempool_barrier(num_cores); + return 0; +} diff --git a/software/apps/mimo_mmse_q16/main.c b/software/apps/mimo_mmse_q16/main.c new file mode 100644 index 000000000..dff61adf8 --- /dev/null +++ b/software/apps/mimo_mmse_q16/main.c @@ -0,0 +1,104 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" +#include "xpulp/builtins_v2.h" + +#include "data/data_mimo_mmse_q16.h" +#include "kernel/mempool_cholesky_q16s.h" +#include "kernel/mempool_linearsolver_q16s.h" +#include "kernel/mempool_mimo_mmse_q16s.h" + +#define PARALLEL + +int16_t l1_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +int16_t l1_G[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +int16_t l1_L[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); + +int16_t l1_Sigma[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +int16_t l1_y[2 * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +int16_t y2[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +int16_t y3[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +int16_t l1_x[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +// Driver program +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize + + /* Initialize matrices */ + if (core_id == 0) { + dma_memcpy_blocking(l1_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + } + mempool_barrier(num_cores); + + /* Benchmark */ +#ifdef SINGLE + + if (core_id == 0) { + mempool_start_benchmark(); + mempool_hermitian_q16vecs((v2s *)l1_H, (v2s *)l1_G, (v2s *)l1_Sigma, N_RX, + N_TX); + mempool_MVP_conjtransp_q16vecs((v2s *)l1_H, (v2s *)l1_y, (v2s *)y2, N_RX, + N_TX, 0); + mempool_cholesky_q16vecs(l1_G, l1_L, N_TX); + mempool_Ltrisol_q16vecs(l1_L, y2, y3, N_TX); + mempool_Lttrisol_q16vecs(l1_L, y3, l1_x, N_TX); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + +#endif + +#ifdef PARALLEL + + mempool_start_benchmark(); + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + + int16_t *PtrH = l1_H + itr * (2 * N_TX * N_RX); + int16_t *Ptry = l1_y + itr * (2 * N_RX); + int16_t *PtrSigma = l1_Sigma + itr * (2 * N_TX); + + int16_t *PtrG = l1_G + itr * (2 * N_TX * N_TX); + int16_t *PtrL = l1_L + itr * (2 * N_TX * N_TX); + int16_t *Ptry2 = y2 + itr * (2 * N_TX); + int16_t *Ptry3 = y3 + itr * (2 * N_TX); + int16_t *Ptrx = l1_x + itr * (2 * N_TX); + + mempool_hermitian_q16vecs((v2s *)PtrH, (v2s *)PtrG, (v2s *)PtrSigma, N_RX, + N_TX); + mempool_MVP_conjtransp_q16vecs((v2s *)PtrH, (v2s *)Ptry, (v2s *)Ptry2, N_RX, + N_TX, 0); + mempool_cholesky_q16vecs(PtrG, PtrL, N_TX); + mempool_Ltrisol_q16vecs(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_q16vecs(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_log_barrier(2, core_id); + mempool_stop_benchmark(); + +#endif + + return 0; +} diff --git a/software/kernels/baremetal/mempool_cholesky_q32p.h b/software/kernels/baremetal/mempool_cholesky_q32p.h index cd27fa3bf..88819e842 100644 --- a/software/kernels/baremetal/mempool_cholesky_q32p.h +++ b/software/kernels/baremetal/mempool_cholesky_q32p.h @@ -205,7 +205,7 @@ void mempool_cholesky_q32p(int32_t *pSrc, int32_t *pL, const uint32_t n) { case 0: break; } - pL[j * n + j] = mempool_sqrt_q32s(pivot - sum); + pL[j * n + j] = mempool_sqrt_q32s(pivot - sum, FIXED_POINT); } mempool_log_barrier(2, absolute_core_id); @@ -403,7 +403,7 @@ void mempool_cholesky_q32p_sqrtsum(int32_t *pSrc, int32_t *pL, const uint32_t n, case 0: break; } - pL[matrix_row + j * N_BANKS] = mempool_sqrt_q32s(pivot - sum); + pL[matrix_row + j * N_BANKS] = mempool_sqrt_q32s(pivot - sum, FIXED_POINT); } return; } diff --git a/software/kernels/baremetal/mempool_cholesky_q32s.h b/software/kernels/baremetal/mempool_cholesky_q32s.h index d61be0473..c7a5a60c7 100644 --- a/software/kernels/baremetal/mempool_cholesky_q32s.h +++ b/software/kernels/baremetal/mempool_cholesky_q32s.h @@ -24,7 +24,7 @@ void mempool_cholesky_banachiewicz_q32s(int32_t *pSrc, int32_t *pL, int32_t b0, b1, b2, b3; pivot = pSrc[0]; - pL[0] = mempool_sqrt_q32s(pivot); + pL[0] = mempool_sqrt_q32s(pivot, FIXED_POINT); /* Loop over rows */ for (i = 1; i < n; i++) { @@ -101,7 +101,7 @@ void mempool_cholesky_banachiewicz_q32s(int32_t *pSrc, int32_t *pL, pL[i * n + l] = result; } if (j == i) { - pL[i * n + j] = mempool_sqrt_q32s(pivot - sum); + pL[i * n + j] = mempool_sqrt_q32s(pivot - sum, FIXED_POINT); } else { result = FIX_DIV((pivot - sum), diag); } @@ -206,7 +206,7 @@ void mempool_cholesky_crout_q32s(int32_t *pSrc, int32_t *pL, const uint32_t n) { case 0: break; } - pL[j * n + j] = mempool_sqrt_q32s(pivot - sum); + pL[j * n + j] = mempool_sqrt_q32s(pivot - sum, FIXED_POINT); for (i = j + 1; i < n; i++) { sum = 0; diff --git a/software/kernels/baremetal/mempool_linearsolver_q32p.h b/software/kernels/baremetal/mempool_linearsolver_q32p.h index 38a971bb5..5a0f509cc 100644 --- a/software/kernels/baremetal/mempool_linearsolver_q32p.h +++ b/software/kernels/baremetal/mempool_linearsolver_q32p.h @@ -212,7 +212,7 @@ void mempool_linearsolver_q32p_sqrtsum(int32_t *pSrc, int32_t *pL, int32_t *pIn, case 0: break; } - result = mempool_sqrt_q32s(pivot - sum); + result = mempool_sqrt_q32s(pivot - sum, FIXED_POINT); pIn[j] = FIX_DIV(in, result); pL[matrix_row + j * N_BANKS] = result; } diff --git a/software/kernels/baremetal/mempool_linearsolver_q32s.h b/software/kernels/baremetal/mempool_linearsolver_q32s.h index e0b894f66..db5419092 100644 --- a/software/kernels/baremetal/mempool_linearsolver_q32s.h +++ b/software/kernels/baremetal/mempool_linearsolver_q32s.h @@ -347,7 +347,7 @@ void mempool_linearsolver_q32s(int32_t *pSrc, int32_t *pL, case 0: break; } - diag = mempool_sqrt_q32s(pivot - sum); + diag = mempool_sqrt_q32s(pivot - sum, FIXED_POINT); in = FIX_DIV(in, diag); sum_r = 0; diff --git a/software/kernels/baremetal/mempool_sqrt_q32s.h b/software/kernels/baremetal/mempool_sqrt_q32s.h index 3c5883828..c41bc31ed 100644 --- a/software/kernels/baremetal/mempool_sqrt_q32s.h +++ b/software/kernels/baremetal/mempool_sqrt_q32s.h @@ -6,7 +6,7 @@ #pragma once -inline int32_t mempool_sqrt_q32s(int32_t number) { +inline int32_t mempool_sqrt_q32s(int32_t number, uint32_t fixed_point) { int32_t res = 1; // register int32_t end = 46341; // smallest integer that is larger than @@ -36,7 +36,7 @@ inline int32_t mempool_sqrt_q32s(int32_t number) { while (start <= end) { asm volatile("srai %[mid2],%[mid2],%[imm];" : [mid2] "+&r"(mid2) - : [imm] "I"(FIXED_POINT) + : [imm] "I"(fixed_point) :); if (mid2 == number) { res = mid; diff --git a/software/runtime/data/data_cholesky_q16.h.tpl b/software/runtime/data/data_cholesky_q16.h.tpl new file mode 100644 index 000000000..45711c48d --- /dev/null +++ b/software/runtime/data/data_cholesky_q16.h.tpl @@ -0,0 +1,21 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(int16_t) 0X{:04X}, '.format(a&0xffff) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define dim_N (${n_matrix}) +#define N_SAMPLES (${n_samples}) +int16_t l2_GIn[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; +int16_t l2_LOut[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; diff --git a/software/runtime/data/data_cholesky_q16.py b/software/runtime/data/data_cholesky_q16.py new file mode 100644 index 000000000..a77956c4c --- /dev/null +++ b/software/runtime/data/data_cholesky_q16.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 cholesky. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from scipy.linalg import solve_triangular +from mako.template import Template + + +################## +# compute_result # +################## + + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_cholesky_q16.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--dimension", + type=int, + required=False, + default=4, + help='Matrix dimension' + ) + parser.add_argument( + "-s", + "--num_samples", + type=int, + required=False, + default=256, + help='Number samples' + ) + + args = parser.parse_args() + n_matrix = args.dimension + n_samples = args.num_samples + + vector_G = [] + vector_L = [] + for k in range(n_samples): + # Create hermitian matrix + H = (np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int16) + 1.j * \ + np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int16)).reshape(n_matrix, n_matrix) + # Matrix to be inverted + H_h = (np.asmatrix(H).H) + # H_H = np.asmatrix(H).H + G = H_h * H + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Reshape + G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C') + L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C') + G = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.int16).flatten() + # Output vectors + vector_G.append(G) + vector_L.append(L) + + vector_G = np.concatenate(vector_G, axis=0) + vector_L = np.concatenate(vector_L, axis=0) + + kwargs = {'name': 'data_cholesky_q16', + 'G': vector_G, + 'L': vector_L, + 'n_matrix': n_matrix, + 'n_samples': n_samples} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/data_cholesky_q32.h.tpl b/software/runtime/data/data_cholesky_q32.h.tpl new file mode 100644 index 000000000..560da3d76 --- /dev/null +++ b/software/runtime/data/data_cholesky_q32.h.tpl @@ -0,0 +1,22 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(int32_t) 0X{:08X}, '.format(a&0xffffffff) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N (${n_matrix}) + +int32_t l2_GIn[${n_matrix * n_matrix}] = ${array_to_cstr(G)}; +int32_t l2_LOut[${n_matrix * n_matrix}] = ${array_to_cstr(L)}; +int32_t l2_y[${n_matrix}] = ${array_to_cstr(y)}; diff --git a/software/runtime/data/data_cholesky_q32.py b/software/runtime/data/data_cholesky_q32.py new file mode 100644 index 000000000..c2061b1b1 --- /dev/null +++ b/software/runtime/data/data_cholesky_q32.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 cholesky. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from scipy.linalg import solve_triangular +from mako.template import Template + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_cholesky_q32.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--dimension", + type=int, + required=False, + default=4, + help='Matrix dimension' + ) + + args = parser.parse_args() + n_matrix = args.dimension + + # Create hermitian matrix + H = np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int32) + y = np.random.randint(-2**(15), 2**(15) - 1, n_matrix, dtype=np.int32) + + H = H.reshape(n_matrix, n_matrix) + G = H * np.asmatrix(H).T + # Cholesky decomposition + L = np.linalg.cholesky(G) + + # Linear system solution + y = solve_triangular(L, y, lower=True) + x = solve_triangular(np.asmatrix(L).H, y) + + # Reshape + G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C').astype(np.int32) + L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C').astype(np.int32) + y = np.reshape(np.asarray(y), (n_matrix), order='C').astype(np.int32) + + + kwargs = {'name': 'data_cholesky_q32', + 'G': G, + 'L': L, + 'y': y, + 'n_matrix': n_matrix} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/data_mimo_mmse_q16.h.tpl b/software/runtime/data/data_mimo_mmse_q16.h.tpl new file mode 100644 index 000000000..ca60447a0 --- /dev/null +++ b/software/runtime/data/data_mimo_mmse_q16.h.tpl @@ -0,0 +1,34 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(int16_t) 0X{:04X}, '.format(a&0xffff) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) +#define N_ITR (${N_itr}) + +// Inputs + +int16_t l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; + +int16_t l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; + +int16_t l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; + +int16_t l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; + +// Outputs + +int16_t l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_q16.py b/software/runtime/data/data_mimo_mmse_q16.py new file mode 100644 index 000000000..cfdd73311 --- /dev/null +++ b/software/runtime/data/data_mimo_mmse_q16.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 mmse. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def gen_input_data(N_rx, N_tx): + + # Create channel matrix + H = np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, dtype=np.int16) + 1.j * \ + np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, dtype=np.int16) + H = H.reshape(N_rx, N_tx) + # Create input vector + y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) + 1.j * \ + np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) + # Generate noise variance + sigma = np.random.randint(-2**(15), 2**(15) - 1, N_tx, dtype=np.int16) + + # Matrix to be inverted in MMSE estimator + H_h = (np.asmatrix(H).H) + + # Hermitian + G = H_h * H + np.diag(sigma) + # Matrix vector product + y1 = np.transpose(np.dot(H_h, y)) + + # Cholesky decomposition + #L = np.linalg.cholesky(G) + L = G + # Linear system solution + y2 = solve_triangular(L, y1, lower=True) + x = solve_triangular(np.asmatrix(L).H, y2) + + sigma = sigma + 0j + H = np.reshape(np.asarray(H), (N_rx*N_tx), order='C') + G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') + L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') + sigma = np.column_stack((sigma.real, sigma.imag)).astype(np.int16).flatten() + H = np.column_stack((H.real, H.imag)).astype(np.int16).flatten() + G = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.int16).flatten() + y = np.column_stack((y.real, y.imag)).astype(np.int16).flatten() + x = np.column_stack((x.real, x.imag)).astype(np.int16).flatten() + + return sigma, H, G, y, x + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_mimo_mmse_q16.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + parser.add_argument( + "-k", + "--iterations", + type=int, + required=False, + default=1, + help='Iterations.' + ) + + args = parser.parse_args() + N_tx = args.transmitters + N_rx = args.receivers + itr = args.iterations + + sigma = np.zeros([itr, 2*N_tx], dtype=np.int16) + H_RI = np.zeros([itr, 2*N_tx*N_rx], dtype=np.int16) + G_RI = np.zeros([itr, 2*N_tx*N_tx], dtype=np.int16) + y_RI = np.zeros([itr, 2*N_rx], dtype=np.int16) + x_RI = np.zeros([itr, 2*N_tx], dtype=np.int16) + for k in range(itr): + [ sigma[k, :], + H_RI[k, :], + G_RI[k, :], + y_RI[k, :], + x_RI[k, :] ] = gen_input_data(N_rx, N_tx) + + sigma = np.reshape(sigma, (2*N_tx*itr)).astype(np.int16) + H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)).astype(np.int16) + G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)).astype(np.int16) + y_RI = np.reshape(y_RI, (2*N_rx*itr)).astype(np.int16) + x_RI = np.reshape(x_RI, (2*N_tx*itr)).astype(np.int16) + + kwargs = {'name': 'data_mimo_mmse_q16', + 'H': H_RI, + 'G': G_RI, + 'sigma': sigma, + 'y': y_RI, + 'x': x_RI, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': itr} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/kernel/mempool_checks.h b/software/runtime/kernel/mempool_checks.h new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/kernel/mempool_chest_q16p.h b/software/runtime/kernel/mempool_chest_q16p.h new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/kernel/mempool_chest_q16s.h b/software/runtime/kernel/mempool_chest_q16s.h new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/kernel/mempool_cholesky_q16s.h b/software/runtime/kernel/mempool_cholesky_q16s.h new file mode 100644 index 000000000..65f8e0b42 --- /dev/null +++ b/software/runtime/kernel/mempool_cholesky_q16s.h @@ -0,0 +1,88 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#include "kernel/mempool_sqrt_q32s.h" +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +/** VECTORIZED CODE + @brief Cholesky decomposition with Crout algorithm. + Output data is folded to the core's local memory. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ +void mempool_cholesky_q16vecs(int16_t *pSrc, int16_t *pL, const uint32_t n) { + + uint32_t i, j, k; + int32_t sum; // Sum for elements on diagonal (real) + int32_t diag; // Diagonal element (real) + int32_t as, bs; // Sum for elements on rows (complex) + int32_t ap, bp; // Pivot elements (complex) + + v2s ab = (v2s){0, 0}; + v2s cd = (v2s){0, 0}; + v2s ndc = (v2s){0, 0}; + v2s res = (v2s){0, 0}; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + sum = 0; + diag = (int32_t)pSrc[2 * (j * n + j)]; + for (k = 0; k < j; k++) { + ab = *(v2s *)&pL[2 * (j * n + k)]; + asm volatile("pv.dotsp.h %[sum], %[ab], %[ab];" + "srai %[sum], %[sum], 0x8;" + "p.clip %[sum], %[sum], 0x16;" + : [sum] "+&r"(sum) + : [ab] "r"(ab) + :); + } + pL[2U * (j * n + j)] = (int16_t)mempool_sqrt_q32s(diag - sum, 16); + + // Elements on rows + for (i = j + 1; i < n; i++) { + ap = (int32_t)pSrc[2 * (i * n + j)]; // Pivot + bp = (int32_t)pSrc[2 * (i * n + j) + 1]; // Pivot + diag = (int32_t)pL[2 * (j * n + j)]; // Diag + + as = 0; + bs = 0; + // Sum -> s = s + (ac + bd) + j*(bc - ad) + for (k = 0; k < j; k++) { + ab = *(v2s *)&pL[2U * (i * n + k)]; + cd = *(v2s *)&pL[2U * (j * n + k)]; + const uint32_t shuffle_mask = 0x00020003; + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "pv.dotsp.h %[as], %[ab], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "pv.sub.h %[ndc], %[zero], %[ndc];" + "pv.dotsp.h %[bs], %[ab], %[ndc];" + "srai %[as], %[as], 0x8;" + "srai %[bs], %[bs], 0x8;" + "p.clip %[bs], %[bs], 0x16;" + "p.clip %[as], %[as], 0x16;" + : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) + : [ab] "r"(ab), [cd] "r"(cd), [shuffle_mask] "r"(shuffle_mask), + [zero] "r"((v2s){0, 0}) + :); + } + asm volatile("sub %[ap], %[ap], %[as];" + "sub %[bp], %[bp], %[bs];" + "div %[ap], %[ap], %[diag];" + "div %[bp], %[bp], %[diag];" + "pv.pack %[res], %[ap], %[bp];" + : [ap] "+&r"(ap), [bp] "+&r"(bp), [res] "+&r"(res) + : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) + :); + (*(v2s *)&pL[2 * (i * n + j)]) = res; + } + } + return; +} diff --git a/software/runtime/kernel/mempool_linearsolver_q16s.h b/software/runtime/kernel/mempool_linearsolver_q16s.h new file mode 100644 index 000000000..4c3c2ad4a --- /dev/null +++ b/software/runtime/kernel/mempool_linearsolver_q16s.h @@ -0,0 +1,129 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +/** + @brief Single-core solution of lower triangular system + @param[in] pL input triangular matrix + @param[in] y known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + +void mempool_Ltrisol_q16vecs(int16_t *pL, int16_t *y, int16_t *x, + const uint32_t n) { + + uint32_t i, j; + int32_t as, bs, diag; + v2s ab, cd; + v2s res = (v2s){0, 0}; + v2s ndc = (v2s){0, 0}; + + // Solve for each variable x[i] in loop + for (i = 0; i < n; i++) { + // Pre-load the diagonal element + diag = pL[2U * (i * n + i)]; + // Initialize the sums + as = 0; + bs = 0; + // Use the previously solved variables to compute the sum + for (j = 0; j < i; j++) { + ab = *(v2s *)&pL[2U * (i * n + j)]; + cd = *(v2s *)&x[2U * j]; + const uint32_t shuffle_mask = 0x00020003; + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "pv.dotsp.h %[as], %[ab], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "pv.sub.h %[ndc], %[zero], %[ndc];" + "pv.dotsp.h %[bs], %[ab], %[ndc];" + "srai %[as], %[as], 0x8;" + "srai %[bs], %[bs], 0x8;" + "p.clip %[bs], %[bs], 0x16;" + "p.clip %[as], %[as], 0x16;" + : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) + : [ab] "r"(ab), [cd] "r"(cd), [shuffle_mask] "r"(shuffle_mask), + [zero] "r"((v2s){0, 0}) + :); + } + // Subtract the sum from y[i] and divide by the diagonal element L[i][i] + as = as - (int32_t)y[2U * i]; + bs = bs - (int32_t)y[2U * i + 1]; + asm volatile("div %[as], %[as], %[diag];" + "div %[bs], %[bs], %[diag];" + "pv.pack %[res], %[as], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs), [res] "+&r"(res) + : [diag] "r"(diag) + :); + (*(v2s *)&x[2U * i]) = res; + } + + return; +} + +/** + @brief Single-core solution of upper triangular system + (from transposed lower triangular system) + @param[in] pL input triangular matrix to be transposed + @param[in] y known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + +void mempool_Lttrisol_q16vecs(int16_t *pL, int16_t *y, int16_t *x, + const uint32_t n) { + + uint32_t i, j; + int32_t as, bs, diag; + v2s ab, cd; + v2s res = (v2s){0, 0}; + v2s ndc = (v2s){0, 0}; + + // Solve for each variable x[i] in loop + for (i = 0; i < n; i++) { + // Pre-load the diagonal element + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + // Initialize the sums + as = 0; + bs = 0; + // Use the previously solved variables to compute the sum + for (j = 0; j < i; j++) { + ab = *(v2s *)&pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + cd = *(v2s *)&x[2U * (n - 1 - j)]; + const uint32_t shuffle_mask = 0x00020003; + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "pv.dotsp.h %[as], %[ab], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "pv.sub.h %[ndc], %[zero], %[ndc];" + "pv.dotsp.h %[bs], %[ab], %[ndc];" + "srai %[as], %[as], 0x8;" + "srai %[bs], %[bs], 0x8;" + "p.clip %[bs], %[bs], 0x16;" + "p.clip %[as], %[as], 0x16;" + : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) + : [ab] "r"(ab), [cd] "r"(cd), [shuffle_mask] "r"(shuffle_mask), + [zero] "r"((v2s){0, 0}) + :); + } + // Subtract the sum from y[i] and divide by the diagonal element L[i][i] + as = as - (int32_t)y[2 * (n - i - 1)]; + bs = bs - (int32_t)y[2 * (n - i - 1) + 1]; + asm volatile("div %[as], %[as], %[diag];" + "div %[bs], %[bs], %[diag];" + "pv.pack %[res], %[as], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs), [res] "+&r"(res) + : [diag] "r"(diag) + :); + (*(v2s *)&x[2U * (n - i - 1)]) = res; + } + + return; +} diff --git a/software/runtime/kernel/mempool_mimo_mmse_q16s.h b/software/runtime/kernel/mempool_mimo_mmse_q16s.h new file mode 100644 index 000000000..931d2c800 --- /dev/null +++ b/software/runtime/kernel/mempool_mimo_mmse_q16s.h @@ -0,0 +1,259 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich +// Author: Aofeng Aoshen, ETH Zurich + +#pragma once +#define N_BANKS (NUM_CORES * BANKING_FACTOR) + +/** VECTORIZED CODE + @brief Computes the Hermitian matrix G = (H'*H + pS^2I). + @param[in] pH points to input matrix + @param[in] pG points to output matrix + @param[in] pS points to the noise vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @param[in] zf controls if the zero forcing is used + @return none +*/ +void mempool_hermitian_q16vecs(v2s *pH, v2s *pG, v2s *pS, const uint32_t n_rx, + const uint32_t n_tx) { + + uint32_t i, j, k; + v2s ab; + v2s cd0, cd1, cd2, cd3; + int32_t as0, as1, as2, as3; + int32_t bs0, bs1, bs2, bs3; + const uint32_t shuffle_mask = 0x00020003; + + for (i = 0; i < n_tx; i++) { + j = 0; + do { + // Initialize the real part of sums + as0 = 0; + as1 = 0; + as2 = 0; + as3 = 0; + // Initialize the imag part of sums + bs0 = 0; + bs1 = 0; + bs2 = 0; + bs3 = 0; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + ab = pH[k * n_tx + i]; + // inputs from matrix H + cd0 = pH[k * n_tx + j]; + cd1 = pH[k * n_tx + j + 1U]; + cd2 = pH[k * n_tx + j + 2U]; + cd3 = pH[k * n_tx + j + 3U]; + + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + b * d + "pv.dotsp.h %[as0], %[ab], %[cd0];" + "pv.dotsp.h %[as1], %[ab], %[cd1];" + "pv.dotsp.h %[as2], %[ab], %[cd2];" + "pv.dotsp.h %[as3], %[ab], %[cd3];" + // + "pv.shuffle2.h %[cd0], %[cd0], %[shuffle_mask];" + "pv.shuffle2.h %[cd1], %[cd1], %[shuffle_mask];" + "pv.shuffle2.h %[cd2], %[cd2], %[shuffle_mask];" + "pv.shuffle2.h %[cd3], %[cd3], %[shuffle_mask];" + // + "pv.sub.h %[cd0], %[zero], %[cd0];" + "pv.sub.h %[cd1], %[zero], %[cd1];" + "pv.sub.h %[cd2], %[zero], %[cd2];" + "pv.sub.h %[cd3], %[zero], %[cd3];" + // a * d - b * c + "pv.dotsp.h %[bs0], %[ab], %[cd0];" + "pv.dotsp.h %[bs1], %[ab], %[cd1];" + "pv.dotsp.h %[bs2], %[ab], %[cd2];" + "pv.dotsp.h %[bs3], %[ab], %[cd3];" + // Rescale after multiplication + "srai %[as0], %[as0], 0x8;" + "srai %[as1], %[as1], 0x8;" + "srai %[as2], %[as2], 0x8;" + "srai %[as3], %[as3], 0x8;" + "srai %[bs0], %[bs0], 0x8;" + "srai %[bs1], %[bs1], 0x8;" + "srai %[bs2], %[bs2], 0x8;" + "srai %[bs3], %[bs3], 0x8;" + // Clip to 16b + "p.clip %[as0], %[as0], 0x16;" + "p.clip %[as1], %[as1], 0x16;" + "p.clip %[as2], %[as2], 0x16;" + "p.clip %[as3], %[as3], 0x16;" + "p.clip %[bs0], %[bs0], 0x16;" + "p.clip %[bs1], %[bs1], 0x16;" + "p.clip %[bs2], %[bs2], 0x16;" + "p.clip %[bs3], %[bs3], 0x16;" + : [cd0] "+&r"(cd0), [cd1] "+&r"(cd1), [cd2] "+&r"(cd2), + [cd3] "+&r"(cd3), [as0] "+&r"(as0), [as1] "+&r"(as1), + [as2] "+&r"(as2), [as3] "+&r"(as3), [bs0] "+&r"(bs0), + [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [ab] "r"(ab), [shuffle_mask] "r"(shuffle_mask), + [zero] "r"((v2s){0, 0}) + :); + } + // Compute diagonal elements + if (i == j) { + asm volatile("add %[as0], %[as0], %[pS];" + : [as0] "+&r"(as0) + : [pS] "r"(pS[2 * i]) + :); + bs0 = 0; + } else if (i == (j + 1U)) { + asm volatile("add %[as1], %[as1], %[pS];" + : [as1] "+&r"(as1) + : [pS] "r"(pS[2 * i]) + :); + bs1 = 0; + } else if (i == (j + 2U)) { + asm volatile("add %[as2], %[as2], %[pS];" + : [as2] "+&r"(as2) + : [pS] "r"(pS[2 * i]) + :); + bs2 = 0; + } else if (i == (j + 3U)) { + asm volatile("add %[as3], %[as3], %[pS];" + : [as3] "+&r"(as3) + : [pS] "r"(pS[2 * i]) + :); + bs3 = 0; + } + // Store + v2s res0, res1, res2, res3; + asm volatile( + "pv.pack %[res0], %[as0], %[bs0];" + "pv.pack %[res1], %[as1], %[bs1];" + "pv.pack %[res2], %[as2], %[bs2];" + "pv.pack %[res3], %[as3], %[bs3];" + : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), + [res3] "=&r"(res3) + : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), + [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) + :); + + pG[(i * n_tx + j)] = res0; + pG[(i * n_tx + j + 1U)] = res1; + pG[(i * n_tx + j + 2U)] = res2; + pG[(i * n_tx + j + 3U)] = res3; + j += 4; + } while (j < n_tx); + } + return; +} + +/** VECTORIZED CODE + @brief Computes the matrix-vector product y = H' * x. + @param[in] pH points to input matrix + @param[in] px points to input vector + @param[in] py points to output vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] folded controls if output is folded + @return none +*/ +void mempool_MVP_conjtransp_q16vecs(v2s *pH, v2s *px, v2s *py, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t folded) { + + uint32_t i, j; + int32_t as0, as1, as2, as3; + int32_t bs0, bs1, bs2, bs3; + int32_t ndc = 0; + v2s ab0, ab1, ab2, ab3; + v2s cd; + const uint32_t shuffle_mask = 0x00020003; + + i = 0; + do { + // Initialize the real part of sums + as0 = 0; + as1 = 0; + as2 = 0; + as3 = 0; + // Initialize the imag part of sums + bs0 = 0; + bs1 = 0; + bs2 = 0; + bs3 = 0; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + ab0 = pH[j * n_tx + i]; + ab1 = pH[j * n_tx + i + 1U]; + ab2 = pH[j * n_tx + i + 2U]; + ab3 = pH[j * n_tx + i + 3U]; + + // inputs from b + cd = px[j]; + + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + b * d + "pv.dotsp.h %[as0], %[ab0], %[cd];" + "pv.dotsp.h %[as1], %[ab1], %[cd];" + "pv.dotsp.h %[as2], %[ab2], %[cd];" + "pv.dotsp.h %[as3], %[ab3], %[cd];" + // + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "pv.sub.h %[ndc], %[zero], %[ndc];" + // a * d - b * c + "pv.dotsp.h %[bs0], %[ab0], %[ndc];" + "pv.dotsp.h %[bs1], %[ab1], %[ndc];" + "pv.dotsp.h %[bs2], %[ab2], %[ndc];" + "pv.dotsp.h %[bs3], %[ab3], %[ndc];" + // Rescale after multiplication + "srai %[as0], %[as0], 0x8;" + "srai %[as1], %[as1], 0x8;" + "srai %[as2], %[as2], 0x8;" + "srai %[as3], %[as3], 0x8;" + "srai %[bs0], %[bs0], 0x8;" + "srai %[bs1], %[bs1], 0x8;" + "srai %[bs2], %[bs2], 0x8;" + "srai %[bs3], %[bs3], 0x8;" + // Clip to 16b + "p.clip %[as0], %[as0], 0x16;" + "p.clip %[as1], %[as1], 0x16;" + "p.clip %[as2], %[as2], 0x16;" + "p.clip %[as3], %[as3], 0x16;" + "p.clip %[bs0], %[bs0], 0x16;" + "p.clip %[bs1], %[bs1], 0x16;" + "p.clip %[bs2], %[bs2], 0x16;" + "p.clip %[bs3], %[bs3], 0x16;" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [ndc] "+&r"(ndc) + : [cd] "r"(cd), [shuffle_mask] "r"(shuffle_mask), [ab0] "r"(ab0), + [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), + [zero] "r"((v2s){0, 0}) + :); + } + if (!folded) { + v2s res0, res1, res2, res3; + asm volatile( + "pv.pack %[res0], %[as0], %[bs0];" + "pv.pack %[res1], %[as1], %[bs1];" + "pv.pack %[res2], %[as2], %[bs2];" + "pv.pack %[res3], %[as3], %[bs3];" + : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), + [res3] "=&r"(res3) + : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), + [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) + :); + // Store + py[i] = res0; + py[i + 1U] = res1; + py[i + 2U] = res2; + py[i + 3U] = res3; + i += 4; + } + + } while (i < n_tx); + return; +} From bd8b10afbaa60b79c3c9a2de4359cfd20be808f5 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 8 Jan 2024 08:35:30 +0100 Subject: [PATCH 18/39] [software] Fix f16 cfft --- software/apps/cfft_radix4_f16/main.c | 63 +++--- software/apps/cfft_radix4_q16/main.c | 0 .../runtime/data/data_cfft_radix4_f16.h.tpl | 2 +- software/runtime/data/data_cfft_radix4_f16.py | 11 +- .../mempool_radix4_cfft_butterfly_f16.h | 190 ++++++++++-------- .../runtime/kernel/mempool_radix4_cfft_f16p.h | 23 +-- 6 files changed, 156 insertions(+), 133 deletions(-) create mode 100644 software/apps/cfft_radix4_q16/main.c diff --git a/software/apps/cfft_radix4_f16/main.c b/software/apps/cfft_radix4_f16/main.c index be9c4bd41..28fcd7871 100644 --- a/software/apps/cfft_radix4_f16/main.c +++ b/software/apps/cfft_radix4_f16/main.c @@ -41,10 +41,11 @@ #define ASM #if !(defined(N_FFT_ROW) && defined(N_FFTs_COL)) -#define N_FFTs_ROW 2 -#define N_FFTs_COL 2 +#define N_FFTs_ROW 1 +#define N_FFTs_COL 1 #endif +#include "kernel/mempool_checks.h" #include "kernel/mempool_radix4_cfft_butterfly_f16.h" #include "kernel/mempool_radix4_cfft_f16p.h" #include "kernel/mempool_radix4_cfft_q16_bitreversal.h" @@ -73,19 +74,27 @@ int main() { // Each FFT is folded over 4 memory rows // Each memory row is 2 * N_BANKS samples for (uint32_t j = 0; j < N_FFTs_ROW; j++) { - dma_memcpy_blocking(l1_pSrc + j * (8 * N_BANKS), l2_pSrc, (N_RSAMPLES * N_FFTs_COL) * sizeof(int32_t)); + dma_memcpy_blocking(l1_pSrc + j * (8 * N_BANKS), l2_pSrc, + (N_RSAMPLES * N_FFTs_COL) * sizeof(int32_t)); } - dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); - dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); + dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); + dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, + 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); } // Initialize the Twiddles folded #ifdef FOLDED_TWIDDLES for (uint32_t j = 0; j < N_FFTs_COL; j++) { uint32_t N_WORDS_COL = (N_CSAMPLES / 4); for (uint32_t i = core_id; i < N_WORDS_COL; i += num_cores) { - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4))] = *(v2h *)&l2_twiddleCoef_f16[2U * i]; - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + 1 * N_BANKS)] = *(v2h *)&l2_twiddleCoef_f16[2U * (i * 2U)]; - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + 2 * N_BANKS)] = *(v2h *)&l2_twiddleCoef_f16[2U * (i * 3U)]; + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4))] = + *(v2h *)&l2_twiddleCoef_f16[2U * i]; + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + + 1 * N_BANKS)] = + *(v2h *)&l2_twiddleCoef_f16[2U * (i * 2U)]; + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + + 2 * N_BANKS)] = + *(v2h *)&l2_twiddleCoef_f16[2U * (i * 3U)]; } } #endif @@ -99,16 +108,20 @@ int main() { /////////////////////////////////////////////////////////////////////////////////////////////////// /* MULTI-CORE FOLDED */ #ifdef FOLDED - __fp16 *pRes; + __fp16 *pRes = NULL; if (core_id < (N_CSAMPLES / 16)) { mempool_start_benchmark(); #ifdef FOLDED_TWIDDLES - mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, l1_twiddleCoef_f16_src, l1_twiddleCoef_f16_dst, (N_CSAMPLES / 16)); + mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, + l1_twiddleCoef_f16_src, + l1_twiddleCoef_f16_dst, (N_CSAMPLES / 16)); #else - mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, l1_twiddleCoef_f16_src, (N_CSAMPLES / 16)); + mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, + l1_twiddleCoef_f16_src, (N_CSAMPLES / 16)); #endif pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; - mempool_bitrevtable_q16p_xpulpimg((uint16_t *)pRes, BITREVINDEXTABLE_LENGTH, l1_BitRevIndexTable, (N_CSAMPLES / 16)); + mempool_bitrevtable_q16p_xpulpimg((uint16_t *)pRes, BITREVINDEXTABLE_LENGTH, + l1_BitRevIndexTable, (N_CSAMPLES / 16)); mempool_stop_benchmark(); } mempool_barrier(num_cores); @@ -117,14 +130,17 @@ int main() { /////////////////////////////////////////////////////////////////////////////////////////////////// /* MULTI-CORE SCHEDULED */ #ifdef SCHEDULED - __fp16 *pRes; + __fp16 *pRes = NULL; if (core_id < N_FFTs_COL * (N_CSAMPLES / 16)) { mempool_start_benchmark(); uint32_t col_fftLen = N_CSAMPLES / 4; uint32_t col_id = core_id / (N_CSAMPLES / 16); // Distribute FFTs over columns if (col_id < N_FFTs_COL) { - mempool_radix4_cfft_f16p_scheduler(l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src + 2 * col_id * col_fftLen, l1_pCoef_dst + 2 * col_id * col_fftLen, l1_pRevT16, BITREVINDEXTABLE_FIXED_TABLE_LENGTH, 1, (N_CSAMPLES / 16)); + mempool_radix4_cfft_f16p_scheduler( + l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src + 2 * col_id * col_fftLen, + l1_pCoef_dst + 2 * col_id * col_fftLen, l1_pRevT16, + BITREVINDEXTABLE_FIXED_TABLE_LENGTH, 1, (N_CSAMPLES / 16)); } pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; mempool_log_partial_barrier(2, core_id, N_FFTs_COL * (N_CSAMPLES / 16)); @@ -135,24 +151,7 @@ int main() { /////////////////////////////////////////////////////////////////////////////////////////////////// /* CHECK */ - if (core_id == 0) { - printf("Done!\n"); - for (uint32_t i = 0; i < 2 * N_CSAMPLES; i++) { - __fp16 exp = l2_pRes[i]; - __fp16 res = pRes[i]; - __fp16 dif; - float tol = (__fp16)0.05f; - float dif_f32; - asm volatile("fsub.h %[dif], %[res], %[exp];" - "fcvt.h.s %[dif_f32], %[dif];" - : [dif] "+&r"(dif), [dif_f32] "+&r"(dif_f32) - : [res] "r"(res), [exp] "r"(exp) - :); - if ((dif_f32 > tol) || (dif_f32 < (-tol))) { - printf("%d %x %x\n", i, *(int32_t *)&exp, *(int32_t *)&res); - } - } - } + mempool_check_f16(pRes, l2_pRes, 2 * N_CSAMPLES, 0.5f, 0); mempool_barrier(num_cores); return 0; diff --git a/software/apps/cfft_radix4_q16/main.c b/software/apps/cfft_radix4_q16/main.c new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/data/data_cfft_radix4_f16.h.tpl b/software/runtime/data/data_cfft_radix4_f16.h.tpl index 825780e1a..883049a44 100644 --- a/software/runtime/data/data_cfft_radix4_f16.h.tpl +++ b/software/runtime/data/data_cfft_radix4_f16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '(__fp16){:0.5}f, '.format(a) + out += '(__fp16){:0.4}f, '.format(a) i += 1 if i % 8 == 0: out += '\n' diff --git a/software/runtime/data/data_cfft_radix4_f16.py b/software/runtime/data/data_cfft_radix4_f16.py index f927a8d5d..ca90265c8 100644 --- a/software/runtime/data/data_cfft_radix4_f16.py +++ b/software/runtime/data/data_cfft_radix4_f16.py @@ -93,16 +93,17 @@ def main(): args = parser.parse_args() Len = args.dimension - src = np.random.rand(Len) + 1.j * np.random.rand(Len) + src = np.random.rand(Len).astype(np.float16) + src = src + 1.j * np.random.rand(Len).astype(np.float16) dst = np.fft.fft(src) - src = np.column_stack((src.real, src.imag)).astype(np.float16).flatten() - dst = np.column_stack((dst.real, dst.imag)).astype(np.float16).flatten() + src = np.column_stack((src.imag, src.real)).astype(np.float16).flatten() + dst = np.column_stack((dst.imag, dst.real)).astype(np.float16).flatten() Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(Len, 2))) twi = np.zeros(int(2 * 3 * Len / 4), np.float16) for i in range(0, int(3 * Len / 4)): - twi[2 * i] = np.cos(i * 2 * np.pi / Len).astype(np.float16) - twi[2 * i + 1] = np.sin(i * 2 * np.pi / Len).astype(np.float16) + twi[2 * i] = np.sin(i * 2 * np.pi / Len).astype(np.float16) + twi[2 * i + 1] = np.cos(i * 2 * np.pi / Len).astype(np.float16) kwargs = {'name': 'data_cfft_radix4_f16', 'src': src, diff --git a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h b/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h index fbb6964ac..3e7a28245 100644 --- a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h +++ b/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h @@ -29,7 +29,6 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, __fp16 t0, t1, t2, t3; uint32_t i1, i2, i3; uint32_t i0_store, i1_store, i2_store, i3_store; - float s0 = 0.0f, s1 = 0.0f, s2 = 0.0f, s3 = 0.0f, s4 = 0.0f, s5 = 0.0f; v2h A, B, C, D, E, F, G, H; // LOAD INDEXES @@ -60,32 +59,40 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, i3_store = i3; #endif - /* Read yb (real), xb(imag) input */ + float s0 = 0.0f; + float s1 = 0.0f; + float s2 = 0.0f; + float s3 = 0.0f; + float s4 = 0.0f; + float s5 = 0.0f; + /* Read xb (real), yb(imag) input */ B = *(v2h *)&pIn[i1 * 2U]; - /* Read yd (real), xd(imag) input */ + /* Read xd (real), yd(imag) input */ D = *(v2h *)&pIn[i3 * 2U]; - /* Read ya (real), xa (imag) input */ + /* Read xa (real), ya(imag) input */ A = *(v2h *)&pIn[i0 * 2U]; - /* Read yc (real), xc(imag) input */ + /* Read xc (real), yc(imag) input */ C = *(v2h *)&pIn[i2 * 2U]; asm volatile( - // xb - xd, yb - yd - "vfsub.h %[H],%[B],%[D];" - // xb + xd, yd + yd + // G = (xb + xd), (yb + yd) "vfadd.h %[G],%[B],%[D];" - // xa + xc, ya + yc + // H = (xb - xd), (yb - yd) + "vfsub.h %[H],%[B],%[D];" + // E = (xa + xc), (ya + yc) "vfadd.h %[E],%[A],%[C];" - "pv.extract.h %[t0],%[H],0;" // yb - yd - "pv.extract.h %[t1],%[H],1;" // xb - xd - // xa - xc, ya - yc + // F = (xa - xc), (ya - yc) "vfsub.h %[F],%[A],%[C];" + // C = (yb - yd), (xd - xb) + // D = (yd - yb), (xb - xd) + "pv.extract.h %[t0],%[H],0;" // yb - yd + "pv.extract.h %[t1],%[H],1;" // xb - xd "xor %[t2],%[t0],%[neg_mask];" // yd - yb "xor %[t3],%[t1],%[neg_mask];" // xd - xb - "pv.pack.h %[D],%[t2],%[t1];" // yd - yb, xb - xd - "pv.pack.h %[C],%[t0],%[t3];" // yb - yd, xd - xb + "pv.pack %[C],%[t0],%[t3];" + "pv.pack %[D],%[t2],%[t1];" - // xa + xc + xb + xd, ya + yb + yc + yd + // xa + xb + xc + xd, ya + yc + yb + yd "vfadd.h %[A],%[E],%[G];" // xa + xc - xb - xd, ya + yc - yb - yd "vfsub.h %[B],%[E],%[G];" @@ -94,30 +101,28 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, // xa - xc + yd - yb, ya - yc + xb - xd "vfadd.h %[D],%[F],%[D];" - // Co2(xa + xc - xb - xd), Si2(ya + yc - yb - yd) + // s0 = Co2 * (xa + xc - xb - xd) + Si2 * (ya + yc - yb - yd) + // s1 = Si2 * (xa + xc - xb - xd) - Co2 * (ya + yc - yb - yd) "vfdotpex.s.h %[s0],%[CoSi2],%[B];" - //-Si2(xa + xc - xb - xd), Co2(ya + yc - yb - yd) "vfdotpex.s.h %[s1],%[C2],%[B];" - - // Co1(xa - xc + yd - yb), Si1(ya - yc + xb - xd) + // s2 = Co1 * (xa - xc + yd - yb) + Si1 * (ya - yc + xb - xd) + // s3 = Si1 * (xa - xc + yd - yb) - Co1 * (ya - yc + xb - xd) "vfdotpex.s.h %[s2],%[CoSi1],%[D];" - //-Si1(xa - xc + yd - yb), Co1(ya - yc + xb - xd) "vfdotpex.s.h %[s3],%[C1],%[D];" - - // Co3(xa - xc + yb - yd), Si3(ya - yc + xd - xb) + // s4 = Co3 * (xa - xc + yb - yd) + Si3 * (ya - yc + xd - xb) + // s5 = Si3 * (xa - xc + yb - yd) - Co3 * (ya - yc + xd - xb) "vfdotpex.s.h %[s4],%[CoSi3],%[C];" - //-Si3(xa - xc + yb - yd), Co3(ya - yc + xd - xb) "vfdotpex.s.h %[s5],%[C3],%[C];" // xb', yb' - "vfcpka.h.s %[B], %[s0], %[s1];" + "vfcpka.h.s %[B], %[s1], %[s0];" // xc', yc' - "vfcpka.h.s %[C], %[s2], %[s3];" + "vfcpka.h.s %[C], %[s3], %[s2];" // xd', yd' - "vfcpka.h.s %[D], %[s4], %[s5];" + "vfcpka.h.s %[D], %[s5], %[s4];" : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), - [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "=&r"(t0), - [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [s0] "=&r"(s0), + [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "+&r"(t0), + [t1] "+&r"(t1), [t2] "+&r"(t2), [t3] "+&r"(t3), [s0] "=&r"(s0), [s1] "=&r"(s1), [s2] "=&r"(s2), [s3] "=&r"(s3), [s4] "=&r"(s4), [s5] "=&r"(s5) : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), @@ -125,8 +130,8 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, :); *((v2h *)&pOut[i0_store * 2U]) = A; *((v2h *)&pOut[i1_store * 2U]) = B; - *((v2h *)&pOut[i2_store * 2U]) = D; - *((v2h *)&pOut[i3_store * 2U]) = C; + *((v2h *)&pOut[i2_store * 2U]) = C; + *((v2h *)&pOut[i3_store * 2U]) = D; } /** @@ -152,7 +157,6 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, __fp16 t0, t1, t2, t3; uint32_t i1, i2, i3; uint32_t i0_store, i1_store, i2_store, i3_store; - float s0 = 0.0f, s1 = 0.0f, s2 = 0.0f, s3 = 0.0f, s4 = 0.0f, s5 = 0.0f; v2h A, B, C, D, E, F, G, H; // LOAD INDEXES @@ -186,32 +190,40 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, i3_store = i3; #endif - /* Read yb (real), xb(imag) input */ + float s0 = 0.0f; + float s1 = 0.0f; + float s2 = 0.0f; + float s3 = 0.0f; + float s4 = 0.0f; + float s5 = 0.0f; + /* Read xb (real), yb(imag) input */ B = *(v2h *)&pIn[i1 * 2U]; - /* Read yd (real), xd(imag) input */ + /* Read xd (real), yd(imag) input */ D = *(v2h *)&pIn[i3 * 2U]; - /* Read ya (real), xa (imag) input */ + /* Read xa (real), ya(imag) input */ A = *(v2h *)&pIn[i0 * 2U]; - /* Read yc (real), xc(imag) input */ + /* Read xc (real), yc(imag) input */ C = *(v2h *)&pIn[i2 * 2U]; asm volatile( - // xb - xd, yb - yd - "vfsub.h %[H],%[B],%[D];" - // xb + xd, yd + yd + // G = (xb + xd), (yb + yd) "vfadd.h %[G],%[B],%[D];" - // xa + xc, ya + yc + // H = (xb - xd), (yb - yd) + "vfsub.h %[H],%[B],%[D];" + // E = (xa + xc), (ya + yc) "vfadd.h %[E],%[A],%[C];" - "pv.extract.h %[t0],%[H],1;" // yb - yd - "pv.extract.h %[t1],%[H],0;" // xb - xd - // xa - xc, ya - yc + // F = (xa - xc), (ya - yc) "vfsub.h %[F],%[A],%[C];" + // C = (yb - yd), (xd - xb) + // D = (yd - yb), (xb - xd) + "pv.extract.h %[t0],%[H],0;" // yb - yd + "pv.extract.h %[t1],%[H],1;" // xb - xd "xor %[t2],%[t0],%[neg_mask];" // yd - yb "xor %[t3],%[t1],%[neg_mask];" // xd - xb - "pv.pack.h %[D],%[t2],%[t1];" // yd - yb, xb - xd - "pv.pack.h %[C],%[t0],%[t3];" // yb - yd, xd - xb + "pv.pack %[C],%[t0],%[t3];" + "pv.pack %[D],%[t2],%[t1];" - // xa + xc + xb + xd, ya + yb + yc + yd + // xa + xb + xc + xd, ya + yc + yb + yd "vfadd.h %[A],%[E],%[G];" // xa + xc - xb - xd, ya + yc - yb - yd "vfsub.h %[B],%[E],%[G];" @@ -220,30 +232,28 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, // xa - xc + yd - yb, ya - yc + xb - xd "vfadd.h %[D],%[F],%[D];" - // Co2(xa + xc - xb - xd), Si2(ya + yc - yb - yd) + // s0 = Co2 * (xa + xc - xb - xd) + Si2 * (ya + yc - yb - yd) + // s1 = Si2 * (xa + xc - xb - xd) - Co2 * (ya + yc - yb - yd) "vfdotpex.s.h %[s0],%[CoSi2],%[B];" - //-Si2(xa + xc - xb - xd), Co2(ya + yc - yb - yd) "vfdotpex.s.h %[s1],%[C2],%[B];" - - // Co1(xa - xc + yd - yb), Si1(ya - yc + xb - xd) + // s2 = Co1 * (xa - xc + yd - yb) + Si1 * (ya - yc + xb - xd) + // s3 = Si1 * (xa - xc + yd - yb) - Co1 * (ya - yc + xb - xd) "vfdotpex.s.h %[s2],%[CoSi1],%[D];" - //-Si1(xa - xc + yd - yb), Co1(ya - yc + xb - xd) "vfdotpex.s.h %[s3],%[C1],%[D];" - - // Co3(xa - xc + yb - yd), Si3(ya - yc + xd - xb) + // s4 = Co3 * (xa - xc + yb - yd) + Si3 * (ya - yc + xd - xb) + // s5 = Si3 * (xa - xc + yb - yd) - Co3 * (ya - yc + xd - xb) "vfdotpex.s.h %[s4],%[CoSi3],%[C];" - //-Si3(xa - xc + yb - yd), Co3(ya - yc + xd - xb) "vfdotpex.s.h %[s5],%[C3],%[C];" // xb', yb' - "vfcpka.h.s %[B], %[s0], %[s1];" + "vfcpka.h.s %[B], %[s1], %[s0];" // xc', yc' - "vfcpka.h.s %[C], %[s2], %[s3];" + "vfcpka.h.s %[C], %[s3], %[s2];" // xd', yd' - "vfcpka.h.s %[D], %[s4], %[s5];" + "vfcpka.h.s %[D], %[s5], %[s4];" : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), - [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "=&r"(t0), - [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [s0] "=&r"(s0), + [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "+&r"(t0), + [t1] "+&r"(t1), [t2] "+&r"(t2), [t3] "+&r"(t3), [s0] "=&r"(s0), [s1] "=&r"(s1), [s2] "=&r"(s2), [s3] "=&r"(s3), [s4] "=&r"(s4), [s5] "=&r"(s5) : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), @@ -252,8 +262,8 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, *((v2h *)&pOut[i0_store * 2U]) = A; *((v2h *)&pOut[i1_store * 2U]) = B; - *((v2h *)&pOut[i2_store * 2U]) = D; - *((v2h *)&pOut[i3_store * 2U]) = C; + *((v2h *)&pOut[i2_store * 2U]) = C; + *((v2h *)&pOut[i3_store * 2U]) = D; } /** @@ -301,34 +311,48 @@ static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, i3_store = i3; #endif - /* Read yb (real), xb(imag) input */ + /* Read xb (imag), yb(real) input */ B = *(v2h *)&pIn[i1 * 2U]; - /* Read yd (real), xd(imag) input */ + /* Read xd (imag), yd(real) input */ D = *(v2h *)&pIn[i3 * 2U]; - /* Read ya (real), xa(imag) input */ + /* Read xa (imag), ya(real) input */ A = *(v2h *)&pIn[i0 * 2U]; - /* Read yc (real), xc(imag) input */ + /* Read xc (imag), yc(real) input */ C = *(v2h *)&pIn[i2 * 2U]; __fp16 t2, t3; - asm volatile("vfsub.h %[H],%[B],%[D];" - "vfadd.h %[G],%[B],%[D];" - "vfadd.h %[E],%[A],%[C];" - "vfsub.h %[F],%[A],%[C];" - "pv.extract.h %[t0],%[H],1;" - "pv.extract.h %[t1],%[H],0;" - "xor %[t2],%[t0],%[neg_mask];" - "xor %[t3],%[t1],%[neg_mask];" - "pv.pack.h %[A],%[t2],%[t1];" - "pv.pack.h %[B],%[t0],%[t3];" - "vfadd.h %[H],%[E],%[G];" - "vfsub.h %[E],%[E],%[G];" - "vfadd.h %[A],%[F],%[A];" - "vfadd.h %[B],%[F],%[B];" - : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), - [E] "=&r"(E), [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), - [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3) - : [neg_mask] "r"(0x00008000) - :); + asm volatile( + /* (xb - xd), (yb - yd) */ + "vfsub.h %[H],%[B],%[D];" + /* (xb + xd), (yb + yd) */ + "vfadd.h %[G],%[B],%[D];" + /* (xa + xc), (ya + yc) */ + "vfadd.h %[E],%[A],%[C];" + /* (xa - xc), (ya - yc) */ + "vfsub.h %[F],%[A],%[C];" + + "pv.extract.h %[t0],%[H],0;" // (yb - yd) + "pv.extract.h %[t1],%[H],1;" // (xb - xd) + "xor %[t2],%[t0],%[neg_mask];" // (yd - yb) + "xor %[t3],%[t1],%[neg_mask];" // (xd - xb) + /* (yd - yb), (xb - xd) */ + "pv.pack %[A],%[t2],%[t1];" + /* (yb - yd), (xd - xb) */ + "pv.pack %[B],%[t0],%[t3];" + + /* (xa + xc + xb + xd), (ya + yc + yb + yd) */ + "vfadd.h %[H],%[E],%[G];" + /* (xa + xc - xb - xd), (ya + yc - yb - yd) */ + "vfsub.h %[E],%[E],%[G];" + /* (xa - xc + yd - yb), (ya - yc + xb - xd) */ + "vfadd.h %[A],%[F],%[A];" + /* (xa - xc + yb - yd), (ya - yc + xd - xb) */ + "vfadd.h %[B],%[F],%[B];" + + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), + [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "+&r"(t0), + [t1] "+&r"(t1), [t2] "+&r"(t2), [t3] "+&r"(t3) + : [neg_mask] "r"(0x00008000) + :); *((v2h *)&pOut[i0_store * 2U]) = H; *((v2h *)&pOut[i1_store * 2U]) = E; diff --git a/software/runtime/kernel/mempool_radix4_cfft_f16p.h b/software/runtime/kernel/mempool_radix4_cfft_f16p.h index 2076a108a..8682e6553 100644 --- a/software/runtime/kernel/mempool_radix4_cfft_f16p.h +++ b/software/runtime/kernel/mempool_radix4_cfft_f16p.h @@ -7,6 +7,7 @@ #include "xpulp/builtins_v2.h" #define MIN(x, y) (((x) < (y)) ? (x) : (y)) +// CoSi: (Si, Co) -> C: (Co, -Si) #define SHUFFLE_TWIDDLEFACT \ asm volatile("pv.extract.h %[t1],%[CoSi1],0;" \ "pv.extract.h %[t3],%[CoSi2],0;" \ @@ -14,12 +15,12 @@ "pv.extract.h %[t0],%[CoSi1],1;" \ "pv.extract.h %[t2],%[CoSi2],1;" \ "pv.extract.h %[t4],%[CoSi3],1;" \ - "xor %[t1],%[t1],%[neg_mask];" \ - "xor %[t3],%[t3],%[neg_mask];" \ - "xor %[t5],%[t5],%[neg_mask];" \ - "pv.pack.h %[C1],%[t0],%[t1];" \ - "pv.pack.h %[C2],%[t2],%[t3];" \ - "pv.pack.h %[C3],%[t4],%[t5];" \ + "xor %[t0],%[t0],%[neg_mask];" \ + "xor %[t2],%[t2],%[neg_mask];" \ + "xor %[t4],%[t4],%[neg_mask];" \ + "pv.pack %[C1],%[t1],%[t0];" \ + "pv.pack %[C2],%[t3],%[t2];" \ + "pv.pack %[C3],%[t5],%[t4];" \ : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), [t0] "=&r"(t0), \ [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), \ [t4] "=&r"(t4), [t5] "=&r"(t5) \ @@ -57,8 +58,6 @@ CoSi3 = *(v2h *)&pCoef_src[2U * (ic * 3U)]; #endif - - #ifdef FOLDED_TWIDDLES /** @brief Full FFT butterfly @@ -219,10 +218,10 @@ void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, */ void mempool_radix4_cfft_f16p_scheduler( - __fp16 *pSrc16, __fp16 *pDst16, uint32_t fftLen, - __fp16 *pCoef_src, __fp16 *pCoef_dst, __attribute__((unused)) - uint16_t *pBitRevTable, __attribute__((unused)) uint16_t bitReverseLen, - uint8_t bitReverseFlag, uint32_t nPE) { + __fp16 *pSrc16, __fp16 *pDst16, uint32_t fftLen, __fp16 *pCoef_src, + __fp16 *pCoef_dst, __attribute__((unused)) uint16_t *pBitRevTable, + __attribute__((unused)) uint16_t bitReverseLen, uint8_t bitReverseFlag, + uint32_t nPE) { uint32_t absolute_core_id = mempool_get_core_id(); uint32_t core_id = absolute_core_id % (fftLen >> 4U); From 9786d1a543741ce8ec5813d695c814ef7a5e63de Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 8 Jan 2024 09:02:52 +0100 Subject: [PATCH 19/39] [software] Update python requirements --- python-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/python-requirements.txt b/python-requirements.txt index 09e19ccd7..d0e903cda 100644 --- a/python-requirements.txt +++ b/python-requirements.txt @@ -14,3 +14,4 @@ pandas progressbar2 tabulate sympy +scipy From 18095216bf2eb2761d7c6fb7a519b39a2a920140 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 8 Jan 2024 10:08:24 +0100 Subject: [PATCH 20/39] [software] Adapt data generation scripts to new folder structure --- Makefile | 1 + .../{ => baremetal}/cfft_radix4_f16/main.c | 0 .../apps/{ => baremetal}/chest_f16/main.c | 10 +- .../apps/{ => baremetal}/cholesky_f16/main.c | 9 +- .../apps/{ => baremetal}/cholesky_q16/main.c | 2 +- .../apps/{ => baremetal}/cmatmul_f16/main.c | 6 +- .../apps/{ => baremetal}/mimo_mmse_f16/main.c | 15 +- .../apps/{ => baremetal}/mimo_mmse_f32/main.c | 14 +- .../apps/{ => baremetal}/mimo_mmse_q16/main.c | 0 software/apps/cfft_radix4_q16/main.c | 0 software/apps/chest_q16/main.c | 0 .../data_cfft_radix4_f16.h.tpl} | 17 +- .../data/data_cfft_radix4_f16.py | 0 .../{runtime => }/data/data_chest_f16.h.tpl | 6 +- software/{runtime => }/data/data_chest_f16.py | 1 - .../data/data_cholesky_f16.h.tpl | 6 +- .../{runtime => }/data/data_cholesky_f16.py | 4 +- .../data/data_cholesky_q16.h.tpl | 4 +- .../{runtime => }/data/data_cholesky_q16.py | 11 +- .../data/data_cholesky_q32.h.tpl | 6 +- .../{runtime => }/data/data_cholesky_q32.py | 30 +- .../{runtime => }/data/data_cmatmul_f16.h.tpl | 6 +- .../{runtime => }/data/data_cmatmul_f16.py | 1 - software/data/data_mimo_mmse_f16.h.tpl | 49 +++ .../{runtime => }/data/data_mimo_mmse_f16.py | 35 ++- software/data/data_mimo_mmse_f32.h.tpl | 34 ++ .../{runtime => }/data/data_mimo_mmse_f32.py | 33 +- .../data/data_mimo_mmse_q16.h.tpl | 10 +- .../{runtime => }/data/data_mimo_mmse_q16.py | 49 +-- software/data/data_ofdm.h.tpl | 48 +++ software/data/data_ofdm.py | 137 ++++++++ .../baremetal}/mempool_cmatmul_f16.h | 2 +- software/runtime/data/data_cfft_f16.h.tpl | 50 +++ software/runtime/data/data_cfft_q16.h.tpl | 53 ++++ .../runtime/data/data_cfft_radix4_f16.h.tpl | 44 --- .../runtime/data/data_cfft_radix4_q16.h.tpl | 1 + .../runtime/data/data_mimo_mmse_f16.h.tpl | 34 -- .../runtime/data/data_mimo_mmse_f32.h.tpl | 34 -- software/runtime/data/data_ofdm.py | 132 -------- software/runtime/data/generate_cfft.py | 218 +++++++++++++ software/runtime/data/generate_chest.py | 227 ++++++++++++++ software/runtime/data/generate_cholesky.py | 180 +++++++++++ software/runtime/data/generate_matmul.py | 204 ++++++++++++ software/runtime/data/generate_mimo_mmse.py | 293 ++++++++++++++++++ software/runtime/data/generate_ofdm.py | 137 ++++++++ 45 files changed, 1776 insertions(+), 377 deletions(-) rename software/apps/{ => baremetal}/cfft_radix4_f16/main.c (100%) rename software/apps/{ => baremetal}/chest_f16/main.c (92%) rename software/apps/{ => baremetal}/cholesky_f16/main.c (92%) rename software/apps/{ => baremetal}/cholesky_q16/main.c (98%) rename software/apps/{ => baremetal}/cmatmul_f16/main.c (95%) rename software/apps/{ => baremetal}/mimo_mmse_f16/main.c (97%) rename software/apps/{ => baremetal}/mimo_mmse_f32/main.c (95%) rename software/apps/{ => baremetal}/mimo_mmse_q16/main.c (100%) delete mode 100644 software/apps/cfft_radix4_q16/main.c delete mode 100644 software/apps/chest_q16/main.c rename software/{runtime/data/data_ofdm.h.tpl => data/data_cfft_radix4_f16.h.tpl} (67%) rename software/{runtime => }/data/data_cfft_radix4_f16.py (100%) rename software/{runtime => }/data/data_chest_f16.h.tpl (59%) rename software/{runtime => }/data/data_chest_f16.py (99%) rename software/{runtime => }/data/data_cholesky_f16.h.tpl (63%) rename software/{runtime => }/data/data_cholesky_f16.py (95%) rename software/{runtime => }/data/data_cholesky_q16.h.tpl (64%) rename software/{runtime => }/data/data_cholesky_q16.py (87%) rename software/{runtime => }/data/data_cholesky_q32.h.tpl (56%) rename software/{runtime => }/data/data_cholesky_q32.py (77%) rename software/{runtime => }/data/data_cmatmul_f16.h.tpl (58%) rename software/{runtime => }/data/data_cmatmul_f16.py (99%) create mode 100644 software/data/data_mimo_mmse_f16.h.tpl rename software/{runtime => }/data/data_mimo_mmse_f16.py (79%) create mode 100644 software/data/data_mimo_mmse_f32.h.tpl rename software/{runtime => }/data/data_mimo_mmse_f32.py (81%) rename software/{runtime => }/data/data_mimo_mmse_q16.h.tpl (51%) rename software/{runtime => }/data/data_mimo_mmse_q16.py (70%) create mode 100644 software/data/data_ofdm.h.tpl create mode 100644 software/data/data_ofdm.py rename software/{runtime/kernel => kernels/baremetal}/mempool_cmatmul_f16.h (99%) create mode 100644 software/runtime/data/data_cfft_f16.h.tpl create mode 100644 software/runtime/data/data_cfft_q16.h.tpl create mode 100644 software/runtime/data/data_cfft_radix4_q16.h.tpl delete mode 100644 software/runtime/data/data_mimo_mmse_f16.h.tpl delete mode 100644 software/runtime/data/data_mimo_mmse_f32.h.tpl create mode 100755 software/runtime/data/generate_cfft.py create mode 100755 software/runtime/data/generate_chest.py create mode 100644 software/runtime/data/generate_cholesky.py create mode 100644 software/runtime/data/generate_matmul.py create mode 100644 software/runtime/data/generate_mimo_mmse.py create mode 100644 software/runtime/data/generate_ofdm.py diff --git a/Makefile b/Makefile index 47522c107..6359411ef 100644 --- a/Makefile +++ b/Makefile @@ -218,6 +218,7 @@ toolchain/riscv-opcodes/*: format: $(ROOT_DIR)/scripts/run_clang_format.py --clang-format-executable=$(LLVM_INSTALL_DIR)/bin/clang-format -i -r $(ROOT_DIR) + find ./software/runtime/data -name '*.py' -exec autopep8 --in-place --aggressive {} + clean: clean-riscv-tests rm -rf $(INSTALL_DIR) diff --git a/software/apps/cfft_radix4_f16/main.c b/software/apps/baremetal/cfft_radix4_f16/main.c similarity index 100% rename from software/apps/cfft_radix4_f16/main.c rename to software/apps/baremetal/cfft_radix4_f16/main.c diff --git a/software/apps/chest_f16/main.c b/software/apps/baremetal/chest_f16/main.c similarity index 92% rename from software/apps/chest_f16/main.c rename to software/apps/baremetal/chest_f16/main.c index 7f8b991b6..7abfa8add 100644 --- a/software/apps/chest_f16/main.c +++ b/software/apps/baremetal/chest_f16/main.c @@ -13,12 +13,12 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" -#include "data/data_chest_f16.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_chest_f16p.h" -#include "kernel/mempool_chest_f16s.h" +#include "data_chest_f16.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_chest_f16p.h" +#include "baremetal/mempool_chest_f16s.h" //#define SINGLE #define PARALLEL diff --git a/software/apps/cholesky_f16/main.c b/software/apps/baremetal/cholesky_f16/main.c similarity index 92% rename from software/apps/cholesky_f16/main.c rename to software/apps/baremetal/cholesky_f16/main.c index cdf17bf3e..691eeac47 100644 --- a/software/apps/cholesky_f16/main.c +++ b/software/apps/baremetal/cholesky_f16/main.c @@ -9,11 +9,12 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" -#include "data/data_cholesky_f16.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_cholesky_f16s.h" +#include "data_cholesky_f16.h" + +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cholesky_f16s.h" #define SINGLE diff --git a/software/apps/cholesky_q16/main.c b/software/apps/baremetal/cholesky_q16/main.c similarity index 98% rename from software/apps/cholesky_q16/main.c rename to software/apps/baremetal/cholesky_q16/main.c index 3c9a50d35..2f30ae94a 100644 --- a/software/apps/cholesky_q16/main.c +++ b/software/apps/baremetal/cholesky_q16/main.c @@ -11,7 +11,7 @@ #include "synchronization.h" #include "xpulp/builtins_v2.h" -#include "data/data_cholesky_q16.h" +#include "data_cholesky_q16.h" #include "kernel/mempool_checks.h" #include "kernel/mempool_cholesky_q16s.h" diff --git a/software/apps/cmatmul_f16/main.c b/software/apps/baremetal/cmatmul_f16/main.c similarity index 95% rename from software/apps/cmatmul_f16/main.c rename to software/apps/baremetal/cmatmul_f16/main.c index 1d999a0d8..6343d98b8 100644 --- a/software/apps/cmatmul_f16/main.c +++ b/software/apps/baremetal/cmatmul_f16/main.c @@ -12,9 +12,9 @@ #include "runtime.h" #include "synchronization.h" -#include "data/data_cmatmul_f16.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_cmatmul_f16.h" +#include "data_cmatmul_f16.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cmatmul_f16.h" #define PARALLEL_2x2 __fp16 matrix_a[2 * dim_M * dim_N] diff --git a/software/apps/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c similarity index 97% rename from software/apps/mimo_mmse_f16/main.c rename to software/apps/baremetal/mimo_mmse_f16/main.c index a7f579754..12651b886 100644 --- a/software/apps/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -9,16 +9,15 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" -#include "data/data_mimo_mmse_f16.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_cholesky_f16s.h" -#include "kernel/mempool_linearsolver_f16s.h" -#include "kernel/mempool_mimo_mmse_f16s.h" - -#define DOUBLE_BUFFERING +#include "data_mimo_mmse_f16.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cholesky_f16s.h" +#include "baremetal/mempool_linearsolver_f16s.h" +#include "baremetal/mempool_mimo_mmse_f16s.h" +//#define DOUBLE_BUFFERING #ifndef DOUBLE_BUFFERING #define SINGLE diff --git a/software/apps/mimo_mmse_f32/main.c b/software/apps/baremetal/mimo_mmse_f32/main.c similarity index 95% rename from software/apps/mimo_mmse_f32/main.c rename to software/apps/baremetal/mimo_mmse_f32/main.c index 14e72a00c..8e5f5f80f 100644 --- a/software/apps/mimo_mmse_f32/main.c +++ b/software/apps/baremetal/mimo_mmse_f32/main.c @@ -10,12 +10,12 @@ #include "runtime.h" #include "synchronization.h" -#include "data/data_mimo_mmse_f32.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_cholesky_f32s.h" -#include "kernel/mempool_linearsolver_f32s.h" -#include "kernel/mempool_mimo_mmse_f32p.h" -#include "kernel/mempool_mimo_mmse_f32s.h" +#include "data_mimo_mmse_f32.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cholesky_f32s.h" +#include "baremetal/mempool_linearsolver_f32s.h" +#include "baremetal/mempool_mimo_mmse_f32p.h" +#include "baremetal/mempool_mimo_mmse_f32s.h" //#define SINGLE //#define JACOBI @@ -104,7 +104,7 @@ int main() { mempool_stop_benchmark(); #endif -#ifdef PARALLEL_PARALLEL_HERMITIAN +#ifdef PARALLEL_HERMITIAN mempool_start_benchmark(); // Each iteration is assigned to a pool of processors // In a pool each PE gets a column of the H matrix, accumulating a row of the diff --git a/software/apps/mimo_mmse_q16/main.c b/software/apps/baremetal/mimo_mmse_q16/main.c similarity index 100% rename from software/apps/mimo_mmse_q16/main.c rename to software/apps/baremetal/mimo_mmse_q16/main.c diff --git a/software/apps/cfft_radix4_q16/main.c b/software/apps/cfft_radix4_q16/main.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/software/apps/chest_q16/main.c b/software/apps/chest_q16/main.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/software/runtime/data/data_ofdm.h.tpl b/software/data/data_cfft_radix4_f16.h.tpl similarity index 67% rename from software/runtime/data/data_ofdm.h.tpl rename to software/data/data_cfft_radix4_f16.h.tpl index fe7ff7fc6..883049a44 100644 --- a/software/runtime/data/data_ofdm.h.tpl +++ b/software/data/data_cfft_radix4_f16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '(__fp16){:0.5}f, '.format(a) + out += '(__fp16){:0.4}f, '.format(a) i += 1 if i % 8 == 0: out += '\n' @@ -29,20 +29,17 @@ %> \ #define LOG2 (${Log2Len}) -#define N_RX (${N_rx}) -#define N_BEAMS (${N_bs}) -#define N_SC (${N_sc}) +#define N_CSAMPLES (${Len}) +#define N_RSAMPLES (2 * N_CSAMPLES) +#define N_TWIDDLES (3 * N_CSAMPLES / 4) #define N_BANKS (NUM_CORES * BANKING_FACTOR) #define BITREVINDEXTABLE_LENGTH (${BitrevLen}) +__fp16 l2_pSrc[${2 * Len}] = ${array_to_cstr(src)}; -__fp16 l2_pFFT_Src[${2 * N_sc * N_rx}] = ${array_to_cstr(pFFT_src)}; +__fp16 l2_pRes[${2 * Len}] = ${array_to_cstr(dst)}; -__fp16 l2_twiddleCoef_f16[${2 * N_sc}] = ${array_to_cstr(pTw_coef)}; - -__fp16 l2_pBF_Coef[${2 * N_bs * N_rx}] = ${array_to_cstr(pBF_coef)}; - -__fp16 l2_pBF_Dst[${2 * N_bs * N_sc}] = ${array_to_cstr(pBF_dst)}; +__fp16 l2_twiddleCoef_f16[${2 * Len}] = ${array_to_cstr(twi)}; // Bitreversal uint16_t l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/runtime/data/data_cfft_radix4_f16.py b/software/data/data_cfft_radix4_f16.py similarity index 100% rename from software/runtime/data/data_cfft_radix4_f16.py rename to software/data/data_cfft_radix4_f16.py diff --git a/software/runtime/data/data_chest_f16.h.tpl b/software/data/data_chest_f16.h.tpl similarity index 59% rename from software/runtime/data/data_chest_f16.h.tpl rename to software/data/data_chest_f16.h.tpl index baf203afe..25d9e420f 100644 --- a/software/runtime/data/data_chest_f16.h.tpl +++ b/software/data/data_chest_f16.h.tpl @@ -23,8 +23,8 @@ #define N_RX (${nb_rx}) #define N_SAMPLES (${nb_samples}) -__fp16 l2_PilotRX[${2*nb_rx*nb_samples}] = ${array_to_cstr(pilot_rx)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_PilotRX[${2*nb_rx*nb_samples}] = ${array_to_cstr(pilot_rx)}; -__fp16 l2_PilotTX[${2*nb_tx*nb_samples}] = ${array_to_cstr(pilot_tx)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_PilotTX[${2*nb_tx*nb_samples}] = ${array_to_cstr(pilot_tx)}; -__fp16 l2_HEST[${2*nb_rx*nb_tx*nb_samples}] = ${array_to_cstr(Hest)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_HEST[${2*nb_rx*nb_tx*nb_samples}] = ${array_to_cstr(Hest)}; diff --git a/software/runtime/data/data_chest_f16.py b/software/data/data_chest_f16.py similarity index 99% rename from software/runtime/data/data_chest_f16.py rename to software/data/data_chest_f16.py index d6874270d..29c19e4a3 100644 --- a/software/runtime/data/data_chest_f16.py +++ b/software/data/data_chest_f16.py @@ -116,7 +116,6 @@ def main(): vector_pilot_rx = np.concatenate(vector_pilot_rx, axis=0) vector_pilot_tx = np.concatenate(vector_pilot_tx, axis=0) vector_Hest = np.concatenate(vector_Hest, axis=0) - print(vector_Hest) kwargs = {'name': 'data_chest_f16', 'pilot_rx': vector_pilot_rx, diff --git a/software/runtime/data/data_cholesky_f16.h.tpl b/software/data/data_cholesky_f16.h.tpl similarity index 63% rename from software/runtime/data/data_cholesky_f16.h.tpl rename to software/data/data_cholesky_f16.h.tpl index 5f96ae3ac..32ad3e2fe 100644 --- a/software/runtime/data/data_cholesky_f16.h.tpl +++ b/software/data/data_cholesky_f16.h.tpl @@ -17,7 +17,5 @@ #define dim_N (${n_matrix}) #define N_SAMPLES (${n_samples}) - -__fp16 l2_GIn[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; - -__fp16 l2_LOut[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_GIn[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_LOut[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; diff --git a/software/runtime/data/data_cholesky_f16.py b/software/data/data_cholesky_f16.py similarity index 95% rename from software/runtime/data/data_cholesky_f16.py rename to software/data/data_cholesky_f16.py index 586d71d47..32dfa8df9 100644 --- a/software/runtime/data/data_cholesky_f16.py +++ b/software/data/data_cholesky_f16.py @@ -10,7 +10,6 @@ import numpy as np import argparse import pathlib -from scipy.linalg import solve_triangular from mako.template import Template @@ -18,7 +17,8 @@ # compute_result # ################## -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): file = outdir / f"{kwargs['name']}.h" diff --git a/software/runtime/data/data_cholesky_q16.h.tpl b/software/data/data_cholesky_q16.h.tpl similarity index 64% rename from software/runtime/data/data_cholesky_q16.h.tpl rename to software/data/data_cholesky_q16.h.tpl index 45711c48d..0ba9cf5f0 100644 --- a/software/runtime/data/data_cholesky_q16.h.tpl +++ b/software/data/data_cholesky_q16.h.tpl @@ -17,5 +17,5 @@ #define dim_N (${n_matrix}) #define N_SAMPLES (${n_samples}) -int16_t l2_GIn[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; -int16_t l2_LOut[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_GIn[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(G)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_LOut[2 * ${n_samples * n_matrix * n_matrix}] = ${array_to_cstr(L)}; diff --git a/software/runtime/data/data_cholesky_q16.py b/software/data/data_cholesky_q16.py similarity index 87% rename from software/runtime/data/data_cholesky_q16.py rename to software/data/data_cholesky_q16.py index a77956c4c..d342f3fb9 100644 --- a/software/runtime/data/data_cholesky_q16.py +++ b/software/data/data_cholesky_q16.py @@ -10,7 +10,6 @@ import numpy as np import argparse import pathlib -from scipy.linalg import solve_triangular from mako.template import Template @@ -19,7 +18,8 @@ ################## -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): file = outdir / f"{kwargs['name']}.h" @@ -81,8 +81,11 @@ def main(): vector_L = [] for k in range(n_samples): # Create hermitian matrix - H = (np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int16) + 1.j * \ - np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int16)).reshape(n_matrix, n_matrix) + H = np.random.randint(-2**(15), 2**(15) - 1, + n_matrix * n_matrix, dtype=np.int16) \ + + 1.j * np.random.randint(-2**(15), 2**(15) - 1, + n_matrix * n_matrix, dtype=np.int16) + H = H.reshape(n_matrix, n_matrix) # Matrix to be inverted H_h = (np.asmatrix(H).H) # H_H = np.asmatrix(H).H diff --git a/software/runtime/data/data_cholesky_q32.h.tpl b/software/data/data_cholesky_q32.h.tpl similarity index 56% rename from software/runtime/data/data_cholesky_q32.h.tpl rename to software/data/data_cholesky_q32.h.tpl index 560da3d76..0042f54c8 100644 --- a/software/runtime/data/data_cholesky_q32.h.tpl +++ b/software/data/data_cholesky_q32.h.tpl @@ -17,6 +17,6 @@ #define N (${n_matrix}) -int32_t l2_GIn[${n_matrix * n_matrix}] = ${array_to_cstr(G)}; -int32_t l2_LOut[${n_matrix * n_matrix}] = ${array_to_cstr(L)}; -int32_t l2_y[${n_matrix}] = ${array_to_cstr(y)}; +int32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_GIn[${n_matrix * n_matrix}] = ${array_to_cstr(G)}; +int32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_LOut[${n_matrix * n_matrix}] = ${array_to_cstr(L)}; +int32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${n_matrix}] = ${array_to_cstr(y)}; diff --git a/software/runtime/data/data_cholesky_q32.py b/software/data/data_cholesky_q32.py similarity index 77% rename from software/runtime/data/data_cholesky_q32.py rename to software/data/data_cholesky_q32.py index c2061b1b1..acadcc135 100644 --- a/software/runtime/data/data_cholesky_q32.py +++ b/software/data/data_cholesky_q32.py @@ -18,7 +18,8 @@ # compute_result # ################## -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): file = outdir / f"{kwargs['name']}.h" @@ -68,24 +69,30 @@ def main(): n_matrix = args.dimension # Create hermitian matrix - H = np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int32) - y = np.random.randint(-2**(15), 2**(15) - 1, n_matrix, dtype=np.int32) + L = np.random.randint(-2**(15), 2**(15) - 1, + size=(n_matrix, n_matrix), dtype=np.int32) + L = np.tril(L).astype(np.int32) + G = np.dot(np.asmatrix(L), np.asmatrix(L).transpose()) - H = H.reshape(n_matrix, n_matrix) - G = H * np.asmatrix(H).T - # Cholesky decomposition - L = np.linalg.cholesky(G) + y = np.random.randint(-2**(15), 2**(15) - 1, n_matrix, dtype=np.int32) # Linear system solution y = solve_triangular(L, y, lower=True) - x = solve_triangular(np.asmatrix(L).H, y) + # x = solve_triangular(np.asmatrix(L).T, y) # Reshape - G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C').astype(np.int32) - L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C').astype(np.int32) + G = np.reshape( + np.asarray(G), + (n_matrix * n_matrix), + order='C').astype( + np.int32) + L = np.reshape( + np.asarray(L), + (n_matrix * n_matrix), + order='C').astype( + np.int32) y = np.reshape(np.asarray(y), (n_matrix), order='C').astype(np.int32) - kwargs = {'name': 'data_cholesky_q32', 'G': G, 'L': L, @@ -94,5 +101,6 @@ def main(): gen_data_header_file(args.outdir, args.tpl, **kwargs) + if __name__ == "__main__": main() diff --git a/software/runtime/data/data_cmatmul_f16.h.tpl b/software/data/data_cmatmul_f16.h.tpl similarity index 58% rename from software/runtime/data/data_cmatmul_f16.h.tpl rename to software/data/data_cmatmul_f16.h.tpl index bc67d0f45..0f3d8e03a 100644 --- a/software/runtime/data/data_cmatmul_f16.h.tpl +++ b/software/data/data_cmatmul_f16.h.tpl @@ -19,8 +19,8 @@ #define dim_N (${matrix_N}) #define dim_P (${matrix_P}) -__fp16 A[${2 * matrix_M * matrix_N}] = ${array_to_cstr(A)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) A[${2 * matrix_M * matrix_N}] = ${array_to_cstr(A)}; -__fp16 B[${2 * matrix_N * matrix_P}] = ${array_to_cstr(B)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) B[${2 * matrix_N * matrix_P}] = ${array_to_cstr(B)}; -__fp16 C[${2 * matrix_M * matrix_P}] = ${array_to_cstr(C)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) C[${2 * matrix_M * matrix_P}] = ${array_to_cstr(C)}; diff --git a/software/runtime/data/data_cmatmul_f16.py b/software/data/data_cmatmul_f16.py similarity index 99% rename from software/runtime/data/data_cmatmul_f16.py rename to software/data/data_cmatmul_f16.py index 847e12c48..5620e8fa4 100644 --- a/software/runtime/data/data_cmatmul_f16.py +++ b/software/data/data_cmatmul_f16.py @@ -96,7 +96,6 @@ def main(): A = np.reshape(A, (matrix_M * matrix_N), order='C') B = np.reshape(B, (matrix_N * matrix_P), order='C') C = np.reshape(C, (matrix_M * matrix_P), order='C') - print(A) A = np.column_stack((A.real, A.imag)).astype(np.float16).flatten() B = np.column_stack((B.real, B.imag)).astype(np.float16).flatten() diff --git a/software/data/data_mimo_mmse_f16.h.tpl b/software/data/data_mimo_mmse_f16.h.tpl new file mode 100644 index 000000000..abe2b37c4 --- /dev/null +++ b/software/data/data_mimo_mmse_f16.h.tpl @@ -0,0 +1,49 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:0.5f}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +<% def array_to_str(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) +#define N_ITR (${N_itr}) + +// Inputs + +uint32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_beamgroups[${N_itr}] = ${array_to_str(beamgroups)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; + +// Outputs + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_f16.py b/software/data/data_mimo_mmse_f16.py similarity index 79% rename from software/runtime/data/data_mimo_mmse_f16.py rename to software/data/data_mimo_mmse_f16.py index b3ba356ff..2d7663e2f 100644 --- a/software/runtime/data/data_mimo_mmse_f16.py +++ b/software/data/data_mimo_mmse_f16.py @@ -18,7 +18,8 @@ # compute_result # ################## -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): file = outdir / f"{kwargs['name']}.h" @@ -52,9 +53,9 @@ def gen_input_data(N_rx, N_tx): x = solve_triangular(np.asmatrix(L).H, y2) sigma = sigma + 0j - H = np.reshape(np.asarray(H), (N_tx*N_rx), order='C') - G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') - L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') + H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') + L = np.reshape(np.asarray(L), (N_tx * N_tx), order='C') sigma = np.column_stack((sigma.real, sigma.imag) ).astype(np.float16).flatten() H = np.column_stack((H.real, H.imag)).astype(np.float16).flatten() @@ -123,20 +124,20 @@ def main(): N_rx = args.receivers itr = args.iterations - sigma = np.zeros([itr, 2*N_tx]) - H_RI = np.zeros([itr, 2*N_tx*N_rx]) - G_RI = np.zeros([itr, 2*N_tx*N_tx]) - y_RI = np.zeros([itr, 2*N_rx]) - x_RI = np.zeros([itr, 2*N_tx]) + sigma = np.zeros([itr, 2 * N_tx]) + H_RI = np.zeros([itr, 2 * N_tx * N_rx]) + G_RI = np.zeros([itr, 2 * N_tx * N_tx]) + y_RI = np.zeros([itr, 2 * N_rx]) + x_RI = np.zeros([itr, 2 * N_tx]) for k in range(itr): - sigma[k, :], H_RI[k, :], G_RI[k, :], y_RI[k, - :], x_RI[k, :] = gen_input_data(N_rx, N_tx) - - sigma = np.reshape(sigma, (2*N_tx*itr)).astype(np.float16) - H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)).astype(np.float16) - G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)).astype(np.float16) - y_RI = np.reshape(y_RI, (2*N_rx*itr)).astype(np.float16) - x_RI = np.reshape(x_RI, (2*N_tx*itr)).astype(np.float16) + sigma[k, :], H_RI[k, :], G_RI[k, :], \ + y_RI[k, :], x_RI[k, :] = gen_input_data(N_rx, N_tx) + + sigma = np.reshape(sigma, (2 * N_tx * itr)).astype(np.float16) + H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * itr)).astype(np.float16) + G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * itr)).astype(np.float16) + y_RI = np.reshape(y_RI, (2 * N_rx * itr)).astype(np.float16) + x_RI = np.reshape(x_RI, (2 * N_tx * itr)).astype(np.float16) kwargs = {'name': 'data_mimo_mmse_f16', 'H': H_RI, diff --git a/software/data/data_mimo_mmse_f32.h.tpl b/software/data/data_mimo_mmse_f32.h.tpl new file mode 100644 index 000000000..bebf4e71d --- /dev/null +++ b/software/data/data_mimo_mmse_f32.h.tpl @@ -0,0 +1,34 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) +#define N_ITR (${N_itr}) + +// Inputs + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; + +// Outputs + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_f32.py b/software/data/data_mimo_mmse_f32.py similarity index 81% rename from software/runtime/data/data_mimo_mmse_f32.py rename to software/data/data_mimo_mmse_f32.py index 73ef8acda..26515e03d 100644 --- a/software/runtime/data/data_mimo_mmse_f32.py +++ b/software/data/data_mimo_mmse_f32.py @@ -18,7 +18,8 @@ # compute_result # ################## -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): file = outdir / f"{kwargs['name']}.h" @@ -52,9 +53,9 @@ def gen_input_data(N_rx, N_tx): y2 = solve_triangular(L, y1, lower=True) x = solve_triangular(np.asmatrix(L).H, y2) - H = np.reshape(np.asarray(H), (N_tx*N_rx), order='C') - G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') - L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') + H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') + L = np.reshape(np.asarray(L), (N_tx * N_tx), order='C') H = np.column_stack((H.real, H.imag)).astype(np.float32).flatten() G = np.column_stack((G.real, G.imag)).astype(np.float32).flatten() L = np.column_stack((L.real, L.imag)).astype(np.float32).flatten() @@ -122,19 +123,19 @@ def main(): itr = args.iterations sigma = np.zeros([itr, N_tx]) - H_RI = np.zeros([itr, 2*N_tx*N_rx]) - G_RI = np.zeros([itr, 2*N_tx*N_tx]) - y_RI = np.zeros([itr, 2*N_rx]) - x_RI = np.zeros([itr, 2*N_tx]) + H_RI = np.zeros([itr, 2 * N_tx * N_rx]) + G_RI = np.zeros([itr, 2 * N_tx * N_tx]) + y_RI = np.zeros([itr, 2 * N_rx]) + x_RI = np.zeros([itr, 2 * N_tx]) for k in range(itr): - sigma[k, :], H_RI[k, :], G_RI[k, :], y_RI[k, - :], x_RI[k, :] = gen_input_data(N_rx, N_tx) - - sigma = np.reshape(sigma, (N_tx*itr)) - H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)) - G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)) - y_RI = np.reshape(y_RI, (2*N_rx*itr)) - x_RI = np.reshape(x_RI, (2*N_tx*itr)) + sigma[k, :], H_RI[k, :], G_RI[k, :], \ + y_RI[k, :], x_RI[k, :] = gen_input_data(N_rx, N_tx) + + sigma = np.reshape(sigma, (N_tx * itr)) + H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * itr)) + G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * itr)) + y_RI = np.reshape(y_RI, (2 * N_rx * itr)) + x_RI = np.reshape(x_RI, (2 * N_tx * itr)) kwargs = {'name': 'data_mimo_mmse_f32', 'H': H_RI, diff --git a/software/runtime/data/data_mimo_mmse_q16.h.tpl b/software/data/data_mimo_mmse_q16.h.tpl similarity index 51% rename from software/runtime/data/data_mimo_mmse_q16.h.tpl rename to software/data/data_mimo_mmse_q16.h.tpl index ca60447a0..acc0550b1 100644 --- a/software/runtime/data/data_mimo_mmse_q16.h.tpl +++ b/software/data/data_mimo_mmse_q16.h.tpl @@ -21,14 +21,14 @@ // Inputs -int16_t l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; -int16_t l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; -int16_t l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -int16_t l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; // Outputs -int16_t l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_q16.py b/software/data/data_mimo_mmse_q16.py similarity index 70% rename from software/runtime/data/data_mimo_mmse_q16.py rename to software/data/data_mimo_mmse_q16.py index cfdd73311..718978824 100644 --- a/software/runtime/data/data_mimo_mmse_q16.py +++ b/software/data/data_mimo_mmse_q16.py @@ -18,7 +18,8 @@ # compute_result # ################## -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): file = outdir / f"{kwargs['name']}.h" @@ -32,12 +33,14 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), ** def gen_input_data(N_rx, N_tx): # Create channel matrix - H = np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, dtype=np.int16) + 1.j * \ - np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, dtype=np.int16) + H = np.random.randint(-2**(15), 2**(15) - 1, + N_rx * N_tx, dtype=np.int16) \ + + 1.j * np.random.randint(-2**(15), 2**(15) - 1, + N_rx * N_tx, dtype=np.int16) H = H.reshape(N_rx, N_tx) # Create input vector - y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) + 1.j * \ - np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) + y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) + \ + 1.j * np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) # Generate noise variance sigma = np.random.randint(-2**(15), 2**(15) - 1, N_tx, dtype=np.int16) @@ -50,17 +53,19 @@ def gen_input_data(N_rx, N_tx): y1 = np.transpose(np.dot(H_h, y)) # Cholesky decomposition - #L = np.linalg.cholesky(G) + # L = np.linalg.cholesky(G) L = G # Linear system solution y2 = solve_triangular(L, y1, lower=True) x = solve_triangular(np.asmatrix(L).H, y2) sigma = sigma + 0j - H = np.reshape(np.asarray(H), (N_rx*N_tx), order='C') - G = np.reshape(np.asarray(G), (N_tx*N_tx), order='C') - L = np.reshape(np.asarray(L), (N_tx*N_tx), order='C') - sigma = np.column_stack((sigma.real, sigma.imag)).astype(np.int16).flatten() + H = np.reshape(np.asarray(H), (N_rx * N_tx), order='C') + G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') + L = np.reshape(np.asarray(L), (N_tx * N_tx), order='C') + sigma = np.column_stack( + (sigma.real, sigma.imag)).astype( + np.int16).flatten() H = np.column_stack((H.real, H.imag)).astype(np.int16).flatten() G = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() L = np.column_stack((L.real, L.imag)).astype(np.int16).flatten() @@ -126,23 +131,23 @@ def main(): N_rx = args.receivers itr = args.iterations - sigma = np.zeros([itr, 2*N_tx], dtype=np.int16) - H_RI = np.zeros([itr, 2*N_tx*N_rx], dtype=np.int16) - G_RI = np.zeros([itr, 2*N_tx*N_tx], dtype=np.int16) - y_RI = np.zeros([itr, 2*N_rx], dtype=np.int16) - x_RI = np.zeros([itr, 2*N_tx], dtype=np.int16) + sigma = np.zeros([itr, 2 * N_tx], dtype=np.int16) + H_RI = np.zeros([itr, 2 * N_tx * N_rx], dtype=np.int16) + G_RI = np.zeros([itr, 2 * N_tx * N_tx], dtype=np.int16) + y_RI = np.zeros([itr, 2 * N_rx], dtype=np.int16) + x_RI = np.zeros([itr, 2 * N_tx], dtype=np.int16) for k in range(itr): - [ sigma[k, :], + [sigma[k, :], H_RI[k, :], G_RI[k, :], y_RI[k, :], - x_RI[k, :] ] = gen_input_data(N_rx, N_tx) + x_RI[k, :]] = gen_input_data(N_rx, N_tx) - sigma = np.reshape(sigma, (2*N_tx*itr)).astype(np.int16) - H_RI = np.reshape(H_RI, (2*N_rx*N_tx*itr)).astype(np.int16) - G_RI = np.reshape(G_RI, (2*N_tx*N_tx*itr)).astype(np.int16) - y_RI = np.reshape(y_RI, (2*N_rx*itr)).astype(np.int16) - x_RI = np.reshape(x_RI, (2*N_tx*itr)).astype(np.int16) + sigma = np.reshape(sigma, (2 * N_tx * itr)).astype(np.int16) + H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * itr)).astype(np.int16) + G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * itr)).astype(np.int16) + y_RI = np.reshape(y_RI, (2 * N_rx * itr)).astype(np.int16) + x_RI = np.reshape(x_RI, (2 * N_tx * itr)).astype(np.int16) kwargs = {'name': 'data_mimo_mmse_q16', 'H': H_RI, diff --git a/software/data/data_ofdm.h.tpl b/software/data/data_ofdm.h.tpl new file mode 100644 index 000000000..06da2c045 --- /dev/null +++ b/software/data/data_ofdm.h.tpl @@ -0,0 +1,48 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:0.5}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +<% def array_to_str(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LOG2 (${Log2Len}) +#define N_RX (${N_rx}) +#define N_BEAMS (${N_bs}) +#define N_SC (${N_sc}) +#define N_BANKS (NUM_CORES * BANKING_FACTOR) +#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) + + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pFFT_Src[${2 * N_sc * N_rx}] = ${array_to_cstr(pFFT_src)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_twiddleCoef_f16[${2 * N_sc}] = ${array_to_cstr(pTw_coef)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pBF_Coef[${2 * N_bs * N_rx}] = ${array_to_cstr(pBF_coef)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pBF_Dst[${2 * N_bs * N_sc}] = ${array_to_cstr(pBF_dst)}; + +// Bitreversal +uint16_t l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/data/data_ofdm.py b/software/data/data_ofdm.py new file mode 100644 index 000000000..64b0a7ca6 --- /dev/null +++ b/software/data/data_ofdm.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +# Author: Marco Bertuletti, ETH Zurich + +import numpy as np +import math as M +import argparse +import pathlib +from mako.template import Template +from sympy.combinatorics import Permutation + +################## +# compute_result # +################## + + +def compute_bitreversal(N, R): + # Decompose + logR2 = [] + idx = N + while (idx >= R): + logR2.append(int(M.log2(R))) + idx = idx // R + if (idx > 1): + logR2.append(int(M.log2(idx))) + # Bitreversal + indexes = [] + for x in range(N): + result = 0 + for bits in logR2: + mask = (0xffffffff >> (32 - bits)) + result = (result << bits) | (x & mask) + x = x >> bits + indexes.append(result) + + # Create transpositions table + tps = [] + for c in Permutation.from_sequence(indexes).cyclic_form: + for i in range(len(c) - 1): + tps.append([c[i] * 8, c[-1] * 8]) + return tps + + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / "data_ofdm.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-rx", + "--receivers", + type=int, + required=False, + default=64, + help='First dimension.' + ) + parser.add_argument( + "-bs", + "--beams", + type=int, + required=False, + default=32, + help='Second dimension.' + ) + parser.add_argument( + "-sc", + "--subcarriers", + type=int, + required=False, + default=4096, + help='Iterations.' + ) + + args = parser.parse_args() + N_rx = args.receivers + N_bs = args.beams + N_sc = args.subcarriers + + pFFT_src = (np.random.rand(2 * N_rx * N_sc)).astype(np.float16) + pTw_coef = (np.random.rand(int(3 * N_sc / 4))).astype(np.float16) + pBF_coef = (np.random.rand(2 * N_rx * N_bs)).astype(np.float16) + pBF_dst = (np.random.rand(2 * N_bs * N_sc)).astype(np.float16) + + Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(N_sc, 2))) + + kwargs = {'name': 'ofdm', + 'pFFT_src': pFFT_src, + 'pTw_coef': pTw_coef, + 'pBF_coef': pBF_coef, + 'pBF_dst': pBF_dst, + 'bitrev': Bitreversal, + 'N_rx': N_rx, + 'N_bs': N_bs, + 'N_sc': N_sc, + 'Log2Len': int(np.log2(N_sc)), + 'BitrevLen': len(Bitreversal)} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/kernel/mempool_cmatmul_f16.h b/software/kernels/baremetal/mempool_cmatmul_f16.h similarity index 99% rename from software/runtime/kernel/mempool_cmatmul_f16.h rename to software/kernels/baremetal/mempool_cmatmul_f16.h index 195af694b..a843a55e6 100644 --- a/software/runtime/kernel/mempool_cmatmul_f16.h +++ b/software/kernels/baremetal/mempool_cmatmul_f16.h @@ -11,7 +11,7 @@ * C = AB */ -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" #define CMATMUL_2x2_LOOP \ float sum00_real = 0.0f; \ diff --git a/software/runtime/data/data_cfft_f16.h.tpl b/software/runtime/data/data_cfft_f16.h.tpl new file mode 100644 index 000000000..7cfcda159 --- /dev/null +++ b/software/runtime/data/data_cfft_f16.h.tpl @@ -0,0 +1,50 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:.4}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +<% def array_to_str(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LOG2 (${Log2Len}) +#define N_CSAMPLES (${Len}) +#define N_RSAMPLES (2 * N_CSAMPLES) +#define N_TWIDDLES (3 * N_CSAMPLES / 4) +#define N_BANKS (NUM_CORES * BANKING_FACTOR) +#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) + +// Maximum number of independent FFT columns allowed +#define MAX_COL (N_BANKS / (N_CSAMPLES / 4)) + +// Data arrays +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pSrc[${2 * Len}] = ${array_to_cstr(vector_inp)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pRes[${2 * Len}] = ${array_to_cstr(vector_res)}; + +// Twiddles +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_twiddleCoef_f16[${2 * Len}] = ${array_to_cstr(vector_twi)}; + +// Bitreversal +uint16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(vector_bitrev)}; diff --git a/software/runtime/data/data_cfft_q16.h.tpl b/software/runtime/data/data_cfft_q16.h.tpl new file mode 100644 index 000000000..fde7f2b71 --- /dev/null +++ b/software/runtime/data/data_cfft_q16.h.tpl @@ -0,0 +1,53 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Automatically generated by: +// data/data_cfft_q16.py +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(int16_t) 0X{:04X}, '.format(a&0xffff) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ +<% def array_to_str(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 16 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ +#define LOG2 (${Log2Len}) +#define N_CSAMPLES (${Len}) +#define N_RSAMPLES (2 * N_CSAMPLES) +#define N_TWIDDLES (3 * N_CSAMPLES / 4) +#define N_BANKS (NUM_CORES * BANKING_FACTOR) +#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) + +// Maximum number of independent FFT columns allowed +#define MAX_COL (N_BANKS / (N_CSAMPLES / 4)) +// Tolerance for correctness check +#define TOLERANCE (${tolerance}) + +// Data arrays +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pSrc[${2 * Len}] = ${array_to_cstr(vector_inp)}; + +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_pRes[${2 * Len}] = ${array_to_cstr(vector_res)}; + +// Twiddles +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_twiddleCoef_q16[${int(6*Len/4)}] = ${array_to_cstr(vector_twi)}; + +// Bitreversal +uint16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(vector_bitrev)}; diff --git a/software/runtime/data/data_cfft_radix4_f16.h.tpl b/software/runtime/data/data_cfft_radix4_f16.h.tpl index 883049a44..8b1378917 100644 --- a/software/runtime/data/data_cfft_radix4_f16.h.tpl +++ b/software/runtime/data/data_cfft_radix4_f16.h.tpl @@ -1,45 +1 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '(__fp16){:0.4}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ -<% def array_to_str(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}, '.format(a) - i += 1 - if i % 16 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define LOG2 (${Log2Len}) -#define N_CSAMPLES (${Len}) -#define N_RSAMPLES (2 * N_CSAMPLES) -#define N_TWIDDLES (3 * N_CSAMPLES / 4) -#define N_BANKS (NUM_CORES * BANKING_FACTOR) -#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) - -__fp16 l2_pSrc[${2 * Len}] = ${array_to_cstr(src)}; - -__fp16 l2_pRes[${2 * Len}] = ${array_to_cstr(dst)}; - -__fp16 l2_twiddleCoef_f16[${2 * Len}] = ${array_to_cstr(twi)}; - -// Bitreversal -uint16_t l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/runtime/data/data_cfft_radix4_q16.h.tpl b/software/runtime/data/data_cfft_radix4_q16.h.tpl new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/software/runtime/data/data_cfft_radix4_q16.h.tpl @@ -0,0 +1 @@ + diff --git a/software/runtime/data/data_mimo_mmse_f16.h.tpl b/software/runtime/data/data_mimo_mmse_f16.h.tpl deleted file mode 100644 index ccfc80974..000000000 --- a/software/runtime/data/data_mimo_mmse_f16.h.tpl +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '(__fp16){:0.5f}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define N_TX (${N_tx}) -#define N_RX (${N_rx}) -#define N_ITR (${N_itr}) - -// Inputs - -__fp16 l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; - -__fp16 l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; - -__fp16 l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; - -__fp16 l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; - -// Outputs - -__fp16 l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_mimo_mmse_f32.h.tpl b/software/runtime/data/data_mimo_mmse_f32.h.tpl deleted file mode 100644 index a15b87375..000000000 --- a/software/runtime/data/data_mimo_mmse_f32.h.tpl +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define N_TX (${N_tx}) -#define N_RX (${N_rx}) -#define N_ITR (${N_itr}) - -// Inputs - -float l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; - -float l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; - -float l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; - -float l2_Sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; - -// Outputs - -float l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr(x)}; diff --git a/software/runtime/data/data_ofdm.py b/software/runtime/data/data_ofdm.py index 08cf091ce..8b1378917 100644 --- a/software/runtime/data/data_ofdm.py +++ b/software/runtime/data/data_ofdm.py @@ -1,133 +1 @@ -# Copyright 2022 ETH Zurich and University of Bologna. -# Licensed under the Apache License, Version 2.0, see LICENSE for details. -# SPDX-License-Identifier: Apache-2.0 -# Author: Marco Bertuletti, ETH Zurich - -#!/usr/bin/env python3 - -import numpy as np -import math as M -import argparse -import pathlib -from mako.template import Template -from scipy.linalg import solve_triangular -from sympy.combinatorics import Permutation - -################## -# compute_result # -################## - -def compute_bitreversal(N, R): - # Decompose - logR2 = [] - idx = N - while (idx >= R): - logR2.append(int(M.log2(R))) - idx = idx // R - if (idx > 1): - logR2.append(int(M.log2(idx))) - # Bitreversal - indexes = [] - for x in range(N): - result = 0 - for bits in logR2: - mask = (0xffffffff >> (32 - bits)) - result = (result << bits) | (x & mask) - x = x >> bits - indexes.append(result) - - # Create transpositions table - tps = [] - for c in Permutation.from_sequence(indexes).cyclic_form: - for i in range(len(c) - 1): - tps.append([c[i] * 8, c[-1] * 8]) - return tps - -def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"data_{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / "data_ofdm.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-rx", - "--receivers", - type=int, - required=False, - default=64, - help='First dimension.' - ) - parser.add_argument( - "-bs", - "--beams", - type=int, - required=False, - default=32, - help='Second dimension.' - ) - parser.add_argument( - "-sc", - "--subcarriers", - type=int, - required=False, - default=4096, - help='Iterations.' - ) - - args = parser.parse_args() - N_rx=args.receivers - N_bs=args.beams - N_sc=args.subcarriers - - pFFT_src = ( np.random.rand(2 * N_rx * N_sc) ).astype(np.float16) - pTw_coef = ( np.random.rand(int(3 * N_sc / 4)) ).astype(np.float16) - pBF_coef = ( np.random.rand(2 * N_rx * N_bs) ).astype(np.float16) - pBF_dst = ( np.random.rand(2 * N_bs * N_sc) ).astype(np.float16) - - Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(N_sc, 2))) - - kwargs = {'name': 'ofdm', - 'pFFT_src': pFFT_src, - 'pTw_coef': pTw_coef, - 'pBF_coef': pBF_coef, - 'pBF_dst': pBF_dst, - 'bitrev': Bitreversal, - 'N_rx' : N_rx, - 'N_bs' : N_bs, - 'N_sc' : N_sc, - 'Log2Len': int(np.log2(N_sc)), - 'BitrevLen': len(Bitreversal)} - gen_data_header_file(args.outdir, args.tpl, **kwargs) - -if __name__ == "__main__": - main() diff --git a/software/runtime/data/generate_cfft.py b/software/runtime/data/generate_cfft.py new file mode 100755 index 000000000..fa6759df3 --- /dev/null +++ b/software/runtime/data/generate_cfft.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the cfft kernel. +# Author: Marco Bertuletti + +import numpy as np +import math as M +import argparse +import pathlib +from mako.template import Template +from sympy.combinatorics import Permutation + +# Function to generate the expected result of the testcase. + + +def generate_cfft_q16(N): + # Q16: + # len=16: Q1.15 -> Q5.11 + # len=32: Q1.15 -> Q6.10 + # len=64: Q1.15 -> Q7.9 + # len=128: Q1.15 -> Q8.8 + # len=256: Q1.15 -> Q9.7 + # len=512: Q1.15 -> Q10.6 + # len=1024: Q1.15 -> Q11.5 + # len=2048: Q1.15 -> Q12.4 + # len=4096: Q1.15 -> Q13.3 + src = (np.random.randint(-2**(15), 2**(15) - 1, + 2 * N, dtype=np.int16)).astype(np.int16) + + bit_shift_dict_q16 = { + 16: 11, + 32: 10, + 64: 9, + 128: 8, + 256: 7, + 512: 6, + 1024: 5, + 2048: 4, + 4096: 3} + my_fixpoint = 15 + dst = np.zeros(2 * N, dtype=np.int16) + complex_src = np.zeros(N, dtype=np.csingle) + complex_dst = np.zeros(N, dtype=np.csingle) + for i in range(N): + shift = 2**(my_fixpoint) + complex_src[i] = (src[2 * i].astype(np.csingle) / shift) + \ + 1j * (src[2 * i + 1].astype(np.csingle) / shift) + complex_dst = np.fft.fft(complex_src) + for i in range(N): + shift = 2**(bit_shift_dict_q16[N]) + dst[2 * i] = (np.real(complex_dst[i]) * shift).astype(np.int16) + dst[2 * i + 1] = (np.imag(complex_dst[i]) * shift).astype(np.int16) + return src, dst + + +def generate_cfft_f16(N): + src = np.random.rand(N).astype(np.float16) + src = src + 1.j * np.random.rand(N).astype(np.float16) + dst = np.fft.fft(src) + src = np.column_stack((src.imag, src.real)).astype(np.float16).flatten() + dst = np.column_stack((dst.imag, dst.real)).astype(np.float16).flatten() + return src, dst + + +def generate_twiddleCoefq15(N): + PI = 3.14159265358979 + twiddleCoefq15 = np.zeros((int)(2 * 3 * N / 4), np.int16) + for i in range(0, (int)(3 * N / 4)): + twiddleCoefq15_cos = M.cos(i * 2 * PI / N) + twiddleCoefq15_sin = M.sin(i * 2 * PI / N) + twiddleCoefq15[2 * i] = int(round(twiddleCoefq15_cos * (2**15 - 1))) + twiddleCoefq15[2 * i + + 1] = int(round(twiddleCoefq15_sin * (2**15 - 1))) + return twiddleCoefq15 + + +def generate_twiddleCoeff16(N): + PI = np.pi + twiddleCoeff16 = np.zeros((int)(2 * 3 * N / 4), np.float16) + for i in range(0, int(3 * N / 4)): + twiddleCoeff16_sin = np.sin(i * 2 * PI / N).astype(np.float16) + twiddleCoeff16_cos = np.cos(i * 2 * PI / N).astype(np.float16) + twiddleCoeff16[2 * i] = twiddleCoeff16_sin + twiddleCoeff16[2 * i + 1] = twiddleCoeff16_cos + return twiddleCoeff16 + + +def generate_bitreversal(N, R): + # Decompose + logR2 = [] + idx = N + while (idx >= R): + logR2.append(int(M.log2(R))) + idx = idx // R + if (idx > 1): + logR2.append(int(M.log2(idx))) + # Bitreversal + indexes = [] + for x in range(N): + result = 0 + for bits in logR2: + mask = (0xffffffff >> (32 - bits)) + result = (result << bits) | (x & mask) + x = x >> bits + indexes.append(result) + # Create transpositions table + tps = [] + for c in Permutation.from_sequence(indexes).cyclic_form: + for i in range(len(c) - 1): + tps.append([c[i] * 8, c[-1] * 8]) + return np.ndarray.flatten(np.array(tps)) + + +def gen_data_header_file( + outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), + **kwargs): + file = outdir / f"{kwargs['name']}.h" + print(tpl, outdir, kwargs['name']) + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-d", + "--dimension", + type=int, + required=False, + default=64, + help='Input dimension' + ) + + args = parser.parse_args() + + # Create inputs cfft_q16 + Len = args.dimension + src_cfft_q16, dst_cfft_q16 = generate_cfft_q16(Len) + twi_cfft_q16 = generate_twiddleCoefq15(Len) + brv_cfft_q16 = generate_bitreversal(Len, 2) + tolerance = { + 16: 16, + 32: 20, + 64: 24, + 128: 28, + 256: 32, + 512: 48, + 1024: 64, + 2048: 96, + 4096: 128} + + kwargs = {'name': 'data_cfft_radix4_q16', + 'vector_inp': src_cfft_q16, + 'vector_res': dst_cfft_q16, + 'vector_twi': twi_cfft_q16, + 'vector_bitrev': brv_cfft_q16, + 'Len': Len, + 'Log2Len': int(np.log2(Len)), + 'BitrevLen': len(brv_cfft_q16), + 'tolerance': tolerance[int(Len)]} + gen_data_header_file( + args.outdir, + pathlib.Path(__file__).parent.absolute() / + "data_cfft_q16.h.tpl", + **kwargs) + + kwargs = {'name': 'data_cfft_radix2_q16', + 'vector_inp': src_cfft_q16, + 'vector_res': dst_cfft_q16, + 'vector_twi': twi_cfft_q16, + 'vector_bitrev': brv_cfft_q16, + 'Len': Len, + 'Log2Len': int(np.log2(Len)), + 'BitrevLen': int(2 * len(brv_cfft_q16)), + 'tolerance': tolerance[int(Len)]} + gen_data_header_file( + args.outdir, + pathlib.Path(__file__).parent.absolute() / + "data_cfft_q16.h.tpl", + **kwargs) + + # Create inputs cfft_f16 + Len = args.dimension + src_cfft_f16, dst_cfft_f16 = generate_cfft_f16(Len) + twi_cfft_f16 = generate_twiddleCoeff16(Len) + + kwargs = {'name': 'data_cfft_radix4_f16', + 'vector_inp': src_cfft_f16, + 'vector_res': dst_cfft_f16, + 'vector_twi': twi_cfft_f16, + 'vector_bitrev': brv_cfft_q16, + 'Len': Len, + 'Log2Len': int(np.log2(Len)), + 'BitrevLen': len(brv_cfft_q16)} + gen_data_header_file( + args.outdir, + pathlib.Path(__file__).parent.absolute() / + "data_cfft_f16.h.tpl", + **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/generate_chest.py b/software/runtime/data/generate_chest.py new file mode 100755 index 000000000..f23ee917a --- /dev/null +++ b/software/runtime/data/generate_chest.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the Channel estimation. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib + +from mako.template import Template + +################## +# write_result # +################## + + +def gen_data_header_file( + outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), + **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + +###################### +# Fixpoint Functions # +###################### + + +def q_sat(x): + if x > 2**15 - 1: + return x - 2**16 + elif x < -2**15: + return x + 2**16 + else: + return x + + +def q_add(a, b): + return q_sat(a + b) + + +def q_sub(a, b): + return q_sat(a - b) + + +def q_mul(a, b, p): + return a * b + + +def q_div(a, b, p): + return a / b + + +def generate_chest_f16(nb_tx, nb_rx, nb_samples): + H = np.random.randn(nb_rx, nb_tx) + 1j * np.random.randn(nb_rx, nb_tx) + vector_pilot_tx = [] + vector_pilot_rx = [] + vector_Hest = [] + for k in range(nb_samples): + + # Compute data + pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) + pilot_rx = np.dot(H, pilot_tx) + Hest = pilot_rx[:, np.newaxis] / pilot_tx[np.newaxis, :] + + # Interleaved real and imaginary parts + pilot_tx = np.column_stack( + (pilot_tx.real, pilot_tx.imag)).astype(np.float16).flatten() + pilot_rx = np.column_stack( + (pilot_rx.real, pilot_rx.imag)).astype(np.float16).flatten() + Hest = Hest.flatten() + Hest = np.column_stack( + (Hest.real, Hest.imag)).astype( + np.float16).flatten() + + # Output vectors + vector_pilot_tx.append(pilot_tx) + vector_pilot_rx.append(pilot_rx) + vector_Hest.append(Hest) + + vector_pilot_rx = np.concatenate(vector_pilot_rx, axis=0) + vector_pilot_tx = np.concatenate(vector_pilot_tx, axis=0) + vector_Hest = np.concatenate(vector_Hest, axis=0) + return vector_pilot_tx, vector_pilot_rx, vector_Hest + +# Convert to fixed point + + +def fixed_point_conversion(v_input, fixed_point, scaling_factor): + real = (np.multiply(v_input.real, + scaling_factor * 2**(np.log2(fixed_point)))) + imag = (np.multiply(v_input.imag, + scaling_factor * 2**(np.log2(fixed_point)))) + output = np.zeros(len(real) * 2) + for i in range(0, len(real)): + output[2 * i] = real[i] + output[2 * i + 1] = imag[i] + return output.astype(np.int16) + +# Compute the channel estimate + + +def compute_chest_q16(in_rx, in_tx, p): + my_type = np.int16 + a = in_rx.astype(my_type) + b = in_tx.astype(my_type) + n_rx = a.size >> 1 + n_tx = b.size >> 1 + result = np.zeros(2 * (n_tx * n_rx), dtype=my_type) + for i in range(n_rx): + a_r = a[2 * i] + a_i = a[2 * i + 1] + for j in range(n_tx): + b_r = b[2 * j] + b_i = b[2 * j + 1] + den = q_mul(b_r, b_r, p) + q_mul(b_i, b_i, p) + num_r = q_add(q_mul(a_r, b_r, p), q_mul(a_i, b_i, p)) + num_i = q_sub(q_mul(a_i, b_r, p), q_mul(a_r, b_i, p)) + result[2 * (i * n_tx + j)] = q_div(num_r, den, p) + result[2 * (i * n_tx + j) + 1] = q_div(num_i, den, p) + return result + + +def generate_chest_q16(nb_tx, nb_rx, nb_samples): + H = np.random.randn(nb_rx, nb_tx) + 1j * np.random.randn(nb_rx, nb_tx) + qvector_pilot_tx = [] + qvector_pilot_rx = [] + qvector_Hest = [] + for k in range(nb_samples): + pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) + pilot_rx = np.dot(H, pilot_tx) + fixed_point = 12 + scaling_factor = 1 + q_pilot_tx = fixed_point_conversion( + np.reshape(pilot_tx, [nb_tx]), fixed_point, 1) + q_pilot_rx = fixed_point_conversion( + np.reshape( + pilot_rx, + [nb_rx]), + fixed_point, + scaling_factor) + q_Hest = compute_chest_q16(q_pilot_rx, q_pilot_tx, fixed_point) + qvector_pilot_tx.append(q_pilot_tx) + qvector_pilot_rx.append(q_pilot_rx) + qvector_Hest.append(q_Hest) + qvector_pilot_tx = np.reshape(qvector_pilot_tx, [2 * nb_tx * nb_samples]) + qvector_pilot_rx = np.reshape(qvector_pilot_rx, [2 * nb_rx * nb_samples]) + qvector_Hest = np.reshape(qvector_Hest, [2 * nb_tx * nb_rx * nb_samples]) + return qvector_pilot_tx, qvector_pilot_rx, qvector_Hest + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-b", + "--num_rx", + type=int, + required=False, + default=4, + help='Number beams' + ) + parser.add_argument( + "-l", + "--num_tx", + type=int, + required=False, + default=4, + help='Number layers' + ) + parser.add_argument( + "-s", + "--num_samples", + type=int, + required=False, + default=32, + help='Number samples' + ) + + args = parser.parse_args() + nb_tx = args.num_tx + nb_rx = args.num_rx + nb_samples = args.num_samples + + pilot_tx, pilot_rx, Hest = generate_chest_q16(nb_tx, nb_rx, nb_samples) + tpl = pathlib.Path(__file__).parent.absolute() / "data_chest_q16.h.tpl" + kwargs = {'name': 'data_chest_q16', + 'pilot_tx': pilot_tx, + 'pilot_rx': pilot_rx, + 'Hest': Hest, + 'nb_tx': nb_tx, + 'nb_rx': nb_rx, + 'nb_samples': nb_samples} + gen_data_header_file(args.outdir, tpl, **kwargs) + + pilot_tx, pilot_rx, Hest = generate_chest_f16(nb_tx, nb_rx, nb_samples) + tpl = pathlib.Path(__file__).parent.absolute() / "data_chest_f16.h.tpl" + kwargs = {'name': 'data_chest_f16', + 'pilot_rx': pilot_rx, + 'pilot_tx': pilot_tx, + 'Hest': Hest, + 'nb_tx': nb_tx, + 'nb_rx': nb_rx, + 'nb_samples': nb_samples} + gen_data_header_file(args.outdir, tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/generate_cholesky.py b/software/runtime/data/generate_cholesky.py new file mode 100644 index 000000000..a72dc210f --- /dev/null +++ b/software/runtime/data/generate_cholesky.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 cholesky. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from scipy.linalg import solve_triangular +from mako.template import Template + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def generate_cholesky_q32(n_matrix): + # Create hermitian matrix + L = np.random.randint(-2**(15), 2**(15) - 1, + size=(n_matrix, n_matrix), dtype=np.int32) + L = np.tril(L).astype(np.int32) + G = np.dot(np.asmatrix(L), np.asmatrix(L).transpose()) + + y = np.random.randint(-2**(15), 2**(15) - 1, n_matrix, dtype=np.int32) + + # Linear system solution + y = solve_triangular(L, y, lower=True) + # x = solve_triangular(np.asmatrix(L).T, y) + + # Reshape + G = np.reshape( + np.asarray(G), + (n_matrix * n_matrix), + order='C').astype( + np.int32) + L = np.reshape( + np.asarray(L), + (n_matrix * n_matrix), + order='C').astype( + np.int32) + y = np.reshape(np.asarray(y), (n_matrix), order='C').astype(np.int32) + + return G, L, y + + +def generate_cholesky_q16(n_matrix, n_samples): + vector_G = [] + vector_L = [] + for k in range(n_samples): + # Create hermitian matrix + H = np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int16) \ + + 1.j * np.random.randint(-2**(15), + 2**(15) - 1, + n_matrix * n_matrix, + dtype=np.int16) + H = H.reshape(n_matrix, n_matrix) + # Matrix to be inverted + H_h = (np.asmatrix(H).H) + # H_H = np.asmatrix(H).H + G = H_h * H + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Reshape + G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C') + L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C') + G = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.int16).flatten() + # Output vectors + vector_G.append(G) + vector_L.append(L) + + vector_G = np.concatenate(vector_G, axis=0) + vector_L = np.concatenate(vector_L, axis=0) + return vector_G, vector_L + + +def generate_cholesky_f16(n_matrix, n_samples): + vector_G = [] + vector_L = [] + for k in range(n_samples): + # Create hermitian matrix + H = np.random.rand(n_matrix, n_matrix) + 1.j * \ + np.random.rand(n_matrix, n_matrix) + # Matrix to be inverted + # H_H = np.asmatrix(H).H + G = np.matmul(H, np.asmatrix(H).H) + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Reshape + G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C') + L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C') + G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() + L = np.column_stack((L.real, L.imag)).astype(np.float16).flatten() + # Output vectors + vector_G.append(G) + vector_L.append(L) + + vector_G = np.concatenate(vector_G, axis=0) + vector_L = np.concatenate(vector_L, axis=0) + return vector_G, vector_L + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-n", + "--dimension", + type=int, + required=False, + default=4, + help='Matrix dimension' + ) + parser.add_argument( + "-s", + "--num_samples", + type=int, + required=False, + default=256, + help='Number samples' + ) + + args = parser.parse_args() + n_matrix = args.dimension + n_samples = args.num_samples + + G, L, y = generate_cholesky_q32(n_matrix) + tpl = pathlib.Path(__file__).parent.absolute() / "data_cholesky_q32.h.tpl" + kwargs = {'name': 'data_cholesky_q32', + 'G': G, + 'L': L, + 'y': y, + 'n_matrix': n_matrix} + gen_data_header_file(args.outdir, tpl, **kwargs) + + vector_G, vector_L = generate_cholesky_q16(n_matrix, n_samples) + tpl = pathlib.Path(__file__).parent.absolute() / "data_cholesky_q16.h.tpl" + kwargs = {'name': 'data_cholesky_q16', + 'G': vector_G, + 'L': vector_L, + 'n_matrix': n_matrix, + 'n_samples': n_samples} + gen_data_header_file(args.outdir, tpl, **kwargs) + + vector_G, vector_L = generate_cholesky_f16(n_matrix, n_samples) + tpl = pathlib.Path(__file__).parent.absolute() / "data_cholesky_f16.h.tpl" + kwargs = {'name': 'data_cholesky_f16', + 'G': vector_G, + 'L': vector_L, + 'n_matrix': n_matrix, + 'n_samples': n_samples} + gen_data_header_file(args.outdir, tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/generate_matmul.py b/software/runtime/data/generate_matmul.py new file mode 100644 index 000000000..1b2edc9bc --- /dev/null +++ b/software/runtime/data/generate_matmul.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 matmul. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from mako.template import Template + + +def generate_cmatmul_f16(matrix_M, matrix_N, matrix_P): + + # Create matrix + A = np.random.rand(matrix_M, matrix_N) + 1j * \ + np.random.rand(matrix_M, matrix_N) + B = np.random.rand(matrix_N, matrix_P) + 1j * \ + np.random.rand(matrix_N, matrix_P) + C = np.matmul(A, B) + + A = np.reshape(A, (matrix_M * matrix_N), order='C') + B = np.reshape(B, (matrix_N * matrix_P), order='C') + C = np.reshape(C, (matrix_M * matrix_P), order='C') + + A = np.column_stack((A.imag, A.real)).astype(np.float16).flatten() + B = np.column_stack((B.imag, B.real)).astype(np.float16).flatten() + C = np.column_stack((C.imag, C.real)).astype(np.float16).flatten() + + return A, B, C + + +def generate_cmatmul_q16(matrix_M, matrix_N, matrix_P): + MAX = 2**15 + FIXED_POINT = 15 + + # Create matrix + A = np.random.randint(-MAX, MAX - 1, size=(matrix_M, matrix_N)) + 1j * \ + np.random.randint(-MAX, MAX - 1, size=(matrix_M, matrix_N)) + B = np.random.randint(-MAX, MAX - 1, size=(matrix_N, matrix_P)) + 1j * \ + np.random.randint(-MAX, MAX - 1, size=(matrix_N, matrix_P)) + + C = np.zeros((matrix_M, matrix_P), dtype=complex) + for k in range(matrix_P): + for i in range(matrix_M): + for j in range(matrix_N): + a = A[i][j].real + b = A[i][j].imag + c = B[j][k].real + d = B[j][k].imag + C[i][k] += (a * c - b * d) // (1 << FIXED_POINT) + C[i][k] += (b * c + a * d) // (1 << FIXED_POINT) * 1j + + A = np.reshape(A, (matrix_M * matrix_N), order='C') + B = np.reshape(B, (matrix_N * matrix_P), order='C') + C = np.reshape(C, (matrix_M * matrix_P), order='C') + + A = np.column_stack((A.imag, A.real)).astype(np.int16).flatten() + B = np.column_stack((B.imag, B.real)).astype(np.int16).flatten() + C = np.column_stack((C.imag, C.real)).astype(np.int16).flatten() + + return A, B, C + + +def generate_matmul_f16(matrix_M, matrix_N, matrix_P): + + # Create matrix + A = (np.random.rand(matrix_M, matrix_N) - 0.5).astype(np.float16) + B = (np.random.rand(matrix_N, matrix_P) - 0.5).astype(np.float16) + C = np.matmul(A, B) + + A = np.reshape(A, (matrix_M * matrix_N), order='C').astype(np.float16) + B = np.reshape(B, (matrix_N * matrix_P), order='C').astype(np.float16) + C = np.reshape(C, (matrix_M * matrix_P), order='C').astype(np.float16) + + return A, B, C + + +def generate_matmul_f32(matrix_M, matrix_N, matrix_P): + + # Create matrix + A = np.random.rand(matrix_M, matrix_N) + B = np.random.rand(matrix_N, matrix_P) + C = np.matmul(A, B) + + A = np.reshape(A, (matrix_M * matrix_N), order='C').astype(np.float32) + B = np.reshape(B, (matrix_N * matrix_P), order='C').astype(np.float32) + C = np.reshape(C, (matrix_M * matrix_P), order='C').astype(np.float32) + + return A, B, C + +################## +# compute_result # +################## + + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-m", + "--dim_m", + type=int, + required=False, + default=16, + help='First dimension.' + ) + parser.add_argument( + "-n", + "--dim_n", + type=int, + required=False, + default=16, + help='Second dimension.' + ) + parser.add_argument( + "-p", + "--dim_p", + type=int, + required=False, + default=16, + help='Third dimension.' + ) + + args = parser.parse_args() + + matrix_M = args.dim_m + matrix_N = args.dim_n + matrix_P = args.dim_p + + A, B, C = generate_cmatmul_f16(matrix_M, matrix_N, matrix_P) + tpl = pathlib.Path(__file__).parent.absolute() / "data_cmatmul_f16.h.tpl" + kwargs = { + 'name': 'data_cmatmul_f16', + 'A': A, + 'B': B, + 'C': C, + 'matrix_M': matrix_M, + 'matrix_N': matrix_N, + 'matrix_P': matrix_P} + gen_data_header_file(args.outdir, tpl, **kwargs) + + A, B, C = generate_cmatmul_q16(matrix_M, matrix_N, matrix_P) + tpl = pathlib.Path(__file__).parent.absolute() / "data_cmatmul_q16.h.tpl" + kwargs = { + 'name': 'data_cmatmul_q16', + 'A': A, + 'B': B, + 'C': C, + 'matrix_M': matrix_M, + 'matrix_N': matrix_N, + 'matrix_P': matrix_P} + gen_data_header_file(args.outdir, tpl, **kwargs) + + A, B, C = generate_matmul_f16(matrix_M, matrix_N, matrix_P) + tpl = pathlib.Path(__file__).parent.absolute() / "data_matmul_f16.h.tpl" + kwargs = { + 'name': 'data_matmul_f16', + 'A': A, + 'B': B, + 'C': C, + 'matrix_M': matrix_M, + 'matrix_N': matrix_N, + 'matrix_P': matrix_P} + gen_data_header_file(args.outdir, tpl, **kwargs) + + A, B, C = generate_matmul_f32(matrix_M, matrix_N, matrix_P) + tpl = pathlib.Path(__file__).parent.absolute() / "data_matmul_f32.h.tpl" + kwargs = { + 'name': 'data_matmul_f32', + 'A': A, + 'B': B, + 'C': C, + 'matrix_M': matrix_M, + 'matrix_N': matrix_N, + 'matrix_P': matrix_P} + gen_data_header_file(args.outdir, tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/generate_mimo_mmse.py b/software/runtime/data/generate_mimo_mmse.py new file mode 100644 index 000000000..454976f27 --- /dev/null +++ b/software/runtime/data/generate_mimo_mmse.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 mmse. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from mako.template import Template +from scipy.linalg import solve_triangular + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def generate_mimo_mmse_f32(N_tx, N_rx, N_itr): + + vSigma = np.zeros([N_itr, N_tx], dtype=np.float32) + vH = np.zeros([N_itr, 2 * N_tx * N_rx], dtype=np.float32) + vG = np.zeros([N_itr, 2 * N_tx * N_tx], dtype=np.float32) + vy = np.zeros([N_itr, 2 * N_rx], dtype=np.float32) + vx = np.zeros([N_itr, 2 * N_tx], dtype=np.float32) + + for k in range(N_itr): + # Create channel matrix + H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * \ + np.random.rand(N_rx, N_tx).astype(np.float32) + # Create input vector + y = np.random.rand(N_rx).astype(np.float32) + 1.j * \ + np.random.rand(N_rx).astype(np.float32) + # Generate noise variance + sigma = np.diag(np.random.rand(N_tx).astype(np.float32)) + + # Matrix to be inverted in MMSE estimator + H_h = np.asmatrix(H).H + G = np.matmul(H_h, H) + sigma + + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Linear system solution + y1 = np.transpose(np.dot(H_h, y)) + y2 = solve_triangular(L, y1, lower=True) + x = solve_triangular(np.asmatrix(L).H, y2) + + sigma = np.diag(sigma) + H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') + + vSigma[k, :] = sigma.astype(np.float32).flatten() + vH[k, :] = np.column_stack( + (H.real, H.imag)).astype(np.float32).flatten() + vG[k, :] = np.column_stack( + (G.real, G.imag)).astype(np.float32).flatten() + vy[k, :] = np.column_stack( + (y.real, y.imag)).astype(np.float32).flatten() + vx[k, :] = np.column_stack( + (x.real, x.imag)).astype(np.float32).flatten() + + vSigma = np.reshape(vSigma, (N_tx * N_itr)).astype(np.float32) + vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(np.float32) + vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(np.float32) + vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(np.float32) + vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(np.float32) + + return vSigma, vH, vG, vy, vx + + +def generate_mimo_mmse_f16(N_tx, N_rx, N_itr, randomize): + + vSigma = np.zeros([N_itr, 2 * N_tx], dtype=np.float16) + vH = np.zeros([N_itr, 2 * N_tx * N_rx], dtype=np.float16) + vG = np.zeros([N_itr, 2 * N_tx * N_tx], dtype=np.float16) + vy = np.zeros([N_itr, 2 * N_rx], dtype=np.float16) + vx = np.zeros([N_itr, 2 * N_tx], dtype=np.float16) + beamgroups = np.zeros(N_itr) + + for k in range(N_itr): + + # Create input vector + y_bg = np.random.rand(N_rx).astype(np.float16) + 1.j * \ + np.random.rand(N_rx).astype(np.float16) + if (randomize == 1): + N_beamgroups = 2 ** np.random.randint(0, np.log2(2 * (N_tx - 1))) + else: + N_beamgroups = 1 + N_tx_itr = N_tx // N_beamgroups + beamgroups[k] = N_beamgroups + + for i in range(N_beamgroups): + + # Create channel matrix + H = np.random.rand(N_rx, N_tx_itr).astype(np.float16) + 1.j * \ + np.random.rand(N_rx, N_tx_itr).astype(np.float16) + # Generate noise variance + sigma = np.diag(np.random.rand(N_tx_itr).astype(np.float16)) + + # Matrix to be inverted in MMSE estimator + H_h = np.asmatrix(H).H + G = np.matmul(H_h, H) + sigma + + # Cholesky decomposition + L = np.linalg.cholesky(G) + # Linear system solution + y1 = np.transpose(np.dot(H_h, y_bg)) + y2 = solve_triangular(L, y1, lower=True) + x = solve_triangular(np.asmatrix(L).H, y2) + + sigma = np.diag(sigma) + 0j + H = np.reshape(np.asarray(H), (N_tx_itr * N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx_itr * N_tx_itr), order='C') + + sigma = np.column_stack( + (sigma.real, sigma.imag)).astype( + np.float16).flatten() + H = np.column_stack((H.real, H.imag)).astype(np.float16).flatten() + G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() + y = np.column_stack( + (y_bg.real, y_bg.imag)).astype( + np.float16).flatten() + x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() + + vSigma[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = sigma + vH[k, (i * 2 * N_tx_itr * N_rx):((i + 1) * 2 * N_tx_itr * N_rx)] = H + vG[k, (i * 2 * N_tx_itr * N_tx_itr) + :((i + 1) * 2 * N_tx_itr * N_tx_itr)] = G + vy[k, :] = y + vx[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = x + + vSigma = np.reshape(vSigma, (2 * N_tx * N_itr)).astype(np.float16) + vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(np.float16) + vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(np.float16) + vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(np.float16) + vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(np.float16) + beamgroups = beamgroups.astype(np.int32) + + return vSigma, vH, vG, vy, vx, beamgroups + + +def generate_mimo_mmse_q16(N_tx, N_rx, N_itr): + + vSigma = np.zeros([N_itr, 2 * N_tx], dtype=np.int16) + vH = np.zeros([N_itr, 2 * N_tx * N_rx], dtype=np.int16) + vG = np.zeros([N_itr, 2 * N_tx * N_tx], dtype=np.int16) + vy = np.zeros([N_itr, 2 * N_rx], dtype=np.int16) + vx = np.zeros([N_itr, 2 * N_tx], dtype=np.int16) + for k in range(N_itr): + # Create channel matrix + H = np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, dtype=np.int16) \ + + 1.j * np.random.randint(-2**(15), 2 ** + (15) - 1, N_rx * N_tx, dtype=np.int16) + # Create input vector + y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) \ + + 1.j * np.random.randint(-2**(15), 2 ** + (15) - 1, N_rx, dtype=np.int16) + # Generate noise variance + sigma = np.random.randint(-2**(15), 2**(15) - 1, N_tx, dtype=np.int16) + + H = H.reshape(N_rx, N_tx) + # Matrix to be inverted in MMSE estimator + H_h = (np.asmatrix(H).H) + # Hermitian + G = np.matmul(H_h, H) + sigma + + # Matrix vector product + y1 = np.transpose(np.dot(H_h, y)) + # Cholesky decomposition + # L = np.linalg.cholesky(G) + L = G + # Linear system solution + y2 = solve_triangular(L, y1, lower=True) + x = solve_triangular(np.asmatrix(L).H, y2) + + sigma = sigma + 0j + H = np.reshape(np.asarray(H), (N_rx * N_tx), order='C') + G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') + vSigma[k, :] = np.column_stack( + (sigma.real, sigma.imag)).astype(np.int16).flatten() + vH[k, :] = np.column_stack((H.real, H.imag)).astype(np.int16).flatten() + vG[k, :] = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() + vy[k, :] = np.column_stack((y.real, y.imag)).astype(np.int16).flatten() + vx[k, :] = np.column_stack((x.real, x.imag)).astype(np.int16).flatten() + + vSigma = np.reshape(vSigma, (2 * N_tx * N_itr)).astype(np.int16) + vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(np.int16) + vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(np.int16) + vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(np.int16) + vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(np.int16) + + return vSigma, vH, vG, vy, vx + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-n", + "--transmitters", + type=int, + required=False, + default=4, + help='First dimension.' + ) + parser.add_argument( + "-m", + "--receivers", + type=int, + required=False, + default=32, + help='First dimension.' + ) + parser.add_argument( + "-k", + "--iterations", + type=int, + required=False, + default=1, + help='Iterations.' + ) + + args = parser.parse_args() + N_tx = args.transmitters + N_rx = args.receivers + N_itr = args.iterations + + vSigma, vH, vG, vy, vx = generate_mimo_mmse_f32(N_tx, N_rx, N_itr) + tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_f32.h.tpl" + kwargs = {'name': 'data_mimo_mmse_f32', + 'H': vH, + 'G': vG, + 'sigma': vSigma, + 'y': vy, + 'x': vx, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': N_itr} + gen_data_header_file(args.outdir, tpl, **kwargs) + + vSigma, vH, vG, vy, vx, beamgroups = generate_mimo_mmse_f16( + N_tx, N_rx, N_itr, 1) + tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_f16.h.tpl" + kwargs = {'name': 'data_mimo_mmse_f16', + 'H': vH, + 'G': vG, + 'sigma': vSigma, + 'y': vy, + 'x': vx, + 'beamgroups': beamgroups, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': N_itr} + gen_data_header_file(args.outdir, tpl, **kwargs) + + vSigma, vH, vG, vy, vx = generate_mimo_mmse_q16(N_tx, N_rx, N_itr) + tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_q16.h.tpl" + kwargs = {'name': 'data_mimo_mmse_q16', + 'H': vH, + 'G': vG, + 'sigma': vSigma, + 'y': vy, + 'x': vx, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': N_itr} + gen_data_header_file(args.outdir, tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/data/generate_ofdm.py b/software/runtime/data/generate_ofdm.py new file mode 100644 index 000000000..64b0a7ca6 --- /dev/null +++ b/software/runtime/data/generate_ofdm.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Licensed under the Apache License, Version 2.0, see LICENSE for details. +# SPDX-License-Identifier: Apache-2.0 + +# Author: Marco Bertuletti, ETH Zurich + +import numpy as np +import math as M +import argparse +import pathlib +from mako.template import Template +from sympy.combinatorics import Permutation + +################## +# compute_result # +################## + + +def compute_bitreversal(N, R): + # Decompose + logR2 = [] + idx = N + while (idx >= R): + logR2.append(int(M.log2(R))) + idx = idx // R + if (idx > 1): + logR2.append(int(M.log2(idx))) + # Bitreversal + indexes = [] + for x in range(N): + result = 0 + for bits in logR2: + mask = (0xffffffff >> (32 - bits)) + result = (result << bits) | (x & mask) + x = x >> bits + indexes.append(result) + + # Create transpositions table + tps = [] + for c in Permutation.from_sequence(indexes).cyclic_form: + for i in range(len(c) - 1): + tps.append([c[i] * 8, c[-1] * 8]) + return tps + + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"data_{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / "data_ofdm.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-rx", + "--receivers", + type=int, + required=False, + default=64, + help='First dimension.' + ) + parser.add_argument( + "-bs", + "--beams", + type=int, + required=False, + default=32, + help='Second dimension.' + ) + parser.add_argument( + "-sc", + "--subcarriers", + type=int, + required=False, + default=4096, + help='Iterations.' + ) + + args = parser.parse_args() + N_rx = args.receivers + N_bs = args.beams + N_sc = args.subcarriers + + pFFT_src = (np.random.rand(2 * N_rx * N_sc)).astype(np.float16) + pTw_coef = (np.random.rand(int(3 * N_sc / 4))).astype(np.float16) + pBF_coef = (np.random.rand(2 * N_rx * N_bs)).astype(np.float16) + pBF_dst = (np.random.rand(2 * N_bs * N_sc)).astype(np.float16) + + Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(N_sc, 2))) + + kwargs = {'name': 'ofdm', + 'pFFT_src': pFFT_src, + 'pTw_coef': pTw_coef, + 'pBF_coef': pBF_coef, + 'pBF_dst': pBF_dst, + 'bitrev': Bitreversal, + 'N_rx': N_rx, + 'N_bs': N_bs, + 'N_sc': N_sc, + 'Log2Len': int(np.log2(N_sc)), + 'BitrevLen': len(Bitreversal)} + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() From 2413751584e84a67c80170bd1d0a6249032ec274 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 8 Jan 2024 11:38:24 +0100 Subject: [PATCH 21/39] [software] Add complex instructions to f16 cmatmul --- software/apps/baremetal/cmatmul_f16/main.c | 10 +- software/apps/ofdm/main.c | 4 +- software/data/data_cmatmul_f16.h.tpl | 2 +- software/data/data_cmatmul_f16.py | 6 +- .../kernels/baremetal/mempool_cmatmul_f16.h | 621 ++++++++---------- software/runtime/kernel/cmatmul_f16.h | 217 ------ 6 files changed, 296 insertions(+), 564 deletions(-) delete mode 100644 software/runtime/kernel/cmatmul_f16.h diff --git a/software/apps/baremetal/cmatmul_f16/main.c b/software/apps/baremetal/cmatmul_f16/main.c index 6343d98b8..17a138012 100644 --- a/software/apps/baremetal/cmatmul_f16/main.c +++ b/software/apps/baremetal/cmatmul_f16/main.c @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 -// Author: Samuel Riedel, ETH Zurich +// Author: Marco Bertuletti, ETH Zurich #include #include @@ -38,8 +38,8 @@ int main() { // Initialize Matrices if (core_id == 0) { - dma_memcpy_blocking(matrix_a, A, dim_M * dim_N * sizeof(int32_t)); - dma_memcpy_blocking(matrix_b, B, dim_N * dim_P * sizeof(int32_t)); + dma_memcpy_blocking(matrix_a, A, 2 * dim_M * dim_N * sizeof(int16_t)); + dma_memcpy_blocking(matrix_b, B, 2 * dim_N * dim_P * sizeof(int16_t)); } // Wait at barrier until everyone is ready mempool_barrier(num_cores); @@ -48,7 +48,7 @@ int main() { // Execute function to test. if (core_id == 0) { mempool_start_benchmark(); - cmatmul_2x4_f16s(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P); + cmatmul_2x2_f16s(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P); mempool_stop_benchmark(); } mempool_barrier(num_cores); @@ -81,7 +81,7 @@ int main() { #endif #if defined(TEST) - mempool_check_f32(matrix_c, C, 2 * dim_M * dim_P, 0.01f, 0); + mempool_check_f16(matrix_c, C, 2 * dim_M * dim_P, 0.1f, 0); mempool_barrier(num_cores); #endif diff --git a/software/apps/ofdm/main.c b/software/apps/ofdm/main.c index 1808669c6..8408c1035 100644 --- a/software/apps/ofdm/main.c +++ b/software/apps/ofdm/main.c @@ -101,8 +101,8 @@ int main() { /* BEAMFORMING */ mempool_start_benchmark(); - cmatmul_2x4_folded_f16p(l1_pBF_Coef_folded, l1_pFFT_Src, l1_pFFT_Dst, N_BEAMS, - N_RX, N_SC, core_id, num_cores); + cmatmul_2x4_folded_f16p(l1_pBF_Coef_folded, l1_pBF_Coef_folded, l1_pFFT_Src, + l1_pFFT_Dst, N_BEAMS, N_RX, N_SC, core_id, num_cores); mempool_stop_benchmark(); dump_prova(2); diff --git a/software/data/data_cmatmul_f16.h.tpl b/software/data/data_cmatmul_f16.h.tpl index 0f3d8e03a..15ed570a1 100644 --- a/software/data/data_cmatmul_f16.h.tpl +++ b/software/data/data_cmatmul_f16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '(__fp16){:.5f}, '.format(a) + out += '(__fp16){:.4f}, '.format(a) i += 1 if i % 8 == 0: out += '\n' diff --git a/software/data/data_cmatmul_f16.py b/software/data/data_cmatmul_f16.py index 5620e8fa4..b3010977b 100644 --- a/software/data/data_cmatmul_f16.py +++ b/software/data/data_cmatmul_f16.py @@ -97,9 +97,9 @@ def main(): B = np.reshape(B, (matrix_N * matrix_P), order='C') C = np.reshape(C, (matrix_M * matrix_P), order='C') - A = np.column_stack((A.real, A.imag)).astype(np.float16).flatten() - B = np.column_stack((B.real, B.imag)).astype(np.float16).flatten() - C = np.column_stack((C.real, C.imag)).astype(np.float16).flatten() + A = np.column_stack((A.imag, A.real)).astype(np.float16).flatten() + B = np.column_stack((B.imag, B.real)).astype(np.float16).flatten() + C = np.column_stack((C.imag, C.real)).astype(np.float16).flatten() kwargs = { 'name': 'data_cmatmul_f16', diff --git a/software/kernels/baremetal/mempool_cmatmul_f16.h b/software/kernels/baremetal/mempool_cmatmul_f16.h index a843a55e6..2252e2f18 100644 --- a/software/kernels/baremetal/mempool_cmatmul_f16.h +++ b/software/kernels/baremetal/mempool_cmatmul_f16.h @@ -22,22 +22,23 @@ float sum01_imag = 0.0f; \ float sum10_imag = 0.0f; \ float sum11_imag = 0.0f; \ + v2h a00s, a01s, a10s, a11s; \ + v2h res00, res01, res10, res11; \ for (j = 0; j < N; j += 2) { \ - v2h a00 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 0))]); \ - v2h a01 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 1))]); \ - v2h a10 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 0))]); \ - v2h a11 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 1))]); \ - v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ - v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ - v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ - v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ - v2h a00s, a01s, a10s, a11s; \ + v2h a00 = *(v2h *)&A[2 * ((i + 0) * N + (j + 0))]; \ + v2h a01 = *(v2h *)&A[2 * ((i + 0) * N + (j + 1))]; \ + v2h a10 = *(v2h *)&A[2 * ((i + 1) * N + (j + 0))]; \ + v2h a11 = *(v2h *)&A[2 * ((i + 1) * N + (j + 1))]; \ + v2h b00 = *(v2h *)&B[2 * ((j + 0) * P + (k + 0))]; \ + v2h b01 = *(v2h *)&B[2 * ((j + 0) * P + (k + 1))]; \ + v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + (k + 0))]; \ + v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + (k + 1))]; \ asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ - : [a00s] "=r"(a00s), [a01s] "=r"(a01s), [a10s] "=r"(a10s), \ - [a11s] "=r"(a11s) \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ + [a11s] "=&r"(a11s) \ : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ [a11] "r"(a11), [mask] "r"(0x00020003) \ :); \ @@ -50,8 +51,8 @@ "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ - : [sum00_imag] "=r"(sum00_imag), [sum01_imag] "=r"(sum01_imag), \ - [sum10_imag] "=r"(sum10_imag), [sum11_imag] "=r"(sum11_imag) \ + : [sum00_imag] "+&r"(sum00_imag), [sum01_imag] "+&r"(sum01_imag), \ + [sum10_imag] "+&r"(sum10_imag), [sum11_imag] "+&r"(sum11_imag) \ : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ [b11] "r"(b11) \ @@ -60,10 +61,10 @@ "xor %[a10s], %[a10], %[mask];" \ "xor %[a01s], %[a01], %[mask];" \ "xor %[a11s], %[a11], %[mask];" \ - : [a00s] "=r"(a00s), [a01s] "=r"(a01s), [a10s] "=r"(a10s), \ - [a11s] "=r"(a11s) \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ + [a11s] "=&r"(a11s) \ : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x80000000) \ + [a11] "r"(a11), [mask] "r"(0x00008000) \ :); \ asm volatile( \ "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ @@ -74,19 +75,17 @@ "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ - : [sum00_real] "=r"(sum00_real), [sum01_real] "=r"(sum01_real), \ - [sum10_real] "=r"(sum10_real), [sum11_real] "=r"(sum11_real) \ + : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ + [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real) \ : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ [b11] "r"(b11) \ :); \ } \ - v2h res00, res01; \ - v2h res10, res11; \ - asm volatile("vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ - "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ - "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ - "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ + asm volatile("vfcpka.h.s %[res00], %[sum00_imag], %[sum00_real];" \ + "vfcpka.h.s %[res01], %[sum01_imag], %[sum01_real];" \ + "vfcpka.h.s %[res10], %[sum10_imag], %[sum10_real];" \ + "vfcpka.h.s %[res11], %[sum11_imag], %[sum11_real];" \ : [res00] "=r"(res00), [res01] "=r"(res01), \ [res10] "=r"(res10), [res11] "=r"(res11) \ : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ @@ -100,46 +99,41 @@ (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; #define CMATMUL_2x4_LOOP \ - float sum00_real = 0.0f; \ - float sum01_real = 0.0f; \ - float sum02_real = 0.0f; \ - float sum03_real = 0.0f; \ - float sum10_real = 0.0f; \ - float sum11_real = 0.0f; \ - float sum12_real = 0.0f; \ - float sum13_real = 0.0f; \ - float sum00_imag = 0.0f; \ - float sum01_imag = 0.0f; \ - float sum02_imag = 0.0f; \ - float sum03_imag = 0.0f; \ - float sum10_imag = 0.0f; \ - float sum11_imag = 0.0f; \ - float sum12_imag = 0.0f; \ - float sum13_imag = 0.0f; \ + float register volatile sum00_real = 0.0f; \ + float register volatile sum01_real = 0.0f; \ + float register volatile sum02_real = 0.0f; \ + float register volatile sum03_real = 0.0f; \ + float register volatile sum10_real = 0.0f; \ + float register volatile sum11_real = 0.0f; \ + float register volatile sum12_real = 0.0f; \ + float register volatile sum13_real = 0.0f; \ + float register volatile sum00_imag = 0.0f; \ + float register volatile sum01_imag = 0.0f; \ + float register volatile sum02_imag = 0.0f; \ + float register volatile sum03_imag = 0.0f; \ + float register volatile sum10_imag = 0.0f; \ + float register volatile sum11_imag = 0.0f; \ + float register volatile sum12_imag = 0.0f; \ + float register volatile sum13_imag = 0.0f; \ + v2h a00s, a01s, a10s, a11s; \ for (j = 0; j < N; j += 2) { \ - v2h a00 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 0))]); \ - v2h a01 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 1))]); \ - v2h a10 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 0))]); \ - v2h a11 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 1))]); \ - v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ - v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ - v2h b02 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 2))]); \ - v2h b03 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 3))]); \ - v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ - v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ - v2h b12 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 2))]); \ - v2h b13 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 3))]); \ - v2h a00s, a01s, a10s, a11s; \ - asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ - "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ - "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ - "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ - : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ - [a11s] "+r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x00020003) \ - :); \ + v2h a00 = A[(i + 0) * N + (j + 0)]; \ + v2h a01 = A[(i + 0) * N + (j + 1)]; \ + v2h a10 = A[(i + 1) * N + (j + 0)]; \ + v2h a11 = A[(i + 1) * N + (j + 1)]; \ + v2h b00 = B[(j + 0) * P + (k + 0)]; \ + v2h b01 = B[(j + 0) * P + (k + 1)]; \ + v2h b02 = B[(j + 0) * P + (k + 2)]; \ + v2h b03 = B[(j + 0) * P + (k + 3)]; \ + v2h b10 = B[(j + 1) * P + (k + 0)]; \ + v2h b11 = B[(j + 1) * P + (k + 1)]; \ + v2h b12 = B[(j + 1) * P + (k + 2)]; \ + v2h b13 = B[(j + 1) * P + (k + 3)]; \ asm volatile( \ + "pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ @@ -156,25 +150,22 @@ "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ - : [sum00_imag] "=r"(sum00_imag), [sum01_imag] "=r"(sum01_imag), \ - [sum02_imag] "=r"(sum02_imag), [sum03_imag] "=r"(sum03_imag), \ - [sum10_imag] "=r"(sum10_imag), [sum11_imag] "=r"(sum11_imag), \ - [sum12_imag] "=r"(sum12_imag), [sum13_imag] "=r"(sum13_imag) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ - [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ - [b13] "r"(b13) \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ + [a11s] "=&r"(a11s), [sum00_imag] "+&r"(sum00_imag), \ + [sum01_imag] "+&r"(sum01_imag), [sum02_imag] "+&r"(sum02_imag), \ + [sum03_imag] "+&r"(sum03_imag), [sum10_imag] "+&r"(sum10_imag), \ + [sum11_imag] "+&r"(sum11_imag), [sum12_imag] "+&r"(sum12_imag), \ + [sum13_imag] "+&r"(sum13_imag) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ + [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13), \ + [mask] "r"(0x00020003) \ :); \ - asm volatile("xor %[a00s], %[a00], %[mask];" \ - "xor %[a10s], %[a10], %[mask];" \ - "xor %[a01s], %[a01], %[mask];" \ - "xor %[a11s], %[a11], %[mask];" \ - : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ - [a11s] "+r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x80000000) \ - :); \ asm volatile( \ + "xor %[a00s], %[a00], %[maskn];" \ + "xor %[a10s], %[a10], %[maskn];" \ + "xor %[a01s], %[a01], %[maskn];" \ + "xor %[a11s], %[a11], %[maskn];" \ "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ @@ -191,229 +182,166 @@ "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ - : [sum00_real] "=r"(sum00_real), [sum01_real] "=r"(sum01_real), \ - [sum02_real] "=r"(sum02_real), [sum03_real] "=r"(sum03_real), \ - [sum10_real] "=r"(sum10_real), [sum11_real] "=r"(sum11_real), \ - [sum12_real] "=r"(sum12_real), [sum13_real] "=r"(sum13_real) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ - [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ - [b13] "r"(b13) \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ + [a11s] "=&r"(a11s), [sum00_real] "+&r"(sum00_real), \ + [sum01_real] "+&r"(sum01_real), [sum02_real] "+&r"(sum02_real), \ + [sum03_real] "+&r"(sum03_real), [sum10_real] "+&r"(sum10_real), \ + [sum11_real] "+&r"(sum11_real), [sum12_real] "+&r"(sum12_real), \ + [sum13_real] "+&r"(sum13_real) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ + [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13), \ + [maskn] "r"(0x00008000) \ :); \ } \ - v2h res00, res01, res02, res03; \ - v2h res10, res11, res12, res13; \ asm volatile( \ - "vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ - "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ - "vfcpka.h.s %[res02], %[sum02_real], %[sum02_imag];" \ - "vfcpka.h.s %[res03], %[sum03_real], %[sum03_imag];" \ - "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ - "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ - "vfcpka.h.s %[res12], %[sum12_real], %[sum12_imag];" \ - "vfcpka.h.s %[res13], %[sum13_real], %[sum13_imag];" \ - : [res00] "+r"(res00), [res01] "+r"(res01), [res02] "+r"(res02), \ - [res03] "+r"(res03), [res10] "+r"(res10), [res11] "+r"(res11), \ - [res12] "+r"(res12), [res13] "+r"(res13) \ + "vfcpka.h.s %[sum00_real], %[sum00_imag], %[sum00_real];" \ + "vfcpka.h.s %[sum01_real], %[sum01_imag], %[sum01_real];" \ + "vfcpka.h.s %[sum02_real], %[sum02_imag], %[sum02_real];" \ + "vfcpka.h.s %[sum03_real], %[sum03_imag], %[sum03_real];" \ + "vfcpka.h.s %[sum10_real], %[sum10_imag], %[sum10_real];" \ + "vfcpka.h.s %[sum11_real], %[sum11_imag], %[sum11_real];" \ + "vfcpka.h.s %[sum12_real], %[sum12_imag], %[sum12_real];" \ + "vfcpka.h.s %[sum13_real], %[sum13_imag], %[sum13_real];" \ + : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ + [sum02_real] "+&r"(sum02_real), [sum03_real] "+&r"(sum03_real), \ + [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real), \ + [sum12_real] "+&r"(sum12_real), [sum13_real] "+&r"(sum13_real) \ : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ - [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag), \ - [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ - [sum02_real] "r"(sum02_real), [sum03_real] "r"(sum03_real), \ - [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real), \ - [sum12_real] "r"(sum12_real), [sum13_real] "r"(sum13_real) \ + [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag) \ :); \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = res02; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = res03; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = res12; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = res13; + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = (v2h) sum00_real; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = (v2h) sum01_real; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = (v2h) sum02_real; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = (v2h) sum03_real; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = (v2h) sum10_real; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = (v2h) sum11_real; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = (v2h) sum12_real; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = (v2h) sum13_real; -#define CMATMUL_2x4_LOOP_FOLDED \ - float sum00_real = 0.0f; \ - float sum01_real = 0.0f; \ - float sum02_real = 0.0f; \ - float sum03_real = 0.0f; \ - float sum10_real = 0.0f; \ - float sum11_real = 0.0f; \ - float sum12_real = 0.0f; \ - float sum13_real = 0.0f; \ - float sum00_imag = 0.0f; \ - float sum01_imag = 0.0f; \ - float sum02_imag = 0.0f; \ - float sum03_imag = 0.0f; \ - float sum10_imag = 0.0f; \ - float sum11_imag = 0.0f; \ - float sum12_imag = 0.0f; \ - float sum13_imag = 0.0f; \ - for (j = 0; j < N; j += 2) { \ - v2h a00 = \ - (*(v2h *)&A_folded[2 * ((i + 0) * NUM_BANKS + shift * N + (j + 0))]); \ - v2h a01 = \ - (*(v2h *)&A_folded[2 * ((i + 0) * NUM_BANKS + shift * N + (j + 1))]); \ - v2h a10 = \ - (*(v2h *)&A_folded[2 * ((i + 1) * NUM_BANKS + shift * N + (j + 0))]); \ - v2h a11 = \ - (*(v2h *)&A_folded[2 * ((i + 1) * NUM_BANKS + shift * N + (j + 1))]); \ - v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ - v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ - v2h b02 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 2))]); \ - v2h b03 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 3))]); \ - v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ - v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ - v2h b12 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 2))]); \ - v2h b13 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 3))]); \ - v2h a00s, a01s, a10s, a11s; \ - asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ - "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ - "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ - "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ - : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ - [a11s] "+r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x00020003) \ +/**************************************************************************/ +/**************************************************************************/ +// COMPLEX DOTP INSTRUCTIONS + +#define CMATMUL_CDOTP_1x1_LOOP \ + v2h sum = (v2h)0.0f; \ + for (j = 0; j < N; j++) { \ + v2h a = *(v2h *)&A[2 * (i * M + j)]; \ + v2h b = *(v2h *)&B[2 * (j * P + k)]; \ + asm volatile("fcdotpex.s.h %[sum], %[a], %[b];" \ + : [sum] "+&r"(sum) \ + : [a] "r"(a), [b] "r"(b) \ :); \ + } \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum; + +#define CMATMUL_CDOTP_2x2_LOOP \ + v2h sum00 = (v2h)0.0f; \ + v2h sum01 = (v2h)0.0f; \ + v2h sum10 = (v2h)0.0f; \ + v2h sum11 = (v2h)0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = *(v2h *)&A[2 * ((i + 0) * M + (j + 0))]; \ + v2h a01 = *(v2h *)&A[2 * ((i + 0) * M + (j + 1))]; \ + v2h a10 = *(v2h *)&A[2 * ((i + 1) * M + (j + 0))]; \ + v2h a11 = *(v2h *)&A[2 * ((i + 1) * M + (j + 1))]; \ + v2h b00 = *(v2h *)&B[2 * ((j + 0) * P + (k + 0))]; \ + v2h b01 = *(v2h *)&B[2 * ((j + 0) * P + (k + 1))]; \ + v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + (k + 0))]; \ + v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + (k + 1))]; \ asm volatile( \ - "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ - "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ - "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ - "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ - "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ - "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ - "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ - "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ - "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ - : [sum00_imag] "=r"(sum00_imag), [sum01_imag] "=r"(sum01_imag), \ - [sum02_imag] "=r"(sum02_imag), [sum03_imag] "=r"(sum03_imag), \ - [sum10_imag] "=r"(sum10_imag), [sum11_imag] "=r"(sum11_imag), \ - [sum12_imag] "=r"(sum12_imag), [sum13_imag] "=r"(sum13_imag) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ - [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ - [b13] "r"(b13) \ + "fcdotpex.s.h %[sum00], %[a00], %[b00];" \ + "fcdotpex.s.h %[sum10], %[a10], %[b00];" \ + "fcdotpex.s.h %[sum01], %[a00], %[b01];" \ + "fcdotpex.s.h %[sum11], %[a10], %[b01];" \ + "fcdotpex.s.h %[sum00], %[a01], %[b10];" \ + "fcdotpex.s.h %[sum10], %[a11], %[b10];" \ + "fcdotpex.s.h %[sum01], %[a01], %[b11];" \ + "fcdotpex.s.h %[sum11], %[a11], %[b11];" \ + : [sum00] "+&r"(sum00), [sum01] "+&r"(sum01), [sum10] "+&r"(sum10), \ + [sum11] "+&r"(sum11) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), [b11] "r"(b11) \ :); \ - asm volatile("xor %[a00s], %[a00], %[mask];" \ - "xor %[a01s], %[a01], %[mask];" \ - "xor %[a10s], %[a10], %[mask];" \ - "xor %[a11s], %[a11], %[mask];" \ - : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ - [a11s] "+r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x80000000) \ - :); \ + } \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = sum01; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = sum10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; + +#define CMATMUL_CDOTP_2x4_LOOP \ + v2h sum00 = (v2h)0.0f; \ + v2h sum01 = (v2h)0.0f; \ + v2h sum02 = (v2h)0.0f; \ + v2h sum03 = (v2h)0.0f; \ + v2h sum10 = (v2h)0.0f; \ + v2h sum11 = (v2h)0.0f; \ + v2h sum12 = (v2h)0.0f; \ + v2h sum13 = (v2h)0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = A[i * M + j + 0]; \ + v2h a01 = A[i * M + j + 1]; \ + v2h a10 = A[(i + 1) * M + j + 0]; \ + v2h a11 = A[(i + 1) * M + j + 1]; \ + v2h b00 = B[j * P + k + 0]; \ + v2h b01 = B[j * P + k + 1]; \ + v2h b02 = B[j * P + k + 2]; \ + v2h b03 = B[j * P + k + 3]; \ + v2h b10 = B[(j + 1) * P + k + 0]; \ + v2h b11 = B[(j + 1) * P + k + 1]; \ + v2h b12 = B[(j + 1) * P + k + 2]; \ + v2h b13 = B[(j + 1) * P + k + 3]; \ asm volatile( \ - "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ - "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ - "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ - "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ - "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ - "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ - "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ - "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ - "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ - : [sum00_real] "=r"(sum00_real), [sum01_real] "=r"(sum01_real), \ - [sum02_real] "=r"(sum02_real), [sum03_real] "=r"(sum03_real), \ - [sum10_real] "=r"(sum10_real), [sum11_real] "=r"(sum11_real), \ - [sum12_real] "=r"(sum12_real), [sum13_real] "=r"(sum13_real) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ - [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ - [b13] "r"(b13) \ + "fcdotpex.s.h %[sum00], %[a00], %[b00];" \ + "fcdotpex.s.h %[sum10], %[a10], %[b00];" \ + "fcdotpex.s.h %[sum01], %[a00], %[b01];" \ + "fcdotpex.s.h %[sum11], %[a10], %[b01];" \ + "fcdotpex.s.h %[sum02], %[a00], %[b02];" \ + "fcdotpex.s.h %[sum12], %[a10], %[b02];" \ + "fcdotpex.s.h %[sum03], %[a00], %[b03];" \ + "fcdotpex.s.h %[sum13], %[a10], %[b03];" \ + "fcdotpex.s.h %[sum00], %[a01], %[b10];" \ + "fcdotpex.s.h %[sum10], %[a11], %[b10];" \ + "fcdotpex.s.h %[sum01], %[a01], %[b11];" \ + "fcdotpex.s.h %[sum11], %[a11], %[b11];" \ + "fcdotpex.s.h %[sum02], %[a01], %[b12];" \ + "fcdotpex.s.h %[sum12], %[a11], %[b12];" \ + "fcdotpex.s.h %[sum03], %[a01], %[b13];" \ + "fcdotpex.s.h %[sum13], %[a11], %[b13];" \ + : [sum00] "+&r"(sum00), [sum01] "+&r"(sum01), [sum02] "+&r"(sum02), \ + [sum03] "+&r"(sum03), [sum10] "+&r"(sum10), [sum11] "+&r"(sum11), \ + [sum12] "+&r"(sum12), [sum13] "+&r"(sum13) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ + [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13) \ :); \ } \ - v2h res00, res01, res02, res03; \ - v2h res10, res11, res12, res13; \ - asm volatile( \ - "vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ - "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ - "vfcpka.h.s %[res02], %[sum02_real], %[sum02_imag];" \ - "vfcpka.h.s %[res03], %[sum03_real], %[sum03_imag];" \ - "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ - "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ - "vfcpka.h.s %[res12], %[sum12_real], %[sum12_imag];" \ - "vfcpka.h.s %[res13], %[sum13_real], %[sum13_imag];" \ - : [res00] "+r"(res00), [res01] "+r"(res01), [res02] "+r"(res02), \ - [res03] "+r"(res03), [res10] "+r"(res10), [res11] "+r"(res11), \ - [res12] "+r"(res12), [res13] "+r"(res13) \ - : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ - [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ - [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ - [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag), \ - [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ - [sum02_real] "r"(sum02_real), [sum03_real] "r"(sum03_real), \ - [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real), \ - [sum12_real] "r"(sum12_real), [sum13_real] "r"(sum13_real) \ - :); \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = res02; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = res03; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = res12; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = res13; + C[i * P + k + 0] = sum00; \ + C[i * P + k + 1] = sum01; \ + C[i * P + k + 2] = sum02; \ + C[i * P + k + 3] = sum03; \ + C[(i + 1) * P + k + 0] = sum10; \ + C[(i + 1) * P + k + 1] = sum11; \ + C[(i + 1) * P + k + 2] = sum12; \ + C[(i + 1) * P + k + 3] = sum13; -void cmatmul_f16s(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, - __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P) { - uint32_t i = 0; // loop counter for M - uint32_t j = 0; // loop counter for N - uint32_t k = 0; // loop counter for P - for (k = 0; k < P; k++) { - for (i = 0; i < M; i++) { - float sum_real = 0.0f; - float sum_imag = 0.0f; - for (j = 0; j < N; j++) { - v2h a = (*(v2h *)&A[2 * (i * N + j)]); - v2h b = (*(v2h *)&B[2 * (j * P + k)]); - v2h as; - asm volatile("pv.shuffle2.h %[as], %[a], %[mask_shuffle];" - "vfdotpex.s.h %[sum_imag], %[as], %[b];" - "xor %[as], %[a], %[mask_sign];" - "vfdotpex.s.h %[sum_real], %[as], %[b];" - : [sum_real] "+&r"(sum_real), [sum_imag] "+&r"(sum_imag), - [as] "+&r"(as) - : [a] "r"(a), [b] "r"(b), [mask_shuffle] "r"(0x00020003), - [mask_sign] "r"(0x80000000) - :); - } - v2h res; - asm volatile("vfcpka.h.s %[res], %[sum_real], %[sum_imag];" - : [res] "+r"(res) - : [sum_real] "r"(sum_real), [sum_imag] "r"(sum_imag) - :); - (*(v2h *)&C[2 * (i * P + k)]) = res; - } - } - return; -} - -void cmatmul_2x4_f16s(__fp16 const *__restrict__ A, +#define __CDOTP +void cmatmul_2x2_f16s(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P) { + uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P - for (k = 0; k < P; k += 4) { + for (k = 0; k < P; k += 2) { for (i = 0; i < M; i += 2) { - CMATMUL_2x4_LOOP; +#ifdef __CDOTP + CMATMUL_CDOTP_2x2_LOOP; +#else + CMATMUL_2x2_LOOP; +#endif } } return; @@ -427,92 +355,113 @@ void cmatmul_2x2_f16p(__fp16 const *__restrict__ A, uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P - uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); for (k = core_id * 2; k < P; k += 2 * numThreads) { - // dump_prova(k); - for (i = shift_id; i < M; i += 2) { - CMATMUL_2x2_LOOP; - } - for (i = 0; i < shift_id; i += 2) { + for (i = 0; i < M; i += 2) { +#ifdef __CDOTP + CMATMUL_CDOTP_2x2_LOOP; +#else CMATMUL_2x2_LOOP; +#endif } } + mempool_log_partial_barrier(2, core_id, numThreads); return; } -void cmatmul_2x4_f16p(__fp16 const *__restrict__ A, - __fp16 const *__restrict__ B, __fp16 *__restrict__ C, - uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, - uint32_t numThreads) { - +#define __SHIFT_A +void cmatmul_2x4_f16p(__fp16 *__restrict__ A, __fp16 const *__restrict__ B, + __fp16 *__restrict__ C, uint32_t M, uint32_t N, + uint32_t P, uint32_t core_id, uint32_t numThreads) { uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P - // uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); +#ifndef __SHIFT_A for (k = core_id * 4; k < P; k += 4 * numThreads) { for (i = 0; i < M; i += 2) { +#ifdef __CDOTP + CMATMUL_CDOTP_2x4_LOOP; +#else CMATMUL_2x4_LOOP; +#endif } } +#else + uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = shift_id; i < M; i += 2) { +#ifdef __CDOTP + CMATMUL_CDOTP_2x4_LOOP; +#else + CMATMUL_2x4_LOOP; +#endif + } + for (i = 0; i < shift_id; i += 2) { +#ifdef __CDOTP + CMATMUL_CDOTP_2x4_LOOP; +#else + CMATMUL_2x4_LOOP; +#endif + } + } +#endif + mempool_log_partial_barrier(2, core_id, numThreads); return; } -void cmatmul_2x4_folded_f16p(__fp16 const *__restrict__ A, - __fp16 const *__restrict__ B, - __fp16 *__restrict__ A_folded, - __fp16 *__restrict__ C, uint32_t M, uint32_t N, - uint32_t P, uint32_t core_id, - uint32_t numThreads) { - +void cmatmul_2x4_folded_f16p(v2h *A, v2h const *__restrict__ B, + v2h *__restrict__ A_folded, v2h *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, + uint32_t core_id, uint32_t numThreads) { uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P - uint32_t NUM_BANKS = NUM_CORES * 4; - - // uint32_t core_id_shuffling = core_id / (N / 4); - // uint32_t numThreads_shuffling = numThreads / (N / 4); - // if ((core_id % (N / 4)) == 0) { - // // Loop over the rows with cores from different cluster locations - // for (i = core_id_shuffling; i < M; i += numThreads_shuffling) { - // for (j = 0; j < N; j += 4) { - // // Copy multiple A matrices in memory - // v2h a0 = (*(v2h *)&A[2 * (i * N + j)]); - // v2h a1 = (*(v2h *)&A[2 * (i * N + j + 1)]); - // v2h a2 = (*(v2h *)&A[2 * (i * N + j + 2)]); - // v2h a3 = (*(v2h *)&A[2 * (i * N + j + 3)]); - // for (k = 0; k < NUM_BANKS / N; k++) { - // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j)]) = a0; - // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j + 1)]) = a1; - // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j + 2)]) = a2; - // (*(v2h *)&A_folded[2 * (i * NUM_BANKS + k * N + j + 3)]) = a3; - // } - // } - // } - // } - // Copy multiple A matrices in memory - uint32_t num_copy = NUM_BANKS / N; + uint32_t num_copy = NUM_BANKS / (N * M); for (k = core_id * 4; k < N * M; k += 4 * numThreads) { - v2h a0 = (*(v2h *)&A[2 * k]); - v2h a1 = (*(v2h *)&A[2 * (k + 1)]); - v2h a2 = (*(v2h *)&A[2 * (k + 2)]); - v2h a3 = (*(v2h *)&A[2 * (k + 3)]); + v2h a0 = *(v2h *)&A[2 * k]; + v2h a1 = *(v2h *)&A[2 * (k + 1)]; + v2h a2 = *(v2h *)&A[2 * (k + 2)]; + v2h a3 = *(v2h *)&A[2 * (k + 3)]; i = k / N; // row_index j = k % N; // col_index for (uint32_t idx_copy = 0; idx_copy < num_copy; idx_copy++) { - (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + idx_copy * N)]) = a0; - (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + 1 + idx_copy * N)]) = a1; - (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + 2 + idx_copy * N)]) = a2; - (*(v2h *)&A_folded[2 * (i * NUM_BANKS + j + 3 + idx_copy * N)]) = a3; + (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j)]) = a0; + (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j + 1)]) = a1; + (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j + 2)]) = a2; + (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j + 3)]) = a3; } } - mempool_barrier(numThreads); - - uint32_t shift = core_id / N; + A = A_folded + 2 * (N * M) * ((core_id * BANKING_FACTOR) / (N * M)); + mempool_log_partial_barrier(2, core_id, numThreads); + // Compute +#ifndef __SHIFT_A for (k = core_id * 4; k < P; k += 4 * numThreads) { for (i = 0; i < M; i += 2) { - CMATMUL_2x4_LOOP_FOLDED; +#ifdef __CDOTP + CMATMUL_CDOTP_2x4_LOOP; +#else + CMATMUL_2x4_LOOP; +#endif } } +#else + uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = shift_id; i < M; i += 2) { + // CMATMUL_2x4_LOOP; + CMATMUL_CDOTP_2x4_LOOP; + } + for (i = 0; i < shift_id; i += 2) { +#ifdef __CDOTP + CMATMUL_CDOTP_2x4_LOOP; +#else + CMATMUL_2x4_LOOP; +#endif + } + } +#endif + mempool_log_partial_barrier(2, core_id, numThreads); + dump_prova(2); + return; } diff --git a/software/runtime/kernel/cmatmul_f16.h b/software/runtime/kernel/cmatmul_f16.h deleted file mode 100644 index c80473679..000000000 --- a/software/runtime/kernel/cmatmul_f16.h +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -/* This library implements the complex matrix multiplication in multiple - * different ways. The functions all follow the following format: - * - * A is an M x N matrix, B is a N x P matrix, and C is a M x P matrix - * C = AB - */ - -#include "xpulp/builtins_v2.h" - -#define CMATMUL_2x4_LOOP \ - float sum00_real = 0.0f; \ - float sum01_real = 0.0f; \ - float sum02_real = 0.0f; \ - float sum03_real = 0.0f; \ - float sum10_real = 0.0f; \ - float sum11_real = 0.0f; \ - float sum12_real = 0.0f; \ - float sum13_real = 0.0f; \ - float sum00_imag = 0.0f; \ - float sum01_imag = 0.0f; \ - float sum02_imag = 0.0f; \ - float sum03_imag = 0.0f; \ - float sum10_imag = 0.0f; \ - float sum11_imag = 0.0f; \ - float sum12_imag = 0.0f; \ - float sum13_imag = 0.0f; \ - for (j = 0; j < N; j += 2) { \ - v2h a00 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 0))]); \ - v2h a01 = (*(v2h *)&A[2 * ((i + 0) * N + (j + 1))]); \ - v2h a10 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 0))]); \ - v2h a11 = (*(v2h *)&A[2 * ((i + 1) * N + (j + 1))]); \ - v2h b00 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 0))]); \ - v2h b01 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 1))]); \ - v2h b02 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 2))]); \ - v2h b03 = (*(v2h *)&B[2 * ((j + 0) * P + (k + 3))]); \ - v2h b10 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 0))]); \ - v2h b11 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 1))]); \ - v2h b12 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 2))]); \ - v2h b13 = (*(v2h *)&B[2 * ((j + 1) * P + (k + 3))]); \ - v2h a00s, a01s, a10s, a11s; \ - asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ - "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ - "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ - "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ - : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ - [a11s] "+r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x00020003) \ - :); \ - asm volatile( \ - "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ - "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ - "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ - "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ - "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ - "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ - "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ - "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ - "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ - : [sum00_imag] "+&r"(sum00_imag), [sum01_imag] "+&r"(sum01_imag), \ - [sum02_imag] "+&r"(sum02_imag), [sum03_imag] "+&r"(sum03_imag), \ - [sum10_imag] "+&r"(sum10_imag), [sum11_imag] "+&r"(sum11_imag), \ - [sum12_imag] "+&r"(sum12_imag), [sum13_imag] "+&r"(sum13_imag) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ - [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ - [b13] "r"(b13) \ - :); \ - asm volatile("xor %[a00s], %[a00], %[mask];" \ - "xor %[a01s], %[a01], %[mask];" \ - "xor %[a10s], %[a10], %[mask];" \ - "xor %[a11s], %[a11], %[mask];" \ - : [a00s] "+r"(a00s), [a01s] "+r"(a01s), [a10s] "+r"(a10s), \ - [a11s] "+r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x80000000) \ - :); \ - asm volatile( \ - "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ - "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ - "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ - "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ - "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ - "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ - "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ - "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ - "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ - : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ - [sum02_real] "+&r"(sum02_real), [sum03_real] "+&r"(sum03_real), \ - [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real), \ - [sum12_real] "+&r"(sum12_real), [sum13_real] "+&r"(sum13_real) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), \ - [b03] "r"(b03), [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), \ - [b13] "r"(b13) \ - :); \ - } \ - v2h res00, res01, res02, res03; \ - v2h res10, res11, res12, res13; \ - asm volatile( \ - "vfcpka.h.s %[res00], %[sum00_real], %[sum00_imag];" \ - "vfcpka.h.s %[res01], %[sum01_real], %[sum01_imag];" \ - "vfcpka.h.s %[res02], %[sum02_real], %[sum02_imag];" \ - "vfcpka.h.s %[res03], %[sum03_real], %[sum03_imag];" \ - "vfcpka.h.s %[res10], %[sum10_real], %[sum10_imag];" \ - "vfcpka.h.s %[res11], %[sum11_real], %[sum11_imag];" \ - "vfcpka.h.s %[res12], %[sum12_real], %[sum12_imag];" \ - "vfcpka.h.s %[res13], %[sum13_real], %[sum13_imag];" \ - : [res00] "+r"(res00), [res01] "+r"(res01), [res02] "+r"(res02), \ - [res03] "+r"(res03), [res10] "+r"(res10), [res11] "+r"(res11), \ - [res12] "+r"(res12), [res13] "+r"(res13) \ - : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ - [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ - [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ - [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag), \ - [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ - [sum02_real] "r"(sum02_real), [sum03_real] "r"(sum03_real), \ - [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real), \ - [sum12_real] "r"(sum12_real), [sum13_real] "r"(sum13_real) \ - :); \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = res02; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = res03; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = res12; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = res13; - -void cmatmul_f16s(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, - __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P) { - uint32_t i = 0; // loop counter for M - uint32_t j = 0; // loop counter for N - uint32_t k = 0; // loop counter for P - for (k = 0; k < P; k++) { - for (i = 0; i < M; i++) { - float sum_real = 0.0f; - float sum_imag = 0.0f; - for (j = 0; j < N; j++) { - v2h a = (*(v2h *)&A[2 * (i * N + j)]); - v2h b = (*(v2h *)&B[2 * (j * P + k)]); - v2h as; - asm volatile("pv.shuffle2.h %[as], %[a], %[mask_shuffle];" - "vfdotpex.s.h %[sum_imag], %[as], %[b];" - "xor %[as], %[a], %[mask_sign];" - "vfdotpex.s.h %[sum_real], %[as], %[b];" - : [sum_real] "+&r"(sum_real), [sum_imag] "+&r"(sum_imag), - [as] "+&r"(as) - : [a] "r"(a), [b] "r"(b), [mask_shuffle] "r"(0x00020003), - [mask_sign] "r"(0x80000000) - :); - } - v2h res; - asm volatile("vfcpka.h.s %[res], %[sum_real], %[sum_imag];" - : [res] "+r"(res) - : [sum_real] "r"(sum_real), [sum_imag] "r"(sum_imag) - :); - (*(v2h *)&C[2 * (i * P + k)]) = res; - } - } - return; -} - -void cmatmul_2x4_f16s(__fp16 const *__restrict__ A, - __fp16 const *__restrict__ B, __fp16 *__restrict__ C, - uint32_t M, uint32_t N, uint32_t P) { - uint32_t i = 0; // loop counter for M - uint32_t j = 0; // loop counter for N - uint32_t k = 0; // loop counter for P - for (k = 0; k < P; k += 4) { - for (i = 0; i < M; i += 2) { - CMATMUL_2x4_LOOP; - } - } - return; -} - -void cmatmul_2x4_f16p(__fp16 const *__restrict__ A, - __fp16 const *__restrict__ B, __fp16 *__restrict__ C, - uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, - uint32_t numThreads) { - - uint32_t i = 0; // loop counter for M - uint32_t j = 0; // loop counter for N - uint32_t k = 0; // loop counter for P - - uint32_t shift_id = core_id % (M / 2); - for (k = core_id * 4; k < P; k += 4 * numThreads) { - for (i = 0; i < shift_id; i += 2) { - CMATMUL_2x4_LOOP; - } - for (i = shift_id; i < M; i += 2) { - CMATMUL_2x4_LOOP; - } - } - return; -} From 3a204cf4dd76e0d3c2aaabcb403ab5100cd45929 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 11 Jan 2024 10:54:09 +0100 Subject: [PATCH 22/39] [software] Handle multiple beamgroups in MIMO MMSE --- software/apps/baremetal/mimo_mmse_f16/main.c | 30 +- software/data/data_mimo_mmse_f16.h.tpl | 4 +- software/data/data_mimo_mmse_f16.py | 71 ++-- .../baremetal/mempool_mimo_mmse_f16s.h | 318 +++++++++++------- 4 files changed, 262 insertions(+), 161 deletions(-) diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index 12651b886..0afb340c0 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -34,6 +34,8 @@ __fp16 l1_L[2 * N_TX * N_TX * N_ITR] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), section(".l1_prio"))); +uint32_t l1_beamgroups[N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1_Sigma[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_y[2 * N_RX * N_ITR] @@ -54,6 +56,7 @@ int main() { /* Initialize matrices */ if (core_id == 0) { + dma_memcpy_blocking(l1_beamgroups, l2_beamgroups, N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); @@ -79,6 +82,9 @@ int main() { mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + uint32_t N_bg = l1_beamgroups[itr]; + uint32_t N_TX_bg = N_TX / N_bg; + __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = l1_y + itr * (2 * N_RX); __fp16 *PtrSigma = l1_Sigma + itr * (2 * N_TX); @@ -89,11 +95,18 @@ int main() { __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); - mempool_cholesky_f16s(PtrG, PtrL, N_TX); - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + for (uint32_t itr_bg = 0; itr_bg < N_bg; itr_bg++) { + mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX_bg); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX_bg); + mempool_cholesky_f16s(PtrG, PtrL, N_TX_bg); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX_bg); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX_bg); + + // Shift over the subsequent beamgroup + PtrH += 2 * itr_bg * N_TX_bg * N_RX; + PtrSigma += 2 * itr_bg * N_TX_bg; + Ptrx += 2 * itr_bg * N_TX_bg; + } } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); @@ -129,15 +142,16 @@ int main() { #endif // Check the result - mempool_check_f16(l1_x, l2_x, 2 * N_TX, 0.1f, 0); + mempool_check_f16(l1_x, l2_x, 2 * N_TX, 0.01f, 0); mempool_barrier(num_cores); return 0; } #else -#define N_ROUNDS (3) -#define DMA_TRANSFER2 +/*******************************************/ +/* TEST OF THE KERNELS WITH DATA MOVEMENTS */ +/*******************************************/ // Inputs-Outputs even double-buffering rounds __fp16 l1A_H[2 * N_TX * N_RX * N_ITR] diff --git a/software/data/data_mimo_mmse_f16.h.tpl b/software/data/data_mimo_mmse_f16.h.tpl index abe2b37c4..1f3f638ff 100644 --- a/software/data/data_mimo_mmse_f16.h.tpl +++ b/software/data/data_mimo_mmse_f16.h.tpl @@ -34,9 +34,9 @@ // Inputs -uint32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_beamgroups[${N_itr}] = ${array_to_str(beamgroups)}; +uint32_t l2_beamgroups[${N_itr}] = ${array_to_str(beamgroups)}; -__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; +__fp16 l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; __fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; diff --git a/software/data/data_mimo_mmse_f16.py b/software/data/data_mimo_mmse_f16.py index 2d7663e2f..ff41e7e18 100644 --- a/software/data/data_mimo_mmse_f16.py +++ b/software/data/data_mimo_mmse_f16.py @@ -30,13 +30,10 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), f.write(template.render(**kwargs)) -def gen_input_data(N_rx, N_tx): +def gen_input_data(N_rx, N_tx, y): # Create channel matrix H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * \ np.random.rand(N_rx, N_tx).astype(np.float16) - # Create input vector - y = np.random.rand(N_rx).astype(np.float16) + 1.j * \ - np.random.rand(N_rx).astype(np.float16) # Generate noise variance sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float16)) @@ -118,26 +115,57 @@ def main(): default=256, help='Iterations.' ) + parser.add_argument( + "-r", + "--randomize", + type=int, + required=False, + default=0, + help='Randomizes the number of beamgroups on each subcarrier.' + ) args = parser.parse_args() N_tx = args.transmitters N_rx = args.receivers - itr = args.iterations - - sigma = np.zeros([itr, 2 * N_tx]) - H_RI = np.zeros([itr, 2 * N_tx * N_rx]) - G_RI = np.zeros([itr, 2 * N_tx * N_tx]) - y_RI = np.zeros([itr, 2 * N_rx]) - x_RI = np.zeros([itr, 2 * N_tx]) - for k in range(itr): - sigma[k, :], H_RI[k, :], G_RI[k, :], \ - y_RI[k, :], x_RI[k, :] = gen_input_data(N_rx, N_tx) - - sigma = np.reshape(sigma, (2 * N_tx * itr)).astype(np.float16) - H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * itr)).astype(np.float16) - G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * itr)).astype(np.float16) - y_RI = np.reshape(y_RI, (2 * N_rx * itr)).astype(np.float16) - x_RI = np.reshape(x_RI, (2 * N_tx * itr)).astype(np.float16) + N_itr = args.iterations + + sigma = np.zeros([N_itr, 2 * N_tx]) + H_RI = np.zeros([N_itr, 2 * N_tx * N_rx]) + G_RI = np.zeros([N_itr, 2 * N_tx * N_tx]) + y_RI = np.zeros([N_itr, 2 * N_rx]) + x_RI = np.zeros([N_itr, 2 * N_tx]) + beamgroups = np.zeros(N_itr) + + for k in range(N_itr): + + # Create input vector + y_bg = np.random.rand(N_rx).astype(np.float16) + 1.j * \ + np.random.rand(N_rx).astype(np.float16) + if (args.randomize == 1): + N_beamgroups = 2 ** np.random.randint(0, np.log2(2 * N_tx)) + else: + N_beamgroups = 1 + N_tx_itr = N_tx // N_beamgroups + beamgroups[k] = N_beamgroups + + for i in range(N_beamgroups): + + sigma_itr, H_itr, G_itr, y_itr, x_itr = gen_input_data( + N_rx, N_tx_itr, y_bg) + sigma[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = sigma_itr + H_RI[k, (i * 2 * N_tx_itr * N_rx) + :((i + 1) * 2 * N_tx_itr * N_rx)] = H_itr + G_RI[k, (i * 2 * N_tx_itr * N_tx_itr) + :((i + 1) * 2 * N_tx_itr * N_tx_itr)] = G_itr + y_RI[k, :] = y_itr + x_RI[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = x_itr + + sigma = np.reshape(sigma, (2 * N_tx * N_itr)).astype(np.float16) + H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * N_itr)).astype(np.float16) + G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * N_itr)).astype(np.float16) + y_RI = np.reshape(y_RI, (2 * N_rx * N_itr)).astype(np.float16) + x_RI = np.reshape(x_RI, (2 * N_tx * N_itr)).astype(np.float16) + beamgroups = beamgroups.astype(np.int32) kwargs = {'name': 'data_mimo_mmse_f16', 'H': H_RI, @@ -145,9 +173,10 @@ def main(): 'sigma': sigma, 'y': y_RI, 'x': x_RI, + 'beamgroups': beamgroups, 'N_tx': N_tx, 'N_rx': N_rx, - 'N_itr': itr} + 'N_itr': N_itr} gen_data_header_file(args.outdir, args.tpl, **kwargs) diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index a873a73f9..e639918ce 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -259,7 +259,6 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, */ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_t n_rx, const uint32_t n_tx) { - uint32_t i, j, k; v2h ab; v2h cd0, cd1, cd2, cd3; @@ -267,105 +266,152 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, float bs0, bs1, bs2, bs3; const uint32_t neg_mask = 0x80000000; const uint32_t shuffle_mask = 0x00020003; - for (i = 0; i < n_tx; i++) { - j = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; + + if (n_tx == 1) { + as0 = 0.0f; // Initialize the real part of sums + bs0 = 0.0f; // Initialize the imag part of sums // Inner Loop for (k = 0; k < n_rx; k++) { - // inputs from matrix H_h ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); - // inputs from matrix H cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); - cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); - cd2 = (*(v2h *)&pH[2U * (k * n_tx + j + 2U)]); - cd3 = (*(v2h *)&pH[2U * (k * n_tx + j + 3U)]); - // dotproducts (ac + bd) + j (ad - bc) asm volatile( // a * c + b * d "vfdotpex.s.h %[as0], %[ab], %[cd0];" - "vfdotpex.s.h %[as1], %[ab], %[cd1];" - "vfdotpex.s.h %[as2], %[ab], %[cd2];" - "vfdotpex.s.h %[as3], %[ab], %[cd3];" - // "pv.shuffle2.h %[cd0], %[cd0], %[shuffle_mask];" - "pv.shuffle2.h %[cd1], %[cd1], %[shuffle_mask];" - "pv.shuffle2.h %[cd2], %[cd2], %[shuffle_mask];" - "pv.shuffle2.h %[cd3], %[cd3], %[shuffle_mask];" - // "xor %[cd0], %[neg_mask], %[cd0];" - "xor %[cd1], %[neg_mask], %[cd1];" - "xor %[cd2], %[neg_mask], %[cd2];" - "xor %[cd3], %[neg_mask], %[cd3];" // a * d - b * c "vfdotpex.s.h %[bs0], %[ab], %[cd0];" - "vfdotpex.s.h %[bs1], %[ab], %[cd1];" - "vfdotpex.s.h %[bs2], %[ab], %[cd2];" - "vfdotpex.s.h %[bs3], %[ab], %[cd3];" - : [cd0] "+&r"(cd0), [cd1] "+&r"(cd1), [cd2] "+&r"(cd2), - [cd3] "+&r"(cd3), [as0] "+&r"(as0), [as1] "+&r"(as1), - [as2] "+&r"(as2), [as3] "+&r"(as3), [bs0] "+&r"(bs0), - [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [cd0] "+&r"(cd0), [as0] "+&r"(as0), [bs0] "+&r"(bs0) : [ab] "r"(ab), [neg_mask] "r"(neg_mask), [shuffle_mask] "r"(shuffle_mask) :); } - // Compute diagonal elements - if (i == j) { - asm volatile("fadd.s %[as0], %[as0], %[pS];" - : [as0] "+&r"(as0) - : [pS] "r"(pS[2 * i]) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); + bs0 = 0.0f; + // Store + v2h res0; + asm volatile("vfcpka.h.s %[res0], %[as0], %[bs0];" + : [res0] "=&r"(res0) + : [as0] "r"(as0), [bs0] "r"(bs0) + :); + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + + } else if (n_tx == 2) { + // UNROLL_2 + for (j = 0; j < n_tx; j += 2) { + as0 = 0.0f; + as1 = 0.0f; + bs0 = 0.0f; + bs1 = 0.0f; + for (k = 0; k < n_rx; k++) { + ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); + cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); + cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); + asm volatile("vfdotpex.s.h %[as0], %[ab], %[cd0];" + "vfdotpex.s.h %[as1], %[ab], %[cd1];" + "pv.shuffle2.h %[cd0], %[cd0], %[shuffle_mask];" + "pv.shuffle2.h %[cd1], %[cd1], %[shuffle_mask];" + "xor %[cd0], %[neg_mask], %[cd0];" + "xor %[cd1], %[neg_mask], %[cd1];" + "vfdotpex.s.h %[bs0], %[ab], %[cd0];" + "vfdotpex.s.h %[bs1], %[ab], %[cd1];" + : [cd0] "+&r"(cd0), [cd1] "+&r"(cd1), [as0] "+&r"(as0), + [as1] "+&r"(as1), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1) + : [ab] "r"(ab), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask) + :); + } + if (i == j) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); + bs0 = 0.0f; + } else if (i == (j + 1U)) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as1) : "r"(pS[2 * i]) :); + bs1 = 0.0f; + } + v2h res0, res1; + asm volatile( + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + : [res0] "=&r"(res0), [res1] "=&r"(res1) + : [as0] "r"(as0), [as1] "r"(as1), [bs0] "r"(bs0), [bs1] "r"(bs1) + :); + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; + } + + } else if (n_tx >= 4) { + // UNROLL_4 + for (j = 0; j < n_tx; j += 4) { + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; bs0 = 0.0f; - } else if (i == (j + 1U)) { - asm volatile("fadd.s %[as1], %[as1], %[pS];" - : [as1] "+&r"(as1) - : [pS] "r"(pS[2 * i]) - :); bs1 = 0.0f; - } else if (i == (j + 2U)) { - asm volatile("fadd.s %[as2], %[as2], %[pS];" - : [as2] "+&r"(as2) - : [pS] "r"(pS[2 * i]) - :); bs2 = 0.0f; - } else if (i == (j + 3U)) { - asm volatile("fadd.s %[as3], %[as3], %[pS];" - : [as3] "+&r"(as3) - : [pS] "r"(pS[2 * i]) - :); bs3 = 0.0f; + for (k = 0; k < n_rx; k++) { + ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); + cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); + cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); + cd2 = (*(v2h *)&pH[2U * (k * n_tx + j + 2U)]); + cd3 = (*(v2h *)&pH[2U * (k * n_tx + j + 3U)]); + asm volatile("vfdotpex.s.h %[as0], %[ab], %[cd0];" + "vfdotpex.s.h %[as1], %[ab], %[cd1];" + "vfdotpex.s.h %[as2], %[ab], %[cd2];" + "vfdotpex.s.h %[as3], %[ab], %[cd3];" + "pv.shuffle2.h %[cd0], %[cd0], %[shuffle_mask];" + "pv.shuffle2.h %[cd1], %[cd1], %[shuffle_mask];" + "pv.shuffle2.h %[cd2], %[cd2], %[shuffle_mask];" + "pv.shuffle2.h %[cd3], %[cd3], %[shuffle_mask];" + "xor %[cd0], %[neg_mask], %[cd0];" + "xor %[cd1], %[neg_mask], %[cd1];" + "xor %[cd2], %[neg_mask], %[cd2];" + "xor %[cd3], %[neg_mask], %[cd3];" + "vfdotpex.s.h %[bs0], %[ab], %[cd0];" + "vfdotpex.s.h %[bs1], %[ab], %[cd1];" + "vfdotpex.s.h %[bs2], %[ab], %[cd2];" + "vfdotpex.s.h %[bs3], %[ab], %[cd3];" + : [cd0] "+&r"(cd0), [cd1] "+&r"(cd1), [cd2] "+&r"(cd2), + [cd3] "+&r"(cd3), [as0] "+&r"(as0), [as1] "+&r"(as1), + [as2] "+&r"(as2), [as3] "+&r"(as3), [bs0] "+&r"(bs0), + [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [ab] "r"(ab), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask) + :); + } + if (i == j) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); + bs0 = 0.0f; + } else if (i == (j + 1U)) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as1) : "r"(pS[2 * i]) :); + bs1 = 0.0f; + } else if (i == (j + 2U)) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as2) : "r"(pS[2 * i]) :); + bs2 = 0.0f; + } else if (i == (j + 3U)) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as3) : "r"(pS[2 * i]) :); + bs3 = 0.0f; + } + v2h res0, res1, res2, res3; + asm volatile( + "vfcpka.h.s %[res0], %[as0], %[bs0];" + "vfcpka.h.s %[res1], %[as1], %[bs1];" + "vfcpka.h.s %[res2], %[as2], %[bs2];" + "vfcpka.h.s %[res3], %[as3], %[bs3];" + : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), + [res3] "=&r"(res3) + : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), + [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) + :); + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; + (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; + (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; } - // Store - v2h res0, res1, res2, res3; - asm volatile( - "vfcpka.h.s %[res0], %[as0], %[bs0];" - "vfcpka.h.s %[res1], %[as1], %[bs1];" - "vfcpka.h.s %[res2], %[as2], %[bs2];" - "vfcpka.h.s %[res3], %[as3], %[bs3];" - : [res0] "=&r"(res0), [res1] "=&r"(res1), [res2] "=&r"(res2), - [res3] "=&r"(res3) - : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), - [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) - :); - - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; - (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; - (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; - (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; - j += 4; - } while (j < n_tx); + } } return; } @@ -381,8 +427,7 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, @return none */ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded) { + const uint32_t n_rx, const uint32_t n_tx) { uint32_t i, j; float as0, as1, as2, as3; @@ -393,53 +438,69 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, const uint32_t neg_mask = 0x80000000; const uint32_t shuffle_mask = 0x00020003; - i = 0; - do { - // Initialize the real part of sums - as0 = 0.0f; - as1 = 0.0f; - as2 = 0.0f; - as3 = 0.0f; - // Initialize the imag part of sums - bs0 = 0.0f; - bs1 = 0.0f; - bs2 = 0.0f; - bs3 = 0.0f; - for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h - ab0 = *(v2h *)&pH[2U * (j * n_tx + i)]; - ab1 = *(v2h *)&pH[2U * (j * n_tx + i + 1U)]; - ab2 = *(v2h *)&pH[2U * (j * n_tx + i + 2U)]; - ab3 = *(v2h *)&pH[2U * (j * n_tx + i + 3U)]; - - // inputs from b - cd = *(v2h *)&px[2U * j]; - - // dotproducts (ac + bd) + j (ad - bc) - asm volatile( - // a * c + b * d - "vfdotpex.s.h %[as0], %[ab0], %[cd];" - "vfdotpex.s.h %[as1], %[ab1], %[cd];" - "vfdotpex.s.h %[as2], %[ab2], %[cd];" - "vfdotpex.s.h %[as3], %[ab3], %[cd];" - // - "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" - // - "xor %[ndc], %[neg_mask], %[ndc];" - // a * d - b * c - "vfdotpex.s.h %[bs0], %[ab0], %[ndc];" - "vfdotpex.s.h %[bs1], %[ab1], %[ndc];" - "vfdotpex.s.h %[bs2], %[ab2], %[ndc];" - "vfdotpex.s.h %[bs3], %[ab3], %[ndc];" - : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), - [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), - [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [ndc] "+r"(ndc) - : [cd] "r"(cd), [neg_mask] "r"(neg_mask), - [shuffle_mask] "r"(shuffle_mask), [ab0] "r"(ab0), [ab1] "r"(ab1), - [ab2] "r"(ab2), [ab3] "r"(ab3) - :); + if (n_tx < 4) { + for (i = 0; i < n_tx; i++) { + as0 = 0.0f; // Initialize the real part of sums + bs0 = 0.0f; // Initialize the imag part of sums + for (j = 0; j < n_rx; j++) { + ab0 = *(v2h *)&pH[2U * (j * n_tx + i)]; + cd = *(v2h *)&px[2U * j]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + b * d + "vfdotpex.s.h %[as0], %[ab0], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "xor %[ndc], %[neg_mask], %[ndc];" + // a * d - b * c + "vfdotpex.s.h %[bs0], %[ab0], %[ndc];" + : [as0] "+&r"(as0), [bs0] "+&r"(bs0), [ndc] "+r"(ndc) + : [cd] "r"(cd), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask), [ab0] "r"(ab0) + :); + } + v2h res0; + asm volatile("vfcpka.h.s %0, %1, %2;" + : "=&r"(res0) + : "r"(as0), "r"(bs0) + :); + *(v2h *)&py[2U * i] = res0; } - if (!folded) { + + } else if (n_tx >= 4) { + // UNROLL_4 + for (i = 0; i < n_tx; i += 4) { + as0 = 0.0f; + as1 = 0.0f; + as2 = 0.0f; + as3 = 0.0f; + bs0 = 0.0f; + bs1 = 0.0f; + bs2 = 0.0f; + bs3 = 0.0f; + for (j = 0; j < n_rx; j++) { + ab0 = *(v2h *)&pH[2U * (j * n_tx + i)]; + ab1 = *(v2h *)&pH[2U * (j * n_tx + i + 1U)]; + ab2 = *(v2h *)&pH[2U * (j * n_tx + i + 2U)]; + ab3 = *(v2h *)&pH[2U * (j * n_tx + i + 3U)]; + cd = *(v2h *)&px[2U * j]; + asm volatile("vfdotpex.s.h %[as0], %[ab0], %[cd];" + "vfdotpex.s.h %[as1], %[ab1], %[cd];" + "vfdotpex.s.h %[as2], %[ab2], %[cd];" + "vfdotpex.s.h %[as3], %[ab3], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "xor %[ndc], %[neg_mask], %[ndc];" + "vfdotpex.s.h %[bs0], %[ab0], %[ndc];" + "vfdotpex.s.h %[bs1], %[ab1], %[ndc];" + "vfdotpex.s.h %[bs2], %[ab2], %[ndc];" + "vfdotpex.s.h %[bs3], %[ab3], %[ndc];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [ndc] "+r"(ndc) + : [cd] "r"(cd), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask), [ab0] "r"(ab0), + [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3) + :); + } v2h res0, res1, res2, res3; asm volatile( "vfcpka.h.s %[res0], %[as0], %[bs0];" @@ -451,14 +512,11 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) :); - // Store *(v2h *)&py[2U * i] = res0; *(v2h *)&py[2U * (i + 1U)] = res1; *(v2h *)&py[2U * (i + 2U)] = res2; *(v2h *)&py[2U * (i + 3U)] = res3; - i += 4; } - - } while (i < n_tx); + } return; } From b0de36c19edf39717a05fbbaebc9c6c4143b42ff Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 11 Jan 2024 10:57:01 +0100 Subject: [PATCH 23/39] [software] Load vector type in f16 complex matmul --- software/apps/baremetal/cmatmul_f16/main.c | 1 - .../kernels/baremetal/mempool_cmatmul_f16.h | 42 +++++++++---------- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/software/apps/baremetal/cmatmul_f16/main.c b/software/apps/baremetal/cmatmul_f16/main.c index 17a138012..2ca261599 100644 --- a/software/apps/baremetal/cmatmul_f16/main.c +++ b/software/apps/baremetal/cmatmul_f16/main.c @@ -61,7 +61,6 @@ int main() { mempool_start_benchmark(); cmatmul_2x2_f16p(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, core_id, nPE); - mempool_log_partial_barrier(2, core_id, nPE); mempool_stop_benchmark(); } mempool_barrier(num_cores); diff --git a/software/kernels/baremetal/mempool_cmatmul_f16.h b/software/kernels/baremetal/mempool_cmatmul_f16.h index 2252e2f18..c83443076 100644 --- a/software/kernels/baremetal/mempool_cmatmul_f16.h +++ b/software/kernels/baremetal/mempool_cmatmul_f16.h @@ -212,14 +212,14 @@ [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag) \ :); \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = (v2h) sum00_real; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = (v2h) sum01_real; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 2)]) = (v2h) sum02_real; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 3)]) = (v2h) sum03_real; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = (v2h) sum10_real; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = (v2h) sum11_real; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = (v2h) sum12_real; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = (v2h) sum13_real; + C[(i + 0) * P + k + 0] = (v2h)sum00_real; \ + C[(i + 0) * P + k + 1] = (v2h)sum01_real; \ + C[(i + 0) * P + k + 2] = (v2h)sum02_real; \ + C[(i + 0) * P + k + 3] = (v2h)sum03_real; \ + C[(i + 1) * P + k + 0] = (v2h)sum10_real; \ + C[(i + 1) * P + k + 1] = (v2h)sum11_real; \ + C[(i + 1) * P + k + 2] = (v2h)sum12_real; \ + C[(i + 1) * P + k + 3] = (v2h)sum13_real; /**************************************************************************/ /**************************************************************************/ @@ -369,9 +369,9 @@ void cmatmul_2x2_f16p(__fp16 const *__restrict__ A, } #define __SHIFT_A -void cmatmul_2x4_f16p(__fp16 *__restrict__ A, __fp16 const *__restrict__ B, - __fp16 *__restrict__ C, uint32_t M, uint32_t N, - uint32_t P, uint32_t core_id, uint32_t numThreads) { +void cmatmul_2x4_f16p(v2h *__restrict__ A, v2h const *__restrict__ B, + v2h *__restrict__ C, uint32_t M, uint32_t N, uint32_t P, + uint32_t core_id, uint32_t numThreads) { uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P @@ -418,20 +418,20 @@ void cmatmul_2x4_folded_f16p(v2h *A, v2h const *__restrict__ B, // Copy multiple A matrices in memory uint32_t num_copy = NUM_BANKS / (N * M); for (k = core_id * 4; k < N * M; k += 4 * numThreads) { - v2h a0 = *(v2h *)&A[2 * k]; - v2h a1 = *(v2h *)&A[2 * (k + 1)]; - v2h a2 = *(v2h *)&A[2 * (k + 2)]; - v2h a3 = *(v2h *)&A[2 * (k + 3)]; + v2h a0 = A[k]; + v2h a1 = A[k + 1]; + v2h a2 = A[k + 2]; + v2h a3 = A[k + 3]; i = k / N; // row_index j = k % N; // col_index for (uint32_t idx_copy = 0; idx_copy < num_copy; idx_copy++) { - (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j)]) = a0; - (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j + 1)]) = a1; - (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j + 2)]) = a2; - (*(v2h *)&A_folded[2 * (idx_copy * N * M + i * N + j + 3)]) = a3; + A_folded[idx_copy * N * M + i * N + j] = a0; + A_folded[idx_copy * N * M + i * N + j + 1] = a1; + A_folded[idx_copy * N * M + i * N + j + 2] = a2; + A_folded[idx_copy * N * M + i * N + j + 3] = a3; } } - A = A_folded + 2 * (N * M) * ((core_id * BANKING_FACTOR) / (N * M)); + A = A_folded + (N * M) * ((core_id * BANKING_FACTOR) / (N * M)); mempool_log_partial_barrier(2, core_id, numThreads); // Compute #ifndef __SHIFT_A @@ -461,7 +461,5 @@ void cmatmul_2x4_folded_f16p(v2h *A, v2h const *__restrict__ B, } #endif mempool_log_partial_barrier(2, core_id, numThreads); - dump_prova(2); - return; } From ec727724da2a975070fdb3b7df5613c1b7c00ce2 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 2 Feb 2024 08:17:53 +0100 Subject: [PATCH 24/39] [software] Add and compile MMSE with soft-divsqrt --- software/apps/baremetal/cholesky_f16/main.c | 6 +- software/apps/baremetal/mimo_mmse_f16/main.c | 16 +-- .../kernels/baremetal/mempool_chest_f16s.h | 75 ++++++++++++ .../kernels/baremetal/mempool_cholesky_f16s.h | 87 ++++++++++++++ .../kernels/baremetal/mempool_cholesky_f32s.h | 4 + .../baremetal/mempool_linearsolver_f16s.h | 112 ++++++++++++++++++ .../baremetal/mempool_linearsolver_f32s.h | 4 + .../baremetal/mempool_mimo_mmse_f32s.h | 4 + software/runtime/runtime.mk | 19 ++- 9 files changed, 312 insertions(+), 15 deletions(-) diff --git a/software/apps/baremetal/cholesky_f16/main.c b/software/apps/baremetal/cholesky_f16/main.c index 691eeac47..d27af143c 100644 --- a/software/apps/baremetal/cholesky_f16/main.c +++ b/software/apps/baremetal/cholesky_f16/main.c @@ -4,6 +4,8 @@ // Author: Marco Bertuletti, ETH Zurich +#include + #include "dma.h" #include "encoding.h" #include "printf.h" @@ -42,7 +44,7 @@ int main() { /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); - mempool_cholesky_f16s(l1_GIn, l1_LOut, dim_N); + mempool_cholesky_f16vecs(l1_GIn, l1_LOut, dim_N); mempool_stop_benchmark(); } mempool_barrier(num_cores); @@ -53,7 +55,7 @@ int main() { mempool_start_benchmark(); __fp16 *ptr_in_matrix = l1_GIn + i * 2 * dim_N * dim_N; __fp16 *ptr_out_matrix = l1_LOut + i * 2 * dim_N * dim_N; - mempool_cholesky_f16s(ptr_in_matrix, ptr_out_matrix, dim_N); + mempool_cholesky_f16vecs(ptr_in_matrix, ptr_out_matrix, dim_N); } mempool_barrier(num_cores); mempool_stop_benchmark(); diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index 0afb340c0..1ff7f43f4 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -4,6 +4,8 @@ // Author: Marco Bertuletti, ETH Zurich +#include + #include "dma.h" #include "encoding.h" #include "printf.h" @@ -69,7 +71,7 @@ int main() { mempool_start_benchmark(); mempool_hermitian_f16s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); mempool_MVP_conjtransp_f16s(l1_H, l1_y, y2, N_RX, N_TX, 0); - mempool_cholesky_f16s(l1_G, l1_L, N_TX); + mempool_cholesky_f16vecs(l1_G, l1_L, N_TX); mempool_Ltrisol_f16s(l1_L, y2, y3, N_TX); mempool_Lttrisol_f16s(l1_L, y3, l1_x, N_TX); mempool_stop_benchmark(); @@ -98,7 +100,7 @@ int main() { for (uint32_t itr_bg = 0; itr_bg < N_bg; itr_bg++) { mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX_bg); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX_bg); - mempool_cholesky_f16s(PtrG, PtrL, N_TX_bg); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX_bg); mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX_bg); mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX_bg); @@ -131,11 +133,11 @@ int main() { y3 + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); - mempool_cholesky_f16s(PtrG, PtrL, N_TX); - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 1, 0); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 1); + mempool_cholesky_folded_f16s(PtrG, PtrL, N_TX); + mempool_Ltrisol_folded_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_folded_f16s(PtrL, Ptry3, Ptrx, N_TX); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); diff --git a/software/kernels/baremetal/mempool_chest_f16s.h b/software/kernels/baremetal/mempool_chest_f16s.h index 71b2cef05..4830ebc6f 100644 --- a/software/kernels/baremetal/mempool_chest_f16s.h +++ b/software/kernels/baremetal/mempool_chest_f16s.h @@ -6,6 +6,8 @@ #pragma once +#ifdef __XDIVSQRT + /* a[i] = ar[i] + i * ai[j] out[i][j] = a[i] / c[j] @@ -67,6 +69,79 @@ static inline void chest_unrolled4_inner_loop_f16(__fp16 *pPilotTX, __fp16 *pH, return; } +#else + +/* a[i] = ar[i] + i * ai[j] + + out[i][j] = a[i] / c[j] + out[i][j + 1] = a[i] / c[j + 1h + out[i][j + 2] = a[i] / c[j + 2] + out[i][j + 3] = a[i] / c[j + 3]*/ + +static inline void chest_unrolled4_inner_loop_f16(__fp16 *pPilotTX, __fp16 *pH, + uint32_t nTX, uint32_t ab, + uint32_t ab_n, uint32_t i, + uint32_t j) { + + uint32_t cd0, cd1, cd2, cd3; + float re0 = 0.0f, re1 = 0.0f, re2 = 0.0f, re3 = 0.0f; + float im0 = 0.0f, im1 = 0.0f, im2 = 0.0f, im3 = 0.0f; + float D0 = 0.0f, D1 = 0.0f, D2 = 0.0f, D3 = 0.0f; + cd0 = *(uint32_t *)&pPilotTX[2U * j]; + cd1 = *(uint32_t *)&pPilotTX[2U * (j + 1)]; + cd2 = *(uint32_t *)&pPilotTX[2U * (j + 2)]; + cd3 = *(uint32_t *)&pPilotTX[2U * (j + 3)]; + asm volatile( + // Compute denominator + "vfdotpex.s.h %[D0], %[cd0], %[cd0];" + "vfdotpex.s.h %[D1], %[cd1], %[cd1];" + "vfdotpex.s.h %[D2], %[cd2], %[cd2];" + "vfdotpex.s.h %[D3], %[cd3], %[cd3];" + // Compute numerator + "vfdotpex.s.h %[re0], %[ab], %[cd0];" + "vfdotpex.s.h %[re1], %[ab], %[cd1];" + "vfdotpex.s.h %[re2], %[ab], %[cd2];" + "vfdotpex.s.h %[re3], %[ab], %[cd3];" + "vfdotpex.s.h %[im0], %[ab_n], %[cd0];" + "vfdotpex.s.h %[im1], %[ab_n], %[cd1];" + "vfdotpex.s.h %[im2], %[ab_n], %[cd2];" + "vfdotpex.s.h %[im3], %[ab_n], %[cd3];" + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), [D3] "+&r"(D3), + [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), [re3] "+&r"(re3), + [im0] "+&r"(im0), [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3), + [ab] "r"(ab), [ab_n] "r"(ab_n) + :); + re0 = re0 / D0; + re1 = re1 / D1; + re2 = re2 / D2; + re3 = re3 / D3; + im0 = im0 / D0; + im1 = im1 / D1; + im2 = im2 / D2; + im3 = im3 / D3; + asm volatile( + // Pack in 32b word + "vfcpka.h.s %[re0], %[re0], %[im0];" + "vfcpka.h.s %[re1], %[re1], %[im1];" + "vfcpka.h.s %[re2], %[re2], %[im2];" + "vfcpka.h.s %[re3], %[re3], %[im3];" + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), [D3] "+&r"(D3), + [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), [re3] "+&r"(re3), + [im0] "+&r"(im0), [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3), + [ab] "r"(ab), [ab_n] "r"(ab_n) + :); + + *((uint32_t *)&pH[2 * (i * nTX + j)]) = *(uint32_t *)&re0; + *((uint32_t *)&pH[2 * (i * nTX + j + 1)]) = *(uint32_t *)&re1; + *((uint32_t *)&pH[2 * (i * nTX + j + 2)]) = *(uint32_t *)&re2; + *((uint32_t *)&pH[2 * (i * nTX + j + 3)]) = *(uint32_t *)&re3; + return; +} + +#endif + /** @brief Block-type channel estimation. @param[in] pH points to output channel diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index 6da7aa8a2..c870782da 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -8,6 +8,8 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) +#ifdef __XDIVSQRT + /** @brief Cholesky decomposition with Crout algorithm. @param[in] pSrc points to input matrix @@ -421,3 +423,88 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, } return; } + +#else + +/** VECTORIZED CODE + @brief Cholesky decomposition with Crout algorithm. + Output data is folded to the core's local memory. + @param[in] pSrc points to input matrix + @param[in] pL points to output lower triangular matrix + @param[in] n dimension of the input data + @return none +*/ +void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { + + float sum; // register float sum + float as, bs; // real and imaginary sums + float diag_f32; // Diagonal element + float ap_f32, bp_f32; // real and imaginary pivot + + __fp16 diag; // Diagonal element + __fp16 ap, bp; // real and imaginary pivot + + v2h vec_sum; + v2h ab, cd, ndc; + + uint32_t i, j, k; + + for (j = 0; j < n; j++) { + + // Elements on diagonal (input matrix is positive-definite) + ap = pSrc[2U * (j * n + j)]; + asm volatile("fcvt.s.h %0, %1;" : "=r"(sum) : "r"(ap) :); + for (k = 0; k < j; k++) { + ab = (*(v2h *)&pL[2U * (j * n + k)]); + asm volatile("vfndotpex.s.h %[sum], %[ab], %[ab];" + : [sum] "+&r"(sum) + : [ab] "r"(ab) + :); + } + sum = (float)sqrt(sum); + asm volatile("fcvt.h.s %0, %1;" : "=r"(ap) : "r"(sum) :); + pL[2U * (j * n + j)] = ap; + + // Elements on rows + for (i = j + 1; i < n; i++) { + // Pivot + ap = pSrc[2U * (i * n + j)]; + bp = pSrc[2U * (i * n + j + 1)]; + // Diag + diag = pL[2U * (j * n + j)]; + + // Sum -> s = s + (ac + bd) + j*(bc - ad) + as = (float)0.0f; + bs = (float)0.0f; + asm volatile("fcvt.s.h %0, %1;" : "=r"(ap_f32) : "r"(ap) :); + asm volatile("fcvt.s.h %0, %1;" : "=r"(bp_f32) : "r"(bp) :); + asm volatile("fcvt.s.h %0, %1;" : "=r"(diag_f32) : "r"(diag) :); + for (k = 0; k < j; k++) { + ab = (*(v2h *)&pL[2U * (i * n + k)]); + cd = (*(v2h *)&pL[2U * (j * n + k)]); + const uint32_t neg_mask = 0x00008000; + const uint32_t shuffle_mask = 0x00020003; + asm volatile( + // s = s + (ac + bd) + j(bc - ad) + "vfdotpex.s.h %[as], %[ab], %[cd];" + "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" + "xor %[ndc], %[neg_mask], %[ndc];" + "vfdotpex.s.h %[bs], %[ab], %[ndc];" + : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) + : [ab] "r"(ab), [cd] "r"(cd), [neg_mask] "r"(neg_mask), + [shuffle_mask] "r"(shuffle_mask) + :); + } + as = (ap_f32 - as) / diag_f32; + bs = (bp_f32 - bs) / diag_f32; + asm volatile("vfcpka.h.s %0, %1, %2;" + : "=r"(vec_sum) + : "r"(as), "r"(bs) + :); + (*(v2h *)&pL[2U * (i * n + j)]) = vec_sum; + } + } + return; +} + +#endif diff --git a/software/kernels/baremetal/mempool_cholesky_f32s.h b/software/kernels/baremetal/mempool_cholesky_f32s.h index 351602d74..6cd54fe69 100644 --- a/software/kernels/baremetal/mempool_cholesky_f32s.h +++ b/software/kernels/baremetal/mempool_cholesky_f32s.h @@ -7,6 +7,8 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) +#ifdef __XDIVSQRT + /** @brief Cholesky decomposition with Crout algorithm. @param[in] pSrc points to input matrix @@ -162,3 +164,5 @@ void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { } return; } + +#endif diff --git a/software/kernels/baremetal/mempool_linearsolver_f16s.h b/software/kernels/baremetal/mempool_linearsolver_f16s.h index 3e79dff7f..32ab942ca 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f16s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f16s.h @@ -7,6 +7,8 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) +#ifdef __XDIVSQRT + /** @brief Single-core solution of lower triangular system @param[in] pL input triangular matrix @@ -215,3 +217,113 @@ void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, } return; } + +#else + +/** + @brief Single-core solution of lower triangular system + @param[in] pL input triangular matrix + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 diag; + + float ax, bx, diag_f32; + v2h res; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * (i * n + i)]; + as = (__fp16)in[2U * i]; + bs = (__fp16)in[2U * i + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * (i * n + j)]; + b = pL[2U * (i * n + j) + 1]; + c = x[2U * j]; + d = x[2U * j + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fcvt.s.h %0, %1;" : "=r"(diag_f32) : "r"(diag) :); + asm volatile("fcvt.s.h %0, %1;" : "=r"(ax) : "r"(as) :); + asm volatile("fcvt.s.h %0, %1;" : "=r"(bx) : "r"(bs) :); + ax = ax / diag_f32; + bx = bx / diag_f32; + asm volatile("vfcpka.h.s %0, %1, %2;" : "=r"(res) : "r"(ax), "r"(bx) :); + (*(v2h *)&x[2U * i]) = res; + } + return; +} + +/** + @brief Single-core solution of upper triangular system + (from transposed lower triangular system) + @param[in] pL input triangular matrix to be transposed + @param[in] in known variables vector + @param[in] x unknown solutions vector + @param[in] n dimension of the system + @return none +*/ + +void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, + const uint32_t n) { + + uint32_t i, j; + __fp16 a, b; + __fp16 c, d; + + __fp16 as, bs; + __fp16 diag; + + float ax, bx, diag_f32; + v2h res; + + // Solve for each variable x_i in turn + for (i = 0; i < n; i++) { + diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; + as = (__fp16)in[2 * (n - i - 1)]; + bs = (__fp16)in[2 * (n - i - 1) + 1]; + // Use the previously solved variables to calculate the sum + for (j = 0; j < i; j++) { + a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; + b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; + c = x[2U * (n - 1 - j)]; + d = x[2U * (n - 1 - j) + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } + // Subtract the sum from b_i and divide by the diagonal element L[i][i] + asm volatile("fcvt.s.h %0, %1;" : "=r"(diag_f32) : "r"(diag) :); + asm volatile("fcvt.s.h %0, %1;" : "=r"(ax) : "r"(as) :); + asm volatile("fcvt.s.h %0, %1;" : "=r"(bx) : "r"(bs) :); + ax = ax / diag_f32; + bx = bx / diag_f32; + asm volatile("vfcpka.h.s %0, %1, %2;" : "=r"(res) : "r"(ax), "r"(bx) :); + (*(v2h *)&x[2U * (n - i - 1)]) = res; + } + return; +} + +#endif diff --git a/software/kernels/baremetal/mempool_linearsolver_f32s.h b/software/kernels/baremetal/mempool_linearsolver_f32s.h index e7f53e712..18e4ec94e 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f32s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f32s.h @@ -7,6 +7,8 @@ #pragma once #define N_BANKS (NUM_CORES * BANKING_FACTOR) +#ifdef __XDIVSQRT + /** @brief Single-core solution of lower triangular system @param[in] pL input triangular matrix @@ -219,3 +221,5 @@ void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, } return; } + +#endif diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h index 94485387c..311052b10 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h @@ -243,6 +243,8 @@ void mempool_MVP_conjtransp_f32s(float *pH, float *px, float *py, return; } +#ifdef __XDIVSQRT + /** @brief Inverts a system using the Jacobi method @param[in] pA points to input matrix @@ -386,3 +388,5 @@ void mempool_jacobi_f32s(float *pA, float *in, float *px, const uint32_t n, } return; } + +#endif diff --git a/software/runtime/runtime.mk b/software/runtime/runtime.mk index 69d309158..97e03e23b 100644 --- a/software/runtime/runtime.mk +++ b/software/runtime/runtime.mk @@ -26,7 +26,8 @@ DATA_DIR ?= $(abspath $(ROOT_DIR)/../data) COMPILER ?= gcc XPULPIMG ?= $(xpulpimg) -ZFINX ?= $(zfinx) +ZFINX ?= $(zfinx) +XDIVSQRT ?= $(xDivSqrt) RISCV_XLEN ?= 32 @@ -123,6 +124,14 @@ ifeq ($(xDivSqrt), 0) RISCV_FLAGS_LLVM += -mno-fdiv endif +# Disable division and square root +ifeq ($(XDIVSQRT), 0) + RISCV_FLAGS_LLVM += -mno-fdiv +else + # Define if the extension is active + DEFINES += -D__XDIVSQRT +endif + ifeq ($(COMPILER),gcc) RISCV_CCFLAGS += $(RISCV_FLAGS_GCC) $(RISCV_FLAGS_COMMON) RISCV_CXXFLAGS += $(RISCV_CCFLAGS) @@ -134,13 +143,11 @@ else RISCV_CCFLAGS += $(RISCV_LLVM_TARGET) $(RISCV_FLAGS_LLVM) $(RISCV_FLAGS_COMMON) RISCV_CXXFLAGS += $(RISCV_CCFLAGS) RISCV_LDFLAGS += -static -nostartfiles -lm -lgcc -mcmodel=small $(RISCV_LLVM_TARGET) $(RISCV_FLAGS_COMMON) -L$(ROOT_DIR) - RISCV_OBJDUMP_FLAGS += --mcpu=mempool-rv32 - ifeq ($(xDivSqrt), 0) - RISCV_OBJDUMP_FLAGS += --mattr=+m,+a,+nofdiv,+xpulpmacsi,+xpulppostmod,+xpulpvect,+xpulpvectshufflepack,+zfinx + ifeq ($(XDIVSQRT), 0) + RISCV_OBJDUMP_FLAGS += --mcpu=mempool-rv32 --mattr=+m,+a,+xpulpmacsi,+xpulppostmod,+xpulpvect,+xpulpvectshufflepack,+zfinx,+nofdiv else - RISCV_OBJDUMP_FLAGS += --mattr=+m,+a,+xpulpmacsi,+xpulppostmod,+xpulpvect,+xpulpvectshufflepack,+zfinx + RISCV_OBJDUMP_FLAGS += --mcpu=mempool-rv32 --mattr=+m,+a,+xpulpmacsi,+xpulppostmod,+xpulpvect,+xpulpvectshufflepack,+zfinx endif - # For unit tests RISCV_CCFLAGS_TESTS ?= $(RISCV_FLAGS_LLVM_TESTS) $(RISCV_FLAGS_COMMON_TESTS) -fvisibility=hidden -nostdlib $(RISCV_LDFLAGS) endif From 6df58ee125df5309e618f02e057c7f3cdceffa48 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 20 Feb 2024 18:26:41 +0100 Subject: [PATCH 25/39] [software] Add complex fixed point matmul --- software/apps/cmatmul_q16/main.c | 63 ++++ software/runtime/data/data_cmatmul_q16.h.tpl | 26 ++ software/runtime/data/data_cmatmul_q16.py | 129 ++++++++ software/runtime/kernel/mempool_cmatmul_q16.h | 277 ++++++++++++++++++ 4 files changed, 495 insertions(+) create mode 100644 software/apps/cmatmul_q16/main.c create mode 100644 software/runtime/data/data_cmatmul_q16.h.tpl create mode 100644 software/runtime/data/data_cmatmul_q16.py create mode 100644 software/runtime/kernel/mempool_cmatmul_q16.h diff --git a/software/apps/cmatmul_q16/main.c b/software/apps/cmatmul_q16/main.c new file mode 100644 index 000000000..b3e4e7503 --- /dev/null +++ b/software/apps/cmatmul_q16/main.c @@ -0,0 +1,63 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include + +#include "dma.h" +#include "encoding.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data/data_cmatmul_q16.h" +#include "kernel/mempool_checks.h" +#include "kernel/mempool_cmatmul_q16.h" + +#define PARALLEL + +int16_t matrix_a[2 * dim_M * dim_N] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +int16_t matrix_b[2 * dim_N * dim_P] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +int16_t matrix_c[2 * dim_M * dim_P] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); + +int main() { + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + // Initialize barrier and synchronize + mempool_barrier_init(core_id); + + // Initialize Matrices + if (core_id == 0) { + dma_memcpy_blocking(matrix_a, A, 2 * dim_M * dim_N * sizeof(int16_t)); + dma_memcpy_blocking(matrix_b, B, 2 * dim_N * dim_P * sizeof(int16_t)); + } + // Wait at barrier until everyone is ready + mempool_barrier(num_cores); + +#ifdef SINGLE + if (core_id == 0) { + mempool_start_benchmark(); + cmatmul_2x4_q16s(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + +#ifdef PARALLEL + mempool_start_benchmark(); + cmatmul_2x4_q16p(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, core_id, + num_cores); + mempool_stop_benchmark(); + mempool_barrier(num_cores); +#endif + + mempool_check_q16(matrix_c, C, 2 * dim_M * dim_P, 16, 0); + mempool_barrier(num_cores); + + return 0; +} diff --git a/software/runtime/data/data_cmatmul_q16.h.tpl b/software/runtime/data/data_cmatmul_q16.h.tpl new file mode 100644 index 000000000..b42c55f88 --- /dev/null +++ b/software/runtime/data/data_cmatmul_q16.h.tpl @@ -0,0 +1,26 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(int16_t) 0X{:04X}, '.format(a&0xffff) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define dim_M (${matrix_M}) +#define dim_N (${matrix_N}) +#define dim_P (${matrix_P}) + +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) A[${2 * matrix_M * matrix_N}] = ${array_to_cstr(A)}; + +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) B[${2 * matrix_N * matrix_P}] = ${array_to_cstr(B)}; + +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) C[${2 * matrix_M * matrix_P}] = ${array_to_cstr(C)}; diff --git a/software/runtime/data/data_cmatmul_q16.py b/software/runtime/data/data_cmatmul_q16.py new file mode 100644 index 000000000..b0aa7b406 --- /dev/null +++ b/software/runtime/data/data_cmatmul_q16.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 matmul. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from mako.template import Template + + +################## +# compute_result # +################## + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-t", + "--tpl", + type=pathlib.Path, + required=False, + default=pathlib.Path(__file__).parent.absolute() / + "data_cmatmul_q16.h.tpl", + help='Path to mako template' + ) + parser.add_argument( + "-v", + "--verbose", + action='store_true', + help='Set verbose' + ) + parser.add_argument( + "-m", + "--dim_m", + type=int, + required=False, + default=16, + help='First dimension.' + ) + parser.add_argument( + "-n", + "--dim_n", + type=int, + required=False, + default=16, + help='Second dimension.' + ) + parser.add_argument( + "-p", + "--dim_p", + type=int, + required=False, + default=16, + help='Third dimension.' + ) + + args = parser.parse_args() + + matrix_M = args.dim_m + matrix_N = args.dim_n + matrix_P = args.dim_p + MAX = 2**15 + FIXED_POINT = 15 + + # Create sparse matrix + A = np.random.randint(-MAX, MAX - 1, size=(matrix_M, matrix_N)) + 1j * \ + np.random.randint(-MAX, MAX - 1, size=(matrix_M, matrix_N)) + B = np.random.randint(-MAX, MAX - 1, size=(matrix_N, matrix_P)) + 1j * \ + np.random.randint(-MAX, MAX - 1, size=(matrix_N, matrix_P)) + + C = np.zeros((matrix_M, matrix_P), dtype=complex) + for k in range(matrix_P): + for i in range(matrix_M): + for j in range(matrix_N): + a = A[i][j].real + b = A[i][j].imag + c = B[j][k].real + d = B[j][k].imag + C[i][k] += (a * c - b * d) // (1 << FIXED_POINT) + C[i][k] += (b * c + a * d) // (1 << FIXED_POINT) * 1j + + A = np.reshape(A, (matrix_M * matrix_N), order='C') + B = np.reshape(B, (matrix_N * matrix_P), order='C') + C = np.reshape(C, (matrix_M * matrix_P), order='C') + + A = np.column_stack((A.imag, A.real)).astype(np.int16).flatten() + B = np.column_stack((B.imag, B.real)).astype(np.int16).flatten() + C = np.column_stack((C.imag, C.real)).astype(np.int16).flatten() + + kwargs = { + 'name': 'data_cmatmul_q16', + 'A': A, + 'B': B, + 'C': C, + 'matrix_M': matrix_M, + 'matrix_N': matrix_N, + 'matrix_P': matrix_P} + + gen_data_header_file(args.outdir, args.tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/runtime/kernel/mempool_cmatmul_q16.h b/software/runtime/kernel/mempool_cmatmul_q16.h new file mode 100644 index 000000000..fc020619d --- /dev/null +++ b/software/runtime/kernel/mempool_cmatmul_q16.h @@ -0,0 +1,277 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +/* This library implements the complex matrix multiplication in multiple + * different ways. The functions all follow the following format: + * + * A is an M x N matrix, B is a N x P matrix, and C is a M x P matrix + * C = AB + */ + +#pragma once +#include "xpulp/builtins_v2.h" +#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) + +#define CMATMUL_1x1_LOOP \ + v2s sum = {0, 0}; \ + for (j = 0; j < N; j++) { \ + v2s ab = *(v2s *)&A[2 * (i * N + j)]; \ + v2s cd = *(v2s *)&B[2 * (j * P + k)]; \ + int32_t re, im, temp; \ + asm volatile("pv.shuffle2.h %[temp],%[cd],%[mask_shuf];" \ + "pv.dotsp.h %[im],%[ab],%[temp];" \ + "pv.sub.h %[temp],zero,%[cd];" \ + "srli %[cd],%[cd],0x10;" \ + "pv.pack %[temp],%[cd],%[temp];" \ + "pv.dotsp.h %[re],%[ab],%[temp];" \ + "srai %[im],%[im],0x0F;" \ + "srai %[re],%[re],0x0F;" \ + "pv.pack %[re],%[re],%[im];" \ + "pv.add.h %[sum],%[sum],%[re];" \ + : [re] "=&r"(re), [im] "=&r"(im), [temp] "=&r"(temp), \ + [cd] "+&r"(cd), [sum] "+&r"(sum) \ + : [ab] "r"(ab), [mask_shuf] "r"(0x00020003) \ + :); \ + } \ + (*(v2s *)&C[2 * (i * P + k)]) = sum; + +#define CMATMUL_2x2_LOOP \ + v2s sum00 = {0, 0}; \ + v2s sum01 = {0, 0}; \ + v2s sum10 = {0, 0}; \ + v2s sum11 = {0, 0}; \ + v2s temp00, temp01, temp10, temp11; \ + int32_t re00, re01, re10, re11; \ + int32_t im00, im01, im10, im11; \ + for (j = 0; j < N; j += 2) { \ + v2s ab00 = *(v2s *)&A[2 * ((i + 0) * N + j + 0)]; \ + v2s ab01 = *(v2s *)&A[2 * ((i + 0) * N + j + 1)]; \ + v2s ab10 = *(v2s *)&A[2 * ((i + 1) * N + j + 0)]; \ + v2s ab11 = *(v2s *)&A[2 * ((i + 1) * N + j + 1)]; \ + v2s cd00 = *(v2s *)&B[2 * ((j + 0) * P + k + 0)]; \ + v2s cd01 = *(v2s *)&B[2 * ((j + 0) * P + k + 1)]; \ + v2s cd10 = *(v2s *)&B[2 * ((j + 1) * P + k + 0)]; \ + v2s cd11 = *(v2s *)&B[2 * ((j + 1) * P + k + 1)]; \ + \ + asm volatile("pv.shuffle2.h %[temp00],%[cd00],%[mask_shuf];" \ + "pv.shuffle2.h %[temp01],%[cd01],%[mask_shuf];" \ + "pv.shuffle2.h %[temp10],%[cd10],%[mask_shuf];" \ + "pv.shuffle2.h %[temp11],%[cd11],%[mask_shuf];" \ + : [temp00] "=&r"(temp00), [temp01] "=&r"(temp01), \ + [temp10] "=&r"(temp10), [temp11] "=&r"(temp11) \ + : [cd00] "r"(cd00), [cd01] "r"(cd01), [cd10] "r"(cd10), \ + [cd11] "r"(cd11), [mask_shuf] "r"(0x00020003) \ + :); \ + im00 = __DOTP2(ab00, temp00); \ + im10 = __DOTP2(ab10, temp00); \ + im01 = __DOTP2(ab00, temp01); \ + im11 = __DOTP2(ab10, temp01); \ + im00 = __SUMDOTP2(ab01, temp10, im00); \ + im10 = __SUMDOTP2(ab11, temp10, im10); \ + im01 = __SUMDOTP2(ab01, temp11, im01); \ + im11 = __SUMDOTP2(ab11, temp11, im11); \ + im00 = im00 >> 15; \ + im10 = im10 >> 15; \ + im01 = im01 >> 15; \ + im11 = im11 >> 15; \ + \ + temp00 = __EXOR2(cd00, (v2s)(0x0000FFFF)); \ + temp01 = __EXOR2(cd01, (v2s)(0x0000FFFF)); \ + temp10 = __EXOR2(cd10, (v2s)(0x0000FFFF)); \ + temp11 = __EXOR2(cd11, (v2s)(0x0000FFFF)); \ + temp00 = __ADD2(temp00, (v2s)(0x00000001)); \ + temp01 = __ADD2(temp01, (v2s)(0x00000001)); \ + temp10 = __ADD2(temp10, (v2s)(0x00000001)); \ + temp11 = __ADD2(temp11, (v2s)(0x00000001)); \ + re00 = __DOTP2(ab00, temp00); \ + re10 = __DOTP2(ab10, temp00); \ + re01 = __DOTP2(ab00, temp01); \ + re11 = __DOTP2(ab10, temp01); \ + re00 = __SUMDOTP2(ab01, temp10, re00); \ + re10 = __SUMDOTP2(ab11, temp10, re10); \ + re00 = re00 >> 15; \ + re10 = re10 >> 15; \ + v2s c00 = __PACK2(re00, im00); \ + v2s c10 = __PACK2(re10, im10); \ + sum00 = __ADD2(sum00, c00); \ + sum10 = __ADD2(sum10, c10); \ + re01 = __SUMDOTP2(ab01, temp11, re01); \ + re11 = __SUMDOTP2(ab11, temp11, re11); \ + re01 = re01 >> 15; \ + re11 = re11 >> 15; \ + v2s c01 = __PACK2(re01, im01); \ + v2s c11 = __PACK2(re11, im11); \ + sum01 = __ADD2(sum01, c01); \ + sum11 = __ADD2(sum11, c11); \ + } \ + (*(v2s *)&C[2 * ((i + 0) * P + k + 0)]) = sum00; \ + (*(v2s *)&C[2 * ((i + 0) * P + k + 1)]) = sum01; \ + (*(v2s *)&C[2 * ((i + 1) * P + k + 0)]) = sum10; \ + (*(v2s *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; + +#define CMATMUL_2x4_LOOP \ + v2s sum00 = {0, 0}; \ + v2s sum01 = {0, 0}; \ + v2s sum02 = {0, 0}; \ + v2s sum03 = {0, 0}; \ + v2s sum10 = {0, 0}; \ + v2s sum11 = {0, 0}; \ + v2s sum12 = {0, 0}; \ + v2s sum13 = {0, 0}; \ + v2s temp00, temp01, temp10, temp11; \ + int32_t re00, re01, re02, re03; \ + int32_t re10, re11, re12, re13; \ + int32_t im00, im01, im02, im03; \ + int32_t im10, im11, im12, im13; \ + for (j = 0; j < N; j += 2) { \ + v2s ab00 = *(v2s *)&A[2 * ((i + 0) * N + j + 0)]; \ + v2s ab01 = *(v2s *)&A[2 * ((i + 0) * N + j + 1)]; \ + v2s ab10 = *(v2s *)&A[2 * ((i + 1) * N + j + 0)]; \ + v2s ab11 = *(v2s *)&A[2 * ((i + 1) * N + j + 1)]; \ + v2s cd00 = *(v2s *)&B[2 * ((j + 0) * P + k + 0)]; \ + v2s cd01 = *(v2s *)&B[2 * ((j + 0) * P + k + 1)]; \ + v2s cd02 = *(v2s *)&B[2 * ((j + 0) * P + k + 2)]; \ + v2s cd03 = *(v2s *)&B[2 * ((j + 0) * P + k + 3)]; \ + v2s cd10 = *(v2s *)&B[2 * ((j + 1) * P + k + 0)]; \ + v2s cd11 = *(v2s *)&B[2 * ((j + 1) * P + k + 1)]; \ + v2s cd12 = *(v2s *)&B[2 * ((j + 1) * P + k + 2)]; \ + v2s cd13 = *(v2s *)&B[2 * ((j + 1) * P + k + 3)]; \ + asm volatile("pv.shuffle2.h %[temp00],%[ab00],%[mask_shuf];" \ + "pv.shuffle2.h %[temp01],%[ab01],%[mask_shuf];" \ + "pv.shuffle2.h %[temp10],%[ab10],%[mask_shuf];" \ + "pv.shuffle2.h %[temp11],%[ab11],%[mask_shuf];" \ + : [temp00] "=&r"(temp00), [temp01] "=&r"(temp01), \ + [temp10] "=&r"(temp10), [temp11] "=&r"(temp11) \ + : [ab00] "r"(ab00), [ab01] "r"(ab01), [ab10] "r"(ab10), \ + [ab11] "r"(ab11), [mask_shuf] "r"(0x00020003) \ + :); \ + im00 = __DOTP2(temp00, cd00); \ + im01 = __DOTP2(temp00, cd01); \ + im02 = __DOTP2(temp00, cd02); \ + im03 = __DOTP2(temp00, cd03); \ + im10 = __DOTP2(temp10, cd00); \ + im11 = __DOTP2(temp10, cd01); \ + im12 = __DOTP2(temp10, cd02); \ + im13 = __DOTP2(temp10, cd03); \ + im00 = __SUMDOTP2(temp01, cd10, im00); \ + im01 = __SUMDOTP2(temp01, cd11, im01); \ + im02 = __SUMDOTP2(temp01, cd12, im02); \ + im03 = __SUMDOTP2(temp01, cd13, im03); \ + im10 = __SUMDOTP2(temp11, cd10, im10); \ + im11 = __SUMDOTP2(temp11, cd11, im11); \ + im12 = __SUMDOTP2(temp11, cd12, im12); \ + im13 = __SUMDOTP2(temp11, cd13, im13); \ + im00 = im00 >> 15; \ + im01 = im01 >> 15; \ + im02 = im02 >> 15; \ + im03 = im03 >> 15; \ + im10 = im10 >> 15; \ + im11 = im11 >> 15; \ + im12 = im12 >> 15; \ + im13 = im13 >> 15; \ + temp00 = __EXOR2(ab00, (v2s)(0x0000FFFF)); \ + temp01 = __EXOR2(ab01, (v2s)(0x0000FFFF)); \ + temp10 = __EXOR2(ab10, (v2s)(0x0000FFFF)); \ + temp11 = __EXOR2(ab11, (v2s)(0x0000FFFF)); \ + temp00 = __ADD2(temp00, (v2s)(0x00000001)); \ + temp01 = __ADD2(temp01, (v2s)(0x00000001)); \ + temp10 = __ADD2(temp10, (v2s)(0x00000001)); \ + temp11 = __ADD2(temp11, (v2s)(0x00000001)); \ + re00 = __DOTP2(temp00, cd00); \ + re01 = __DOTP2(temp00, cd01); \ + re02 = __DOTP2(temp00, cd02); \ + re03 = __DOTP2(temp00, cd03); \ + re10 = __DOTP2(temp10, cd00); \ + re11 = __DOTP2(temp10, cd01); \ + re12 = __DOTP2(temp10, cd02); \ + re13 = __DOTP2(temp10, cd03); \ + re00 = __SUMDOTP2(temp01, cd10, re00); \ + re01 = __SUMDOTP2(temp01, cd11, re01); \ + re02 = __SUMDOTP2(temp01, cd12, re02); \ + re03 = __SUMDOTP2(temp01, cd13, re03); \ + re10 = __SUMDOTP2(temp11, cd10, re10); \ + re11 = __SUMDOTP2(temp11, cd11, re11); \ + re12 = __SUMDOTP2(temp11, cd12, re12); \ + re13 = __SUMDOTP2(temp11, cd13, re13); \ + re00 = re00 >> 15; \ + re01 = re01 >> 15; \ + re02 = re02 >> 15; \ + re03 = re03 >> 15; \ + re10 = re10 >> 15; \ + re11 = re11 >> 15; \ + re12 = re12 >> 15; \ + re13 = re13 >> 15; \ + v2s c00 = __PACK2(re00, im00); \ + v2s c01 = __PACK2(re01, im01); \ + v2s c02 = __PACK2(re02, im02); \ + v2s c03 = __PACK2(re03, im03); \ + v2s c10 = __PACK2(re10, im10); \ + v2s c11 = __PACK2(re11, im11); \ + v2s c12 = __PACK2(re12, im12); \ + v2s c13 = __PACK2(re13, im13); \ + sum00 = __ADD2(sum00, c00); \ + sum01 = __ADD2(sum01, c01); \ + sum02 = __ADD2(sum02, c02); \ + sum03 = __ADD2(sum03, c03); \ + sum10 = __ADD2(sum10, c10); \ + sum11 = __ADD2(sum11, c11); \ + sum12 = __ADD2(sum12, c12); \ + sum13 = __ADD2(sum13, c13); \ + } \ + (*(v2s *)&C[2 * ((i + 0) * P + k + 0)]) = sum00; \ + (*(v2s *)&C[2 * ((i + 0) * P + k + 1)]) = sum01; \ + (*(v2s *)&C[2 * ((i + 0) * P + k + 2)]) = sum02; \ + (*(v2s *)&C[2 * ((i + 0) * P + k + 3)]) = sum03; \ + (*(v2s *)&C[2 * ((i + 1) * P + k + 0)]) = sum10; \ + (*(v2s *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; \ + (*(v2s *)&C[2 * ((i + 1) * P + k + 2)]) = sum12; \ + (*(v2s *)&C[2 * ((i + 1) * P + k + 3)]) = sum13; + +void cmatmul_2x4_q16s(int16_t const *__restrict__ A, + int16_t const *__restrict__ B, int16_t *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P) { + + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P + for (k = 0; k < P; k += 4) { + for (i = 0; i < M; i += 2) { + // CMATMUL_1x1_LOOP; + // CMATMUL_2x2_LOOP; + CMATMUL_2x4_LOOP; + } + } + return; +} + +#define __SHIFT_A +void cmatmul_2x4_q16p(int16_t const *__restrict__ A, + int16_t const *__restrict__ B, int16_t *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, + uint32_t numThreads) { + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t k = 0; // loop counter for P +#ifndef __SHIFT_A + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = 0; i < M; i += 2) { + CMATMUL_2x4_LOOP; + } + } +#else + uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); + for (k = core_id * 4; k < P; k += 4 * numThreads) { + for (i = shift_id; i < M; i += 2) { + CMATMUL_2x4_LOOP; + } + for (i = 0; i < shift_id; i += 2) { + CMATMUL_2x4_LOOP; + } + } +#endif + mempool_barrier(numThreads); + return; +} From adc6fe88c9b5dedab3b072413af30eaa2ce1fdd2 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 5 Mar 2024 18:09:33 +0100 Subject: [PATCH 26/39] [software] Add channel estimation with multiplication by pilots --- software/apps/chest_q16/main.c | 0 software/runtime/data/generate_chest.py | 127 +++---- software/runtime/kernel/mempool_chest_f16.h | 372 +++++++++++++++++++ software/runtime/kernel/mempool_chest_q16.h | 245 ++++++++++++ software/runtime/kernel/mempool_chest_q16p.h | 1 + software/runtime/kernel/mempool_chest_q16s.h | 1 + 6 files changed, 674 insertions(+), 72 deletions(-) create mode 100644 software/apps/chest_q16/main.c create mode 100644 software/runtime/kernel/mempool_chest_f16.h create mode 100644 software/runtime/kernel/mempool_chest_q16.h diff --git a/software/apps/chest_q16/main.c b/software/apps/chest_q16/main.c new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/data/generate_chest.py b/software/runtime/data/generate_chest.py index f23ee917a..058ce2abf 100755 --- a/software/runtime/data/generate_chest.py +++ b/software/runtime/data/generate_chest.py @@ -31,10 +31,6 @@ def gen_data_header_file( with file.open('w') as f: f.write(template.render(**kwargs)) -###################### -# Fixpoint Functions # -###################### - def q_sat(x): if x > 2**15 - 1: @@ -45,22 +41,6 @@ def q_sat(x): return x -def q_add(a, b): - return q_sat(a + b) - - -def q_sub(a, b): - return q_sat(a - b) - - -def q_mul(a, b, p): - return a * b - - -def q_div(a, b, p): - return a / b - - def generate_chest_f16(nb_tx, nb_rx, nb_samples): H = np.random.randn(nb_rx, nb_tx) + 1j * np.random.randn(nb_rx, nb_tx) vector_pilot_tx = [] @@ -68,19 +48,27 @@ def generate_chest_f16(nb_tx, nb_rx, nb_samples): vector_Hest = [] for k in range(nb_samples): - # Compute data + # Compute data division + # pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) + # pilot_rx = np.dot(H, pilot_tx) + # Hest = pilot_rx[:, np.newaxis] / pilot_tx[np.newaxis, :] + + # Compute data multiplication pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) pilot_rx = np.dot(H, pilot_tx) - Hest = pilot_rx[:, np.newaxis] / pilot_tx[np.newaxis, :] + pilot_tx = np.reciprocal(pilot_tx) + Hest = pilot_rx[:, np.newaxis] * pilot_tx[np.newaxis, :] # Interleaved real and imaginary parts pilot_tx = np.column_stack( - (pilot_tx.real, pilot_tx.imag)).astype(np.float16).flatten() + (pilot_tx.imag, pilot_tx.real)).astype( + np.float16).flatten() pilot_rx = np.column_stack( - (pilot_rx.real, pilot_rx.imag)).astype(np.float16).flatten() + (pilot_rx.imag, pilot_rx.real)).astype( + np.float16).flatten() Hest = Hest.flatten() Hest = np.column_stack( - (Hest.real, Hest.imag)).astype( + (Hest.imag, Hest.real)).astype( np.float16).flatten() # Output vectors @@ -93,66 +81,61 @@ def generate_chest_f16(nb_tx, nb_rx, nb_samples): vector_Hest = np.concatenate(vector_Hest, axis=0) return vector_pilot_tx, vector_pilot_rx, vector_Hest -# Convert to fixed point - - -def fixed_point_conversion(v_input, fixed_point, scaling_factor): - real = (np.multiply(v_input.real, - scaling_factor * 2**(np.log2(fixed_point)))) - imag = (np.multiply(v_input.imag, - scaling_factor * 2**(np.log2(fixed_point)))) - output = np.zeros(len(real) * 2) - for i in range(0, len(real)): - output[2 * i] = real[i] - output[2 * i + 1] = imag[i] - return output.astype(np.int16) - # Compute the channel estimate def compute_chest_q16(in_rx, in_tx, p): - my_type = np.int16 - a = in_rx.astype(my_type) - b = in_tx.astype(my_type) - n_rx = a.size >> 1 - n_tx = b.size >> 1 - result = np.zeros(2 * (n_tx * n_rx), dtype=my_type) + n_rx = in_rx.size + n_tx = in_tx.size + result = np.zeros(2 * (n_tx * n_rx), dtype=np.int16) for i in range(n_rx): - a_r = a[2 * i] - a_i = a[2 * i + 1] + a_r = in_rx[i].real + a_i = in_rx[i].imag for j in range(n_tx): - b_r = b[2 * j] - b_i = b[2 * j + 1] - den = q_mul(b_r, b_r, p) + q_mul(b_i, b_i, p) - num_r = q_add(q_mul(a_r, b_r, p), q_mul(a_i, b_i, p)) - num_i = q_sub(q_mul(a_i, b_r, p), q_mul(a_r, b_i, p)) - result[2 * (i * n_tx + j)] = q_div(num_r, den, p) - result[2 * (i * n_tx + j) + 1] = q_div(num_i, den, p) + b_r = in_tx[j].real + b_i = in_tx[j].imag + +# # Compute data division +# den = (2**16) // (b_r * b_r + b_i * b_i) +# num_r = (a_r * b_r) + (a_i * b_i) +# num_i = (a_i * b_r) - (a_r * b_i) +# result[2 * (i * n_tx + j)] = q_sat((num_r * den) // 2**p) +# result[2 * (i * n_tx + j) + 1] = q_sat((num_i * den) // 2**p) + + # Compute data multiplication + num_r = (a_r * b_r) + (a_i * b_i) + num_i = (a_i * b_r) - (a_r * b_i) + result[2 * (i * n_tx + j)] = q_sat(num_r // 2**p) + result[2 * (i * n_tx + j) + 1] = q_sat(num_i // 2**p) return result def generate_chest_q16(nb_tx, nb_rx, nb_samples): - H = np.random.randn(nb_rx, nb_tx) + 1j * np.random.randn(nb_rx, nb_tx) + FIXED_POINT = 8 + MAX = 2**7 + qvector_pilot_tx = [] qvector_pilot_rx = [] qvector_Hest = [] for k in range(nb_samples): - pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) - pilot_rx = np.dot(H, pilot_tx) - fixed_point = 12 - scaling_factor = 1 - q_pilot_tx = fixed_point_conversion( - np.reshape(pilot_tx, [nb_tx]), fixed_point, 1) - q_pilot_rx = fixed_point_conversion( - np.reshape( - pilot_rx, - [nb_rx]), - fixed_point, - scaling_factor) - q_Hest = compute_chest_q16(q_pilot_rx, q_pilot_tx, fixed_point) - qvector_pilot_tx.append(q_pilot_tx) - qvector_pilot_rx.append(q_pilot_rx) - qvector_Hest.append(q_Hest) + # Create pilots + pilot_rx = np.random.randint(-MAX, MAX - 1, size=nb_rx) + 1j * \ + np.random.randint(-MAX, MAX - 1, size=nb_rx) + pilot_tx = np.random.randint(-MAX, MAX - 1, size=nb_tx) + 1j * \ + np.random.randint(-MAX, MAX - 1, size=nb_tx) + # Compute Hest + Hest = compute_chest_q16(pilot_rx, pilot_tx, FIXED_POINT) + + pilot_tx = np.column_stack( + (pilot_tx.imag, pilot_tx.real)).astype( + np.int16).flatten() + pilot_rx = np.column_stack( + (pilot_rx.imag, pilot_rx.real)).astype( + np.int16).flatten() + qvector_pilot_tx.append(pilot_tx) + qvector_pilot_rx.append(pilot_rx) + qvector_Hest.append(Hest) + qvector_pilot_tx = np.reshape(qvector_pilot_tx, [2 * nb_tx * nb_samples]) qvector_pilot_rx = np.reshape(qvector_pilot_rx, [2 * nb_rx * nb_samples]) qvector_Hest = np.reshape(qvector_Hest, [2 * nb_tx * nb_rx * nb_samples]) @@ -175,7 +158,7 @@ def main(): "--num_rx", type=int, required=False, - default=4, + default=32, help='Number beams' ) parser.add_argument( diff --git a/software/runtime/kernel/mempool_chest_f16.h b/software/runtime/kernel/mempool_chest_f16.h new file mode 100644 index 000000000..ba99a9e3f --- /dev/null +++ b/software/runtime/kernel/mempool_chest_f16.h @@ -0,0 +1,372 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define __CDOTP +#define __MUL + +/* a[i] = ar[i] + i * ai[j] + + out[i][j] = a[i] / c[j] + out[i][j + 1] = a[i] / c[j + 1h + out[i][j + 2] = a[i] / c[j + 2] + out[i][j + 3] = a[i] / c[j + 3]*/ + +#ifdef __XDIVSQRT +#define DIV_LOOP(ab, ab_n, i) \ + re0 = 0; \ + re1 = 0; \ + re2 = 0; \ + re3 = 0; \ + im0 = 0; \ + im1 = 0; \ + im2 = 0; \ + im3 = 0; \ + D0 = 0; \ + D1 = 0; \ + D2 = 0; \ + D3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ + "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ + "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ + "vfdotpex.s.h %[D3], %[cd3], %[cd3];" \ + "vfdotpex.s.h %[re0], %[x], %[cd0];" \ + "vfdotpex.s.h %[re1], %[x], %[cd1];" \ + "vfdotpex.s.h %[re2], %[x], %[cd2];" \ + "vfdotpex.s.h %[re3], %[x], %[cd3];" \ + "vfdotpex.s.h %[im0], %[y], %[cd0];" \ + "vfdotpex.s.h %[im1], %[y], %[cd1];" \ + "vfdotpex.s.h %[im2], %[y], %[cd2];" \ + "vfdotpex.s.h %[im3], %[y], %[cd3];" \ + "fdiv.s %[re0], %[re0], %[D0];" \ + "fdiv.s %[re1], %[re1], %[D1];" \ + "fdiv.s %[re2], %[re2], %[D2];" \ + "fdiv.s %[re3], %[re3], %[D3];" \ + "fdiv.s %[im0], %[im0], %[D0];" \ + "fdiv.s %[im1], %[im1], %[D1];" \ + "fdiv.s %[im2], %[im2], %[D2];" \ + "fdiv.s %[im3], %[im3], %[D3];" \ + "vfcpka.h.s %[re0], %[re0], %[im0];" \ + "vfcpka.h.s %[re1], %[re1], %[im1];" \ + "vfcpka.h.s %[re2], %[re2], %[im2];" \ + "vfcpka.h.s %[re3], %[re3], %[im3];" \ + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), \ + [D3] "+&r"(D3), [re0] "+&r"(re0), [re1] "+&r"(re1), \ + [re2] "+&r"(re2), [re3] "+&r"(re3), [im0] "+&r"(im0), \ + [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; +#else +#define DIV_LOOP(ab, ab_n, i) \ + re0 = 0; \ + re1 = 0; \ + re2 = 0; \ + re3 = 0; \ + im0 = 0; \ + im1 = 0; \ + im2 = 0; \ + im3 = 0; \ + D0 = 0; \ + D1 = 0; \ + D2 = 0; \ + D3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ + "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ + "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ + "vfdotpex.s.h %[D3], %[cd3], %[cd3];" \ + "vfdotpex.s.h %[re0], %[x], %[cd0];" \ + "vfdotpex.s.h %[re1], %[x], %[cd1];" \ + "vfdotpex.s.h %[re2], %[x], %[cd2];" \ + "vfdotpex.s.h %[re3], %[x], %[cd3];" \ + "vfdotpex.s.h %[im0], %[y], %[cd0];" \ + "vfdotpex.s.h %[im1], %[y], %[cd1];" \ + "vfdotpex.s.h %[im2], %[y], %[cd2];" \ + "vfdotpex.s.h %[im3], %[y], %[cd3];" \ + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), \ + [D3] "+&r"(D3), [re0] "+&r"(re0), [re1] "+&r"(re1), \ + [re2] "+&r"(re2), [re3] "+&r"(re3), [im0] "+&r"(im0), \ + [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + re0 = re0 / D0; \ + re1 = re1 / D1; \ + re2 = re2 / D2; \ + re3 = re3 / D3; \ + im0 = im0 / D0; \ + im1 = im1 / D1; \ + im2 = im2 / D2; \ + im3 = im3 / D3; \ + asm volatile("vfcpka.h.s %[re0], %[re0], %[im0];" \ + "vfcpka.h.s %[re1], %[re1], %[im1];" \ + "vfcpka.h.s %[re2], %[re2], %[im2];" \ + "vfcpka.h.s %[re3], %[re3], %[im3];" \ + : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ + [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ + [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; +#endif + +/* a[i] = ar[i] + i * ai[j] + + out[i][j] = a[i] * c[j] + out[i][j + 1] = a[i] * c[j + 1] + out[i][j + 2] = a[i] * c[j + 2] + out[i][j + 3] = a[i] * c[j + 3]*/ + +#define MUL_LOOP(ab, ab_n, i) \ + re0 = 0; \ + re1 = 0; \ + re2 = 0; \ + re3 = 0; \ + im0 = 0; \ + im1 = 0; \ + im2 = 0; \ + im3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("vfdotpex.s.h %[re0], %[x], %[cd0];" \ + "vfdotpex.s.h %[re1], %[x], %[cd1];" \ + "vfdotpex.s.h %[re2], %[x], %[cd2];" \ + "vfdotpex.s.h %[re3], %[x], %[cd3];" \ + "vfdotpex.s.h %[im0], %[y], %[cd0];" \ + "vfdotpex.s.h %[im1], %[y], %[cd1];" \ + "vfdotpex.s.h %[im2], %[y], %[cd2];" \ + "vfdotpex.s.h %[im3], %[y], %[cd3];" \ + : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ + [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ + [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + asm volatile( \ + "vfcpka.h.s %[re0], %[re0], %[im0];" \ + "vfcpka.h.s %[re1], %[re1], %[im1];" \ + "vfcpka.h.s %[re2], %[re2], %[im2];" \ + "vfcpka.h.s %[re3], %[re3], %[im3];" \ + : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ + [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ + [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; + +#define CMUL_LOOP(ab, i) \ + sum0 = 0; \ + sum1 = 0; \ + sum2 = 0; \ + sum3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("fcdotpex.s.h %[sum0], %[x], %[cd0];" \ + "fcdotpex.s.h %[sum1], %[x], %[cd1];" \ + "fcdotpex.s.h %[sum2], %[x], %[cd2];" \ + "fcdotpex.s.h %[sum3], %[x], %[cd3];" \ + : [sum0] "+&r"(sum0), [sum1] "+&r"(sum1), [sum2] "+&r"(sum2), \ + [sum3] "+&r"(sum3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = sum0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = sum1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = sum2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = sum3; + +#define SHUFFLE_A \ + asm volatile( \ + "xor %[ab_n0], %[ab0], %[neg_mask];" \ + "xor %[ab_n1], %[ab1], %[neg_mask];" \ + "xor %[ab_n2], %[ab2], %[neg_mask];" \ + "xor %[ab_n3], %[ab3], %[neg_mask];" \ + "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" \ + "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" \ + "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" \ + "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" \ + : [ab_n0] "+&r"(ab_n0), [ab_n1] "+&r"(ab_n1), [ab_n2] "+&r"(ab_n2), \ + [ab_n3] "+&r"(ab_n3) \ + : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), \ + [neg_mask] "r"(0x00008000), [mask] "r"(0x00020003) \ + :); \ +/** \ + @brief Block-type channel estimation. \ + @param[in] pH points to output channel \ + @param[in] pPilotRX points to received symbol \ + @param[in] pPilotTX points to sent pilot \ + @param[in] nTX Number of transmitters \ + @param[in] nRX Number of receivers \ + @param[in] nSc Number of Subcarriers \ + @return none \ +*/ +void mempool_chest_f16s_unrolled4(__fp16 *pH, __fp16 *pPilotRX, + __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc) { + + uint32_t ab0, ab1, ab2, ab3; + uint32_t cd0, cd1, cd2, cd3; + uint32_t re0, re1, re2, re3; + uint32_t im0, im1, im2, im3; + uint32_t D0, D1, D2, D3; + uint32_t ab_n0, ab_n1, ab_n2, ab_n3; + __fp16 *pPilotTX_itr; + __fp16 *pPilotRX_itr; + __fp16 *pH_itr; + + for (uint32_t k = 0; k < nSc; k++) { + pPilotTX_itr = pPilotTX + k * (2 * nTX); + pPilotRX_itr = pPilotRX + k * (2 * nRX); + pH_itr = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i++) { + ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; + ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; + SHUFFLE_A; + for (uint32_t j = 0; j < nTX; j += 4) { + DIV_LOOP(ab0, ab_n0, i); + DIV_LOOP(ab1, ab_n1, i + 1); + DIV_LOOP(ab2, ab_n2, i + 2); + DIV_LOOP(ab3, ab_n3, i + 3); + } + } + } + return; +} + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @param[in] core_id ID of the PE + @param[in] nPE Number of PEs + @return none +*/ +void mempool_chest_f16p_unrolled4(__fp16 *pH, __fp16 *pPilotRX, + __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc, uint32_t core_id, + uint32_t nPE) { + uint32_t ab0, ab1, ab2, ab3; + uint32_t cd0, cd1, cd2, cd3; +#ifndef __CDOTP + uint32_t ab_n0, ab_n1, ab_n2, ab_n3; + uint32_t re0, re1, re2, re3; + uint32_t im0, im1, im2, im3; +#else + uint32_t sum0, sum1, sum2, sum3; +#endif + +#ifndef __MUL + uint32_t D0, D1, D2, D3; +#endif + + __fp16 *pPilotTX_itr; + __fp16 *pPilotRX_itr; + __fp16 *pH_itr; + + for (uint32_t k = core_id; k < nSc; k += nPE) { + pPilotTX_itr = pPilotTX + k * (2 * nTX); + pPilotRX_itr = pPilotRX + k * (2 * nRX); + pH_itr = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i += 4) { + ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; + ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; +#ifndef __CDOTP + SHUFFLE_A; +#endif + + for (uint32_t j = 0; j < nTX; j += 4) { +#if (defined(__CDOTP) && defined(__MUL)) + CMUL_LOOP(ab0, i); + CMUL_LOOP(ab1, i + 1); + CMUL_LOOP(ab2, i + 2); + CMUL_LOOP(ab3, i + 3); +#elif (!defined(__CDOTP) && defined(__MUL)) + MUL_LOOP(ab0, ab_n0, i); + MUL_LOOP(ab1, ab_n1, i + 1); + MUL_LOOP(ab2, ab_n2, i + 2); + MUL_LOOP(ab3, ab_n3, i + 3); +#else + DIV_LOOP(ab0, ab_n0, i) + DIV_LOOP(ab1, ab_n1, i + 1) + DIV_LOOP(ab2, ab_n2, i + 2) + DIV_LOOP(ab3, ab_n3, i + 3) +#endif + } + } + } + mempool_barrier(nPE); + return; +} + +void mempool_chest_f16p_unrolled4_local(__fp16 *volatile pH, + __fp16 *volatile pPilotRX, + __fp16 *volatile pPilotTX, uint32_t nRX, + uint32_t nTX, uint32_t nSc, + uint32_t core_id, uint32_t nPE) { + uint32_t ab0, ab1, ab2, ab3; + uint32_t cd0, cd1, cd2, cd3; + uint32_t sum0, sum1, sum2, sum3; + __fp16 *pPilotTX_itr; + __fp16 *pPilotRX_itr; + __fp16 *pH_itr; + uint32_t itr, i, j; + + // Cores Loop over the received pilots vector + for (itr = core_id * 4; itr < (nSc * nRX); + itr += (BANKING_FACTOR * NUM_CORES)) { + // Received pilots are aligned to cores + uint32_t sc_RX = itr / nRX; + pPilotTX_itr = pPilotTX + sc_RX * (2 * nTX); + pPilotRX_itr = pPilotRX + sc_RX * (2 * nRX); + pH_itr = pH + sc_RX * 2 * (nTX * nRX); + + // Load received pilots + i = itr % nRX; + ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; + ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; + for (j = 0; j < nTX; j += 4) { + CMUL_LOOP(ab0, i); + CMUL_LOOP(ab1, i + 1); + CMUL_LOOP(ab2, i + 2); + CMUL_LOOP(ab3, i + 3); + } + } + mempool_barrier(nPE); + return; +} diff --git a/software/runtime/kernel/mempool_chest_q16.h b/software/runtime/kernel/mempool_chest_q16.h new file mode 100644 index 000000000..c66aa0537 --- /dev/null +++ b/software/runtime/kernel/mempool_chest_q16.h @@ -0,0 +1,245 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#include "xpulp/builtins_v2.h" +#define __MUL + +/* a[i] = ar[i] + i * ai[j] + out[i][j] = a[i] / c[j] + out[i][j + 1] = a[i] / c[j + 1] + out[i][j + 2] = a[i] / c[j + 2] + out[i][j + 3] = a[i] / c[j + 3]*/ + +#define DIV_LOOP(ab, ab_n, i) \ + cd0 = *(v2s *)&pPilotTX_itr[2U * j]; \ + cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; \ + D0 = (1 << 16U) / __DOTP2(cd0, cd0); \ + D1 = (1 << 16U) / __DOTP2(cd1, cd1); \ + D2 = (1 << 16U) / __DOTP2(cd2, cd2); \ + D3 = (1 << 16U) / __DOTP2(cd3, cd3); \ + re0 = __DOTP2(ab, cd0); \ + re1 = __DOTP2(ab, cd1); \ + re2 = __DOTP2(ab, cd2); \ + re3 = __DOTP2(ab, cd3); \ + im0 = __DOTP2(ab_n, cd0); \ + im1 = __DOTP2(ab_n, cd1); \ + im2 = __DOTP2(ab_n, cd2); \ + im3 = __DOTP2(ab_n, cd3); \ + re0 = __CLIP((re0 * D0) >> 8, 16); \ + re1 = __CLIP((re1 * D1) >> 8, 16); \ + re2 = __CLIP((re2 * D2) >> 8, 16); \ + re3 = __CLIP((re3 * D3) >> 8, 16); \ + im0 = __CLIP((im0 * D0) >> 8, 16); \ + im1 = __CLIP((im1 * D1) >> 8, 16); \ + im2 = __CLIP((im2 * D2) >> 8, 16); \ + im3 = __CLIP((im3 * D3) >> 8, 16); \ + re0 = (int32_t)(__PACK2(re0, im0)); \ + re1 = (int32_t)(__PACK2(re1, im1)); \ + re2 = (int32_t)(__PACK2(re2, im2)); \ + re3 = (int32_t)(__PACK2(re3, im3)); \ + *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; \ + *((v2s *)&pH_itr[2 * (i * nTX + j + 1)]) = (v2s)re1; \ + *((v2s *)&pH_itr[2 * (i * nTX + j + 2)]) = (v2s)re2; \ + *((v2s *)&pH_itr[2 * (i * nTX + j + 3)]) = (v2s)re3; + +/* a[i] = ar[i] + i * ai[j] + out[i][j] = a[i] * c[j] + out[i][j + 1] = a[i] * c[j + 1] + out[i][j + 2] = a[i] * c[j + 2] + out[i][j + 3] = a[i] * c[j + 3]*/ + +#define MUL_LOOP(ab, ab_n, i) \ + cd0 = *(v2s *)&pPilotTX_itr[2U * j]; \ + cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; \ + re0 = __DOTP2(ab, cd0); \ + re1 = __DOTP2(ab, cd1); \ + re2 = __DOTP2(ab, cd2); \ + re3 = __DOTP2(ab, cd3); \ + im0 = __DOTP2(ab_n, cd0); \ + im1 = __DOTP2(ab_n, cd1); \ + im2 = __DOTP2(ab_n, cd2); \ + im3 = __DOTP2(ab_n, cd3); \ + re0 = __CLIP(re0 >> 8, 16); \ + re1 = __CLIP(re1 >> 8, 16); \ + re2 = __CLIP(re2 >> 8, 16); \ + re3 = __CLIP(re3 >> 8, 16); \ + im0 = __CLIP(im0 >> 8, 16); \ + im1 = __CLIP(im1 >> 8, 16); \ + im2 = __CLIP(im2 >> 8, 16); \ + im3 = __CLIP(im3 >> 8, 16); \ + re0 = (int32_t)(__PACK2(re0, im0)); \ + re1 = (int32_t)(__PACK2(re1, im1)); \ + re2 = (int32_t)(__PACK2(re2, im2)); \ + re3 = (int32_t)(__PACK2(re3, im3)); \ + *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; \ + *((v2s *)&pH_itr[2 * (i * nTX + j + 1)]) = (v2s)re1; \ + *((v2s *)&pH_itr[2 * (i * nTX + j + 2)]) = (v2s)re2; \ + *((v2s *)&pH_itr[2 * (i * nTX + j + 3)]) = (v2s)re3; + +#define SHUFFLE_A \ + asm volatile( \ + "pv.sub.h %[ab_n0], %[zero], %[ab0];" \ + "pv.sub.h %[ab_n1], %[zero], %[ab1];" \ + "pv.sub.h %[ab_n2], %[zero], %[ab2];" \ + "pv.sub.h %[ab_n3], %[zero], %[ab3];" \ + "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" \ + "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" \ + "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" \ + "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" \ + : [ab_n0] "=&r"(ab_n0), [ab_n1] "=&r"(ab_n1), [ab_n2] "=&r"(ab_n2), \ + [ab_n3] "=&r"(ab_n3) \ + : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), \ + [zero] "r"(0x00000000), [mask] "r"(0x00020001) \ + :); + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @return none +*/ +void mempool_chest_q16s_unrolled4(int16_t *pH, int16_t *pPilotRX, + int16_t *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc) { + + v2s ab0, ab1, ab2, ab3; + v2s ab_n0, ab_n1, ab_n2, ab_n3; + v2s cd0, cd1, cd2, cd3; + int32_t re0, re1, re2, re3; + int32_t im0, im1, im2, im3; + int32_t D0, D1, D2, D3; + + int16_t *pPilotTX_itr; + int16_t *pPilotRX_itr; + int16_t *pH_itr; + for (uint32_t k = 0; k < nSc; k++) { + pPilotTX_itr = pPilotTX + k * (2 * nTX); + pPilotRX_itr = pPilotRX + k * (2 * nRX); + pH_itr = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i += 4) { + ab0 = *(v2s *)&pPilotRX_itr[2U * i]; + ab1 = *(v2s *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(v2s *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; + SHUFFLE_A; + for (uint32_t j = 0; j < nTX; j += 4) { + DIV_LOOP(ab0, ab_n0, i); + DIV_LOOP(ab1, ab_n1, i + 1); + DIV_LOOP(ab2, ab_n2, i + 2); + DIV_LOOP(ab3, ab_n3, i + 3); + } + } + } + return; +} + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @return none +*/ +void mempool_chest_q16p_unrolled4(int16_t *volatile pH, + int16_t *volatile pPilotRX, + int16_t *volatile pPilotTX, uint32_t nRX, + uint32_t nTX, uint32_t nSc, uint32_t core_id, + uint32_t nPE) { + + v2s ab0, ab1, ab2, ab3; + v2s ab_n0, ab_n1, ab_n2, ab_n3; + v2s cd0, cd1, cd2, cd3; + int32_t re0, re1, re2, re3; + int32_t im0, im1, im2, im3; +#ifndef __MUL + int32_t D0, D1, D2, D3; +#endif + + int16_t *pPilotTX_itr; + int16_t *pPilotRX_itr; + int16_t *pH_itr; + for (uint32_t k = core_id; k < nSc; k += nPE) { + pPilotTX_itr = pPilotTX + k * (2 * nTX); + pPilotRX_itr = pPilotRX + k * (2 * nRX); + pH_itr = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i += 4) { + ab0 = *(v2s *)&pPilotRX_itr[2U * i]; + ab1 = *(v2s *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(v2s *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; + SHUFFLE_A; + for (uint32_t j = 0; j < nTX; j += 4) { +#ifdef __MUL + MUL_LOOP(ab0, ab_n0, i); + MUL_LOOP(ab1, ab_n1, i + 1); + MUL_LOOP(ab2, ab_n2, i + 2); + MUL_LOOP(ab3, ab_n3, i + 3); +#else + DIV_LOOP(ab0, ab_n0, i); + DIV_LOOP(ab1, ab_n1, i + 1); + DIV_LOOP(ab2, ab_n2, i + 2); + DIV_LOOP(ab3, ab_n3, i + 3); +#endif + } + } + } + mempool_barrier(nPE); + return; +} + +void mempool_chest_q16p_unrolled4_local(int16_t *volatile pH, + int16_t *volatile pPilotRX, + int16_t *volatile pPilotTX, + uint32_t nRX, uint32_t nTX, + uint32_t nSc, uint32_t core_id, + uint32_t nPE) { + v2s ab0, ab1, ab2, ab3; + v2s ab_n0, ab_n1, ab_n2, ab_n3; + v2s cd0, cd1, cd2, cd3; + int32_t re0, re1, re2, re3; + int32_t im0, im1, im2, im3; + int16_t *pPilotTX_itr; + int16_t *pPilotRX_itr; + int16_t *pH_itr; + uint32_t itr, i, j; + + // Cores Loop over the received pilots vector + for (itr = core_id * 4; itr < (nSc * nRX); + itr += (BANKING_FACTOR * NUM_CORES)) { + // Received pilots are aligned to cores + uint32_t sc_RX = itr / nRX; + pPilotTX_itr = pPilotTX + sc_RX * (2 * nTX); + pPilotRX_itr = pPilotRX + sc_RX * (2 * nRX); + pH_itr = pH + sc_RX * 2 * (nTX * nRX); + // Load received pilots + i = itr % nRX; + ab0 = *(v2s *)&pPilotRX_itr[2U * i]; + ab1 = *(v2s *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(v2s *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; + SHUFFLE_A; + for (j = 0; j < nTX; j += 4) { + MUL_LOOP(ab0, ab_n0, i); + MUL_LOOP(ab1, ab_n1, i + 1); + MUL_LOOP(ab2, ab_n2, i + 2); + MUL_LOOP(ab3, ab_n3, i + 3); + } + } + mempool_barrier(nPE); + return; +} diff --git a/software/runtime/kernel/mempool_chest_q16p.h b/software/runtime/kernel/mempool_chest_q16p.h index e69de29bb..8b1378917 100644 --- a/software/runtime/kernel/mempool_chest_q16p.h +++ b/software/runtime/kernel/mempool_chest_q16p.h @@ -0,0 +1 @@ + diff --git a/software/runtime/kernel/mempool_chest_q16s.h b/software/runtime/kernel/mempool_chest_q16s.h index e69de29bb..8b1378917 100644 --- a/software/runtime/kernel/mempool_chest_q16s.h +++ b/software/runtime/kernel/mempool_chest_q16s.h @@ -0,0 +1 @@ + From f6ffab1f6930110663c0f4ef68cd9e233f193cf5 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Tue, 5 Mar 2024 18:12:18 +0100 Subject: [PATCH 27/39] [software] Fix f16 cfft --- .../apps/baremetal/cfft_radix4_f16/main.c | 89 +++++++------------ software/apps/cfft_radix4_q16/main.c | 0 software/runtime/data/data_cfft_f16.h.tpl | 2 - software/runtime/data/data_cfft_q16.h.tpl | 2 - .../runtime/kernel/mempool_radix2_cfft_q16s.h | 0 .../mempool_radix4_cfft_butterfly_f16.h | 1 + .../runtime/kernel/mempool_radix4_cfft_f16p.h | 43 +++------ 7 files changed, 46 insertions(+), 91 deletions(-) create mode 100644 software/apps/cfft_radix4_q16/main.c create mode 100644 software/runtime/kernel/mempool_radix2_cfft_q16s.h diff --git a/software/apps/baremetal/cfft_radix4_f16/main.c b/software/apps/baremetal/cfft_radix4_f16/main.c index 28fcd7871..2f4270c80 100644 --- a/software/apps/baremetal/cfft_radix4_f16/main.c +++ b/software/apps/baremetal/cfft_radix4_f16/main.c @@ -21,29 +21,18 @@ #include "data/data_cfft_radix4_f16.h" /* - CHOOSE ONE - - SINGLE: Single core FFT - - PARALLEL: Parallel FFT not "memory-aware" - FOLDED: Parallel FFT with "memory-aware" load/store scheme - SCHEDULED: Scheduling of multiple parallel FFTs with "memory-aware" - load/store scheme + load/store scheme - N_FFTs_COL: Independent FFTs scheduled on one row (default 1) - N_FFTs_ROW: Independent FFTs scheduled on columns (default 1) - (OPTIONALLY ENABLE) - FOLDED_TWIDDLES: Also the twiddles have "memory-aware" load/stores - - BITREVERSETABLE: The bitreversal indeces are loaded from a table - - ASM: Use asm_volatile statements */ #define FOLDED #define FOLDED_TWIDDLES -#define BITREVERSETABLE -#define ASM - -#if !(defined(N_FFT_ROW) && defined(N_FFTs_COL)) #define N_FFTs_ROW 1 #define N_FFTs_COL 1 -#endif #include "kernel/mempool_checks.h" #include "kernel/mempool_radix4_cfft_butterfly_f16.h" @@ -61,98 +50,82 @@ __fp16 l1_twiddleCoef_f16_dst[8 * N_BANKS] uint16_t l1_BitRevIndexTable[BITREVINDEXTABLE_LENGTH] __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); -/////////////////////////////////////////////////////////////////////////////////////////////////// -/* MAIN */ int main() { + uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); mempool_barrier_init(core_id); + __fp16 *pRes = (__fp16 *)0; - /////////////////////////////////////////////////////////////////////////////////////////////////// - /* INITIALIZATION */ if (core_id == 0) { // Each FFT is folded over 4 memory rows - // Each memory row is 2 * N_BANKS samples + // Each memory row is 2 * N_BANKS (real-imag) samples for (uint32_t j = 0; j < N_FFTs_ROW; j++) { dma_memcpy_blocking(l1_pSrc + j * (8 * N_BANKS), l2_pSrc, - (N_RSAMPLES * N_FFTs_COL) * sizeof(int32_t)); + (N_CSAMPLES * N_FFTs_COL) * sizeof(int32_t)); } + dma_memcpy_blocking(l1_pSrc, l2_pSrc, N_CSAMPLES * sizeof(int32_t)); dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); } - // Initialize the Twiddles folded +// Initialize the Twiddles folded #ifdef FOLDED_TWIDDLES for (uint32_t j = 0; j < N_FFTs_COL; j++) { uint32_t N_WORDS_COL = (N_CSAMPLES / 4); for (uint32_t i = core_id; i < N_WORDS_COL; i += num_cores) { - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4))] = + *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * N_WORDS_COL)] = *(v2h *)&l2_twiddleCoef_f16[2U * i]; - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + - 1 * N_BANKS)] = + *(v2h *)&l1_twiddleCoef_f16_src[2U * + (i + j * N_WORDS_COL + 1 * N_BANKS)] = *(v2h *)&l2_twiddleCoef_f16[2U * (i * 2U)]; - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * (N_CSAMPLES / 4) + - 2 * N_BANKS)] = + *(v2h *)&l1_twiddleCoef_f16_src[2U * + (i + j * N_WORDS_COL + 2 * N_BANKS)] = *(v2h *)&l2_twiddleCoef_f16[2U * (i * 3U)]; } } #endif - mempool_barrier(num_cores); - if (core_id == 0) { - printf("On the run...\n"); + printf("01: END INITIALIZATION\n"); } mempool_barrier(num_cores); -/////////////////////////////////////////////////////////////////////////////////////////////////// -/* MULTI-CORE FOLDED */ -#ifdef FOLDED - __fp16 *pRes = NULL; +#if (defined(FOLDED) && defined(FOLDED_TWIDDLES)) if (core_id < (N_CSAMPLES / 16)) { mempool_start_benchmark(); -#ifdef FOLDED_TWIDDLES - mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, + mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, N_CSAMPLES, l1_twiddleCoef_f16_src, l1_twiddleCoef_f16_dst, (N_CSAMPLES / 16)); -#else - mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, (uint16_t)N_CSAMPLES, - l1_twiddleCoef_f16_src, (N_CSAMPLES / 16)); -#endif pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; mempool_bitrevtable_q16p_xpulpimg((uint16_t *)pRes, BITREVINDEXTABLE_LENGTH, l1_BitRevIndexTable, (N_CSAMPLES / 16)); mempool_stop_benchmark(); } - mempool_barrier(num_cores); #endif -/////////////////////////////////////////////////////////////////////////////////////////////////// -/* MULTI-CORE SCHEDULED */ #ifdef SCHEDULED - __fp16 *pRes = NULL; - if (core_id < N_FFTs_COL * (N_CSAMPLES / 16)) { + uint32_t nPE = (N_CSAMPLES / 16); + if (core_id < N_FFTs_COL * nPE) { mempool_start_benchmark(); - uint32_t col_fftLen = N_CSAMPLES / 4; - uint32_t col_id = core_id / (N_CSAMPLES / 16); - // Distribute FFTs over columns - if (col_id < N_FFTs_COL) { - mempool_radix4_cfft_f16p_scheduler( - l1_pSrc, l1_pDst, N_CSAMPLES, l1_pCoef_src + 2 * col_id * col_fftLen, - l1_pCoef_dst + 2 * col_id * col_fftLen, l1_pRevT16, - BITREVINDEXTABLE_FIXED_TABLE_LENGTH, 1, (N_CSAMPLES / 16)); - } - pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; - mempool_log_partial_barrier(2, core_id, N_FFTs_COL * (N_CSAMPLES / 16)); + uint32_t N_WORDS_COL = N_CSAMPLES / 4; + uint32_t col_id = core_id / nPE; + mempool_radix4_cfft_f16p_scheduler( + l1_pSrc, l1_pDst, N_CSAMPLES, N_FFTs_ROW, N_FFTs_COL, + l1_twiddleCoef_f16_src + 2 * col_id * N_WORDS_COL, + l1_twiddleCoef_f16_dst + 2 * col_id * N_WORDS_COL, l1_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH, 1, nPE); + pRes = l1_pDst; + mempool_log_partial_barrier(2, core_id, N_FFTs_COL * nPE); mempool_stop_benchmark(); } - mempool_barrier(num_cores); #endif - /////////////////////////////////////////////////////////////////////////////////////////////////// - /* CHECK */ - mempool_check_f16(pRes, l2_pRes, 2 * N_CSAMPLES, 0.5f, 0); mempool_barrier(num_cores); - + if (core_id == 0) { + printf("02: END COMPUTATION\n"); + } + mempool_check_f16(pRes, l2_pRes, 2 * N_CSAMPLES, 0.5, 0); + mempool_barrier(num_cores); return 0; } diff --git a/software/apps/cfft_radix4_q16/main.c b/software/apps/cfft_radix4_q16/main.c new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/data/data_cfft_f16.h.tpl b/software/runtime/data/data_cfft_f16.h.tpl index 7cfcda159..d21829e88 100644 --- a/software/runtime/data/data_cfft_f16.h.tpl +++ b/software/runtime/data/data_cfft_f16.h.tpl @@ -30,8 +30,6 @@ #define LOG2 (${Log2Len}) #define N_CSAMPLES (${Len}) -#define N_RSAMPLES (2 * N_CSAMPLES) -#define N_TWIDDLES (3 * N_CSAMPLES / 4) #define N_BANKS (NUM_CORES * BANKING_FACTOR) #define BITREVINDEXTABLE_LENGTH (${BitrevLen}) diff --git a/software/runtime/data/data_cfft_q16.h.tpl b/software/runtime/data/data_cfft_q16.h.tpl index fde7f2b71..fb1ba908a 100644 --- a/software/runtime/data/data_cfft_q16.h.tpl +++ b/software/runtime/data/data_cfft_q16.h.tpl @@ -31,8 +31,6 @@ %> \ #define LOG2 (${Log2Len}) #define N_CSAMPLES (${Len}) -#define N_RSAMPLES (2 * N_CSAMPLES) -#define N_TWIDDLES (3 * N_CSAMPLES / 4) #define N_BANKS (NUM_CORES * BANKING_FACTOR) #define BITREVINDEXTABLE_LENGTH (${BitrevLen}) diff --git a/software/runtime/kernel/mempool_radix2_cfft_q16s.h b/software/runtime/kernel/mempool_radix2_cfft_q16s.h new file mode 100644 index 000000000..e69de29bb diff --git a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h b/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h index 3e7a28245..7c305b222 100644 --- a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h +++ b/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h @@ -4,6 +4,7 @@ // Author: Marco Bertuletti, ETH Zurich +#pragma once #include "xpulp/builtins_v2.h" /** diff --git a/software/runtime/kernel/mempool_radix4_cfft_f16p.h b/software/runtime/kernel/mempool_radix4_cfft_f16p.h index 8682e6553..5699480fb 100644 --- a/software/runtime/kernel/mempool_radix4_cfft_f16p.h +++ b/software/runtime/kernel/mempool_radix4_cfft_f16p.h @@ -4,6 +4,8 @@ // Author: Marco Bertuletti, ETH Zurich +#pragma once +#define BITREVERSETABLE #include "xpulp/builtins_v2.h" #define MIN(x, y) (((x) < (y)) ? (x) : (y)) @@ -58,7 +60,6 @@ CoSi3 = *(v2h *)&pCoef_src[2U * (ic * 3U)]; #endif -#ifdef FOLDED_TWIDDLES /** @brief Full FFT butterfly @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are @@ -73,25 +74,8 @@ */ void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, uint32_t fftLen, __fp16 *pCoef_src, - __fp16 *pCoef_dst, uint32_t nPE) -#else -/** - Twiddles are not folded in memory - @brief Full FFT butterfly - @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are - interleaved - @param[out] pDst16 points to output buffer of 16b data, Re and Im parts - are interleaved - @param[in] fftLen Length of the complex input vector - @param[in] pCoef_src Twiddle coefficients vector - @param[in] nPE Number of PE - @return pointer to output vector -*/ -void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, - uint32_t fftLen, __fp16 *pCoef_src, - uint32_t nPE) -#endif -{ + __fp16 __attribute__((unused)) * pCoef_dst, + uint32_t nPE) { uint32_t absolute_core_id = mempool_get_core_id(); uint32_t core_id = absolute_core_id; @@ -218,8 +202,9 @@ void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, */ void mempool_radix4_cfft_f16p_scheduler( - __fp16 *pSrc16, __fp16 *pDst16, uint32_t fftLen, __fp16 *pCoef_src, - __fp16 *pCoef_dst, __attribute__((unused)) uint16_t *pBitRevTable, + __fp16 *pSrc16, __fp16 *pDst16, uint32_t fftLen, uint32_t n_FFTs_ROW, + uint32_t n_FFTs_COL, __fp16 *pCoef_src, __fp16 *pCoef_dst, + __attribute__((unused)) uint16_t *pBitRevTable, __attribute__((unused)) uint16_t bitReverseLen, uint8_t bitReverseFlag, uint32_t nPE) { @@ -251,7 +236,7 @@ void mempool_radix4_cfft_f16p_scheduler( #endif LOAD_STORE_TWIDDLEFACT; SHUFFLE_TWIDDLEFACT; - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * fftLen; __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); @@ -282,7 +267,7 @@ void mempool_radix4_cfft_f16p_scheduler( LOAD_STORE_TWIDDLEFACT; SHUFFLE_TWIDDLEFACT; - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); __fp16 *pOut = @@ -297,12 +282,12 @@ void mempool_radix4_cfft_f16p_scheduler( pTmp = pCoef_src; pCoef_src = pCoef_dst; pCoef_dst = pTmp; - mempool_log_partial_barrier(2, absolute_core_id, N_FFTs_COL * nPE); + mempool_log_partial_barrier(2, absolute_core_id, n_FFTs_COL * nPE); } /* LAST STAGE */ for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, fftLen >> 2U); i0++) { - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); __fp16 *pOut = @@ -313,7 +298,7 @@ void mempool_radix4_cfft_f16p_scheduler( pTmp = pSrc16; pSrc16 = pDst16; pDst16 = pTmp; - mempool_log_partial_barrier(2, absolute_core_id, N_FFTs_COL * nPE); + mempool_log_partial_barrier(2, absolute_core_id, n_FFTs_COL * nPE); mempool_stop_benchmark(); mempool_start_benchmark(); /* BITREVERSAL */ @@ -362,7 +347,7 @@ void mempool_radix4_cfft_f16p_scheduler( b2_load = (b2 % 4) * 2 * N_BANKS + 2 * (b2 / 4); b3_load = (b3 % 4) * 2 * N_BANKS + 2 * (b3 / 4); b4_load = (b4 % 4) * 2 * N_BANKS + 2 * (b4 / 4); - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { uint16_t *ptr1 = (uint16_t *)(pSrc16 + idx_row * (N_BANKS * 8)); uint16_t *ptr2 = (uint16_t *)(pDst16 + idx_row * (N_BANKS * 8)); // Load at address a @@ -410,7 +395,7 @@ void mempool_radix4_cfft_f16p_scheduler( idx2 = idx2 >> 1U; idx3 = idx3 >> 1U; } - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { uint32_t addr_src0 = (idx0 / 4) + (idx0 % 4) * N_BANKS; uint32_t addr_src1 = (idx1 / 4) + (idx1 % 4) * N_BANKS; uint32_t addr_src2 = (idx2 / 4) + (idx2 % 4) * N_BANKS; From f0a47f350f8cae44d2819b379c9aba0b9e35966c Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 25 Apr 2024 09:13:29 +0200 Subject: [PATCH 28/39] [software] Adapt to new folder structure --- Makefile | 2 +- software/apps/baremetal/Makefile | 4 +- .../apps/baremetal/cfft_radix4_f16/main.c | 117 +-- software/apps/baremetal/chest_f16/main.c | 7 +- software/apps/baremetal/chest_q16/main.c | 4 +- software/apps/baremetal/cholesky_f16/main.c | 1 - software/apps/baremetal/cholesky_q16/main.c | 5 +- software/apps/baremetal/cmatmul_f16/main.c | 7 +- .../apps/{ => baremetal}/cmatmul_q16/main.c | 6 +- software/apps/baremetal/mimo_mmse_f16/main.c | 29 +- software/apps/baremetal/mimo_mmse_f32/main.c | 18 +- software/apps/baremetal/mimo_mmse_q16/main.c | 10 +- software/apps/{ => baremetal}/ofdm/main.c | 53 +- software/apps/cfft_radix4_q16/main.c | 0 software/apps/chest_q16/main.c | 0 .../{runtime => }/data/data_cfft_f16.h.tpl | 0 .../{runtime => }/data/data_cfft_q16.h.tpl | 0 software/data/data_cfft_radix2_q16.h.tpl | 55 -- software/data/data_cfft_radix2_q16.py | 200 ----- software/data/data_cfft_radix4_f16.h.tpl | 45 - software/data/data_cfft_radix4_f16.py | 121 --- software/data/data_cfft_radix4_q16.h.tpl | 57 -- software/data/data_cfft_radix4_q16.py | 200 ----- software/data/data_chest_f16.py | 132 --- software/data/data_chest_q16.py | 160 ---- software/data/data_cholesky_f16.py | 108 --- software/data/data_cholesky_q16.py | 117 --- software/data/data_cholesky_q32.py | 106 --- software/data/data_cmatmul_f16.py | 117 --- .../{runtime => }/data/data_cmatmul_q16.h.tpl | 0 software/data/data_matmulf16.py | 111 --- software/data/data_matmulf32.py | 112 --- software/data/data_mimo_mmse_f16.py | 185 ---- software/data/data_mimo_mmse_f32.py | 154 ---- software/data/data_mimo_mmse_q16.py | 166 ---- software/data/data_ofdm.py | 137 --- software/{runtime => }/data/generate_cfft.py | 0 software/{runtime => }/data/generate_chest.py | 4 +- .../{runtime => }/data/generate_cholesky.py | 9 +- .../{runtime => }/data/generate_matmul.py | 0 .../{runtime => }/data/generate_mimo_mmse.py | 25 +- software/{runtime => }/data/generate_ofdm.py | 0 .../mempool_cfft_radix4_butterfly_f16.h | 199 ----- .../baremetal/mempool_cfft_radix4_f16p.h | 526 ----------- .../mempool_cfft_radix4_q16_bitreversal.h | 23 - .../kernels/baremetal/mempool_chest_f16.h | 382 ++++++++ .../kernels/baremetal/mempool_chest_f16p.h | 62 -- .../kernels/baremetal/mempool_chest_f16s.h | 194 ----- .../kernels/baremetal/mempool_chest_q16.h | 2 +- .../kernels/baremetal/mempool_cholesky_f16s.h | 1 + .../kernels/baremetal/mempool_cholesky_f32s.h | 4 + .../baremetal}/mempool_cholesky_q16s.h | 3 +- .../kernels/baremetal/mempool_cmatmul_f16.h | 814 ++++++++++-------- .../baremetal}/mempool_cmatmul_q16.h | 2 +- .../baremetal/mempool_linearsolver_f32s.h | 4 + .../baremetal}/mempool_linearsolver_q16s.h | 0 .../baremetal/mempool_linearsolver_q32p.h | 1 + .../baremetal/mempool_linearsolver_q32s.h | 1 + .../kernels/baremetal/mempool_matmul_f16.h | 1 + .../kernels/baremetal/mempool_matmul_f32.h | 1 + .../kernels/baremetal/mempool_matmul_i16p.h | 1 + .../kernels/baremetal/mempool_matmul_i8s.h | 1 + .../baremetal/mempool_mimo_mmse_f16s.h | 22 +- .../baremetal}/mempool_mimo_mmse_q16s.h | 3 - .../baremetal/mempool_radix2_cfft_q16.h | 3 +- .../mempool_radix4_cfft_butterfly_f16.h | 2 +- .../baremetal}/mempool_radix4_cfft_f16p.h | 173 ++-- .../baremetal/mempool_radix4_cfft_q16p.h | 9 +- .../baremetal/mempool_radix4_cfft_q16s.h | 19 + .../runtime/data/data_cfft_radix4_f16.h.tpl | 1 - .../runtime/data/data_cfft_radix4_q16.h.tpl | 1 - software/runtime/data/data_cmatmul_q16.py | 129 --- software/runtime/data/data_ofdm.py | 1 - software/runtime/kernel/mempool_checks.h | 0 software/runtime/kernel/mempool_chest_f16.h | 372 -------- software/runtime/kernel/mempool_chest_q16.h | 245 ------ software/runtime/kernel/mempool_chest_q16p.h | 1 - software/runtime/kernel/mempool_chest_q16s.h | 1 - .../runtime/kernel/mempool_radix2_cfft_q16s.h | 0 79 files changed, 1157 insertions(+), 4631 deletions(-) rename software/apps/{ => baremetal}/cmatmul_q16/main.c (93%) rename software/apps/{ => baremetal}/ofdm/main.c (74%) delete mode 100644 software/apps/cfft_radix4_q16/main.c delete mode 100644 software/apps/chest_q16/main.c rename software/{runtime => }/data/data_cfft_f16.h.tpl (100%) rename software/{runtime => }/data/data_cfft_q16.h.tpl (100%) delete mode 100644 software/data/data_cfft_radix2_q16.h.tpl delete mode 100644 software/data/data_cfft_radix2_q16.py delete mode 100644 software/data/data_cfft_radix4_f16.h.tpl delete mode 100644 software/data/data_cfft_radix4_f16.py delete mode 100644 software/data/data_cfft_radix4_q16.h.tpl delete mode 100755 software/data/data_cfft_radix4_q16.py delete mode 100644 software/data/data_chest_f16.py delete mode 100755 software/data/data_chest_q16.py delete mode 100644 software/data/data_cholesky_f16.py delete mode 100644 software/data/data_cholesky_q16.py delete mode 100644 software/data/data_cholesky_q32.py delete mode 100644 software/data/data_cmatmul_f16.py rename software/{runtime => }/data/data_cmatmul_q16.h.tpl (100%) delete mode 100644 software/data/data_matmulf16.py delete mode 100644 software/data/data_matmulf32.py delete mode 100644 software/data/data_mimo_mmse_f16.py delete mode 100644 software/data/data_mimo_mmse_f32.py delete mode 100644 software/data/data_mimo_mmse_q16.py delete mode 100644 software/data/data_ofdm.py rename software/{runtime => }/data/generate_cfft.py (100%) rename software/{runtime => }/data/generate_chest.py (98%) rename software/{runtime => }/data/generate_cholesky.py (95%) rename software/{runtime => }/data/generate_matmul.py (100%) rename software/{runtime => }/data/generate_mimo_mmse.py (93%) rename software/{runtime => }/data/generate_ofdm.py (100%) delete mode 100644 software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h delete mode 100644 software/kernels/baremetal/mempool_cfft_radix4_f16p.h delete mode 100644 software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h create mode 100644 software/kernels/baremetal/mempool_chest_f16.h delete mode 100644 software/kernels/baremetal/mempool_chest_f16p.h delete mode 100644 software/kernels/baremetal/mempool_chest_f16s.h rename software/{runtime/kernel => kernels/baremetal}/mempool_cholesky_q16s.h (97%) rename software/{runtime/kernel => kernels/baremetal}/mempool_cmatmul_q16.h (99%) rename software/{runtime/kernel => kernels/baremetal}/mempool_linearsolver_q16s.h (100%) rename software/{runtime/kernel => kernels/baremetal}/mempool_mimo_mmse_q16s.h (99%) rename software/{runtime/kernel => kernels/baremetal}/mempool_radix4_cfft_butterfly_f16.h (99%) rename software/{runtime/kernel => kernels/baremetal}/mempool_radix4_cfft_f16p.h (72%) delete mode 100644 software/runtime/data/data_cfft_radix4_f16.h.tpl delete mode 100644 software/runtime/data/data_cfft_radix4_q16.h.tpl delete mode 100644 software/runtime/data/data_cmatmul_q16.py delete mode 100644 software/runtime/data/data_ofdm.py delete mode 100644 software/runtime/kernel/mempool_checks.h delete mode 100644 software/runtime/kernel/mempool_chest_f16.h delete mode 100644 software/runtime/kernel/mempool_chest_q16.h delete mode 100644 software/runtime/kernel/mempool_chest_q16p.h delete mode 100644 software/runtime/kernel/mempool_chest_q16s.h delete mode 100644 software/runtime/kernel/mempool_radix2_cfft_q16s.h diff --git a/Makefile b/Makefile index 6359411ef..bcd4d7138 100644 --- a/Makefile +++ b/Makefile @@ -218,7 +218,7 @@ toolchain/riscv-opcodes/*: format: $(ROOT_DIR)/scripts/run_clang_format.py --clang-format-executable=$(LLVM_INSTALL_DIR)/bin/clang-format -i -r $(ROOT_DIR) - find ./software/runtime/data -name '*.py' -exec autopep8 --in-place --aggressive {} + + find ./software/data -name '*.py' -exec autopep8 --in-place --aggressive {} + clean: clean-riscv-tests rm -rf $(INSTALL_DIR) diff --git a/software/apps/baremetal/Makefile b/software/apps/baremetal/Makefile index cc9e2db7a..b4b2ee496 100644 --- a/software/apps/baremetal/Makefile +++ b/software/apps/baremetal/Makefile @@ -22,8 +22,8 @@ ALLPYS := $(patsubst %.py,%.h,$(wildcard $(DATA_DIR)/*.py)) BINARIES := $(addprefix $(BIN_DIR)/,$(APPS)) ALL := $(APPS) -ALL_GCC := $(filter-out matmul_f16 matmul_f32, $(ALL)) -ALL_LLVM := $(filter-out synth_i32 chest_q16 cfft_radix2_q16 cfft_radix4_q16, $(ALL)) +ALL_GCC := $(filter-out cfft_radix4_f16 chest_f16 cholesky_f16 cmatmul_f16 matmul_f16 matmul_f32 mimo_mmse_f32 mimo_mmse_f16 ofdm, $(ALL)) +ALL_LLVM := $(filter-out synth_i32 cfft_radix2_q16 cfft_radix4_q16 chest_q16 cholesky_q16 cholesky_q32 cmatmul_q16 mimo_mmse_q16, $(ALL)) # Make all applications all: $(ALL_GCC) diff --git a/software/apps/baremetal/cfft_radix4_f16/main.c b/software/apps/baremetal/cfft_radix4_f16/main.c index 2f4270c80..c459d062a 100644 --- a/software/apps/baremetal/cfft_radix4_f16/main.c +++ b/software/apps/baremetal/cfft_radix4_f16/main.c @@ -10,35 +10,53 @@ #include /* Mempool runtime libraries */ +#include "builtins_v2.h" #include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" /* CFFT data libraries */ -#include "data/data_cfft_radix4_f16.h" - -/* - - FOLDED: Parallel FFT with "memory-aware" load/store scheme - - SCHEDULED: Scheduling of multiple parallel FFTs with "memory-aware" - load/store scheme - - N_FFTs_COL: Independent FFTs scheduled on one row (default 1) - - N_FFTs_ROW: Independent FFTs scheduled on columns (default 1) - - FOLDED_TWIDDLES: Also the twiddles have "memory-aware" load/stores -*/ - -#define FOLDED +#include "data_cfft_radix4_f16.h" + +/* CHOOSE ONE */ +//#define SINGLE // Single core FFT. +//#define PARALLEL // Parallel FFT not "memory-aware". +//#define FOLDED // Parallel FFT with "memory-aware" load/store. +#define SCHEDULED // Folded FFTs arranged in rows and cols.''' + +// Bitreversal index from table. +#define BITREVERSETABLE +// Independent FFTs scheduled on one row (default 1). +#define N_FFTs_ROW 2 +// Independent FFTs scheduled on columns (default 1). +#define N_FFTs_COL 2 +#if (N_FFTs_COL > MAX_COL) +#error Parallelization not supporting N_FFTs_COL > [N_BANKS / (N_CSAMPLES / 4)] +#endif +// Also the twiddles have "memory-aware" load/stores. #define FOLDED_TWIDDLES -#define N_FFTs_ROW 1 -#define N_FFTs_COL 1 -#include "kernel/mempool_checks.h" -#include "kernel/mempool_radix4_cfft_butterfly_f16.h" -#include "kernel/mempool_radix4_cfft_f16p.h" -#include "kernel/mempool_radix4_cfft_q16_bitreversal.h" +#include "baremetal/mempool_cfft_q16_bitreversal.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_radix4_cfft_butterfly_f16.h" +#include "baremetal/mempool_radix4_cfft_f16p.h" + +#if (defined(SINGLE) || defined(PARALLEL)) +__fp16 l1_pSrc[2 * N_CSAMPLES] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_pDst[2 * N_CSAMPLES] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_twiddleCoef_f16_src[2 * 3 * N_CSAMPLES / 4] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_twiddleCoef_f16_dst[2 * 3 * N_CSAMPLES / 4] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +uint16_t l1_BitRevIndexTable[BITREVINDEXTABLE_LENGTH] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +#endif +#if (defined(SCHEDULED) || defined(FOLDED)) __fp16 l1_pSrc[N_FFTs_ROW * 8 * N_BANKS] __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); __fp16 l1_pDst[N_FFTs_ROW * 8 * N_BANKS] @@ -49,49 +67,44 @@ __fp16 l1_twiddleCoef_f16_dst[8 * N_BANKS] __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); uint16_t l1_BitRevIndexTable[BITREVINDEXTABLE_LENGTH] __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); +#endif int main() { - uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); __fp16 *pRes = (__fp16 *)0; + mempool_barrier_init(core_id); + + /* INITIALIZATION */ if (core_id == 0) { - // Each FFT is folded over 4 memory rows - // Each memory row is 2 * N_BANKS (real-imag) samples for (uint32_t j = 0; j < N_FFTs_ROW; j++) { - dma_memcpy_blocking(l1_pSrc + j * (8 * N_BANKS), l2_pSrc, - (N_CSAMPLES * N_FFTs_COL) * sizeof(int32_t)); + for (uint32_t i = 0; i < N_FFTs_COL; i++) { + dma_memcpy_blocking(l1_pSrc + i * 2 * N_CSAMPLES + j * (8 * N_BANKS), + l2_pSrc, N_CSAMPLES * sizeof(int32_t)); + } } - dma_memcpy_blocking(l1_pSrc, l2_pSrc, N_CSAMPLES * sizeof(int32_t)); dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, - BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); - dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, - 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); + BITREVINDEXTABLE_LENGTH * sizeof(int32_t)); } -// Initialize the Twiddles folded -#ifdef FOLDED_TWIDDLES + mempool_barrier(num_cores); for (uint32_t j = 0; j < N_FFTs_COL; j++) { - uint32_t N_WORDS_COL = (N_CSAMPLES / 4); + uint32_t N_WORDS_COL = N_CSAMPLES >> 2; for (uint32_t i = core_id; i < N_WORDS_COL; i += num_cores) { - *(v2h *)&l1_twiddleCoef_f16_src[2U * (i + j * N_WORDS_COL)] = - *(v2h *)&l2_twiddleCoef_f16[2U * i]; - *(v2h *)&l1_twiddleCoef_f16_src[2U * - (i + j * N_WORDS_COL + 1 * N_BANKS)] = - *(v2h *)&l2_twiddleCoef_f16[2U * (i * 2U)]; - *(v2h *)&l1_twiddleCoef_f16_src[2U * - (i + j * N_WORDS_COL + 2 * N_BANKS)] = - *(v2h *)&l2_twiddleCoef_f16[2U * (i * 3U)]; + *(v2h *)&l1_twiddleCoef_f16_src[2 * (i + j * N_WORDS_COL)] = + *(v2h *)&l2_twiddleCoef_f16[2 * i]; + *(v2h *)&l1_twiddleCoef_f16_src[2 * (i + j * N_WORDS_COL + 1 * N_BANKS)] = + *(v2h *)&l2_twiddleCoef_f16[2 * (i * 2U)]; + *(v2h *)&l1_twiddleCoef_f16_src[2 * (i + j * N_WORDS_COL + 2 * N_BANKS)] = + *(v2h *)&l2_twiddleCoef_f16[2 * (i * 3U)]; } } -#endif if (core_id == 0) { printf("01: END INITIALIZATION\n"); } mempool_barrier(num_cores); -#if (defined(FOLDED) && defined(FOLDED_TWIDDLES)) +#ifdef FOLDED if (core_id < (N_CSAMPLES / 16)) { mempool_start_benchmark(); mempool_radix4_cfft_f16p_folded(l1_pSrc, l1_pDst, N_CSAMPLES, @@ -105,26 +118,28 @@ int main() { #endif #ifdef SCHEDULED - uint32_t nPE = (N_CSAMPLES / 16); - if (core_id < N_FFTs_COL * nPE) { + uint32_t CORES_USED = (N_CSAMPLES / 4) / BANKING_FACTOR; + if (core_id < N_FFTs_COL * CORES_USED) { mempool_start_benchmark(); - uint32_t N_WORDS_COL = N_CSAMPLES / 4; - uint32_t col_id = core_id / nPE; mempool_radix4_cfft_f16p_scheduler( l1_pSrc, l1_pDst, N_CSAMPLES, N_FFTs_ROW, N_FFTs_COL, - l1_twiddleCoef_f16_src + 2 * col_id * N_WORDS_COL, - l1_twiddleCoef_f16_dst + 2 * col_id * N_WORDS_COL, l1_BitRevIndexTable, - BITREVINDEXTABLE_LENGTH, 1, nPE); - pRes = l1_pDst; - mempool_log_partial_barrier(2, core_id, N_FFTs_COL * nPE); + l1_twiddleCoef_f16_src, l1_twiddleCoef_f16_dst, l1_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH, 1, CORES_USED); + mempool_log_partial_barrier(2, core_id, N_FFTs_COL * CORES_USED); mempool_stop_benchmark(); } +#ifdef BITREVERSETABLE + pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; +#else + pRes = ((LOG2 / 2) % 2) == 0 ? l1_pDst : l1_pSrc; +#endif #endif mempool_barrier(num_cores); if (core_id == 0) { printf("02: END COMPUTATION\n"); } + mempool_check_f16(pRes, l2_pRes, 2 * N_CSAMPLES, 0.5, 0); mempool_barrier(num_cores); return 0; diff --git a/software/apps/baremetal/chest_f16/main.c b/software/apps/baremetal/chest_f16/main.c index 7abfa8add..e0feb90c7 100644 --- a/software/apps/baremetal/chest_f16/main.c +++ b/software/apps/baremetal/chest_f16/main.c @@ -8,17 +8,16 @@ #include #include +#include "builtins_v2.h" #include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "builtins_v2.h" -#include "data_chest_f16.h" #include "baremetal/mempool_checks.h" -#include "baremetal/mempool_chest_f16p.h" -#include "baremetal/mempool_chest_f16s.h" +#include "baremetal/mempool_chest_f16.h" +#include "data_chest_f16.h" //#define SINGLE #define PARALLEL diff --git a/software/apps/baremetal/chest_q16/main.c b/software/apps/baremetal/chest_q16/main.c index eecac204a..9288bb4d7 100644 --- a/software/apps/baremetal/chest_q16/main.c +++ b/software/apps/baremetal/chest_q16/main.c @@ -55,8 +55,8 @@ int main() { #endif #ifdef PARALLEL mempool_start_benchmark(); - mempool_chest_q16p_unrolled4_local(l1_HEST, l1_PilotRX, l1_PilotTX, N_RX, - N_TX, N_SAMPLES, core_id, num_cores); + mempool_chest_q16p_unrolled4(l1_HEST, l1_PilotRX, l1_PilotTX, N_RX, N_TX, + N_SAMPLES, core_id, num_cores); mempool_stop_benchmark(); mempool_barrier(num_cores); #endif diff --git a/software/apps/baremetal/cholesky_f16/main.c b/software/apps/baremetal/cholesky_f16/main.c index d27af143c..908ca99fa 100644 --- a/software/apps/baremetal/cholesky_f16/main.c +++ b/software/apps/baremetal/cholesky_f16/main.c @@ -11,7 +11,6 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "builtins_v2.h" #include "data_cholesky_f16.h" diff --git a/software/apps/baremetal/cholesky_q16/main.c b/software/apps/baremetal/cholesky_q16/main.c index 2f30ae94a..3c382c500 100644 --- a/software/apps/baremetal/cholesky_q16/main.c +++ b/software/apps/baremetal/cholesky_q16/main.c @@ -9,11 +9,10 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cholesky_q16s.h" #include "data_cholesky_q16.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_cholesky_q16s.h" #define SINGLE diff --git a/software/apps/baremetal/cmatmul_f16/main.c b/software/apps/baremetal/cmatmul_f16/main.c index 2ca261599..2bfbcb144 100644 --- a/software/apps/baremetal/cmatmul_f16/main.c +++ b/software/apps/baremetal/cmatmul_f16/main.c @@ -13,9 +13,11 @@ #include "synchronization.h" #include "data_cmatmul_f16.h" + #include "baremetal/mempool_checks.h" #include "baremetal/mempool_cmatmul_f16.h" -#define PARALLEL_2x2 +#define PARALLEL_2x4 +#define TEST __fp16 matrix_a[2 * dim_M * dim_N] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), @@ -26,7 +28,7 @@ __fp16 matrix_b[2 * dim_N * dim_P] __fp16 matrix_c[2 * dim_M * dim_P] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), section(".l1_prio"))); -__fp16 matrix_a_folded[2 * dim_M * (4 * NUM_CORES)] +__fp16 matrix_a_folded[2 * (BANKING_FACTOR * NUM_CORES)] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), section(".l1_prio"))); @@ -73,7 +75,6 @@ int main() { mempool_start_benchmark(); cmatmul_2x4_f16p(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, core_id, nPE); - mempool_log_partial_barrier(2, core_id, nPE); mempool_stop_benchmark(); } mempool_barrier(num_cores); diff --git a/software/apps/cmatmul_q16/main.c b/software/apps/baremetal/cmatmul_q16/main.c similarity index 93% rename from software/apps/cmatmul_q16/main.c rename to software/apps/baremetal/cmatmul_q16/main.c index b3e4e7503..f7a6bd31d 100644 --- a/software/apps/cmatmul_q16/main.c +++ b/software/apps/baremetal/cmatmul_q16/main.c @@ -12,9 +12,9 @@ #include "runtime.h" #include "synchronization.h" -#include "data/data_cmatmul_q16.h" -#include "kernel/mempool_checks.h" -#include "kernel/mempool_cmatmul_q16.h" +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cmatmul_q16.h" +#include "data_cmatmul_q16.h" #define PARALLEL diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index 1ff7f43f4..4389a0f3e 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -11,19 +11,26 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "builtins_v2.h" -#include "data_mimo_mmse_f16.h" #include "baremetal/mempool_checks.h" #include "baremetal/mempool_cholesky_f16s.h" #include "baremetal/mempool_linearsolver_f16s.h" #include "baremetal/mempool_mimo_mmse_f16s.h" -//#define DOUBLE_BUFFERING +#include "data_mimo_mmse_f16.h" + +// #define DOUBLE_BUFFERING +// #define N_ROUNDS (1) +// #define DMA_TRANSFER2 + #ifndef DOUBLE_BUFFERING -#define SINGLE -//#define PARALLEL +/**********************************************/ +/* TEST OF THE KERNELS WITH NO DATA MOVEMENTS */ +/**********************************************/ + +//#define SINGLE +#define PARALLEL //#define FOLDED __fp16 l1_H[2 * N_TX * N_RX * N_ITR] @@ -110,7 +117,7 @@ int main() { Ptrx += 2 * itr_bg * N_TX_bg; } } - mempool_log_barrier(2, core_id); + mempool_barrier(num_cores); mempool_stop_benchmark(); #endif @@ -139,7 +146,7 @@ int main() { mempool_Ltrisol_folded_f16s(PtrL, Ptry2, Ptry3, N_TX); mempool_Lttrisol_folded_f16s(PtrL, Ptry3, Ptrx, N_TX); } - mempool_log_barrier(2, core_id); + mempool_barrier(num_cores); mempool_stop_benchmark(); #endif @@ -244,8 +251,8 @@ int main() { __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); - mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); @@ -294,8 +301,8 @@ int main() { __fp16 *PtrSigma = cmpt_Sigma + itr * (2 * N_TX); __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); - mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); } mempool_log_barrier(2, core_id); diff --git a/software/apps/baremetal/mimo_mmse_f32/main.c b/software/apps/baremetal/mimo_mmse_f32/main.c index 8e5f5f80f..aa95b1919 100644 --- a/software/apps/baremetal/mimo_mmse_f32/main.c +++ b/software/apps/baremetal/mimo_mmse_f32/main.c @@ -10,13 +10,17 @@ #include "runtime.h" #include "synchronization.h" -#include "data_mimo_mmse_f32.h" #include "baremetal/mempool_checks.h" -#include "baremetal/mempool_cholesky_f32s.h" -#include "baremetal/mempool_linearsolver_f32s.h" #include "baremetal/mempool_mimo_mmse_f32p.h" #include "baremetal/mempool_mimo_mmse_f32s.h" +#if defined(__XDIVSQRT) +#include "baremetal/mempool_cholesky_f32s.h" +#include "baremetal/mempool_linearsolver_f32s.h" +#endif + +#include "data_mimo_mmse_f32.h" + //#define SINGLE //#define JACOBI #define PARALLEL @@ -52,7 +56,7 @@ int main() { } mempool_barrier(num_cores); -#ifdef SINGLE +#if defined(SINGLE) && defined(__XDIVSQRT) /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); @@ -80,7 +84,7 @@ int main() { mempool_barrier(num_cores); #endif -#ifdef PARALLEL +#if defined(PARALLEL) && defined(__XDIVSQRT) // Each iteration is assigned to a processor mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { @@ -104,7 +108,7 @@ int main() { mempool_stop_benchmark(); #endif -#ifdef PARALLEL_HERMITIAN +#if defined(PARALLEL_HERMITIAN) && defined(__XDIVSQRT) mempool_start_benchmark(); // Each iteration is assigned to a pool of processors // In a pool each PE gets a column of the H matrix, accumulating a row of the @@ -139,7 +143,7 @@ int main() { mempool_stop_benchmark(); #endif -#ifdef FOLDED +#if defined(FOLDED) && defined(__XDIVSQRT) mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { // Inputs diff --git a/software/apps/baremetal/mimo_mmse_q16/main.c b/software/apps/baremetal/mimo_mmse_q16/main.c index dff61adf8..c7dcda78d 100644 --- a/software/apps/baremetal/mimo_mmse_q16/main.c +++ b/software/apps/baremetal/mimo_mmse_q16/main.c @@ -9,12 +9,12 @@ #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" -#include "data/data_mimo_mmse_q16.h" -#include "kernel/mempool_cholesky_q16s.h" -#include "kernel/mempool_linearsolver_q16s.h" -#include "kernel/mempool_mimo_mmse_q16s.h" +#include "data_mimo_mmse_q16.h" + +#include "baremetal/mempool_cholesky_q16s.h" +#include "baremetal/mempool_linearsolver_q16s.h" +#include "baremetal/mempool_mimo_mmse_q16s.h" #define PARALLEL diff --git a/software/apps/ofdm/main.c b/software/apps/baremetal/ofdm/main.c similarity index 74% rename from software/apps/ofdm/main.c rename to software/apps/baremetal/ofdm/main.c index 8408c1035..59b1835d7 100644 --- a/software/apps/ofdm/main.c +++ b/software/apps/baremetal/ofdm/main.c @@ -10,14 +10,14 @@ #include /* Mempool runtime libraries */ +#include "builtins_v2.h" #include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "xpulp/builtins_v2.h" -#include "data/data_ofdm.h" +#include "data_ofdm.h" // CFFT Parameters #define SCHEDULED @@ -28,17 +28,20 @@ #define N_FFTs_ROW (N_RX / N_FFTs_COL) // CMATMUL Parameters #define NUM_COPIES (N_BANKS / (N_BEAMS * N_RX)) +#define dim_M (N_BEAMS) +#define dim_N (N_RX) +#define dim_P (N_SC) #define ROUNDS 3 -dump(prova, 1); +dump(checkpoint, 1); -#include "kernel/mempool_cmatmul_f16.h" -#include "kernel/mempool_radix4_cfft_butterfly_f16.h" -#include "kernel/mempool_radix4_cfft_f16p.h" -#include "kernel/mempool_radix4_cfft_q16_bitreversal.h" +#include "baremetal/mempool_cfft_q16_bitreversal.h" +#include "baremetal/mempool_cmatmul_f16.h" +#include "baremetal/mempool_radix4_cfft_butterfly_f16.h" +#include "baremetal/mempool_radix4_cfft_f16p.h" uint32_t arrival_index __attribute__((section(".l1_prio"))); -__fp16 l1_pBF_Coef_folded[2 * N_BEAMS * N_RX * NUM_COPIES] +__fp16 l1_pBF_Coef_folded[2 * BANKING_FACTOR * NUM_CORES] __attribute__((aligned(4 * N_BANKS), section(".l1_prio"))); __fp16 l1_pFFT_Src[N_FFTs_ROW * 8 * N_BANKS] @@ -69,9 +72,9 @@ int main() { (N_RX * N_SC) * sizeof(int32_t)); dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); - for (uint32_t i = 0; i < NUM_COPIES; i++) { - dma_memcpy_blocking(l1_pBF_Coef_folded + i * (N_BEAMS * N_RX), - l2_pBF_Coef, (N_BEAMS * N_RX) * sizeof(int32_t)); + for (uint32_t i = 0; i < BANKING_FACTOR * NUM_CORES; i += dim_M * dim_N) { + dma_memcpy_blocking(&l1_pBF_Coef_folded[2 * i], l2_pBF_Coef, + dim_M * dim_N * sizeof(int32_t)); } for (uint32_t i = 0; i < N_FFTs_COL; i++) { dma_memcpy_blocking(l1_twiddleCoef_f16_src + (2 * i * N_BANKS), @@ -80,31 +83,27 @@ int main() { } mempool_barrier(num_cores); mempool_stop_benchmark(); - dump_prova(0); - - // // Start of the iterations - // for (uint32_t round = 0; round < ROUNDS; round++) { + dump_checkpoint(0); /* FFT */ mempool_start_benchmark(); - uint32_t col_fftLen = N_SC / 4; - uint32_t col_id = core_id / (N_SC / 16); + uint32_t CORES_USED = (N_SC / 4) / BANKING_FACTOR; // Distribute FFTs over columns mempool_radix4_cfft_f16p_scheduler( - l1_pFFT_Src, l1_pFFT_Dst, N_SC, - l1_twiddleCoef_f16_src + 2 * col_id * col_fftLen, - l1_twiddleCoef_f16_dst + 2 * col_id * col_fftLen, l1_BitRevIndexTable, - BITREVINDEXTABLE_LENGTH, 1, (N_SC / 16)); + l1_pFFT_Src, l1_pFFT_Dst, N_SC, N_FFTs_ROW, N_FFTs_COL, + l1_twiddleCoef_f16_src, l1_twiddleCoef_f16_dst, l1_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH, 1, CORES_USED); mempool_log_barrier(2, core_id); mempool_stop_benchmark(); - dump_prova(1); + dump_checkpoint(1); /* BEAMFORMING */ mempool_start_benchmark(); - cmatmul_2x4_folded_f16p(l1_pBF_Coef_folded, l1_pBF_Coef_folded, l1_pFFT_Src, - l1_pFFT_Dst, N_BEAMS, N_RX, N_SC, core_id, num_cores); + cmatmul_4x4_f16p((int32_t *)l1_pBF_Coef_folded, (int32_t *)l1_pFFT_Src, + (int32_t *)l1_pFFT_Dst, dim_M, dim_N, dim_P, core_id, + num_cores); mempool_stop_benchmark(); - dump_prova(2); + dump_checkpoint(2); mempool_start_benchmark(); // Transfer and synchronization @@ -124,9 +123,7 @@ int main() { } mempool_wfi(); mempool_stop_benchmark(); - dump_prova(3); - - // } + dump_checkpoint(3); return 0; } diff --git a/software/apps/cfft_radix4_q16/main.c b/software/apps/cfft_radix4_q16/main.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/software/apps/chest_q16/main.c b/software/apps/chest_q16/main.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/software/runtime/data/data_cfft_f16.h.tpl b/software/data/data_cfft_f16.h.tpl similarity index 100% rename from software/runtime/data/data_cfft_f16.h.tpl rename to software/data/data_cfft_f16.h.tpl diff --git a/software/runtime/data/data_cfft_q16.h.tpl b/software/data/data_cfft_q16.h.tpl similarity index 100% rename from software/runtime/data/data_cfft_q16.h.tpl rename to software/data/data_cfft_q16.h.tpl diff --git a/software/data/data_cfft_radix2_q16.h.tpl b/software/data/data_cfft_radix2_q16.h.tpl deleted file mode 100644 index 6044e424d..000000000 --- a/software/data/data_cfft_radix2_q16.h.tpl +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Automatically generated by: -// data/data_cfft_radix2_q16.py - -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '(int16_t) 0X{:04X}, '.format(a&0xffff) - i += 1 - if i % 16 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -<% def array_to_str(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}, '.format(a) - i += 1 - if i % 16 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define LOG2 (${Log2Len}) -#define N_CSAMPLES (${Len}) -#define N_TWIDDLES (3 * N_CSAMPLES / 4) -#define N_BANKS (NUM_CORES * BANKING_FACTOR) -#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) - -// Tolerance for correctness check -#define TOLERANCE (${tolerance}) - -% for m, m_str in zip([vector_inp, vector_res], ['l2_pSrc', 'l2_pRes']): - -// Data arrays for matrix ${m_str} -int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) ${m_str}[${2*Len}] = ${array_to_cstr(m)}; - -% endfor \ - -// Twiddles -int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_twiddleCoef_q16[${int(6*Len/4)}] = ${array_to_cstr(vector_twi)}; - -// Bitreversal -uint16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(vector_bitrev)}; diff --git a/software/data/data_cfft_radix2_q16.py b/software/data/data_cfft_radix2_q16.py deleted file mode 100644 index e1615e53e..000000000 --- a/software/data/data_cfft_radix2_q16.py +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the cfft kernel. -# Author: Marco Bertuletti - -import numpy as np -import math as M -import argparse -import pathlib -from mako.template import Template -from sympy.combinatorics import Permutation - - -################## -# compute_result # -################## - - -def compute_result(inp, len): - """ - Funciton to generate the expected result of the testcase. - - Arguments - --------- - input: numpy array of inputs - env: Length of the input transform. - """ - - # Q16: - # len=16: Q1.15 -> Q5.11 - # len=32: Q1.15 -> Q6.10 - # len=64: Q1.15 -> Q7.9 - # len=128: Q1.15 -> Q8.8 - # len=256: Q1.15 -> Q9.7 - # len=512: Q1.15 -> Q10.6 - # len=1024: Q1.15 -> Q11.5 - # len=2048: Q1.15 -> Q12.4 - # len=4096: Q1.15 -> Q13.3 - bit_shift_dict_q16 = { - 16: 11, - 32: 10, - 64: 9, - 128: 8, - 256: 7, - 512: 6, - 1024: 5, - 2048: 4, - 4096: 3} - my_type = np.int16 - my_fixpoint = 15 - bit_shift_dict = bit_shift_dict_q16 - a = inp.astype(my_type) - result = np.zeros(a.size, dtype=my_type) - complex_a = np.zeros(int(a.size / 2), dtype=np.csingle) - complex_result = np.zeros(a.size >> 1, dtype=np.csingle) - for i in range(a.size >> 1): - complex_a[i] = a[2 * i].astype(np.csingle) / (2**(my_fixpoint)) + ( - a[2 * i + 1].astype(np.csingle) / (2**(my_fixpoint))) * 1j - complex_result = np.fft.fft(complex_a) - for i in range(int(a.size / 2)): - result[2 * i] = (np.real(complex_result[i]) * - (2**(bit_shift_dict[int(a.size / 2)])) - ).astype(my_type) - result[2 * i + 1] = (np.imag(complex_result[i]) * - (2**(bit_shift_dict[int(a.size / 2)])) - ).astype(my_type) - - return result - - -def compute_twiddles(length): - PI = 3.14159265358979 - N = length - twiddleCoefq15 = np.zeros((int)(2 * 3 * N / 4), np.int16) - for i in range(0, (int)(3 * N / 4)): - twiddleCoefq15_cos = M.cos(i * 2 * PI / N) - twiddleCoefq15_sin = M.sin(i * 2 * PI / N) - twiddleCoefq15[2 * i] = int(round(twiddleCoefq15_cos * (2**15 - 1))) - twiddleCoefq15[2 * i + - 1] = int(round(twiddleCoefq15_sin * (2**15 - 1))) - return twiddleCoefq15 - - -def compute_bitreversal(N, R): - - # Decompose - logR2 = [] - idx = N - while (idx >= R): - logR2.append(int(M.log2(R))) - idx = idx // R - if (idx > 1): - logR2.append(int(M.log2(idx))) - - # Bitreversal - indexes = [] - for x in range(N): - result = 0 - for bits in logR2: - mask = (0xffffffff >> (32 - bits)) - result = (result << bits) | (x & mask) - x = x >> bits - indexes.append(result) - - # Create transpositions table - tps = [] - for c in Permutation.from_sequence(indexes).cyclic_form: - for i in range(len(c) - 1): - tps.append([c[i] * 8, c[-1] * 8]) - - return tps - - -def gen_data_header_file( - outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), - **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cfft_radix2_q16.h.tpl", - help='Path to mako template') - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-d", - "--dimension", - type=int, - required=False, - default=64, - help='Input dimension' - ) - - args = parser.parse_args() - - # Create sparse matrix - Len = args.dimension - Input = np.random.randint(-2**(15), 2**(15) - 1, 2 * Len, dtype=np.int16) - Result = compute_result(Input, Len) - Twiddles = compute_twiddles(Len) - Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(Len, 2))) - - tolerance = { - 16: 16, - 32: 20, - 64: 24, - 128: 28, - 256: 32, - 512: 48, - 1024: 64, - 2048: 96, - 4096: 128} - - kwargs = {'name': 'data_cfft_radix2_q16', - 'vector_inp': Input, - 'vector_res': Result, - 'vector_twi': Twiddles, - 'vector_bitrev': Bitreversal, - 'Len': Len, - 'Log2Len': int(np.log2(Len)), - 'BitrevLen': int(2 * len(Bitreversal)), - 'tolerance': tolerance[int(Len)]} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_cfft_radix4_f16.h.tpl b/software/data/data_cfft_radix4_f16.h.tpl deleted file mode 100644 index 883049a44..000000000 --- a/software/data/data_cfft_radix4_f16.h.tpl +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '(__fp16){:0.4}f, '.format(a) - i += 1 - if i % 8 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -<% def array_to_str(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}, '.format(a) - i += 1 - if i % 16 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define LOG2 (${Log2Len}) -#define N_CSAMPLES (${Len}) -#define N_RSAMPLES (2 * N_CSAMPLES) -#define N_TWIDDLES (3 * N_CSAMPLES / 4) -#define N_BANKS (NUM_CORES * BANKING_FACTOR) -#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) - -__fp16 l2_pSrc[${2 * Len}] = ${array_to_cstr(src)}; - -__fp16 l2_pRes[${2 * Len}] = ${array_to_cstr(dst)}; - -__fp16 l2_twiddleCoef_f16[${2 * Len}] = ${array_to_cstr(twi)}; - -// Bitreversal -uint16_t l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(bitrev)}; diff --git a/software/data/data_cfft_radix4_f16.py b/software/data/data_cfft_radix4_f16.py deleted file mode 100644 index ca90265c8..000000000 --- a/software/data/data_cfft_radix4_f16.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 FFT. -# Author: Marco Bertuletti - -import numpy as np -import math as M -import argparse -import pathlib -from mako.template import Template -from sympy.combinatorics import Permutation - - -def compute_bitreversal(N, R): - # Decompose - logR2 = [] - idx = N - while (idx >= R): - logR2.append(int(M.log2(R))) - idx = idx // R - if (idx > 1): - logR2.append(int(M.log2(idx))) - # Bitreversal - indexes = [] - for x in range(N): - result = 0 - for bits in logR2: - mask = (0xffffffff >> (32 - bits)) - result = (result << bits) | (x & mask) - x = x >> bits - indexes.append(result) - - # Create transpositions table - tps = [] - for c in Permutation.from_sequence(indexes).cyclic_form: - for i in range(len(c) - 1): - tps.append([c[i] * 8, c[-1] * 8]) - return tps - - -def gen_data_header_file( - outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), - **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cfft_radix4_f16.h.tpl", - help='Path to mako template') - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-d", - "--dimension", - type=int, - required=False, - default=4096, - help='FFT dimension' - ) - - args = parser.parse_args() - Len = args.dimension - - src = np.random.rand(Len).astype(np.float16) - src = src + 1.j * np.random.rand(Len).astype(np.float16) - dst = np.fft.fft(src) - src = np.column_stack((src.imag, src.real)).astype(np.float16).flatten() - dst = np.column_stack((dst.imag, dst.real)).astype(np.float16).flatten() - Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(Len, 2))) - - twi = np.zeros(int(2 * 3 * Len / 4), np.float16) - for i in range(0, int(3 * Len / 4)): - twi[2 * i] = np.sin(i * 2 * np.pi / Len).astype(np.float16) - twi[2 * i + 1] = np.cos(i * 2 * np.pi / Len).astype(np.float16) - - kwargs = {'name': 'data_cfft_radix4_f16', - 'src': src, - 'dst': dst, - 'twi': twi, - 'bitrev': Bitreversal, - 'Len': Len, - 'Log2Len': int(np.log2(Len)), - 'BitrevLen': len(Bitreversal)} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_cfft_radix4_q16.h.tpl b/software/data/data_cfft_radix4_q16.h.tpl deleted file mode 100644 index 3af1b764d..000000000 --- a/software/data/data_cfft_radix4_q16.h.tpl +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Automatically generated by: -// data/data_cfft_radix4_q16.py - -\ -<% def array_to_cstr(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '(int16_t) 0X{:04X}, '.format(a&0xffff) - i += 1 - if i % 16 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -<% def array_to_str(array): - out = '{' - i = 0 - out += '\n' - for a in array: - out += '{}, '.format(a) - i += 1 - if i % 16 == 0: - out += '\n' - out = out[:-2] + '}' - return out -%> \ - -#define LOG2 (${Log2Len}) -#define N_CSAMPLES (${Len}) -#define N_TWIDDLES (3 * N_CSAMPLES / 4) -#define N_BANKS (NUM_CORES * BANKING_FACTOR) -#define BITREVINDEXTABLE_LENGTH (${BitrevLen}) - -// Maximum number of independent FFT columns allowed -#define MAX_COL (N_BANKS / (N_CSAMPLES / 4)) -// Tolerance for correctness check -#define TOLERANCE (${tolerance}) - -% for m, m_str in zip([vector_inp, vector_res], ['l2_pSrc', 'l2_pRes']): - -// Data arrays for matrix ${m_str} -int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) ${m_str}[${2*Len}] = ${array_to_cstr(m)}; - -% endfor \ - -// Twiddles -int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_twiddleCoef_q16[${int(6*Len/4)}] = ${array_to_cstr(vector_twi)}; - -// Bitreversal -uint16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_BitRevIndexTable[${BitrevLen}] = ${array_to_str(vector_bitrev)}; diff --git a/software/data/data_cfft_radix4_q16.py b/software/data/data_cfft_radix4_q16.py deleted file mode 100755 index b394a2884..000000000 --- a/software/data/data_cfft_radix4_q16.py +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the cfft kernel. -# Author: Marco Bertuletti - -import numpy as np -import math as M -import argparse -import pathlib -from mako.template import Template -from sympy.combinatorics import Permutation - - -################## -# compute_result # -################## - - -def compute_result(inp, len): - """ - Funciton to generate the expected result of the testcase. - - Arguments - --------- - input: numpy array of inputs - env: Length of the input transform. - """ - - # Q16: - # len=16: Q1.15 -> Q5.11 - # len=32: Q1.15 -> Q6.10 - # len=64: Q1.15 -> Q7.9 - # len=128: Q1.15 -> Q8.8 - # len=256: Q1.15 -> Q9.7 - # len=512: Q1.15 -> Q10.6 - # len=1024: Q1.15 -> Q11.5 - # len=2048: Q1.15 -> Q12.4 - # len=4096: Q1.15 -> Q13.3 - bit_shift_dict_q16 = { - 16: 11, - 32: 10, - 64: 9, - 128: 8, - 256: 7, - 512: 6, - 1024: 5, - 2048: 4, - 4096: 3} - my_type = np.int16 - my_fixpoint = 15 - bit_shift_dict = bit_shift_dict_q16 - a = inp.astype(my_type) - result = np.zeros(a.size, dtype=my_type) - complex_a = np.zeros(int(a.size / 2), dtype=np.csingle) - complex_result = np.zeros(a.size >> 1, dtype=np.csingle) - for i in range(a.size >> 1): - complex_a[i] = a[2 * i].astype(np.csingle) / (2**(my_fixpoint)) + ( - a[2 * i + 1].astype(np.csingle) / (2**(my_fixpoint))) * 1j - complex_result = np.fft.fft(complex_a) - for i in range(int(a.size / 2)): - result[2 * i] = (np.real(complex_result[i]) * - (2**(bit_shift_dict[int(a.size / 2)])) - ).astype(my_type) - result[2 * i + 1] = (np.imag(complex_result[i]) * - (2**(bit_shift_dict[int(a.size / 2)])) - ).astype(my_type) - - return result - - -def compute_twiddles(length): - PI = 3.14159265358979 - N = length - twiddleCoefq15 = np.zeros((int)(2 * 3 * N / 4), np.int16) - for i in range(0, (int)(3 * N / 4)): - twiddleCoefq15_cos = M.cos(i * 2 * PI / N) - twiddleCoefq15_sin = M.sin(i * 2 * PI / N) - twiddleCoefq15[2 * i] = int(round(twiddleCoefq15_cos * (2**15 - 1))) - twiddleCoefq15[2 * i + - 1] = int(round(twiddleCoefq15_sin * (2**15 - 1))) - return twiddleCoefq15 - - -def compute_bitreversal(N, R): - - # Decompose - logR2 = [] - idx = N - while (idx >= R): - logR2.append(int(M.log2(R))) - idx = idx // R - if (idx > 1): - logR2.append(int(M.log2(idx))) - - # Bitreversal - indexes = [] - for x in range(N): - result = 0 - for bits in logR2: - mask = (0xffffffff >> (32 - bits)) - result = (result << bits) | (x & mask) - x = x >> bits - indexes.append(result) - - # Create transpositions table - tps = [] - for c in Permutation.from_sequence(indexes).cyclic_form: - for i in range(len(c) - 1): - tps.append([c[i] * 8, c[-1] * 8]) - - return tps - - -def gen_data_header_file( - outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), - **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cfft_radix4_q16.h.tpl", - help='Path to mako template') - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-d", - "--dimension", - type=int, - required=False, - default=64, - help='Input dimension' - ) - - args = parser.parse_args() - - # Create sparse matrix - Len = args.dimension - Input = np.random.randint(-2**(15), 2**(15) - 1, 2 * Len, dtype=np.int16) - Result = compute_result(Input, Len) - Twiddles = compute_twiddles(Len) - Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(Len, 2))) - - tolerance = { - 16: 16, - 32: 20, - 64: 24, - 128: 28, - 256: 32, - 512: 48, - 1024: 64, - 2048: 96, - 4096: 128} - - kwargs = {'name': 'data_cfft_radix4_q16', - 'vector_inp': Input, - 'vector_res': Result, - 'vector_twi': Twiddles, - 'vector_bitrev': Bitreversal, - 'Len': Len, - 'Log2Len': int(np.log2(Len)), - 'BitrevLen': len(Bitreversal), - 'tolerance': tolerance[int(Len)]} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_chest_f16.py b/software/data/data_chest_f16.py deleted file mode 100644 index 29c19e4a3..000000000 --- a/software/data/data_chest_f16.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the Channel estimation. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib - -from mako.template import Template - -################## -# write_result # -################## - - -def gen_data_header_file( - outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), - **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_chest_f16.h.tpl", - help='Path to mako template') - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-b", - "--num_beams", - type=int, - required=False, - default=4, - help='Number beams' - ) - parser.add_argument( - "-l", - "--num_layers", - type=int, - required=False, - default=4, - help='Number layers' - ) - parser.add_argument( - "-s", - "--num_samples", - type=int, - required=False, - default=32, - help='Number samples' - ) - - args = parser.parse_args() - nb_rx = args.num_beams - nb_tx = args.num_layers - nb_samples = args.num_samples - - H = np.random.randn(nb_rx, nb_tx) + 1j * np.random.randn(nb_rx, nb_tx) - - vector_pilot_tx = [] - vector_pilot_rx = [] - vector_Hest = [] - for k in range(nb_samples): - - # Compute data - pilot_tx = 1 * np.exp(1j * np.random.randn(nb_tx)) - pilot_rx = np.dot(H, pilot_tx) - Hest = pilot_rx[:, np.newaxis] / pilot_tx[np.newaxis, :] - - # Interleaved real and imaginary parts - pilot_tx = np.column_stack( - (pilot_tx.real, pilot_tx.imag)).astype(np.float16).flatten() - pilot_rx = np.column_stack( - (pilot_rx.real, pilot_rx.imag)).astype(np.float16).flatten() - Hest = Hest.flatten() - Hest = np.column_stack((Hest.real, Hest.imag) - ).astype(np.float16).flatten() - - # Output vectors - vector_pilot_tx.append(pilot_tx) - vector_pilot_rx.append(pilot_rx) - vector_Hest.append(Hest) - - vector_pilot_rx = np.concatenate(vector_pilot_rx, axis=0) - vector_pilot_tx = np.concatenate(vector_pilot_tx, axis=0) - vector_Hest = np.concatenate(vector_Hest, axis=0) - - kwargs = {'name': 'data_chest_f16', - 'pilot_rx': vector_pilot_rx, - 'pilot_tx': vector_pilot_tx, - 'Hest': vector_Hest, - 'nb_tx': nb_tx, - 'nb_rx': nb_rx, - 'nb_samples': nb_samples} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_chest_q16.py b/software/data/data_chest_q16.py deleted file mode 100755 index e1fca8649..000000000 --- a/software/data/data_chest_q16.py +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the Channel estimation. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib - -from mako.template import Template - -################## -# write_result # -################## - - -def gen_data_header_file( - outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), - **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - -###################### -# Fixpoint Functions # -###################### - - -def q_sat(x): - if x > 2**15 - 1: - return x - 2**16 - elif x < -2**15: - return x + 2**16 - else: - return x - - -def compute_chest_q16(in_rx, in_tx, p): - n_rx = in_rx.size - n_tx = in_tx.size - result = np.zeros(2 * (n_tx * n_rx), dtype=np.int16) - for i in range(n_rx): - a_r = in_rx[i].real - a_i = in_rx[i].imag - for j in range(n_tx): - b_r = in_tx[j].real - b_i = in_tx[j].imag - -# # Compute data division -# den = (2**16) // (b_r * b_r + b_i * b_i) -# num_r = (a_r * b_r) + (a_i * b_i) -# num_i = (a_i * b_r) - (a_r * b_i) -# result[2 * (i * n_tx + j)] = q_sat((num_r * den) // 2**p) -# result[2 * (i * n_tx + j) + 1] = q_sat((num_i * den) // 2**p) - - # Compute data multiplication - num_r = (a_r * b_r) - (a_i * b_i) - num_i = (a_i * b_r) + (a_r * b_i) - result[2 * (i * n_tx + j)] = q_sat(num_r // 2**p) - result[2 * (i * n_tx + j) + 1] = q_sat(num_i // 2**p) - return result - - -def generate_chest_q16(nb_tx, nb_rx, nb_samples): - FIXED_POINT = 8 - MAX = 2**7 - - qvector_pilot_tx = [] - qvector_pilot_rx = [] - qvector_Hest = [] - for k in range(nb_samples): - # Create pilots - pilot_rx = np.random.randint(-MAX, MAX - 1, size=nb_rx) + 1j * \ - np.random.randint(-MAX, MAX - 1, size=nb_rx) - pilot_tx = np.random.randint(-MAX, MAX - 1, size=nb_tx) + 1j * \ - np.random.randint(-MAX, MAX - 1, size=nb_tx) - # Compute Hest - Hest = compute_chest_q16(pilot_rx, pilot_tx, FIXED_POINT) - - pilot_tx = np.column_stack( - (pilot_tx.imag, pilot_tx.real)).astype( - np.int16).flatten() - pilot_rx = np.column_stack( - (pilot_rx.imag, pilot_rx.real)).astype( - np.int16).flatten() - qvector_pilot_tx.append(pilot_tx) - qvector_pilot_rx.append(pilot_rx) - qvector_Hest.append(Hest) - - qvector_pilot_tx = np.reshape(qvector_pilot_tx, [2 * nb_tx * nb_samples]) - qvector_pilot_rx = np.reshape(qvector_pilot_rx, [2 * nb_rx * nb_samples]) - qvector_Hest = np.reshape(qvector_Hest, [2 * nb_tx * nb_rx * nb_samples]) - return qvector_pilot_tx, qvector_pilot_rx, qvector_Hest - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-b", - "--num_rx", - type=int, - required=False, - default=32, - help='Number beams' - ) - parser.add_argument( - "-l", - "--num_tx", - type=int, - required=False, - default=4, - help='Number layers' - ) - parser.add_argument( - "-s", - "--num_samples", - type=int, - required=False, - default=32, - help='Number samples' - ) - - args = parser.parse_args() - nb_tx = args.num_tx - nb_rx = args.num_rx - nb_samples = args.num_samples - - pilot_tx, pilot_rx, Hest = generate_chest_q16(nb_tx, nb_rx, nb_samples) - tpl = pathlib.Path(__file__).parent.absolute() / "data_chest_q16.h.tpl" - kwargs = {'name': 'data_chest_q16', - 'pilot_tx': pilot_tx, - 'pilot_rx': pilot_rx, - 'Hest': Hest, - 'nb_tx': nb_tx, - 'nb_rx': nb_rx, - 'nb_samples': nb_samples} - gen_data_header_file(args.outdir, tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_cholesky_f16.py b/software/data/data_cholesky_f16.py deleted file mode 100644 index 32dfa8df9..000000000 --- a/software/data/data_cholesky_f16.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 cholesky. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cholesky_f16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--dimension", - type=int, - required=False, - default=4, - help='Matrix dimension' - ) - parser.add_argument( - "-s", - "--num_samples", - type=int, - required=False, - default=256, - help='Number samples' - ) - - args = parser.parse_args() - n_matrix = args.dimension - n_samples = args.num_samples - - vector_G = [] - vector_L = [] - for k in range(n_samples): - # Create hermitian matrix - H = np.random.rand(n_matrix, n_matrix) + 1.j * \ - np.random.rand(n_matrix, n_matrix) - # Matrix to be inverted - # H_H = np.asmatrix(H).H - G = np.matmul(H, np.asmatrix(H).H) - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Reshape - G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C') - L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C') - G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() - L = np.column_stack((L.real, L.imag)).astype(np.float16).flatten() - # Output vectors - vector_G.append(G) - vector_L.append(L) - - vector_G = np.concatenate(vector_G, axis=0) - vector_L = np.concatenate(vector_L, axis=0) - - kwargs = {'name': 'data_cholesky_f16', 'G': vector_G, - 'L': vector_L, 'n_matrix': n_matrix, 'n_samples': n_samples} - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_cholesky_q16.py b/software/data/data_cholesky_q16.py deleted file mode 100644 index d342f3fb9..000000000 --- a/software/data/data_cholesky_q16.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 cholesky. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template - - -################## -# compute_result # -################## - - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cholesky_q16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--dimension", - type=int, - required=False, - default=4, - help='Matrix dimension' - ) - parser.add_argument( - "-s", - "--num_samples", - type=int, - required=False, - default=256, - help='Number samples' - ) - - args = parser.parse_args() - n_matrix = args.dimension - n_samples = args.num_samples - - vector_G = [] - vector_L = [] - for k in range(n_samples): - # Create hermitian matrix - H = np.random.randint(-2**(15), 2**(15) - 1, - n_matrix * n_matrix, dtype=np.int16) \ - + 1.j * np.random.randint(-2**(15), 2**(15) - 1, - n_matrix * n_matrix, dtype=np.int16) - H = H.reshape(n_matrix, n_matrix) - # Matrix to be inverted - H_h = (np.asmatrix(H).H) - # H_H = np.asmatrix(H).H - G = H_h * H - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Reshape - G = np.reshape(np.asarray(G), (n_matrix * n_matrix), order='C') - L = np.reshape(np.asarray(L), (n_matrix * n_matrix), order='C') - G = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() - L = np.column_stack((L.real, L.imag)).astype(np.int16).flatten() - # Output vectors - vector_G.append(G) - vector_L.append(L) - - vector_G = np.concatenate(vector_G, axis=0) - vector_L = np.concatenate(vector_L, axis=0) - - kwargs = {'name': 'data_cholesky_q16', - 'G': vector_G, - 'L': vector_L, - 'n_matrix': n_matrix, - 'n_samples': n_samples} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_cholesky_q32.py b/software/data/data_cholesky_q32.py deleted file mode 100644 index acadcc135..000000000 --- a/software/data/data_cholesky_q32.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 cholesky. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from scipy.linalg import solve_triangular -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cholesky_q32.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--dimension", - type=int, - required=False, - default=4, - help='Matrix dimension' - ) - - args = parser.parse_args() - n_matrix = args.dimension - - # Create hermitian matrix - L = np.random.randint(-2**(15), 2**(15) - 1, - size=(n_matrix, n_matrix), dtype=np.int32) - L = np.tril(L).astype(np.int32) - G = np.dot(np.asmatrix(L), np.asmatrix(L).transpose()) - - y = np.random.randint(-2**(15), 2**(15) - 1, n_matrix, dtype=np.int32) - - # Linear system solution - y = solve_triangular(L, y, lower=True) - # x = solve_triangular(np.asmatrix(L).T, y) - - # Reshape - G = np.reshape( - np.asarray(G), - (n_matrix * n_matrix), - order='C').astype( - np.int32) - L = np.reshape( - np.asarray(L), - (n_matrix * n_matrix), - order='C').astype( - np.int32) - y = np.reshape(np.asarray(y), (n_matrix), order='C').astype(np.int32) - - kwargs = {'name': 'data_cholesky_q32', - 'G': G, - 'L': L, - 'y': y, - 'n_matrix': n_matrix} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_cmatmul_f16.py b/software/data/data_cmatmul_f16.py deleted file mode 100644 index b3010977b..000000000 --- a/software/data/data_cmatmul_f16.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 matmul. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cmatmul_f16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-m", - "--dim_m", - type=int, - required=False, - default=16, - help='First dimension.' - ) - parser.add_argument( - "-n", - "--dim_n", - type=int, - required=False, - default=16, - help='Second dimension.' - ) - parser.add_argument( - "-p", - "--dim_p", - type=int, - required=False, - default=16, - help='Third dimension.' - ) - - args = parser.parse_args() - - matrix_M = args.dim_m - matrix_N = args.dim_n - matrix_P = args.dim_p - - # Create sparse matrix - A = np.random.rand(matrix_M, matrix_N) + 1j * \ - np.random.rand(matrix_M, matrix_N) - B = np.random.rand(matrix_N, matrix_P) + 1j * \ - np.random.rand(matrix_N, matrix_P) - C = np.matmul(A, B) - - A = np.reshape(A, (matrix_M * matrix_N), order='C') - B = np.reshape(B, (matrix_N * matrix_P), order='C') - C = np.reshape(C, (matrix_M * matrix_P), order='C') - - A = np.column_stack((A.imag, A.real)).astype(np.float16).flatten() - B = np.column_stack((B.imag, B.real)).astype(np.float16).flatten() - C = np.column_stack((C.imag, C.real)).astype(np.float16).flatten() - - kwargs = { - 'name': 'data_cmatmul_f16', - 'A': A, - 'B': B, - 'C': C, - 'matrix_M': matrix_M, - 'matrix_N': matrix_N, - 'matrix_P': matrix_P} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/runtime/data/data_cmatmul_q16.h.tpl b/software/data/data_cmatmul_q16.h.tpl similarity index 100% rename from software/runtime/data/data_cmatmul_q16.h.tpl rename to software/data/data_cmatmul_q16.h.tpl diff --git a/software/data/data_matmulf16.py b/software/data/data_matmulf16.py deleted file mode 100644 index 2c362208b..000000000 --- a/software/data/data_matmulf16.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 matmul. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_matmul_f16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-m", - "--dim_m", - type=int, - required=False, - default=16, - help='First dimension.' - ) - parser.add_argument( - "-n", - "--dim_n", - type=int, - required=False, - default=16, - help='Second dimension.' - ) - parser.add_argument( - "-p", - "--dim_p", - type=int, - required=False, - default=16, - help='Third dimension.' - ) - - args = parser.parse_args() - - matrix_M = args.dim_m - matrix_N = args.dim_n - matrix_P = args.dim_p - - # Create matrix - A = (np.random.rand(matrix_M, matrix_N) - 0.5).astype(np.float16) - B = (np.random.rand(matrix_N, matrix_P) - 0.5).astype(np.float16) - C = np.matmul(A, B) - - A = np.reshape(A, (matrix_M * matrix_N), order='C').astype(np.float16) - B = np.reshape(B, (matrix_N * matrix_P), order='C').astype(np.float16) - C = np.reshape(C, (matrix_M * matrix_P), order='C').astype(np.float16) - - kwargs = { - 'name': 'data_matmul_f16', - 'A': A, - 'B': B, - 'C': C, - 'matrix_M': matrix_M, - 'matrix_N': matrix_N, - 'matrix_P': matrix_P} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_matmulf32.py b/software/data/data_matmulf32.py deleted file mode 100644 index 15086d0fc..000000000 --- a/software/data/data_matmulf32.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp32 matmul. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_matmul_f32.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - - parser.add_argument( - "-m", - "--dim_m", - type=int, - required=False, - default=16, - help='First dimension.' - ) - parser.add_argument( - "-n", - "--dim_n", - type=int, - required=False, - default=16, - help='Second dimension.' - ) - parser.add_argument( - "-p", - "--dim_p", - type=int, - required=False, - default=16, - help='Third dimension.' - ) - - args = parser.parse_args() - - matrix_M = args.dim_m - matrix_N = args.dim_n - matrix_P = args.dim_p - - # Create matrix - A = np.random.rand(matrix_M, matrix_N) - B = np.random.rand(matrix_N, matrix_P) - C = np.matmul(A, B) - - A = np.reshape(A, (matrix_M * matrix_N), order='C').astype(np.float32) - B = np.reshape(B, (matrix_N * matrix_P), order='C').astype(np.float32) - C = np.reshape(C, (matrix_M * matrix_P), order='C').astype(np.float32) - - kwargs = { - 'name': 'data_matmul_f32', - 'A': A, - 'B': B, - 'C': C, - 'matrix_M': matrix_M, - 'matrix_N': matrix_N, - 'matrix_P': matrix_P} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_mimo_mmse_f16.py b/software/data/data_mimo_mmse_f16.py deleted file mode 100644 index ff41e7e18..000000000 --- a/software/data/data_mimo_mmse_f16.py +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 mmse. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template -from scipy.linalg import solve_triangular - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def gen_input_data(N_rx, N_tx, y): - # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float16) + 1.j * \ - np.random.rand(N_rx, N_tx).astype(np.float16) - # Generate noise variance - sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float16)) - - # Matrix to be inverted in MMSE estimator - H_h = (np.asmatrix(H).H) - - G = H_h * H - G = G + np.diag(sigma) - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Linear system solution - y1 = np.transpose(np.dot(H_h, y)) - y2 = solve_triangular(L, y1, lower=True) - x = solve_triangular(np.asmatrix(L).H, y2) - - sigma = sigma + 0j - H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') - G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') - L = np.reshape(np.asarray(L), (N_tx * N_tx), order='C') - sigma = np.column_stack((sigma.real, sigma.imag) - ).astype(np.float16).flatten() - H = np.column_stack((H.real, H.imag)).astype(np.float16).flatten() - G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() - L = np.column_stack((L.real, L.imag)).astype(np.float16).flatten() - - y = np.column_stack((y.real, y.imag)).astype(np.float16).flatten() - x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() - - return sigma, H, G, y, x - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_mimo_mmse_f16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='First dimension.' - ) - parser.add_argument( - "-k", - "--iterations", - type=int, - required=False, - default=256, - help='Iterations.' - ) - parser.add_argument( - "-r", - "--randomize", - type=int, - required=False, - default=0, - help='Randomizes the number of beamgroups on each subcarrier.' - ) - - args = parser.parse_args() - N_tx = args.transmitters - N_rx = args.receivers - N_itr = args.iterations - - sigma = np.zeros([N_itr, 2 * N_tx]) - H_RI = np.zeros([N_itr, 2 * N_tx * N_rx]) - G_RI = np.zeros([N_itr, 2 * N_tx * N_tx]) - y_RI = np.zeros([N_itr, 2 * N_rx]) - x_RI = np.zeros([N_itr, 2 * N_tx]) - beamgroups = np.zeros(N_itr) - - for k in range(N_itr): - - # Create input vector - y_bg = np.random.rand(N_rx).astype(np.float16) + 1.j * \ - np.random.rand(N_rx).astype(np.float16) - if (args.randomize == 1): - N_beamgroups = 2 ** np.random.randint(0, np.log2(2 * N_tx)) - else: - N_beamgroups = 1 - N_tx_itr = N_tx // N_beamgroups - beamgroups[k] = N_beamgroups - - for i in range(N_beamgroups): - - sigma_itr, H_itr, G_itr, y_itr, x_itr = gen_input_data( - N_rx, N_tx_itr, y_bg) - sigma[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = sigma_itr - H_RI[k, (i * 2 * N_tx_itr * N_rx) - :((i + 1) * 2 * N_tx_itr * N_rx)] = H_itr - G_RI[k, (i * 2 * N_tx_itr * N_tx_itr) - :((i + 1) * 2 * N_tx_itr * N_tx_itr)] = G_itr - y_RI[k, :] = y_itr - x_RI[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = x_itr - - sigma = np.reshape(sigma, (2 * N_tx * N_itr)).astype(np.float16) - H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * N_itr)).astype(np.float16) - G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * N_itr)).astype(np.float16) - y_RI = np.reshape(y_RI, (2 * N_rx * N_itr)).astype(np.float16) - x_RI = np.reshape(x_RI, (2 * N_tx * N_itr)).astype(np.float16) - beamgroups = beamgroups.astype(np.int32) - - kwargs = {'name': 'data_mimo_mmse_f16', - 'H': H_RI, - 'G': G_RI, - 'sigma': sigma, - 'y': y_RI, - 'x': x_RI, - 'beamgroups': beamgroups, - 'N_tx': N_tx, - 'N_rx': N_rx, - 'N_itr': N_itr} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_mimo_mmse_f32.py b/software/data/data_mimo_mmse_f32.py deleted file mode 100644 index 26515e03d..000000000 --- a/software/data/data_mimo_mmse_f32.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp32 mmse. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template -from scipy.linalg import solve_triangular - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def gen_input_data(N_rx, N_tx): - - # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * \ - np.random.rand(N_rx, N_tx).astype(np.float32) - # Create input vector - y = np.random.rand(N_rx).astype(np.float32) + 1.j * \ - np.random.rand(N_rx).astype(np.float32) - # Generate noise variance - sigma = np.diag(np.random.rand(N_tx, N_tx).astype(np.float32)) - - # Matrix to be inverted in MMSE estimator - H_h = np.asmatrix(H).H - - G = H_h * H - G = G + np.diag(sigma) - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Linear system solution - y1 = np.transpose(np.dot(H_h, y)) - y2 = solve_triangular(L, y1, lower=True) - x = solve_triangular(np.asmatrix(L).H, y2) - - H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') - G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') - L = np.reshape(np.asarray(L), (N_tx * N_tx), order='C') - H = np.column_stack((H.real, H.imag)).astype(np.float32).flatten() - G = np.column_stack((G.real, G.imag)).astype(np.float32).flatten() - L = np.column_stack((L.real, L.imag)).astype(np.float32).flatten() - - y = np.column_stack((y.real, y.imag)).astype(np.float32).flatten() - x = np.column_stack((x.real, x.imag)).astype(np.float32).flatten() - - return sigma, H, G, y, x - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_mimo_mmse_f32.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='Second dimension.' - ) - parser.add_argument( - "-k", - "--iterations", - type=int, - required=False, - default=256, - help='Iterations.' - ) - - args = parser.parse_args() - N_tx = args.transmitters - N_rx = args.receivers - itr = args.iterations - - sigma = np.zeros([itr, N_tx]) - H_RI = np.zeros([itr, 2 * N_tx * N_rx]) - G_RI = np.zeros([itr, 2 * N_tx * N_tx]) - y_RI = np.zeros([itr, 2 * N_rx]) - x_RI = np.zeros([itr, 2 * N_tx]) - for k in range(itr): - sigma[k, :], H_RI[k, :], G_RI[k, :], \ - y_RI[k, :], x_RI[k, :] = gen_input_data(N_rx, N_tx) - - sigma = np.reshape(sigma, (N_tx * itr)) - H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * itr)) - G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * itr)) - y_RI = np.reshape(y_RI, (2 * N_rx * itr)) - x_RI = np.reshape(x_RI, (2 * N_tx * itr)) - - kwargs = {'name': 'data_mimo_mmse_f32', - 'H': H_RI, - 'G': G_RI, - 'sigma': sigma, - 'y': y_RI, - 'x': x_RI, - 'N_tx': N_tx, - 'N_rx': N_rx, - 'N_itr': itr} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_mimo_mmse_q16.py b/software/data/data_mimo_mmse_q16.py deleted file mode 100644 index 718978824..000000000 --- a/software/data/data_mimo_mmse_q16.py +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 mmse. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template -from scipy.linalg import solve_triangular - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def gen_input_data(N_rx, N_tx): - - # Create channel matrix - H = np.random.randint(-2**(15), 2**(15) - 1, - N_rx * N_tx, dtype=np.int16) \ - + 1.j * np.random.randint(-2**(15), 2**(15) - 1, - N_rx * N_tx, dtype=np.int16) - H = H.reshape(N_rx, N_tx) - # Create input vector - y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) + \ - 1.j * np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) - # Generate noise variance - sigma = np.random.randint(-2**(15), 2**(15) - 1, N_tx, dtype=np.int16) - - # Matrix to be inverted in MMSE estimator - H_h = (np.asmatrix(H).H) - - # Hermitian - G = H_h * H + np.diag(sigma) - # Matrix vector product - y1 = np.transpose(np.dot(H_h, y)) - - # Cholesky decomposition - # L = np.linalg.cholesky(G) - L = G - # Linear system solution - y2 = solve_triangular(L, y1, lower=True) - x = solve_triangular(np.asmatrix(L).H, y2) - - sigma = sigma + 0j - H = np.reshape(np.asarray(H), (N_rx * N_tx), order='C') - G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') - L = np.reshape(np.asarray(L), (N_tx * N_tx), order='C') - sigma = np.column_stack( - (sigma.real, sigma.imag)).astype( - np.int16).flatten() - H = np.column_stack((H.real, H.imag)).astype(np.int16).flatten() - G = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() - L = np.column_stack((L.real, L.imag)).astype(np.int16).flatten() - y = np.column_stack((y.real, y.imag)).astype(np.int16).flatten() - x = np.column_stack((x.real, x.imag)).astype(np.int16).flatten() - - return sigma, H, G, y, x - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_mimo_mmse_q16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-n", - "--transmitters", - type=int, - required=False, - default=4, - help='First dimension.' - ) - parser.add_argument( - "-m", - "--receivers", - type=int, - required=False, - default=32, - help='First dimension.' - ) - parser.add_argument( - "-k", - "--iterations", - type=int, - required=False, - default=1, - help='Iterations.' - ) - - args = parser.parse_args() - N_tx = args.transmitters - N_rx = args.receivers - itr = args.iterations - - sigma = np.zeros([itr, 2 * N_tx], dtype=np.int16) - H_RI = np.zeros([itr, 2 * N_tx * N_rx], dtype=np.int16) - G_RI = np.zeros([itr, 2 * N_tx * N_tx], dtype=np.int16) - y_RI = np.zeros([itr, 2 * N_rx], dtype=np.int16) - x_RI = np.zeros([itr, 2 * N_tx], dtype=np.int16) - for k in range(itr): - [sigma[k, :], - H_RI[k, :], - G_RI[k, :], - y_RI[k, :], - x_RI[k, :]] = gen_input_data(N_rx, N_tx) - - sigma = np.reshape(sigma, (2 * N_tx * itr)).astype(np.int16) - H_RI = np.reshape(H_RI, (2 * N_rx * N_tx * itr)).astype(np.int16) - G_RI = np.reshape(G_RI, (2 * N_tx * N_tx * itr)).astype(np.int16) - y_RI = np.reshape(y_RI, (2 * N_rx * itr)).astype(np.int16) - x_RI = np.reshape(x_RI, (2 * N_tx * itr)).astype(np.int16) - - kwargs = {'name': 'data_mimo_mmse_q16', - 'H': H_RI, - 'G': G_RI, - 'sigma': sigma, - 'y': y_RI, - 'x': x_RI, - 'N_tx': N_tx, - 'N_rx': N_rx, - 'N_itr': itr} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/data/data_ofdm.py b/software/data/data_ofdm.py deleted file mode 100644 index 64b0a7ca6..000000000 --- a/software/data/data_ofdm.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Licensed under the Apache License, Version 2.0, see LICENSE for details. -# SPDX-License-Identifier: Apache-2.0 - -# Author: Marco Bertuletti, ETH Zurich - -import numpy as np -import math as M -import argparse -import pathlib -from mako.template import Template -from sympy.combinatorics import Permutation - -################## -# compute_result # -################## - - -def compute_bitreversal(N, R): - # Decompose - logR2 = [] - idx = N - while (idx >= R): - logR2.append(int(M.log2(R))) - idx = idx // R - if (idx > 1): - logR2.append(int(M.log2(idx))) - # Bitreversal - indexes = [] - for x in range(N): - result = 0 - for bits in logR2: - mask = (0xffffffff >> (32 - bits)) - result = (result << bits) | (x & mask) - x = x >> bits - indexes.append(result) - - # Create transpositions table - tps = [] - for c in Permutation.from_sequence(indexes).cyclic_form: - for i in range(len(c) - 1): - tps.append([c[i] * 8, c[-1] * 8]) - return tps - - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"data_{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / "data_ofdm.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-rx", - "--receivers", - type=int, - required=False, - default=64, - help='First dimension.' - ) - parser.add_argument( - "-bs", - "--beams", - type=int, - required=False, - default=32, - help='Second dimension.' - ) - parser.add_argument( - "-sc", - "--subcarriers", - type=int, - required=False, - default=4096, - help='Iterations.' - ) - - args = parser.parse_args() - N_rx = args.receivers - N_bs = args.beams - N_sc = args.subcarriers - - pFFT_src = (np.random.rand(2 * N_rx * N_sc)).astype(np.float16) - pTw_coef = (np.random.rand(int(3 * N_sc / 4))).astype(np.float16) - pBF_coef = (np.random.rand(2 * N_rx * N_bs)).astype(np.float16) - pBF_dst = (np.random.rand(2 * N_bs * N_sc)).astype(np.float16) - - Bitreversal = np.ndarray.flatten(np.array(compute_bitreversal(N_sc, 2))) - - kwargs = {'name': 'ofdm', - 'pFFT_src': pFFT_src, - 'pTw_coef': pTw_coef, - 'pBF_coef': pBF_coef, - 'pBF_dst': pBF_dst, - 'bitrev': Bitreversal, - 'N_rx': N_rx, - 'N_bs': N_bs, - 'N_sc': N_sc, - 'Log2Len': int(np.log2(N_sc)), - 'BitrevLen': len(Bitreversal)} - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/runtime/data/generate_cfft.py b/software/data/generate_cfft.py similarity index 100% rename from software/runtime/data/generate_cfft.py rename to software/data/generate_cfft.py diff --git a/software/runtime/data/generate_chest.py b/software/data/generate_chest.py similarity index 98% rename from software/runtime/data/generate_chest.py rename to software/data/generate_chest.py index 058ce2abf..e11eb8b62 100755 --- a/software/runtime/data/generate_chest.py +++ b/software/data/generate_chest.py @@ -103,8 +103,8 @@ def compute_chest_q16(in_rx, in_tx, p): # result[2 * (i * n_tx + j) + 1] = q_sat((num_i * den) // 2**p) # Compute data multiplication - num_r = (a_r * b_r) + (a_i * b_i) - num_i = (a_i * b_r) - (a_r * b_i) + num_r = (a_r * b_r) - (a_i * b_i) + num_i = (a_i * b_r) + (a_r * b_i) result[2 * (i * n_tx + j)] = q_sat(num_r // 2**p) result[2 * (i * n_tx + j) + 1] = q_sat(num_i // 2**p) return result diff --git a/software/runtime/data/generate_cholesky.py b/software/data/generate_cholesky.py similarity index 95% rename from software/runtime/data/generate_cholesky.py rename to software/data/generate_cholesky.py index a72dc210f..1a25c4206 100644 --- a/software/runtime/data/generate_cholesky.py +++ b/software/data/generate_cholesky.py @@ -64,11 +64,10 @@ def generate_cholesky_q16(n_matrix, n_samples): vector_L = [] for k in range(n_samples): # Create hermitian matrix - H = np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, dtype=np.int16) \ - + 1.j * np.random.randint(-2**(15), - 2**(15) - 1, - n_matrix * n_matrix, - dtype=np.int16) + H = np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, + dtype=np.int16) + \ + 1.j * np.random.randint(-2**(15), 2**(15) - 1, n_matrix * n_matrix, + dtype=np.int16) H = H.reshape(n_matrix, n_matrix) # Matrix to be inverted H_h = (np.asmatrix(H).H) diff --git a/software/runtime/data/generate_matmul.py b/software/data/generate_matmul.py similarity index 100% rename from software/runtime/data/generate_matmul.py rename to software/data/generate_matmul.py diff --git a/software/runtime/data/generate_mimo_mmse.py b/software/data/generate_mimo_mmse.py similarity index 93% rename from software/runtime/data/generate_mimo_mmse.py rename to software/data/generate_mimo_mmse.py index 454976f27..5e95d3ef6 100644 --- a/software/runtime/data/generate_mimo_mmse.py +++ b/software/data/generate_mimo_mmse.py @@ -137,9 +137,10 @@ def generate_mimo_mmse_f16(N_tx, N_rx, N_itr, randomize): x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() vSigma[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = sigma - vH[k, (i * 2 * N_tx_itr * N_rx):((i + 1) * 2 * N_tx_itr * N_rx)] = H - vG[k, (i * 2 * N_tx_itr * N_tx_itr) - :((i + 1) * 2 * N_tx_itr * N_tx_itr)] = G + vH[k, (i * 2 * N_tx_itr * N_rx):( + (i + 1) * 2 * N_tx_itr * N_rx)] = H + vG[k, (i * 2 * N_tx_itr * N_tx_itr):( + (i + 1) * 2 * N_tx_itr * N_tx_itr)] = G vy[k, :] = y vx[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = x @@ -162,13 +163,15 @@ def generate_mimo_mmse_q16(N_tx, N_rx, N_itr): vx = np.zeros([N_itr, 2 * N_tx], dtype=np.int16) for k in range(N_itr): # Create channel matrix - H = np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, dtype=np.int16) \ - + 1.j * np.random.randint(-2**(15), 2 ** - (15) - 1, N_rx * N_tx, dtype=np.int16) + H = np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, + dtype=np.int16) + \ + 1.j * np.random.randint(-2**(15), 2 ** (15) - 1, + N_rx * N_tx, dtype=np.int16) # Create input vector - y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, dtype=np.int16) \ - + 1.j * np.random.randint(-2**(15), 2 ** - (15) - 1, N_rx, dtype=np.int16) + y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, + dtype=np.int16) + \ + 1.j * np.random.randint(-2**(15), 2 ** (15) - 1, N_rx, + dtype=np.int16) # Generate noise variance sigma = np.random.randint(-2**(15), 2**(15) - 1, N_tx, dtype=np.int16) @@ -238,7 +241,7 @@ def main(): "--iterations", type=int, required=False, - default=1, + default=32, help='Iterations.' ) @@ -261,7 +264,7 @@ def main(): gen_data_header_file(args.outdir, tpl, **kwargs) vSigma, vH, vG, vy, vx, beamgroups = generate_mimo_mmse_f16( - N_tx, N_rx, N_itr, 1) + N_tx, N_rx, N_itr, 0) tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_f16.h.tpl" kwargs = {'name': 'data_mimo_mmse_f16', 'H': vH, diff --git a/software/runtime/data/generate_ofdm.py b/software/data/generate_ofdm.py similarity index 100% rename from software/runtime/data/generate_ofdm.py rename to software/data/generate_ofdm.py diff --git a/software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h b/software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h deleted file mode 100644 index 5196fc30d..000000000 --- a/software/kernels/baremetal/mempool_cfft_radix4_butterfly_f16.h +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#include "xpulp/builtins_v2.h" - -/** - @brief First butterfly stage. - @param[in] pIn points to input buffer of 16b data, Re and Im parts are - interleaved - @param[out] pOut points to output buffer of 16b data, Re and Im parts are - interleaved - @param[in] i0 points to the first element to be processed - @param[in] n2 number of elements in the first wing of the butterfly - @param[in] CoSi1 packed cosine and sine first twiddle - @param[in] CoSi2 packed cosine and sine second twiddle - @param[in] CoSi3 packed cosine and sine third twiddle - @param[in] C1 packed sine and cosine first twiddle - @param[in] C2 packed sine and cosine second twiddle - @param[in] C3 packed sine and cosine third twiddle - @return none -*/ -static inline void radix4_butterfly(__fp16 *pIn, __fp16 *pOut, - uint32_t i0, uint32_t n2, v2h CoSi1, - v2h CoSi2, v2h CoSi3, v2h C1, v2h C2, - v2h C3) { - uint32_t i1, i2, i3; - __fp16 t0, t1, t2, t3, t4, t5; - v2h A, B, C, D, E, F, G, H; - -#if defined(FOLDED) || defined(SCHEDULED) - /* index calculation for the input as, */ - /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ - i1 = i0 + N_BANKS; - i2 = i1 + N_BANKS; - i3 = i2 + N_BANKS; - uint32_t n2_store = n2 >> 2U; - uint32_t i0_store = - (i0 % n2_store) + (i0 / n2) * n2 + ((i0 % n2) / n2_store) * N_BANKS; - uint32_t i1_store = i0_store + n2_store; - uint32_t i2_store = i1_store + n2_store; - uint32_t i3_store = i2_store + n2_store; -#else - /* index calculation for the input as, */ - /* pIn[i0 + 0], pIn[i0 + fftLen/4], pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ - i1 = i0 + n2; - i2 = i1 + n2; - i3 = i2 + n2; -#endif - /* Read ya (real), xa (imag) input */ - A = *(v2h *)&pIn[i0 * 2U]; - /* Read yb (real), xb(imag) input */ - B = *(v2h *)&pIn[i1 * 2U]; - /* Read yc (real), xc(imag) input */ - C = *(v2h *)&pIn[i2 * 2U]; - /* Read yd (real), xd(imag) input */ - D = *(v2h *)&pIn[i3 * 2U]; - asm volatile( - // xa + xc, ya + yc - "vfadd.h %[E],%[A],%[C];" - // xa - xc, ya - yc - "vfsub.h %[F],%[A],%[C];" - // xb + xd, yd + yd - "vfadd.h %[G],%[B],%[D];" - // xb - xd, yb - yd - "vfsub.h %[H],%[B],%[D];" - "pv.extract.h %[t0],%[H],0;" - "pv.extract.h %[t1],%[H],1;" - "fsub.h %[t3],zero,%[t1];" - "fsub.h %[t4],zero,%[t0];" - // yd - yb, xb - xd - "pv.pack.h %[C],%[t0],%[t3];" - // yb - yd, xd - xb - "pv.pack.h %[D],%[t4],%[t1];" - // xa + xc + xb + xd, ya + yb + yc + yd - "vfadd.h %[A],%[E],%[G];" - // xa - xc + yb - yd, ya - yc + xd - xb - "vfadd.h %[D],%[F],%[D];" - // xa + xc - xb - xd, ya + yc - yb - yd - "vfsub.h %[B],%[E],%[G];" - // xa - xc - yb + yd, ya - yc + xb - xd - "vfadd.h %[C],%[F],%[C];" - "vfdotpex.s.h %[t0],%[CoSi1],%[D];" - "vfdotpex.s.h %[t2],%[CoSi2],%[B];" - "vfdotpex.s.h %[t4],%[CoSi3],%[C];" - "vfdotpex.s.h %[t1],%[C1],%[D];" - "vfdotpex.s.h %[t3],%[C1],%[B];" - "vfdotpex.s.h %[t5],%[C3],%[C];" - "fcvt.h.s %[t0],%[t0];" - "fcvt.h.s %[t1],%[t1];" - "fcvt.h.s %[t2],%[t2];" - "fcvt.h.s %[t3],%[t3];" - "fcvt.h.s %[t4],%[t4];" - "fcvt.h.s %[t5],%[t5];" - "pv.pack.h %[E],%[t1],%[t0];" - "pv.pack.h %[F],%[t3],%[t2];" - "pv.pack.h %[G],%[t5],%[t4];" - : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), - [E] "=&r"(E), [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), - [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), - [t4] "=&r"(t4), [t5] "=&r"(t5) - : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), - [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) - :); -#if defined(FOLDED) || defined(SCHEDULED) - *((v2h *)&pOut[i0_store * 2U]) = A; - *((v2h *)&pOut[i1_store * 2U]) = E; - *((v2h *)&pOut[i2_store * 2U]) = F; - *((v2h *)&pOut[i3_store * 2U]) = G; -#else - *((v2h *)&pOut[i0 * 2U]) = A; - *((v2h *)&pOut[i1 * 2U]) = E; - *((v2h *)&pOut[i2 * 2U]) = F; - *((v2h *)&pOut[i3 * 2U]) = G; -#endif - -} - -/** - @brief Last butterfly stage. - @param[in] pIn points to input buffer of 16b data, Re and Im parts are - interleaved - @param[out] pOut points to output buffer of 16b data, Re and Im parts are - interleaved - @param[in] i0 points to the first element to be processed - @return none -*/ -static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, - uint32_t i0) { - __fp16 t0, t1; - uint32_t i1, i2, i3; - v2h A, B, C, D, E, F, G, H; - -#if defined(FOLDED) || defined(SCHEDULED) - /* index calculation for the input as, */ - /* pIn[i0 + 0], pIn[i0 + fftLen/4], - pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ - i1 = i0 + N_BANKS; - i2 = i1 + N_BANKS; - i3 = i2 + N_BANKS; -#ifndef SCHEDULED - uint32_t i0_store = i0 * 4; - uint32_t i1_store = i0_store + 1; - uint32_t i2_store = i1_store + 1; - uint32_t i3_store = i2_store + 1; -#endif -#else - /* index calculation for the input as, */ - /* pIn[i0 + 0], pIn[i0 + fftLen/4], - pIn[i0 + fftLen/2], pIn[i0 + 3fftLen/4] */ - i1 = i0 + 1U; - i2 = i1 + 1U; - i3 = i2 + 1U; -#endif - - /* Read ya (real), xa(imag) input */ - A = *(v2h *)&pIn[i0 * 2U]; - /* Read yb (real), xb(imag) input */ - B = *(v2h *)&pIn[i1 * 2U]; - /* Read yc (real), xc(imag) input */ - C = *(v2h *)&pIn[i2 * 2U]; - /* Read yd (real), xd(imag) input */ - D = *(v2h *)&pIn[i3 * 2U]; - __fp16 t2, t3; - asm volatile( - "vfsub.h %[H],%[B],%[D];" - "vfadd.h %[G],%[B],%[D];" - "vfadd.h %[E],%[A],%[C];" - "vfsub.h %[F],%[A],%[C];" - "pv.extract.h %[t0],%[H],0;" - "pv.extract.h %[t1],%[H],1;" - "fsub.h %[t2], zero, %[t0];" - "fsub.h %[t3], zero, %[t1];" - "pv.pack.h %[A],%[t2],%[t1];" - "pv.pack.h %[B],%[t0],%[t3];" - "vfadd.h %[H],%[E],%[G];" - "vfsub.h %[E],%[E],%[G];" - "vfadd.h %[A],%[F],%[A];" - "vfadd.h %[B],%[F],%[B];" - : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "=&r"(E), - [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), [t0] "=&r"(t0), - [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3) - : - :); -#if defined(FOLDED) - *((v2h *)&pOut[i0_store * 2U]) = H; - *((v2h *)&pOut[i1_store * 2U]) = E; - *((v2h *)&pOut[i2_store * 2U]) = A; - *((v2h *)&pOut[i3_store * 2U]) = B; -#else - *((v2h *)&pOut[i0 * 2U]) = H; - *((v2h *)&pOut[i1 * 2U]) = E; - *((v2h *)&pOut[i2 * 2U]) = A; - *((v2h *)&pOut[i3 * 2U]) = B; -#endif - -} diff --git a/software/kernels/baremetal/mempool_cfft_radix4_f16p.h b/software/kernels/baremetal/mempool_cfft_radix4_f16p.h deleted file mode 100644 index d2220d090..000000000 --- a/software/kernels/baremetal/mempool_cfft_radix4_f16p.h +++ /dev/null @@ -1,526 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#include "xpulp/builtins_v2.h" -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) - -/** - @brief Folding in local memory function - @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are - interleaved - @param[in] fftLen Length of the complex input vector - @param[in] nPE Number of PE - @return none -*/ - -static inline void fold_radix4(__fp16 *pSrc16, uint32_t fftLen, - uint32_t core_id, uint32_t nPE) { - uint32_t n2, i0, i1, i2, i3; - uint32_t i1_store, i2_store, i3_store; - volatile v2h A, B, C; - n2 = fftLen >> 2U; - for (i0 = core_id * STEP; i0 < MIN(core_id * STEP + STEP, n2); i0++) { - i1 = i0 + n2; - i2 = i1 + n2; - i3 = i2 + n2; - A = *(v2h *)&pSrc16[i1 * 2U]; - B = *(v2h *)&pSrc16[i2 * 2U]; - C = *(v2h *)&pSrc16[i3 * 2U]; - i1_store = i0 + N_BANKS; - i2_store = i1_store + N_BANKS; - i3_store = i2_store + N_BANKS; - *(v2h *)&pSrc16[i1_store * 2U] = A; - *(v2h *)&pSrc16[i2_store * 2U] = B; - *(v2h *)&pSrc16[i3_store * 2U] = C; - } - mempool_log_partial_barrier(2 * WU_STRIDE, WU_STRIDE * core_id, - nPE * WU_STRIDE); -} - -#ifdef FOLDED_TWIDDLES -/** - @brief Full FFT butterfly - @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are - interleaved - @param[out] pDst16 points to output buffer of 16b data, Re and Im parts - are interleaved - @param[in] fftLen Length of the complex input vector - @param[in] pCoef_src Twiddle coefficients vector - @param[in] pCoef_dst Auxiliary twiddle coefficients vector - @param[in] nPE Number of PE - @return pointer to output vector -*/ -__fp16 *mempool_radix4_cfft_q16p_folded(__fp16 *pSrc16, __fp16 *pDst16, - uint32_t fftLen, __fp16 *pCoef_src, - __fp16 *pCoef_dst, uint32_t nPE) -#else -/** - Twiddles are not folded in memory - @brief Full FFT butterfly - @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are - interleaved - @param[out] pDst16 points to output buffer of 16b data, Re and Im parts - are interleaved - @param[in] fftLen Length of the complex input vector - @param[in] pCoef_src Twiddle coefficients vector - @param[in] nPE Number of PE - @return pointer to output vector -*/ -__fp16 *mempool_radix4_cfft_q16p_folded(__fp16 *pSrc16, __fp16 *pDst16, - uint32_t fftLen, __fp16 *pCoef_src, - uint32_t nPE) -#endif -{ - -#ifdef FOLDED_TWIDDLES - uint32_t absolute_core_id = mempool_get_core_id(); - uint32_t core_id = absolute_core_id / WU_STRIDE; - __fp16 t0, t1, t2, t3, t4, t5; - v2h CoSi1, CoSi2, CoSi3; - v2h C1, C2, C3; - uint32_t n1, n2, n2_store, i0, j, k; - uint32_t ic, offset, wing_idx; - __fp16 *pTmp; -#else - uint32_t absolute_core_id = mempool_get_core_id(); - uint32_t core_id = absolute_core_id / WU_STRIDE; - __fp16 t0, t1, t2, t3, t4, t5; - v2h CoSi1, CoSi2, CoSi3; - v2h C1, C2, C3; - uint32_t n1, n2, n2_store, i0, j, k; - uint32_t ic, offset, wing_id, bank_id; - __fp16 *pTmp; - uint32_t twidCoefModifier = 1U; -#endif - - if (fftLen <= N_BANKS) - fold_radix4(pSrc16, fftLen, core_id, nPE); - - /* START OF FIRST STAGE PROCESS */ - n1 = fftLen; - n2 = n1 >> 2U; - n2_store = n2 >> 2U; - for (i0 = core_id * STEP; i0 < MIN(core_id * STEP + STEP, n2); i0++) { - -#ifdef FOLDED_TWIDDLES - CoSi1 = *(v2h *)&pCoef_src[2U * i0]; - CoSi2 = *(v2h *)&pCoef_src[2U * (i0 + 1 * N_BANKS)]; - CoSi3 = *(v2h *)&pCoef_src[2U * (i0 + 2 * N_BANKS)]; - if (i0 % 4 == 0) { - ic = i0 >> 2U; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; - } -#else - CoSi1 = *(v2h *)&pCoef_src[2U * i0]; - CoSi2 = *(v2h *)&pCoef_src[2U * (i0 * 2U)]; - CoSi3 = *(v2h *)&pCoef_src[2U * (i0 * 3U)]; -#endif - asm volatile("pv.extract.h %[t1],%[CoSi1],0;" - "pv.extract.h %[t3],%[CoSi2],0;" - "pv.extract.h %[t5],%[CoSi3],0;" - "pv.extract.h %[t0],%[CoSi1],1;" - "pv.extract.h %[t2],%[CoSi2],1;" - "pv.extract.h %[t4],%[CoSi3],1;" - "fsub.h %[t0],zero,%[t0];" - "fsub.h %[t2],zero,%[t2];" - "fsub.h %[t4],zero,%[t4];" - "pv.pack.h %[C1],%[t1],%[t0];" - "pv.pack.h %[C2],%[t3],%[t2];" - "pv.pack.h %[C3],%[t5],%[t4];" - : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), [t0] "=&r"(t0), - [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), - [t4] "=&r"(t4), [t5] "=&r"(t5) - : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) - :); - radix4_butterfly(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, - C3); - } - pTmp = pSrc16; - pSrc16 = pDst16; - pDst16 = pTmp; -#ifdef FOLDED_TWIDDLES - pTmp = pCoef_src; - pCoef_src = pCoef_dst; - pCoef_dst = pTmp; -#else - twidCoefModifier <<= 2U; -#endif - mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, nPE * WU_STRIDE); - /* END OF FIRST STAGE PROCESSING */ - - /* START OF MIDDLE STAGE PROCESS */ - for (k = fftLen / 4U; k > 4U; k >>= 2U) { - n1 = n2; - n2 >>= 2U; - n2_store = n2 >> 2U; - -#ifdef FOLDED_TWIDDLES - for (j = core_id * STEP; j < core_id * STEP + STEP; j++) { - CoSi1 = *(v2h *)&pCoef_src[2U * j]; - CoSi2 = *(v2h *)&pCoef_src[2U * (j + 1 * N_BANKS)]; - CoSi3 = *(v2h *)&pCoef_src[2U * (j + 2 * N_BANKS)]; - if (j % 4 == 0) { - wing_idx = j % n2; - offset = (j / n2); - ic = wing_idx >> 2U; - ic += offset * n2; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; - } -#else - bank_id = core_id / n2_store; - wing_id = core_id % n2_store; - offset = bank_id * n2; - for (j = wing_id * 4; j < MIN(wing_id * 4 + 4, n2); j++) { - ic = j * twidCoefModifier; - CoSi1 = *(v2h *)&pCoef_src[2U * ic]; - CoSi2 = *(v2h *)&pCoef_src[2U * (ic * 2U)]; - CoSi3 = *(v2h *)&pCoef_src[2U * (ic * 3U)]; -#endif - asm volatile("pv.extract.h %[t1],%[CoSi1],0;" - "pv.extract.h %[t3],%[CoSi2],0;" - "pv.extract.h %[t5],%[CoSi3],0;" - "pv.extract.h %[t0],%[CoSi1],1;" - "pv.extract.h %[t2],%[CoSi2],1;" - "pv.extract.h %[t4],%[CoSi3],1;" - "fsub.h %[t0],zero,%[t0];" - "fsub.h %[t2],zero,%[t2];" - "fsub.h %[t4],zero,%[t4];" - "pv.pack %[C1],%[t1],%[t0];" - "pv.pack %[C2],%[t3],%[t2];" - "pv.pack %[C3],%[t5],%[t4];" - : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), - [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), - [t3] "=&r"(t3), [t4] "=&r"(t4), [t5] "=&r"(t5) - : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) - :); -#ifdef FOLDED_TWIDDLES - i0 = j; - radix4_butterfly(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, - C2, C3); - } -#else - i0 = offset + j; - radix4_butterfly(pSrc16, pDst16, i0, n2, CoSi1, CoSi2, CoSi3, C1, - C2, C3); - } -#endif - pTmp = pSrc16; - pSrc16 = pDst16; - pDst16 = pTmp; -#ifdef FOLDED_TWIDDLES - pTmp = pCoef_src; - pCoef_src = pCoef_dst; - pCoef_dst = pTmp; -#else - twidCoefModifier <<= 2U; -#endif - mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, - nPE * WU_STRIDE); - } - /* END OF MIDDLE STAGE PROCESSING */ - - /* START OF LAST STAGE PROCESSING */ - n1 = n2; - n2 >>= 2U; - for (i0 = core_id * STEP; i0 < MIN(core_id * STEP + STEP, fftLen >> 2U); - i0++) { - radix4_butterfly_last(pSrc16, pDst16, i0); - } - mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, nPE * WU_STRIDE); - /* END OF LAST STAGE PROCESSING */ - - return pDst16; -} - -/** - SCHEDULER OF MULTIPLE FOLDED FFTS - Memory: - - 1st row of FFTS - - col_idx1 col_idx2 col_idx3 - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - - 2nd row of FFTS - - col_idx1 col_idx2 col_idx3 - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx ... - - ... - - @brief Scheduler of folded FFTs - @param[in] column index of the current FFT - @param[in] pSrc16 input buffer of 16b data, Re and Im are interleaved - @param[out] pDst16 output buffer of 16b data, Re and Im are interleaved - @param[in] fftLen Length of the complex input vector - @param[in] pCoef_src Twiddle coefficients vector - @param[in] pCoef_dst Twiddle coefficients vector - @param[in] pBitRevTable Bitreversal table - @param[in] bitReverseLen Length of bitreversal table - @param[in] bitReverseFlag Flag for bitreversal - @param[in] nPE Number of PE - @return void -*/ - -void mempool_radix4_cfft_q16p_scheduler(uint32_t col_id, __fp16 *pSrc16, - __fp16 *pDst16, uint32_t fftLen, - __fp16 *pCoef_src, __fp16 *pCoef_dst, - __attribute__((unused)) - uint16_t *pBitRevTable, - __attribute__((unused)) - uint16_t bitReverseLen, - uint8_t bitReverseFlag, uint32_t nPE) { - - uint32_t absolute_core_id = mempool_get_core_id(); - uint32_t core_id = absolute_core_id % (fftLen >> 4U); - - uint32_t n1, n2, i0, ic, j, k; - uint32_t n2_store; - uint32_t offset, wing_idx; - __fp16 *pTmp; - int32_t t0, t1, t2, t3, t4, t5; - v2h CoSi1, CoSi2, CoSi3; - v2h C1, C2, C3; - - /* FIRST STAGE */ - n1 = fftLen; - n2 = n1 >> 2U; - n2_store = n2 >> 2U; - for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, n2); i0++) { - CoSi1 = *(v2h *)&pCoef_src[2U * i0]; - CoSi2 = *(v2h *)&pCoef_src[2U * (i0 + 1 * N_BANKS)]; - CoSi3 = *(v2h *)&pCoef_src[2U * (i0 + 2 * N_BANKS)]; - if (i0 % 4 == 0) { - ic = i0 / 4; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; - } - asm volatile("pv.extract.h %[t1],%[CoSi1],0;" - "pv.extract.h %[t3],%[CoSi2],0;" - "pv.extract.h %[t5],%[CoSi3],0;" - "pv.extract.h %[t0],%[CoSi1],1;" - "pv.extract.h %[t2],%[CoSi2],1;" - "pv.extract.h %[t4],%[CoSi3],1;" - "fsub.h %[t0],zero,%[t0];" - "fsub.h %[t2],zero,%[t2];" - "fsub.h %[t4],zero,%[t4];" - "pv.pack.h %[C1],%[t1],%[t0];" - "pv.pack.h %[C2],%[t3],%[t2];" - "pv.pack.h %[C3],%[t5],%[t4];" - : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), [t0] "=&r"(t0), - [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), - [t4] "=&r"(t4), [t5] "=&r"(t5) - : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) - :); - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { - __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8); - __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8); - radix4_butterfly(pIn, pOut, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, - C3); - } - } - pTmp = pSrc16; - pSrc16 = pDst16; - pDst16 = pTmp; - pTmp = pCoef_src; - pCoef_src = pCoef_dst; - pCoef_dst = pTmp; - mempool_log_partial_barrier(2, absolute_core_id, nPE); - - /* MIDDLE STAGE */ - for (k = fftLen / 4U; k > 4U; k >>= 2U) { - n1 = n2; - n2 >>= 2U; - n2_store = n2 >> 2U; - - for (j = core_id * 4; j < core_id * 4 + 4; j++) { - CoSi1 = *(v2h *)&pCoef_src[2U * (j)]; - CoSi2 = *(v2h *)&pCoef_src[2U * (j + 1 * N_BANKS)]; - CoSi3 = *(v2h *)&pCoef_src[2U * (j + 2 * N_BANKS)]; - if (j % 4 == 0) { - - wing_idx = j % n2; - offset = (j / n2); - ic = wing_idx >> 2U; - ic += offset * n2; - - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi1; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi1; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi2; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi2; - ic += N_BANKS; - *((v2h *)&pCoef_dst[2U * (ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 1 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 2 + ic)]) = CoSi3; - *((v2h *)&pCoef_dst[2U * (n2_store * 3 + ic)]) = CoSi3; - } - asm volatile("pv.extract.h %[t1],%[CoSi1],0;" - "pv.extract.h %[t3],%[CoSi2],0;" - "pv.extract.h %[t5],%[CoSi3],0;" - "pv.extract.h %[t0],%[CoSi1],1;" - "pv.extract.h %[t2],%[CoSi2],1;" - "pv.extract.h %[t4],%[CoSi3],1;" - "fsub.h %[t0],zero,%[t0];" - "fsub.h %[t2],zero,%[t2];" - "fsub.h %[t4],zero,%[t4];" - "pv.pack.h %[C1],%[t1],%[t0];" - "pv.pack.h %[C2],%[t3],%[t2];" - "pv.pack.h %[C3],%[t5],%[t4];" - : [C1] "=r"(C1), [C2] "=r"(C2), [C3] "=r"(C3), - [t0] "=&r"(t0), [t1] "=&r"(t1), [t2] "=&r"(t2), - [t3] "=&r"(t3), [t4] "=&r"(t4), [t5] "=&r"(t5) - : [CoSi1] "r"(CoSi1), [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3) - :); - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { - __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8); - __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8); - radix4_butterfly(pIn, pOut, j, n2, CoSi1, CoSi2, CoSi3, C1, C2, - C3); - } - } - pTmp = pSrc16; - pSrc16 = pDst16; - pDst16 = pTmp; - pTmp = pCoef_src; - pCoef_src = pCoef_dst; - pCoef_dst = pTmp; - mempool_log_partial_barrier(2, absolute_core_id, nPE); - } - - /* LAST STAGE */ - n1 = n2; - n2 >>= 2U; - for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, fftLen >> 2U); i0++) { - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { - __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8); - __fp16 *pOut = pDst16 + idx_row * (N_BANKS * 8); - radix4_butterfly_last(pIn, pOut, i0); - } - } - pTmp = pSrc16; - pSrc16 = pDst16; - pDst16 = pTmp; - mempool_log_partial_barrier(2, absolute_core_id, nPE); - - mempool_stop_benchmark(); - mempool_start_benchmark(); - - /* BITREVERSAL */ - // Bitreversal stage stores in the sequential addresses - if (bitReverseFlag) { -#ifdef BITREVERSETABLE - uint16_t *ptr1 = (uint16_t *)(pSrc16 + 2 * col_id * (fftLen >> 2U)); - uint16_t *ptr2 = (uint16_t *)(pDst16 + 2 * col_id * (3 * (fftLen >> 2))); - for (j = 2 * core_id; j < bitReverseLen; j += 2 * nPE) { - v2h addr, tmpa, tmpb; - addr = __SRA2(*(v2h *)&pBitRevTable[j], ((v2h){2, 2})); - for (int32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { - int32_t a0 = addr[0] / 4 + (addr[0] % 4) * N_BANKS; - int32_t a1 = addr[1] / 4 + (addr[0] % 4) * N_BANKS; - tmpa = *(v2h *)&ptr1[a0 + idx_row * (N_BANKS * 8)]; - tmpb = *(v2h *)&ptr1[a1 + idx_row * (N_BANKS * 8)]; - *((v2h *)&ptr2[addr[0] + idx_row * (N_BANKS * 8)]) = tmpb; - *((v2h *)&ptr2[addr[1] + idx_row * (N_BANKS * 8)]) = tmpa; - } - } -#else - uint16_t *ptr1 = (uint16_t *)(pSrc16 + 2 * col_id * (fftLen >> 2U)); - uint16_t *ptr2 = (uint16_t *)(pDst16 + 2 * col_id * (3 * (fftLen >> 2))); - for (j = core_id * 16; j < MIN(core_id * 16 + 16, fftLen >> 2U); j += 4) { - uint32_t idx0 = j; - uint32_t idx1 = j + 1; - uint32_t idx2 = j + 2; - uint32_t idx3 = j + 3; - uint32_t idx_result0 = 0; - uint32_t idx_result1 = 0; - uint32_t idx_result2 = 0; - uint32_t idx_result3 = 0; - for (k = 0; k < LOG2; k++) { - idx_result0 = (idx_result0 << 1U) | (idx0 & 1U); - idx_result1 = (idx_result1 << 1U) | (idx1 & 1U); - idx_result2 = (idx_result2 << 1U) | (idx2 & 1U); - idx_result3 = (idx_result3 << 1U) | (idx3 & 1U); - idx0 = idx0 >> 1U; - idx1 = idx1 >> 1U; - idx2 = idx2 >> 1U; - idx3 = idx3 >> 1U; - } - for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { - uint32_t addr_src0 = (idx0 / 4) + (idx0 % 4) * N_BANKS; - uint32_t addr_src1 = (idx1 / 4) + (idx1 % 4) * N_BANKS; - uint32_t addr_src2 = (idx2 / 4) + (idx2 % 4) * N_BANKS; - uint32_t addr_src3 = (idx3 / 4) + (idx3 % 4) * N_BANKS; - uint32_t addr_dst0 = idx_result0; - uint32_t addr_dst1 = idx_result1; - uint32_t addr_dst2 = idx_result2; - uint32_t addr_dst3 = idx_result3; - addr_src0 += idx_row * (N_BANKS * 8); - addr_src1 += idx_row * (N_BANKS * 8); - addr_src2 += idx_row * (N_BANKS * 8); - addr_src3 += idx_row * (N_BANKS * 8); - addr_dst0 += idx_row * (N_BANKS * 8); - addr_dst1 += idx_row * (N_BANKS * 8); - addr_dst2 += idx_row * (N_BANKS * 8); - addr_dst3 += idx_row * (N_BANKS * 8); - *((uint32_t *)&ptr2[addr_dst0]) = (uint32_t)ptr1[addr_src0]; - *((uint32_t *)&ptr2[addr_dst1]) = (uint32_t)ptr1[addr_src1]; - *((uint32_t *)&ptr2[addr_dst2]) = (uint32_t)ptr1[addr_src2]; - *((uint32_t *)&ptr2[addr_dst3]) = (uint32_t)ptr1[addr_src3]; - } - } -#endif - } - mempool_log_partial_barrier(2, absolute_core_id, nPE); -} diff --git a/software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h b/software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h deleted file mode 100644 index 32f7a5265..000000000 --- a/software/kernels/baremetal/mempool_cfft_radix4_q16_bitreversal.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -void mempool_bitrev_q16p_xpulpimg(uint16_t *pSrc, uint16_t *pDst, - const uint16_t fftLen, const uint32_t nPE) { - uint32_t absolute_core_id = mempool_get_core_id(); - uint32_t core_id = absolute_core_id / WU_STRIDE; - uint32_t idx_result, idx, i, j; - for (i = core_id; i < fftLen; i += nPE) { - idx_result = 0; - idx = i; - for (j = 0; j < LOG2; j++) { - idx_result = (idx_result << 1U) | (idx & 1U); - idx = idx >> 1U; - } - pDst[2 * idx_result] = pSrc[2 * i]; - pDst[2 * idx_result + 1] = pSrc[2 * i + 1]; - } - mempool_log_partial_barrier(2 * WU_STRIDE, absolute_core_id, nPE * WU_STRIDE); -} diff --git a/software/kernels/baremetal/mempool_chest_f16.h b/software/kernels/baremetal/mempool_chest_f16.h new file mode 100644 index 000000000..7d53afc65 --- /dev/null +++ b/software/kernels/baremetal/mempool_chest_f16.h @@ -0,0 +1,382 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#define __CDOTP +#define __MUL + +/* a[i] = ar[i] + i * ai[j] + + out[i][j] = a[i] / c[j] + out[i][j + 1] = a[i] / c[j + 1h + out[i][j + 2] = a[i] / c[j + 2] + out[i][j + 3] = a[i] / c[j + 3]*/ + +#ifdef __XDIVSQRT +#define DIV_LOOP(ab, ab_n, i) \ + { \ + re0 = 0; \ + re1 = 0; \ + re2 = 0; \ + re3 = 0; \ + im0 = 0; \ + im1 = 0; \ + im2 = 0; \ + im3 = 0; \ + D0 = 0; \ + D1 = 0; \ + D2 = 0; \ + D3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ + "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ + "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ + "vfdotpex.s.h %[D3], %[cd3], %[cd3];" \ + "vfdotpex.s.h %[re0], %[x], %[cd0];" \ + "vfdotpex.s.h %[re1], %[x], %[cd1];" \ + "vfdotpex.s.h %[re2], %[x], %[cd2];" \ + "vfdotpex.s.h %[re3], %[x], %[cd3];" \ + "vfdotpex.s.h %[im0], %[y], %[cd0];" \ + "vfdotpex.s.h %[im1], %[y], %[cd1];" \ + "vfdotpex.s.h %[im2], %[y], %[cd2];" \ + "vfdotpex.s.h %[im3], %[y], %[cd3];" \ + "fdiv.s %[re0], %[re0], %[D0];" \ + "fdiv.s %[re1], %[re1], %[D1];" \ + "fdiv.s %[re2], %[re2], %[D2];" \ + "fdiv.s %[re3], %[re3], %[D3];" \ + "fdiv.s %[im0], %[im0], %[D0];" \ + "fdiv.s %[im1], %[im1], %[D1];" \ + "fdiv.s %[im2], %[im2], %[D2];" \ + "fdiv.s %[im3], %[im3], %[D3];" \ + "vfcpka.h.s %[re0], %[re0], %[im0];" \ + "vfcpka.h.s %[re1], %[re1], %[im1];" \ + "vfcpka.h.s %[re2], %[re2], %[im2];" \ + "vfcpka.h.s %[re3], %[re3], %[im3];" \ + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), \ + [D3] "+&r"(D3), [re0] "+&r"(re0), [re1] "+&r"(re1), \ + [re2] "+&r"(re2), [re3] "+&r"(re3), [im0] "+&r"(im0), \ + [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; \ + } +#else +#define DIV_LOOP(ab, ab_n, i) \ + { \ + re0 = 0; \ + re1 = 0; \ + re2 = 0; \ + re3 = 0; \ + im0 = 0; \ + im1 = 0; \ + im2 = 0; \ + im3 = 0; \ + D0 = 0; \ + D1 = 0; \ + D2 = 0; \ + D3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ + "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ + "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ + "vfdotpex.s.h %[D3], %[cd3], %[cd3];" \ + "vfdotpex.s.h %[re0], %[x], %[cd0];" \ + "vfdotpex.s.h %[re1], %[x], %[cd1];" \ + "vfdotpex.s.h %[re2], %[x], %[cd2];" \ + "vfdotpex.s.h %[re3], %[x], %[cd3];" \ + "vfdotpex.s.h %[im0], %[y], %[cd0];" \ + "vfdotpex.s.h %[im1], %[y], %[cd1];" \ + "vfdotpex.s.h %[im2], %[y], %[cd2];" \ + "vfdotpex.s.h %[im3], %[y], %[cd3];" \ + : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), \ + [D3] "+&r"(D3), [re0] "+&r"(re0), [re1] "+&r"(re1), \ + [re2] "+&r"(re2), [re3] "+&r"(re3), [im0] "+&r"(im0), \ + [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + re0 = re0 / D0; \ + re1 = re1 / D1; \ + re2 = re2 / D2; \ + re3 = re3 / D3; \ + im0 = im0 / D0; \ + im1 = im1 / D1; \ + im2 = im2 / D2; \ + im3 = im3 / D3; \ + asm volatile("vfcpka.h.s %[re0], %[re0], %[im0];" \ + "vfcpka.h.s %[re1], %[re1], %[im1];" \ + "vfcpka.h.s %[re2], %[re2], %[im2];" \ + "vfcpka.h.s %[re3], %[re3], %[im3];" \ + : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ + [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ + [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; \ + } +#endif + +/* a[i] = ar[i] + i * ai[j] + + out[i][j] = a[i] * c[j] + out[i][j + 1] = a[i] * c[j + 1] + out[i][j + 2] = a[i] * c[j + 2] + out[i][j + 3] = a[i] * c[j + 3]*/ + +#define MUL_LOOP(ab, ab_n, i) \ + { \ + re0 = 0; \ + re1 = 0; \ + re2 = 0; \ + re3 = 0; \ + im0 = 0; \ + im1 = 0; \ + im2 = 0; \ + im3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("vfdotpex.s.h %[re0], %[x], %[cd0];" \ + "vfdotpex.s.h %[re1], %[x], %[cd1];" \ + "vfdotpex.s.h %[re2], %[x], %[cd2];" \ + "vfdotpex.s.h %[re3], %[x], %[cd3];" \ + "vfdotpex.s.h %[im0], %[y], %[cd0];" \ + "vfdotpex.s.h %[im1], %[y], %[cd1];" \ + "vfdotpex.s.h %[im2], %[y], %[cd2];" \ + "vfdotpex.s.h %[im3], %[y], %[cd3];" \ + : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ + [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ + [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ + :); \ + asm volatile( \ + "vfcpka.h.s %[re0], %[re0], %[im0];" \ + "vfcpka.h.s %[re1], %[re1], %[im1];" \ + "vfcpka.h.s %[re2], %[re2], %[im2];" \ + "vfcpka.h.s %[re3], %[re3], %[im3];" \ + : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ + [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ + [im2] "+&r"(im2), [im3] "+&r"(im3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; \ + } + +#define CMUL_LOOP(ab, i) \ + { \ + sum0 = 0; \ + sum1 = 0; \ + sum2 = 0; \ + sum3 = 0; \ + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ + asm volatile("fcdotpex.s.h %[sum0], %[x], %[cd0];" \ + "fcdotpex.s.h %[sum1], %[x], %[cd1];" \ + "fcdotpex.s.h %[sum2], %[x], %[cd2];" \ + "fcdotpex.s.h %[sum3], %[x], %[cd3];" \ + : [sum0] "+&r"(sum0), [sum1] "+&r"(sum1), [sum2] "+&r"(sum2), \ + [sum3] "+&r"(sum3) \ + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ + [cd3] "r"(cd3), [x] "r"(ab) \ + :); \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = sum0; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = sum1; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = sum2; \ + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = sum3; \ + } + +#define SHUFFLE_A \ + { \ + asm volatile( \ + "xor %[ab_n0], %[ab0], %[neg_mask];" \ + "xor %[ab_n1], %[ab1], %[neg_mask];" \ + "xor %[ab_n2], %[ab2], %[neg_mask];" \ + "xor %[ab_n3], %[ab3], %[neg_mask];" \ + "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" \ + "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" \ + "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" \ + "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" \ + : [ab_n0] "+&r"(ab_n0), [ab_n1] "+&r"(ab_n1), [ab_n2] "+&r"(ab_n2), \ + [ab_n3] "+&r"(ab_n3) \ + : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), \ + [neg_mask] "r"(0x00008000), [mask] "r"(0x00020003) \ + :); \ + } + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @return none +*/ +void mempool_chest_f16s_unrolled4(__fp16 *pH, __fp16 *pPilotRX, + __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc) { + + uint32_t ab0, ab1, ab2, ab3; + uint32_t cd0, cd1, cd2, cd3; + uint32_t re0, re1, re2, re3; + uint32_t im0, im1, im2, im3; + uint32_t D0, D1, D2, D3; + uint32_t ab_n0, ab_n1, ab_n2, ab_n3; + __fp16 *pPilotTX_itr; + __fp16 *pPilotRX_itr; + __fp16 *pH_itr; + + for (uint32_t k = 0; k < nSc; k++) { + pPilotTX_itr = pPilotTX + k * (2 * nTX); + pPilotRX_itr = pPilotRX + k * (2 * nRX); + pH_itr = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i++) { + ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; + ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; + SHUFFLE_A; + for (uint32_t j = 0; j < nTX; j += 4) { + DIV_LOOP(ab0, ab_n0, i); + DIV_LOOP(ab1, ab_n1, i + 1); + DIV_LOOP(ab2, ab_n2, i + 2); + DIV_LOOP(ab3, ab_n3, i + 3); + } + } + } + return; +} + +/** + @brief Block-type channel estimation. + @param[in] pH points to output channel + @param[in] pPilotRX points to received symbol + @param[in] pPilotTX points to sent pilot + @param[in] nTX Number of transmitters + @param[in] nRX Number of receivers + @param[in] nSc Number of Subcarriers + @param[in] core_id ID of the PE + @param[in] nPE Number of PEs + @return none +*/ +void mempool_chest_f16p_unrolled4(__fp16 *pH, __fp16 *pPilotRX, + __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, + uint32_t nSc, uint32_t core_id, + uint32_t nPE) { + uint32_t ab0, ab1, ab2, ab3; + uint32_t cd0, cd1, cd2, cd3; +#ifndef __CDOTP + uint32_t ab_n0, ab_n1, ab_n2, ab_n3; + uint32_t re0, re1, re2, re3; + uint32_t im0, im1, im2, im3; +#else + uint32_t sum0, sum1, sum2, sum3; +#endif + +#ifndef __MUL + uint32_t D0, D1, D2, D3; +#endif + + __fp16 *pPilotTX_itr; + __fp16 *pPilotRX_itr; + __fp16 *pH_itr; + + for (uint32_t k = core_id; k < nSc; k += nPE) { + pPilotTX_itr = pPilotTX + k * (2 * nTX); + pPilotRX_itr = pPilotRX + k * (2 * nRX); + pH_itr = pH + k * 2 * (nTX * nRX); + for (uint32_t i = 0; i < nRX; i += 4) { + ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; + ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; +#ifndef __CDOTP + SHUFFLE_A; +#endif + + for (uint32_t j = 0; j < nTX; j += 4) { +#if (defined(__CDOTP) && defined(__MUL)) + CMUL_LOOP(ab0, i); + CMUL_LOOP(ab1, i + 1); + CMUL_LOOP(ab2, i + 2); + CMUL_LOOP(ab3, i + 3); +#elif (!defined(__CDOTP) && defined(__MUL)) + MUL_LOOP(ab0, ab_n0, i); + MUL_LOOP(ab1, ab_n1, i + 1); + MUL_LOOP(ab2, ab_n2, i + 2); + MUL_LOOP(ab3, ab_n3, i + 3); +#else + DIV_LOOP(ab0, ab_n0, i) + DIV_LOOP(ab1, ab_n1, i + 1) + DIV_LOOP(ab2, ab_n2, i + 2) + DIV_LOOP(ab3, ab_n3, i + 3) +#endif + } + } + } + return; +} + +void mempool_chest_f16p_unrolled4_local(__fp16 *volatile pH, + __fp16 *volatile pPilotRX, + __fp16 *volatile pPilotTX, uint32_t nRX, + uint32_t nTX, uint32_t nSc, + uint32_t core_id, uint32_t nPE) { + uint32_t ab0, ab1, ab2, ab3; + uint32_t cd0, cd1, cd2, cd3; + uint32_t sum0, sum1, sum2, sum3; + __fp16 *pPilotTX_itr; + __fp16 *pPilotRX_itr; + __fp16 *pH_itr; + uint32_t itr, i, j; + + // Cores Loop over the received pilots vector + for (itr = core_id * 4; itr < (nSc * nRX); + itr += (BANKING_FACTOR * NUM_CORES)) { + // Received pilots are aligned to cores + uint32_t sc_RX = itr / nRX; + pPilotTX_itr = pPilotTX + sc_RX * (2 * nTX); + pPilotRX_itr = pPilotRX + sc_RX * (2 * nRX); + pH_itr = pH + sc_RX * 2 * (nTX * nRX); + + // Load received pilots + i = itr % nRX; + ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; + ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; + ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; + ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; + for (j = 0; j < nTX; j += 4) { + CMUL_LOOP(ab0, i); + CMUL_LOOP(ab1, i + 1); + CMUL_LOOP(ab2, i + 2); + CMUL_LOOP(ab3, i + 3); + } + } + mempool_barrier(nPE); + return; +} diff --git a/software/kernels/baremetal/mempool_chest_f16p.h b/software/kernels/baremetal/mempool_chest_f16p.h deleted file mode 100644 index 835b26237..000000000 --- a/software/kernels/baremetal/mempool_chest_f16p.h +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -// Includes inner loop -#include "mempool_chest_f16s.h" - -/** - @brief Block-type channel estimation. - @param[in] pH points to output channel - @param[in] pPilotRX points to received symbol - @param[in] pPilotTX points to sent pilot - @param[in] nTX Number of transmitters - @param[in] nRX Number of receivers - @param[in] nSc Number of Subcarriers - @return none -*/ -void mempool_chest_f16p_unrolled4(__fp16 *pH, __fp16 *pPilotRX, - __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, - uint32_t nSc, uint32_t core_id, - uint32_t nPE) { - uint32_t ab0, ab1, ab2, ab3; - uint32_t ab_n0, ab_n1, ab_n2, ab_n3; - __fp16 *pTX; - __fp16 *pRX; - __fp16 *pOut; - for (uint32_t k = core_id; k < nSc; k += nPE) { - pTX = pPilotTX + k * (2 * nTX); - pRX = pPilotRX + k * (2 * nRX); - pOut = pH + k * 2 * (nTX * nRX); - for (uint32_t i = 0; i < nRX; i += 4) { - ab0 = *(uint32_t *)&pRX[2U * i]; - ab1 = *(uint32_t *)&pRX[2U * (i + 1)]; - ab2 = *(uint32_t *)&pRX[2U * (i + 2)]; - ab3 = *(uint32_t *)&pRX[2U * (i + 3)]; - asm volatile( - "xor %[ab_n0], %[ab0], %[neg_mask];" - "xor %[ab_n1], %[ab1], %[neg_mask];" - "xor %[ab_n2], %[ab2], %[neg_mask];" - "xor %[ab_n3], %[ab3], %[neg_mask];" - "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" - "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" - "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" - "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" - : [ab_n0] "=&r"(ab_n0), [ab_n1] "=&r"(ab_n1), [ab_n2] "=&r"(ab_n2), - [ab_n3] "=&r"(ab_n3) - : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), - [neg_mask] "r"(0x00008000), [mask] "r"(0x00020001) - :); - for (uint32_t j = 0; j < nTX; j += 4) { - chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab0, ab_n0, i, j); - chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab1, ab_n1, i + 1, j); - chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab2, ab_n2, i + 2, j); - chest_unrolled4_inner_loop_f16(pTX, pOut, nTX, ab3, ab_n3, i + 3, j); - } - } - } - mempool_log_partial_barrier(2, core_id, nPE); - return; -} diff --git a/software/kernels/baremetal/mempool_chest_f16s.h b/software/kernels/baremetal/mempool_chest_f16s.h deleted file mode 100644 index 4830ebc6f..000000000 --- a/software/kernels/baremetal/mempool_chest_f16s.h +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#pragma once - -#ifdef __XDIVSQRT - -/* a[i] = ar[i] + i * ai[j] - - out[i][j] = a[i] / c[j] - out[i][j + 1] = a[i] / c[j + 1h - out[i][j + 2] = a[i] / c[j + 2] - out[i][j + 3] = a[i] / c[j + 3]*/ - -static inline void chest_unrolled4_inner_loop_f16(__fp16 *pPilotTX, __fp16 *pH, - uint32_t nTX, uint32_t ab, - uint32_t ab_n, uint32_t i, - uint32_t j) { - - uint32_t cd0, cd1, cd2, cd3; - float re0 = 0.0f, re1 = 0.0f, re2 = 0.0f, re3 = 0.0f; - float im0 = 0.0f, im1 = 0.0f, im2 = 0.0f, im3 = 0.0f; - float D0 = 0.0f, D1 = 0.0f, D2 = 0.0f, D3 = 0.0f; - cd0 = *(uint32_t *)&pPilotTX[2U * j]; - cd1 = *(uint32_t *)&pPilotTX[2U * (j + 1)]; - cd2 = *(uint32_t *)&pPilotTX[2U * (j + 2)]; - cd3 = *(uint32_t *)&pPilotTX[2U * (j + 3)]; - asm volatile( - // Compute denominator - "vfdotpex.s.h %[D0], %[cd0], %[cd0];" - "vfdotpex.s.h %[D1], %[cd1], %[cd1];" - "vfdotpex.s.h %[D2], %[cd2], %[cd2];" - "vfdotpex.s.h %[D3], %[cd3], %[cd3];" - // Compute numerator - "vfdotpex.s.h %[re0], %[ab], %[cd0];" - "vfdotpex.s.h %[re1], %[ab], %[cd1];" - "vfdotpex.s.h %[re2], %[ab], %[cd2];" - "vfdotpex.s.h %[re3], %[ab], %[cd3];" - "vfdotpex.s.h %[im0], %[ab_n], %[cd0];" - "vfdotpex.s.h %[im1], %[ab_n], %[cd1];" - "vfdotpex.s.h %[im2], %[ab_n], %[cd2];" - "vfdotpex.s.h %[im3], %[ab_n], %[cd3];" - "fdiv.s %[re0], %[re0], %[D0];" - "fdiv.s %[re1], %[re1], %[D1];" - "fdiv.s %[re2], %[re2], %[D2];" - "fdiv.s %[re3], %[re3], %[D3];" - "fdiv.s %[im0], %[im0], %[D0];" - "fdiv.s %[im1], %[im1], %[D1];" - "fdiv.s %[im2], %[im2], %[D2];" - "fdiv.s %[im3], %[im3], %[D3];" - // Pack in 32b word - "vfcpka.h.s %[re0], %[re0], %[im0];" - "vfcpka.h.s %[re1], %[re1], %[im1];" - "vfcpka.h.s %[re2], %[re2], %[im2];" - "vfcpka.h.s %[re3], %[re3], %[im3];" - : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), [D3] "+&r"(D3), - [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), [re3] "+&r"(re3), - [im0] "+&r"(im0), [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3), - [ab] "r"(ab), [ab_n] "r"(ab_n) - :); - *((uint32_t *)&pH[2 * (i * nTX + j)]) = *(uint32_t *)&re0; - *((uint32_t *)&pH[2 * (i * nTX + j + 1)]) = *(uint32_t *)&re1; - *((uint32_t *)&pH[2 * (i * nTX + j + 2)]) = *(uint32_t *)&re2; - *((uint32_t *)&pH[2 * (i * nTX + j + 3)]) = *(uint32_t *)&re3; - return; -} - -#else - -/* a[i] = ar[i] + i * ai[j] - - out[i][j] = a[i] / c[j] - out[i][j + 1] = a[i] / c[j + 1h - out[i][j + 2] = a[i] / c[j + 2] - out[i][j + 3] = a[i] / c[j + 3]*/ - -static inline void chest_unrolled4_inner_loop_f16(__fp16 *pPilotTX, __fp16 *pH, - uint32_t nTX, uint32_t ab, - uint32_t ab_n, uint32_t i, - uint32_t j) { - - uint32_t cd0, cd1, cd2, cd3; - float re0 = 0.0f, re1 = 0.0f, re2 = 0.0f, re3 = 0.0f; - float im0 = 0.0f, im1 = 0.0f, im2 = 0.0f, im3 = 0.0f; - float D0 = 0.0f, D1 = 0.0f, D2 = 0.0f, D3 = 0.0f; - cd0 = *(uint32_t *)&pPilotTX[2U * j]; - cd1 = *(uint32_t *)&pPilotTX[2U * (j + 1)]; - cd2 = *(uint32_t *)&pPilotTX[2U * (j + 2)]; - cd3 = *(uint32_t *)&pPilotTX[2U * (j + 3)]; - asm volatile( - // Compute denominator - "vfdotpex.s.h %[D0], %[cd0], %[cd0];" - "vfdotpex.s.h %[D1], %[cd1], %[cd1];" - "vfdotpex.s.h %[D2], %[cd2], %[cd2];" - "vfdotpex.s.h %[D3], %[cd3], %[cd3];" - // Compute numerator - "vfdotpex.s.h %[re0], %[ab], %[cd0];" - "vfdotpex.s.h %[re1], %[ab], %[cd1];" - "vfdotpex.s.h %[re2], %[ab], %[cd2];" - "vfdotpex.s.h %[re3], %[ab], %[cd3];" - "vfdotpex.s.h %[im0], %[ab_n], %[cd0];" - "vfdotpex.s.h %[im1], %[ab_n], %[cd1];" - "vfdotpex.s.h %[im2], %[ab_n], %[cd2];" - "vfdotpex.s.h %[im3], %[ab_n], %[cd3];" - : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), [D3] "+&r"(D3), - [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), [re3] "+&r"(re3), - [im0] "+&r"(im0), [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3), - [ab] "r"(ab), [ab_n] "r"(ab_n) - :); - re0 = re0 / D0; - re1 = re1 / D1; - re2 = re2 / D2; - re3 = re3 / D3; - im0 = im0 / D0; - im1 = im1 / D1; - im2 = im2 / D2; - im3 = im3 / D3; - asm volatile( - // Pack in 32b word - "vfcpka.h.s %[re0], %[re0], %[im0];" - "vfcpka.h.s %[re1], %[re1], %[im1];" - "vfcpka.h.s %[re2], %[re2], %[im2];" - "vfcpka.h.s %[re3], %[re3], %[im3];" - : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), [D3] "+&r"(D3), - [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), [re3] "+&r"(re3), - [im0] "+&r"(im0), [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3), - [ab] "r"(ab), [ab_n] "r"(ab_n) - :); - - *((uint32_t *)&pH[2 * (i * nTX + j)]) = *(uint32_t *)&re0; - *((uint32_t *)&pH[2 * (i * nTX + j + 1)]) = *(uint32_t *)&re1; - *((uint32_t *)&pH[2 * (i * nTX + j + 2)]) = *(uint32_t *)&re2; - *((uint32_t *)&pH[2 * (i * nTX + j + 3)]) = *(uint32_t *)&re3; - return; -} - -#endif - -/** - @brief Block-type channel estimation. - @param[in] pH points to output channel - @param[in] pPilotRX points to received symbol - @param[in] pPilotTX points to sent pilot - @param[in] nTX Number of transmitters - @param[in] nRX Number of receivers - @param[in] nSc Number of Subcarriers - @return none -*/ -void mempool_chest_f16s_unrolled4(__fp16 *pH, __fp16 *pPilotRX, - __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, - uint32_t nSc) { - - uint32_t ab0, ab1, ab2, ab3; - uint32_t ab_n0, ab_n1, ab_n2, ab_n3; - - for (uint32_t k = 0; k < nSc; k++) { - for (uint32_t i = 0; i < nRX; i++) { - ab0 = *(uint32_t *)&pPilotRX[2U * i]; - ab1 = *(uint32_t *)&pPilotRX[2U * (i + 1)]; - ab2 = *(uint32_t *)&pPilotRX[2U * (i + 2)]; - ab3 = *(uint32_t *)&pPilotRX[2U * (i + 3)]; - asm volatile( - "xor %[ab_n0], %[ab0], %[neg_mask];" - "xor %[ab_n1], %[ab1], %[neg_mask];" - "xor %[ab_n2], %[ab2], %[neg_mask];" - "xor %[ab_n3], %[ab3], %[neg_mask];" - "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" - "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" - "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" - "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" - : [ab_n0] "+&r"(ab_n0), [ab_n1] "+&r"(ab_n1), [ab_n2] "+&r"(ab_n2), - [ab_n3] "+&r"(ab_n3) - : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), - [neg_mask] "r"(0x00008000), [mask] "r"(0x00020003) - :); - for (uint32_t j = 0; j < nTX; j += 4) { - chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab0, ab_n0, i, j); - chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab1, ab_n1, i + 1, j); - chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab2, ab_n2, i + 2, j); - chest_unrolled4_inner_loop_f16(pPilotTX, pH, nTX, ab3, ab_n3, i + 3, j); - } - } - pPilotTX += 2 * nTX; - pPilotRX += 2 * nRX; - pH += 2 * (nTX * nRX); - } - return; -} diff --git a/software/kernels/baremetal/mempool_chest_q16.h b/software/kernels/baremetal/mempool_chest_q16.h index 914a8e09e..a91aa0097 100644 --- a/software/kernels/baremetal/mempool_chest_q16.h +++ b/software/kernels/baremetal/mempool_chest_q16.h @@ -307,7 +307,7 @@ void mempool_chest_q16p_unrolled4(int16_t *volatile pH, } } } - mempool_barrier(nPE); + mempool_log_partial_barrier(2, core_id, nPE); return; } diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index c870782da..bb6143ed7 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -6,6 +6,7 @@ // Author: Bowen Wang, ETH Zurich #pragma once +#include "builtins_v2.h" #define N_BANKS (NUM_CORES * BANKING_FACTOR) #ifdef __XDIVSQRT diff --git a/software/kernels/baremetal/mempool_cholesky_f32s.h b/software/kernels/baremetal/mempool_cholesky_f32s.h index 6cd54fe69..2bad891f5 100644 --- a/software/kernels/baremetal/mempool_cholesky_f32s.h +++ b/software/kernels/baremetal/mempool_cholesky_f32s.h @@ -165,4 +165,8 @@ void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { return; } +#else + +#error "ERROR: f32 MMSE functions available only for __XDIVSQRT." + #endif diff --git a/software/runtime/kernel/mempool_cholesky_q16s.h b/software/kernels/baremetal/mempool_cholesky_q16s.h similarity index 97% rename from software/runtime/kernel/mempool_cholesky_q16s.h rename to software/kernels/baremetal/mempool_cholesky_q16s.h index 65f8e0b42..dc20a2b94 100644 --- a/software/runtime/kernel/mempool_cholesky_q16s.h +++ b/software/kernels/baremetal/mempool_cholesky_q16s.h @@ -5,7 +5,8 @@ // Author: Marco Bertuletti, ETH Zurich #pragma once -#include "kernel/mempool_sqrt_q32s.h" +#include "baremetal/mempool_sqrt_q32s.h" +#include "builtins_v2.h" #define N_BANKS (NUM_CORES * BANKING_FACTOR) /** VECTORIZED CODE diff --git a/software/kernels/baremetal/mempool_cmatmul_f16.h b/software/kernels/baremetal/mempool_cmatmul_f16.h index c83443076..f795a82ba 100644 --- a/software/kernels/baremetal/mempool_cmatmul_f16.h +++ b/software/kernels/baremetal/mempool_cmatmul_f16.h @@ -14,318 +14,453 @@ #include "builtins_v2.h" #define CMATMUL_2x2_LOOP \ - float sum00_real = 0.0f; \ - float sum01_real = 0.0f; \ - float sum10_real = 0.0f; \ - float sum11_real = 0.0f; \ - float sum00_imag = 0.0f; \ - float sum01_imag = 0.0f; \ - float sum10_imag = 0.0f; \ - float sum11_imag = 0.0f; \ - v2h a00s, a01s, a10s, a11s; \ - v2h res00, res01, res10, res11; \ - for (j = 0; j < N; j += 2) { \ - v2h a00 = *(v2h *)&A[2 * ((i + 0) * N + (j + 0))]; \ - v2h a01 = *(v2h *)&A[2 * ((i + 0) * N + (j + 1))]; \ - v2h a10 = *(v2h *)&A[2 * ((i + 1) * N + (j + 0))]; \ - v2h a11 = *(v2h *)&A[2 * ((i + 1) * N + (j + 1))]; \ - v2h b00 = *(v2h *)&B[2 * ((j + 0) * P + (k + 0))]; \ - v2h b01 = *(v2h *)&B[2 * ((j + 0) * P + (k + 1))]; \ - v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + (k + 0))]; \ - v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + (k + 1))]; \ - asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ - "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ - "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ - "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ - : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ - [a11s] "=&r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x00020003) \ + { \ + float sum00_real = 0.0f; \ + float sum01_real = 0.0f; \ + float sum10_real = 0.0f; \ + float sum11_real = 0.0f; \ + float sum00_imag = 0.0f; \ + float sum01_imag = 0.0f; \ + float sum10_imag = 0.0f; \ + float sum11_imag = 0.0f; \ + v2h a00s, a01s, a10s, a11s; \ + v2h res00, res01, res10, res11; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = *(v2h *)&A[2 * ((i + 0) * N + (j + 0))]; \ + v2h a01 = *(v2h *)&A[2 * ((i + 0) * N + (j + 1))]; \ + v2h a10 = *(v2h *)&A[2 * ((i + 1) * N + (j + 0))]; \ + v2h a11 = *(v2h *)&A[2 * ((i + 1) * N + (j + 1))]; \ + v2h b00 = *(v2h *)&B[2 * ((j + 0) * P + (k + 0))]; \ + v2h b01 = *(v2h *)&B[2 * ((j + 0) * P + (k + 1))]; \ + v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + (k + 0))]; \ + v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + (k + 1))]; \ + asm volatile("pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), \ + [a10s] "=&r"(a10s), [a11s] "=&r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x00020003) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ + : [sum00_imag] "+&r"(sum00_imag), [sum01_imag] "+&r"(sum01_imag), \ + [sum10_imag] "+&r"(sum10_imag), [sum11_imag] "+&r"(sum11_imag) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ + [b11] "r"(b11) \ + :); \ + asm volatile("xor %[a00s], %[a00], %[mask];" \ + "xor %[a10s], %[a10], %[mask];" \ + "xor %[a01s], %[a01], %[mask];" \ + "xor %[a11s], %[a11], %[mask];" \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), \ + [a10s] "=&r"(a10s), [a11s] "=&r"(a11s) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ + [a11] "r"(a11), [mask] "r"(0x00008000) \ + :); \ + asm volatile( \ + "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ + : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ + [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real) \ + : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ + [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ + [b11] "r"(b11) \ + :); \ + } \ + asm volatile("vfcpka.h.s %[res00], %[sum00_imag], %[sum00_real];" \ + "vfcpka.h.s %[res01], %[sum01_imag], %[sum01_real];" \ + "vfcpka.h.s %[res10], %[sum10_imag], %[sum10_real];" \ + "vfcpka.h.s %[res11], %[sum11_imag], %[sum11_real];" \ + : [res00] "=r"(res00), [res01] "=r"(res01), \ + [res10] "=r"(res10), [res11] "=r"(res11) \ + : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ + [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ + [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ + [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real) \ :); \ - asm volatile( \ - "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ - : [sum00_imag] "+&r"(sum00_imag), [sum01_imag] "+&r"(sum01_imag), \ - [sum10_imag] "+&r"(sum10_imag), [sum11_imag] "+&r"(sum11_imag) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ - [b11] "r"(b11) \ - :); \ - asm volatile("xor %[a00s], %[a00], %[mask];" \ - "xor %[a10s], %[a10], %[mask];" \ - "xor %[a01s], %[a01], %[mask];" \ - "xor %[a11s], %[a11], %[mask];" \ - : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ - [a11s] "=&r"(a11s) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), \ - [a11] "r"(a11), [mask] "r"(0x00008000) \ - :); \ - asm volatile( \ - "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ - : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ - [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real) \ - : [a00s] "r"(a00s), [a01s] "r"(a01s), [a10s] "r"(a10s), \ - [a11s] "r"(a11s), [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), \ - [b11] "r"(b11) \ - :); \ - } \ - asm volatile("vfcpka.h.s %[res00], %[sum00_imag], %[sum00_real];" \ - "vfcpka.h.s %[res01], %[sum01_imag], %[sum01_real];" \ - "vfcpka.h.s %[res10], %[sum10_imag], %[sum10_real];" \ - "vfcpka.h.s %[res11], %[sum11_imag], %[sum11_real];" \ - : [res00] "=r"(res00), [res01] "=r"(res01), \ - [res10] "=r"(res10), [res11] "=r"(res11) \ - : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ - [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ - [sum00_real] "r"(sum00_real), [sum01_real] "r"(sum01_real), \ - [sum10_real] "r"(sum10_real), [sum11_real] "r"(sum11_real) \ - :); \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = res00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = res01; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = res10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = res11; \ + } #define CMATMUL_2x4_LOOP \ - float register volatile sum00_real = 0.0f; \ - float register volatile sum01_real = 0.0f; \ - float register volatile sum02_real = 0.0f; \ - float register volatile sum03_real = 0.0f; \ - float register volatile sum10_real = 0.0f; \ - float register volatile sum11_real = 0.0f; \ - float register volatile sum12_real = 0.0f; \ - float register volatile sum13_real = 0.0f; \ - float register volatile sum00_imag = 0.0f; \ - float register volatile sum01_imag = 0.0f; \ - float register volatile sum02_imag = 0.0f; \ - float register volatile sum03_imag = 0.0f; \ - float register volatile sum10_imag = 0.0f; \ - float register volatile sum11_imag = 0.0f; \ - float register volatile sum12_imag = 0.0f; \ - float register volatile sum13_imag = 0.0f; \ - v2h a00s, a01s, a10s, a11s; \ - for (j = 0; j < N; j += 2) { \ - v2h a00 = A[(i + 0) * N + (j + 0)]; \ - v2h a01 = A[(i + 0) * N + (j + 1)]; \ - v2h a10 = A[(i + 1) * N + (j + 0)]; \ - v2h a11 = A[(i + 1) * N + (j + 1)]; \ - v2h b00 = B[(j + 0) * P + (k + 0)]; \ - v2h b01 = B[(j + 0) * P + (k + 1)]; \ - v2h b02 = B[(j + 0) * P + (k + 2)]; \ - v2h b03 = B[(j + 0) * P + (k + 3)]; \ - v2h b10 = B[(j + 1) * P + (k + 0)]; \ - v2h b11 = B[(j + 1) * P + (k + 1)]; \ - v2h b12 = B[(j + 1) * P + (k + 2)]; \ - v2h b13 = B[(j + 1) * P + (k + 3)]; \ + { \ + float register volatile sum00_real = 0.0f; \ + float register volatile sum01_real = 0.0f; \ + float register volatile sum02_real = 0.0f; \ + float register volatile sum03_real = 0.0f; \ + float register volatile sum10_real = 0.0f; \ + float register volatile sum11_real = 0.0f; \ + float register volatile sum12_real = 0.0f; \ + float register volatile sum13_real = 0.0f; \ + float register volatile sum00_imag = 0.0f; \ + float register volatile sum01_imag = 0.0f; \ + float register volatile sum02_imag = 0.0f; \ + float register volatile sum03_imag = 0.0f; \ + float register volatile sum10_imag = 0.0f; \ + float register volatile sum11_imag = 0.0f; \ + float register volatile sum12_imag = 0.0f; \ + float register volatile sum13_imag = 0.0f; \ + v2h a00s, a01s, a10s, a11s; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = A[(i + 0) * N + (j + 0)]; \ + v2h a01 = A[(i + 0) * N + (j + 1)]; \ + v2h a10 = A[(i + 1) * N + (j + 0)]; \ + v2h a11 = A[(i + 1) * N + (j + 1)]; \ + v2h b00 = B[(j + 0) * P + (k + 0)]; \ + v2h b01 = B[(j + 0) * P + (k + 1)]; \ + v2h b02 = B[(j + 0) * P + (k + 2)]; \ + v2h b03 = B[(j + 0) * P + (k + 3)]; \ + v2h b10 = B[(j + 1) * P + (k + 0)]; \ + v2h b11 = B[(j + 1) * P + (k + 1)]; \ + v2h b12 = B[(j + 1) * P + (k + 2)]; \ + v2h b13 = B[(j + 1) * P + (k + 3)]; \ + asm volatile( \ + "pv.shuffle2.h %[a00s], %[a00], %[mask];" \ + "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ + "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ + "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ + "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ + [a11s] "=&r"(a11s), [sum00_imag] "+&r"(sum00_imag), \ + [sum01_imag] "+&r"(sum01_imag), [sum02_imag] "+&r"(sum02_imag), \ + [sum03_imag] "+&r"(sum03_imag), [sum10_imag] "+&r"(sum10_imag), \ + [sum11_imag] "+&r"(sum11_imag), [sum12_imag] "+&r"(sum12_imag), \ + [sum13_imag] "+&r"(sum13_imag) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ + [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13), \ + [mask] "r"(0x00020003) \ + :); \ + asm volatile( \ + "xor %[a00s], %[a00], %[maskn];" \ + "xor %[a10s], %[a10], %[maskn];" \ + "xor %[a01s], %[a01], %[maskn];" \ + "xor %[a11s], %[a11], %[maskn];" \ + "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ + "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ + "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ + "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ + "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ + "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ + "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ + "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ + "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ + "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ + "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ + "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ + "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ + "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ + "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ + "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ + : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ + [a11s] "=&r"(a11s), [sum00_real] "+&r"(sum00_real), \ + [sum01_real] "+&r"(sum01_real), [sum02_real] "+&r"(sum02_real), \ + [sum03_real] "+&r"(sum03_real), [sum10_real] "+&r"(sum10_real), \ + [sum11_real] "+&r"(sum11_real), [sum12_real] "+&r"(sum12_real), \ + [sum13_real] "+&r"(sum13_real) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ + [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13), \ + [maskn] "r"(0x00008000) \ + :); \ + } \ asm volatile( \ - "pv.shuffle2.h %[a00s], %[a00], %[mask];" \ - "pv.shuffle2.h %[a10s], %[a10], %[mask];" \ - "pv.shuffle2.h %[a01s], %[a01], %[mask];" \ - "pv.shuffle2.h %[a11s], %[a11], %[mask];" \ - "vfdotpex.s.h %[sum00_imag], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_imag], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_imag], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_imag], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum02_imag], %[a00s], %[b02];" \ - "vfdotpex.s.h %[sum12_imag], %[a10s], %[b02];" \ - "vfdotpex.s.h %[sum03_imag], %[a00s], %[b03];" \ - "vfdotpex.s.h %[sum13_imag], %[a10s], %[b03];" \ - "vfdotpex.s.h %[sum00_imag], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_imag], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_imag], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_imag], %[a11s], %[b11];" \ - "vfdotpex.s.h %[sum02_imag], %[a01s], %[b12];" \ - "vfdotpex.s.h %[sum12_imag], %[a11s], %[b12];" \ - "vfdotpex.s.h %[sum03_imag], %[a01s], %[b13];" \ - "vfdotpex.s.h %[sum13_imag], %[a11s], %[b13];" \ - : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ - [a11s] "=&r"(a11s), [sum00_imag] "+&r"(sum00_imag), \ - [sum01_imag] "+&r"(sum01_imag), [sum02_imag] "+&r"(sum02_imag), \ - [sum03_imag] "+&r"(sum03_imag), [sum10_imag] "+&r"(sum10_imag), \ - [sum11_imag] "+&r"(sum11_imag), [sum12_imag] "+&r"(sum12_imag), \ - [sum13_imag] "+&r"(sum13_imag) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ - [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ - [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13), \ - [mask] "r"(0x00020003) \ - :); \ - asm volatile( \ - "xor %[a00s], %[a00], %[maskn];" \ - "xor %[a10s], %[a10], %[maskn];" \ - "xor %[a01s], %[a01], %[maskn];" \ - "xor %[a11s], %[a11], %[maskn];" \ - "vfdotpex.s.h %[sum00_real], %[a00s], %[b00];" \ - "vfdotpex.s.h %[sum10_real], %[a10s], %[b00];" \ - "vfdotpex.s.h %[sum01_real], %[a00s], %[b01];" \ - "vfdotpex.s.h %[sum11_real], %[a10s], %[b01];" \ - "vfdotpex.s.h %[sum02_real], %[a00s], %[b02];" \ - "vfdotpex.s.h %[sum12_real], %[a10s], %[b02];" \ - "vfdotpex.s.h %[sum03_real], %[a00s], %[b03];" \ - "vfdotpex.s.h %[sum13_real], %[a10s], %[b03];" \ - "vfdotpex.s.h %[sum00_real], %[a01s], %[b10];" \ - "vfdotpex.s.h %[sum10_real], %[a11s], %[b10];" \ - "vfdotpex.s.h %[sum01_real], %[a01s], %[b11];" \ - "vfdotpex.s.h %[sum11_real], %[a11s], %[b11];" \ - "vfdotpex.s.h %[sum02_real], %[a01s], %[b12];" \ - "vfdotpex.s.h %[sum12_real], %[a11s], %[b12];" \ - "vfdotpex.s.h %[sum03_real], %[a01s], %[b13];" \ - "vfdotpex.s.h %[sum13_real], %[a11s], %[b13];" \ - : [a00s] "=&r"(a00s), [a01s] "=&r"(a01s), [a10s] "=&r"(a10s), \ - [a11s] "=&r"(a11s), [sum00_real] "+&r"(sum00_real), \ - [sum01_real] "+&r"(sum01_real), [sum02_real] "+&r"(sum02_real), \ - [sum03_real] "+&r"(sum03_real), [sum10_real] "+&r"(sum10_real), \ - [sum11_real] "+&r"(sum11_real), [sum12_real] "+&r"(sum12_real), \ - [sum13_real] "+&r"(sum13_real) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ - [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ - [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13), \ - [maskn] "r"(0x00008000) \ + "vfcpka.h.s %[sum00_real], %[sum00_imag], %[sum00_real];" \ + "vfcpka.h.s %[sum01_real], %[sum01_imag], %[sum01_real];" \ + "vfcpka.h.s %[sum02_real], %[sum02_imag], %[sum02_real];" \ + "vfcpka.h.s %[sum03_real], %[sum03_imag], %[sum03_real];" \ + "vfcpka.h.s %[sum10_real], %[sum10_imag], %[sum10_real];" \ + "vfcpka.h.s %[sum11_real], %[sum11_imag], %[sum11_real];" \ + "vfcpka.h.s %[sum12_real], %[sum12_imag], %[sum12_real];" \ + "vfcpka.h.s %[sum13_real], %[sum13_imag], %[sum13_real];" \ + : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ + [sum02_real] "+&r"(sum02_real), [sum03_real] "+&r"(sum03_real), \ + [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real), \ + [sum12_real] "+&r"(sum12_real), [sum13_real] "+&r"(sum13_real) \ + : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ + [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ + [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ + [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag) \ :); \ - } \ - asm volatile( \ - "vfcpka.h.s %[sum00_real], %[sum00_imag], %[sum00_real];" \ - "vfcpka.h.s %[sum01_real], %[sum01_imag], %[sum01_real];" \ - "vfcpka.h.s %[sum02_real], %[sum02_imag], %[sum02_real];" \ - "vfcpka.h.s %[sum03_real], %[sum03_imag], %[sum03_real];" \ - "vfcpka.h.s %[sum10_real], %[sum10_imag], %[sum10_real];" \ - "vfcpka.h.s %[sum11_real], %[sum11_imag], %[sum11_real];" \ - "vfcpka.h.s %[sum12_real], %[sum12_imag], %[sum12_real];" \ - "vfcpka.h.s %[sum13_real], %[sum13_imag], %[sum13_real];" \ - : [sum00_real] "+&r"(sum00_real), [sum01_real] "+&r"(sum01_real), \ - [sum02_real] "+&r"(sum02_real), [sum03_real] "+&r"(sum03_real), \ - [sum10_real] "+&r"(sum10_real), [sum11_real] "+&r"(sum11_real), \ - [sum12_real] "+&r"(sum12_real), [sum13_real] "+&r"(sum13_real) \ - : [sum00_imag] "r"(sum00_imag), [sum01_imag] "r"(sum01_imag), \ - [sum02_imag] "r"(sum02_imag), [sum03_imag] "r"(sum03_imag), \ - [sum10_imag] "r"(sum10_imag), [sum11_imag] "r"(sum11_imag), \ - [sum12_imag] "r"(sum12_imag), [sum13_imag] "r"(sum13_imag) \ - :); \ - C[(i + 0) * P + k + 0] = (v2h)sum00_real; \ - C[(i + 0) * P + k + 1] = (v2h)sum01_real; \ - C[(i + 0) * P + k + 2] = (v2h)sum02_real; \ - C[(i + 0) * P + k + 3] = (v2h)sum03_real; \ - C[(i + 1) * P + k + 0] = (v2h)sum10_real; \ - C[(i + 1) * P + k + 1] = (v2h)sum11_real; \ - C[(i + 1) * P + k + 2] = (v2h)sum12_real; \ - C[(i + 1) * P + k + 3] = (v2h)sum13_real; + C[(i + 0) * P + k + 0] = (v2h)sum00_real; \ + C[(i + 0) * P + k + 1] = (v2h)sum01_real; \ + C[(i + 0) * P + k + 2] = (v2h)sum02_real; \ + C[(i + 0) * P + k + 3] = (v2h)sum03_real; \ + C[(i + 1) * P + k + 0] = (v2h)sum10_real; \ + C[(i + 1) * P + k + 1] = (v2h)sum11_real; \ + C[(i + 1) * P + k + 2] = (v2h)sum12_real; \ + C[(i + 1) * P + k + 3] = (v2h)sum13_real; \ + } /**************************************************************************/ /**************************************************************************/ // COMPLEX DOTP INSTRUCTIONS #define CMATMUL_CDOTP_1x1_LOOP \ - v2h sum = (v2h)0.0f; \ - for (j = 0; j < N; j++) { \ - v2h a = *(v2h *)&A[2 * (i * M + j)]; \ - v2h b = *(v2h *)&B[2 * (j * P + k)]; \ - asm volatile("fcdotpex.s.h %[sum], %[a], %[b];" \ - : [sum] "+&r"(sum) \ - : [a] "r"(a), [b] "r"(b) \ - :); \ - } \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum; + { \ + v2h sum = (v2h)0.0f; \ + for (j = 0; j < N; j++) { \ + v2h a = *(v2h *)&A[2 * (i * M + j)]; \ + v2h b = *(v2h *)&B[2 * (j * P + k)]; \ + asm volatile("fcdotpex.s.h %[sum], %[a], %[b];" \ + : [sum] "+&r"(sum) \ + : [a] "r"(a), [b] "r"(b) \ + :); \ + } \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum; \ + } #define CMATMUL_CDOTP_2x2_LOOP \ - v2h sum00 = (v2h)0.0f; \ - v2h sum01 = (v2h)0.0f; \ - v2h sum10 = (v2h)0.0f; \ - v2h sum11 = (v2h)0.0f; \ - for (j = 0; j < N; j += 2) { \ - v2h a00 = *(v2h *)&A[2 * ((i + 0) * M + (j + 0))]; \ - v2h a01 = *(v2h *)&A[2 * ((i + 0) * M + (j + 1))]; \ - v2h a10 = *(v2h *)&A[2 * ((i + 1) * M + (j + 0))]; \ - v2h a11 = *(v2h *)&A[2 * ((i + 1) * M + (j + 1))]; \ - v2h b00 = *(v2h *)&B[2 * ((j + 0) * P + (k + 0))]; \ - v2h b01 = *(v2h *)&B[2 * ((j + 0) * P + (k + 1))]; \ - v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + (k + 0))]; \ - v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + (k + 1))]; \ - asm volatile( \ - "fcdotpex.s.h %[sum00], %[a00], %[b00];" \ - "fcdotpex.s.h %[sum10], %[a10], %[b00];" \ - "fcdotpex.s.h %[sum01], %[a00], %[b01];" \ - "fcdotpex.s.h %[sum11], %[a10], %[b01];" \ - "fcdotpex.s.h %[sum00], %[a01], %[b10];" \ - "fcdotpex.s.h %[sum10], %[a11], %[b10];" \ - "fcdotpex.s.h %[sum01], %[a01], %[b11];" \ - "fcdotpex.s.h %[sum11], %[a11], %[b11];" \ - : [sum00] "+&r"(sum00), [sum01] "+&r"(sum01), [sum10] "+&r"(sum10), \ - [sum11] "+&r"(sum11) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ - [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), [b11] "r"(b11) \ - :); \ - } \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum00; \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = sum01; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = sum10; \ - (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; + { \ + v2h sum00 = (v2h)0.0f; \ + v2h sum01 = (v2h)0.0f; \ + v2h sum10 = (v2h)0.0f; \ + v2h sum11 = (v2h)0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = *(v2h *)&A[2 * ((i + 0) * M + (j + 0))]; \ + v2h a01 = *(v2h *)&A[2 * ((i + 0) * M + (j + 1))]; \ + v2h a10 = *(v2h *)&A[2 * ((i + 1) * M + (j + 0))]; \ + v2h a11 = *(v2h *)&A[2 * ((i + 1) * M + (j + 1))]; \ + v2h b00 = *(v2h *)&B[2 * ((j + 0) * P + (k + 0))]; \ + v2h b01 = *(v2h *)&B[2 * ((j + 0) * P + (k + 1))]; \ + v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + (k + 0))]; \ + v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + (k + 1))]; \ + asm volatile( \ + "fcdotpex.s.h %[sum00], %[a00], %[b00];" \ + "fcdotpex.s.h %[sum10], %[a10], %[b00];" \ + "fcdotpex.s.h %[sum01], %[a00], %[b01];" \ + "fcdotpex.s.h %[sum11], %[a10], %[b01];" \ + "fcdotpex.s.h %[sum00], %[a01], %[b10];" \ + "fcdotpex.s.h %[sum10], %[a11], %[b10];" \ + "fcdotpex.s.h %[sum01], %[a01], %[b11];" \ + "fcdotpex.s.h %[sum11], %[a11], %[b11];" \ + : [sum00] "+&r"(sum00), [sum01] "+&r"(sum01), [sum10] "+&r"(sum10), \ + [sum11] "+&r"(sum11) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b10] "r"(b10), [b11] "r"(b11) \ + :); \ + } \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum00; \ + (*(v2h *)&C[2 * ((i + 0) * P + k + 1)]) = sum01; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = sum10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; \ + } #define CMATMUL_CDOTP_2x4_LOOP \ - v2h sum00 = (v2h)0.0f; \ - v2h sum01 = (v2h)0.0f; \ - v2h sum02 = (v2h)0.0f; \ - v2h sum03 = (v2h)0.0f; \ - v2h sum10 = (v2h)0.0f; \ - v2h sum11 = (v2h)0.0f; \ - v2h sum12 = (v2h)0.0f; \ - v2h sum13 = (v2h)0.0f; \ - for (j = 0; j < N; j += 2) { \ - v2h a00 = A[i * M + j + 0]; \ - v2h a01 = A[i * M + j + 1]; \ - v2h a10 = A[(i + 1) * M + j + 0]; \ - v2h a11 = A[(i + 1) * M + j + 1]; \ - v2h b00 = B[j * P + k + 0]; \ - v2h b01 = B[j * P + k + 1]; \ - v2h b02 = B[j * P + k + 2]; \ - v2h b03 = B[j * P + k + 3]; \ - v2h b10 = B[(j + 1) * P + k + 0]; \ - v2h b11 = B[(j + 1) * P + k + 1]; \ - v2h b12 = B[(j + 1) * P + k + 2]; \ - v2h b13 = B[(j + 1) * P + k + 3]; \ - asm volatile( \ - "fcdotpex.s.h %[sum00], %[a00], %[b00];" \ - "fcdotpex.s.h %[sum10], %[a10], %[b00];" \ - "fcdotpex.s.h %[sum01], %[a00], %[b01];" \ - "fcdotpex.s.h %[sum11], %[a10], %[b01];" \ - "fcdotpex.s.h %[sum02], %[a00], %[b02];" \ - "fcdotpex.s.h %[sum12], %[a10], %[b02];" \ - "fcdotpex.s.h %[sum03], %[a00], %[b03];" \ - "fcdotpex.s.h %[sum13], %[a10], %[b03];" \ - "fcdotpex.s.h %[sum00], %[a01], %[b10];" \ - "fcdotpex.s.h %[sum10], %[a11], %[b10];" \ - "fcdotpex.s.h %[sum01], %[a01], %[b11];" \ - "fcdotpex.s.h %[sum11], %[a11], %[b11];" \ - "fcdotpex.s.h %[sum02], %[a01], %[b12];" \ - "fcdotpex.s.h %[sum12], %[a11], %[b12];" \ - "fcdotpex.s.h %[sum03], %[a01], %[b13];" \ - "fcdotpex.s.h %[sum13], %[a11], %[b13];" \ - : [sum00] "+&r"(sum00), [sum01] "+&r"(sum01), [sum02] "+&r"(sum02), \ - [sum03] "+&r"(sum03), [sum10] "+&r"(sum10), [sum11] "+&r"(sum11), \ - [sum12] "+&r"(sum12), [sum13] "+&r"(sum13) \ - : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ - [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ - [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13) \ - :); \ - } \ - C[i * P + k + 0] = sum00; \ - C[i * P + k + 1] = sum01; \ - C[i * P + k + 2] = sum02; \ - C[i * P + k + 3] = sum03; \ - C[(i + 1) * P + k + 0] = sum10; \ - C[(i + 1) * P + k + 1] = sum11; \ - C[(i + 1) * P + k + 2] = sum12; \ - C[(i + 1) * P + k + 3] = sum13; + { \ + v2h sum00 = (v2h)0.0f; \ + v2h sum01 = (v2h)0.0f; \ + v2h sum02 = (v2h)0.0f; \ + v2h sum03 = (v2h)0.0f; \ + v2h sum10 = (v2h)0.0f; \ + v2h sum11 = (v2h)0.0f; \ + v2h sum12 = (v2h)0.0f; \ + v2h sum13 = (v2h)0.0f; \ + for (j = 0; j < N; j += 2) { \ + v2h a00 = *(v2h *)&A[2 * (i * M + j + 0)]; \ + v2h a01 = *(v2h *)&A[2 * (i * M + j + 1)]; \ + v2h a10 = *(v2h *)&A[2 * ((i + 1) * M + j + 0)]; \ + v2h a11 = *(v2h *)&A[2 * ((i + 1) * M + j + 1)]; \ + v2h b00 = *(v2h *)&B[2 * (j * P + k + 0)]; \ + v2h b01 = *(v2h *)&B[2 * (j * P + k + 1)]; \ + v2h b02 = *(v2h *)&B[2 * (j * P + k + 2)]; \ + v2h b03 = *(v2h *)&B[2 * (j * P + k + 3)]; \ + v2h b10 = *(v2h *)&B[2 * ((j + 1) * P + k + 0)]; \ + v2h b11 = *(v2h *)&B[2 * ((j + 1) * P + k + 1)]; \ + v2h b12 = *(v2h *)&B[2 * ((j + 1) * P + k + 2)]; \ + v2h b13 = *(v2h *)&B[2 * ((j + 1) * P + k + 3)]; \ + asm volatile( \ + "fcdotpex.s.h %[sum00], %[a00], %[b00];" \ + "fcdotpex.s.h %[sum10], %[a10], %[b00];" \ + "fcdotpex.s.h %[sum01], %[a00], %[b01];" \ + "fcdotpex.s.h %[sum11], %[a10], %[b01];" \ + "fcdotpex.s.h %[sum02], %[a00], %[b02];" \ + "fcdotpex.s.h %[sum12], %[a10], %[b02];" \ + "fcdotpex.s.h %[sum03], %[a00], %[b03];" \ + "fcdotpex.s.h %[sum13], %[a10], %[b03];" \ + "fcdotpex.s.h %[sum00], %[a01], %[b10];" \ + "fcdotpex.s.h %[sum10], %[a11], %[b10];" \ + "fcdotpex.s.h %[sum01], %[a01], %[b11];" \ + "fcdotpex.s.h %[sum11], %[a11], %[b11];" \ + "fcdotpex.s.h %[sum02], %[a01], %[b12];" \ + "fcdotpex.s.h %[sum12], %[a11], %[b12];" \ + "fcdotpex.s.h %[sum03], %[a01], %[b13];" \ + "fcdotpex.s.h %[sum13], %[a11], %[b13];" \ + : [sum00] "+&r"(sum00), [sum01] "+&r"(sum01), [sum02] "+&r"(sum02), \ + [sum03] "+&r"(sum03), [sum10] "+&r"(sum10), [sum11] "+&r"(sum11), \ + [sum12] "+&r"(sum12), [sum13] "+&r"(sum13) \ + : [a00] "r"(a00), [a01] "r"(a01), [a10] "r"(a10), [a11] "r"(a11), \ + [b00] "r"(b00), [b01] "r"(b01), [b02] "r"(b02), [b03] "r"(b03), \ + [b10] "r"(b10), [b11] "r"(b11), [b12] "r"(b12), [b13] "r"(b13) \ + :); \ + } \ + (*(v2h *)&C[2 * (i * P + k + 0)]) = sum00; \ + (*(v2h *)&C[2 * (i * P + k + 1)]) = sum01; \ + (*(v2h *)&C[2 * (i * P + k + 2)]) = sum02; \ + (*(v2h *)&C[2 * (i * P + k + 3)]) = sum03; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 0)]) = sum10; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 2)]) = sum12; \ + (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = sum13; \ + } + +#define CMATMUL_CDOTP_4x4_LOOP \ + { \ + int32_t const *addr_a = &A[i * N]; \ + int32_t const *addr_b = &B[j]; \ + int32_t const *end_b = &B[N * P + j]; \ + int32_t const *addr_c = &C[i * P + j]; \ + int32_t const P3 = ((int32_t)P - 3) * 4; \ + int32_t const N31 = (-3 * (int32_t)N + 1) * 4; \ + register int32_t k asm("x1") = (int32_t)end_b; \ + __asm__ volatile( \ + ".balign 16 \n\t" \ + "p.lw x3, %[N](%[addr_a]!) \n\t" \ + "p.lw x12, 4(%[addr_b]!) \n\t" \ + "p.lw x13, 4(%[addr_b]!) \n\t" \ + "p.lw x14, 4(%[addr_b]!) \n\t" \ + "p.lw x15, %[P3](%[addr_b]!) \n\t" \ + "p.lw x4, %[N](%[addr_a]!) \n\t" \ + "p.lw x10, %[N](%[addr_a]!) \n\t" \ + "p.lw x11, %[N31](%[addr_a]!) \n\t" \ + "mv x16, zero \n\t" \ + "mv x17, zero \n\t" \ + "mv x18, zero \n\t" \ + "mv x19, zero \n\t" \ + "mv x20, zero \n\t" \ + "mv x21, zero \n\t" \ + "mv x22, zero \n\t" \ + "mv x23, zero \n\t" \ + "mv x24, zero \n\t" \ + "mv x25, zero \n\t" \ + "mv x26, zero \n\t" \ + "mv x27, zero \n\t" \ + "mv x28, zero \n\t" \ + "mv x29, zero \n\t" \ + "mv x30, zero \n\t" \ + "mv x31, zero \n\t" \ + "fcdotpex.s.h x16, x3, x12 \n\t" \ + "fcdotpex.s.h x17, x3, x13 \n\t" \ + "fcdotpex.s.h x18, x3, x14 \n\t" \ + "fcdotpex.s.h x19, x3, x15 \n\t" \ + "p.lw x3, %[N](%[addr_a]!) \n\t" \ + "fcdotpex.s.h x20, x4, x12 \n\t" \ + "fcdotpex.s.h x21, x4, x13 \n\t" \ + "fcdotpex.s.h x22, x4, x14 \n\t" \ + "fcdotpex.s.h x23, x4, x15 \n\t" \ + "p.lw x4, %[N](%[addr_a]!) \n\t" \ + "fcdotpex.s.h x24, x10, x12 \n\t" \ + "fcdotpex.s.h x25, x10, x13 \n\t" \ + "fcdotpex.s.h x26, x10, x14 \n\t" \ + "fcdotpex.s.h x27, x10, x15 \n\t" \ + "p.lw x10, %[N](%[addr_a]!) \n\t" \ + "fcdotpex.s.h x28, x11, x12 \n\t" \ + "p.lw x12, 4(%[addr_b]!) \n\t" \ + "fcdotpex.s.h x29, x11, x13 \n\t" \ + "p.lw x13, 4(%[addr_b]!) \n\t" \ + "fcdotpex.s.h x30, x11, x14 \n\t" \ + "p.lw x14, 4(%[addr_b]!) \n\t" \ + "fcdotpex.s.h x31, x11, x15 \n\t" \ + "p.lw x15, %[P3](%[addr_b]!) \n\t" \ + "p.lw x11, %[N31](%[addr_a]!) \n\t" \ + "1: \n\t" \ + "fcdotpex.s.h x16, x3, x12 \n\t" \ + "fcdotpex.s.h x17, x3, x13 \n\t" \ + "fcdotpex.s.h x20, x4, x12 \n\t" \ + "fcdotpex.s.h x21, x4, x13 \n\t" \ + "fcdotpex.s.h x18, x3, x14 \n\t" \ + "fcdotpex.s.h x22, x4, x14 \n\t" \ + "fcdotpex.s.h x19, x3, x15 \n\t" \ + "p.lw x3, %[N](%[addr_a]!) \n\t" \ + "fcdotpex.s.h x23, x4, x15 \n\t" \ + "p.lw x4, %[N](%[addr_a]!) \n\t" \ + "fcdotpex.s.h x24, x10, x12 \n\t" \ + "fcdotpex.s.h x28, x11, x12 \n\t" \ + "p.lw x12, 4(%[addr_b]!) \n\t" \ + "fcdotpex.s.h x25, x10, x13 \n\t" \ + "fcdotpex.s.h x29, x11, x13 \n\t" \ + "p.lw x13, 4(%[addr_b]!) \n\t" \ + "fcdotpex.s.h x26, x10, x14 \n\t" \ + "fcdotpex.s.h x30, x11, x14 \n\t" \ + "p.lw x14, 4(%[addr_b]!) \n\t" \ + "fcdotpex.s.h x27, x10, x15 \n\t" \ + "fcdotpex.s.h x31, x11, x15 \n\t" \ + "p.lw x15, %[P3](%[addr_b]!) \n\t" \ + "p.lw x10, %[N](%[addr_a]!) \n\t" \ + "p.lw x11, %[N31](%[addr_a]!) \n\t" \ + "bne %[addr_b], x1, 1b \n\t" \ + "fcdotpex.s.h x16, x3, x12 \n\t" \ + "fcdotpex.s.h x17, x3, x13 \n\t" \ + "fcdotpex.s.h x18, x3, x14 \n\t" \ + "p.sw x16, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x19, x3, x15 \n\t" \ + "p.sw x17, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x20, x4, x12 \n\t" \ + "p.sw x18, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x21, x4, x13 \n\t" \ + "p.sw x19, %[P3](%[addr_c]!) \n\t" \ + "fcdotpex.s.h x22, x4, x14 \n\t" \ + "p.sw x20, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x23, x4, x15 \n\t" \ + "p.sw x21, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x24, x10, x12 \n\t" \ + "p.sw x22, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x25, x10, x13 \n\t" \ + "p.sw x23, %[P3](%[addr_c]!) \n\t" \ + "fcdotpex.s.h x26, x10, x14 \n\t" \ + "p.sw x24, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x27, x10, x15 \n\t" \ + "p.sw x25, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x28, x11, x12 \n\t" \ + "p.sw x26, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x29, x11, x13 \n\t" \ + "p.sw x27, %[P3](%[addr_c]!) \n\t" \ + "fcdotpex.s.h x30, x11, x14 \n\t" \ + "p.sw x28, 4(%[addr_c]!) \n\t" \ + "fcdotpex.s.h x31, x11, x15 \n\t" \ + "p.sw x29, 4(%[addr_c]!) \n\t" \ + "p.sw x30, 4(%[addr_c]!) \n\t" \ + "p.sw x31, %[P3](%[addr_c]!) \n\t" \ + : \ + [addr_a] "+&r"(addr_a), [addr_b] "+&r"(addr_b), [addr_c] "+&r"(addr_c) \ + : [N31] "r"(N31), [P3] "r"(P3), [x1] "r"(k), [N] "I"(dim_N * 4) \ + : "x3", "x4", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", \ + "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", \ + "x27", "x28", "x29", "x30", "x31", "memory"); \ + } #define __CDOTP void cmatmul_2x2_f16s(__fp16 const *__restrict__ A, @@ -364,14 +499,13 @@ void cmatmul_2x2_f16p(__fp16 const *__restrict__ A, #endif } } - mempool_log_partial_barrier(2, core_id, numThreads); return; } #define __SHIFT_A -void cmatmul_2x4_f16p(v2h *__restrict__ A, v2h const *__restrict__ B, - v2h *__restrict__ C, uint32_t M, uint32_t N, uint32_t P, - uint32_t core_id, uint32_t numThreads) { +void cmatmul_2x4_f16p(__fp16 *__restrict__ A, __fp16 const *__restrict__ B, + __fp16 *__restrict__ C, uint32_t M, uint32_t N, + uint32_t P, uint32_t core_id, uint32_t numThreads) { uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P @@ -386,7 +520,7 @@ void cmatmul_2x4_f16p(v2h *__restrict__ A, v2h const *__restrict__ B, } } #else - uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); + uint32_t shift_id = (2 * (core_id % NUM_CORES_PER_TILE)) % M; for (k = core_id * 4; k < P; k += 4 * numThreads) { for (i = shift_id; i < M; i += 2) { #ifdef __CDOTP @@ -404,62 +538,42 @@ void cmatmul_2x4_f16p(v2h *__restrict__ A, v2h const *__restrict__ B, } } #endif - mempool_log_partial_barrier(2, core_id, numThreads); return; } -void cmatmul_2x4_folded_f16p(v2h *A, v2h const *__restrict__ B, - v2h *__restrict__ A_folded, v2h *__restrict__ C, - uint32_t M, uint32_t N, uint32_t P, - uint32_t core_id, uint32_t numThreads) { - uint32_t i = 0; // loop counter for M - uint32_t j = 0; // loop counter for N - uint32_t k = 0; // loop counter for P - // Copy multiple A matrices in memory - uint32_t num_copy = NUM_BANKS / (N * M); - for (k = core_id * 4; k < N * M; k += 4 * numThreads) { - v2h a0 = A[k]; - v2h a1 = A[k + 1]; - v2h a2 = A[k + 2]; - v2h a3 = A[k + 3]; - i = k / N; // row_index - j = k % N; // col_index - for (uint32_t idx_copy = 0; idx_copy < num_copy; idx_copy++) { - A_folded[idx_copy * N * M + i * N + j] = a0; - A_folded[idx_copy * N * M + i * N + j + 1] = a1; - A_folded[idx_copy * N * M + i * N + j + 2] = a2; - A_folded[idx_copy * N * M + i * N + j + 3] = a3; +// 4x4 MATMUL +void cmatmul_4x4_f16p(int32_t const *__restrict__ A, + int32_t const *__restrict__ B, int32_t *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t id, + uint32_t numThreads) { + uint32_t shift_id = (4 * (id % NUM_CORES_PER_TILE)) % M; + for (uint32_t j = 4 * id; j < P; j += 4 * numThreads) { + for (uint32_t i = shift_id; i < M; i += 4) { + CMATMUL_CDOTP_4x4_LOOP } - } - A = A_folded + (N * M) * ((core_id * BANKING_FACTOR) / (N * M)); - mempool_log_partial_barrier(2, core_id, numThreads); - // Compute -#ifndef __SHIFT_A - for (k = core_id * 4; k < P; k += 4 * numThreads) { - for (i = 0; i < M; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x4_LOOP; -#else - CMATMUL_2x4_LOOP; -#endif + for (uint32_t i = 0; i < shift_id; i += 4) { + CMATMUL_CDOTP_4x4_LOOP } } -#else - uint32_t shift_id = 2 * (core_id % NUM_CORES_PER_TILE); - for (k = core_id * 4; k < P; k += 4 * numThreads) { - for (i = shift_id; i < M; i += 2) { - // CMATMUL_2x4_LOOP; - CMATMUL_CDOTP_2x4_LOOP; - } - for (i = 0; i < shift_id; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x4_LOOP; -#else - CMATMUL_2x4_LOOP; -#endif + mempool_log_partial_barrier(2, id, numThreads); + return; +} + +void cmatmul_4x4_folded_f16p(int32_t *A_l2, int32_t *A_folded, int32_t *const B, + int32_t *C, uint32_t M, uint32_t N, uint32_t P, + uint32_t core_id, uint32_t numThreads) { + + // Copy multiple A matrices in memory + if (core_id == 0) { + for (uint32_t idx_copy = 0; idx_copy < (BANKING_FACTOR * NUM_CORES); + idx_copy += (M * N)) { + dma_memcpy_blocking(&A_folded[idx_copy], A_l2, M * N * sizeof(int32_t)); } } -#endif + // Cores only fetch from local A + int32_t *A_shifted = A_folded; + A_shifted += (N * M) * ((core_id * BANKING_FACTOR) / (N * M)); mempool_log_partial_barrier(2, core_id, numThreads); + cmatmul_4x4_f16p(A_shifted, B, C, M, N, P, core_id, numThreads); return; } diff --git a/software/runtime/kernel/mempool_cmatmul_q16.h b/software/kernels/baremetal/mempool_cmatmul_q16.h similarity index 99% rename from software/runtime/kernel/mempool_cmatmul_q16.h rename to software/kernels/baremetal/mempool_cmatmul_q16.h index fc020619d..53b84d80c 100644 --- a/software/runtime/kernel/mempool_cmatmul_q16.h +++ b/software/kernels/baremetal/mempool_cmatmul_q16.h @@ -12,7 +12,7 @@ */ #pragma once -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" #define NUM_BANKS (NUM_CORES * BANKING_FACTOR) #define CMATMUL_1x1_LOOP \ diff --git a/software/kernels/baremetal/mempool_linearsolver_f32s.h b/software/kernels/baremetal/mempool_linearsolver_f32s.h index 18e4ec94e..c3f3b6ce1 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f32s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f32s.h @@ -222,4 +222,8 @@ void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, return; } +#else + +#error "ERROR: f32 MMSE functions available only for __XDIVSQRT." + #endif diff --git a/software/runtime/kernel/mempool_linearsolver_q16s.h b/software/kernels/baremetal/mempool_linearsolver_q16s.h similarity index 100% rename from software/runtime/kernel/mempool_linearsolver_q16s.h rename to software/kernels/baremetal/mempool_linearsolver_q16s.h diff --git a/software/kernels/baremetal/mempool_linearsolver_q32p.h b/software/kernels/baremetal/mempool_linearsolver_q32p.h index 5a0f509cc..49b629259 100644 --- a/software/kernels/baremetal/mempool_linearsolver_q32p.h +++ b/software/kernels/baremetal/mempool_linearsolver_q32p.h @@ -24,6 +24,7 @@ increase the utilization of the cores operating on multiple problems. RIGHT */ +#pragma once #include "mempool_sqrt_q32s.h" /** diff --git a/software/kernels/baremetal/mempool_linearsolver_q32s.h b/software/kernels/baremetal/mempool_linearsolver_q32s.h index db5419092..d03ec273f 100644 --- a/software/kernels/baremetal/mempool_linearsolver_q32s.h +++ b/software/kernels/baremetal/mempool_linearsolver_q32s.h @@ -4,6 +4,7 @@ // Author: Marco Bertuletti, ETH Zurich +#pragma once #include "mempool_sqrt_q32s.h" /** diff --git a/software/kernels/baremetal/mempool_matmul_f16.h b/software/kernels/baremetal/mempool_matmul_f16.h index abb9a130b..aa91e740b 100644 --- a/software/kernels/baremetal/mempool_matmul_f16.h +++ b/software/kernels/baremetal/mempool_matmul_f16.h @@ -11,6 +11,7 @@ * C = AB */ +#pragma once #include "builtins_v2.h" void matmul_2x2_single_f16(__fp16 const *__restrict__ A, diff --git a/software/kernels/baremetal/mempool_matmul_f32.h b/software/kernels/baremetal/mempool_matmul_f32.h index 670e725b5..8879fa52d 100644 --- a/software/kernels/baremetal/mempool_matmul_f32.h +++ b/software/kernels/baremetal/mempool_matmul_f32.h @@ -11,6 +11,7 @@ * C = AB */ +#pragma once #include "builtins_v2.h" void matmul_2x2_single_f32(float const *__restrict__ A, diff --git a/software/kernels/baremetal/mempool_matmul_i16p.h b/software/kernels/baremetal/mempool_matmul_i16p.h index 08137bf30..1ffeb0116 100644 --- a/software/kernels/baremetal/mempool_matmul_i16p.h +++ b/software/kernels/baremetal/mempool_matmul_i16p.h @@ -5,6 +5,7 @@ // Author: Samuel Riedel, ETH Zurich // Sergio Mazzola, ETH Zurich +#pragma once #include "builtins_v2.h" /* This library implements the matrix multiplication for several data widths diff --git a/software/kernels/baremetal/mempool_matmul_i8s.h b/software/kernels/baremetal/mempool_matmul_i8s.h index 74abfa95f..f50b9f241 100644 --- a/software/kernels/baremetal/mempool_matmul_i8s.h +++ b/software/kernels/baremetal/mempool_matmul_i8s.h @@ -5,6 +5,7 @@ // Author: Samuel Riedel, ETH Zurich // Sergio Mazzola, ETH Zurich +#pragma once #include "builtins_v2.h" /* This library implements the matrix multiplication for several data widths diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index e639918ce..fef02faaf 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -6,8 +6,18 @@ // Author: Aofeng Aoshen, ETH Zurich #pragma once +#include "builtins_v2.h" #define N_BANKS (NUM_CORES * BANKING_FACTOR) +/****************************************************************************** + _____ __ _ + |__ // _(_)_ __ __ __ + / /| |_| | '_ \\ \/ / + / /_| _| | | | |> < + /____|_| |_|_| |_/_/\_\ + +******************************************************************************/ + /** @brief Computes the Hermitian matrix G = (H'*H + pS^2I). @param[in] pH points to input matrix @@ -246,7 +256,17 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, return; } -/** VECTORIZED CODE +/****************************************************************************** + __ ___ _ _ ____ _ + \ \ / (_) __| | ___ _ __ (_)_ __ __ _ | _ \ ___ | |_ _ __ + \ \ /\ / /| |/ _` |/ _ \ '_ \| | '_ \ / _` |_____| | | |/ _ \| __| '_ \ + \ V V / | | (_| | __/ | | | | | | | (_| |_____| |_| | (_) | |_| |_) | + \_/\_/ |_|\__,_|\___|_| |_|_|_| |_|\__, | |____/ \___/ \__| .__/ + |___/ |_| + +******************************************************************************/ + +/* VECTORIZED CODE @brief Computes the Hermitian matrix G = (H'*H + pS^2I). @param[in] pH points to input matrix @param[in] pG points to output matrix diff --git a/software/runtime/kernel/mempool_mimo_mmse_q16s.h b/software/kernels/baremetal/mempool_mimo_mmse_q16s.h similarity index 99% rename from software/runtime/kernel/mempool_mimo_mmse_q16s.h rename to software/kernels/baremetal/mempool_mimo_mmse_q16s.h index 931d2c800..32adfb684 100644 --- a/software/runtime/kernel/mempool_mimo_mmse_q16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_q16s.h @@ -5,9 +5,6 @@ // Author: Marco Bertuletti, ETH Zurich // Author: Aofeng Aoshen, ETH Zurich -#pragma once -#define N_BANKS (NUM_CORES * BANKING_FACTOR) - /** VECTORIZED CODE @brief Computes the Hermitian matrix G = (H'*H + pS^2I). @param[in] pH points to input matrix diff --git a/software/kernels/baremetal/mempool_radix2_cfft_q16.h b/software/kernels/baremetal/mempool_radix2_cfft_q16.h index bc2f07530..781de7af3 100644 --- a/software/kernels/baremetal/mempool_radix2_cfft_q16.h +++ b/software/kernels/baremetal/mempool_radix2_cfft_q16.h @@ -4,8 +4,9 @@ // Author: Marco Bertuletti, ETH Zurich -#define MIN(x, y) (((x) < (y)) ? (x) : (y)) +#pragma once #include "builtins_v2.h" +#define MIN(x, y) (((x) < (y)) ? (x) : (y)) void mempool_radix2_cfft_q16s(int16_t *pSrc16, uint32_t fftLen, int16_t *pCoef16) { diff --git a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h b/software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h similarity index 99% rename from software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h rename to software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h index 7c305b222..edf7ea735 100644 --- a/software/runtime/kernel/mempool_radix4_cfft_butterfly_f16.h +++ b/software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h @@ -5,7 +5,7 @@ // Author: Marco Bertuletti, ETH Zurich #pragma once -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" /** @brief First butterfly stage. diff --git a/software/runtime/kernel/mempool_radix4_cfft_f16p.h b/software/kernels/baremetal/mempool_radix4_cfft_f16p.h similarity index 72% rename from software/runtime/kernel/mempool_radix4_cfft_f16p.h rename to software/kernels/baremetal/mempool_radix4_cfft_f16p.h index 5699480fb..c82684995 100644 --- a/software/runtime/kernel/mempool_radix4_cfft_f16p.h +++ b/software/kernels/baremetal/mempool_radix4_cfft_f16p.h @@ -6,7 +6,7 @@ #pragma once #define BITREVERSETABLE -#include "xpulp/builtins_v2.h" +#include "builtins_v2.h" #define MIN(x, y) (((x) < (y)) ? (x) : (y)) // CoSi: (Si, Co) -> C: (Co, -Si) @@ -215,6 +215,10 @@ void mempool_radix4_cfft_f16p_scheduler( __fp16 t0, t1, t2, t3, t4, t5; v2h CoSi1, CoSi2, CoSi3; v2h C1, C2, C3; + __fp16 *pIn; + __fp16 *pOut; + __fp16 *pTmp; + #ifdef FOLDED_TWIDDLES uint32_t n1, n2, n2_store; uint32_t i0, k, ic, ic_store; @@ -223,7 +227,6 @@ void mempool_radix4_cfft_f16p_scheduler( uint32_t i0, k, ic; uint32_t twidCoefModifier = 1U; #endif - __fp16 *pTmp; /* FIRST STAGE */ n1 = fftLen; @@ -237,9 +240,8 @@ void mempool_radix4_cfft_f16p_scheduler( LOAD_STORE_TWIDDLEFACT; SHUFFLE_TWIDDLEFACT; for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { - __fp16 *pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * fftLen; - __fp16 *pOut = - pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * fftLen; + pOut = pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); radix4_butterfly_first(pIn, pOut, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, C3); } @@ -268,10 +270,8 @@ void mempool_radix4_cfft_f16p_scheduler( SHUFFLE_TWIDDLEFACT; for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { - __fp16 *pIn = - pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); - __fp16 *pOut = - pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + pOut = pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); radix4_butterfly_middle(pIn, pOut, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, C3); } @@ -288,10 +288,15 @@ void mempool_radix4_cfft_f16p_scheduler( /* LAST STAGE */ for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, fftLen >> 2U); i0++) { for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { - __fp16 *pIn = - pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); - __fp16 *pOut = - pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + +#if defined(BITREVERSETABLE) + uint32_t col_shift = fftLen; +#else + uint32_t col_shift = fftLen / 4; +#endif + + pIn = pSrc16 + idx_row * (N_BANKS * 8) + 2 * col_id * (fftLen / 4); + pOut = pDst16 + idx_row * (N_BANKS * 8) + 2 * col_id * col_shift; radix4_butterfly_last(pIn, pOut, i0); } } @@ -300,22 +305,19 @@ void mempool_radix4_cfft_f16p_scheduler( pDst16 = pTmp; mempool_log_partial_barrier(2, absolute_core_id, n_FFTs_COL * nPE); mempool_stop_benchmark(); - mempool_start_benchmark(); - /* BITREVERSAL */ - // Bitreversal stage stores in the sequential addresses + if (bitReverseFlag) { #ifdef BITREVERSETABLE - pSrc16 = pSrc16 + 2 * col_id * (fftLen / 4); - pDst16 = pDst16 + 2 * col_id * fftLen; + /* BITREVERSAL */ + mempool_start_benchmark(); + pIn = pSrc16 + 2 * col_id * fftLen; + uint32_t addr1, addr2, addr3, addr4; + uint32_t s2 = 0x00020002; + uint32_t tmpa1, tmpa2, tmpa3, tmpa4; + uint32_t tmpb1, tmpb2, tmpb3, tmpb4; + int32_t a1, a2, a3, a4; + int32_t b1, b2, b3, b4; for (ic = 8 * core_id; ic < bitReverseLen; ic += 8 * nPE) { - uint32_t addr1, addr2, addr3, addr4; - uint32_t tmpa1, tmpa2, tmpa3, tmpa4; - uint32_t tmpb1, tmpb2, tmpb3, tmpb4; - uint32_t a1, a2, a3, a4; - uint32_t b1, b2, b3, b4; - uint32_t a1_load, a2_load, a3_load, a4_load; - uint32_t b1_load, b2_load, b3_load, b4_load; - uint32_t s2 = 0x00020002; addr1 = *(uint32_t *)&pBitRevTable[ic]; addr2 = *(uint32_t *)&pBitRevTable[ic + 2]; addr3 = *(uint32_t *)&pBitRevTable[ic + 4]; @@ -324,67 +326,59 @@ void mempool_radix4_cfft_f16p_scheduler( "pv.sra.h %[addr2],%[addr2],%[s2];" "pv.sra.h %[addr3],%[addr3],%[s2];" "pv.sra.h %[addr4],%[addr4],%[s2];" - "pv.extract.h %[a1],%[addr1],0;" - "pv.extract.h %[a2],%[addr2],0;" - "pv.extract.h %[a3],%[addr3],0;" - "pv.extract.h %[a4],%[addr4],0;" - "pv.extract.h %[b1],%[addr1],1;" - "pv.extract.h %[b2],%[addr2],1;" - "pv.extract.h %[b3],%[addr3],1;" - "pv.extract.h %[b4],%[addr4],1;" + "pv.extract.h %[a1],%[addr1],1;" + "pv.extract.h %[a2],%[addr2],1;" + "pv.extract.h %[a3],%[addr3],1;" + "pv.extract.h %[a4],%[addr4],1;" + "pv.extract.h %[b1],%[addr1],0;" + "pv.extract.h %[b2],%[addr2],0;" + "pv.extract.h %[b3],%[addr3],0;" + "pv.extract.h %[b4],%[addr4],0;" : [a1] "=r"(a1), [a2] "=r"(a2), [a3] "=r"(a3), [a4] "=r"(a4), [b1] "=r"(b1), [b2] "=r"(b2), [b3] "=r"(b3), [b4] "=r"(b4), [addr1] "+&r"(addr1), [addr2] "+&r"(addr2), [addr3] "+&r"(addr3), [addr4] "+&r"(addr4) : [s2] "r"(s2) :); - // Compute the local addresses from the natural order ones - a1_load = (a1 % 4) * 2 * N_BANKS + 2 * (a1 / 4); - a2_load = (a2 % 4) * 2 * N_BANKS + 2 * (a2 / 4); - a3_load = (a3 % 4) * 2 * N_BANKS + 2 * (a3 / 4); - a4_load = (a4 % 4) * 2 * N_BANKS + 2 * (a4 / 4); - b1_load = (b1 % 4) * 2 * N_BANKS + 2 * (b1 / 4); - b2_load = (b2 % 4) * 2 * N_BANKS + 2 * (b2 / 4); - b3_load = (b3 % 4) * 2 * N_BANKS + 2 * (b3 / 4); - b4_load = (b4 % 4) * 2 * N_BANKS + 2 * (b4 / 4); - for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { - uint16_t *ptr1 = (uint16_t *)(pSrc16 + idx_row * (N_BANKS * 8)); - uint16_t *ptr2 = (uint16_t *)(pDst16 + idx_row * (N_BANKS * 8)); + for (uint32_t idx_row = 0; idx_row < N_FFTs_ROW; idx_row++) { + uint16_t *ptr = (uint16_t *)(pIn + idx_row * (N_BANKS * 8)); // Load at address a - tmpa1 = *(uint32_t *)&ptr1[a1_load]; - tmpa2 = *(uint32_t *)&ptr1[a2_load]; - tmpa3 = *(uint32_t *)&ptr1[a3_load]; - tmpa4 = *(uint32_t *)&ptr1[a4_load]; + tmpa1 = *(uint32_t *)&ptr[a1]; + tmpa2 = *(uint32_t *)&ptr[a2]; + tmpa3 = *(uint32_t *)&ptr[a3]; + tmpa4 = *(uint32_t *)&ptr[a4]; // Load at address b - tmpb1 = *(uint32_t *)&ptr1[b1_load]; - tmpb2 = *(uint32_t *)&ptr1[b2_load]; - tmpb3 = *(uint32_t *)&ptr1[b3_load]; - tmpb4 = *(uint32_t *)&ptr1[b4_load]; + tmpb1 = *(uint32_t *)&ptr[b1]; + tmpb2 = *(uint32_t *)&ptr[b2]; + tmpb3 = *(uint32_t *)&ptr[b3]; + tmpb4 = *(uint32_t *)&ptr[b4]; // Swap a with b - *((uint32_t *)&ptr2[b1]) = tmpa1; - *((uint32_t *)&ptr2[b2]) = tmpa2; - *((uint32_t *)&ptr2[b3]) = tmpa3; - *((uint32_t *)&ptr2[b4]) = tmpa4; + *((uint32_t *)&ptr[b1]) = tmpa1; + *((uint32_t *)&ptr[b2]) = tmpa2; + *((uint32_t *)&ptr[b3]) = tmpa3; + *((uint32_t *)&ptr[b4]) = tmpa4; // Swap b with a - *((uint32_t *)&ptr2[a1]) = tmpb1; - *((uint32_t *)&ptr2[a2]) = tmpb2; - *((uint32_t *)&ptr2[a3]) = tmpb3; - *((uint32_t *)&ptr2[a4]) = tmpb4; + *((uint32_t *)&ptr[a1]) = tmpb1; + *((uint32_t *)&ptr[a2]) = tmpb2; + *((uint32_t *)&ptr[a3]) = tmpb3; + *((uint32_t *)&ptr[a4]) = tmpb4; } } #else - uint16_t *ptr1 = (uint16_t *)(pSrc16 + 2 * col_id * (fftLen / 4)); - uint16_t *ptr2 = (uint16_t *)(pDst16 + 2 * col_id * fftLen); - for (ic = core_id * 16; ic < MIN(core_id * 16 + 16, fftLen >> 2U); - ic += 4) { - uint32_t idx0 = ic; - uint32_t idx1 = ic + 1; - uint32_t idx2 = ic + 2; - uint32_t idx3 = ic + 3; - uint32_t idx_result0 = 0; - uint32_t idx_result1 = 0; - uint32_t idx_result2 = 0; - uint32_t idx_result3 = 0; + mempool_start_benchmark(); + int16_t *ptr1; + int16_t *ptr2; + uint32_t idx0, idx1, idx2, idx3; + uint32_t idx_result0, idx_result1, idx_result2, idx_result3; + for (ic = core_id * 4; ic < fftLen; ic += nPE * 4) { + idx_result0 = 0; + idx_result1 = 0; + idx_result2 = 0; + idx_result3 = 0; + idx0 = ic; + idx1 = ic + 1; + idx2 = ic + 2; + idx3 = ic + 3; for (k = 0; k < LOG2; k++) { idx_result0 = (idx_result0 << 1U) | (idx0 & 1U); idx_result1 = (idx_result1 << 1U) | (idx1 & 1U); @@ -395,29 +389,20 @@ void mempool_radix4_cfft_f16p_scheduler( idx2 = idx2 >> 1U; idx3 = idx3 >> 1U; } + idx0 = ic / 4; + idx1 = ic / 4 + N_BANKS; + idx2 = ic / 4 + 2 * N_BANKS; + idx3 = ic / 4 + 3 * N_BANKS; for (uint32_t idx_row = 0; idx_row < n_FFTs_ROW; idx_row++) { - uint32_t addr_src0 = (idx0 / 4) + (idx0 % 4) * N_BANKS; - uint32_t addr_src1 = (idx1 / 4) + (idx1 % 4) * N_BANKS; - uint32_t addr_src2 = (idx2 / 4) + (idx2 % 4) * N_BANKS; - uint32_t addr_src3 = (idx3 / 4) + (idx3 % 4) * N_BANKS; - uint32_t addr_dst0 = idx_result0; - uint32_t addr_dst1 = idx_result1; - uint32_t addr_dst2 = idx_result2; - uint32_t addr_dst3 = idx_result3; - addr_src0 += idx_row * (N_BANKS * 8); - addr_src1 += idx_row * (N_BANKS * 8); - addr_src2 += idx_row * (N_BANKS * 8); - addr_src3 += idx_row * (N_BANKS * 8); - addr_dst0 += idx_row * (N_BANKS * 8); - addr_dst1 += idx_row * (N_BANKS * 8); - addr_dst2 += idx_row * (N_BANKS * 8); - addr_dst3 += idx_row * (N_BANKS * 8); - *((uint32_t *)&ptr2[addr_dst0]) = (uint32_t)ptr1[addr_src0]; - *((uint32_t *)&ptr2[addr_dst1]) = (uint32_t)ptr1[addr_src1]; - *((uint32_t *)&ptr2[addr_dst2]) = (uint32_t)ptr1[addr_src2]; - *((uint32_t *)&ptr2[addr_dst3]) = (uint32_t)ptr1[addr_src3]; + ptr1 = pSrc16 + 2 * col_id * (fftLen / 4) + idx_row * (N_BANKS * 8); + ptr2 = pDst16 + 2 * col_id * fftLen + idx_row * (N_BANKS * 8); + *((uint32_t *)&ptr2[2 * idx_result0]) = *((uint32_t *)&ptr1[2 * idx0]); + *((uint32_t *)&ptr2[2 * idx_result1]) = *((uint32_t *)&ptr1[2 * idx1]); + *((uint32_t *)&ptr2[2 * idx_result2]) = *((uint32_t *)&ptr1[2 * idx2]); + *((uint32_t *)&ptr2[2 * idx_result3]) = *((uint32_t *)&ptr1[2 * idx3]); } } + mempool_stop_benchmark(); #endif } mempool_log_partial_barrier(2, absolute_core_id, nPE); diff --git a/software/kernels/baremetal/mempool_radix4_cfft_q16p.h b/software/kernels/baremetal/mempool_radix4_cfft_q16p.h index 0e44ad28b..e91602866 100644 --- a/software/kernels/baremetal/mempool_radix4_cfft_q16p.h +++ b/software/kernels/baremetal/mempool_radix4_cfft_q16p.h @@ -197,7 +197,14 @@ void mempool_radix4by2_cfft_q16p(int16_t *pSrc, uint32_t fftLen, mempool_log_barrier(2, core_id); return; } - +/***************************************************************************** + _ _ _____ _ _ + | | ___ ___ __ _| | _ __ ___ ___ _ __ ___ | ___|__ | | __| | + | | / _ \ / __/ _` | |_____| '_ ` _ \ / _ \ '_ ` _ \ | |_ / _ \| |/ _` | + | |__| (_) | (_| (_| | |_____| | | | | | __/ | | | | |_ | _| (_) | | (_| | + |_____\___/ \___\__,_|_| |_| |_| |_|\___|_| |_| |_(_) |_| \___/|_|\__,_| + +*****************************************************************************/ /** @brief Folding in local memory function @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are diff --git a/software/kernels/baremetal/mempool_radix4_cfft_q16s.h b/software/kernels/baremetal/mempool_radix4_cfft_q16s.h index 72d52216f..f7af2dfaf 100644 --- a/software/kernels/baremetal/mempool_radix4_cfft_q16s.h +++ b/software/kernels/baremetal/mempool_radix4_cfft_q16s.h @@ -6,6 +6,15 @@ #include "builtins_v2.h" +/****************************************************************************** + ____ ___ ____ ______ __ _________ ___ __ __ _ + | _ \|_ _/ ___| / ___\ \ / / |___ /___ \|_ _| \/ | / \ + | |_) || |\___ \| | \ \ / /____ |_ \ __) || || |\/| | / _ \ + | _ < | | ___) | |___ \ V /_____|__) / __/ | || | | |/ ___ \ + |_| \_\___|____/ \____| \_/ |____/_____|___|_| |_/_/ \_\ + +******************************************************************************/ + void mempool_radix4_cfft_q16s_riscv32(int16_t *pIn, uint32_t fftLen, int16_t *pCoef16, uint32_t twidCoefModifier) { @@ -298,6 +307,16 @@ void mempool_radix4_cfft_q16s_riscv32(int16_t *pIn, uint32_t fftLen, /* END OF LAST STAGE PROCESSING */ } +/****************************************************************************** + __ __ _ _ + \ \/ /_ __ _ _| |_ __ (_)_ __ ___ __ _ + \ /| '_ \| | | | | '_ \| | '_ ` _ \ / _` | + / \| |_) | |_| | | |_) | | | | | | | (_| | + /_/\_\ .__/ \__,_|_| .__/|_|_| |_| |_|\__, | + |_| |_| |___/ + +******************************************************************************/ + void mempool_radix4_cfft_q16s_xpulpimg(int16_t *pSrc16, uint32_t fftLen, int16_t *pCoef16, uint32_t twidCoefModifier) { diff --git a/software/runtime/data/data_cfft_radix4_f16.h.tpl b/software/runtime/data/data_cfft_radix4_f16.h.tpl deleted file mode 100644 index 8b1378917..000000000 --- a/software/runtime/data/data_cfft_radix4_f16.h.tpl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/runtime/data/data_cfft_radix4_q16.h.tpl b/software/runtime/data/data_cfft_radix4_q16.h.tpl deleted file mode 100644 index 8b1378917..000000000 --- a/software/runtime/data/data_cfft_radix4_q16.h.tpl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/runtime/data/data_cmatmul_q16.py b/software/runtime/data/data_cmatmul_q16.py deleted file mode 100644 index b0aa7b406..000000000 --- a/software/runtime/data/data_cmatmul_q16.py +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2022 ETH Zurich and University of Bologna. -# Solderpad Hardware License, Version 0.51, see LICENSE for details. -# SPDX-License-Identifier: SHL-0.51 - -# This script generates data for the fp16 matmul. -# Author: Marco Bertuletti - -import numpy as np -import argparse -import pathlib -from mako.template import Template - - -################## -# compute_result # -################## - -def gen_data_header_file(outdir: pathlib.Path.cwd(), - tpl: pathlib.Path.cwd(), **kwargs): - - file = outdir / f"{kwargs['name']}.h" - - print(tpl, outdir, kwargs['name']) - - template = Template(filename=str(tpl)) - with file.open('w') as f: - f.write(template.render(**kwargs)) - - -def main(): - - parser = argparse.ArgumentParser(description='Generate data for kernels') - parser.add_argument( - "-o", - "--outdir", - type=pathlib.Path, - default=pathlib.Path(__file__).parent.absolute(), - required=False, - help='Select out directory of generated data files' - ) - parser.add_argument( - "-t", - "--tpl", - type=pathlib.Path, - required=False, - default=pathlib.Path(__file__).parent.absolute() / - "data_cmatmul_q16.h.tpl", - help='Path to mako template' - ) - parser.add_argument( - "-v", - "--verbose", - action='store_true', - help='Set verbose' - ) - parser.add_argument( - "-m", - "--dim_m", - type=int, - required=False, - default=16, - help='First dimension.' - ) - parser.add_argument( - "-n", - "--dim_n", - type=int, - required=False, - default=16, - help='Second dimension.' - ) - parser.add_argument( - "-p", - "--dim_p", - type=int, - required=False, - default=16, - help='Third dimension.' - ) - - args = parser.parse_args() - - matrix_M = args.dim_m - matrix_N = args.dim_n - matrix_P = args.dim_p - MAX = 2**15 - FIXED_POINT = 15 - - # Create sparse matrix - A = np.random.randint(-MAX, MAX - 1, size=(matrix_M, matrix_N)) + 1j * \ - np.random.randint(-MAX, MAX - 1, size=(matrix_M, matrix_N)) - B = np.random.randint(-MAX, MAX - 1, size=(matrix_N, matrix_P)) + 1j * \ - np.random.randint(-MAX, MAX - 1, size=(matrix_N, matrix_P)) - - C = np.zeros((matrix_M, matrix_P), dtype=complex) - for k in range(matrix_P): - for i in range(matrix_M): - for j in range(matrix_N): - a = A[i][j].real - b = A[i][j].imag - c = B[j][k].real - d = B[j][k].imag - C[i][k] += (a * c - b * d) // (1 << FIXED_POINT) - C[i][k] += (b * c + a * d) // (1 << FIXED_POINT) * 1j - - A = np.reshape(A, (matrix_M * matrix_N), order='C') - B = np.reshape(B, (matrix_N * matrix_P), order='C') - C = np.reshape(C, (matrix_M * matrix_P), order='C') - - A = np.column_stack((A.imag, A.real)).astype(np.int16).flatten() - B = np.column_stack((B.imag, B.real)).astype(np.int16).flatten() - C = np.column_stack((C.imag, C.real)).astype(np.int16).flatten() - - kwargs = { - 'name': 'data_cmatmul_q16', - 'A': A, - 'B': B, - 'C': C, - 'matrix_M': matrix_M, - 'matrix_N': matrix_N, - 'matrix_P': matrix_P} - - gen_data_header_file(args.outdir, args.tpl, **kwargs) - - -if __name__ == "__main__": - main() diff --git a/software/runtime/data/data_ofdm.py b/software/runtime/data/data_ofdm.py deleted file mode 100644 index 8b1378917..000000000 --- a/software/runtime/data/data_ofdm.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/runtime/kernel/mempool_checks.h b/software/runtime/kernel/mempool_checks.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/software/runtime/kernel/mempool_chest_f16.h b/software/runtime/kernel/mempool_chest_f16.h deleted file mode 100644 index ba99a9e3f..000000000 --- a/software/runtime/kernel/mempool_chest_f16.h +++ /dev/null @@ -1,372 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#pragma once -#define __CDOTP -#define __MUL - -/* a[i] = ar[i] + i * ai[j] - - out[i][j] = a[i] / c[j] - out[i][j + 1] = a[i] / c[j + 1h - out[i][j + 2] = a[i] / c[j + 2] - out[i][j + 3] = a[i] / c[j + 3]*/ - -#ifdef __XDIVSQRT -#define DIV_LOOP(ab, ab_n, i) \ - re0 = 0; \ - re1 = 0; \ - re2 = 0; \ - re3 = 0; \ - im0 = 0; \ - im1 = 0; \ - im2 = 0; \ - im3 = 0; \ - D0 = 0; \ - D1 = 0; \ - D2 = 0; \ - D3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ - asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ - "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ - "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ - "vfdotpex.s.h %[D3], %[cd3], %[cd3];" \ - "vfdotpex.s.h %[re0], %[x], %[cd0];" \ - "vfdotpex.s.h %[re1], %[x], %[cd1];" \ - "vfdotpex.s.h %[re2], %[x], %[cd2];" \ - "vfdotpex.s.h %[re3], %[x], %[cd3];" \ - "vfdotpex.s.h %[im0], %[y], %[cd0];" \ - "vfdotpex.s.h %[im1], %[y], %[cd1];" \ - "vfdotpex.s.h %[im2], %[y], %[cd2];" \ - "vfdotpex.s.h %[im3], %[y], %[cd3];" \ - "fdiv.s %[re0], %[re0], %[D0];" \ - "fdiv.s %[re1], %[re1], %[D1];" \ - "fdiv.s %[re2], %[re2], %[D2];" \ - "fdiv.s %[re3], %[re3], %[D3];" \ - "fdiv.s %[im0], %[im0], %[D0];" \ - "fdiv.s %[im1], %[im1], %[D1];" \ - "fdiv.s %[im2], %[im2], %[D2];" \ - "fdiv.s %[im3], %[im3], %[D3];" \ - "vfcpka.h.s %[re0], %[re0], %[im0];" \ - "vfcpka.h.s %[re1], %[re1], %[im1];" \ - "vfcpka.h.s %[re2], %[re2], %[im2];" \ - "vfcpka.h.s %[re3], %[re3], %[im3];" \ - : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), \ - [D3] "+&r"(D3), [re0] "+&r"(re0), [re1] "+&r"(re1), \ - [re2] "+&r"(re2), [re3] "+&r"(re3), [im0] "+&r"(im0), \ - [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) \ - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ - [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ - :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; -#else -#define DIV_LOOP(ab, ab_n, i) \ - re0 = 0; \ - re1 = 0; \ - re2 = 0; \ - re3 = 0; \ - im0 = 0; \ - im1 = 0; \ - im2 = 0; \ - im3 = 0; \ - D0 = 0; \ - D1 = 0; \ - D2 = 0; \ - D3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ - asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ - "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ - "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ - "vfdotpex.s.h %[D3], %[cd3], %[cd3];" \ - "vfdotpex.s.h %[re0], %[x], %[cd0];" \ - "vfdotpex.s.h %[re1], %[x], %[cd1];" \ - "vfdotpex.s.h %[re2], %[x], %[cd2];" \ - "vfdotpex.s.h %[re3], %[x], %[cd3];" \ - "vfdotpex.s.h %[im0], %[y], %[cd0];" \ - "vfdotpex.s.h %[im1], %[y], %[cd1];" \ - "vfdotpex.s.h %[im2], %[y], %[cd2];" \ - "vfdotpex.s.h %[im3], %[y], %[cd3];" \ - : [D0] "+&r"(D0), [D1] "+&r"(D1), [D2] "+&r"(D2), \ - [D3] "+&r"(D3), [re0] "+&r"(re0), [re1] "+&r"(re1), \ - [re2] "+&r"(re2), [re3] "+&r"(re3), [im0] "+&r"(im0), \ - [im1] "+&r"(im1), [im2] "+&r"(im2), [im3] "+&r"(im3) \ - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ - [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ - :); \ - re0 = re0 / D0; \ - re1 = re1 / D1; \ - re2 = re2 / D2; \ - re3 = re3 / D3; \ - im0 = im0 / D0; \ - im1 = im1 / D1; \ - im2 = im2 / D2; \ - im3 = im3 / D3; \ - asm volatile("vfcpka.h.s %[re0], %[re0], %[im0];" \ - "vfcpka.h.s %[re1], %[re1], %[im1];" \ - "vfcpka.h.s %[re2], %[re2], %[im2];" \ - "vfcpka.h.s %[re3], %[re3], %[im3];" \ - : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ - [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ - [im2] "+&r"(im2), [im3] "+&r"(im3) \ - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ - [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ - :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; -#endif - -/* a[i] = ar[i] + i * ai[j] - - out[i][j] = a[i] * c[j] - out[i][j + 1] = a[i] * c[j + 1] - out[i][j + 2] = a[i] * c[j + 2] - out[i][j + 3] = a[i] * c[j + 3]*/ - -#define MUL_LOOP(ab, ab_n, i) \ - re0 = 0; \ - re1 = 0; \ - re2 = 0; \ - re3 = 0; \ - im0 = 0; \ - im1 = 0; \ - im2 = 0; \ - im3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ - asm volatile("vfdotpex.s.h %[re0], %[x], %[cd0];" \ - "vfdotpex.s.h %[re1], %[x], %[cd1];" \ - "vfdotpex.s.h %[re2], %[x], %[cd2];" \ - "vfdotpex.s.h %[re3], %[x], %[cd3];" \ - "vfdotpex.s.h %[im0], %[y], %[cd0];" \ - "vfdotpex.s.h %[im1], %[y], %[cd1];" \ - "vfdotpex.s.h %[im2], %[y], %[cd2];" \ - "vfdotpex.s.h %[im3], %[y], %[cd3];" \ - : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ - [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ - [im2] "+&r"(im2), [im3] "+&r"(im3) \ - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ - [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ - :); \ - asm volatile( \ - "vfcpka.h.s %[re0], %[re0], %[im0];" \ - "vfcpka.h.s %[re1], %[re1], %[im1];" \ - "vfcpka.h.s %[re2], %[re2], %[im2];" \ - "vfcpka.h.s %[re3], %[re3], %[im3];" \ - : [re0] "+&r"(re0), [re1] "+&r"(re1), [re2] "+&r"(re2), \ - [re3] "+&r"(re3), [im0] "+&r"(im0), [im1] "+&r"(im1), \ - [im2] "+&r"(im2), [im3] "+&r"(im3) \ - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3) \ - :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; - -#define CMUL_LOOP(ab, i) \ - sum0 = 0; \ - sum1 = 0; \ - sum2 = 0; \ - sum3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ - asm volatile("fcdotpex.s.h %[sum0], %[x], %[cd0];" \ - "fcdotpex.s.h %[sum1], %[x], %[cd1];" \ - "fcdotpex.s.h %[sum2], %[x], %[cd2];" \ - "fcdotpex.s.h %[sum3], %[x], %[cd3];" \ - : [sum0] "+&r"(sum0), [sum1] "+&r"(sum1), [sum2] "+&r"(sum2), \ - [sum3] "+&r"(sum3) \ - : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ - [cd3] "r"(cd3), [x] "r"(ab) \ - :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = sum0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = sum1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = sum2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = sum3; - -#define SHUFFLE_A \ - asm volatile( \ - "xor %[ab_n0], %[ab0], %[neg_mask];" \ - "xor %[ab_n1], %[ab1], %[neg_mask];" \ - "xor %[ab_n2], %[ab2], %[neg_mask];" \ - "xor %[ab_n3], %[ab3], %[neg_mask];" \ - "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" \ - "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" \ - "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" \ - "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" \ - : [ab_n0] "+&r"(ab_n0), [ab_n1] "+&r"(ab_n1), [ab_n2] "+&r"(ab_n2), \ - [ab_n3] "+&r"(ab_n3) \ - : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), \ - [neg_mask] "r"(0x00008000), [mask] "r"(0x00020003) \ - :); \ -/** \ - @brief Block-type channel estimation. \ - @param[in] pH points to output channel \ - @param[in] pPilotRX points to received symbol \ - @param[in] pPilotTX points to sent pilot \ - @param[in] nTX Number of transmitters \ - @param[in] nRX Number of receivers \ - @param[in] nSc Number of Subcarriers \ - @return none \ -*/ -void mempool_chest_f16s_unrolled4(__fp16 *pH, __fp16 *pPilotRX, - __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, - uint32_t nSc) { - - uint32_t ab0, ab1, ab2, ab3; - uint32_t cd0, cd1, cd2, cd3; - uint32_t re0, re1, re2, re3; - uint32_t im0, im1, im2, im3; - uint32_t D0, D1, D2, D3; - uint32_t ab_n0, ab_n1, ab_n2, ab_n3; - __fp16 *pPilotTX_itr; - __fp16 *pPilotRX_itr; - __fp16 *pH_itr; - - for (uint32_t k = 0; k < nSc; k++) { - pPilotTX_itr = pPilotTX + k * (2 * nTX); - pPilotRX_itr = pPilotRX + k * (2 * nRX); - pH_itr = pH + k * 2 * (nTX * nRX); - for (uint32_t i = 0; i < nRX; i++) { - ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; - ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; - ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; - ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; - SHUFFLE_A; - for (uint32_t j = 0; j < nTX; j += 4) { - DIV_LOOP(ab0, ab_n0, i); - DIV_LOOP(ab1, ab_n1, i + 1); - DIV_LOOP(ab2, ab_n2, i + 2); - DIV_LOOP(ab3, ab_n3, i + 3); - } - } - } - return; -} - -/** - @brief Block-type channel estimation. - @param[in] pH points to output channel - @param[in] pPilotRX points to received symbol - @param[in] pPilotTX points to sent pilot - @param[in] nTX Number of transmitters - @param[in] nRX Number of receivers - @param[in] nSc Number of Subcarriers - @param[in] core_id ID of the PE - @param[in] nPE Number of PEs - @return none -*/ -void mempool_chest_f16p_unrolled4(__fp16 *pH, __fp16 *pPilotRX, - __fp16 *pPilotTX, uint32_t nRX, uint32_t nTX, - uint32_t nSc, uint32_t core_id, - uint32_t nPE) { - uint32_t ab0, ab1, ab2, ab3; - uint32_t cd0, cd1, cd2, cd3; -#ifndef __CDOTP - uint32_t ab_n0, ab_n1, ab_n2, ab_n3; - uint32_t re0, re1, re2, re3; - uint32_t im0, im1, im2, im3; -#else - uint32_t sum0, sum1, sum2, sum3; -#endif - -#ifndef __MUL - uint32_t D0, D1, D2, D3; -#endif - - __fp16 *pPilotTX_itr; - __fp16 *pPilotRX_itr; - __fp16 *pH_itr; - - for (uint32_t k = core_id; k < nSc; k += nPE) { - pPilotTX_itr = pPilotTX + k * (2 * nTX); - pPilotRX_itr = pPilotRX + k * (2 * nRX); - pH_itr = pH + k * 2 * (nTX * nRX); - for (uint32_t i = 0; i < nRX; i += 4) { - ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; - ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; - ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; - ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; -#ifndef __CDOTP - SHUFFLE_A; -#endif - - for (uint32_t j = 0; j < nTX; j += 4) { -#if (defined(__CDOTP) && defined(__MUL)) - CMUL_LOOP(ab0, i); - CMUL_LOOP(ab1, i + 1); - CMUL_LOOP(ab2, i + 2); - CMUL_LOOP(ab3, i + 3); -#elif (!defined(__CDOTP) && defined(__MUL)) - MUL_LOOP(ab0, ab_n0, i); - MUL_LOOP(ab1, ab_n1, i + 1); - MUL_LOOP(ab2, ab_n2, i + 2); - MUL_LOOP(ab3, ab_n3, i + 3); -#else - DIV_LOOP(ab0, ab_n0, i) - DIV_LOOP(ab1, ab_n1, i + 1) - DIV_LOOP(ab2, ab_n2, i + 2) - DIV_LOOP(ab3, ab_n3, i + 3) -#endif - } - } - } - mempool_barrier(nPE); - return; -} - -void mempool_chest_f16p_unrolled4_local(__fp16 *volatile pH, - __fp16 *volatile pPilotRX, - __fp16 *volatile pPilotTX, uint32_t nRX, - uint32_t nTX, uint32_t nSc, - uint32_t core_id, uint32_t nPE) { - uint32_t ab0, ab1, ab2, ab3; - uint32_t cd0, cd1, cd2, cd3; - uint32_t sum0, sum1, sum2, sum3; - __fp16 *pPilotTX_itr; - __fp16 *pPilotRX_itr; - __fp16 *pH_itr; - uint32_t itr, i, j; - - // Cores Loop over the received pilots vector - for (itr = core_id * 4; itr < (nSc * nRX); - itr += (BANKING_FACTOR * NUM_CORES)) { - // Received pilots are aligned to cores - uint32_t sc_RX = itr / nRX; - pPilotTX_itr = pPilotTX + sc_RX * (2 * nTX); - pPilotRX_itr = pPilotRX + sc_RX * (2 * nRX); - pH_itr = pH + sc_RX * 2 * (nTX * nRX); - - // Load received pilots - i = itr % nRX; - ab0 = *(uint32_t *)&pPilotRX_itr[2U * i]; - ab1 = *(uint32_t *)&pPilotRX_itr[2U * (i + 1)]; - ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; - ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; - for (j = 0; j < nTX; j += 4) { - CMUL_LOOP(ab0, i); - CMUL_LOOP(ab1, i + 1); - CMUL_LOOP(ab2, i + 2); - CMUL_LOOP(ab3, i + 3); - } - } - mempool_barrier(nPE); - return; -} diff --git a/software/runtime/kernel/mempool_chest_q16.h b/software/runtime/kernel/mempool_chest_q16.h deleted file mode 100644 index c66aa0537..000000000 --- a/software/runtime/kernel/mempool_chest_q16.h +++ /dev/null @@ -1,245 +0,0 @@ -// Copyright 2022 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#pragma once -#include "xpulp/builtins_v2.h" -#define __MUL - -/* a[i] = ar[i] + i * ai[j] - out[i][j] = a[i] / c[j] - out[i][j + 1] = a[i] / c[j + 1] - out[i][j + 2] = a[i] / c[j + 2] - out[i][j + 3] = a[i] / c[j + 3]*/ - -#define DIV_LOOP(ab, ab_n, i) \ - cd0 = *(v2s *)&pPilotTX_itr[2U * j]; \ - cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; \ - D0 = (1 << 16U) / __DOTP2(cd0, cd0); \ - D1 = (1 << 16U) / __DOTP2(cd1, cd1); \ - D2 = (1 << 16U) / __DOTP2(cd2, cd2); \ - D3 = (1 << 16U) / __DOTP2(cd3, cd3); \ - re0 = __DOTP2(ab, cd0); \ - re1 = __DOTP2(ab, cd1); \ - re2 = __DOTP2(ab, cd2); \ - re3 = __DOTP2(ab, cd3); \ - im0 = __DOTP2(ab_n, cd0); \ - im1 = __DOTP2(ab_n, cd1); \ - im2 = __DOTP2(ab_n, cd2); \ - im3 = __DOTP2(ab_n, cd3); \ - re0 = __CLIP((re0 * D0) >> 8, 16); \ - re1 = __CLIP((re1 * D1) >> 8, 16); \ - re2 = __CLIP((re2 * D2) >> 8, 16); \ - re3 = __CLIP((re3 * D3) >> 8, 16); \ - im0 = __CLIP((im0 * D0) >> 8, 16); \ - im1 = __CLIP((im1 * D1) >> 8, 16); \ - im2 = __CLIP((im2 * D2) >> 8, 16); \ - im3 = __CLIP((im3 * D3) >> 8, 16); \ - re0 = (int32_t)(__PACK2(re0, im0)); \ - re1 = (int32_t)(__PACK2(re1, im1)); \ - re2 = (int32_t)(__PACK2(re2, im2)); \ - re3 = (int32_t)(__PACK2(re3, im3)); \ - *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; \ - *((v2s *)&pH_itr[2 * (i * nTX + j + 1)]) = (v2s)re1; \ - *((v2s *)&pH_itr[2 * (i * nTX + j + 2)]) = (v2s)re2; \ - *((v2s *)&pH_itr[2 * (i * nTX + j + 3)]) = (v2s)re3; - -/* a[i] = ar[i] + i * ai[j] - out[i][j] = a[i] * c[j] - out[i][j + 1] = a[i] * c[j + 1] - out[i][j + 2] = a[i] * c[j + 2] - out[i][j + 3] = a[i] * c[j + 3]*/ - -#define MUL_LOOP(ab, ab_n, i) \ - cd0 = *(v2s *)&pPilotTX_itr[2U * j]; \ - cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; \ - re0 = __DOTP2(ab, cd0); \ - re1 = __DOTP2(ab, cd1); \ - re2 = __DOTP2(ab, cd2); \ - re3 = __DOTP2(ab, cd3); \ - im0 = __DOTP2(ab_n, cd0); \ - im1 = __DOTP2(ab_n, cd1); \ - im2 = __DOTP2(ab_n, cd2); \ - im3 = __DOTP2(ab_n, cd3); \ - re0 = __CLIP(re0 >> 8, 16); \ - re1 = __CLIP(re1 >> 8, 16); \ - re2 = __CLIP(re2 >> 8, 16); \ - re3 = __CLIP(re3 >> 8, 16); \ - im0 = __CLIP(im0 >> 8, 16); \ - im1 = __CLIP(im1 >> 8, 16); \ - im2 = __CLIP(im2 >> 8, 16); \ - im3 = __CLIP(im3 >> 8, 16); \ - re0 = (int32_t)(__PACK2(re0, im0)); \ - re1 = (int32_t)(__PACK2(re1, im1)); \ - re2 = (int32_t)(__PACK2(re2, im2)); \ - re3 = (int32_t)(__PACK2(re3, im3)); \ - *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; \ - *((v2s *)&pH_itr[2 * (i * nTX + j + 1)]) = (v2s)re1; \ - *((v2s *)&pH_itr[2 * (i * nTX + j + 2)]) = (v2s)re2; \ - *((v2s *)&pH_itr[2 * (i * nTX + j + 3)]) = (v2s)re3; - -#define SHUFFLE_A \ - asm volatile( \ - "pv.sub.h %[ab_n0], %[zero], %[ab0];" \ - "pv.sub.h %[ab_n1], %[zero], %[ab1];" \ - "pv.sub.h %[ab_n2], %[zero], %[ab2];" \ - "pv.sub.h %[ab_n3], %[zero], %[ab3];" \ - "pv.shuffle2.h %[ab_n0], %[ab_n0], %[mask];" \ - "pv.shuffle2.h %[ab_n1], %[ab_n1], %[mask];" \ - "pv.shuffle2.h %[ab_n2], %[ab_n2], %[mask];" \ - "pv.shuffle2.h %[ab_n3], %[ab_n3], %[mask];" \ - : [ab_n0] "=&r"(ab_n0), [ab_n1] "=&r"(ab_n1), [ab_n2] "=&r"(ab_n2), \ - [ab_n3] "=&r"(ab_n3) \ - : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3), \ - [zero] "r"(0x00000000), [mask] "r"(0x00020001) \ - :); - -/** - @brief Block-type channel estimation. - @param[in] pH points to output channel - @param[in] pPilotRX points to received symbol - @param[in] pPilotTX points to sent pilot - @param[in] nTX Number of transmitters - @param[in] nRX Number of receivers - @param[in] nSc Number of Subcarriers - @return none -*/ -void mempool_chest_q16s_unrolled4(int16_t *pH, int16_t *pPilotRX, - int16_t *pPilotTX, uint32_t nRX, uint32_t nTX, - uint32_t nSc) { - - v2s ab0, ab1, ab2, ab3; - v2s ab_n0, ab_n1, ab_n2, ab_n3; - v2s cd0, cd1, cd2, cd3; - int32_t re0, re1, re2, re3; - int32_t im0, im1, im2, im3; - int32_t D0, D1, D2, D3; - - int16_t *pPilotTX_itr; - int16_t *pPilotRX_itr; - int16_t *pH_itr; - for (uint32_t k = 0; k < nSc; k++) { - pPilotTX_itr = pPilotTX + k * (2 * nTX); - pPilotRX_itr = pPilotRX + k * (2 * nRX); - pH_itr = pH + k * 2 * (nTX * nRX); - for (uint32_t i = 0; i < nRX; i += 4) { - ab0 = *(v2s *)&pPilotRX_itr[2U * i]; - ab1 = *(v2s *)&pPilotRX_itr[2U * (i + 1)]; - ab2 = *(v2s *)&pPilotRX_itr[2U * (i + 2)]; - ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; - SHUFFLE_A; - for (uint32_t j = 0; j < nTX; j += 4) { - DIV_LOOP(ab0, ab_n0, i); - DIV_LOOP(ab1, ab_n1, i + 1); - DIV_LOOP(ab2, ab_n2, i + 2); - DIV_LOOP(ab3, ab_n3, i + 3); - } - } - } - return; -} - -/** - @brief Block-type channel estimation. - @param[in] pH points to output channel - @param[in] pPilotRX points to received symbol - @param[in] pPilotTX points to sent pilot - @param[in] nTX Number of transmitters - @param[in] nRX Number of receivers - @param[in] nSc Number of Subcarriers - @return none -*/ -void mempool_chest_q16p_unrolled4(int16_t *volatile pH, - int16_t *volatile pPilotRX, - int16_t *volatile pPilotTX, uint32_t nRX, - uint32_t nTX, uint32_t nSc, uint32_t core_id, - uint32_t nPE) { - - v2s ab0, ab1, ab2, ab3; - v2s ab_n0, ab_n1, ab_n2, ab_n3; - v2s cd0, cd1, cd2, cd3; - int32_t re0, re1, re2, re3; - int32_t im0, im1, im2, im3; -#ifndef __MUL - int32_t D0, D1, D2, D3; -#endif - - int16_t *pPilotTX_itr; - int16_t *pPilotRX_itr; - int16_t *pH_itr; - for (uint32_t k = core_id; k < nSc; k += nPE) { - pPilotTX_itr = pPilotTX + k * (2 * nTX); - pPilotRX_itr = pPilotRX + k * (2 * nRX); - pH_itr = pH + k * 2 * (nTX * nRX); - for (uint32_t i = 0; i < nRX; i += 4) { - ab0 = *(v2s *)&pPilotRX_itr[2U * i]; - ab1 = *(v2s *)&pPilotRX_itr[2U * (i + 1)]; - ab2 = *(v2s *)&pPilotRX_itr[2U * (i + 2)]; - ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; - SHUFFLE_A; - for (uint32_t j = 0; j < nTX; j += 4) { -#ifdef __MUL - MUL_LOOP(ab0, ab_n0, i); - MUL_LOOP(ab1, ab_n1, i + 1); - MUL_LOOP(ab2, ab_n2, i + 2); - MUL_LOOP(ab3, ab_n3, i + 3); -#else - DIV_LOOP(ab0, ab_n0, i); - DIV_LOOP(ab1, ab_n1, i + 1); - DIV_LOOP(ab2, ab_n2, i + 2); - DIV_LOOP(ab3, ab_n3, i + 3); -#endif - } - } - } - mempool_barrier(nPE); - return; -} - -void mempool_chest_q16p_unrolled4_local(int16_t *volatile pH, - int16_t *volatile pPilotRX, - int16_t *volatile pPilotTX, - uint32_t nRX, uint32_t nTX, - uint32_t nSc, uint32_t core_id, - uint32_t nPE) { - v2s ab0, ab1, ab2, ab3; - v2s ab_n0, ab_n1, ab_n2, ab_n3; - v2s cd0, cd1, cd2, cd3; - int32_t re0, re1, re2, re3; - int32_t im0, im1, im2, im3; - int16_t *pPilotTX_itr; - int16_t *pPilotRX_itr; - int16_t *pH_itr; - uint32_t itr, i, j; - - // Cores Loop over the received pilots vector - for (itr = core_id * 4; itr < (nSc * nRX); - itr += (BANKING_FACTOR * NUM_CORES)) { - // Received pilots are aligned to cores - uint32_t sc_RX = itr / nRX; - pPilotTX_itr = pPilotTX + sc_RX * (2 * nTX); - pPilotRX_itr = pPilotRX + sc_RX * (2 * nRX); - pH_itr = pH + sc_RX * 2 * (nTX * nRX); - // Load received pilots - i = itr % nRX; - ab0 = *(v2s *)&pPilotRX_itr[2U * i]; - ab1 = *(v2s *)&pPilotRX_itr[2U * (i + 1)]; - ab2 = *(v2s *)&pPilotRX_itr[2U * (i + 2)]; - ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; - SHUFFLE_A; - for (j = 0; j < nTX; j += 4) { - MUL_LOOP(ab0, ab_n0, i); - MUL_LOOP(ab1, ab_n1, i + 1); - MUL_LOOP(ab2, ab_n2, i + 2); - MUL_LOOP(ab3, ab_n3, i + 3); - } - } - mempool_barrier(nPE); - return; -} diff --git a/software/runtime/kernel/mempool_chest_q16p.h b/software/runtime/kernel/mempool_chest_q16p.h deleted file mode 100644 index 8b1378917..000000000 --- a/software/runtime/kernel/mempool_chest_q16p.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/runtime/kernel/mempool_chest_q16s.h b/software/runtime/kernel/mempool_chest_q16s.h deleted file mode 100644 index 8b1378917..000000000 --- a/software/runtime/kernel/mempool_chest_q16s.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/software/runtime/kernel/mempool_radix2_cfft_q16s.h b/software/runtime/kernel/mempool_radix2_cfft_q16s.h deleted file mode 100644 index e69de29bb..000000000 From 3b4a8dcf0ac65e72b5e9304911f9f30d9c23975f Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 25 Apr 2024 10:34:51 +0200 Subject: [PATCH 29/39] [software] Remove load of che inputs from inner loop --- .../kernels/baremetal/mempool_chest_f16.h | 172 ++++++++++++------ .../kernels/baremetal/mempool_chest_q16.h | 20 +- 2 files changed, 128 insertions(+), 64 deletions(-) diff --git a/software/kernels/baremetal/mempool_chest_f16.h b/software/kernels/baremetal/mempool_chest_f16.h index 7d53afc65..da03b38f5 100644 --- a/software/kernels/baremetal/mempool_chest_f16.h +++ b/software/kernels/baremetal/mempool_chest_f16.h @@ -16,7 +16,7 @@ out[i][j + 3] = a[i] / c[j + 3]*/ #ifdef __XDIVSQRT -#define DIV_LOOP(ab, ab_n, i) \ +#define DIV_LOOP(ab, ab_n) \ { \ re0 = 0; \ re1 = 0; \ @@ -30,10 +30,6 @@ D1 = 0; \ D2 = 0; \ D3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ @@ -65,13 +61,9 @@ : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; \ } #else -#define DIV_LOOP(ab, ab_n, i) \ +#define DIV_LOOP(ab, ab_n) \ { \ re0 = 0; \ re1 = 0; \ @@ -85,10 +77,6 @@ D1 = 0; \ D2 = 0; \ D3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ asm volatile("vfdotpex.s.h %[D0], %[cd0], %[cd0];" \ "vfdotpex.s.h %[D1], %[cd1], %[cd1];" \ "vfdotpex.s.h %[D2], %[cd2], %[cd2];" \ @@ -126,10 +114,6 @@ : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ [cd3] "r"(cd3), [x] "r"(ab), [y] "r"(ab_n) \ :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; \ } #endif @@ -140,7 +124,7 @@ out[i][j + 2] = a[i] * c[j + 2] out[i][j + 3] = a[i] * c[j + 3]*/ -#define MUL_LOOP(ab, ab_n, i) \ +#define MUL_LOOP(ab, ab_n) \ { \ re0 = 0; \ re1 = 0; \ @@ -150,10 +134,6 @@ im1 = 0; \ im2 = 0; \ im3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ asm volatile("vfdotpex.s.h %[re0], %[x], %[cd0];" \ "vfdotpex.s.h %[re1], %[x], %[cd1];" \ "vfdotpex.s.h %[re2], %[x], %[cd2];" \ @@ -178,22 +158,14 @@ [im2] "+&r"(im2), [im3] "+&r"(im3) \ : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), [cd3] "r"(cd3) \ :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; \ } -#define CMUL_LOOP(ab, i) \ +#define CMUL_LOOP(ab) \ { \ sum0 = 0; \ sum1 = 0; \ sum2 = 0; \ sum3 = 0; \ - cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; \ - cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; \ asm volatile("fcdotpex.s.h %[sum0], %[x], %[cd0];" \ "fcdotpex.s.h %[sum1], %[x], %[cd1];" \ "fcdotpex.s.h %[sum2], %[x], %[cd2];" \ @@ -203,10 +175,6 @@ : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), \ [cd3] "r"(cd3), [x] "r"(ab) \ :); \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = sum0; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = sum1; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = sum2; \ - *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = sum3; \ } #define SHUFFLE_A \ @@ -262,10 +230,30 @@ void mempool_chest_f16s_unrolled4(__fp16 *pH, __fp16 *pPilotRX, ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; SHUFFLE_A; for (uint32_t j = 0; j < nTX; j += 4) { - DIV_LOOP(ab0, ab_n0, i); - DIV_LOOP(ab1, ab_n1, i + 1); - DIV_LOOP(ab2, ab_n2, i + 2); - DIV_LOOP(ab3, ab_n3, i + 3); + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; + DIV_LOOP(ab0, ab_n0); + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; + DIV_LOOP(ab1, ab_n1); + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 3)]) = re3; + DIV_LOOP(ab2, ab_n2); + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 3)]) = re3; + DIV_LOOP(ab3, ab_n3); + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 3)]) = re3; } } } @@ -320,21 +308,73 @@ void mempool_chest_f16p_unrolled4(__fp16 *pH, __fp16 *pPilotRX, #endif for (uint32_t j = 0; j < nTX; j += 4) { + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; #if (defined(__CDOTP) && defined(__MUL)) - CMUL_LOOP(ab0, i); - CMUL_LOOP(ab1, i + 1); - CMUL_LOOP(ab2, i + 2); - CMUL_LOOP(ab3, i + 3); + CMUL_LOOP(ab0); + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = sum3; + CMUL_LOOP(ab1); + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 3)]) = sum3; + CMUL_LOOP(ab2); + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 3)]) = sum3; + CMUL_LOOP(ab3); + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 3)]) = sum3; #elif (!defined(__CDOTP) && defined(__MUL)) - MUL_LOOP(ab0, ab_n0, i); - MUL_LOOP(ab1, ab_n1, i + 1); - MUL_LOOP(ab2, ab_n2, i + 2); - MUL_LOOP(ab3, ab_n3, i + 3); + MUL_LOOP(ab0, ab_n0); + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; + MUL_LOOP(ab1, ab_n1); + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 3)]) = re3; + MUL_LOOP(ab2, ab_n2); + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 3)]) = re3; + MUL_LOOP(ab3, ab_n3); + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 3)]) = re3; #else - DIV_LOOP(ab0, ab_n0, i) - DIV_LOOP(ab1, ab_n1, i + 1) - DIV_LOOP(ab2, ab_n2, i + 2) - DIV_LOOP(ab3, ab_n3, i + 3) + DIV_LOOP(ab0, ab_n0); + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = re3; + DIV_LOOP(ab1, ab_n1); + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 3)]) = re3; + DIV_LOOP(ab2, ab_n2); + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 3)]) = re3; + DIV_LOOP(ab3, ab_n3); + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j)]) = re0; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 1)]) = re1; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 2)]) = re2; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 3)]) = re3; #endif } } @@ -371,10 +411,30 @@ void mempool_chest_f16p_unrolled4_local(__fp16 *volatile pH, ab2 = *(uint32_t *)&pPilotRX_itr[2U * (i + 2)]; ab3 = *(uint32_t *)&pPilotRX_itr[2U * (i + 3)]; for (j = 0; j < nTX; j += 4) { - CMUL_LOOP(ab0, i); - CMUL_LOOP(ab1, i + 1); - CMUL_LOOP(ab2, i + 2); - CMUL_LOOP(ab3, i + 3); + cd0 = *(uint32_t *)&pPilotTX_itr[2U * j]; + cd1 = *(uint32_t *)&pPilotTX_itr[2U * (j + 1)]; + cd2 = *(uint32_t *)&pPilotTX_itr[2U * (j + 2)]; + cd3 = *(uint32_t *)&pPilotTX_itr[2U * (j + 3)]; + CMUL_LOOP(ab0); + *((uint32_t *)&pH_itr[2 * (i * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * (i * nTX + j + 3)]) = sum3; + CMUL_LOOP(ab1); + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * ((i + 1) * nTX + j + 3)]) = sum3; + CMUL_LOOP(ab2); + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * ((i + 2) * nTX + j + 3)]) = sum3; + CMUL_LOOP(ab3); + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j)]) = sum0; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 1)]) = sum1; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 2)]) = sum2; + *((uint32_t *)&pH_itr[2 * ((i + 3) * nTX + j + 3)]) = sum3; } } mempool_barrier(nPE); diff --git a/software/kernels/baremetal/mempool_chest_q16.h b/software/kernels/baremetal/mempool_chest_q16.h index a91aa0097..b4d90adff 100644 --- a/software/kernels/baremetal/mempool_chest_q16.h +++ b/software/kernels/baremetal/mempool_chest_q16.h @@ -16,10 +16,6 @@ #define DIV_LOOP(ab, ab_n) \ { \ - cd0 = *(v2s *)&pPilotTX_itr[2U * j]; \ - cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; \ D0 = (1 << 16U) / __DOTP2(cd0, cd0); \ D1 = (1 << 16U) / __DOTP2(cd1, cd1); \ D2 = (1 << 16U) / __DOTP2(cd2, cd2); \ @@ -54,10 +50,6 @@ #define MUL_LOOP(ab, ab_n) \ { \ - cd0 = *(v2s *)&pPilotTX_itr[2U * j]; \ - cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; \ - cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; \ - cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; \ re0 = __DOTP2(ab_n, cd0); \ re1 = __DOTP2(ab_n, cd1); \ re2 = __DOTP2(ab_n, cd2); \ @@ -173,6 +165,10 @@ void mempool_chest_q16s_unrolled4(int16_t *pH, int16_t *pPilotRX, ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; SHUFFLE_A; for (j = 0; j < nTX; j += 4) { + cd0 = *(v2s *)&pPilotTX_itr[2U * j]; + cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; + cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; + cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; #ifdef __MUL MUL_LOOP(ab0, ab_n0); *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; @@ -261,6 +257,10 @@ void mempool_chest_q16p_unrolled4(int16_t *volatile pH, ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; SHUFFLE_A; for (uint32_t j = 0; j < nTX; j += 4) { + cd0 = *(v2s *)&pPilotTX_itr[2U * j]; + cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; + cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; + cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; #ifdef __MUL MUL_LOOP(ab0, ab_n0); *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; @@ -343,6 +343,10 @@ void mempool_chest_q16p_unrolled4_local(int16_t *volatile pH, ab3 = *(v2s *)&pPilotRX_itr[2U * (i + 3)]; SHUFFLE_A; for (j = 0; j < nTX; j += 4) { + cd0 = *(v2s *)&pPilotTX_itr[2U * j]; + cd1 = *(v2s *)&pPilotTX_itr[2U * (j + 1)]; + cd2 = *(v2s *)&pPilotTX_itr[2U * (j + 2)]; + cd3 = *(v2s *)&pPilotTX_itr[2U * (j + 3)]; MUL_LOOP(ab0, ab_n0); *((v2s *)&pH_itr[2 * (i * nTX + j)]) = (v2s)re0; *((v2s *)&pH_itr[2 * (i * nTX + j + 1)]) = (v2s)re1; From 3e9b6ea631eb117f674763e6e84d656071c76568 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 5 Jul 2024 15:56:59 +0200 Subject: [PATCH 30/39] [software] Add shuffle instruction in FFT butterfly --- .../apps/baremetal/cfft_radix4_f16/main.c | 46 ++++++- software/data/generate_cfft.py | 6 +- .../mempool_radix4_cfft_butterfly_f16.h | 120 ++++++++---------- .../baremetal/mempool_radix4_cfft_f16p.h | 85 ++++++++++++- 4 files changed, 178 insertions(+), 79 deletions(-) diff --git a/software/apps/baremetal/cfft_radix4_f16/main.c b/software/apps/baremetal/cfft_radix4_f16/main.c index c459d062a..30341f46d 100644 --- a/software/apps/baremetal/cfft_radix4_f16/main.c +++ b/software/apps/baremetal/cfft_radix4_f16/main.c @@ -21,7 +21,6 @@ #include "data_cfft_radix4_f16.h" /* CHOOSE ONE */ -//#define SINGLE // Single core FFT. //#define PARALLEL // Parallel FFT not "memory-aware". //#define FOLDED // Parallel FFT with "memory-aware" load/store. #define SCHEDULED // Folded FFTs arranged in rows and cols.''' @@ -29,9 +28,9 @@ // Bitreversal index from table. #define BITREVERSETABLE // Independent FFTs scheduled on one row (default 1). -#define N_FFTs_ROW 2 +#define N_FFTs_ROW 1 // Independent FFTs scheduled on columns (default 1). -#define N_FFTs_COL 2 +#define N_FFTs_COL 1 #if (N_FFTs_COL > MAX_COL) #error Parallelization not supporting N_FFTs_COL > [N_BANKS / (N_CSAMPLES / 4)] #endif @@ -77,6 +76,20 @@ int main() { /* INITIALIZATION */ +#if (defined(SINGLE) || defined(PARALLEL)) + if (core_id == 0) { + dma_memcpy_blocking(l1_pSrc, l2_pSrc, N_CSAMPLES * sizeof(int32_t)); + dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, + 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); + dma_memcpy_blocking(l1_BitRevIndexTable, l2_BitRevIndexTable, + BITREVINDEXTABLE_LENGTH * sizeof(int16_t)); + printf("01: END INITIALIZATION\n"); + } + mempool_barrier(num_cores); +#endif + +#if (defined(SCHEDULED) || defined(FOLDED)) + if (core_id == 0) { for (uint32_t j = 0; j < N_FFTs_ROW; j++) { for (uint32_t i = 0; i < N_FFTs_COL; i++) { @@ -88,6 +101,8 @@ int main() { BITREVINDEXTABLE_LENGTH * sizeof(int32_t)); } mempool_barrier(num_cores); + +#ifdef FOLDED_TWIDDLES for (uint32_t j = 0; j < N_FFTs_COL; j++) { uint32_t N_WORDS_COL = N_CSAMPLES >> 2; for (uint32_t i = core_id; i < N_WORDS_COL; i += num_cores) { @@ -99,10 +114,31 @@ int main() { *(v2h *)&l2_twiddleCoef_f16[2 * (i * 3U)]; } } +#else + if (core_id == 0) { + dma_memcpy_blocking(l1_twiddleCoef_f16_src, l2_twiddleCoef_f16, + 3 * (N_CSAMPLES / 4) * sizeof(int32_t)); + } +#endif + mempool_barrier(num_cores); + if (core_id == 0) { printf("01: END INITIALIZATION\n"); } mempool_barrier(num_cores); +#endif + + /* COMPUTATION */ + +#ifdef PARALLEL + mempool_start_benchmark(); + mempool_radix4_cfft_f16p(l1_pSrc, N_CSAMPLES, l1_twiddleCoef_f16_src, 1, + num_cores); + mempool_bitrevtable_q16p_xpulpimg((int16_t *)l1_pSrc, BITREVINDEXTABLE_LENGTH, + l1_BitRevIndexTable, num_cores); + mempool_stop_benchmark(); + pRes = l1_pSrc; +#endif #ifdef FOLDED if (core_id < (N_CSAMPLES / 16)) { @@ -111,7 +147,7 @@ int main() { l1_twiddleCoef_f16_src, l1_twiddleCoef_f16_dst, (N_CSAMPLES / 16)); pRes = ((LOG2 / 2) % 2) == 0 ? l1_pSrc : l1_pDst; - mempool_bitrevtable_q16p_xpulpimg((uint16_t *)pRes, BITREVINDEXTABLE_LENGTH, + mempool_bitrevtable_q16p_xpulpimg((int16_t *)pRes, BITREVINDEXTABLE_LENGTH, l1_BitRevIndexTable, (N_CSAMPLES / 16)); mempool_stop_benchmark(); } @@ -140,7 +176,7 @@ int main() { printf("02: END COMPUTATION\n"); } - mempool_check_f16(pRes, l2_pRes, 2 * N_CSAMPLES, 0.5, 0); + mempool_check_f16(pRes, l2_pRes, 2 * N_CSAMPLES, 0.05f, 0); mempool_barrier(num_cores); return 0; } diff --git a/software/data/generate_cfft.py b/software/data/generate_cfft.py index fa6759df3..2412c278d 100755 --- a/software/data/generate_cfft.py +++ b/software/data/generate_cfft.py @@ -58,8 +58,10 @@ def generate_cfft_q16(N): def generate_cfft_f16(N): - src = np.random.rand(N).astype(np.float16) - src = src + 1.j * np.random.rand(N).astype(np.float16) + # src = np.random.rand(N).astype(np.float16) + # src = src + 1.j * np.random.rand(N).astype(np.float16) + src = np.cos(np.linspace(0, N / 4, num=N)).astype(np.float16) + src = src + 1.j * np.sin(np.linspace(0, N / 4, num=N)).astype(np.float16) dst = np.fft.fft(src) src = np.column_stack((src.imag, src.real)).astype(np.float16).flatten() dst = np.column_stack((dst.imag, dst.real)).astype(np.float16).flatten() diff --git a/software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h b/software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h index edf7ea735..0d68e3d9d 100644 --- a/software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h +++ b/software/kernels/baremetal/mempool_radix4_cfft_butterfly_f16.h @@ -27,7 +27,6 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, uint32_t i0, uint32_t n2, v2h CoSi1, v2h CoSi2, v2h CoSi3, v2h C1, v2h C2, v2h C3) { - __fp16 t0, t1, t2, t3; uint32_t i1, i2, i3; uint32_t i0_store, i1_store, i2_store, i3_store; v2h A, B, C, D, E, F, G, H; @@ -74,6 +73,7 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, A = *(v2h *)&pIn[i0 * 2U]; /* Read xc (real), yc(imag) input */ C = *(v2h *)&pIn[i2 * 2U]; + asm volatile( // G = (xb + xd), (yb + yd) "vfadd.h %[G],%[B],%[D];" @@ -85,33 +85,30 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, "vfsub.h %[F],%[A],%[C];" // C = (yb - yd), (xd - xb) - // D = (yd - yb), (xb - xd) - "pv.extract.h %[t0],%[H],0;" // yb - yd - "pv.extract.h %[t1],%[H],1;" // xb - xd - "xor %[t2],%[t0],%[neg_mask];" // yd - yb - "xor %[t3],%[t1],%[neg_mask];" // xd - xb - "pv.pack %[C],%[t0],%[t3];" - "pv.pack %[D],%[t2],%[t1];" + "pv.shuffle2.h %[C],%[H],%[mask];" + "vfmul.h %[C],%[C],%[neg_mask];" // xa + xb + xc + xd, ya + yc + yb + yd "vfadd.h %[A],%[E],%[G];" // xa + xc - xb - xd, ya + yc - yb - yd "vfsub.h %[B],%[E],%[G];" // xa - xc + yb - yd, ya - yc + xd - xb - "vfadd.h %[C],%[F],%[C];" + "vfadd.h %[D],%[F],%[C];" // xa - xc + yd - yb, ya - yc + xb - xd - "vfadd.h %[D],%[F],%[D];" + "vfsub.h %[C],%[F],%[C];" + + // s4 = Co1 * (xa - xc + yb - yd) + Si1 * (ya - yc + xd - xb) + // s5 = -Si1 * (xa - xc + yb - yd) + Co1 * (ya - yc + xd - xb) + "vfdotpex.s.h %[s0],%[CoSi1],%[D];" + "vfdotpex.s.h %[s1],%[C1],%[D];" // s0 = Co2 * (xa + xc - xb - xd) + Si2 * (ya + yc - yb - yd) - // s1 = Si2 * (xa + xc - xb - xd) - Co2 * (ya + yc - yb - yd) - "vfdotpex.s.h %[s0],%[CoSi2],%[B];" - "vfdotpex.s.h %[s1],%[C2],%[B];" - // s2 = Co1 * (xa - xc + yd - yb) + Si1 * (ya - yc + xb - xd) - // s3 = Si1 * (xa - xc + yd - yb) - Co1 * (ya - yc + xb - xd) - "vfdotpex.s.h %[s2],%[CoSi1],%[D];" - "vfdotpex.s.h %[s3],%[C1],%[D];" - // s4 = Co3 * (xa - xc + yb - yd) + Si3 * (ya - yc + xd - xb) - // s5 = Si3 * (xa - xc + yb - yd) - Co3 * (ya - yc + xd - xb) + // s1 = -Si2 * (xa + xc - xb - xd) + Co2 * (ya + yc - yb - yd) + "vfdotpex.s.h %[s2],%[CoSi2],%[B];" + "vfdotpex.s.h %[s3],%[C2],%[B];" + + // s3 = Co3 * (xa - xc + yd - yb) + Si3 * (ya - yc + xb - xd) + // s4 = -Si3 * (xa - xc + yd - yb) + Co3 * (ya - yc + xb - xd) "vfdotpex.s.h %[s4],%[CoSi3],%[C];" "vfdotpex.s.h %[s5],%[C3],%[C];" @@ -121,17 +118,17 @@ static inline void radix4_butterfly_first(__fp16 *pIn, __fp16 *pOut, "vfcpka.h.s %[C], %[s3], %[s2];" // xd', yd' "vfcpka.h.s %[D], %[s5], %[s4];" - : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), - [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "+&r"(t0), - [t1] "+&r"(t1), [t2] "+&r"(t2), [t3] "+&r"(t3), [s0] "=&r"(s0), + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "=&r"(E), + [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), [s0] "=&r"(s0), [s1] "=&r"(s1), [s2] "=&r"(s2), [s3] "=&r"(s3), [s4] "=&r"(s4), [s5] "=&r"(s5) : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), - [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), [neg_mask] "r"(0x00008000) + [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), [mask] "r"(0x00020003), + [neg_mask] "r"(0x3C00BC00) :); *((v2h *)&pOut[i0_store * 2U]) = A; - *((v2h *)&pOut[i1_store * 2U]) = B; - *((v2h *)&pOut[i2_store * 2U]) = C; + *((v2h *)&pOut[i1_store * 2U]) = C; + *((v2h *)&pOut[i2_store * 2U]) = B; *((v2h *)&pOut[i3_store * 2U]) = D; } @@ -155,7 +152,6 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, uint32_t i0, uint32_t n2, v2h CoSi1, v2h CoSi2, v2h CoSi3, v2h C1, v2h C2, v2h C3) { - __fp16 t0, t1, t2, t3; uint32_t i1, i2, i3; uint32_t i0_store, i1_store, i2_store, i3_store; v2h A, B, C, D, E, F, G, H; @@ -205,6 +201,7 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, A = *(v2h *)&pIn[i0 * 2U]; /* Read xc (real), yc(imag) input */ C = *(v2h *)&pIn[i2 * 2U]; + asm volatile( // G = (xb + xd), (yb + yd) "vfadd.h %[G],%[B],%[D];" @@ -216,33 +213,30 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, "vfsub.h %[F],%[A],%[C];" // C = (yb - yd), (xd - xb) - // D = (yd - yb), (xb - xd) - "pv.extract.h %[t0],%[H],0;" // yb - yd - "pv.extract.h %[t1],%[H],1;" // xb - xd - "xor %[t2],%[t0],%[neg_mask];" // yd - yb - "xor %[t3],%[t1],%[neg_mask];" // xd - xb - "pv.pack %[C],%[t0],%[t3];" - "pv.pack %[D],%[t2],%[t1];" + "pv.shuffle2.h %[C],%[H],%[mask];" + "vfmul.h %[C],%[C],%[neg_mask];" // xa + xb + xc + xd, ya + yc + yb + yd "vfadd.h %[A],%[E],%[G];" // xa + xc - xb - xd, ya + yc - yb - yd "vfsub.h %[B],%[E],%[G];" // xa - xc + yb - yd, ya - yc + xd - xb - "vfadd.h %[C],%[F],%[C];" + "vfadd.h %[D],%[F],%[C];" // xa - xc + yd - yb, ya - yc + xb - xd - "vfadd.h %[D],%[F],%[D];" + "vfsub.h %[C],%[F],%[C];" + + // s4 = Co1 * (xa - xc + yb - yd) + Si1 * (ya - yc + xd - xb) + // s5 = -Si1 * (xa - xc + yb - yd) + Co1 * (ya - yc + xd - xb) + "vfdotpex.s.h %[s0],%[CoSi1],%[D];" + "vfdotpex.s.h %[s1],%[C1],%[D];" // s0 = Co2 * (xa + xc - xb - xd) + Si2 * (ya + yc - yb - yd) - // s1 = Si2 * (xa + xc - xb - xd) - Co2 * (ya + yc - yb - yd) - "vfdotpex.s.h %[s0],%[CoSi2],%[B];" - "vfdotpex.s.h %[s1],%[C2],%[B];" - // s2 = Co1 * (xa - xc + yd - yb) + Si1 * (ya - yc + xb - xd) - // s3 = Si1 * (xa - xc + yd - yb) - Co1 * (ya - yc + xb - xd) - "vfdotpex.s.h %[s2],%[CoSi1],%[D];" - "vfdotpex.s.h %[s3],%[C1],%[D];" - // s4 = Co3 * (xa - xc + yb - yd) + Si3 * (ya - yc + xd - xb) - // s5 = Si3 * (xa - xc + yb - yd) - Co3 * (ya - yc + xd - xb) + // s1 = -Si2 * (xa + xc - xb - xd) + Co2 * (ya + yc - yb - yd) + "vfdotpex.s.h %[s2],%[CoSi2],%[B];" + "vfdotpex.s.h %[s3],%[C2],%[B];" + + // s3 = Co3 * (xa - xc + yd - yb) + Si3 * (ya - yc + xb - xd) + // s4 = -Si3 * (xa - xc + yd - yb) + Co3 * (ya - yc + xb - xd) "vfdotpex.s.h %[s4],%[CoSi3],%[C];" "vfdotpex.s.h %[s5],%[C3],%[C];" @@ -252,18 +246,17 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, "vfcpka.h.s %[C], %[s3], %[s2];" // xd', yd' "vfcpka.h.s %[D], %[s5], %[s4];" - : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), - [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "+&r"(t0), - [t1] "+&r"(t1), [t2] "+&r"(t2), [t3] "+&r"(t3), [s0] "=&r"(s0), + : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "=&r"(E), + [F] "=&r"(F), [G] "=&r"(G), [H] "=&r"(H), [s0] "=&r"(s0), [s1] "=&r"(s1), [s2] "=&r"(s2), [s3] "=&r"(s3), [s4] "=&r"(s4), [s5] "=&r"(s5) : [C1] "r"(C1), [C2] "r"(C2), [C3] "r"(C3), [CoSi1] "r"(CoSi1), - [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), [neg_mask] "r"(0x00008000) + [CoSi2] "r"(CoSi2), [CoSi3] "r"(CoSi3), [mask] "r"(0x00020003), + [neg_mask] "r"(0x3C00BC00) :); - *((v2h *)&pOut[i0_store * 2U]) = A; - *((v2h *)&pOut[i1_store * 2U]) = B; - *((v2h *)&pOut[i2_store * 2U]) = C; + *((v2h *)&pOut[i1_store * 2U]) = C; + *((v2h *)&pOut[i2_store * 2U]) = B; *((v2h *)&pOut[i3_store * 2U]) = D; } @@ -278,7 +271,7 @@ static inline void radix4_butterfly_middle(__fp16 *pIn, __fp16 *pOut, */ static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, uint32_t i0) { - __fp16 t0, t1; + __fp16 t0, t1, t2, t3; uint32_t i1, i2, i3; uint32_t i0_store, i1_store, i2_store, i3_store; v2h A, B, C, D, E, F, G, H; @@ -300,7 +293,7 @@ static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, i3 = i2 + 1U; #endif // STORE INDEXES -#if defined(FOLDED) +#if defined(FOLDED) || (defined(SCHEDULED) && defined(BITREVERSETABLE)) i0_store = i0 * 4; i1_store = i0_store + 1; i2_store = i1_store + 1; @@ -320,7 +313,6 @@ static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, A = *(v2h *)&pIn[i0 * 2U]; /* Read xc (imag), yc(real) input */ C = *(v2h *)&pIn[i2 * 2U]; - __fp16 t2, t3; asm volatile( /* (xb - xd), (yb - yd) */ "vfsub.h %[H],%[B],%[D];" @@ -331,32 +323,26 @@ static inline void radix4_butterfly_last(__fp16 *pIn, __fp16 *pOut, /* (xa - xc), (ya - yc) */ "vfsub.h %[F],%[A],%[C];" - "pv.extract.h %[t0],%[H],0;" // (yb - yd) - "pv.extract.h %[t1],%[H],1;" // (xb - xd) - "xor %[t2],%[t0],%[neg_mask];" // (yd - yb) - "xor %[t3],%[t1],%[neg_mask];" // (xd - xb) /* (yd - yb), (xb - xd) */ - "pv.pack %[A],%[t2],%[t1];" - /* (yb - yd), (xd - xb) */ - "pv.pack %[B],%[t0],%[t3];" + "pv.shuffle2.h %[A],%[H],%[mask];" + "vfmul.h %[A],%[A],%[neg_mask];" /* (xa + xc + xb + xd), (ya + yc + yb + yd) */ "vfadd.h %[H],%[E],%[G];" /* (xa + xc - xb - xd), (ya + yc - yb - yd) */ "vfsub.h %[E],%[E],%[G];" /* (xa - xc + yd - yb), (ya - yc + xb - xd) */ - "vfadd.h %[A],%[F],%[A];" + "vfadd.h %[B],%[F],%[A];" /* (xa - xc + yb - yd), (ya - yc + xd - xb) */ - "vfadd.h %[B],%[F],%[B];" + "vfsub.h %[A],%[F],%[A];" : [A] "+&r"(A), [B] "+&r"(B), [C] "+&r"(C), [D] "+&r"(D), [E] "+&r"(E), [F] "+&r"(F), [G] "+&r"(G), [H] "+&r"(H), [t0] "+&r"(t0), [t1] "+&r"(t1), [t2] "+&r"(t2), [t3] "+&r"(t3) - : [neg_mask] "r"(0x00008000) + : [mask] "r"(0x00020003), [neg_mask] "r"(0x3C00BC00) :); - *((v2h *)&pOut[i0_store * 2U]) = H; *((v2h *)&pOut[i1_store * 2U]) = E; - *((v2h *)&pOut[i2_store * 2U]) = A; - *((v2h *)&pOut[i3_store * 2U]) = B; + *((v2h *)&pOut[i2_store * 2U]) = B; + *((v2h *)&pOut[i3_store * 2U]) = A; } diff --git a/software/kernels/baremetal/mempool_radix4_cfft_f16p.h b/software/kernels/baremetal/mempool_radix4_cfft_f16p.h index c82684995..e7bd7edc5 100644 --- a/software/kernels/baremetal/mempool_radix4_cfft_f16p.h +++ b/software/kernels/baremetal/mempool_radix4_cfft_f16p.h @@ -17,9 +17,9 @@ "pv.extract.h %[t0],%[CoSi1],1;" \ "pv.extract.h %[t2],%[CoSi2],1;" \ "pv.extract.h %[t4],%[CoSi3],1;" \ - "xor %[t0],%[t0],%[neg_mask];" \ - "xor %[t2],%[t2],%[neg_mask];" \ - "xor %[t4],%[t4],%[neg_mask];" \ + "xor %[t1],%[t1],%[neg_mask];" \ + "xor %[t3],%[t3],%[neg_mask];" \ + "xor %[t5],%[t5],%[neg_mask];" \ "pv.pack %[C1],%[t1],%[t0];" \ "pv.pack %[C2],%[t3],%[t2];" \ "pv.pack %[C3],%[t5],%[t4];" \ @@ -31,7 +31,6 @@ :); #ifdef FOLDED_TWIDDLES - #define LOAD_STORE_TWIDDLEFACT \ CoSi1 = *(v2h *)&pCoef_src[2U * ic]; \ CoSi2 = *(v2h *)&pCoef_src[2U * (ic + 1 * N_BANKS)]; \ @@ -60,6 +59,82 @@ CoSi3 = *(v2h *)&pCoef_src[2U * (ic * 3U)]; #endif +void mempool_radix4_cfft_f16p(__fp16 *pSrc16, uint32_t fftLen, + const __fp16 *pCoef16, uint32_t twidCoefModifier, + uint32_t nPE) { + uint32_t absolute_core_id = mempool_get_core_id(); + uint32_t core_id = absolute_core_id % nPE; + __fp16 t0, t1, t2, t3, t4, t5; + v2h CoSi1, CoSi2, CoSi3; + v2h C1, C2, C3; + uint32_t n1, n2, ic, i0, j, k; + uint32_t step, steps; + + /* START OF FIRST STAGE PROCESSING */ + n1 = fftLen; + n2 = n1 >> 2U; + step = (n2 + nPE - 1) / nPE; + for (i0 = core_id * step; i0 < MIN(core_id * step + step, n2); i0++) { + /* Twiddle coefficients index modifier */ + ic = i0 * twidCoefModifier; + /* co1 & si1 are read from Coefficient pointer */ + CoSi1 = *(v2h *)&pCoef16[ic * 2U]; + /* co2 & si2 are read from Coefficient pointer */ + CoSi2 = *(v2h *)&pCoef16[2U * (ic * 2U)]; + /* co3 & si3 are read from Coefficient pointer */ + CoSi3 = *(v2h *)&pCoef16[3U * (ic * 2U)]; + SHUFFLE_TWIDDLEFACT; + radix4_butterfly_first(pSrc16, pSrc16, i0, n2, CoSi1, CoSi2, CoSi3, C1, C2, + C3); + } + mempool_log_barrier(2, absolute_core_id); + /* END OF FIRST STAGE PROCESSING */ + + /* START OF MIDDLE STAGE PROCESSING */ + twidCoefModifier <<= 2U; + for (k = fftLen / 4U; k > 4U; k >>= 2U) { + uint32_t offset, butt_id; + n1 = n2; + n2 >>= 2U; + step = (n2 + nPE - 1) / nPE; + butt_id = core_id % n2; + offset = (core_id / n2) * n1; + for (j = butt_id * step; j < MIN(butt_id * step + step, n2); j++) { + /* Twiddle coefficients index modifier */ + ic = twidCoefModifier * j; + /* co1 & si1 are read from Coefficient pointer */ + CoSi1 = *(v2h *)&pCoef16[ic * 2U]; + /* co2 & si2 are read from Coefficient pointer */ + CoSi2 = *(v2h *)&pCoef16[2U * (ic * 2U)]; + /* co3 & si3 are read from Coefficient pointer */ + CoSi3 = *(v2h *)&pCoef16[3U * (ic * 2U)]; + SHUFFLE_TWIDDLEFACT; + /* Butterfly implementation */ + for (i0 = offset + j; i0 < fftLen; i0 += ((nPE + n2 - 1) / n2) * n1) { + radix4_butterfly_middle(pSrc16, pSrc16, i0, n2, CoSi1, CoSi2, CoSi3, C1, + C2, C3); + } + } + twidCoefModifier <<= 2U; + mempool_log_barrier(2, absolute_core_id); + } + /* END OF MIDDLE STAGE PROCESSING */ + + /* START OF LAST STAGE PROCESSING */ + n1 = n2; + n2 >>= 2U; + steps = fftLen / n1; + step = (steps + nPE - 1) / nPE; + /* Butterfly implementation */ + for (i0 = core_id * step * n1; i0 < MIN((core_id * step + step) * n1, fftLen); + i0 += n1) { + radix4_butterfly_last(pSrc16, pSrc16, i0); + } + mempool_log_barrier(2, absolute_core_id); + /* END OF LAST STAGE PROCESSING */ + return; +} + /** @brief Full FFT butterfly @param[in] pSrc16 points to input buffer of 16b data, Re and Im parts are @@ -97,7 +172,6 @@ void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, n1 = fftLen; n2 = n1 >> 2U; for (i0 = core_id * 4; i0 < MIN(core_id * 4 + 4, n2); i0++) { - #ifdef FOLDED_TWIDDLES ic = i0; ic_store = ic >> 2U; @@ -162,6 +236,7 @@ void mempool_radix4_cfft_f16p_folded(__fp16 *pSrc16, __fp16 *pDst16, } mempool_log_partial_barrier(2, absolute_core_id, nPE); /* END OF LAST STAGE PROCESSING */ + return; } From 29d3a73f23ab2e0a11483d73fd4b43efc59b2677 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 22 Aug 2024 09:19:39 +0200 Subject: [PATCH 31/39] [software] Clean-up complex matmuls --- software/apps/baremetal/cmatmul_f16/main.c | 32 +++- software/apps/baremetal/ofdm/main.c | 5 +- .../kernels/baremetal/mempool_cmatmul_f16.h | 170 +++++++++--------- .../kernels/baremetal/mempool_cmatmul_q16.h | 10 +- 4 files changed, 122 insertions(+), 95 deletions(-) diff --git a/software/apps/baremetal/cmatmul_f16/main.c b/software/apps/baremetal/cmatmul_f16/main.c index 2bfbcb144..be80f8c8b 100644 --- a/software/apps/baremetal/cmatmul_f16/main.c +++ b/software/apps/baremetal/cmatmul_f16/main.c @@ -19,18 +19,21 @@ #define PARALLEL_2x4 #define TEST +#if defined(PARALLEL_4x4_COPIES_A) +__fp16 matrix_a[2 * (BANKING_FACTOR * NUM_CORES)] + __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), + section(".l1_prio"))); +#else __fp16 matrix_a[2 * dim_M * dim_N] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), section(".l1_prio"))); +#endif __fp16 matrix_b[2 * dim_N * dim_P] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), section(".l1_prio"))); __fp16 matrix_c[2 * dim_M * dim_P] __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), section(".l1_prio"))); -__fp16 matrix_a_folded[2 * (BANKING_FACTOR * NUM_CORES)] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); int main() { uint32_t core_id = mempool_get_core_id(); @@ -46,7 +49,7 @@ int main() { // Wait at barrier until everyone is ready mempool_barrier(num_cores); -#if defined(SINGLE) +#if defined(SINGLE_CORE) // Execute function to test. if (core_id == 0) { mempool_start_benchmark(); @@ -80,6 +83,27 @@ int main() { mempool_barrier(num_cores); #endif +#if defined(PARALLEL_4x4) + // Execute function to test. + uint32_t nPE = core_id < (dim_P / 4) ? num_cores : (dim_P / 4); + if (core_id < nPE) { + mempool_start_benchmark(); + cmatmul_4x4_f16p(matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, core_id, + nPE); + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif + +#if defined(PARALLEL_4x4_COPIES_A) + // Execute function to test. + mempool_start_benchmark(); + cmatmul_4x4_f16p_copy_A(A, matrix_a, matrix_b, matrix_c, dim_M, dim_N, dim_P, + core_id, num_cores); + mempool_barrier(num_cores); + mempool_stop_benchmark(); +#endif + #if defined(TEST) mempool_check_f16(matrix_c, C, 2 * dim_M * dim_P, 0.1f, 0); mempool_barrier(num_cores); diff --git a/software/apps/baremetal/ofdm/main.c b/software/apps/baremetal/ofdm/main.c index 59b1835d7..210501cad 100644 --- a/software/apps/baremetal/ofdm/main.c +++ b/software/apps/baremetal/ofdm/main.c @@ -99,9 +99,8 @@ int main() { /* BEAMFORMING */ mempool_start_benchmark(); - cmatmul_4x4_f16p((int32_t *)l1_pBF_Coef_folded, (int32_t *)l1_pFFT_Src, - (int32_t *)l1_pFFT_Dst, dim_M, dim_N, dim_P, core_id, - num_cores); + cmatmul_4x4_f16p(l1_pBF_Coef_folded, l1_pFFT_Src, l1_pFFT_Dst, dim_M, dim_N, + dim_P, core_id, num_cores); mempool_stop_benchmark(); dump_checkpoint(2); diff --git a/software/kernels/baremetal/mempool_cmatmul_f16.h b/software/kernels/baremetal/mempool_cmatmul_f16.h index f795a82ba..12645c454 100644 --- a/software/kernels/baremetal/mempool_cmatmul_f16.h +++ b/software/kernels/baremetal/mempool_cmatmul_f16.h @@ -4,14 +4,31 @@ // Author: Marco Bertuletti, ETH Zurich -/* This library implements the complex matrix multiplication in multiple - * different ways. The functions all follow the following format: +/* This library implements the complex matrix multiplication in + * different ways. The functions all follow this format: * * A is an M x N matrix, B is a N x P matrix, and C is a M x P matrix * C = AB */ +#pragma once #include "builtins_v2.h" +// Use complex dotp in a single offload +#define __CDOTP +// Shift cores startpoint over rows of matrix A +#define __SHIFT_A + +/****************************************************************************** + __ ___ _ _ ____ _ + \ \ / (_) __| | ___ _ __ (_)_ __ __ _ | _ \ ___ | |_ _ __ + \ \ /\ / /| |/ _` |/ _ \ '_ \| | '_ \ / _` |_____| | | |/ _ \| __| '_ \ + \ V V / | | (_| | __/ | | | | | | | (_| |_____| |_| | (_) | |_| |_) | + \_/\_/ |_|\__,_|\___|_| |_|_|_| |_|\__, | |____/ \___/ \__| .__/ + |___/ |_| + +******************************************************************************/ + +#ifndef __CDOTP #define CMATMUL_2x2_LOOP \ { \ @@ -102,22 +119,22 @@ #define CMATMUL_2x4_LOOP \ { \ - float register volatile sum00_real = 0.0f; \ - float register volatile sum01_real = 0.0f; \ - float register volatile sum02_real = 0.0f; \ - float register volatile sum03_real = 0.0f; \ - float register volatile sum10_real = 0.0f; \ - float register volatile sum11_real = 0.0f; \ - float register volatile sum12_real = 0.0f; \ - float register volatile sum13_real = 0.0f; \ - float register volatile sum00_imag = 0.0f; \ - float register volatile sum01_imag = 0.0f; \ - float register volatile sum02_imag = 0.0f; \ - float register volatile sum03_imag = 0.0f; \ - float register volatile sum10_imag = 0.0f; \ - float register volatile sum11_imag = 0.0f; \ - float register volatile sum12_imag = 0.0f; \ - float register volatile sum13_imag = 0.0f; \ + float sum00_real = 0.0f; \ + float sum01_real = 0.0f; \ + float sum02_real = 0.0f; \ + float sum03_real = 0.0f; \ + float sum10_real = 0.0f; \ + float sum11_real = 0.0f; \ + float sum12_real = 0.0f; \ + float sum13_real = 0.0f; \ + float sum00_imag = 0.0f; \ + float sum01_imag = 0.0f; \ + float sum02_imag = 0.0f; \ + float sum03_imag = 0.0f; \ + float sum10_imag = 0.0f; \ + float sum11_imag = 0.0f; \ + float sum12_imag = 0.0f; \ + float sum13_imag = 0.0f; \ v2h a00s, a01s, a10s, a11s; \ for (j = 0; j < N; j += 2) { \ v2h a00 = A[(i + 0) * N + (j + 0)]; \ @@ -225,25 +242,21 @@ C[(i + 1) * P + k + 3] = (v2h)sum13_real; \ } -/**************************************************************************/ -/**************************************************************************/ -// COMPLEX DOTP INSTRUCTIONS +#endif -#define CMATMUL_CDOTP_1x1_LOOP \ - { \ - v2h sum = (v2h)0.0f; \ - for (j = 0; j < N; j++) { \ - v2h a = *(v2h *)&A[2 * (i * M + j)]; \ - v2h b = *(v2h *)&B[2 * (j * P + k)]; \ - asm volatile("fcdotpex.s.h %[sum], %[a], %[b];" \ - : [sum] "+&r"(sum) \ - : [a] "r"(a), [b] "r"(b) \ - :); \ - } \ - (*(v2h *)&C[2 * ((i + 0) * P + k + 0)]) = sum; \ - } +/****************************************************************************** + ____ _ ____ _ + / ___|___ _ __ ___ _ __ | | _____ __ | _ \ ___ | |_ _ __ + | | / _ \| '_ ` _ \| '_ \| |/ _ \ \/ /____| | | |/ _ \| __| '_ \ + | |__| (_) | | | | | | |_) | | __/> <_____| |_| | (_) | |_| |_) | + \____\___/|_| |_| |_| .__/|_|\___/_/\_\ |____/ \___/ \__| .__/ + |_| |_| + +******************************************************************************/ + +#ifdef __CDOTP -#define CMATMUL_CDOTP_2x2_LOOP \ +#define CMATMUL_2x2_LOOP \ { \ v2h sum00 = (v2h)0.0f; \ v2h sum01 = (v2h)0.0f; \ @@ -279,7 +292,7 @@ (*(v2h *)&C[2 * ((i + 1) * P + k + 1)]) = sum11; \ } -#define CMATMUL_CDOTP_2x4_LOOP \ +#define CMATMUL_2x4_LOOP \ { \ v2h sum00 = (v2h)0.0f; \ v2h sum01 = (v2h)0.0f; \ @@ -337,12 +350,12 @@ (*(v2h *)&C[2 * ((i + 1) * P + k + 3)]) = sum13; \ } -#define CMATMUL_CDOTP_4x4_LOOP \ +#define CMATMUL_4x4_LOOP \ { \ - int32_t const *addr_a = &A[i * N]; \ - int32_t const *addr_b = &B[j]; \ - int32_t const *end_b = &B[N * P + j]; \ - int32_t const *addr_c = &C[i * P + j]; \ + __fp16 const *addr_a = &A[2 * i * N]; \ + __fp16 const *addr_b = &B[2 * j]; \ + __fp16 const *end_b = &B[2 * (N * P + j)]; \ + __fp16 const *addr_c = &C[2 * (i * P + j)]; \ int32_t const P3 = ((int32_t)P - 3) * 4; \ int32_t const N31 = (-3 * (int32_t)N + 1) * 4; \ register int32_t k asm("x1") = (int32_t)end_b; \ @@ -462,7 +475,9 @@ "x27", "x28", "x29", "x30", "x31", "memory"); \ } -#define __CDOTP +#endif + +// 2x2 MATMUL void cmatmul_2x2_f16s(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P) { @@ -472,16 +487,13 @@ void cmatmul_2x2_f16s(__fp16 const *__restrict__ A, uint32_t k = 0; // loop counter for P for (k = 0; k < P; k += 2) { for (i = 0; i < M; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x2_LOOP; -#else CMATMUL_2x2_LOOP; -#endif } } return; } +// 2x2 MATMUL void cmatmul_2x2_f16p(__fp16 const *__restrict__ A, __fp16 const *__restrict__ B, __fp16 *__restrict__ C, uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, @@ -492,88 +504,82 @@ void cmatmul_2x2_f16p(__fp16 const *__restrict__ A, uint32_t k = 0; // loop counter for P for (k = core_id * 2; k < P; k += 2 * numThreads) { for (i = 0; i < M; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x2_LOOP; -#else CMATMUL_2x2_LOOP; -#endif } } return; } -#define __SHIFT_A -void cmatmul_2x4_f16p(__fp16 *__restrict__ A, __fp16 const *__restrict__ B, - __fp16 *__restrict__ C, uint32_t M, uint32_t N, - uint32_t P, uint32_t core_id, uint32_t numThreads) { +// 2x4 MATMUL +void cmatmul_2x4_f16p(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, + uint32_t numThreads) { uint32_t i = 0; // loop counter for M uint32_t j = 0; // loop counter for N uint32_t k = 0; // loop counter for P #ifndef __SHIFT_A for (k = core_id * 4; k < P; k += 4 * numThreads) { for (i = 0; i < M; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x4_LOOP; -#else CMATMUL_2x4_LOOP; -#endif } } #else uint32_t shift_id = (2 * (core_id % NUM_CORES_PER_TILE)) % M; for (k = core_id * 4; k < P; k += 4 * numThreads) { for (i = shift_id; i < M; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x4_LOOP; -#else CMATMUL_2x4_LOOP; -#endif } for (i = 0; i < shift_id; i += 2) { -#ifdef __CDOTP - CMATMUL_CDOTP_2x4_LOOP; -#else CMATMUL_2x4_LOOP; -#endif } } #endif return; } +#ifdef __CDOTP + // 4x4 MATMUL -void cmatmul_4x4_f16p(int32_t const *__restrict__ A, - int32_t const *__restrict__ B, int32_t *__restrict__ C, - uint32_t M, uint32_t N, uint32_t P, uint32_t id, +void cmatmul_4x4_f16p(__fp16 const *__restrict__ A, + __fp16 const *__restrict__ B, __fp16 *__restrict__ C, + uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, uint32_t numThreads) { - uint32_t shift_id = (4 * (id % NUM_CORES_PER_TILE)) % M; - for (uint32_t j = 4 * id; j < P; j += 4 * numThreads) { - for (uint32_t i = shift_id; i < M; i += 4) { - CMATMUL_CDOTP_4x4_LOOP + uint32_t i = 0; // loop counter for M + uint32_t j = 0; // loop counter for N + uint32_t shift_id = (4 * (core_id % NUM_CORES_PER_TILE)) % M; + for (j = 4 * core_id; j < P; j += 4 * numThreads) { + for (i = shift_id; i < M; i += 4) { + CMATMUL_4x4_LOOP } - for (uint32_t i = 0; i < shift_id; i += 4) { - CMATMUL_CDOTP_4x4_LOOP + for (i = 0; i < shift_id; i += 4) { + CMATMUL_4x4_LOOP } } - mempool_log_partial_barrier(2, id, numThreads); return; } -void cmatmul_4x4_folded_f16p(int32_t *A_l2, int32_t *A_folded, int32_t *const B, - int32_t *C, uint32_t M, uint32_t N, uint32_t P, - uint32_t core_id, uint32_t numThreads) { +// 4x4 MATMUL with copies of A matrix (for M*N < N_BANKS) +void cmatmul_4x4_f16p_copy_A(__fp16 const *__restrict__ A_l2, + __fp16 *__restrict__ A_l1, + __fp16 const *__restrict__ B, + __fp16 *__restrict__ C, uint32_t M, uint32_t N, + uint32_t P, uint32_t core_id, + uint32_t numThreads) { // Copy multiple A matrices in memory if (core_id == 0) { for (uint32_t idx_copy = 0; idx_copy < (BANKING_FACTOR * NUM_CORES); - idx_copy += (M * N)) { - dma_memcpy_blocking(&A_folded[idx_copy], A_l2, M * N * sizeof(int32_t)); + idx_copy += 2 * (M * N)) { + dma_memcpy_blocking(&A_l1[idx_copy], A_l2, M * N * sizeof(int32_t)); } } // Cores only fetch from local A - int32_t *A_shifted = A_folded; + __fp16 *A_shifted = A_l1; A_shifted += (N * M) * ((core_id * BANKING_FACTOR) / (N * M)); mempool_log_partial_barrier(2, core_id, numThreads); cmatmul_4x4_f16p(A_shifted, B, C, M, N, P, core_id, numThreads); return; } + +#endif diff --git a/software/kernels/baremetal/mempool_cmatmul_q16.h b/software/kernels/baremetal/mempool_cmatmul_q16.h index 53b84d80c..aa6a71b6c 100644 --- a/software/kernels/baremetal/mempool_cmatmul_q16.h +++ b/software/kernels/baremetal/mempool_cmatmul_q16.h @@ -4,8 +4,8 @@ // Author: Marco Bertuletti, ETH Zurich -/* This library implements the complex matrix multiplication in multiple - * different ways. The functions all follow the following format: +/* This library implements the complex matrix multiplication in + * different ways. The functions all follow this format: * * A is an M x N matrix, B is a N x P matrix, and C is a M x P matrix * C = AB @@ -13,7 +13,8 @@ #pragma once #include "builtins_v2.h" -#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) +// Shift cores startpoint over rows of matrix A +#define __SHIFT_A #define CMATMUL_1x1_LOOP \ v2s sum = {0, 0}; \ @@ -239,15 +240,12 @@ void cmatmul_2x4_q16s(int16_t const *__restrict__ A, uint32_t k = 0; // loop counter for P for (k = 0; k < P; k += 4) { for (i = 0; i < M; i += 2) { - // CMATMUL_1x1_LOOP; - // CMATMUL_2x2_LOOP; CMATMUL_2x4_LOOP; } } return; } -#define __SHIFT_A void cmatmul_2x4_q16p(int16_t const *__restrict__ A, int16_t const *__restrict__ B, int16_t *__restrict__ C, uint32_t M, uint32_t N, uint32_t P, uint32_t core_id, From e77933cf499ae9d35a6a866e9cf622a8422ddad0 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 26 Aug 2024 16:30:21 +0200 Subject: [PATCH 32/39] [software] Clean-up dotp app and align to other kernels --- software/apps/baremetal/dotp_i32/define.h | 55 ----- .../apps/baremetal/dotp_i32/dotp_parallel.h | 83 -------- .../baremetal/dotp_i32/dotp_parallel_local.h | 162 --------------- .../baremetal/dotp_i32/dotp_parallel_red0.h | 122 ----------- .../dotp_i32/dotp_parallel_redtree.h | 129 ------------ software/apps/baremetal/dotp_i32/main.c | 136 ++++-------- software/data/data_dotp_i32.h.tpl | 24 +++ software/data/generate_dotp.py | 77 +++++++ .../kernels/baremetal/mempool_dotp_i32p.h | 196 ++++++++++++++++++ .../baremetal/mempool_dotp_i32s.h} | 11 +- 10 files changed, 338 insertions(+), 657 deletions(-) delete mode 100644 software/apps/baremetal/dotp_i32/define.h delete mode 100644 software/apps/baremetal/dotp_i32/dotp_parallel.h delete mode 100644 software/apps/baremetal/dotp_i32/dotp_parallel_local.h delete mode 100644 software/apps/baremetal/dotp_i32/dotp_parallel_red0.h delete mode 100644 software/apps/baremetal/dotp_i32/dotp_parallel_redtree.h create mode 100644 software/data/data_dotp_i32.h.tpl create mode 100644 software/data/generate_dotp.py create mode 100644 software/kernels/baremetal/mempool_dotp_i32p.h rename software/{apps/baremetal/dotp_i32/dotp_single.h => kernels/baremetal/mempool_dotp_i32s.h} (88%) diff --git a/software/apps/baremetal/dotp_i32/define.h b/software/apps/baremetal/dotp_i32/define.h deleted file mode 100644 index d2b069d21..000000000 --- a/software/apps/baremetal/dotp_i32/define.h +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -#define LEN (1024) -#define N_PE (NUM_CORES) -#define N_BANK (NUM_CORES * 4) -#define N_BANK_PE (N_PE * 4) - -/* Enable log barriers */ -#define LOG_BARRIERS - -/* STEP core 0 reduction */ -#define STEP (256) -#define STEP_CORES (STEP / 4) - -////////////////////////////////// -/* SELECT ONE */ - -// #define SINGLE -// #define SINGLE_UNROLLED - -// #define PARALLEL -// #define PARALLEL_UNROLLED - -// #define PARALLEL_LOCAL -// #define LOCAL_UNROLLED - -// #define PARALLEL_RED0 -// #define PARALLEL_UNROLLED_RED0 - -// #define PARALLEL_REDTREE -// #define PARALLEL_UNROLLED_REDTREE - -////////////////////////////////// - -// Vectors for kernel computation -int32_t vector_a[LEN] __attribute__((aligned(LEN), section(".l1"))); -int32_t vector_b[LEN] __attribute__((aligned(LEN), section(".l1"))); - -#if defined(PARALLEL_RED0) || defined(PARALLEL_UNROLLED_RED0) || \ - defined(PARALLEL_REDTREE) || defined(PARALLEL_UNROLLED_REDTREE) -int32_t sum[N_BANK] __attribute__((aligned(N_BANK), section(".l1"))); -#else -int32_t sum __attribute__((section(".l1"))); -#endif - -// Vectors for performance metrics -uint32_t volatile red_barrier[NUM_CORES * 4] - __attribute__((aligned(NUM_CORES * 4), section(".l1"))); -int32_t result __attribute__((section(".l1"))); -int32_t check __attribute__((section(".l1"))); -int volatile error __attribute__((section(".l1"))); diff --git a/software/apps/baremetal/dotp_i32/dotp_parallel.h b/software/apps/baremetal/dotp_i32/dotp_parallel.h deleted file mode 100644 index b765f6987..000000000 --- a/software/apps/baremetal/dotp_i32/dotp_parallel.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -/* Parallel dot-product */ -void dotp_parallel(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, - uint32_t nPE) { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - uint32_t step = Len / nPE; - - register int32_t local_sum = 0; - register int32_t a, b; - for (uint32_t i = core_id * step; i < core_id * step + step; i++) { - a = in_a[i]; - b = in_b[i]; - local_sum += a * b; - } - mempool_stop_benchmark(); - mempool_start_benchmark(); - __atomic_fetch_add(&s[0], local_sum, __ATOMIC_RELAXED); -#ifdef LOG_BARRIERS - mempool_log_barrier(2, core_id); - (void)num_cores; -#else - mempool_barrier(num_cores); -#endif -} - -/* Parallel dot-product */ -void dotp_parallel_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len, uint32_t nPE) { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - uint32_t step = Len / nPE; - uint32_t reminder = step % 4; - uint32_t i; - - register int32_t a0 = 0, b0 = 0, a1 = 0, b1 = 0, a2 = 0, b2 = 0, a3 = 0, - b3 = 0; - register int32_t local_sum0 = 0; - register int32_t local_sum1 = 0; - register int32_t local_sum2 = 0; - register int32_t local_sum3 = 0; - for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { - a0 = in_a[i]; - b0 = in_b[i]; - a1 = in_a[i + 1]; - b1 = in_b[i + 1]; - a2 = in_a[i + 2]; - b2 = in_b[i + 2]; - a3 = in_a[i + 3]; - b3 = in_b[i + 3]; - local_sum0 += a0 * b0; - local_sum1 += a1 * b1; - local_sum2 += a2 * b2; - local_sum3 += a3 * b3; - } - i = core_id * step + step - reminder; - while (i < step) { - a0 = in_a[i]; - b0 = in_b[i]; - local_sum0 += a0 * b0; - i++; - } - local_sum0 += local_sum1; - local_sum2 += local_sum3; - local_sum0 += local_sum2; - mempool_barrier(num_cores); - - mempool_stop_benchmark(); - mempool_start_benchmark(); - __atomic_fetch_add(&s[0], local_sum0, __ATOMIC_RELAXED); -#ifdef LOG_BARRIERS - mempool_log_barrier(2, core_id); -#else - mempool_barrier(num_cores); -#endif -} diff --git a/software/apps/baremetal/dotp_i32/dotp_parallel_local.h b/software/apps/baremetal/dotp_i32/dotp_parallel_local.h deleted file mode 100644 index 950955832..000000000 --- a/software/apps/baremetal/dotp_i32/dotp_parallel_local.h +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -/* - Parallel dot-product with final reduction performed by multiple cores - using atomic-fetch and adds to a single memory location. - A) Parallelized workload - B) Atomic fetch and add to a single memory location - C) Barrier */ - -/*******************************************************/ -/** MULTI-CORE **/ -/*******************************************************/ - -/* Parallel dot-product */ -void dotp_parallel_local(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, - uint32_t nPE) { - - uint32_t const remainder = Len % 4; - uint32_t const idx_stop = Len - remainder; - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - - if (nPE == num_cores) { - register int32_t local_sum = 0; - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - local_sum += in_a[idx] * in_b[idx]; - local_sum += in_a[idx + 1] * in_b[idx + 1]; - local_sum += in_a[idx + 2] * in_b[idx + 2]; - local_sum += in_a[idx + 3] * in_b[idx + 3]; - idx += N_BANK; - } - if (core_id == (Len % N_BANK) / 4) { - while (idx < Len) { - local_sum += in_a[idx] * in_b[idx]; - idx++; - } - } - mempool_stop_benchmark(); - mempool_start_benchmark(); - __atomic_fetch_add(&s[0], local_sum, __ATOMIC_RELAXED); -#ifdef LOG_BARRIERS - mempool_log_barrier(2, core_id); -#else - mempool_barrier(num_cores); -#endif - } else { - register int32_t local_sum = 0; - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - local_sum += in_a[idx] * in_b[idx]; - local_sum += in_a[idx + 1] * in_b[idx + 1]; - local_sum += in_a[idx + 2] * in_b[idx + 2]; - local_sum += in_a[idx + 3] * in_b[idx + 3]; - idx += N_BANK_PE; - } - if (core_id == (Len % N_BANK_PE) / 4) { - while (idx < Len) { - local_sum += in_a[idx] * in_b[idx]; - idx++; - } - } - if (core_id < nPE) { - mempool_stop_benchmark(); - mempool_start_benchmark(); - } - __atomic_fetch_add(&s[0], local_sum, __ATOMIC_RELAXED); -#ifdef LOG_BARRIERS - mempool_log_partial_barrier(2, core_id, nPE); -#else - mempool_barrier(num_cores); -#endif - } -} - -/* Parallel dot-product with loop unrolling */ -void dotp_parallel_local_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len, uint32_t nPE) { - - uint32_t const remainder = Len % 4; - uint32_t const idx_stop = Len - remainder; - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - register int32_t local_sum_1 = 0; - register int32_t local_sum_2 = 0; - register int32_t local_sum_3 = 0; - register int32_t local_sum_4 = 0; - - if (nPE == num_cores) { - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - int32_t in_a1 = in_a[idx]; - int32_t in_b1 = in_b[idx]; - int32_t in_a2 = in_a[idx + 1]; - int32_t in_b2 = in_b[idx + 1]; - int32_t in_a3 = in_a[idx + 2]; - int32_t in_b3 = in_b[idx + 2]; - int32_t in_a4 = in_a[idx + 3]; - int32_t in_b4 = in_b[idx + 3]; - local_sum_1 += in_a1 * in_b1; - local_sum_2 += in_a2 * in_b2; - local_sum_3 += in_a3 * in_b3; - local_sum_4 += in_a4 * in_b4; - idx += N_BANK; - } - if (core_id == ((Len % N_BANK) / 4)) { - while (idx < Len) { - local_sum_1 += in_a[idx] * in_b[idx]; - idx++; - } - } - local_sum_1 += local_sum_2; - local_sum_3 += local_sum_4; - local_sum_1 += local_sum_3; - mempool_stop_benchmark(); - mempool_start_benchmark(); - __atomic_fetch_add(&s[0], local_sum_1, __ATOMIC_RELAXED); -#ifdef LOG_BARRIERS - mempool_log_barrier(2, core_id); -#else - mempool_barrier(num_cores); -#endif - } else { - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - int32_t in_a1 = in_a[idx]; - int32_t in_b1 = in_b[idx]; - int32_t in_a2 = in_a[idx + 1]; - int32_t in_b2 = in_b[idx + 1]; - int32_t in_a3 = in_a[idx + 2]; - int32_t in_b3 = in_b[idx + 2]; - int32_t in_a4 = in_a[idx + 3]; - int32_t in_b4 = in_b[idx + 3]; - local_sum_1 += in_a1 * in_b1; - local_sum_2 += in_a2 * in_b2; - local_sum_3 += in_a3 * in_b3; - local_sum_4 += in_a4 * in_b4; - idx += N_BANK_PE; - } - if (core_id == ((Len % N_BANK_PE) / 4)) { - while (idx < Len) { - local_sum_1 += in_a[idx] * in_b[idx]; - idx++; - } - } - local_sum_1 += local_sum_2; - local_sum_3 += local_sum_4; - local_sum_1 += local_sum_3; - mempool_stop_benchmark(); - mempool_start_benchmark(); - __atomic_fetch_add(&s[0], local_sum_1, __ATOMIC_RELAXED); -#ifdef LOG_BARRIERS - mempool_log_partial_barrier(2, core_id, nPE); -#else - mempool_barrier(num_cores); -#endif - } -} diff --git a/software/apps/baremetal/dotp_i32/dotp_parallel_red0.h b/software/apps/baremetal/dotp_i32/dotp_parallel_red0.h deleted file mode 100644 index 0ad166d41..000000000 --- a/software/apps/baremetal/dotp_i32/dotp_parallel_red0.h +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -/* - Parallel dot-product with atomic fetch and add towards local memory - locations and final reduction by a single core. The cores write in - memory banks separated by a "step". - A) Parallelized workload - B) Atomic fetch and add to local memory banks - C) Barrier - D) Final reduction by core 0 incorporated in a barrier */ - -/*******************************************************/ -/** MULTI-CORE **/ -/*******************************************************/ - -/* Parallel dot-product */ -void dotp_parallel_red0(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len) { - - uint32_t const remainder = Len % 4; - uint32_t const idx_stop = Len - remainder; - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - int32_t local_sum = 0; - - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - local_sum += in_a[idx] * in_b[idx]; - local_sum += in_a[idx + 1] * in_b[idx + 1]; - local_sum += in_a[idx + 2] * in_b[idx + 2]; - local_sum += in_a[idx + 3] * in_b[idx + 3]; - idx += N_BANK; - } - if (core_id == (Len % N_BANK) / 4) { - while (idx < Len) { - local_sum += in_a[idx] * in_b[idx]; - idx++; - } - } - __atomic_fetch_add(&s[(core_id / STEP_CORES) * STEP], local_sum, - __ATOMIC_RELAXED); - mempool_stop_benchmark(); - - mempool_start_benchmark(); - if ((num_cores - 1) == - __atomic_fetch_add(&red_barrier[0], 1, __ATOMIC_RELAXED)) { - __atomic_store_n(&red_barrier[0], 0, __ATOMIC_RELAXED); - __sync_synchronize(); // Full memory barrier - uint32_t idx_red = 0; - local_sum = 0; - while (idx_red < N_BANK) { - local_sum += s[idx_red]; - idx_red += STEP; - } - s[0] = local_sum; - wake_up_all(); - } - mempool_wfi(); -} - -/* Parallel dot-product with loop unrolling */ -void dotp_parallel_unrolled4_red0(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len) { - - uint32_t const remainder = Len % 4; - uint32_t const idx_stop = Len - remainder; - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - int32_t local_sum_1 = 0; - int32_t local_sum_2 = 0; - int32_t local_sum_3 = 0; - int32_t local_sum_4 = 0; - - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - int32_t in_a1 = in_a[idx]; - int32_t in_b1 = in_b[idx]; - int32_t in_a2 = in_a[idx + 1]; - int32_t in_b2 = in_b[idx + 1]; - int32_t in_a3 = in_a[idx + 2]; - int32_t in_b3 = in_b[idx + 2]; - int32_t in_a4 = in_a[idx + 3]; - int32_t in_b4 = in_b[idx + 3]; - local_sum_1 += in_a1 * in_b1; - local_sum_2 += in_a2 * in_b2; - local_sum_3 += in_a3 * in_b3; - local_sum_4 += in_a4 * in_b4; - idx += N_BANK; - } - if (core_id == ((Len % N_BANK) / 4)) { - while (idx < Len) { - local_sum_1 += in_a[idx] * in_b[idx]; - idx++; - } - } - local_sum_1 += local_sum_2; - local_sum_3 += local_sum_4; - local_sum_1 += local_sum_3; - __atomic_fetch_add(&s[(core_id / STEP_CORES) * STEP], local_sum_1, - __ATOMIC_RELAXED); - mempool_stop_benchmark(); - - mempool_start_benchmark(); - if ((num_cores - 1) == - __atomic_fetch_add(&red_barrier[0], 1, __ATOMIC_RELAXED)) { - __atomic_store_n(&red_barrier[0], 0, __ATOMIC_RELAXED); - __sync_synchronize(); // Full memory barrier - uint32_t idx_red = 0; - local_sum_1 = 0; - while (idx_red < N_BANK) { - local_sum_1 += s[idx_red]; - idx_red += STEP; - } - s[0] = local_sum_1; - wake_up_all(); - } - mempool_wfi(); -} diff --git a/software/apps/baremetal/dotp_i32/dotp_parallel_redtree.h b/software/apps/baremetal/dotp_i32/dotp_parallel_redtree.h deleted file mode 100644 index 3659de0a3..000000000 --- a/software/apps/baremetal/dotp_i32/dotp_parallel_redtree.h +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -/* - Parallel dot-product with atomic fetch and add towards local memory - locations and final reduction by a single core. The cores write in - memory banks separated by a "step". - A) Parallelized workload - B) Atomic fetch and add to local memory banks - C) Barrier - D) Final reduction by core 0 incorporated in a barrier */ - -/*******************************************************/ -/** MULTI-CORE **/ -/*******************************************************/ - -void mempool_log_reduction(int32_t *sum, uint32_t volatile step, - uint32_t core_id); - -/* Parallel dot-product */ -void dotp_parallel_redtree(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len) { - - uint32_t const remainder = Len % 4; - uint32_t const idx_stop = Len - remainder; - uint32_t core_id = mempool_get_core_id(); - - register int32_t local_sum = 0; - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - local_sum += in_a[idx] * in_b[idx]; - local_sum += in_a[idx + 1] * in_b[idx + 1]; - local_sum += in_a[idx + 2] * in_b[idx + 2]; - local_sum += in_a[idx + 3] * in_b[idx + 3]; - idx += N_BANK; - } - if (core_id == (Len % N_BANK) / 4) { - while (idx < Len) { - local_sum += in_a[idx] * in_b[idx]; - idx++; - } - } - s[core_id * 4] = local_sum; // Each core is storing locally - mempool_stop_benchmark(); - mempool_start_benchmark(); - mempool_log_reduction(s, 2, core_id); -} - -void dotp_parallel_redtree_unrolled(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len) { - - uint32_t const remainder = Len % 4; - uint32_t const idx_stop = Len - remainder; - uint32_t core_id = mempool_get_core_id(); - register int32_t local_sum_1 = 0; - register int32_t local_sum_2 = 0; - register int32_t local_sum_3 = 0; - register int32_t local_sum_4 = 0; - - uint32_t idx = core_id * 4; - while (idx < idx_stop) { - int32_t in_a1 = in_a[idx]; - int32_t in_b1 = in_b[idx]; - int32_t in_a2 = in_a[idx + 1]; - int32_t in_b2 = in_b[idx + 1]; - int32_t in_a3 = in_a[idx + 2]; - int32_t in_b3 = in_b[idx + 2]; - int32_t in_a4 = in_a[idx + 3]; - int32_t in_b4 = in_b[idx + 3]; - local_sum_1 += in_a1 * in_b1; - local_sum_2 += in_a2 * in_b2; - local_sum_3 += in_a3 * in_b3; - local_sum_4 += in_a4 * in_b4; - idx += N_BANK; - } - if (core_id == ((Len % N_BANK) / 4)) { - while (idx < Len) { - local_sum_1 += in_a[idx] * in_b[idx]; - idx++; - } - } - local_sum_1 += local_sum_2; - local_sum_3 += local_sum_4; - local_sum_1 += local_sum_3; - s[core_id * 4] = local_sum_1; // Each core is storing locally - mempool_stop_benchmark(); - mempool_start_benchmark(); - mempool_log_reduction(s, 2, core_id); -} - -void mempool_log_reduction(int32_t *sum, uint32_t volatile step, - uint32_t core_id) { - - uint32_t idx_sum, idx = (step * (core_id / step)) * 4; - uint32_t next_step, previous_step; - register int32_t local_sum; - uint32_t num_cores = mempool_get_core_count(); - - previous_step = step >> 1; - if ((step - previous_step) == - __atomic_fetch_add(&red_barrier[idx + previous_step - 1], previous_step, - __ATOMIC_RELAXED)) { - - local_sum = 0; - idx_sum = idx; - while (idx_sum < idx + step * 4) { - local_sum += sum[idx_sum]; - idx_sum += previous_step * 4; - } - sum[idx] = local_sum; - - next_step = step << 1; - __atomic_store_n(&red_barrier[idx + previous_step - 1], 0, - __ATOMIC_RELAXED); - if (num_cores == step) { - sum[0] = sum[idx]; - __sync_synchronize(); // Full memory barrier - wake_up_all(); - mempool_wfi(); - } else { - mempool_log_reduction(sum, next_step, core_id); - } - - } else - mempool_wfi(); -} diff --git a/software/apps/baremetal/dotp_i32/main.c b/software/apps/baremetal/dotp_i32/main.c index f7cf7508f..da00a937e 100644 --- a/software/apps/baremetal/dotp_i32/main.c +++ b/software/apps/baremetal/dotp_i32/main.c @@ -8,132 +8,72 @@ #include #include +#include "dma.h" #include "encoding.h" #include "printf.h" #include "runtime.h" #include "synchronization.h" -#include "define.h" +#include "data_dotp_i32.h" +#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) +#define LOG_BARRIERS +// #define ATOMIC_REDUCTION +// #define SINGLE_CORE_REDUCTION +#define BINARY_REDUCTION -#include "dotp_parallel.h" -#include "dotp_parallel_local.h" -#include "dotp_parallel_red0.h" -#include "dotp_parallel_redtree.h" -#include "dotp_single.h" +// Vectors for kernel computation +int32_t l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +int32_t l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +uint32_t red_barrier[NUM_BANKS] + __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +int32_t sum[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); -void init_vectors(int32_t *in_a, int32_t *in_b, int32_t *s, int32_t *p_result, - int32_t *p_check, uint32_t Len) { - *p_result = 0; - *p_check = 0; - uint32_t j = 0; - uint32_t num_cores = mempool_get_core_count(); - while (j < Len) { - int32_t a = (int32_t)(j % num_cores); - int32_t b = (int32_t)(j % 4 + 3); - in_a[j] = a; - in_b[j] = b; - *p_check = *p_check + (int32_t)(a * b); - j++; - } -#if defined(PARALLEL_RED0) || defined(PARALLEL_UNROLLED_RED0) || \ - defined(PARALLEL_REDTREE) || defined(PARALLEL_UNROLLED_REDTREE) - for (uint32_t k = 0; k < N_BANK; k++) { - s[k] = 0; - red_barrier[k] = 0; - } -#else - *s = 0; -#endif -} +#include "baremetal/mempool_dotp_i32p.h" +#include "baremetal/mempool_dotp_i32s.h" int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); uint32_t time_init, time_end; - // initialize synchronization variables mempool_barrier_init(core_id); + time_init = 0; + time_end = 0; if (core_id == 0) { - error = 0; - time_init = 0; - time_end = 0; -#if defined(PARALLEL_RED0) || defined(PARALLEL_UNROLLED_RED0) || \ - defined(PARALLEL_REDTREE) || defined(PARALLEL_UNROLLED_REDTREE) - init_vectors(vector_a, vector_b, sum, &result, &check, LEN); -#else - init_vectors(vector_a, vector_b, &sum, &result, &check, LEN); -#endif + dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int32_t)); + dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int32_t)); + } + for (uint32_t k = core_id; k < NUM_BANKS; k += num_cores) { + sum[k] = 0; + red_barrier[k] = 0; } - mempool_barrier(num_cores); // wait until all cores have finished + mempool_barrier(num_cores); - // Kernel execution + // // SINGLE-CORE + // time_init = mempool_get_timer(); + // dotp_i32s_unrolled4(l1_A, l1_B, sum, LEN); + // time_end = mempool_get_timer(); - time_init = mempool_get_timer(); -#ifdef SINGLE - dotp_single(vector_a, vector_b, &sum, LEN); -#elif defined(SINGLE_UNROLLED) - dotp_single_unrolled4(vector_a, vector_b, &sum, LEN); -#endif - time_end = mempool_get_timer(); + // // PARALLEL + // time_init = mempool_get_timer(); + // dotp_i32p(l1_A, l1_B, sum, LEN, num_cores); + // time_end = mempool_get_timer(); + // PARALLEL, LOCAL ACCESSES time_init = mempool_get_timer(); - mempool_start_benchmark(); -/* A) Parallelized workload - B) Atomic fetch and add to a single memory location - C) Barrier */ -#ifdef PARALLEL - dotp_parallel(vector_a, vector_b, &sum, LEN, N_PE); -#elif defined(PARALLEL_UNROLLED) - dotp_parallel_unrolled4(vector_a, vector_b, &sum, LEN, N_PE); -/* A) Parallelized workload - B) Atomic fetch and add to local memory banks - C) Barrier - D) Final reduction by core 0 incorporated in a barrier */ -#elif defined(PARALLEL_RED0) - dotp_parallel_red0(vector_a, vector_b, sum, LEN, N_PE); -#elif defined(PARALLEL_UNROLLED_RED0) - dotp_parallel_unrolled4_red0(vector_a, vector_b, sum, LEN, N_PE); -/* A) Parallelized workload - B) Nested set of barriers: reduction is performed in a logarithmic tree. */ -#elif defined(PARALLEL_REDTREE) - dotp_parallel_redtree(vector_a, vector_b, sum, LEN, N_PE); -#elif defined(PARALLEL_UNROLLED_REDTREE) - dotp_parallel_redtree_unrolled(vector_a, vector_b, sum, LEN, N_PE); -#endif - mempool_stop_benchmark(); + dotp_i32p_local_unrolled4(l1_A, l1_B, sum, LEN); time_end = mempool_get_timer(); - /* A) Parallelized workload - B) Atomic fetch and add to a single memory location - C) Barrier */ - if (core_id < N_PE) { - time_init = mempool_get_timer(); - mempool_start_benchmark(); -#ifdef PARALLEL_LOCAL - dotp_parallel_local(vector_a, vector_b, &sum, LEN, N_PE); -#elif defined(LOCAL_UNROLLED) - dotp_parallel_local_unrolled4(vector_a, vector_b, &sum, LEN, N_PE); -#endif - mempool_stop_benchmark(); - time_end = mempool_get_timer(); - } - - mempool_barrier(num_cores); // Check results + mempool_barrier(num_cores); if (core_id == 0) { uint32_t clock_cycles = (time_end - time_init); -#if defined(PARALLEL_RED0) || defined(PARALLEL_UNROLLED_RED0) || \ - defined(PARALLEL_REDTREE) || defined(PARALLEL_UNROLLED_REDTREE) - result = sum[0]; -#else - result = sum; -#endif printf("\nKernel execution takes %d clock cycles\n", clock_cycles); - printf("Result ==> %d\n", result); - printf("Check ==> %d\n\n", check); + printf("Result ==> %d\n", sum[0]); + printf("Check ==> %d\n\n", l2_C); } mempool_barrier(num_cores); - return error; + return 0; } diff --git a/software/data/data_dotp_i32.h.tpl b/software/data/data_dotp_i32.h.tpl new file mode 100644 index 000000000..d76d92a24 --- /dev/null +++ b/software/data/data_dotp_i32.h.tpl @@ -0,0 +1,24 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LEN (${Len}) + +int32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; + +int32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; + +int32_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C = ${C}; diff --git a/software/data/generate_dotp.py b/software/data/generate_dotp.py new file mode 100644 index 000000000..6bacf2488 --- /dev/null +++ b/software/data/generate_dotp.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 + +# Copyright 2022 ETH Zurich and University of Bologna. +# Solderpad Hardware License, Version 0.51, see LICENSE for details. +# SPDX-License-Identifier: SHL-0.51 + +# This script generates data for the fp16 matmul. +# Author: Marco Bertuletti + +import numpy as np +import argparse +import pathlib +from mako.template import Template + + +def generate_dotp_i32(Len): + + # Create matrix + MAX = 2**7 - 1 + A = np.random.randint(-MAX, MAX - 1, size=Len) + B = np.random.randint(-MAX, MAX - 1, size=Len) + C = np.dot(A, B) + return A, B, C + +################## +# compute_result # +################## + + +def gen_data_header_file(outdir: pathlib.Path.cwd(), + tpl: pathlib.Path.cwd(), **kwargs): + + file = outdir / f"{kwargs['name']}.h" + + print(tpl, outdir, kwargs['name']) + + template = Template(filename=str(tpl)) + with file.open('w') as f: + f.write(template.render(**kwargs)) + + +def main(): + + parser = argparse.ArgumentParser(description='Generate data for kernels') + parser.add_argument( + "-o", + "--outdir", + type=pathlib.Path, + default=pathlib.Path(__file__).parent.absolute(), + required=False, + help='Select out directory of generated data files' + ) + parser.add_argument( + "-n", + "--length", + type=int, + required=False, + default=4096, + help='First dimension.' + ) + + args = parser.parse_args() + Len = args.length + + A, B, C = generate_dotp_i32(Len) + tpl = pathlib.Path(__file__).parent.absolute() / "data_dotp_i32.h.tpl" + kwargs = { + 'name': 'data_dotp_i32', + 'A': A, + 'B': B, + 'C': C, + 'Len': Len} + gen_data_header_file(args.outdir, tpl, **kwargs) + + +if __name__ == "__main__": + main() diff --git a/software/kernels/baremetal/mempool_dotp_i32p.h b/software/kernels/baremetal/mempool_dotp_i32p.h new file mode 100644 index 000000000..26fbe03e9 --- /dev/null +++ b/software/kernels/baremetal/mempool_dotp_i32p.h @@ -0,0 +1,196 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +/* Parallel dot-product */ +void dotp_i32p(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, + uint32_t nPE) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + register int32_t local_sum = 0; + register int32_t a, b; + for (uint32_t i = core_id * step; i < core_id * step + step; i++) { + a = in_a[i]; + b = in_b[i]; + local_sum += a * b; + } + __atomic_fetch_add(&s[0], local_sum, __ATOMIC_RELAXED); +#ifdef LOG_BARRIERS + mempool_log_barrier(2, core_id); +#else + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier(num_cores); +#endif + return; +} + +/* Parallel dot-product with loop unrolling*/ +void dotp_i32p_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, + uint32_t nPE) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + uint32_t reminder = step % 4; + uint32_t i; + + register int32_t a0 = 0, a1 = 0, a2 = 0, a3 = 0; + register int32_t b2 = 0, b1 = 0, b0 = 0, b3 = 0; + register int32_t local_sum0 = 0; + register int32_t local_sum1 = 0; + register int32_t local_sum2 = 0; + register int32_t local_sum3 = 0; + for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { + a0 = in_a[i]; + b0 = in_b[i]; + a1 = in_a[i + 1]; + b1 = in_b[i + 1]; + a2 = in_a[i + 2]; + b2 = in_b[i + 2]; + a3 = in_a[i + 3]; + b3 = in_b[i + 3]; + local_sum0 += a0 * b0; + local_sum1 += a1 * b1; + local_sum2 += a2 * b2; + local_sum3 += a3 * b3; + } + i = core_id * step + step - reminder; + while (i < step) { + a0 = in_a[i]; + b0 = in_b[i]; + local_sum0 += a0 * b0; + i++; + } + local_sum0 += local_sum1; + local_sum2 += local_sum3; + local_sum0 += local_sum2; + __atomic_fetch_add(&s[0], local_sum0, __ATOMIC_RELAXED); +#ifdef LOG_BARRIERS + mempool_log_barrier(2, core_id); +#else + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier(num_cores); +#endif + return; +} + +/* Bynary tree reduction */ +void mempool_binary_reduction(int32_t *sum, uint32_t core_id, + uint32_t num_cores) { + + uint32_t idx, step = 2, previous_step = 1; + while (num_cores > 1) { + idx = (step * (core_id / step)) * BANKING_FACTOR; + // dump_prova(idx); + if (__atomic_fetch_add(&red_barrier[idx + previous_step - 1], 1, + __ATOMIC_RELAXED)) { + + // Reduction + sum[idx] += sum[idx + previous_step * BANKING_FACTOR]; + + // Next level of binary tree + __atomic_store_n(&red_barrier[idx + previous_step - 1], 0, + __ATOMIC_RELAXED); + num_cores = num_cores / 2; + previous_step = step; + step = step * 2; + + } else { + // Goes to sleep + break; + } + } + + // Last core wakes everyone + if (num_cores == 1) { + __sync_synchronize(); + wake_up_all(); + } + mempool_wfi(); + + return; +} + +/* Parallel dot-product with loop unrolling */ +/* Load and stores only in local memory */ +#define NUM_CORES_RED (16) +void dotp_i32p_local_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, + uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t const remainder = Len % 4; + uint32_t const idx_stop = Len - remainder; + + register int32_t a0 = 0, a1 = 0, a2 = 0, a3 = 0; + register int32_t b2 = 0, b1 = 0, b0 = 0, b3 = 0; + register int32_t local_sum0 = 0; + register int32_t local_sum1 = 0; + register int32_t local_sum2 = 0; + register int32_t local_sum3 = 0; + + for (uint32_t i = core_id * 4; i < idx_stop; i += NUM_BANKS) { + a0 = in_a[i]; + b0 = in_b[i]; + a1 = in_a[i + 1]; + b1 = in_b[i + 1]; + a2 = in_a[i + 2]; + b2 = in_b[i + 2]; + a3 = in_a[i + 3]; + b3 = in_b[i + 3]; + local_sum0 += a0 * b0; + local_sum1 += a1 * b1; + local_sum2 += a2 * b2; + local_sum3 += a3 * b3; + } + if (core_id == ((Len % NUM_BANKS) / 4)) { + for (uint32_t i = Len - remainder; i < Len; i++) { + a0 = in_a[i]; + b0 = in_b[i]; + local_sum0 += a0 * b0; + } + } + local_sum0 += local_sum1; + local_sum2 += local_sum3; + local_sum0 += local_sum2; + +// A) Cores atomically fetch and add in sum variable +// B) A global barrier synchronizes all of them +#if defined(ATOMIC_REDUCTION) + __atomic_fetch_add(&s[0], local_sum0, __ATOMIC_RELAXED); + mempool_log_barrier(2, core_id); + +// A) Groups of NUM_CORES_RED cores atomically fetch and add in sum array +// B) The last core to the reduction barrier sums the partial reductions +#elif defined(SINGLE_CORE_REDUCTION) + uint32_t num_cores = mempool_get_core_count(); + __atomic_fetch_add( + &s[BANKING_FACTOR * NUM_CORES_RED * (core_id / NUM_CORES_RED)], + local_sum0, __ATOMIC_RELAXED); + if ((num_cores - 1) == + __atomic_fetch_add(&red_barrier[0], 1, __ATOMIC_RELAXED)) { + __atomic_store_n(&red_barrier[0], 0, __ATOMIC_RELAXED); + __sync_synchronize(); // Full memory barrier + uint32_t idx_red = 0; + local_sum0 = 0; + while (idx_red < NUM_BANKS) { + local_sum0 += s[idx_red]; + idx_red += BANKING_FACTOR * NUM_CORES_RED; + } + s[0] = local_sum0; + wake_up_all(); + } + mempool_wfi(); + +// A) Cores store locally in sum array +// B) Partial sums are reduced logarithmically +#elif defined(BINARY_REDUCTION) + uint32_t num_cores = mempool_get_core_count(); + s[core_id * 4] = local_sum0; + mempool_binary_reduction(s, core_id, num_cores); + +#endif + + return; +} diff --git a/software/apps/baremetal/dotp_i32/dotp_single.h b/software/kernels/baremetal/mempool_dotp_i32s.h similarity index 88% rename from software/apps/baremetal/dotp_i32/dotp_single.h rename to software/kernels/baremetal/mempool_dotp_i32s.h index 58797ee80..dd562debb 100644 --- a/software/apps/baremetal/dotp_i32/dotp_single.h +++ b/software/kernels/baremetal/mempool_dotp_i32s.h @@ -5,12 +5,11 @@ // Author: Marco Bertuletti, ETH Zurich /* Single-core dot-product */ -void dotp_single(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { +void dotp_i32s(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); if (core_id == 0) { - mempool_start_benchmark(); // Kernel execution register int32_t local_sum = 0; @@ -18,7 +17,6 @@ void dotp_single(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { do { local_sum += ((*in_a++) * (*in_b++)); } while (in_a < end); - *s = local_sum; mempool_stop_benchmark(); } @@ -26,17 +24,15 @@ void dotp_single(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { } /* Single-core dot-product unrolled4 */ -void dotp_single_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len) { +void dotp_i32s_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, + uint32_t Len) { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); if (core_id == 0) { - mempool_start_benchmark(); uint32_t reminder = Len % 4; uint32_t i = 0; - int32_t a0 = 0, b0 = 0, a1 = 0, b1 = 0, a2 = 0, b2 = 0, a3 = 0, b3 = 0; register int32_t local_sum_1 = 0; register int32_t local_sum_2 = 0; @@ -70,5 +66,4 @@ void dotp_single_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, mempool_stop_benchmark(); } mempool_barrier(num_cores); - // mempool_log_barrier(2, core_id); } From c346c1c800e91afe9dbca06db776bcd82e52d265 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 30 Aug 2024 12:25:17 +0200 Subject: [PATCH 33/39] [software] Add f32 and f16 dotp app --- software/apps/baremetal/dotp_f16/main.c | 78 +++++ software/apps/baremetal/dotp_f32/main.c | 76 +++++ software/apps/baremetal/dotp_i32/main.c | 3 +- software/data/data_dotp_f16.h.tpl | 24 ++ software/data/data_dotp_f32.h.tpl | 24 ++ software/data/generate_dotp.py | 38 +++ software/kernels/baremetal/mempool_dotp_f16.h | 222 +++++++++++++++ software/kernels/baremetal/mempool_dotp_f32.h | 267 ++++++++++++++++++ ...mempool_dotp_i32p.h => mempool_dotp_i32.h} | 170 +++++++---- .../kernels/baremetal/mempool_dotp_i32s.h | 69 ----- 10 files changed, 848 insertions(+), 123 deletions(-) create mode 100644 software/apps/baremetal/dotp_f16/main.c create mode 100644 software/apps/baremetal/dotp_f32/main.c create mode 100644 software/data/data_dotp_f16.h.tpl create mode 100644 software/data/data_dotp_f32.h.tpl create mode 100644 software/kernels/baremetal/mempool_dotp_f16.h create mode 100644 software/kernels/baremetal/mempool_dotp_f32.h rename software/kernels/baremetal/{mempool_dotp_i32p.h => mempool_dotp_i32.h} (63%) delete mode 100644 software/kernels/baremetal/mempool_dotp_i32s.h diff --git a/software/apps/baremetal/dotp_f16/main.c b/software/apps/baremetal/dotp_f16/main.c new file mode 100644 index 000000000..36a7f8f99 --- /dev/null +++ b/software/apps/baremetal/dotp_f16/main.c @@ -0,0 +1,78 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data_dotp_f16.h" +#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) +// #define SINGLE_CORE_REDUCTION +#define BINARY_REDUCTION + +// Vectors for kernel computation +__fp16 l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +__fp16 l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +uint32_t red_barrier[NUM_BANKS] + __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +__fp16 sum[2 * NUM_BANKS] + __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); + +#include "baremetal/mempool_dotp_f16.h" + +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + uint32_t time_init, time_end; + mempool_barrier_init(core_id); + + time_init = 0; + time_end = 0; + if (core_id == 0) { + dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int16_t)); + dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int16_t)); + } + for (uint32_t k = core_id; k < NUM_BANKS; k += num_cores) { + sum[k] = 0; + red_barrier[k] = 0; + } + mempool_barrier(num_cores); + + // // SINGLE-CORE + // time_init = mempool_get_timer(); + // dotp_f16s(l1_A, l1_B, sum, LEN); + // // dotp_f16s_unrolled4(l1_A, l1_B, sum, LEN); + // time_end = mempool_get_timer(); + + // // PARALLEL + // time_init = mempool_get_timer(); + // dotp_f16vecp_unrolled4(l1_A, l1_B, sum, LEN, num_cores); + // // dotp_f16p(l1_A, l1_B, sum, LEN, num_cores); + // time_end = mempool_get_timer(); + + // PARALLEL, LOCAL ACCESSES + time_init = mempool_get_timer(); + dotp_f16vecp_local_unrolled4(l1_A, l1_B, sum, LEN); + time_end = mempool_get_timer(); + + // Check results + mempool_barrier(num_cores); + if (core_id == 0) { + uint32_t clock_cycles = (time_end - time_init); + printf("\nKernel execution takes %d clock cycles\n", clock_cycles); + printf("Result ==> %x\n", *(uint32_t *)&sum[0]); + printf("Check ==> %x\n\n", *(uint32_t *)&l2_C); + } + mempool_barrier(num_cores); + + return 0; +} diff --git a/software/apps/baremetal/dotp_f32/main.c b/software/apps/baremetal/dotp_f32/main.c new file mode 100644 index 000000000..8c3c7e8cd --- /dev/null +++ b/software/apps/baremetal/dotp_f32/main.c @@ -0,0 +1,76 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include +#include + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data_dotp_f32.h" +#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) +// #define SINGLE_CORE_REDUCTION +#define BINARY_REDUCTION + +// Vectors for kernel computation +float l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +float l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +uint32_t red_barrier[NUM_BANKS] + __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +float sum[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); + +#include "baremetal/mempool_dotp_f32.h" + +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + uint32_t time_init, time_end; + mempool_barrier_init(core_id); + + time_init = 0; + time_end = 0; + if (core_id == 0) { + dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int32_t)); + dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int32_t)); + } + for (uint32_t k = core_id; k < NUM_BANKS; k += num_cores) { + sum[k] = 0; + red_barrier[k] = 0; + } + mempool_barrier(num_cores); + + // // SINGLE-CORE + // time_init = mempool_get_timer(); + // dotp_f32s_unrolled4(l1_A, l1_B, sum, LEN); + // time_end = mempool_get_timer(); + + // // PARALLEL + // time_init = mempool_get_timer(); + // dotp_f32p(l1_A, l1_B, sum, LEN, num_cores); + // time_end = mempool_get_timer(); + + // PARALLEL, LOCAL ACCESSES + time_init = mempool_get_timer(); + dotp_f32p_local_unrolled4(l1_A, l1_B, sum, LEN); + time_end = mempool_get_timer(); + + // Check results + mempool_barrier(num_cores); + if (core_id == 0) { + uint32_t clock_cycles = (time_end - time_init); + printf("\nKernel execution takes %d clock cycles\n", clock_cycles); + printf("Result ==> %d\n", sum[0]); + printf("Check ==> %d\n\n", l2_C); + } + mempool_barrier(num_cores); + + return 0; +} diff --git a/software/apps/baremetal/dotp_i32/main.c b/software/apps/baremetal/dotp_i32/main.c index da00a937e..441c98355 100644 --- a/software/apps/baremetal/dotp_i32/main.c +++ b/software/apps/baremetal/dotp_i32/main.c @@ -28,8 +28,7 @@ uint32_t red_barrier[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); int32_t sum[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); -#include "baremetal/mempool_dotp_i32p.h" -#include "baremetal/mempool_dotp_i32s.h" +#include "baremetal/mempool_dotp_i32.h" int main() { diff --git a/software/data/data_dotp_f16.h.tpl b/software/data/data_dotp_f16.h.tpl new file mode 100644 index 000000000..f7cacaed3 --- /dev/null +++ b/software/data/data_dotp_f16.h.tpl @@ -0,0 +1,24 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:.4f}, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LEN (${Len}) + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C = (__fp16)${C}f; diff --git a/software/data/data_dotp_f32.h.tpl b/software/data/data_dotp_f32.h.tpl new file mode 100644 index 000000000..3af0fbe66 --- /dev/null +++ b/software/data/data_dotp_f32.h.tpl @@ -0,0 +1,24 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LEN (${Len}) + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C = ${C}f; diff --git a/software/data/generate_dotp.py b/software/data/generate_dotp.py index 6bacf2488..66fc95bcc 100644 --- a/software/data/generate_dotp.py +++ b/software/data/generate_dotp.py @@ -22,6 +22,24 @@ def generate_dotp_i32(Len): C = np.dot(A, B) return A, B, C + +def generate_dotp_f32(Len): + + # Create matrix + A = np.random.rand(Len).astype(np.float32) + B = np.random.rand(Len).astype(np.float32) + C = (np.dot(A, B)).astype(np.float32) + return A, B, C + + +def generate_dotp_f16(Len): + + # Create matrix + A = np.random.rand(Len).astype(np.float16) + B = np.random.rand(Len).astype(np.float16) + C = (np.dot(A, B)).astype(np.float16) + return A, B, C + ################## # compute_result # ################## @@ -72,6 +90,26 @@ def main(): 'Len': Len} gen_data_header_file(args.outdir, tpl, **kwargs) + A, B, C = generate_dotp_f32(Len) + tpl = pathlib.Path(__file__).parent.absolute() / "data_dotp_f32.h.tpl" + kwargs = { + 'name': 'data_dotp_f32', + 'A': A, + 'B': B, + 'C': C, + 'Len': Len} + gen_data_header_file(args.outdir, tpl, **kwargs) + + A, B, C = generate_dotp_f16(Len) + tpl = pathlib.Path(__file__).parent.absolute() / "data_dotp_f16.h.tpl" + kwargs = { + 'name': 'data_dotp_f16', + 'A': A, + 'B': B, + 'C': C, + 'Len': Len} + gen_data_header_file(args.outdir, tpl, **kwargs) + if __name__ == "__main__": main() diff --git a/software/kernels/baremetal/mempool_dotp_f16.h b/software/kernels/baremetal/mempool_dotp_f16.h new file mode 100644 index 000000000..17d13df24 --- /dev/null +++ b/software/kernels/baremetal/mempool_dotp_f16.h @@ -0,0 +1,222 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#include "builtins_v2.h" + +#define DOTPF16VEC_UNROLLED4_LOOP \ + { \ + a01 = (*(v2h *)&in_a[i]); \ + a23 = (*(v2h *)&in_a[i + 2]); \ + b01 = (*(v2h *)&in_b[i]); \ + b23 = (*(v2h *)&in_b[i + 2]); \ + asm volatile( \ + "vfdotpex.s.h %[local_sum0], %[a01], %[b01];" \ + "vfdotpex.s.h %[local_sum1], %[a23], %[b23];" \ + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) \ + : [a01] "r"(a01), [a23] "r"(a23), [b01] "r"(b01), [b23] "r"(b23)); \ + } + +/* Single core reduction */ +void mempool_reduction_f16(__fp16 *sum, uint32_t num_cores) { + + // The last core to the reduction barrier sums the partial reductions + if ((num_cores - 1) == + __atomic_fetch_add(&red_barrier[0], 1, __ATOMIC_RELAXED)) { + + // Reduction + uint32_t idx_red = 0; + __fp16 local_sum = (__fp16)0.0f; + while (idx_red < NUM_BANKS) { + asm volatile("fadd.h %0, %0, %1;" : "+&r"(local_sum) : "r"(sum[idx_red])); + idx_red += 2 * BANKING_FACTOR; + } + sum[0] = local_sum; + + __atomic_store_n(&red_barrier[0], 0, __ATOMIC_RELAXED); + __sync_synchronize(); + wake_up_all(); + } + mempool_wfi(); + + return; +} + +/* Bynary tree reduction */ +void mempool_binary_reduction_f16(__fp16 *sum, uint32_t core_id, + uint32_t num_cores) { + + uint32_t idx, step = 2, previous_step = 1; + while (num_cores > 1) { + idx = (step * (core_id / step)) * BANKING_FACTOR; + // dump_prova(idx); + if (__atomic_fetch_add(&red_barrier[idx + previous_step - 1], 1, + __ATOMIC_RELAXED)) { + + // Reduction + __fp16 add = sum[2 * (idx + previous_step * BANKING_FACTOR)]; + asm volatile("fadd.h %0, %0, %1;" : "+&r"(sum[2 * idx]) : "r"(add)); + + // Next level of binary tree + __atomic_store_n(&red_barrier[idx + previous_step - 1], 0, + __ATOMIC_RELAXED); + num_cores = num_cores / 2; + previous_step = step; + step = step * 2; + + } else { + // Goes to sleep + break; + } + } + + // Last core wakes everyone + if (num_cores == 1) { + __sync_synchronize(); + wake_up_all(); + } + mempool_wfi(); + + return; +} + +/* Single-core dot-product */ +void dotp_f16s(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + if (core_id == 0) { + mempool_start_benchmark(); + // Kernel execution + __fp16 local_sum = (__fp16)0.0f; + __fp16 *end = in_a + Len; + do { + asm volatile("fmadd.h %0, %1, %2, %0;" + : "+&r"(local_sum) + : "r"(*in_a), "r"(*in_b)); + in_a++; + in_b++; + } while (in_a < end); + s[0] = local_sum; + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + return; +} + +/* Single-core dot-product unrolled4 */ +void dotp_f16s_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + if (core_id == 0) { + mempool_start_benchmark(); + uint32_t i = 0; + + v2h a01, a23; + v2h b01, b23; + float local_sum0 = 0.0f; + float local_sum1 = 0.0f; + + for (i = 0; i < Len; i += 4) { + DOTPF16VEC_UNROLLED4_LOOP; + } + // Reduction + asm volatile( + "fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fcvt.h.s %[local_sum0], %[local_sum0];" + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) + :); + s[0] = *(__fp16 *)&local_sum0; + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); + + return; +} + +/* Parallel dot-product */ +void dotp_f16p(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t Len, + uint32_t nPE) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + __fp16 local_sum = (__fp16)0.0f; + __fp16 a, b; + for (uint32_t i = core_id * step; i < core_id * step + step; i++) { + a = in_a[i]; + b = in_b[i]; + asm volatile("fmadd.h %0, %1, %2, %0;" : "+&r"(local_sum) : "r"(a), "r"(b)); + } + s[2 * core_id * BANKING_FACTOR] = local_sum; + + uint32_t num_cores = mempool_get_core_count(); + mempool_reduction_f16(s, num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling*/ +void dotp_f16vecp_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t Len, + uint32_t nPE) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + uint32_t i; + + v2h a01, a23; + v2h b01, b23; + float local_sum0 = 0.0f; + float local_sum1 = 0.0f; + + for (i = core_id * step; i < core_id * step + step; i += 4) { + DOTPF16VEC_UNROLLED4_LOOP; + } + asm volatile("fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fcvt.h.s %[local_sum0], %[local_sum0];" + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) + :); + s[2 * core_id * BANKING_FACTOR] = *(__fp16 *)&local_sum0; + uint32_t num_cores = mempool_get_core_count(); + mempool_reduction_f16(s, num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling */ +/* Load and stores only in local memory */ +void dotp_f16vecp_local_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *s, + uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + + v2h a01, a23; + v2h b01, b23; + float local_sum0 = 0.0f; + float local_sum1 = 0.0f; + for (uint32_t i = core_id * BANKING_FACTOR; i < Len; i += NUM_BANKS) { + DOTPF16VEC_UNROLLED4_LOOP; + } + asm volatile("fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fcvt.h.s %[local_sum0], %[local_sum0];" + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) + :); + s[2 * core_id * BANKING_FACTOR] = *(__fp16 *)&local_sum0; + +// The last core to the reduction barrier sums the partial reductions +#if defined(SINGLE_CORE_REDUCTION) + uint32_t num_cores = mempool_get_core_count(); + mempool_reduction_f16(s, num_cores); +// A) Cores store locally in sum array +// B) Partial sums are reduced logarithmically +#elif defined(BINARY_REDUCTION) + uint32_t num_cores = mempool_get_core_count(); + mempool_binary_reduction_f16(s, core_id, num_cores); +#endif + + return; +} diff --git a/software/kernels/baremetal/mempool_dotp_f32.h b/software/kernels/baremetal/mempool_dotp_f32.h new file mode 100644 index 000000000..58fa0e9d5 --- /dev/null +++ b/software/kernels/baremetal/mempool_dotp_f32.h @@ -0,0 +1,267 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#define DOTPF32_UNROLLED4_LOOP \ + { \ + a0 = in_a[i]; \ + b0 = in_b[i]; \ + a1 = in_a[i + 1]; \ + b1 = in_b[i + 1]; \ + a2 = in_a[i + 2]; \ + b2 = in_b[i + 2]; \ + a3 = in_a[i + 3]; \ + b3 = in_b[i + 3]; \ + asm volatile( \ + "fmadd.s %[local_sum0], %[a0], %[b0], %[local_sum0];" \ + "fmadd.s %[local_sum1], %[a1], %[b1], %[local_sum1];" \ + "fmadd.s %[local_sum2], %[a2], %[b2], %[local_sum2];" \ + "fmadd.s %[local_sum3], %[a3], %[b3], %[local_sum3];" \ + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), \ + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) \ + : [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), [a3] "r"(a3), \ + [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3)); \ + } + +/* Single core reduction */ +void mempool_reduction_f32(float *sum, uint32_t num_cores) { + + // The last core to the reduction barrier sums the partial reductions + if ((num_cores - 1) == + __atomic_fetch_add(&red_barrier[0], 1, __ATOMIC_RELAXED)) { + + // Reduction + uint32_t idx_red = 0; + float local_sum = 0.0f; + while (idx_red < NUM_BANKS) { + asm volatile("fadd.s %0, %0, %1;" : "+&r"(local_sum) : "r"(sum[idx_red])); + idx_red += BANKING_FACTOR; + } + sum[0] = local_sum; + + __atomic_store_n(&red_barrier[0], 0, __ATOMIC_RELAXED); + __sync_synchronize(); + wake_up_all(); + } + mempool_wfi(); + + return; +} + +/* Bynary tree reduction */ +void mempool_binary_reduction_f32(float *sum, uint32_t core_id, + uint32_t num_cores) { + + uint32_t idx, step = 2, previous_step = 1; + while (num_cores > 1) { + idx = (step * (core_id / step)) * BANKING_FACTOR; + // dump_prova(idx); + if (__atomic_fetch_add(&red_barrier[idx + previous_step - 1], 1, + __ATOMIC_RELAXED)) { + + // Reduction + float add = sum[idx + previous_step * BANKING_FACTOR]; + asm volatile("fadd.s %0, %0, %1;" : "+&r"(sum[idx]) : "r"(add)); + + // Next level of binary tree + __atomic_store_n(&red_barrier[idx + previous_step - 1], 0, + __ATOMIC_RELAXED); + num_cores = num_cores / 2; + previous_step = step; + step = step * 2; + + } else { + // Goes to sleep + break; + } + } + + // Last core wakes everyone + if (num_cores == 1) { + __sync_synchronize(); + wake_up_all(); + } + mempool_wfi(); + + return; +} + +/* Single-core dot-product */ +void dotp_f32s(float *in_a, float *in_b, float *s, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + // Kernel execution + register float local_sum = 0; + float *end = in_a + Len; + do { + asm volatile("fmadd.s %0, %1, %2, %0;" + : "+&r"(local_sum) + : "r"(*in_a), "r"(*in_b)); + in_a++; + in_b++; + } while (in_a < end); + *s = local_sum; + mempool_stop_benchmark(); + } + + return; +} + +/* Single-core dot-product unrolled4 */ +void dotp_f32s_unrolled4(float *in_a, float *in_b, float *s, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + uint32_t reminder = Len % 4; + uint32_t i = 0; + + register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + register float local_sum0 = 0.0f; + register float local_sum1 = 0.0f; + register float local_sum2 = 0.0f; + register float local_sum3 = 0.0f; + + for (i = 0; i < (Len - reminder); i += 4) { + DOTPF32_UNROLLED4_LOOP; + } + while (i < Len) { + a0 = in_a[i]; + b0 = in_b[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" + : "+&r"(local_sum0) + : "r"(a0), "r"(b0)); + i++; + } + // Reduction + asm volatile( + "fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fadd.s %[local_sum2], %[local_sum2], %[local_sum3];" + "fadd.s %[local_sum0], %[local_sum0], %[local_sum2];" + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) + :); + *s = local_sum0; + mempool_stop_benchmark(); + } + + return; +} + +/* Parallel dot-product */ +void dotp_f32p(float *in_a, float *in_b, float *s, uint32_t Len, uint32_t nPE) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + register float local_sum = 0; + register float a, b; + for (uint32_t i = core_id * step; i < core_id * step + step; i++) { + a = in_a[i]; + b = in_b[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(local_sum) : "r"(a), "r"(b)); + } + s[core_id * BANKING_FACTOR] = local_sum; + + uint32_t num_cores = mempool_get_core_count(); + mempool_reduction_f32(s, num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling*/ +void dotp_f32p_unrolled4(float *in_a, float *in_b, float *s, uint32_t Len, + uint32_t nPE) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + uint32_t reminder = step % 4; + uint32_t i; + + register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + register float local_sum0 = 0.0f; + register float local_sum1 = 0.0f; + register float local_sum2 = 0.0f; + register float local_sum3 = 0.0f; + + for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { + DOTPF32_UNROLLED4_LOOP; + } + i = core_id * step + step - reminder; + while (i < step) { + a0 = in_a[i]; + b0 = in_b[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" + : "+&r"(local_sum0) + : "r"(a0), "r"(b0)); + i++; + } + asm volatile("fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fadd.s %[local_sum2], %[local_sum2], %[local_sum3];" + "fadd.s %[local_sum0], %[local_sum0], %[local_sum2];" + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) + :); + s[core_id * BANKING_FACTOR] = local_sum0; + uint32_t num_cores = mempool_get_core_count(); + mempool_reduction_f32(s, num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling */ +/* Load and stores only in local memory */ +void dotp_f32p_local_unrolled4(float *in_a, float *in_b, float *s, + uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + uint32_t const remainder = Len % BANKING_FACTOR; + uint32_t const idx_stop = Len - remainder; + + register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + register float local_sum0 = 0.0f; + register float local_sum1 = 0.0f; + register float local_sum2 = 0.0f; + register float local_sum3 = 0.0f; + + for (uint32_t i = core_id * BANKING_FACTOR; i < idx_stop; i += NUM_BANKS) { + DOTPF32_UNROLLED4_LOOP; + } + if (core_id == ((Len % NUM_BANKS) / 4)) { + for (uint32_t i = Len - remainder; i < Len; i++) { + a0 = in_a[i]; + b0 = in_b[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" + : "+&r"(local_sum0) + : "r"(a0), "r"(b0)); + } + } + asm volatile("fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fadd.s %[local_sum2], %[local_sum2], %[local_sum3];" + "fadd.s %[local_sum0], %[local_sum0], %[local_sum2];" + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) + :); + s[core_id * BANKING_FACTOR] = local_sum0; + +// The last core to the reduction barrier sums the partial reductions +#if defined(SINGLE_CORE_REDUCTION) + uint32_t num_cores = mempool_get_core_count(); + mempool_reduction_f32(s, num_cores); + +// A) Cores store locally in sum array +// B) Partial sums are reduced logarithmically +#elif defined(BINARY_REDUCTION) + uint32_t num_cores = mempool_get_core_count(); + mempool_binary_reduction_f32(s, core_id, num_cores); + +#endif + + return; +} diff --git a/software/kernels/baremetal/mempool_dotp_i32p.h b/software/kernels/baremetal/mempool_dotp_i32.h similarity index 63% rename from software/kernels/baremetal/mempool_dotp_i32p.h rename to software/kernels/baremetal/mempool_dotp_i32.h index 26fbe03e9..4b80e92ed 100644 --- a/software/kernels/baremetal/mempool_dotp_i32p.h +++ b/software/kernels/baremetal/mempool_dotp_i32.h @@ -4,6 +4,115 @@ // Author: Marco Bertuletti, ETH Zurich +#define DOTPI32_UNROLLED4_LOOP \ + { \ + a0 = in_a[i]; \ + b0 = in_b[i]; \ + a1 = in_a[i + 1]; \ + b1 = in_b[i + 1]; \ + a2 = in_a[i + 2]; \ + b2 = in_b[i + 2]; \ + a3 = in_a[i + 3]; \ + b3 = in_b[i + 3]; \ + local_sum0 += a0 * b0; \ + local_sum1 += a1 * b1; \ + local_sum2 += a2 * b2; \ + local_sum3 += a3 * b3; \ + } + +/* Bynary tree reduction */ +void mempool_binary_reduction_i32(int32_t *sum, uint32_t core_id, + uint32_t num_cores) { + + uint32_t idx, step = 2, previous_step = 1; + while (num_cores > 1) { + idx = (step * (core_id / step)) * BANKING_FACTOR; + // dump_prova(idx); + if (__atomic_fetch_add(&red_barrier[idx + previous_step - 1], 1, + __ATOMIC_RELAXED)) { + + // Reduction + sum[idx] += sum[idx + previous_step * BANKING_FACTOR]; + + // Next level of binary tree + __atomic_store_n(&red_barrier[idx + previous_step - 1], 0, + __ATOMIC_RELAXED); + num_cores = num_cores / 2; + previous_step = step; + step = step * 2; + + } else { + // Goes to sleep + break; + } + } + + // Last core wakes everyone + if (num_cores == 1) { + __sync_synchronize(); + wake_up_all(); + } + mempool_wfi(); + + return; +} + +/* Single-core dot-product */ +void dotp_i32s(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + // Kernel execution + register int32_t local_sum = 0; + int32_t *end = in_a + Len; + do { + local_sum += ((*in_a++) * (*in_b++)); + } while (in_a < end); + *s = local_sum; + mempool_stop_benchmark(); + } + + return; +} + +/* Single-core dot-product unrolled4 */ +void dotp_i32s_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, + uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + uint32_t reminder = Len % 4; + uint32_t i = 0; + + register int32_t a0 = 0, a1 = 0, a2 = 0, a3 = 0; + register int32_t b2 = 0, b1 = 0, b0 = 0, b3 = 0; + register int32_t local_sum0 = 0; + register int32_t local_sum1 = 0; + register int32_t local_sum2 = 0; + register int32_t local_sum3 = 0; + + for (i = 0; i < (Len - reminder); i += 4) { + DOTPI32_UNROLLED4_LOOP; + } + while (i < Len) { + a0 = in_a[i]; + b0 = in_b[i]; + local_sum0 += a0 * b0; + i++; + } + // Reduction + local_sum0 += local_sum1; + local_sum2 += local_sum3; + local_sum0 += local_sum2; + *s = local_sum0; + mempool_stop_benchmark(); + } + + return; +} + /* Parallel dot-product */ void dotp_i32p(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, uint32_t nPE) { @@ -18,12 +127,14 @@ void dotp_i32p(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, local_sum += a * b; } __atomic_fetch_add(&s[0], local_sum, __ATOMIC_RELAXED); + #ifdef LOG_BARRIERS mempool_log_barrier(2, core_id); #else uint32_t num_cores = mempool_get_core_count(); mempool_barrier(num_cores); #endif + return; } @@ -42,19 +153,9 @@ void dotp_i32p_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, register int32_t local_sum1 = 0; register int32_t local_sum2 = 0; register int32_t local_sum3 = 0; + for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { - a0 = in_a[i]; - b0 = in_b[i]; - a1 = in_a[i + 1]; - b1 = in_b[i + 1]; - a2 = in_a[i + 2]; - b2 = in_b[i + 2]; - a3 = in_a[i + 3]; - b3 = in_b[i + 3]; - local_sum0 += a0 * b0; - local_sum1 += a1 * b1; - local_sum2 += a2 * b2; - local_sum3 += a3 * b3; + DOTPI32_UNROLLED4_LOOP; } i = core_id * step + step - reminder; while (i < step) { @@ -67,48 +168,13 @@ void dotp_i32p_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len, local_sum2 += local_sum3; local_sum0 += local_sum2; __atomic_fetch_add(&s[0], local_sum0, __ATOMIC_RELAXED); + #ifdef LOG_BARRIERS mempool_log_barrier(2, core_id); #else uint32_t num_cores = mempool_get_core_count(); mempool_barrier(num_cores); #endif - return; -} - -/* Bynary tree reduction */ -void mempool_binary_reduction(int32_t *sum, uint32_t core_id, - uint32_t num_cores) { - - uint32_t idx, step = 2, previous_step = 1; - while (num_cores > 1) { - idx = (step * (core_id / step)) * BANKING_FACTOR; - // dump_prova(idx); - if (__atomic_fetch_add(&red_barrier[idx + previous_step - 1], 1, - __ATOMIC_RELAXED)) { - - // Reduction - sum[idx] += sum[idx + previous_step * BANKING_FACTOR]; - - // Next level of binary tree - __atomic_store_n(&red_barrier[idx + previous_step - 1], 0, - __ATOMIC_RELAXED); - num_cores = num_cores / 2; - previous_step = step; - step = step * 2; - - } else { - // Goes to sleep - break; - } - } - - // Last core wakes everyone - if (num_cores == 1) { - __sync_synchronize(); - wake_up_all(); - } - mempool_wfi(); return; } @@ -120,7 +186,7 @@ void dotp_i32p_local_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { uint32_t core_id = mempool_get_core_id(); - uint32_t const remainder = Len % 4; + uint32_t const remainder = Len % BANKING_FACTOR; uint32_t const idx_stop = Len - remainder; register int32_t a0 = 0, a1 = 0, a2 = 0, a3 = 0; @@ -130,7 +196,7 @@ void dotp_i32p_local_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, register int32_t local_sum2 = 0; register int32_t local_sum3 = 0; - for (uint32_t i = core_id * 4; i < idx_stop; i += NUM_BANKS) { + for (uint32_t i = core_id * BANKING_FACTOR; i < idx_stop; i += NUM_BANKS) { a0 = in_a[i]; b0 = in_b[i]; a1 = in_a[i + 1]; @@ -187,8 +253,8 @@ void dotp_i32p_local_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, // B) Partial sums are reduced logarithmically #elif defined(BINARY_REDUCTION) uint32_t num_cores = mempool_get_core_count(); - s[core_id * 4] = local_sum0; - mempool_binary_reduction(s, core_id, num_cores); + s[core_id * BANKING_FACTOR] = local_sum0; + mempool_binary_reduction_i32(s, core_id, num_cores); #endif diff --git a/software/kernels/baremetal/mempool_dotp_i32s.h b/software/kernels/baremetal/mempool_dotp_i32s.h deleted file mode 100644 index dd562debb..000000000 --- a/software/kernels/baremetal/mempool_dotp_i32s.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2021 ETH Zurich and University of Bologna. -// Licensed under the Apache License, Version 2.0, see LICENSE for details. -// SPDX-License-Identifier: Apache-2.0 - -// Author: Marco Bertuletti, ETH Zurich - -/* Single-core dot-product */ -void dotp_i32s(int32_t *in_a, int32_t *in_b, int32_t *s, uint32_t Len) { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - if (core_id == 0) { - mempool_start_benchmark(); - // Kernel execution - register int32_t local_sum = 0; - int32_t *end = in_a + Len; - do { - local_sum += ((*in_a++) * (*in_b++)); - } while (in_a < end); - *s = local_sum; - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); -} - -/* Single-core dot-product unrolled4 */ -void dotp_i32s_unrolled4(int32_t *in_a, int32_t *in_b, int32_t *s, - uint32_t Len) { - - uint32_t core_id = mempool_get_core_id(); - uint32_t num_cores = mempool_get_core_count(); - if (core_id == 0) { - mempool_start_benchmark(); - uint32_t reminder = Len % 4; - uint32_t i = 0; - int32_t a0 = 0, b0 = 0, a1 = 0, b1 = 0, a2 = 0, b2 = 0, a3 = 0, b3 = 0; - register int32_t local_sum_1 = 0; - register int32_t local_sum_2 = 0; - register int32_t local_sum_3 = 0; - register int32_t local_sum_4 = 0; - for (i = 0; i < (Len - reminder); i += 4) { - a0 = in_a[i]; - b0 = in_b[i]; - a1 = in_a[i + 1]; - b1 = in_b[i + 1]; - a2 = in_a[i + 2]; - b2 = in_b[i + 2]; - a3 = in_a[i + 3]; - b3 = in_b[i + 3]; - local_sum_1 += a0 * b0; - local_sum_2 += a1 * b1; - local_sum_3 += a2 * b2; - local_sum_4 += a3 * b3; - } - while (i < Len) { - a0 = in_a[i]; - b0 = in_b[i]; - local_sum_1 += a0 * b0; - i++; - } - // Reduction - local_sum_1 += local_sum_2; - local_sum_3 += local_sum_4; - local_sum_1 += local_sum_3; - *s = local_sum_1; - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); -} From bf0e68d2347f6772c70aa0f0a00056139f46d309 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Mon, 2 Sep 2024 13:09:31 +0200 Subject: [PATCH 34/39] [software] Add f32 and f16 axpy app --- software/apps/baremetal/Makefile | 14 +- software/apps/baremetal/axpy_f16/main.c | 69 ++++++++ software/apps/baremetal/axpy_f32/main.c | 62 +++++++ software/apps/baremetal/axpy_i32/main.c | 2 +- software/data/data_axpy_f16.h.tpl | 26 +++ software/data/data_axpy_f32.h.tpl | 26 +++ software/data/generate_dotp.py | 44 ++++- software/kernels/baremetal/mempool_axpy_f16.h | 124 +++++++++++++ software/kernels/baremetal/mempool_axpy_f32.h | 165 ++++++++++++++++++ ...mempool_axpy_i32p.h => mempool_axpy_i32.h} | 0 10 files changed, 528 insertions(+), 4 deletions(-) create mode 100644 software/apps/baremetal/axpy_f16/main.c create mode 100644 software/apps/baremetal/axpy_f32/main.c create mode 100644 software/data/data_axpy_f16.h.tpl create mode 100644 software/data/data_axpy_f32.h.tpl create mode 100644 software/kernels/baremetal/mempool_axpy_f16.h create mode 100644 software/kernels/baremetal/mempool_axpy_f32.h rename software/kernels/baremetal/{mempool_axpy_i32p.h => mempool_axpy_i32.h} (100%) diff --git a/software/apps/baremetal/Makefile b/software/apps/baremetal/Makefile index b4b2ee496..ffecfabba 100644 --- a/software/apps/baremetal/Makefile +++ b/software/apps/baremetal/Makefile @@ -22,8 +22,18 @@ ALLPYS := $(patsubst %.py,%.h,$(wildcard $(DATA_DIR)/*.py)) BINARIES := $(addprefix $(BIN_DIR)/,$(APPS)) ALL := $(APPS) -ALL_GCC := $(filter-out cfft_radix4_f16 chest_f16 cholesky_f16 cmatmul_f16 matmul_f16 matmul_f32 mimo_mmse_f32 mimo_mmse_f16 ofdm, $(ALL)) -ALL_LLVM := $(filter-out synth_i32 cfft_radix2_q16 cfft_radix4_q16 chest_q16 cholesky_q16 cholesky_q32 cmatmul_q16 mimo_mmse_q16, $(ALL)) +FP_APPS := axpy_f16 axpy_f32 +FP_APPS += cfft_radix4_f16 chest_f16 cholesky_f16 +FP_APPS += cmatmul_f16 matmul_f16 matmul_f32 +FP_APPS += dotp_f16 dotp_f32 +FP_APPS += mimo_mmse_f32 mimo_mmse_f16 ofdm + +I_APPS := synth_i32 +I_APPS += cfft_radix2_q16 cfft_radix4_q16 chest_q16 cholesky_q16 cholesky_q32 +I_APPS += cmatmul_q16 mimo_mmse_q16 + +ALL_GCC := $(filter-out $(FP_APPS), $(ALL)) +ALL_LLVM := $(filter-out $(I_APPS), $(ALL)) # Make all applications all: $(ALL_GCC) diff --git a/software/apps/baremetal/axpy_f16/main.c b/software/apps/baremetal/axpy_f16/main.c new file mode 100644 index 000000000..9fe49d299 --- /dev/null +++ b/software/apps/baremetal/axpy_f16/main.c @@ -0,0 +1,69 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include +#include + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data_axpy_f16.h" +#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) + +// Vectors for kernel computation +__fp16 l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +__fp16 l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +__fp16 l1_C[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); + +#include "baremetal/mempool_axpy_f16.h" +#include "baremetal/mempool_checks.h" + +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + uint32_t time_init, time_end; + mempool_barrier_init(core_id); + + time_init = 0; + time_end = 0; + if (core_id == 0) { + dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int16_t)); + dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int16_t)); + dma_memcpy_blocking(l1_C, l2_C, LEN * sizeof(int16_t)); + } + mempool_barrier(num_cores); + + // // SINGLE + // time_init = mempool_get_timer(); + // axpy_f16s(l1_A, l1_B, l1_C, LEN); + // time_end = mempool_get_timer(); + + // // PARALLEL + // time_init = mempool_get_timer(); + // axpy_f16vecp_unrolled4(l1_A, l1_B, l1_C, LEN, num_cores); + // time_end = mempool_get_timer(); + + // PARALLEL, LOCAL ACCESSES + time_init = mempool_get_timer(); + axpy_f16vecp_local_unrolled4(l1_A, l1_B, l1_C, LEN); + time_end = mempool_get_timer(); + + mempool_barrier(num_cores); + // Check results + if (core_id == 0) { + uint32_t clock_cycles = (time_end - time_init); + printf("\nKernel execution takes %d clock cycles\n", clock_cycles); + } + mempool_check_f16(l1_C, l2_out, 100, 0.1f, 0); + mempool_barrier(num_cores); + + return 0; +} diff --git a/software/apps/baremetal/axpy_f32/main.c b/software/apps/baremetal/axpy_f32/main.c new file mode 100644 index 000000000..262342fb2 --- /dev/null +++ b/software/apps/baremetal/axpy_f32/main.c @@ -0,0 +1,62 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include +#include +#include + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "data_axpy_f32.h" +#define NUM_BANKS (NUM_CORES * BANKING_FACTOR) +#define SINGLE_CORE_REDUCTION +// #define BINARY_REDUCTION + +// Vectors for kernel computation +float l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +float l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +float l1_C[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); + +#include "baremetal/mempool_axpy_f32.h" +#include "baremetal/mempool_checks.h" + +int main() { + + uint32_t core_id = mempool_get_core_id(); + uint32_t num_cores = mempool_get_core_count(); + uint32_t time_init, time_end; + mempool_barrier_init(core_id); + + time_init = 0; + time_end = 0; + if (core_id == 0) { + dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int32_t)); + dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int32_t)); + dma_memcpy_blocking(l1_C, l2_C, LEN * sizeof(int32_t)); + } + mempool_barrier(num_cores); + + // PARALLEL + time_init = mempool_get_timer(); + // axpy_f32p(l1_A, l1_B, l1_C, LEN, num_cores); + // axpy_f32p_unrolled4(l1_A, l1_B, l1_C, LEN, num_cores); + axpy_f32p_local_unrolled4(l1_A, l1_B, l1_C, LEN); + time_end = mempool_get_timer(); + + // Check results + if (core_id == 0) { + uint32_t clock_cycles = (time_end - time_init); + printf("\nKernel execution takes %d clock cycles\n", clock_cycles); + } + mempool_check_f32(l1_C, l2_out, 100, 0.1f, 0); + mempool_barrier(num_cores); + + return 0; +} diff --git a/software/apps/baremetal/axpy_i32/main.c b/software/apps/baremetal/axpy_i32/main.c index a9354796e..b63e31499 100644 --- a/software/apps/baremetal/axpy_i32/main.c +++ b/software/apps/baremetal/axpy_i32/main.c @@ -7,7 +7,7 @@ #include #include -#include "baremetal/mempool_axpy_i32p.h" +#include "baremetal/mempool_axpy_i32.h" #include "encoding.h" #include "printf.h" #include "runtime.h" diff --git a/software/data/data_axpy_f16.h.tpl b/software/data/data_axpy_f16.h.tpl new file mode 100644 index 000000000..09ea72cbf --- /dev/null +++ b/software/data/data_axpy_f16.h.tpl @@ -0,0 +1,26 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:.4f}, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LEN (${Len}) + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C[${Len}] = ${array_to_cstr(C)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_out[${Len}] = ${array_to_cstr(out)}; diff --git a/software/data/data_axpy_f32.h.tpl b/software/data/data_axpy_f32.h.tpl new file mode 100644 index 000000000..2efe34b45 --- /dev/null +++ b/software/data/data_axpy_f32.h.tpl @@ -0,0 +1,26 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '{}f, '.format(a) + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define LEN (${Len}) + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C[${Len}] = ${array_to_cstr(C)}; + +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_out[${Len}] = ${array_to_cstr(out)}; diff --git a/software/data/generate_dotp.py b/software/data/generate_dotp.py index 66fc95bcc..64170f573 100644 --- a/software/data/generate_dotp.py +++ b/software/data/generate_dotp.py @@ -40,6 +40,26 @@ def generate_dotp_f16(Len): C = (np.dot(A, B)).astype(np.float16) return A, B, C + +def generate_axpy_f32(Len): + + # Create matrix + A = np.random.rand(Len).astype(np.float32) + B = np.random.rand(Len).astype(np.float32) + C = np.random.rand(Len).astype(np.float32) + out = C + A * B + return A, B, C, out + + +def generate_axpy_f16(Len): + + # Create matrix + A = np.random.rand(Len).astype(np.float16) + B = np.random.rand(Len).astype(np.float16) + C = np.random.rand(Len).astype(np.float16) + out = C + A * B + return A, B, C, out + ################## # compute_result # ################## @@ -73,7 +93,7 @@ def main(): "--length", type=int, required=False, - default=4096, + default=1024, help='First dimension.' ) @@ -110,6 +130,28 @@ def main(): 'Len': Len} gen_data_header_file(args.outdir, tpl, **kwargs) + A, B, C, out = generate_axpy_f32(Len) + tpl = pathlib.Path(__file__).parent.absolute() / "data_axpy_f32.h.tpl" + kwargs = { + 'name': 'data_axpy_f32', + 'A': A, + 'B': B, + 'C': C, + 'out': out, + 'Len': Len} + gen_data_header_file(args.outdir, tpl, **kwargs) + + A, B, C, out = generate_axpy_f16(Len) + tpl = pathlib.Path(__file__).parent.absolute() / "data_axpy_f16.h.tpl" + kwargs = { + 'name': 'data_axpy_f16', + 'A': A, + 'B': B, + 'C': C, + 'out': out, + 'Len': Len} + gen_data_header_file(args.outdir, tpl, **kwargs) + if __name__ == "__main__": main() diff --git a/software/kernels/baremetal/mempool_axpy_f16.h b/software/kernels/baremetal/mempool_axpy_f16.h new file mode 100644 index 000000000..e54331d2d --- /dev/null +++ b/software/kernels/baremetal/mempool_axpy_f16.h @@ -0,0 +1,124 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#pragma once +#include "builtins_v2.h" + +#define AXPYF16VEC_UNROLLED4_LOOP \ + { \ + a01 = (*(v2h *)&in_a[i]); \ + a23 = (*(v2h *)&in_a[i + 2]); \ + b01 = (*(v2h *)&in_b[i]); \ + b23 = (*(v2h *)&in_b[i + 2]); \ + c01 = (*(v2h *)&in_c[i]); \ + c23 = (*(v2h *)&in_c[i + 2]); \ + asm volatile( \ + "vfmac.h %[c01], %[a01], %[b01];" \ + "vfmac.h %[c23], %[a23], %[b23];" \ + : [c01] "+&r"(c01), [c23] "+&r"(c23) \ + : [a01] "r"(a01), [a23] "r"(a23), [b01] "r"(b01), [b23] "r"(b23)); \ + (*(v2h *)&in_c[i]) = c01; \ + (*(v2h *)&in_c[i + 2]) = c23; \ + } + +/* Single-core dot-product */ +void axpy_f16s(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + // Kernel execution + __fp16 *end = in_a + Len / 2; + do { + asm volatile("fmadd.h %0, %1, %2, %0;" + : "+&r"(*in_c) + : "r"(*in_a), "r"(*in_b)); + in_a++; + in_b++; + in_c++; + } while (in_a < end); + mempool_stop_benchmark(); + } + + return; +} + +/* Single-core dot-product unrolled4 */ +void axpy_f16s_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, + uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + uint32_t i = 0; + v2h a01, a23; + v2h b01, b23; + v2h c01, c23; + for (i = 0; i < Len; i += 4) { + AXPYF16VEC_UNROLLED4_LOOP; + } + mempool_stop_benchmark(); + } + + return; +} + +/* Parallel dot-product */ +void axpy_f16p(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, uint32_t Len, + uint32_t nPE) { + + uint32_t num_cores = mempool_get_core_count(); + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + __fp16 a, b, c; + for (uint32_t i = core_id * step; i < core_id * step + step; i++) { + a = in_a[i]; + b = in_b[i]; + c = in_c[i]; + asm volatile("fmadd.h %0, %1, %2, %0;" : "+&r"(c) : "r"(a), "r"(b)); + in_c[i] = c; + } + mempool_barrier(num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling*/ +void axpy_f16vecp_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, + uint32_t Len, uint32_t nPE) { + + uint32_t num_cores = mempool_get_core_count(); + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + uint32_t i; + v2h a01, a23; + v2h b01, b23; + v2h c01, c23; + for (i = core_id * step; i < core_id * step + step; i += 4) { + AXPYF16VEC_UNROLLED4_LOOP; + } + mempool_barrier(num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling */ +/* Load and stores only in local memory */ +void axpy_f16vecp_local_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, + uint32_t Len) { + + uint32_t num_cores = mempool_get_core_count(); + uint32_t core_id = mempool_get_core_id(); + v2h a01, a23; + v2h b01, b23; + v2h c01, c23; + for (uint32_t i = core_id * BANKING_FACTOR; i < Len; i += NUM_BANKS) { + AXPYF16VEC_UNROLLED4_LOOP; + } + mempool_barrier(num_cores); + + return; +} diff --git a/software/kernels/baremetal/mempool_axpy_f32.h b/software/kernels/baremetal/mempool_axpy_f32.h new file mode 100644 index 000000000..ff069524c --- /dev/null +++ b/software/kernels/baremetal/mempool_axpy_f32.h @@ -0,0 +1,165 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#define AXPYF32_UNROLLED4_LOOP \ + { \ + a0 = in_a[i]; \ + b0 = in_b[i]; \ + c0 = in_c[i]; \ + a1 = in_a[i + 1]; \ + b1 = in_b[i + 1]; \ + c1 = in_c[i + 1]; \ + a2 = in_a[i + 2]; \ + b2 = in_b[i + 2]; \ + c2 = in_c[i + 2]; \ + a3 = in_a[i + 3]; \ + b3 = in_b[i + 3]; \ + c3 = in_c[i + 3]; \ + asm volatile( \ + "fmadd.s %[c0], %[a0], %[b0], %[c0];" \ + "fmadd.s %[c1], %[a1], %[b1], %[c1];" \ + "fmadd.s %[c2], %[a2], %[b2], %[c2];" \ + "fmadd.s %[c3], %[a3], %[b3], %[c3];" \ + : [c0] "+&r"(c0), [c1] "+&r"(c1), [c2] "+&r"(c2), [c3] "+&r"(c3) \ + : [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), [a3] "r"(a3), \ + [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3)); \ + in_c[i] = c0; \ + in_c[i + 1] = c1; \ + in_c[i + 2] = c2; \ + in_c[i + 3] = c3; \ + } + +/* Single-core dot-product */ +void axpy_f32s(float *in_a, float *in_b, float *in_c, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + // Kernel execution + float *end = in_a + Len; + do { + asm volatile("fmadd.s %0, %1, %2, %0;" + : "+&r"(*in_c) + : "r"(*in_a), "r"(*in_b)); + in_a++; + in_b++; + in_c++; + } while (in_a < end); + mempool_stop_benchmark(); + } + return; +} + +/* Single-core dot-product unrolled4 */ +void axpy_f32s_unrolled4(float *in_a, float *in_b, float *in_c, uint32_t Len) { + + uint32_t core_id = mempool_get_core_id(); + if (core_id == 0) { + mempool_start_benchmark(); + uint32_t reminder = Len % 4; + uint32_t i = 0; + + register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + register float c2 = 0.0f, c1 = 0.0f, c0 = 0.0f, c3 = 0.0f; + + for (i = 0; i < (Len - reminder); i += 4) { + AXPYF32_UNROLLED4_LOOP; + } + while (i < Len) { + a0 = in_a[i]; + b0 = in_b[i]; + c0 = in_c[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c0) : "r"(a0), "r"(b0)); + in_c[i] = c0; + i++; + } + mempool_stop_benchmark(); + } + return; +} + +/* Parallel dot-product */ +void axpy_f32p(float *in_a, float *in_b, float *in_c, uint32_t Len, + uint32_t nPE) { + + uint32_t num_cores = mempool_get_core_count(); + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + + register float a, b, c; + for (uint32_t i = core_id * step; i < core_id * step + step; i++) { + a = in_a[i]; + b = in_b[i]; + c = in_c[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c) : "r"(a), "r"(b)); + in_c[i] = c; + } + mempool_barrier(num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling*/ +void axpy_f32p_unrolled4(float *in_a, float *in_b, float *in_c, uint32_t Len, + uint32_t nPE) { + + uint32_t num_cores = mempool_get_core_count(); + uint32_t core_id = mempool_get_core_id(); + uint32_t step = Len / nPE; + uint32_t reminder = step % 4; + uint32_t i; + + register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + register float c2 = 0.0f, c1 = 0.0f, c0 = 0.0f, c3 = 0.0f; + + for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { + AXPYF32_UNROLLED4_LOOP; + } + i = core_id * step + step - reminder; + while (i < step) { + a0 = in_a[i]; + b0 = in_b[i]; + c0 = in_c[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c0) : "r"(a0), "r"(b0)); + in_c[i] = c0; + i++; + } + mempool_barrier(num_cores); + + return; +} + +/* Parallel dot-product with loop unrolling */ +/* Load and stores only in local memory */ +void axpy_f32p_local_unrolled4(float *in_a, float *in_b, float *in_c, + uint32_t Len) { + + uint32_t num_cores = mempool_get_core_count(); + uint32_t core_id = mempool_get_core_id(); + uint32_t const remainder = Len % BANKING_FACTOR; + uint32_t const idx_stop = Len - remainder; + + register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + register float c2 = 0.0f, c1 = 0.0f, c0 = 0.0f, c3 = 0.0f; + + for (uint32_t i = core_id * BANKING_FACTOR; i < idx_stop; i += NUM_BANKS) { + AXPYF32_UNROLLED4_LOOP; + } + if (core_id == ((Len % NUM_BANKS) / 4)) { + for (uint32_t i = Len - remainder; i < Len; i++) { + a0 = in_a[i]; + b0 = in_b[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c0) : "r"(a0), "r"(b0)); + in_c[i] = c0; + } + } + mempool_barrier(num_cores); + + return; +} diff --git a/software/kernels/baremetal/mempool_axpy_i32p.h b/software/kernels/baremetal/mempool_axpy_i32.h similarity index 100% rename from software/kernels/baremetal/mempool_axpy_i32p.h rename to software/kernels/baremetal/mempool_axpy_i32.h From 4abcd8890c80e0e30add578c4247a0dd208ec42b Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 5 Sep 2024 15:36:24 +0200 Subject: [PATCH 35/39] [software] Clean-up data transfers in MIMO MMSE --- software/apps/baremetal/mimo_mmse_f16/main.c | 239 ++++++++----------- 1 file changed, 96 insertions(+), 143 deletions(-) diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index 4389a0f3e..c5cb20155 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -18,35 +18,34 @@ #include "baremetal/mempool_mimo_mmse_f16s.h" #include "data_mimo_mmse_f16.h" +#define NUM_BANKS (BANKING_FACTOR * NUM_CORES) +#define DOUBLE_BUFFERING -// #define DOUBLE_BUFFERING -// #define N_ROUNDS (1) -// #define DMA_TRANSFER2 +/********************************************************** + ********************************************************** + _ _ ___ _ _ _____ __ + | \ | |/ _ \ | | / |_ _| __ __ _ _ __ ___ / _| + | \| | | | |_____| | | | | || '__/ _` | '_ \/ __| |_ + | |\ | |_| |_____| |___| | | || | | (_| | | | \__ \ _| + |_| \_|\___/ |_____|_| |_||_| \__,_|_| |_|___/_|(_) -#ifndef DOUBLE_BUFFERING - -/**********************************************/ -/* TEST OF THE KERNELS WITH NO DATA MOVEMENTS */ -/**********************************************/ +*********************************************************** +***********************************************************/ -//#define SINGLE +#ifndef DOUBLE_BUFFERING #define PARALLEL -//#define FOLDED __fp16 l1_H[2 * N_TX * N_RX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_G[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_L[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); uint32_t l1_beamgroups[N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); -__fp16 l1_Sigma[2 * N_TX * N_ITR] - __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_S[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1_y[2 * N_RX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 y2[2 * N_TX * N_ITR] @@ -62,21 +61,19 @@ int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); mempool_barrier_init(core_id); // Initialize barrier and synchronize - /* Initialize matrices */ if (core_id == 0) { dma_memcpy_blocking(l1_beamgroups, l2_beamgroups, N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); } mempool_barrier(num_cores); - /* Benchmark */ #ifdef SINGLE if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f16s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); + mempool_hermitian_f16s(l1_H, l1_G, l1_S, N_RX, N_TX, 0, 0); mempool_MVP_conjtransp_f16s(l1_H, l1_y, y2, N_RX, N_TX, 0); mempool_cholesky_f16vecs(l1_G, l1_L, N_TX); mempool_Ltrisol_f16s(l1_L, y2, y3, N_TX); @@ -87,30 +84,27 @@ int main() { #endif #ifdef PARALLEL - // Each iteration is assigned to a processor mempool_start_benchmark(); + // Parallel subcarrier loop for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - - uint32_t N_bg = l1_beamgroups[itr]; - uint32_t N_TX_bg = N_TX / N_bg; - __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = l1_y + itr * (2 * N_RX); - __fp16 *PtrSigma = l1_Sigma + itr * (2 * N_TX); - + __fp16 *PtrSigma = l1_S + itr * (2 * N_TX); + // Auxiliary vectors __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - + // Serial beamgroup Beamgroups loop + uint32_t N_bg = l1_beamgroups[itr]; + uint32_t N_TX_bg = N_TX / N_bg; for (uint32_t itr_bg = 0; itr_bg < N_bg; itr_bg++) { mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX_bg); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX_bg); mempool_cholesky_f16vecs(PtrG, PtrL, N_TX_bg); mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX_bg); mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX_bg); - // Shift over the subsequent beamgroup PtrH += 2 * itr_bg * N_TX_bg * N_RX; PtrSigma += 2 * itr_bg * N_TX_bg; @@ -121,76 +115,53 @@ int main() { mempool_stop_benchmark(); #endif -#ifdef FOLDED - // Each iteration is assigned to a processor - mempool_start_benchmark(); - for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - - __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); - __fp16 *Ptry = l1_y + itr * (2 * N_RX); - __fp16 *PtrSigma = l1_Sigma + itr * (2 * N_TX); - - __fp16 *PtrG = l1_G + (itr % num_cores) * (2 * N_TX) + - (itr / num_cores) * (N_TX * N_BANKS); - __fp16 *PtrL = l1_L + (itr % num_cores) * (2 * N_TX) + - (itr / num_cores) * (N_TX * N_BANKS); - __fp16 *Ptry2 = - y2 + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); - __fp16 *Ptry3 = - y3 + (itr % num_cores) * (2 * N_TX) + (itr / num_cores) * (N_BANKS); - __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - - mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 1, 0); - mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 1); - mempool_cholesky_folded_f16s(PtrG, PtrL, N_TX); - mempool_Ltrisol_folded_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_folded_f16s(PtrL, Ptry3, Ptrx, N_TX); - } - mempool_barrier(num_cores); - mempool_stop_benchmark(); -#endif - // Check the result mempool_check_f16(l1_x, l2_x, 2 * N_TX, 0.01f, 0); mempool_barrier(num_cores); return 0; } -#else +/********************************************************** + ********************************************************** + ____ __ __ _ _____ __ + | _ \| \/ | / \ |_ _| __ __ _ _ __ ___ / _| + | | | | |\/| | / _ \ _____| || '__/ _` | '_ \/ __| |_ + | |_| | | | |/ ___ \_____| || | | (_| | | | \__ \ _| + |____/|_| |_/_/ \_\ |_||_| \__,_|_| |_|___/_|(_) -/*******************************************/ -/* TEST OF THE KERNELS WITH DATA MOVEMENTS */ -/*******************************************/ +*********************************************************** +***********************************************************/ + +#else +#define N_ROUNDS (1) +#define DMA_TRANSFER1 // Inputs-Outputs even double-buffering rounds __fp16 l1A_H[2 * N_TX * N_RX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); -__fp16 l1A_Sigma[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1A_S[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1A_y[2 * N_RX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1A_x[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); - // Inputs-Outputs odd double-buffering rounds __fp16 l1B_H[2 * N_TX * N_RX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); -__fp16 l1B_Sigma[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1B_S[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1B_y[2 * N_RX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1B_x[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +/* Barrier for double buffering */ +uint32_t volatile dma_barrier __attribute__((section(".l1"))); // Auxiliary vectors __fp16 G[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); __fp16 L[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); __fp16 y2[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 y3[2 * N_TX * N_ITR] @@ -198,128 +169,106 @@ __fp16 y3[2 * N_TX * N_ITR] // Driver program int main() { - uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); - mempool_barrier_init(core_id); // Initialize barrier and synchronize + mempool_barrier_init(core_id); -#ifdef DMA_TRANSFER1 - - // INITIALIZATION - mempool_start_benchmark(); if (core_id == 0) { dma_memcpy_blocking(l1A_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1A_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1A_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1A_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); } mempool_barrier(num_cores); for (uint32_t round = 0; round < N_ROUNDS; round++) { - - // TRANSFER + /* Start DMA-transfer round */ mempool_start_benchmark(); // Transfer vectors __fp16 *trsf_H = ((round % 2) == 1) ? l1A_H : l1B_H; __fp16 *trsf_y = ((round % 2) == 1) ? l1A_y : l1B_y; - __fp16 *trsf_Sigma = ((round % 2) == 1) ? l1A_Sigma : l1B_Sigma; + __fp16 *trsf_S = ((round % 2) == 1) ? l1A_S : l1B_S; // Compute vectors __fp16 *cmpt_H = ((round % 2) == 0) ? l1A_H : l1B_H; __fp16 *cmpt_y = ((round % 2) == 0) ? l1A_y : l1B_y; - __fp16 *cmpt_Sigma = ((round % 2) == 0) ? l1A_Sigma : l1B_Sigma; - // On even rounds we transfer the result of odd computation and viceversa + __fp16 *cmpt_S = ((round % 2) == 0) ? l1A_S : l1B_S; + // On even rounds transfer the result of odd computation and viceversa __fp16 *trsf_x = ((round % 2) == 0) ? l1A_x : l1B_x; __fp16 *cmpt_x = ((round % 2) == 1) ? l1A_x : l1B_x; + + /***************************** + ***************************** + ___ _ ___ ___ _ _ + / __| /_\ / __| __| / | (_) + | (__ / _ \\__ \ _| | | _ + \___/_/ \_\___/___| |_| (_) + + ****************************** + ******************************/ + +#ifdef DMA_TRANSFER1 + // TRANSFER if (core_id == 0) { + dma_barrier = 0; dma_memcpy_nonblocking(trsf_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_nonblocking(trsf_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_nonblocking(trsf_Sigma, l2_Sigma, - N_TX * N_ITR * sizeof(int32_t)); - if (round >= 1) // Transfer to L2 is done only if not the + dma_memcpy_nonblocking(trsf_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + if (round >= 1) // Transfer to L2 is done only if not the first round dma_memcpy_nonblocking(l2_x, trsf_x, (N_TX * N_ITR) * sizeof(int32_t)); } - - // COMPUTATION - // Each iteration is assigned to a processor + // COMPUTE mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { __fp16 *PtrH = cmpt_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = cmpt_y + itr * (2 * N_RX); __fp16 *Ptrx = cmpt_x + itr * (2 * N_TX); - __fp16 *PtrSigma = cmpt_Sigma + itr * (2 * N_TX); + __fp16 *PtrS = cmpt_S + itr * (2 * N_TX); __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); - mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); } - mempool_log_barrier(2, core_id); - - // WAIT FOR DMA - mempool_start_benchmark(); - dma_wait(); // Wait for the end of the dma transfer - mempool_stop_benchmark(); - } - #endif -#ifdef DMA_TRANSFER2 + /***************************** + ***************************** + ___ _ ___ ___ ___ _ + / __| /_\ / __| __| |_ ) (_) + | (__ / _ \\__ \ _| / / _ + \___/_/ \_\___/___| /___| (_) - // INITIALIZATION - mempool_start_benchmark(); - if (core_id == 0) { - dma_memcpy_blocking(l1A_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1A_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1A_Sigma, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); - } - mempool_barrier(num_cores); + ****************************** + ******************************/ - for (uint32_t round = 0; round < N_ROUNDS; round++) { - - // Transfer vectors - __fp16 *trsf_H = ((round % 2) == 1) ? l1A_H : l1B_H; - __fp16 *trsf_y = ((round % 2) == 1) ? l1A_y : l1B_y; - __fp16 *trsf_Sigma = ((round % 2) == 1) ? l1A_Sigma : l1B_Sigma; - // Compute vectors - __fp16 *cmpt_H = ((round % 2) == 0) ? l1A_H : l1B_H; - __fp16 *cmpt_y = ((round % 2) == 0) ? l1A_y : l1B_y; - __fp16 *cmpt_Sigma = ((round % 2) == 0) ? l1A_Sigma : l1B_Sigma; - // On even rounds we transfer the result of odd computation and viceversa - __fp16 *trsf_x = ((round % 2) == 0) ? l1A_x : l1B_x; - __fp16 *cmpt_x = ((round % 2) == 1) ? l1A_x : l1B_x; - - // COMPUTATION - // Each iteration is assigned to a processor +#ifdef DMA_TRANSFER2 + // COMPUTE mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { __fp16 *PtrH = cmpt_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = cmpt_y + itr * (2 * N_RX); - __fp16 *PtrSigma = cmpt_Sigma + itr * (2 * N_TX); + __fp16 *PtrS = cmpt_S + itr * (2 * N_TX); __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); - mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); } mempool_log_barrier(2, core_id); - // TRANSFER mempool_start_benchmark(); if (core_id == 0) { dma_memcpy_nonblocking(trsf_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_nonblocking(trsf_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_nonblocking(trsf_Sigma, l2_Sigma, - N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); if (round >= 1) // Transfer to L2 is done only if not the dma_memcpy_nonblocking(l2_x, trsf_x, (N_TX * N_ITR) * sizeof(int32_t)); } - - // COMPUTATION - // Each iteration is assigned to a processor + // COMPUTE mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { __fp16 *Ptrx = cmpt_x + itr * (2 * N_TX); @@ -331,16 +280,20 @@ int main() { mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); } - mempool_log_barrier(2, core_id); +#endif - // WAIT FOR DMA - mempool_start_benchmark(); - dma_wait(); // Wait for the end of the dma transfer + // Synchronize and wait DMA + if ((num_cores - 1) == + __atomic_fetch_add(&dma_barrier, 1, __ATOMIC_RELAXED)) { + __atomic_store_n(&dma_barrier, 0, __ATOMIC_RELAXED); + __sync_synchronize(); + dma_wait(); + wake_up_all(); + } + mempool_wfi(); mempool_stop_benchmark(); + /* End DMA-transfer round */ } - -#endif - mempool_barrier(num_cores); return 0; } From a1bc514b3f2ce53613c6c6edc20c15c5b8cfc55a Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Thu, 12 Sep 2024 14:23:40 +0200 Subject: [PATCH 36/39] [software] Improve performance of axpy and dotp --- software/apps/baremetal/axpy_f16/main.c | 22 +-- software/apps/baremetal/axpy_f32/main.c | 21 ++- software/apps/baremetal/dotp_f16/main.c | 4 +- software/apps/baremetal/dotp_f32/main.c | 4 +- software/data/data_axpy_f16.h.tpl | 6 +- software/data/data_axpy_f32.h.tpl | 7 +- software/data/generate_dotp.py | 40 +++--- software/kernels/baremetal/mempool_axpy_f16.h | 103 +++++++------- software/kernels/baremetal/mempool_axpy_f32.h | 128 ++++++++---------- software/kernels/baremetal/mempool_dotp_f16.h | 54 +++++--- software/kernels/baremetal/mempool_dotp_f32.h | 51 ++++--- 11 files changed, 221 insertions(+), 219 deletions(-) diff --git a/software/apps/baremetal/axpy_f16/main.c b/software/apps/baremetal/axpy_f16/main.c index 9fe49d299..ff13cb879 100644 --- a/software/apps/baremetal/axpy_f16/main.c +++ b/software/apps/baremetal/axpy_f16/main.c @@ -18,9 +18,8 @@ #define NUM_BANKS (NUM_CORES * BANKING_FACTOR) // Vectors for kernel computation -__fp16 l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); -__fp16 l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); -__fp16 l1_C[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +__fp16 l1_X[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +__fp16 l1_Y[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); #include "baremetal/mempool_axpy_f16.h" #include "baremetal/mempool_checks.h" @@ -35,25 +34,28 @@ int main() { time_init = 0; time_end = 0; if (core_id == 0) { - dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int16_t)); - dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int16_t)); - dma_memcpy_blocking(l1_C, l2_C, LEN * sizeof(int16_t)); + dma_memcpy_blocking(l1_X, l2_X, LEN * sizeof(int16_t)); + dma_memcpy_blocking(l1_Y, l2_Y, LEN * sizeof(int16_t)); } + uint32_t register volatile a = *(uint32_t *)&(A)&0x0000FFFF; mempool_barrier(num_cores); // // SINGLE // time_init = mempool_get_timer(); - // axpy_f16s(l1_A, l1_B, l1_C, LEN); + // axpy_f16s(A, l1_X, l1_Y, LEN); // time_end = mempool_get_timer(); // // PARALLEL // time_init = mempool_get_timer(); - // axpy_f16vecp_unrolled4(l1_A, l1_B, l1_C, LEN, num_cores); + // axpy_f16vecp_unrolled4(A, l1_X, l1_Y, LEN, num_cores); // time_end = mempool_get_timer(); // PARALLEL, LOCAL ACCESSES time_init = mempool_get_timer(); - axpy_f16vecp_local_unrolled4(l1_A, l1_B, l1_C, LEN); + // axpy_f16vecp_local_unrolled4(a, l1_X, l1_Y, LEN); + mempool_start_benchmark(); + axpy_f16vecp_local_unrolled4(a, l1_X, l1_Y, LEN); + mempool_stop_benchmark(); time_end = mempool_get_timer(); mempool_barrier(num_cores); @@ -62,7 +64,7 @@ int main() { uint32_t clock_cycles = (time_end - time_init); printf("\nKernel execution takes %d clock cycles\n", clock_cycles); } - mempool_check_f16(l1_C, l2_out, 100, 0.1f, 0); + mempool_check_f16(l1_Y, l2_out, 100, 0.1f, 0); mempool_barrier(num_cores); return 0; diff --git a/software/apps/baremetal/axpy_f32/main.c b/software/apps/baremetal/axpy_f32/main.c index 262342fb2..1b1bef859 100644 --- a/software/apps/baremetal/axpy_f32/main.c +++ b/software/apps/baremetal/axpy_f32/main.c @@ -16,13 +16,10 @@ #include "data_axpy_f32.h" #define NUM_BANKS (NUM_CORES * BANKING_FACTOR) -#define SINGLE_CORE_REDUCTION -// #define BINARY_REDUCTION // Vectors for kernel computation -float l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); -float l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); -float l1_C[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +float l1_X[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +float l1_Y[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); #include "baremetal/mempool_axpy_f32.h" #include "baremetal/mempool_checks.h" @@ -37,17 +34,17 @@ int main() { time_init = 0; time_end = 0; if (core_id == 0) { - dma_memcpy_blocking(l1_A, l2_A, LEN * sizeof(int32_t)); - dma_memcpy_blocking(l1_B, l2_B, LEN * sizeof(int32_t)); - dma_memcpy_blocking(l1_C, l2_C, LEN * sizeof(int32_t)); + dma_memcpy_blocking(l1_X, l2_X, LEN * sizeof(int32_t)); + dma_memcpy_blocking(l1_Y, l2_Y, LEN * sizeof(int32_t)); } + float register volatile a = A; mempool_barrier(num_cores); // PARALLEL time_init = mempool_get_timer(); - // axpy_f32p(l1_A, l1_B, l1_C, LEN, num_cores); - // axpy_f32p_unrolled4(l1_A, l1_B, l1_C, LEN, num_cores); - axpy_f32p_local_unrolled4(l1_A, l1_B, l1_C, LEN); + // axpy_f32p(a, l1_X, l1_Y, LEN, num_cores); + // axpy_f32p_unrolled4(a, l1_X, l1_Y, LEN, num_cores); + axpy_f32p_local_unrolled4(a, l1_X, l1_Y, LEN); time_end = mempool_get_timer(); // Check results @@ -55,7 +52,7 @@ int main() { uint32_t clock_cycles = (time_end - time_init); printf("\nKernel execution takes %d clock cycles\n", clock_cycles); } - mempool_check_f32(l1_C, l2_out, 100, 0.1f, 0); + mempool_check_f32(l1_Y, l2_out, 100, 0.1f, 0); mempool_barrier(num_cores); return 0; diff --git a/software/apps/baremetal/dotp_f16/main.c b/software/apps/baremetal/dotp_f16/main.c index 36a7f8f99..c579c8151 100644 --- a/software/apps/baremetal/dotp_f16/main.c +++ b/software/apps/baremetal/dotp_f16/main.c @@ -19,8 +19,8 @@ #define BINARY_REDUCTION // Vectors for kernel computation -__fp16 l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); -__fp16 l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +__fp16 l1_A[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +__fp16 l1_B[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); uint32_t red_barrier[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); __fp16 sum[2 * NUM_BANKS] diff --git a/software/apps/baremetal/dotp_f32/main.c b/software/apps/baremetal/dotp_f32/main.c index 8c3c7e8cd..731942eb7 100644 --- a/software/apps/baremetal/dotp_f32/main.c +++ b/software/apps/baremetal/dotp_f32/main.c @@ -20,8 +20,8 @@ #define BINARY_REDUCTION // Vectors for kernel computation -float l1_A[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); -float l1_B[LEN] __attribute__((aligned(LEN), section(".l1_prio"))); +float l1_A[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); +float l1_B[LEN] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); uint32_t red_barrier[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); float sum[NUM_BANKS] __attribute__((aligned(NUM_BANKS), section(".l1_prio"))); diff --git a/software/data/data_axpy_f16.h.tpl b/software/data/data_axpy_f16.h.tpl index 09ea72cbf..4c6034baf 100644 --- a/software/data/data_axpy_f16.h.tpl +++ b/software/data/data_axpy_f16.h.tpl @@ -17,10 +17,10 @@ #define LEN (${Len}) -__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; +__fp16 __attribute__((section(".l2"))) A = ${'(__fp16){:.4f}'.format(A)}; -__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_X[${Len}] = ${array_to_cstr(X)}; -__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C[${Len}] = ${array_to_cstr(C)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Y[${Len}] = ${array_to_cstr(Y)}; __fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_out[${Len}] = ${array_to_cstr(out)}; diff --git a/software/data/data_axpy_f32.h.tpl b/software/data/data_axpy_f32.h.tpl index 2efe34b45..f3fdc8b6a 100644 --- a/software/data/data_axpy_f32.h.tpl +++ b/software/data/data_axpy_f32.h.tpl @@ -15,12 +15,13 @@ return out %> \ + #define LEN (${Len}) -float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_A[${Len}] = ${array_to_cstr(A)}; +float __attribute__((section(".l2"))) A = ${'(float){:.8f}'.format(A)}; -float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_B[${Len}] = ${array_to_cstr(B)}; +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_X[${Len}] = ${array_to_cstr(X)}; -float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_C[${Len}] = ${array_to_cstr(C)}; +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Y[${Len}] = ${array_to_cstr(Y)}; float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_out[${Len}] = ${array_to_cstr(out)}; diff --git a/software/data/generate_dotp.py b/software/data/generate_dotp.py index 64170f573..b5e7410af 100644 --- a/software/data/generate_dotp.py +++ b/software/data/generate_dotp.py @@ -26,8 +26,8 @@ def generate_dotp_i32(Len): def generate_dotp_f32(Len): # Create matrix - A = np.random.rand(Len).astype(np.float32) - B = np.random.rand(Len).astype(np.float32) + A = np.random.randn(Len).astype(np.float32) + B = np.random.randn(Len).astype(np.float32) C = (np.dot(A, B)).astype(np.float32) return A, B, C @@ -35,8 +35,8 @@ def generate_dotp_f32(Len): def generate_dotp_f16(Len): # Create matrix - A = np.random.rand(Len).astype(np.float16) - B = np.random.rand(Len).astype(np.float16) + A = np.random.randn(Len).astype(np.float16) + B = np.random.randn(Len).astype(np.float16) C = (np.dot(A, B)).astype(np.float16) return A, B, C @@ -44,21 +44,21 @@ def generate_dotp_f16(Len): def generate_axpy_f32(Len): # Create matrix - A = np.random.rand(Len).astype(np.float32) - B = np.random.rand(Len).astype(np.float32) - C = np.random.rand(Len).astype(np.float32) - out = C + A * B - return A, B, C, out + X = np.random.rand(Len).astype(np.float32) + Y = np.random.rand(Len).astype(np.float32) + A = np.float32(3.14) + out = Y + A * X + return A, X, Y, out def generate_axpy_f16(Len): # Create matrix - A = np.random.rand(Len).astype(np.float16) - B = np.random.rand(Len).astype(np.float16) - C = np.random.rand(Len).astype(np.float16) - out = C + A * B - return A, B, C, out + X = np.random.rand(Len).astype(np.float16) + Y = np.random.rand(Len).astype(np.float16) + A = np.float16(3.14) + out = Y + A * X + return A, X, Y, out ################## # compute_result # @@ -130,24 +130,24 @@ def main(): 'Len': Len} gen_data_header_file(args.outdir, tpl, **kwargs) - A, B, C, out = generate_axpy_f32(Len) + A, X, Y, out = generate_axpy_f32(Len) tpl = pathlib.Path(__file__).parent.absolute() / "data_axpy_f32.h.tpl" kwargs = { 'name': 'data_axpy_f32', 'A': A, - 'B': B, - 'C': C, + 'X': X, + 'Y': Y, 'out': out, 'Len': Len} gen_data_header_file(args.outdir, tpl, **kwargs) - A, B, C, out = generate_axpy_f16(Len) + A, X, Y, out = generate_axpy_f16(Len) tpl = pathlib.Path(__file__).parent.absolute() / "data_axpy_f16.h.tpl" kwargs = { 'name': 'data_axpy_f16', 'A': A, - 'B': B, - 'C': C, + 'X': X, + 'Y': Y, 'out': out, 'Len': Len} gen_data_header_file(args.outdir, tpl, **kwargs) diff --git a/software/kernels/baremetal/mempool_axpy_f16.h b/software/kernels/baremetal/mempool_axpy_f16.h index e54331d2d..f123166ed 100644 --- a/software/kernels/baremetal/mempool_axpy_f16.h +++ b/software/kernels/baremetal/mempool_axpy_f16.h @@ -9,37 +9,43 @@ #define AXPYF16VEC_UNROLLED4_LOOP \ { \ - a01 = (*(v2h *)&in_a[i]); \ - a23 = (*(v2h *)&in_a[i + 2]); \ - b01 = (*(v2h *)&in_b[i]); \ - b23 = (*(v2h *)&in_b[i + 2]); \ - c01 = (*(v2h *)&in_c[i]); \ - c23 = (*(v2h *)&in_c[i + 2]); \ - asm volatile( \ - "vfmac.h %[c01], %[a01], %[b01];" \ - "vfmac.h %[c23], %[a23], %[b23];" \ - : [c01] "+&r"(c01), [c23] "+&r"(c23) \ - : [a01] "r"(a01), [a23] "r"(a23), [b01] "r"(b01), [b23] "r"(b23)); \ - (*(v2h *)&in_c[i]) = c01; \ - (*(v2h *)&in_c[i + 2]) = c23; \ + x01 = (*(v2h *)&in_x[i]); \ + x23 = (*(v2h *)&in_x[i + 2]); \ + x45 = (*(v2h *)&in_x[i + 4]); \ + x67 = (*(v2h *)&in_x[i + 6]); \ + y01 = (*(v2h *)&in_y[i]); \ + y23 = (*(v2h *)&in_y[i + 2]); \ + y45 = (*(v2h *)&in_y[i + 4]); \ + y67 = (*(v2h *)&in_y[i + 6]); \ + asm volatile("vfmac.h %[y01], %[x01], %[aa];" \ + "vfmac.h %[y23], %[x23], %[aa];" \ + "vfmac.h %[y45], %[x45], %[aa];" \ + "vfmac.h %[y67], %[x67], %[aa];" \ + : [y01] "+&r"(y01), [y23] "+&r"(y23), [y45] "+&r"(y45), \ + [y67] "+&r"(y67) \ + : [x01] "r"(x01), [x23] "r"(x23), [x45] "r"(x45), \ + [x67] "r"(x67), [aa] "r"(aa)); \ + (*(v2h *)&in_y[i]) = y01; \ + (*(v2h *)&in_y[i + 2]) = y23; \ + (*(v2h *)&in_y[i + 4]) = y45; \ + (*(v2h *)&in_y[i + 6]) = y67; \ } /* Single-core dot-product */ -void axpy_f16s(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, uint32_t Len) { +void axpy_f16s(uint32_t a, __fp16 *in_x, __fp16 *in_y, uint32_t Len) { uint32_t core_id = mempool_get_core_id(); if (core_id == 0) { mempool_start_benchmark(); // Kernel execution - __fp16 *end = in_a + Len / 2; + __fp16 *end = in_x + Len / 2; do { asm volatile("fmadd.h %0, %1, %2, %0;" - : "+&r"(*in_c) - : "r"(*in_a), "r"(*in_b)); - in_a++; - in_b++; - in_c++; - } while (in_a < end); + : "+&r"(*in_y) + : "r"(a), "r"(*in_x)); + in_x++; + in_y++; + } while (in_x < end); mempool_stop_benchmark(); } @@ -47,17 +53,16 @@ void axpy_f16s(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, uint32_t Len) { } /* Single-core dot-product unrolled4 */ -void axpy_f16s_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, - uint32_t Len) { +void axpy_f16s_unrolled4(uint32_t a, __fp16 *in_x, __fp16 *in_y, uint32_t Len) { uint32_t core_id = mempool_get_core_id(); if (core_id == 0) { mempool_start_benchmark(); uint32_t i = 0; - v2h a01, a23; - v2h b01, b23; - v2h c01, c23; - for (i = 0; i < Len; i += 4) { + uint32_t aa = (a << 16U) | a; + v2h x01, x23, x45, x67; + v2h y01, y23, y45, y67; + for (i = 0; i < Len; i += 8) { AXPYF16VEC_UNROLLED4_LOOP; } mempool_stop_benchmark(); @@ -67,58 +72,56 @@ void axpy_f16s_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, } /* Parallel dot-product */ -void axpy_f16p(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, uint32_t Len, +void axpy_f16p(uint32_t a, __fp16 *in_x, __fp16 *in_y, uint32_t Len, uint32_t nPE) { - uint32_t num_cores = mempool_get_core_count(); uint32_t core_id = mempool_get_core_id(); uint32_t step = Len / nPE; - __fp16 a, b, c; + __fp16 x, y; for (uint32_t i = core_id * step; i < core_id * step + step; i++) { - a = in_a[i]; - b = in_b[i]; - c = in_c[i]; - asm volatile("fmadd.h %0, %1, %2, %0;" : "+&r"(c) : "r"(a), "r"(b)); - in_c[i] = c; + x = in_x[i]; + y = in_y[i]; + asm volatile("fmadd.h %0, %1, %2, %0;" : "+&r"(y) : "r"(a), "r"(x)); + in_y[i] = y; } - mempool_barrier(num_cores); + mempool_log_barrier(2, core_id); return; } /* Parallel dot-product with loop unrolling*/ -void axpy_f16vecp_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, +void axpy_f16vecp_unrolled4(uint32_t a, __fp16 *in_x, __fp16 *in_y, uint32_t Len, uint32_t nPE) { - uint32_t num_cores = mempool_get_core_count(); uint32_t core_id = mempool_get_core_id(); uint32_t step = Len / nPE; uint32_t i; - v2h a01, a23; - v2h b01, b23; - v2h c01, c23; - for (i = core_id * step; i < core_id * step + step; i += 4) { + + uint32_t aa = (a << 16U) | a; + v2h x01, x23, x45, x67; + v2h y01, y23, y45, y67; + for (i = core_id * step; i < (core_id * step + step); i += 8) { AXPYF16VEC_UNROLLED4_LOOP; } - mempool_barrier(num_cores); + mempool_log_barrier(2, core_id); return; } /* Parallel dot-product with loop unrolling */ /* Load and stores only in local memory */ -void axpy_f16vecp_local_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *in_c, +void axpy_f16vecp_local_unrolled4(uint32_t a, __fp16 *in_x, __fp16 *in_y, uint32_t Len) { - uint32_t num_cores = mempool_get_core_count(); uint32_t core_id = mempool_get_core_id(); - v2h a01, a23; - v2h b01, b23; - v2h c01, c23; - for (uint32_t i = core_id * BANKING_FACTOR; i < Len; i += NUM_BANKS) { + + uint32_t aa = (a << 16U) | a; + v2h x01, x23, x45, x67; + v2h y01, y23, y45, y67; + for (uint32_t i = 2 * core_id * BANKING_FACTOR; i < Len; i += 2 * NUM_BANKS) { AXPYF16VEC_UNROLLED4_LOOP; } - mempool_barrier(num_cores); + mempool_log_barrier(2, core_id); return; } diff --git a/software/kernels/baremetal/mempool_axpy_f32.h b/software/kernels/baremetal/mempool_axpy_f32.h index ff069524c..27962d5cb 100644 --- a/software/kernels/baremetal/mempool_axpy_f32.h +++ b/software/kernels/baremetal/mempool_axpy_f32.h @@ -6,55 +6,49 @@ #define AXPYF32_UNROLLED4_LOOP \ { \ - a0 = in_a[i]; \ - b0 = in_b[i]; \ - c0 = in_c[i]; \ - a1 = in_a[i + 1]; \ - b1 = in_b[i + 1]; \ - c1 = in_c[i + 1]; \ - a2 = in_a[i + 2]; \ - b2 = in_b[i + 2]; \ - c2 = in_c[i + 2]; \ - a3 = in_a[i + 3]; \ - b3 = in_b[i + 3]; \ - c3 = in_c[i + 3]; \ + x0 = in_x[i]; \ + y0 = in_y[i]; \ + x1 = in_x[i + 1]; \ + y1 = in_y[i + 1]; \ + x2 = in_x[i + 2]; \ + y2 = in_y[i + 2]; \ + x3 = in_x[i + 3]; \ + y3 = in_y[i + 3]; \ asm volatile( \ - "fmadd.s %[c0], %[a0], %[b0], %[c0];" \ - "fmadd.s %[c1], %[a1], %[b1], %[c1];" \ - "fmadd.s %[c2], %[a2], %[b2], %[c2];" \ - "fmadd.s %[c3], %[a3], %[b3], %[c3];" \ - : [c0] "+&r"(c0), [c1] "+&r"(c1), [c2] "+&r"(c2), [c3] "+&r"(c3) \ - : [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), [a3] "r"(a3), \ - [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3)); \ - in_c[i] = c0; \ - in_c[i + 1] = c1; \ - in_c[i + 2] = c2; \ - in_c[i + 3] = c3; \ + "fmadd.s %[y0], %[a], %[x0], %[y0];" \ + "fmadd.s %[y1], %[a], %[x1], %[y1];" \ + "fmadd.s %[y2], %[a], %[x2], %[y2];" \ + "fmadd.s %[y3], %[a], %[x3], %[y3];" \ + : [y0] "+&r"(y0), [y1] "+&r"(y1), [y2] "+&r"(y2), [y3] "+&r"(y3) \ + : [x0] "r"(x0), [x1] "r"(x1), [x2] "r"(x2), [x3] "r"(x3), [a] "r"(a)); \ + in_y[i] = y0; \ + in_y[i + 1] = y1; \ + in_y[i + 2] = y2; \ + in_y[i + 3] = y3; \ } /* Single-core dot-product */ -void axpy_f32s(float *in_a, float *in_b, float *in_c, uint32_t Len) { +void axpy_f32s(float a, float *in_x, float *in_y, uint32_t Len) { uint32_t core_id = mempool_get_core_id(); if (core_id == 0) { mempool_start_benchmark(); // Kernel execution - float *end = in_a + Len; + float *end = in_x + Len; do { asm volatile("fmadd.s %0, %1, %2, %0;" - : "+&r"(*in_c) - : "r"(*in_a), "r"(*in_b)); - in_a++; - in_b++; - in_c++; - } while (in_a < end); + : "+&r"(*in_y) + : "r"(a), "r"(*in_x)); + in_x++; + in_y++; + } while (in_x < end); mempool_stop_benchmark(); } return; } /* Single-core dot-product unrolled4 */ -void axpy_f32s_unrolled4(float *in_a, float *in_b, float *in_c, uint32_t Len) { +void axpy_f32s_unrolled4(float a, float *in_x, float *in_y, uint32_t Len) { uint32_t core_id = mempool_get_core_id(); if (core_id == 0) { @@ -62,19 +56,16 @@ void axpy_f32s_unrolled4(float *in_a, float *in_b, float *in_c, uint32_t Len) { uint32_t reminder = Len % 4; uint32_t i = 0; - register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; - register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; - register float c2 = 0.0f, c1 = 0.0f, c0 = 0.0f, c3 = 0.0f; - + register float x2, x1, x0, x3; + register float y2, y1, y0, y3; for (i = 0; i < (Len - reminder); i += 4) { AXPYF32_UNROLLED4_LOOP; } while (i < Len) { - a0 = in_a[i]; - b0 = in_b[i]; - c0 = in_c[i]; - asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c0) : "r"(a0), "r"(b0)); - in_c[i] = c0; + x0 = in_x[i]; + y0 = in_y[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(y0) : "r"(a), "r"(x0)); + in_y[i] = y0; i++; } mempool_stop_benchmark(); @@ -83,83 +74,72 @@ void axpy_f32s_unrolled4(float *in_a, float *in_b, float *in_c, uint32_t Len) { } /* Parallel dot-product */ -void axpy_f32p(float *in_a, float *in_b, float *in_c, uint32_t Len, - uint32_t nPE) { +void axpy_f32p(float a, float *in_x, float *in_y, uint32_t Len, uint32_t nPE) { - uint32_t num_cores = mempool_get_core_count(); uint32_t core_id = mempool_get_core_id(); uint32_t step = Len / nPE; - register float a, b, c; + register float x, y; for (uint32_t i = core_id * step; i < core_id * step + step; i++) { - a = in_a[i]; - b = in_b[i]; - c = in_c[i]; - asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c) : "r"(a), "r"(b)); - in_c[i] = c; + x = in_x[i]; + y = in_y[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(y) : "r"(a), "r"(x)); + in_y[i] = y; } - mempool_barrier(num_cores); + mempool_log_barrier(2, core_id); return; } /* Parallel dot-product with loop unrolling*/ -void axpy_f32p_unrolled4(float *in_a, float *in_b, float *in_c, uint32_t Len, +void axpy_f32p_unrolled4(float a, float *in_x, float *in_y, uint32_t Len, uint32_t nPE) { - uint32_t num_cores = mempool_get_core_count(); uint32_t core_id = mempool_get_core_id(); uint32_t step = Len / nPE; uint32_t reminder = step % 4; uint32_t i; - register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; - register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; - register float c2 = 0.0f, c1 = 0.0f, c0 = 0.0f, c3 = 0.0f; - + register float x2, x1, x0, x3; + register float y2, y1, y0, y3; for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { AXPYF32_UNROLLED4_LOOP; } i = core_id * step + step - reminder; while (i < step) { - a0 = in_a[i]; - b0 = in_b[i]; - c0 = in_c[i]; - asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c0) : "r"(a0), "r"(b0)); - in_c[i] = c0; + x0 = in_x[i]; + y0 = in_y[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(y0) : "r"(a), "r"(x0)); + in_y[i] = y0; i++; } - mempool_barrier(num_cores); + mempool_log_barrier(2, core_id); return; } /* Parallel dot-product with loop unrolling */ /* Load and stores only in local memory */ -void axpy_f32p_local_unrolled4(float *in_a, float *in_b, float *in_c, +void axpy_f32p_local_unrolled4(float a, float *in_x, float *in_y, uint32_t Len) { - uint32_t num_cores = mempool_get_core_count(); uint32_t core_id = mempool_get_core_id(); uint32_t const remainder = Len % BANKING_FACTOR; uint32_t const idx_stop = Len - remainder; - register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; - register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; - register float c2 = 0.0f, c1 = 0.0f, c0 = 0.0f, c3 = 0.0f; - + register float x2, x1, x0, x3; + register float y2, y1, y0, y3; for (uint32_t i = core_id * BANKING_FACTOR; i < idx_stop; i += NUM_BANKS) { AXPYF32_UNROLLED4_LOOP; } if (core_id == ((Len % NUM_BANKS) / 4)) { for (uint32_t i = Len - remainder; i < Len; i++) { - a0 = in_a[i]; - b0 = in_b[i]; - asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(c0) : "r"(a0), "r"(b0)); - in_c[i] = c0; + x0 = in_x[i]; + asm volatile("fmadd.s %0, %1, %2, %0;" : "+&r"(y0) : "r"(a), "r"(x0)); + in_y[i] = y0; } } - mempool_barrier(num_cores); + mempool_log_barrier(2, core_id); return; } diff --git a/software/kernels/baremetal/mempool_dotp_f16.h b/software/kernels/baremetal/mempool_dotp_f16.h index 17d13df24..791b7c68e 100644 --- a/software/kernels/baremetal/mempool_dotp_f16.h +++ b/software/kernels/baremetal/mempool_dotp_f16.h @@ -11,13 +11,21 @@ { \ a01 = (*(v2h *)&in_a[i]); \ a23 = (*(v2h *)&in_a[i + 2]); \ + a45 = (*(v2h *)&in_a[i + 4]); \ + a67 = (*(v2h *)&in_a[i + 6]); \ b01 = (*(v2h *)&in_b[i]); \ b23 = (*(v2h *)&in_b[i + 2]); \ + b45 = (*(v2h *)&in_b[i + 4]); \ + b67 = (*(v2h *)&in_b[i + 6]); \ asm volatile( \ "vfdotpex.s.h %[local_sum0], %[a01], %[b01];" \ "vfdotpex.s.h %[local_sum1], %[a23], %[b23];" \ - : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) \ - : [a01] "r"(a01), [a23] "r"(a23), [b01] "r"(b01), [b23] "r"(b23)); \ + "vfdotpex.s.h %[local_sum2], %[a45], %[b45];" \ + "vfdotpex.s.h %[local_sum3], %[a67], %[b67];" \ + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), \ + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) \ + : [a01] "r"(a01), [a23] "r"(a23), [a45] "r"(a45), [a67] "r"(a67), \ + [b01] "r"(b01), [b23] "r"(b23), [b45] "r"(b45), [b67] "r"(b67)); \ } /* Single core reduction */ @@ -116,20 +124,23 @@ void dotp_f16s_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t Len) { if (core_id == 0) { mempool_start_benchmark(); uint32_t i = 0; - - v2h a01, a23; - v2h b01, b23; + v2h a01, a23, a45, a67; + v2h b01, b23, b45, b67; float local_sum0 = 0.0f; float local_sum1 = 0.0f; - - for (i = 0; i < Len; i += 4) { + float local_sum2 = 0.0f; + float local_sum3 = 0.0f; + for (i = 0; i < Len; i += 8) { DOTPF16VEC_UNROLLED4_LOOP; } // Reduction asm volatile( "fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fadd.s %[local_sum2], %[local_sum2], %[local_sum3];" + "fadd.s %[local_sum0], %[local_sum0], %[local_sum2];" "fcvt.h.s %[local_sum0], %[local_sum0];" - : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) :); s[0] = *(__fp16 *)&local_sum0; mempool_stop_benchmark(); @@ -168,17 +179,21 @@ void dotp_f16vecp_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t Len, uint32_t step = Len / nPE; uint32_t i; - v2h a01, a23; - v2h b01, b23; + v2h a01, a23, a45, a67; + v2h b01, b23, b45, b67; float local_sum0 = 0.0f; float local_sum1 = 0.0f; - - for (i = core_id * step; i < core_id * step + step; i += 4) { + float local_sum2 = 0.0f; + float local_sum3 = 0.0f; + for (i = core_id * step; i < (core_id * step + step); i += 8) { DOTPF16VEC_UNROLLED4_LOOP; } asm volatile("fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fadd.s %[local_sum2], %[local_sum2], %[local_sum3];" + "fadd.s %[local_sum0], %[local_sum0], %[local_sum2];" "fcvt.h.s %[local_sum0], %[local_sum0];" - : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) :); s[2 * core_id * BANKING_FACTOR] = *(__fp16 *)&local_sum0; uint32_t num_cores = mempool_get_core_count(); @@ -194,16 +209,21 @@ void dotp_f16vecp_local_unrolled4(__fp16 *in_a, __fp16 *in_b, __fp16 *s, uint32_t core_id = mempool_get_core_id(); - v2h a01, a23; - v2h b01, b23; + v2h a01, a23, a45, a67; + v2h b01, b23, b45, b67; float local_sum0 = 0.0f; float local_sum1 = 0.0f; - for (uint32_t i = core_id * BANKING_FACTOR; i < Len; i += NUM_BANKS) { + float local_sum2 = 0.0f; + float local_sum3 = 0.0f; + for (uint32_t i = 2 * core_id * BANKING_FACTOR; i < Len; i += 2 * NUM_BANKS) { DOTPF16VEC_UNROLLED4_LOOP; } asm volatile("fadd.s %[local_sum0], %[local_sum0], %[local_sum1];" + "fadd.s %[local_sum2], %[local_sum2], %[local_sum3];" + "fadd.s %[local_sum0], %[local_sum0], %[local_sum2];" "fcvt.h.s %[local_sum0], %[local_sum0];" - : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1) + : [local_sum0] "+&r"(local_sum0), [local_sum1] "+&r"(local_sum1), + [local_sum2] "+&r"(local_sum2), [local_sum3] "+&r"(local_sum3) :); s[2 * core_id * BANKING_FACTOR] = *(__fp16 *)&local_sum0; diff --git a/software/kernels/baremetal/mempool_dotp_f32.h b/software/kernels/baremetal/mempool_dotp_f32.h index 58fa0e9d5..290b96d59 100644 --- a/software/kernels/baremetal/mempool_dotp_f32.h +++ b/software/kernels/baremetal/mempool_dotp_f32.h @@ -7,12 +7,12 @@ #define DOTPF32_UNROLLED4_LOOP \ { \ a0 = in_a[i]; \ - b0 = in_b[i]; \ a1 = in_a[i + 1]; \ - b1 = in_b[i + 1]; \ a2 = in_a[i + 2]; \ - b2 = in_b[i + 2]; \ a3 = in_a[i + 3]; \ + b0 = in_b[i]; \ + b1 = in_b[i + 1]; \ + b2 = in_b[i + 2]; \ b3 = in_b[i + 3]; \ asm volatile( \ "fmadd.s %[local_sum0], %[a0], %[b0], %[local_sum0];" \ @@ -95,7 +95,7 @@ void dotp_f32s(float *in_a, float *in_b, float *s, uint32_t Len) { if (core_id == 0) { mempool_start_benchmark(); // Kernel execution - register float local_sum = 0; + float local_sum = 0; float *end = in_a + Len; do { asm volatile("fmadd.s %0, %1, %2, %0;" @@ -120,13 +120,12 @@ void dotp_f32s_unrolled4(float *in_a, float *in_b, float *s, uint32_t Len) { uint32_t reminder = Len % 4; uint32_t i = 0; - register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; - register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; - register float local_sum0 = 0.0f; - register float local_sum1 = 0.0f; - register float local_sum2 = 0.0f; - register float local_sum3 = 0.0f; - + float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + float local_sum0 = 0.0f; + float local_sum1 = 0.0f; + float local_sum2 = 0.0f; + float local_sum3 = 0.0f; for (i = 0; i < (Len - reminder); i += 4) { DOTPF32_UNROLLED4_LOOP; } @@ -158,8 +157,8 @@ void dotp_f32p(float *in_a, float *in_b, float *s, uint32_t Len, uint32_t nPE) { uint32_t core_id = mempool_get_core_id(); uint32_t step = Len / nPE; - register float local_sum = 0; - register float a, b; + float local_sum = 0; + float a, b; for (uint32_t i = core_id * step; i < core_id * step + step; i++) { a = in_a[i]; b = in_b[i]; @@ -182,12 +181,12 @@ void dotp_f32p_unrolled4(float *in_a, float *in_b, float *s, uint32_t Len, uint32_t reminder = step % 4; uint32_t i; - register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; - register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; - register float local_sum0 = 0.0f; - register float local_sum1 = 0.0f; - register float local_sum2 = 0.0f; - register float local_sum3 = 0.0f; + float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; + float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; + float local_sum0 = 0.0f; + float local_sum1 = 0.0f; + float local_sum2 = 0.0f; + float local_sum3 = 0.0f; for (i = core_id * step; i < (core_id * step + step) - reminder; i += 4) { DOTPF32_UNROLLED4_LOOP; @@ -223,18 +222,18 @@ void dotp_f32p_local_unrolled4(float *in_a, float *in_b, float *s, uint32_t const remainder = Len % BANKING_FACTOR; uint32_t const idx_stop = Len - remainder; - register float a0 = 0.0f, a1 = 0.0f, a2 = 0.0f, a3 = 0.0f; - register float b2 = 0.0f, b1 = 0.0f, b0 = 0.0f, b3 = 0.0f; - register float local_sum0 = 0.0f; - register float local_sum1 = 0.0f; - register float local_sum2 = 0.0f; - register float local_sum3 = 0.0f; + float a0, a1, a2, a3; + float b2, b1, b0, b3; + float local_sum0 = 0.0f; + float local_sum1 = 0.0f; + float local_sum2 = 0.0f; + float local_sum3 = 0.0f; for (uint32_t i = core_id * BANKING_FACTOR; i < idx_stop; i += NUM_BANKS) { DOTPF32_UNROLLED4_LOOP; } if (core_id == ((Len % NUM_BANKS) / 4)) { - for (uint32_t i = Len - remainder; i < Len; i++) { + for (uint32_t i = idx_stop; i < Len; i++) { a0 = in_a[i]; b0 = in_b[i]; asm volatile("fmadd.s %0, %1, %2, %0;" From d05ce7400c378083181e59a721dc7fe372e33d5f Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 20 Sep 2024 16:22:42 +0200 Subject: [PATCH 37/39] [software] Add MMSE with complex dotp --- software/apps/baremetal/mimo_mmse_f16/main.c | 61 ++++++++- .../kernels/baremetal/mempool_cholesky_f16s.h | 38 ++++-- .../baremetal/mempool_mimo_mmse_f16s.h | 119 ++++++++++++++++-- 3 files changed, 199 insertions(+), 19 deletions(-) diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index c5cb20155..36247fbbd 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -19,7 +19,7 @@ #include "data_mimo_mmse_f16.h" #define NUM_BANKS (BANKING_FACTOR * NUM_CORES) -#define DOUBLE_BUFFERING +//#define DOUBLE_BUFFERING /********************************************************** ********************************************************** @@ -33,7 +33,6 @@ ***********************************************************/ #ifndef DOUBLE_BUFFERING -#define PARALLEL __fp16 l1_H[2 * N_TX * N_RX * N_ITR] __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); @@ -61,6 +60,22 @@ int main() { uint32_t core_id = mempool_get_core_id(); uint32_t num_cores = mempool_get_core_count(); mempool_barrier_init(core_id); // Initialize barrier and synchronize + +#ifdef BANSHEE + /* Initialize matrices */ + if (core_id == 0) { + for (uint32_t i = 0; i < N_RX * N_TX * N_ITR; i++) { + (*(uint32_t *)&l1_H[2 * i]) = *(uint32_t *)&l2_H[2 * i]; + } + for (uint32_t i = 0; i < N_RX * N_ITR; i++) { + (*(uint32_t *)&l1_y[2 * i]) = *(uint32_t *)&l2_y[2 * i]; + } + for (uint32_t i = 0; i < N_TX * N_ITR; i++) { + (*(uint32_t *)&l1_S[2 * i]) = *(uint32_t *)&l2_Sigma[2 * i]; + } + } + mempool_barrier(num_cores); +#else /* Initialize matrices */ if (core_id == 0) { dma_memcpy_blocking(l1_beamgroups, l2_beamgroups, N_ITR * sizeof(int32_t)); @@ -69,6 +84,38 @@ int main() { dma_memcpy_blocking(l1_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); } mempool_barrier(num_cores); +#endif + +#ifdef BANSHEE + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + for (uint32_t itr = 0; itr < N_ITR; itr++) { + __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); + __fp16 *Ptry = l1_y + itr * (2 * N_RX); + __fp16 *PtrSigma = l1_S + itr * N_TX; + __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); + __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + __fp16 *Ptry3 = y3 + itr * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); + +#ifdef VEC + mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); +#else + mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f16s(PtrG, PtrL, N_TX); +#endif + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_stop_benchmark(); + } + mempool_barrier(num_cores); +#endif #ifdef SINGLE if (core_id == 0) { @@ -116,8 +163,18 @@ int main() { #endif // Check the result +#ifdef BANSHEE + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * N_TX * N_ITR; i++) { + uint32_t x = (*(uint32_t *)&l1_x[i]) & 0x0000FFFF; + printf("RES=%04x\n", x); + } + } + mempool_barrier(num_cores); +#else mempool_check_f16(l1_x, l2_x, 2 * N_TX, 0.01f, 0); mempool_barrier(num_cores); +#endif return 0; } diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index bb6143ed7..ada17eb2a 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -20,7 +20,7 @@ */ void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - register __fp16 sum; + __fp16 sum; __fp16 a, b; __fp16 c, d; __fp16 diag; // Diagonal element @@ -173,21 +173,22 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { */ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - float sum; // register float sum - __fp16 diag; // Diagonal element - __fp16 ap; + float sum; // register float sum + v2h abp, ab, cd; + __fp16 diag, ap; +#ifndef __CDOTP float as, bs; - v2h abp, ab, cd, ndc; - v2h vec_sum; - v2h vec_diag; + v2h ndc, vec_sum; +#endif + v2h vec_diag; uint32_t i, j, k; for (j = 0; j < n; j++) { // Elements on diagonal (input matrix is positive-definite) ap = pSrc[2U * (j * n + j)]; - sum = (float)0.0f; + sum = 0.0f; for (k = 0; k < j; k++) { ab = (*(v2h *)&pL[2U * (j * n + k)]); asm volatile("vfdotpex.s.h %[sum], %[ab], %[ab];" @@ -209,6 +210,22 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { abp = (*(v2h *)&pSrc[2U * (i * n + j)]); // Diag diag = pL[2U * (j * n + j)]; + +#ifdef __CDOTP + for (k = 0; k < j; k++) { + ab = (*(v2h *)&pL[2U * (i * n + k)]); + cd = (*(v2h *)&pL[2U * (j * n + k)]); + asm volatile("fcndotpex.s.h %[abp],%[ab],%[cd];" + : [abp] "=&r"(abp) + : [ab] "r"(ab), [cd] "r"(cd) + :); + } + asm volatile("pv.pack %[vec_diag], %[diag], %[diag];" + "vfdiv.h %[abp], %[abp], %[vec_diag];" + : [abp] "+&r"(abp), [vec_diag] "=&r"(vec_diag) + : [diag] "r"(diag) + :); +#else // Sum -> s = s + (ac + bd) + j*(bc - ad) as = (float)0.0f; bs = (float)0.0f; @@ -221,7 +238,7 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { // s = s + (ac + bd) + j(bc - ad) "vfdotpex.s.h %[as], %[ab], %[cd];" "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" - "xor %[ndc], %[neg_mask], %[ndc];" + "xor %[ndc], %[neg_mask], %[ndc];" "vfdotpex.s.h %[bs], %[ab], %[ndc];" : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) : [ab] "r"(ab), [cd] "r"(cd), [neg_mask] "r"(neg_mask), @@ -229,13 +246,14 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { :); } asm volatile("vfcpka.h.s %[vec_sum], %[as], %[bs];" - "pv.pack.h %[vec_diag], %[diag], %[diag];" + "pv.pack %[vec_diag], %[diag], %[diag];" "vfsub.h %[abp], %[abp], %[vec_sum];" "vfdiv.h %[abp], %[abp], %[vec_diag];" : [abp] "+&r"(abp), [vec_sum] "+&r"(vec_sum), [vec_diag] "+&r"(vec_diag) : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) :); +#endif (*(v2h *)&pL[2U * (i * n + j)]) = abp; } } diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index fef02faaf..9f8327703 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -282,10 +282,15 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, uint32_t i, j, k; v2h ab; v2h cd0, cd1, cd2, cd3; + const uint32_t shuffle_mask = 0x00020003; +#ifndef __CDOTP float as0, as1, as2, as3; float bs0, bs1, bs2, bs3; const uint32_t neg_mask = 0x80000000; - const uint32_t shuffle_mask = 0x00020003; +#endif + +#ifndef __CDOTP + for (i = 0; i < n_tx; i++) { if (n_tx == 1) { @@ -433,6 +438,64 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, } } } + +#else + + for (i = 0; i < n_tx; i++) { + if (n_tx >= 4) { + // UNROLL_4 + for (j = 0; j < n_tx; j += 4) { + v2h res0 = (v2h)0.0f; + v2h res1 = (v2h)0.0f; + v2h res2 = (v2h)0.0f; + v2h res3 = (v2h)0.0f; + for (k = 0; k < n_rx; k++) { + ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); + cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); + cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); + cd2 = (*(v2h *)&pH[2U * (k * n_tx + j + 2U)]); + cd3 = (*(v2h *)&pH[2U * (k * n_tx + j + 3U)]); + asm volatile("fccdotpex.s.h %[res0], %[ab], %[cd0];" + "fccdotpex.s.h %[res1], %[ab], %[cd1];" + "fccdotpex.s.h %[res2], %[ab], %[cd2];" + "fccdotpex.s.h %[res3], %[ab], %[cd3];" + : [res0] "+&r"(res0), [res1] "+&r"(res1), + [res2] "+&r"(res2), [res3] "+&r"(res3) + : [cd0] "r"(cd0), [cd1] "r"(cd1), [cd2] "r"(cd2), + [cd3] "r"(cd3), [ab] "r"(ab) + :); + } + asm volatile("pv.shuffle2.h %[res0], %[res0], %[shuffle_mask];" + "pv.shuffle2.h %[res1], %[res1], %[shuffle_mask];" + "pv.shuffle2.h %[res2], %[res2], %[shuffle_mask];" + "pv.shuffle2.h %[res3], %[res3], %[shuffle_mask];" + : [res0] "+&r"(res0), [res1] "+&r"(res1), + [res2] "+&r"(res2), [res3] "+&r"(res3) + : [shuffle_mask] "r"(shuffle_mask) + :); + __fp16 sigma = pS[2 * i]; + if (i == j) { + asm volatile("and %0, %0, %1;" : "+&r"(res0) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res0) : "r"(sigma)); + } else if (i == (j + 1U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res1) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res1) : "r"(sigma)); + } else if (i == (j + 2U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res2) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res2) : "r"(sigma)); + } else if (i == (j + 3U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res3) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res3) : "r"(sigma)); + } + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; + (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; + (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; + } + } + } + +#endif return; } @@ -450,14 +513,19 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, const uint32_t n_rx, const uint32_t n_tx) { uint32_t i, j; - float as0, as1, as2, as3; - float bs0, bs1, bs2, bs3; + v2h res0, res1, res2, res3; v2h ab0, ab1, ab2, ab3; v2h cd; - uint32_t ndc; - const uint32_t neg_mask = 0x80000000; const uint32_t shuffle_mask = 0x00020003; +#ifndef __CDOTP + float as0, as1, as2, as3; + float bs0, bs1, bs2, bs3; + const uint32_t neg_mask = 0x80000000; + uint32_t ndc; +#endif + +#ifndef __CDOTP if (n_tx < 4) { for (i = 0; i < n_tx; i++) { as0 = 0.0f; // Initialize the real part of sums @@ -478,7 +546,6 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, [shuffle_mask] "r"(shuffle_mask), [ab0] "r"(ab0) :); } - v2h res0; asm volatile("vfcpka.h.s %0, %1, %2;" : "=&r"(res0) : "r"(as0), "r"(bs0) @@ -521,7 +588,6 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, [ab1] "r"(ab1), [ab2] "r"(ab2), [ab3] "r"(ab3) :); } - v2h res0, res1, res2, res3; asm volatile( "vfcpka.h.s %[res0], %[as0], %[bs0];" "vfcpka.h.s %[res1], %[as1], %[bs1];" @@ -538,5 +604,44 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, *(v2h *)&py[2U * (i + 3U)] = res3; } } +#else + if (n_tx >= 4) { + // UNROLL_4 + for (i = 0; i < n_tx; i += 4) { + res0 = (v2h)0.0f; + res1 = (v2h)0.0f; + res2 = (v2h)0.0f; + res3 = (v2h)0.0f; + for (j = 0; j < n_rx; j++) { + ab0 = *(v2h *)&pH[2U * (j * n_tx + i)]; + ab1 = *(v2h *)&pH[2U * (j * n_tx + i + 1U)]; + ab2 = *(v2h *)&pH[2U * (j * n_tx + i + 2U)]; + ab3 = *(v2h *)&pH[2U * (j * n_tx + i + 3U)]; + cd = *(v2h *)&px[2U * j]; + asm volatile("fccdotpex.s.h %[res0], %[ab0], %[cd];" + "fccdotpex.s.h %[res1], %[ab1], %[cd];" + "fccdotpex.s.h %[res2], %[ab2], %[cd];" + "fccdotpex.s.h %[res3], %[ab3], %[cd];" + : [res0] "+&r"(res0), [res1] "+&r"(res1), + [res2] "+&r"(res2), [res3] "+&r"(res3) + : [ab0] "r"(ab0), [ab1] "r"(ab1), [ab2] "r"(ab2), + [ab3] "r"(ab3), [cd] "r"(cd) + :); + } + asm volatile("pv.shuffle2.h %[res0], %[res0], %[shuffle_mask];" + "pv.shuffle2.h %[res1], %[res1], %[shuffle_mask];" + "pv.shuffle2.h %[res2], %[res2], %[shuffle_mask];" + "pv.shuffle2.h %[res3], %[res3], %[shuffle_mask];" + : [res0] "+&r"(res0), [res1] "+&r"(res1), [res2] "+&r"(res2), + [res3] "+&r"(res3) + : [shuffle_mask] "r"(shuffle_mask) + :); + *(v2h *)&py[2U * i] = res0; + *(v2h *)&py[2U * (i + 1U)] = res1; + *(v2h *)&py[2U * (i + 2U)] = res2; + *(v2h *)&py[2U * (i + 3U)] = res3; + } + } +#endif return; } From cf6a602239d1c5012310b76559576c7416747f99 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Fri, 20 Sep 2024 16:48:58 +0200 Subject: [PATCH 38/39] [software] Add MMSE fp8 --- python-requirements.txt | 1 + software/apps/baremetal/mimo_mmse_f16/main.c | 84 ++-- software/apps/baremetal/mimo_mmse_f8/main.c | 152 +++++++ software/data/data_mimo_mmse_f16.h.tpl | 4 +- software/data/data_mimo_mmse_f32.h.tpl | 2 +- software/data/data_mimo_mmse_f8.h.tpl | 47 +++ software/data/data_mimo_mmse_q16.h.tpl | 4 +- software/data/generate_mimo_mmse.py | 204 ++++------ .../kernels/baremetal/mempool_cholesky_f16s.h | 158 ++++---- .../baremetal/mempool_mimo_mmse_f16s.h | 140 +++---- .../kernels/baremetal/mempool_mimo_mmse_f8s.h | 373 ++++++++++++++++++ software/runtime/builtins_v2.h | 6 + 12 files changed, 796 insertions(+), 379 deletions(-) create mode 100644 software/apps/baremetal/mimo_mmse_f8/main.c create mode 100644 software/data/data_mimo_mmse_f8.h.tpl create mode 100644 software/kernels/baremetal/mempool_mimo_mmse_f8s.h diff --git a/python-requirements.txt b/python-requirements.txt index d0e903cda..3cb5932cc 100644 --- a/python-requirements.txt +++ b/python-requirements.txt @@ -15,3 +15,4 @@ progressbar2 tabulate sympy scipy +pyflexfloat diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index 36247fbbd..218f4d247 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -18,6 +18,7 @@ #include "baremetal/mempool_mimo_mmse_f16s.h" #include "data_mimo_mmse_f16.h" +#define ZF (0) // When asserted use zero-forcing #define NUM_BANKS (BANKING_FACTOR * NUM_CORES) //#define DOUBLE_BUFFERING @@ -35,14 +36,12 @@ #ifndef DOUBLE_BUFFERING __fp16 l1_H[2 * N_TX * N_RX * N_ITR] - __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_G[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_L[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); -uint32_t l1_beamgroups[N_ITR] - __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1_S[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1_y[2 * N_RX * N_ITR] @@ -58,8 +57,10 @@ __fp16 l1_x[2 * N_TX * N_ITR] int main() { uint32_t core_id = mempool_get_core_id(); +#ifndef BANSHEE uint32_t num_cores = mempool_get_core_count(); mempool_barrier_init(core_id); // Initialize barrier and synchronize +#endif #ifdef BANSHEE /* Initialize matrices */ @@ -71,41 +72,38 @@ int main() { (*(uint32_t *)&l1_y[2 * i]) = *(uint32_t *)&l2_y[2 * i]; } for (uint32_t i = 0; i < N_TX * N_ITR; i++) { - (*(uint32_t *)&l1_S[2 * i]) = *(uint32_t *)&l2_Sigma[2 * i]; + (*(uint32_t *)&l1_S[2 * i]) = *(uint32_t *)&l2_S[2 * i]; } } - mempool_barrier(num_cores); #else /* Initialize matrices */ if (core_id == 0) { - dma_memcpy_blocking(l1_beamgroups, l2_beamgroups, N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1_H, l2_H, 2 * N_TX * N_RX * N_ITR * sizeof(int16_t)); + dma_memcpy_blocking(l1_y, l2_y, 2 * N_RX * N_ITR * sizeof(int16_t)); + dma_memcpy_blocking(l1_S, l2_S, 2 * N_TX * N_ITR * sizeof(int16_t)); } mempool_barrier(num_cores); #endif -#ifdef BANSHEE +#ifdef SINGLE /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); for (uint32_t itr = 0; itr < N_ITR; itr++) { __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = l1_y + itr * (2 * N_RX); - __fp16 *PtrSigma = l1_S + itr * N_TX; + __fp16 *PtrS = l1_S + itr * (2 * N_TX); __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - #ifdef VEC - mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); #else - mempool_hermitian_f16s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); + mempool_hermitian_f16s(PtrH, PtrG, PtrS, N_RX, N_TX, 0, ZF); mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); mempool_cholesky_f16s(PtrG, PtrL, N_TX); #endif @@ -114,20 +112,6 @@ int main() { } mempool_stop_benchmark(); } - mempool_barrier(num_cores); -#endif - -#ifdef SINGLE - if (core_id == 0) { - mempool_start_benchmark(); - mempool_hermitian_f16s(l1_H, l1_G, l1_S, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f16s(l1_H, l1_y, y2, N_RX, N_TX, 0); - mempool_cholesky_f16vecs(l1_G, l1_L, N_TX); - mempool_Ltrisol_f16s(l1_L, y2, y3, N_TX); - mempool_Lttrisol_f16s(l1_L, y3, l1_x, N_TX); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); #endif #ifdef PARALLEL @@ -136,27 +120,24 @@ int main() { for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = l1_y + itr * (2 * N_RX); - __fp16 *PtrSigma = l1_S + itr * (2 * N_TX); + __fp16 *PtrS = l1_S + itr * (2 * N_TX); // Auxiliary vectors __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); - // Serial beamgroup Beamgroups loop - uint32_t N_bg = l1_beamgroups[itr]; - uint32_t N_TX_bg = N_TX / N_bg; - for (uint32_t itr_bg = 0; itr_bg < N_bg; itr_bg++) { - mempool_hermitian_f16vecs(PtrH, PtrG, PtrSigma, N_RX, N_TX_bg); - mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX_bg); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX_bg); - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX_bg); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX_bg); - // Shift over the subsequent beamgroup - PtrH += 2 * itr_bg * N_TX_bg * N_RX; - PtrSigma += 2 * itr_bg * N_TX_bg; - Ptrx += 2 * itr_bg * N_TX_bg; - } +#ifdef VEC + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); + mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); +#else + mempool_hermitian_f16s(PtrH, PtrG, PtrS, N_RX, N_TX, 0, ZF); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); + mempool_cholesky_f16s(PtrG, PtrL, N_TX); +#endif + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); } mempool_barrier(num_cores); mempool_stop_benchmark(); @@ -170,11 +151,10 @@ int main() { printf("RES=%04x\n", x); } } - mempool_barrier(num_cores); #else - mempool_check_f16(l1_x, l2_x, 2 * N_TX, 0.01f, 0); mempool_barrier(num_cores); #endif + return 0; } @@ -233,7 +213,7 @@ int main() { if (core_id == 0) { dma_memcpy_blocking(l1A_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_blocking(l1A_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_blocking(l1A_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_blocking(l1A_S, l2_S, N_TX * N_ITR * sizeof(int32_t)); } mempool_barrier(num_cores); @@ -269,7 +249,7 @@ int main() { dma_memcpy_nonblocking(trsf_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_nonblocking(trsf_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_nonblocking(trsf_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_S, l2_S, N_TX * N_ITR * sizeof(int32_t)); if (round >= 1) // Transfer to L2 is done only if not the first round dma_memcpy_nonblocking(l2_x, trsf_x, (N_TX * N_ITR) * sizeof(int32_t)); } @@ -284,7 +264,7 @@ int main() { __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); - mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); @@ -311,7 +291,7 @@ int main() { __fp16 *PtrS = cmpt_S + itr * (2 * N_TX); __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); - mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); } mempool_log_barrier(2, core_id); @@ -321,7 +301,7 @@ int main() { dma_memcpy_nonblocking(trsf_H, l2_H, N_TX * N_RX * N_ITR * sizeof(int32_t)); dma_memcpy_nonblocking(trsf_y, l2_y, N_RX * N_ITR * sizeof(int32_t)); - dma_memcpy_nonblocking(trsf_S, l2_Sigma, N_TX * N_ITR * sizeof(int32_t)); + dma_memcpy_nonblocking(trsf_S, l2_S, N_TX * N_ITR * sizeof(int32_t)); if (round >= 1) // Transfer to L2 is done only if not the dma_memcpy_nonblocking(l2_x, trsf_x, (N_TX * N_ITR) * sizeof(int32_t)); } diff --git a/software/apps/baremetal/mimo_mmse_f8/main.c b/software/apps/baremetal/mimo_mmse_f8/main.c new file mode 100644 index 000000000..cd6258ad6 --- /dev/null +++ b/software/apps/baremetal/mimo_mmse_f8/main.c @@ -0,0 +1,152 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich + +#include + +#include "dma.h" +#include "encoding.h" +#include "printf.h" +#include "runtime.h" +#include "synchronization.h" + +#include "baremetal/mempool_checks.h" +#include "baremetal/mempool_cholesky_f16s.h" +#include "baremetal/mempool_cholesky_f8s.h" +#include "baremetal/mempool_linearsolver_f16s.h" +#include "baremetal/mempool_linearsolver_f8s.h" +#include "baremetal/mempool_mimo_mmse_f8s.h" + +#include "data_mimo_mmse_f8.h" +#define ZF (0) // When asserted use zero-forcing +#define NUM_BANKS (BANKING_FACTOR * NUM_CORES) + +__fp8 l1_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp8 l1_S[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp8 l1_y[2 * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +__fp16 l1_G[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_L[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); +__fp16 y2[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 y3[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +__fp16 l1_x[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +// Driver program +int main() { + + uint32_t core_id = mempool_get_core_id(); +#ifndef BANSHEE + uint32_t num_cores = mempool_get_core_count(); + mempool_barrier_init(core_id); // Initialize barrier and synchronize +#endif + + /* Initialize matrices */ + if (core_id == 0) { +#ifdef BANSHEE + for (uint32_t i = 0; i < 2 * N_RX * N_TX * N_ITR; i++) { + l1_H[i] = l2_H[i]; + } + for (uint32_t i = 0; i < 2 * N_RX * N_ITR; i++) { + l1_y[i] = l2_y[i]; + } + for (uint32_t i = 0; i < 2 * N_TX * N_ITR; i++) { + l1_S[i] = l2_S[i]; + } +#else + dma_memcpy_blocking(l1_H, l2_H, 2 * N_TX * N_RX * N_ITR * sizeof(int8_t)); + dma_memcpy_blocking(l1_y, l2_y, 2 * N_RX * N_ITR * sizeof(int8_t)); + dma_memcpy_blocking(l1_S, l2_S, 2 * N_TX * N_ITR * sizeof(int16_t)); +#endif + printf("Data transferred\n"); + } +#ifndef BANSHEE + mempool_barrier(num_cores); +#endif + +#ifdef SINGLE + /* Benchmark */ + if (core_id == 0) { + mempool_start_benchmark(); + for (uint32_t itr = 0; itr < N_ITR; itr++) { + // 8b inputs + __fp8 *PtrH = l1_H + itr * (2 * N_TX * N_RX); + __fp8 *Ptry = l1_y + itr * (2 * N_RX); + __fp8 *PtrS = l1_S + itr * (2 * N_TX); + // 16b intermediates and outputs + __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); + __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + __fp16 *Ptry3 = y3 + itr * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); + // 8b +#ifdef VEC + mempool_hermitian_f8vecs(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_MVP_conjtransp_f8vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); +#else + mempool_hermitian_f8s(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_MVP_conjtransp_f8s(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16s(PtrG, PtrL, N_TX); +#endif + // 16b + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_stop_benchmark(); + } +#endif + +#ifdef PARALLEL + mempool_start_benchmark(); + // Parallel subcarrier loop + for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp8 *PtrH = l1_H + itr * (2 * N_TX * N_RX); + __fp8 *Ptry = l1_y + itr * (2 * N_RX); + __fp8 *PtrS = l1_S + itr * (2 * N_TX); + // Auxiliary vectors + __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); + __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); + __fp16 *Ptry2 = y2 + itr * (2 * N_TX); + __fp16 *Ptry3 = y3 + itr * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); +#ifdef VEC + mempool_hermitian_f8vecs(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_MVP_conjtransp_f8vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); +#else + mempool_hermitian_f8s(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_MVP_conjtransp_f8s(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16s(PtrG, PtrL, N_TX); +#endif + // 16b + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); + mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + } + mempool_barrier(num_cores); + mempool_stop_benchmark(); +#endif + +#ifdef BANSHEE + // Check the result + if (core_id == 0) { + for (uint32_t i = 0; i < 2 * N_TX * N_ITR; i++) { + uint32_t x = (*(uint32_t *)&l1_x[i]) & 0x0000FFFF; + printf("RES=%04x\n", x); + } + } +#else + mempool_barrier(num_cores); +#endif + + return 0; +} diff --git a/software/data/data_mimo_mmse_f16.h.tpl b/software/data/data_mimo_mmse_f16.h.tpl index 1f3f638ff..e6109b7f6 100644 --- a/software/data/data_mimo_mmse_f16.h.tpl +++ b/software/data/data_mimo_mmse_f16.h.tpl @@ -34,15 +34,13 @@ // Inputs -uint32_t l2_beamgroups[${N_itr}] = ${array_to_str(beamgroups)}; - __fp16 l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; __fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr(G)}; __fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_S[${2 * N_tx * N_itr}] = ${array_to_cstr(N)}; // Outputs diff --git a/software/data/data_mimo_mmse_f32.h.tpl b/software/data/data_mimo_mmse_f32.h.tpl index bebf4e71d..858deb254 100644 --- a/software/data/data_mimo_mmse_f32.h.tpl +++ b/software/data/data_mimo_mmse_f32.h.tpl @@ -27,7 +27,7 @@ float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${N_tx * N_itr}] = ${array_to_cstr(sigma)}; +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${N_tx * N_itr}] = ${array_to_cstr(N)}; // Outputs diff --git a/software/data/data_mimo_mmse_f8.h.tpl b/software/data/data_mimo_mmse_f8.h.tpl new file mode 100644 index 000000000..780bcc041 --- /dev/null +++ b/software/data/data_mimo_mmse_f8.h.tpl @@ -0,0 +1,47 @@ +// Copyright 2022 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +\ +<% def array_to_cstr(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp8)' + f'{hex(a.bits())}' +', ' + i += 1 + if i % 8 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +<% def array_to_cstr16(array): + out = '{' + i = 0 + out += '\n' + for a in array: + out += '(__fp16){:0.5f}f, '.format(a) + i += 1 + if i % 5 == 0: + out += '\n' + out = out[:-2] + '}' + return out +%> \ + +#define N_TX (${N_tx}) +#define N_RX (${N_rx}) +#define N_ITR (${N_itr}) + +// Inputs + +__fp8 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_H[${2 * N_tx * N_rx * N_itr}] = ${array_to_cstr(H)}; + +__fp8 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; + +__fp8 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_S[${2 * N_tx * N_itr}] = ${array_to_cstr(N)}; + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx * N_tx * N_itr}] = ${array_to_cstr16(G)}; + +// Outputs + +__fp16 __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_x[${2 * N_tx * N_itr}] = ${array_to_cstr16(x)}; diff --git a/software/data/data_mimo_mmse_q16.h.tpl b/software/data/data_mimo_mmse_q16.h.tpl index acc0550b1..ca2ed0193 100644 --- a/software/data/data_mimo_mmse_q16.h.tpl +++ b/software/data/data_mimo_mmse_q16.h.tpl @@ -7,7 +7,7 @@ i = 0 out += '\n' for a in array: - out += '(int16_t) 0X{:04X}, '.format(a&0xffff) + out += '(int16_t) {}, '.format(a) i += 1 if i % 8 == 0: out += '\n' @@ -27,7 +27,7 @@ int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_t int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(sigma)}; +int16_t __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${2 * N_tx * N_itr}] = ${array_to_cstr(N)}; // Outputs diff --git a/software/data/generate_mimo_mmse.py b/software/data/generate_mimo_mmse.py index 5e95d3ef6..e4dd80932 100644 --- a/software/data/generate_mimo_mmse.py +++ b/software/data/generate_mimo_mmse.py @@ -11,13 +11,10 @@ import argparse import pathlib from mako.template import Template +import pyflexfloat as ff from scipy.linalg import solve_triangular -################## -# compute_result # -################## - def gen_data_header_file(outdir: pathlib.Path.cwd(), tpl: pathlib.Path.cwd(), **kwargs): @@ -30,156 +27,83 @@ def gen_data_header_file(outdir: pathlib.Path.cwd(), f.write(template.render(**kwargs)) -def generate_mimo_mmse_f32(N_tx, N_rx, N_itr): +def generate_fmmse(N_tx, N_rx, N_itr, my_type): - vSigma = np.zeros([N_itr, N_tx], dtype=np.float32) - vH = np.zeros([N_itr, 2 * N_tx * N_rx], dtype=np.float32) - vG = np.zeros([N_itr, 2 * N_tx * N_tx], dtype=np.float32) - vy = np.zeros([N_itr, 2 * N_rx], dtype=np.float32) - vx = np.zeros([N_itr, 2 * N_tx], dtype=np.float32) + vH = np.zeros([N_itr, N_tx * 2 * N_rx], dtype=my_type) + vG = np.zeros([N_itr, N_tx * 2 * N_tx], dtype=my_type) + vy = np.zeros([N_itr, 2 * N_rx], dtype=my_type) + vN = np.zeros([N_itr, 2 * N_tx], dtype=my_type) + vx = np.zeros([N_itr, 2 * N_tx], dtype=my_type) for k in range(N_itr): - # Create channel matrix - H = np.random.rand(N_rx, N_tx).astype(np.float32) + 1.j * \ - np.random.rand(N_rx, N_tx).astype(np.float32) + # Create input vector - y = np.random.rand(N_rx).astype(np.float32) + 1.j * \ - np.random.rand(N_rx).astype(np.float32) + y = np.random.rand(N_rx).astype(my_type) + 1.j * \ + np.random.rand(N_rx).astype(my_type) + + # Create channel matrix + H = np.random.rand(N_rx, N_tx).astype(my_type) + 1.j * \ + np.random.rand(N_rx, N_tx).astype(my_type) # Generate noise variance - sigma = np.diag(np.random.rand(N_tx).astype(np.float32)) + N = np.random.rand(1).astype(my_type) # Matrix to be inverted in MMSE estimator H_h = np.asmatrix(H).H - G = np.matmul(H_h, H) + sigma + G = np.matmul(H_h, H) + N * np.eye(H.shape[1]) + N = N * np.ones(N_tx) - # Cholesky decomposition + # Cholesky decomposition L = np.linalg.cholesky(G) # Linear system solution y1 = np.transpose(np.dot(H_h, y)) y2 = solve_triangular(L, y1, lower=True) x = solve_triangular(np.asmatrix(L).H, y2) - sigma = np.diag(sigma) - H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') - G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') + N = np.column_stack((N.real, N.imag)).astype(my_type).flatten() + H = np.column_stack((H.real, H.imag)).astype(my_type).flatten() + G = np.column_stack((G.real, G.imag)).astype(my_type).flatten() + x = np.column_stack((x.real, x.imag)).astype(my_type).flatten() + y = np.column_stack((y.real, y.imag)).astype(my_type).flatten() - vSigma[k, :] = sigma.astype(np.float32).flatten() - vH[k, :] = np.column_stack( - (H.real, H.imag)).astype(np.float32).flatten() - vG[k, :] = np.column_stack( - (G.real, G.imag)).astype(np.float32).flatten() - vy[k, :] = np.column_stack( - (y.real, y.imag)).astype(np.float32).flatten() - vx[k, :] = np.column_stack( - (x.real, x.imag)).astype(np.float32).flatten() + vH[k, :] = H + vG[k, :] = G + vy[k, :] = y + vN[k, :] = N + vx[k, :] = x - vSigma = np.reshape(vSigma, (N_tx * N_itr)).astype(np.float32) - vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(np.float32) - vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(np.float32) - vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(np.float32) - vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(np.float32) + vN = np.reshape(vN, (2 * N_tx * N_itr)).astype(my_type) + vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(my_type) + vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(my_type) + vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(my_type) + vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(my_type) - return vSigma, vH, vG, vy, vx - - -def generate_mimo_mmse_f16(N_tx, N_rx, N_itr, randomize): - - vSigma = np.zeros([N_itr, 2 * N_tx], dtype=np.float16) - vH = np.zeros([N_itr, 2 * N_tx * N_rx], dtype=np.float16) - vG = np.zeros([N_itr, 2 * N_tx * N_tx], dtype=np.float16) - vy = np.zeros([N_itr, 2 * N_rx], dtype=np.float16) - vx = np.zeros([N_itr, 2 * N_tx], dtype=np.float16) - beamgroups = np.zeros(N_itr) - - for k in range(N_itr): - - # Create input vector - y_bg = np.random.rand(N_rx).astype(np.float16) + 1.j * \ - np.random.rand(N_rx).astype(np.float16) - if (randomize == 1): - N_beamgroups = 2 ** np.random.randint(0, np.log2(2 * (N_tx - 1))) - else: - N_beamgroups = 1 - N_tx_itr = N_tx // N_beamgroups - beamgroups[k] = N_beamgroups - - for i in range(N_beamgroups): - - # Create channel matrix - H = np.random.rand(N_rx, N_tx_itr).astype(np.float16) + 1.j * \ - np.random.rand(N_rx, N_tx_itr).astype(np.float16) - # Generate noise variance - sigma = np.diag(np.random.rand(N_tx_itr).astype(np.float16)) - - # Matrix to be inverted in MMSE estimator - H_h = np.asmatrix(H).H - G = np.matmul(H_h, H) + sigma - - # Cholesky decomposition - L = np.linalg.cholesky(G) - # Linear system solution - y1 = np.transpose(np.dot(H_h, y_bg)) - y2 = solve_triangular(L, y1, lower=True) - x = solve_triangular(np.asmatrix(L).H, y2) - - sigma = np.diag(sigma) + 0j - H = np.reshape(np.asarray(H), (N_tx_itr * N_rx), order='C') - G = np.reshape(np.asarray(G), (N_tx_itr * N_tx_itr), order='C') - - sigma = np.column_stack( - (sigma.real, sigma.imag)).astype( - np.float16).flatten() - H = np.column_stack((H.real, H.imag)).astype(np.float16).flatten() - G = np.column_stack((G.real, G.imag)).astype(np.float16).flatten() - y = np.column_stack( - (y_bg.real, y_bg.imag)).astype( - np.float16).flatten() - x = np.column_stack((x.real, x.imag)).astype(np.float16).flatten() - - vSigma[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = sigma - vH[k, (i * 2 * N_tx_itr * N_rx):( - (i + 1) * 2 * N_tx_itr * N_rx)] = H - vG[k, (i * 2 * N_tx_itr * N_tx_itr):( - (i + 1) * 2 * N_tx_itr * N_tx_itr)] = G - vy[k, :] = y - vx[k, (i * 2 * N_tx_itr):((i + 1) * 2 * N_tx_itr)] = x - - vSigma = np.reshape(vSigma, (2 * N_tx * N_itr)).astype(np.float16) - vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(np.float16) - vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(np.float16) - vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(np.float16) - vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(np.float16) - beamgroups = beamgroups.astype(np.int32) - - return vSigma, vH, vG, vy, vx, beamgroups + return vN, vH, vG, vy, vx def generate_mimo_mmse_q16(N_tx, N_rx, N_itr): - vSigma = np.zeros([N_itr, 2 * N_tx], dtype=np.int16) + vN = np.zeros([N_itr, 2 * N_tx], dtype=np.int16) vH = np.zeros([N_itr, 2 * N_tx * N_rx], dtype=np.int16) vG = np.zeros([N_itr, 2 * N_tx * N_tx], dtype=np.int16) vy = np.zeros([N_itr, 2 * N_rx], dtype=np.int16) vx = np.zeros([N_itr, 2 * N_tx], dtype=np.int16) + MAX = 2**15 for k in range(N_itr): # Create channel matrix - H = np.random.randint(-2**(15), 2**(15) - 1, N_rx * N_tx, - dtype=np.int16) + \ - 1.j * np.random.randint(-2**(15), 2 ** (15) - 1, - N_rx * N_tx, dtype=np.int16) + rH = np.random.randint(-MAX, MAX - 1, N_rx * N_tx, dtype=np.int16) + iH = np.random.randint(-MAX, MAX - 1, N_rx * N_tx, dtype=np.int16) + H = rH + 1.j * iH # Create input vector - y = np.random.randint(-2**(15), 2**(15) - 1, N_rx, - dtype=np.int16) + \ - 1.j * np.random.randint(-2**(15), 2 ** (15) - 1, N_rx, - dtype=np.int16) + y = np.random.randint(-MAX, MAX - 1, N_rx, dtype=np.int16) + 1.j * \ + np.random.randint(-MAX, MAX - 1, N_rx, dtype=np.int16) # Generate noise variance - sigma = np.random.randint(-2**(15), 2**(15) - 1, N_tx, dtype=np.int16) + N = np.random.randint(-MAX, MAX - 1, N_tx, dtype=np.int16) H = H.reshape(N_rx, N_tx) # Matrix to be inverted in MMSE estimator H_h = (np.asmatrix(H).H) # Hermitian - G = np.matmul(H_h, H) + sigma + G = np.matmul(H_h, H) + N # Matrix vector product y1 = np.transpose(np.dot(H_h, y)) @@ -190,23 +114,19 @@ def generate_mimo_mmse_q16(N_tx, N_rx, N_itr): y2 = solve_triangular(L, y1, lower=True) x = solve_triangular(np.asmatrix(L).H, y2) - sigma = sigma + 0j - H = np.reshape(np.asarray(H), (N_rx * N_tx), order='C') - G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') - vSigma[k, :] = np.column_stack( - (sigma.real, sigma.imag)).astype(np.int16).flatten() + vN[k, :] = np.column_stack((N.real, N.imag)).astype(np.int16).flatten() vH[k, :] = np.column_stack((H.real, H.imag)).astype(np.int16).flatten() vG[k, :] = np.column_stack((G.real, G.imag)).astype(np.int16).flatten() vy[k, :] = np.column_stack((y.real, y.imag)).astype(np.int16).flatten() vx[k, :] = np.column_stack((x.real, x.imag)).astype(np.int16).flatten() - vSigma = np.reshape(vSigma, (2 * N_tx * N_itr)).astype(np.int16) + vN = np.reshape(vN, (2 * N_tx * N_itr)).astype(np.int16) vH = np.reshape(vH, (2 * N_rx * N_tx * N_itr)).astype(np.int16) vG = np.reshape(vG, (2 * N_tx * N_tx * N_itr)).astype(np.int16) vy = np.reshape(vy, (2 * N_rx * N_itr)).astype(np.int16) vx = np.reshape(vx, (2 * N_tx * N_itr)).astype(np.int16) - return vSigma, vH, vG, vy, vx + return vN, vH, vG, vy, vx def main(): @@ -241,7 +161,7 @@ def main(): "--iterations", type=int, required=False, - default=32, + default=1, help='Iterations.' ) @@ -250,12 +170,13 @@ def main(): N_rx = args.receivers N_itr = args.iterations - vSigma, vH, vG, vy, vx = generate_mimo_mmse_f32(N_tx, N_rx, N_itr) + vN, vH, vG, vy, vx = generate_fmmse( + N_tx, N_rx, N_itr, np.float32) tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_f32.h.tpl" kwargs = {'name': 'data_mimo_mmse_f32', 'H': vH, 'G': vG, - 'sigma': vSigma, + 'N': vN, 'y': vy, 'x': vx, 'N_tx': N_tx, @@ -263,27 +184,40 @@ def main(): 'N_itr': N_itr} gen_data_header_file(args.outdir, tpl, **kwargs) - vSigma, vH, vG, vy, vx, beamgroups = generate_mimo_mmse_f16( - N_tx, N_rx, N_itr, 0) + vN, vH, vG, vy, vx = generate_fmmse( + N_tx, N_rx, N_itr, np.float16) tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_f16.h.tpl" kwargs = {'name': 'data_mimo_mmse_f16', 'H': vH, 'G': vG, - 'sigma': vSigma, + 'N': vN, 'y': vy, 'x': vx, - 'beamgroups': beamgroups, 'N_tx': N_tx, 'N_rx': N_rx, 'N_itr': N_itr} gen_data_header_file(args.outdir, tpl, **kwargs) - vSigma, vH, vG, vy, vx = generate_mimo_mmse_q16(N_tx, N_rx, N_itr) + vN, vH, vG, vy, vx = generate_fmmse( + N_tx, N_rx, N_itr, np.float16) + tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_f8.h.tpl" + kwargs = {'name': 'data_mimo_mmse_f8', + 'H': ff.array(vH, "e5m2"), + 'G': vG, + 'N': ff.array(vN, "e5m2"), + 'y': ff.array(vy, "e5m2"), + 'x': vx, + 'N_tx': N_tx, + 'N_rx': N_rx, + 'N_itr': N_itr} + gen_data_header_file(args.outdir, tpl, **kwargs) + + vN, vH, vG, vy, vx = generate_mimo_mmse_q16(N_tx, N_rx, N_itr) tpl = pathlib.Path(__file__).parent.absolute() / "data_mimo_mmse_q16.h.tpl" kwargs = {'name': 'data_mimo_mmse_q16', 'H': vH, 'G': vG, - 'sigma': vSigma, + 'N': vN, 'y': vy, 'x': vx, 'N_tx': N_tx, diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index ada17eb2a..56483490e 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -26,7 +26,6 @@ void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { __fp16 diag; // Diagonal element __fp16 ap, bp; // Pivot element __fp16 as, bs; // Sum element - uint32_t i, j, k; for (j = 0; j < n; j++) { @@ -173,65 +172,54 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { */ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - float sum; // register float sum - v2h abp, ab, cd; - __fp16 diag, ap; - -#ifndef __CDOTP - float as, bs; - v2h ndc, vec_sum; -#endif + __fp16 diag; + v2h apbp, dgdg; + v2h ab, cd; - v2h vec_diag; uint32_t i, j, k; - for (j = 0; j < n; j++) { + // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = 0.0f; + __fp16 ap = pSrc[2U * (j * n + j)]; + float sum = 0.0f; for (k = 0; k < j; k++) { ab = (*(v2h *)&pL[2U * (j * n + k)]); - asm volatile("vfdotpex.s.h %[sum], %[ab], %[ab];" - : [sum] "+&r"(sum) - : [ab] "r"(ab) - :); + asm volatile("vfdotpex.s.h %0, %1, %1;" : "+&r"(sum) : "r"(ab) :); } - asm volatile("fcvt.h.s %[sum], %[sum];" - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r"(ap) - : [sum] "r"(sum) - :); + asm volatile("fcvt.h.s %0, %0;" : "+&r"(sum) :); + asm volatile("fsub.h %0, %0, %1;" : "+&r"(ap) : "r"(sum)); + asm volatile("fsqrt.h %0, %0;" : "+&r"(ap) :); pL[2U * (j * n + j)] = ap; // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - abp = (*(v2h *)&pSrc[2U * (i * n + j)]); - // Diag - diag = pL[2U * (j * n + j)]; - + uint32_t volatile __srt_iloop__ = (j + 1); + uint32_t volatile __end_kloop__ = j; #ifdef __CDOTP - for (k = 0; k < j; k++) { + for (i = __srt_iloop__; i < n; i++) { + apbp = (*(v2h *)&pSrc[2U * (i * n + j)]); // Pivot + diag = pL[2U * (j * n + j)]; // Diag + for (k = 0; k < __end_kloop__; k++) { ab = (*(v2h *)&pL[2U * (i * n + k)]); cd = (*(v2h *)&pL[2U * (j * n + k)]); - asm volatile("fcndotpex.s.h %[abp],%[ab],%[cd];" - : [abp] "=&r"(abp) - : [ab] "r"(ab), [cd] "r"(cd) - :); + asm volatile("fcndotpex.s.h %0, %1, %2;" + : "+&r"(apbp) + : "r"(ab), "r"(cd)); } - asm volatile("pv.pack %[vec_diag], %[diag], %[diag];" - "vfdiv.h %[abp], %[abp], %[vec_diag];" - : [abp] "+&r"(abp), [vec_diag] "=&r"(vec_diag) - : [diag] "r"(diag) - :); + asm volatile("pv.pack %0, %1, %1;" : "+&r"(dgdg) : "r"(diag)); + asm volatile("vfdiv.h %0, %0, %1;" : "+&r"(apbp) : "r"(dgdg)); + (*(v2h *)&pL[2U * (i * n + j)]) = apbp; + } #else - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (float)0.0f; - bs = (float)0.0f; - for (k = 0; k < j; k++) { + for (i = __srt_iloop__; i < n; i++) { + apbp = (*(v2h *)&pSrc[2U * (i * n + j)]); // Pivot + diag = pL[2U * (j * n + j)]; // Diag + float as = 0.0f; + float bs = 0.0f; + v2h asbs; + for (k = 0; k < __end_kloop__; k++) { ab = (*(v2h *)&pL[2U * (i * n + k)]); cd = (*(v2h *)&pL[2U * (j * n + k)]); + v2h ndc; const uint32_t neg_mask = 0x00008000; const uint32_t shuffle_mask = 0x00020003; asm volatile( @@ -245,17 +233,13 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { [shuffle_mask] "r"(shuffle_mask) :); } - asm volatile("vfcpka.h.s %[vec_sum], %[as], %[bs];" - "pv.pack %[vec_diag], %[diag], %[diag];" - "vfsub.h %[abp], %[abp], %[vec_sum];" - "vfdiv.h %[abp], %[abp], %[vec_diag];" - : [abp] "+&r"(abp), [vec_sum] "+&r"(vec_sum), - [vec_diag] "+&r"(vec_diag) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); -#endif - (*(v2h *)&pL[2U * (i * n + j)]) = abp; + asm volatile("vfcpka.h.s %0, %1, %2;" : "+&r"(asbs) : "r"(as), "r"(bs)); + asm volatile("pv.pack %0, %1, %1;" : "+&r"(dgdg) : "r"(diag)); + asm volatile("vfsub.h %0, %0, %1;" : "+&r"(apbp) : "r"(asbs)); + asm volatile("vfdiv.h %0, %0, %1;" : "+&r"(apbp) : "r"(dgdg)); + (*(v2h *)&pL[2U * (i * n + j)]) = apbp; } +#endif } return; } @@ -281,7 +265,7 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, v2h abp; v2h abp1, abp2, abp3, abp4; v2h ab1, ab2, ab3, ab4, cd; - v2h vec_diag; + v2h diagdiag; uint32_t i, j, k; @@ -291,18 +275,11 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, sum = (float)0.0f; for (k = 0; k < j; k++) { ab1 = (*(v2h *)&pL[2U * (j * n + k)]); - asm volatile("vfdotpex.s.h %[sum], %[ab1], %[ab1];" - : [sum] "+&r"(sum) - : [ab1] "r"(ab1) - :); + asm volatile("vfdotpex.s.h %0, %1, %1;" : "+&r"(sum) : "r"(ab1) :); } - - asm volatile("vfcpka.h.s %[sum], %[sum], %[sum];" - "fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r"(ap) - : [sum] "r"(sum) - :); + asm volatile("fcvt.h.s %0, %0;" : "+&r"(sum) :); + asm volatile("fsub.h %0, %0, %1;" : "+&r"(ap) : "r"(sum)); + asm volatile("fsqrt.h %0, %0;" : "+&r"(ap) :); pL[2U * (j * n + j)] = ap; // Elements on rows @@ -334,11 +311,11 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, :); } - asm volatile("vfcpka.h.s %[vec_diag], %[as1], %[bs1];" - "vfsub.h %[abp], %[abp], %[vec_diag];" - "pv.pack.h %[vec_diag], %[diag], %[diag];" - "vfdiv.h %[abp], %[abp], %[vec_diag];" - : [abp] "+&r"(abp), [vec_diag] "+&r"(vec_diag) + asm volatile("vfcpka.h.s %[diagdiag], %[as1], %[bs1];" + "vfsub.h %[abp], %[abp], %[diagdiag];" + "pv.pack.h %[diagdiag], %[diag], %[diag];" + "vfdiv.h %[abp], %[abp], %[diagdiag];" + : [abp] "+&r"(abp), [diagdiag] "+&r"(diagdiag) : [as1] "r"(as1), [bs1] "r"(bs1), [diag] "r"(diag) :); @@ -401,21 +378,21 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, abp2 = (*(v2h *)&pSrc[2U * ((i + 1) * n + j)]); abp3 = (*(v2h *)&pSrc[2U * ((i + 2) * n + j)]); abp4 = (*(v2h *)&pSrc[2U * ((i + 3) * n + j)]); - asm volatile("vfcpka.h.s %[vec_diag], %[as1], %[bs1];" - "vfcpka.h.s %[vec_diag], %[as2], %[bs2];" - "vfcpka.h.s %[vec_diag], %[as3], %[bs3];" - "vfcpka.h.s %[vec_diag], %[as4], %[bs4];" - - "vfsub.h %[abp1], %[abp1], %[vec_diag];" - "vfsub.h %[abp2], %[abp2], %[vec_diag];" - "vfsub.h %[abp3], %[abp3], %[vec_diag];" - "vfsub.h %[abp4], %[abp4], %[vec_diag];" - - "pv.pack.h %[vec_diag], %[diag], %[diag];" - "vfdiv.h %[abp1], %[abp1], %[vec_diag];" - "vfdiv.h %[abp2], %[abp2], %[vec_diag];" - "vfdiv.h %[abp3], %[abp3], %[vec_diag];" - "vfdiv.h %[abp4], %[abp4], %[vec_diag];" + asm volatile("vfcpka.h.s %[diagdiag], %[as1], %[bs1];" + "vfcpka.h.s %[diagdiag], %[as2], %[bs2];" + "vfcpka.h.s %[diagdiag], %[as3], %[bs3];" + "vfcpka.h.s %[diagdiag], %[as4], %[bs4];" + + "vfsub.h %[abp1], %[abp1], %[diagdiag];" + "vfsub.h %[abp2], %[abp2], %[diagdiag];" + "vfsub.h %[abp3], %[abp3], %[diagdiag];" + "vfsub.h %[abp4], %[abp4], %[diagdiag];" + + "pv.pack.h %[diagdiag], %[diag], %[diag];" + "vfdiv.h %[abp1], %[abp1], %[diagdiag];" + "vfdiv.h %[abp2], %[abp2], %[diagdiag];" + "vfdiv.h %[abp3], %[abp3], %[diagdiag];" + "vfdiv.h %[abp4], %[abp4], %[diagdiag];" "andi %[as1], %[as1], 0;" "andi %[bs1], %[as1], 0;" @@ -427,7 +404,7 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, "andi %[bs4], %[as1], 0;" : [abp1] "+&r"(abp1), [abp2] "+&r"(abp2), [abp3] "+&r"(abp3), - [abp4] "+&r"(abp4), [vec_diag] "+&r"(vec_diag), + [abp4] "+&r"(abp4), [diagdiag] "+&r"(diagdiag), [as1] "+&r"(as1), [as2] "+&r"(as2), [as3] "+&r"(as3), [as4] "+&r"(as4), [bs1] "+&r"(bs1), [bs2] "+&r"(bs2), [bs3] "+&r"(bs3), [bs4] "+&r"(bs4) @@ -463,7 +440,7 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { __fp16 diag; // Diagonal element __fp16 ap, bp; // real and imaginary pivot - v2h vec_sum; + v2h asbs; v2h ab, cd, ndc; uint32_t i, j, k; @@ -516,11 +493,8 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { } as = (ap_f32 - as) / diag_f32; bs = (bp_f32 - bs) / diag_f32; - asm volatile("vfcpka.h.s %0, %1, %2;" - : "=r"(vec_sum) - : "r"(as), "r"(bs) - :); - (*(v2h *)&pL[2U * (i * n + j)]) = vec_sum; + asm volatile("vfcpka.h.s %0, %1, %2;" : "=r"(asbs) : "r"(as), "r"(bs) :); + (*(v2h *)&pL[2U * (i * n + j)]) = asbs; } } return; diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index 9f8327703..37834107d 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -99,28 +99,16 @@ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *pS, if (zf == 0) { // Compute diagonal elements if (i == j) { - asm volatile("fadd.h %[as0], %[as0], %[pS];" - : [as0] "+&r"(as0) - : [pS] "r"(pS[2 * i]) - :); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); bs0 = (__fp16)0.0f; } else if (i == (j + 1U)) { - asm volatile("fadd.h %[as1], %[as1], %[pS];" - : [as1] "+&r"(as1) - : [pS] "r"(pS[2 * i]) - :); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(as1) : "r"(pS[2 * i]) :); bs1 = (__fp16)0.0f; } else if (i == (j + 2U)) { - asm volatile("fadd.h %[as2], %[as2], %[pS];" - : [as2] "+&r"(as2) - : [pS] "r"(pS[2 * i]) - :); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(as2) : "r"(pS[2 * i]) :); bs2 = (__fp16)0.0f; } else if (i == (j + 3U)) { - asm volatile("fadd.h %[as3], %[as3], %[pS];" - : [as3] "+&r"(as3) - : [pS] "r"(pS[2 * i]) - :); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(as3) : "r"(pS[2 * i]) :); bs3 = (__fp16)0.0f; } } @@ -186,17 +174,17 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, bs2 = (__fp16)0.0f; bs3 = (__fp16)0.0f; for (j = 0; j < n_rx; j++) { - // inputs from matrix H_h + // inputs from matrix a0 = pH[2U * (j * n_tx + i)]; a1 = pH[2U * (j * n_tx + i + 1U)]; a2 = pH[2U * (j * n_tx + i + 2U)]; a3 = pH[2U * (j * n_tx + i + 3U)]; - // inputs from matrix H_h + // inputs from matrix b0 = pH[2U * (j * n_tx + i) + 1U]; b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; - // inputs from b + // inputs from vector c = px[2U * j]; d = px[2U * j + 1U]; asm volatile( @@ -278,7 +266,8 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, @return none */ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, - const uint32_t n_rx, const uint32_t n_tx) { + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t zf) { uint32_t i, j, k; v2h ab; v2h cd0, cd1, cd2, cd3; @@ -313,58 +302,17 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, [shuffle_mask] "r"(shuffle_mask) :); } - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); - bs0 = 0.0f; // Store v2h res0; - asm volatile("vfcpka.h.s %[res0], %[as0], %[bs0];" - : [res0] "=&r"(res0) - : [as0] "r"(as0), [bs0] "r"(bs0) + asm volatile("vfcpka.h.s %0, %1, %2;" + : "=&r"(res0) + : "r"(as0), "r"(bs0) :); - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; - - } else if (n_tx == 2) { - // UNROLL_2 - for (j = 0; j < n_tx; j += 2) { - as0 = 0.0f; - as1 = 0.0f; - bs0 = 0.0f; - bs1 = 0.0f; - for (k = 0; k < n_rx; k++) { - ab = (*(v2h *)&pH[2U * (k * n_tx + i)]); - cd0 = (*(v2h *)&pH[2U * (k * n_tx + j)]); - cd1 = (*(v2h *)&pH[2U * (k * n_tx + j + 1U)]); - asm volatile("vfdotpex.s.h %[as0], %[ab], %[cd0];" - "vfdotpex.s.h %[as1], %[ab], %[cd1];" - "pv.shuffle2.h %[cd0], %[cd0], %[shuffle_mask];" - "pv.shuffle2.h %[cd1], %[cd1], %[shuffle_mask];" - "xor %[cd0], %[neg_mask], %[cd0];" - "xor %[cd1], %[neg_mask], %[cd1];" - "vfdotpex.s.h %[bs0], %[ab], %[cd0];" - "vfdotpex.s.h %[bs1], %[ab], %[cd1];" - : [cd0] "+&r"(cd0), [cd1] "+&r"(cd1), [as0] "+&r"(as0), - [as1] "+&r"(as1), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1) - : [ab] "r"(ab), [neg_mask] "r"(neg_mask), - [shuffle_mask] "r"(shuffle_mask) - :); - } - if (i == j) { - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); - bs0 = 0.0f; - } else if (i == (j + 1U)) { - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as1) : "r"(pS[2 * i]) :); - bs1 = 0.0f; - } - v2h res0, res1; - asm volatile( - "vfcpka.h.s %[res0], %[as0], %[bs0];" - "vfcpka.h.s %[res1], %[as1], %[bs1];" - : [res0] "=&r"(res0), [res1] "=&r"(res1) - : [as0] "r"(as0), [as1] "r"(as1), [bs0] "r"(bs0), [bs1] "r"(bs1) - :); - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; - (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; + if (zf == 0) { + asm volatile("and %0, %0, %1;" : "+&r"(res0) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res0) : "r"(pS[2 * i])); } + (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; } else if (n_tx >= 4) { // UNROLL_4 @@ -407,19 +355,6 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, [shuffle_mask] "r"(shuffle_mask) :); } - if (i == j) { - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2 * i]) :); - bs0 = 0.0f; - } else if (i == (j + 1U)) { - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as1) : "r"(pS[2 * i]) :); - bs1 = 0.0f; - } else if (i == (j + 2U)) { - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as2) : "r"(pS[2 * i]) :); - bs2 = 0.0f; - } else if (i == (j + 3U)) { - asm volatile("fadd.s %0, %0, %1;" : "+&r"(as3) : "r"(pS[2 * i]) :); - bs3 = 0.0f; - } v2h res0, res1, res2, res3; asm volatile( "vfcpka.h.s %[res0], %[as0], %[bs0];" @@ -431,6 +366,22 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, : [as0] "r"(as0), [as1] "r"(as1), [as2] "r"(as2), [as3] "r"(as3), [bs0] "r"(bs0), [bs1] "r"(bs1), [bs2] "r"(bs2), [bs3] "r"(bs3) :); + if (zf == 0) { + if (i == j) { + asm volatile("and %0, %0, %1;" : "+&r"(res0) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res0) : "r"(pS[2 * i])); + } else if (i == (j + 1U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res1) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res1) : "r"(pS[2 * i])); + } else if (i == (j + 2U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res2) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res2) : "r"(pS[2 * i])); + } else if (i == (j + 3U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res3) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res3) : "r"(pS[2 * i])); + } + } + // Store (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; @@ -473,19 +424,20 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, [res2] "+&r"(res2), [res3] "+&r"(res3) : [shuffle_mask] "r"(shuffle_mask) :); - __fp16 sigma = pS[2 * i]; - if (i == j) { - asm volatile("and %0, %0, %1;" : "+&r"(res0) : "r"(0x0000FFFF)); - asm volatile("fadd.h %0, %0, %1;" : "+&r"(res0) : "r"(sigma)); - } else if (i == (j + 1U)) { - asm volatile("and %0, %0, %1;" : "+&r"(res1) : "r"(0x0000FFFF)); - asm volatile("fadd.h %0, %0, %1;" : "+&r"(res1) : "r"(sigma)); - } else if (i == (j + 2U)) { - asm volatile("and %0, %0, %1;" : "+&r"(res2) : "r"(0x0000FFFF)); - asm volatile("fadd.h %0, %0, %1;" : "+&r"(res2) : "r"(sigma)); - } else if (i == (j + 3U)) { - asm volatile("and %0, %0, %1;" : "+&r"(res3) : "r"(0x0000FFFF)); - asm volatile("fadd.h %0, %0, %1;" : "+&r"(res3) : "r"(sigma)); + if (zf == 0) { + if (i == j) { + asm volatile("and %0, %0, %1;" : "+&r"(res0) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res0) : "r"(pS[2 * i])); + } else if (i == (j + 1U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res1) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res1) : "r"(pS[2 * i])); + } else if (i == (j + 2U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res2) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res2) : "r"(pS[2 * i])); + } else if (i == (j + 3U)) { + asm volatile("and %0, %0, %1;" : "+&r"(res3) : "r"(0x0000FFFF)); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(res3) : "r"(pS[2 * i])); + } } (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f8s.h b/software/kernels/baremetal/mempool_mimo_mmse_f8s.h new file mode 100644 index 000000000..74d772c64 --- /dev/null +++ b/software/kernels/baremetal/mempool_mimo_mmse_f8s.h @@ -0,0 +1,373 @@ +// Copyright 2021 ETH Zurich and University of Bologna. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 + +// Author: Marco Bertuletti, ETH Zurich +// Author: Aofeng Aoshen, ETH Zurich + +#pragma once +#include "builtins_v2.h" + +/** + @brief Computes the Hermitian matrix G = (H'*H + pS^2I). + @param[in] pH points to input matrix + @param[in] pG points to output matrix + @param[in] pS points to the noise vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @param[in] zf controls if the zero forcing is used + @return none +*/ +void mempool_hermitian_f8s(__fp8 *pH, __fp8 *pS, __fp16 *pG, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t zf) { + + uint32_t i, j, k; + __fp8 a; + __fp8 b; + + __fp8 c0, c1, c2, c3; + __fp8 d0, d1, d2, d3; + __fp8 as0, as1, as2, as3; + __fp8 bs0, bs1, bs2, bs3; + for (i = 0; i < n_tx; i++) { + for (j = 0; j < n_tx; j += 4) { + // Initialize the real part of sums + as0 = (__fp8)0U; + as1 = (__fp8)0U; + as2 = (__fp8)0U; + as3 = (__fp8)0U; + // Initialize the imag part of sums + bs0 = (__fp8)0U; + bs1 = (__fp8)0U; + bs2 = (__fp8)0U; + bs3 = (__fp8)0U; + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + a = pH[2U * (k * n_tx + i)]; + b = pH[2U * (k * n_tx + i) + 1U]; + // inputs from matrix H + c0 = pH[2U * (k * n_tx + j)]; + c1 = pH[2U * (k * n_tx + j + 1U)]; + c2 = pH[2U * (k * n_tx + j + 2U)]; + c3 = pH[2U * (k * n_tx + j + 3U)]; + d0 = pH[2U * (k * n_tx + j) + 1U]; + d1 = pH[2U * (k * n_tx + j + 1U) + 1U]; + d2 = pH[2U * (k * n_tx + j + 2U) + 1U]; + d3 = pH[2U * (k * n_tx + j + 3U) + 1U]; + // dotproducts (ac + bd) + j (ad - bc) + asm volatile( + // a * c + "fmadd.b %[as0], %[a], %[c0], %[as0];" + "fmadd.b %[as1], %[a], %[c1], %[as1];" + "fmadd.b %[as2], %[a], %[c2], %[as2];" + "fmadd.b %[as3], %[a], %[c3], %[as3];" + // a * d + "fmadd.b %[bs0], %[a], %[d0], %[bs0];" + "fmadd.b %[bs1], %[a], %[d3], %[bs1];" + "fmadd.b %[bs2], %[a], %[d2], %[bs2];" + "fmadd.b %[bs3], %[a], %[d3], %[bs3];" + // b * d + "fmadd.b %[as0], %[b], %[d0], %[as0];" + "fmadd.b %[as1], %[b], %[d1], %[as1];" + "fmadd.b %[as2], %[b], %[d2], %[as2];" + "fmadd.b %[as3], %[b], %[d3], %[as3];" + // - b * c + "fnmsub.b %[bs0], %[b], %[c0], %[bs0];" + "fnmsub.b %[bs1], %[b], %[c1], %[bs1];" + "fnmsub.b %[bs2], %[b], %[c2], %[bs2];" + "fnmsub.b %[bs3], %[b], %[c3], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [a] "r"(a), [b] "r"(b), [c0] "r"(c0), [c1] "r"(c1), [c2] "r"(c2), + [c3] "r"(c3), [d0] "r"(d0), [d1] "r"(d1), [d2] "r"(d2), + [d3] "r"(d3) + :); + } + __fp16 FP16_as0, FP16_as1, FP16_as2, FP16_as3; + __fp16 FP16_bs0, FP16_bs1, FP16_bs2, FP16_bs3; + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as0) : "r"(as0) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as1) : "r"(as1) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as2) : "r"(as2) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as3) : "r"(as3) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs0) : "r"(bs0) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs1) : "r"(bs1) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs2) : "r"(bs2) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs3) : "r"(bs3) :); + + if ((zf == 0) && ((i - j) < 4)) { + __fp8 FP8_s = pS[2 * i]; + __fp16 FP16_s; + asm volatile("fcvt.h.b %0, %1;" : "=&r"(FP16_s) : "r"(FP8_s)); + // Compute diagonal elements + if (i == j) { + asm volatile("fadd.h %0, %0, %1;" : "+&r"(FP16_as0) : "r"(FP16_s)); + FP16_bs0 = (__fp16)0U; + } else if (i == (j + 1U)) { + asm volatile("fadd.h %0, %0, %1;" : "+&r"(FP16_as1) : "r"(FP16_s)); + FP16_bs1 = (__fp16)0U; + } else if (i == (j + 2U)) { + asm volatile("fadd.h %0, %0, %1;" : "+&r"(FP16_as2) : "r"(FP16_s)); + FP16_bs2 = (__fp16)0U; + } else if (i == (j + 3U)) { + asm volatile("fadd.h %0, %0, %1;" : "+&r"(FP16_as3) : "r"(FP16_s)); + FP16_bs3 = (__fp16)0U; + } + } + + // Store + pG[2 * (i * n_tx + j)] = FP16_as0; + pG[2 * (i * n_tx + j + 1U)] = FP16_as1; + pG[2 * (i * n_tx + j + 2U)] = FP16_as2; + pG[2 * (i * n_tx + j + 3U)] = FP16_as3; + pG[2 * (i * n_tx + j) + 1U] = FP16_bs0; + pG[2 * (i * n_tx + j + 1U) + 1U] = FP16_bs1; + pG[2 * (i * n_tx + j + 2U) + 1U] = FP16_bs2; + pG[2 * (i * n_tx + j + 3U) + 1U] = FP16_bs3; + } + } + return; +} + +/** + @brief Computes the matrix-vector product y = H' * x. + @param[in] pH points to input matrix + @param[in] px points to input vector + @param[in] py points to output vector + @param[in] nrx number of received samples + @param[in] ntx number of transmitted samples + @return none +*/ +void mempool_MVP_conjtransp_f8s(__fp8 *pH, __fp8 *px, __fp16 *py, + const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j; + __fp8 a0, a1, a2, a3; + __fp8 b0, b1, b2, b3; + __fp8 c, d; + __fp8 as0, as1, as2, as3; + __fp8 bs0, bs1, bs2, bs3; + i = 0; + do { + // Initialize the real part of sums + as0 = (__fp8)0.0f; + as1 = (__fp8)0.0f; + as2 = (__fp8)0.0f; + as3 = (__fp8)0.0f; + // Initialize the imag part of sums + bs0 = (__fp8)0.0f; + bs1 = (__fp8)0.0f; + bs2 = (__fp8)0.0f; + bs3 = (__fp8)0.0f; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + a0 = pH[2U * (j * n_tx + i)]; + a1 = pH[2U * (j * n_tx + i + 1U)]; + a2 = pH[2U * (j * n_tx + i + 2U)]; + a3 = pH[2U * (j * n_tx + i + 3U)]; + // inputs from matrix H_h + b0 = pH[2U * (j * n_tx + i) + 1U]; + b1 = pH[2U * (j * n_tx + i + 1U) + 1U]; + b2 = pH[2U * (j * n_tx + i + 2U) + 1U]; + b3 = pH[2U * (j * n_tx + i + 3U) + 1U]; + // inputs from vector + c = px[2U * j]; + d = px[2U * j + 1U]; + asm volatile( + // a * c + "fmadd.b %[as0], %[a0], %[c], %[as0];" + "fmadd.b %[as1], %[a1], %[c], %[as1];" + "fmadd.b %[as2], %[a2], %[c], %[as2];" + "fmadd.b %[as3], %[a3], %[c], %[as3];" + // a * d + "fmadd.b %[bs0], %[a0], %[d], %[bs0];" + "fmadd.b %[bs1], %[a1], %[d], %[bs1];" + "fmadd.b %[bs2], %[a2], %[d], %[bs2];" + "fmadd.b %[bs3], %[a3], %[d], %[bs3];" + // b * d + "fmadd.b %[as0], %[b0], %[d], %[as0];" + "fmadd.b %[as1], %[b1], %[d], %[as1];" + "fmadd.b %[as2], %[b2], %[d], %[as2];" + "fmadd.b %[as3], %[b3], %[d], %[as3];" + // - b * c + "fnmsub.b %[bs0], %[b0], %[c], %[bs0];" + "fnmsub.b %[bs1], %[b1], %[c], %[bs1];" + "fnmsub.b %[bs2], %[b2], %[c], %[bs2];" + "fnmsub.b %[bs3], %[b3], %[c], %[bs3];" + : [as0] "+&r"(as0), [as1] "+&r"(as1), [as2] "+&r"(as2), + [as3] "+&r"(as3), [bs0] "+&r"(bs0), [bs1] "+&r"(bs1), + [bs2] "+&r"(bs2), [bs3] "+&r"(bs3) + : [c] "r"(c), [d] "r"(d), [a0] "r"(a0), [a1] "r"(a1), [a2] "r"(a2), + [a3] "r"(a3), [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3) + :); + } + // Store + __fp16 FP16_as0, FP16_as1, FP16_as2, FP16_as3; + __fp16 FP16_bs0, FP16_bs1, FP16_bs2, FP16_bs3; + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as0) : "r"(as0) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as1) : "r"(as1) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as2) : "r"(as2) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_as3) : "r"(as3) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs0) : "r"(bs0) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs1) : "r"(bs1) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs2) : "r"(bs2) :); + asm volatile("fcvt.h.b %0, %1;" : "+&r"(FP16_bs3) : "r"(bs3) :); + py[2U * i] = FP16_as0; + py[2U * (i + 1U)] = FP16_as1; + py[2U * (i + 2U)] = FP16_as2; + py[2U * (i + 3U)] = FP16_as3; + py[2U * i + 1U] = FP16_bs0; + py[2U * (i + 1U) + 1U] = FP16_bs1; + py[2U * (i + 2U) + 1U] = FP16_bs2; + py[2U * (i + 3U) + 1U] = FP16_bs3; + i += 4; + } while (i < n_tx); + return; +} + +void mempool_hermitian_f8vecs(__fp8 *pH, __fp8 *pS, __fp16 *pG, + const uint32_t n_rx, const uint32_t n_tx, + const uint32_t zf) { + + uint32_t i, j, k; + uint32_t fe0, fe1, fe2, fe3; + uint32_t ambba; + uint32_t dcdc0, dcdc1, dcdc2, dcdc3; + + for (i = 0; i < n_tx; i++) { + for (j = 0; j < n_tx; j += 4) { + + // Initialize sums + fe0 = 0U; + fe1 = 0U; + fe2 = 0U; + fe3 = 0U; + + // Inner Loop + for (k = 0; k < n_rx; k++) { + // inputs from matrix H_h + int16_t ba = *(int16_t *)&pH[2U * (k * n_tx + i)]; + // inputs from matrix H + int16_t dc0 = *(int16_t *)&pH[2U * (k * n_tx + j)]; + int16_t dc1 = *(int16_t *)&pH[2U * (k * n_tx + j + 1U)]; + int16_t dc2 = *(int16_t *)&pH[2U * (k * n_tx + j + 2U)]; + int16_t dc3 = *(int16_t *)&pH[2U * (k * n_tx + j + 3U)]; + // shuffle + asm volatile( + "pv.shuffle2.b %[ambba], %[ba], %[mask];" + "pv.pack %[dcdc0], %[dc0], %[dc0];" + "pv.pack %[dcdc1], %[dc1], %[dc1];" + "pv.pack %[dcdc2], %[dc2], %[dc2];" + "pv.pack %[dcdc3], %[dc3], %[dc3];" + // negate operand + "vfmul.b %[ambba], %[ambba], %[nmask];" + : [dcdc0] "=&r"(dcdc0), [dcdc1] "=&r"(dcdc1), [dcdc2] "=&r"(dcdc2), + [dcdc3] "=&r"(dcdc3), [ambba] "+&r"(ambba), [ba] "+&r"(ba) + : [dc0] "r"(dc0), [dc1] "r"(dc1), [dc2] "r"(dc2), [dc3] "r"(dc3), + [mask] "r"(0x04050504), [nmask] "r"(0x3cbc3c3c) + :); + // dotproducts e = (ac + bd) f = j (ad - bc) + asm volatile( + "vfdotpex.h.b %[fe0], %[dcdc0], %[ambba];" + "vfdotpex.h.b %[fe1], %[dcdc1], %[ambba];" + "vfdotpex.h.b %[fe2], %[dcdc2], %[ambba];" + "vfdotpex.h.b %[fe3], %[dcdc3], %[ambba];" + : [fe0] "+&r"(fe0), [fe1] "+&r"(fe1), [fe2] "+&r"(fe2), + [fe3] "+&r"(fe3) + : [dcdc0] "r"(dcdc0), [dcdc1] "r"(dcdc1), [dcdc2] "r"(dcdc2), + [dcdc3] "r"(dcdc3), [ambba] "r"(ambba)); + } + + if ((zf == 0) && ((i - j) < 4)) { + __fp8 FP8_sigma = pS[2 * i]; + __fp16 FP16_sigma; + asm volatile("fcvt.h.b %0, %1;" : "=&r"(FP16_sigma) : "r"(FP8_sigma)); + // Compute diagonal elements + if (i == j) { + // printf("%08x\n", *(uint32_t*)&fe0); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(fe0) : "r"(FP16_sigma)); + asm volatile("and %0, %0, %1;" : "+&r"(fe0) : "r"(0x0000FFFF)); + } else if (i == (j + 1U)) { + // printf("%08x\n", *(uint32_t*)&fe1); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(fe1) : "r"(FP16_sigma)); + asm volatile("and %0, %0, %1;" : "+&r"(fe1) : "r"(0x0000FFFF)); + } else if (i == (j + 2U)) { + // printf("%08x\n", *(uint32_t*)&fe2); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(fe2) : "r"(FP16_sigma)); + asm volatile("and %0, %0, %1;" : "+&r"(fe2) : "r"(0x0000FFFF)); + } else if (i == (j + 3U)) { + // printf("%08x\n", *(uint32_t*)&fe3); + asm volatile("fadd.h %0, %0, %1;" : "+&r"(fe3) : "r"(FP16_sigma)); + asm volatile("and %0, %0, %1;" : "+&r"(fe3) : "r"(0x0000FFFF)); + } + } + // Store + (*(uint32_t *)&pG[2 * (i * n_tx + j)]) = fe0; + (*(uint32_t *)&pG[2 * (i * n_tx + j + 1U)]) = fe1; + (*(uint32_t *)&pG[2 * (i * n_tx + j + 2U)]) = fe2; + (*(uint32_t *)&pG[2 * (i * n_tx + j + 3U)]) = fe3; + } + } + return; +} + +void mempool_MVP_conjtransp_f8vecs(__fp8 *pH, __fp8 *px, __fp16 *py, + const uint32_t n_rx, const uint32_t n_tx) { + + uint32_t i, j; + uint32_t fe0, fe1, fe2, fe3; + uint32_t ambba0, ambba1, ambba2, ambba3; + uint32_t dmcdc; + + for (i = 0; i < n_tx; i += 4) { + // Initialize sums + fe0 = 0U; + fe1 = 0U; + fe2 = 0U; + fe3 = 0U; + for (j = 0; j < n_rx; j++) { + // inputs from matrix H_h + int16_t ba0 = *(int16_t *)&pH[2U * (j * n_tx + i)]; + int16_t ba1 = *(int16_t *)&pH[2U * (j * n_tx + i + 1U)]; + int16_t ba2 = *(int16_t *)&pH[2U * (j * n_tx + i + 2U)]; + int16_t ba3 = *(int16_t *)&pH[2U * (j * n_tx + i + 3U)]; + // inputs from vector + int16_t dc = *(int16_t *)&px[2U * j]; + // shuffle + asm volatile( + "pv.pack %[dmcdc], %[dc], %[dc];" + "pv.shuffle2.b %[ambba0], %[ba0], %[mask];" + "pv.shuffle2.b %[ambba1], %[ba1], %[mask];" + "pv.shuffle2.b %[ambba2], %[ba2], %[mask];" + "pv.shuffle2.b %[ambba3], %[ba3], %[mask];" + // negate operand + "vfmul.b %[dmcdc], %[dmcdc], %[nmask];" + : [ambba0] "=&r"(ambba0), [ambba1] "=&r"(ambba1), + [ambba2] "=&r"(ambba2), [ambba3] "=&r"(ambba3), + [dmcdc] "+&r"(dmcdc), [dc] "+&r"(dc) + : [ba0] "r"(ba0), [ba1] "r"(ba1), [ba2] "r"(ba2), [ba3] "r"(ba3), + [mask] "r"(0x04050504), [nmask] "r"(0x3cbc3c3c) + :); + // printf("2: %08x\n", *(uint32_t*)&dmcdc); + // dotproducts e = (ac + bd) f = j (ad - bc) + asm volatile( + "vfdotpex.h.b %[fe0], %[ambba0], %[dmcdc];" + "vfdotpex.h.b %[fe1], %[ambba1], %[dmcdc];" + "vfdotpex.h.b %[fe2], %[ambba2], %[dmcdc];" + "vfdotpex.h.b %[fe3], %[ambba3], %[dmcdc];" + : + [fe0] "+&r"(fe0), [fe1] "+&r"(fe1), [fe2] "+&r"(fe2), [fe3] "+&r"(fe3) + : [ambba0] "r"(ambba0), [ambba1] "r"(ambba1), [ambba2] "r"(ambba2), + [ambba3] "r"(ambba3), [dmcdc] "r"(dmcdc)); + } + + // Store + (*(uint32_t *)&py[2U * i]) = fe0; + (*(uint32_t *)&py[2U * (i + 1U)]) = fe1; + (*(uint32_t *)&py[2U * (i + 2U)]) = fe2; + (*(uint32_t *)&py[2U * (i + 3U)]) = fe3; + } + return; +} diff --git a/software/runtime/builtins_v2.h b/software/runtime/builtins_v2.h index ecc25eea9..ff5efa2d2 100644 --- a/software/runtime/builtins_v2.h +++ b/software/runtime/builtins_v2.h @@ -10,11 +10,17 @@ typedef signed short v2s __attribute__((vector_size(4))); typedef unsigned short v2u __attribute__((vector_size(4))); #ifdef __clang__ +typedef int8_t __fp8; typedef __fp16 v2f16 __attribute__((vector_size(4))); +typedef __fp8 v4f8 __attribute__((vector_size(4))); typedef union { float f32; v2f16 vec; } v2h; +typedef union { + float f32; + v4f8 vec; +} v4b; #endif typedef signed char v4s __attribute__((vector_size(4))); From 13ef7599e18cc7599bbef69b94224b8d5ec93210 Mon Sep 17 00:00:00 2001 From: mbertuletti Date: Wed, 16 Oct 2024 08:46:23 +0200 Subject: [PATCH 39/39] [software] Clean up folded MIMO-MMSE and solution of triangular system --- software/apps/baremetal/mimo_mmse_f16/main.c | 87 +++-- software/apps/baremetal/mimo_mmse_f32/main.c | 120 +++---- software/apps/baremetal/mimo_mmse_f8/main.c | 67 ++-- software/apps/baremetal/mimo_mmse_q16/main.c | 8 +- software/data/data_mimo_mmse_f32.h.tpl | 2 +- software/data/generate_mimo_mmse.py | 4 +- software/kernels/baremetal/mempool_checks.h | 51 +-- .../kernels/baremetal/mempool_cholesky_f16s.h | 179 ++++------ .../kernels/baremetal/mempool_cholesky_f32s.h | 109 +----- .../baremetal/mempool_linearsolver_f16s.h | 311 ++++-------------- .../baremetal/mempool_linearsolver_f32s.h | 193 ++--------- .../baremetal/mempool_linearsolver_q16s.h | 84 +---- .../baremetal/mempool_mimo_mmse_f16s.h | 110 +++---- .../baremetal/mempool_mimo_mmse_f32p.h | 55 +--- .../baremetal/mempool_mimo_mmse_f32s.h | 92 ++---- .../kernels/baremetal/mempool_mimo_mmse_f8s.h | 31 +- 16 files changed, 467 insertions(+), 1036 deletions(-) diff --git a/software/apps/baremetal/mimo_mmse_f16/main.c b/software/apps/baremetal/mimo_mmse_f16/main.c index 218f4d247..ffd879c91 100644 --- a/software/apps/baremetal/mimo_mmse_f16/main.c +++ b/software/apps/baremetal/mimo_mmse_f16/main.c @@ -18,9 +18,9 @@ #include "baremetal/mempool_mimo_mmse_f16s.h" #include "data_mimo_mmse_f16.h" -#define ZF (0) // When asserted use zero-forcing +#define ZF (0) // When asserted use zero-forcing +#define FOLD (0) // When asserted fold matrices in memory #define NUM_BANKS (BANKING_FACTOR * NUM_CORES) -//#define DOUBLE_BUFFERING /********************************************************** ********************************************************** @@ -35,13 +35,21 @@ #ifndef DOUBLE_BUFFERING -__fp16 l1_H[2 * N_TX * N_RX * N_ITR] +#if FOLD +#define NUM_ROW (1 + ((N_ITR * N_TX - 1) / NUM_BANKS)) +__fp16 l1_G[2 * N_TX * NUM_BANKS * NUM_ROW] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_L[2 * N_TX * NUM_BANKS * NUM_ROW] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +#else __fp16 l1_G[2 * N_TX * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_L[2 * N_TX * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +#endif +__fp16 l1_H[2 * N_TX * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp16 l1_S[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 l1_y[2 * N_RX * N_ITR] @@ -62,9 +70,9 @@ int main() { mempool_barrier_init(core_id); // Initialize barrier and synchronize #endif -#ifdef BANSHEE /* Initialize matrices */ if (core_id == 0) { +#ifdef BANSHEE for (uint32_t i = 0; i < N_RX * N_TX * N_ITR; i++) { (*(uint32_t *)&l1_H[2 * i]) = *(uint32_t *)&l2_H[2 * i]; } @@ -74,14 +82,14 @@ int main() { for (uint32_t i = 0; i < N_TX * N_ITR; i++) { (*(uint32_t *)&l1_S[2 * i]) = *(uint32_t *)&l2_S[2 * i]; } - } #else - /* Initialize matrices */ - if (core_id == 0) { dma_memcpy_blocking(l1_H, l2_H, 2 * N_TX * N_RX * N_ITR * sizeof(int16_t)); dma_memcpy_blocking(l1_y, l2_y, 2 * N_RX * N_ITR * sizeof(int16_t)); dma_memcpy_blocking(l1_S, l2_S, 2 * N_TX * N_ITR * sizeof(int16_t)); +#endif + printf("Data transferred\n"); } +#ifndef BANSHEE mempool_barrier(num_cores); #endif @@ -99,16 +107,16 @@ int main() { __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); #ifdef VEC - mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, FOLD, ZF); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX, 0); #else - mempool_hermitian_f16s(PtrH, PtrG, PtrS, N_RX, N_TX, 0, ZF); - mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); - mempool_cholesky_f16s(PtrG, PtrL, N_TX); + mempool_hermitian_f16s(PtrH, PtrG, PtrS, N_RX, N_TX, FOLD, ZF); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16s(PtrG, PtrL, N_TX, 0); #endif - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX, 0, FOLD); + mempool_Ltrisol_f16s(PtrL, Ptry3, Ptrx, N_TX, 1, FOLD); } mempool_stop_benchmark(); } @@ -116,35 +124,51 @@ int main() { #ifdef PARALLEL mempool_start_benchmark(); + uint32_t time_init = mempool_get_timer(); // Parallel subcarrier loop for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp16 *PtrH = l1_H + itr * (2 * N_TX * N_RX); __fp16 *Ptry = l1_y + itr * (2 * N_RX); __fp16 *PtrS = l1_S + itr * (2 * N_TX); // Auxiliary vectors +#if FOLD + __fp16 *PtrG = l1_G + (itr % NUM_ROW) * (2 * N_TX * NUM_BANKS) + + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *PtrL = l1_L + (itr % NUM_ROW) * (2 * N_TX * NUM_BANKS) + + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptry2 = + y2 + (itr % NUM_ROW) * NUM_BANKS + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptry3 = + y3 + (itr % NUM_ROW) * NUM_BANKS + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); +#else __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); +#endif + #ifdef VEC - mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF, FOLD); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX, FOLD); #else - mempool_hermitian_f16s(PtrH, PtrG, PtrS, N_RX, N_TX, 0, ZF); - mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); - mempool_cholesky_f16s(PtrG, PtrL, N_TX); + mempool_hermitian_f16s(PtrH, PtrG, PtrS, N_RX, N_TX, ZF, FOLD); + mempool_MVP_conjtransp_f16s(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f16s(PtrG, PtrL, N_TX, FOLD); #endif - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX, 0, FOLD); + mempool_Ltrisol_f16s(PtrL, Ptry3, Ptrx, N_TX, 1, FOLD); } mempool_barrier(num_cores); + uint32_t time_end = mempool_get_timer(); mempool_stop_benchmark(); #endif - // Check the result #ifdef BANSHEE + // Check the result if (core_id == 0) { for (uint32_t i = 0; i < 2 * N_TX * N_ITR; i++) { uint32_t x = (*(uint32_t *)&l1_x[i]) & 0x0000FFFF; @@ -152,6 +176,9 @@ int main() { } } #else + if (core_id == 0) { + printf("Runtime: %d\n", time_end - time_init); + } mempool_barrier(num_cores); #endif @@ -264,11 +291,11 @@ int main() { __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); - mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, 0, ZF); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX, 0); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX, 0, 0); + mempool_Ltrisol_f16s(PtrL, Ptry3, Ptrx, N_TX, 1, 0); } #endif @@ -291,7 +318,7 @@ int main() { __fp16 *PtrS = cmpt_S + itr * (2 * N_TX); __fp16 *PtrG = G + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); - mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, ZF); + mempool_hermitian_f16vecs(PtrH, PtrG, PtrS, N_RX, N_TX, 0, ZF); mempool_MVP_conjtransp_f16vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); } mempool_log_barrier(2, core_id); @@ -313,9 +340,9 @@ int main() { __fp16 *PtrL = L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX, 0); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX, 0, 0); + mempool_Ltrisol_f16s(PtrL, Ptry3, Ptrx, N_TX, 1, 0); } #endif diff --git a/software/apps/baremetal/mimo_mmse_f32/main.c b/software/apps/baremetal/mimo_mmse_f32/main.c index aa95b1919..194c4c71c 100644 --- a/software/apps/baremetal/mimo_mmse_f32/main.c +++ b/software/apps/baremetal/mimo_mmse_f32/main.c @@ -21,25 +21,25 @@ #include "data_mimo_mmse_f32.h" -//#define SINGLE -//#define JACOBI -#define PARALLEL +#define SINGLE float l1_H[2 * N_TX * N_RX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); float l1_G[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); float l1_L[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(BANKING_FACTOR * NUM_CORES * sizeof(int32_t)), - section(".l1_prio"))); -float l1_Sigma[N_TX * N_ITR] __attribute__((section(".l1_prio"))); - -float l1_y[2 * N_RX * N_ITR] __attribute__((section(".l1_prio"))); -float y2[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); -float y3[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); -float l1_x[2 * N_TX * N_ITR] __attribute__((section(".l1_prio"))); + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +float l1_S[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +float l1_y[2 * N_RX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); + +float y2[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +float y3[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); +float l1_x[2 * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1"))); // Driver program int main() { @@ -52,7 +52,7 @@ int main() { if (core_id == 0) { dma_memcpy_blocking(l1_H, l2_H, 2 * N_ITR * N_RX * N_TX * sizeof(int32_t)); dma_memcpy_blocking(l1_y, l2_y, 2 * N_ITR * N_RX * sizeof(int32_t)); - dma_memcpy_blocking(l1_Sigma, l2_Sigma, N_ITR * N_TX * sizeof(int32_t)); + dma_memcpy_blocking(l1_S, l2_S, 2 * N_ITR * N_TX * sizeof(int32_t)); } mempool_barrier(num_cores); @@ -60,25 +60,15 @@ int main() { /* Benchmark */ if (core_id == 0) { mempool_start_benchmark(); - mempool_hermitian_f32s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); + mempool_hermitian_f32s(l1_H, l1_G, l1_S, N_RX, N_TX, 0, 0); mempool_MVP_conjtransp_f32s(l1_H, l1_y, y2, N_RX, N_TX, 0); - mempool_cholesky_f32s(l1_G, l1_L, N_TX); - mempool_Ltrisol_f32s(l1_L, y2, y3, N_TX); - mempool_Lttrisol_f32s(l1_L, y3, l1_x, N_TX); - mempool_stop_benchmark(); - } - mempool_barrier(num_cores); -#endif - #ifdef JACOBI - /* Benchmark */ - if (core_id == 0) { - mempool_start_benchmark(); - mempool_hermitian_f32s(l1_H, l1_G, l1_Sigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f32s(l1_H, l1_y, y2, N_RX, N_TX, 0); - mempool_stop_benchmark(); - mempool_start_benchmark(); mempool_jacobi_f32s(l1_G, y2, l1_x, N_TX, 0.005f, 20U); +#else + mempool_cholesky_f32s(l1_G, l1_L, N_TX, 0); + mempool_Ltrisol_f32s(l1_L, y2, y3, N_TX, 0, 0); + mempool_Ltrisol_f32s(l1_L, y3, l1_x, N_TX, 1, 0); +#endif mempool_stop_benchmark(); } mempool_barrier(num_cores); @@ -88,21 +78,35 @@ int main() { // Each iteration is assigned to a processor mempool_start_benchmark(); for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + // Inputs float *PtrH = l1_H + itr * (2 * N_TX * N_RX); - float *PtrSigma = l1_Sigma + itr * N_TX; + float *PtrS = l1_S + itr * (2 * N_TX); float *Ptry = l1_y + itr * (2 * N_RX); // Intermediate results and outputs +#if FOLD + __fp16 *PtrG = l1_G + (itr % NUM_ROW) * (2 * N_TX * NUM_BANKS) + + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *PtrL = l1_L + (itr % NUM_ROW) * (2 * N_TX * NUM_BANKS) + + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptry2 = + y2 + (itr % NUM_ROW) * NUM_BANKS + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptry3 = + y3 + (itr % NUM_ROW) * NUM_BANKS + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); +#else float *PtrG = l1_G + itr * (2 * N_TX * N_TX); float *PtrL = l1_L + itr * (2 * N_TX * N_TX); float *Ptry2 = y2 + itr * (2 * N_TX); float *Ptry3 = y3 + itr * (2 * N_TX); float *Ptrx = l1_x + itr * (2 * N_TX); - mempool_hermitian_f32s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0); - mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); - mempool_cholesky_f32s(PtrG, PtrL, N_TX); - mempool_Ltrisol_f32s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f32s(PtrL, Ptry3, Ptrx, N_TX); +#endif + + mempool_hermitian_f32s(PtrH, PtrG, PtrS, N_RX, N_TX, 0, FOLD); + mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX); + mempool_cholesky_f32s(PtrG, PtrL, N_TX, FOLD); + mempool_Ltrisol_f32s(PtrL, Ptry2, Ptry3, N_TX, 0, FOLD); + mempool_Ltrisol_f32s(PtrL, Ptry3, Ptrx, N_TX, 1, FOLD); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); @@ -118,9 +122,9 @@ int main() { for (uint32_t itr = pool_id; itr < N_ITR; itr += num_pools) { float *PtrH = l1_H + itr * (2 * N_TX * N_RX); float *PtrG = l1_G + itr * (2 * N_TX * N_TX); - float *PtrSigma = l1_Sigma + itr * N_TX; - mempool_hermitian_f32p(PtrH, PtrG, PtrSigma, N_RX, N_TX, 0, 0, - core_id % N_TX, N_TX); + float *PtrS = l1_S + itr * N_TX; + mempool_hermitian_f32p(PtrH, PtrG, PtrS, N_RX, N_TX, 0, 0, core_id % N_TX, + N_TX); } mempool_stop_benchmark(); mempool_start_benchmark(); @@ -135,37 +139,9 @@ int main() { float *Ptry3 = y3 + itr * (2 * N_TX); float *Ptrx = l1_x + itr * (2 * N_TX); mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX, 0); - mempool_cholesky_f32s(PtrG, PtrL, N_TX); - mempool_Ltrisol_f32s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f32s(PtrL, Ptry3, Ptrx, N_TX); - } - mempool_log_barrier(2, core_id); - mempool_stop_benchmark(); -#endif - -#if defined(FOLDED) && defined(__XDIVSQRT) - mempool_start_benchmark(); - for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { - // Inputs - float *PtrH = l1_H + itr * (2 * N_TX * N_RX); - float *PtrSigma = l1_Sigma + itr * N_TX; - float *Ptry = l1_y + itr * (2 * N_RX); - // Intermediate results and outputs - float *PtrG = l1_G + (itr % num_cores) * N_TX + - (itr / num_cores) * (2 * N_TX * N_BANKS); - float *PtrL = l1_L + (itr % num_cores) * N_TX + - (itr / num_cores) * (2 * N_TX * N_BANKS); - float *Ptry2 = - y2 + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - float *Ptry3 = - y3 + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - float *Ptrx = - l1_x + (itr % num_cores) * N_TX + (itr / num_cores) * (2 * N_BANKS); - mempool_hermitian_f32s(PtrH, PtrG, PtrSigma, N_RX, N_TX, 1, 0); - mempool_MVP_conjtransp_f32s(PtrH, Ptry, Ptry2, N_RX, N_TX, 1); - mempool_cholesky_folded_f32s(PtrG, PtrL, N_TX); - mempool_Ltrisol_folded_f32s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_folded_f32s(PtrL, Ptry3, Ptrx, N_TX); + mempool_cholesky_f32s(PtrG, PtrL, N_TX, 0); + mempool_Ltrisol_f32s(PtrL, Ptry2, Ptry3, N_TX, 0, 0); + mempool_Ltrisol_f32s(PtrL, Ptry3, Ptrx, N_TX, 1, 0); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); diff --git a/software/apps/baremetal/mimo_mmse_f8/main.c b/software/apps/baremetal/mimo_mmse_f8/main.c index cd6258ad6..294e917bc 100644 --- a/software/apps/baremetal/mimo_mmse_f8/main.c +++ b/software/apps/baremetal/mimo_mmse_f8/main.c @@ -14,26 +14,34 @@ #include "baremetal/mempool_checks.h" #include "baremetal/mempool_cholesky_f16s.h" -#include "baremetal/mempool_cholesky_f8s.h" #include "baremetal/mempool_linearsolver_f16s.h" -#include "baremetal/mempool_linearsolver_f8s.h" #include "baremetal/mempool_mimo_mmse_f8s.h" #include "data_mimo_mmse_f8.h" -#define ZF (0) // When asserted use zero-forcing +#define ZF (0) // When asserted use zero-forcing +#define FOLD (0) // When asserted fold matrixes in memory #define NUM_BANKS (BANKING_FACTOR * NUM_CORES) +#if FOLD + +#define NUM_ROW (1 + ((N_ITR * N_TX - 1) / NUM_BANKS)) +__fp16 l1_G[2 * N_TX * NUM_BANKS * NUM_ROW] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_L[2 * N_TX * NUM_BANKS * NUM_ROW] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +#else +__fp16 l1_G[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +__fp16 l1_L[2 * N_TX * N_TX * N_ITR] + __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); +#endif + __fp8 l1_H[2 * N_TX * N_RX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1_prio"))); __fp8 l1_S[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp8 l1_y[2 * N_RX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); - -__fp16 l1_G[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); -__fp16 l1_L[2 * N_TX * N_TX * N_ITR] - __attribute__((aligned(NUM_BANKS * sizeof(int32_t)), section(".l1_prio"))); __fp16 y2[2 * N_TX * N_ITR] __attribute__((aligned(sizeof(int32_t)), section(".l1"))); __fp16 y3[2 * N_TX * N_ITR] @@ -90,17 +98,17 @@ int main() { __fp16 *Ptrx = l1_x + itr * (2 * N_TX); // 8b #ifdef VEC - mempool_hermitian_f8vecs(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_hermitian_f8vecs(PtrH, PtrS, PtrG, N_RX, N_TX, ZF, 0); mempool_MVP_conjtransp_f8vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX, 0); #else - mempool_hermitian_f8s(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_hermitian_f8s(PtrH, PtrS, PtrG, N_RX, N_TX, ZF, 0); mempool_MVP_conjtransp_f8s(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16s(PtrG, PtrL, N_TX); + mempool_cholesky_f16s(PtrG, PtrL, N_TX, 0); #endif // 16b - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX, 0, 0); + mempool_Ltrisol_f16s(PtrL, Ptry3, Ptrx, N_TX, 1, 0); } mempool_stop_benchmark(); } @@ -108,31 +116,47 @@ int main() { #ifdef PARALLEL mempool_start_benchmark(); + uint32_t time_init = mempool_get_timer(); // Parallel subcarrier loop for (uint32_t itr = core_id; itr < N_ITR; itr += num_cores) { + __fp8 *PtrH = l1_H + itr * (2 * N_TX * N_RX); __fp8 *Ptry = l1_y + itr * (2 * N_RX); __fp8 *PtrS = l1_S + itr * (2 * N_TX); // Auxiliary vectors +#if FOLD + __fp16 *PtrG = l1_G + (itr % NUM_ROW) * (2 * N_TX * NUM_BANKS) + + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *PtrL = l1_L + (itr % NUM_ROW) * (2 * N_TX * NUM_BANKS) + + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptry2 = + y2 + (itr % NUM_ROW) * NUM_BANKS + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptry3 = + y3 + (itr % NUM_ROW) * NUM_BANKS + (itr / NUM_ROW) * (2 * N_TX); + __fp16 *Ptrx = l1_x + itr * (2 * N_TX); +#else __fp16 *PtrG = l1_G + itr * (2 * N_TX * N_TX); __fp16 *PtrL = l1_L + itr * (2 * N_TX * N_TX); __fp16 *Ptry2 = y2 + itr * (2 * N_TX); __fp16 *Ptry3 = y3 + itr * (2 * N_TX); __fp16 *Ptrx = l1_x + itr * (2 * N_TX); +#endif + #ifdef VEC - mempool_hermitian_f8vecs(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_hermitian_f8vecs(PtrH, PtrS, PtrG, N_RX, N_TX, ZF, FOLD); mempool_MVP_conjtransp_f8vecs(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16vecs(PtrG, PtrL, N_TX); + mempool_cholesky_f16vecs(PtrG, PtrL, N_TX, FOLD); #else - mempool_hermitian_f8s(PtrH, PtrS, PtrG, N_RX, N_TX, ZF); + mempool_hermitian_f8s(PtrH, PtrS, PtrG, N_RX, N_TX, ZF, FOLD); mempool_MVP_conjtransp_f8s(PtrH, Ptry, Ptry2, N_RX, N_TX); - mempool_cholesky_f16s(PtrG, PtrL, N_TX); + mempool_cholesky_f16s(PtrG, PtrL, N_TX, FOLD); #endif // 16b - mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_f16s(PtrL, Ptry3, Ptrx, N_TX); + mempool_Ltrisol_f16s(PtrL, Ptry2, Ptry3, N_TX, 0, FOLD); + mempool_Ltrisol_f16s(PtrL, Ptry3, Ptrx, N_TX, 1, FOLD); } mempool_barrier(num_cores); + uint32_t time_end = mempool_get_timer(); mempool_stop_benchmark(); #endif @@ -145,6 +169,9 @@ int main() { } } #else + if (core_id == 0) { + printf("Runtime: %d\n", time_end - time_init); + } mempool_barrier(num_cores); #endif diff --git a/software/apps/baremetal/mimo_mmse_q16/main.c b/software/apps/baremetal/mimo_mmse_q16/main.c index c7dcda78d..24fd9e44d 100644 --- a/software/apps/baremetal/mimo_mmse_q16/main.c +++ b/software/apps/baremetal/mimo_mmse_q16/main.c @@ -64,8 +64,8 @@ int main() { mempool_MVP_conjtransp_q16vecs((v2s *)l1_H, (v2s *)l1_y, (v2s *)y2, N_RX, N_TX, 0); mempool_cholesky_q16vecs(l1_G, l1_L, N_TX); - mempool_Ltrisol_q16vecs(l1_L, y2, y3, N_TX); - mempool_Lttrisol_q16vecs(l1_L, y3, l1_x, N_TX); + mempool_Ltrisol_q16vecs(l1_L, y2, y3, N_TX, 0); + mempool_Ltrisol_q16vecs(l1_L, y3, l1_x, N_TX, 1); mempool_stop_benchmark(); } mempool_barrier(num_cores); @@ -92,8 +92,8 @@ int main() { mempool_MVP_conjtransp_q16vecs((v2s *)PtrH, (v2s *)Ptry, (v2s *)Ptry2, N_RX, N_TX, 0); mempool_cholesky_q16vecs(PtrG, PtrL, N_TX); - mempool_Ltrisol_q16vecs(PtrL, Ptry2, Ptry3, N_TX); - mempool_Lttrisol_q16vecs(PtrL, Ptry3, Ptrx, N_TX); + mempool_Ltrisol_q16vecs(PtrL, Ptry2, Ptry3, N_TX, 0); + mempool_Ltrisol_q16vecs(PtrL, Ptry3, Ptrx, N_TX, 1); } mempool_log_barrier(2, core_id); mempool_stop_benchmark(); diff --git a/software/data/data_mimo_mmse_f32.h.tpl b/software/data/data_mimo_mmse_f32.h.tpl index 858deb254..c7bed1889 100644 --- a/software/data/data_mimo_mmse_f32.h.tpl +++ b/software/data/data_mimo_mmse_f32.h.tpl @@ -27,7 +27,7 @@ float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_G[${2 * N_tx float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_y[${2 * N_rx * N_itr}] = ${array_to_cstr(y)}; -float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_Sigma[${N_tx * N_itr}] = ${array_to_cstr(N)}; +float __attribute__((aligned(sizeof(int32_t)), section(".l2"))) l2_S[${2 * N_tx * N_itr}] = ${array_to_cstr(N)}; // Outputs diff --git a/software/data/generate_mimo_mmse.py b/software/data/generate_mimo_mmse.py index e4dd80932..f8918f561 100644 --- a/software/data/generate_mimo_mmse.py +++ b/software/data/generate_mimo_mmse.py @@ -52,13 +52,15 @@ def generate_fmmse(N_tx, N_rx, N_itr, my_type): G = np.matmul(H_h, H) + N * np.eye(H.shape[1]) N = N * np.ones(N_tx) - # Cholesky decomposition + # Cholesky decomposition L = np.linalg.cholesky(G) # Linear system solution y1 = np.transpose(np.dot(H_h, y)) y2 = solve_triangular(L, y1, lower=True) x = solve_triangular(np.asmatrix(L).H, y2) + H = np.reshape(np.asarray(H), (N_tx * N_rx), order='C') + G = np.reshape(np.asarray(G), (N_tx * N_tx), order='C') N = np.column_stack((N.real, N.imag)).astype(my_type).flatten() H = np.column_stack((H.real, H.imag)).astype(my_type).flatten() G = np.column_stack((G.real, G.imag)).astype(my_type).flatten() diff --git a/software/kernels/baremetal/mempool_checks.h b/software/kernels/baremetal/mempool_checks.h index d680764c1..700354436 100644 --- a/software/kernels/baremetal/mempool_checks.h +++ b/software/kernels/baremetal/mempool_checks.h @@ -15,17 +15,19 @@ void mempool_check_q32(int32_t *__restrict__ pRes, int32_t *__restrict__ pExp, uint32_t NEL, int32_t TOL, bool verbose) { uint32_t core_id = mempool_get_core_id(); - int32_t error; + if (core_id == 0) { + uint32_t ERRORS = 0; for (uint32_t i = 0; i < NEL; i++) { int32_t exp = pExp[i]; int32_t res = pRes[i]; - error = exp - res; - bool print = ((error > TOL) || (error < (-TOL))) || verbose; + int32_t diff = exp - res; + uint32_t error = ((diff > TOL) || (diff < (-TOL))) ? 1 : 0; + uint32_t print = error || verbose; + ERRORS += error; if (print) { printf("CHECK(%d): EXP = %08X - RESP = %08X\n", i, exp, res); - ERRORS++; } } printf("%d ERRORS out of %d CHECKS\n", ERRORS, NEL); @@ -44,17 +46,19 @@ void mempool_check_q32(int32_t *__restrict__ pRes, int32_t *__restrict__ pExp, void mempool_check_q16(int16_t *__restrict__ pRes, int16_t *__restrict__ pExp, uint32_t NEL, int16_t TOL, bool verbose) { uint32_t core_id = mempool_get_core_id(); - int16_t error; + if (core_id == 0) { + uint32_t ERRORS = 0; for (uint32_t i = 0; i < NEL; i++) { int16_t exp = (int16_t)pExp[i]; int16_t res = (int16_t)pRes[i]; - error = (int16_t)(exp - res); - bool print = ((error > TOL) || (error < (-TOL))) | verbose; + int16_t diff = (int16_t)(exp - res); + uint32_t error = ((diff > TOL) || (diff < (-TOL))) ? 1 : 0; + uint32_t print = error || verbose; + ERRORS += error; if (print) { printf("CHECK(%d): EXP = %08X - RESP = %08X\n", i, exp, res); - ERRORS++; } } printf("%d ERRORS out of %d CHECKS\n", ERRORS, NEL); @@ -74,20 +78,24 @@ void mempool_check_q16(int16_t *__restrict__ pRes, int16_t *__restrict__ pExp, void mempool_check_f32(float *__restrict__ pRes, float *__restrict__ pExp, uint32_t NEL, float TOL, bool verbose) { uint32_t core_id = mempool_get_core_id(); - float error = 0.0f; + if (core_id == 0) { + uint32_t ERRORS = 0; for (uint32_t i = 0; i < NEL; i++) { float exp = pExp[i]; float res = pRes[i]; - asm volatile("fsub.s %[error], %[res], %[exp];" - : [error] "+&r"(error) + float diff; + asm volatile("fsub.s %[diff], %[res], %[exp];" + : [diff] "+&r"(diff) : [res] "r"(res), [exp] "r"(exp) :); - bool print = ((error > TOL) || (error < (-TOL))) || verbose; + uint32_t error = ((diff > TOL) || (diff < (-TOL))) ? 1 : 0; + uint32_t print = error || verbose; + ERRORS += error; if (print) { - printf("CHECK(%d): EXP = %08X - RESP = %08X\n", i, exp, res); - ERRORS++; + printf("CHECK(%d): EXP = %08X - RESP = %08X\n", i, *(int32_t *)&exp, + *(int32_t *)&res); } } printf("%d ERRORS out of %d CHECKS\n", ERRORS, NEL); @@ -106,22 +114,25 @@ void mempool_check_f32(float *__restrict__ pRes, float *__restrict__ pExp, void mempool_check_f16(__fp16 *__restrict__ pRes, __fp16 *__restrict__ pExp, uint32_t NEL, float TOL, bool verbose) { uint32_t core_id = mempool_get_core_id(); - float error; + if (core_id == 0) { uint32_t ERRORS = 0; for (uint32_t i = 0; i < NEL; i++) { __fp16 exp = pExp[i]; __fp16 res = pRes[i]; - asm volatile("fsub.h %[error], %[res], %[exp];" - "fcvt.s.h %[error], %[error];" - : [error] "+&r"(error) + float diff; + asm volatile("fsub.h %[diff], %[res], %[exp];" + "fcvt.s.h %[diff], %[diff];" + : [diff] "+&r"(diff) : [res] "r"(res), [exp] "r"(exp) :); - bool print = ((error > TOL) || (error < (-TOL))) || verbose; + + uint32_t error = ((diff > TOL) || (diff < (-TOL))) ? 1 : 0; + uint32_t print = error || verbose; + ERRORS += error; if (print) { printf("CHECK(%d): EXP = %08X - RESP = %08X\n", i, *(int32_t *)&exp, *(int32_t *)&res); - ERRORS++; } } printf("%d ERRORS out of %d CHECKS\n", ERRORS, NEL); diff --git a/software/kernels/baremetal/mempool_cholesky_f16s.h b/software/kernels/baremetal/mempool_cholesky_f16s.h index 56483490e..121267545 100644 --- a/software/kernels/baremetal/mempool_cholesky_f16s.h +++ b/software/kernels/baremetal/mempool_cholesky_f16s.h @@ -16,9 +16,11 @@ @param[in] pSrc points to input matrix @param[in] pL points to output lower triangular matrix @param[in] n dimension of the input data + @param[in] folded matrices are folded row-wise in memory @return none */ -void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { +void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n, + const uint32_t folded) { __fp16 sum; __fp16 a, b; @@ -27,91 +29,15 @@ void mempool_cholesky_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { __fp16 ap, bp; // Pivot element __fp16 as, bs; // Sum element uint32_t i, j, k; + const uint32_t offset = folded ? N_BANKS : n; for (j = 0; j < n; j++) { // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; - sum = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; - asm volatile("fmadd.h %[sum], %[a], %[a], %[sum];" - "fmadd.h %[sum], %[b], %[b], %[sum];" - : [sum] "+&r"(sum) - : [a] "r"(a), [b] "r"(b) - :); - } - asm volatile("fsub.h %[ap], %[ap], %[sum];" - "fsqrt.h %[ap], %[ap];" - : [ap] "+&r"(ap) - : [sum] "r"(sum) - :); - pL[2U * (j * n + j)] = ap; - - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = (__fp16)0.0f; - bs = (__fp16)0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile("fmadd.h %[as], %[a], %[c], %[as];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - asm volatile("fsub.h %[ap], %[ap], %[as];" - "fsub.h %[bp], %[bp], %[bs];" - "fdiv.h %[ap], %[ap], %[diag];" - "fdiv.h %[bp], %[bp], %[diag];" - : [ap] "+&r"(ap), [bp] "+&r"(bp) - : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - } - return; -} - -/** - @brief Cholesky decomposition with Crout algorithm. - Output data is folded to the core's local memory. - @param[in] pSrc points to input matrix - @param[in] pL points to output lower triangular matrix - @param[in] n dimension of the input data - @return none -*/ -void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { - - register __fp16 sum; - __fp16 a, b; - __fp16 c, d; - __fp16 diag; // Diagonal element - __fp16 ap, bp; // Pivot element - __fp16 as, bs; // Sum element - - uint32_t i, j, k; - - for (j = 0; j < n; j++) { - - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * N_BANKS + j)]; + ap = pSrc[2U * (j * offset + j)]; sum = (__fp16)0.0f; for (k = 0; k < j; k++) { - a = pL[2U * (j * N_BANKS + k)]; - b = pL[2U * (j * N_BANKS + k) + 1]; + a = pL[2U * (j * offset + k)]; + b = pL[2U * (j * offset + k) + 1]; asm volatile("fmadd.h %[sum], %[a], %[a], %[sum];" "fmadd.h %[sum], %[b], %[b], %[sum];" : [sum] "+&r"(sum) @@ -123,23 +49,23 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { : [ap] "+&r"(ap) : [sum] "r"(sum) :); - pL[2U * (j * N_BANKS + j)] = ap; + pL[2U * (j * offset + j)] = ap; // Elements on rows for (i = j + 1; i < n; i++) { // Pivot - ap = pSrc[2U * (i * N_BANKS + j)]; - bp = pSrc[2U * (i * N_BANKS + j) + 1]; + ap = pSrc[2U * (i * offset + j)]; + bp = pSrc[2U * (i * offset + j) + 1]; // Diag - diag = pL[2U * (j * N_BANKS + j)]; + diag = pL[2U * (j * offset + j)]; // Sum -> s = s + (ac + bd) + j*(bc - ad) as = (__fp16)0.0f; bs = (__fp16)0.0f; for (k = 0; k < j; k++) { - a = pL[2U * (i * N_BANKS + k)]; - b = pL[2U * (i * N_BANKS + k) + 1]; - c = pL[2U * (j * N_BANKS + k)]; - d = pL[2U * (j * N_BANKS + k) + 1]; + a = pL[2U * (i * offset + k)]; + b = pL[2U * (i * offset + k) + 1]; + c = pL[2U * (j * offset + k)]; + d = pL[2U * (j * offset + k) + 1]; asm volatile("fmadd.h %[as], %[a], %[c], %[as];" "fmadd.h %[as], %[b], %[d], %[as];" "fmadd.h %[bs], %[b], %[c], %[bs];" @@ -155,8 +81,8 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { : [ap] "+&r"(ap), [bp] "+&r"(bp) : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) :); - pL[2U * (i * N_BANKS + j)] = ap; - pL[2U * (i * N_BANKS + j) + 1] = bp; + pL[2U * (i * offset + j)] = ap; + pL[2U * (i * offset + j) + 1] = bp; } } return; @@ -170,55 +96,64 @@ void mempool_cholesky_folded_f16s(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { @param[in] n dimension of the input data @return none */ -void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { +void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n, + const uint32_t folded) { __fp16 diag; v2h apbp, dgdg; v2h ab, cd; - uint32_t i, j, k; + const uint32_t offset = folded ? N_BANKS : n; + for (j = 0; j < n; j++) { // Elements on diagonal (input matrix is positive-definite) - __fp16 ap = pSrc[2U * (j * n + j)]; + __fp16 ap = pSrc[2U * (j * offset + j)]; float sum = 0.0f; for (k = 0; k < j; k++) { - ab = (*(v2h *)&pL[2U * (j * n + k)]); + ab = (*(v2h *)&pL[2U * (j * offset + k)]); asm volatile("vfdotpex.s.h %0, %1, %1;" : "+&r"(sum) : "r"(ab) :); } asm volatile("fcvt.h.s %0, %0;" : "+&r"(sum) :); asm volatile("fsub.h %0, %0, %1;" : "+&r"(ap) : "r"(sum)); asm volatile("fsqrt.h %0, %0;" : "+&r"(ap) :); - pL[2U * (j * n + j)] = ap; + pL[2U * (j * offset + j)] = ap; // Elements on rows - uint32_t volatile __srt_iloop__ = (j + 1); - uint32_t volatile __end_kloop__ = j; + uint32_t __srt_iloop__ = (j + 1); + uint32_t __end_kloop__ = j; #ifdef __CDOTP for (i = __srt_iloop__; i < n; i++) { - apbp = (*(v2h *)&pSrc[2U * (i * n + j)]); // Pivot - diag = pL[2U * (j * n + j)]; // Diag + apbp = (*(v2h *)&pSrc[2U * (i * offset + j)]); // Pivot + diag = pL[2U * (j * offset + j)]; // Diag + v2h asbs = (v2h)0.0f; + float as = 0.0f; + float bs = 0.0f; for (k = 0; k < __end_kloop__; k++) { - ab = (*(v2h *)&pL[2U * (i * n + k)]); - cd = (*(v2h *)&pL[2U * (j * n + k)]); - asm volatile("fcndotpex.s.h %0, %1, %2;" - : "+&r"(apbp) - : "r"(ab), "r"(cd)); + ab = (*(v2h *)&pL[2U * (i * offset + k)]); + cd = (*(v2h *)&pL[2U * (j * offset + k)]); + asm volatile("fccdotpex.s.h %0, %1, %2;" + : "+&r"(asbs) + : "r"(cd), "r"(ab)); } + asm volatile("pv.shuffle2.h %0, %0, %[mask];" + : "+&r"(asbs) + : [mask] "r"(0x00020003)); asm volatile("pv.pack %0, %1, %1;" : "+&r"(dgdg) : "r"(diag)); + asm volatile("vfsub.h %0, %0, %1;" : "+&r"(apbp) : "r"(asbs)); asm volatile("vfdiv.h %0, %0, %1;" : "+&r"(apbp) : "r"(dgdg)); - (*(v2h *)&pL[2U * (i * n + j)]) = apbp; + (*(v2h *)&pL[2U * (i * offset + j)]) = apbp; } #else for (i = __srt_iloop__; i < n; i++) { - apbp = (*(v2h *)&pSrc[2U * (i * n + j)]); // Pivot - diag = pL[2U * (j * n + j)]; // Diag + apbp = (*(v2h *)&pSrc[2U * (i * offset + j)]); // Pivot + diag = pL[2U * (j * offset + j)]; // Diag float as = 0.0f; float bs = 0.0f; v2h asbs; for (k = 0; k < __end_kloop__; k++) { - ab = (*(v2h *)&pL[2U * (i * n + k)]); - cd = (*(v2h *)&pL[2U * (j * n + k)]); + ab = (*(v2h *)&pL[2U * (i * offset + k)]); + cd = (*(v2h *)&pL[2U * (j * offset + k)]); v2h ndc; const uint32_t neg_mask = 0x00008000; const uint32_t shuffle_mask = 0x00020003; @@ -237,7 +172,7 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { asm volatile("pv.pack %0, %1, %1;" : "+&r"(dgdg) : "r"(diag)); asm volatile("vfsub.h %0, %0, %1;" : "+&r"(apbp) : "r"(asbs)); asm volatile("vfdiv.h %0, %0, %1;" : "+&r"(apbp) : "r"(dgdg)); - (*(v2h *)&pL[2U * (i * n + j)]) = apbp; + (*(v2h *)&pL[2U * (i * offset + j)]) = apbp; } #endif } @@ -430,7 +365,8 @@ void mempool_cholesky_f16vecs_unroll4(__fp16 *pSrc, __fp16 *pL, @param[in] n dimension of the input data @return none */ -void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { +void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n, + const uint32_t folded) { float sum; // register float sum float as, bs; // real and imaginary sums @@ -444,14 +380,15 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { v2h ab, cd, ndc; uint32_t i, j, k; + const uint32_t offset = folded ? N_BANKS : n; for (j = 0; j < n; j++) { // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; + ap = pSrc[2U * (j * offset + j)]; asm volatile("fcvt.s.h %0, %1;" : "=r"(sum) : "r"(ap) :); for (k = 0; k < j; k++) { - ab = (*(v2h *)&pL[2U * (j * n + k)]); + ab = (*(v2h *)&pL[2U * (j * offset + k)]); asm volatile("vfndotpex.s.h %[sum], %[ab], %[ab];" : [sum] "+&r"(sum) : [ab] "r"(ab) @@ -459,15 +396,15 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { } sum = (float)sqrt(sum); asm volatile("fcvt.h.s %0, %1;" : "=r"(ap) : "r"(sum) :); - pL[2U * (j * n + j)] = ap; + pL[2U * (j * offset + j)] = ap; // Elements on rows for (i = j + 1; i < n; i++) { // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j + 1)]; + ap = pSrc[2U * (i * offset + j)]; + bp = pSrc[2U * (i * offset + j + 1)]; // Diag - diag = pL[2U * (j * n + j)]; + diag = pL[2U * (j * offset + j)]; // Sum -> s = s + (ac + bd) + j*(bc - ad) as = (float)0.0f; @@ -476,8 +413,8 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { asm volatile("fcvt.s.h %0, %1;" : "=r"(bp_f32) : "r"(bp) :); asm volatile("fcvt.s.h %0, %1;" : "=r"(diag_f32) : "r"(diag) :); for (k = 0; k < j; k++) { - ab = (*(v2h *)&pL[2U * (i * n + k)]); - cd = (*(v2h *)&pL[2U * (j * n + k)]); + ab = (*(v2h *)&pL[2U * (i * offset + k)]); + cd = (*(v2h *)&pL[2U * (j * offset + k)]); const uint32_t neg_mask = 0x00008000; const uint32_t shuffle_mask = 0x00020003; asm volatile( @@ -494,7 +431,7 @@ void mempool_cholesky_f16vecs(__fp16 *pSrc, __fp16 *pL, const uint32_t n) { as = (ap_f32 - as) / diag_f32; bs = (bp_f32 - bs) / diag_f32; asm volatile("vfcpka.h.s %0, %1, %2;" : "=r"(asbs) : "r"(as), "r"(bs) :); - (*(v2h *)&pL[2U * (i * n + j)]) = asbs; + (*(v2h *)&pL[2U * (i * offset + j)]) = asbs; } } return; diff --git a/software/kernels/baremetal/mempool_cholesky_f32s.h b/software/kernels/baremetal/mempool_cholesky_f32s.h index 2bad891f5..63fd878dc 100644 --- a/software/kernels/baremetal/mempool_cholesky_f32s.h +++ b/software/kernels/baremetal/mempool_cholesky_f32s.h @@ -16,7 +16,8 @@ @param[in] n dimension of the input data @return none */ -void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { +void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n, + const uint32_t folded) { register float sum; float a, b; @@ -24,17 +25,17 @@ void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { float diag; // Diagonal element float ap, bp; // Pivot element float as, bs; // Sum element - uint32_t i, j, k; + const uint32_t offset = folded ? N_BANKS : n; for (j = 0; j < n; j++) { // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[2U * (j * n + j)]; + ap = pSrc[2U * (j * offset + j)]; sum = 0.0f; for (k = 0; k < j; k++) { - a = pL[2U * (j * n + k)]; - b = pL[2U * (j * n + k) + 1]; + a = pL[2U * (j * offset + k)]; + b = pL[2U * (j * offset + k) + 1]; asm volatile("fmadd.s %[sum], %[a], %[a], %[sum];" "fmadd.s %[sum], %[b], %[b], %[sum];" : [sum] "+&r"(sum) @@ -51,98 +52,18 @@ void mempool_cholesky_f32s(float *pSrc, float *pL, const uint32_t n) { // Elements on rows for (i = j + 1; i < n; i++) { // Pivot - ap = pSrc[2U * (i * n + j)]; - bp = pSrc[2U * (i * n + j) + 1]; - // Diag - diag = pL[2U * (j * n + j)]; - // Sum -> s = s + (ac + bd) + j*(bc - ad) - as = 0.0f; - bs = 0.0f; - for (k = 0; k < j; k++) { - a = pL[2U * (i * n + k)]; - b = pL[2U * (i * n + k) + 1]; - c = pL[2U * (j * n + k)]; - d = pL[2U * (j * n + k) + 1]; - asm volatile("fmadd.s %[as], %[a], %[c], %[as];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - asm volatile("fsub.s %[ap], %[ap], %[as];" - "fsub.s %[bp], %[bp], %[bs];" - "fdiv.s %[ap], %[ap], %[diag];" - "fdiv.s %[bp], %[bp], %[diag];" - : [ap] "+&r"(ap), [bp] "+&r"(bp) - : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) - :); - pL[2U * (i * n + j)] = ap; - pL[2U * (i * n + j) + 1] = bp; - } - } - return; -} - -void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { - - register float sum; - - // first matrix row: - // item[0-2] item[1-3] - // memrow[0] x x x x - // memrow[1] x x x x - // second matrix row: - // memrow[2] x x x x - // memrow[3] x x x x - // third matrix row: - // memrow[4] x x x x - // memrow[5] x x x x - // i * memrow_xrow * N_BANKS + (j / local_items) * N_BANKS + j % local_items - - float a, b; - float c, d; - float diag; // Diagonal element - float ap, bp; // Pivot element - float as, bs; // Sum element - uint32_t banks_per_row = (n / 2) * N_BANKS; - - uint32_t i, j, k; - for (j = 0; j < n; j++) { - // Elements on diagonal (input matrix is positive-definite) - ap = pSrc[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - sum = 0.0f; - for (k = 0; k < j; k++) { - a = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; - b = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; - asm volatile("fmadd.s %[sum], %[a], %[a], %[sum];" - "fmadd.s %[sum], %[b], %[b], %[sum];" - : [sum] "+&r"(sum) - : [a] "r"(a), [b] "r"(b) - :); - } - asm volatile("fsub.s %[ap], %[ap], %[sum];" - "fsqrt.s %[ap], %[ap];" - : [ap] "+&r"(ap) - : [sum] "r"(sum) - :); - pL[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)] = ap; - // Elements on rows - for (i = j + 1; i < n; i++) { - // Pivot - ap = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - bp = pSrc[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; + ap = pSrc[2U * (i * offset + j)]; + bp = pSrc[2U * (i * offset + j) + 1]; // Diag - diag = pL[j * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; + diag = pL[2U * (j * offset + j)]; // Sum -> s = s + (ac + bd) + j*(bc - ad) as = 0.0f; bs = 0.0f; for (k = 0; k < j; k++) { - a = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; - b = pL[i * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; - c = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2)]; - d = pL[j * banks_per_row + (k / 2) * N_BANKS + 2 * (k % 2) + 1]; + a = pL[2U * (i * offset + k)]; + b = pL[2U * (i * offset + k) + 1]; + c = pL[2U * (j * offset + k)]; + d = pL[2U * (j * offset + k) + 1]; asm volatile("fmadd.s %[as], %[a], %[c], %[as];" "fmadd.s %[as], %[b], %[d], %[as];" "fmadd.s %[bs], %[b], %[c], %[bs];" @@ -158,8 +79,8 @@ void mempool_cholesky_folded_f32s(float *pSrc, float *pL, const uint32_t n) { : [ap] "+&r"(ap), [bp] "+&r"(bp) : [diag] "r"(diag), [as] "r"(as), [bs] "r"(bs) :); - pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)] = ap; - pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1] = bp; + pL[2U * (i * offset + j)] = ap; + pL[2U * (i * offset + j) + 1] = bp; } } return; diff --git a/software/kernels/baremetal/mempool_linearsolver_f16s.h b/software/kernels/baremetal/mempool_linearsolver_f16s.h index 32ab942ca..c4e134527 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f16s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f16s.h @@ -15,10 +15,13 @@ @param[in] in known variables vector @param[in] x unknown solutions vector @param[in] n dimension of the system + @param[in] transposed solve transposed system + @param[in] folded matrix L is folded row-wise in memory @return none */ -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n, + const uint32_t transposed, const uint32_t folded) { uint32_t i, j; __fp16 a, b; @@ -27,77 +30,41 @@ void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { __fp16 as, bs; __fp16 ax, bx; __fp16 diag; + const uint32_t offset = folded ? N_BANKS : n; // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - diag = pL[2 * (i * n + i)]; - as = (__fp16)in[2U * i]; - bs = (__fp16)in[2U * i + 1]; + uint32_t ridx = transposed ? (n - i - 1) : i; + diag = pL[2U * (ridx * offset + ridx)]; + as = (__fp16)in[2U * ridx]; + bs = (__fp16)in[2U * ridx + 1]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r"(ax), [bx] "+&r"(bx) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -/** - @brief Single-core solution of upper triangular system - (from transposed lower triangular system) - @param[in] pL input triangular matrix to be transposed - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, - const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = (__fp16)in[2 * (n - i - 1)]; - bs = (__fp16)in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); + uint32_t cidx = transposed ? (n - j - 1) : j; + c = x[2U * cidx]; + d = x[2U * cidx + 1]; + if (transposed) { + a = pL[2U * (cidx * offset + ridx)]; + b = pL[2U * (cidx * offset + ridx) + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } else { + a = pL[2U * (ridx * offset + cidx)]; + b = pL[2U * (ridx * offset + cidx) + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } } // Subtract the sum from b_i and divide by the diagonal element L[i][i] asm volatile("fdiv.h %[ax], %[as], %[diag];" @@ -105,115 +72,8 @@ void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, : [ax] "+&r"(ax), [bx] "+&r"(bx) : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - -/** - @brief Single-core solution of lower triangular system - (from transposed lower triangular system) - @param[in] pL input triangular matrix - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Ltrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, - const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[i * N_BANKS + 2 * i]; - as = (__fp16)in[2U * i]; - bs = (__fp16)in[2U * i + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[i * N_BANKS + 2 * j]; - b = pL[i * N_BANKS + 2 * j + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r"(ax), [bx] "+&r"(bx) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -/** - @brief Single-core solution of upper triangular system - Output data is folded to the core's local memory. - (from transposed lower triangular system) - @param[in] pL input triangular matrix to be transposed - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, - const uint32_t n) { - - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 ax, bx; - __fp16 diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - uint32_t rev_i = (n - 1 - i); - diag = pL[rev_i * N_BANKS + 2 * rev_i]; - as = (__fp16)in[2 * rev_i]; - bs = (__fp16)in[2 * rev_i + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - uint32_t rev_j = (n - 1 - j); - a = pL[rev_j * N_BANKS + 2 * rev_i]; - b = pL[rev_j * N_BANKS + 2 * rev_i + 1]; - c = x[2U * rev_j]; - d = x[2U * rev_j + 1]; - asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fdiv.h %[ax], %[as], %[diag];" - "fdiv.h %[bx], %[bs], %[diag];" - : [ax] "+&r"(ax), [bx] "+&r"(bx) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); - x[2U * rev_i] = ax; - x[2U * rev_i + 1] = bx; + x[2U * ridx] = ax; + x[2U * ridx + 1] = bx; } return; } @@ -229,7 +89,8 @@ void mempool_Lttrisol_folded_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, @return none */ -void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { +void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n, + const uint32_t transposed, const uint32_t folded) { uint32_t i, j; __fp16 a, b; @@ -237,82 +98,44 @@ void mempool_Ltrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, const uint32_t n) { __fp16 as, bs; __fp16 diag; + const uint32_t offset = folded ? N_BANKS : n; float ax, bx, diag_f32; v2h res; // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - diag = pL[2 * (i * n + i)]; - as = (__fp16)in[2U * i]; - bs = (__fp16)in[2U * i + 1]; + uint32_t ridx = transposed ? (n - i - 1) : i; + diag = pL[2U * (ridx * offset + ridx)]; + as = (__fp16)in[2U * ridx]; + bs = (__fp16)in[2U * ridx + 1]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fcvt.s.h %0, %1;" : "=r"(diag_f32) : "r"(diag) :); - asm volatile("fcvt.s.h %0, %1;" : "=r"(ax) : "r"(as) :); - asm volatile("fcvt.s.h %0, %1;" : "=r"(bx) : "r"(bs) :); - ax = ax / diag_f32; - bx = bx / diag_f32; - asm volatile("vfcpka.h.s %0, %1, %2;" : "=r"(res) : "r"(ax), "r"(bx) :); - (*(v2h *)&x[2U * i]) = res; - } - return; -} - -/** - @brief Single-core solution of upper triangular system - (from transposed lower triangular system) - @param[in] pL input triangular matrix to be transposed - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, - const uint32_t n) { - uint32_t i, j; - __fp16 a, b; - __fp16 c, d; - - __fp16 as, bs; - __fp16 diag; - - float ax, bx, diag_f32; - v2h res; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = (__fp16)in[2 * (n - i - 1)]; - bs = (__fp16)in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" - "fnmsub.h %[as], %[b], %[d], %[as];" - "fnmsub.h %[bs], %[a], %[d], %[bs];" - "fmadd.h %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); + uint32_t volatile cidx = transposed ? (n - j - 1) : j; + c = x[2U * cidx]; + d = x[2U * cidx + 1]; + if (transposed) { + a = pL[2U * (cidx * offset + ridx)]; + b = pL[2U * (cidx * offset + ridx) + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } else { + a = pL[2U * (ridx * offset + cidx)]; + b = pL[2U * (ridx * offset + cidx) + 1]; + asm volatile("fnmsub.h %[as], %[a], %[c], %[as];" + "fnmsub.h %[bs], %[a], %[d], %[bs];" + "fmadd.h %[as], %[b], %[d], %[as];" + "fnmsub.h %[bs], %[b], %[c], %[bs];" + : [as] "+&r"(as), [bs] "+&r"(bs) + : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) + :); + } } // Subtract the sum from b_i and divide by the diagonal element L[i][i] asm volatile("fcvt.s.h %0, %1;" : "=r"(diag_f32) : "r"(diag) :); @@ -321,7 +144,7 @@ void mempool_Lttrisol_f16s(__fp16 *pL, __fp16 *in, __fp16 *x, ax = ax / diag_f32; bx = bx / diag_f32; asm volatile("vfcpka.h.s %0, %1, %2;" : "=r"(res) : "r"(ax), "r"(bx) :); - (*(v2h *)&x[2U * (n - i - 1)]) = res; + (*(v2h *)&x[2U * ridx]) = res; } return; } diff --git a/software/kernels/baremetal/mempool_linearsolver_f32s.h b/software/kernels/baremetal/mempool_linearsolver_f32s.h index c3f3b6ce1..d3297397c 100644 --- a/software/kernels/baremetal/mempool_linearsolver_f32s.h +++ b/software/kernels/baremetal/mempool_linearsolver_f32s.h @@ -15,10 +15,12 @@ @param[in] in known variables vector @param[in] x unknown solutions vector @param[in] n dimension of the system + @param[in] transposed solve transposed system @return none */ -void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { +void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n, + const uint32_t transposed, const uint32_t folded) { uint32_t i, j; float a, b; @@ -27,122 +29,28 @@ void mempool_Ltrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { float as, bs; float ax, bx; float diag; + const uint32_t offset = folded ? N_BANKS : n; // Solve for each variable x_i in turn for (i = 0; i < n; i++) { - as = in[2U * i]; - bs = in[2U * i + 1]; - diag = pL[2 * (i * n + i)]; + uint32_t ridx = transposed ? (n - i - 1) : i; + diag = pL[2U * (ridx * offset + ridx)]; + as = in[2U * ridx]; + bs = in[2U * ridx + 1]; // Use the previously solved variables to calculate the sum for (j = 0; j < i; j++) { - a = pL[2U * (i * n + j)]; - b = pL[2U * (i * n + j) + 1]; - c = x[2U * j]; - d = x[2U * j + 1]; - asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r"(ax), [bx] "+&r"(bx) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); - x[2U * i] = ax; - x[2U * i + 1] = bx; - } - return; -} - -/** - @brief Single-core solution of upper triangular system - (from transposed lower triangular system) - @param[in] pL input triangular matrix to be transposed - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Lttrisol_f32s(float *pL, float *in, float *x, const uint32_t n) { - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - as = in[2 * (n - i - 1)]; - bs = in[2 * (n - i - 1) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - b = pL[2U * ((n - 1 - j) * n + (n - 1 - i)) + 1]; - c = x[2U * (n - 1 - j)]; - d = x[2U * (n - 1 - j) + 1]; - asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r"(ax), [bx] "+&r"(bx) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); - x[2U * (n - i - 1)] = ax; - x[2U * (n - i - 1) + 1] = bx; - } - return; -} - -/** - @brief Single-core solution of lower triangular system - (from transposed lower triangular system) - @param[in] pL input triangular matrix - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, - const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - uint32_t banks_per_row = (n / 2) * N_BANKS; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - diag = pL[i * banks_per_row + (i / 2) * N_BANKS + 2 * (i % 2)]; - as = in[(i / 2) * N_BANKS + 2 * (i % 2)]; - bs = in[(i / 2) * N_BANKS + 2 * (i % 2) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - a = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2)]; - b = pL[i * banks_per_row + (j / 2) * N_BANKS + 2 * (j % 2) + 1]; - c = x[(j / 2) * N_BANKS + 2 * (j % 2)]; - d = x[(j / 2) * N_BANKS + 2 * (j % 2) + 1]; + uint32_t cidx = transposed ? (n - j - 1) : j; + if (!transposed) { + a = pL[2U * (ridx * offset + cidx)]; + b = pL[2U * (ridx * offset + cidx) + 1]; + } else { + a = pL[2U * (cidx * offset + ridx)]; + b = pL[2U * (cidx * offset + ridx) + 1]; + } + + c = x[2U * cidx]; + d = x[2U * cidx + 1]; asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" "fnmsub.s %[bs], %[a], %[d], %[bs];" "fmadd.s %[as], %[b], %[d], %[as];" @@ -157,67 +65,8 @@ void mempool_Ltrisol_folded_f32s(float *pL, float *in, float *x, : [ax] "+&r"(ax), [bx] "+&r"(bx) : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) :); - x[(i / 2) * N_BANKS + 2 * (i % 2)] = ax; - x[(i / 2) * N_BANKS + 2 * (i % 2) + 1] = bx; - } - return; -} - -/** - @brief Single-core solution of upper triangular system - Output data is folded to the core's local memory. - (from transposed lower triangular system) - @param[in] pL input triangular matrix to be transposed - @param[in] in known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Lttrisol_folded_f32s(float *pL, float *in, float *x, - const uint32_t n) { - - uint32_t i, j; - float a, b; - float c, d; - - float as, bs; - float ax, bx; - float diag; - uint32_t banks_per_row = (n / 2) * N_BANKS; - - // Solve for each variable x_i in turn - for (i = 0; i < n; i++) { - // reversed i index - uint32_t rev_i = (n - 1 - i); - diag = pL[rev_i * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; - as = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; - bs = in[(rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + 1]; - // Use the previously solved variables to calculate the sum - for (j = 0; j < i; j++) { - // reversed j index - uint32_t rev_j = (n - 1 - j); - a = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2)]; - b = pL[rev_j * banks_per_row + (rev_i / 2) * N_BANKS + 2 * (rev_i % 2) + - 1]; - c = x[2U * rev_j]; - d = x[2U * rev_j + 1]; - asm volatile("fnmsub.s %[as], %[a], %[c], %[as];" - "fnmsub.s %[as], %[b], %[d], %[as];" - "fnmsub.s %[bs], %[a], %[d], %[bs];" - "fmadd.s %[bs], %[b], %[c], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs) - : [a] "r"(a), [b] "r"(b), [c] "r"(c), [d] "r"(d) - :); - } - // Subtract the sum from b_i and divide by the diagonal element L[i][i] - asm volatile("fdiv.s %[ax], %[as], %[diag];" - "fdiv.s %[bx], %[bs], %[diag];" - : [ax] "+&r"(ax), [bx] "+&r"(bx) - : [as] "r"(as), [bs] "r"(bs), [diag] "r"(diag) - :); - x[2U * rev_i] = ax; - x[2U * rev_i + 1] = bx; + x[2U * ridx] = ax; + x[2U * ridx + 1] = bx; } return; } diff --git a/software/kernels/baremetal/mempool_linearsolver_q16s.h b/software/kernels/baremetal/mempool_linearsolver_q16s.h index 4c3c2ad4a..cd9134968 100644 --- a/software/kernels/baremetal/mempool_linearsolver_q16s.h +++ b/software/kernels/baremetal/mempool_linearsolver_q16s.h @@ -5,7 +5,6 @@ // Author: Marco Bertuletti, ETH Zurich #pragma once -#define N_BANKS (NUM_CORES * BANKING_FACTOR) /** @brief Single-core solution of lower triangular system @@ -13,11 +12,12 @@ @param[in] y known variables vector @param[in] x unknown solutions vector @param[in] n dimension of the system + @param[in] transposed solve transposed system @return none */ void mempool_Ltrisol_q16vecs(int16_t *pL, int16_t *y, int16_t *x, - const uint32_t n) { + const uint32_t n, const uint32_t transposed) { uint32_t i, j; int32_t as, bs, diag; @@ -27,15 +27,20 @@ void mempool_Ltrisol_q16vecs(int16_t *pL, int16_t *y, int16_t *x, // Solve for each variable x[i] in loop for (i = 0; i < n; i++) { - // Pre-load the diagonal element - diag = pL[2U * (i * n + i)]; + uint32_t ridx = transposed ? (n - i - 1) : i; + diag = pL[2U * (ridx * offset + ridx)]; // Initialize the sums as = 0; bs = 0; // Use the previously solved variables to compute the sum for (j = 0; j < i; j++) { - ab = *(v2s *)&pL[2U * (i * n + j)]; - cd = *(v2s *)&x[2U * j]; + uint32_t cidx = transposed ? (n - j - 1) : j; + if (!transposed) { + ab = *(v2s *)&pL[2U * (ridx * n + cidx)]; + } else { + ab = *(v2s *)&pL[2U * (cidx * n + ridx)]; + } + cd = *(v2s *)&x[2U * cidx]; const uint32_t shuffle_mask = 0x00020003; asm volatile( // s = s + (ac + bd) + j(bc - ad) @@ -53,76 +58,15 @@ void mempool_Ltrisol_q16vecs(int16_t *pL, int16_t *y, int16_t *x, :); } // Subtract the sum from y[i] and divide by the diagonal element L[i][i] - as = as - (int32_t)y[2U * i]; - bs = bs - (int32_t)y[2U * i + 1]; + as = as - (int32_t)y[2U * ridx]; + bs = bs - (int32_t)y[2U * ridx + 1]; asm volatile("div %[as], %[as], %[diag];" "div %[bs], %[bs], %[diag];" "pv.pack %[res], %[as], %[bs];" : [as] "+&r"(as), [bs] "+&r"(bs), [res] "+&r"(res) : [diag] "r"(diag) :); - (*(v2s *)&x[2U * i]) = res; - } - - return; -} - -/** - @brief Single-core solution of upper triangular system - (from transposed lower triangular system) - @param[in] pL input triangular matrix to be transposed - @param[in] y known variables vector - @param[in] x unknown solutions vector - @param[in] n dimension of the system - @return none -*/ - -void mempool_Lttrisol_q16vecs(int16_t *pL, int16_t *y, int16_t *x, - const uint32_t n) { - - uint32_t i, j; - int32_t as, bs, diag; - v2s ab, cd; - v2s res = (v2s){0, 0}; - v2s ndc = (v2s){0, 0}; - - // Solve for each variable x[i] in loop - for (i = 0; i < n; i++) { - // Pre-load the diagonal element - diag = pL[2 * ((n - 1 - i) * n + (n - 1 - i))]; - // Initialize the sums - as = 0; - bs = 0; - // Use the previously solved variables to compute the sum - for (j = 0; j < i; j++) { - ab = *(v2s *)&pL[2U * ((n - 1 - j) * n + (n - 1 - i))]; - cd = *(v2s *)&x[2U * (n - 1 - j)]; - const uint32_t shuffle_mask = 0x00020003; - asm volatile( - // s = s + (ac + bd) + j(bc - ad) - "pv.dotsp.h %[as], %[ab], %[cd];" - "pv.shuffle2.h %[ndc], %[cd], %[shuffle_mask];" - "pv.sub.h %[ndc], %[zero], %[ndc];" - "pv.dotsp.h %[bs], %[ab], %[ndc];" - "srai %[as], %[as], 0x8;" - "srai %[bs], %[bs], 0x8;" - "p.clip %[bs], %[bs], 0x16;" - "p.clip %[as], %[as], 0x16;" - : [as] "+&r"(as), [bs] "+&r"(bs), [ndc] "+r"(ndc) - : [ab] "r"(ab), [cd] "r"(cd), [shuffle_mask] "r"(shuffle_mask), - [zero] "r"((v2s){0, 0}) - :); - } - // Subtract the sum from y[i] and divide by the diagonal element L[i][i] - as = as - (int32_t)y[2 * (n - i - 1)]; - bs = bs - (int32_t)y[2 * (n - i - 1) + 1]; - asm volatile("div %[as], %[as], %[diag];" - "div %[bs], %[bs], %[diag];" - "pv.pack %[res], %[as], %[bs];" - : [as] "+&r"(as), [bs] "+&r"(bs), [res] "+&r"(res) - : [diag] "r"(diag) - :); - (*(v2s *)&x[2U * (n - i - 1)]) = res; + (*(v2s *)&x[2U * ridx]) = res; } return; diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h index 37834107d..45076f9fe 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f16s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f16s.h @@ -31,7 +31,7 @@ */ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded, const uint32_t zf) { + const uint32_t zf, const uint32_t folded) { uint32_t i, j, k; __fp16 a; @@ -112,29 +112,16 @@ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *pS, bs3 = (__fp16)0.0f; } } - if (!folded) { - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - } else { - // uint32_t addr = i * (n_tx / 4) * N_BANKS + (j / 4) * N_BANKS; - uint32_t addr = i * N_BANKS; - // Store - pG[addr] = as0; - pG[addr + 1U] = bs0; - pG[addr + 2U] = as1; - pG[addr + 3U] = bs1; - pG[addr + 4U] = as2; - pG[addr + 5U] = bs2; - pG[addr + 6U] = as3; - pG[addr + 7U] = bs3; - } + uint32_t const offset = folded ? N_BANKS : n_tx; + // Store + pG[2 * (i * offset + j)] = as0; + pG[2 * (i * offset + j + 1U)] = as1; + pG[2 * (i * offset + j + 2U)] = as2; + pG[2 * (i * offset + j + 3U)] = as3; + pG[2 * (i * offset + j) + 1U] = bs0; + pG[2 * (i * offset + j + 1U) + 1U] = bs1; + pG[2 * (i * offset + j + 2U) + 1U] = bs2; + pG[2 * (i * offset + j + 3U) + 1U] = bs3; } } return; @@ -151,8 +138,7 @@ void mempool_hermitian_f16s(__fp16 *pH, __fp16 *pG, __fp16 *pS, @return none */ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, - const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded) { + const uint32_t n_rx, const uint32_t n_tx) { uint32_t i, j; __fp16 a0, a1, a2, a3; @@ -215,31 +201,16 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, [a3] "r"(a3), [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3) :); } - if (!folded) { - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } else { - // Store - uint32_t addr = (i / 4) * N_BANKS; - py[addr] = as0; - py[addr + 1U] = bs0; - py[addr + 2U] = as1; - py[addr + 3U] = bs1; - py[addr + 4U] = as2; - py[addr + 5U] = bs2; - py[addr + 6U] = as3; - py[addr + 7U] = bs3; - i += 4; - } - + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; } while (i < n_tx); return; } @@ -267,7 +238,7 @@ void mempool_MVP_conjtransp_f16s(__fp16 *pH, __fp16 *px, __fp16 *py, */ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, const uint32_t n_rx, const uint32_t n_tx, - const uint32_t zf) { + const uint32_t zf, const uint32_t folded) { uint32_t i, j, k; v2h ab; v2h cd0, cd1, cd2, cd3; @@ -282,7 +253,7 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, for (i = 0; i < n_tx; i++) { - if (n_tx == 1) { + if (n_tx % 4 != 0) { as0 = 0.0f; // Initialize the real part of sums bs0 = 0.0f; // Initialize the imag part of sums // Inner Loop @@ -312,9 +283,11 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, asm volatile("and %0, %0, %1;" : "+&r"(res0) : "r"(0x0000FFFF)); asm volatile("fadd.h %0, %0, %1;" : "+&r"(res0) : "r"(pS[2 * i])); } - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; + // Store + uint32_t addr = folded ? 2 * (i * N_BANKS + j) : 2 * (i * n_tx + j); + (*(v2h *)&pG[addr]) = res0; - } else if (n_tx >= 4) { + } else { // UNROLL_4 for (j = 0; j < n_tx; j += 4) { as0 = 0.0f; @@ -381,11 +354,12 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, asm volatile("fadd.h %0, %0, %1;" : "+&r"(res3) : "r"(pS[2 * i])); } } + uint32_t const offset = folded ? N_BANKS : n_tx; // Store - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; - (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; - (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; - (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; + (*(v2h *)&pG[2 * (i * offset + j)]) = res0; + (*(v2h *)&pG[2 * (i * offset + j + 1U)]) = res1; + (*(v2h *)&pG[2 * (i * offset + j + 2U)]) = res2; + (*(v2h *)&pG[2 * (i * offset + j + 3U)]) = res3; } } } @@ -393,7 +367,7 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, #else for (i = 0; i < n_tx; i++) { - if (n_tx >= 4) { + if (n_tx % 4 == 0) { // UNROLL_4 for (j = 0; j < n_tx; j += 4) { v2h res0 = (v2h)0.0f; @@ -439,10 +413,12 @@ void mempool_hermitian_f16vecs(__fp16 *pH, __fp16 *pG, __fp16 *pS, asm volatile("fadd.h %0, %0, %1;" : "+&r"(res3) : "r"(pS[2 * i])); } } - (*(v2h *)&pG[2 * (i * n_tx + j)]) = res0; - (*(v2h *)&pG[2 * (i * n_tx + j + 1U)]) = res1; - (*(v2h *)&pG[2 * (i * n_tx + j + 2U)]) = res2; - (*(v2h *)&pG[2 * (i * n_tx + j + 3U)]) = res3; + uint32_t const offset = folded ? N_BANKS : n_tx; + // Store + (*(v2h *)&pG[2 * (i * offset + j)]) = res0; + (*(v2h *)&pG[2 * (i * offset + j + 1U)]) = res1; + (*(v2h *)&pG[2 * (i * offset + j + 2U)]) = res2; + (*(v2h *)&pG[2 * (i * offset + j + 3U)]) = res3; } } } @@ -478,7 +454,7 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, #endif #ifndef __CDOTP - if (n_tx < 4) { + if (n_tx % 4 != 0) { for (i = 0; i < n_tx; i++) { as0 = 0.0f; // Initialize the real part of sums bs0 = 0.0f; // Initialize the imag part of sums @@ -505,7 +481,7 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, *(v2h *)&py[2U * i] = res0; } - } else if (n_tx >= 4) { + } else { // UNROLL_4 for (i = 0; i < n_tx; i += 4) { as0 = 0.0f; @@ -557,7 +533,7 @@ void mempool_MVP_conjtransp_f16vecs(__fp16 *pH, __fp16 *px, __fp16 *py, } } #else - if (n_tx >= 4) { + if (n_tx % 4 == 0) { // UNROLL_4 for (i = 0; i < n_tx; i += 4) { res0 = (v2h)0.0f; diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32p.h b/software/kernels/baremetal/mempool_mimo_mmse_f32p.h index 0dd492d33..7e3e6fe1a 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f32p.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32p.h @@ -18,7 +18,7 @@ @param[in] zf controls if the zero forcing is used @return none */ -void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, +void mempool_hermitian_f32p(float *pH, float *pG, float *pS, const uint32_t n_rx, const uint32_t n_tx, const uint32_t folded, const uint32_t zf, const uint32_t core_id, const uint32_t nPE) { @@ -88,55 +88,30 @@ void mempool_hermitian_f32p(float *pH, float *pG, float *sigma, } if (zf == 0) { // Compute diagonal element - float s = sigma[i]; if (i == j) { - asm volatile("fadd.s %[as0], %[as0], %[sigma];" - : [as0] "+&r"(as0) - : [sigma] "r"(s) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2U * i])); bs0 = 0.0f; } else if (i == (j + 1U)) { - asm volatile("fadd.s %[as1], %[as1], %[sigma];" - : [as1] "+&r"(as1) - : [sigma] "r"(s) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as1) : "r"(pS[2U * i])); bs1 = 0.0f; } else if (i == (j + 2U)) { - asm volatile("fadd.s %[as2], %[as2], %[sigma];" - : [as2] "+&r"(as2) - : [sigma] "r"(s) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as2) : "r"(pS[2U * i])); bs2 = 0.0f; } else if (i == (j + 3U)) { - asm volatile("fadd.s %[as3], %[as3], %[sigma];" - : [as3] "+&r"(as3) - : [sigma] "r"(s) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as3) : "r"(pS[2U * i])); bs3 = 0.0f; } } - if (!folded) { - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - } else { - // Store - uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); - pG[addr] = as0; - pG[addr + 1U] = bs0; - pG[addr + 2U] = as1; - pG[addr + 3U] = bs1; - pG[addr + N_BANKS] = as2; - pG[addr + N_BANKS + 1U] = bs2; - pG[addr + N_BANKS + 2U] = as3; - pG[addr + N_BANKS + 3U] = bs3; - } + uint32_t const offset = folded ? N_BANKS : n_tx; + // Store + pG[2 * (i * offset + j)] = as0; + pG[2 * (i * offset + j + 1U)] = as1; + pG[2 * (i * offset + j + 2U)] = as2; + pG[2 * (i * offset + j + 3U)] = as3; + pG[2 * (i * offset + j) + 1U] = bs0; + pG[2 * (i * offset + j + 1U) + 1U] = bs1; + pG[2 * (i * offset + j + 2U) + 1U] = bs2; + pG[2 * (i * offset + j + 3U) + 1U] = bs3; } } mempool_log_partial_barrier(2, mempool_get_core_id(), nPE); diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h index 311052b10..baad28e0d 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f32s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f32s.h @@ -14,13 +14,13 @@ @param[in] pS points to the noise vector @param[in] nrx number of received samples @param[in] ntx number of transmitted samples - @param[in] folded controls if output is folded @param[in] zf controls if the zero forcing is used + @param[in] folded controls if output is folded @return none */ void mempool_hermitian_f32s(float *pH, float *pG, float *pS, const uint32_t n_rx, const uint32_t n_tx, - const uint32_t folded, const uint32_t zf) { + const uint32_t zf, const uint32_t folded) { uint32_t i, j, k; float a; @@ -86,55 +86,31 @@ void mempool_hermitian_f32s(float *pH, float *pG, float *pS, :); } if (zf == 0) { - // Compute diagonal elements + // Compute diagonal element if (i == j) { - asm volatile("fadd.s %[as0], %[as0], %[pS];" - : [as0] "+&r"(as0) - : [pS] "r"(pS[i]) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as0) : "r"(pS[2U * i])); bs0 = 0.0f; } else if (i == (j + 1U)) { - asm volatile("fadd.s %[as1], %[as1], %[pS];" - : [as1] "+&r"(as1) - : [pS] "r"(pS[i]) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as1) : "r"(pS[2U * i])); bs1 = 0.0f; } else if (i == (j + 2U)) { - asm volatile("fadd.s %[as2], %[as2], %[pS];" - : [as2] "+&r"(as2) - : [pS] "r"(pS[i]) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as2) : "r"(pS[2U * i])); bs2 = 0.0f; } else if (i == (j + 3U)) { - asm volatile("fadd.s %[as3], %[as3], %[pS];" - : [as3] "+&r"(as3) - : [pS] "r"(pS[i]) - :); + asm volatile("fadd.s %0, %0, %1;" : "+&r"(as3) : "r"(pS[2U * i])); bs3 = 0.0f; } } - if (!folded) { - // Store - pG[2 * (i * n_tx + j)] = as0; - pG[2 * (i * n_tx + j + 1U)] = as1; - pG[2 * (i * n_tx + j + 2U)] = as2; - pG[2 * (i * n_tx + j + 3U)] = as3; - pG[2 * (i * n_tx + j) + 1U] = bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = bs3; - } else { - // Store - uint32_t addr = i * ((n_tx / 2) * N_BANKS) + (j / 4) * (2 * N_BANKS); - pG[addr] = as0; - pG[addr + 1U] = bs0; - pG[addr + 2U] = as1; - pG[addr + 3U] = bs1; - pG[addr + N_BANKS] = as2; - pG[addr + N_BANKS + 1U] = bs2; - pG[addr + N_BANKS + 2U] = as3; - pG[addr + N_BANKS + 3U] = bs3; - } + uint32_t const offset = folded ? N_BANKS : n_tx; + // Store + pG[2U * (i * offset + j)] = as0; + pG[2U * (i * offset + j + 1U)] = as1; + pG[2U * (i * offset + j + 2U)] = as2; + pG[2U * (i * offset + j + 3U)] = as3; + pG[2U * (i * offset + j) + 1U] = bs0; + pG[2U * (i * offset + j + 1U) + 1U] = bs1; + pG[2U * (i * offset + j + 2U) + 1U] = bs2; + pG[2U * (i * offset + j + 3U) + 1U] = bs3; } } return; @@ -215,30 +191,16 @@ void mempool_MVP_conjtransp_f32s(float *pH, float *px, float *py, [a3] "r"(a3), [b0] "r"(b0), [b1] "r"(b1), [b2] "r"(b2), [b3] "r"(b3) :); } - if (!folded) { - // Store - py[2U * i] = as0; - py[2U * (i + 1U)] = as1; - py[2U * (i + 2U)] = as2; - py[2U * (i + 3U)] = as3; - py[2U * i + 1U] = bs0; - py[2U * (i + 1U) + 1U] = bs1; - py[2U * (i + 2U) + 1U] = bs2; - py[2U * (i + 3U) + 1U] = bs3; - i += 4; - } else { - // Store - uint32_t addr = (i / 4) * 2 * N_BANKS; - py[addr] = as0; - py[addr + 1U] = bs0; - py[addr + 2U] = as1; - py[addr + 3U] = bs1; - py[addr + N_BANKS] = as2; - py[addr + N_BANKS + 1U] = bs2; - py[addr + N_BANKS + 2U] = as3; - py[addr + N_BANKS + 3U] = bs3; - i += 4; - } + // Store + py[2U * i] = as0; + py[2U * (i + 1U)] = as1; + py[2U * (i + 2U)] = as2; + py[2U * (i + 3U)] = as3; + py[2U * i + 1U] = bs0; + py[2U * (i + 1U) + 1U] = bs1; + py[2U * (i + 2U) + 1U] = bs2; + py[2U * (i + 3U) + 1U] = bs3; + i += 4; } while (i < n_tx); return; } diff --git a/software/kernels/baremetal/mempool_mimo_mmse_f8s.h b/software/kernels/baremetal/mempool_mimo_mmse_f8s.h index 74d772c64..476d5f3bb 100644 --- a/software/kernels/baremetal/mempool_mimo_mmse_f8s.h +++ b/software/kernels/baremetal/mempool_mimo_mmse_f8s.h @@ -20,7 +20,7 @@ */ void mempool_hermitian_f8s(__fp8 *pH, __fp8 *pS, __fp16 *pG, const uint32_t n_rx, const uint32_t n_tx, - const uint32_t zf) { + const uint32_t zf, const uint32_t folded) { uint32_t i, j, k; __fp8 a; @@ -116,16 +116,16 @@ void mempool_hermitian_f8s(__fp8 *pH, __fp8 *pS, __fp16 *pG, FP16_bs3 = (__fp16)0U; } } - + uint32_t const offset = folded ? N_BANKS : n_tx; // Store - pG[2 * (i * n_tx + j)] = FP16_as0; - pG[2 * (i * n_tx + j + 1U)] = FP16_as1; - pG[2 * (i * n_tx + j + 2U)] = FP16_as2; - pG[2 * (i * n_tx + j + 3U)] = FP16_as3; - pG[2 * (i * n_tx + j) + 1U] = FP16_bs0; - pG[2 * (i * n_tx + j + 1U) + 1U] = FP16_bs1; - pG[2 * (i * n_tx + j + 2U) + 1U] = FP16_bs2; - pG[2 * (i * n_tx + j + 3U) + 1U] = FP16_bs3; + pG[2 * (i * offset + j)] = FP16_as0; + pG[2 * (i * offset + j + 1U)] = FP16_as1; + pG[2 * (i * offset + j + 2U)] = FP16_as2; + pG[2 * (i * offset + j + 3U)] = FP16_as3; + pG[2 * (i * offset + j) + 1U] = FP16_bs0; + pG[2 * (i * offset + j + 1U) + 1U] = FP16_bs1; + pG[2 * (i * offset + j + 2U) + 1U] = FP16_bs2; + pG[2 * (i * offset + j + 3U) + 1U] = FP16_bs3; } } return; @@ -229,7 +229,7 @@ void mempool_MVP_conjtransp_f8s(__fp8 *pH, __fp8 *px, __fp16 *py, void mempool_hermitian_f8vecs(__fp8 *pH, __fp8 *pS, __fp16 *pG, const uint32_t n_rx, const uint32_t n_tx, - const uint32_t zf) { + const uint32_t zf, const uint32_t folded) { uint32_t i, j, k; uint32_t fe0, fe1, fe2, fe3; @@ -303,11 +303,12 @@ void mempool_hermitian_f8vecs(__fp8 *pH, __fp8 *pS, __fp16 *pG, asm volatile("and %0, %0, %1;" : "+&r"(fe3) : "r"(0x0000FFFF)); } } + uint32_t const offset = folded ? N_BANKS : n_tx; // Store - (*(uint32_t *)&pG[2 * (i * n_tx + j)]) = fe0; - (*(uint32_t *)&pG[2 * (i * n_tx + j + 1U)]) = fe1; - (*(uint32_t *)&pG[2 * (i * n_tx + j + 2U)]) = fe2; - (*(uint32_t *)&pG[2 * (i * n_tx + j + 3U)]) = fe3; + (*(uint32_t *)&pG[2 * (i * offset + j)]) = fe0; + (*(uint32_t *)&pG[2 * (i * offset + j + 1U)]) = fe1; + (*(uint32_t *)&pG[2 * (i * offset + j + 2U)]) = fe2; + (*(uint32_t *)&pG[2 * (i * offset + j + 3U)]) = fe3; } } return;