diff --git a/cmake/onnxruntime_rocm_hipify.cmake b/cmake/onnxruntime_rocm_hipify.cmake
index 23ea67951961b..238f09f0ae297 100644
--- a/cmake/onnxruntime_rocm_hipify.cmake
+++ b/cmake/onnxruntime_rocm_hipify.cmake
@@ -9,6 +9,8 @@ set(contrib_ops_excluded_files
"bert/attention.h"
"bert/attention_impl.cu"
"bert/attention_softmax.h"
+ "bert/cross_attention.cc"
+ "bert/cross_attention.h"
"bert/embed_layer_norm.cc"
"bert/embed_layer_norm.h"
"bert/embed_layer_norm_impl.cu"
diff --git a/docs/ContribOperators.md b/docs/ContribOperators.md
index e44cf96021155..507b1b259d388 100644
--- a/docs/ContribOperators.md
+++ b/docs/ContribOperators.md
@@ -17,6 +17,7 @@ Do not modify directly.*
* com.microsoft.ComplexMulConj
* com.microsoft.ConvTransposeWithDynamicPads
* com.microsoft.CropAndResize
+ * com.microsoft.CrossAttention
* com.microsoft.DecoderAttention
* com.microsoft.DequantizeBFP
* com.microsoft.DequantizeLinear
@@ -106,10 +107,6 @@ Do not modify directly.*
When unidirectional is 1, each token only attends to previous tokens.
Both past and present state are optional. They shall be used together, and not allowed to use only one of them.
-
- When weights is not provided, key and value are required. In this situation, MatMul for input projection is excluded,
- and input is the query after projection. The bias is included for performance consideration.
-
The qkv_hidden_sizes is required only when K and V have different hidden sizes.
When there is past state, hidden dimension for Q, K and V shall be the same.
@@ -135,27 +132,23 @@ This version of the operator has been available since version 1 of the 'com.micr
Whether every token can only attend to previous tokens. Default value is 0.
-#### Inputs (3 - 9)
+#### Inputs (3 - 7)
-- input (optional) : T
-- Input tensor with shape (batch_size, sequence_length, input_hidden_size) when weights is available, or query tensor with shape (batch_size, sequence_length, hidden_size) when weights is not available.
-- weights (optional) : T
+- input : T
+- Input tensor with shape (batch_size, sequence_length, input_hidden_size)
+- weights : T
- Merged Q/K/V weights with shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size)
- bias : T
- Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) for input projection
- mask_index (optional) : M
-- Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), (batch_size, total_sequence_length) or (batch_size, sequence_length, total_sequence_length), or index with shape (batch_size) or (2 * batch_size).
+- Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), (batch_size, total_sequence_length) or (batch_size, sequence_length, total_sequence_length), or index with shape (batch_size) or (2 * batch_size)
- past (optional) : T
- past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size)When past_present_share_buffer is set, its shape is (2, batch_size, num_heads, max_sequence_length, head_size)
- extra_add (optional) : T
- additional add to QxK' with shape (batch_size, num_heads, sequence_length, total_sequence_length)
-- key (optional) : T
-- Input for key with shape (batch_size, kv_sequence_length, hidden_size). Required when weights is not available.
-- value (optional) : T
-- Input for key with shape (batch_size, kv_sequence_length, v_hidden_size). Required when weights is not available.
- past_sequence_length (optional) : M
-- When past_present_share_buffer, specify past_sequence_length for effective past sequence lenght (could be 0).Needed when past_present_share_buffer is not zero.
+- When past_present_share_buffer is used, it is required to specify past_sequence_length (could be 0).
#### Outputs (1 - 2)
@@ -164,7 +157,7 @@ This version of the operator has been available since version 1 of the 'com.micr
output : T
3D output tensor with shape (batch_size, sequence_length, v_hidden_size)
present (optional) : T
-past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size)If past_present_share_buffer, it should be exactly same as past tensor, of shape (2, batch_size, num_heads, max_sequence_length, head_size),while effective_seq_length = (past_sequence_length + kv_sequence_length)
+past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size). If past_present_share_buffer is set, its shape is (2, batch_size, num_heads, max_sequence_length, head_size), while effective_seq_length = (past_sequence_length + kv_sequence_length).
#### Type Constraints
@@ -961,6 +954,57 @@ This version of the operator has been available since version 1 of the 'com.micr
+### **com.microsoft.CrossAttention**
+
+ Multi-Head Cross Attention. Bias from input projection is included.
+
+ The key padding mask is optional. When its shape is (batch_size, kv_sequence_length), value 0
+ means padding or 1 otherwise. When key has right-side padding, its shape could be (batch_size): it is actual length of
+ each key sequence excluding paddings.
+
+#### Version
+
+This version of the operator has been available since version 1 of the 'com.microsoft' operator set.
+
+#### Attributes
+
+
+- num_heads : int (required)
+- Number of attention heads
+
+
+#### Inputs (4 - 5)
+
+
+- query : T
+- Query with shape (batch_size, sequence_length, hidden_size) when weights is not available.
+- key : T
+- Key with shape (batch_size, kv_sequence_length, hidden_size)
+- value : T
+- Value with shape (batch_size, kv_sequence_length, v_hidden_size)
+- bias : T
+- Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) from input projection
+- key_padding_mask (optional) : M
+- Key padding mask with shape (batch_size) or (batch_size, kv_sequence_length)
+
+
+#### Outputs
+
+
+- output : T
+- 3D output tensor with shape (batch_size, sequence_length, v_hidden_size)
+
+
+#### Type Constraints
+
+
+- T : tensor(float), tensor(float16)
+- Constrain input and output to float tensors.
+- M : tensor(int32)
+- Constrain mask to integer types
+
+
+
### **com.microsoft.DecoderAttention**
This DecoderAttention supports self attention and cross attention, key and value cache, and key_padding_mask. The attention mask is not support at the moment.
diff --git a/docs/OperatorKernels.md b/docs/OperatorKernels.md
index 93b8d8fc53a2e..d343d132aab79 100644
--- a/docs/OperatorKernels.md
+++ b/docs/OperatorKernels.md
@@ -395,7 +395,7 @@ Do not modify directly.*
| |
| |
|**Operator Domain:** *com.microsoft*||||
-|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* key:**T**
*in* value:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float)|
+|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float)|
|AttnLSTM|*in* X:**T**
*in* W:**T**
*in* R:**T**
*in* B:**T**
*in* sequence_lens:**T1**
*in* initial_h:**T**
*in* initial_c:**T**
*in* P:**T**
*in* QW:**T**
*in* MW:**T**
*in* V:**T**
*in* M:**T**
*in* memory_seq_lens:**T1**
*in* AW:**T**
*out* Y:**T**
*out* Y_h:**T**
*out* Y_c:**T**|1+|**T** = tensor(double), tensor(float)
**T1** = tensor(int32)|
|BeamSearch|*in* input_ids:**I**
*in* max_length:**I**
*in* min_length:**I**
*in* num_beams:**I**
*in* num_return_sequences:**I**
*in* length_penalty:**T**
*in* repetition_penalty:**T**
*in* vocab_mask:**M**
*in* prefix_vocab_mask:**M**
*in* attention_mask:**I**
*out* sequences:**I**
*out* sequences_scores:**T**
*out* scores:**T**|1+|**T** = tensor(float)|
|BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float)|
@@ -762,7 +762,7 @@ Do not modify directly.*
| |
| |
|**Operator Domain:** *com.microsoft*||||
-|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* key:**T**
*in* value:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float), tensor(float16)|
+|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float), tensor(float16)|
|BeamSearch|*in* input_ids:**I**
*in* max_length:**I**
*in* min_length:**I**
*in* num_beams:**I**
*in* num_return_sequences:**I**
*in* length_penalty:**T**
*in* repetition_penalty:**T**
*in* vocab_mask:**M**
*in* prefix_vocab_mask:**M**
*in* attention_mask:**I**
*out* sequences:**I**
*out* sequences_scores:**T**
*out* scores:**T**|1+|**T** = tensor(float), tensor(float16)|
|BiasDropout|*in* data:**T**
*in* bias:**T**
*in* residual:**T**
*in* ratio:**T1**
*in* training_mode:**T2**
*out* output:**T**
*out* mask:**T2**|1+|**T** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)
**T1** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)
**T2** = tensor(bool)|
|BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(bfloat16), tensor(double), tensor(float), tensor(float16)|
@@ -772,6 +772,7 @@ Do not modify directly.*
|ComplexMul|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float), tensor(float16)|
|ComplexMulConj|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float), tensor(float16)|
|ConvTransposeWithDynamicPads|*in* X:**T**
*in* W:**T**
*in* Pads:**tensor(int64)**
*in* B:**T**
*out* Y:**T**|1+|**T** = tensor(float)|
+|CrossAttention|*in* query:**T**
*in* key:**T**
*in* value:**T**
*in* bias:**T**
*in* key_padding_mask:**M**
*out* output:**T**|1+|**T** = tensor(float), tensor(float16)|
|DecoderAttention|*in* query:**T**
*in* key:**T**
*in* q_weight:**T**
*in* kv_weight:**T**
*in* bias:**T**
*in* key_padding_mask:**B**
*in* key_cache:**T**
*in* value_cache:**T**
*in* static_kv:**B**
*in* use_past:**B**
*in* has_layer_state:**B**
*in* has_key_padding_mask:**B**
*out* output:**T**
*out* new_key_cache:**T**
*out* new_value_cache:**T**|1+|**T** = tensor(float), tensor(float16)|
|DequantizeLinear|*in* x:**T1**
*in* x_scale:**T2**
*in* x_zero_point:**T1**
*out* y:**T2**|1+|**T1** = tensor(int8), tensor(uint8)
**T2** = tensor(float16)|
|DequantizeWithOrder|*in* input:**Q**
*in* scale_input:**S**
*out* output:**F**|1+|**F** = tensor(float), tensor(float16)
**Q** = tensor(int8)
**S** = tensor(float)|
@@ -1128,7 +1129,7 @@ Do not modify directly.*
| |
| |
|**Operator Domain:** *com.microsoft*||||
-|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* key:**T**
*in* value:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**M** = tensor(int32)
**T** = tensor(float), tensor(float16)|
+|Attention|*in* input:**T**
*in* weights:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*in* past_sequence_length:**M**
*out* output:**T**
*out* present:**T**|1+|**M** = tensor(int32)
**T** = tensor(float), tensor(float16)|
|BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float), tensor(float16)|
|ConvTransposeWithDynamicPads|*in* X:**T**
*in* W:**T**
*in* Pads:**tensor(int64)**
*in* B:**T**
*out* Y:**T**|1+|**T** = tensor(float), tensor(float16)|
|DequantizeLinear|*in* x:**T1**
*in* x_scale:**T2**
*in* x_zero_point:**T1**
*out* y:**T2**|1+|**T1** = tensor(float)
**T2** = tensor(uint8)|
diff --git a/onnxruntime/contrib_ops/cpu/bert/attention.cc b/onnxruntime/contrib_ops/cpu/bert/attention.cc
index d60d7f64eef54..47db3fe558ce8 100644
--- a/onnxruntime/contrib_ops/cpu/bert/attention.cc
+++ b/onnxruntime/contrib_ops/cpu/bert/attention.cc
@@ -10,8 +10,8 @@
#include "core/common/safeint.h"
#include "core/platform/threadpool.h"
-using onnxruntime::concurrency::ThreadPool;
using onnxruntime::narrow;
+using onnxruntime::concurrency::ThreadPool;
namespace onnxruntime {
namespace contrib {
@@ -59,7 +59,7 @@ ONNX_OPERATOR_TYPED_KERNEL_EX(
Attention);
template
-Attention::Attention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, false, true) {
+Attention::Attention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, false) {
}
template
@@ -200,20 +200,15 @@ Status Attention::Compute(OpKernelContext* context) const {
const Tensor* past = context->Input(4);
const Tensor* extra_add_qk = context->Input(5);
- const Tensor* key = context->Input(6);
- const Tensor* value = context->Input(7);
-
const TensorShape& weights_shape = (weights ? weights->Shape() : weight_shape_);
AttentionParameters parameters;
ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(),
- (nullptr != weights || is_prepack_) ? &weights_shape : nullptr,
+ weights_shape,
bias->Shape(),
mask_index,
past,
extra_add_qk,
- key,
- value,
¶meters));
const int batch_size = parameters.batch_size;
diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_base.cc b/onnxruntime/contrib_ops/cpu/bert/attention_base.cc
index 1a129b04c9182..2558c52df3e19 100644
--- a/onnxruntime/contrib_ops/cpu/bert/attention_base.cc
+++ b/onnxruntime/contrib_ops/cpu/bert/attention_base.cc
@@ -8,13 +8,11 @@ namespace onnxruntime {
namespace contrib {
Status AttentionBase::CheckInputs(const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index,
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
const Tensor* past_seq_len) const {
// Abbreviation and Meanings:
@@ -33,25 +31,13 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape,
// When past state is used, Q, K and V should have same hidden size (unless we split it into past_key and past_value).
- // Input shapes with weights:
+ // Input shapes:
// input (Q/K/V) : (B, S, D_i)
// weights (Q/K/V) : (D_i, D + D + D_v)
// bias (Q/K/V) : (D + D + D_v)
// mask_index : see below
// past (K/V) : (2, B, N, P, H) or NULL
// extra_add_qk : (B, N, S, T) or NULL
- // key : NULL
- // value : NULL
-
- // Input shapes without weights (only bias is provided):
- // input (Q) : (B, S, D)
- // weights : NULL
- // bias (Q/K/V) : (D + D + D_v)
- // mask_index : see below
- // past (K/V) : (2, B, N, P, H) or NULL
- // extra_add_qk : (B, N, S, T) or NULL
- // key (K) : (B, L, D)
- // value (V) : (B, L, D_v)
// For mask_index, the following shapes are supported:
// NULL, (B, 1), (1, 1)
@@ -84,21 +70,19 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape,
bias_dims.size());
}
- if (weights_shape != nullptr) {
- const auto& weights_dims = weights_shape->GetDims();
- if (weights_dims.size() != 2) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'weights' is expected to have 2 dimensions, got ",
- weights_dims.size());
- }
- if (weights_dims[0] != input_hidden_size) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "Input 1 dimension 0 should have same length as dimension 2 of input 0");
- }
+ const auto& weights_dims = weights_shape.GetDims();
+ if (weights_dims.size() != 2) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'weights' is expected to have 2 dimensions, got ",
+ weights_dims.size());
+ }
+ if (weights_dims[0] != input_hidden_size) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
+ "Input 1 dimension 0 should have same length as dimension 2 of input 0");
+ }
- if (bias_dims[0] != weights_dims[1]) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "Input 'bias' dimension 0 should have same length as dimension 1 of input 'weights'");
- }
+ if (bias_dims[0] != weights_dims[1]) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
+ "Input 'bias' dimension 0 should have same length as dimension 1 of input 'weights'");
}
int64_t q_hidden_size = bias_dims[0] / static_cast(3);
@@ -123,60 +107,6 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape,
}
int64_t kv_sequence_length = sequence_length;
- if (weights_shape == nullptr) { // no weights
- if (this->require_weights_) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "This operator requires weights");
- }
-
- if (key == nullptr || value == nullptr) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "When weights is not provided, key and value are required");
- }
-
- const auto& key_dims = key->Shape().GetDims();
- if (key_dims.size() != 3) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'key' is expected to have 3 dimensions, got ",
- key_dims.size());
- }
- if (key_dims[0] != batch_size) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "Input 'key' dimension 0 should have same length as dimension 0 of input 0");
- }
-
- const auto& value_dims = value->Shape().GetDims();
- if (value_dims.size() != 3) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'value' is expected to have 3 dimensions, got ",
- value_dims.size());
- }
- if (value_dims[0] != batch_size) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "Input 'value' dimension 0 should have same length as dimension 0 of input 0");
- }
-
- if (value_dims[1] != key_dims[1]) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "Input 'key' and 'value' dimension 1 should have same length");
- }
-
- q_hidden_size = dims[2];
- k_hidden_size = key_dims[2];
- v_hidden_size = value_dims[2];
- kv_sequence_length = key_dims[1];
-
- if (qkv_hidden_sizes_.size() != 0 &&
- (q_hidden_size != qkv_hidden_sizes_[0] ||
- k_hidden_size != qkv_hidden_sizes_[1] ||
- v_hidden_size != qkv_hidden_sizes_[2])) {
- return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "qkv_hidden_sizes does not match with query, key and value input shape",
- " q_hidden_size=", q_hidden_size,
- " k_hidden_size=", k_hidden_size,
- " v_hidden_size=", v_hidden_size,
- "qkv_hidden_sizes[0]=", qkv_hidden_sizes_[0],
- "qkv_hidden_sizes[1]=", qkv_hidden_sizes_[1],
- "qkv_hidden_sizes[2]=", qkv_hidden_sizes_[2]);
- }
- }
if (q_hidden_size != k_hidden_size) {
return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
@@ -246,15 +176,18 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape,
}
int64_t max_sequence_length = -1;
+ AttentionMaskType mask_type = AttentionMaskType::MASK_NONE;
if (mask_index != nullptr) { // mask_index is optional
- bool is_dummy = false;
- auto status = this->CheckMask(mask_index, is_dummy,
+ mask_type = AttentionMaskType::MASK_UNKNOWN;
+ auto status = this->CheckMask(mask_index, mask_type,
max_sequence_length, batch_size, sequence_length, total_sequence_length);
if (status != Status::OK()) {
return status;
}
- if (is_dummy) {
+
+ if (mask_type == AttentionMaskType::MASK_2D_DUMMY) {
mask_index = nullptr;
+ mask_type = AttentionMaskType::MASK_NONE;
}
}
@@ -315,30 +248,33 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape,
output_parameters->num_heads = num_heads_;
output_parameters->is_unidirectional = is_unidirectional_;
output_parameters->past_present_share_buffer = (past_present_share_buffer_ != 0);
+ output_parameters->mask_type = mask_type;
}
return Status::OK();
}
Status AttentionBase::CheckMask(const Tensor* mask_index,
- bool& is_dummy,
+ AttentionMaskType& mask_type,
int64_t& max_sequence_length,
int64_t batch_size,
int64_t sequence_length,
int64_t total_sequence_length) const {
- is_dummy = false;
const auto& mask_dims = mask_index->Shape().GetDims();
if (mask_dims.size() == 1) {
if (mask_dims[0] != batch_size && mask_dims[0] != 2 * batch_size) {
return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
"Inputs 'mask_index' with 1D data shall have length of batch_size or 2 * batch_size");
}
+ mask_type = (mask_dims[0] == batch_size ? AttentionMaskType::MASK_1D_KEY_SEQ_LEN : AttentionMaskType::MASK_1D_END_START);
} else if (mask_dims.size() == 2) {
- if (mask_dims[0] != batch_size || mask_dims[1] != total_sequence_length) {
+ if (mask_dims[0] == batch_size && mask_dims[1] == total_sequence_length) {
+ mask_type = AttentionMaskType::MASK_2D_KEY_PADDING;
+ } else {
// Add operator supports broadcasting. Here we handle a case with only one element in the 2nd dimension.
if ((mask_dims[0] == batch_size || mask_dims[0] == 1) && mask_dims[1] == 1) {
// Mask will have same value after propagation, which has same effect as no mask.
- is_dummy = true;
+ mask_type = AttentionMaskType::MASK_2D_DUMMY;
} else {
return ORT_MAKE_STATUS(
ONNXRUNTIME, INVALID_ARGUMENT,
@@ -353,6 +289,7 @@ Status AttentionBase::CheckMask(const Tensor* mask_index,
"Inputs 'mask_index' with 3D data shall have shape "
"batch_size x sequence_length x total_sequence_length");
}
+ mask_type = AttentionMaskType::MASK_3D_ATTENTION;
} else if (mask_dims.size() == 4) {
if (mask_dims[0] != batch_size || mask_dims[1] != 1 || mask_dims[2] != mask_dims[3] ||
mask_dims[2] < total_sequence_length) {
@@ -362,10 +299,10 @@ Status AttentionBase::CheckMask(const Tensor* mask_index,
"batch_size x 1 x max_sequence_length x max_sequence_length)");
}
max_sequence_length = mask_dims[3];
-
- if (is_unidirectional_ == true) {
+ mask_type = AttentionMaskType::MASK_4D_MEGATRON;
+ if (this->is_unidirectional_) {
return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
- "Inputs 'mask_index' with 4D data shall have is_unidirectional_ set to false");
+ "Inputs 'mask_index' with 4D data shall have is_unidirectional set to false");
}
} else {
return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
@@ -377,13 +314,11 @@ Status AttentionBase::CheckMask(const Tensor* mask_index,
}
Status AttentionBase::CheckInputs(const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index,
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
const int max_threads_per_block,
const Tensor* past_seq_len) const {
@@ -391,7 +326,7 @@ Status AttentionBase::CheckInputs(const TensorShape& input_shape,
return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "num_heads should be no larger than ", max_threads_per_block);
}
- return CheckInputs(input_shape, weights_shape, bias_shape, mask_index, past, extra_add_qk, key, value, parameters, past_seq_len);
+ return CheckInputs(input_shape, weights_shape, bias_shape, mask_index, past, extra_add_qk, parameters, past_seq_len);
}
Tensor* AttentionBase::GetPresent(OpKernelContext* context,
diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_base.h b/onnxruntime/contrib_ops/cpu/bert/attention_base.h
index 9eb93daa12e8a..71a4ed8c6dda1 100644
--- a/onnxruntime/contrib_ops/cpu/bert/attention_base.h
+++ b/onnxruntime/contrib_ops/cpu/bert/attention_base.h
@@ -13,17 +13,14 @@ namespace contrib {
class AttentionBase {
public:
- // This check function is specifically used in cuda
Status CheckInputs(const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index, // Dummy mask of shape (1 or batch_size, 1) will be updated to nullptr.
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
- const int max_threads_per_block,
+ const int max_threads_per_block, // for CUDA
const Tensor* past_seq_len = nullptr) const;
Tensor* GetPresent(OpKernelContext* context,
@@ -34,7 +31,7 @@ class AttentionBase {
int& past_sequence_length) const;
protected:
- AttentionBase(const OpKernelInfo& info, bool require_same_hidden_size, bool require_weights) {
+ AttentionBase(const OpKernelInfo& info, bool require_same_hidden_size) {
int64_t num_heads = 0;
ORT_ENFORCE(info.GetAttr("num_heads", &num_heads).IsOK() && num_heads > 0);
num_heads_ = static_cast(num_heads);
@@ -48,24 +45,21 @@ class AttentionBase {
past_present_share_buffer_ = info.GetAttrOrDefault("past_present_share_buffer", 0LL);
require_same_hidden_size_ = require_same_hidden_size;
- require_weights_ = require_weights;
}
Status CheckMask(const Tensor* mask_index,
- bool& is_dummy, // output: whether the mask is dummy with shape (1 or batch_size, 1)
+ AttentionMaskType& mask_type,
int64_t& max_sequence_length, // output: max_sequence_length when mask_index is 4D tensor
int64_t batch_size,
int64_t sequence_length,
int64_t total_sequence_length) const;
Status CheckInputs(const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index, // Dummy mask of shape (1 or batch_size, 1) will be updated to nullptr.
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
const Tensor* past_seq_len = nullptr) const;
@@ -73,7 +67,6 @@ class AttentionBase {
bool is_unidirectional_; // whether every token can only attend to previous tokens.
std::vector qkv_hidden_sizes_; // Q, K, V hidden sizes parsed from the qkv_hidden_sizes attribute.
bool require_same_hidden_size_; // whether the implementation supports different hidden sizes of Q/K/V.
- bool require_weights_; // whether the implementation requires weights for Q/K/V.
bool past_present_share_buffer_; // whether or not the past (if used) and present tensor share the same buffer
};
diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_common.h b/onnxruntime/contrib_ops/cpu/bert/attention_common.h
index 649c18248c883..c313e4d2847a4 100644
--- a/onnxruntime/contrib_ops/cpu/bert/attention_common.h
+++ b/onnxruntime/contrib_ops/cpu/bert/attention_common.h
@@ -6,6 +6,17 @@
namespace onnxruntime {
namespace contrib {
+enum AttentionMaskType {
+ MASK_NONE, // No mask
+ MASK_1D_KEY_SEQ_LEN, // [batch_size], key sequence length
+ MASK_1D_END_START, // [2 * batch_size] with end positions and start positions
+ MASK_2D_DUMMY, // dummy mask with shape [1, 1] or [batch_size, 1]. It has same effect as no mask.
+ MASK_2D_KEY_PADDING, // [batch_size, total_sequence_length]
+ MASK_3D_ATTENTION, // [batch_size, sequence_length, total_sequence_length]
+ MASK_4D_MEGATRON, // Megatron causal mask with shape [batch_size, 1, max_sequence_length, max_sequence_length]
+ MASK_UNKNOWN
+};
+
struct AttentionParameters {
int batch_size;
int sequence_length;
@@ -21,6 +32,7 @@ struct AttentionParameters {
int num_heads;
bool is_unidirectional;
bool past_present_share_buffer;
+ AttentionMaskType mask_type;
};
namespace attention {
diff --git a/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h b/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h
index b47a18bd61d1f..2b01d1ce14aa4 100644
--- a/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h
+++ b/onnxruntime/contrib_ops/cpu/bert/attention_cpu_base.h
@@ -15,8 +15,8 @@ namespace contrib {
class AttentionCPUBase : public AttentionBase {
protected:
- AttentionCPUBase(const OpKernelInfo& info, bool require_same_hidden_size, bool require_weights)
- : AttentionBase(info, require_same_hidden_size, require_weights) {}
+ AttentionCPUBase(const OpKernelInfo& info, bool require_same_hidden_size)
+ : AttentionBase(info, require_same_hidden_size) {}
template
Status ApplyAttention(const T* Q, // Q data with shape BxNxSxH
diff --git a/onnxruntime/contrib_ops/cpu/bert/cross_attention_helper.h b/onnxruntime/contrib_ops/cpu/bert/cross_attention_helper.h
new file mode 100644
index 0000000000000..78ebd23d989f3
--- /dev/null
+++ b/onnxruntime/contrib_ops/cpu/bert/cross_attention_helper.h
@@ -0,0 +1,119 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#pragma once
+
+#include "core/common/common.h"
+#include "core/providers/common.h"
+#include "contrib_ops/cpu/bert/attention_common.h"
+
+namespace onnxruntime {
+namespace contrib {
+namespace cross_attention_helper {
+
+template
+Status CheckInputs(const T* query,
+ const T* key,
+ const T* value,
+ const T* bias,
+ const T* key_padding_mask,
+ void* parameters,
+ int num_heads,
+ int max_threads_per_block) {
+ // query (Q) : (B, S, D)
+ // key (K) : (B, L, D)
+ // value (V) : (B, L, D_v)
+ // bias (Q/K/V) : (D + D + D_v)
+ // key_padding_mask (K/V) : (B, L) or (L)
+
+ const auto& query_dims = query->Shape().GetDims();
+ if (query_dims.size() != 3) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'query' is expected to have 3 dimensions, got ",
+ query_dims.size());
+ }
+
+ const auto& key_dims = key->Shape().GetDims();
+ if (key_dims.size() != 3) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'key' is expected to have 3 dimensions, got ",
+ key_dims.size());
+ }
+
+ const auto& bias_dims = bias->Shape().GetDims();
+ if (bias_dims.size() != 1) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'bias' is expected to have 1 dimension, got ",
+ bias_dims.size());
+ }
+
+ AttentionMaskType mask_type = AttentionMaskType::MASK_NONE;
+ if (key_padding_mask != nullptr) {
+ mask_type = AttentionMaskType::MASK_UNKNOWN;
+ const auto& mask_dims = key_padding_mask->Shape().GetDims();
+ if (mask_dims.size() == 1 && mask_dims[0] == key_dims[0]) {
+ mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN;
+ } else if (mask_dims.size() == 2 && mask_dims[0] == key_dims[0] && mask_dims[1] == key_dims[1]) {
+ mask_type = AttentionMaskType::MASK_2D_KEY_PADDING;
+ }
+
+ if (mask_type == AttentionMaskType::MASK_UNKNOWN) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
+ "Input 'key_padding_mask' shape shall be (batch_size) or (batch_size, kv_sequence_length)");
+ }
+ }
+
+ if (query_dims[0] != key_dims[0]) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
+ "Input 'query' and 'key' shall have same dim 0 (batch size)");
+ }
+
+ int64_t batch_size = query_dims[0];
+ int64_t sequence_length = query_dims[1];
+ int64_t kv_sequence_length = key_dims[1];
+ int64_t q_hidden_size = query_dims[2];
+ int64_t v_hidden_size = 0;
+
+ const auto& value_dims = value->Shape().GetDims();
+ if (value_dims.size() != 3) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'value' is expected to have 3 dimensions, got ",
+ value_dims.size());
+ }
+
+ if (query_dims[0] != value_dims[0]) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
+ "Input 'query' and 'value' shall have same dim 0 (batch_size)");
+ }
+
+ if (key_dims[1] != value_dims[1]) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT,
+ "Input 'key' and 'value' shall have same same dim 1 (sequence_length)");
+ }
+ v_hidden_size = value_dims[2];
+
+ if (parameters != nullptr) {
+ AttentionParameters* output_parameters = reinterpret_cast(parameters);
+ output_parameters->batch_size = static_cast(batch_size);
+ output_parameters->sequence_length = static_cast(sequence_length);
+ output_parameters->past_sequence_length = 0;
+ output_parameters->kv_sequence_length = static_cast(kv_sequence_length);
+ output_parameters->total_sequence_length = static_cast(kv_sequence_length);
+ output_parameters->max_sequence_length = 0;
+ output_parameters->input_hidden_size = 0;
+ output_parameters->hidden_size = static_cast(q_hidden_size);
+ output_parameters->v_hidden_size = static_cast(v_hidden_size);
+ output_parameters->head_size = static_cast(q_hidden_size) / num_heads;
+ output_parameters->v_head_size = static_cast(v_hidden_size) / num_heads;
+ output_parameters->num_heads = num_heads;
+ output_parameters->is_unidirectional = false;
+ output_parameters->past_present_share_buffer = false;
+ output_parameters->mask_type = mask_type;
+ }
+
+ if (max_threads_per_block > 0 && num_heads > max_threads_per_block) {
+ return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "num_heads should be no larger than ", max_threads_per_block);
+ }
+
+ return Status::OK();
+}
+
+} // namespace cross_attention_helper
+} // namespace contrib
+} // namespace onnxruntime
diff --git a/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc b/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc
index f7beaa8560574..64c17b7767e4f 100644
--- a/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc
+++ b/onnxruntime/contrib_ops/cpu/quantization/attention_quant.cc
@@ -53,7 +53,7 @@ ONNX_OPERATOR_TYPED_KERNEL_EX(
QAttention);
template
-QAttention::QAttention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, true, true) {
+QAttention::QAttention(const OpKernelInfo& info) : OpKernel(info), AttentionCPUBase(info, true) {
}
template
@@ -156,13 +156,11 @@ Status QAttention::Compute(OpKernelContext* context) const {
const TensorShape& weights_shape = (packed_weights_ ? weight_shape_ : weights->Shape());
ORT_RETURN_IF_ERROR(AttentionBase::CheckInputs(input->Shape(),
- &weights_shape,
+ weights_shape,
bias->Shape(),
mask_index,
past_tensor,
nullptr, // extra_add_qk
- nullptr, // key
- nullptr, // value
nullptr // parameters
));
diff --git a/onnxruntime/contrib_ops/cuda/bert/attention.cc b/onnxruntime/contrib_ops/cuda/bert/attention.cc
index d60d7be9fc3ca..bba941f1e40e5 100644
--- a/onnxruntime/contrib_ops/cuda/bert/attention.cc
+++ b/onnxruntime/contrib_ops/cuda/bert/attention.cc
@@ -16,26 +16,28 @@ namespace onnxruntime {
namespace contrib {
namespace cuda {
-#define PastSequenceLength 8
-#define REGISTER_KERNEL_TYPED(T) \
- ONNX_OPERATOR_TYPED_KERNEL_EX( \
- Attention, \
- kMSDomain, \
- 1, \
- T, \
- kCudaExecutionProvider, \
- (*KernelDefBuilder::Create()) \
- .MayInplace(4, 1) \
- .TypeConstraint("T", DataTypeImpl::GetTensorType()) \
- .InputMemoryType(OrtMemTypeCPUInput, PastSequenceLength)\
- , \
+constexpr int kPastSequenceLengthInputIndex = 6;
+constexpr int kPastInputIndex = 4;
+constexpr int kPresentOutputIndex = 1;
+
+#define REGISTER_KERNEL_TYPED(T) \
+ ONNX_OPERATOR_TYPED_KERNEL_EX( \
+ Attention, \
+ kMSDomain, \
+ 1, \
+ T, \
+ kCudaExecutionProvider, \
+ (*KernelDefBuilder::Create()) \
+ .MayInplace(kPastInputIndex, kPresentOutputIndex) \
+ .TypeConstraint("T", DataTypeImpl::GetTensorType()) \
+ .InputMemoryType(OrtMemTypeCPUInput, kPastSequenceLengthInputIndex), \
Attention);
REGISTER_KERNEL_TYPED(float)
REGISTER_KERNEL_TYPED(MLFloat16)
template
-Attention::Attention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, false, false) {
+Attention::Attention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, false) {
disable_fused_runner_ = sizeof(T) != 2 ||
ParseEnvironmentVariableWithDefault(attention::kDisableFusedAttention, false);
@@ -49,22 +51,18 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
const Tensor* weights = context->Input(1);
const Tensor* bias = context->Input(2);
const Tensor* mask_index = context->Input(3);
- const Tensor* past = context->Input(4);
+ const Tensor* past = context->Input(kPastInputIndex);
const Tensor* extra_add_qk = context->Input(5);
- const Tensor* key = context->Input(6);
- const Tensor* value = context->Input(7);
- const Tensor* past_seq_len = context->Input(8);
+ const Tensor* past_seq_len = context->Input(kPastSequenceLengthInputIndex);
auto& device_prop = GetDeviceProp();
AttentionParameters parameters;
ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(),
- nullptr == weights ? nullptr : &(weights->Shape()),
+ weights->Shape(),
bias->Shape(),
mask_index,
past,
extra_add_qk,
- key,
- value,
¶meters,
device_prop.maxThreadsPerBlock,
past_seq_len));
@@ -79,25 +77,25 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
Tensor* output = context->Output(0, output_shape);
std::vector present_dims{
- 2, parameters.batch_size, parameters.num_heads,
- past_present_share_buffer_ ? parameters.max_sequence_length : parameters.total_sequence_length,
- parameters.head_size};
+ 2, parameters.batch_size, parameters.num_heads,
+ past_present_share_buffer_ ? parameters.max_sequence_length : parameters.total_sequence_length,
+ parameters.head_size};
TensorShape present_shape(present_dims);
- Tensor* present = context->Output(1, present_shape);
+ Tensor* present = context->Output(kPresentOutputIndex, present_shape);
MHARunner* fused_runner = nullptr;
#ifndef ENABLE_TRAINING // Only enable fused kernel on non-training builds
// Check whether we can use fused kernel
int sm = device_prop.major * 10 + device_prop.minor;
- bool is_1d_mask = nullptr != mask_index && mask_index->Shape().NumDimensions() == 1;
+ bool is_mask_1d_seq_len = parameters.mask_type == AttentionMaskType::MASK_1D_KEY_SEQ_LEN;
if (is_unidirectional_) { // GPT
// Fused kernels requires left side padding (The mask shall be sequence lengths or no mask)
// Fused kernels don't support different sequence lengths of q and kv, so only apply to the first token
// where past state is empty.
bool use_causal_fused_runner = !disable_fused_runner_ &&
- (nullptr == mask_index || is_1d_mask) &&
+ (nullptr == mask_index || is_mask_1d_seq_len) &&
nullptr == extra_add_qk &&
parameters.past_sequence_length == 0 &&
parameters.hidden_size == parameters.v_hidden_size &&
@@ -115,7 +113,7 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
}
} else { // BERT
bool use_fused_runner = !disable_fused_runner_ &&
- (nullptr == mask_index || is_1d_mask) &&
+ (nullptr == mask_index || is_mask_1d_seq_len) &&
nullptr == past &&
nullptr == present &&
nullptr == extra_add_qk &&
@@ -145,23 +143,21 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
typedef typename ToCudaType::MappedType CudaT;
IAllocatorUniquePtr gemm_buffer;
- if (weights != nullptr) {
- int m = batch_size * sequence_length;
- int n = (parameters.hidden_size + parameters.hidden_size + parameters.v_hidden_size);
- int k = parameters.input_hidden_size;
- gemm_buffer = GetScratchBuffer(static_cast(m) * n, context->GetComputeStream());
-
- CudaT one = ToCudaType::FromFloat(1.0f);
- CudaT zero = ToCudaType::FromFloat(0.0f);
-
- // Gemm, note that CUDA assumes col-major, so result(N, M) = 1 * weights x input + 1 x bias
- // The bias part is not included here since we fuse bias, transpose and output 3 matrice into one cuda kernel.
- CUBLAS_RETURN_IF_ERROR(cublasGemmHelper(
- cublas, CUBLAS_OP_N, CUBLAS_OP_N, n, m, k, &one,
- reinterpret_cast(weights->Data()), n,
- reinterpret_cast(input->Data()), k,
- &zero, reinterpret_cast(gemm_buffer.get()), n, device_prop));
- }
+ int m = batch_size * sequence_length;
+ int n = (parameters.hidden_size + parameters.hidden_size + parameters.v_hidden_size);
+ int k = parameters.input_hidden_size;
+ gemm_buffer = GetScratchBuffer(static_cast(m) * n, context->GetComputeStream());
+
+ CudaT one = ToCudaType::FromFloat(1.0f);
+ CudaT zero = ToCudaType::FromFloat(0.0f);
+
+ // Gemm, note that CUDA assumes col-major, so result(N, M) = 1 * weights x input + 1 x bias
+ // The bias part is not included here since we fuse bias, transpose and output 3 matrice into one cuda kernel.
+ CUBLAS_RETURN_IF_ERROR(cublasGemmHelper(
+ cublas, CUBLAS_OP_N, CUBLAS_OP_N, n, m, k, &one,
+ reinterpret_cast(weights->Data()), n,
+ reinterpret_cast(input->Data()), k,
+ &zero, reinterpret_cast(gemm_buffer.get()), n, device_prop));
constexpr size_t element_size = sizeof(T);
size_t workSpaceSize = GetAttentionWorkspaceSize(element_size,
@@ -177,11 +173,11 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
typedef typename ToCudaType::MappedType CudaT;
AttentionData data;
- data.gemm_buffer = (nullptr == weights) ? nullptr : reinterpret_cast(gemm_buffer.get());
+ data.gemm_buffer = reinterpret_cast(gemm_buffer.get());
data.bias = reinterpret_cast(bias->Data());
- data.query = (nullptr != weights) ? nullptr : reinterpret_cast(input->Data());
- data.key = (nullptr == key) ? nullptr : reinterpret_cast(key->Data());
- data.value = (nullptr == value) ? nullptr : reinterpret_cast(value->Data());
+ data.query = nullptr;
+ data.key = nullptr;
+ data.value = nullptr;
data.mask_index = (nullptr == mask_index) ? nullptr : mask_index->Data();
data.mask_index_dims = (nullptr == mask_index) ? gsl::span() : mask_index->Shape().GetDims();
data.past = (nullptr == past) ? nullptr : reinterpret_cast(past->Data());
@@ -191,7 +187,7 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
data.present = (nullptr == present) ? nullptr : reinterpret_cast(present->MutableData());
return QkvToContext(
- device_prop, cublas, Stream(context), parameters, data, reinterpret_cast(fused_runner), past_present_share_buffer_);
+ device_prop, cublas, Stream(context), parameters, data, reinterpret_cast(fused_runner), past_present_share_buffer_);
}
} // namespace cuda
diff --git a/onnxruntime/contrib_ops/cuda/bert/cross_attention.cc b/onnxruntime/contrib_ops/cuda/bert/cross_attention.cc
new file mode 100644
index 0000000000000..8fcb041f9f0b6
--- /dev/null
+++ b/onnxruntime/contrib_ops/cuda/bert/cross_attention.cc
@@ -0,0 +1,136 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#include "core/providers/cuda/cuda_common.h"
+#include "core/platform/env_var_utils.h"
+#include "contrib_ops/cuda/bert/attention_impl.h"
+#include "contrib_ops/cuda/bert/cross_attention.h"
+#include "contrib_ops/cpu/bert/cross_attention_helper.h"
+
+using namespace onnxruntime::cuda;
+using namespace ::onnxruntime::common;
+using namespace ONNX_NAMESPACE;
+
+namespace onnxruntime {
+namespace contrib {
+namespace cuda {
+
+#define REGISTER_KERNEL_TYPED(T) \
+ ONNX_OPERATOR_TYPED_KERNEL_EX( \
+ CrossAttention, \
+ kMSDomain, \
+ 1, \
+ T, \
+ kCudaExecutionProvider, \
+ (*KernelDefBuilder::Create()) \
+ .TypeConstraint("T", DataTypeImpl::GetTensorType()), \
+ CrossAttention);
+
+REGISTER_KERNEL_TYPED(float)
+REGISTER_KERNEL_TYPED(MLFloat16)
+
+template
+CrossAttention::CrossAttention(const OpKernelInfo& info) : CudaKernel(info) {
+ int64_t num_heads = 0;
+ ORT_ENFORCE(info.GetAttr("num_heads", &num_heads).IsOK() && num_heads > 0);
+ num_heads_ = static_cast(num_heads);
+
+ disable_fused_runner_ = sizeof(T) != 2 ||
+ ParseEnvironmentVariableWithDefault(attention::kDisableFusedAttention, false);
+
+ enable_flash_attention_ = sizeof(T) == 2 &&
+ ParseEnvironmentVariableWithDefault(attention::kEnableFlashAttention, true);
+}
+
+template
+Status CrossAttention::ComputeInternal(OpKernelContext* context) const {
+ const Tensor* query = context->Input(0);
+ const Tensor* key = context->Input(1);
+ const Tensor* value = context->Input(2);
+ const Tensor* bias = context->Input(3);
+ const Tensor* key_padding_mask = context->Input(4);
+
+ auto& device_prop = GetDeviceProp();
+ AttentionParameters parameters;
+ ORT_RETURN_IF_ERROR(cross_attention_helper::CheckInputs(query,
+ key,
+ value,
+ bias,
+ key_padding_mask,
+ ¶meters,
+ num_heads_,
+ device_prop.maxThreadsPerBlock));
+
+ int sequence_length = parameters.sequence_length;
+
+ TensorShapeVector output_shape(3);
+ output_shape[0] = static_cast(parameters.batch_size);
+ output_shape[1] = static_cast(sequence_length);
+ output_shape[2] = static_cast(parameters.v_hidden_size);
+ Tensor* output = context->Output(0, output_shape);
+
+ MHARunner* fused_runner = nullptr;
+#ifndef ENABLE_TRAINING // Only enable fused kernel on non-training builds
+ // Check whether we can use fused kernel
+ int sm = device_prop.major * 10 + device_prop.minor;
+
+ bool is_mask_1d_seq_len = parameters.mask_type == AttentionMaskType::MASK_1D_KEY_SEQ_LEN;
+
+ bool use_fused_runner = !disable_fused_runner_ &&
+ (nullptr == key_padding_mask || is_mask_1d_seq_len) &&
+ parameters.hidden_size == parameters.v_hidden_size &&
+ parameters.sequence_length == parameters.kv_sequence_length &&
+ FusedMHARunnerFP16v2::is_supported(sm, parameters.head_size, sequence_length,
+ enable_flash_attention_, false);
+
+ if (use_fused_runner) {
+ // Here we assume that num_heads and head_size does not change for an CrossAttention node.
+ if (nullptr == fused_fp16_runner_.get()) {
+ constexpr bool is_unidirectional = false;
+ fused_fp16_runner_.reset(new FusedMHARunnerFP16v2(
+ num_heads_, parameters.head_size, sm, is_unidirectional, enable_flash_attention_));
+ }
+
+ // In case some kernel not loaded due to shared memory limit, we need to double check here.
+ const int S = fused_fp16_runner_->getSFromMaxSeqLen(sequence_length);
+ if (fused_fp16_runner_->isValid(S)) {
+ fused_runner = fused_fp16_runner_.get();
+ }
+ }
+#endif
+
+ constexpr size_t element_size = sizeof(T);
+ size_t workSpaceSize = GetAttentionWorkspaceSize(element_size,
+ parameters.batch_size,
+ parameters.num_heads,
+ parameters.head_size,
+ parameters.v_head_size,
+ parameters.sequence_length,
+ parameters.kv_sequence_length,
+ parameters.total_sequence_length,
+ fused_runner);
+ auto work_space = GetScratchBuffer(workSpaceSize, context->GetComputeStream());
+
+ typedef typename ToCudaType::MappedType CudaT;
+ AttentionData data;
+ data.gemm_buffer = nullptr;
+ data.bias = reinterpret_cast(bias->Data());
+ data.query = reinterpret_cast(query->Data());
+ data.key = reinterpret_cast(key->Data());
+ data.value = reinterpret_cast(value->Data());
+ data.mask_index = (nullptr == key_padding_mask) ? nullptr : key_padding_mask->Data();
+ data.mask_index_dims = (nullptr == key_padding_mask) ? gsl::span() : key_padding_mask->Shape().GetDims();
+ data.past = nullptr;
+ data.extra_add_qk = nullptr;
+ data.workspace = reinterpret_cast(work_space.get());
+ data.output = reinterpret_cast(output->MutableData());
+ data.present = nullptr;
+
+ cublasHandle_t cublas = GetCublasHandle(context);
+ return QkvToContext(
+ device_prop, cublas, Stream(context), parameters, data, reinterpret_cast(fused_runner), false);
+}
+
+} // namespace cuda
+} // namespace contrib
+} // namespace onnxruntime
diff --git a/onnxruntime/contrib_ops/cuda/bert/cross_attention.h b/onnxruntime/contrib_ops/cuda/bert/cross_attention.h
new file mode 100644
index 0000000000000..53019f03e61f1
--- /dev/null
+++ b/onnxruntime/contrib_ops/cuda/bert/cross_attention.h
@@ -0,0 +1,31 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#pragma once
+
+#include
+#include "core/providers/cuda/cuda_kernel.h"
+#include "contrib_ops/cuda/bert/tensorrt_fused_multihead_attention/mha_runner.h"
+
+namespace onnxruntime {
+namespace contrib {
+namespace cuda {
+
+using namespace onnxruntime::cuda;
+
+template
+class CrossAttention final : public CudaKernel {
+ public:
+ CrossAttention(const OpKernelInfo& info);
+ Status ComputeInternal(OpKernelContext* context) const override;
+
+ protected:
+ int num_heads_; // number of attention heads
+ bool disable_fused_runner_;
+ bool enable_flash_attention_;
+ mutable std::unique_ptr fused_fp16_runner_;
+};
+
+} // namespace cuda
+} // namespace contrib
+} // namespace onnxruntime
diff --git a/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc b/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc
index aea82ee0889af..97995dc178e7b 100644
--- a/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc
+++ b/onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc
@@ -60,6 +60,8 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, float, Crop);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, double, Crop);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, MLFloat16, Crop);
+class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, CrossAttention);
+class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, MLFloat16, CrossAttention);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, float, DecoderAttention);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kMSDomain, 1, MLFloat16, DecoderAttention);
class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCudaExecutionProvider, kOnnxDomain, 1, int32_t, DynamicSlice);
@@ -177,6 +179,8 @@ Status RegisterCudaContribKernels(KernelRegistry& kernel_registry) {
BuildKernelCreateInfo,
BuildKernelCreateInfo,
BuildKernelCreateInfo,
+ BuildKernelCreateInfo,
+ BuildKernelCreateInfo,
BuildKernelCreateInfo,
BuildKernelCreateInfo,
BuildKernelCreateInfo,
@@ -192,7 +196,7 @@ Status RegisterCudaContribKernels(KernelRegistry& kernel_registry) {
BuildKernelCreateInfo,
BuildKernelCreateInfo,
BuildKernelCreateInfo,
- BuildKernelCreateInfo,
+ BuildKernelCreateInfo,
BuildKernelCreateInfo,
BuildKernelCreateInfo,
BuildKernelCreateInfo,
diff --git a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc
index 5757c4b388f82..8b7b6e3e1cceb 100644
--- a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc
+++ b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.cc
@@ -50,12 +50,9 @@ Status QAttention::CheckInputs(const Tensor* input,
const Tensor* past_tensor,
void* parameters) const {
auto& device_prop = GetDeviceProp();
- auto& weights_shape = weights->Shape();
- ORT_RETURN_IF_ERROR(AttentionBase::CheckInputs(input->Shape(), &weights_shape, bias->Shape(),
+ ORT_RETURN_IF_ERROR(AttentionBase::CheckInputs(input->Shape(), weights->Shape(), bias->Shape(),
mask_index, past_tensor,
nullptr, // extra_add_qk
- nullptr, // key
- nullptr, // value
parameters,
device_prop.maxThreadsPerBlock));
diff --git a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h
index 722db2b302bd5..2c602481903fd 100644
--- a/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h
+++ b/onnxruntime/contrib_ops/cuda/quantization/attention_quantization.h
@@ -22,7 +22,7 @@ class QAttention final : public CudaKernel, public AttentionBase {
public:
QAttention(const OpKernelInfo& info) : CudaKernel(info),
- AttentionBase(info, true, true) {
+ AttentionBase(info, true) {
}
Status ComputeInternal(OpKernelContext* context) const override;
diff --git a/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc b/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc
index f636e0ec3d137..204c786cc2c5d 100644
--- a/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc
+++ b/onnxruntime/contrib_ops/cuda/quantization/qordered_ops/qordered_attention.cc
@@ -157,7 +157,7 @@ inline void debug_print([[maybe_unused]] const T* arr,
#endif
-QOrderedAttention::QOrderedAttention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, true, true) {
+QOrderedAttention::QOrderedAttention(const OpKernelInfo& info) : CudaKernel(info), AttentionBase(info, true) {
#if defined(CUDA_VERSION) && CUDA_VERSION >= 11040
input_hidden_size_ = 0;
int cuda_runtime_version = 0;
@@ -209,12 +209,10 @@ Status QOrderedAttention::ComputeInternal(OpKernelContext* context) const {
const Tensor* mask_index = context->Input(InputIds::Mask_Index);
auto& device_prop = GetDeviceProp();
- ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), &merged_weights_shape, merged_bias_shape,
+ ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(), merged_weights_shape, merged_bias_shape,
mask_index,
nullptr, // past
nullptr, // extra_add_qk
- nullptr, // key
- nullptr, // value
nullptr, // parameters
device_prop.maxThreadsPerBlock));
diff --git a/onnxruntime/contrib_ops/rocm/bert/attention.cc b/onnxruntime/contrib_ops/rocm/bert/attention.cc
index 2236b16ccdd77..db08029548d80 100644
--- a/onnxruntime/contrib_ops/rocm/bert/attention.cc
+++ b/onnxruntime/contrib_ops/rocm/bert/attention.cc
@@ -29,7 +29,7 @@ REGISTER_KERNEL_TYPED(float)
REGISTER_KERNEL_TYPED(MLFloat16)
template
-Attention::Attention(const OpKernelInfo& info) : RocmKernel(info), AttentionBase(info, true, true) {}
+Attention::Attention(const OpKernelInfo& info) : RocmKernel(info), AttentionBase(info, true) {}
template
Status Attention::ComputeInternal(OpKernelContext* context) const {
@@ -40,18 +40,13 @@ Status Attention::ComputeInternal(OpKernelContext* context) const {
const Tensor* past = context->Input(4);
const Tensor* extra_add_qk = context->Input(5);
- const Tensor* key = context->Input(6);
- const Tensor* value = context->Input(7);
-
auto& device_prop = GetDeviceProp();
ORT_RETURN_IF_ERROR(CheckInputs(input->Shape(),
- weights == nullptr ? nullptr : &(weights->Shape()),
+ weights->Shape(),
bias->Shape(),
mask_index,
past,
extra_add_qk,
- key,
- value,
nullptr,
device_prop.maxThreadsPerBlock));
diff --git a/onnxruntime/core/graph/contrib_ops/bert_defs.cc b/onnxruntime/core/graph/contrib_ops/bert_defs.cc
index af08a6f7e7db5..1fa9142aafad3 100644
--- a/onnxruntime/core/graph/contrib_ops/bert_defs.cc
+++ b/onnxruntime/core/graph/contrib_ops/bert_defs.cc
@@ -125,6 +125,37 @@ void RestorePaddingTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx)
}
}
+void CrossAttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) {
+ // Input 0 (query) has shape (batch_size, sequence_length, hidden_size)
+ // Input 1 (key) has shape (batch_size, kv_sequence_length, hidden_size)
+ // Input 2 (value) has shape (batch_size, kv_sequence_length, v_hidden_size)
+ // Output 0 has shape (batch_size, sequence_length, v_hidden_size)
+
+ // Type inference
+ ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0);
+
+ // Shape inference
+ if (hasInputShape(ctx, 0) && hasInputShape(ctx, 2)) {
+ auto& query_shape = getInputShape(ctx, 0);
+ auto& query_dims = query_shape.dim();
+ if (query_dims.size() != 3) {
+ fail_shape_inference("Inputs 0 (query) shall be 3 dimensions");
+ }
+
+ auto& value_shape = getInputShape(ctx, 2);
+ auto& value_dims = value_shape.dim();
+ if (value_dims.size() != 3) {
+ fail_shape_inference("Inputs 2 (value) shall be 3 dimensions");
+ }
+
+ ONNX_NAMESPACE::TensorShapeProto output_shape;
+ *output_shape.add_dim() = query_dims[0];
+ *output_shape.add_dim() = query_dims[1];
+ *output_shape.add_dim() = value_dims[2];
+ updateOutputShape(ctx, 0, output_shape);
+ }
+}
+
constexpr const char* Attention_ver1_doc = R"DOC(
Multi-Head Attention that can be either unidirectional (like GPT-2) or bidirectional (like BERT).
@@ -141,10 +172,6 @@ shape (2 * batch_size), where the values are the exclusive end positions followe
When unidirectional is 1, each token only attends to previous tokens.
Both past and present state are optional. They shall be used together, and not allowed to use only one of them.
-
-When weights is not provided, key and value are required. In this situation, MatMul for input projection is excluded,
-and input is the query after projection. The bias is included for performance consideration.
-
The qkv_hidden_sizes is required only when K and V have different hidden sizes.
When there is past state, hidden dimension for Q, K and V shall be the same.
@@ -174,15 +201,12 @@ ONNX_MS_OPERATOR_SET_SCHEMA(
static_cast(0))
.Input(0,
"input",
- "Input tensor with shape (batch_size, sequence_length, input_hidden_size) when weights is available, "
- "or query tensor with shape (batch_size, sequence_length, hidden_size) when weights is not available.",
- "T",
- OpSchema::Optional)
+ "Input tensor with shape (batch_size, sequence_length, input_hidden_size)",
+ "T")
.Input(1,
"weights",
"Merged Q/K/V weights with shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size)",
- "T",
- OpSchema::Optional)
+ "T")
.Input(2,
"bias",
"Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) for input projection",
@@ -191,13 +215,14 @@ ONNX_MS_OPERATOR_SET_SCHEMA(
"mask_index",
"Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), "
"(batch_size, total_sequence_length) or (batch_size, sequence_length, total_sequence_length), "
- "or index with shape (batch_size) or (2 * batch_size).",
+ "or index with shape (batch_size) or (2 * batch_size)",
"M",
OpSchema::Optional)
.Input(4,
"past",
"past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size)"
- "When past_present_share_buffer is set, its shape is (2, batch_size, num_heads, max_sequence_length, head_size)",
+ "When past_present_share_buffer is set, "
+ "its shape is (2, batch_size, num_heads, max_sequence_length, head_size)",
"T",
OpSchema::Optional)
.Input(5,
@@ -206,21 +231,8 @@ ONNX_MS_OPERATOR_SET_SCHEMA(
"T",
OpSchema::Optional)
.Input(6,
- "key",
- "Input for key with shape (batch_size, kv_sequence_length, hidden_size). "
- "Required when weights is not available.",
- "T",
- OpSchema::Optional)
- .Input(7,
- "value",
- "Input for key with shape (batch_size, kv_sequence_length, v_hidden_size). "
- "Required when weights is not available.",
- "T",
- OpSchema::Optional)
- .Input(8,
"past_sequence_length",
- "When past_present_share_buffer, specify past_sequence_length for effective past sequence lenght (could be 0)."
- "Needed when past_present_share_buffer is not zero.",
+ "When past_present_share_buffer is used, it is required to specify past_sequence_length (could be 0).",
"M",
OpSchema::Optional)
.Output(0,
@@ -229,10 +241,10 @@ ONNX_MS_OPERATOR_SET_SCHEMA(
"T")
.Output(1,
"present",
- "past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size)"
- "If past_present_share_buffer, it should be exactly same as past tensor, of shape "
- "(2, batch_size, num_heads, max_sequence_length, head_size),"
- "while effective_seq_length = (past_sequence_length + kv_sequence_length)",
+ "past state for key and value with shape (2, batch_size, num_heads, total_sequence_length, head_size). "
+ "If past_present_share_buffer is set, "
+ "its shape is (2, batch_size, num_heads, max_sequence_length, head_size), "
+ "while effective_seq_length = (past_sequence_length + kv_sequence_length).",
"T",
OpSchema::Optional)
.TypeConstraint("T",
@@ -246,6 +258,50 @@ ONNX_MS_OPERATOR_SET_SCHEMA(
AttentionTypeAndShapeInference(ctx, past_input_index);
}));
+constexpr const char* CrossAttention_ver1_doc = R"DOC(
+Multi-Head Cross Attention. Bias from input projection is included.
+
+The key padding mask is optional. When its shape is (batch_size, kv_sequence_length), value 0
+means padding or 1 otherwise. When key has right-side padding, its shape could be (batch_size): it is actual length of
+each key sequence excluding paddings.
+)DOC";
+
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ CrossAttention, 1,
+ OpSchema()
+ .SetDoc(CrossAttention_ver1_doc)
+ .Attr("num_heads", "Number of attention heads", AttributeProto::INT)
+ .Input(0,
+ "query",
+ "Query with shape (batch_size, sequence_length, hidden_size) when weights is not available.",
+ "T")
+ .Input(1,
+ "key",
+ "Key with shape (batch_size, kv_sequence_length, hidden_size)",
+ "T")
+ .Input(2,
+ "value",
+ "Value with shape (batch_size, kv_sequence_length, v_hidden_size)",
+ "T")
+ .Input(3,
+ "bias",
+ "Bias tensor with shape (hidden_size + hidden_size + v_hidden_size) from input projection",
+ "T")
+ .Input(4,
+ "key_padding_mask",
+ "Key padding mask with shape (batch_size) or (batch_size, kv_sequence_length)",
+ "M",
+ OpSchema::Optional)
+ .Output(0,
+ "output",
+ "3D output tensor with shape (batch_size, sequence_length, v_hidden_size)",
+ "T")
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output to float tensors.")
+ .TypeConstraint("M", {"tensor(int32)"}, "Constrain mask to integer types")
+ .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
+ CrossAttentionTypeAndShapeInference(ctx);
+ }));
+
constexpr const char* Longformer_Attention_doc = R"DOC(
Longformer Self Attention with a local context and a global context. Tokens attend locally: Each token
attends to its W previous tokens and W succeeding tokens with W being the window length. A selected few tokens
@@ -257,54 +313,56 @@ Mask value < 0 (like -10000.0) means the token is masked, 0 otherwise.
Global attention flags have value 1 for the tokens attend globally and 0 otherwise.
)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(LongformerAttention, 1,
- OpSchema()
- .SetDomain(kMSDomain)
- .SinceVersion(1)
- .SetDoc(Longformer_Attention_doc)
- .Attr("num_heads", "Number of attention heads", AttributeProto::INT)
- .Attr("window", "One sided attention windows length W, or half of total window length", AttributeProto::INT)
- .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size", "T")
- .Input(1, "weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T")
- .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T")
- .Input(3, "mask", "Attention mask with shape (batch_size, sequence_length)", "T")
- .Input(4, "global_weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T")
- .Input(5, "global_bias", "1D input tensor with shape (3 * hidden_size)", "T")
- .Input(6, "global", "Global attention flags with shape (batch_size, sequence_length)", "G")
- .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.")
- .TypeConstraint("G", {"tensor(int32)"}, "Constrain to integer types")
- .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput));
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ LongformerAttention, 1,
+ OpSchema()
+ .SetDomain(kMSDomain)
+ .SinceVersion(1)
+ .SetDoc(Longformer_Attention_doc)
+ .Attr("num_heads", "Number of attention heads", AttributeProto::INT)
+ .Attr("window", "One sided attention windows length W, or half of total window length", AttributeProto::INT)
+ .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size", "T")
+ .Input(1, "weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T")
+ .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T")
+ .Input(3, "mask", "Attention mask with shape (batch_size, sequence_length)", "T")
+ .Input(4, "global_weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T")
+ .Input(5, "global_bias", "1D input tensor with shape (3 * hidden_size)", "T")
+ .Input(6, "global", "Global attention flags with shape (batch_size, sequence_length)", "G")
+ .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.")
+ .TypeConstraint("G", {"tensor(int32)"}, "Constrain to integer types")
+ .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput));
constexpr const char* Decoder_Attention_doc = R"DOC(
This DecoderAttention supports self attention and cross attention, key and value cache, and key_padding_mask. The attention mask is not support at the moment.
Some boolean parameters are passed by runtime input for generic purpose
)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(DecoderAttention, 1,
- OpSchema()
- .SetDoc(Decoder_Attention_doc)
- .Attr("num_heads", "Number of attention heads", AttributeProto::INT)
- .Input(0, "query", "3D input tensor with shape (sequence_length, batch_size, hidden_size), hidden_size = num_heads * head_size", "T")
- .Input(1, "key", "3D input tensor with shape (total_sequence_length, batch_size, hidden_size)", "T")
- .Input(2, "q_weight", "2D input tensor with shape (hidden_size, hidden_size)", "T")
- .Input(3, "kv_weight", "2D input tensor with shape (hidden_size, 2 * hidden_size)", "T")
- .Input(4, "bias", "1D input tensor with shape (3 * hidden_size)", "T")
- .Input(5, "key_padding_mask", "2D input tensor with shape (batch_size, total_sequence_length)", "B", OpSchema::Optional)
- .Input(6, "key_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
- .Input(7, "value_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
- .Input(8, "static_kv", "If static_kv = true, cross-attention; else self-attention", "B")
- .Input(9, "use_past", "If use_past = true, use cache; else no cache", "B")
- .Input(10, "has_layer_state", "If has_layer_state = true, layer_state = {} or [a,b]; else layer_state = None", "B")
- .Input(11, "has_key_padding_mask", "has_key_padding_mask or not", "B")
- .Output(0, "output", "3D output tensor with shape (sequence_length, batch_size, hidden_size)", "T")
- .Output(1, "new_key_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
- .Output(2, "new_value_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float and float16 tensors.")
- .TypeConstraint("B", {"tensor(bool)"}, "Constrain key_padding_mask to bool tensors.")
- .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
- DecoderAttentionTypeAndShapeInference(ctx);
- }));
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ DecoderAttention, 1,
+ OpSchema()
+ .SetDoc(Decoder_Attention_doc)
+ .Attr("num_heads", "Number of attention heads", AttributeProto::INT)
+ .Input(0, "query", "3D input tensor with shape (sequence_length, batch_size, hidden_size), hidden_size = num_heads * head_size", "T")
+ .Input(1, "key", "3D input tensor with shape (total_sequence_length, batch_size, hidden_size)", "T")
+ .Input(2, "q_weight", "2D input tensor with shape (hidden_size, hidden_size)", "T")
+ .Input(3, "kv_weight", "2D input tensor with shape (hidden_size, 2 * hidden_size)", "T")
+ .Input(4, "bias", "1D input tensor with shape (3 * hidden_size)", "T")
+ .Input(5, "key_padding_mask", "2D input tensor with shape (batch_size, total_sequence_length)", "B", OpSchema::Optional)
+ .Input(6, "key_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
+ .Input(7, "value_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
+ .Input(8, "static_kv", "If static_kv = true, cross-attention; else self-attention", "B")
+ .Input(9, "use_past", "If use_past = true, use cache; else no cache", "B")
+ .Input(10, "has_layer_state", "If has_layer_state = true, layer_state = {} or [a,b]; else layer_state = None", "B")
+ .Input(11, "has_key_padding_mask", "has_key_padding_mask or not", "B")
+ .Output(0, "output", "3D output tensor with shape (sequence_length, batch_size, hidden_size)", "T")
+ .Output(1, "new_key_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
+ .Output(2, "new_value_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float and float16 tensors.")
+ .TypeConstraint("B", {"tensor(bool)"}, "Constrain key_padding_mask to bool tensors.")
+ .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
+ DecoderAttentionTypeAndShapeInference(ctx);
+ }));
constexpr const char* EmbedLayerNormalization_ver1_doc = R"DOC(
EmbedLayerNormalization is the fusion of embedding layer in BERT model, with optional mask processing.
@@ -313,56 +371,58 @@ and segment_emedding; the embeddings are added then applied layer normalization
The last input mask is optional. If mask is provided, mask index (that is position of first 0 in mask, or number of words)
will be calculated.)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(EmbedLayerNormalization, 1,
- OpSchema()
- .SetDoc(EmbedLayerNormalization_ver1_doc)
- .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon)
- .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1")
- .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional)
- .Input(2, "word_embedding", "2D with shape (,hidden_size)", "T")
- .Input(3, "position_embedding", "2D with shape (, hidden_size)", "T")
- .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T", OpSchema::Optional)
- .Input(5, "gamma", "1D gamma tensor for layer normalization with shape (hidden_size)", "T")
- .Input(6, "beta", "1D beta tensor for layer normalization with shape (hidden_size)", "T")
- .Input(7, "mask", "2D attention mask with shape (batch_size, sequence_length)", "T1", OpSchema::Optional)
- .Input(8, "position_ids", "2D position ids with shape (batch_size, sequence_length) or (1, sequence_length)", "T1", OpSchema::Optional)
- .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Output(1, "mask_index", "1D mask_index tensor with shape (batch_size)", "T1")
- .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional)
- .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types")
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.")
- .TypeAndShapeInferenceFunction(EmbedLayerNormalizationShapeInference));
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ EmbedLayerNormalization, 1,
+ OpSchema()
+ .SetDoc(EmbedLayerNormalization_ver1_doc)
+ .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon)
+ .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1")
+ .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional)
+ .Input(2, "word_embedding", "2D with shape (,hidden_size)", "T")
+ .Input(3, "position_embedding", "2D with shape (, hidden_size)", "T")
+ .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T", OpSchema::Optional)
+ .Input(5, "gamma", "1D gamma tensor for layer normalization with shape (hidden_size)", "T")
+ .Input(6, "beta", "1D beta tensor for layer normalization with shape (hidden_size)", "T")
+ .Input(7, "mask", "2D attention mask with shape (batch_size, sequence_length)", "T1", OpSchema::Optional)
+ .Input(8, "position_ids", "2D position ids with shape (batch_size, sequence_length) or (1, sequence_length)", "T1", OpSchema::Optional)
+ .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Output(1, "mask_index", "1D mask_index tensor with shape (batch_size)", "T1")
+ .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional)
+ .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types")
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.")
+ .TypeAndShapeInferenceFunction(EmbedLayerNormalizationShapeInference));
constexpr const char* FastGelu_ver1_doc = R"DOC(
GELU (Gaussian Error Linear Unit) approximation: Y=0.5*X*(1+tanh(0.797885*X+0.035677*X*X*X)) with an optional input of bias that will be added to X before GELU.)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(FastGelu, 1,
- OpSchema()
- .SetDoc(FastGelu_ver1_doc)
- .Input(0, "X", "input tensor", "T")
- .Input(1, "bias", "bias tensor", "T", OpSchema::Optional)
- .Output(0, "Y", "output tensor", "T")
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, "Constrain input and output types to float or half tensors.")
- .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)
- .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) {
- // fastgelu(x) =
- auto* tp = ctx.getInputType(0);
- if ((tp == nullptr) || (!tp->has_tensor_type()))
- return false;
- auto elem_type = (TensorProto_DataType)(tp->tensor_type().elem_type());
-
- // Optional input 1 indicates a bias to be added to input 0.
- auto hasBias = ctx.hasInput(1);
-
- FunctionBuilder builder(functionProto);
- builder
- .AddOpset("", 13)
- .Const("a", ToTensor(0.5, elem_type))
- .Const("b", ToTensor(0.797885, elem_type))
- .Const("c", ToTensor(0.035677, elem_type))
- .Const("one", ToTensor(1.0, elem_type))
- .Add(hasBias ? "X_bias = Add (X, bias)" : "X_bias = Identity (X)")
- .Add(R"(
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ FastGelu, 1,
+ OpSchema()
+ .SetDoc(FastGelu_ver1_doc)
+ .Input(0, "X", "input tensor", "T")
+ .Input(1, "bias", "bias tensor", "T", OpSchema::Optional)
+ .Output(0, "Y", "output tensor", "T")
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, "Constrain input and output types to float or half tensors.")
+ .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)
+ .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) {
+ // fastgelu(x) =
+ auto* tp = ctx.getInputType(0);
+ if ((tp == nullptr) || (!tp->has_tensor_type()))
+ return false;
+ auto elem_type = (TensorProto_DataType)(tp->tensor_type().elem_type());
+
+ // Optional input 1 indicates a bias to be added to input 0.
+ auto hasBias = ctx.hasInput(1);
+
+ FunctionBuilder builder(functionProto);
+ builder
+ .AddOpset("", 13)
+ .Const("a", ToTensor(0.5, elem_type))
+ .Const("b", ToTensor(0.797885, elem_type))
+ .Const("c", ToTensor(0.035677, elem_type))
+ .Const("one", ToTensor(1.0, elem_type))
+ .Add(hasBias ? "X_bias = Add (X, bias)" : "X_bias = Identity (X)")
+ .Add(R"(
T1 = Mul (X_bias, X_bias)
T2 = Mul (c, T1)
T3 = Add (b, T2)
@@ -373,55 +433,58 @@ ONNX_MS_OPERATOR_SET_SCHEMA(FastGelu, 1,
Y = Mul (a, T7)
)");
- schema.BuildFunction(functionProto);
- return true;
- }));
-
-ONNX_MS_OPERATOR_SET_SCHEMA(SkipLayerNormalization, 1,
- OpSchema()
- .SetDoc("Skip and Layer Normalization Fusion")
- .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon)
- .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T")
- .Input(3, "beta", "1D skip tensor with shape (hidden_size", "T", OpSchema::Optional)
- .Input(4, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional)
- .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional)
- .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional)
- .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional)
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")
- .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.")
- .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput));
-
-ONNX_MS_OPERATOR_SET_SCHEMA(SkipSimplifiedLayerNormalization, 1,
- OpSchema()
- .SetDoc("Skip and Root Mean Square Layer Normalization")
- .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon)
- .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T")
- .Input(3, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional)
- .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
- .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional)
- .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional)
- .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional)
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")
- .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.")
- .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput));
+ schema.BuildFunction(functionProto);
+ return true;
+ }));
+
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ SkipLayerNormalization, 1,
+ OpSchema()
+ .SetDoc("Skip and Layer Normalization Fusion")
+ .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon)
+ .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T")
+ .Input(3, "beta", "1D skip tensor with shape (hidden_size", "T", OpSchema::Optional)
+ .Input(4, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional)
+ .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional)
+ .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional)
+ .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional)
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")
+ .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.")
+ .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput));
+
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ SkipSimplifiedLayerNormalization, 1,
+ OpSchema()
+ .SetDoc("Skip and Root Mean Square Layer Normalization")
+ .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon)
+ .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T")
+ .Input(3, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional)
+ .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T")
+ .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional)
+ .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional)
+ .Output(3, "input_skip_bias_sum", "Sum of the input and skip inputs (and bias if it exists) with shape (batch_size, sequence_length, hidden_size).", "T", OpSchema::Optional)
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")
+ .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.")
+ .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput));
constexpr const char* NGramRepeatBlock_ver1_doc = R"DOC(
Enforce no repetition of n-grams. Scores are set to `-inf` for tokens that form a repeated n-gram if added to the back of the input_ids.
)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(NGramRepeatBlock, 1,
- OpSchema().SetDoc(NGramRepeatBlock_ver1_doc).Attr("ngram_size", "The NGram size.", AttributeProto::INT).Input(0, "input_ids", "2D input tensor with shape (batch_size, sequence_length)", "Tid").Input(1, "scores", "2D input tensor with shape (batch_size, vocab_size)", "T").Output(0, "scores_out", "2D output tensor with shape (batch_size, vocab_size)", "T").TypeConstraint("Tid", {"tensor(int64)"}, "Constrain indices to integer types").TypeConstraint("T", {"tensor(float)"}, "Constrain scores input and output types to float tensors.").TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
- propagateElemTypeFromInputToOutput(ctx, 1, 0);
- if (!hasInputShape(ctx, 1)) {
- return;
- }
- propagateShapeFromInputToOutput(ctx, 1, 0);
- }));
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ NGramRepeatBlock, 1,
+ OpSchema().SetDoc(NGramRepeatBlock_ver1_doc).Attr("ngram_size", "The NGram size.", AttributeProto::INT).Input(0, "input_ids", "2D input tensor with shape (batch_size, sequence_length)", "Tid").Input(1, "scores", "2D input tensor with shape (batch_size, vocab_size)", "T").Output(0, "scores_out", "2D output tensor with shape (batch_size, vocab_size)", "T").TypeConstraint("Tid", {"tensor(int64)"}, "Constrain indices to integer types").TypeConstraint("T", {"tensor(float)"}, "Constrain scores input and output types to float tensors.").TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
+ propagateElemTypeFromInputToOutput(ctx, 1, 0);
+ if (!hasInputShape(ctx, 1)) {
+ return;
+ }
+ propagateShapeFromInputToOutput(ctx, 1, 0);
+ }));
constexpr const char* BifurcationDetector_ver1_doc = R"DOC(
Component for aggressive decoding. Find the bifurcation index of predicted tokens, between source tokens,
@@ -436,45 +499,47 @@ Return the index of the start of the n-gram in source tokens.
No matching if found if src tokens contain multiple or zero matching n-grams. Return -1.
)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(BifurcationDetector, 1,
- OpSchema()
- .SetDoc(BifurcationDetector_ver1_doc)
- .Attr("min_ngram_size", "The minimum NGram size for suffix matching.", AttributeProto::INT, static_cast(1))
- .Attr("max_ngram_size", "The maximum NGram size for suffix matching.", AttributeProto::INT, static_cast(3))
- .Input(0, "src_tokens", "Encoder input ids.", "T")
- .Input(1, "cur_tokens", "Decoder input ids.", "T")
- .Input(2, "prev_suffix_match_idx", "Previous suffix match index", "T")
- .Input(3, "pred_tokens", "Predicted token ids from aggressive decoding", "T", OpSchema::Optional)
- .Output(0, "tokens", "Decoder input ids after merging predicted tokens", "T")
- .Output(1, "suffix_match_idx", "new suffix match index", "T")
- .TypeConstraint("T", {"tensor(int64)"}, "Constrain to integer types.")
- .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
- propagateElemTypeFromInputToOutput(ctx, 1, 0);
- propagateElemTypeFromInputToOutput(ctx, 2, 1);
- if (hasInputShape(ctx, 2)) {
- propagateShapeFromInputToOutput(ctx, 2, 1);
- }
- // output tokens lengths is dynamic as it depends on the bifurcation index of predicted tokens and source tokens,
- // and current tokens length.
- // tokens_length = cur_tokens_length + bifurcation_index + 1.
- }));
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ BifurcationDetector, 1,
+ OpSchema()
+ .SetDoc(BifurcationDetector_ver1_doc)
+ .Attr("min_ngram_size", "The minimum NGram size for suffix matching.", AttributeProto::INT, static_cast(1))
+ .Attr("max_ngram_size", "The maximum NGram size for suffix matching.", AttributeProto::INT, static_cast(3))
+ .Input(0, "src_tokens", "Encoder input ids.", "T")
+ .Input(1, "cur_tokens", "Decoder input ids.", "T")
+ .Input(2, "prev_suffix_match_idx", "Previous suffix match index", "T")
+ .Input(3, "pred_tokens", "Predicted token ids from aggressive decoding", "T", OpSchema::Optional)
+ .Output(0, "tokens", "Decoder input ids after merging predicted tokens", "T")
+ .Output(1, "suffix_match_idx", "new suffix match index", "T")
+ .TypeConstraint("T", {"tensor(int64)"}, "Constrain to integer types.")
+ .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
+ propagateElemTypeFromInputToOutput(ctx, 1, 0);
+ propagateElemTypeFromInputToOutput(ctx, 2, 1);
+ if (hasInputShape(ctx, 2)) {
+ propagateShapeFromInputToOutput(ctx, 2, 1);
+ }
+ // output tokens lengths is dynamic as it depends on the bifurcation index of predicted tokens and source tokens,
+ // and current tokens length.
+ // tokens_length = cur_tokens_length + bifurcation_index + 1.
+ }));
constexpr const char* GemmFastGelu_ver1_doc = R"DOC(
It's a fusion of MatMul and FastGelu.)DOC";
-ONNX_MS_OPERATOR_SET_SCHEMA(GemmFastGelu, 1,
- OpSchema()
- .SetDoc(GemmFastGelu_ver1_doc)
- .Input(0, "X", "input tensor", "T")
- .Input(1, "W", "input tensor", "T")
- .Input(2, "bias", "bias tensor", "T", OpSchema::Optional)
- .Output(0, "Y", "output tensor", "T")
- .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"},
- "Constrain input and output types to float or half tensors.")
- .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
- ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0);
- ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1);
- }));
+ONNX_MS_OPERATOR_SET_SCHEMA(
+ GemmFastGelu, 1,
+ OpSchema()
+ .SetDoc(GemmFastGelu_ver1_doc)
+ .Input(0, "X", "input tensor", "T")
+ .Input(1, "W", "input tensor", "T")
+ .Input(2, "bias", "bias tensor", "T", OpSchema::Optional)
+ .Output(0, "Y", "output tensor", "T")
+ .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"},
+ "Constrain input and output types to float or half tensors.")
+ .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {
+ ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0);
+ ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1);
+ }));
constexpr const char* RemovePadding_ver1_doc = R"DOC(
Compress transformer input by removing paddings. It assumes padding is on the right side of sequence.
diff --git a/onnxruntime/core/graph/contrib_ops/ms_opset.h b/onnxruntime/core/graph/contrib_ops/ms_opset.h
index 5b818f6da61f0..df30bdc6a319e 100644
--- a/onnxruntime/core/graph/contrib_ops/ms_opset.h
+++ b/onnxruntime/core/graph/contrib_ops/ms_opset.h
@@ -56,6 +56,7 @@ class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ComplexMul);
class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ComplexMulConj);
class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ConvTransposeWithDynamicPads);
class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, CropAndResize);
+class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, CrossAttention);
class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DecoderAttention);
class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, EmbedLayerNormalization);
class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ExpandDims);
@@ -140,6 +141,7 @@ class OpSet_Microsoft_ver1 {
fn(GetOpSchema());
fn(GetOpSchema());
fn(GetOpSchema());
+ fn(GetOpSchema());
fn(GetOpSchema());
fn(GetOpSchema());
fn(GetOpSchema());
diff --git a/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc
index 7588c37fa5f87..c7bc516191d24 100644
--- a/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc
+++ b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc
@@ -113,16 +113,10 @@ void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int p
// The other inputs may vary in Attention and QAttention. For example, past_input_index is 4 for Attention,
// and 8 for QAttention.
//
- // When weights is avaiable:
- // Input 0 has 3D shape (batch_size, sequence_length, input_hidden_size)
- // INput 1 has 2D shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size)
- // Input 2 has 1D shape (hidden_size + hidden_size + v_hidden_size)
- // When weights is not avaiable (supported by Attention but not in QAttention):
- // Input 0 (query) has 3D shape (batch_size, sequence_length, hidden_size)
- // Input 2 (bias) has 1D shape (hidden_size + hidden_size + v_hidden_size)
- // Input 4 (past) has shape (2, batch_size, num_heads, past_sequence_length, head_size)
- // Input 6 (value) has shape (batch_size, kv_sequence_length, v_hidden_size)
- //
+ // Input 0 has 3D shape (batch_size, sequence_length, input_hidden_size)
+ // INput 1 has 2D shape (input_hidden_size, hidden_size + hidden_size + v_hidden_size)
+ // Input 2 has 1D shape (hidden_size + hidden_size + v_hidden_size)
+ // Input 4 or 8 (past) has shape (2, batch_size, num_heads, past_sequence_length, head_size)
// Output 0 and 1 are output and present
// Type inference
@@ -178,22 +172,8 @@ void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int p
if (past_present_share_buffer) {
propagateElemTypeFromInputToOutput(ctx, past_input_index, 1);
} else {
- int64_t total_sequence_length = -1;
- if (!hasInputShape(ctx, 1)) { // no weights
- if (hasInputShape(ctx, 6)) {
- auto& key_shape = getInputShape(ctx, 6);
- auto& key_dims = key_shape.dim();
- if (key_dims.size() == 3 && key_dims[1].has_dim_value()) {
- total_sequence_length = key_dims[1].dim_value(); // kv_sequence_length
- }
- }
- } else {
- if (input_dims[1].has_dim_value()) {
- total_sequence_length = input_dims[1].dim_value();
- }
- }
-
- if (total_sequence_length >= 0 && past_dims[3].has_dim_value()) {
+ if (input_dims[1].has_dim_value() && past_dims[3].has_dim_value()) {
+ int64_t total_sequence_length = input_dims[1].dim_value();
total_sequence_length += past_shape.dim(3).dim_value();
ONNX_NAMESPACE::TensorShapeProto present_shape;
diff --git a/onnxruntime/core/providers/cpu/cpu_provider_shared.cc b/onnxruntime/core/providers/cpu/cpu_provider_shared.cc
index 4013a8f156d57..6afcaa821a8f0 100644
--- a/onnxruntime/core/providers/cpu/cpu_provider_shared.cc
+++ b/onnxruntime/core/providers/cpu/cpu_provider_shared.cc
@@ -193,19 +193,17 @@ struct ProviderHostCPUImpl : ProviderHostCPU {
Status AttentionBase__CheckInputs(const contrib::AttentionBase* p,
const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index,
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
const int max_threads_per_block,
const Tensor* past_seq_len) override {
return p->contrib::AttentionBase::CheckInputs(input_shape, weights_shape, bias_shape, mask_index, past,
extra_add_qk,
- key, value, parameters,
+ parameters,
max_threads_per_block,
past_seq_len);
}
@@ -253,7 +251,6 @@ struct ProviderHostCPUImpl : ProviderHostCPU {
Status Sampling__Compute(const contrib::transformers::Sampling* p, OpKernelContext* ctx) override { return p->contrib::transformers::Sampling::Compute(ctx); }
Status Sampling__SetupSubgraphExecutionInfo(contrib::transformers::Sampling* p, const SessionState& session_state, const std::string& attribute_name, const SessionState& subgraph_session_state) override { return p->contrib::transformers::Sampling::SetupSubgraphExecutionInfo(session_state, attribute_name, subgraph_session_state); }
-
#ifdef ENABLE_ATEN
Status ATen__Compute(const contrib::ATen* p, OpKernelContext* p_ctx) override { return p->ATen::Compute(p_ctx); }
#endif
diff --git a/onnxruntime/core/providers/cpu/cpu_provider_shared.h b/onnxruntime/core/providers/cpu/cpu_provider_shared.h
index 7bdb101da15f1..28400e9d932ec 100644
--- a/onnxruntime/core/providers/cpu/cpu_provider_shared.h
+++ b/onnxruntime/core/providers/cpu/cpu_provider_shared.h
@@ -10,7 +10,7 @@ namespace transformers {
class BeamSearch;
class GreedySearch;
class Sampling;
-}
+} // namespace transformers
} // namespace contrib
class GatherBase__Prepare;
@@ -130,23 +130,21 @@ struct ProviderHostCPU {
virtual Status bias_gelu_helper__CheckInputs(const OpKernelContext* context) = 0;
virtual Status LongformerAttentionBase__CheckInputs(const contrib::LongformerAttentionBase* p,
- const TensorShape& input_shape,
- const TensorShape& weights_shape,
- const TensorShape& bias_shape,
- const TensorShape& mask_shape,
- const TensorShape& global_weights_shape,
- const TensorShape& global_bias_shape,
- const TensorShape& global_shape) = 0;
+ const TensorShape& input_shape,
+ const TensorShape& weights_shape,
+ const TensorShape& bias_shape,
+ const TensorShape& mask_shape,
+ const TensorShape& global_weights_shape,
+ const TensorShape& global_bias_shape,
+ const TensorShape& global_shape) = 0;
virtual Status AttentionBase__CheckInputs(const contrib::AttentionBase* p,
const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index,
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
const int max_threads_per_block,
const Tensor* past_seq_len) = 0;
@@ -268,7 +266,7 @@ inline void VerifyLogitWeightAndLabelShape(const TensorShape& logit_shape, const
inline void GetNDCFromLogitAndLabelShape(const TensorShape& logit_shape, const TensorShape& label_shape, int64_t& N_D, int64_t& C) { g_host_cpu.contrib__GetNDCFromLogitAndLabelShape(logit_shape, label_shape, N_D, C); }
inline void GetPermutationAndShape(bool ncd_to_ndc, const TensorShape& tensor_shape, TensorShapeVector& new_shape, std::vector& permutations) { g_host_cpu.contrib__GetPermutationAndShape(ncd_to_ndc, tensor_shape, new_shape, permutations); }
inline Status PrepareForTrainingCompute(const TensorShape& input_shape, int num_outputs, int64_t& axis, int& before_dims, int& after_dims_including_split_axis, int& after_dims_excluding_split, std::vector& split_sizes) { return g_host_cpu.contrib__PrepareForTrainingCompute(input_shape, num_outputs, axis, before_dims, after_dims_including_split_axis, after_dims_excluding_split, split_sizes); }
-} // namespace contrib
+} // namespace contrib
#endif
#ifdef ENABLE_TRAINING
diff --git a/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc b/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc
index 3c27719cf599f..d2f797153ed50 100644
--- a/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc
+++ b/onnxruntime/core/providers/shared_library/provider_bridge_provider.cc
@@ -562,19 +562,16 @@ Status LongformerAttentionBase::CheckInputs(const TensorShape& input_shape,
}
Status AttentionBase::CheckInputs(const TensorShape& input_shape,
- const TensorShape* weights_shape,
+ const TensorShape& weights_shape,
const TensorShape& bias_shape,
const Tensor*& mask_index,
const Tensor* past,
const Tensor* extra_add_qk,
- const Tensor* key,
- const Tensor* value,
void* parameters,
const int max_threads_per_block,
const Tensor* past_seq_len) const {
return g_host_cpu.AttentionBase__CheckInputs(this, input_shape, weights_shape, bias_shape,
- mask_index, past, extra_add_qk,
- key, value, parameters,
+ mask_index, past, extra_add_qk, parameters,
max_threads_per_block, past_seq_len);
}
Tensor* AttentionBase::GetPresent(OpKernelContext* context, const Tensor* past, int batch_size, int head_size,
diff --git a/onnxruntime/python/tools/symbolic_shape_infer.py b/onnxruntime/python/tools/symbolic_shape_infer.py
index 210084895ff0f..dd8143913cf2d 100755
--- a/onnxruntime/python/tools/symbolic_shape_infer.py
+++ b/onnxruntime/python/tools/symbolic_shape_infer.py
@@ -190,6 +190,7 @@ def __init__(self, int_max, auto_merge, guess_output_rank, verbose, prefix=""):
# contrib ops:
"Attention": self._infer_Attention,
"BiasGelu": self._infer_BiasGelu,
+ "CrossAttention": self._infer_CrossAttention,
"EmbedLayerNormalization": self._infer_EmbedLayerNormalization,
"FastGelu": self._infer_FastGelu,
"Gelu": self._infer_Gelu,
@@ -1993,6 +1994,22 @@ def _infer_Attention(self, node):
def _infer_BiasGelu(self, node):
self._propagate_shape_and_type(node)
+ def _infer_CrossAttention(self, node):
+ # Input 0 (query) has shape (batch_size, sequence_length, hidden_size)
+ # Input 1 (key) has shape (batch_size, kv_sequence_length, hidden_size)
+ # Input 2 (value) has shape (batch_size, kv_sequence_length, v_hidden_size)
+ # Output 0 has shape (batch_size, sequence_length, v_hidden_size)
+ query_shape = self._get_shape(node, 0)
+ value_shape = self._get_shape(node, 2)
+
+ assert len(query_shape) == 3 and len(value_shape) == 3
+ output_shape = query_shape
+ output_shape[2] = value_shape[2]
+
+ output_dtype = self.known_vi_[node.input[0]].type.tensor_type.elem_type
+ vi = self.known_vi_[node.output[0]]
+ vi.CopyFrom(helper.make_tensor_value_info(node.output[0], output_dtype, output_shape))
+
def _infer_FastGelu(self, node):
self._propagate_shape_and_type(node)
diff --git a/onnxruntime/test/contrib_ops/attention_op_test.cc b/onnxruntime/test/contrib_ops/attention_op_test.cc
index 29f425dc28fd3..41a2310cdbe71 100644
--- a/onnxruntime/test/contrib_ops/attention_op_test.cc
+++ b/onnxruntime/test/contrib_ops/attention_op_test.cc
@@ -10,15 +10,8 @@
#include "contrib_ops/cpu/bert/attention_common.h"
namespace onnxruntime {
+using contrib::AttentionMaskType;
namespace test {
-enum MaskIndexType {
- kMaskIndexEnd = 0, // [batch_size]
- kMaskIndexEndAndStart, // [2 * batch_size]
- kMaskRaw, // [batch_size, total_sequence_length]
- kMask3D, // [batch_size, sequence_length, total_sequence_length]
- kMaskDummy, // Dummy mask with shape [1, 1] or [batch_size, 1]
- kMask4D // Megatron causal mask with shape [batch_size, 1, max_sequence_length, max_sequence_length]
-};
template
std::vector ReorderToKvCache(
@@ -58,7 +51,7 @@ static void RunAttentionTest(
int past_sequence_length = 0,
const std::vector* past_data = nullptr,
const std::vector* present_data = nullptr,
- MaskIndexType mask_index_type = kMaskIndexEnd,
+ AttentionMaskType mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN,
int input_hidden_size = 0,
int max_sequence_length = 0,
const bool disable_cpu = false,
@@ -67,8 +60,6 @@ static void RunAttentionTest(
std::vector qkv_sizes = {},
const std::vector& extra_add_data = {},
int kv_sequence_length = 0,
- const std::vector* key_data = nullptr,
- const std::vector* value_data = nullptr,
bool past_present_share_buffer = false) {
input_hidden_size = (input_hidden_size == 0 ? hidden_size : input_hidden_size); // By default, no pruning.
kv_sequence_length = (kv_sequence_length == 0 ? sequence_length : kv_sequence_length);
@@ -106,12 +97,7 @@ static void RunAttentionTest(
std::vector output_dims = {batch_size, sequence_length, v_hidden_size};
if (use_float16) {
tester.AddInput("input", input_dims, ToFloat16(input_data));
-
- if (weights_data.empty()) {
- tester.AddOptionalInputEdge();
- } else {
- tester.AddInput("weight", weights_dims, ToFloat16(weights_data), is_weights_constant);
- }
+ tester.AddInput("weight", weights_dims, ToFloat16(weights_data), is_weights_constant);
if (bias_data.size()) {
tester.AddInput("bias", bias_dims, ToFloat16(bias_data));
} else {
@@ -120,11 +106,7 @@ static void RunAttentionTest(
tester.AddOutput("output", output_dims, ToFloat16(output_data));
} else {
tester.AddInput("input", input_dims, input_data);
- if (weights_data.empty()) {
- tester.AddOptionalInputEdge();
- } else {
- tester.AddInput("weight", weights_dims, weights_data, is_weights_constant);
- }
+ tester.AddInput("weight", weights_dims, weights_data, is_weights_constant);
if (bias_data.size()) {
tester.AddInput("bias", bias_dims, bias_data);
} else {
@@ -140,23 +122,23 @@ static void RunAttentionTest(
std::vector mask_index_dims_5 = {batch_size, sequence_length, total_sequence_length};
std::vector mask_index_dims_6 = {batch_size, 1, max_sequence_length, max_sequence_length};
std::vector mask_index_dims;
- switch (mask_index_type) {
- case kMaskIndexEnd:
+ switch (mask_type) {
+ case AttentionMaskType::MASK_1D_KEY_SEQ_LEN:
mask_index_dims = mask_index_dims_1;
break;
- case kMaskIndexEndAndStart:
+ case AttentionMaskType::MASK_1D_END_START:
mask_index_dims = mask_index_dims_2;
break;
- case kMaskRaw:
+ case AttentionMaskType::MASK_2D_KEY_PADDING:
mask_index_dims = mask_index_dims_3;
break;
- case kMaskDummy:
+ case AttentionMaskType::MASK_2D_DUMMY:
mask_index_dims = mask_index_dims_4;
break;
- case kMask3D:
+ case AttentionMaskType::MASK_3D_ATTENTION:
mask_index_dims = mask_index_dims_5;
break;
- case kMask4D:
+ case AttentionMaskType::MASK_4D_MEGATRON:
mask_index_dims = mask_index_dims_6;
break;
default:
@@ -184,7 +166,7 @@ static void RunAttentionTest(
}
tester.AddOutput("present", present_dims, *present_data);
}
- } else { // past_present_share_buffer
+ } else { // past_present_share_buffer
std::vector cache_dims = {2, batch_size, number_of_heads, max_sequence_length, head_size};
if (use_float16) {
auto past_cache = ReorderToKvCache(ToFloat16(*past_data).data(), batch_size, past_sequence_length,
@@ -226,37 +208,11 @@ static void RunAttentionTest(
}
}
- std::vector key_dims = {batch_size, kv_sequence_length, hidden_size};
- std::vector value_dims = {batch_size, kv_sequence_length, v_hidden_size};
- if (use_float16) {
- if (key_data != nullptr) {
- tester.AddInput("key", key_dims, ToFloat16(*key_data));
- } else {
- tester.AddOptionalInputEdge();
- }
- if (value_data != nullptr) {
- tester.AddInput("value", value_dims, ToFloat16(*value_data));
- } else {
- tester.AddOptionalInputEdge();
- }
- } else {
- if (key_data != nullptr) {
- tester.AddInput("key", key_dims, *key_data);
- } else {
- tester.AddOptionalInputEdge();
- }
- if (value_data != nullptr) {
- tester.AddInput("value", value_dims, *value_data);
- } else {
- tester.AddOptionalInputEdge();
- }
- }
-
if (past_present_share_buffer) {
- std::vector arr_past_sequence_len(1, past_sequence_length);
- tester.AddInput("past_sequence_length", {1}, arr_past_sequence_len);
+ std::vector arr_past_sequence_len(1, past_sequence_length);
+ tester.AddInput("past_sequence_length", {1}, arr_past_sequence_len);
} else {
- tester.AddOptionalInputEdge();
+ tester.AddOptionalInputEdge();
}
if (enable_cuda) {
@@ -295,7 +251,7 @@ static void RunAttentionTest(
int past_sequence_length = 0,
const std::vector* past_data = nullptr,
const std::vector* present_data = nullptr,
- MaskIndexType mask_index_type = kMaskIndexEnd,
+ AttentionMaskType mask_type = AttentionMaskType::MASK_1D_KEY_SEQ_LEN,
int input_hidden_size = 0,
int max_sequence_length = 0,
const bool disable_cpu = false,
@@ -304,21 +260,19 @@ static void RunAttentionTest(
const std::vector qkv_sizes = {},
const std::vector& extra_add_data = {},
int kv_sequence_length = 0,
- const std::vector* key_data = nullptr,
- const std::vector* value_data = nullptr,
bool past_present_share_buffer = false) {
RunAttentionTest(input_data, weights_data, false, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
use_float16, is_unidirectional, use_past_state, past_sequence_length,
- past_data, present_data, mask_index_type, input_hidden_size, max_sequence_length,
+ past_data, present_data, mask_type, input_hidden_size, max_sequence_length,
disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_data,
- kv_sequence_length, key_data, value_data, past_present_share_buffer);
+ kv_sequence_length, past_present_share_buffer);
RunAttentionTest(input_data, weights_data, true, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
use_float16, is_unidirectional, use_past_state, past_sequence_length,
- past_data, present_data, mask_index_type, input_hidden_size, max_sequence_length,
+ past_data, present_data, mask_type, input_hidden_size, max_sequence_length,
disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_data,
- kv_sequence_length, key_data, value_data, past_present_share_buffer);
+ kv_sequence_length, past_present_share_buffer);
}
TEST(AttentionTest, AttentionBatch1) {
@@ -387,7 +341,7 @@ TEST(AttentionTest, AttentionBatch1WithQKVAttr1) {
constexpr bool disable_rocm = true;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0,
+ false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0,
0, false, false, disable_rocm, qkv_sizes);
}
@@ -425,7 +379,7 @@ TEST(AttentionTest, AttentionBatch1WithQKVAttr2) {
constexpr bool disable_rocm = true;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0,
+ false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0,
0, false, false, disable_rocm, qkv_sizes);
}
@@ -465,7 +419,7 @@ TEST(AttentionTest, AttentionBatch1ExtraAdd) {
constexpr bool disable_rocm = false;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0,
+ false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0,
0, disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_qk);
}
@@ -510,7 +464,7 @@ TEST(AttentionTest, AttentionBatch2ExtraAdd) {
constexpr bool disable_rocm = false;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- false, false, false, 0, nullptr, nullptr, kMaskIndexEnd, 0,
+ false, false, false, 0, nullptr, nullptr, AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0,
0, disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_qk);
}
@@ -848,1410 +802,1410 @@ void RawAttentionEmptyPastState(bool past_present_share_buffer) {
if (!past_present_share_buffer) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data);
} else {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data,
- kMaskIndexEnd, 0, sequence_length, true, false, true, {}, {}, 0, nullptr, nullptr,
- true);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data,
+ AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, sequence_length, true, false, true, {}, {}, 0,
+ true);
}
}
-#ifndef ENABLE_TRAINING // TRT fused attention is enabled only on non-training builds
-static void GetWeightAndBiasForHiddenSize64(std::vector &weight_data, std::vector& bias_data){
+#ifndef ENABLE_TRAINING // TRT fused attention is enabled only on non-training builds
+static void GetWeightAndBiasForHiddenSize64(std::vector& weight_data, std::vector& bias_data) {
weight_data = {
- -0.004707f, -0.006775f, 0.0009236f, 0.003067f, -0.00806f, 0.00779f, 0.0004425f, 0.00846f, 0.00048f,
- 0.00999f, 0.00115f, 0.00226f, -0.00705f, 0.004467f, 0.001455f, -0.006073f, 0.00465f, -0.00861f,
- -0.002779f, 0.00883f, -0.002996f, 0.008354f, -0.003141f, -0.007374f, 0.001634f, -0.009544f, 0.00198f,
- 0.005894f, 0.001434f, 0.001589f, 0.00921f, -0.00507f, 0.00448f, 0.0002687f, -0.003147f, 0.001627f,
- -0.005608f, 0.006516f, 0.00935f, -0.004715f, 0.00833f, -0.00563f, 0.00281f, -0.005875f, 0.000629f,
- 0.00993f, -0.002695f, 0.004486f, -0.00528f, -0.003807f, 0.00521f, 0.00010276f, 0.003307f, 0.000701f,
- 0.0001151f, 0.00649f, 0.00934f, -0.001063f, 0.002327f, -0.0002892f, 0.003317f, -0.003506f, 0.004875f,
- 0.0006566f, 0.000953f, -0.005898f, 0.00326f, 0.00877f, 0.00923f, -0.00622f, -0.006588f, 0.007748f,
- -0.001789f, 0.00002104f, 0.002937f, 0.00816f, 0.005833f, -0.006634f, 0.006985f, 0.00951f, 0.002947f,
- 0.001871f, -0.009445f, 0.0004554f, -0.006294f, -0.00649f, 0.00917f, -0.004158f, -0.00462f, -0.001531f,
- -0.00658f, -0.00364f, -0.00462f, 0.003723f, 0.009636f, 0.003305f, -0.00984f, 0.006126f, -0.0010395f,
- -0.00852f, 0.006287f, -0.002949f, -0.004f, -0.002415f, 0.0009527f, 0.001624f, 0.00364f, 0.007088f,
- -0.00717f, -0.009224f, -0.00997f, 0.001726f, -0.00877f, -0.000602f, 0.0089f, 0.009026f, -0.009514f,
- 0.00852f, 0.0003986f, -0.006855f, -0.00583f, 0.003622f, -0.00526f, 0.001879f, -0.007053f, 0.00006664f,
- 0.00972f, -0.000457f, -0.00759f, -0.007107f, 0.002337f, -0.004204f, -0.005676f, 0.00985f, 0.00978f,
- -0.004486f, 0.005093f, -0.009285f, 0.004093f, -0.00682f, 0.00963f, -0.006954f, -0.003674f, -0.003822f,
- 0.00202f, -0.004635f, -0.0009174f, -0.001202f, 0.00639f, -0.004356f, -0.00741f, -0.00586f, -0.00319f,
- -0.002506f, 0.005047f, 0.007156f, -0.00765f, 0.00702f, 0.007477f, 0.000626f, -0.001587f, -0.005455f,
- 0.005814f, -0.002127f, 0.00834f, 0.001279f, 0.007996f, -0.005787f, -0.006924f, -0.004063f, -0.00435f,
- -0.00427f, 0.0002115f, 0.00981f, -0.00138f, -0.007965f, -0.004536f, -0.003431f, 0.00416f, 0.005894f,
- 0.006054f, 0.00907f, 0.00388f, -0.006763f, 0.001692f, -0.00797f, -0.00691f, 0.00798f, 0.00867f,
- -0.00788f, 0.002062f, -0.003761f, 0.009834f, -0.002445f, -0.00613f, 0.0096f, -0.005466f, -0.0008426f,
- 0.0002431f, -0.009995f, 0.003736f, -0.0071f, -0.003593f, 0.006386f, 0.005997f, -0.003328f, 0.007515f,
- -0.008675f, 0.00547f, -0.00388f, 0.00473f, 0.00362f, -0.00469f, 0.006958f, -0.001264f, -0.003887f,
- -0.004276f, -0.000396f, 0.00453f, -0.00465f, -0.007343f, -0.005787f, -0.00927f, -0.006058f, -0.004566f,
- -0.009056f, -0.00891f, 0.007633f, 0.001098f, -0.003368f, -0.007214f, -0.00905f, -0.00898f, -0.008736f,
- -0.00948f, 0.003162f, 0.004402f, -0.006245f, -0.00515f, -0.00378f, -0.003248f, -0.00304f, 0.001834f,
- -0.002672f, 0.005234f, -0.007706f, 0.0084f, 0.00832f, -0.00904f, -0.00596f, 0.009926f, -0.00869f,
- 0.001513f, 0.00728f, 0.001057f, 0.001452f, 0.00785f, 0.001203f, -0.004528f, 0.006573f, 0.003656f,
- 0.005966f, -0.006985f, 0.002844f, 0.00883f, 0.0004826f, 0.003279f, 0.006916f, 0.00263f, -0.002415f,
- -0.001928f, -0.0004041f, -0.004593f, -0.00204f, 0.007965f, -0.008224f, -0.00591f, -0.002144f, 0.000688f,
- 0.001676f, -0.00949f, -0.003304f, -0.007637f, 0.00973f, -0.008224f, -0.001211f, -0.003345f, 0.002115f,
- -0.00615f, -0.004955f, -0.00803f, 0.00807f, -0.0006227f, 0.00845f, -0.006916f, 0.004353f, -0.000934f,
- 0.005604f, -0.00825f, -0.004402f, -0.00441f, 0.00257f, -0.008415f, 0.006542f, 0.001357f, -0.004974f,
- -0.00993f, 0.0001058f, 0.002855f, -0.0081f, 0.001513f, -0.00191f, 0.0004003f, 0.003874f, -0.0015545f,
- -0.00736f, 0.006718f, 0.005135f, 0.003859f, -0.0054f, 0.00993f, 0.000952f, 0.00228f, 0.001163f,
- 0.00918f, 0.00582f, 0.00308f, 0.008415f, 0.00889f, 0.00011665f, -0.007362f, -0.009926f, -0.00784f,
- 0.005817f, -0.002918f, 0.005043f, -0.003029f, 0.0085f, -0.007362f, -0.00857f, 0.006832f, -0.00055f,
- 0.008835f, -0.00522f, -0.002085f, 0.00353f, -0.007706f, 0.006283f, 0.004414f, -0.002405f, -0.003002f,
- -0.00946f, -0.001164f, -0.004177f, 0.00834f, -0.001576f, 0.00855f, 0.004025f, 0.000285f, -0.004486f,
- -0.00703f, -0.003061f, 0.003452f, 0.001276f, 0.008446f, -0.001302f, 0.004333f, -0.00898f, -0.002445f,
- -0.006523f, 0.0004334f, -0.003206f, -0.00349f, -0.005497f, -0.007786f, 0.007397f, 0.00925f, 0.002077f,
- 0.004074f, 0.006626f, -0.001693f, -0.0005975f, -0.005074f, 0.00324f, 0.00925f, -0.009735f, -0.007133f,
- -0.0064f, -0.00455f, -0.003153f, 0.0056f, -0.006073f, -0.00274f, -0.00587f, -0.005066f, 0.003595f,
- -0.00932f, -0.005f, 0.00569f, 0.008415f, 0.006866f, 0.003952f, -0.009285f, -0.008064f, 0.00824f,
- 0.0000188f, -0.001233f, 0.005726f, -0.0007806f, -0.008385f, -0.001798f, -0.008095f, 0.00986f, 0.006924f,
- 0.00712f, -0.00964f, -0.00797f, 0.00943f, -0.007416f, 0.007904f, 0.006893f, 0.00799f, -0.007164f,
- 0.007214f, 0.00931f, 0.000645f, -0.0058f, 0.009254f, -0.002079f, 0.000969f, 0.009636f, -0.002365f,
- -0.002348f, 0.007053f, -0.002796f, -0.007652f, -0.001554f, 0.00402f, -0.002838f, -0.006958f, 0.000331f,
- 0.006435f, -0.004036f, 0.007595f, 0.00812f, 0.00637f, 0.007732f, -0.006916f, 0.003952f, -0.008064f,
- -0.00928f, 0.00468f, -0.000512f, -0.006287f, 0.00607f, -0.001904f, -0.00458f, 0.003412f, 0.000382f,
- -0.00822f, -0.00486f, 0.0008364f, 0.0004992f, 0.003582f, 0.0088f, 0.002453f, -0.00856f, 0.00886f,
- 0.0077f, 0.0004592f, -0.001417f, -0.005142f, 0.004696f, -0.003576f, 0.004807f, -0.00851f, -0.006245f,
- -0.003649f, -0.0001528f, 0.004017f, -0.006123f, -0.004158f, -0.00445f, 0.004864f, -0.0005493f, 0.00399f,
- -0.007244f, 0.003246f, 0.00407f, 0.00929f, -0.006706f, 0.0084f, -0.003496f, 0.00843f, 0.00514f,
- 0.002714f, -0.0001633f, -0.00866f, 0.004837f, -0.003016f, 0.00593f, -0.00849f, 0.001287f, -0.007706f,
- 0.001479f, -0.002241f, 0.00843f, -0.001236f, -0.007572f, -0.004448f, -0.001927f, 0.001139f, 0.004982f,
- -0.00673f, -0.000568f, 0.009346f, 0.000487f, 0.001392f, -0.009605f, 0.00944f, 0.002022f, 0.00617f,
- 0.00472f, 0.009575f, -0.006416f, 0.004265f, 0.002005f, 0.000578f, 0.002592f, 0.002707f, -0.005333f,
- -0.00928f, -0.00935f, -0.00833f, -0.00205f, -0.005795f, -0.001061f, -0.003605f, 0.003078f, 0.00592f,
- 0.0006485f, -0.00504f, 0.002682f, 0.00826f, -0.003983f, -0.00493f, 0.00406f, -0.00838f, 0.0032f,
- 0.0009565f, 0.00471f, 0.00504f, 0.004612f, -0.002768f, 0.00791f, -0.002892f, 0.00471f, 0.00588f,
- 0.005978f, -0.005203f, -0.009995f, 0.009346f, -0.00802f, 0.003807f, 0.001364f, -0.00736f, 0.009285f,
- -0.001995f, 0.002632f, -0.00904f, 0.007042f, -0.00326f, 0.006516f, 0.00492f, 0.00734f, -0.00867f,
- -0.002512f, -0.003729f, 0.0027f, -0.002659f, -0.009514f, -0.005634f, -0.001473f, -0.00545f, 0.003551f,
- 0.001995f, -0.003704f, 0.006386f, 0.003313f, -0.002823f, 0.00105f, 0.00993f, 0.00951f, -0.007275f,
- -0.002213f, -0.003418f, 0.00599f, 0.00948f, 0.007572f, -0.00944f, -0.00924f, 0.00011665f, 0.0069f,
- -0.00544f, 0.007515f, -0.006832f, -0.007774f, 0.00853f, -0.0007486f, -0.00643f, -0.0001878f, -0.00849f,
- -0.007603f, 0.0016985f, -0.00986f, 0.003975f, -0.002176f, -0.009796f, 0.004795f, -0.00699f, -0.006725f,
- 0.00109f, 0.004498f, -0.00569f, -0.00584f, 0.004047f, -0.001022f, 0.001479f, -0.00751f, -0.002579f,
- -0.004086f, 0.007603f, -0.0000106f, 0.007366f, 0.0029f, -0.003498f, 0.007385f, -0.00759f, -0.005886f,
- 0.00476f, -0.0003812f, -0.00008225f, 0.00998f, 0.002716f, -0.00925f, -0.00439f, -0.000902f, -0.00296f,
- -0.007347f, -0.005882f, -0.001428f, -0.002855f, -0.003311f, -0.000793f, -0.00403f, -0.00829f, -0.00999f,
- -0.00838f, 0.008804f, 0.004124f, -0.005882f, 0.001305f, 0.00511f, 0.00799f, -0.00953f, -0.008575f,
- -0.00556f, -0.00858f, 0.00565f, 0.00908f, 0.00591f, 0.0007925f, -0.00912f, -0.005894f, -0.002588f,
- -0.00957f, -0.00682f, 0.002174f, 0.00706f, 0.00528f, 0.0069f, -0.004517f, -0.002382f, 0.005596f,
- 0.00645f, 0.00956f, 0.00796f, 0.007706f, 0.004818f, 0.002308f, 0.001367f, -0.004177f, 0.00842f,
- 0.007416f, -0.00404f, -0.009094f, 0.00447f, -0.00284f, -0.002499f, -0.0001582f, 0.001681f, 0.004993f,
- -0.0059f, 0.007282f, -0.00809f, 0.00927f, 0.004948f, 0.009766f, -0.00618f, -0.001559f, -0.00461f,
- 0.001866f, 0.00827f, -0.00785f, -0.003101f, 0.00977f, -0.00444f, -0.00916f, -0.0008535f, 0.004913f,
- 0.005627f, 0.007965f, 0.000532f, -0.00878f, 0.004047f, -0.005302f, 0.00201f, 0.002964f, -0.00895f,
- 0.005768f, 0.00388f, 0.007526f, -0.00783f, 0.003794f, 0.005363f, 0.003454f, -0.002235f, -0.003494f,
- -0.001541f, -0.00003624f, -0.0007634f, -0.0014f, -0.003124f, 0.00829f, -0.00298f, -0.00868f, -0.001243f,
- -0.005383f, -0.009964f, 0.004433f, -0.002045f, -0.00753f, 0.002361f, -0.007473f, -0.002419f, -0.000931f,
- 0.00585f, 0.007114f, -0.002247f, 0.00472f, -0.003033f, -0.001974f, 0.001622f, -0.007473f, -0.005375f,
- -0.005013f, 0.00436f, 0.00662f, -0.0053f, 0.000606f, -0.00849f, -0.007004f, 0.006794f, -0.0005445f,
- -0.001269f, 0.00391f, 0.006294f, 0.007088f, -0.009026f, -0.001965f, -0.008545f, 0.002115f, 0.003534f,
- -0.00857f, 0.00412f, -0.00722f, -0.006386f, 0.00595f, -0.003778f, -0.00886f, -0.0002267f, 0.00249f,
- -0.002825f, 0.0003204f, 0.0002894f, -0.004147f, -0.003632f, 0.001764f, -0.002983f, 0.006584f, -0.004402f,
- 0.006493f, 0.002014f, -0.0061f, 0.00816f, 0.005585f, -0.008125f, 0.006546f, -0.00956f, 0.004185f,
- 0.001067f, 0.001277f, 0.007835f, -0.003933f, 0.00979f, -0.003376f, 0.006573f, -0.00501f, 0.0007577f,
- 0.00133f, -0.00737f, 0.00885f, -0.00599f, -0.001151f, -0.001389f, -0.00987f, -0.003214f, -0.00649f,
- 0.005424f, 0.0004575f, 0.002352f, 0.005722f, -0.001995f, -0.007717f, 0.001034f, -0.006557f, 0.0088f,
- -0.003183f, -0.00663f, 0.00634f, -0.003008f, -0.004925f, 0.00539f, -0.00432f, -0.00651f, 0.009895f,
- 0.00532f, -0.0003607f, 0.003397f, 0.006145f, 0.00531f, -0.006275f, 0.00985f, -0.00471f, 0.00817f,
- -0.00927f, 0.007217f, 0.005924f, 0.003187f, 0.001192f, -0.003986f, -0.0000217f, -0.0012245f, -0.003933f,
- -0.00617f, -0.002232f, 0.00444f, 0.002008f, 0.0006056f, -0.002827f, -0.007366f, 0.002996f, -0.006752f,
- -0.004143f, 0.001662f, -0.00793f, 0.002161f, 0.0001992f, 0.00803f, -0.0000725f, 0.001066f, 0.004745f,
- -0.005367f, -0.00641f, 0.00431f, -0.004715f, 0.008575f, -0.007202f, 0.003786f, -0.00247f, 0.006382f,
- -0.006832f, 0.00505f, -0.001084f, 0.009674f, 0.00458f, -0.00473f, -0.00656f, -0.00011283f, 0.004417f,
- -0.001419f, -0.0005164f, 0.0000397f, -0.00395f, 0.00417f, -0.005512f, 0.0088f, 0.00568f, -0.0005984f,
- 0.003128f, -0.006283f, -0.0000904f, -0.004738f, 0.00687f, 0.00592f, -0.005768f, -0.00859f, 0.003523f,
- 0.001169f, -0.004498f, 0.00541f, 0.002956f, 0.00896f, -0.002571f, 0.0006533f, 0.002089f, -0.00473f,
- -0.002241f, 0.005016f, 0.001295f, 0.005993f, -0.008064f, 0.000595f, -0.007744f, -0.00201f, 0.0075f,
- -0.00942f, 0.0002023f, -0.00979f, -0.002243f, 0.002829f, -0.004322f, 0.009125f, 0.00704f, 0.007282f,
- 0.00807f, 0.005447f, 0.00518f, -0.0010195f, -0.004803f, -0.001293f, -0.001305f, 0.00975f, -0.00564f,
- -0.005215f, -0.009445f, 0.00999f, 0.00959f, -0.009224f, -0.0053f, -0.002106f, -0.00839f, 0.001516f,
- 0.003109f, 0.004414f, -0.00921f, -0.00868f, 0.00833f, 0.00809f, 0.004654f, 0.00678f, 0.002237f,
- 0.007195f, -0.004875f, -0.001252f, 0.0073f, 0.007275f, 0.00825f, -0.005936f, 0.00594f, -0.00381f,
- -0.002117f, 0.009f, -0.003998f, -0.00104f, -0.00421f, 0.00526f, 0.001031f, 0.00902f, 0.006794f,
- -0.00912f, -0.0002892f, 0.002966f, 0.00478f, 0.00581f, 0.007217f, 0.008156f, -0.0000639f, -0.003164f,
- 0.00859f, -0.00897f, 0.00409f, 0.0008936f, -0.00991f, -0.008316f, -0.004055f, 0.001252f, -0.00473f,
- -0.002f, -0.003933f, 0.000755f, -0.00992f, 0.003569f, -0.00812f, -0.004215f, -0.00774f, 0.00907f,
- 0.00653f, -0.00992f, -0.006252f, -0.00468f, -0.001105f, -0.007717f, 0.005302f, 0.003773f, -0.001262f,
- -0.006207f, -0.005707f, 0.0053f, 0.00415f, 0.002441f, 0.0009265f, -0.006744f, 0.00994f, -0.0004816f,
- -0.002108f, -0.003267f, 0.0000461f, 0.004364f, -0.00596f, -0.008675f, 0.005703f, 0.002748f, 0.00961f,
- 0.006767f, -0.0000575f, -0.00845f, -0.003597f, 0.003616f, 0.00423f, 0.009705f, -0.00976f, -0.0085f,
- 0.00307f, -0.004032f, -0.00784f, -0.00901f, -0.00873f, 0.00543f, 0.00744f, -0.006588f, -0.004765f,
- -0.007202f, 0.006306f, -0.007484f, 0.007442f, -0.00008386f, 0.006374f, 0.00879f, 0.002039f, -0.003298f,
- 0.003407f, 0.004673f, 0.0068f, 0.0001981f, 0.002296f, 0.008194f, -0.00805f, -0.007637f, -0.00903f,
- -0.004025f, 0.001553f, 0.00881f, 0.001311f, -0.005016f, -0.006916f, -0.009926f, -0.00801f, 0.00945f,
- 0.0001532f, 0.00234f, -0.002968f, -0.002174f, 0.004585f, -0.00658f, 0.000132f, 0.0004494f, -0.00954f,
- -0.00848f, 0.009964f, -0.0006323f, -0.005016f, 0.001238f, 0.00433f, 0.001477f, 0.00578f, 0.00794f,
- -0.00512f, -0.00207f, -0.00145f, -0.001166f, 0.008644f, -0.00915f, 0.007187f, -0.00415f, 0.006035f,
- -0.004177f, 0.00817f, -0.00432f, 0.001062f, -0.005272f, -0.0004163f, 0.005154f, 0.005688f, -0.002985f,
- -0.004f, -0.003176f, 0.00137f, 0.0002158f, 0.003798f, 0.0002009f, -0.01f, 0.00311f, -0.004234f,
- 0.00681f, -0.005657f, -0.00963f, 0.00916f, 0.00847f, -0.002085f, -0.00211f, 0.006813f, -0.00473f,
- 0.00873f, 0.0008483f, 0.004253f, 0.00865f, -0.007156f, -0.00996f, 0.005413f, -0.004253f, 0.00847f,
- 0.004482f, 0.000647f, -0.006702f, 0.00845f, -0.009254f, -0.0001926f, 0.003868f, -0.00788f, 0.00951f,
- -0.0005136f, -0.007698f, 0.00889f, -0.00953f, 0.007965f, 0.004982f, -0.004345f, 0.00841f, 0.007034f,
- 0.006092f, 0.004166f, 0.00682f, -0.004635f, 0.003433f, -0.006527f, -0.0002658f, 0.005455f, 0.001926f,
- -0.003582f, -0.0065f, 0.002348f, -0.001918f, -0.00488f, -0.006416f, -0.000873f, -0.00942f, 0.005177f,
- -0.00194f, 0.006374f, 0.003983f, 0.00963f, 0.00697f, -0.00809f, -0.00791f, -0.003254f, -0.00669f,
- -0.001487f, 0.002129f, -0.000799f, -0.003944f, 0.002693f, 0.00667f, 0.00892f, 0.002377f, 0.001005f,
- -0.00792f, 0.002398f, -0.001093f, 0.0006456f, -0.002361f, 0.00533f, 0.0064f, 0.004524f, -0.0066f,
- 0.004406f, 0.007538f, 0.00611f, 0.006294f, 0.0004857f, -0.00859f, 0.00928f, -0.005505f, -0.001135f,
- -0.00712f, -0.00923f, 0.007534f, 0.00258f, 0.00685f, -0.00873f, 0.001684f, -0.001002f, -0.0005627f,
- 0.00352f, -0.007324f, 0.00838f, 0.00731f, 0.006733f, -0.003832f, -0.00522f, 0.00299f, 0.000935f,
- -0.005245f, 0.000987f, 0.007515f, 0.00704f, 0.0086f, 0.00133f, 0.0038f, 0.00622f, -0.0085f,
- 0.00988f, 0.00625f, 0.00835f, -0.006023f, 0.007084f, -0.002728f, 0.009995f, 0.0008073f, 0.00341f,
- -0.004547f, 0.005917f, -0.00818f, -0.009705f, 0.00907f, -0.008965f, 0.003483f, -0.00556f, -0.001769f,
- 0.0068f, 0.007442f, 0.00497f, -0.001922f, 0.002583f, -0.00834f, 0.004417f, 0.005028f, 0.006336f,
- 0.00402f, -0.00773f, 0.00672f, 0.00324f, 0.003595f, -0.00852f, 0.00503f, -0.00794f, -0.009766f,
- -0.000813f, -0.006924f, -0.006622f, 0.0008802f, 0.004177f, 0.007427f, -0.001697f, 0.008575f, 0.00414f,
- 0.00728f, 0.001138f, 0.000674f, -0.00209f, 0.004883f, -0.003029f, 0.0084f, -0.00798f, -0.003302f,
- 0.007866f, 0.0006804f, 0.00306f, 0.006325f, 0.000508f, -0.002022f, 0.00473f, 0.00958f, -0.001912f,
- -0.002256f, 0.001385f, 0.001143f, 0.007668f, -0.002575f, 0.004364f, 0.00919f, -0.00924f, 0.00558f,
- -0.00447f, -0.004196f, -0.00547f, 0.00868f, -0.001469f, -0.00849f, 0.006397f, -0.00529f, 0.002329f,
- 0.00847f, -0.009705f, 0.00233f, 0.000902f, 0.006073f, -0.00536f, 0.000875f, 0.002682f, -0.003347f,
- 0.00905f, -0.00399f, -0.005783f, -0.00942f, 0.00671f, -0.008095f, -0.004467f, -0.008415f, 0.007996f,
- -0.00848f, -0.00531f, 0.002605f, -0.00632f, -0.007652f, 0.009605f, 0.00929f, 0.007782f, -0.006844f,
- -0.00115f, -0.006626f, -0.007526f, -0.001129f, 0.00943f, 0.004242f, -0.00486f, 0.00963f, -0.006386f,
- -0.004513f, 0.00185f, -0.001695f, 0.00976f, -0.001186f, 0.001484f, 0.00429f, 0.000502f, -0.009285f,
- 0.005882f, -0.00674f, 0.00882f, 0.00816f, -0.008705f, -0.003618f, 0.00406f, 0.007607f, -0.001528f,
- -0.006336f, 0.006943f, 0.00753f, -0.004963f, -0.00602f, 0.002424f, -0.009476f, 0.007385f, 0.00988f,
- -0.00359f, -0.005722f, 0.006863f, -0.00398f, -0.005486f, -0.004898f, -0.0000809f, -0.001511f, 0.00307f,
- 0.002613f, 0.0004046f, 0.005634f, 0.00449f, 0.008606f, -0.002146f, 0.002882f, -0.007065f, -0.00796f,
- -0.001136f, -0.001323f, 0.004715f, -0.007004f, -0.007565f, -0.002895f, 0.007523f, 0.007027f, 0.001487f,
- -0.003323f, 0.004665f, 0.007706f, 0.009186f, 0.00814f, -0.003918f, -0.002062f, 0.00514f, 0.00858f,
- 0.00251f, 0.007576f, -0.008736f, 0.001245f, -0.007298f, -0.006157f, 0.00719f, -0.008446f, -0.00864f,
- 0.006535f, -0.00002605f, 0.003567f, 0.002258f, 0.003443f, -0.006207f, 0.00934f, 0.007515f, -0.00916f,
- 0.00861f, -0.00939f, 0.008644f, 0.00656f, 0.001708f, 0.007935f, -0.001997f, 0.002934f, 0.001758f,
- 0.004932f, 0.005432f, 0.007812f, 0.00046f, -0.00562f, 0.009186f, 0.002731f, -0.00234f, 0.00913f,
- 0.006542f, -0.001783f, 0.001575f, 0.003267f, 0.00676f, 0.00647f, -0.002998f, 0.00408f, -0.002005f,
- 0.002071f, 0.0001754f, -0.003132f, 0.009705f, -0.003107f, 0.00847f, -0.006504f, -0.0005784f, -0.004715f,
- -0.008415f, -0.005634f, -0.00926f, -0.006958f, 0.004932f, 0.0076f, 0.008896f, 0.006042f, 0.001687f,
- 0.000543f, 0.005047f, -0.002184f, 0.003963f, 0.00716f, 0.003468f, -0.003925f, 0.0073f, 0.00385f,
- 0.002712f, -0.00893f, -0.00004303f, -0.00814f, 0.00937f, 0.0017395f, 0.00555f, 0.005833f, -0.001491f,
- -0.00863f, 0.00947f, 0.001972f, -0.00984f, 0.004642f, 0.003994f, 0.00923f, -0.00984f, 0.0049f,
- -0.00987f, -0.009834f, -0.0005865f, -0.006485f, -0.0005198f, 0.00919f, 0.0004432f, 0.001068f, 0.009254f,
- -0.00881f, -0.003483f, 0.00565f, -0.007793f, -0.00989f, -0.00908f, 0.00276f, -0.002663f, -0.006893f,
- 0.006332f, -0.004177f, 0.006104f, -0.00004715f, -0.003693f, 0.003576f, 0.00255f, -0.00928f, -0.002916f,
- -0.007755f, -0.00729f, -0.0061f, 0.006523f, 0.00254f, 0.0008516f, -0.0003228f, -0.004017f, -0.007374f,
- -0.005207f, 0.009056f, -0.002869f, 0.004906f, 0.007675f, 0.003086f, -0.008026f, -0.00861f, -0.006744f,
- 0.0002438f, 0.00375f, 0.003315f, 0.00235f, 0.006836f, -0.005516f, 0.00434f, -0.004208f, 0.002483f,
- 0.006413f, 0.00674f, 0.005604f, -0.002977f, -0.00732f, -0.00908f, 0.007484f, 0.004456f, -0.00822f,
- 0.007442f, -0.003195f, 0.005753f, 0.007698f, -0.006397f, -0.00785f, -0.009605f, -0.00419f, 0.00676f,
- -0.00833f, -0.00997f, -0.0003414f, 0.00906f, -0.0071f, -0.006092f, -0.00885f, -0.007866f, 0.000824f,
- -0.003231f, -0.0006027f, 0.0074f, 0.00764f, 0.005795f, 0.002886f, 0.00958f, -0.007668f, 0.004158f,
- 0.00622f, 0.00119f, 0.00277f, -0.00571f, -0.0006685f, -0.006645f, 0.0004497f, 0.00218f, -0.00405f,
- 0.00485f, -0.007504f, -0.001411f, -0.001933f, -0.009964f, 0.002077f, 0.00159f, -0.002796f, 0.005787f,
- 0.00335f, 0.001426f, -0.005413f, 0.00994f, 0.001742f, -0.00715f, -0.0099f, 0.007744f, -0.0008388f,
- -0.000603f, -0.002f, 0.005436f, 0.00178f, 0.009796f, -0.001966f, -0.007397f, -0.001909f, 0.00931f,
- 0.0003397f, -0.006817f, 0.0069f, 0.002558f, 0.00808f, -0.007313f, -0.00984f, -0.00001967f, 0.002756f,
- 0.009995f, -0.00715f, 0.004765f, -0.006096f, 0.004337f, 0.005642f, 0.00763f, 0.007103f, -0.0002332f,
- 0.00322f, 0.00284f, 0.003447f, 0.0012f, -0.001126f, -0.002625f, 0.00961f, -0.005272f, 0.0053f,
- -0.002483f, -0.00931f, 0.007687f, -0.002417f, 0.004463f, 0.001136f, -0.005375f, -0.00672f, 0.007084f,
- 0.0006213f, -0.00912f, 0.006542f, 0.00606f, 0.003868f, 0.001709f, -0.007484f, 0.004448f, -0.00842f,
- 0.00427f, -0.00975f, 0.006847f, -0.0071f, 0.0005484f, 0.00909f, -0.004642f, 0.00564f, -0.001863f,
- -0.006863f, 0.0087f, -0.003702f, -0.001783f, -0.004032f, 0.003088f, -0.002344f, -0.00323f, -0.00966f,
- 0.008286f, 0.006916f, -0.001279f, 0.003246f, 0.00921f, 0.007122f, -0.006985f, 0.0002171f, 0.000837f,
- 0.001388f, 0.001075f, -0.008095f, 0.007515f, 0.00999f, 0.00423f, -0.0004835f, -0.009026f, 0.007538f,
- 0.00877f, -0.002445f, 0.003437f, 0.00485f, -0.008125f, -0.007767f, 0.00934f, -0.0069f, 0.00804f,
- -0.001232f, 0.00959f, -0.007687f, 0.005993f, 0.0006413f, -0.00814f, -0.002447f, -0.001008f, 0.002981f,
- 0.001682f, 0.004833f, -0.00382f, -0.0008454f, -0.006485f, 0.00567f, 0.004982f, -0.00484f, 0.00922f,
- -0.004585f, 0.00426f, 0.0004027f, 0.0006104f, -0.0063f, -0.00273f, -0.006138f, 0.005367f, -0.004303f,
- 0.001937f, -0.003523f, 0.007137f, -0.005737f, -0.00869f, -0.00481f, -0.00816f, 0.0002303f, -0.0002975f,
- -0.002365f, 0.00207f, -0.004353f, -0.00924f, 0.00395f, -0.00843f, -0.0043f, -0.0004406f, 0.004807f,
- -0.00694f, 0.001308f, -0.000525f, 0.000463f, -0.006813f, 0.00775f, 0.006725f, -0.00984f, -0.0003664f,
- 0.009964f, 0.007217f, 0.001767f, -0.004524f, 0.002432f, 0.000869f, -0.005993f, 0.007275f, -0.001423f,
- -0.00711f, -0.001464f, 0.007347f, -0.004776f, 0.00513f, -0.00942f, 0.003813f, -0.00489f, -0.00835f,
- -0.00711f, -0.002565f, 0.004646f, 0.002693f, 0.000531f, -0.001337f, -0.0008225f, 0.0005493f, -0.003017f,
- 0.003242f, -0.00651f, 0.00958f, 0.006573f, -0.00635f, 0.008f, -0.004864f, 0.003464f, -0.007538f,
- -0.00917f, -0.002682f, 0.00431f, -0.00604f, 0.002548f, 0.000772f, -0.00769f, -0.002756f, 0.004482f,
- 0.001484f, -0.004753f, -0.003052f, 0.0002143f, 0.003023f, 0.002924f, 0.00821f, 0.004673f, 0.003557f,
- 0.0092f, -0.00654f, 0.001993f, 0.00835f, -0.008736f, -0.0003886f, -0.00677f, 0.0004423f, -0.00723f,
- -0.002926f, 0.00994f, 0.00784f, 0.001214f, 0.00311f, 0.003584f, 0.00856f, 0.001752f, -0.004345f,
- -0.003647f, 0.00984f, -0.006798f, 0.001661f, 0.0005393f, 0.0004299f, 0.001711f, -0.006824f, 0.003633f,
- 0.00506f, -0.002146f, 0.005653f, -0.00959f, 0.0009027f, -0.009674f, 0.002176f, -0.002815f, -0.007362f,
- -0.0002565f, -0.005466f, 0.006443f, 0.00541f, -0.006615f, -0.00668f, 0.0000291f, -0.00249f, -0.00648f,
- 0.006466f, 0.005596f, -0.00963f, -0.00289f, -0.007336f, 0.001666f, -0.001227f, 0.008835f, -0.00396f,
- -0.001764f, -0.00962f, -0.00461f, 0.00488f, 0.00606f, -0.00959f, 0.005497f, 0.003384f, -0.002548f,
- 0.00479f, 0.001423f, -0.004772f, 0.0001752f, 0.00884f, 0.0069f, 0.00792f, -0.001779f, 0.0007215f,
- -0.007557f, 0.004314f, -0.006527f, -0.00513f, -0.00855f, -0.00873f, -0.00709f, -0.007538f, -0.002918f,
- -0.00867f, 0.000341f, 0.0004723f, 0.007336f, -0.0009327f, -0.005554f, 0.007065f, 0.00586f, -0.003202f,
- -0.001984f, -0.007755f, 0.006268f, 0.003624f, 0.001136f, 0.002611f, -0.007374f, -0.00522f, 0.005642f,
- 0.003551f, 0.005558f, 0.00512f, -0.001255f, 0.00445f, 0.006657f, -0.003395f, -0.0000211f, -0.00948f,
- -0.00525f, 0.007614f, 0.007603f, -0.00872f, 0.00983f, -0.0059f, 0.005405f, -0.005775f, 0.001911f,
- -0.006306f, -0.008446f, 0.006702f, 0.001295f, -0.007904f, -0.00613f, -0.00737f, 0.004997f, 0.00699f,
- -0.008514f, 0.001029f, 0.008705f, 0.00543f, -0.0097f, -0.00839f, 0.00201f, 0.00319f, -0.00767f,
- 0.003147f, -0.00936f, 0.003647f, 0.007465f, 0.00802f, 0.001254f, 0.00955f, 0.006344f, -0.00754f,
- 0.007072f, -0.007305f, -0.002403f, -0.006702f, -0.00827f, 0.007183f, -0.001834f, -0.0057f, -0.007095f,
- 0.00332f, -0.0008297f, 0.004333f, 0.0008926f, -0.00629f, 0.007393f, 0.006477f, -0.004684f, 0.002182f,
- -0.004246f, 0.007324f, 0.001202f, 0.00993f, 0.001759f, -0.001665f, 0.0067f, 0.003798f, -0.007454f,
- -0.00821f, 0.001178f, 0.004494f, 0.00384f, 0.003609f, 0.007614f, 0.00976f, -0.00918f, -0.002209f,
- 0.002016f, 0.0093f, 0.00638f, -0.007572f, -0.008224f, -0.000771f, -0.00854f, -0.001513f, -0.007267f,
- 0.00887f, -0.00107f, -0.007755f, 0.004757f, 0.002693f, 0.00439f, -0.00927f, -0.003588f, 0.001711f,
- -0.002756f, 0.00974f, -0.004158f, 0.00621f, 0.00451f, 0.007935f, -0.002064f, -0.0081f, -0.00682f,
- 0.006042f, -0.003317f, -0.003391f, -0.00688f, -0.00743f, 0.003933f, -0.00816f, -0.003164f, -0.001821f,
- -0.001942f, 0.005005f, 0.00597f, 0.00595f, 0.0086f, 0.003202f, -0.00803f, -0.00892f, -0.002626f,
- 0.000533f, -0.002506f, 0.00506f, -0.00822f, -0.000431f, 0.000955f, -0.004826f, -0.006626f, 0.001367f,
- 0.00684f, -0.00793f, 0.00634f, -0.004353f, -0.00682f, 0.00657f, 0.000718f, -0.002306f, 0.006966f,
- 0.006992f, -0.006275f, 0.00843f, 0.004826f, 0.00886f, -0.004f, 0.00901f, 0.005543f, -0.00566f,
- -0.009575f, 0.005444f, 0.00633f, -0.005756f, 0.007687f, 0.001801f, -0.005802f, 0.001708f, -0.004517f,
- 0.00808f, 0.00984f, -0.00847f, 0.00959f, -0.002443f, -0.001829f, -0.003305f, -0.00392f, -0.006924f,
- -0.002266f, 0.001481f, 0.001099f, -0.00549f, 0.004787f, 0.00784f, -0.008514f, -0.00288f, -0.00858f,
- 0.003025f, 0.002846f, 0.001469f, 0.00927f, 0.006443f, -0.00908f, 0.009445f, -0.009636f, -0.0003245f,
- 0.003815f, -0.0001975f, 0.0007005f, -0.00984f, 0.0005784f, 0.0006576f, -0.00885f, 0.001424f, -0.004414f,
- 0.006252f, 0.002722f, -0.002953f, 0.001995f, 0.00942f, -0.0000668f, -0.007507f, 0.00201f, 0.00344f,
- 0.002167f, -0.001902f, -0.00691f, 0.00427f, -0.006607f, -0.003334f, -0.00143f, -0.00676f, 0.00736f,
- 0.005222f, -0.0004745f, -0.0005236f, -0.00818f, 0.004253f, -0.002077f, 0.007355f, -0.00157f, -0.004112f,
- -0.007156f, 0.002766f, -0.001808f, -0.003685f, 0.002918f, 0.005814f, 0.00126f, 0.00001913f, -0.0002122f,
- 0.00882f, -0.001593f, 0.005184f, -0.006516f, 0.00848f, 0.00835f, -0.0006256f, 0.00252f, -0.00594f,
- 0.005688f, -0.0089f, 0.000832f, 0.00922f, 0.002317f, -0.003725f, -0.005905f, 0.001728f, 0.002249f,
- -0.00986f, 0.008896f, -0.0001637f, 0.006817f, -0.0092f, 0.008484f, -0.00751f, -0.002232f, 0.007233f,
- 0.001008f, 0.003746f, -0.005726f, 0.006203f, 0.000586f, 0.00568f, 0.000979f, -0.00249f, -0.004295f,
- -0.005775f, 0.0093f, -0.002306f, 0.002426f, -0.00712f, 0.004265f, 0.00659f, -0.00504f, -0.002317f,
- 0.003494f, -0.005882f, 0.00602f, 0.001864f, -0.008255f, 0.00559f, -0.001576f, -0.004242f, -0.005627f,
- 0.00521f, 0.003729f, -0.005524f, -0.005688f, 0.00695f, -0.00475f, -0.0001157f, -0.007744f, -0.007935f,
- 0.006092f, -0.007626f, 0.002676f, -0.00196f, -0.00932f, -0.001797f, -0.0081f, -0.004524f, 0.002777f,
- -0.0007696f, -0.0008817f, -0.00864f, 0.00834f, -0.001039f, -0.00899f, -0.007412f, -0.002197f, 0.003298f,
- 0.00258f, 0.00667f, 0.001576f, -0.002626f, -0.001692f, -0.00107f, -0.001912f, -0.00997f, -0.005493f,
- -0.0098f, -0.001864f, 0.001933f, 0.005116f, -0.00938f, -0.0002704f, 0.0001253f, -0.00465f, -0.00414f,
- 0.001244f, 0.002434f, -0.003223f, 0.007835f, 0.004036f, 0.00748f, -0.00903f, 0.004265f, -0.002977f,
- 0.00732f, 0.006317f, -0.00563f, -0.008224f, -0.00867f, 0.00962f, -0.005325f, 0.00101f, -0.00856f,
- 0.00735f, -0.00862f, -0.003899f, -0.004925f, 0.0069f, 0.004513f, -0.009895f, -0.00239f, 0.00992f,
- -0.00149f, 0.001915f, -0.002604f, 0.0095f, 0.007416f, 0.005016f, -0.002281f, 0.008125f, -0.009476f,
- -0.009056f, 0.003843f, -0.002602f, 0.0089f, 0.003674f, 0.00132f, -0.00627f, 0.009186f, 0.006226f,
- -0.00442f, 0.003323f, -0.00282f, 0.00831f, 0.007153f, -0.00724f, -0.002815f, -0.0001028f, 0.00809f,
- 0.00871f, -0.007435f, -0.0018835f, 0.002344f, 0.00975f, -0.00286f, -0.00835f, -0.003582f, -0.000401f,
- 0.007904f, -0.00499f, 0.003502f, -0.009605f, 0.00367f, -0.007473f, -0.003994f, -0.002377f, 0.00413f,
- 0.000489f, 0.005356f, 0.00786f, 0.00476f, -0.005436f, 0.005947f, -0.000724f, -0.00671f, 0.00569f,
- -0.00826f, 0.00846f, -0.006634f, -0.003334f, -0.00802f, -0.007126f, -0.001247f, 0.00596f, -0.009056f,
- 0.0005774f, -0.00648f, 0.006126f, -0.00668f, -0.004116f, -0.0002975f, 0.0002549f, -0.006977f, 0.002117f,
- 0.0007377f, -0.00803f, -0.003365f, 0.00819f, -0.002949f, -0.00969f, 0.006794f, -0.007645f, -0.00099f,
- 0.006966f, 0.009735f, 0.002426f, 0.005592f, 0.0003273f, -0.003353f, -0.002249f, -0.00514f, -0.002508f,
- -0.008156f, -0.000979f, 0.0002344f, -0.006508f, 0.00781f, 0.001318f, -0.00498f, 0.00858f, -0.003828f,
- -0.00504f, 0.00639f, -0.002424f, 0.002552f, 0.003736f, -0.00797f, 0.00761f, 0.006474f, 0.004166f,
- -0.009026f, 0.00638f, 0.0097f, -0.007202f, -0.008224f, -0.005714f, 0.001017f, 0.004894f, -0.00898f,
- 0.00874f, -0.004066f, -0.002527f, 0.000754f, -0.002802f, 0.009315f, -0.00817f, -0.008705f, -0.0006857f,
- 0.006992f, 0.000913f, 0.005993f, 0.005013f, 0.009346f, -0.00574f, 0.008575f, 0.004166f, -0.00604f,
- -0.0032f, 0.0014925f, 0.008865f, -0.006435f, -0.004417f, 0.000921f, 0.00928f, -0.001739f, 0.000586f,
- 0.007904f, 0.007347f, 0.00331f, -0.0078f, -0.004005f, 0.0074f, -0.005825f, -0.007244f, -0.002626f,
- -0.005917f, 0.006508f, 0.007263f, -0.001506f, -0.003498f, 0.00693f, 0.004097f, 0.00934f, -0.003752f,
- -0.006752f, 0.001534f, 0.003906f, 0.001351f, 0.00367f, 0.0086f, -0.00536f, -0.001699f, 0.001546f,
- -0.00277f, -0.0005455f, -0.002718f, -0.00583f, -0.0009003f, -0.001003f, 0.001612f, -0.003557f, -0.006004f,
- 0.001006f, -0.00925f, -0.0008187f, -0.002907f, 0.003675f, 0.00394f, 0.005608f, -0.007133f, 0.001691f,
- 0.006428f, 0.003813f, -0.00542f, -0.00583f, 0.002207f, -0.001088f, 0.00714f, 0.006233f, 0.002617f,
- -0.00419f, -0.00916f, 0.004063f, -0.002892f, 0.000514f, 0.00224f, 0.0001853f, 0.0007997f, 0.0005536f,
- -0.00639f, -0.007015f, 0.00309f, 0.006184f, -0.00982f, -0.0002372f, 0.0009604f, 0.00962f, 0.00678f,
- -0.006653f, -0.004955f, -0.0003958f, 0.006428f, 0.004517f, 0.00672f, 0.003792f, -0.006046f, -0.00221f,
- -0.00727f, -0.00748f, -0.004204f, -0.00982f, 0.0007663f, 0.00661f, -0.003647f, -0.006973f, 0.002605f,
- 0.0001023f, 0.004536f, -0.00647f, 0.009735f, 0.00945f, -0.00967f, -0.0003023f, -0.0086f, 0.008736f,
- -0.00701f, 0.00258f, -0.002716f, -0.00162f, -0.006996f, 0.007664f, 0.007595f, 0.00403f, 0.00233f,
- -0.00481f, -0.001349f, -0.005196f, -0.009026f, 0.00606f, 0.001146f, 0.001434f, 0.00967f, 0.004448f,
- -0.004837f, -0.007168f, -0.005234f, 0.002514f, 0.005306f, 0.003088f, 0.0018215f, -0.00558f, -0.006596f,
- 0.002018f, -0.003408f, -0.001384f, -0.006065f, -0.001212f, -0.002604f, -0.00767f, 0.0001342f, -0.00851f,
- -0.00392f, 0.003862f, 0.00701f, 0.003605f, -0.00965f, -0.00714f, 0.00956f, -0.00888f, -0.001019f,
- 0.0024f, -0.00961f, -0.005238f, 0.005333f, 0.00871f, 0.007607f, -0.00756f, -0.004772f, -0.00912f,
- -0.004047f, 0.003483f, 0.003294f, 0.006577f, -0.005505f, 0.00996f, 0.009964f, 0.0004187f, 0.005898f,
- 0.00796f, -0.00165f, -0.003225f, -0.001258f, 0.00853f, -0.008865f, 0.00815f, -0.001117f, -0.00685f,
- 0.001974f, 0.00915f, 0.00667f, 0.009605f, 0.007107f, 0.007698f, -0.004387f, -0.0003958f, -0.005062f,
- 0.002188f, -0.004875f, -0.002922f, -0.0003638f, 0.006268f, 0.00785f, 0.006138f, 0.000505f, -0.0003953f,
- -0.00841f, -0.00958f, -0.007126f, -0.003107f, 0.0078f, 0.003452f, -0.009254f, -0.00117f, -0.00878f,
- -0.00911f, -0.0004418f, 0.00831f, -0.004524f, 0.003872f, 0.0044f, 0.006424f, 0.000634f, -0.004883f,
- -0.002487f, -0.00512f, -0.00692f, -0.00521f, -0.001761f, 0.008575f, -0.006393f, 0.00351f, 0.00914f,
- -0.006035f, -0.002264f, -0.009636f, 0.00918f, -0.00967f, -0.004944f, -0.0004587f, -0.002478f, -0.00814f,
- 0.00816f, -0.004776f, 0.00954f, 0.003471f, -0.006172f, 0.003603f, 0.009346f, 0.00455f, 0.00982f,
- 0.00476f, 0.0007815f, -0.003096f, -0.0000307f, -0.005608f, 0.009315f, 0.00374f, -0.007366f, -0.001133f,
- -0.00944f, 0.006847f, 0.00631f, 0.005394f, 0.003088f, -0.00644f, -0.0004168f, -0.00923f, -0.003254f,
- -0.005077f, 0.00637f, -0.001415f, -0.003235f, -0.001729f, -0.0082f, 0.006664f, -0.006f, 0.00663f,
- -0.001547f, -0.004116f, -0.00542f, 0.00521f, -0.00286f, -0.00396f, 0.004547f, -0.0001363f, 0.000979f,
- -0.00634f, -0.006767f, -0.0000603f, 0.008316f, 0.00756f, -0.004993f, -0.00645f, -0.002295f, 0.004288f,
- 0.00901f, 0.008194f, -0.004192f, -0.002182f, -0.005836f, -0.003983f, -0.007183f, -0.0061f, 0.001098f,
- -0.0009274f, 0.005207f, 0.0002102f, -0.003925f, 0.0056f, -0.00296f, 0.006134f, -0.007744f, 0.006126f,
- -0.005047f, -0.006134f, 0.004818f, -0.005283f, 0.005272f, -0.00779f, -0.003086f, -0.000607f, 0.005486f,
- 0.0005345f, -0.007305f, -0.0048f, -0.00876f, -0.00433f, 0.006165f, -0.002474f, -0.00953f, -0.002066f,
- 0.002918f, 0.006382f, 0.003317f, 0.00826f, -0.009995f, 0.004143f, 0.00985f, -0.0002116f, -0.002989f,
- -0.007805f, 0.0003633f, -0.00365f, -0.00916f, 0.009834f, 0.003513f, -0.00379f, 0.00736f, -0.00957f,
- 0.005726f, -0.00772f, -0.00803f, -0.002052f, -0.005585f, -0.00781f, -0.00599f, 0.00954f, 0.002024f,
- -0.005745f, 0.003054f, -0.009415f, -0.005054f, 0.00424f, 0.003218f, 0.00826f, 0.00817f, -0.00409f,
- 0.00518f, 0.00216f, 0.006756f, -0.00411f, -0.003344f, -0.004898f, 0.00001055f, 0.006104f, 0.001057f,
- -0.000702f, 0.00771f, -0.001743f, 0.001407f, -0.005104f, -0.007717f, -0.002026f, -0.006405f, 0.00886f,
- 0.0006466f, -0.00951f, -0.00395f, -0.00814f, 0.00936f, 0.001143f, -0.00485f, 0.00584f, -0.002224f,
- 0.00834f, -0.0003467f, -0.000945f, 0.007034f, -0.0009427f, -0.009445f, 0.0007753f, -0.006973f, 0.001507f,
- 0.004105f, -0.002523f, 0.002872f, -0.001515f, -0.00869f, 0.003103f, 0.000389f, -0.00774f, 0.00441f,
- -0.001002f, 0.00783f, -0.001102f, -0.003883f, -0.007187f, -0.0001678f, -0.00742f, -0.00686f, -0.006702f,
- 0.00894f, -0.0003886f, -0.005543f, 0.00988f, 0.00411f, -0.00002635f, 0.00851f, -0.002317f, 0.00873f,
- -0.00532f, -0.000835f, -0.004166f, -0.004036f, -0.003325f, -0.00799f, 0.003025f, 0.001356f, -0.009575f,
- -0.00426f, -0.003431f, 0.00899f, -0.001455f, -0.0007324f, -0.00492f, 0.00989f, -0.0002503f, -0.00814f,
- -0.00535f, -0.0035f, -0.001434f, 0.00635f, -0.005108f, 0.002626f, 0.00983f, 0.00672f, -0.00725f,
- -0.004826f, 0.007275f, -0.006763f, 0.002605f, 0.002369f, -0.000976f, 0.00263f, 0.00465f, -0.009544f,
- -0.0008945f, -0.00175f, -0.00799f, -0.0006666f, -0.00514f, -0.002842f, -0.001805f, 0.000992f, 0.00844f,
- -0.000964f, -0.00636f, 0.001281f, 0.001717f, 0.00569f, 0.005917f, -0.00826f, -0.00859f, 0.004246f,
- 0.004078f, -0.005566f, 0.00835f, -0.006893f, -0.005867f, 0.001273f, -0.005856f, 0.004448f, 0.004562f,
- -0.00392f, -0.00855f, 0.0005975f, 0.006817f, -0.005524f, -0.0009527f, -0.00695f, -0.002172f, -0.003683f,
- -0.00546f, 0.007698f, -0.00858f, 0.003372f, 0.001414f, -0.007786f, -0.00482f, 0.0083f, 0.007534f,
- 0.00554f, 0.005768f, 0.001982f, -0.004597f, -0.001634f, 0.000563f, 0.00298f, 0.001768f, 0.0004673f,
- 0.009285f, 0.00518f, 0.00798f, 0.00557f, -0.002504f, -0.00777f, 0.007904f, 0.00939f, -0.004646f,
- 0.00527f, 0.00817f, 0.00526f, 0.007935f, -0.00413f, -0.002628f, -0.008194f, -0.006195f, 0.00884f,
- 0.007282f, 0.003819f, -0.00904f, 0.001354f, -0.004368f, -0.0002527f, 0.004684f, -0.002907f, -0.003862f,
- -0.002197f, 0.00858f, -0.00989f, 0.0004277f, 0.008484f, -0.008865f, 0.007275f, 0.00869f, -0.0000226f,
- 0.0006456f, 0.0002527f, 0.003267f, 0.007793f, -0.001359f, -0.007423f, -0.004204f, 0.006824f, -0.00801f,
- 0.006992f, -0.002182f, 0.00181f, 0.00966f, -0.00888f, -0.006527f, -0.00873f, -0.004623f, -0.006767f,
- -0.006317f, 0.003017f, 0.002218f, 0.00805f, -0.00677f, -0.00974f, -0.0083f, 0.008095f, -0.00424f,
- -0.009636f, 0.002298f, -0.00864f, 0.004044f, 0.000354f, 0.00949f, 0.00635f, 0.009026f, -0.00806f,
- -0.0008893f, 0.002377f, -0.001343f, -0.001965f, -0.00442f, -0.006615f, -0.004166f, 0.00719f, -0.006306f,
- -0.009674f, -0.00787f, 0.00712f, -0.003637f, 0.0008287f, 0.005352f, -0.004227f, -0.00549f, -0.0058f,
- 0.00489f, -0.005165f, 0.001942f, 0.00591f, 0.00612f, 0.005306f, -0.00723f, 0.0051f, 0.002329f,
- -0.001097f, 0.002022f, -0.006416f, -0.006577f, 0.003603f, 0.004303f, 0.007652f, 0.00884f, -0.003191f,
- 0.002787f, -0.009254f, 0.003475f, -0.002266f, 0.00936f, -0.00793f, -0.00738f, 0.008194f, 0.003998f,
- -0.0049f, 0.008965f, -0.000592f, 0.00711f, 0.00905f, -0.0006223f, -0.00735f, -0.00399f, -0.00808f,
- -0.005367f, 0.00705f, 0.0007415f, 0.00864f, 0.00883f, -0.001155f, 0.00898f, 0.004406f, 0.00967f,
- 0.004677f, -0.003113f, -0.0009146f, 0.00756f, 0.005733f, -0.003647f, 0.00446f, 0.00798f, 0.003305f,
- -0.0000515f, -0.003746f, -0.002283f, -0.004913f, 0.003496f, -0.00773f, -0.003622f, 0.004974f, 0.00244f,
- 0.001445f, -0.004826f, 0.002394f, 0.003075f, -0.0006714f, 0.002077f, -0.008675f, -0.001683f, 0.006065f,
- -0.005512f, -0.001691f, 0.007507f, -0.00913f, -0.0008674f, -0.005f, 0.001398f, -0.004875f, -0.000567f,
- -0.002668f, 0.001711f, -0.005306f, -0.00883f, -0.001738f, 0.0035f, -0.006702f, -0.006943f, 0.00884f,
- -0.001516f, 0.00991f, 0.003082f, 0.006077f, -0.00437f, -0.000524f, -0.003986f, 0.007393f, 0.00986f,
- -0.0008f, -0.001425f, -0.001999f, -0.002277f, -0.00901f, 0.004986f, 0.002085f, -0.0009236f, 0.001841f,
- -0.003191f, 0.002205f, -0.00781f, 0.00397f, -0.002066f, -0.008835f, -0.004585f, -0.00953f, -0.006496f,
- -0.006996f, 0.007233f, -0.00544f, 0.001037f, 0.0028f, -0.007935f, -0.0055f, -0.007866f, 0.00436f,
- -0.0009565f, 0.001419f, 0.007587f, -0.0004418f, -0.00318f, -0.003857f, 0.007763f, 0.008896f, 0.004925f,
- 0.00979f, -0.00928f, -0.001149f, 0.00678f, -0.002733f, -0.002972f, -0.001726f, 0.006706f, -0.001256f,
- -0.00636f, 0.0004964f, 0.0005093f, -0.0008807f, 0.002026f, 0.00215f, -0.007603f, -0.00936f, -0.001715f,
- -0.000935f, 0.0005236f, 0.000975f, 0.00786f, -0.002583f, 0.003407f, -0.002033f, -0.00217f, 0.001398f,
- -0.0001027f, 0.0009203f, 0.0009117f, 0.00741f, -0.003925f, 0.0007577f, -0.006317f, 0.001241f, 0.005623f,
- 0.001732f, 0.00374f, 0.00341f, 0.006714f, 0.001987f, -0.0037f, 0.00349f, -0.00431f, -0.00895f,
- -0.009605f, -0.007214f, -0.00393f, -0.002583f, 0.00841f, 0.00782f, -0.005657f, -0.00655f, 0.003542f,
- -0.004143f, 0.003202f, -0.002695f, 0.0002656f, 0.001797f, -0.0065f, 0.00628f, -0.0001239f, -0.002842f,
- 0.00119f, -0.00979f, 0.006287f, -0.00646f, 0.00769f, 0.00831f, -0.0055f, 0.0005436f, 0.006554f,
- -0.0001364f, 0.00699f, 0.004364f, -0.00227f, 0.00489f, 0.0026f, 0.0007696f, 0.0004685f, -0.001103f,
- 0.001123f, -0.002245f, 0.006527f, -0.00828f, -0.002954f, -0.005226f, -0.005814f, -0.0002468f, -0.00884f,
- 0.008606f, -0.00001067f, -0.00417f, -0.003376f, 0.00918f, -0.00776f, 0.002684f, 0.006145f, -0.0006285f,
- -0.004173f, -0.004917f, -0.00678f, 0.00248f, 0.007263f, 0.002188f, -0.000213f, 0.00413f, 0.002676f,
- 0.004948f, 0.007614f, -0.001845f, -0.00436f, 0.00591f, 0.004833f, -0.002085f, -0.006096f, 0.007378f,
- 0.001922f, 0.006573f, 0.0016985f, 0.001776f, 0.00993f, -0.00829f, -0.0001675f, 0.004753f, 0.00008494f,
- 0.00989f, 0.0008593f, 0.00636f, 0.0008297f, -0.00482f, -0.001189f, -0.001576f, -0.001331f, -0.00881f,
- 0.00416f, -0.0008516f, -0.002281f, -0.00399f, -0.00603f, 0.0031f, 0.00994f, 0.0009284f, -0.00446f,
- -0.00944f, 0.00272f, -0.001006f, -0.006733f, 0.00815f, 0.004932f, -0.004894f, 0.007156f, 0.0001193f,
- -0.00745f, -0.000041f, -0.004074f, 0.00829f, 0.006042f, 0.006176f, -0.00509f, 0.005375f, -0.00554f,
- -0.001078f, -0.002928f, 0.00813f, 0.004013f, 0.002552f, -0.0086f, 0.000254f, -0.005844f, 0.004093f,
- -0.008224f, 0.006016f, -0.004883f, -0.006504f, 0.0003617f, -0.00008327f, 0.00382f, 0.00786f, -0.00915f,
- -0.004963f, 0.003756f, 0.00689f, 0.00833f, 0.005455f, -0.00871f, -0.00872f, -0.0008054f, 0.001023f,
- -0.003527f, -0.00735f, 0.00691f, 0.0092f, 0.004837f, -0.000847f, 0.0006146f, -0.00829f, 0.007317f,
- -0.002722f, 0.005962f, -0.004005f, 0.002857f, 0.004414f, 0.00437f, -0.003452f, -0.004383f, -0.004654f,
- 0.007866f, -0.000736f, -0.001158f, -0.005924f, -0.002207f, 0.00904f, 0.004505f, 0.005688f, 0.003448f,
- -0.00414f, -0.00986f, -0.007446f, 0.00479f, 0.00314f, 0.0084f, 0.005714f, -0.002865f, 0.0008903f,
- -0.00831f, 0.009415f, -0.001098f, 0.0007825f, -0.002136f, -0.009995f, 0.00798f, -0.0002449f, -0.00454f,
- 0.00262f, -0.001926f, 0.003874f, -0.001987f, 0.00456f, 0.00994f, -0.00275f, -0.0013485f, 0.00911f,
- -0.0011f, -0.005253f, 0.003504f, 0.004726f, -0.00821f, 0.00008196f, 0.004696f, 0.00473f, 0.006893f,
- -0.002386f, 0.007145f, 0.007584f, -0.00542f, -0.000596f, 0.002354f, 0.001427f, 0.001673f, 0.004646f,
- 0.004826f, 0.00847f, -0.005226f, 0.0003307f, 0.00536f, 0.002802f, 0.006264f, -0.000479f, 0.00222f,
- 0.00817f, 0.005253f, 0.005257f, 0.001163f, 0.005417f, 0.006603f, 0.00514f, -0.003473f, -0.001948f,
- 0.006695f, 0.003492f, 0.000456f, 0.00933f, 0.00283f, 0.006935f, -0.004658f, -0.0008807f, -0.001274f,
- -0.0006485f, -0.00349f, -0.002163f, 0.00811f, 0.001358f, -0.002134f, 0.0005803f, -0.001573f, -0.005478f,
- -0.00496f, 0.00968f, 0.001645f, -0.005756f, -0.0008974f, -0.00608f, -0.00528f, 0.00005585f, -0.005756f,
- -0.004025f, -0.00772f, -0.0008974f, 0.00786f, 0.00396f, -0.008865f, -0.00645f, -0.00903f, 0.00802f,
- -0.001602f, -0.0072f, 0.00736f, 0.002499f, -0.00839f, -0.00925f, 0.005943f, -0.00785f, -0.0081f,
- -0.00802f, -0.005554f, 0.004078f, 0.009476f, -0.00877f, 0.00257f, -0.00439f, 0.006744f, -0.00419f,
- -0.005413f, 0.002476f, -0.002373f, -0.006424f, 0.008736f, 0.006977f, 0.009735f, 0.009514f, 0.0009437f,
- -0.001418f, 0.004066f, 0.004986f, -0.008644f, -0.007427f, -0.00988f, 0.006714f, -0.00118f, 0.00924f,
- 0.000984f, 0.001846f, -0.00418f, 0.00341f, 0.0007763f, 0.008545f, 0.007313f, 0.00999f, -0.000682f,
- 0.003416f, 0.00465f, -0.000676f, 0.00206f, -0.00654f, -0.002478f, 0.003826f, -0.001733f, -0.003693f,
- -0.001044f, -0.004696f, 0.00688f, 0.00632f, 0.004963f, -0.00365f, -0.00772f, -0.001813f, -0.004898f,
- -0.008385f, 0.002f, -0.007782f, -0.000961f, -0.003376f, 0.005157f, -0.002651f, 0.007935f, 0.003716f,
- 0.009f, 0.001195f, -0.00982f, -0.00532f, -0.00828f, -0.000279f, -0.007626f, 0.00879f, 0.006996f,
- 0.00942f, 0.002588f, -0.0097f, -0.00011635f, -0.001595f, -0.0006347f, -0.001799f, 0.00126f, 0.005085f,
- 0.001865f, 0.003216f, -0.000628f, -0.00474f, -0.004925f, -0.00626f, 0.006287f, -0.005054f, 0.0079f,
- -0.005177f, -0.009796f, -0.00805f, -0.001599f, 0.0085f, -0.008965f, -0.002886f, -0.008606f, -0.008965f,
- 0.004757f, -0.009285f, 0.00548f, 0.00816f, -0.001941f, 0.00622f, 0.00755f, 0.00926f, 0.009125f,
- -0.004364f, 0.006214f, -0.007137f, 0.001763f, -0.002035f, 0.004326f, 0.00653f, -0.007072f, -0.003609f,
- -0.00504f, 0.004448f, -0.005928f, -0.007057f, -0.002148f, -0.004593f, -0.004467f, -0.009514f, -0.00854f,
- 0.001922f, 0.007572f, -0.005016f, 0.003345f, 0.008575f, -0.00967f, 0.000532f, -0.002897f, -0.005013f,
- -0.009834f, 0.00302f, 0.005688f, 0.005096f, -0.003983f, 0.00851f, 0.001554f, 0.00394f, 0.005688f,
- -0.00537f, 0.00655f, 0.007526f, 0.002298f, 0.006126f, -0.00654f, -0.003433f, -0.00818f, -0.003098f,
- -0.00822f, -0.00898f, -0.007675f, 0.005955f, -0.003288f, 0.006237f, -0.002f, 0.002678f, -0.00639f,
- 0.00899f, 0.009766f, 0.009384f, -0.0001253f, 0.007263f, -0.003555f, -0.00988f, -0.00534f, -0.005356f,
- -0.00805f, 0.001697f, 0.002516f, 0.0022f, 0.007397f, -0.002075f, 0.00247f, 0.004593f, -0.00543f,
- 0.000358f, -0.005047f, 0.00476f, -0.003937f, -0.002851f, 0.007507f, 0.001389f, 0.003235f, 0.00205f,
- -0.00474f, -0.0059f, 0.001666f, 0.002943f, -0.00954f, -0.00828f, -0.008804f, 0.002356f, 0.00836f,
- 0.002785f, 0.00881f, -0.00716f, 0.005608f, 0.007534f, -0.00952f, 0.008965f, 0.0001839f, -0.007412f,
- 0.00693f, -0.0000717f, 0.003857f, 0.00021f, 0.002897f, -0.00452f, -0.002552f, -0.005962f, -0.006737f,
- -0.0008616f, 0.008606f, -0.005814f, -0.007397f, -0.006096f, 0.0099f, -0.00955f, 0.001134f, 0.00702f,
- -0.0003154f, 0.00366f, -0.009186f, -0.001096f, 0.00984f, -0.005787f, 0.00369f, -0.001496f, 0.002462f,
- -0.00623f, -0.00426f, -0.004837f, -0.00558f, -0.003311f, -0.0066f, 0.0077f, 0.003609f, 0.004646f,
- 0.007996f, -0.00788f, 0.006348f, -0.00986f, 0.00817f, 0.0001633f, 0.0001796f, -0.00899f, -0.001417f,
- 0.00972f, -0.00067f, -0.005535f, 0.001376f, 0.004974f, 0.0008225f, 0.008484f, -0.00589f, 0.00828f,
- -0.007206f, -0.00599f, -0.0009503f, 0.000634f, -0.0001874f, -0.00654f, 0.00424f, -0.001244f, 0.002506f,
- -0.009964f, -0.00828f, -0.002129f, -0.003368f, -0.0003746f, -0.006798f, -0.00383f, 0.008514f, 0.00818f,
- -0.005497f, -0.0034f, -0.001681f, -0.004208f, -0.004337f, -0.0000664f, 0.003807f, -0.006073f, -0.003489f,
- -0.00521f, 0.005047f, 0.00367f, 0.005657f, -0.004665f, 0.00671f, -0.003513f, 0.00869f, 0.008095f,
- 0.007545f, 0.007214f, 0.002594f, -0.001637f, 0.005642f, 0.00526f, -0.007195f, 0.00413f, -0.006878f,
- 0.009224f, 0.008514f, -0.0008245f, -0.004276f, 0.003633f, -0.000534f, -0.00916f, -0.00905f, 0.00827f,
- 0.00458f, 0.002428f, -0.002975f, 0.00718f, -0.00888f, 0.004597f, 0.0004854f, -0.003778f, 0.006023f,
- 0.001024f, -0.00484f, -0.0048f, 0.001374f, -0.004204f, -0.004368f, 0.005783f, 0.001205f, 0.007774f,
- -0.001196f, -0.007015f, 0.00822f, -0.005875f, 0.003675f, 0.00279f, 0.001947f, -0.00342f, -0.000307f,
- -0.003113f, -0.0017185f, -0.001276f, 0.0031f, -0.003546f, -0.003328f, 0.004078f, 0.00976f, -0.002756f,
- 0.00487f, -0.007904f, 0.003613f, 0.007034f, -0.00624f, 0.0007896f, -0.0077f, -0.001974f, 0.007397f,
- 0.005966f, -0.00627f, -0.005215f, 0.001178f, -0.00372f, 0.001711f, -0.001743f, 0.00248f, 0.0003877f,
- 0.005028f, -0.00789f, -0.0007873f, -0.005753f, 0.00961f, 0.00961f, 0.002813f, 0.002567f, -0.007095f,
- 0.003628f, 0.0001531f, 0.0002968f, -0.005493f, -0.0001053f, 0.00964f, 0.004997f, -0.00657f, 0.000724f,
- -0.00563f, -0.009834f, -0.003574f, 0.003572f, -0.006805f, 0.007423f, 0.003103f, -0.005455f, 0.00881f,
- -0.00777f, -0.003508f, 0.0075f, 0.00404f, -0.00747f, 0.003056f, 0.005142f, -0.007156f, -0.00923f,
- 0.00401f, 0.007442f, 0.005077f, 0.007393f, 0.004276f, -0.00851f, -0.00263f, -0.006123f, 0.003536f,
- 0.005672f, 0.00887f, -0.002031f, -0.00524f, -0.001232f, 0.000433f, 0.005398f, 0.009575f, 0.009705f,
- -0.007267f, -0.00565f, -0.003963f, 0.007477f, -0.00216f, -0.007744f, -0.003347f, -0.00804f, -0.002136f,
- -0.002407f, 0.00826f, -0.006294f, 0.005116f, 0.00007975f, -0.007267f, -0.003428f, -0.005497f, 0.001562f,
- 0.003801f, -0.004646f, 0.004234f, 0.00979f, 0.00943f, -0.002726f, 0.0007277f, 0.0007143f, -0.00785f,
- 0.00531f, 0.00747f, -0.006287f, 0.0001854f, 0.0005198f, -0.006645f, -0.000202f, -0.0004883f, -0.001946f,
- 0.00904f, 0.00122f, 0.005608f, 0.002243f, -0.001732f, -0.00844f, -0.000973f, 0.00898f, 0.00686f,
- 0.005028f, 0.005497f, -0.002182f, -0.007122f, 0.00955f, 0.00725f, 0.0000116f, 0.00504f, 0.00864f,
- -0.00827f, -0.00476f, -0.001607f, 0.006145f, 0.00777f, 0.00974f, -0.002163f, 0.00857f, 0.006485f,
- -0.004356f, 0.00010043f, 0.001632f, 0.005432f, 0.00846f, -0.006756f, 0.0005136f, -0.00836f, -0.009544f,
- 0.005016f, -0.002354f, -0.004543f, 0.00419f, 0.00798f, -0.001813f, 0.005913f, 0.003494f, -0.002695f,
- -0.009346f, -0.001584f, -0.00886f, -0.007374f, 0.00979f, 0.00961f, 0.0006576f, -0.0018015f, -0.009766f,
- -0.00821f, -0.00924f, 0.0002823f, 0.003115f, -0.00788f, -0.005257f, 0.003233f, -0.00939f, 0.00617f,
- 0.003914f, -0.002165f, 0.004215f, 0.00603f, 0.00498f, -0.000754f, 0.0079f, 0.00463f, -0.004574f,
- -0.00494f, 0.0014715f, 0.007866f, 0.005215f, -0.00008845f, 0.00897f, -0.00431f, -0.00416f, 0.001195f,
- -0.007626f, 0.006153f, 0.000168f, -0.001373f, 0.001575f, -0.00368f, -0.00926f, 0.003387f, -0.006237f,
- -0.003305f, -0.004677f, 0.003044f, 0.002283f, -0.00855f, -0.00383f, 0.005135f, -0.003328f, -0.005f,
- -0.006145f, 0.008995f, 0.00933f, -0.0004253f, -0.00697f, -0.00895f, 0.001212f, 0.007114f, 0.005264f,
- 0.003008f, -0.0087f, 0.00578f, -0.008354f, 0.009056f, 0.004955f, -0.004787f, 0.001999f, -0.008705f,
- -0.00722f, -0.00211f, 0.00471f, -0.0012245f, -0.0003836f, -0.00119f, -0.005363f, -0.00464f, -0.00628f,
- -0.00855f, -0.000797f, 0.005047f, 0.0006003f, 0.002134f, 0.001738f, 0.006653f, -0.003204f, 0.00568f,
- -0.0003297f, 0.0001493f, -0.00001603f, -0.001742f, -0.0004888f, -0.002066f, -0.003843f, 0.008514f, 0.001038f,
- -0.006084f, 0.002298f, -0.00506f, 0.0028f, -0.00588f, 0.006187f, -0.004707f, 0.00482f, -0.005604f,
- 0.0099f, 0.002226f, -0.00418f, -0.00867f, -0.001959f, 0.006733f, 0.00881f, -0.009636f, 0.006523f,
- 0.00918f, -0.005287f, -0.00939f, 0.007725f, 0.002266f, -0.00813f, 0.00945f, -0.009735f, 0.00804f,
- -0.00447f, -0.0006757f, -0.002113f, 0.0071f, -0.002256f, -0.001572f, -0.002722f, -0.005325f, 0.005184f,
- 0.001163f, 0.00785f, -0.00908f, 0.000957f, -0.004894f, -0.00785f, 0.004192f, 0.005585f, -0.00466f,
- 0.00659f, -0.009026f, 0.00393f, -0.00526f, -0.00882f, -0.006893f, -0.008286f, -0.000591f, -0.00449f,
- -0.00882f, 0.004025f, -0.00812f, 0.002306f, 0.003397f, 0.0002433f, -0.00333f, 0.000728f, -0.001259f,
- -0.0006423f, 0.00922f, 0.002346f, -0.00682f, -0.002346f, -0.00688f, 0.0004377f, 0.0007114f, -0.00878f,
- 0.00824f, -0.007797f, 0.00000536f, 0.00009096f, 0.00981f, -0.001997f, -0.006676f, -0.006683f, -0.00412f,
- 0.00085f, 0.004017f, 0.00645f, -0.00674f, 0.00846f, -0.00847f, -0.00199f, 0.003153f, -0.0002362f,
- -0.0004025f, 0.007996f, 0.002476f, 0.00555f, 0.003628f, -0.00508f, 0.00728f, -0.00266f, 0.003223f,
- -0.007328f, -0.00689f, -0.00229f, -0.001114f, 0.002768f, -0.001708f, 0.003847f, -0.007248f, -0.00689f,
- -0.007065f, -0.00772f, 0.005745f, 0.008804f, 0.006092f, 0.005795f, 0.001585f, 0.005386f, -0.005962f,
- -0.0004244f, 0.008804f, 0.003803f, 0.000961f, 0.00976f, 0.0005674f, 0.00905f, 0.00982f, 0.005295f,
- -0.00009507f, 0.005775f, -0.002659f, -0.001253f, -0.006416f, 0.008194f, 0.00945f, 0.006752f, -0.00935f,
- 0.003845f, -0.006237f, 0.00415f, 0.008095f, -0.00645f, -0.009865f, 0.000944f, 0.00811f, 0.00841f,
- 0.0002704f, -0.00681f, 0.00514f, -0.005535f, -0.00543f, -0.007355f, 0.006424f, -0.0012665f, -0.007423f,
- 0.00501f, 0.0071f, -0.0001485f, -0.004772f, -0.007965f, -0.002703f, 0.00977f, -0.0002038f, 0.00664f,
- 0.002275f, 0.004887f, 0.00762f, 0.001178f, 0.001114f, -0.000678f, -0.001807f, -0.004963f, 0.001163f,
- 0.00273f, -0.00955f, 0.002756f, 0.0005674f, -0.00551f, -0.00862f, -0.009026f, 0.00948f, -0.00195f,
- -0.001241f, 0.00402f, 0.002943f, 0.0001924f, 0.001133f, -0.004086f, 0.002512f, -0.0058f, 0.00159f,
- -0.00808f, 0.00575f, -0.00857f, -0.00701f, 0.009544f, -0.001974f, 0.002966f, -0.004898f, -0.001783f,
- 0.003128f, -0.005596f, -0.00751f, -0.004704f, 0.00719f, -0.00949f, -0.001564f, 0.003157f, 0.005245f,
- -0.00424f, 0.004654f, -0.00425f, -0.008766f, 0.00912f, -0.005386f, 0.00439f, -0.002386f, 0.00576f,
- 0.003857f, -0.007004f, 0.0005574f, 0.006065f, -0.0068f, 0.00985f, -0.0003872f, -0.004654f, 0.008675f,
- 0.00801f, 0.001015f, 0.0019045f, 0.007225f, 0.0004132f, -0.005173f, 0.001682f, -0.002037f, -0.003492f,
- 0.003092f, 0.00231f, 0.007294f, 0.002605f, -0.00941f, -0.004112f, 0.0082f, 0.002506f, -0.00819f,
- -0.0041f, 0.009476f, 0.003584f, -0.00585f, 0.00462f, -0.006348f, 0.00913f, -0.003197f, -0.004265f,
- -0.00945f, -0.001356f, 0.007545f, 0.002289f, 0.001126f, 0.002977f, 0.00948f, -0.00703f, -0.002531f,
- -0.00868f, -0.00619f, -0.0004635f, 0.009254f, -0.0005174f, -0.00736f, -0.006264f, 0.00779f, -0.002342f,
- 0.004997f, 0.00269f, 0.00509f, -0.0041f, 0.00506f, 0.002752f, -0.006416f, 0.00794f, 0.003563f,
- 0.00551f, 0.006554f, -0.008286f, -0.00296f, 0.008354f, -0.0079f, -0.006348f, 0.001052f, 0.0007205f,
- 0.00506f, 0.000453f, -0.00993f, -0.006424f, 0.005787f, -0.001206f, 0.00876f, -0.004513f, -0.002857f,
- -0.00701f, -0.00621f, 0.003498f, 0.00986f, -0.00846f, -0.00128f, 0.006294f, -0.003735f, 0.00843f,
- -0.00841f, -0.007465f, -0.007504f, -0.00734f, 0.00635f, 0.004498f, -0.005688f, -0.003014f, 0.00892f,
- 0.00982f, 0.00793f, -0.002365f, 0.003353f, -0.004486f, -0.00651f, -0.00361f, -0.00418f, -0.00786f,
- 0.007812f, 0.001912f, -0.008156f, -0.00809f, -0.001939f, -0.003836f, -0.001578f, 0.00331f, -0.008736f,
- -0.006138f, -0.00877f, -0.007595f, 0.002537f, -0.007336f, -0.006477f, -0.007767f, -0.00853f, -0.003601f,
- -0.000952f, 0.007683f, -0.006283f, 0.00796f, 0.006012f, -0.001464f, 0.00718f, -0.0025f, -0.001972f,
- 0.004166f, 0.0002615f, 0.00496f, 0.006516f, 0.0016f, -0.008415f, -0.002398f, -0.001027f, 0.0000037f,
- 0.00827f, 0.003153f, 0.004826f, 0.00619f, -0.00673f, -0.00834f, -0.001702f, 0.006664f, -0.00465f,
- -0.00909f, 0.003893f, 0.005188f, 0.009415f, 0.00191f, 0.00274f, -0.002968f, -0.003834f, 0.00495f,
- 0.005985f, -0.002945f, 0.007317f, -0.00934f, -0.001007f, -0.005333f, -0.008415f, -0.0067f, 0.006084f,
- 0.00689f, -0.002855f, -0.009254f, -0.00402f, 0.007694f, -0.007633f, -0.008865f, -0.00846f, 0.007317f,
- -0.00915f, -0.009476f, 0.002455f, -0.001528f, -0.001358f, 0.0016985f, -0.001466f, -0.002584f, -0.006992f,
- -0.00427f, 0.000739f, 0.00258f, 0.0042f, 0.001303f, 0.00963f, 0.002176f, -0.00952f, 0.0005264f,
- -0.005226f, 0.008804f, 0.005707f, -0.00763f, -0.00875f, 0.0002716f, -0.00251f, -0.00646f, -0.00666f,
- 0.00936f, 0.005447f, -0.00562f, 0.00967f, 0.001811f, -0.00963f, 0.001052f, 0.00807f, -0.002794f,
- -0.00845f, 0.00685f, -0.003199f, 0.003119f, -0.004333f, 0.0001079f, -0.00884f, -0.002384f, -0.0008464f,
- -0.0053f, 0.0008607f, 0.005f, 0.003218f, -0.001972f, 0.003925f, -0.000635f, -0.003868f, -0.00636f,
- -0.005894f, 0.0005355f, 0.00921f, -0.006687f, 0.00629f, -0.001168f, -0.00646f, 0.005547f, -0.00963f,
- -0.004078f, 0.002125f, 0.008995f, 0.006187f, 0.007397f, -0.00656f, -0.006527f, 0.006042f, -0.001503f,
- -0.00624f, 0.003023f, -0.009995f, -0.002466f, 0.00351f, 0.003439f, -0.003235f, 0.008026f, 0.004158f,
- 0.003117f, -0.005856f, 0.00461f, -0.001134f, 0.004257f, 0.00933f, 0.00992f, -0.008156f, 0.004356f,
- 0.00917f, -0.007904f, 0.0004003f, -0.00912f, -0.003895f, -0.005566f, -0.00899f, -0.0001261f, -0.00272f,
- -0.00529f, -0.005215f, -0.000558f, -0.006172f, 0.008354f, 0.000414f, -0.004574f, 0.00527f, 0.004333f,
- -0.00728f, -0.00797f, 0.0096f, -0.00344f, -0.00881f, -0.00368f, 0.00844f, -0.00517f, -0.005783f,
- -0.002708f, -0.006958f, 0.00088f, 0.007393f, 0.002115f, 0.00502f, -0.007347f, 0.002518f, -0.007164f,
- 0.003891f, -0.006386f, 0.004723f, -0.007137f, 0.00979f, 0.00728f, -0.007385f, -0.003569f, -0.001245f,
- 0.007244f, -0.004177f, 0.005627f, -0.001364f, 0.007786f, -0.003647f, 0.00975f, 0.003262f, 0.006668f,
- 0.007492f, -0.002676f, 0.00452f, 0.00613f, 0.009895f, -0.0000653f, -0.0002944f, 0.0095f, 0.00829f,
- 0.003607f, -0.00763f, 0.001573f, 0.00708f, 0.001338f, 0.00761f, -0.00934f, 0.00425f, 0.004677f,
- 0.004356f, -0.00835f, -0.003391f, -0.00722f, 0.00877f, 0.001739f, -0.0078f, -0.003801f, -0.002934f,
- 0.00592f, -0.00832f, -0.005596f, 0.00847f, 0.002663f, -0.002655f, -0.00461f, 0.001812f, -0.005447f,
- 0.00393f, -0.0001626f, -0.0099f, -0.005177f, -0.000107f, -0.004513f, -0.00942f, -0.004494f, -0.0002584f,
- 0.00558f, 0.00919f, 0.00483f, -0.003881f, 0.0000862f, 0.00472f, 0.002277f, 0.00452f, -0.005043f,
- -0.00812f, 0.006695f, -0.001397f, 0.00708f, 0.00666f, 0.009445f, 0.002443f, 0.00672f, 0.00742f,
- 0.0047f, -0.0099f, -0.001733f, -0.001216f, 0.002306f, 0.00525f, 0.006687f, 0.007397f, -0.004185f,
- -0.007645f, 0.00497f, 0.002726f, -0.004883f, 0.00545f, 0.001207f, -0.003443f, 0.00855f, -0.008575f,
- -0.00995f, 0.00938f, 0.001395f, -0.005894f, -0.004715f, 0.001335f, 0.007214f, -0.00979f, -0.0009723f,
- -0.00884f, -0.00325f, -0.006447f, -0.0002873f, -0.006546f, -0.00914f, 0.00311f, 0.001508f, -0.008644f,
- 0.003849f, -0.00224f, -0.0073f, 0.004158f, -0.007076f, -0.00458f, -0.002794f, 0.00691f, -0.00991f,
- -0.002531f, -0.007236f, 0.00291f, 0.003098f, -0.00666f, 0.00618f, -0.001502f, -0.008026f, 0.0001609f,
- -0.001733f, 0.00476f, 0.007725f, -0.007076f, -0.005398f, -0.001904f, 0.002743f, 0.001987f, 0.002935f,
- 0.006363f, 0.007755f, -0.002127f, -0.002626f, 0.003273f, 0.0044f, -0.003975f, -0.00273f, -0.001413f,
- -0.008736f, -0.005775f, 0.00445f, -0.007412f, -0.00647f, 0.0046f, 0.007393f, -0.0003533f, -0.00926f,
- -0.006104f, 0.001658f, 0.00642f, -0.00962f, 0.00724f, -0.00032f, -0.00848f, -0.007442f, 0.001179f,
- -0.004684f, -0.001757f, 0.002796f, 0.00741f, 0.002192f, 0.003952f, 0.002794f, -0.00581f, 0.00923f,
- -0.000795f, -0.008545f, 0.0004318f, 0.007034f, 0.001034f, -0.009224f, 0.0037f, 0.00736f, -0.007587f,
- -0.001963f, 0.00037f, -0.001584f, -0.0001048f, 0.00979f, -0.007168f, 0.003159f, 0.00205f, -0.0082f,
- 0.000802f, 0.00919f, 0.005257f, 0.000411f, 0.006824f, 0.00543f, -0.00202f, -0.008705f, -0.0084f,
- -0.0008135f, -0.001487f, -0.00698f, 0.00766f, 0.0003076f, 0.002989f, 0.00785f, 0.004498f, 0.004917f,
- 0.001951f, 0.00489f, -0.000938f, 0.00438f, -0.00010777f, 0.00993f, -0.003304f, -0.00859f, 0.00656f,
- -0.009926f, 0.00572f, 0.009445f, 0.004425f, 0.00595f, 0.005547f, -0.00555f, 0.00912f, -0.00391f,
- 0.00417f, -0.00732f, -0.00944f, -0.001693f, 0.003319f, 0.007904f, 0.004158f, 0.008026f, -0.004173f,
- 0.00174f, 0.00794f, 0.001028f, -0.0004673f, -0.01f, 0.005222f, 0.00968f, 0.00173f, -0.00965f,
- 0.00775f, 0.00758f, -0.006916f, -0.006714f, 0.001373f, -0.00906f, 0.005737f, -0.00403f, 0.003036f,
- -0.00832f, -0.001393f, -0.00903f, -0.007996f, -0.001152f, 0.00698f, -0.00907f, 0.00455f, 0.0006533f,
- -0.001487f, -0.0074f, 0.005177f, 0.00607f, 0.006973f, -0.002907f, -0.008446f, 0.004932f, 0.00457f,
- -0.001466f, 0.007805f, 0.002241f, -0.002304f, -0.006294f, -0.00625f, 0.002876f, 0.005146f, 0.000603f,
- 0.00309f, -0.00912f, 0.002026f, 0.0096f, -0.000262f, 0.00007397f, 0.001089f, -0.00799f, 0.00948f,
- -0.0007935f, -0.00997f, 0.001588f, 0.009674f, -0.0006795f, 0.00958f, 0.00604f, -0.00975f, -0.001219f,
- -0.005093f, 0.00061f, 0.0002333f, 0.006195f, 0.006245f, 0.00548f, 0.006554f, 0.009155f, 0.003277f,
- -0.0027f, -0.002827f, 0.002981f, 0.00059f, -0.00643f, 0.001903f, 0.006195f, -0.001568f, -0.002792f,
- 0.001151f, -0.00969f, 0.0001194f, 0.006084f, -0.00789f, -0.00746f, -0.000923f, -0.002726f, -0.0009117f,
- -0.009155f, 0.0003529f, 0.002682f, 0.00394f, 0.0003521f, -0.006798f, 0.f, 0.006145f, -0.006645f,
- -0.0000278f, 0.005737f, -0.003601f, 0.008156f, 0.006905f, 0.00996f, 0.00752f, 0.00513f, -0.001212f,
- -0.005558f, -0.009796f, -0.009056f, 0.001026f, -0.003756f, 0.002048f, 0.00501f, 0.004303f, 0.00885f,
- -0.002895f, 0.00885f, 0.00881f, 0.008965f, -0.00772f, 0.000675f, -0.00361f, 0.009254f, 0.00947f,
- 0.002851f, -0.00443f, -0.0008383f, -0.001255f, 0.007088f, -0.00718f, -0.001156f, 0.00496f, 0.00543f,
- 0.009575f, -0.00932f, -0.00289f, -0.00961f, -0.005413f, 0.00887f, 0.008194f, 0.007217f, 0.001349f,
- -0.00616f, -0.00132f, 0.008255f, 0.008354f, -0.001022f, -0.00916f, 0.0012f, 0.00942f, -0.005272f,
- -0.007713f, 0.00924f, -0.002554f, 0.00812f, 0.002947f, 0.006466f, 0.007267f, 0.004383f, 0.006683f,
- -0.004047f, -0.001562f, 0.0000953f, -0.00198f, -0.001826f, -0.005013f, 0.008095f, -0.00878f, -0.006645f,
- 0.005096f, -0.0003052f, -0.00815f, -0.00986f, 0.0081f, 0.00661f, -0.00097f, 0.006916f, -0.007244f,
- 0.004272f, 0.00444f, -0.00546f, 0.003994f, -0.00191f, 0.001437f, 0.00408f, -0.000537f, -0.007557f,
- 0.0009537f, -0.00972f, -0.006805f, -0.007835f, -0.000847f, 0.005665f, -0.0085f, 0.005657f, 0.006027f,
- -0.009285f, 0.00652f, 0.005535f, 0.009224f, 0.0007205f, -0.00692f, -0.00881f, 0.005817f, -0.00506f,
- -0.00877f, -0.00991f, -0.001778f, -0.002598f, -0.00755f, 0.003616f, 0.00898f, 0.002537f, -0.001853f,
- -0.000725f, 0.00202f, 0.001978f, -0.0008383f, 0.004784f, -0.0003638f, -0.00895f, 0.00243f, -0.00395f,
- 0.001955f, -0.002853f, -0.005f, 0.00976f, -0.0006366f, -0.002913f, 0.002592f, -0.00857f, -0.0006256f,
- -0.0001568f, 0.003605f, -0.001659f, 0.000935f, -0.005302f, 0.00593f, -0.002056f, 0.003723f, 0.005863f,
- 0.0089f, -0.004147f, -0.007706f, 0.0006566f, 0.003222f, -0.00247f, 0.005234f, -0.009605f, -0.00279f,
- 0.00031f, -0.008606f, -0.00952f, 0.001459f, 0.008446f, -0.00921f, 0.00895f, -0.00951f, -0.002565f,
- 0.00084f, 0.006874f, -0.004066f, 0.004723f, -0.0006924f, 0.00932f, 0.003325f, -0.006763f, 0.004936f,
- -0.003439f, -0.000998f, -0.008224f, -0.00412f, 0.006996f, -0.007057f, -0.00992f, -0.004974f, 0.001361f,
- -0.009865f, 0.00982f, -0.00375f, -0.002928f, 0.00166f, -0.007782f, -0.001827f, 0.000567f, -0.002838f,
- -0.0002354f, -0.00259f, -0.00849f, -0.001284f, 0.002161f, 0.001709f, -0.00802f, 0.00199f, -0.003202f,
- 0.002773f, 0.009056f, -0.001113f, -0.006054f, -0.00209f, 0.007355f, 0.008194f, -0.005627f, -0.005226f,
- -0.00478f, 0.001043f, 0.002869f, -0.00657f, -0.003176f, -0.004704f, -0.004574f, -0.00434f, 0.007328f,
- 0.00895f, -0.00853f, -0.006207f, -0.00928f, -0.009476f, 0.009125f, 0.004627f, -0.004642f, -0.004658f,
- 0.00919f, 0.003496f, 0.002165f, 0.00413f, -0.007694f, 0.003744f, 0.001043f, 0.002182f, -0.00698f,
- -0.003906f, 0.00365f, 0.003763f, -0.0043f, 0.002554f, 0.0094f, 0.00586f, -0.00655f, -0.00171f,
- -0.0009985f, -0.00851f, 0.00584f, 0.004883f, -0.007523f, 0.005016f, 0.003046f, 0.005917f, -0.006622f,
- 0.00741f, -0.002499f, 0.0004418f, -0.003113f, 0.0003803f, 0.003252f, -0.00917f, 0.00506f, -0.006687f,
- -0.00916f, 0.000701f, 0.00945f, -0.002863f, 0.00827f, 0.00938f, 0.003405f, -0.00935f, -0.00912f,
- 0.00259f, 0.001822f, -0.00674f, 0.0008016f, -0.001132f, 0.00899f, 0.001555f, -0.0007024f, 0.00899f,
- -0.00938f, -0.00109f, -0.00674f, 0.001553f, 0.00696f, 0.009415f, 0.0005765f, -0.0002084f, 0.004097f,
- 0.005985f, 0.001656f, 0.005325f, -0.00839f, 0.003904f, 0.00822f, -0.003994f, 0.00635f, -0.000794f,
- -0.00667f, 0.002296f, -0.002838f, -0.00975f, -0.001081f, 0.005127f, 0.001922f, 0.005127f, -0.008156f,
- -0.006653f, 0.00935f, -0.00302f, -0.00052f, -0.005894f, -0.009674f, -0.00613f, 0.009705f, -0.006924f,
- 0.004726f, 0.004784f, -0.00146f, 0.001746f, -0.002958f, 0.009636f, 0.005665f, -0.000724f, 0.004875f,
- -0.001856f, -0.002975f, 0.0071f, 0.002045f, 0.00507f, -0.007042f, -0.006958f, 0.002089f, -0.003504f,
- 0.0004888f, -0.005943f, 0.007607f, -0.003822f, -0.004692f, 0.0001357f, 0.004456f, -0.00799f, -0.006413f,
- 0.002268f, 0.00888f, -0.00872f, -0.004936f, -0.0091f, -0.00353f, -0.0052f, -0.003223f, -0.00825f,
- 0.003952f, -0.002771f, 0.006344f, 0.00862f, 0.00904f, -0.00221f, -0.0001844f, -0.00227f, 0.000672f,
- -0.004852f, -0.005795f, -0.002771f, -0.00653f, -0.002579f, 0.006954f, 0.002605f, -0.00804f, 0.00432f,
- 0.0000249f, -0.004536f, -0.008514f, 0.00618f, -0.002804f, 0.00895f, -0.009094f, -0.009155f, -0.003836f,
- -0.0008125f, 0.007385f, 0.00554f, -0.0004065f, -0.00517f, -0.006493f, -0.007027f, 0.003748f, -0.00834f,
- -0.006668f, 0.00982f, -0.001279f, -0.0008125f, 0.000629f, 0.003786f, -0.00859f, -0.000755f, 0.0004015f,
- -0.003065f, -0.007042f, -0.00967f, 0.0004108f, 0.00947f, -0.007076f, -0.0006723f, 0.006496f, -0.001414f,
- 0.008194f, -0.000413f, 0.008125f, 0.00146f, -0.006462f, 0.002676f, -0.005474f, -0.003166f, 0.006027f,
- 0.001129f, 0.001874f, 0.001855f, 0.00766f, -0.006634f, -0.000823f, -0.00303f, 0.005795f, 0.00279f,
- 0.002512f, 0.006172f, 0.006474f, 0.000632f, -0.007507f, 0.001753f, -0.002531f, 0.002895f, -0.007034f,
- 0.004955f, -0.0096f, 0.007793f, -0.00803f, -0.0095f, 0.006615f, -0.00854f, 0.00214f, 0.00532f,
- -0.00995f, 0.00772f, 0.006977f, -0.00873f, -0.00617f, -0.00808f, -0.00479f, -0.00397f, 0.00456f,
- 0.003944f, 0.0001737f, 0.001538f, -0.005756f, 0.009964f, 0.002096f, -0.00984f, 0.001642f, 0.003113f,
- -0.00802f, -0.003527f, -0.00876f, 0.003502f, -0.00562f, 0.003378f, 0.006676f, 0.000644f, 0.002071f,
- -0.00587f, -0.00771f, -0.0009327f, -0.00441f, 0.007095f, 0.005478f, 0.00781f, 0.00952f, 0.006176f,
- 0.0003223f, 0.00818f, 0.00678f, -0.004147f, -0.00999f, 0.00903f, -0.00987f, 0.007553f, -0.00438f,
- 0.005028f, 0.0003302f, 0.0002394f, -0.005104f, -0.002537f, -0.005333f, 0.004635f, -0.005787f, -0.005177f,
- -0.005615f, -0.00463f, 0.0001181f, -0.00814f, 0.00656f, -0.00132f, 0.003115f, -0.006237f, -0.00123f,
- -0.008804f, -0.002682f, -0.00877f, 0.00749f, -0.00863f, 0.004997f, 0.007736f, -0.00963f, -0.002966f,
- -0.00405f, -0.004005f, 0.006763f, -0.00639f, 0.000797f, 0.002903f, 0.00967f, -0.0009356f, -0.00675f,
- 0.00917f, -0.0048f, 0.0088f, 0.007168f, 0.00394f, 0.005524f, 0.0002052f, -0.0004148f, 0.0059f,
- -0.002966f, 0.008f, -0.00955f, -0.008484f, 0.00856f, 0.003498f, -0.005703f, 0.004974f, 0.0089f,
- -0.004208f, -0.005203f, -0.007496f, 0.003206f, -0.007713f, -0.0068f, 0.00437f, 0.008896f, 0.0007954f,
- 0.002823f, -0.002413f, -0.004665f, 0.0007997f, -0.005394f, 0.00806f, -0.001563f, -0.001497f, -0.005314f,
- -0.00952f, 0.0093f, 0.005066f, 0.00407f, 0.004482f, -0.00788f, 0.001537f, 0.00806f, -0.005013f,
- -0.003735f, 0.00956f, -0.00946f, 0.002008f, -0.006847f, 0.003038f, 0.003141f, -0.005787f, 0.005665f,
- 0.002735f, -0.002401f, 0.003057f, 0.000753f, 0.004444f, 0.00805f, 0.001004f, -0.0065f, -0.001637f,
- 0.0065f, 0.004467f, -0.00896f, -0.006573f, -0.007236f, 0.007435f, -0.00392f, -0.001908f, -0.008736f,
- -0.0007854f, 0.000625f, 0.003866f, -0.002039f, -0.002193f, -0.006447f, -0.00793f, -0.002161f, -0.0073f,
- 0.00472f, 0.001314f, 0.006416f, -0.009224f, 0.00668f, 0.008865f, 0.009155f, -0.004684f, 0.00807f,
- -0.0008855f, 0.002748f, 0.001529f, -0.004765f, -0.001041f, 0.00859f, 0.005573f, 0.00433f, -0.009155f,
- -0.007614f, 0.00472f, -0.0009365f, 0.00003576f, 0.002872f, -0.003223f, 0.003098f, -0.001782f, 0.001795f,
- 0.006645f, 0.002974f, -0.0094f, 0.005337f, 0.00877f, -0.00649f, 0.00959f, -0.008156f, -0.0008917f,
- 0.006607f, 0.00905f, -0.001238f, -0.001246f, -0.002775f, -0.002815f, 0.00451f, -0.004486f, 0.003998f,
- 0.00956f, -0.00981f, 0.005096f, -0.00876f, -0.002571f, 0.002287f, -0.002996f, -0.008896f, -0.006973f,
- 0.003885f, 0.001993f, -0.006523f, 0.0048f, -0.005745f, 0.004883f, 0.005627f, -0.00919f, 0.00978f,
- -0.000961f, 0.00954f, 0.003023f, 0.006172f, -0.00371f, -0.00509f, -0.00392f, -0.00989f, 0.00212f,
- -0.00917f, -0.009865f, 0.00965f, 0.003618f, -0.004303f, 0.00628f, 0.002913f, 0.0086f, -0.00881f,
- 0.004963f, -0.006886f, -0.00000197f, -0.008736f, 0.004147f, -0.003227f, -0.001696f, -0.003815f, 0.00957f,
- -0.00994f, -0.006596f, 0.00925f, 0.007454f, -0.001091f, -0.0004747f, 0.009026f, 0.00854f, 0.00133f,
- -0.00263f, 0.00543f, 0.003836f, 0.004856f, -0.006695f, 0.005478f, -0.008415f, 0.003187f, -0.00998f,
- 0.009514f, 0.002903f, -0.005165f, -0.0004752f, -0.009f, -0.008965f, 0.005806f, 0.006153f, 0.00893f,
- -0.00877f, -0.006866f, 0.004154f, -0.008125f, 0.007202f, -0.005573f, 0.004f, -0.002998f, 0.002878f,
- 0.005672f, 0.00607f, -0.004578f, 0.001471f, -0.002363f, -0.00006247f, 0.0007734f, 0.001287f, -0.0006113f,
- 0.003868f, -0.00696f, -0.003672f, 0.00688f, -0.00908f, -0.00665f, 0.003775f, -0.006355f, -0.005634f,
- 0.00421f, 0.00937f, -0.004856f, 0.002947f, -0.003933f, -0.0086f, 0.00988f, 0.00546f, -0.0008826f,
- 0.00433f, 0.007183f, 0.002195f, -0.005333f, 0.006683f, 0.003277f, 0.001082f, 0.00579f, -0.00623f,
- -0.00966f, -0.002708f, 0.00627f, 0.00581f, -0.0095f, 0.008896f, -0.002478f, -0.00966f, 0.007526f,
- -0.001696f, 0.002949f, 0.001381f, -0.00684f, -0.005974f, 0.00413f, 0.00085f, 0.004032f, 0.004807f,
- 0.0004041f, -0.006992f, 0.003105f, -0.0002321f, 0.00867f, 0.00237f, 0.00464f, -0.00887f, -0.005978f,
- -0.005844f, -0.00826f, 0.005035f, 0.00953f, 0.006485f, -0.00415f, -0.00873f, -0.006836f, 0.00572f,
- 0.001606f, -0.00828f, -0.001708f, -0.006145f, 0.00914f, -0.00965f, 0.005646f, -0.00857f, 0.006638f,
- 0.00327f, 0.00424f, 0.001341f, 0.003788f, -0.000685f, 0.0061f, -0.00782f, 0.003334f, -0.0068f,
- 0.001557f, 0.005825f, -0.0058f, -0.000689f, 0.007496f, 0.00708f, -0.006107f, 0.007668f, -0.001199f,
- -0.00948f, 0.00668f, -0.003176f, 0.003733f, -0.001616f, 0.006714f, 0.00789f, 0.001432f, 0.004112f,
- 0.00384f, 0.009636f, 0.007053f, -0.00374f, 0.00495f, 0.00959f, 0.004135f, 0.00721f, 0.007225f,
- -0.0008454f, 0.008286f, 0.0000413f, 0.003618f, 0.004047f, 0.00454f, -0.0079f, 0.00869f, 0.00706f,
- -0.007492f, 0.00493f, 0.00689f, -0.0005245f, 0.00604f, 0.00357f, 0.00598f, -0.00959f, -0.003292f,
- 0.0008936f, 0.00904f, 0.002445f, 0.00894f, 0.00819f, 0.003876f, 0.002953f, 0.003384f, -0.006687f,
- 0.002918f, -0.0056f, -0.0003066f, -0.001384f, 0.007675f, 0.0009513f, -0.007656f, 0.00804f, -0.000968f,
- -0.000649f, 0.00913f, -0.0041f, 0.0002625f, -0.0001359f, -0.008865f, 0.002167f, 0.00687f, -0.00606f,
- 0.0003486f, 0.0003984f, -0.004803f, 0.006454f, -0.004997f, 0.00892f, -0.007423f, -0.001277f, -0.007504f,
- 0.00762f, 0.003056f, 0.001508f, -0.00391f, 0.00859f, -0.00768f, -0.003675f, 0.002884f, 0.006508f,
- 0.000506f, 0.002567f, 0.007607f, -0.003233f, 0.0073f, 0.003862f, -0.003817f, 0.00735f, 0.002506f,
- -0.00823f, -0.006706f, 0.005676f, -0.00931f, -0.004025f, 0.006542f, 0.000566f, 0.00919f, -0.002083f,
- -0.00783f, 0.0013485f, -0.00839f, 0.0089f, -0.0066f, 0.009674f, -0.00821f, 0.0061f, -0.002129f,
- 0.00598f, 0.008865f, 0.00513f, -0.00582f, -0.00459f, -0.00962f, -0.00962f, -0.005966f, -0.007187f,
- 0.00995f, 0.004295f, 0.004467f, 0.001008f, -0.00809f, 0.00922f, -0.00768f, -0.00994f, -0.005596f,
- 0.006706f, 0.00748f, 0.00942f, -0.00396f, 0.001708f, -0.00961f, 0.005653f, 0.00976f, -0.001643f,
- 0.003786f, -0.002264f, 0.002747f, -0.0003808f, 0.000354f, 0.001055f, 0.00584f, 0.006306f, 0.005363f,
- -0.006443f, -0.0005603f, 0.00871f, 0.00683f, -0.002083f, -0.00611f, -0.006573f, -0.0027f, 0.004917f,
- 0.006207f, 0.004932f, -0.00669f, 0.005665f, 0.002796f, 0.00901f, -0.000798f, 0.001478f, 0.003788f,
- 0.000707f, 0.00934f, 0.005985f, -0.00145f, -0.0008683f, 0.00339f, 0.002144f, 0.006596f, 0.00984f,
- 0.00258f, 0.0048f, 0.0003848f, -0.002644f, -0.002129f, -0.001171f, -0.002369f, -0.007328f, 0.00841f,
- -0.005325f, 0.00968f, -0.00982f, -0.003754f, -0.0006895f, 0.00784f, 0.003864f, 0.008316f, -0.003483f,
- 0.004986f, -0.003044f, -0.005714f, -0.001846f, -0.001568f, 0.0003648f, 0.00724f, 0.006336f, -0.003222f,
- -0.006836f, 0.001214f, -0.003124f, -0.0006356f, -0.001073f, 0.002682f, -0.007538f, -0.001701f, -0.00883f,
- 0.00986f, 0.006336f, 0.0011f, -0.00879f, -0.005875f, 0.004025f, 0.00613f, 0.004856f, -0.008896f,
- 0.0006967f, 0.0064f, 0.002707f, -0.002317f, -0.002214f, 0.002409f, -0.000346f, -0.006924f, 0.001986f,
- -0.003166f, 0.00836f, -0.00899f, 0.0034f, -0.007755f, 0.00407f, 0.00807f, 0.0076f, 0.003824f,
- 0.003876f, -0.00853f, -0.00649f, -0.003506f, 0.001777f, -0.009705f, -0.00516f, -0.0094f, 0.00939f,
- -0.00786f, -0.00911f, -0.000737f, 0.000864f, -0.00851f, 0.00786f, -0.003422f, -0.00832f, -0.0007277f,
- 0.005642f, -0.00868f, -0.002851f, 0.0005975f, -0.007347f, -0.001616f, -0.001303f, 0.00717f, -0.00231f,
- -0.008354f, -0.005333f, 0.00864f, 0.006123f, -0.00994f, 0.00313f, -0.00676f, -0.005806f, 0.008446f,
- -0.0007553f, -0.006416f, 0.00223f, -0.00579f, 0.00576f, -0.00892f, 0.002424f, -0.00486f, 0.00636f,
- 0.003344f, -0.003195f, 0.001562f, 0.00318f, -0.007202f, -0.001358f, -0.0001854f, 0.002499f, 0.001725f,
- 0.000389f, -0.006737f, 0.002745f, 0.000575f, -0.003534f, 0.004284f, 0.0019045f, 0.004898f, -0.004356f,
- 0.002254f, -0.00577f, 0.0018215f, -0.008736f, 0.00769f, -0.00885f, -0.00859f, -0.00441f, 0.00583f,
- -0.009285f, -0.00792f, -0.00922f, -0.003815f, -0.00886f, -0.005394f, -0.00663f, -0.008224f, -0.00353f,
- 0.002161f, 0.00301f, -0.00542f, -0.0085f, -0.007446f, -0.00846f, -0.00515f, 0.00204f, 0.00543f,
- -0.001219f, -0.007072f, 0.001966f, -0.00894f, 0.0008793f, -0.003418f, 0.00393f, -0.005283f, 0.005756f,
- 0.003225f, 0.002123f, 0.002283f, 0.00566f, 0.000477f, 0.00497f, 0.005295f, 0.002136f, 0.00692f,
- 0.00872f, 0.00936f, -0.005074f, 0.00645f, -0.001117f, 0.006493f, -0.00574f, 0.001013f, 0.003334f,
- -0.005703f, -0.006992f, -0.004314f, 0.005314f, 0.001457f, -0.00594f, -0.003252f, 0.00844f, 0.002502f,
- 0.002604f, 0.00289f, 0.00221f, -0.003344f, -0.006905f, -0.00799f, 0.007378f, -0.00945f, 0.006023f,
- -0.00791f, 0.001273f, 0.003849f, 0.007694f, 0.005424f, 0.00298f, -0.003618f, -0.0001827f, 0.002077f,
- 0.001976f, -0.006474f, 0.00079f, 0.00982f, 0.004166f, 0.007027f, 0.008606f, 0.00818f, 0.00697f,
- -0.003006f, 0.0045f, -0.00885f, -0.00515f, 0.00723f, -0.0001746f, -0.00727f, 0.006237f, -0.008385f,
- 0.008194f, -0.008316f, -0.002525f, 0.002558f, 0.00639f, 0.003586f, -0.00612f, -0.006756f, -0.008354f,
- 0.004883f, -0.00506f, -0.009f, -0.00537f, -0.001243f, -0.005596f, -0.00853f, -0.007545f, 0.00786f,
- 0.001839f, -0.002245f, 0.00544f, -0.00196f, 0.004967f, -0.003464f, -0.005108f, 0.003086f, 0.002628f,
- -0.002502f, -0.00665f, -0.006226f, 0.0079f, -0.002287f, 0.0003567f, -0.001279f, 0.004826f, 0.005432f,
- -0.00634f, -0.003204f, 0.0002022f, -0.00198f, -0.0008726f, 0.004055f, 0.00793f, -0.00427f, -0.00533f,
- 0.00734f, -0.00799f, -0.0051f, -0.009995f, 0.0051f, 0.00413f, -0.00679f, 0.00262f, 0.001331f,
- 0.001461f, -0.00865f, -0.00791f, -0.003975f, 0.002504f, 0.0002255f, 0.002337f, -0.00456f, -0.005974f,
- 0.000257f, -0.00545f, 0.00842f, 0.005585f, -0.0003774f, 0.0008087f, -0.001679f, 0.003853f, 0.00991f,
- 0.0031f, 0.00523f, -0.00721f, 0.000989f, -0.005642f, -0.001042f, 0.007935f, -0.006195f, 0.001426f,
- 0.00414f, 0.00925f, -0.00419f, 0.004852f, -0.00639f, 0.00694f, -0.007706f, -0.00684f, -0.00602f,
- -0.004444f, 0.005016f, -0.00803f, -0.00955f, 0.004097f, -0.003754f, 0.002384f, -0.007515f, 0.003508f,
- -0.00749f, 0.00519f, 0.00228f, 0.007015f, -0.007572f, -0.003864f, -0.00843f, 0.00543f, 0.00911f,
- 0.00774f, 0.009125f, -0.003473f, -0.00646f, 0.00856f, 0.004272f, 0.00534f, 0.003859f, -0.0001141f,
- 0.001515f, 0.003437f, 0.00737f, 0.003565f, -0.002705f, 0.003675f, 0.003023f, -0.0002156f, -0.00894f,
- 0.00103f, -0.001797f, -0.00854f, 0.001505f, -0.00876f, -0.003614f, 0.004887f, -0.005085f, 0.002449f,
- 0.00524f, -0.00589f, 0.00784f, 0.001411f, -0.0095f, 0.007797f, -0.003391f, 0.008316f, 0.0094f,
- 0.00917f, -0.00658f, -0.00685f, -0.005085f, -0.005375f, 0.008705f, -0.004093f, 0.00764f, -0.006172f,
- -0.00609f, -0.0005703f, -0.00941f, -0.007065f, 0.00942f, 0.00403f, 0.00392f, -0.0000164f, 0.000577f,
- 0.001058f, 0.006317f, 0.0008893f, 0.001935f, -0.009865f, -0.00542f, 0.001452f, 0.00916f, -0.00852f,
- -0.00081f, 0.00397f, 0.0069f, 0.003246f, -0.004456f, 0.00777f, -0.004444f, 0.003632f, -0.002512f,
- -0.00284f, 0.009926f, 0.00869f, -0.00636f, -0.006454f, 0.006805f, -0.00232f, -0.00924f, 0.006268f,
- 0.00501f, -0.00951f, -0.00518f, 0.006126f, 0.00966f, 0.00881f, -0.009346f, 0.00912f, 0.00341f,
- 0.00617f, 0.00984f, -0.00357f, 0.00596f, -0.0081f, -0.0006824f, -0.00711f, 0.004803f, 0.00484f,
- -0.000756f, 0.002865f, -0.00422f, 0.00005835f, 0.00912f, 0.000726f, 0.001402f, 0.00644f, -0.006542f,
- 0.006016f, 0.003975f, 0.00556f, 0.0000735f, -0.002203f, 0.003893f, -0.000724f, 0.005882f, -0.006226f,
- -0.006912f, 0.003027f, 0.0004182f, -0.00728f, -0.00726f, -0.00896f, 0.008095f, -0.001346f, 0.00898f,
- 0.002956f, -0.003334f, -0.007717f, -0.00876f, 0.00037f, -0.00727f, -0.003258f, 0.009476f, 0.009056f,
- 0.00598f, 0.00281f, 0.00586f, -0.00981f, -0.003296f, 0.00769f, -0.000486f, 0.0091f, 0.00634f,
- -0.00542f, 0.00512f, -0.002474f, -0.009514f, 0.00402f, -0.004787f, 0.00274f, -0.001112f, -0.002436f,
- 0.00949f, -0.000839f, -0.009155f, 0.002499f, 0.001512f, 0.001406f, -0.00313f, -0.002022f, -0.008896f,
- -0.00528f, -0.009254f, -0.002148f, -0.000707f, -0.0001829f, -0.001159f, 0.00411f, -0.007637f, -0.00364f,
- 0.005135f, -0.00928f, -0.0000797f, 0.004642f, -0.00817f, -0.007072f, -0.003914f, 0.00416f, 0.002985f,
- -0.0075f, -0.000736f, 0.008934f, 0.004204f, 0.0004723f, 0.006306f, -0.007675f, -0.007835f, 0.0005293f,
- -0.002478f, -0.006336f, 0.007996f, 0.002539f, 0.001836f, 0.00968f, 0.006844f, 0.001179f, 0.001448f,
- 0.006042f, 0.00292f, -0.007122f, -0.001914f, 0.004448f, 0.00822f, 0.00672f, 0.000714f, -0.001145f,
- 0.009415f, 0.0015335f, -0.005585f, -0.006104f, -0.0003273f, -0.00987f, 0.001559f, -0.00608f, 0.007664f,
- 0.00834f, -0.0002584f, -0.004097f, 0.00745f, 0.005417f, -0.002129f, 0.001597f, 0.00749f, -0.001676f,
- 0.006344f, 0.006905f, 0.004364f, -0.00739f, -0.001457f, 0.00806f, -0.008f, -0.004284f, -0.00717f,
- 0.00547f, 0.004463f, 0.00529f, -0.00843f, 0.008064f, 0.00556f, 0.0005236f, 0.00918f, -0.004986f,
- 0.00578f, -0.001013f, -0.003479f, -0.004425f, -0.0076f, -0.004093f, 0.003084f, -0.00531f, -0.00902f,
- -0.002844f, 0.004982f, -0.00986f, 0.003986f, 0.002125f, 0.004036f, -0.006798f, 0.000773f, 0.000544f,
- -0.0001241f, 0.009155f, 0.002682f, -0.00997f, -0.00826f, 0.003769f, 0.001383f, -0.005318f, 0.004673f,
- -0.005314f, 0.00691f, 0.00212f, -0.00656f, -0.006226f, -0.008705f, 0.00459f, -0.003798f, 0.00869f,
- -0.002985f, -0.000604f, 0.00826f, -0.00541f, -0.00502f, 0.000809f, -0.00969f, -0.006626f, 0.005123f,
- -0.0005465f, -0.00858f, 0.005554f, -0.002083f, 0.007343f, -0.001588f, -0.001642f, 0.0007577f, 0.00318f,
- -0.00391f, 0.00404f, 0.00886f, -0.006374f, -0.00958f, -0.005077f, -0.00218f, 0.00745f, 0.00944f,
- 0.007233f, 0.003042f, -0.003296f, 0.006786f, -0.006706f, 0.007114f, 0.00566f, 0.005325f, 0.007637f,
- -0.00661f, 0.0008025f, -0.002693f, 0.005634f, 0.001557f, -0.007133f, -0.00483f, -0.00654f, 0.006313f,
- -0.00926f, -0.00372f, -0.00583f, -0.004025f, 0.00761f, 0.00955f, 0.002691f, -0.00915f, -0.006084f,
- -0.008835f, 0.003885f, 0.009514f, -0.00841f, 0.003637f, -0.00765f, -0.005978f, 0.001959f, -0.005295f,
- -0.001565f, -0.003551f, -0.000824f, 0.005848f, -0.00010514f, 0.00828f, -0.003895f, -0.003197f, 0.00797f,
- 0.00998f, 0.004635f, 0.006504f, 0.007023f, -0.00675f, 0.001584f, 0.004642f, 0.007458f, -0.002005f,
- 0.0000653f, 0.00715f, 0.00402f, 0.00782f, -0.00331f, 0.00676f, 0.000039f, 0.00644f, -0.0007744f,
- 0.005688f, 0.00511f, -0.005135f, 0.000995f, 0.006756f, -0.002304f, 0.003553f, -0.00938f, -0.000616f,
- -0.00897f, -0.00685f, -0.00838f, 0.003983f, -0.004807f, 0.002314f, 0.00847f, 0.00846f, -0.007507f,
- 0.002136f, 0.005905f, -0.00899f, 0.0081f, 0.008f, 0.00889f, -0.00907f, -0.00489f, 0.00938f,
- -0.009254f, 0.00627f, 0.0052f, -0.002031f, -0.0006337f, -0.001191f, 0.001453f, -0.003918f, 0.001798f,
- -0.00491f, -0.002062f, -0.00889f, 0.00309f, 0.007526f, 0.0007014f, -0.001351f, -0.003838f, 0.00458f,
- 0.004005f, -0.00923f, 0.00581f, -0.002983f, -0.00901f, 0.007095f, 0.00844f, -0.00989f, 0.001532f,
- -0.00867f, 0.001821f, -0.005646f, 0.00698f, -0.001757f, -0.00102f, -0.00511f, -0.007774f, 0.002588f,
- -0.006096f, 0.005196f, -0.002117f, -0.0003762f, 0.00738f, 0.001219f, 0.00447f, 0.00867f, -0.00494f,
- 0.007313f, -0.008095f, 0.000967f, 0.004776f, 0.00296f, 0.001068f, 0.00818f, 0.00749f, -0.00939f,
- -0.00738f, -0.006214f, -0.00685f, 0.00569f, 0.00716f, 0.004375f, -0.00512f, -0.006252f, -0.004684f,
- -0.002974f, -0.007965f, 0.0025f, -0.00943f, 0.00539f, 0.0003204f, 0.0005164f, -0.006573f, 0.00646f,
- 0.00502f, 0.007965f, -0.002003f, -0.00609f, -0.009285f, -0.005028f, -0.00985f, 0.001395f, 0.00415f,
- 0.003494f, 0.00957f, 0.009834f, -0.005905f, 0.002436f, 0.001002f, -0.002335f, -0.00981f, 0.006714f,
- 0.005135f, -0.003138f, -0.00786f, 0.005497f, 0.003677f, 0.00479f, -0.00453f, 0.00845f, 0.007454f,
- 0.000992f, -0.00647f, 0.001218f, -0.004295f, 0.00004745f, 0.005558f, -0.002914f, 0.00861f, -0.008064f,
- 0.003328f, -0.003998f, -0.007595f, 0.00487f, 0.0008106f, 0.005287f, -0.003735f, 0.003054f, 0.006645f,
- -0.002422f, 0.00974f, -0.001171f, 0.006264f, 0.00908f, 0.002903f, 0.00446f, 0.002419f, 0.00806f,
- -0.002483f, 0.0089f, 0.0004303f, -0.001789f, -0.00638f, -0.005802f, -0.00953f, -0.00526f, 0.006203f,
- -0.001033f, -0.00721f, 0.00391f, 0.00923f, 0.006676f, 0.00495f, -0.002512f, -0.000916f, 0.005054f,
- -0.007652f, 0.004738f, 0.00826f, -0.00989f, -0.00202f, -0.00824f, -0.004333f, 0.002779f, -0.00531f,
- 0.00181f, -0.00475f, 0.005234f, -0.00558f, 0.002342f, -0.001395f, -0.005856f, 0.004074f, -0.00638f,
- -0.003561f, 0.00819f, 0.006454f, -0.00402f, -0.008766f, -0.006668f, -0.00244f, -0.00392f, -0.007248f,
- -0.00666f, 0.001226f, -0.0071f, 0.00746f, 0.00396f, -0.00057f, 0.0001602f, 0.006924f, -0.0004158f,
- -0.000988f, -0.008385f, 0.004936f, -0.001231f, 0.00533f, 0.00905f, 0.0015335f, 0.003677f, 0.00751f,
- -0.00807f, -0.0051f, 0.00774f, -0.000592f, 0.003368f, -0.001825f, -0.003403f, 0.008194f, -0.0004606f,
- 0.00312f, -0.004196f, 0.008026f, 0.004883f, -0.003073f, -0.006607f, 0.00847f, -0.007446f, -0.00982f,
- -0.002375f, 0.009186f, 0.00991f, 0.005642f, -0.00632f, -0.005085f, 0.0084f, 0.002087f, 0.004f,
- 0.002495f, 0.004326f, 0.00969f, -0.003504f, 0.008514f, 0.000959f, 0.003632f, -0.001369f, 0.005737f,
- 0.002361f, -0.00802f, -0.006603f, 0.007866f, -0.008675f, 0.009384f, 0.001016f, 0.006927f, -0.005165f,
- 0.001802f, -0.002798f, 0.008415f, 0.00439f, 0.003819f, 0.002295f, 0.006844f, -0.006813f, 0.0003488f,
- 0.000659f, 0.00963f, -0.00946f, 0.002861f, -0.00614f, 0.002499f, -0.00706f, 0.003216f, -0.003124f,
- -0.004585f, 0.001135f, -0.00212f, 0.007435f, -0.003775f, -0.0001405f, -0.000892f, 0.006218f, -0.005333f,
- 0.007397f, 0.003202f, 0.009026f, 0.003717f, 0.00787f, 0.005188f, 0.0002823f, -0.0052f, 0.00797f,
- -0.0009027f, -0.006462f, 0.00908f, -0.001527f, 0.005005f, 0.005547f, 0.00665f, -0.002155f, -0.00641f,
- 0.00467f, -0.002872f, 0.000676f, 0.0009217f, 0.00424f, -0.000898f, 0.00932f, 0.004444f, -0.009834f,
- 0.00908f, -0.0000113f, -0.00378f, 0.00792f, -0.00931f, -0.002563f, 0.003622f, 0.00972f, -0.0066f,
- -0.002348f, -0.00787f, 0.004368f, -0.00385f, 0.0099f, 0.00617f, -0.001304f, 0.008575f, -0.00803f,
- -0.008354f, 0.00794f, -0.00924f, 0.0069f, -0.00811f, 0.000215f, -0.00519f, -0.001069f, 0.000882f,
- -0.007378f, 0.006447f, -0.003225f, -0.00484f, -0.00356f, -0.0004394f, -0.002144f, -0.001932f, 0.0007205f,
- -0.00976f, 0.008514f, -0.006294f, 0.00618f, -0.001758f, -0.00713f, -0.00912f, 0.004726f, 0.00334f,
- 0.00847f, -0.0001967f, 0.005165f, -0.004944f, -0.00915f, 0.0062f, -0.00553f, 0.0084f, -0.0054f,
- 0.002823f, 0.00272f, -0.00271f, -0.009514f, 0.00629f, -0.006054f, 0.008865f, -0.00813f, -0.0076f,
- 0.00857f, -0.003681f, -0.00738f, -0.00872f, -0.001488f, 0.00926f, -0.001791f, 0.00471f, -0.00482f,
- 0.007812f, -0.004654f, -0.006138f, 0.003813f, 0.005768f, -0.00375f, -0.00992f, -0.000584f, 0.00783f,
- -0.004147f, 0.001611f, 0.001342f, -0.006832f, -0.00138f, 0.005325f, -0.0000265f, 0.009445f, 0.00872f,
- 0.001329f, -0.0026f, 0.002577f, 0.0072f, 0.00547f, 0.006428f, -0.004864f, 0.00876f, -0.00906f,
- 0.007317f, -0.007233f, -0.00774f, 0.003387f, -0.002037f, 0.00125f, 0.00655f, -0.003298f, 0.008514f,
- -0.003757f, 0.007935f, -0.003181f, 0.00629f, 0.00838f, 0.0009594f, 0.006897f, -0.008835f, 0.00446f,
- -0.0082f, -0.006042f, 0.00761f, -0.00883f, 0.002434f, 0.001002f, 0.00712f, -0.005688f, 0.003359f,
- -0.00606f, 0.002512f, 0.00576f, 0.006126f, 0.0009394f, -0.00787f, -0.00485f, 0.005936f, 0.002037f,
- -0.0024f, -0.00618f, -0.00157f, 0.00702f, -0.007637f, 0.0077f, -0.00784f, -0.0062f, -0.00975f,
- -0.00849f, 0.00843f, 0.003843f, -0.006443f, 0.004993f, -0.0001615f, 0.00902f, 0.00811f, 0.005333f,
- 0.002123f, 0.001081f, 0.0086f, -0.003103f, 0.005783f, 0.004936f, -0.00898f, 0.001179f, 0.0007f,
- 0.003462f, -0.00855f, 0.00254f, -0.0000039f, -0.00468f, 0.0012455f, 0.003431f, 0.007538f, 0.0082f,
- 0.00843f, -0.001547f, 0.006157f, 0.001941f, -0.0013895f, -0.003096f, -0.003883f, -0.006382f, -0.00475f,
- 0.008766f, -0.003225f, 0.0008793f, -0.002806f, -0.00432f, 0.003944f, 0.008286f, 0.003141f, -0.00975f,
- -0.00439f, -0.007645f, 0.0093f, 0.005238f, -0.002018f, -0.006023f, -0.001462f, 0.00286f, 0.00525f,
- 0.005463f, -0.0005217f, -0.0003283f, -0.003103f, -0.007656f, -0.003311f, -0.0002983f, 0.005165f, 0.007187f,
- 0.00674f, -0.002645f, 0.00882f, 0.009995f, -0.003174f, -0.002956f, -0.00978f, 0.00841f, 0.005043f,
- 0.00798f, 0.00003827f, -0.004494f, -0.00883f, -0.0003128f, -0.0015955f, 0.00958f, 0.001948f, -0.007664f,
- -0.002064f, 0.002949f, 0.008736f, 0.00684f, 0.00804f, 0.004642f, -0.000742f, 0.001874f, -0.004864f,
- 0.0003529f, -0.001284f, 0.00896f, -0.006954f, -0.003616f, 0.0078f, 0.00815f, -0.00876f, -0.002783f,
- -0.00649f, 0.00976f, 0.009125f, 0.0019f, -0.0004215f, 0.00461f, 0.001037f, 0.009384f, 0.003422f,
- 0.001194f, 0.00923f, 0.00554f, -0.00855f, -0.001592f, -0.002981f, 0.006016f, 0.002314f, -0.00483f,
- 0.002476f, -0.00894f, -0.000574f, 0.0096f, -0.0002362f, -0.002018f, 0.00283f, 0.00251f, -0.0001559f,
- -0.00557f, 0.00661f, -0.002537f, 0.005524f, 0.00961f, -0.002073f, 0.00454f, -0.006428f, 0.001997f,
- -0.00446f, -0.0007524f, 0.002176f, -0.00209f, -0.00874f, 0.001289f, 0.00523f, 0.001575f, -0.008736f,
- 0.007057f, -0.0069f, -0.00512f, -0.005383f, 0.0001678f, 0.001076f, 0.007683f, -0.006207f, -0.006233f,
- -0.00585f, -0.004894f, 0.00773f, 0.00627f, -0.0008707f, -0.00574f, -0.002068f, -0.0003157f, -0.00921f,
- -0.006275f, 0.007275f, -0.0004473f, 0.002474f, -0.009186f, 0.001432f, 0.003687f, -0.004425f, -0.002018f,
- 0.00922f, -0.00788f, 0.000894f, -0.001047f, -0.001193f, 0.009094f, -0.0039f, 0.00977f, 0.00951f,
- 0.00976f, 0.002201f, 0.006214f, -0.002117f, 0.006203f, 0.00278f, -0.006725f, -0.006157f, 0.003757f,
- -0.001729f, 0.005405f, -0.00904f, -0.000435f, -0.002148f, -0.00849f, 0.00923f, -0.008194f, -0.001804f,
- -0.00392f, 0.0002866f, -0.007317f, 0.005623f, -0.002657f, -0.005657f, 0.006363f, 0.00205f, 0.005215f,
- 0.00376f, 0.001134f, -0.003138f, 0.00569f, 0.008446f, -0.003283f, 0.004047f, -0.00322f, -0.001756f,
- -0.006763f, 0.001577f, -0.007225f, 0.006092f, 0.004112f, -0.006554f, -0.00428f, 0.004684f, -0.000417f,
- 0.00418f, -0.000349f, -0.00676f, -0.004097f, -0.00899f, 0.004936f, 0.00864f, -0.006325f, -0.004665f,
- -0.00834f, 0.00238f, 0.006153f, -0.00914f, 0.004246f, -0.00963f, 0.003986f, 0.00887f, 0.00852f,
- 0.0002384f, 0.007866f, -0.002577f, 0.0007524f, -0.004887f, -0.0003715f, 0.00564f, 0.008606f, -0.009705f,
- -0.009796f, -0.001706f, -0.00965f, 0.00824f, 0.0009446f, -0.00514f, 0.00492f, 0.002787f, 0.00643f,
- -0.0002482f, 0.003603f, 0.004097f, 0.00916f, -0.005463f, -0.003786f, 0.00269f, -0.00688f, 0.002872f,
- 0.0079f, 0.002403f, -0.000562f, 0.00747f, -0.00349f, 0.004925f, -0.009f, -0.003199f, -0.0008674f,
- 0.004513f, 0.001112f, 0.00242f, -0.003345f, -0.00588f, -0.001415f, 0.001788f, -0.00345f, -0.007744f,
- 0.005596f, -0.00871f, -0.001603f, -0.0001678f, -0.00862f, 0.00929f, -0.005604f, 0.00986f, 0.005383f,
- 0.00959f, 0.00005203f, -0.002613f, 0.000881f, 0.00828f, -0.00738f, 0.001506f, 0.000615f, -0.001396f,
- 0.005566f, -0.00815f, -0.00447f, 0.002577f, -0.00938f, -0.0007024f, 0.000968f, 0.00785f, 0.001473f,
- -0.004387f, 0.008286f, -0.003094f, 0.008125f, -0.004494f, -0.00425f, 0.004585f, -0.00964f, 0.002777f,
- -0.00888f, 0.005466f, 0.00231f, -0.001025f, -0.009186f, 0.004265f, 0.002234f, -0.002064f, 0.006973f,
- -0.007336f, 0.001036f, -0.00965f, -0.003597f, 0.000792f, -0.006615f, 0.00904f, 0.00902f, -0.004856f,
- -0.00782f, -0.0004456f, 0.004826f, -0.001932f, 0.003588f, -0.001571f, -0.003286f, -0.00523f, -0.002085f,
- 0.004658f, 0.00324f, -0.00974f, 0.007122f, -0.00806f, -0.003452f, -0.00996f, 0.0004315f, -0.004436f,
- 0.00442f, 0.0003521f, -0.0000391f, 0.00986f, 0.007553f, 0.00816f, 0.004242f, -0.00706f, 0.00857f,
- -0.009705f, -0.00789f, 0.006126f, 0.00494f, 0.001126f, -0.003017f, -0.0005965f, -0.00928f, 0.001935f,
- -0.00866f, -0.002542f, 0.003275f, 0.0001297f, -0.00935f, 0.005028f, 0.004097f, -0.006817f, 0.00791f,
- 0.0001851f, -0.002525f, 0.00906f, 0.000608f, 0.0004106f, -0.00859f, -0.005623f, -0.00567f, 0.00434f,
- 0.004124f, 0.000519f, 0.00947f, -0.002487f, -0.00738f, 0.009346f, -0.004936f, 0.007263f, -0.00096f,
- 0.00493f, -0.00823f, 0.003119f, -0.0003824f, 0.0007586f, 0.006584f, 0.00392f, -0.008125f, 0.006313f,
- 0.007812f, -0.005913f, 0.005547f, -0.0001316f, -0.007523f, 0.00768f, 0.00142f, 0.00912f, -0.003622f,
- 0.00852f, 0.005966f, -0.004467f, -0.00919f, -0.00866f, -0.00875f, -0.0000665f, 0.000144f, 0.00649f,
- 0.003706f, -0.001643f, -0.003508f, -0.005817f, -0.0059f, 0.008896f, 0.0088f, -0.005962f, -0.003698f,
- -0.003626f, 0.001465f, 0.003386f, 0.002172f, 0.00159f, 0.003794f, 0.00751f, 0.001184f, -0.0008216f,
- -0.006474f, 0.00761f, -0.006603f, 0.005993f, 0.003044f, 0.00322f, -0.00928f, -0.00667f, -0.00599f,
- 0.00869f, 0.001393f, -0.006184f, -0.002693f, 0.003727f, -0.003624f, 0.002987f, -0.002718f, -0.001762f,
- -0.007366f, -0.00294f, -0.004993f, -0.00977f, 0.00814f, -0.001241f, 0.001603f, -0.00352f, -0.004997f,
- -0.005177f, -0.002817f, 0.002464f, 0.00763f, 0.00547f, -0.007217f, -0.00507f, 0.000908f, -0.000513f,
- 0.001423f, -0.0006895f, 0.001677f, 0.001864f, -0.00401f, -0.003475f, 0.00604f, -0.003687f, -0.008606f,
- -0.00724f, -0.0061f, 0.002502f, -0.00612f, -0.003128f, 0.000557f, 0.001442f, -0.007397f, -0.0088f,
- -0.0009484f, 0.007244f, -0.008804f, -0.00847f, -0.00967f, 0.00989f, 0.00872f, -0.005753f, 0.003027f,
- 0.0014105f, 0.007397f, -0.005905f, 0.007214f, 0.005665f, 0.001882f, -0.002838f, -0.003008f, -0.00795f,
- -0.000239f, 0.0064f, 0.005333f, 0.005028f, 0.006863f, -0.004f, -0.00592f, -0.001575f, 0.005398f,
- 0.009575f, -0.003317f, 0.00983f, -0.0006003f, 0.005287f, 0.009094f, -0.00502f, -0.00495f, -0.00962f,
- 0.000787f, 0.005604f, -0.006504f, 0.002504f, -0.004066f, -0.009766f, -0.0074f, -0.00766f, 0.009705f,
- 0.00814f, -0.005157f, -0.001017f, -0.008316f, -0.00004405f, -0.00802f, -0.004677f, -0.004894f, -0.00705f,
- 0.00784f, 0.00448f, -0.007553f, -0.0028f, -0.006226f, 0.0000136f, -0.004192f, -0.00755f, 0.00278f,
- 0.00343f, -0.0006332f, -0.00343f, -0.004555f, -0.0093f, 0.00261f, 0.00926f, -0.005093f, 0.00627f,
- -0.00848f, -0.00984f, -0.001426f, -0.00226f, -0.002077f, -0.001703f, 0.009636f, 0.007664f, -0.003628f,
- 0.002018f, -0.006012f, -0.00473f, 0.003834f, 0.00939f, -0.00827f, -0.00812f, -0.00792f, 0.00924f,
- 0.00776f, 0.001537f, -0.00287f, -0.002401f, -0.00831f, -0.00903f, 0.00591f, 0.003252f, -0.006348f,
- 0.001455f, 0.00674f, -0.002382f, 0.0003512f, -0.0017185f, 0.00684f, 0.00665f, 0.00782f, -0.00969f,
- 0.00418f, 0.00442f, 0.00979f, 0.006382f, 0.004642f, 0.00398f, 0.007797f, 0.005234f, -0.005566f,
- -0.00903f, 0.003168f, -0.005596f, 0.00006646f, 0.00995f, -0.002335f, -0.00548f, 0.005383f, -0.004562f,
- 0.00811f, -0.005035f, 0.0008745f, -0.0086f, -0.00786f, -0.00566f, -0.0096f, -0.000744f, 0.00511f,
- -0.003363f, 0.002739f, 0.002033f, 0.005455f, -0.001077f, 0.003887f, 0.00735f, 0.00757f, 0.008965f,
- -0.002888f, 0.002462f, 0.000919f, 0.0008416f, -0.003096f, 0.00875f, -0.002434f, 0.00318f, -0.002779f,
- 0.00725f, 0.005062f, 0.00073f, 0.00845f, 0.003576f, 0.002874f, -0.00836f, -0.00859f, 0.00916f,
- -0.00745f, 0.00869f, 0.001855f, 0.005814f, -0.002064f, 0.0066f, -0.009346f, 0.004307f, -0.00966f,
- 0.00877f, -0.002394f, -0.00977f, 0.002356f, -0.008255f, 0.001052f, 0.00495f, -0.00963f, 0.00886f,
- -0.00476f, -0.00917f, -0.000619f, -0.00593f, 0.005497f, 0.003141f, 0.002428f, 0.003363f, 0.001099f,
- 0.00731f, -0.005577f, 0.00666f, -0.00328f, 0.004677f, 0.00761f, -0.00864f, -0.00873f, -0.00282f,
- -0.004177f, 0.00867f, -0.00536f, 0.004387f, -0.007294f, -0.0099f, 0.001112f, -0.001063f, 0.004284f,
- 0.000729f, 0.005604f, 0.00434f, 0.00563f, -0.00618f, 0.00464f, 0.004417f, 0.00524f, -0.00052f,
- -0.002462f, -0.000902f, 0.005207f, -0.002256f, 0.000805f, -0.006252f, 0.003262f, 0.007603f, -0.000191f,
- 0.003582f, -0.002598f, -0.003662f, -0.005585f, -0.00007087f, -0.00784f, -0.001778f, 0.00996f, -0.00643f,
- 0.009796f, -0.002966f, 0.005848f, -0.003027f, -0.007587f, -0.003654f, -0.00882f, -0.001206f, -0.005836f,
- -0.0089f, -0.00608f, -0.003944f, -0.000564f, -0.00329f, 0.000377f, 0.000702f, 0.000859f, 0.002554f,
- 0.001499f, 0.005997f, 0.0006666f, -0.00584f, 0.005337f, -0.00734f, 0.006847f, 0.00829f, 0.003925f,
- -0.00837f, -0.005886f, -0.006927f, -0.000641f, -0.0000388f, 0.003124f, 0.007427f, 0.00767f, -0.002771f,
- -0.005985f, 0.002094f, -0.007442f, -0.001377f, 0.003183f, 0.0003796f, 0.0068f, 0.0008273f, -0.002102f,
- 0.003433f, -0.00931f, 0.0003903f, -0.00771f, -0.000703f, 0.003122f, 0.00833f, 0.001467f, 0.00769f,
- -0.004578f, -0.007393f, 0.0054f, -0.007797f, -0.003767f, -0.009735f, -0.0007954f, 0.005028f, -0.00809f,
- 0.002352f, -0.0002111f, 0.003624f, 0.00502f, 0.001048f, 0.00922f, 0.003426f, 0.002258f, -0.00708f,
- 0.00517f, -0.00919f, -0.00881f, -0.00548f, 0.00891f, 0.00919f, 0.00597f, 0.001098f, 0.004875f,
- 0.004875f, 0.00846f, 0.00829f, 0.003426f, 0.001049f, 0.00669f, 0.003994f, 0.006195f, -0.004585f,
- -0.001221f, -0.000247f, -0.00613f, -0.00613f, 0.00436f, 0.006775f, -0.001169f, -0.001771f, -0.001071f,
- -0.003635f, -0.004475f, -0.00216f, -0.003502f, 0.002285f, -0.006702f, 0.0074f, 0.004845f, 0.00123f,
- -0.00434f, -0.0082f, 0.0000914f, 0.00325f, -0.00717f, -0.003687f, 0.003479f, 0.005894f, -0.002655f,
- 0.00833f, 0.002365f, -0.00927f, 0.006416f, -0.0031f, 0.009834f, 0.006855f, 0.004673f, 0.00857f,
- -0.00627f, 0.00887f, -0.002636f, -0.0066f, -0.003975f, 0.003056f, -0.001572f, -0.005142f, 0.007393f,
- 0.00863f, -0.000665f, -0.005146f, 0.008965f, 0.005505f, -0.001827f, -0.001454f, 0.002926f, -0.002275f,
- -0.006184f, 0.00991f, -0.005035f, -0.003462f, 0.00855f, -0.009125f, 0.002832f, 0.005817f, 0.007187f,
- 0.005844f, -0.003204f, -0.002201f, -0.0095f, -0.00862f, -0.00896f, 0.00543f, 0.00010115f, 0.00392f,
- 0.004917f, -0.002266f, 0.0003471f, 0.006306f, -0.004726f, -0.002298f, 0.00234f, -0.004726f, 0.00924f,
- -0.005363f, -0.0002112f, -0.0099f, 0.005604f, -0.00523f, -0.004627f, -0.001949f, -0.00936f, 0.002743f,
- -0.001635f, 0.001984f, 0.00972f, -0.00359f, 0.003296f, 0.00074f, 0.004654f, 0.00995f, -0.001584f,
- 0.003048f, 0.0006003f, -0.003628f, -0.007668f, -0.002537f, -0.006584f, 0.00576f, 0.00864f, -0.00899f,
- -0.009636f, -0.005394f, 0.00433f, 0.00706f, 0.005005f, -0.004707f, 0.004597f, 0.00852f, 0.008835f,
- 0.003904f, 0.00457f, 0.004128f, 0.005028f, -0.003986f, 0.005997f, 0.0002208f, 0.00777f, 0.00963f,
- 0.005787f, 0.007023f, 0.00553f, 0.00449f, 0.005814f, 0.003082f, 0.0093f, 0.00472f, -0.00985f,
- 0.00938f, 0.00558f, 0.007088f, 0.00391f, -0.00918f, 0.008415f, 0.00902f, 0.004173f, -0.002716f,
- -0.009926f, -0.00801f, -0.009705f, -0.0086f, -0.009865f, 0.003788f, -0.0092f, 0.00887f, -0.001495f,
- -0.00314f, -0.003246f, -0.000836f, 0.001646f, 0.00902f, -0.007233f, -0.00376f, -0.0057f, 0.005787f,
- -0.002974f, 0.00872f, 0.0086f, -0.00443f, 0.003622f, 0.004593f, 0.008026f, -0.0003214f, 0.00858f,
- -0.00338f, 0.00772f, 0.00448f, 0.00855f, 0.001066f, -0.004692f, -0.005737f, 0.007565f, -0.0002706f,
- -0.002792f, -0.00949f, 0.000827f, -0.004967f, 0.00864f, 0.00788f, 0.009094f, -0.001957f, -0.002716f,
- 0.000686f, -0.00499f, -0.004173f, 0.002407f, 0.00923f, 0.001411f, -0.0005016f, 0.00746f, -0.0087f,
- -0.002703f, -0.003134f, -0.001611f, 0.007404f, -0.00999f, -0.004158f, 0.00556f, 0.0005794f, 0.003775f,
- -0.001105f, -0.00338f, 0.00999f, 0.006966f, 0.005802f, -0.009735f, -0.009834f, -0.00723f, -0.00656f,
- -0.007538f, 0.00995f, 0.00586f, 0.001463f, -0.001861f, -0.007015f, 0.005455f, -0.00492f, -0.005337f,
- -0.00855f, -0.002764f, 0.003605f, 0.00967f, -0.007256f, -0.002594f, 0.00397f, -0.00508f, -0.004555f,
- 0.009476f, -0.0006495f, 0.003998f, -0.0087f, 0.007294f, -0.007748f, 0.001855f, -0.0002816f, -0.00983f,
- -0.007416f, 0.004444f, 0.003036f, 0.005066f, 0.001116f, -0.0001506f, -0.003181f, -0.003258f, -0.00816f,
- 0.00821f, -0.0007715f, 0.00669f, 0.002674f, 0.004074f, 0.009605f, 0.001936f, -0.0052f, -0.002779f,
- 0.003435f, 0.003592f, -0.00787f, 0.002615f, 0.007996f, 0.002047f, 0.002438f, 0.000739f, -0.002443f,
- 0.00817f, 0.009995f, 0.00749f, 0.00953f, 0.007427f, -0.003246f, -0.004795f, 0.003834f, 0.0087f,
- -0.00863f, 0.003105f, -0.003313f, -0.006187f, 0.005104f, -0.00093f, 0.004158f, 0.003963f, -0.00579f,
- -0.004044f, 0.004044f, -0.0005593f, -0.00388f, -0.00249f, 0.006115f, 0.00322f, 0.007347f, 0.00813f,
- -0.005142f, -0.0004606f, 0.00646f, 0.002186f, 0.00812f, 0.004818f, 0.0009236f, -0.00864f, 0.00948f,
- -0.003057f, 0.003445f, -0.004444f, 0.001763f, -0.005806f, 0.001699f, 0.00843f, -0.007423f, -0.001351f,
- -0.007317f, -0.001196f, 0.002996f, 0.005066f, 0.003227f, 0.00547f, -0.00923f, 0.0008106f, 0.00789f,
- -0.006508f, -0.0003939f, -0.002443f, 0.007107f, -0.00692f, -0.007645f, -0.00353f, 0.00661f, 0.000988f,
- -0.00769f, -0.003134f, 0.002548f, 0.00495f, 0.0034f, 0.001454f, 0.00344f, -0.00323f, -0.006203f,
- 0.001063f, 0.008736f, -0.00737f, 0.00234f, -0.00315f, -0.008865f, -0.003918f, 0.006042f, 0.0003307f,
- -0.001405f, 0.002129f, -0.00682f, 0.000836f, -0.005436f, 0.008385f, -0.002783f, -0.0007734f, -0.007088f,
- -0.005924f, 0.00951f, 0.000002f, -0.00504f, -0.005474f, -0.00897f, 0.00339f, -0.003044f, 0.0019245f,
- 0.00596f, 0.00756f, -0.005936f, 0.007416f, -0.005173f, 0.006367f, 0.0015545f, -0.001073f, 0.008095f,
- 0.004868f, 0.0000308f, -0.005302f, -0.0003858f, -0.00421f, -0.00386f, 0.00925f, 0.004604f, 0.001006f,
- -0.004482f, 0.00634f, -0.006126f, -0.00878f, 0.0095f, -0.006985f, -0.00575f, -0.001845f, -0.002335f,
- 0.00908f, 0.00764f, -0.00405f, 0.003431f, 0.004726f, 0.0002171f, -0.005314f, -0.00693f, 0.00867f,
- 0.0007024f, -0.007217f, 0.006042f, -0.0002111f, 0.00475f, -0.00635f, 0.00984f, 0.00829f, -0.0008802f,
- -0.005093f, -0.007996f, -0.003607f, -0.00965f, -0.001188f, -0.002707f, 0.002533f, 0.00328f, -0.004807f,
- -0.002724f, -0.005733f, 0.007996f, -0.003893f, -0.0002323f, -0.00577f, -0.007263f, 0.00416f, -0.007385f,
- -0.004906f, 0.002007f, -0.00773f, -0.0004334f, -0.00542f, -0.0009217f, 0.008545f, 0.0005693f, 0.0094f,
- -0.000956f, -0.002106f, -0.0082f, -0.006363f, 0.00431f, -0.001059f, -0.0054f, 0.002123f, 0.0004594f,
- -0.003489f, -0.005173f, -0.007595f, 0.007782f, -0.0001341f, 0.00977f, -0.00463f, -0.0002378f, -0.002296f,
- 0.00667f, 0.00701f, 0.001323f, -0.001699f, 0.00955f, -0.0091f, 0.0089f, 0.00791f, -0.0003197f,
- 0.007835f, -0.00828f, 0.00854f, 0.00239f, 0.008385f, 0.001974f, 0.000486f, 0.00991f, 0.006542f,
- 0.007866f, -0.004803f, -0.004913f, -0.00513f, -0.0004153f, 0.00995f, -0.00516f, -0.003317f, 0.00682f,
- 0.0004165f, -0.00903f, -0.005344f, 0.00786f, 0.003769f, 0.004158f, 0.0002446f, 0.00589f, -0.002949f,
- 0.0073f, -0.002398f, -0.004757f, 0.0002432f, -0.00439f, -0.00454f, 0.000453f, 0.00823f, -0.009575f,
- 0.00535f, -0.008575f, -0.00893f, 0.004303f, 0.00502f, 0.00617f, -0.004402f, 0.00919f, -0.00865f,
- 0.00876f, 0.003645f, 0.0002997f, -0.00925f, -0.007076f, 0.004448f, 0.005196f, -0.003986f, 0.007084f,
- -0.000285f, -0.002855f, -0.000422f, -0.00872f, -0.005013f, 0.00952f, -0.008446f, -0.004044f, -0.00907f,
- 0.007072f, -0.00918f, -0.007835f, 0.000878f, -0.006847f, -0.006f, 0.00731f, -0.001876f, -0.002565f,
- -0.003584f, -0.003006f, -0.00723f, -0.003433f, 0.0004973f, -0.00795f, 0.0005007f, 0.00608f, 0.00671f,
- 0.0001765f, 0.00439f, -0.003738f, -0.006035f, 0.00010353f, -0.00374f, 0.0008683f, 0.00773f, -0.0004847f,
- -0.000992f, 0.004658f, -0.003555f, -0.0056f, -0.001982f, 0.00812f, 0.003386f, -0.001584f, 0.003508f,
- -0.006138f, -0.00587f, 0.001421f, -0.009094f, -0.00468f, -0.0086f, 0.003637f, 0.00896f, 0.00804f,
- -0.00744f, 0.002382f, -0.0097f, 0.000659f, 0.007782f, 0.002981f, -0.00869f, 0.0000934f, -0.00882f,
- 0.002771f, -0.009544f, 0.0035f, 0.004124f, -0.0014f, -0.006294f, -0.007614f, 0.00931f, 0.009674f,
- 0.0003185f, -0.004295f, 0.007084f, -0.0035f, -0.00334f, -0.001754f, 0.001216f, -0.004375f, 0.003244f,
- 0.0001901f, 0.001547f, 0.007183f, 0.006447f, 0.005108f, 0.00679f, 0.001068f, -0.00587f, 0.005745f,
- -0.00634f, 0.0058f, 0.006985f, -0.000697f, 0.00008917f, 0.007835f, -0.0004838f, 0.004795f, -0.006832f,
- 0.002398f, 0.00687f, -0.001582f, 0.00709f, -0.00908f, -0.001573f, 0.009865f, -0.001476f, -0.000526f,
- 0.00477f, 0.008026f, -0.00171f, 0.00979f, -0.005592f, 0.0006247f, -0.00774f, 0.00463f, -0.006676f,
- 0.004368f, -0.002373f, -0.005127f, -0.0013275f, -0.002306f, -0.0087f, 0.00997f, 0.005493f, 0.003786f,
- -0.004414f, -0.005947f, 0.003181f, -0.0004156f, 0.00909f, -0.00656f, 0.001926f, 0.0003731f, -0.009636f,
- 0.003124f, -0.0000686f, -0.001972f, -0.006584f, 0.0009604f, 0.004086f, 0.009865f, 0.001302f, -0.00989f,
- -0.0086f, 0.005177f, 0.006493f, -0.00523f, -0.00443f, 0.001586f, 0.00937f, 0.007458f, 0.001883f,
- 0.00774f, 0.0004454f, 0.000493f, 0.0003722f, -0.00486f, 0.006435f, 0.002642f, 0.00432f, -0.00272f,
- -0.007446f, -0.007397f, 0.00361f, 0.003618f, 0.003956f, -0.001175f, 0.00832f, 0.00794f, 0.001658f,
- 0.00123f, -0.003918f, 0.001215f, -0.007427f, 0.003708f, 0.00492f, -0.00968f, 0.008896f, -0.006786f,
- -0.005856f, 0.006573f, 0.003876f, -0.003983f, 0.00411f, 0.0076f, -0.0008364f, -0.00496f, 0.008026f,
- -0.00986f, -0.001429f, -0.007236f, -0.002172f, -0.003004f, -0.0017185f, -0.00353f, -0.00817f, -0.004353f,
- -0.003458f, 0.002663f, -0.00599f, 0.002125f, -0.00625f, -0.00913f, -0.009796f, -0.004574f, -0.00978f,
- -0.00398f, -0.006096f, 0.003708f, 0.007214f, 0.00444f, 0.003742f, 0.004547f, 0.006042f, 0.001542f,
- 0.002424f, 0.0005617f, 0.006477f, -0.002382f, 0.0009637f, -0.00462f, -0.000934f, 0.0004268f, 0.00975f,
- 0.002277f, 0.001031f, -0.007103f, 0.006615f, 0.00199f, 0.009f, 0.00995f, -0.002514f, -0.0016575f,
- -0.00875f, 0.00936f, -0.007133f, 0.007412f, -0.001572f, -0.00862f, -0.00675f, 0.009445f, -0.00819f,
- 0.004597f, -0.005493f, 0.004894f, -0.004807f, 0.00346f, -0.00114f, 0.006638f, -0.005882f, 0.0041f,
- -0.002684f, -0.0006037f, -0.00842f, 0.001939f, -0.0008016f, 0.00265f, -0.005383f, 0.00963f, 0.0063f,
- 0.006386f, 0.004463f, -0.004173f, -0.006317f, 0.003534f, -0.00781f, -0.001414f, -0.004723f, -0.003096f,
- -0.001367f, 0.00955f, -0.0000178f, -0.007214f, 0.00985f, -0.003782f, 0.005688f, -0.002445f, 0.00185f,
- 0.00784f, 0.00203f, 0.0003746f, -0.00935f, 0.00559f, 0.00718f, 0.005905f, 0.002926f, 0.006268f,
- 0.0002078f, 0.001244f, 0.00467f, 0.006405f, -0.0005364f, 0.00503f, -0.0004387f, 0.006252f, -0.002594f,
- 0.001791f, -0.00807f, -0.001451f, -0.0034f, 0.00958f, 0.003035f, -0.00348f, 0.004818f, 0.008644f,
- -0.0005145f, -0.004673f, 0.008934f, 0.00756f, -0.001786f, -0.005634f, -0.002981f, -0.007107f, 0.001145f,
- 0.003677f, 0.004997f, 0.009766f, 0.0005856f, -0.002384f, 0.004177f, -0.00965f, 0.005924f, -0.005596f,
- 0.004505f, 0.000578f, 0.00663f, -0.006638f, 0.001535f, 0.002502f, 0.002907f, 0.00447f, 0.002016f,
- 0.008865f, 0.00828f, -0.00975f, 0.0002487f, -0.00796f, -0.008286f, -0.002083f, -0.00471f, 0.007187f,
- 0.004326f, 0.007206f, 0.004307f, 0.009346f, -0.00758f, -0.007545f, 0.00349f, 0.0018425f, -0.00837f,
- -0.007935f, -0.002258f, 0.003757f, -0.0014f, 0.000081f, 0.00449f, -0.000318f, 0.006485f, -0.001184f,
- -0.001842f, 0.009476f, 0.00818f, -0.00986f, 0.001612f, -0.00779f, 0.006676f, -0.0013075f, 0.00464f,
- -0.002117f, -0.0087f, 0.00965f, 0.001394f, 0.00818f, -0.005493f, 0.004673f, -0.00439f, -0.00557f,
- -0.001841f, -0.00948f, 0.00607f, 0.00551f, -0.002834f, 0.004883f, -0.00712f, 0.006573f, -0.002064f,
- 0.0008054f, -0.006508f, 0.004467f, 0.00773f, 0.004787f, 0.00523f, -0.001751f, -0.005657f, 0.000278f,
- -0.001822f, -0.00639f, -0.003477f, -0.006767f, -0.007782f, 0.005375f, -0.00726f, 0.007248f, 0.0008335f,
- -0.001856f, -0.00009865f, -0.006054f, 0.006786f, -0.005665f, -0.007393f, -0.0007014f, -0.007046f, -0.0065f,
- -0.00645f, 0.002195f, 0.004818f, 0.00909f, -0.00862f, 0.007614f, -0.00499f, 0.007423f, -0.001478f,
- -0.005028f, -0.007107f, -0.00488f, 0.00322f, -0.003801f, 0.0018425f, 0.001862f, 0.007713f, -0.008675f,
- 0.001135f, 0.00788f, -0.006866f, -0.00776f, 0.001423f, -0.00392f, -0.00908f, 0.00918f, -0.006706f,
- -0.00828f, -0.00358f, -0.00956f, -0.00823f, 0.00656f, -0.00617f, -0.004395f, 0.002705f, -0.001398f,
- 0.003265f, 0.007793f, 0.00664f, 0.009285f, 0.00851f, 0.00416f, -0.00923f, -0.006733f, 0.00934f,
- -0.00564f, -0.001064f, 0.001106f, 0.00943f, 0.005024f, 0.00793f, -0.005302f, -0.00376f, -0.0005045f,
- 0.005325f, -0.002134f, -0.001494f, -0.00891f, -0.00803f, 0.00958f, -0.0000229f, -0.003668f, 0.00602f,
- -0.003649f, -0.002918f, 0.006573f, 0.005146f, -0.009995f, 0.00864f, -0.008255f, 0.004868f, 0.001078f,
- -0.003546f, 0.00235f, 0.005764f, -0.005116f, 0.009186f, -0.008255f, -0.00216f, -0.008f, -0.009125f,
- -0.002754f, -0.0083f, -0.002539f, -0.0007524f, -0.00843f, 0.003647f, -0.00156f, 0.00498f, -0.007904f,
- -0.00502f, 0.00919f, 0.003862f, 0.00599f, 0.001332f, -0.00788f, 0.007374f, 0.001653f, -0.00406f,
- -0.008545f, -0.00444f, -0.00971f, -0.002436f, -0.009834f, -0.005573f, -0.002323f, -0.007126f, 0.004803f,
- -0.00913f, 0.002483f, -0.004704f, -0.0014515f, -0.001035f, -0.008934f, -0.001855f, -0.0071f, 0.00979f,
- -0.008255f, 0.001663f, -0.001383f, 0.000364f, -0.003595f, -0.002163f, 0.002136f, 0.004894f, 0.006966f,
- 0.00925f, 0.006557f, -0.0089f, -0.0007167f, 0.002699f, 0.003483f, 0.003017f, 0.004223f, 0.006042f,
- -0.002342f, -0.004868f, 0.003157f, 0.006165f, 0.001519f, -0.00874f, -0.004856f, -0.004116f, 0.002634f,
- -0.001233f, -0.008736f, 0.003529f, -0.001974f, 0.00121f, -0.0006013f, -0.002737f, -0.00596f, 0.007027f,
- -0.00496f, -0.002726f, -0.00787f, 0.001581f, 0.00381f, -0.004932f, 0.007027f, -0.003616f, -0.000989f,
- 0.003532f, 0.002346f, 0.0000479f, 0.002907f, -0.004353f, 0.005424f, 0.003124f, 0.00985f, 0.003f,
- -0.007805f, 0.001684f, -0.001324f, 0.0005107f, 0.00483f, -0.00992f, 0.000786f, -0.003649f, -0.0006337f,
- -0.001443f, 0.00782f, 0.008194f, -0.00819f, -0.00844f, -0.004906f, -0.006355f, 0.002932f, 0.004242f,
- 0.000638f, -0.00259f, 0.00585f, -0.00864f, 0.00378f, -0.00279f, -0.00319f, -0.001805f, -0.002768f,
- -0.0007725f, -0.004875f, 0.003784f, 0.00947f, -0.008736f, 0.003262f, -0.00325f, -0.003826f, 0.007904f,
- 0.00002706f, 0.006187f, -0.001488f, -0.001711f, -0.003317f, 0.007446f, -0.00699f, -0.005573f, 0.00164f,
- 0.00938f, 0.0002334f, 0.003819f, -0.001427f, 0.00992f, -0.003433f, -0.0006833f, -0.00492f, 0.005493f,
- 0.003014f, -0.006187f, -0.002325f, 0.00741f, -0.009056f, 0.005604f, -0.003874f, 0.00869f, 0.0001504f,
- 0.005356f, 0.001178f, 0.00786f, 0.003292f, 0.00947f, -0.002808f, -0.00424f, -0.00999f, 0.004818f,
- 0.00372f, -0.003748f, 0.001496f, 0.009796f, 0.0000038f, 0.00379f, 0.0003746f, -0.004147f, 0.007195f,
- -0.0095f, 0.001072f, 0.002129f, 0.00889f, 0.003273f, 0.006958f, -0.004894f, 0.0006795f, 0.00892f,
- -0.004356f, 0.00594f, -0.002378f, 0.00969f, -0.0081f, 0.0003927f, 0.00789f, 0.00343f, 0.00479f,
- -0.0005517f, -0.00652f, 0.000332f, 0.00876f, -0.001309f, -0.002495f, -0.00831f, 0.007786f, -0.00512f,
- -0.003832f, -0.0006423f, -0.003162f, 0.00807f, -0.006298f, -0.003601f, 0.002438f, 0.0017395f, 0.002686f,
- -0.001712f, 0.00424f, 0.00632f, -0.00935f, 0.000598f, 0.005714f, -0.00921f, -0.002935f, 0.008064f,
- -0.001802f, -0.002634f, -0.006786f, 0.00976f, 0.00867f, 0.004066f, 0.002306f, 0.001495f, -0.0003717f,
- -0.00597f, 0.00958f, -0.00881f, 0.00856f, -0.00538f, -0.008575f, -0.003626f, 0.006702f, 0.00932f,
- 0.001552f, 0.0006847f, 0.00159f, 0.002314f, 0.008606f, 0.005955f, 0.00862f, 0.0003278f, 0.003115f,
- -0.006863f, -0.0051f, -0.00824f, 0.00592f, -0.005653f, 0.00871f, -0.008286f, 0.0005655f, -0.005154f,
- -0.008766f, 0.008896f, -0.009674f, 0.003782f, -0.000774f, 0.00323f, -0.00935f, 0.007694f, -0.003578f,
- -0.00912f, 0.007362f, -0.00561f, 0.00817f, -0.00852f, -0.00006425f, -0.003166f, 0.0004108f, 0.006325f,
- -0.00928f, -0.008026f, -0.003891f, -0.005924f, -0.004284f, 0.00515f, -0.00749f, 0.002983f, 0.003885f,
- 0.006535f, -0.001574f, 0.005695f, -0.009155f, -0.006996f, -0.0012665f, 0.002983f, -0.00932f, -0.00575f,
- -0.008545f, -0.0005817f, 0.002466f, -0.003382f, 0.007477f, 0.00166f, 0.004562f, -0.001331f, -0.0095f,
- -0.00291f, 0.002815f, -0.009796f, -0.00496f, 0.005592f, -0.00365f, -0.00609f, 0.0008597f, 0.00516f,
- 0.003986f, 0.002157f, 0.00934f, -0.003363f, 0.000835f, 0.003725f, 0.002106f, -0.005993f, 0.00795f,
- 0.003122f, -0.003313f, -0.005383f, 0.0004141f, 0.006466f, 0.003517f, -0.00809f, 0.005714f, -0.007294f,
- -0.001924f, -0.002457f, -0.001897f, -0.001449f, 0.00543f, 0.000466f, 0.008125f, -0.002316f, 0.003128f,
- -0.008255f, -0.001908f, 0.00911f, 0.00793f, -0.001612f, -0.00899f, -0.004013f, -0.002962f, 0.001639f,
- -0.006916f, -0.009056f, -0.005795f, -0.001411f, -0.00745f, 0.003126f, 0.000916f, -0.0007496f, 0.003273f,
- 0.005184f, 0.004128f, 0.003195f, -0.004635f, 0.004826f, 0.00745f, 0.006348f, -0.008865f, -0.00217f,
- 0.006275f, -0.00971f, 0.005478f, -0.003456f, 0.0065f, 0.00943f, -0.005703f, 0.002666f, -0.005745f,
- -0.006134f, 0.003513f, 0.00683f, -0.004803f, -0.003841f, -0.006435f, -0.007122f, 0.001902f, 0.005844f,
- 0.007313f, 0.004723f, 0.001233f, -0.00402f, 0.001288f, 0.002878f, 0.004196f, -0.002884f, -0.007454f,
- 0.000933f, -0.003576f, -0.005608f, -0.00908f, 0.00426f, 0.001788f, -0.004856f, -0.008965f, -0.00546f,
- -0.004684f, -0.002708f, -0.006145f, 0.002111f, -0.000599f, -0.007187f, -0.002018f, -0.001014f, -0.006676f,
- -0.00335f, -0.00528f, -0.009224f, -0.009285f, -0.00063f, -0.0045f, -0.005157f, 0.008865f, 0.008835f,
- -0.00672f, 0.002237f, 0.002687f, 0.005703f, 0.00585f, 0.007175f, -0.007496f, 0.0002145f, 0.00924f,
- -0.00611f, -0.003202f, -0.0057f, -0.001237f, 0.006752f, 0.001596f, -0.001424f, 0.007492f, 0.00459f,
- -0.00668f, -0.001726f, 0.00209f, 0.001924f, 0.0008316f, 0.0004334f, 0.001638f, 0.005665f, 0.000911f,
- -0.00552f, 0.00619f, -0.00979f, 0.00549f, 0.004967f, 0.00818f, -0.006157f, -0.00816f, 0.001334f,
- 0.0002472f, 0.00653f, 0.005257f, 0.0000934f, -0.00261f, 0.00755f, 0.000494f, 0.001341f, 0.00236f,
- -0.00876f, 0.005054f, -0.00503f, 0.007465f, -0.005676f, 0.003174f, -0.006325f, -0.005238f, -0.005608f,
- 0.0002413f, -0.003477f, -0.00379f, -0.002457f, 0.002943f, -0.006855f, 0.001733f, 0.006504f, -0.004406f,
- -0.00929f, -0.00009567f, 0.000722f, 0.001004f, -0.00633f, 0.001915f, -0.001345f, -0.002802f, -0.00858f,
- -0.001694f, -0.000937f, 0.004486f, -0.00567f, 0.000247f, 0.007782f, -0.0036f, -0.003588f, 0.00717f,
- -0.00928f, 0.00838f, -0.0063f, 0.00916f, 0.005352f, 0.00736f, 0.00083f, -0.007248f, -0.005722f,
- 0.00325f, -0.00503f, 0.001647f, 0.007767f, -0.00539f, 0.0065f, -0.002151f, 0.003359f, 0.0002371f,
- -0.007057f, 0.000602f, 0.00692f, -0.008415f, -0.001443f, 0.006783f, -0.00778f, 0.00946f, -0.002735f,
- -0.006832f, 0.00419f, -0.009315f, 0.00963f, -0.003994f, -0.00833f, 0.00411f, 0.0076f, 0.005817f,
- -0.001542f, -0.003956f, 0.004513f, 0.001667f, -0.002378f, -0.003075f, 0.002481f, -0.001739f, -0.005566f,
- -0.002113f, 0.003263f, -0.00797f, -0.008675f, 0.006916f, 0.002848f, 0.008446f, -0.004627f, -0.002216f,
- -0.0005455f, -0.00882f, 0.00846f, 0.001422f, -0.000527f, -0.00826f, 0.0012245f, 0.006226f, -0.008316f,
- 0.002134f, -0.006298f, 0.00672f, -0.008026f, 0.003248f, 0.0046f, 0.001113f, 0.000221f, 0.000791f,
- 0.00836f, 0.007805f, 0.006355f, 0.004723f, 0.000991f, -0.00904f, 0.007164f, 0.00896f, 0.00788f,
- 0.004128f, -0.003473f, -0.00242f, 0.003466f, 0.003286f, 0.002634f, 0.009865f, 0.006947f, -0.0004823f,
- -0.005455f, 0.003603f, 0.002008f, -0.004536f, 0.006187f, 0.005722f, -0.00010717f, 0.00227f, 0.00967f,
- -0.004883f, -0.0011015f, 0.009285f, 0.002121f, -0.006718f, 0.00782f, 0.00481f, 0.002974f, -0.002855f,
- -0.001182f, -0.000961f, -0.002497f, -0.005707f, -0.00536f, -0.000726f, -0.004868f, -0.000473f, -0.002764f,
- 0.0002033f, -0.00961f, -0.00828f, -0.001335f, 0.005314f, 0.007263f, 0.005386f, -0.0006895f, 0.00444f,
- -0.00443f, 0.001597f, 0.00753f, 0.005608f, 0.002354f, 0.00399f, 0.003551f, 0.0035f, 0.00319f,
- 0.0017185f, -0.006195f, -0.004467f, 0.006042f, -0.007217f, -0.00907f, 0.004025f, -0.00671f, -0.002226f,
- -0.00557f, 0.000518f, -0.00805f, 0.008865f, -0.007195f, -0.004032f, -0.005047f, 0.007072f, -0.003544f,
- -0.00706f, -0.000232f, -0.00829f, -0.00835f, -0.002449f, 0.002384f, -0.00886f, -0.00177f, -0.00641f,
- 0.006733f, -0.001213f, -0.005184f, 0.009995f, 0.006573f, 0.003773f, -0.00962f, 0.003693f, 0.003815f,
- 0.004353f, 0.00224f, 0.0003662f, 0.007187f, 0.00817f, -0.002918f, -0.006615f, 0.00834f, 0.002783f,
- -0.000913f, 0.004993f, -0.006687f, -0.008224f, 0.00864f, -0.000776f, -0.003668f, 0.002398f, 0.001138f,
- 0.001902f, -0.004894f, 0.00398f, 0.001741f, -0.00922f, 0.002316f, 0.0000156f, 0.00923f, -0.004314f,
- 0.00844f, -0.002323f, -0.001928f, 0.006115f, 0.006283f, -0.001401f, -0.006443f, 0.00693f, 0.007225f,
- 0.0005593f, -0.00996f, -0.00842f, -0.001854f, 0.001111f, 0.00157f, -0.003658f, -0.0003986f, 0.005455f,
- 0.004204f, -0.006065f, 0.00812f, -0.00642f, -0.004932f, -0.00778f, 0.004032f, 0.005814f, 0.00329f,
- -0.007164f, -0.00576f, 0.002708f, -0.005424f, -0.006355f, -0.003983f, -0.006695f, -0.00661f, 0.005814f,
- -0.007137f, -0.00739f, -0.001341f, 0.000845f, 0.000429f, -0.002764f, 0.006496f, 0.00785f, -0.00622f,
- 0.003235f, 0.00425f, -0.00612f, 0.00803f, 0.007404f, -0.001365f, 0.002625f, 0.001886f, 0.003359f,
- -0.00518f, -0.002394f, 0.00475f, 0.003391f, 0.00693f, -0.002079f, -0.000818f, -0.002357f, -0.005272f,
- -0.002317f, -0.000729f, 0.004074f, 0.005486f, 0.006023f, -0.006363f, 0.00527f, -0.003586f, -0.00925f,
- 0.003809f, 0.00087f, 0.007133f, -0.001788f, 0.002201f, 0.00955f, 0.003735f, 0.007324f, -0.00614f,
- -0.007187f, -0.006783f, -0.006145f, -0.004665f, 0.007175f, 0.00984f, 0.00314f, 0.008064f, 0.007336f,
- -0.00337f, -0.00559f, 0.004944f, -0.007744f, -0.00197f, -0.006714f, -0.002281f, -0.002087f, 0.0009074f,
- -0.00753f, 0.004993f, 0.00319f, -0.002535f, -0.001945f, 0.0008793f, -0.003357f, 0.004246f, -0.00838f,
- 0.007698f, 0.001307f, 0.001717f, 0.00824f, -0.001335f, -0.0002145f, 0.00561f, -0.007168f, -0.001333f,
- -0.00551f, -0.003637f, -0.007786f, 0.001738f, 0.007748f, 0.001321f, -0.001924f, 0.006046f, -0.009125f,
- 0.009674f, 0.006313f, 0.002666f, 0.002287f, -0.00956f, -0.004803f, -0.008675f, 0.003038f, -0.00514f,
- 0.00935f, 0.006756f, 0.004425f, 0.002203f, 0.00642f, 0.004555f, 0.00657f, 0.00157f, 0.00652f,
- -0.000512f, 0.003416f, 0.00883f, -0.003372f, -0.001136f, -0.00302f, 0.007435f, -0.00564f, 0.001519f,
- -0.007687f, -0.00783f, -0.008736f, 0.003899f, -0.00231f, 0.006927f, 0.00558f, -0.007786f, 0.008156f,
- 0.004417f, -0.004173f, 0.008865f, 0.004707f, 0.002438f, -0.008896f, 0.00009686f, -0.00338f, 0.002985f,
- 0.0000722f, 0.004047f, 0.00991f, 0.00222f, 0.00381f, -0.003147f, 0.0081f, 0.00392f, 0.001678f,
- -0.00647f, 0.00942f, -0.002876f, -0.001987f, -0.00758f, -0.003983f, -0.00814f, 0.00255f, -0.001071f,
- 0.006855f, -0.00676f, -0.00801f, 0.00399f, 0.002998f, 0.003906f, -0.002068f, 0.005444f, -0.003128f,
- 0.001452f, -0.000623f, 0.007122f, -0.003498f, -0.000979f, -0.003366f, -0.001828f, 0.004135f, 0.006786f,
- -0.003593f, -0.00814f, -0.00749f, -0.004894f, 0.009445f, -0.00828f, -0.005108f, -0.005836f, -0.002945f,
- -0.008125f, -0.001417f, -0.003443f, 0.00201f, 0.001321f, 0.00578f, 0.00224f, -0.00895f, -0.001515f,
- -0.008194f, 0.00883f, -0.000655f, -0.00831f, 0.005695f, 0.00663f, 0.00704f, -0.00393f, 0.003603f,
- -0.005608f, 0.00107f, -0.00902f, -0.0001382f, 0.006287f, 0.006393f, 0.0005302f, 0.00898f, 0.00172f,
- 0.0033f, -0.001728f, -0.004436f, 0.006794f, 0.001925f, -0.00698f, 0.002726f, -0.00372f, 0.003744f,
- 0.007004f, 0.002556f, -0.00895f, -0.005096f, 0.003044f, -0.002342f, -0.00802f, 0.0067f, 0.006172f,
- 0.0005546f, 0.009f, 0.006405f, 0.003557f, -0.006527f, 0.002508f, -0.002115f, -0.00497f, 0.004852f,
- 0.002605f, 0.009155f, -0.00941f, 0.000894f, -0.00825f, 0.005333f, 0.006023f, -0.001292f, 0.009445f,
- -0.007217f, 0.003368f, -0.007156f, -0.006386f, -0.00293f, 0.00218f, -0.00803f, 0.00927f, 0.008965f,
- 0.001402f, 0.00525f, -0.00784f, 0.00418f, -0.00978f, -0.003138f, 0.002974f, 0.001657f, -0.009834f,
- 0.001901f, -0.00948f, 0.005455f, -0.001604f, 0.00559f, 0.006447f, 0.0008035f, -0.002773f, 0.006332f,
- -0.00896f, 0.00488f, 0.004177f, -0.00319f, 0.00708f, 0.0003064f, -0.0007687f, -0.003065f, 0.005558f,
- -0.003864f, 0.003887f, -0.00855f, 0.006237f, 0.008415f, -0.002693f, -0.002817f, -0.00904f, 0.003407f,
- 0.000946f, -0.00738f, -0.00562f, -0.0009713f, -0.003506f, -0.00766f, 0.00953f, -0.004005f, 0.00867f,
- 0.0004733f, -0.005787f, 0.0005293f, 0.006996f, 0.001659f, 0.000469f, 0.001537f, 0.002247f, -0.004242f,
- 0.00243f, -0.004093f, -0.007355f, -0.001f, 0.006374f, -0.004963f, 0.006035f, 0.005245f, -0.00839f,
- 0.002262f, -0.008286f, 0.00845f, 0.00911f, -0.001388f, -0.001848f, -0.0008616f, 0.006363f, 0.002584f,
- -0.002827f, -0.00755f, -0.009834f, 0.002735f, -0.001286f, 0.006f, 0.001821f, -0.001493f, -0.00819f,
- -0.0003796f, 0.008606f, 0.000496f, 0.001856f, -0.00668f, -0.009186f, -0.00736f, 0.0048f, -0.003502f,
- 0.001626f, -0.0001339f, -0.006126f, -0.00596f, -0.0001252f, 0.001953f, 0.009575f, -0.001304f, 0.004192f,
- -0.006035f, -0.001251f, 0.007587f, 0.001031f, -0.00928f, 0.00793f, 0.00653f, 0.0007644f, -0.002647f,
- 0.003609f, -0.00461f, 0.000423f, -0.000656f, 0.005367f, -0.00425f, 0.004215f, 0.006554f, 0.005634f,
- -0.001172f, 0.00472f, -0.0002402f, 0.003582f, 0.00738f, 0.00301f, 0.005417f, 0.009254f, 0.007145f,
- -0.0094f, 0.000404f, 0.00837f, -0.00894f, 0.004658f, 0.0004907f, -0.001399f, -0.00873f, 0.0008955f,
- -0.001738f, -0.001934f, 0.003742f, 0.002077f, -0.004063f, -0.007736f, -0.001259f, 0.00867f, 0.00488f,
- 0.006584f, -0.00822f, -0.00585f, 0.006927f, -0.003298f, -0.004593f, 0.000567f, -0.004543f, -0.007378f,
- 0.00718f, -0.00876f, 0.005707f, 0.00701f, 0.001537f, 0.005993f, -0.0044f, 0.00847f, 0.00694f,
- 0.00419f, -0.00511f, 0.00535f, 0.000936f, -0.0007434f, 0.001556f, -0.0008616f, -0.0085f, 0.003342f,
- 0.00982f, 0.005077f, 0.005566f, -0.003716f, 0.00839f, 0.007786f, -0.00749f, -0.007614f, -0.00774f,
- 0.00209f, 0.005894f, -0.007534f, 0.003998f, -0.00518f, -0.00033f, -0.00831f, -0.00556f, 0.004837f,
- -0.001809f, -0.00423f, 0.00916f, -0.006786f, 0.009476f, 0.00841f, -0.000718f, 0.002834f, -0.00947f,
- 0.0001942f, -0.007904f, -0.003672f, -0.001356f, -0.004658f, -0.005825f, 0.002747f, -0.00737f, 0.00845f,
- 0.005226f, -0.002941f, -0.005226f, -0.00415f, 0.00848f, 0.0007825f, -0.005276f, 0.003502f, -0.005974f,
- 0.00866f, -0.0076f, 0.003042f, -0.003267f, -0.00536f, -0.006935f, 0.007515f, 0.008255f, 0.003098f,
- -0.007183f, 0.007355f, -0.00878f, -0.0001291f, -0.0009227f, 0.000577f, 0.00787f, 0.003855f, 0.005337f,
- -0.004837f, 0.005676f, 0.004658f, -0.00798f, 0.006424f, -0.007534f, 0.002682f, -0.003042f, 0.00868f,
- -0.003332f, 0.00318f, 0.00199f, 0.001096f, 0.00871f, 0.005028f, -0.001416f, 0.006233f, -0.007736f,
- 0.00808f, -0.001244f, 0.001611f, 0.005127f, 0.00781f, -0.003036f, -0.00453f, -0.00516f, 0.007233f,
- -0.001684f, -0.002474f, 0.002844f, -0.00723f, -0.002401f, 0.0015f, -0.005444f, -0.003035f, -0.00929f,
- 0.00947f, 0.00247f, 0.004017f, 0.0008864f, -0.003862f, 0.0062f, -0.00172f, -0.00449f, 0.00796f,
- 0.009445f, 0.007687f, -0.007034f, -0.001731f, -0.00585f, -0.005653f, -0.002281f, 0.004925f, -0.006744f,
- -0.002542f, 0.005775f, 0.00861f, 0.003054f, 0.00666f, -0.00694f, -0.00822f, -0.001123f, 0.006557f,
- -0.00476f, 0.006397f, 0.00957f, 0.00888f, -0.003952f, -0.006313f, 0.001164f, 0.001948f, -0.00758f,
- 0.007263f, -0.00801f, 0.00924f, 0.009476f, -0.00979f, 0.007748f, -0.00533f, 0.006195f, 0.00659f,
- 0.003437f, 0.00546f, -0.00859f, 0.002409f, -0.006824f, -0.006172f, 0.00663f, 0.004215f, 0.00291f,
- 0.001303f, -0.007786f, -0.000654f, 0.00965f, -0.002867f, 0.002117f, 0.00484f, -0.002012f, -0.004826f,
- -0.00801f, -0.00259f, 0.002625f, -0.000174f, 0.006844f, -0.005554f, -0.001617f, 0.00741f, -0.00145f,
- -0.001762f, 0.005222f, 0.001931f, 0.006676f, -0.002014f, 0.005676f, -0.001987f, 0.003426f, -0.00088f,
- 0.002485f, -0.007698f, -0.00604f, 0.006687f, -0.003902f, -0.00783f, -0.00817f, 0.00841f, 0.006134f,
- -0.00659f, -0.004807f, 0.00649f, -0.00855f, -0.00605f, -0.003489f, 0.00594f, -0.00818f, -0.001544f,
- 0.003778f, 0.00706f, -0.0002632f, 0.005882f, 0.003763f, 0.003439f, 0.00872f, 0.004265f, 0.00522f,
- -0.00886f, -0.00803f, -0.0003037f, -0.00807f, -0.006756f, 0.00789f, -0.00428f, -0.000516f, 0.005196f,
- -0.00981f, 0.00926f, -0.007507f, -0.00952f, -0.00259f, -0.003004f, 0.00828f, -0.000515f, -0.00759f,
- -0.002186f, -0.00375f, -0.00902f, 0.002289f, -0.002497f, 0.00996f, 0.004932f, -0.00803f, -0.00785f,
- 0.00993f, -0.007694f, 0.000255f, -0.0002395f, -0.005318f, 0.005173f, 0.00518f, -0.007427f, 0.00505f,
- 0.008545f, -0.00238f, -0.002556f, 0.00932f, 0.009094f, -0.002436f, -0.00971f, 0.000679f, 0.00931f,
- -0.00531f, 0.003595f, 0.0065f, -0.001422f, 0.002657f, 0.00864f, 0.001987f, -0.001189f, -0.0007544f,
- 0.0002537f, -0.003994f, -0.00898f, -0.00314f, -0.00829f, 0.006683f, -0.006706f, -0.005634f, 0.00001407f,
- 0.006878f, 0.004093f, 0.001739f, -0.003754f, 0.006306f, -0.001363f, -0.00145f, -0.00985f, -0.003508f,
- -0.007454f, 0.00352f, -0.004467f, -0.00601f, -0.007763f, -0.00894f, 0.00583f, -0.00698f, 0.0099f,
- -0.006313f, 0.00404f, -0.002666f, -0.00373f, 0.004604f, -0.00813f, -0.006283f, 0.004066f, -0.00592f,
- -0.0003827f, -0.002565f, 0.006275f, 0.008705f, -0.007404f, 0.00793f, -0.0009556f, 0.001682f, 0.00866f,
- 0.00774f, 0.00332f, 0.0008507f, -0.005215f, -0.00757f, -0.001497f, 0.005787f, 0.001453f, -0.001265f,
- -0.00909f, 0.006832f, 0.00836f, 0.002867f, 0.002851f, 0.002344f, 0.001552f, -0.0006785f, -0.00941f,
- -0.007114f, -0.003008f, 0.002539f, 0.0002484f, -0.00774f, 0.000987f, 0.00991f, 0.00611f, 0.0009437f,
- -0.001054f, 0.000739f, 0.00809f, -0.003117f, -0.007812f, -0.001368f, -0.009674f, -0.001733f, 0.006268f,
- 0.003513f, 0.00852f, -0.007652f, 0.004547f, -0.0001137f, 0.003424f, 0.000804f, -0.003584f, -0.00599f,
- -0.005333f, -0.00303f, 0.004303f, 0.009f, -0.0006638f, -0.0008726f, 0.007774f, -0.0000234f, -0.0002577f,
- 0.005783f, -0.008316f, -0.00841f, -0.003605f, 0.001991f, 0.006767f, 0.00508f, 0.00787f, 0.003464f,
- 0.00908f, 0.007133f, 0.007504f, -0.00896f, 0.000183f, -0.00929f, -0.0009255f, -0.0034f, -0.00848f,
- 0.002066f, 0.0002947f, 0.005394f, 0.002613f, 0.00701f, -0.00833f, -0.001219f, 0.004704f, 0.00446f,
- -0.00775f, 0.00476f, -0.007195f, -0.00163f, -0.003307f, -0.007484f, -0.00889f, -0.00846f, 0.008156f,
- -0.002731f, 0.005733f, 0.0099f, -0.00276f, -0.00869f, -0.00962f, -0.00841f, -0.004955f, 0.004997f,
- 0.008896f, 0.00907f, -0.000695f, 0.00972f, 0.00685f, 0.004505f, -0.00726f, -0.003025f, -0.002087f,
- 0.00797f, 0.006016f, -0.006485f, -0.00491f, 0.001922f, -0.00934f, 0.006355f, -0.0004008f, -0.005714f,
- 0.002274f, -0.005512f, 0.005424f, -0.0003483f, 0.001698f, 0.0006733f, 0.00815f, -0.005264f, 0.002876f,
- -0.0000476f, -0.003105f, -0.001815f, -0.00997f, 0.0004442f, -0.00557f, -0.007656f, -0.003036f, 0.002333f,
- -0.001329f, 0.003675f, -0.00706f, -0.00807f, 0.001302f, -0.00788f, 0.003828f, -0.00995f, -0.006676f,
- -0.001514f, -0.005756f, -0.001301f, 0.002438f, 0.007313f, 0.00913f, 0.003407f, -0.002222f, 0.00981f,
- 0.0012245f, 0.009155f, 0.008194f, -0.004368f, -0.006615f, -0.0008593f, -0.00582f, 0.003933f, 0.005173f,
- -0.001201f, 0.002068f, -0.00915f, 0.00797f, -0.002686f, -0.00958f, 0.005775f, 0.002453f, -0.003305f,
- 0.00697f, 0.0001255f, 0.00218f, 0.009926f, -0.007473f, 0.007965f, 0.0066f, -0.003874f, 0.00658f,
- -0.007618f, 0.000942f, 0.002375f, -0.007053f, -0.003815f, 0.00569f, -0.001039f, 0.004536f, 0.003641f,
- 0.004314f, -0.003353f, 0.00857f, -0.0006385f, -0.000856f, -0.007175f, 0.007557f, -0.00978f, 0.002863f,
- -0.005424f, 0.005215f, -0.000666f, -0.006275f, 0.005527f, 0.00827f, -0.006187f, -0.005993f, 0.000444f,
- -0.0001373f, 0.00458f, 0.009315f, -0.005093f, -0.00154f, 0.002647f, 0.00586f, 0.007473f, -0.00275f,
- 0.00046f, 0.008965f, -0.0002766f, 0.00485f, -0.00974f, 0.001143f, -0.00859f, -0.00027f, 0.007748f,
- -0.00341f, -0.006992f, -0.006664f, 0.0005536f, 0.00828f, -0.003752f, 0.000553f, 0.008575f, 0.004868f,
- -0.0004208f, -0.001359f, 0.002785f, 0.00247f, 0.0002398f, 0.00441f, -0.007866f, -0.00444f, 0.000598f,
- 0.00985f, 0.0041f, 0.001188f, -0.00271f, -0.003817f, -0.0008373f, -0.004078f, 0.00927f, -0.002739f,
- -0.004578f, 0.004482f, 0.000669f, -0.003761f, -0.00921f, -0.003477f, -0.00516f, -0.00893f, 0.0007854f,
- 0.00305f, 0.004894f, 0.00165f, -0.009834f, -0.00859f, 0.000812f, -0.007256f, -0.00276f, -0.003006f,
- 0.001255f, -0.002705f, 0.005894f, 0.00904f, 0.004845f, 0.00814f, -0.003206f, 0.007042f, -0.003756f,
- -0.003365f, -0.00868f, 0.00358f, -0.009514f, 0.00952f, -0.005753f, 0.00848f, 0.003448f, 0.006912f,
- -0.001069f, -0.0006742f, 0.00974f, -0.001088f, -0.0004857f, 0.00841f, 0.006027f, -0.00606f, -0.001904f,
- -0.006058f, -0.004673f, 0.007572f, -0.009674f, -0.008896f, -0.002888f, -0.00806f, 0.00633f, -0.000787f,
- -0.002151f, 0.002234f, -0.00991f, 0.00663f, -0.00541f, -0.006706f, -0.00598f, -0.00592f, 0.0001597f,
- 0.001887f, -0.00104f, 0.00994f, 0.0083f, -0.009415f, -0.00954f, 0.0003498f, -0.009254f, 0.002195f,
- 0.003555f, -0.007557f, 0.006336f, -0.00789f, -0.006927f, 0.005497f, -0.003809f, -0.002302f, -0.00952f,
- -0.0007987f, -0.001707f, 0.00007784f, -0.006718f, -0.005337f, 0.008934f, 0.006355f, 0.006626f, 0.00514f,
- 0.006844f, -0.005447f, -0.001604f, -0.0008254f, -0.004185f, -0.006702f, -0.001056f, -0.00847f, -0.005917f,
- -0.002684f, -0.00482f, -0.009514f, 0.004032f, 0.003906f, 0.0048f, -0.004612f, 0.000876f, -0.00497f,
- 0.008415f, -0.00986f, -0.00565f, -0.000717f, -0.003967f, -0.006863f, 0.00825f, -0.003292f, -0.00966f,
- 0.00263f, 0.001377f, -0.0084f, 0.004414f, -0.0054f, 0.00609f, -0.009026f, -0.000778f, -0.008385f,
- 0.008286f, -0.00352f, 0.00549f, 0.00738f, -0.007515f, -0.002409f, -0.00558f, -0.003153f, -0.005985f,
- -0.00919f, 0.00001955f, 0.004105f, -0.0009418f, 0.001782f, 0.0007043f, -0.00539f, -0.004562f, -0.003515f,
- -0.00916f, -0.00623f, 0.0002017f, -0.003117f, 0.00392f, 0.00738f, 0.001152f, -0.00806f, -0.005108f,
- 0.00985f, -0.001203f, 0.00719f, 0.001182f, -0.0002191f, -0.00661f, -0.003593f, -0.001818f, 0.00765f,
- 0.004604f, -0.005318f, -0.0009274f, 0.002466f, -0.0003357f, 0.00783f, -0.006584f, -0.00664f, 0.003544f,
- -0.002964f, -0.00983f, 0.001785f, -0.000708f, -0.00793f, 0.00785f, 0.006046f, 0.007812f, 0.0096f,
- 0.00849f, -0.001343f, 0.00623f, -0.007465f, 0.001237f, -0.00393f, -0.0007534f, -0.004776f, -0.002806f,
- 0.00451f, -0.004726f, 0.00364f, 0.002312f, -0.00561f, -0.00462f, -0.001799f, -0.0005593f, 0.00191f,
- -0.002151f, -0.0076f, 0.001353f, 0.001949f, -0.004097f, 0.005615f, 0.002104f, 0.00746f, -0.00824f,
- -0.006596f, 0.009285f, -0.008026f, 0.00331f, -0.008736f, -0.00988f, -0.002468f, 0.003393f, -0.007675f,
- -0.00852f, 0.0067f, 0.00552f, 0.00002897f, 0.0002024f, -0.004135f, 0.003683f, -0.001939f, -0.002998f,
- -0.006897f, -0.00462f, 0.00989f, 0.001207f, 0.001254f, -0.0008793f, -0.004036f, -0.00255f, 0.00871f,
- 0.00695f, 0.00251f, 0.005455f, -0.00592f, -0.001793f, -0.0005703f, -0.00213f, 0.004787f, -0.0025f,
- -0.00712f, -0.003109f, -0.0074f, 0.003607f, -0.003696f, -0.001566f, 0.007812f, -0.004433f, 0.001471f,
- 0.004066f, -0.001959f, -0.001853f, -0.00985f, 0.006023f, 0.006184f, -0.00586f, -0.002455f, 0.007687f,
- -0.003036f, -0.001865f, 0.0052f, -0.005646f, 0.002298f, -0.0049f, -0.001856f, -0.003754f, -0.003891f,
- 0.00979f, 0.008415f, -0.00886f, 0.009926f, 0.001531f, -0.001119f, -0.004818f, 0.007763f, -0.004997f,
- 0.009415f, 0.002409f, 0.00149f, 0.003786f, -0.001091f, -0.00852f, 0.00888f, 0.0092f, 0.004227f,
- 0.004055f, -0.001675f, -0.004677f, 0.003109f, 0.006733f, 0.00538f, 0.0086f, 0.002913f, -0.00939f,
- -0.006355f, 0.00495f, -0.007866f, 0.00885f, 0.005394f, -0.00323f, 0.00578f, -0.00476f, 0.006634f,
- -0.00769f, 0.001916f, -0.001957f, 0.00988f, 0.004417f, -0.00677f, 0.007565f, 0.00842f, -0.00919f,
- -0.0055f, 0.003214f, 0.00413f, -0.00813f, 0.002834f, 0.005272f, -0.00954f, 0.006275f, -0.00836f,
- 0.00561f, 0.00951f, 0.004837f, 0.00753f, 0.000762f, -0.002527f, -0.003277f, -0.00522f, 0.003021f,
- 0.00706f, -0.008f, -0.00916f, -0.002863f, 0.002209f, -0.00828f, 0.00499f, -0.001951f, -0.002157f,
- 0.004375f, 0.006233f, -0.007336f, -0.0002134f, 0.004395f, -0.004135f, -0.00865f, 0.001095f, 0.003302f,
- -0.00732f, 0.002275f, 0.00976f, 0.002602f, -0.003263f, 0.00766f, 0.003126f, 0.001476f, -0.001589f,
- 0.00351f, 0.007305f, 0.00553f, 0.007236f, -0.005352f, -0.006542f, -0.002747f, -0.002932f, -0.002441f,
- -0.008575f, -0.00934f, -0.00197f, -0.004387f, 0.001285f, 0.003265f, 0.001039f, 0.004814f, -0.001674f,
- -0.00887f, 0.003067f, -0.007866f, 0.00903f, 0.003162f, -0.004402f, 0.00029f, 0.00928f, -0.002539f,
- -0.003176f, 0.002398f, 0.004284f, 0.001891f, -0.000756f, 0.00846f, 0.00686f, 0.001065f, -0.008934f,
- -0.00705f, 0.002884f, -0.006603f, -0.004486f, 0.00396f, -0.009766f, -0.003494f, 0.004738f, 0.00899f,
- 0.006016f, 0.007515f, 0.003511f, -0.00786f, 0.00949f, -0.00682f, 0.004265f, 0.00728f, 0.0047f,
- 0.00902f, -0.00474f, -0.0005236f, 0.005547f, -0.002396f, -0.006386f, -0.007904f, 0.00722f, 0.005135f,
- 0.000564f, -0.003956f, -0.00997f, -0.00982f, 0.001334f, 0.001509f, -0.002422f, -0.001891f, 0.002316f,
- 0.00309f, -0.006355f, 0.007336f, -0.00487f, 0.00010824f, -0.0008583f, 0.002853f, 0.003754f, -0.006348f,
- 0.00793f, 0.00723f, -0.00981f, -0.003706f, 0.00317f, -0.008446f, -0.002966f, -0.0009055f, 0.002184f,
- 0.003096f, 0.003244f, 0.009674f, 0.002132f, 0.0016165f, -0.006443f, -0.00423f, -0.00905f, 0.001218f,
- 0.004185f, 0.00935f, -0.00193f, 0.00179f, 0.004192f, -0.006424f, 0.002945f, 0.0005383f, 0.004173f,
- -0.001795f, 0.00803f, 0.006462f, -0.00502f, -0.003693f, 0.001283f, -0.001253f, 0.00715f, -0.002525f,
- 0.00824f, -0.008995f, -0.00549f, 0.004345f, 0.002205f, 0.00827f, -0.004692f, -0.000714f, 0.00686f,
- 0.003473f, 0.009636f, -0.001164f, -0.002003f, 0.00674f, -0.008224f, -0.00462f, 0.00948f, 0.002377f,
- 0.00781f, 0.002586f, 0.00744f, -0.001399f, 0.003376f, 0.005226f, -0.003313f, 0.007713f, -0.004364f,
- 0.0005984f, -0.004997f, 0.00611f, -0.00772f, 0.006653f, -0.002066f, 0.00196f, 0.004326f, 0.00797f,
- -0.002724f, -0.005474f, 0.007782f, 0.00728f, 0.007442f, -0.002098f, 0.005306f, -0.007206f, -0.001974f,
- 0.0000934f, -0.003695f, -0.007633f, 0.006306f, 0.006794f, -0.002983f, -0.00424f, 0.0018215f, 0.000337f,
- -0.00849f, -0.00768f, 0.00659f, 0.002615f, -0.008514f, 0.00282f, 0.003607f, 0.009544f, 0.00924f,
- 0.00949f, -0.006145f, -0.003231f, -0.001794f, 0.006004f, -0.0005646f, 0.005558f, 0.00455f, -0.005344f,
- 0.003881f, -0.00979f, -0.00946f, -0.0007844f, 0.00922f, 0.001785f, 0.00854f, -0.0094f, -0.005318f,
- 0.006126f, -0.0023f, -0.00576f, -0.00449f, -0.00931f, 0.006935f, -0.007477f, 0.001311f, 0.00797f,
- 0.003727f, -0.000941f, -0.00816f, -0.00646f, -0.004032f, -0.002666f, 0.009735f, -0.007072f, -0.007362f,
- 0.003067f, 0.007732f, 0.00457f, 0.001084f, -0.0085f, 0.00392f, 0.0006833f, -0.001245f, -0.00907f,
- -0.00574f, -0.006786f, 0.005386f, -0.001034f, 0.00993f, 0.00913f, -0.001817f, 0.00613f, 0.002943f,
- -0.00825f, -0.008804f, -0.00333f, -0.00754f, 0.00971f, -0.0002515f, 0.004715f, 0.006126f, 0.004963f,
- 0.000591f, -0.00912f, -0.002254f, 0.0006866f, -0.00998f, 0.001433f, 0.00787f, -0.00933f, -0.004326f,
- 0.00771f, 0.002146f, -0.006893f, -0.003952f, 0.001425f, -0.006123f, 0.00807f, -0.00702f, -0.006565f,
- 0.001073f, 0.001927f, -0.004864f, 0.000273f, -0.008224f, 0.00826f, -0.001634f, -0.006905f, -0.00831f,
- -0.00594f, -0.002901f, -0.001668f, -0.00987f, 0.006264f, -0.00452f, -0.00924f, 0.0096f, 0.001883f,
- 0.005104f, 0.003798f, -0.00859f, 0.002163f, 0.000841f, 0.0001701f, -0.00549f, 0.008896f, -0.00641f,
- -0.0086f, 0.0094f, -0.000762f, 0.000456f, 0.002989f, -0.002628f, -0.00817f, -0.000566f, 0.005928f,
- -0.002151f, -0.004353f, -0.00403f, -0.0009055f, 0.00814f, -0.005325f, 0.001588f, -0.00841f, 0.001743f,
- -0.00651f, -0.002144f, 0.007225f, -0.00623f, -0.002226f, -0.004345f, 0.007904f, -0.007748f, 0.001748f,
- -0.003706f, -0.00867f, 0.00432f, -0.00954f, 0.0089f, -0.00607f, 0.00603f, 0.00857f, 0.003477f,
- -0.0007524f, 0.000207f, -0.00069f, 0.00925f, -0.003777f, -0.0002985f, -0.001528f, 0.005077f, 0.007435f,
- 0.005886f, -0.001046f, 0.00491f, -0.00346f, -0.00944f, 0.0085f, 0.00011885f, -0.007687f, 0.005142f,
- -0.005444f, 0.005745f, 0.00565f, -0.005436f, 0.002954f, 0.0009327f, -0.001357f, -0.006035f, -0.0038f,
- -0.00277f, 0.001201f, -0.006207f, 0.00892f, -0.00958f, 0.002432f, 0.009636f, -0.006413f, -0.000683f,
- 0.000565f, 0.00664f, 0.006424f, 0.004097f, 0.00754f, -0.0082f, 0.002491f, 0.00003463f, -0.001084f,
- 0.009895f, -0.001157f, -0.0044f, -0.003542f, -0.005615f, 0.00814f, -0.002285f, 0.009605f, 0.008865f,
- 0.00906f, 0.0059f, -0.00735f, 0.0007353f, -0.00103f, -0.004868f, 0.007378f, 0.0074f, -0.001978f,
- -0.00555f, -0.004807f, 0.006527f, -0.00968f, -0.001172f, -0.00988f, 0.00564f, 0.00213f, 0.004536f,
- -0.001937f, 0.007717f, 0.00901f, -0.000779f, 0.003677f, -0.00831f, -0.005554f, -0.005386f, -0.00959f,
- -0.00885f, 0.007416f, -0.00618f, 0.001828f, -0.0004594f, -0.0006585f, -0.009636f, 0.007168f, -0.00868f,
- -0.00848f, -0.003803f, -0.00875f, 0.002884f, 0.0002168f, 0.005486f, 0.00989f, -0.00828f, 0.00000566f,
- -0.00811f, -0.003649f, 0.003096f, 0.00365f, -0.002344f, -0.00879f, 0.006554f, -0.0003917f, 0.00814f,
- -0.001268f, 0.00318f, 0.003078f, -0.002525f, -0.00848f, -0.0004594f, 0.003298f, 0.003225f, 0.002396f,
- -0.00686f, -0.00503f, 0.007534f, 0.009636f, -0.00483f, -0.00788f, 0.004208f, 0.0003386f, -0.001907f,
- 0.0008726f, 0.004757f, -0.00989f, -0.007004f, 0.0063f, -0.006622f, -0.00978f, 0.00899f, 0.002703f,
- 0.00864f, -0.009964f, 0.00617f, 0.005688f, 0.00846f, 0.00576f, 0.00788f, 0.0002687f, 0.00853f,
- -0.0002925f, -0.003065f, -0.0000076f, 0.007706f, 0.002523f, -0.00212f, -0.00532f, 0.007347f, 0.001383f,
- -0.004616f, -0.008514f, -0.00672f, -0.00883f, 0.00195f, -0.003576f, -0.006306f, 0.005207f, -0.002554f,
- -0.001393f, -0.005966f, 0.005707f, -0.001915f, -0.002625f, 0.007797f, 0.00756f, -0.003504f, -0.004597f,
- -0.002932f, -0.006004f, -0.00928f, 0.006176f, 0.004486f, -0.00594f, -0.009476f, 0.006813f, -0.00312f,
- -0.0014715f, 0.003428f, 0.00991f, -0.004757f, -0.0006704f, 0.001299f, 0.002937f, 0.005505f, 0.00843f,
- -0.004585f, -0.00931f, 0.001348f, -0.008545f, 0.001818f, -0.002092f, -0.00689f, -0.009026f, 0.00949f,
- 0.00166f, 0.000547f, -0.000135f, -0.000778f, -0.001905f, 0.002375f, 0.00974f, -0.004833f, 0.0094f,
- 0.004898f, -0.00005084f, -0.001083f, -0.00499f, -0.00918f, -0.004326f, 0.001663f, 0.00681f, -0.003672f,
- 0.00694f, -0.00438f, -0.007336f, 0.0089f, 0.00451f, -0.00564f, 0.00986f, 0.006157f, -0.00539f,
- -0.00551f, 0.00947f, 0.00881f, 0.005436f, -0.008354f, -0.005894f, 0.002949f, 0.0009093f, -0.002594f,
- -0.002369f, 0.00507f, -0.0088f, 0.0051f, -0.0004027f, 0.001238f, 0.00854f, 0.008804f, 0.0005126f,
- 0.00786f, -0.001762f, -0.002861f, 0.001445f, -0.006268f, -0.002352f, -0.00737f, -0.006973f, 0.005512f,
- 0.005188f, 0.00951f, -0.006603f, 0.002338f, -0.001549f, 0.000984f, 0.00819f, 0.002796f, -0.003716f,
- -0.00731f, -0.004124f, -0.00725f, -0.002102f, 0.00493f, 0.00313f, -0.002922f, 0.0076f, 0.00537f,
- -0.00929f, 0.00819f, 0.00932f, 0.00975f, 0.00345f, 0.001942f, 0.001167f, -0.003649f, -0.00787f,
- 0.00857f, 0.00359f, 0.0015545f, -0.001327f, -0.00813f, 0.006893f, -0.00185f, -0.00689f, 0.00396f,
- 0.003069f, -0.002464f, -0.003843f, 0.004967f, -0.00865f, -0.00503f, 0.003744f, 0.0003045f, 0.006298f,
- 0.0011835f, 0.004654f, -0.00736f, -0.00171f, -0.00807f, -0.00462f, 0.00526f, 0.00905f, -0.006798f,
- -0.0001366f, 0.00969f, -0.005116f, 0.007614f, -0.007317f, -0.0052f, 0.0007396f, 0.00735f, -0.00347f,
- -0.002716f, 0.005177f, 0.003021f, -0.0026f, 0.00685f, -0.003214f, 0.001522f, -0.000601f, 0.00642f,
- 0.002537f, 0.009705f, 0.0004787f, 0.00933f, 0.005848f, -0.00789f, -0.005962f, -0.003063f, 0.00734f,
- 0.008644f, -0.00652f, 0.00389f, 0.00219f, -0.005104f, 0.004536f, 0.006638f, -0.00424f, -0.000966f,
- -0.00242f, -0.003347f, 0.000761f, -0.006855f, -0.00816f, -0.00339f, 0.003853f, 0.00752f, 0.000502f,
- 0.00394f, 0.00875f, -0.001621f, -0.00972f, -0.000609f, -0.00796f, -0.003817f, 0.004166f, 0.003754f,
- -0.007385f, -0.001137f, -0.004467f, -0.001389f, 0.0093f, 0.003342f, -0.005795f, -0.00792f, 0.0082f,
- 0.00557f, -0.00656f, 0.003494f, 0.002573f, 0.0014925f, -0.003141f, 0.002457f, 0.00789f, 0.0071f,
- -0.004307f, 0.001407f, 0.000862f, -0.007122f, -0.005196f, -0.00306f, -0.00808f, -0.004246f, 0.00772f,
- 0.006165f, 0.002718f, -0.00569f, -0.000952f, -0.005917f, 0.003725f, -0.0008345f, -0.00265f, -0.0063f,
- 0.001651f, -0.00962f, 0.006016f, 0.005035f, -0.004337f, 0.00552f, 0.00373f, -0.0005794f, 0.00202f,
- -0.006985f, -0.00747f, -0.001536f, -0.007122f, -0.00937f, -0.00641f, -0.00871f, -0.00182f, 0.0000921f,
- 0.007484f, -0.00974f, 0.00521f, 0.001293f, 0.0006785f, -0.00888f, 0.005943f, -0.00055f, -0.00676f,
- -0.0000759f, 0.00414f, 0.007065f, 0.0000026f, -0.003262f, -0.001492f, 0.00802f, 0.003487f, -0.00977f,
- -0.006863f, -0.004192f, -0.007458f, -0.001814f, -0.004482f, 0.008835f, -0.004826f, 0.00872f, 0.004635f,
- 0.007317f, -0.00498f, -0.003536f, -0.004375f, 0.005074f, -0.002346f, 0.00384f, 0.00853f, -0.00416f,
- -0.007164f, 0.0006695f, 0.0008926f, -0.001899f, 0.005783f, 0.00535f, 0.00557f, -0.00402f, 0.00006354f,
- -0.001951f, -0.002588f, -0.005276f, -0.001826f, -0.006058f, 0.001427f, -0.009735f, 0.009224f, -0.00006384f,
- -0.002344f, -0.00004303f, 0.00946f, -0.00841f, -0.00199f, -0.00494f, -0.00841f, -0.008835f, 0.00596f,
- -0.006348f, 0.007545f, 0.001068f, 0.00624f, -0.005306f, 0.001778f, -0.0009108f, -0.0048f, -0.000988f,
- -0.0005326f, -0.005173f, 0.003748f, 0.001759f, -0.003914f, -0.006252f, 0.004486f, 0.00882f, 0.006035f,
- -0.002064f, -0.003456f, -0.006615f, -0.004963f, 0.003847f, -0.00342f, 0.006115f, -0.005974f, 0.002302f,
- -0.00856f, 0.006847f, -0.006416f, -0.00226f, 0.005363f, 0.008224f, -0.0003793f, -0.009224f, -0.002298f,
- -0.005264f, -0.000623f, -0.00803f, -0.007706f, 0.001601f, 0.007046f, -0.004757f, 0.0044f, 0.0046f,
- -0.003963f, -0.007156f, 0.0004344f, 0.005592f, -0.00053f, 0.001337f, 0.009186f, -0.00897f, -0.005627f,
- -0.001647f, 0.0092f, 0.0016985f, -0.003633f, 0.008064f, 0.004543f, -0.00698f, -0.005695f, 0.00478f,
- -0.001252f, 0.00881f, -0.00876f, -0.00202f, -0.009514f, 0.000278f, -0.005013f, 0.007404f, -0.0005183f,
- -0.001753f, -0.00442f, 0.00199f, -0.008156f, -0.008865f, -0.00308f, -0.00973f, -0.005714f, 0.007996f,
- -0.004395f, 0.00455f, -0.00862f, -0.0004373f, 0.00885f, 0.00984f, -0.00422f, 0.00382f, 0.001032f,
- -0.0003273f, 0.004593f, 0.004982f, 0.00259f, -0.00604f, 0.000337f, 0.009186f, -0.003052f, -0.005085f,
- 0.005188f, 0.00417f, 0.004345f, 0.003605f, -0.000079f, -0.009575f, 0.00894f, 0.00992f, 0.008f,
- -0.00476f, 0.00871f, -0.007538f, -0.00739f, -0.0069f, -0.008804f, -0.00526f, -0.001096f, 0.0009003f,
- 0.005367f, 0.005283f, 0.005047f, -0.0003638f, -0.001063f, -0.00399f, 0.0081f, 0.004395f, 0.00805f,
- -0.00531f, 0.001779f, 0.003176f, 0.00775f, 0.0071f, 0.00682f, -0.0007925f, -0.00318f, 0.00897f,
- -0.006172f, -0.00376f, -0.002518f, -0.007618f, 0.00728f, 0.007042f, 0.006863f, -0.005936f, 0.004787f,
- 0.005726f, -0.0009775f, -0.004757f, -0.0002875f, 0.00844f, 0.005302f, 0.003609f, 0.005863f, 0.005436f,
- 0.004433f, -0.002047f, 0.003025f, 0.007694f, -0.007565f, -0.006165f, -0.00202f, -0.004505f, -0.004784f,
- 0.00921f, -0.00059f, 0.004604f, 0.002249f, -0.004814f, -0.00519f, -0.00625f, 0.0000181f, 0.00531f,
- 0.001533f, 0.006847f, -0.00959f, -0.00846f, -0.00928f, -0.006386f, 0.002766f, -0.005516f, -0.0071f,
- 0.006073f, 0.00907f, 0.005585f, -0.00644f, -0.00855f, -0.003466f, -0.009514f, -0.00914f, 0.003702f,
- -0.00503f, -0.00497f, 0.00796f, -0.007763f, 0.007614f, 0.00544f, 0.00933f, 0.008316f, -0.003374f,
- -0.00763f, 0.002035f, 0.002916f, -0.0006156f, -0.003872f, -0.0002236f, -0.00917f, -0.003334f, -0.004528f,
- 0.00978f, -0.0005903f, -0.006786f, -0.00913f, -0.009254f, -0.006096f, 0.002638f, 0.003622f, -0.007805f,
- 0.00873f, 0.001586f, -0.003641f, 0.001905f, -0.00311f, -0.000627f, 0.005222f, -0.004986f, 0.000169f,
- -0.007088f, -0.00783f, -0.004852f, 0.000881f, 0.004627f, -0.00405f, -0.006405f, 0.003586f, 0.002258f,
- -0.00988f, 0.000979f, -0.002949f, 0.00912f, 0.00885f, -0.002743f, 0.00833f, 0.003326f, -0.0003536f,
- -0.003792f, -0.00941f, 0.000213f, -0.002922f, -0.001483f, -0.003443f, -0.00307f, -0.005894f, 0.003468f,
- 0.001887f, -0.006832f, -0.00828f, -0.006172f, -0.00746f, 0.002558f, 0.00998f, 0.001123f, -0.00611f,
- -0.005863f, -0.0007744f, 0.003525f, -0.00573f, 0.0009665f, -0.002241f, -0.0007176f, -0.00918f, -0.00794f,
- 0.00216f, -0.0049f, 0.002016f, 0.006763f, 0.00445f, 0.004715f, 0.001216f, 0.002068f, -0.001449f,
- 0.00249f, 0.00953f, -0.0007606f, -0.00256f, 0.0006046f, -0.004406f, -0.009415f, 0.003393f, -0.004787f,
- 0.002743f, 0.00841f, 0.00972f, -0.00194f, 0.004185f, 0.00585f, 0.007504f, -0.00622f, 0.001107f,
- -0.0044f, 0.00576f, 0.00772f, 0.00818f, 0.00536f, 0.002644f, -0.00465f, -0.0087f, -0.00816f,
- 0.004547f, 0.001851f, -0.005634f, 0.003641f, 0.007618f, -0.00985f, 0.009766f, -0.00459f, -0.002457f,
- 0.00393f, -0.008224f, -0.003952f, -0.00813f, 0.007393f, 0.005188f, 0.007126f, 0.00639f, 0.001274f,
- 0.002176f, -0.00894f, 0.002445f, -0.001414f, -0.00952f, 0.004444f, -0.001607f, -0.001501f, 0.00857f,
- -0.005585f, -0.000724f, 0.003077f, 0.007797f, 0.007473f, 0.003546f, -0.00948f, -0.003933f, 0.004017f,
- -0.003176f, 0.001448f, 0.002731f, 0.003504f, 0.00831f, 0.007763f, 0.002405f, -0.006264f, 0.00536f,
- -0.0083f, 0.001413f, -0.0003624f, -0.001836f, 0.006027f, 0.005173f, -0.003073f, -0.008354f, 0.00164f,
- -0.001941f, -0.002981f, 0.008156f, -0.004414f, -0.005413f, 0.002527f, -0.0004022f, 0.00625f, 0.008575f,
- 0.00637f, 0.00765f, 0.0003421f, 0.00798f, -0.005287f, 0.00808f, -0.00646f, 0.000603f, 0.00955f,
- 0.00889f, -0.002356f, -0.005306f, 0.002333f, 0.009514f, -0.003855f, 0.0054f, 0.005417f, 0.000675f,
- -0.004402f, 0.00933f, -0.005234f, -0.00958f, 0.0089f, 0.009254f, -0.00757f, 0.0098f, -0.001879f,
- 0.00789f, 0.002071f, 0.000677f, -0.007763f, -0.001941f, 0.001637f, -0.003653f, 0.00528f, 0.007465f,
- -0.00557f, -0.006004f, -0.009476f, 0.000802f, 0.002075f, -0.007168f, 0.00398f, -0.006268f, 0.006287f,
- -0.009575f, -0.001453f, 0.0092f, -0.00995f, -0.002644f, 0.005024f, 0.00966f, -0.006878f, 0.00995f,
- -0.001319f, -0.002237f, 0.002209f, 0.00861f, -0.00883f, -0.003874f, -0.002903f, 0.00992f, -0.0016365f,
- -0.00633f, 0.00823f, -0.00771f, -0.003204f, -0.00563f, 0.00563f, 0.00805f, -0.004936f, 0.003477f,
- 0.00741f, 0.0043f, 0.006905f};
+ -0.004707f, -0.006775f, 0.0009236f, 0.003067f, -0.00806f, 0.00779f, 0.0004425f, 0.00846f, 0.00048f,
+ 0.00999f, 0.00115f, 0.00226f, -0.00705f, 0.004467f, 0.001455f, -0.006073f, 0.00465f, -0.00861f,
+ -0.002779f, 0.00883f, -0.002996f, 0.008354f, -0.003141f, -0.007374f, 0.001634f, -0.009544f, 0.00198f,
+ 0.005894f, 0.001434f, 0.001589f, 0.00921f, -0.00507f, 0.00448f, 0.0002687f, -0.003147f, 0.001627f,
+ -0.005608f, 0.006516f, 0.00935f, -0.004715f, 0.00833f, -0.00563f, 0.00281f, -0.005875f, 0.000629f,
+ 0.00993f, -0.002695f, 0.004486f, -0.00528f, -0.003807f, 0.00521f, 0.00010276f, 0.003307f, 0.000701f,
+ 0.0001151f, 0.00649f, 0.00934f, -0.001063f, 0.002327f, -0.0002892f, 0.003317f, -0.003506f, 0.004875f,
+ 0.0006566f, 0.000953f, -0.005898f, 0.00326f, 0.00877f, 0.00923f, -0.00622f, -0.006588f, 0.007748f,
+ -0.001789f, 0.00002104f, 0.002937f, 0.00816f, 0.005833f, -0.006634f, 0.006985f, 0.00951f, 0.002947f,
+ 0.001871f, -0.009445f, 0.0004554f, -0.006294f, -0.00649f, 0.00917f, -0.004158f, -0.00462f, -0.001531f,
+ -0.00658f, -0.00364f, -0.00462f, 0.003723f, 0.009636f, 0.003305f, -0.00984f, 0.006126f, -0.0010395f,
+ -0.00852f, 0.006287f, -0.002949f, -0.004f, -0.002415f, 0.0009527f, 0.001624f, 0.00364f, 0.007088f,
+ -0.00717f, -0.009224f, -0.00997f, 0.001726f, -0.00877f, -0.000602f, 0.0089f, 0.009026f, -0.009514f,
+ 0.00852f, 0.0003986f, -0.006855f, -0.00583f, 0.003622f, -0.00526f, 0.001879f, -0.007053f, 0.00006664f,
+ 0.00972f, -0.000457f, -0.00759f, -0.007107f, 0.002337f, -0.004204f, -0.005676f, 0.00985f, 0.00978f,
+ -0.004486f, 0.005093f, -0.009285f, 0.004093f, -0.00682f, 0.00963f, -0.006954f, -0.003674f, -0.003822f,
+ 0.00202f, -0.004635f, -0.0009174f, -0.001202f, 0.00639f, -0.004356f, -0.00741f, -0.00586f, -0.00319f,
+ -0.002506f, 0.005047f, 0.007156f, -0.00765f, 0.00702f, 0.007477f, 0.000626f, -0.001587f, -0.005455f,
+ 0.005814f, -0.002127f, 0.00834f, 0.001279f, 0.007996f, -0.005787f, -0.006924f, -0.004063f, -0.00435f,
+ -0.00427f, 0.0002115f, 0.00981f, -0.00138f, -0.007965f, -0.004536f, -0.003431f, 0.00416f, 0.005894f,
+ 0.006054f, 0.00907f, 0.00388f, -0.006763f, 0.001692f, -0.00797f, -0.00691f, 0.00798f, 0.00867f,
+ -0.00788f, 0.002062f, -0.003761f, 0.009834f, -0.002445f, -0.00613f, 0.0096f, -0.005466f, -0.0008426f,
+ 0.0002431f, -0.009995f, 0.003736f, -0.0071f, -0.003593f, 0.006386f, 0.005997f, -0.003328f, 0.007515f,
+ -0.008675f, 0.00547f, -0.00388f, 0.00473f, 0.00362f, -0.00469f, 0.006958f, -0.001264f, -0.003887f,
+ -0.004276f, -0.000396f, 0.00453f, -0.00465f, -0.007343f, -0.005787f, -0.00927f, -0.006058f, -0.004566f,
+ -0.009056f, -0.00891f, 0.007633f, 0.001098f, -0.003368f, -0.007214f, -0.00905f, -0.00898f, -0.008736f,
+ -0.00948f, 0.003162f, 0.004402f, -0.006245f, -0.00515f, -0.00378f, -0.003248f, -0.00304f, 0.001834f,
+ -0.002672f, 0.005234f, -0.007706f, 0.0084f, 0.00832f, -0.00904f, -0.00596f, 0.009926f, -0.00869f,
+ 0.001513f, 0.00728f, 0.001057f, 0.001452f, 0.00785f, 0.001203f, -0.004528f, 0.006573f, 0.003656f,
+ 0.005966f, -0.006985f, 0.002844f, 0.00883f, 0.0004826f, 0.003279f, 0.006916f, 0.00263f, -0.002415f,
+ -0.001928f, -0.0004041f, -0.004593f, -0.00204f, 0.007965f, -0.008224f, -0.00591f, -0.002144f, 0.000688f,
+ 0.001676f, -0.00949f, -0.003304f, -0.007637f, 0.00973f, -0.008224f, -0.001211f, -0.003345f, 0.002115f,
+ -0.00615f, -0.004955f, -0.00803f, 0.00807f, -0.0006227f, 0.00845f, -0.006916f, 0.004353f, -0.000934f,
+ 0.005604f, -0.00825f, -0.004402f, -0.00441f, 0.00257f, -0.008415f, 0.006542f, 0.001357f, -0.004974f,
+ -0.00993f, 0.0001058f, 0.002855f, -0.0081f, 0.001513f, -0.00191f, 0.0004003f, 0.003874f, -0.0015545f,
+ -0.00736f, 0.006718f, 0.005135f, 0.003859f, -0.0054f, 0.00993f, 0.000952f, 0.00228f, 0.001163f,
+ 0.00918f, 0.00582f, 0.00308f, 0.008415f, 0.00889f, 0.00011665f, -0.007362f, -0.009926f, -0.00784f,
+ 0.005817f, -0.002918f, 0.005043f, -0.003029f, 0.0085f, -0.007362f, -0.00857f, 0.006832f, -0.00055f,
+ 0.008835f, -0.00522f, -0.002085f, 0.00353f, -0.007706f, 0.006283f, 0.004414f, -0.002405f, -0.003002f,
+ -0.00946f, -0.001164f, -0.004177f, 0.00834f, -0.001576f, 0.00855f, 0.004025f, 0.000285f, -0.004486f,
+ -0.00703f, -0.003061f, 0.003452f, 0.001276f, 0.008446f, -0.001302f, 0.004333f, -0.00898f, -0.002445f,
+ -0.006523f, 0.0004334f, -0.003206f, -0.00349f, -0.005497f, -0.007786f, 0.007397f, 0.00925f, 0.002077f,
+ 0.004074f, 0.006626f, -0.001693f, -0.0005975f, -0.005074f, 0.00324f, 0.00925f, -0.009735f, -0.007133f,
+ -0.0064f, -0.00455f, -0.003153f, 0.0056f, -0.006073f, -0.00274f, -0.00587f, -0.005066f, 0.003595f,
+ -0.00932f, -0.005f, 0.00569f, 0.008415f, 0.006866f, 0.003952f, -0.009285f, -0.008064f, 0.00824f,
+ 0.0000188f, -0.001233f, 0.005726f, -0.0007806f, -0.008385f, -0.001798f, -0.008095f, 0.00986f, 0.006924f,
+ 0.00712f, -0.00964f, -0.00797f, 0.00943f, -0.007416f, 0.007904f, 0.006893f, 0.00799f, -0.007164f,
+ 0.007214f, 0.00931f, 0.000645f, -0.0058f, 0.009254f, -0.002079f, 0.000969f, 0.009636f, -0.002365f,
+ -0.002348f, 0.007053f, -0.002796f, -0.007652f, -0.001554f, 0.00402f, -0.002838f, -0.006958f, 0.000331f,
+ 0.006435f, -0.004036f, 0.007595f, 0.00812f, 0.00637f, 0.007732f, -0.006916f, 0.003952f, -0.008064f,
+ -0.00928f, 0.00468f, -0.000512f, -0.006287f, 0.00607f, -0.001904f, -0.00458f, 0.003412f, 0.000382f,
+ -0.00822f, -0.00486f, 0.0008364f, 0.0004992f, 0.003582f, 0.0088f, 0.002453f, -0.00856f, 0.00886f,
+ 0.0077f, 0.0004592f, -0.001417f, -0.005142f, 0.004696f, -0.003576f, 0.004807f, -0.00851f, -0.006245f,
+ -0.003649f, -0.0001528f, 0.004017f, -0.006123f, -0.004158f, -0.00445f, 0.004864f, -0.0005493f, 0.00399f,
+ -0.007244f, 0.003246f, 0.00407f, 0.00929f, -0.006706f, 0.0084f, -0.003496f, 0.00843f, 0.00514f,
+ 0.002714f, -0.0001633f, -0.00866f, 0.004837f, -0.003016f, 0.00593f, -0.00849f, 0.001287f, -0.007706f,
+ 0.001479f, -0.002241f, 0.00843f, -0.001236f, -0.007572f, -0.004448f, -0.001927f, 0.001139f, 0.004982f,
+ -0.00673f, -0.000568f, 0.009346f, 0.000487f, 0.001392f, -0.009605f, 0.00944f, 0.002022f, 0.00617f,
+ 0.00472f, 0.009575f, -0.006416f, 0.004265f, 0.002005f, 0.000578f, 0.002592f, 0.002707f, -0.005333f,
+ -0.00928f, -0.00935f, -0.00833f, -0.00205f, -0.005795f, -0.001061f, -0.003605f, 0.003078f, 0.00592f,
+ 0.0006485f, -0.00504f, 0.002682f, 0.00826f, -0.003983f, -0.00493f, 0.00406f, -0.00838f, 0.0032f,
+ 0.0009565f, 0.00471f, 0.00504f, 0.004612f, -0.002768f, 0.00791f, -0.002892f, 0.00471f, 0.00588f,
+ 0.005978f, -0.005203f, -0.009995f, 0.009346f, -0.00802f, 0.003807f, 0.001364f, -0.00736f, 0.009285f,
+ -0.001995f, 0.002632f, -0.00904f, 0.007042f, -0.00326f, 0.006516f, 0.00492f, 0.00734f, -0.00867f,
+ -0.002512f, -0.003729f, 0.0027f, -0.002659f, -0.009514f, -0.005634f, -0.001473f, -0.00545f, 0.003551f,
+ 0.001995f, -0.003704f, 0.006386f, 0.003313f, -0.002823f, 0.00105f, 0.00993f, 0.00951f, -0.007275f,
+ -0.002213f, -0.003418f, 0.00599f, 0.00948f, 0.007572f, -0.00944f, -0.00924f, 0.00011665f, 0.0069f,
+ -0.00544f, 0.007515f, -0.006832f, -0.007774f, 0.00853f, -0.0007486f, -0.00643f, -0.0001878f, -0.00849f,
+ -0.007603f, 0.0016985f, -0.00986f, 0.003975f, -0.002176f, -0.009796f, 0.004795f, -0.00699f, -0.006725f,
+ 0.00109f, 0.004498f, -0.00569f, -0.00584f, 0.004047f, -0.001022f, 0.001479f, -0.00751f, -0.002579f,
+ -0.004086f, 0.007603f, -0.0000106f, 0.007366f, 0.0029f, -0.003498f, 0.007385f, -0.00759f, -0.005886f,
+ 0.00476f, -0.0003812f, -0.00008225f, 0.00998f, 0.002716f, -0.00925f, -0.00439f, -0.000902f, -0.00296f,
+ -0.007347f, -0.005882f, -0.001428f, -0.002855f, -0.003311f, -0.000793f, -0.00403f, -0.00829f, -0.00999f,
+ -0.00838f, 0.008804f, 0.004124f, -0.005882f, 0.001305f, 0.00511f, 0.00799f, -0.00953f, -0.008575f,
+ -0.00556f, -0.00858f, 0.00565f, 0.00908f, 0.00591f, 0.0007925f, -0.00912f, -0.005894f, -0.002588f,
+ -0.00957f, -0.00682f, 0.002174f, 0.00706f, 0.00528f, 0.0069f, -0.004517f, -0.002382f, 0.005596f,
+ 0.00645f, 0.00956f, 0.00796f, 0.007706f, 0.004818f, 0.002308f, 0.001367f, -0.004177f, 0.00842f,
+ 0.007416f, -0.00404f, -0.009094f, 0.00447f, -0.00284f, -0.002499f, -0.0001582f, 0.001681f, 0.004993f,
+ -0.0059f, 0.007282f, -0.00809f, 0.00927f, 0.004948f, 0.009766f, -0.00618f, -0.001559f, -0.00461f,
+ 0.001866f, 0.00827f, -0.00785f, -0.003101f, 0.00977f, -0.00444f, -0.00916f, -0.0008535f, 0.004913f,
+ 0.005627f, 0.007965f, 0.000532f, -0.00878f, 0.004047f, -0.005302f, 0.00201f, 0.002964f, -0.00895f,
+ 0.005768f, 0.00388f, 0.007526f, -0.00783f, 0.003794f, 0.005363f, 0.003454f, -0.002235f, -0.003494f,
+ -0.001541f, -0.00003624f, -0.0007634f, -0.0014f, -0.003124f, 0.00829f, -0.00298f, -0.00868f, -0.001243f,
+ -0.005383f, -0.009964f, 0.004433f, -0.002045f, -0.00753f, 0.002361f, -0.007473f, -0.002419f, -0.000931f,
+ 0.00585f, 0.007114f, -0.002247f, 0.00472f, -0.003033f, -0.001974f, 0.001622f, -0.007473f, -0.005375f,
+ -0.005013f, 0.00436f, 0.00662f, -0.0053f, 0.000606f, -0.00849f, -0.007004f, 0.006794f, -0.0005445f,
+ -0.001269f, 0.00391f, 0.006294f, 0.007088f, -0.009026f, -0.001965f, -0.008545f, 0.002115f, 0.003534f,
+ -0.00857f, 0.00412f, -0.00722f, -0.006386f, 0.00595f, -0.003778f, -0.00886f, -0.0002267f, 0.00249f,
+ -0.002825f, 0.0003204f, 0.0002894f, -0.004147f, -0.003632f, 0.001764f, -0.002983f, 0.006584f, -0.004402f,
+ 0.006493f, 0.002014f, -0.0061f, 0.00816f, 0.005585f, -0.008125f, 0.006546f, -0.00956f, 0.004185f,
+ 0.001067f, 0.001277f, 0.007835f, -0.003933f, 0.00979f, -0.003376f, 0.006573f, -0.00501f, 0.0007577f,
+ 0.00133f, -0.00737f, 0.00885f, -0.00599f, -0.001151f, -0.001389f, -0.00987f, -0.003214f, -0.00649f,
+ 0.005424f, 0.0004575f, 0.002352f, 0.005722f, -0.001995f, -0.007717f, 0.001034f, -0.006557f, 0.0088f,
+ -0.003183f, -0.00663f, 0.00634f, -0.003008f, -0.004925f, 0.00539f, -0.00432f, -0.00651f, 0.009895f,
+ 0.00532f, -0.0003607f, 0.003397f, 0.006145f, 0.00531f, -0.006275f, 0.00985f, -0.00471f, 0.00817f,
+ -0.00927f, 0.007217f, 0.005924f, 0.003187f, 0.001192f, -0.003986f, -0.0000217f, -0.0012245f, -0.003933f,
+ -0.00617f, -0.002232f, 0.00444f, 0.002008f, 0.0006056f, -0.002827f, -0.007366f, 0.002996f, -0.006752f,
+ -0.004143f, 0.001662f, -0.00793f, 0.002161f, 0.0001992f, 0.00803f, -0.0000725f, 0.001066f, 0.004745f,
+ -0.005367f, -0.00641f, 0.00431f, -0.004715f, 0.008575f, -0.007202f, 0.003786f, -0.00247f, 0.006382f,
+ -0.006832f, 0.00505f, -0.001084f, 0.009674f, 0.00458f, -0.00473f, -0.00656f, -0.00011283f, 0.004417f,
+ -0.001419f, -0.0005164f, 0.0000397f, -0.00395f, 0.00417f, -0.005512f, 0.0088f, 0.00568f, -0.0005984f,
+ 0.003128f, -0.006283f, -0.0000904f, -0.004738f, 0.00687f, 0.00592f, -0.005768f, -0.00859f, 0.003523f,
+ 0.001169f, -0.004498f, 0.00541f, 0.002956f, 0.00896f, -0.002571f, 0.0006533f, 0.002089f, -0.00473f,
+ -0.002241f, 0.005016f, 0.001295f, 0.005993f, -0.008064f, 0.000595f, -0.007744f, -0.00201f, 0.0075f,
+ -0.00942f, 0.0002023f, -0.00979f, -0.002243f, 0.002829f, -0.004322f, 0.009125f, 0.00704f, 0.007282f,
+ 0.00807f, 0.005447f, 0.00518f, -0.0010195f, -0.004803f, -0.001293f, -0.001305f, 0.00975f, -0.00564f,
+ -0.005215f, -0.009445f, 0.00999f, 0.00959f, -0.009224f, -0.0053f, -0.002106f, -0.00839f, 0.001516f,
+ 0.003109f, 0.004414f, -0.00921f, -0.00868f, 0.00833f, 0.00809f, 0.004654f, 0.00678f, 0.002237f,
+ 0.007195f, -0.004875f, -0.001252f, 0.0073f, 0.007275f, 0.00825f, -0.005936f, 0.00594f, -0.00381f,
+ -0.002117f, 0.009f, -0.003998f, -0.00104f, -0.00421f, 0.00526f, 0.001031f, 0.00902f, 0.006794f,
+ -0.00912f, -0.0002892f, 0.002966f, 0.00478f, 0.00581f, 0.007217f, 0.008156f, -0.0000639f, -0.003164f,
+ 0.00859f, -0.00897f, 0.00409f, 0.0008936f, -0.00991f, -0.008316f, -0.004055f, 0.001252f, -0.00473f,
+ -0.002f, -0.003933f, 0.000755f, -0.00992f, 0.003569f, -0.00812f, -0.004215f, -0.00774f, 0.00907f,
+ 0.00653f, -0.00992f, -0.006252f, -0.00468f, -0.001105f, -0.007717f, 0.005302f, 0.003773f, -0.001262f,
+ -0.006207f, -0.005707f, 0.0053f, 0.00415f, 0.002441f, 0.0009265f, -0.006744f, 0.00994f, -0.0004816f,
+ -0.002108f, -0.003267f, 0.0000461f, 0.004364f, -0.00596f, -0.008675f, 0.005703f, 0.002748f, 0.00961f,
+ 0.006767f, -0.0000575f, -0.00845f, -0.003597f, 0.003616f, 0.00423f, 0.009705f, -0.00976f, -0.0085f,
+ 0.00307f, -0.004032f, -0.00784f, -0.00901f, -0.00873f, 0.00543f, 0.00744f, -0.006588f, -0.004765f,
+ -0.007202f, 0.006306f, -0.007484f, 0.007442f, -0.00008386f, 0.006374f, 0.00879f, 0.002039f, -0.003298f,
+ 0.003407f, 0.004673f, 0.0068f, 0.0001981f, 0.002296f, 0.008194f, -0.00805f, -0.007637f, -0.00903f,
+ -0.004025f, 0.001553f, 0.00881f, 0.001311f, -0.005016f, -0.006916f, -0.009926f, -0.00801f, 0.00945f,
+ 0.0001532f, 0.00234f, -0.002968f, -0.002174f, 0.004585f, -0.00658f, 0.000132f, 0.0004494f, -0.00954f,
+ -0.00848f, 0.009964f, -0.0006323f, -0.005016f, 0.001238f, 0.00433f, 0.001477f, 0.00578f, 0.00794f,
+ -0.00512f, -0.00207f, -0.00145f, -0.001166f, 0.008644f, -0.00915f, 0.007187f, -0.00415f, 0.006035f,
+ -0.004177f, 0.00817f, -0.00432f, 0.001062f, -0.005272f, -0.0004163f, 0.005154f, 0.005688f, -0.002985f,
+ -0.004f, -0.003176f, 0.00137f, 0.0002158f, 0.003798f, 0.0002009f, -0.01f, 0.00311f, -0.004234f,
+ 0.00681f, -0.005657f, -0.00963f, 0.00916f, 0.00847f, -0.002085f, -0.00211f, 0.006813f, -0.00473f,
+ 0.00873f, 0.0008483f, 0.004253f, 0.00865f, -0.007156f, -0.00996f, 0.005413f, -0.004253f, 0.00847f,
+ 0.004482f, 0.000647f, -0.006702f, 0.00845f, -0.009254f, -0.0001926f, 0.003868f, -0.00788f, 0.00951f,
+ -0.0005136f, -0.007698f, 0.00889f, -0.00953f, 0.007965f, 0.004982f, -0.004345f, 0.00841f, 0.007034f,
+ 0.006092f, 0.004166f, 0.00682f, -0.004635f, 0.003433f, -0.006527f, -0.0002658f, 0.005455f, 0.001926f,
+ -0.003582f, -0.0065f, 0.002348f, -0.001918f, -0.00488f, -0.006416f, -0.000873f, -0.00942f, 0.005177f,
+ -0.00194f, 0.006374f, 0.003983f, 0.00963f, 0.00697f, -0.00809f, -0.00791f, -0.003254f, -0.00669f,
+ -0.001487f, 0.002129f, -0.000799f, -0.003944f, 0.002693f, 0.00667f, 0.00892f, 0.002377f, 0.001005f,
+ -0.00792f, 0.002398f, -0.001093f, 0.0006456f, -0.002361f, 0.00533f, 0.0064f, 0.004524f, -0.0066f,
+ 0.004406f, 0.007538f, 0.00611f, 0.006294f, 0.0004857f, -0.00859f, 0.00928f, -0.005505f, -0.001135f,
+ -0.00712f, -0.00923f, 0.007534f, 0.00258f, 0.00685f, -0.00873f, 0.001684f, -0.001002f, -0.0005627f,
+ 0.00352f, -0.007324f, 0.00838f, 0.00731f, 0.006733f, -0.003832f, -0.00522f, 0.00299f, 0.000935f,
+ -0.005245f, 0.000987f, 0.007515f, 0.00704f, 0.0086f, 0.00133f, 0.0038f, 0.00622f, -0.0085f,
+ 0.00988f, 0.00625f, 0.00835f, -0.006023f, 0.007084f, -0.002728f, 0.009995f, 0.0008073f, 0.00341f,
+ -0.004547f, 0.005917f, -0.00818f, -0.009705f, 0.00907f, -0.008965f, 0.003483f, -0.00556f, -0.001769f,
+ 0.0068f, 0.007442f, 0.00497f, -0.001922f, 0.002583f, -0.00834f, 0.004417f, 0.005028f, 0.006336f,
+ 0.00402f, -0.00773f, 0.00672f, 0.00324f, 0.003595f, -0.00852f, 0.00503f, -0.00794f, -0.009766f,
+ -0.000813f, -0.006924f, -0.006622f, 0.0008802f, 0.004177f, 0.007427f, -0.001697f, 0.008575f, 0.00414f,
+ 0.00728f, 0.001138f, 0.000674f, -0.00209f, 0.004883f, -0.003029f, 0.0084f, -0.00798f, -0.003302f,
+ 0.007866f, 0.0006804f, 0.00306f, 0.006325f, 0.000508f, -0.002022f, 0.00473f, 0.00958f, -0.001912f,
+ -0.002256f, 0.001385f, 0.001143f, 0.007668f, -0.002575f, 0.004364f, 0.00919f, -0.00924f, 0.00558f,
+ -0.00447f, -0.004196f, -0.00547f, 0.00868f, -0.001469f, -0.00849f, 0.006397f, -0.00529f, 0.002329f,
+ 0.00847f, -0.009705f, 0.00233f, 0.000902f, 0.006073f, -0.00536f, 0.000875f, 0.002682f, -0.003347f,
+ 0.00905f, -0.00399f, -0.005783f, -0.00942f, 0.00671f, -0.008095f, -0.004467f, -0.008415f, 0.007996f,
+ -0.00848f, -0.00531f, 0.002605f, -0.00632f, -0.007652f, 0.009605f, 0.00929f, 0.007782f, -0.006844f,
+ -0.00115f, -0.006626f, -0.007526f, -0.001129f, 0.00943f, 0.004242f, -0.00486f, 0.00963f, -0.006386f,
+ -0.004513f, 0.00185f, -0.001695f, 0.00976f, -0.001186f, 0.001484f, 0.00429f, 0.000502f, -0.009285f,
+ 0.005882f, -0.00674f, 0.00882f, 0.00816f, -0.008705f, -0.003618f, 0.00406f, 0.007607f, -0.001528f,
+ -0.006336f, 0.006943f, 0.00753f, -0.004963f, -0.00602f, 0.002424f, -0.009476f, 0.007385f, 0.00988f,
+ -0.00359f, -0.005722f, 0.006863f, -0.00398f, -0.005486f, -0.004898f, -0.0000809f, -0.001511f, 0.00307f,
+ 0.002613f, 0.0004046f, 0.005634f, 0.00449f, 0.008606f, -0.002146f, 0.002882f, -0.007065f, -0.00796f,
+ -0.001136f, -0.001323f, 0.004715f, -0.007004f, -0.007565f, -0.002895f, 0.007523f, 0.007027f, 0.001487f,
+ -0.003323f, 0.004665f, 0.007706f, 0.009186f, 0.00814f, -0.003918f, -0.002062f, 0.00514f, 0.00858f,
+ 0.00251f, 0.007576f, -0.008736f, 0.001245f, -0.007298f, -0.006157f, 0.00719f, -0.008446f, -0.00864f,
+ 0.006535f, -0.00002605f, 0.003567f, 0.002258f, 0.003443f, -0.006207f, 0.00934f, 0.007515f, -0.00916f,
+ 0.00861f, -0.00939f, 0.008644f, 0.00656f, 0.001708f, 0.007935f, -0.001997f, 0.002934f, 0.001758f,
+ 0.004932f, 0.005432f, 0.007812f, 0.00046f, -0.00562f, 0.009186f, 0.002731f, -0.00234f, 0.00913f,
+ 0.006542f, -0.001783f, 0.001575f, 0.003267f, 0.00676f, 0.00647f, -0.002998f, 0.00408f, -0.002005f,
+ 0.002071f, 0.0001754f, -0.003132f, 0.009705f, -0.003107f, 0.00847f, -0.006504f, -0.0005784f, -0.004715f,
+ -0.008415f, -0.005634f, -0.00926f, -0.006958f, 0.004932f, 0.0076f, 0.008896f, 0.006042f, 0.001687f,
+ 0.000543f, 0.005047f, -0.002184f, 0.003963f, 0.00716f, 0.003468f, -0.003925f, 0.0073f, 0.00385f,
+ 0.002712f, -0.00893f, -0.00004303f, -0.00814f, 0.00937f, 0.0017395f, 0.00555f, 0.005833f, -0.001491f,
+ -0.00863f, 0.00947f, 0.001972f, -0.00984f, 0.004642f, 0.003994f, 0.00923f, -0.00984f, 0.0049f,
+ -0.00987f, -0.009834f, -0.0005865f, -0.006485f, -0.0005198f, 0.00919f, 0.0004432f, 0.001068f, 0.009254f,
+ -0.00881f, -0.003483f, 0.00565f, -0.007793f, -0.00989f, -0.00908f, 0.00276f, -0.002663f, -0.006893f,
+ 0.006332f, -0.004177f, 0.006104f, -0.00004715f, -0.003693f, 0.003576f, 0.00255f, -0.00928f, -0.002916f,
+ -0.007755f, -0.00729f, -0.0061f, 0.006523f, 0.00254f, 0.0008516f, -0.0003228f, -0.004017f, -0.007374f,
+ -0.005207f, 0.009056f, -0.002869f, 0.004906f, 0.007675f, 0.003086f, -0.008026f, -0.00861f, -0.006744f,
+ 0.0002438f, 0.00375f, 0.003315f, 0.00235f, 0.006836f, -0.005516f, 0.00434f, -0.004208f, 0.002483f,
+ 0.006413f, 0.00674f, 0.005604f, -0.002977f, -0.00732f, -0.00908f, 0.007484f, 0.004456f, -0.00822f,
+ 0.007442f, -0.003195f, 0.005753f, 0.007698f, -0.006397f, -0.00785f, -0.009605f, -0.00419f, 0.00676f,
+ -0.00833f, -0.00997f, -0.0003414f, 0.00906f, -0.0071f, -0.006092f, -0.00885f, -0.007866f, 0.000824f,
+ -0.003231f, -0.0006027f, 0.0074f, 0.00764f, 0.005795f, 0.002886f, 0.00958f, -0.007668f, 0.004158f,
+ 0.00622f, 0.00119f, 0.00277f, -0.00571f, -0.0006685f, -0.006645f, 0.0004497f, 0.00218f, -0.00405f,
+ 0.00485f, -0.007504f, -0.001411f, -0.001933f, -0.009964f, 0.002077f, 0.00159f, -0.002796f, 0.005787f,
+ 0.00335f, 0.001426f, -0.005413f, 0.00994f, 0.001742f, -0.00715f, -0.0099f, 0.007744f, -0.0008388f,
+ -0.000603f, -0.002f, 0.005436f, 0.00178f, 0.009796f, -0.001966f, -0.007397f, -0.001909f, 0.00931f,
+ 0.0003397f, -0.006817f, 0.0069f, 0.002558f, 0.00808f, -0.007313f, -0.00984f, -0.00001967f, 0.002756f,
+ 0.009995f, -0.00715f, 0.004765f, -0.006096f, 0.004337f, 0.005642f, 0.00763f, 0.007103f, -0.0002332f,
+ 0.00322f, 0.00284f, 0.003447f, 0.0012f, -0.001126f, -0.002625f, 0.00961f, -0.005272f, 0.0053f,
+ -0.002483f, -0.00931f, 0.007687f, -0.002417f, 0.004463f, 0.001136f, -0.005375f, -0.00672f, 0.007084f,
+ 0.0006213f, -0.00912f, 0.006542f, 0.00606f, 0.003868f, 0.001709f, -0.007484f, 0.004448f, -0.00842f,
+ 0.00427f, -0.00975f, 0.006847f, -0.0071f, 0.0005484f, 0.00909f, -0.004642f, 0.00564f, -0.001863f,
+ -0.006863f, 0.0087f, -0.003702f, -0.001783f, -0.004032f, 0.003088f, -0.002344f, -0.00323f, -0.00966f,
+ 0.008286f, 0.006916f, -0.001279f, 0.003246f, 0.00921f, 0.007122f, -0.006985f, 0.0002171f, 0.000837f,
+ 0.001388f, 0.001075f, -0.008095f, 0.007515f, 0.00999f, 0.00423f, -0.0004835f, -0.009026f, 0.007538f,
+ 0.00877f, -0.002445f, 0.003437f, 0.00485f, -0.008125f, -0.007767f, 0.00934f, -0.0069f, 0.00804f,
+ -0.001232f, 0.00959f, -0.007687f, 0.005993f, 0.0006413f, -0.00814f, -0.002447f, -0.001008f, 0.002981f,
+ 0.001682f, 0.004833f, -0.00382f, -0.0008454f, -0.006485f, 0.00567f, 0.004982f, -0.00484f, 0.00922f,
+ -0.004585f, 0.00426f, 0.0004027f, 0.0006104f, -0.0063f, -0.00273f, -0.006138f, 0.005367f, -0.004303f,
+ 0.001937f, -0.003523f, 0.007137f, -0.005737f, -0.00869f, -0.00481f, -0.00816f, 0.0002303f, -0.0002975f,
+ -0.002365f, 0.00207f, -0.004353f, -0.00924f, 0.00395f, -0.00843f, -0.0043f, -0.0004406f, 0.004807f,
+ -0.00694f, 0.001308f, -0.000525f, 0.000463f, -0.006813f, 0.00775f, 0.006725f, -0.00984f, -0.0003664f,
+ 0.009964f, 0.007217f, 0.001767f, -0.004524f, 0.002432f, 0.000869f, -0.005993f, 0.007275f, -0.001423f,
+ -0.00711f, -0.001464f, 0.007347f, -0.004776f, 0.00513f, -0.00942f, 0.003813f, -0.00489f, -0.00835f,
+ -0.00711f, -0.002565f, 0.004646f, 0.002693f, 0.000531f, -0.001337f, -0.0008225f, 0.0005493f, -0.003017f,
+ 0.003242f, -0.00651f, 0.00958f, 0.006573f, -0.00635f, 0.008f, -0.004864f, 0.003464f, -0.007538f,
+ -0.00917f, -0.002682f, 0.00431f, -0.00604f, 0.002548f, 0.000772f, -0.00769f, -0.002756f, 0.004482f,
+ 0.001484f, -0.004753f, -0.003052f, 0.0002143f, 0.003023f, 0.002924f, 0.00821f, 0.004673f, 0.003557f,
+ 0.0092f, -0.00654f, 0.001993f, 0.00835f, -0.008736f, -0.0003886f, -0.00677f, 0.0004423f, -0.00723f,
+ -0.002926f, 0.00994f, 0.00784f, 0.001214f, 0.00311f, 0.003584f, 0.00856f, 0.001752f, -0.004345f,
+ -0.003647f, 0.00984f, -0.006798f, 0.001661f, 0.0005393f, 0.0004299f, 0.001711f, -0.006824f, 0.003633f,
+ 0.00506f, -0.002146f, 0.005653f, -0.00959f, 0.0009027f, -0.009674f, 0.002176f, -0.002815f, -0.007362f,
+ -0.0002565f, -0.005466f, 0.006443f, 0.00541f, -0.006615f, -0.00668f, 0.0000291f, -0.00249f, -0.00648f,
+ 0.006466f, 0.005596f, -0.00963f, -0.00289f, -0.007336f, 0.001666f, -0.001227f, 0.008835f, -0.00396f,
+ -0.001764f, -0.00962f, -0.00461f, 0.00488f, 0.00606f, -0.00959f, 0.005497f, 0.003384f, -0.002548f,
+ 0.00479f, 0.001423f, -0.004772f, 0.0001752f, 0.00884f, 0.0069f, 0.00792f, -0.001779f, 0.0007215f,
+ -0.007557f, 0.004314f, -0.006527f, -0.00513f, -0.00855f, -0.00873f, -0.00709f, -0.007538f, -0.002918f,
+ -0.00867f, 0.000341f, 0.0004723f, 0.007336f, -0.0009327f, -0.005554f, 0.007065f, 0.00586f, -0.003202f,
+ -0.001984f, -0.007755f, 0.006268f, 0.003624f, 0.001136f, 0.002611f, -0.007374f, -0.00522f, 0.005642f,
+ 0.003551f, 0.005558f, 0.00512f, -0.001255f, 0.00445f, 0.006657f, -0.003395f, -0.0000211f, -0.00948f,
+ -0.00525f, 0.007614f, 0.007603f, -0.00872f, 0.00983f, -0.0059f, 0.005405f, -0.005775f, 0.001911f,
+ -0.006306f, -0.008446f, 0.006702f, 0.001295f, -0.007904f, -0.00613f, -0.00737f, 0.004997f, 0.00699f,
+ -0.008514f, 0.001029f, 0.008705f, 0.00543f, -0.0097f, -0.00839f, 0.00201f, 0.00319f, -0.00767f,
+ 0.003147f, -0.00936f, 0.003647f, 0.007465f, 0.00802f, 0.001254f, 0.00955f, 0.006344f, -0.00754f,
+ 0.007072f, -0.007305f, -0.002403f, -0.006702f, -0.00827f, 0.007183f, -0.001834f, -0.0057f, -0.007095f,
+ 0.00332f, -0.0008297f, 0.004333f, 0.0008926f, -0.00629f, 0.007393f, 0.006477f, -0.004684f, 0.002182f,
+ -0.004246f, 0.007324f, 0.001202f, 0.00993f, 0.001759f, -0.001665f, 0.0067f, 0.003798f, -0.007454f,
+ -0.00821f, 0.001178f, 0.004494f, 0.00384f, 0.003609f, 0.007614f, 0.00976f, -0.00918f, -0.002209f,
+ 0.002016f, 0.0093f, 0.00638f, -0.007572f, -0.008224f, -0.000771f, -0.00854f, -0.001513f, -0.007267f,
+ 0.00887f, -0.00107f, -0.007755f, 0.004757f, 0.002693f, 0.00439f, -0.00927f, -0.003588f, 0.001711f,
+ -0.002756f, 0.00974f, -0.004158f, 0.00621f, 0.00451f, 0.007935f, -0.002064f, -0.0081f, -0.00682f,
+ 0.006042f, -0.003317f, -0.003391f, -0.00688f, -0.00743f, 0.003933f, -0.00816f, -0.003164f, -0.001821f,
+ -0.001942f, 0.005005f, 0.00597f, 0.00595f, 0.0086f, 0.003202f, -0.00803f, -0.00892f, -0.002626f,
+ 0.000533f, -0.002506f, 0.00506f, -0.00822f, -0.000431f, 0.000955f, -0.004826f, -0.006626f, 0.001367f,
+ 0.00684f, -0.00793f, 0.00634f, -0.004353f, -0.00682f, 0.00657f, 0.000718f, -0.002306f, 0.006966f,
+ 0.006992f, -0.006275f, 0.00843f, 0.004826f, 0.00886f, -0.004f, 0.00901f, 0.005543f, -0.00566f,
+ -0.009575f, 0.005444f, 0.00633f, -0.005756f, 0.007687f, 0.001801f, -0.005802f, 0.001708f, -0.004517f,
+ 0.00808f, 0.00984f, -0.00847f, 0.00959f, -0.002443f, -0.001829f, -0.003305f, -0.00392f, -0.006924f,
+ -0.002266f, 0.001481f, 0.001099f, -0.00549f, 0.004787f, 0.00784f, -0.008514f, -0.00288f, -0.00858f,
+ 0.003025f, 0.002846f, 0.001469f, 0.00927f, 0.006443f, -0.00908f, 0.009445f, -0.009636f, -0.0003245f,
+ 0.003815f, -0.0001975f, 0.0007005f, -0.00984f, 0.0005784f, 0.0006576f, -0.00885f, 0.001424f, -0.004414f,
+ 0.006252f, 0.002722f, -0.002953f, 0.001995f, 0.00942f, -0.0000668f, -0.007507f, 0.00201f, 0.00344f,
+ 0.002167f, -0.001902f, -0.00691f, 0.00427f, -0.006607f, -0.003334f, -0.00143f, -0.00676f, 0.00736f,
+ 0.005222f, -0.0004745f, -0.0005236f, -0.00818f, 0.004253f, -0.002077f, 0.007355f, -0.00157f, -0.004112f,
+ -0.007156f, 0.002766f, -0.001808f, -0.003685f, 0.002918f, 0.005814f, 0.00126f, 0.00001913f, -0.0002122f,
+ 0.00882f, -0.001593f, 0.005184f, -0.006516f, 0.00848f, 0.00835f, -0.0006256f, 0.00252f, -0.00594f,
+ 0.005688f, -0.0089f, 0.000832f, 0.00922f, 0.002317f, -0.003725f, -0.005905f, 0.001728f, 0.002249f,
+ -0.00986f, 0.008896f, -0.0001637f, 0.006817f, -0.0092f, 0.008484f, -0.00751f, -0.002232f, 0.007233f,
+ 0.001008f, 0.003746f, -0.005726f, 0.006203f, 0.000586f, 0.00568f, 0.000979f, -0.00249f, -0.004295f,
+ -0.005775f, 0.0093f, -0.002306f, 0.002426f, -0.00712f, 0.004265f, 0.00659f, -0.00504f, -0.002317f,
+ 0.003494f, -0.005882f, 0.00602f, 0.001864f, -0.008255f, 0.00559f, -0.001576f, -0.004242f, -0.005627f,
+ 0.00521f, 0.003729f, -0.005524f, -0.005688f, 0.00695f, -0.00475f, -0.0001157f, -0.007744f, -0.007935f,
+ 0.006092f, -0.007626f, 0.002676f, -0.00196f, -0.00932f, -0.001797f, -0.0081f, -0.004524f, 0.002777f,
+ -0.0007696f, -0.0008817f, -0.00864f, 0.00834f, -0.001039f, -0.00899f, -0.007412f, -0.002197f, 0.003298f,
+ 0.00258f, 0.00667f, 0.001576f, -0.002626f, -0.001692f, -0.00107f, -0.001912f, -0.00997f, -0.005493f,
+ -0.0098f, -0.001864f, 0.001933f, 0.005116f, -0.00938f, -0.0002704f, 0.0001253f, -0.00465f, -0.00414f,
+ 0.001244f, 0.002434f, -0.003223f, 0.007835f, 0.004036f, 0.00748f, -0.00903f, 0.004265f, -0.002977f,
+ 0.00732f, 0.006317f, -0.00563f, -0.008224f, -0.00867f, 0.00962f, -0.005325f, 0.00101f, -0.00856f,
+ 0.00735f, -0.00862f, -0.003899f, -0.004925f, 0.0069f, 0.004513f, -0.009895f, -0.00239f, 0.00992f,
+ -0.00149f, 0.001915f, -0.002604f, 0.0095f, 0.007416f, 0.005016f, -0.002281f, 0.008125f, -0.009476f,
+ -0.009056f, 0.003843f, -0.002602f, 0.0089f, 0.003674f, 0.00132f, -0.00627f, 0.009186f, 0.006226f,
+ -0.00442f, 0.003323f, -0.00282f, 0.00831f, 0.007153f, -0.00724f, -0.002815f, -0.0001028f, 0.00809f,
+ 0.00871f, -0.007435f, -0.0018835f, 0.002344f, 0.00975f, -0.00286f, -0.00835f, -0.003582f, -0.000401f,
+ 0.007904f, -0.00499f, 0.003502f, -0.009605f, 0.00367f, -0.007473f, -0.003994f, -0.002377f, 0.00413f,
+ 0.000489f, 0.005356f, 0.00786f, 0.00476f, -0.005436f, 0.005947f, -0.000724f, -0.00671f, 0.00569f,
+ -0.00826f, 0.00846f, -0.006634f, -0.003334f, -0.00802f, -0.007126f, -0.001247f, 0.00596f, -0.009056f,
+ 0.0005774f, -0.00648f, 0.006126f, -0.00668f, -0.004116f, -0.0002975f, 0.0002549f, -0.006977f, 0.002117f,
+ 0.0007377f, -0.00803f, -0.003365f, 0.00819f, -0.002949f, -0.00969f, 0.006794f, -0.007645f, -0.00099f,
+ 0.006966f, 0.009735f, 0.002426f, 0.005592f, 0.0003273f, -0.003353f, -0.002249f, -0.00514f, -0.002508f,
+ -0.008156f, -0.000979f, 0.0002344f, -0.006508f, 0.00781f, 0.001318f, -0.00498f, 0.00858f, -0.003828f,
+ -0.00504f, 0.00639f, -0.002424f, 0.002552f, 0.003736f, -0.00797f, 0.00761f, 0.006474f, 0.004166f,
+ -0.009026f, 0.00638f, 0.0097f, -0.007202f, -0.008224f, -0.005714f, 0.001017f, 0.004894f, -0.00898f,
+ 0.00874f, -0.004066f, -0.002527f, 0.000754f, -0.002802f, 0.009315f, -0.00817f, -0.008705f, -0.0006857f,
+ 0.006992f, 0.000913f, 0.005993f, 0.005013f, 0.009346f, -0.00574f, 0.008575f, 0.004166f, -0.00604f,
+ -0.0032f, 0.0014925f, 0.008865f, -0.006435f, -0.004417f, 0.000921f, 0.00928f, -0.001739f, 0.000586f,
+ 0.007904f, 0.007347f, 0.00331f, -0.0078f, -0.004005f, 0.0074f, -0.005825f, -0.007244f, -0.002626f,
+ -0.005917f, 0.006508f, 0.007263f, -0.001506f, -0.003498f, 0.00693f, 0.004097f, 0.00934f, -0.003752f,
+ -0.006752f, 0.001534f, 0.003906f, 0.001351f, 0.00367f, 0.0086f, -0.00536f, -0.001699f, 0.001546f,
+ -0.00277f, -0.0005455f, -0.002718f, -0.00583f, -0.0009003f, -0.001003f, 0.001612f, -0.003557f, -0.006004f,
+ 0.001006f, -0.00925f, -0.0008187f, -0.002907f, 0.003675f, 0.00394f, 0.005608f, -0.007133f, 0.001691f,
+ 0.006428f, 0.003813f, -0.00542f, -0.00583f, 0.002207f, -0.001088f, 0.00714f, 0.006233f, 0.002617f,
+ -0.00419f, -0.00916f, 0.004063f, -0.002892f, 0.000514f, 0.00224f, 0.0001853f, 0.0007997f, 0.0005536f,
+ -0.00639f, -0.007015f, 0.00309f, 0.006184f, -0.00982f, -0.0002372f, 0.0009604f, 0.00962f, 0.00678f,
+ -0.006653f, -0.004955f, -0.0003958f, 0.006428f, 0.004517f, 0.00672f, 0.003792f, -0.006046f, -0.00221f,
+ -0.00727f, -0.00748f, -0.004204f, -0.00982f, 0.0007663f, 0.00661f, -0.003647f, -0.006973f, 0.002605f,
+ 0.0001023f, 0.004536f, -0.00647f, 0.009735f, 0.00945f, -0.00967f, -0.0003023f, -0.0086f, 0.008736f,
+ -0.00701f, 0.00258f, -0.002716f, -0.00162f, -0.006996f, 0.007664f, 0.007595f, 0.00403f, 0.00233f,
+ -0.00481f, -0.001349f, -0.005196f, -0.009026f, 0.00606f, 0.001146f, 0.001434f, 0.00967f, 0.004448f,
+ -0.004837f, -0.007168f, -0.005234f, 0.002514f, 0.005306f, 0.003088f, 0.0018215f, -0.00558f, -0.006596f,
+ 0.002018f, -0.003408f, -0.001384f, -0.006065f, -0.001212f, -0.002604f, -0.00767f, 0.0001342f, -0.00851f,
+ -0.00392f, 0.003862f, 0.00701f, 0.003605f, -0.00965f, -0.00714f, 0.00956f, -0.00888f, -0.001019f,
+ 0.0024f, -0.00961f, -0.005238f, 0.005333f, 0.00871f, 0.007607f, -0.00756f, -0.004772f, -0.00912f,
+ -0.004047f, 0.003483f, 0.003294f, 0.006577f, -0.005505f, 0.00996f, 0.009964f, 0.0004187f, 0.005898f,
+ 0.00796f, -0.00165f, -0.003225f, -0.001258f, 0.00853f, -0.008865f, 0.00815f, -0.001117f, -0.00685f,
+ 0.001974f, 0.00915f, 0.00667f, 0.009605f, 0.007107f, 0.007698f, -0.004387f, -0.0003958f, -0.005062f,
+ 0.002188f, -0.004875f, -0.002922f, -0.0003638f, 0.006268f, 0.00785f, 0.006138f, 0.000505f, -0.0003953f,
+ -0.00841f, -0.00958f, -0.007126f, -0.003107f, 0.0078f, 0.003452f, -0.009254f, -0.00117f, -0.00878f,
+ -0.00911f, -0.0004418f, 0.00831f, -0.004524f, 0.003872f, 0.0044f, 0.006424f, 0.000634f, -0.004883f,
+ -0.002487f, -0.00512f, -0.00692f, -0.00521f, -0.001761f, 0.008575f, -0.006393f, 0.00351f, 0.00914f,
+ -0.006035f, -0.002264f, -0.009636f, 0.00918f, -0.00967f, -0.004944f, -0.0004587f, -0.002478f, -0.00814f,
+ 0.00816f, -0.004776f, 0.00954f, 0.003471f, -0.006172f, 0.003603f, 0.009346f, 0.00455f, 0.00982f,
+ 0.00476f, 0.0007815f, -0.003096f, -0.0000307f, -0.005608f, 0.009315f, 0.00374f, -0.007366f, -0.001133f,
+ -0.00944f, 0.006847f, 0.00631f, 0.005394f, 0.003088f, -0.00644f, -0.0004168f, -0.00923f, -0.003254f,
+ -0.005077f, 0.00637f, -0.001415f, -0.003235f, -0.001729f, -0.0082f, 0.006664f, -0.006f, 0.00663f,
+ -0.001547f, -0.004116f, -0.00542f, 0.00521f, -0.00286f, -0.00396f, 0.004547f, -0.0001363f, 0.000979f,
+ -0.00634f, -0.006767f, -0.0000603f, 0.008316f, 0.00756f, -0.004993f, -0.00645f, -0.002295f, 0.004288f,
+ 0.00901f, 0.008194f, -0.004192f, -0.002182f, -0.005836f, -0.003983f, -0.007183f, -0.0061f, 0.001098f,
+ -0.0009274f, 0.005207f, 0.0002102f, -0.003925f, 0.0056f, -0.00296f, 0.006134f, -0.007744f, 0.006126f,
+ -0.005047f, -0.006134f, 0.004818f, -0.005283f, 0.005272f, -0.00779f, -0.003086f, -0.000607f, 0.005486f,
+ 0.0005345f, -0.007305f, -0.0048f, -0.00876f, -0.00433f, 0.006165f, -0.002474f, -0.00953f, -0.002066f,
+ 0.002918f, 0.006382f, 0.003317f, 0.00826f, -0.009995f, 0.004143f, 0.00985f, -0.0002116f, -0.002989f,
+ -0.007805f, 0.0003633f, -0.00365f, -0.00916f, 0.009834f, 0.003513f, -0.00379f, 0.00736f, -0.00957f,
+ 0.005726f, -0.00772f, -0.00803f, -0.002052f, -0.005585f, -0.00781f, -0.00599f, 0.00954f, 0.002024f,
+ -0.005745f, 0.003054f, -0.009415f, -0.005054f, 0.00424f, 0.003218f, 0.00826f, 0.00817f, -0.00409f,
+ 0.00518f, 0.00216f, 0.006756f, -0.00411f, -0.003344f, -0.004898f, 0.00001055f, 0.006104f, 0.001057f,
+ -0.000702f, 0.00771f, -0.001743f, 0.001407f, -0.005104f, -0.007717f, -0.002026f, -0.006405f, 0.00886f,
+ 0.0006466f, -0.00951f, -0.00395f, -0.00814f, 0.00936f, 0.001143f, -0.00485f, 0.00584f, -0.002224f,
+ 0.00834f, -0.0003467f, -0.000945f, 0.007034f, -0.0009427f, -0.009445f, 0.0007753f, -0.006973f, 0.001507f,
+ 0.004105f, -0.002523f, 0.002872f, -0.001515f, -0.00869f, 0.003103f, 0.000389f, -0.00774f, 0.00441f,
+ -0.001002f, 0.00783f, -0.001102f, -0.003883f, -0.007187f, -0.0001678f, -0.00742f, -0.00686f, -0.006702f,
+ 0.00894f, -0.0003886f, -0.005543f, 0.00988f, 0.00411f, -0.00002635f, 0.00851f, -0.002317f, 0.00873f,
+ -0.00532f, -0.000835f, -0.004166f, -0.004036f, -0.003325f, -0.00799f, 0.003025f, 0.001356f, -0.009575f,
+ -0.00426f, -0.003431f, 0.00899f, -0.001455f, -0.0007324f, -0.00492f, 0.00989f, -0.0002503f, -0.00814f,
+ -0.00535f, -0.0035f, -0.001434f, 0.00635f, -0.005108f, 0.002626f, 0.00983f, 0.00672f, -0.00725f,
+ -0.004826f, 0.007275f, -0.006763f, 0.002605f, 0.002369f, -0.000976f, 0.00263f, 0.00465f, -0.009544f,
+ -0.0008945f, -0.00175f, -0.00799f, -0.0006666f, -0.00514f, -0.002842f, -0.001805f, 0.000992f, 0.00844f,
+ -0.000964f, -0.00636f, 0.001281f, 0.001717f, 0.00569f, 0.005917f, -0.00826f, -0.00859f, 0.004246f,
+ 0.004078f, -0.005566f, 0.00835f, -0.006893f, -0.005867f, 0.001273f, -0.005856f, 0.004448f, 0.004562f,
+ -0.00392f, -0.00855f, 0.0005975f, 0.006817f, -0.005524f, -0.0009527f, -0.00695f, -0.002172f, -0.003683f,
+ -0.00546f, 0.007698f, -0.00858f, 0.003372f, 0.001414f, -0.007786f, -0.00482f, 0.0083f, 0.007534f,
+ 0.00554f, 0.005768f, 0.001982f, -0.004597f, -0.001634f, 0.000563f, 0.00298f, 0.001768f, 0.0004673f,
+ 0.009285f, 0.00518f, 0.00798f, 0.00557f, -0.002504f, -0.00777f, 0.007904f, 0.00939f, -0.004646f,
+ 0.00527f, 0.00817f, 0.00526f, 0.007935f, -0.00413f, -0.002628f, -0.008194f, -0.006195f, 0.00884f,
+ 0.007282f, 0.003819f, -0.00904f, 0.001354f, -0.004368f, -0.0002527f, 0.004684f, -0.002907f, -0.003862f,
+ -0.002197f, 0.00858f, -0.00989f, 0.0004277f, 0.008484f, -0.008865f, 0.007275f, 0.00869f, -0.0000226f,
+ 0.0006456f, 0.0002527f, 0.003267f, 0.007793f, -0.001359f, -0.007423f, -0.004204f, 0.006824f, -0.00801f,
+ 0.006992f, -0.002182f, 0.00181f, 0.00966f, -0.00888f, -0.006527f, -0.00873f, -0.004623f, -0.006767f,
+ -0.006317f, 0.003017f, 0.002218f, 0.00805f, -0.00677f, -0.00974f, -0.0083f, 0.008095f, -0.00424f,
+ -0.009636f, 0.002298f, -0.00864f, 0.004044f, 0.000354f, 0.00949f, 0.00635f, 0.009026f, -0.00806f,
+ -0.0008893f, 0.002377f, -0.001343f, -0.001965f, -0.00442f, -0.006615f, -0.004166f, 0.00719f, -0.006306f,
+ -0.009674f, -0.00787f, 0.00712f, -0.003637f, 0.0008287f, 0.005352f, -0.004227f, -0.00549f, -0.0058f,
+ 0.00489f, -0.005165f, 0.001942f, 0.00591f, 0.00612f, 0.005306f, -0.00723f, 0.0051f, 0.002329f,
+ -0.001097f, 0.002022f, -0.006416f, -0.006577f, 0.003603f, 0.004303f, 0.007652f, 0.00884f, -0.003191f,
+ 0.002787f, -0.009254f, 0.003475f, -0.002266f, 0.00936f, -0.00793f, -0.00738f, 0.008194f, 0.003998f,
+ -0.0049f, 0.008965f, -0.000592f, 0.00711f, 0.00905f, -0.0006223f, -0.00735f, -0.00399f, -0.00808f,
+ -0.005367f, 0.00705f, 0.0007415f, 0.00864f, 0.00883f, -0.001155f, 0.00898f, 0.004406f, 0.00967f,
+ 0.004677f, -0.003113f, -0.0009146f, 0.00756f, 0.005733f, -0.003647f, 0.00446f, 0.00798f, 0.003305f,
+ -0.0000515f, -0.003746f, -0.002283f, -0.004913f, 0.003496f, -0.00773f, -0.003622f, 0.004974f, 0.00244f,
+ 0.001445f, -0.004826f, 0.002394f, 0.003075f, -0.0006714f, 0.002077f, -0.008675f, -0.001683f, 0.006065f,
+ -0.005512f, -0.001691f, 0.007507f, -0.00913f, -0.0008674f, -0.005f, 0.001398f, -0.004875f, -0.000567f,
+ -0.002668f, 0.001711f, -0.005306f, -0.00883f, -0.001738f, 0.0035f, -0.006702f, -0.006943f, 0.00884f,
+ -0.001516f, 0.00991f, 0.003082f, 0.006077f, -0.00437f, -0.000524f, -0.003986f, 0.007393f, 0.00986f,
+ -0.0008f, -0.001425f, -0.001999f, -0.002277f, -0.00901f, 0.004986f, 0.002085f, -0.0009236f, 0.001841f,
+ -0.003191f, 0.002205f, -0.00781f, 0.00397f, -0.002066f, -0.008835f, -0.004585f, -0.00953f, -0.006496f,
+ -0.006996f, 0.007233f, -0.00544f, 0.001037f, 0.0028f, -0.007935f, -0.0055f, -0.007866f, 0.00436f,
+ -0.0009565f, 0.001419f, 0.007587f, -0.0004418f, -0.00318f, -0.003857f, 0.007763f, 0.008896f, 0.004925f,
+ 0.00979f, -0.00928f, -0.001149f, 0.00678f, -0.002733f, -0.002972f, -0.001726f, 0.006706f, -0.001256f,
+ -0.00636f, 0.0004964f, 0.0005093f, -0.0008807f, 0.002026f, 0.00215f, -0.007603f, -0.00936f, -0.001715f,
+ -0.000935f, 0.0005236f, 0.000975f, 0.00786f, -0.002583f, 0.003407f, -0.002033f, -0.00217f, 0.001398f,
+ -0.0001027f, 0.0009203f, 0.0009117f, 0.00741f, -0.003925f, 0.0007577f, -0.006317f, 0.001241f, 0.005623f,
+ 0.001732f, 0.00374f, 0.00341f, 0.006714f, 0.001987f, -0.0037f, 0.00349f, -0.00431f, -0.00895f,
+ -0.009605f, -0.007214f, -0.00393f, -0.002583f, 0.00841f, 0.00782f, -0.005657f, -0.00655f, 0.003542f,
+ -0.004143f, 0.003202f, -0.002695f, 0.0002656f, 0.001797f, -0.0065f, 0.00628f, -0.0001239f, -0.002842f,
+ 0.00119f, -0.00979f, 0.006287f, -0.00646f, 0.00769f, 0.00831f, -0.0055f, 0.0005436f, 0.006554f,
+ -0.0001364f, 0.00699f, 0.004364f, -0.00227f, 0.00489f, 0.0026f, 0.0007696f, 0.0004685f, -0.001103f,
+ 0.001123f, -0.002245f, 0.006527f, -0.00828f, -0.002954f, -0.005226f, -0.005814f, -0.0002468f, -0.00884f,
+ 0.008606f, -0.00001067f, -0.00417f, -0.003376f, 0.00918f, -0.00776f, 0.002684f, 0.006145f, -0.0006285f,
+ -0.004173f, -0.004917f, -0.00678f, 0.00248f, 0.007263f, 0.002188f, -0.000213f, 0.00413f, 0.002676f,
+ 0.004948f, 0.007614f, -0.001845f, -0.00436f, 0.00591f, 0.004833f, -0.002085f, -0.006096f, 0.007378f,
+ 0.001922f, 0.006573f, 0.0016985f, 0.001776f, 0.00993f, -0.00829f, -0.0001675f, 0.004753f, 0.00008494f,
+ 0.00989f, 0.0008593f, 0.00636f, 0.0008297f, -0.00482f, -0.001189f, -0.001576f, -0.001331f, -0.00881f,
+ 0.00416f, -0.0008516f, -0.002281f, -0.00399f, -0.00603f, 0.0031f, 0.00994f, 0.0009284f, -0.00446f,
+ -0.00944f, 0.00272f, -0.001006f, -0.006733f, 0.00815f, 0.004932f, -0.004894f, 0.007156f, 0.0001193f,
+ -0.00745f, -0.000041f, -0.004074f, 0.00829f, 0.006042f, 0.006176f, -0.00509f, 0.005375f, -0.00554f,
+ -0.001078f, -0.002928f, 0.00813f, 0.004013f, 0.002552f, -0.0086f, 0.000254f, -0.005844f, 0.004093f,
+ -0.008224f, 0.006016f, -0.004883f, -0.006504f, 0.0003617f, -0.00008327f, 0.00382f, 0.00786f, -0.00915f,
+ -0.004963f, 0.003756f, 0.00689f, 0.00833f, 0.005455f, -0.00871f, -0.00872f, -0.0008054f, 0.001023f,
+ -0.003527f, -0.00735f, 0.00691f, 0.0092f, 0.004837f, -0.000847f, 0.0006146f, -0.00829f, 0.007317f,
+ -0.002722f, 0.005962f, -0.004005f, 0.002857f, 0.004414f, 0.00437f, -0.003452f, -0.004383f, -0.004654f,
+ 0.007866f, -0.000736f, -0.001158f, -0.005924f, -0.002207f, 0.00904f, 0.004505f, 0.005688f, 0.003448f,
+ -0.00414f, -0.00986f, -0.007446f, 0.00479f, 0.00314f, 0.0084f, 0.005714f, -0.002865f, 0.0008903f,
+ -0.00831f, 0.009415f, -0.001098f, 0.0007825f, -0.002136f, -0.009995f, 0.00798f, -0.0002449f, -0.00454f,
+ 0.00262f, -0.001926f, 0.003874f, -0.001987f, 0.00456f, 0.00994f, -0.00275f, -0.0013485f, 0.00911f,
+ -0.0011f, -0.005253f, 0.003504f, 0.004726f, -0.00821f, 0.00008196f, 0.004696f, 0.00473f, 0.006893f,
+ -0.002386f, 0.007145f, 0.007584f, -0.00542f, -0.000596f, 0.002354f, 0.001427f, 0.001673f, 0.004646f,
+ 0.004826f, 0.00847f, -0.005226f, 0.0003307f, 0.00536f, 0.002802f, 0.006264f, -0.000479f, 0.00222f,
+ 0.00817f, 0.005253f, 0.005257f, 0.001163f, 0.005417f, 0.006603f, 0.00514f, -0.003473f, -0.001948f,
+ 0.006695f, 0.003492f, 0.000456f, 0.00933f, 0.00283f, 0.006935f, -0.004658f, -0.0008807f, -0.001274f,
+ -0.0006485f, -0.00349f, -0.002163f, 0.00811f, 0.001358f, -0.002134f, 0.0005803f, -0.001573f, -0.005478f,
+ -0.00496f, 0.00968f, 0.001645f, -0.005756f, -0.0008974f, -0.00608f, -0.00528f, 0.00005585f, -0.005756f,
+ -0.004025f, -0.00772f, -0.0008974f, 0.00786f, 0.00396f, -0.008865f, -0.00645f, -0.00903f, 0.00802f,
+ -0.001602f, -0.0072f, 0.00736f, 0.002499f, -0.00839f, -0.00925f, 0.005943f, -0.00785f, -0.0081f,
+ -0.00802f, -0.005554f, 0.004078f, 0.009476f, -0.00877f, 0.00257f, -0.00439f, 0.006744f, -0.00419f,
+ -0.005413f, 0.002476f, -0.002373f, -0.006424f, 0.008736f, 0.006977f, 0.009735f, 0.009514f, 0.0009437f,
+ -0.001418f, 0.004066f, 0.004986f, -0.008644f, -0.007427f, -0.00988f, 0.006714f, -0.00118f, 0.00924f,
+ 0.000984f, 0.001846f, -0.00418f, 0.00341f, 0.0007763f, 0.008545f, 0.007313f, 0.00999f, -0.000682f,
+ 0.003416f, 0.00465f, -0.000676f, 0.00206f, -0.00654f, -0.002478f, 0.003826f, -0.001733f, -0.003693f,
+ -0.001044f, -0.004696f, 0.00688f, 0.00632f, 0.004963f, -0.00365f, -0.00772f, -0.001813f, -0.004898f,
+ -0.008385f, 0.002f, -0.007782f, -0.000961f, -0.003376f, 0.005157f, -0.002651f, 0.007935f, 0.003716f,
+ 0.009f, 0.001195f, -0.00982f, -0.00532f, -0.00828f, -0.000279f, -0.007626f, 0.00879f, 0.006996f,
+ 0.00942f, 0.002588f, -0.0097f, -0.00011635f, -0.001595f, -0.0006347f, -0.001799f, 0.00126f, 0.005085f,
+ 0.001865f, 0.003216f, -0.000628f, -0.00474f, -0.004925f, -0.00626f, 0.006287f, -0.005054f, 0.0079f,
+ -0.005177f, -0.009796f, -0.00805f, -0.001599f, 0.0085f, -0.008965f, -0.002886f, -0.008606f, -0.008965f,
+ 0.004757f, -0.009285f, 0.00548f, 0.00816f, -0.001941f, 0.00622f, 0.00755f, 0.00926f, 0.009125f,
+ -0.004364f, 0.006214f, -0.007137f, 0.001763f, -0.002035f, 0.004326f, 0.00653f, -0.007072f, -0.003609f,
+ -0.00504f, 0.004448f, -0.005928f, -0.007057f, -0.002148f, -0.004593f, -0.004467f, -0.009514f, -0.00854f,
+ 0.001922f, 0.007572f, -0.005016f, 0.003345f, 0.008575f, -0.00967f, 0.000532f, -0.002897f, -0.005013f,
+ -0.009834f, 0.00302f, 0.005688f, 0.005096f, -0.003983f, 0.00851f, 0.001554f, 0.00394f, 0.005688f,
+ -0.00537f, 0.00655f, 0.007526f, 0.002298f, 0.006126f, -0.00654f, -0.003433f, -0.00818f, -0.003098f,
+ -0.00822f, -0.00898f, -0.007675f, 0.005955f, -0.003288f, 0.006237f, -0.002f, 0.002678f, -0.00639f,
+ 0.00899f, 0.009766f, 0.009384f, -0.0001253f, 0.007263f, -0.003555f, -0.00988f, -0.00534f, -0.005356f,
+ -0.00805f, 0.001697f, 0.002516f, 0.0022f, 0.007397f, -0.002075f, 0.00247f, 0.004593f, -0.00543f,
+ 0.000358f, -0.005047f, 0.00476f, -0.003937f, -0.002851f, 0.007507f, 0.001389f, 0.003235f, 0.00205f,
+ -0.00474f, -0.0059f, 0.001666f, 0.002943f, -0.00954f, -0.00828f, -0.008804f, 0.002356f, 0.00836f,
+ 0.002785f, 0.00881f, -0.00716f, 0.005608f, 0.007534f, -0.00952f, 0.008965f, 0.0001839f, -0.007412f,
+ 0.00693f, -0.0000717f, 0.003857f, 0.00021f, 0.002897f, -0.00452f, -0.002552f, -0.005962f, -0.006737f,
+ -0.0008616f, 0.008606f, -0.005814f, -0.007397f, -0.006096f, 0.0099f, -0.00955f, 0.001134f, 0.00702f,
+ -0.0003154f, 0.00366f, -0.009186f, -0.001096f, 0.00984f, -0.005787f, 0.00369f, -0.001496f, 0.002462f,
+ -0.00623f, -0.00426f, -0.004837f, -0.00558f, -0.003311f, -0.0066f, 0.0077f, 0.003609f, 0.004646f,
+ 0.007996f, -0.00788f, 0.006348f, -0.00986f, 0.00817f, 0.0001633f, 0.0001796f, -0.00899f, -0.001417f,
+ 0.00972f, -0.00067f, -0.005535f, 0.001376f, 0.004974f, 0.0008225f, 0.008484f, -0.00589f, 0.00828f,
+ -0.007206f, -0.00599f, -0.0009503f, 0.000634f, -0.0001874f, -0.00654f, 0.00424f, -0.001244f, 0.002506f,
+ -0.009964f, -0.00828f, -0.002129f, -0.003368f, -0.0003746f, -0.006798f, -0.00383f, 0.008514f, 0.00818f,
+ -0.005497f, -0.0034f, -0.001681f, -0.004208f, -0.004337f, -0.0000664f, 0.003807f, -0.006073f, -0.003489f,
+ -0.00521f, 0.005047f, 0.00367f, 0.005657f, -0.004665f, 0.00671f, -0.003513f, 0.00869f, 0.008095f,
+ 0.007545f, 0.007214f, 0.002594f, -0.001637f, 0.005642f, 0.00526f, -0.007195f, 0.00413f, -0.006878f,
+ 0.009224f, 0.008514f, -0.0008245f, -0.004276f, 0.003633f, -0.000534f, -0.00916f, -0.00905f, 0.00827f,
+ 0.00458f, 0.002428f, -0.002975f, 0.00718f, -0.00888f, 0.004597f, 0.0004854f, -0.003778f, 0.006023f,
+ 0.001024f, -0.00484f, -0.0048f, 0.001374f, -0.004204f, -0.004368f, 0.005783f, 0.001205f, 0.007774f,
+ -0.001196f, -0.007015f, 0.00822f, -0.005875f, 0.003675f, 0.00279f, 0.001947f, -0.00342f, -0.000307f,
+ -0.003113f, -0.0017185f, -0.001276f, 0.0031f, -0.003546f, -0.003328f, 0.004078f, 0.00976f, -0.002756f,
+ 0.00487f, -0.007904f, 0.003613f, 0.007034f, -0.00624f, 0.0007896f, -0.0077f, -0.001974f, 0.007397f,
+ 0.005966f, -0.00627f, -0.005215f, 0.001178f, -0.00372f, 0.001711f, -0.001743f, 0.00248f, 0.0003877f,
+ 0.005028f, -0.00789f, -0.0007873f, -0.005753f, 0.00961f, 0.00961f, 0.002813f, 0.002567f, -0.007095f,
+ 0.003628f, 0.0001531f, 0.0002968f, -0.005493f, -0.0001053f, 0.00964f, 0.004997f, -0.00657f, 0.000724f,
+ -0.00563f, -0.009834f, -0.003574f, 0.003572f, -0.006805f, 0.007423f, 0.003103f, -0.005455f, 0.00881f,
+ -0.00777f, -0.003508f, 0.0075f, 0.00404f, -0.00747f, 0.003056f, 0.005142f, -0.007156f, -0.00923f,
+ 0.00401f, 0.007442f, 0.005077f, 0.007393f, 0.004276f, -0.00851f, -0.00263f, -0.006123f, 0.003536f,
+ 0.005672f, 0.00887f, -0.002031f, -0.00524f, -0.001232f, 0.000433f, 0.005398f, 0.009575f, 0.009705f,
+ -0.007267f, -0.00565f, -0.003963f, 0.007477f, -0.00216f, -0.007744f, -0.003347f, -0.00804f, -0.002136f,
+ -0.002407f, 0.00826f, -0.006294f, 0.005116f, 0.00007975f, -0.007267f, -0.003428f, -0.005497f, 0.001562f,
+ 0.003801f, -0.004646f, 0.004234f, 0.00979f, 0.00943f, -0.002726f, 0.0007277f, 0.0007143f, -0.00785f,
+ 0.00531f, 0.00747f, -0.006287f, 0.0001854f, 0.0005198f, -0.006645f, -0.000202f, -0.0004883f, -0.001946f,
+ 0.00904f, 0.00122f, 0.005608f, 0.002243f, -0.001732f, -0.00844f, -0.000973f, 0.00898f, 0.00686f,
+ 0.005028f, 0.005497f, -0.002182f, -0.007122f, 0.00955f, 0.00725f, 0.0000116f, 0.00504f, 0.00864f,
+ -0.00827f, -0.00476f, -0.001607f, 0.006145f, 0.00777f, 0.00974f, -0.002163f, 0.00857f, 0.006485f,
+ -0.004356f, 0.00010043f, 0.001632f, 0.005432f, 0.00846f, -0.006756f, 0.0005136f, -0.00836f, -0.009544f,
+ 0.005016f, -0.002354f, -0.004543f, 0.00419f, 0.00798f, -0.001813f, 0.005913f, 0.003494f, -0.002695f,
+ -0.009346f, -0.001584f, -0.00886f, -0.007374f, 0.00979f, 0.00961f, 0.0006576f, -0.0018015f, -0.009766f,
+ -0.00821f, -0.00924f, 0.0002823f, 0.003115f, -0.00788f, -0.005257f, 0.003233f, -0.00939f, 0.00617f,
+ 0.003914f, -0.002165f, 0.004215f, 0.00603f, 0.00498f, -0.000754f, 0.0079f, 0.00463f, -0.004574f,
+ -0.00494f, 0.0014715f, 0.007866f, 0.005215f, -0.00008845f, 0.00897f, -0.00431f, -0.00416f, 0.001195f,
+ -0.007626f, 0.006153f, 0.000168f, -0.001373f, 0.001575f, -0.00368f, -0.00926f, 0.003387f, -0.006237f,
+ -0.003305f, -0.004677f, 0.003044f, 0.002283f, -0.00855f, -0.00383f, 0.005135f, -0.003328f, -0.005f,
+ -0.006145f, 0.008995f, 0.00933f, -0.0004253f, -0.00697f, -0.00895f, 0.001212f, 0.007114f, 0.005264f,
+ 0.003008f, -0.0087f, 0.00578f, -0.008354f, 0.009056f, 0.004955f, -0.004787f, 0.001999f, -0.008705f,
+ -0.00722f, -0.00211f, 0.00471f, -0.0012245f, -0.0003836f, -0.00119f, -0.005363f, -0.00464f, -0.00628f,
+ -0.00855f, -0.000797f, 0.005047f, 0.0006003f, 0.002134f, 0.001738f, 0.006653f, -0.003204f, 0.00568f,
+ -0.0003297f, 0.0001493f, -0.00001603f, -0.001742f, -0.0004888f, -0.002066f, -0.003843f, 0.008514f, 0.001038f,
+ -0.006084f, 0.002298f, -0.00506f, 0.0028f, -0.00588f, 0.006187f, -0.004707f, 0.00482f, -0.005604f,
+ 0.0099f, 0.002226f, -0.00418f, -0.00867f, -0.001959f, 0.006733f, 0.00881f, -0.009636f, 0.006523f,
+ 0.00918f, -0.005287f, -0.00939f, 0.007725f, 0.002266f, -0.00813f, 0.00945f, -0.009735f, 0.00804f,
+ -0.00447f, -0.0006757f, -0.002113f, 0.0071f, -0.002256f, -0.001572f, -0.002722f, -0.005325f, 0.005184f,
+ 0.001163f, 0.00785f, -0.00908f, 0.000957f, -0.004894f, -0.00785f, 0.004192f, 0.005585f, -0.00466f,
+ 0.00659f, -0.009026f, 0.00393f, -0.00526f, -0.00882f, -0.006893f, -0.008286f, -0.000591f, -0.00449f,
+ -0.00882f, 0.004025f, -0.00812f, 0.002306f, 0.003397f, 0.0002433f, -0.00333f, 0.000728f, -0.001259f,
+ -0.0006423f, 0.00922f, 0.002346f, -0.00682f, -0.002346f, -0.00688f, 0.0004377f, 0.0007114f, -0.00878f,
+ 0.00824f, -0.007797f, 0.00000536f, 0.00009096f, 0.00981f, -0.001997f, -0.006676f, -0.006683f, -0.00412f,
+ 0.00085f, 0.004017f, 0.00645f, -0.00674f, 0.00846f, -0.00847f, -0.00199f, 0.003153f, -0.0002362f,
+ -0.0004025f, 0.007996f, 0.002476f, 0.00555f, 0.003628f, -0.00508f, 0.00728f, -0.00266f, 0.003223f,
+ -0.007328f, -0.00689f, -0.00229f, -0.001114f, 0.002768f, -0.001708f, 0.003847f, -0.007248f, -0.00689f,
+ -0.007065f, -0.00772f, 0.005745f, 0.008804f, 0.006092f, 0.005795f, 0.001585f, 0.005386f, -0.005962f,
+ -0.0004244f, 0.008804f, 0.003803f, 0.000961f, 0.00976f, 0.0005674f, 0.00905f, 0.00982f, 0.005295f,
+ -0.00009507f, 0.005775f, -0.002659f, -0.001253f, -0.006416f, 0.008194f, 0.00945f, 0.006752f, -0.00935f,
+ 0.003845f, -0.006237f, 0.00415f, 0.008095f, -0.00645f, -0.009865f, 0.000944f, 0.00811f, 0.00841f,
+ 0.0002704f, -0.00681f, 0.00514f, -0.005535f, -0.00543f, -0.007355f, 0.006424f, -0.0012665f, -0.007423f,
+ 0.00501f, 0.0071f, -0.0001485f, -0.004772f, -0.007965f, -0.002703f, 0.00977f, -0.0002038f, 0.00664f,
+ 0.002275f, 0.004887f, 0.00762f, 0.001178f, 0.001114f, -0.000678f, -0.001807f, -0.004963f, 0.001163f,
+ 0.00273f, -0.00955f, 0.002756f, 0.0005674f, -0.00551f, -0.00862f, -0.009026f, 0.00948f, -0.00195f,
+ -0.001241f, 0.00402f, 0.002943f, 0.0001924f, 0.001133f, -0.004086f, 0.002512f, -0.0058f, 0.00159f,
+ -0.00808f, 0.00575f, -0.00857f, -0.00701f, 0.009544f, -0.001974f, 0.002966f, -0.004898f, -0.001783f,
+ 0.003128f, -0.005596f, -0.00751f, -0.004704f, 0.00719f, -0.00949f, -0.001564f, 0.003157f, 0.005245f,
+ -0.00424f, 0.004654f, -0.00425f, -0.008766f, 0.00912f, -0.005386f, 0.00439f, -0.002386f, 0.00576f,
+ 0.003857f, -0.007004f, 0.0005574f, 0.006065f, -0.0068f, 0.00985f, -0.0003872f, -0.004654f, 0.008675f,
+ 0.00801f, 0.001015f, 0.0019045f, 0.007225f, 0.0004132f, -0.005173f, 0.001682f, -0.002037f, -0.003492f,
+ 0.003092f, 0.00231f, 0.007294f, 0.002605f, -0.00941f, -0.004112f, 0.0082f, 0.002506f, -0.00819f,
+ -0.0041f, 0.009476f, 0.003584f, -0.00585f, 0.00462f, -0.006348f, 0.00913f, -0.003197f, -0.004265f,
+ -0.00945f, -0.001356f, 0.007545f, 0.002289f, 0.001126f, 0.002977f, 0.00948f, -0.00703f, -0.002531f,
+ -0.00868f, -0.00619f, -0.0004635f, 0.009254f, -0.0005174f, -0.00736f, -0.006264f, 0.00779f, -0.002342f,
+ 0.004997f, 0.00269f, 0.00509f, -0.0041f, 0.00506f, 0.002752f, -0.006416f, 0.00794f, 0.003563f,
+ 0.00551f, 0.006554f, -0.008286f, -0.00296f, 0.008354f, -0.0079f, -0.006348f, 0.001052f, 0.0007205f,
+ 0.00506f, 0.000453f, -0.00993f, -0.006424f, 0.005787f, -0.001206f, 0.00876f, -0.004513f, -0.002857f,
+ -0.00701f, -0.00621f, 0.003498f, 0.00986f, -0.00846f, -0.00128f, 0.006294f, -0.003735f, 0.00843f,
+ -0.00841f, -0.007465f, -0.007504f, -0.00734f, 0.00635f, 0.004498f, -0.005688f, -0.003014f, 0.00892f,
+ 0.00982f, 0.00793f, -0.002365f, 0.003353f, -0.004486f, -0.00651f, -0.00361f, -0.00418f, -0.00786f,
+ 0.007812f, 0.001912f, -0.008156f, -0.00809f, -0.001939f, -0.003836f, -0.001578f, 0.00331f, -0.008736f,
+ -0.006138f, -0.00877f, -0.007595f, 0.002537f, -0.007336f, -0.006477f, -0.007767f, -0.00853f, -0.003601f,
+ -0.000952f, 0.007683f, -0.006283f, 0.00796f, 0.006012f, -0.001464f, 0.00718f, -0.0025f, -0.001972f,
+ 0.004166f, 0.0002615f, 0.00496f, 0.006516f, 0.0016f, -0.008415f, -0.002398f, -0.001027f, 0.0000037f,
+ 0.00827f, 0.003153f, 0.004826f, 0.00619f, -0.00673f, -0.00834f, -0.001702f, 0.006664f, -0.00465f,
+ -0.00909f, 0.003893f, 0.005188f, 0.009415f, 0.00191f, 0.00274f, -0.002968f, -0.003834f, 0.00495f,
+ 0.005985f, -0.002945f, 0.007317f, -0.00934f, -0.001007f, -0.005333f, -0.008415f, -0.0067f, 0.006084f,
+ 0.00689f, -0.002855f, -0.009254f, -0.00402f, 0.007694f, -0.007633f, -0.008865f, -0.00846f, 0.007317f,
+ -0.00915f, -0.009476f, 0.002455f, -0.001528f, -0.001358f, 0.0016985f, -0.001466f, -0.002584f, -0.006992f,
+ -0.00427f, 0.000739f, 0.00258f, 0.0042f, 0.001303f, 0.00963f, 0.002176f, -0.00952f, 0.0005264f,
+ -0.005226f, 0.008804f, 0.005707f, -0.00763f, -0.00875f, 0.0002716f, -0.00251f, -0.00646f, -0.00666f,
+ 0.00936f, 0.005447f, -0.00562f, 0.00967f, 0.001811f, -0.00963f, 0.001052f, 0.00807f, -0.002794f,
+ -0.00845f, 0.00685f, -0.003199f, 0.003119f, -0.004333f, 0.0001079f, -0.00884f, -0.002384f, -0.0008464f,
+ -0.0053f, 0.0008607f, 0.005f, 0.003218f, -0.001972f, 0.003925f, -0.000635f, -0.003868f, -0.00636f,
+ -0.005894f, 0.0005355f, 0.00921f, -0.006687f, 0.00629f, -0.001168f, -0.00646f, 0.005547f, -0.00963f,
+ -0.004078f, 0.002125f, 0.008995f, 0.006187f, 0.007397f, -0.00656f, -0.006527f, 0.006042f, -0.001503f,
+ -0.00624f, 0.003023f, -0.009995f, -0.002466f, 0.00351f, 0.003439f, -0.003235f, 0.008026f, 0.004158f,
+ 0.003117f, -0.005856f, 0.00461f, -0.001134f, 0.004257f, 0.00933f, 0.00992f, -0.008156f, 0.004356f,
+ 0.00917f, -0.007904f, 0.0004003f, -0.00912f, -0.003895f, -0.005566f, -0.00899f, -0.0001261f, -0.00272f,
+ -0.00529f, -0.005215f, -0.000558f, -0.006172f, 0.008354f, 0.000414f, -0.004574f, 0.00527f, 0.004333f,
+ -0.00728f, -0.00797f, 0.0096f, -0.00344f, -0.00881f, -0.00368f, 0.00844f, -0.00517f, -0.005783f,
+ -0.002708f, -0.006958f, 0.00088f, 0.007393f, 0.002115f, 0.00502f, -0.007347f, 0.002518f, -0.007164f,
+ 0.003891f, -0.006386f, 0.004723f, -0.007137f, 0.00979f, 0.00728f, -0.007385f, -0.003569f, -0.001245f,
+ 0.007244f, -0.004177f, 0.005627f, -0.001364f, 0.007786f, -0.003647f, 0.00975f, 0.003262f, 0.006668f,
+ 0.007492f, -0.002676f, 0.00452f, 0.00613f, 0.009895f, -0.0000653f, -0.0002944f, 0.0095f, 0.00829f,
+ 0.003607f, -0.00763f, 0.001573f, 0.00708f, 0.001338f, 0.00761f, -0.00934f, 0.00425f, 0.004677f,
+ 0.004356f, -0.00835f, -0.003391f, -0.00722f, 0.00877f, 0.001739f, -0.0078f, -0.003801f, -0.002934f,
+ 0.00592f, -0.00832f, -0.005596f, 0.00847f, 0.002663f, -0.002655f, -0.00461f, 0.001812f, -0.005447f,
+ 0.00393f, -0.0001626f, -0.0099f, -0.005177f, -0.000107f, -0.004513f, -0.00942f, -0.004494f, -0.0002584f,
+ 0.00558f, 0.00919f, 0.00483f, -0.003881f, 0.0000862f, 0.00472f, 0.002277f, 0.00452f, -0.005043f,
+ -0.00812f, 0.006695f, -0.001397f, 0.00708f, 0.00666f, 0.009445f, 0.002443f, 0.00672f, 0.00742f,
+ 0.0047f, -0.0099f, -0.001733f, -0.001216f, 0.002306f, 0.00525f, 0.006687f, 0.007397f, -0.004185f,
+ -0.007645f, 0.00497f, 0.002726f, -0.004883f, 0.00545f, 0.001207f, -0.003443f, 0.00855f, -0.008575f,
+ -0.00995f, 0.00938f, 0.001395f, -0.005894f, -0.004715f, 0.001335f, 0.007214f, -0.00979f, -0.0009723f,
+ -0.00884f, -0.00325f, -0.006447f, -0.0002873f, -0.006546f, -0.00914f, 0.00311f, 0.001508f, -0.008644f,
+ 0.003849f, -0.00224f, -0.0073f, 0.004158f, -0.007076f, -0.00458f, -0.002794f, 0.00691f, -0.00991f,
+ -0.002531f, -0.007236f, 0.00291f, 0.003098f, -0.00666f, 0.00618f, -0.001502f, -0.008026f, 0.0001609f,
+ -0.001733f, 0.00476f, 0.007725f, -0.007076f, -0.005398f, -0.001904f, 0.002743f, 0.001987f, 0.002935f,
+ 0.006363f, 0.007755f, -0.002127f, -0.002626f, 0.003273f, 0.0044f, -0.003975f, -0.00273f, -0.001413f,
+ -0.008736f, -0.005775f, 0.00445f, -0.007412f, -0.00647f, 0.0046f, 0.007393f, -0.0003533f, -0.00926f,
+ -0.006104f, 0.001658f, 0.00642f, -0.00962f, 0.00724f, -0.00032f, -0.00848f, -0.007442f, 0.001179f,
+ -0.004684f, -0.001757f, 0.002796f, 0.00741f, 0.002192f, 0.003952f, 0.002794f, -0.00581f, 0.00923f,
+ -0.000795f, -0.008545f, 0.0004318f, 0.007034f, 0.001034f, -0.009224f, 0.0037f, 0.00736f, -0.007587f,
+ -0.001963f, 0.00037f, -0.001584f, -0.0001048f, 0.00979f, -0.007168f, 0.003159f, 0.00205f, -0.0082f,
+ 0.000802f, 0.00919f, 0.005257f, 0.000411f, 0.006824f, 0.00543f, -0.00202f, -0.008705f, -0.0084f,
+ -0.0008135f, -0.001487f, -0.00698f, 0.00766f, 0.0003076f, 0.002989f, 0.00785f, 0.004498f, 0.004917f,
+ 0.001951f, 0.00489f, -0.000938f, 0.00438f, -0.00010777f, 0.00993f, -0.003304f, -0.00859f, 0.00656f,
+ -0.009926f, 0.00572f, 0.009445f, 0.004425f, 0.00595f, 0.005547f, -0.00555f, 0.00912f, -0.00391f,
+ 0.00417f, -0.00732f, -0.00944f, -0.001693f, 0.003319f, 0.007904f, 0.004158f, 0.008026f, -0.004173f,
+ 0.00174f, 0.00794f, 0.001028f, -0.0004673f, -0.01f, 0.005222f, 0.00968f, 0.00173f, -0.00965f,
+ 0.00775f, 0.00758f, -0.006916f, -0.006714f, 0.001373f, -0.00906f, 0.005737f, -0.00403f, 0.003036f,
+ -0.00832f, -0.001393f, -0.00903f, -0.007996f, -0.001152f, 0.00698f, -0.00907f, 0.00455f, 0.0006533f,
+ -0.001487f, -0.0074f, 0.005177f, 0.00607f, 0.006973f, -0.002907f, -0.008446f, 0.004932f, 0.00457f,
+ -0.001466f, 0.007805f, 0.002241f, -0.002304f, -0.006294f, -0.00625f, 0.002876f, 0.005146f, 0.000603f,
+ 0.00309f, -0.00912f, 0.002026f, 0.0096f, -0.000262f, 0.00007397f, 0.001089f, -0.00799f, 0.00948f,
+ -0.0007935f, -0.00997f, 0.001588f, 0.009674f, -0.0006795f, 0.00958f, 0.00604f, -0.00975f, -0.001219f,
+ -0.005093f, 0.00061f, 0.0002333f, 0.006195f, 0.006245f, 0.00548f, 0.006554f, 0.009155f, 0.003277f,
+ -0.0027f, -0.002827f, 0.002981f, 0.00059f, -0.00643f, 0.001903f, 0.006195f, -0.001568f, -0.002792f,
+ 0.001151f, -0.00969f, 0.0001194f, 0.006084f, -0.00789f, -0.00746f, -0.000923f, -0.002726f, -0.0009117f,
+ -0.009155f, 0.0003529f, 0.002682f, 0.00394f, 0.0003521f, -0.006798f, 0.f, 0.006145f, -0.006645f,
+ -0.0000278f, 0.005737f, -0.003601f, 0.008156f, 0.006905f, 0.00996f, 0.00752f, 0.00513f, -0.001212f,
+ -0.005558f, -0.009796f, -0.009056f, 0.001026f, -0.003756f, 0.002048f, 0.00501f, 0.004303f, 0.00885f,
+ -0.002895f, 0.00885f, 0.00881f, 0.008965f, -0.00772f, 0.000675f, -0.00361f, 0.009254f, 0.00947f,
+ 0.002851f, -0.00443f, -0.0008383f, -0.001255f, 0.007088f, -0.00718f, -0.001156f, 0.00496f, 0.00543f,
+ 0.009575f, -0.00932f, -0.00289f, -0.00961f, -0.005413f, 0.00887f, 0.008194f, 0.007217f, 0.001349f,
+ -0.00616f, -0.00132f, 0.008255f, 0.008354f, -0.001022f, -0.00916f, 0.0012f, 0.00942f, -0.005272f,
+ -0.007713f, 0.00924f, -0.002554f, 0.00812f, 0.002947f, 0.006466f, 0.007267f, 0.004383f, 0.006683f,
+ -0.004047f, -0.001562f, 0.0000953f, -0.00198f, -0.001826f, -0.005013f, 0.008095f, -0.00878f, -0.006645f,
+ 0.005096f, -0.0003052f, -0.00815f, -0.00986f, 0.0081f, 0.00661f, -0.00097f, 0.006916f, -0.007244f,
+ 0.004272f, 0.00444f, -0.00546f, 0.003994f, -0.00191f, 0.001437f, 0.00408f, -0.000537f, -0.007557f,
+ 0.0009537f, -0.00972f, -0.006805f, -0.007835f, -0.000847f, 0.005665f, -0.0085f, 0.005657f, 0.006027f,
+ -0.009285f, 0.00652f, 0.005535f, 0.009224f, 0.0007205f, -0.00692f, -0.00881f, 0.005817f, -0.00506f,
+ -0.00877f, -0.00991f, -0.001778f, -0.002598f, -0.00755f, 0.003616f, 0.00898f, 0.002537f, -0.001853f,
+ -0.000725f, 0.00202f, 0.001978f, -0.0008383f, 0.004784f, -0.0003638f, -0.00895f, 0.00243f, -0.00395f,
+ 0.001955f, -0.002853f, -0.005f, 0.00976f, -0.0006366f, -0.002913f, 0.002592f, -0.00857f, -0.0006256f,
+ -0.0001568f, 0.003605f, -0.001659f, 0.000935f, -0.005302f, 0.00593f, -0.002056f, 0.003723f, 0.005863f,
+ 0.0089f, -0.004147f, -0.007706f, 0.0006566f, 0.003222f, -0.00247f, 0.005234f, -0.009605f, -0.00279f,
+ 0.00031f, -0.008606f, -0.00952f, 0.001459f, 0.008446f, -0.00921f, 0.00895f, -0.00951f, -0.002565f,
+ 0.00084f, 0.006874f, -0.004066f, 0.004723f, -0.0006924f, 0.00932f, 0.003325f, -0.006763f, 0.004936f,
+ -0.003439f, -0.000998f, -0.008224f, -0.00412f, 0.006996f, -0.007057f, -0.00992f, -0.004974f, 0.001361f,
+ -0.009865f, 0.00982f, -0.00375f, -0.002928f, 0.00166f, -0.007782f, -0.001827f, 0.000567f, -0.002838f,
+ -0.0002354f, -0.00259f, -0.00849f, -0.001284f, 0.002161f, 0.001709f, -0.00802f, 0.00199f, -0.003202f,
+ 0.002773f, 0.009056f, -0.001113f, -0.006054f, -0.00209f, 0.007355f, 0.008194f, -0.005627f, -0.005226f,
+ -0.00478f, 0.001043f, 0.002869f, -0.00657f, -0.003176f, -0.004704f, -0.004574f, -0.00434f, 0.007328f,
+ 0.00895f, -0.00853f, -0.006207f, -0.00928f, -0.009476f, 0.009125f, 0.004627f, -0.004642f, -0.004658f,
+ 0.00919f, 0.003496f, 0.002165f, 0.00413f, -0.007694f, 0.003744f, 0.001043f, 0.002182f, -0.00698f,
+ -0.003906f, 0.00365f, 0.003763f, -0.0043f, 0.002554f, 0.0094f, 0.00586f, -0.00655f, -0.00171f,
+ -0.0009985f, -0.00851f, 0.00584f, 0.004883f, -0.007523f, 0.005016f, 0.003046f, 0.005917f, -0.006622f,
+ 0.00741f, -0.002499f, 0.0004418f, -0.003113f, 0.0003803f, 0.003252f, -0.00917f, 0.00506f, -0.006687f,
+ -0.00916f, 0.000701f, 0.00945f, -0.002863f, 0.00827f, 0.00938f, 0.003405f, -0.00935f, -0.00912f,
+ 0.00259f, 0.001822f, -0.00674f, 0.0008016f, -0.001132f, 0.00899f, 0.001555f, -0.0007024f, 0.00899f,
+ -0.00938f, -0.00109f, -0.00674f, 0.001553f, 0.00696f, 0.009415f, 0.0005765f, -0.0002084f, 0.004097f,
+ 0.005985f, 0.001656f, 0.005325f, -0.00839f, 0.003904f, 0.00822f, -0.003994f, 0.00635f, -0.000794f,
+ -0.00667f, 0.002296f, -0.002838f, -0.00975f, -0.001081f, 0.005127f, 0.001922f, 0.005127f, -0.008156f,
+ -0.006653f, 0.00935f, -0.00302f, -0.00052f, -0.005894f, -0.009674f, -0.00613f, 0.009705f, -0.006924f,
+ 0.004726f, 0.004784f, -0.00146f, 0.001746f, -0.002958f, 0.009636f, 0.005665f, -0.000724f, 0.004875f,
+ -0.001856f, -0.002975f, 0.0071f, 0.002045f, 0.00507f, -0.007042f, -0.006958f, 0.002089f, -0.003504f,
+ 0.0004888f, -0.005943f, 0.007607f, -0.003822f, -0.004692f, 0.0001357f, 0.004456f, -0.00799f, -0.006413f,
+ 0.002268f, 0.00888f, -0.00872f, -0.004936f, -0.0091f, -0.00353f, -0.0052f, -0.003223f, -0.00825f,
+ 0.003952f, -0.002771f, 0.006344f, 0.00862f, 0.00904f, -0.00221f, -0.0001844f, -0.00227f, 0.000672f,
+ -0.004852f, -0.005795f, -0.002771f, -0.00653f, -0.002579f, 0.006954f, 0.002605f, -0.00804f, 0.00432f,
+ 0.0000249f, -0.004536f, -0.008514f, 0.00618f, -0.002804f, 0.00895f, -0.009094f, -0.009155f, -0.003836f,
+ -0.0008125f, 0.007385f, 0.00554f, -0.0004065f, -0.00517f, -0.006493f, -0.007027f, 0.003748f, -0.00834f,
+ -0.006668f, 0.00982f, -0.001279f, -0.0008125f, 0.000629f, 0.003786f, -0.00859f, -0.000755f, 0.0004015f,
+ -0.003065f, -0.007042f, -0.00967f, 0.0004108f, 0.00947f, -0.007076f, -0.0006723f, 0.006496f, -0.001414f,
+ 0.008194f, -0.000413f, 0.008125f, 0.00146f, -0.006462f, 0.002676f, -0.005474f, -0.003166f, 0.006027f,
+ 0.001129f, 0.001874f, 0.001855f, 0.00766f, -0.006634f, -0.000823f, -0.00303f, 0.005795f, 0.00279f,
+ 0.002512f, 0.006172f, 0.006474f, 0.000632f, -0.007507f, 0.001753f, -0.002531f, 0.002895f, -0.007034f,
+ 0.004955f, -0.0096f, 0.007793f, -0.00803f, -0.0095f, 0.006615f, -0.00854f, 0.00214f, 0.00532f,
+ -0.00995f, 0.00772f, 0.006977f, -0.00873f, -0.00617f, -0.00808f, -0.00479f, -0.00397f, 0.00456f,
+ 0.003944f, 0.0001737f, 0.001538f, -0.005756f, 0.009964f, 0.002096f, -0.00984f, 0.001642f, 0.003113f,
+ -0.00802f, -0.003527f, -0.00876f, 0.003502f, -0.00562f, 0.003378f, 0.006676f, 0.000644f, 0.002071f,
+ -0.00587f, -0.00771f, -0.0009327f, -0.00441f, 0.007095f, 0.005478f, 0.00781f, 0.00952f, 0.006176f,
+ 0.0003223f, 0.00818f, 0.00678f, -0.004147f, -0.00999f, 0.00903f, -0.00987f, 0.007553f, -0.00438f,
+ 0.005028f, 0.0003302f, 0.0002394f, -0.005104f, -0.002537f, -0.005333f, 0.004635f, -0.005787f, -0.005177f,
+ -0.005615f, -0.00463f, 0.0001181f, -0.00814f, 0.00656f, -0.00132f, 0.003115f, -0.006237f, -0.00123f,
+ -0.008804f, -0.002682f, -0.00877f, 0.00749f, -0.00863f, 0.004997f, 0.007736f, -0.00963f, -0.002966f,
+ -0.00405f, -0.004005f, 0.006763f, -0.00639f, 0.000797f, 0.002903f, 0.00967f, -0.0009356f, -0.00675f,
+ 0.00917f, -0.0048f, 0.0088f, 0.007168f, 0.00394f, 0.005524f, 0.0002052f, -0.0004148f, 0.0059f,
+ -0.002966f, 0.008f, -0.00955f, -0.008484f, 0.00856f, 0.003498f, -0.005703f, 0.004974f, 0.0089f,
+ -0.004208f, -0.005203f, -0.007496f, 0.003206f, -0.007713f, -0.0068f, 0.00437f, 0.008896f, 0.0007954f,
+ 0.002823f, -0.002413f, -0.004665f, 0.0007997f, -0.005394f, 0.00806f, -0.001563f, -0.001497f, -0.005314f,
+ -0.00952f, 0.0093f, 0.005066f, 0.00407f, 0.004482f, -0.00788f, 0.001537f, 0.00806f, -0.005013f,
+ -0.003735f, 0.00956f, -0.00946f, 0.002008f, -0.006847f, 0.003038f, 0.003141f, -0.005787f, 0.005665f,
+ 0.002735f, -0.002401f, 0.003057f, 0.000753f, 0.004444f, 0.00805f, 0.001004f, -0.0065f, -0.001637f,
+ 0.0065f, 0.004467f, -0.00896f, -0.006573f, -0.007236f, 0.007435f, -0.00392f, -0.001908f, -0.008736f,
+ -0.0007854f, 0.000625f, 0.003866f, -0.002039f, -0.002193f, -0.006447f, -0.00793f, -0.002161f, -0.0073f,
+ 0.00472f, 0.001314f, 0.006416f, -0.009224f, 0.00668f, 0.008865f, 0.009155f, -0.004684f, 0.00807f,
+ -0.0008855f, 0.002748f, 0.001529f, -0.004765f, -0.001041f, 0.00859f, 0.005573f, 0.00433f, -0.009155f,
+ -0.007614f, 0.00472f, -0.0009365f, 0.00003576f, 0.002872f, -0.003223f, 0.003098f, -0.001782f, 0.001795f,
+ 0.006645f, 0.002974f, -0.0094f, 0.005337f, 0.00877f, -0.00649f, 0.00959f, -0.008156f, -0.0008917f,
+ 0.006607f, 0.00905f, -0.001238f, -0.001246f, -0.002775f, -0.002815f, 0.00451f, -0.004486f, 0.003998f,
+ 0.00956f, -0.00981f, 0.005096f, -0.00876f, -0.002571f, 0.002287f, -0.002996f, -0.008896f, -0.006973f,
+ 0.003885f, 0.001993f, -0.006523f, 0.0048f, -0.005745f, 0.004883f, 0.005627f, -0.00919f, 0.00978f,
+ -0.000961f, 0.00954f, 0.003023f, 0.006172f, -0.00371f, -0.00509f, -0.00392f, -0.00989f, 0.00212f,
+ -0.00917f, -0.009865f, 0.00965f, 0.003618f, -0.004303f, 0.00628f, 0.002913f, 0.0086f, -0.00881f,
+ 0.004963f, -0.006886f, -0.00000197f, -0.008736f, 0.004147f, -0.003227f, -0.001696f, -0.003815f, 0.00957f,
+ -0.00994f, -0.006596f, 0.00925f, 0.007454f, -0.001091f, -0.0004747f, 0.009026f, 0.00854f, 0.00133f,
+ -0.00263f, 0.00543f, 0.003836f, 0.004856f, -0.006695f, 0.005478f, -0.008415f, 0.003187f, -0.00998f,
+ 0.009514f, 0.002903f, -0.005165f, -0.0004752f, -0.009f, -0.008965f, 0.005806f, 0.006153f, 0.00893f,
+ -0.00877f, -0.006866f, 0.004154f, -0.008125f, 0.007202f, -0.005573f, 0.004f, -0.002998f, 0.002878f,
+ 0.005672f, 0.00607f, -0.004578f, 0.001471f, -0.002363f, -0.00006247f, 0.0007734f, 0.001287f, -0.0006113f,
+ 0.003868f, -0.00696f, -0.003672f, 0.00688f, -0.00908f, -0.00665f, 0.003775f, -0.006355f, -0.005634f,
+ 0.00421f, 0.00937f, -0.004856f, 0.002947f, -0.003933f, -0.0086f, 0.00988f, 0.00546f, -0.0008826f,
+ 0.00433f, 0.007183f, 0.002195f, -0.005333f, 0.006683f, 0.003277f, 0.001082f, 0.00579f, -0.00623f,
+ -0.00966f, -0.002708f, 0.00627f, 0.00581f, -0.0095f, 0.008896f, -0.002478f, -0.00966f, 0.007526f,
+ -0.001696f, 0.002949f, 0.001381f, -0.00684f, -0.005974f, 0.00413f, 0.00085f, 0.004032f, 0.004807f,
+ 0.0004041f, -0.006992f, 0.003105f, -0.0002321f, 0.00867f, 0.00237f, 0.00464f, -0.00887f, -0.005978f,
+ -0.005844f, -0.00826f, 0.005035f, 0.00953f, 0.006485f, -0.00415f, -0.00873f, -0.006836f, 0.00572f,
+ 0.001606f, -0.00828f, -0.001708f, -0.006145f, 0.00914f, -0.00965f, 0.005646f, -0.00857f, 0.006638f,
+ 0.00327f, 0.00424f, 0.001341f, 0.003788f, -0.000685f, 0.0061f, -0.00782f, 0.003334f, -0.0068f,
+ 0.001557f, 0.005825f, -0.0058f, -0.000689f, 0.007496f, 0.00708f, -0.006107f, 0.007668f, -0.001199f,
+ -0.00948f, 0.00668f, -0.003176f, 0.003733f, -0.001616f, 0.006714f, 0.00789f, 0.001432f, 0.004112f,
+ 0.00384f, 0.009636f, 0.007053f, -0.00374f, 0.00495f, 0.00959f, 0.004135f, 0.00721f, 0.007225f,
+ -0.0008454f, 0.008286f, 0.0000413f, 0.003618f, 0.004047f, 0.00454f, -0.0079f, 0.00869f, 0.00706f,
+ -0.007492f, 0.00493f, 0.00689f, -0.0005245f, 0.00604f, 0.00357f, 0.00598f, -0.00959f, -0.003292f,
+ 0.0008936f, 0.00904f, 0.002445f, 0.00894f, 0.00819f, 0.003876f, 0.002953f, 0.003384f, -0.006687f,
+ 0.002918f, -0.0056f, -0.0003066f, -0.001384f, 0.007675f, 0.0009513f, -0.007656f, 0.00804f, -0.000968f,
+ -0.000649f, 0.00913f, -0.0041f, 0.0002625f, -0.0001359f, -0.008865f, 0.002167f, 0.00687f, -0.00606f,
+ 0.0003486f, 0.0003984f, -0.004803f, 0.006454f, -0.004997f, 0.00892f, -0.007423f, -0.001277f, -0.007504f,
+ 0.00762f, 0.003056f, 0.001508f, -0.00391f, 0.00859f, -0.00768f, -0.003675f, 0.002884f, 0.006508f,
+ 0.000506f, 0.002567f, 0.007607f, -0.003233f, 0.0073f, 0.003862f, -0.003817f, 0.00735f, 0.002506f,
+ -0.00823f, -0.006706f, 0.005676f, -0.00931f, -0.004025f, 0.006542f, 0.000566f, 0.00919f, -0.002083f,
+ -0.00783f, 0.0013485f, -0.00839f, 0.0089f, -0.0066f, 0.009674f, -0.00821f, 0.0061f, -0.002129f,
+ 0.00598f, 0.008865f, 0.00513f, -0.00582f, -0.00459f, -0.00962f, -0.00962f, -0.005966f, -0.007187f,
+ 0.00995f, 0.004295f, 0.004467f, 0.001008f, -0.00809f, 0.00922f, -0.00768f, -0.00994f, -0.005596f,
+ 0.006706f, 0.00748f, 0.00942f, -0.00396f, 0.001708f, -0.00961f, 0.005653f, 0.00976f, -0.001643f,
+ 0.003786f, -0.002264f, 0.002747f, -0.0003808f, 0.000354f, 0.001055f, 0.00584f, 0.006306f, 0.005363f,
+ -0.006443f, -0.0005603f, 0.00871f, 0.00683f, -0.002083f, -0.00611f, -0.006573f, -0.0027f, 0.004917f,
+ 0.006207f, 0.004932f, -0.00669f, 0.005665f, 0.002796f, 0.00901f, -0.000798f, 0.001478f, 0.003788f,
+ 0.000707f, 0.00934f, 0.005985f, -0.00145f, -0.0008683f, 0.00339f, 0.002144f, 0.006596f, 0.00984f,
+ 0.00258f, 0.0048f, 0.0003848f, -0.002644f, -0.002129f, -0.001171f, -0.002369f, -0.007328f, 0.00841f,
+ -0.005325f, 0.00968f, -0.00982f, -0.003754f, -0.0006895f, 0.00784f, 0.003864f, 0.008316f, -0.003483f,
+ 0.004986f, -0.003044f, -0.005714f, -0.001846f, -0.001568f, 0.0003648f, 0.00724f, 0.006336f, -0.003222f,
+ -0.006836f, 0.001214f, -0.003124f, -0.0006356f, -0.001073f, 0.002682f, -0.007538f, -0.001701f, -0.00883f,
+ 0.00986f, 0.006336f, 0.0011f, -0.00879f, -0.005875f, 0.004025f, 0.00613f, 0.004856f, -0.008896f,
+ 0.0006967f, 0.0064f, 0.002707f, -0.002317f, -0.002214f, 0.002409f, -0.000346f, -0.006924f, 0.001986f,
+ -0.003166f, 0.00836f, -0.00899f, 0.0034f, -0.007755f, 0.00407f, 0.00807f, 0.0076f, 0.003824f,
+ 0.003876f, -0.00853f, -0.00649f, -0.003506f, 0.001777f, -0.009705f, -0.00516f, -0.0094f, 0.00939f,
+ -0.00786f, -0.00911f, -0.000737f, 0.000864f, -0.00851f, 0.00786f, -0.003422f, -0.00832f, -0.0007277f,
+ 0.005642f, -0.00868f, -0.002851f, 0.0005975f, -0.007347f, -0.001616f, -0.001303f, 0.00717f, -0.00231f,
+ -0.008354f, -0.005333f, 0.00864f, 0.006123f, -0.00994f, 0.00313f, -0.00676f, -0.005806f, 0.008446f,
+ -0.0007553f, -0.006416f, 0.00223f, -0.00579f, 0.00576f, -0.00892f, 0.002424f, -0.00486f, 0.00636f,
+ 0.003344f, -0.003195f, 0.001562f, 0.00318f, -0.007202f, -0.001358f, -0.0001854f, 0.002499f, 0.001725f,
+ 0.000389f, -0.006737f, 0.002745f, 0.000575f, -0.003534f, 0.004284f, 0.0019045f, 0.004898f, -0.004356f,
+ 0.002254f, -0.00577f, 0.0018215f, -0.008736f, 0.00769f, -0.00885f, -0.00859f, -0.00441f, 0.00583f,
+ -0.009285f, -0.00792f, -0.00922f, -0.003815f, -0.00886f, -0.005394f, -0.00663f, -0.008224f, -0.00353f,
+ 0.002161f, 0.00301f, -0.00542f, -0.0085f, -0.007446f, -0.00846f, -0.00515f, 0.00204f, 0.00543f,
+ -0.001219f, -0.007072f, 0.001966f, -0.00894f, 0.0008793f, -0.003418f, 0.00393f, -0.005283f, 0.005756f,
+ 0.003225f, 0.002123f, 0.002283f, 0.00566f, 0.000477f, 0.00497f, 0.005295f, 0.002136f, 0.00692f,
+ 0.00872f, 0.00936f, -0.005074f, 0.00645f, -0.001117f, 0.006493f, -0.00574f, 0.001013f, 0.003334f,
+ -0.005703f, -0.006992f, -0.004314f, 0.005314f, 0.001457f, -0.00594f, -0.003252f, 0.00844f, 0.002502f,
+ 0.002604f, 0.00289f, 0.00221f, -0.003344f, -0.006905f, -0.00799f, 0.007378f, -0.00945f, 0.006023f,
+ -0.00791f, 0.001273f, 0.003849f, 0.007694f, 0.005424f, 0.00298f, -0.003618f, -0.0001827f, 0.002077f,
+ 0.001976f, -0.006474f, 0.00079f, 0.00982f, 0.004166f, 0.007027f, 0.008606f, 0.00818f, 0.00697f,
+ -0.003006f, 0.0045f, -0.00885f, -0.00515f, 0.00723f, -0.0001746f, -0.00727f, 0.006237f, -0.008385f,
+ 0.008194f, -0.008316f, -0.002525f, 0.002558f, 0.00639f, 0.003586f, -0.00612f, -0.006756f, -0.008354f,
+ 0.004883f, -0.00506f, -0.009f, -0.00537f, -0.001243f, -0.005596f, -0.00853f, -0.007545f, 0.00786f,
+ 0.001839f, -0.002245f, 0.00544f, -0.00196f, 0.004967f, -0.003464f, -0.005108f, 0.003086f, 0.002628f,
+ -0.002502f, -0.00665f, -0.006226f, 0.0079f, -0.002287f, 0.0003567f, -0.001279f, 0.004826f, 0.005432f,
+ -0.00634f, -0.003204f, 0.0002022f, -0.00198f, -0.0008726f, 0.004055f, 0.00793f, -0.00427f, -0.00533f,
+ 0.00734f, -0.00799f, -0.0051f, -0.009995f, 0.0051f, 0.00413f, -0.00679f, 0.00262f, 0.001331f,
+ 0.001461f, -0.00865f, -0.00791f, -0.003975f, 0.002504f, 0.0002255f, 0.002337f, -0.00456f, -0.005974f,
+ 0.000257f, -0.00545f, 0.00842f, 0.005585f, -0.0003774f, 0.0008087f, -0.001679f, 0.003853f, 0.00991f,
+ 0.0031f, 0.00523f, -0.00721f, 0.000989f, -0.005642f, -0.001042f, 0.007935f, -0.006195f, 0.001426f,
+ 0.00414f, 0.00925f, -0.00419f, 0.004852f, -0.00639f, 0.00694f, -0.007706f, -0.00684f, -0.00602f,
+ -0.004444f, 0.005016f, -0.00803f, -0.00955f, 0.004097f, -0.003754f, 0.002384f, -0.007515f, 0.003508f,
+ -0.00749f, 0.00519f, 0.00228f, 0.007015f, -0.007572f, -0.003864f, -0.00843f, 0.00543f, 0.00911f,
+ 0.00774f, 0.009125f, -0.003473f, -0.00646f, 0.00856f, 0.004272f, 0.00534f, 0.003859f, -0.0001141f,
+ 0.001515f, 0.003437f, 0.00737f, 0.003565f, -0.002705f, 0.003675f, 0.003023f, -0.0002156f, -0.00894f,
+ 0.00103f, -0.001797f, -0.00854f, 0.001505f, -0.00876f, -0.003614f, 0.004887f, -0.005085f, 0.002449f,
+ 0.00524f, -0.00589f, 0.00784f, 0.001411f, -0.0095f, 0.007797f, -0.003391f, 0.008316f, 0.0094f,
+ 0.00917f, -0.00658f, -0.00685f, -0.005085f, -0.005375f, 0.008705f, -0.004093f, 0.00764f, -0.006172f,
+ -0.00609f, -0.0005703f, -0.00941f, -0.007065f, 0.00942f, 0.00403f, 0.00392f, -0.0000164f, 0.000577f,
+ 0.001058f, 0.006317f, 0.0008893f, 0.001935f, -0.009865f, -0.00542f, 0.001452f, 0.00916f, -0.00852f,
+ -0.00081f, 0.00397f, 0.0069f, 0.003246f, -0.004456f, 0.00777f, -0.004444f, 0.003632f, -0.002512f,
+ -0.00284f, 0.009926f, 0.00869f, -0.00636f, -0.006454f, 0.006805f, -0.00232f, -0.00924f, 0.006268f,
+ 0.00501f, -0.00951f, -0.00518f, 0.006126f, 0.00966f, 0.00881f, -0.009346f, 0.00912f, 0.00341f,
+ 0.00617f, 0.00984f, -0.00357f, 0.00596f, -0.0081f, -0.0006824f, -0.00711f, 0.004803f, 0.00484f,
+ -0.000756f, 0.002865f, -0.00422f, 0.00005835f, 0.00912f, 0.000726f, 0.001402f, 0.00644f, -0.006542f,
+ 0.006016f, 0.003975f, 0.00556f, 0.0000735f, -0.002203f, 0.003893f, -0.000724f, 0.005882f, -0.006226f,
+ -0.006912f, 0.003027f, 0.0004182f, -0.00728f, -0.00726f, -0.00896f, 0.008095f, -0.001346f, 0.00898f,
+ 0.002956f, -0.003334f, -0.007717f, -0.00876f, 0.00037f, -0.00727f, -0.003258f, 0.009476f, 0.009056f,
+ 0.00598f, 0.00281f, 0.00586f, -0.00981f, -0.003296f, 0.00769f, -0.000486f, 0.0091f, 0.00634f,
+ -0.00542f, 0.00512f, -0.002474f, -0.009514f, 0.00402f, -0.004787f, 0.00274f, -0.001112f, -0.002436f,
+ 0.00949f, -0.000839f, -0.009155f, 0.002499f, 0.001512f, 0.001406f, -0.00313f, -0.002022f, -0.008896f,
+ -0.00528f, -0.009254f, -0.002148f, -0.000707f, -0.0001829f, -0.001159f, 0.00411f, -0.007637f, -0.00364f,
+ 0.005135f, -0.00928f, -0.0000797f, 0.004642f, -0.00817f, -0.007072f, -0.003914f, 0.00416f, 0.002985f,
+ -0.0075f, -0.000736f, 0.008934f, 0.004204f, 0.0004723f, 0.006306f, -0.007675f, -0.007835f, 0.0005293f,
+ -0.002478f, -0.006336f, 0.007996f, 0.002539f, 0.001836f, 0.00968f, 0.006844f, 0.001179f, 0.001448f,
+ 0.006042f, 0.00292f, -0.007122f, -0.001914f, 0.004448f, 0.00822f, 0.00672f, 0.000714f, -0.001145f,
+ 0.009415f, 0.0015335f, -0.005585f, -0.006104f, -0.0003273f, -0.00987f, 0.001559f, -0.00608f, 0.007664f,
+ 0.00834f, -0.0002584f, -0.004097f, 0.00745f, 0.005417f, -0.002129f, 0.001597f, 0.00749f, -0.001676f,
+ 0.006344f, 0.006905f, 0.004364f, -0.00739f, -0.001457f, 0.00806f, -0.008f, -0.004284f, -0.00717f,
+ 0.00547f, 0.004463f, 0.00529f, -0.00843f, 0.008064f, 0.00556f, 0.0005236f, 0.00918f, -0.004986f,
+ 0.00578f, -0.001013f, -0.003479f, -0.004425f, -0.0076f, -0.004093f, 0.003084f, -0.00531f, -0.00902f,
+ -0.002844f, 0.004982f, -0.00986f, 0.003986f, 0.002125f, 0.004036f, -0.006798f, 0.000773f, 0.000544f,
+ -0.0001241f, 0.009155f, 0.002682f, -0.00997f, -0.00826f, 0.003769f, 0.001383f, -0.005318f, 0.004673f,
+ -0.005314f, 0.00691f, 0.00212f, -0.00656f, -0.006226f, -0.008705f, 0.00459f, -0.003798f, 0.00869f,
+ -0.002985f, -0.000604f, 0.00826f, -0.00541f, -0.00502f, 0.000809f, -0.00969f, -0.006626f, 0.005123f,
+ -0.0005465f, -0.00858f, 0.005554f, -0.002083f, 0.007343f, -0.001588f, -0.001642f, 0.0007577f, 0.00318f,
+ -0.00391f, 0.00404f, 0.00886f, -0.006374f, -0.00958f, -0.005077f, -0.00218f, 0.00745f, 0.00944f,
+ 0.007233f, 0.003042f, -0.003296f, 0.006786f, -0.006706f, 0.007114f, 0.00566f, 0.005325f, 0.007637f,
+ -0.00661f, 0.0008025f, -0.002693f, 0.005634f, 0.001557f, -0.007133f, -0.00483f, -0.00654f, 0.006313f,
+ -0.00926f, -0.00372f, -0.00583f, -0.004025f, 0.00761f, 0.00955f, 0.002691f, -0.00915f, -0.006084f,
+ -0.008835f, 0.003885f, 0.009514f, -0.00841f, 0.003637f, -0.00765f, -0.005978f, 0.001959f, -0.005295f,
+ -0.001565f, -0.003551f, -0.000824f, 0.005848f, -0.00010514f, 0.00828f, -0.003895f, -0.003197f, 0.00797f,
+ 0.00998f, 0.004635f, 0.006504f, 0.007023f, -0.00675f, 0.001584f, 0.004642f, 0.007458f, -0.002005f,
+ 0.0000653f, 0.00715f, 0.00402f, 0.00782f, -0.00331f, 0.00676f, 0.000039f, 0.00644f, -0.0007744f,
+ 0.005688f, 0.00511f, -0.005135f, 0.000995f, 0.006756f, -0.002304f, 0.003553f, -0.00938f, -0.000616f,
+ -0.00897f, -0.00685f, -0.00838f, 0.003983f, -0.004807f, 0.002314f, 0.00847f, 0.00846f, -0.007507f,
+ 0.002136f, 0.005905f, -0.00899f, 0.0081f, 0.008f, 0.00889f, -0.00907f, -0.00489f, 0.00938f,
+ -0.009254f, 0.00627f, 0.0052f, -0.002031f, -0.0006337f, -0.001191f, 0.001453f, -0.003918f, 0.001798f,
+ -0.00491f, -0.002062f, -0.00889f, 0.00309f, 0.007526f, 0.0007014f, -0.001351f, -0.003838f, 0.00458f,
+ 0.004005f, -0.00923f, 0.00581f, -0.002983f, -0.00901f, 0.007095f, 0.00844f, -0.00989f, 0.001532f,
+ -0.00867f, 0.001821f, -0.005646f, 0.00698f, -0.001757f, -0.00102f, -0.00511f, -0.007774f, 0.002588f,
+ -0.006096f, 0.005196f, -0.002117f, -0.0003762f, 0.00738f, 0.001219f, 0.00447f, 0.00867f, -0.00494f,
+ 0.007313f, -0.008095f, 0.000967f, 0.004776f, 0.00296f, 0.001068f, 0.00818f, 0.00749f, -0.00939f,
+ -0.00738f, -0.006214f, -0.00685f, 0.00569f, 0.00716f, 0.004375f, -0.00512f, -0.006252f, -0.004684f,
+ -0.002974f, -0.007965f, 0.0025f, -0.00943f, 0.00539f, 0.0003204f, 0.0005164f, -0.006573f, 0.00646f,
+ 0.00502f, 0.007965f, -0.002003f, -0.00609f, -0.009285f, -0.005028f, -0.00985f, 0.001395f, 0.00415f,
+ 0.003494f, 0.00957f, 0.009834f, -0.005905f, 0.002436f, 0.001002f, -0.002335f, -0.00981f, 0.006714f,
+ 0.005135f, -0.003138f, -0.00786f, 0.005497f, 0.003677f, 0.00479f, -0.00453f, 0.00845f, 0.007454f,
+ 0.000992f, -0.00647f, 0.001218f, -0.004295f, 0.00004745f, 0.005558f, -0.002914f, 0.00861f, -0.008064f,
+ 0.003328f, -0.003998f, -0.007595f, 0.00487f, 0.0008106f, 0.005287f, -0.003735f, 0.003054f, 0.006645f,
+ -0.002422f, 0.00974f, -0.001171f, 0.006264f, 0.00908f, 0.002903f, 0.00446f, 0.002419f, 0.00806f,
+ -0.002483f, 0.0089f, 0.0004303f, -0.001789f, -0.00638f, -0.005802f, -0.00953f, -0.00526f, 0.006203f,
+ -0.001033f, -0.00721f, 0.00391f, 0.00923f, 0.006676f, 0.00495f, -0.002512f, -0.000916f, 0.005054f,
+ -0.007652f, 0.004738f, 0.00826f, -0.00989f, -0.00202f, -0.00824f, -0.004333f, 0.002779f, -0.00531f,
+ 0.00181f, -0.00475f, 0.005234f, -0.00558f, 0.002342f, -0.001395f, -0.005856f, 0.004074f, -0.00638f,
+ -0.003561f, 0.00819f, 0.006454f, -0.00402f, -0.008766f, -0.006668f, -0.00244f, -0.00392f, -0.007248f,
+ -0.00666f, 0.001226f, -0.0071f, 0.00746f, 0.00396f, -0.00057f, 0.0001602f, 0.006924f, -0.0004158f,
+ -0.000988f, -0.008385f, 0.004936f, -0.001231f, 0.00533f, 0.00905f, 0.0015335f, 0.003677f, 0.00751f,
+ -0.00807f, -0.0051f, 0.00774f, -0.000592f, 0.003368f, -0.001825f, -0.003403f, 0.008194f, -0.0004606f,
+ 0.00312f, -0.004196f, 0.008026f, 0.004883f, -0.003073f, -0.006607f, 0.00847f, -0.007446f, -0.00982f,
+ -0.002375f, 0.009186f, 0.00991f, 0.005642f, -0.00632f, -0.005085f, 0.0084f, 0.002087f, 0.004f,
+ 0.002495f, 0.004326f, 0.00969f, -0.003504f, 0.008514f, 0.000959f, 0.003632f, -0.001369f, 0.005737f,
+ 0.002361f, -0.00802f, -0.006603f, 0.007866f, -0.008675f, 0.009384f, 0.001016f, 0.006927f, -0.005165f,
+ 0.001802f, -0.002798f, 0.008415f, 0.00439f, 0.003819f, 0.002295f, 0.006844f, -0.006813f, 0.0003488f,
+ 0.000659f, 0.00963f, -0.00946f, 0.002861f, -0.00614f, 0.002499f, -0.00706f, 0.003216f, -0.003124f,
+ -0.004585f, 0.001135f, -0.00212f, 0.007435f, -0.003775f, -0.0001405f, -0.000892f, 0.006218f, -0.005333f,
+ 0.007397f, 0.003202f, 0.009026f, 0.003717f, 0.00787f, 0.005188f, 0.0002823f, -0.0052f, 0.00797f,
+ -0.0009027f, -0.006462f, 0.00908f, -0.001527f, 0.005005f, 0.005547f, 0.00665f, -0.002155f, -0.00641f,
+ 0.00467f, -0.002872f, 0.000676f, 0.0009217f, 0.00424f, -0.000898f, 0.00932f, 0.004444f, -0.009834f,
+ 0.00908f, -0.0000113f, -0.00378f, 0.00792f, -0.00931f, -0.002563f, 0.003622f, 0.00972f, -0.0066f,
+ -0.002348f, -0.00787f, 0.004368f, -0.00385f, 0.0099f, 0.00617f, -0.001304f, 0.008575f, -0.00803f,
+ -0.008354f, 0.00794f, -0.00924f, 0.0069f, -0.00811f, 0.000215f, -0.00519f, -0.001069f, 0.000882f,
+ -0.007378f, 0.006447f, -0.003225f, -0.00484f, -0.00356f, -0.0004394f, -0.002144f, -0.001932f, 0.0007205f,
+ -0.00976f, 0.008514f, -0.006294f, 0.00618f, -0.001758f, -0.00713f, -0.00912f, 0.004726f, 0.00334f,
+ 0.00847f, -0.0001967f, 0.005165f, -0.004944f, -0.00915f, 0.0062f, -0.00553f, 0.0084f, -0.0054f,
+ 0.002823f, 0.00272f, -0.00271f, -0.009514f, 0.00629f, -0.006054f, 0.008865f, -0.00813f, -0.0076f,
+ 0.00857f, -0.003681f, -0.00738f, -0.00872f, -0.001488f, 0.00926f, -0.001791f, 0.00471f, -0.00482f,
+ 0.007812f, -0.004654f, -0.006138f, 0.003813f, 0.005768f, -0.00375f, -0.00992f, -0.000584f, 0.00783f,
+ -0.004147f, 0.001611f, 0.001342f, -0.006832f, -0.00138f, 0.005325f, -0.0000265f, 0.009445f, 0.00872f,
+ 0.001329f, -0.0026f, 0.002577f, 0.0072f, 0.00547f, 0.006428f, -0.004864f, 0.00876f, -0.00906f,
+ 0.007317f, -0.007233f, -0.00774f, 0.003387f, -0.002037f, 0.00125f, 0.00655f, -0.003298f, 0.008514f,
+ -0.003757f, 0.007935f, -0.003181f, 0.00629f, 0.00838f, 0.0009594f, 0.006897f, -0.008835f, 0.00446f,
+ -0.0082f, -0.006042f, 0.00761f, -0.00883f, 0.002434f, 0.001002f, 0.00712f, -0.005688f, 0.003359f,
+ -0.00606f, 0.002512f, 0.00576f, 0.006126f, 0.0009394f, -0.00787f, -0.00485f, 0.005936f, 0.002037f,
+ -0.0024f, -0.00618f, -0.00157f, 0.00702f, -0.007637f, 0.0077f, -0.00784f, -0.0062f, -0.00975f,
+ -0.00849f, 0.00843f, 0.003843f, -0.006443f, 0.004993f, -0.0001615f, 0.00902f, 0.00811f, 0.005333f,
+ 0.002123f, 0.001081f, 0.0086f, -0.003103f, 0.005783f, 0.004936f, -0.00898f, 0.001179f, 0.0007f,
+ 0.003462f, -0.00855f, 0.00254f, -0.0000039f, -0.00468f, 0.0012455f, 0.003431f, 0.007538f, 0.0082f,
+ 0.00843f, -0.001547f, 0.006157f, 0.001941f, -0.0013895f, -0.003096f, -0.003883f, -0.006382f, -0.00475f,
+ 0.008766f, -0.003225f, 0.0008793f, -0.002806f, -0.00432f, 0.003944f, 0.008286f, 0.003141f, -0.00975f,
+ -0.00439f, -0.007645f, 0.0093f, 0.005238f, -0.002018f, -0.006023f, -0.001462f, 0.00286f, 0.00525f,
+ 0.005463f, -0.0005217f, -0.0003283f, -0.003103f, -0.007656f, -0.003311f, -0.0002983f, 0.005165f, 0.007187f,
+ 0.00674f, -0.002645f, 0.00882f, 0.009995f, -0.003174f, -0.002956f, -0.00978f, 0.00841f, 0.005043f,
+ 0.00798f, 0.00003827f, -0.004494f, -0.00883f, -0.0003128f, -0.0015955f, 0.00958f, 0.001948f, -0.007664f,
+ -0.002064f, 0.002949f, 0.008736f, 0.00684f, 0.00804f, 0.004642f, -0.000742f, 0.001874f, -0.004864f,
+ 0.0003529f, -0.001284f, 0.00896f, -0.006954f, -0.003616f, 0.0078f, 0.00815f, -0.00876f, -0.002783f,
+ -0.00649f, 0.00976f, 0.009125f, 0.0019f, -0.0004215f, 0.00461f, 0.001037f, 0.009384f, 0.003422f,
+ 0.001194f, 0.00923f, 0.00554f, -0.00855f, -0.001592f, -0.002981f, 0.006016f, 0.002314f, -0.00483f,
+ 0.002476f, -0.00894f, -0.000574f, 0.0096f, -0.0002362f, -0.002018f, 0.00283f, 0.00251f, -0.0001559f,
+ -0.00557f, 0.00661f, -0.002537f, 0.005524f, 0.00961f, -0.002073f, 0.00454f, -0.006428f, 0.001997f,
+ -0.00446f, -0.0007524f, 0.002176f, -0.00209f, -0.00874f, 0.001289f, 0.00523f, 0.001575f, -0.008736f,
+ 0.007057f, -0.0069f, -0.00512f, -0.005383f, 0.0001678f, 0.001076f, 0.007683f, -0.006207f, -0.006233f,
+ -0.00585f, -0.004894f, 0.00773f, 0.00627f, -0.0008707f, -0.00574f, -0.002068f, -0.0003157f, -0.00921f,
+ -0.006275f, 0.007275f, -0.0004473f, 0.002474f, -0.009186f, 0.001432f, 0.003687f, -0.004425f, -0.002018f,
+ 0.00922f, -0.00788f, 0.000894f, -0.001047f, -0.001193f, 0.009094f, -0.0039f, 0.00977f, 0.00951f,
+ 0.00976f, 0.002201f, 0.006214f, -0.002117f, 0.006203f, 0.00278f, -0.006725f, -0.006157f, 0.003757f,
+ -0.001729f, 0.005405f, -0.00904f, -0.000435f, -0.002148f, -0.00849f, 0.00923f, -0.008194f, -0.001804f,
+ -0.00392f, 0.0002866f, -0.007317f, 0.005623f, -0.002657f, -0.005657f, 0.006363f, 0.00205f, 0.005215f,
+ 0.00376f, 0.001134f, -0.003138f, 0.00569f, 0.008446f, -0.003283f, 0.004047f, -0.00322f, -0.001756f,
+ -0.006763f, 0.001577f, -0.007225f, 0.006092f, 0.004112f, -0.006554f, -0.00428f, 0.004684f, -0.000417f,
+ 0.00418f, -0.000349f, -0.00676f, -0.004097f, -0.00899f, 0.004936f, 0.00864f, -0.006325f, -0.004665f,
+ -0.00834f, 0.00238f, 0.006153f, -0.00914f, 0.004246f, -0.00963f, 0.003986f, 0.00887f, 0.00852f,
+ 0.0002384f, 0.007866f, -0.002577f, 0.0007524f, -0.004887f, -0.0003715f, 0.00564f, 0.008606f, -0.009705f,
+ -0.009796f, -0.001706f, -0.00965f, 0.00824f, 0.0009446f, -0.00514f, 0.00492f, 0.002787f, 0.00643f,
+ -0.0002482f, 0.003603f, 0.004097f, 0.00916f, -0.005463f, -0.003786f, 0.00269f, -0.00688f, 0.002872f,
+ 0.0079f, 0.002403f, -0.000562f, 0.00747f, -0.00349f, 0.004925f, -0.009f, -0.003199f, -0.0008674f,
+ 0.004513f, 0.001112f, 0.00242f, -0.003345f, -0.00588f, -0.001415f, 0.001788f, -0.00345f, -0.007744f,
+ 0.005596f, -0.00871f, -0.001603f, -0.0001678f, -0.00862f, 0.00929f, -0.005604f, 0.00986f, 0.005383f,
+ 0.00959f, 0.00005203f, -0.002613f, 0.000881f, 0.00828f, -0.00738f, 0.001506f, 0.000615f, -0.001396f,
+ 0.005566f, -0.00815f, -0.00447f, 0.002577f, -0.00938f, -0.0007024f, 0.000968f, 0.00785f, 0.001473f,
+ -0.004387f, 0.008286f, -0.003094f, 0.008125f, -0.004494f, -0.00425f, 0.004585f, -0.00964f, 0.002777f,
+ -0.00888f, 0.005466f, 0.00231f, -0.001025f, -0.009186f, 0.004265f, 0.002234f, -0.002064f, 0.006973f,
+ -0.007336f, 0.001036f, -0.00965f, -0.003597f, 0.000792f, -0.006615f, 0.00904f, 0.00902f, -0.004856f,
+ -0.00782f, -0.0004456f, 0.004826f, -0.001932f, 0.003588f, -0.001571f, -0.003286f, -0.00523f, -0.002085f,
+ 0.004658f, 0.00324f, -0.00974f, 0.007122f, -0.00806f, -0.003452f, -0.00996f, 0.0004315f, -0.004436f,
+ 0.00442f, 0.0003521f, -0.0000391f, 0.00986f, 0.007553f, 0.00816f, 0.004242f, -0.00706f, 0.00857f,
+ -0.009705f, -0.00789f, 0.006126f, 0.00494f, 0.001126f, -0.003017f, -0.0005965f, -0.00928f, 0.001935f,
+ -0.00866f, -0.002542f, 0.003275f, 0.0001297f, -0.00935f, 0.005028f, 0.004097f, -0.006817f, 0.00791f,
+ 0.0001851f, -0.002525f, 0.00906f, 0.000608f, 0.0004106f, -0.00859f, -0.005623f, -0.00567f, 0.00434f,
+ 0.004124f, 0.000519f, 0.00947f, -0.002487f, -0.00738f, 0.009346f, -0.004936f, 0.007263f, -0.00096f,
+ 0.00493f, -0.00823f, 0.003119f, -0.0003824f, 0.0007586f, 0.006584f, 0.00392f, -0.008125f, 0.006313f,
+ 0.007812f, -0.005913f, 0.005547f, -0.0001316f, -0.007523f, 0.00768f, 0.00142f, 0.00912f, -0.003622f,
+ 0.00852f, 0.005966f, -0.004467f, -0.00919f, -0.00866f, -0.00875f, -0.0000665f, 0.000144f, 0.00649f,
+ 0.003706f, -0.001643f, -0.003508f, -0.005817f, -0.0059f, 0.008896f, 0.0088f, -0.005962f, -0.003698f,
+ -0.003626f, 0.001465f, 0.003386f, 0.002172f, 0.00159f, 0.003794f, 0.00751f, 0.001184f, -0.0008216f,
+ -0.006474f, 0.00761f, -0.006603f, 0.005993f, 0.003044f, 0.00322f, -0.00928f, -0.00667f, -0.00599f,
+ 0.00869f, 0.001393f, -0.006184f, -0.002693f, 0.003727f, -0.003624f, 0.002987f, -0.002718f, -0.001762f,
+ -0.007366f, -0.00294f, -0.004993f, -0.00977f, 0.00814f, -0.001241f, 0.001603f, -0.00352f, -0.004997f,
+ -0.005177f, -0.002817f, 0.002464f, 0.00763f, 0.00547f, -0.007217f, -0.00507f, 0.000908f, -0.000513f,
+ 0.001423f, -0.0006895f, 0.001677f, 0.001864f, -0.00401f, -0.003475f, 0.00604f, -0.003687f, -0.008606f,
+ -0.00724f, -0.0061f, 0.002502f, -0.00612f, -0.003128f, 0.000557f, 0.001442f, -0.007397f, -0.0088f,
+ -0.0009484f, 0.007244f, -0.008804f, -0.00847f, -0.00967f, 0.00989f, 0.00872f, -0.005753f, 0.003027f,
+ 0.0014105f, 0.007397f, -0.005905f, 0.007214f, 0.005665f, 0.001882f, -0.002838f, -0.003008f, -0.00795f,
+ -0.000239f, 0.0064f, 0.005333f, 0.005028f, 0.006863f, -0.004f, -0.00592f, -0.001575f, 0.005398f,
+ 0.009575f, -0.003317f, 0.00983f, -0.0006003f, 0.005287f, 0.009094f, -0.00502f, -0.00495f, -0.00962f,
+ 0.000787f, 0.005604f, -0.006504f, 0.002504f, -0.004066f, -0.009766f, -0.0074f, -0.00766f, 0.009705f,
+ 0.00814f, -0.005157f, -0.001017f, -0.008316f, -0.00004405f, -0.00802f, -0.004677f, -0.004894f, -0.00705f,
+ 0.00784f, 0.00448f, -0.007553f, -0.0028f, -0.006226f, 0.0000136f, -0.004192f, -0.00755f, 0.00278f,
+ 0.00343f, -0.0006332f, -0.00343f, -0.004555f, -0.0093f, 0.00261f, 0.00926f, -0.005093f, 0.00627f,
+ -0.00848f, -0.00984f, -0.001426f, -0.00226f, -0.002077f, -0.001703f, 0.009636f, 0.007664f, -0.003628f,
+ 0.002018f, -0.006012f, -0.00473f, 0.003834f, 0.00939f, -0.00827f, -0.00812f, -0.00792f, 0.00924f,
+ 0.00776f, 0.001537f, -0.00287f, -0.002401f, -0.00831f, -0.00903f, 0.00591f, 0.003252f, -0.006348f,
+ 0.001455f, 0.00674f, -0.002382f, 0.0003512f, -0.0017185f, 0.00684f, 0.00665f, 0.00782f, -0.00969f,
+ 0.00418f, 0.00442f, 0.00979f, 0.006382f, 0.004642f, 0.00398f, 0.007797f, 0.005234f, -0.005566f,
+ -0.00903f, 0.003168f, -0.005596f, 0.00006646f, 0.00995f, -0.002335f, -0.00548f, 0.005383f, -0.004562f,
+ 0.00811f, -0.005035f, 0.0008745f, -0.0086f, -0.00786f, -0.00566f, -0.0096f, -0.000744f, 0.00511f,
+ -0.003363f, 0.002739f, 0.002033f, 0.005455f, -0.001077f, 0.003887f, 0.00735f, 0.00757f, 0.008965f,
+ -0.002888f, 0.002462f, 0.000919f, 0.0008416f, -0.003096f, 0.00875f, -0.002434f, 0.00318f, -0.002779f,
+ 0.00725f, 0.005062f, 0.00073f, 0.00845f, 0.003576f, 0.002874f, -0.00836f, -0.00859f, 0.00916f,
+ -0.00745f, 0.00869f, 0.001855f, 0.005814f, -0.002064f, 0.0066f, -0.009346f, 0.004307f, -0.00966f,
+ 0.00877f, -0.002394f, -0.00977f, 0.002356f, -0.008255f, 0.001052f, 0.00495f, -0.00963f, 0.00886f,
+ -0.00476f, -0.00917f, -0.000619f, -0.00593f, 0.005497f, 0.003141f, 0.002428f, 0.003363f, 0.001099f,
+ 0.00731f, -0.005577f, 0.00666f, -0.00328f, 0.004677f, 0.00761f, -0.00864f, -0.00873f, -0.00282f,
+ -0.004177f, 0.00867f, -0.00536f, 0.004387f, -0.007294f, -0.0099f, 0.001112f, -0.001063f, 0.004284f,
+ 0.000729f, 0.005604f, 0.00434f, 0.00563f, -0.00618f, 0.00464f, 0.004417f, 0.00524f, -0.00052f,
+ -0.002462f, -0.000902f, 0.005207f, -0.002256f, 0.000805f, -0.006252f, 0.003262f, 0.007603f, -0.000191f,
+ 0.003582f, -0.002598f, -0.003662f, -0.005585f, -0.00007087f, -0.00784f, -0.001778f, 0.00996f, -0.00643f,
+ 0.009796f, -0.002966f, 0.005848f, -0.003027f, -0.007587f, -0.003654f, -0.00882f, -0.001206f, -0.005836f,
+ -0.0089f, -0.00608f, -0.003944f, -0.000564f, -0.00329f, 0.000377f, 0.000702f, 0.000859f, 0.002554f,
+ 0.001499f, 0.005997f, 0.0006666f, -0.00584f, 0.005337f, -0.00734f, 0.006847f, 0.00829f, 0.003925f,
+ -0.00837f, -0.005886f, -0.006927f, -0.000641f, -0.0000388f, 0.003124f, 0.007427f, 0.00767f, -0.002771f,
+ -0.005985f, 0.002094f, -0.007442f, -0.001377f, 0.003183f, 0.0003796f, 0.0068f, 0.0008273f, -0.002102f,
+ 0.003433f, -0.00931f, 0.0003903f, -0.00771f, -0.000703f, 0.003122f, 0.00833f, 0.001467f, 0.00769f,
+ -0.004578f, -0.007393f, 0.0054f, -0.007797f, -0.003767f, -0.009735f, -0.0007954f, 0.005028f, -0.00809f,
+ 0.002352f, -0.0002111f, 0.003624f, 0.00502f, 0.001048f, 0.00922f, 0.003426f, 0.002258f, -0.00708f,
+ 0.00517f, -0.00919f, -0.00881f, -0.00548f, 0.00891f, 0.00919f, 0.00597f, 0.001098f, 0.004875f,
+ 0.004875f, 0.00846f, 0.00829f, 0.003426f, 0.001049f, 0.00669f, 0.003994f, 0.006195f, -0.004585f,
+ -0.001221f, -0.000247f, -0.00613f, -0.00613f, 0.00436f, 0.006775f, -0.001169f, -0.001771f, -0.001071f,
+ -0.003635f, -0.004475f, -0.00216f, -0.003502f, 0.002285f, -0.006702f, 0.0074f, 0.004845f, 0.00123f,
+ -0.00434f, -0.0082f, 0.0000914f, 0.00325f, -0.00717f, -0.003687f, 0.003479f, 0.005894f, -0.002655f,
+ 0.00833f, 0.002365f, -0.00927f, 0.006416f, -0.0031f, 0.009834f, 0.006855f, 0.004673f, 0.00857f,
+ -0.00627f, 0.00887f, -0.002636f, -0.0066f, -0.003975f, 0.003056f, -0.001572f, -0.005142f, 0.007393f,
+ 0.00863f, -0.000665f, -0.005146f, 0.008965f, 0.005505f, -0.001827f, -0.001454f, 0.002926f, -0.002275f,
+ -0.006184f, 0.00991f, -0.005035f, -0.003462f, 0.00855f, -0.009125f, 0.002832f, 0.005817f, 0.007187f,
+ 0.005844f, -0.003204f, -0.002201f, -0.0095f, -0.00862f, -0.00896f, 0.00543f, 0.00010115f, 0.00392f,
+ 0.004917f, -0.002266f, 0.0003471f, 0.006306f, -0.004726f, -0.002298f, 0.00234f, -0.004726f, 0.00924f,
+ -0.005363f, -0.0002112f, -0.0099f, 0.005604f, -0.00523f, -0.004627f, -0.001949f, -0.00936f, 0.002743f,
+ -0.001635f, 0.001984f, 0.00972f, -0.00359f, 0.003296f, 0.00074f, 0.004654f, 0.00995f, -0.001584f,
+ 0.003048f, 0.0006003f, -0.003628f, -0.007668f, -0.002537f, -0.006584f, 0.00576f, 0.00864f, -0.00899f,
+ -0.009636f, -0.005394f, 0.00433f, 0.00706f, 0.005005f, -0.004707f, 0.004597f, 0.00852f, 0.008835f,
+ 0.003904f, 0.00457f, 0.004128f, 0.005028f, -0.003986f, 0.005997f, 0.0002208f, 0.00777f, 0.00963f,
+ 0.005787f, 0.007023f, 0.00553f, 0.00449f, 0.005814f, 0.003082f, 0.0093f, 0.00472f, -0.00985f,
+ 0.00938f, 0.00558f, 0.007088f, 0.00391f, -0.00918f, 0.008415f, 0.00902f, 0.004173f, -0.002716f,
+ -0.009926f, -0.00801f, -0.009705f, -0.0086f, -0.009865f, 0.003788f, -0.0092f, 0.00887f, -0.001495f,
+ -0.00314f, -0.003246f, -0.000836f, 0.001646f, 0.00902f, -0.007233f, -0.00376f, -0.0057f, 0.005787f,
+ -0.002974f, 0.00872f, 0.0086f, -0.00443f, 0.003622f, 0.004593f, 0.008026f, -0.0003214f, 0.00858f,
+ -0.00338f, 0.00772f, 0.00448f, 0.00855f, 0.001066f, -0.004692f, -0.005737f, 0.007565f, -0.0002706f,
+ -0.002792f, -0.00949f, 0.000827f, -0.004967f, 0.00864f, 0.00788f, 0.009094f, -0.001957f, -0.002716f,
+ 0.000686f, -0.00499f, -0.004173f, 0.002407f, 0.00923f, 0.001411f, -0.0005016f, 0.00746f, -0.0087f,
+ -0.002703f, -0.003134f, -0.001611f, 0.007404f, -0.00999f, -0.004158f, 0.00556f, 0.0005794f, 0.003775f,
+ -0.001105f, -0.00338f, 0.00999f, 0.006966f, 0.005802f, -0.009735f, -0.009834f, -0.00723f, -0.00656f,
+ -0.007538f, 0.00995f, 0.00586f, 0.001463f, -0.001861f, -0.007015f, 0.005455f, -0.00492f, -0.005337f,
+ -0.00855f, -0.002764f, 0.003605f, 0.00967f, -0.007256f, -0.002594f, 0.00397f, -0.00508f, -0.004555f,
+ 0.009476f, -0.0006495f, 0.003998f, -0.0087f, 0.007294f, -0.007748f, 0.001855f, -0.0002816f, -0.00983f,
+ -0.007416f, 0.004444f, 0.003036f, 0.005066f, 0.001116f, -0.0001506f, -0.003181f, -0.003258f, -0.00816f,
+ 0.00821f, -0.0007715f, 0.00669f, 0.002674f, 0.004074f, 0.009605f, 0.001936f, -0.0052f, -0.002779f,
+ 0.003435f, 0.003592f, -0.00787f, 0.002615f, 0.007996f, 0.002047f, 0.002438f, 0.000739f, -0.002443f,
+ 0.00817f, 0.009995f, 0.00749f, 0.00953f, 0.007427f, -0.003246f, -0.004795f, 0.003834f, 0.0087f,
+ -0.00863f, 0.003105f, -0.003313f, -0.006187f, 0.005104f, -0.00093f, 0.004158f, 0.003963f, -0.00579f,
+ -0.004044f, 0.004044f, -0.0005593f, -0.00388f, -0.00249f, 0.006115f, 0.00322f, 0.007347f, 0.00813f,
+ -0.005142f, -0.0004606f, 0.00646f, 0.002186f, 0.00812f, 0.004818f, 0.0009236f, -0.00864f, 0.00948f,
+ -0.003057f, 0.003445f, -0.004444f, 0.001763f, -0.005806f, 0.001699f, 0.00843f, -0.007423f, -0.001351f,
+ -0.007317f, -0.001196f, 0.002996f, 0.005066f, 0.003227f, 0.00547f, -0.00923f, 0.0008106f, 0.00789f,
+ -0.006508f, -0.0003939f, -0.002443f, 0.007107f, -0.00692f, -0.007645f, -0.00353f, 0.00661f, 0.000988f,
+ -0.00769f, -0.003134f, 0.002548f, 0.00495f, 0.0034f, 0.001454f, 0.00344f, -0.00323f, -0.006203f,
+ 0.001063f, 0.008736f, -0.00737f, 0.00234f, -0.00315f, -0.008865f, -0.003918f, 0.006042f, 0.0003307f,
+ -0.001405f, 0.002129f, -0.00682f, 0.000836f, -0.005436f, 0.008385f, -0.002783f, -0.0007734f, -0.007088f,
+ -0.005924f, 0.00951f, 0.000002f, -0.00504f, -0.005474f, -0.00897f, 0.00339f, -0.003044f, 0.0019245f,
+ 0.00596f, 0.00756f, -0.005936f, 0.007416f, -0.005173f, 0.006367f, 0.0015545f, -0.001073f, 0.008095f,
+ 0.004868f, 0.0000308f, -0.005302f, -0.0003858f, -0.00421f, -0.00386f, 0.00925f, 0.004604f, 0.001006f,
+ -0.004482f, 0.00634f, -0.006126f, -0.00878f, 0.0095f, -0.006985f, -0.00575f, -0.001845f, -0.002335f,
+ 0.00908f, 0.00764f, -0.00405f, 0.003431f, 0.004726f, 0.0002171f, -0.005314f, -0.00693f, 0.00867f,
+ 0.0007024f, -0.007217f, 0.006042f, -0.0002111f, 0.00475f, -0.00635f, 0.00984f, 0.00829f, -0.0008802f,
+ -0.005093f, -0.007996f, -0.003607f, -0.00965f, -0.001188f, -0.002707f, 0.002533f, 0.00328f, -0.004807f,
+ -0.002724f, -0.005733f, 0.007996f, -0.003893f, -0.0002323f, -0.00577f, -0.007263f, 0.00416f, -0.007385f,
+ -0.004906f, 0.002007f, -0.00773f, -0.0004334f, -0.00542f, -0.0009217f, 0.008545f, 0.0005693f, 0.0094f,
+ -0.000956f, -0.002106f, -0.0082f, -0.006363f, 0.00431f, -0.001059f, -0.0054f, 0.002123f, 0.0004594f,
+ -0.003489f, -0.005173f, -0.007595f, 0.007782f, -0.0001341f, 0.00977f, -0.00463f, -0.0002378f, -0.002296f,
+ 0.00667f, 0.00701f, 0.001323f, -0.001699f, 0.00955f, -0.0091f, 0.0089f, 0.00791f, -0.0003197f,
+ 0.007835f, -0.00828f, 0.00854f, 0.00239f, 0.008385f, 0.001974f, 0.000486f, 0.00991f, 0.006542f,
+ 0.007866f, -0.004803f, -0.004913f, -0.00513f, -0.0004153f, 0.00995f, -0.00516f, -0.003317f, 0.00682f,
+ 0.0004165f, -0.00903f, -0.005344f, 0.00786f, 0.003769f, 0.004158f, 0.0002446f, 0.00589f, -0.002949f,
+ 0.0073f, -0.002398f, -0.004757f, 0.0002432f, -0.00439f, -0.00454f, 0.000453f, 0.00823f, -0.009575f,
+ 0.00535f, -0.008575f, -0.00893f, 0.004303f, 0.00502f, 0.00617f, -0.004402f, 0.00919f, -0.00865f,
+ 0.00876f, 0.003645f, 0.0002997f, -0.00925f, -0.007076f, 0.004448f, 0.005196f, -0.003986f, 0.007084f,
+ -0.000285f, -0.002855f, -0.000422f, -0.00872f, -0.005013f, 0.00952f, -0.008446f, -0.004044f, -0.00907f,
+ 0.007072f, -0.00918f, -0.007835f, 0.000878f, -0.006847f, -0.006f, 0.00731f, -0.001876f, -0.002565f,
+ -0.003584f, -0.003006f, -0.00723f, -0.003433f, 0.0004973f, -0.00795f, 0.0005007f, 0.00608f, 0.00671f,
+ 0.0001765f, 0.00439f, -0.003738f, -0.006035f, 0.00010353f, -0.00374f, 0.0008683f, 0.00773f, -0.0004847f,
+ -0.000992f, 0.004658f, -0.003555f, -0.0056f, -0.001982f, 0.00812f, 0.003386f, -0.001584f, 0.003508f,
+ -0.006138f, -0.00587f, 0.001421f, -0.009094f, -0.00468f, -0.0086f, 0.003637f, 0.00896f, 0.00804f,
+ -0.00744f, 0.002382f, -0.0097f, 0.000659f, 0.007782f, 0.002981f, -0.00869f, 0.0000934f, -0.00882f,
+ 0.002771f, -0.009544f, 0.0035f, 0.004124f, -0.0014f, -0.006294f, -0.007614f, 0.00931f, 0.009674f,
+ 0.0003185f, -0.004295f, 0.007084f, -0.0035f, -0.00334f, -0.001754f, 0.001216f, -0.004375f, 0.003244f,
+ 0.0001901f, 0.001547f, 0.007183f, 0.006447f, 0.005108f, 0.00679f, 0.001068f, -0.00587f, 0.005745f,
+ -0.00634f, 0.0058f, 0.006985f, -0.000697f, 0.00008917f, 0.007835f, -0.0004838f, 0.004795f, -0.006832f,
+ 0.002398f, 0.00687f, -0.001582f, 0.00709f, -0.00908f, -0.001573f, 0.009865f, -0.001476f, -0.000526f,
+ 0.00477f, 0.008026f, -0.00171f, 0.00979f, -0.005592f, 0.0006247f, -0.00774f, 0.00463f, -0.006676f,
+ 0.004368f, -0.002373f, -0.005127f, -0.0013275f, -0.002306f, -0.0087f, 0.00997f, 0.005493f, 0.003786f,
+ -0.004414f, -0.005947f, 0.003181f, -0.0004156f, 0.00909f, -0.00656f, 0.001926f, 0.0003731f, -0.009636f,
+ 0.003124f, -0.0000686f, -0.001972f, -0.006584f, 0.0009604f, 0.004086f, 0.009865f, 0.001302f, -0.00989f,
+ -0.0086f, 0.005177f, 0.006493f, -0.00523f, -0.00443f, 0.001586f, 0.00937f, 0.007458f, 0.001883f,
+ 0.00774f, 0.0004454f, 0.000493f, 0.0003722f, -0.00486f, 0.006435f, 0.002642f, 0.00432f, -0.00272f,
+ -0.007446f, -0.007397f, 0.00361f, 0.003618f, 0.003956f, -0.001175f, 0.00832f, 0.00794f, 0.001658f,
+ 0.00123f, -0.003918f, 0.001215f, -0.007427f, 0.003708f, 0.00492f, -0.00968f, 0.008896f, -0.006786f,
+ -0.005856f, 0.006573f, 0.003876f, -0.003983f, 0.00411f, 0.0076f, -0.0008364f, -0.00496f, 0.008026f,
+ -0.00986f, -0.001429f, -0.007236f, -0.002172f, -0.003004f, -0.0017185f, -0.00353f, -0.00817f, -0.004353f,
+ -0.003458f, 0.002663f, -0.00599f, 0.002125f, -0.00625f, -0.00913f, -0.009796f, -0.004574f, -0.00978f,
+ -0.00398f, -0.006096f, 0.003708f, 0.007214f, 0.00444f, 0.003742f, 0.004547f, 0.006042f, 0.001542f,
+ 0.002424f, 0.0005617f, 0.006477f, -0.002382f, 0.0009637f, -0.00462f, -0.000934f, 0.0004268f, 0.00975f,
+ 0.002277f, 0.001031f, -0.007103f, 0.006615f, 0.00199f, 0.009f, 0.00995f, -0.002514f, -0.0016575f,
+ -0.00875f, 0.00936f, -0.007133f, 0.007412f, -0.001572f, -0.00862f, -0.00675f, 0.009445f, -0.00819f,
+ 0.004597f, -0.005493f, 0.004894f, -0.004807f, 0.00346f, -0.00114f, 0.006638f, -0.005882f, 0.0041f,
+ -0.002684f, -0.0006037f, -0.00842f, 0.001939f, -0.0008016f, 0.00265f, -0.005383f, 0.00963f, 0.0063f,
+ 0.006386f, 0.004463f, -0.004173f, -0.006317f, 0.003534f, -0.00781f, -0.001414f, -0.004723f, -0.003096f,
+ -0.001367f, 0.00955f, -0.0000178f, -0.007214f, 0.00985f, -0.003782f, 0.005688f, -0.002445f, 0.00185f,
+ 0.00784f, 0.00203f, 0.0003746f, -0.00935f, 0.00559f, 0.00718f, 0.005905f, 0.002926f, 0.006268f,
+ 0.0002078f, 0.001244f, 0.00467f, 0.006405f, -0.0005364f, 0.00503f, -0.0004387f, 0.006252f, -0.002594f,
+ 0.001791f, -0.00807f, -0.001451f, -0.0034f, 0.00958f, 0.003035f, -0.00348f, 0.004818f, 0.008644f,
+ -0.0005145f, -0.004673f, 0.008934f, 0.00756f, -0.001786f, -0.005634f, -0.002981f, -0.007107f, 0.001145f,
+ 0.003677f, 0.004997f, 0.009766f, 0.0005856f, -0.002384f, 0.004177f, -0.00965f, 0.005924f, -0.005596f,
+ 0.004505f, 0.000578f, 0.00663f, -0.006638f, 0.001535f, 0.002502f, 0.002907f, 0.00447f, 0.002016f,
+ 0.008865f, 0.00828f, -0.00975f, 0.0002487f, -0.00796f, -0.008286f, -0.002083f, -0.00471f, 0.007187f,
+ 0.004326f, 0.007206f, 0.004307f, 0.009346f, -0.00758f, -0.007545f, 0.00349f, 0.0018425f, -0.00837f,
+ -0.007935f, -0.002258f, 0.003757f, -0.0014f, 0.000081f, 0.00449f, -0.000318f, 0.006485f, -0.001184f,
+ -0.001842f, 0.009476f, 0.00818f, -0.00986f, 0.001612f, -0.00779f, 0.006676f, -0.0013075f, 0.00464f,
+ -0.002117f, -0.0087f, 0.00965f, 0.001394f, 0.00818f, -0.005493f, 0.004673f, -0.00439f, -0.00557f,
+ -0.001841f, -0.00948f, 0.00607f, 0.00551f, -0.002834f, 0.004883f, -0.00712f, 0.006573f, -0.002064f,
+ 0.0008054f, -0.006508f, 0.004467f, 0.00773f, 0.004787f, 0.00523f, -0.001751f, -0.005657f, 0.000278f,
+ -0.001822f, -0.00639f, -0.003477f, -0.006767f, -0.007782f, 0.005375f, -0.00726f, 0.007248f, 0.0008335f,
+ -0.001856f, -0.00009865f, -0.006054f, 0.006786f, -0.005665f, -0.007393f, -0.0007014f, -0.007046f, -0.0065f,
+ -0.00645f, 0.002195f, 0.004818f, 0.00909f, -0.00862f, 0.007614f, -0.00499f, 0.007423f, -0.001478f,
+ -0.005028f, -0.007107f, -0.00488f, 0.00322f, -0.003801f, 0.0018425f, 0.001862f, 0.007713f, -0.008675f,
+ 0.001135f, 0.00788f, -0.006866f, -0.00776f, 0.001423f, -0.00392f, -0.00908f, 0.00918f, -0.006706f,
+ -0.00828f, -0.00358f, -0.00956f, -0.00823f, 0.00656f, -0.00617f, -0.004395f, 0.002705f, -0.001398f,
+ 0.003265f, 0.007793f, 0.00664f, 0.009285f, 0.00851f, 0.00416f, -0.00923f, -0.006733f, 0.00934f,
+ -0.00564f, -0.001064f, 0.001106f, 0.00943f, 0.005024f, 0.00793f, -0.005302f, -0.00376f, -0.0005045f,
+ 0.005325f, -0.002134f, -0.001494f, -0.00891f, -0.00803f, 0.00958f, -0.0000229f, -0.003668f, 0.00602f,
+ -0.003649f, -0.002918f, 0.006573f, 0.005146f, -0.009995f, 0.00864f, -0.008255f, 0.004868f, 0.001078f,
+ -0.003546f, 0.00235f, 0.005764f, -0.005116f, 0.009186f, -0.008255f, -0.00216f, -0.008f, -0.009125f,
+ -0.002754f, -0.0083f, -0.002539f, -0.0007524f, -0.00843f, 0.003647f, -0.00156f, 0.00498f, -0.007904f,
+ -0.00502f, 0.00919f, 0.003862f, 0.00599f, 0.001332f, -0.00788f, 0.007374f, 0.001653f, -0.00406f,
+ -0.008545f, -0.00444f, -0.00971f, -0.002436f, -0.009834f, -0.005573f, -0.002323f, -0.007126f, 0.004803f,
+ -0.00913f, 0.002483f, -0.004704f, -0.0014515f, -0.001035f, -0.008934f, -0.001855f, -0.0071f, 0.00979f,
+ -0.008255f, 0.001663f, -0.001383f, 0.000364f, -0.003595f, -0.002163f, 0.002136f, 0.004894f, 0.006966f,
+ 0.00925f, 0.006557f, -0.0089f, -0.0007167f, 0.002699f, 0.003483f, 0.003017f, 0.004223f, 0.006042f,
+ -0.002342f, -0.004868f, 0.003157f, 0.006165f, 0.001519f, -0.00874f, -0.004856f, -0.004116f, 0.002634f,
+ -0.001233f, -0.008736f, 0.003529f, -0.001974f, 0.00121f, -0.0006013f, -0.002737f, -0.00596f, 0.007027f,
+ -0.00496f, -0.002726f, -0.00787f, 0.001581f, 0.00381f, -0.004932f, 0.007027f, -0.003616f, -0.000989f,
+ 0.003532f, 0.002346f, 0.0000479f, 0.002907f, -0.004353f, 0.005424f, 0.003124f, 0.00985f, 0.003f,
+ -0.007805f, 0.001684f, -0.001324f, 0.0005107f, 0.00483f, -0.00992f, 0.000786f, -0.003649f, -0.0006337f,
+ -0.001443f, 0.00782f, 0.008194f, -0.00819f, -0.00844f, -0.004906f, -0.006355f, 0.002932f, 0.004242f,
+ 0.000638f, -0.00259f, 0.00585f, -0.00864f, 0.00378f, -0.00279f, -0.00319f, -0.001805f, -0.002768f,
+ -0.0007725f, -0.004875f, 0.003784f, 0.00947f, -0.008736f, 0.003262f, -0.00325f, -0.003826f, 0.007904f,
+ 0.00002706f, 0.006187f, -0.001488f, -0.001711f, -0.003317f, 0.007446f, -0.00699f, -0.005573f, 0.00164f,
+ 0.00938f, 0.0002334f, 0.003819f, -0.001427f, 0.00992f, -0.003433f, -0.0006833f, -0.00492f, 0.005493f,
+ 0.003014f, -0.006187f, -0.002325f, 0.00741f, -0.009056f, 0.005604f, -0.003874f, 0.00869f, 0.0001504f,
+ 0.005356f, 0.001178f, 0.00786f, 0.003292f, 0.00947f, -0.002808f, -0.00424f, -0.00999f, 0.004818f,
+ 0.00372f, -0.003748f, 0.001496f, 0.009796f, 0.0000038f, 0.00379f, 0.0003746f, -0.004147f, 0.007195f,
+ -0.0095f, 0.001072f, 0.002129f, 0.00889f, 0.003273f, 0.006958f, -0.004894f, 0.0006795f, 0.00892f,
+ -0.004356f, 0.00594f, -0.002378f, 0.00969f, -0.0081f, 0.0003927f, 0.00789f, 0.00343f, 0.00479f,
+ -0.0005517f, -0.00652f, 0.000332f, 0.00876f, -0.001309f, -0.002495f, -0.00831f, 0.007786f, -0.00512f,
+ -0.003832f, -0.0006423f, -0.003162f, 0.00807f, -0.006298f, -0.003601f, 0.002438f, 0.0017395f, 0.002686f,
+ -0.001712f, 0.00424f, 0.00632f, -0.00935f, 0.000598f, 0.005714f, -0.00921f, -0.002935f, 0.008064f,
+ -0.001802f, -0.002634f, -0.006786f, 0.00976f, 0.00867f, 0.004066f, 0.002306f, 0.001495f, -0.0003717f,
+ -0.00597f, 0.00958f, -0.00881f, 0.00856f, -0.00538f, -0.008575f, -0.003626f, 0.006702f, 0.00932f,
+ 0.001552f, 0.0006847f, 0.00159f, 0.002314f, 0.008606f, 0.005955f, 0.00862f, 0.0003278f, 0.003115f,
+ -0.006863f, -0.0051f, -0.00824f, 0.00592f, -0.005653f, 0.00871f, -0.008286f, 0.0005655f, -0.005154f,
+ -0.008766f, 0.008896f, -0.009674f, 0.003782f, -0.000774f, 0.00323f, -0.00935f, 0.007694f, -0.003578f,
+ -0.00912f, 0.007362f, -0.00561f, 0.00817f, -0.00852f, -0.00006425f, -0.003166f, 0.0004108f, 0.006325f,
+ -0.00928f, -0.008026f, -0.003891f, -0.005924f, -0.004284f, 0.00515f, -0.00749f, 0.002983f, 0.003885f,
+ 0.006535f, -0.001574f, 0.005695f, -0.009155f, -0.006996f, -0.0012665f, 0.002983f, -0.00932f, -0.00575f,
+ -0.008545f, -0.0005817f, 0.002466f, -0.003382f, 0.007477f, 0.00166f, 0.004562f, -0.001331f, -0.0095f,
+ -0.00291f, 0.002815f, -0.009796f, -0.00496f, 0.005592f, -0.00365f, -0.00609f, 0.0008597f, 0.00516f,
+ 0.003986f, 0.002157f, 0.00934f, -0.003363f, 0.000835f, 0.003725f, 0.002106f, -0.005993f, 0.00795f,
+ 0.003122f, -0.003313f, -0.005383f, 0.0004141f, 0.006466f, 0.003517f, -0.00809f, 0.005714f, -0.007294f,
+ -0.001924f, -0.002457f, -0.001897f, -0.001449f, 0.00543f, 0.000466f, 0.008125f, -0.002316f, 0.003128f,
+ -0.008255f, -0.001908f, 0.00911f, 0.00793f, -0.001612f, -0.00899f, -0.004013f, -0.002962f, 0.001639f,
+ -0.006916f, -0.009056f, -0.005795f, -0.001411f, -0.00745f, 0.003126f, 0.000916f, -0.0007496f, 0.003273f,
+ 0.005184f, 0.004128f, 0.003195f, -0.004635f, 0.004826f, 0.00745f, 0.006348f, -0.008865f, -0.00217f,
+ 0.006275f, -0.00971f, 0.005478f, -0.003456f, 0.0065f, 0.00943f, -0.005703f, 0.002666f, -0.005745f,
+ -0.006134f, 0.003513f, 0.00683f, -0.004803f, -0.003841f, -0.006435f, -0.007122f, 0.001902f, 0.005844f,
+ 0.007313f, 0.004723f, 0.001233f, -0.00402f, 0.001288f, 0.002878f, 0.004196f, -0.002884f, -0.007454f,
+ 0.000933f, -0.003576f, -0.005608f, -0.00908f, 0.00426f, 0.001788f, -0.004856f, -0.008965f, -0.00546f,
+ -0.004684f, -0.002708f, -0.006145f, 0.002111f, -0.000599f, -0.007187f, -0.002018f, -0.001014f, -0.006676f,
+ -0.00335f, -0.00528f, -0.009224f, -0.009285f, -0.00063f, -0.0045f, -0.005157f, 0.008865f, 0.008835f,
+ -0.00672f, 0.002237f, 0.002687f, 0.005703f, 0.00585f, 0.007175f, -0.007496f, 0.0002145f, 0.00924f,
+ -0.00611f, -0.003202f, -0.0057f, -0.001237f, 0.006752f, 0.001596f, -0.001424f, 0.007492f, 0.00459f,
+ -0.00668f, -0.001726f, 0.00209f, 0.001924f, 0.0008316f, 0.0004334f, 0.001638f, 0.005665f, 0.000911f,
+ -0.00552f, 0.00619f, -0.00979f, 0.00549f, 0.004967f, 0.00818f, -0.006157f, -0.00816f, 0.001334f,
+ 0.0002472f, 0.00653f, 0.005257f, 0.0000934f, -0.00261f, 0.00755f, 0.000494f, 0.001341f, 0.00236f,
+ -0.00876f, 0.005054f, -0.00503f, 0.007465f, -0.005676f, 0.003174f, -0.006325f, -0.005238f, -0.005608f,
+ 0.0002413f, -0.003477f, -0.00379f, -0.002457f, 0.002943f, -0.006855f, 0.001733f, 0.006504f, -0.004406f,
+ -0.00929f, -0.00009567f, 0.000722f, 0.001004f, -0.00633f, 0.001915f, -0.001345f, -0.002802f, -0.00858f,
+ -0.001694f, -0.000937f, 0.004486f, -0.00567f, 0.000247f, 0.007782f, -0.0036f, -0.003588f, 0.00717f,
+ -0.00928f, 0.00838f, -0.0063f, 0.00916f, 0.005352f, 0.00736f, 0.00083f, -0.007248f, -0.005722f,
+ 0.00325f, -0.00503f, 0.001647f, 0.007767f, -0.00539f, 0.0065f, -0.002151f, 0.003359f, 0.0002371f,
+ -0.007057f, 0.000602f, 0.00692f, -0.008415f, -0.001443f, 0.006783f, -0.00778f, 0.00946f, -0.002735f,
+ -0.006832f, 0.00419f, -0.009315f, 0.00963f, -0.003994f, -0.00833f, 0.00411f, 0.0076f, 0.005817f,
+ -0.001542f, -0.003956f, 0.004513f, 0.001667f, -0.002378f, -0.003075f, 0.002481f, -0.001739f, -0.005566f,
+ -0.002113f, 0.003263f, -0.00797f, -0.008675f, 0.006916f, 0.002848f, 0.008446f, -0.004627f, -0.002216f,
+ -0.0005455f, -0.00882f, 0.00846f, 0.001422f, -0.000527f, -0.00826f, 0.0012245f, 0.006226f, -0.008316f,
+ 0.002134f, -0.006298f, 0.00672f, -0.008026f, 0.003248f, 0.0046f, 0.001113f, 0.000221f, 0.000791f,
+ 0.00836f, 0.007805f, 0.006355f, 0.004723f, 0.000991f, -0.00904f, 0.007164f, 0.00896f, 0.00788f,
+ 0.004128f, -0.003473f, -0.00242f, 0.003466f, 0.003286f, 0.002634f, 0.009865f, 0.006947f, -0.0004823f,
+ -0.005455f, 0.003603f, 0.002008f, -0.004536f, 0.006187f, 0.005722f, -0.00010717f, 0.00227f, 0.00967f,
+ -0.004883f, -0.0011015f, 0.009285f, 0.002121f, -0.006718f, 0.00782f, 0.00481f, 0.002974f, -0.002855f,
+ -0.001182f, -0.000961f, -0.002497f, -0.005707f, -0.00536f, -0.000726f, -0.004868f, -0.000473f, -0.002764f,
+ 0.0002033f, -0.00961f, -0.00828f, -0.001335f, 0.005314f, 0.007263f, 0.005386f, -0.0006895f, 0.00444f,
+ -0.00443f, 0.001597f, 0.00753f, 0.005608f, 0.002354f, 0.00399f, 0.003551f, 0.0035f, 0.00319f,
+ 0.0017185f, -0.006195f, -0.004467f, 0.006042f, -0.007217f, -0.00907f, 0.004025f, -0.00671f, -0.002226f,
+ -0.00557f, 0.000518f, -0.00805f, 0.008865f, -0.007195f, -0.004032f, -0.005047f, 0.007072f, -0.003544f,
+ -0.00706f, -0.000232f, -0.00829f, -0.00835f, -0.002449f, 0.002384f, -0.00886f, -0.00177f, -0.00641f,
+ 0.006733f, -0.001213f, -0.005184f, 0.009995f, 0.006573f, 0.003773f, -0.00962f, 0.003693f, 0.003815f,
+ 0.004353f, 0.00224f, 0.0003662f, 0.007187f, 0.00817f, -0.002918f, -0.006615f, 0.00834f, 0.002783f,
+ -0.000913f, 0.004993f, -0.006687f, -0.008224f, 0.00864f, -0.000776f, -0.003668f, 0.002398f, 0.001138f,
+ 0.001902f, -0.004894f, 0.00398f, 0.001741f, -0.00922f, 0.002316f, 0.0000156f, 0.00923f, -0.004314f,
+ 0.00844f, -0.002323f, -0.001928f, 0.006115f, 0.006283f, -0.001401f, -0.006443f, 0.00693f, 0.007225f,
+ 0.0005593f, -0.00996f, -0.00842f, -0.001854f, 0.001111f, 0.00157f, -0.003658f, -0.0003986f, 0.005455f,
+ 0.004204f, -0.006065f, 0.00812f, -0.00642f, -0.004932f, -0.00778f, 0.004032f, 0.005814f, 0.00329f,
+ -0.007164f, -0.00576f, 0.002708f, -0.005424f, -0.006355f, -0.003983f, -0.006695f, -0.00661f, 0.005814f,
+ -0.007137f, -0.00739f, -0.001341f, 0.000845f, 0.000429f, -0.002764f, 0.006496f, 0.00785f, -0.00622f,
+ 0.003235f, 0.00425f, -0.00612f, 0.00803f, 0.007404f, -0.001365f, 0.002625f, 0.001886f, 0.003359f,
+ -0.00518f, -0.002394f, 0.00475f, 0.003391f, 0.00693f, -0.002079f, -0.000818f, -0.002357f, -0.005272f,
+ -0.002317f, -0.000729f, 0.004074f, 0.005486f, 0.006023f, -0.006363f, 0.00527f, -0.003586f, -0.00925f,
+ 0.003809f, 0.00087f, 0.007133f, -0.001788f, 0.002201f, 0.00955f, 0.003735f, 0.007324f, -0.00614f,
+ -0.007187f, -0.006783f, -0.006145f, -0.004665f, 0.007175f, 0.00984f, 0.00314f, 0.008064f, 0.007336f,
+ -0.00337f, -0.00559f, 0.004944f, -0.007744f, -0.00197f, -0.006714f, -0.002281f, -0.002087f, 0.0009074f,
+ -0.00753f, 0.004993f, 0.00319f, -0.002535f, -0.001945f, 0.0008793f, -0.003357f, 0.004246f, -0.00838f,
+ 0.007698f, 0.001307f, 0.001717f, 0.00824f, -0.001335f, -0.0002145f, 0.00561f, -0.007168f, -0.001333f,
+ -0.00551f, -0.003637f, -0.007786f, 0.001738f, 0.007748f, 0.001321f, -0.001924f, 0.006046f, -0.009125f,
+ 0.009674f, 0.006313f, 0.002666f, 0.002287f, -0.00956f, -0.004803f, -0.008675f, 0.003038f, -0.00514f,
+ 0.00935f, 0.006756f, 0.004425f, 0.002203f, 0.00642f, 0.004555f, 0.00657f, 0.00157f, 0.00652f,
+ -0.000512f, 0.003416f, 0.00883f, -0.003372f, -0.001136f, -0.00302f, 0.007435f, -0.00564f, 0.001519f,
+ -0.007687f, -0.00783f, -0.008736f, 0.003899f, -0.00231f, 0.006927f, 0.00558f, -0.007786f, 0.008156f,
+ 0.004417f, -0.004173f, 0.008865f, 0.004707f, 0.002438f, -0.008896f, 0.00009686f, -0.00338f, 0.002985f,
+ 0.0000722f, 0.004047f, 0.00991f, 0.00222f, 0.00381f, -0.003147f, 0.0081f, 0.00392f, 0.001678f,
+ -0.00647f, 0.00942f, -0.002876f, -0.001987f, -0.00758f, -0.003983f, -0.00814f, 0.00255f, -0.001071f,
+ 0.006855f, -0.00676f, -0.00801f, 0.00399f, 0.002998f, 0.003906f, -0.002068f, 0.005444f, -0.003128f,
+ 0.001452f, -0.000623f, 0.007122f, -0.003498f, -0.000979f, -0.003366f, -0.001828f, 0.004135f, 0.006786f,
+ -0.003593f, -0.00814f, -0.00749f, -0.004894f, 0.009445f, -0.00828f, -0.005108f, -0.005836f, -0.002945f,
+ -0.008125f, -0.001417f, -0.003443f, 0.00201f, 0.001321f, 0.00578f, 0.00224f, -0.00895f, -0.001515f,
+ -0.008194f, 0.00883f, -0.000655f, -0.00831f, 0.005695f, 0.00663f, 0.00704f, -0.00393f, 0.003603f,
+ -0.005608f, 0.00107f, -0.00902f, -0.0001382f, 0.006287f, 0.006393f, 0.0005302f, 0.00898f, 0.00172f,
+ 0.0033f, -0.001728f, -0.004436f, 0.006794f, 0.001925f, -0.00698f, 0.002726f, -0.00372f, 0.003744f,
+ 0.007004f, 0.002556f, -0.00895f, -0.005096f, 0.003044f, -0.002342f, -0.00802f, 0.0067f, 0.006172f,
+ 0.0005546f, 0.009f, 0.006405f, 0.003557f, -0.006527f, 0.002508f, -0.002115f, -0.00497f, 0.004852f,
+ 0.002605f, 0.009155f, -0.00941f, 0.000894f, -0.00825f, 0.005333f, 0.006023f, -0.001292f, 0.009445f,
+ -0.007217f, 0.003368f, -0.007156f, -0.006386f, -0.00293f, 0.00218f, -0.00803f, 0.00927f, 0.008965f,
+ 0.001402f, 0.00525f, -0.00784f, 0.00418f, -0.00978f, -0.003138f, 0.002974f, 0.001657f, -0.009834f,
+ 0.001901f, -0.00948f, 0.005455f, -0.001604f, 0.00559f, 0.006447f, 0.0008035f, -0.002773f, 0.006332f,
+ -0.00896f, 0.00488f, 0.004177f, -0.00319f, 0.00708f, 0.0003064f, -0.0007687f, -0.003065f, 0.005558f,
+ -0.003864f, 0.003887f, -0.00855f, 0.006237f, 0.008415f, -0.002693f, -0.002817f, -0.00904f, 0.003407f,
+ 0.000946f, -0.00738f, -0.00562f, -0.0009713f, -0.003506f, -0.00766f, 0.00953f, -0.004005f, 0.00867f,
+ 0.0004733f, -0.005787f, 0.0005293f, 0.006996f, 0.001659f, 0.000469f, 0.001537f, 0.002247f, -0.004242f,
+ 0.00243f, -0.004093f, -0.007355f, -0.001f, 0.006374f, -0.004963f, 0.006035f, 0.005245f, -0.00839f,
+ 0.002262f, -0.008286f, 0.00845f, 0.00911f, -0.001388f, -0.001848f, -0.0008616f, 0.006363f, 0.002584f,
+ -0.002827f, -0.00755f, -0.009834f, 0.002735f, -0.001286f, 0.006f, 0.001821f, -0.001493f, -0.00819f,
+ -0.0003796f, 0.008606f, 0.000496f, 0.001856f, -0.00668f, -0.009186f, -0.00736f, 0.0048f, -0.003502f,
+ 0.001626f, -0.0001339f, -0.006126f, -0.00596f, -0.0001252f, 0.001953f, 0.009575f, -0.001304f, 0.004192f,
+ -0.006035f, -0.001251f, 0.007587f, 0.001031f, -0.00928f, 0.00793f, 0.00653f, 0.0007644f, -0.002647f,
+ 0.003609f, -0.00461f, 0.000423f, -0.000656f, 0.005367f, -0.00425f, 0.004215f, 0.006554f, 0.005634f,
+ -0.001172f, 0.00472f, -0.0002402f, 0.003582f, 0.00738f, 0.00301f, 0.005417f, 0.009254f, 0.007145f,
+ -0.0094f, 0.000404f, 0.00837f, -0.00894f, 0.004658f, 0.0004907f, -0.001399f, -0.00873f, 0.0008955f,
+ -0.001738f, -0.001934f, 0.003742f, 0.002077f, -0.004063f, -0.007736f, -0.001259f, 0.00867f, 0.00488f,
+ 0.006584f, -0.00822f, -0.00585f, 0.006927f, -0.003298f, -0.004593f, 0.000567f, -0.004543f, -0.007378f,
+ 0.00718f, -0.00876f, 0.005707f, 0.00701f, 0.001537f, 0.005993f, -0.0044f, 0.00847f, 0.00694f,
+ 0.00419f, -0.00511f, 0.00535f, 0.000936f, -0.0007434f, 0.001556f, -0.0008616f, -0.0085f, 0.003342f,
+ 0.00982f, 0.005077f, 0.005566f, -0.003716f, 0.00839f, 0.007786f, -0.00749f, -0.007614f, -0.00774f,
+ 0.00209f, 0.005894f, -0.007534f, 0.003998f, -0.00518f, -0.00033f, -0.00831f, -0.00556f, 0.004837f,
+ -0.001809f, -0.00423f, 0.00916f, -0.006786f, 0.009476f, 0.00841f, -0.000718f, 0.002834f, -0.00947f,
+ 0.0001942f, -0.007904f, -0.003672f, -0.001356f, -0.004658f, -0.005825f, 0.002747f, -0.00737f, 0.00845f,
+ 0.005226f, -0.002941f, -0.005226f, -0.00415f, 0.00848f, 0.0007825f, -0.005276f, 0.003502f, -0.005974f,
+ 0.00866f, -0.0076f, 0.003042f, -0.003267f, -0.00536f, -0.006935f, 0.007515f, 0.008255f, 0.003098f,
+ -0.007183f, 0.007355f, -0.00878f, -0.0001291f, -0.0009227f, 0.000577f, 0.00787f, 0.003855f, 0.005337f,
+ -0.004837f, 0.005676f, 0.004658f, -0.00798f, 0.006424f, -0.007534f, 0.002682f, -0.003042f, 0.00868f,
+ -0.003332f, 0.00318f, 0.00199f, 0.001096f, 0.00871f, 0.005028f, -0.001416f, 0.006233f, -0.007736f,
+ 0.00808f, -0.001244f, 0.001611f, 0.005127f, 0.00781f, -0.003036f, -0.00453f, -0.00516f, 0.007233f,
+ -0.001684f, -0.002474f, 0.002844f, -0.00723f, -0.002401f, 0.0015f, -0.005444f, -0.003035f, -0.00929f,
+ 0.00947f, 0.00247f, 0.004017f, 0.0008864f, -0.003862f, 0.0062f, -0.00172f, -0.00449f, 0.00796f,
+ 0.009445f, 0.007687f, -0.007034f, -0.001731f, -0.00585f, -0.005653f, -0.002281f, 0.004925f, -0.006744f,
+ -0.002542f, 0.005775f, 0.00861f, 0.003054f, 0.00666f, -0.00694f, -0.00822f, -0.001123f, 0.006557f,
+ -0.00476f, 0.006397f, 0.00957f, 0.00888f, -0.003952f, -0.006313f, 0.001164f, 0.001948f, -0.00758f,
+ 0.007263f, -0.00801f, 0.00924f, 0.009476f, -0.00979f, 0.007748f, -0.00533f, 0.006195f, 0.00659f,
+ 0.003437f, 0.00546f, -0.00859f, 0.002409f, -0.006824f, -0.006172f, 0.00663f, 0.004215f, 0.00291f,
+ 0.001303f, -0.007786f, -0.000654f, 0.00965f, -0.002867f, 0.002117f, 0.00484f, -0.002012f, -0.004826f,
+ -0.00801f, -0.00259f, 0.002625f, -0.000174f, 0.006844f, -0.005554f, -0.001617f, 0.00741f, -0.00145f,
+ -0.001762f, 0.005222f, 0.001931f, 0.006676f, -0.002014f, 0.005676f, -0.001987f, 0.003426f, -0.00088f,
+ 0.002485f, -0.007698f, -0.00604f, 0.006687f, -0.003902f, -0.00783f, -0.00817f, 0.00841f, 0.006134f,
+ -0.00659f, -0.004807f, 0.00649f, -0.00855f, -0.00605f, -0.003489f, 0.00594f, -0.00818f, -0.001544f,
+ 0.003778f, 0.00706f, -0.0002632f, 0.005882f, 0.003763f, 0.003439f, 0.00872f, 0.004265f, 0.00522f,
+ -0.00886f, -0.00803f, -0.0003037f, -0.00807f, -0.006756f, 0.00789f, -0.00428f, -0.000516f, 0.005196f,
+ -0.00981f, 0.00926f, -0.007507f, -0.00952f, -0.00259f, -0.003004f, 0.00828f, -0.000515f, -0.00759f,
+ -0.002186f, -0.00375f, -0.00902f, 0.002289f, -0.002497f, 0.00996f, 0.004932f, -0.00803f, -0.00785f,
+ 0.00993f, -0.007694f, 0.000255f, -0.0002395f, -0.005318f, 0.005173f, 0.00518f, -0.007427f, 0.00505f,
+ 0.008545f, -0.00238f, -0.002556f, 0.00932f, 0.009094f, -0.002436f, -0.00971f, 0.000679f, 0.00931f,
+ -0.00531f, 0.003595f, 0.0065f, -0.001422f, 0.002657f, 0.00864f, 0.001987f, -0.001189f, -0.0007544f,
+ 0.0002537f, -0.003994f, -0.00898f, -0.00314f, -0.00829f, 0.006683f, -0.006706f, -0.005634f, 0.00001407f,
+ 0.006878f, 0.004093f, 0.001739f, -0.003754f, 0.006306f, -0.001363f, -0.00145f, -0.00985f, -0.003508f,
+ -0.007454f, 0.00352f, -0.004467f, -0.00601f, -0.007763f, -0.00894f, 0.00583f, -0.00698f, 0.0099f,
+ -0.006313f, 0.00404f, -0.002666f, -0.00373f, 0.004604f, -0.00813f, -0.006283f, 0.004066f, -0.00592f,
+ -0.0003827f, -0.002565f, 0.006275f, 0.008705f, -0.007404f, 0.00793f, -0.0009556f, 0.001682f, 0.00866f,
+ 0.00774f, 0.00332f, 0.0008507f, -0.005215f, -0.00757f, -0.001497f, 0.005787f, 0.001453f, -0.001265f,
+ -0.00909f, 0.006832f, 0.00836f, 0.002867f, 0.002851f, 0.002344f, 0.001552f, -0.0006785f, -0.00941f,
+ -0.007114f, -0.003008f, 0.002539f, 0.0002484f, -0.00774f, 0.000987f, 0.00991f, 0.00611f, 0.0009437f,
+ -0.001054f, 0.000739f, 0.00809f, -0.003117f, -0.007812f, -0.001368f, -0.009674f, -0.001733f, 0.006268f,
+ 0.003513f, 0.00852f, -0.007652f, 0.004547f, -0.0001137f, 0.003424f, 0.000804f, -0.003584f, -0.00599f,
+ -0.005333f, -0.00303f, 0.004303f, 0.009f, -0.0006638f, -0.0008726f, 0.007774f, -0.0000234f, -0.0002577f,
+ 0.005783f, -0.008316f, -0.00841f, -0.003605f, 0.001991f, 0.006767f, 0.00508f, 0.00787f, 0.003464f,
+ 0.00908f, 0.007133f, 0.007504f, -0.00896f, 0.000183f, -0.00929f, -0.0009255f, -0.0034f, -0.00848f,
+ 0.002066f, 0.0002947f, 0.005394f, 0.002613f, 0.00701f, -0.00833f, -0.001219f, 0.004704f, 0.00446f,
+ -0.00775f, 0.00476f, -0.007195f, -0.00163f, -0.003307f, -0.007484f, -0.00889f, -0.00846f, 0.008156f,
+ -0.002731f, 0.005733f, 0.0099f, -0.00276f, -0.00869f, -0.00962f, -0.00841f, -0.004955f, 0.004997f,
+ 0.008896f, 0.00907f, -0.000695f, 0.00972f, 0.00685f, 0.004505f, -0.00726f, -0.003025f, -0.002087f,
+ 0.00797f, 0.006016f, -0.006485f, -0.00491f, 0.001922f, -0.00934f, 0.006355f, -0.0004008f, -0.005714f,
+ 0.002274f, -0.005512f, 0.005424f, -0.0003483f, 0.001698f, 0.0006733f, 0.00815f, -0.005264f, 0.002876f,
+ -0.0000476f, -0.003105f, -0.001815f, -0.00997f, 0.0004442f, -0.00557f, -0.007656f, -0.003036f, 0.002333f,
+ -0.001329f, 0.003675f, -0.00706f, -0.00807f, 0.001302f, -0.00788f, 0.003828f, -0.00995f, -0.006676f,
+ -0.001514f, -0.005756f, -0.001301f, 0.002438f, 0.007313f, 0.00913f, 0.003407f, -0.002222f, 0.00981f,
+ 0.0012245f, 0.009155f, 0.008194f, -0.004368f, -0.006615f, -0.0008593f, -0.00582f, 0.003933f, 0.005173f,
+ -0.001201f, 0.002068f, -0.00915f, 0.00797f, -0.002686f, -0.00958f, 0.005775f, 0.002453f, -0.003305f,
+ 0.00697f, 0.0001255f, 0.00218f, 0.009926f, -0.007473f, 0.007965f, 0.0066f, -0.003874f, 0.00658f,
+ -0.007618f, 0.000942f, 0.002375f, -0.007053f, -0.003815f, 0.00569f, -0.001039f, 0.004536f, 0.003641f,
+ 0.004314f, -0.003353f, 0.00857f, -0.0006385f, -0.000856f, -0.007175f, 0.007557f, -0.00978f, 0.002863f,
+ -0.005424f, 0.005215f, -0.000666f, -0.006275f, 0.005527f, 0.00827f, -0.006187f, -0.005993f, 0.000444f,
+ -0.0001373f, 0.00458f, 0.009315f, -0.005093f, -0.00154f, 0.002647f, 0.00586f, 0.007473f, -0.00275f,
+ 0.00046f, 0.008965f, -0.0002766f, 0.00485f, -0.00974f, 0.001143f, -0.00859f, -0.00027f, 0.007748f,
+ -0.00341f, -0.006992f, -0.006664f, 0.0005536f, 0.00828f, -0.003752f, 0.000553f, 0.008575f, 0.004868f,
+ -0.0004208f, -0.001359f, 0.002785f, 0.00247f, 0.0002398f, 0.00441f, -0.007866f, -0.00444f, 0.000598f,
+ 0.00985f, 0.0041f, 0.001188f, -0.00271f, -0.003817f, -0.0008373f, -0.004078f, 0.00927f, -0.002739f,
+ -0.004578f, 0.004482f, 0.000669f, -0.003761f, -0.00921f, -0.003477f, -0.00516f, -0.00893f, 0.0007854f,
+ 0.00305f, 0.004894f, 0.00165f, -0.009834f, -0.00859f, 0.000812f, -0.007256f, -0.00276f, -0.003006f,
+ 0.001255f, -0.002705f, 0.005894f, 0.00904f, 0.004845f, 0.00814f, -0.003206f, 0.007042f, -0.003756f,
+ -0.003365f, -0.00868f, 0.00358f, -0.009514f, 0.00952f, -0.005753f, 0.00848f, 0.003448f, 0.006912f,
+ -0.001069f, -0.0006742f, 0.00974f, -0.001088f, -0.0004857f, 0.00841f, 0.006027f, -0.00606f, -0.001904f,
+ -0.006058f, -0.004673f, 0.007572f, -0.009674f, -0.008896f, -0.002888f, -0.00806f, 0.00633f, -0.000787f,
+ -0.002151f, 0.002234f, -0.00991f, 0.00663f, -0.00541f, -0.006706f, -0.00598f, -0.00592f, 0.0001597f,
+ 0.001887f, -0.00104f, 0.00994f, 0.0083f, -0.009415f, -0.00954f, 0.0003498f, -0.009254f, 0.002195f,
+ 0.003555f, -0.007557f, 0.006336f, -0.00789f, -0.006927f, 0.005497f, -0.003809f, -0.002302f, -0.00952f,
+ -0.0007987f, -0.001707f, 0.00007784f, -0.006718f, -0.005337f, 0.008934f, 0.006355f, 0.006626f, 0.00514f,
+ 0.006844f, -0.005447f, -0.001604f, -0.0008254f, -0.004185f, -0.006702f, -0.001056f, -0.00847f, -0.005917f,
+ -0.002684f, -0.00482f, -0.009514f, 0.004032f, 0.003906f, 0.0048f, -0.004612f, 0.000876f, -0.00497f,
+ 0.008415f, -0.00986f, -0.00565f, -0.000717f, -0.003967f, -0.006863f, 0.00825f, -0.003292f, -0.00966f,
+ 0.00263f, 0.001377f, -0.0084f, 0.004414f, -0.0054f, 0.00609f, -0.009026f, -0.000778f, -0.008385f,
+ 0.008286f, -0.00352f, 0.00549f, 0.00738f, -0.007515f, -0.002409f, -0.00558f, -0.003153f, -0.005985f,
+ -0.00919f, 0.00001955f, 0.004105f, -0.0009418f, 0.001782f, 0.0007043f, -0.00539f, -0.004562f, -0.003515f,
+ -0.00916f, -0.00623f, 0.0002017f, -0.003117f, 0.00392f, 0.00738f, 0.001152f, -0.00806f, -0.005108f,
+ 0.00985f, -0.001203f, 0.00719f, 0.001182f, -0.0002191f, -0.00661f, -0.003593f, -0.001818f, 0.00765f,
+ 0.004604f, -0.005318f, -0.0009274f, 0.002466f, -0.0003357f, 0.00783f, -0.006584f, -0.00664f, 0.003544f,
+ -0.002964f, -0.00983f, 0.001785f, -0.000708f, -0.00793f, 0.00785f, 0.006046f, 0.007812f, 0.0096f,
+ 0.00849f, -0.001343f, 0.00623f, -0.007465f, 0.001237f, -0.00393f, -0.0007534f, -0.004776f, -0.002806f,
+ 0.00451f, -0.004726f, 0.00364f, 0.002312f, -0.00561f, -0.00462f, -0.001799f, -0.0005593f, 0.00191f,
+ -0.002151f, -0.0076f, 0.001353f, 0.001949f, -0.004097f, 0.005615f, 0.002104f, 0.00746f, -0.00824f,
+ -0.006596f, 0.009285f, -0.008026f, 0.00331f, -0.008736f, -0.00988f, -0.002468f, 0.003393f, -0.007675f,
+ -0.00852f, 0.0067f, 0.00552f, 0.00002897f, 0.0002024f, -0.004135f, 0.003683f, -0.001939f, -0.002998f,
+ -0.006897f, -0.00462f, 0.00989f, 0.001207f, 0.001254f, -0.0008793f, -0.004036f, -0.00255f, 0.00871f,
+ 0.00695f, 0.00251f, 0.005455f, -0.00592f, -0.001793f, -0.0005703f, -0.00213f, 0.004787f, -0.0025f,
+ -0.00712f, -0.003109f, -0.0074f, 0.003607f, -0.003696f, -0.001566f, 0.007812f, -0.004433f, 0.001471f,
+ 0.004066f, -0.001959f, -0.001853f, -0.00985f, 0.006023f, 0.006184f, -0.00586f, -0.002455f, 0.007687f,
+ -0.003036f, -0.001865f, 0.0052f, -0.005646f, 0.002298f, -0.0049f, -0.001856f, -0.003754f, -0.003891f,
+ 0.00979f, 0.008415f, -0.00886f, 0.009926f, 0.001531f, -0.001119f, -0.004818f, 0.007763f, -0.004997f,
+ 0.009415f, 0.002409f, 0.00149f, 0.003786f, -0.001091f, -0.00852f, 0.00888f, 0.0092f, 0.004227f,
+ 0.004055f, -0.001675f, -0.004677f, 0.003109f, 0.006733f, 0.00538f, 0.0086f, 0.002913f, -0.00939f,
+ -0.006355f, 0.00495f, -0.007866f, 0.00885f, 0.005394f, -0.00323f, 0.00578f, -0.00476f, 0.006634f,
+ -0.00769f, 0.001916f, -0.001957f, 0.00988f, 0.004417f, -0.00677f, 0.007565f, 0.00842f, -0.00919f,
+ -0.0055f, 0.003214f, 0.00413f, -0.00813f, 0.002834f, 0.005272f, -0.00954f, 0.006275f, -0.00836f,
+ 0.00561f, 0.00951f, 0.004837f, 0.00753f, 0.000762f, -0.002527f, -0.003277f, -0.00522f, 0.003021f,
+ 0.00706f, -0.008f, -0.00916f, -0.002863f, 0.002209f, -0.00828f, 0.00499f, -0.001951f, -0.002157f,
+ 0.004375f, 0.006233f, -0.007336f, -0.0002134f, 0.004395f, -0.004135f, -0.00865f, 0.001095f, 0.003302f,
+ -0.00732f, 0.002275f, 0.00976f, 0.002602f, -0.003263f, 0.00766f, 0.003126f, 0.001476f, -0.001589f,
+ 0.00351f, 0.007305f, 0.00553f, 0.007236f, -0.005352f, -0.006542f, -0.002747f, -0.002932f, -0.002441f,
+ -0.008575f, -0.00934f, -0.00197f, -0.004387f, 0.001285f, 0.003265f, 0.001039f, 0.004814f, -0.001674f,
+ -0.00887f, 0.003067f, -0.007866f, 0.00903f, 0.003162f, -0.004402f, 0.00029f, 0.00928f, -0.002539f,
+ -0.003176f, 0.002398f, 0.004284f, 0.001891f, -0.000756f, 0.00846f, 0.00686f, 0.001065f, -0.008934f,
+ -0.00705f, 0.002884f, -0.006603f, -0.004486f, 0.00396f, -0.009766f, -0.003494f, 0.004738f, 0.00899f,
+ 0.006016f, 0.007515f, 0.003511f, -0.00786f, 0.00949f, -0.00682f, 0.004265f, 0.00728f, 0.0047f,
+ 0.00902f, -0.00474f, -0.0005236f, 0.005547f, -0.002396f, -0.006386f, -0.007904f, 0.00722f, 0.005135f,
+ 0.000564f, -0.003956f, -0.00997f, -0.00982f, 0.001334f, 0.001509f, -0.002422f, -0.001891f, 0.002316f,
+ 0.00309f, -0.006355f, 0.007336f, -0.00487f, 0.00010824f, -0.0008583f, 0.002853f, 0.003754f, -0.006348f,
+ 0.00793f, 0.00723f, -0.00981f, -0.003706f, 0.00317f, -0.008446f, -0.002966f, -0.0009055f, 0.002184f,
+ 0.003096f, 0.003244f, 0.009674f, 0.002132f, 0.0016165f, -0.006443f, -0.00423f, -0.00905f, 0.001218f,
+ 0.004185f, 0.00935f, -0.00193f, 0.00179f, 0.004192f, -0.006424f, 0.002945f, 0.0005383f, 0.004173f,
+ -0.001795f, 0.00803f, 0.006462f, -0.00502f, -0.003693f, 0.001283f, -0.001253f, 0.00715f, -0.002525f,
+ 0.00824f, -0.008995f, -0.00549f, 0.004345f, 0.002205f, 0.00827f, -0.004692f, -0.000714f, 0.00686f,
+ 0.003473f, 0.009636f, -0.001164f, -0.002003f, 0.00674f, -0.008224f, -0.00462f, 0.00948f, 0.002377f,
+ 0.00781f, 0.002586f, 0.00744f, -0.001399f, 0.003376f, 0.005226f, -0.003313f, 0.007713f, -0.004364f,
+ 0.0005984f, -0.004997f, 0.00611f, -0.00772f, 0.006653f, -0.002066f, 0.00196f, 0.004326f, 0.00797f,
+ -0.002724f, -0.005474f, 0.007782f, 0.00728f, 0.007442f, -0.002098f, 0.005306f, -0.007206f, -0.001974f,
+ 0.0000934f, -0.003695f, -0.007633f, 0.006306f, 0.006794f, -0.002983f, -0.00424f, 0.0018215f, 0.000337f,
+ -0.00849f, -0.00768f, 0.00659f, 0.002615f, -0.008514f, 0.00282f, 0.003607f, 0.009544f, 0.00924f,
+ 0.00949f, -0.006145f, -0.003231f, -0.001794f, 0.006004f, -0.0005646f, 0.005558f, 0.00455f, -0.005344f,
+ 0.003881f, -0.00979f, -0.00946f, -0.0007844f, 0.00922f, 0.001785f, 0.00854f, -0.0094f, -0.005318f,
+ 0.006126f, -0.0023f, -0.00576f, -0.00449f, -0.00931f, 0.006935f, -0.007477f, 0.001311f, 0.00797f,
+ 0.003727f, -0.000941f, -0.00816f, -0.00646f, -0.004032f, -0.002666f, 0.009735f, -0.007072f, -0.007362f,
+ 0.003067f, 0.007732f, 0.00457f, 0.001084f, -0.0085f, 0.00392f, 0.0006833f, -0.001245f, -0.00907f,
+ -0.00574f, -0.006786f, 0.005386f, -0.001034f, 0.00993f, 0.00913f, -0.001817f, 0.00613f, 0.002943f,
+ -0.00825f, -0.008804f, -0.00333f, -0.00754f, 0.00971f, -0.0002515f, 0.004715f, 0.006126f, 0.004963f,
+ 0.000591f, -0.00912f, -0.002254f, 0.0006866f, -0.00998f, 0.001433f, 0.00787f, -0.00933f, -0.004326f,
+ 0.00771f, 0.002146f, -0.006893f, -0.003952f, 0.001425f, -0.006123f, 0.00807f, -0.00702f, -0.006565f,
+ 0.001073f, 0.001927f, -0.004864f, 0.000273f, -0.008224f, 0.00826f, -0.001634f, -0.006905f, -0.00831f,
+ -0.00594f, -0.002901f, -0.001668f, -0.00987f, 0.006264f, -0.00452f, -0.00924f, 0.0096f, 0.001883f,
+ 0.005104f, 0.003798f, -0.00859f, 0.002163f, 0.000841f, 0.0001701f, -0.00549f, 0.008896f, -0.00641f,
+ -0.0086f, 0.0094f, -0.000762f, 0.000456f, 0.002989f, -0.002628f, -0.00817f, -0.000566f, 0.005928f,
+ -0.002151f, -0.004353f, -0.00403f, -0.0009055f, 0.00814f, -0.005325f, 0.001588f, -0.00841f, 0.001743f,
+ -0.00651f, -0.002144f, 0.007225f, -0.00623f, -0.002226f, -0.004345f, 0.007904f, -0.007748f, 0.001748f,
+ -0.003706f, -0.00867f, 0.00432f, -0.00954f, 0.0089f, -0.00607f, 0.00603f, 0.00857f, 0.003477f,
+ -0.0007524f, 0.000207f, -0.00069f, 0.00925f, -0.003777f, -0.0002985f, -0.001528f, 0.005077f, 0.007435f,
+ 0.005886f, -0.001046f, 0.00491f, -0.00346f, -0.00944f, 0.0085f, 0.00011885f, -0.007687f, 0.005142f,
+ -0.005444f, 0.005745f, 0.00565f, -0.005436f, 0.002954f, 0.0009327f, -0.001357f, -0.006035f, -0.0038f,
+ -0.00277f, 0.001201f, -0.006207f, 0.00892f, -0.00958f, 0.002432f, 0.009636f, -0.006413f, -0.000683f,
+ 0.000565f, 0.00664f, 0.006424f, 0.004097f, 0.00754f, -0.0082f, 0.002491f, 0.00003463f, -0.001084f,
+ 0.009895f, -0.001157f, -0.0044f, -0.003542f, -0.005615f, 0.00814f, -0.002285f, 0.009605f, 0.008865f,
+ 0.00906f, 0.0059f, -0.00735f, 0.0007353f, -0.00103f, -0.004868f, 0.007378f, 0.0074f, -0.001978f,
+ -0.00555f, -0.004807f, 0.006527f, -0.00968f, -0.001172f, -0.00988f, 0.00564f, 0.00213f, 0.004536f,
+ -0.001937f, 0.007717f, 0.00901f, -0.000779f, 0.003677f, -0.00831f, -0.005554f, -0.005386f, -0.00959f,
+ -0.00885f, 0.007416f, -0.00618f, 0.001828f, -0.0004594f, -0.0006585f, -0.009636f, 0.007168f, -0.00868f,
+ -0.00848f, -0.003803f, -0.00875f, 0.002884f, 0.0002168f, 0.005486f, 0.00989f, -0.00828f, 0.00000566f,
+ -0.00811f, -0.003649f, 0.003096f, 0.00365f, -0.002344f, -0.00879f, 0.006554f, -0.0003917f, 0.00814f,
+ -0.001268f, 0.00318f, 0.003078f, -0.002525f, -0.00848f, -0.0004594f, 0.003298f, 0.003225f, 0.002396f,
+ -0.00686f, -0.00503f, 0.007534f, 0.009636f, -0.00483f, -0.00788f, 0.004208f, 0.0003386f, -0.001907f,
+ 0.0008726f, 0.004757f, -0.00989f, -0.007004f, 0.0063f, -0.006622f, -0.00978f, 0.00899f, 0.002703f,
+ 0.00864f, -0.009964f, 0.00617f, 0.005688f, 0.00846f, 0.00576f, 0.00788f, 0.0002687f, 0.00853f,
+ -0.0002925f, -0.003065f, -0.0000076f, 0.007706f, 0.002523f, -0.00212f, -0.00532f, 0.007347f, 0.001383f,
+ -0.004616f, -0.008514f, -0.00672f, -0.00883f, 0.00195f, -0.003576f, -0.006306f, 0.005207f, -0.002554f,
+ -0.001393f, -0.005966f, 0.005707f, -0.001915f, -0.002625f, 0.007797f, 0.00756f, -0.003504f, -0.004597f,
+ -0.002932f, -0.006004f, -0.00928f, 0.006176f, 0.004486f, -0.00594f, -0.009476f, 0.006813f, -0.00312f,
+ -0.0014715f, 0.003428f, 0.00991f, -0.004757f, -0.0006704f, 0.001299f, 0.002937f, 0.005505f, 0.00843f,
+ -0.004585f, -0.00931f, 0.001348f, -0.008545f, 0.001818f, -0.002092f, -0.00689f, -0.009026f, 0.00949f,
+ 0.00166f, 0.000547f, -0.000135f, -0.000778f, -0.001905f, 0.002375f, 0.00974f, -0.004833f, 0.0094f,
+ 0.004898f, -0.00005084f, -0.001083f, -0.00499f, -0.00918f, -0.004326f, 0.001663f, 0.00681f, -0.003672f,
+ 0.00694f, -0.00438f, -0.007336f, 0.0089f, 0.00451f, -0.00564f, 0.00986f, 0.006157f, -0.00539f,
+ -0.00551f, 0.00947f, 0.00881f, 0.005436f, -0.008354f, -0.005894f, 0.002949f, 0.0009093f, -0.002594f,
+ -0.002369f, 0.00507f, -0.0088f, 0.0051f, -0.0004027f, 0.001238f, 0.00854f, 0.008804f, 0.0005126f,
+ 0.00786f, -0.001762f, -0.002861f, 0.001445f, -0.006268f, -0.002352f, -0.00737f, -0.006973f, 0.005512f,
+ 0.005188f, 0.00951f, -0.006603f, 0.002338f, -0.001549f, 0.000984f, 0.00819f, 0.002796f, -0.003716f,
+ -0.00731f, -0.004124f, -0.00725f, -0.002102f, 0.00493f, 0.00313f, -0.002922f, 0.0076f, 0.00537f,
+ -0.00929f, 0.00819f, 0.00932f, 0.00975f, 0.00345f, 0.001942f, 0.001167f, -0.003649f, -0.00787f,
+ 0.00857f, 0.00359f, 0.0015545f, -0.001327f, -0.00813f, 0.006893f, -0.00185f, -0.00689f, 0.00396f,
+ 0.003069f, -0.002464f, -0.003843f, 0.004967f, -0.00865f, -0.00503f, 0.003744f, 0.0003045f, 0.006298f,
+ 0.0011835f, 0.004654f, -0.00736f, -0.00171f, -0.00807f, -0.00462f, 0.00526f, 0.00905f, -0.006798f,
+ -0.0001366f, 0.00969f, -0.005116f, 0.007614f, -0.007317f, -0.0052f, 0.0007396f, 0.00735f, -0.00347f,
+ -0.002716f, 0.005177f, 0.003021f, -0.0026f, 0.00685f, -0.003214f, 0.001522f, -0.000601f, 0.00642f,
+ 0.002537f, 0.009705f, 0.0004787f, 0.00933f, 0.005848f, -0.00789f, -0.005962f, -0.003063f, 0.00734f,
+ 0.008644f, -0.00652f, 0.00389f, 0.00219f, -0.005104f, 0.004536f, 0.006638f, -0.00424f, -0.000966f,
+ -0.00242f, -0.003347f, 0.000761f, -0.006855f, -0.00816f, -0.00339f, 0.003853f, 0.00752f, 0.000502f,
+ 0.00394f, 0.00875f, -0.001621f, -0.00972f, -0.000609f, -0.00796f, -0.003817f, 0.004166f, 0.003754f,
+ -0.007385f, -0.001137f, -0.004467f, -0.001389f, 0.0093f, 0.003342f, -0.005795f, -0.00792f, 0.0082f,
+ 0.00557f, -0.00656f, 0.003494f, 0.002573f, 0.0014925f, -0.003141f, 0.002457f, 0.00789f, 0.0071f,
+ -0.004307f, 0.001407f, 0.000862f, -0.007122f, -0.005196f, -0.00306f, -0.00808f, -0.004246f, 0.00772f,
+ 0.006165f, 0.002718f, -0.00569f, -0.000952f, -0.005917f, 0.003725f, -0.0008345f, -0.00265f, -0.0063f,
+ 0.001651f, -0.00962f, 0.006016f, 0.005035f, -0.004337f, 0.00552f, 0.00373f, -0.0005794f, 0.00202f,
+ -0.006985f, -0.00747f, -0.001536f, -0.007122f, -0.00937f, -0.00641f, -0.00871f, -0.00182f, 0.0000921f,
+ 0.007484f, -0.00974f, 0.00521f, 0.001293f, 0.0006785f, -0.00888f, 0.005943f, -0.00055f, -0.00676f,
+ -0.0000759f, 0.00414f, 0.007065f, 0.0000026f, -0.003262f, -0.001492f, 0.00802f, 0.003487f, -0.00977f,
+ -0.006863f, -0.004192f, -0.007458f, -0.001814f, -0.004482f, 0.008835f, -0.004826f, 0.00872f, 0.004635f,
+ 0.007317f, -0.00498f, -0.003536f, -0.004375f, 0.005074f, -0.002346f, 0.00384f, 0.00853f, -0.00416f,
+ -0.007164f, 0.0006695f, 0.0008926f, -0.001899f, 0.005783f, 0.00535f, 0.00557f, -0.00402f, 0.00006354f,
+ -0.001951f, -0.002588f, -0.005276f, -0.001826f, -0.006058f, 0.001427f, -0.009735f, 0.009224f, -0.00006384f,
+ -0.002344f, -0.00004303f, 0.00946f, -0.00841f, -0.00199f, -0.00494f, -0.00841f, -0.008835f, 0.00596f,
+ -0.006348f, 0.007545f, 0.001068f, 0.00624f, -0.005306f, 0.001778f, -0.0009108f, -0.0048f, -0.000988f,
+ -0.0005326f, -0.005173f, 0.003748f, 0.001759f, -0.003914f, -0.006252f, 0.004486f, 0.00882f, 0.006035f,
+ -0.002064f, -0.003456f, -0.006615f, -0.004963f, 0.003847f, -0.00342f, 0.006115f, -0.005974f, 0.002302f,
+ -0.00856f, 0.006847f, -0.006416f, -0.00226f, 0.005363f, 0.008224f, -0.0003793f, -0.009224f, -0.002298f,
+ -0.005264f, -0.000623f, -0.00803f, -0.007706f, 0.001601f, 0.007046f, -0.004757f, 0.0044f, 0.0046f,
+ -0.003963f, -0.007156f, 0.0004344f, 0.005592f, -0.00053f, 0.001337f, 0.009186f, -0.00897f, -0.005627f,
+ -0.001647f, 0.0092f, 0.0016985f, -0.003633f, 0.008064f, 0.004543f, -0.00698f, -0.005695f, 0.00478f,
+ -0.001252f, 0.00881f, -0.00876f, -0.00202f, -0.009514f, 0.000278f, -0.005013f, 0.007404f, -0.0005183f,
+ -0.001753f, -0.00442f, 0.00199f, -0.008156f, -0.008865f, -0.00308f, -0.00973f, -0.005714f, 0.007996f,
+ -0.004395f, 0.00455f, -0.00862f, -0.0004373f, 0.00885f, 0.00984f, -0.00422f, 0.00382f, 0.001032f,
+ -0.0003273f, 0.004593f, 0.004982f, 0.00259f, -0.00604f, 0.000337f, 0.009186f, -0.003052f, -0.005085f,
+ 0.005188f, 0.00417f, 0.004345f, 0.003605f, -0.000079f, -0.009575f, 0.00894f, 0.00992f, 0.008f,
+ -0.00476f, 0.00871f, -0.007538f, -0.00739f, -0.0069f, -0.008804f, -0.00526f, -0.001096f, 0.0009003f,
+ 0.005367f, 0.005283f, 0.005047f, -0.0003638f, -0.001063f, -0.00399f, 0.0081f, 0.004395f, 0.00805f,
+ -0.00531f, 0.001779f, 0.003176f, 0.00775f, 0.0071f, 0.00682f, -0.0007925f, -0.00318f, 0.00897f,
+ -0.006172f, -0.00376f, -0.002518f, -0.007618f, 0.00728f, 0.007042f, 0.006863f, -0.005936f, 0.004787f,
+ 0.005726f, -0.0009775f, -0.004757f, -0.0002875f, 0.00844f, 0.005302f, 0.003609f, 0.005863f, 0.005436f,
+ 0.004433f, -0.002047f, 0.003025f, 0.007694f, -0.007565f, -0.006165f, -0.00202f, -0.004505f, -0.004784f,
+ 0.00921f, -0.00059f, 0.004604f, 0.002249f, -0.004814f, -0.00519f, -0.00625f, 0.0000181f, 0.00531f,
+ 0.001533f, 0.006847f, -0.00959f, -0.00846f, -0.00928f, -0.006386f, 0.002766f, -0.005516f, -0.0071f,
+ 0.006073f, 0.00907f, 0.005585f, -0.00644f, -0.00855f, -0.003466f, -0.009514f, -0.00914f, 0.003702f,
+ -0.00503f, -0.00497f, 0.00796f, -0.007763f, 0.007614f, 0.00544f, 0.00933f, 0.008316f, -0.003374f,
+ -0.00763f, 0.002035f, 0.002916f, -0.0006156f, -0.003872f, -0.0002236f, -0.00917f, -0.003334f, -0.004528f,
+ 0.00978f, -0.0005903f, -0.006786f, -0.00913f, -0.009254f, -0.006096f, 0.002638f, 0.003622f, -0.007805f,
+ 0.00873f, 0.001586f, -0.003641f, 0.001905f, -0.00311f, -0.000627f, 0.005222f, -0.004986f, 0.000169f,
+ -0.007088f, -0.00783f, -0.004852f, 0.000881f, 0.004627f, -0.00405f, -0.006405f, 0.003586f, 0.002258f,
+ -0.00988f, 0.000979f, -0.002949f, 0.00912f, 0.00885f, -0.002743f, 0.00833f, 0.003326f, -0.0003536f,
+ -0.003792f, -0.00941f, 0.000213f, -0.002922f, -0.001483f, -0.003443f, -0.00307f, -0.005894f, 0.003468f,
+ 0.001887f, -0.006832f, -0.00828f, -0.006172f, -0.00746f, 0.002558f, 0.00998f, 0.001123f, -0.00611f,
+ -0.005863f, -0.0007744f, 0.003525f, -0.00573f, 0.0009665f, -0.002241f, -0.0007176f, -0.00918f, -0.00794f,
+ 0.00216f, -0.0049f, 0.002016f, 0.006763f, 0.00445f, 0.004715f, 0.001216f, 0.002068f, -0.001449f,
+ 0.00249f, 0.00953f, -0.0007606f, -0.00256f, 0.0006046f, -0.004406f, -0.009415f, 0.003393f, -0.004787f,
+ 0.002743f, 0.00841f, 0.00972f, -0.00194f, 0.004185f, 0.00585f, 0.007504f, -0.00622f, 0.001107f,
+ -0.0044f, 0.00576f, 0.00772f, 0.00818f, 0.00536f, 0.002644f, -0.00465f, -0.0087f, -0.00816f,
+ 0.004547f, 0.001851f, -0.005634f, 0.003641f, 0.007618f, -0.00985f, 0.009766f, -0.00459f, -0.002457f,
+ 0.00393f, -0.008224f, -0.003952f, -0.00813f, 0.007393f, 0.005188f, 0.007126f, 0.00639f, 0.001274f,
+ 0.002176f, -0.00894f, 0.002445f, -0.001414f, -0.00952f, 0.004444f, -0.001607f, -0.001501f, 0.00857f,
+ -0.005585f, -0.000724f, 0.003077f, 0.007797f, 0.007473f, 0.003546f, -0.00948f, -0.003933f, 0.004017f,
+ -0.003176f, 0.001448f, 0.002731f, 0.003504f, 0.00831f, 0.007763f, 0.002405f, -0.006264f, 0.00536f,
+ -0.0083f, 0.001413f, -0.0003624f, -0.001836f, 0.006027f, 0.005173f, -0.003073f, -0.008354f, 0.00164f,
+ -0.001941f, -0.002981f, 0.008156f, -0.004414f, -0.005413f, 0.002527f, -0.0004022f, 0.00625f, 0.008575f,
+ 0.00637f, 0.00765f, 0.0003421f, 0.00798f, -0.005287f, 0.00808f, -0.00646f, 0.000603f, 0.00955f,
+ 0.00889f, -0.002356f, -0.005306f, 0.002333f, 0.009514f, -0.003855f, 0.0054f, 0.005417f, 0.000675f,
+ -0.004402f, 0.00933f, -0.005234f, -0.00958f, 0.0089f, 0.009254f, -0.00757f, 0.0098f, -0.001879f,
+ 0.00789f, 0.002071f, 0.000677f, -0.007763f, -0.001941f, 0.001637f, -0.003653f, 0.00528f, 0.007465f,
+ -0.00557f, -0.006004f, -0.009476f, 0.000802f, 0.002075f, -0.007168f, 0.00398f, -0.006268f, 0.006287f,
+ -0.009575f, -0.001453f, 0.0092f, -0.00995f, -0.002644f, 0.005024f, 0.00966f, -0.006878f, 0.00995f,
+ -0.001319f, -0.002237f, 0.002209f, 0.00861f, -0.00883f, -0.003874f, -0.002903f, 0.00992f, -0.0016365f,
+ -0.00633f, 0.00823f, -0.00771f, -0.003204f, -0.00563f, 0.00563f, 0.00805f, -0.004936f, 0.003477f,
+ 0.00741f, 0.0043f, 0.006905f};
bias_data = {
- -0.003569f, -0.00789f, 0.002047f, -0.002829f, -0.000592f, -0.003313f, 0.00805f, -0.007397f, -0.006844f,
- 0.00809f, -0.003479f, -0.0017395f, 0.007904f, -0.009056f, 0.005806f, 0.008896f, 0.004585f, -0.002356f,
- -0.003815f, -0.00673f, 0.005787f, -0.001892f, 0.003233f, 0.005566f, -0.007626f, 0.00835f, 0.009415f,
- -0.005707f, -0.0002623f, -0.007496f, -0.003569f, -0.00568f, -0.000693f, 0.00857f, 0.006607f, 0.005245f,
- -0.0006056f, 0.008896f, 0.0000753f, -0.0001878f, -0.00957f, -0.003975f, 0.003006f, -0.006794f, -0.007935f,
- 0.004246f, 0.004948f, 0.008896f, -0.0046f, -0.002516f, -0.000887f, -0.004555f, 0.002409f, 0.00364f,
- -0.002491f, 0.004204f, 0.00010544f, 0.000783f, 0.00895f, 0.005367f, -0.004097f, -0.00592f, 0.009834f,
- 0.001047f, 0.00677f, -0.004974f, -0.003212f, 0.00771f, -0.002256f, -0.001008f, -0.008484f, -0.002802f,
- 0.00462f, 0.001329f, 0.004562f, 0.006687f, 0.002615f, 0.001449f, -0.0006714f, -0.001256f, 0.0003803f,
- -0.005238f, -0.004112f, 0.001925f, -0.002827f, -0.00861f, -0.004723f, -0.002748f, -0.006134f, -0.00342f,
- -0.007168f, 0.006626f, 0.001948f, -0.003838f, 0.006878f, -0.001717f, -0.003347f, -0.006287f, 0.00455f,
- -0.00136f, 0.004364f, 0.006573f, -0.007545f, -0.004845f, 0.00883f, 0.00572f, 0.00675f, -0.003206f,
- -0.00842f, 0.006428f, 0.00394f, 0.000642f, -0.002016f, 0.004486f, 0.009964f, -0.00918f, -0.0084f,
- 0.001972f, 0.002031f, -0.00976f, -0.004494f, 0.006958f, -0.00262f, 0.00874f, 0.009865f, 0.0075f,
- -0.00271f, -0.006386f, 0.002562f, 0.006397f, 0.00699f, -0.001731f, 0.005432f, 0.00271f, -0.006447f,
- -0.00892f, 0.002897f, -0.0004315f, 0.001859f, -0.003462f, 0.007122f, -0.005135f, 0.005363f, 0.0051f,
- 0.00806f, 0.00721f, 0.00799f, 0.00945f, -0.006943f, 0.006393f, 0.00935f, -0.0003269f, -0.004536f,
- -0.006752f, 0.0095f, 0.00628f, -0.00418f, 0.001624f, -0.005577f, -0.008606f, 0.005486f, 0.002077f,
- 0.007378f, 0.004734f, 0.0035f, 0.00991f, -0.001775f, 0.00247f, -0.00613f, 0.007202f, -0.00596f,
- 0.003876f, -0.00789f, 0.004505f, 0.004795f, -0.002575f, -0.002932f, -0.003098f, -0.005463f, -0.00912f,
- -0.00729f, 0.004486f, 0.006138f, 0.006924f, -0.00722f, 0.00841f, -0.001812f, -0.00959f, -0.000497f,
- -0.00513f, -0.006042f, 0.007645f};
+ -0.003569f, -0.00789f, 0.002047f, -0.002829f, -0.000592f, -0.003313f, 0.00805f, -0.007397f, -0.006844f,
+ 0.00809f, -0.003479f, -0.0017395f, 0.007904f, -0.009056f, 0.005806f, 0.008896f, 0.004585f, -0.002356f,
+ -0.003815f, -0.00673f, 0.005787f, -0.001892f, 0.003233f, 0.005566f, -0.007626f, 0.00835f, 0.009415f,
+ -0.005707f, -0.0002623f, -0.007496f, -0.003569f, -0.00568f, -0.000693f, 0.00857f, 0.006607f, 0.005245f,
+ -0.0006056f, 0.008896f, 0.0000753f, -0.0001878f, -0.00957f, -0.003975f, 0.003006f, -0.006794f, -0.007935f,
+ 0.004246f, 0.004948f, 0.008896f, -0.0046f, -0.002516f, -0.000887f, -0.004555f, 0.002409f, 0.00364f,
+ -0.002491f, 0.004204f, 0.00010544f, 0.000783f, 0.00895f, 0.005367f, -0.004097f, -0.00592f, 0.009834f,
+ 0.001047f, 0.00677f, -0.004974f, -0.003212f, 0.00771f, -0.002256f, -0.001008f, -0.008484f, -0.002802f,
+ 0.00462f, 0.001329f, 0.004562f, 0.006687f, 0.002615f, 0.001449f, -0.0006714f, -0.001256f, 0.0003803f,
+ -0.005238f, -0.004112f, 0.001925f, -0.002827f, -0.00861f, -0.004723f, -0.002748f, -0.006134f, -0.00342f,
+ -0.007168f, 0.006626f, 0.001948f, -0.003838f, 0.006878f, -0.001717f, -0.003347f, -0.006287f, 0.00455f,
+ -0.00136f, 0.004364f, 0.006573f, -0.007545f, -0.004845f, 0.00883f, 0.00572f, 0.00675f, -0.003206f,
+ -0.00842f, 0.006428f, 0.00394f, 0.000642f, -0.002016f, 0.004486f, 0.009964f, -0.00918f, -0.0084f,
+ 0.001972f, 0.002031f, -0.00976f, -0.004494f, 0.006958f, -0.00262f, 0.00874f, 0.009865f, 0.0075f,
+ -0.00271f, -0.006386f, 0.002562f, 0.006397f, 0.00699f, -0.001731f, 0.005432f, 0.00271f, -0.006447f,
+ -0.00892f, 0.002897f, -0.0004315f, 0.001859f, -0.003462f, 0.007122f, -0.005135f, 0.005363f, 0.0051f,
+ 0.00806f, 0.00721f, 0.00799f, 0.00945f, -0.006943f, 0.006393f, 0.00935f, -0.0003269f, -0.004536f,
+ -0.006752f, 0.0095f, 0.00628f, -0.00418f, 0.001624f, -0.005577f, -0.008606f, 0.005486f, 0.002077f,
+ 0.007378f, 0.004734f, 0.0035f, 0.00991f, -0.001775f, 0.00247f, -0.00613f, 0.007202f, -0.00596f,
+ 0.003876f, -0.00789f, 0.004505f, 0.004795f, -0.002575f, -0.002932f, -0.003098f, -0.005463f, -0.00912f,
+ -0.00729f, 0.004486f, 0.006138f, 0.006924f, -0.00722f, 0.00841f, -0.001812f, -0.00959f, -0.000497f,
+ -0.00513f, -0.006042f, 0.007645f};
}
TEST(AttentionTest, Causal_EmptyPastState) {
@@ -2494,15 +2448,14 @@ void RawAttentionPastStateBatch1(bool past_present_share_buffer) {
if (!past_present_share_buffer) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data);
} else {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data,
- kMaskIndexEnd, 0, past_sequence_length + sequence_length + 4,
- true, false, true, {}, {}, 0, nullptr, nullptr,
- true);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data,
+ AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, past_sequence_length + sequence_length + 4,
+ true, false, true, {}, {}, 0, true);
}
}
@@ -2624,15 +2577,14 @@ void RawAttentionPastStateBatch2(bool past_present_share_buffer) {
if (!past_present_share_buffer) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data);
} else {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data,
- kMaskIndexEnd, 0, past_sequence_length + sequence_length,
- true, false, true, {}, {}, 0, nullptr, nullptr,
- true);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data,
+ AttentionMaskType::MASK_1D_KEY_SEQ_LEN, 0, past_sequence_length + sequence_length,
+ true, false, true, {}, {}, 0, true);
}
}
@@ -2744,15 +2696,16 @@ void RawAttentionPastStateBatch2WithPadding(bool past_present_share_buffer) {
if (!past_present_share_buffer) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data, kMaskIndexEndAndStart);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data,
+ AttentionMaskType::MASK_1D_END_START);
} else {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
- use_past_state, past_sequence_length, &past_data, &present_data, kMaskIndexEndAndStart,
- 0, past_sequence_length + sequence_length + 4,
- true, false, true, {}, {}, 0, nullptr, nullptr,
- true);
+ batch_size, sequence_length, hidden_size, number_of_heads, false, is_unidirectional,
+ use_past_state, past_sequence_length, &past_data, &present_data,
+ AttentionMaskType::MASK_1D_END_START,
+ 0, past_sequence_length + sequence_length + 4,
+ true, false, true, {}, {}, 0, true);
}
}
@@ -2801,7 +2754,8 @@ TEST(AttentionTest, AttentionBatch2MaskIndex2) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_END_START);
}
TEST(AttentionTest, AttentionRightPaddingMaskIndex2) {
@@ -2838,7 +2792,8 @@ TEST(AttentionTest, AttentionRightPaddingMaskIndex2) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_END_START);
}
TEST(AttentionTest, AttentionLeftPaddingMaskIndex2) {
@@ -2875,7 +2830,8 @@ TEST(AttentionTest, AttentionLeftPaddingMaskIndex2) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_END_START);
}
TEST(AttentionTest, AttentionBatch2LeftPaddingMaskIndex2) {
@@ -2916,7 +2872,8 @@ TEST(AttentionTest, AttentionBatch2LeftPaddingMaskIndex2) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_END_START);
}
TEST(AttentionTest, Attention3DMask) {
@@ -2961,7 +2918,8 @@ TEST(AttentionTest, Attention3DMask) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMask3D);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_3D_ATTENTION);
}
TEST(AttentionTest, AttentionBatch2AttentionMask) {
@@ -3002,7 +2960,8 @@ TEST(AttentionTest, AttentionBatch2AttentionMask) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_2D_KEY_PADDING);
}
TEST(AttentionTest, AttentionUnidirectional3DMask) {
@@ -3047,7 +3006,8 @@ TEST(AttentionTest, AttentionUnidirectional3DMask) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMask3D);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_3D_ATTENTION);
}
TEST(AttentionTest, AttentionUnidirectionalAttentionMask) {
@@ -3088,7 +3048,8 @@ TEST(AttentionTest, AttentionUnidirectionalAttentionMask) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_2D_KEY_PADDING);
}
TEST(AttentionTest, AttentionMask1DEndNoWord) {
@@ -3130,7 +3091,8 @@ TEST(AttentionTest, AttentionMask1DEndNoWord) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEnd);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_KEY_SEQ_LEN);
}
TEST(AttentionTest, AttentionMask1DNoWord) {
@@ -3172,7 +3134,8 @@ TEST(AttentionTest, AttentionMask1DNoWord) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_END_START);
}
TEST(AttentionTest, AttentionMask2DNoWord) {
@@ -3214,7 +3177,8 @@ TEST(AttentionTest, AttentionMask2DNoWord) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_2D_KEY_PADDING);
}
TEST(AttentionTest, AttentionMask3DNoWord) {
@@ -3256,7 +3220,8 @@ TEST(AttentionTest, AttentionMask3DNoWord) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMask3D);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_3D_ATTENTION);
}
TEST(AttentionTest, AttentionDummyMask2D) {
@@ -3297,7 +3262,8 @@ TEST(AttentionTest, AttentionDummyMask2D) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskDummy);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_2D_DUMMY);
}
TEST(AttentionTest, Attention4DMask) {
@@ -3342,7 +3308,7 @@ TEST(AttentionTest, Attention4DMask) {
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
use_float16, is_unidirectional, use_past_state, past_sequence_length,
- past_data, present_data, kMask4D, input_hidden_size, max_sequence_length,
+ past_data, present_data, AttentionMaskType::MASK_4D_MEGATRON, input_hidden_size, max_sequence_length,
disable_cpu);
}
@@ -3384,7 +3350,8 @@ TEST(AttentionTest, AttentionMaskIndexOutOfRange) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskIndexEndAndStart);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_1D_END_START);
}
#if !defined(__wasm__)
@@ -3534,7 +3501,8 @@ TEST(AttentionTest, AttentionPrunedModel) {
const std::vector* present_data = nullptr;
RunAttentionTest(input_data, weight_data, bias_data, mask_data, output_data,
batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data, kMaskRaw, input_hidden_size);
+ use_float16, is_unidirectional, use_past_state, past_sequence_length, past_data, present_data,
+ AttentionMaskType::MASK_2D_KEY_PADDING, input_hidden_size);
}
static void RunModelWithRandomInput(
@@ -3682,59 +3650,6 @@ TEST(AttentionTest, DISABLED_Attention_Mask1D_Fp16_B2_FusedNoPadding) {
}
}
-TEST(AttentionTest, AttentionBatch1_No_Weights) {
- int batch_size = 1;
- int sequence_length = 2;
- int hidden_size = 4;
- int number_of_heads = 2;
- int kv_sequence_length = 3;
- int v_hidden_size = 2;
-
- // query: (batch_size, sequence_length, hidden_size)
- std::vector input_data = {
- 0.8f, -0.5f, 0.0f, 1.f,
- 0.5f, 0.2f, 0.3f, -0.6f};
-
- std::vector weight_data = {};
-
- // (hidden_size + hidden_size + v_hidden_size)
- std::vector bias_data = {
- -0.5f, 0.6f, 1.2f, 2.1f, 0.5f, 0.7f, 0.2f, 1.2f, 0.5f, 0.4f};
-
- std::vector mask_index_data = {2L};
-
- // (batch_size, kv_sequence_length, hidden_size)
- std::vector key_data = {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f};
-
- // (batch_size, kv_sequence_length, v_hidden_size)
- std::vector value_data = {0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f};
-
- // (batch_size, sequence_length, v_hidden_size)
- std::vector output_data = {0.99434918f, 0.0f, 0.9887343f, 0.74572039f};
-
- bool use_float16 = false;
- bool is_unidirectional = false;
- bool use_past_state = false;
- int past_sequence_length = 0;
- const std::vector* past_data = nullptr;
- const std::vector* present_data = nullptr;
- MaskIndexType mask_index_type = kMaskIndexEnd;
- int input_hidden_size = 0;
- int max_sequence_length = 0;
- constexpr bool disable_cpu = true; // not supported in cpu right now.
- constexpr bool disable_cuda = false;
- constexpr bool disable_rocm = true; // not supported in rocm right now.
- const std::vector qkv_sizes = {hidden_size, hidden_size, v_hidden_size};
- const std::vector& extra_add_data = {};
-
- RunAttentionTest(input_data, weight_data, bias_data, mask_index_data, output_data,
- batch_size, sequence_length, hidden_size, number_of_heads,
- use_float16, is_unidirectional, use_past_state, past_sequence_length,
- past_data, present_data, mask_index_type, input_hidden_size, max_sequence_length,
- disable_cpu, disable_cuda, disable_rocm, qkv_sizes, extra_add_data,
- kv_sequence_length, &key_data, &value_data);
-}
-
#ifndef ENABLE_TRAINING // Prepacking is enabled only on non-training builds
TEST(AttentionTest, SharedPrepackedWeights) {
int batch_size = 2;
diff --git a/onnxruntime/test/contrib_ops/cross_attention_op_test.cc b/onnxruntime/test/contrib_ops/cross_attention_op_test.cc
new file mode 100644
index 0000000000000..ae1e395a80c4d
--- /dev/null
+++ b/onnxruntime/test/contrib_ops/cross_attention_op_test.cc
@@ -0,0 +1,159 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#include "core/platform/env_var_utils.h"
+#include "gtest/gtest.h"
+#include "test/common/tensor_op_test_utils.h"
+#include "test/common/cuda_op_test_utils.h"
+#include "test/providers/provider_test_utils.h"
+#include "test/util/include/scoped_env_vars.h"
+#include "contrib_ops/cpu/bert/attention_common.h"
+
+namespace onnxruntime {
+using contrib::AttentionMaskType;
+namespace test {
+
+static void RunCrossAttentionTest(
+ const std::vector& query_data, // query: [batch_size, sequence_length, hidden_size]
+ const std::vector& key_data, // key: [batch_size, kv_sequence_length, hidden_size]
+ const std::vector& value_data, // value: [batch_size, kv_sequence_length, v_hidden_size]
+ const std::vector