feat: 完成控制代码编写

This commit is contained in:
2024-03-02 16:05:24 +08:00
parent 038098ff2d
commit 0b9db20066
43 changed files with 760 additions and 2166 deletions

View File

@@ -42,7 +42,14 @@ void by_pwm_update_duty(uint32_t update_pwm_duty1, uint32_t update_pwm_duty2)
pwm_set_duty(Fan_pwm_up1, update_pwm_duty1);
pwm_set_duty(Fan_pwm_up2, update_pwm_duty2);
}
/**
* @brief
*
* @param power_pwm_duty_l1 左转向风扇
* @param power_pwm_duty_r1 右转向风扇
* @param power_pwm_duty_l2 左驱动风扇
* @param power_pwm_duty_r2 右驱动风扇
*/
void by_pwm_power_duty(uint32_t power_pwm_duty_l1, uint32_t power_pwm_duty_r1, uint32_t power_pwm_duty_l2, uint32_t power_pwm_duty_r2)
{

View File

@@ -1,163 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
enum circle_type_e circle_type = CIRCLE_NONE;
int32_t Left_Border_None_Circle = 0;
int32_t Right_Border_None_Circle = 0;
int32_t Left_Border_Have_Circle = 0;
int32_t Right_Border_Have_Circle = 0;
int32_t Left_Border_ToLeft_Circle = 0;
int32_t Right_Border_ToLeft_Circle = 0;
int32_t Left_Border_ToRight_Circle = 0;
int32_t Right_Border_ToRight_Circle = 0;
void CheckCircle() {
// 非圆环模式下单边L角点, 单边长直道
if (circle_type == CIRCLE_NONE && Lpt0_found && !Lpt1_found && is_straight1) {
circle_type = CIRCLE_LEFT_BEGIN;
}
if (circle_type == CIRCLE_NONE && !Lpt0_found && Lpt1_found && is_straight0) {
circle_type = CIRCLE_RIGHT_BEGIN;
}
}
void RunCircle() {
if (circle_type == CIRCLE_LEFT_BEGIN) // 左环开始,寻外直道右线
{
track_type = TRACK_RIGHT;
// 先丢左线后有线
if (pts_resample_left_count < 0.1 / RESAMPLEDIST) {
Left_Border_None_Circle++;
}
if (pts_resample_left_count > 0.5 / RESAMPLEDIST &&Left_Border_None_Circle > FRAMENONE) {
Left_Border_Have_Circle++;
if (Left_Border_Have_Circle > FRAMENONE) {
circle_type = CIRCLE_LEFT_IN;
Left_Border_None_Circle = 0;
Left_Border_Have_Circle = 0;
}
}
} else if (circle_type == CIRCLE_LEFT_IN) // 入环,寻内圆左线
{
track_type = TRACK_LEFT;
if (pts_resample_right[(int32_t)(0.2 / RESAMPLEDIST)][1] -
pts_resample_right[0][1] <
-2) {
Right_Border_ToLeft_Circle++;
}
if (Right_Border_ToLeft_Circle > FRAMETOLEFT) {
circle_type = CIRCLE_LEFT_RUNNING;
Right_Border_ToLeft_Circle = 0;
}
} else if (circle_type == CIRCLE_LEFT_RUNNING) // 正常巡线,寻外圆右线
{
// Track_Type = TRACK_RIGHT;
track_type = TRACK_LEFT; // 看看加一个如果丢线才切换
if (Lpt1_found) {
pts_resample_right_count = mid_right_count = Lpt1_rpts1s_id;
}
if (Lpt1_found && Lpt1_rpts1s_id < 0.4 / RESAMPLEDIST) {
circle_type = CIRCLE_LEFT_OUT;
}
} else if (circle_type == CIRCLE_LEFT_OUT) // 出环,寻内圆
{
track_type = TRACK_LEFT;
if (is_straight1) // 右线为长直道
{
circle_type = CIRCLE_LEFT_END;
}
} else if (circle_type == CIRCLE_LEFT_END) // 走过圆环,寻右线
{
track_type = TRACK_RIGHT;
if (pts_resample_left_count < 0.2 / RESAMPLEDIST) // 左线先丢后有
{
Left_Border_None_Circle++;
}
if (pts_resample_left_count > 0.6 / RESAMPLEDIST &&
Left_Border_None_Circle > FRAMENONE) {
circle_type = CIRCLE_NONE;
Left_Border_None_Circle = 0;
Left_Border_Have_Circle = 0;
Right_Border_ToLeft_Circle = 0;
Right_Border_ToRight_Circle = 0;
}
} else if (circle_type == CIRCLE_RIGHT_BEGIN) // 右环控制,前期寻左直道
{
track_type = TRACK_LEFT;
// 先丢右线后有线
if (pts_resample_right_count < 0.3 / RESAMPLEDIST) {
Right_Border_None_Circle++;
}
if (pts_resample_right_count > 0.5 / RESAMPLEDIST &&
Right_Border_None_Circle > FRAMENONE) {
Right_Border_Have_Circle++;
if (Right_Border_Have_Circle > FRAMENONE) {
circle_type = CIRCLE_RIGHT_IN;
Right_Border_None_Circle = 0;
Right_Border_Have_Circle = 0;
}
}
} else if (circle_type == CIRCLE_RIGHT_IN) // 入右环,寻右内圆环
{
track_type = TRACK_RIGHT;
if (pts_resample_left[(int32_t)(0.2 / RESAMPLEDIST)][1] -
pts_resample_left[0][1] >
2) {
Left_Border_ToRight_Circle++;
}
if (Left_Border_ToRight_Circle > FRAMETORIGHT) {
circle_type = CIRCLE_RIGHT_RUNNING;
Left_Border_ToRight_Circle = 0;
}
} else if (circle_type == CIRCLE_RIGHT_RUNNING) // 正常巡线,寻外圆左线
{
// track_type = TRACK_LEFT;
track_type = TRACK_RIGHT; // 看看加一个如果丢线才切换
if (Lpt0_found) // 外环存在拐点,可再加拐点距离判据 (左 L 点)
{
pts_resample_left_count = mid_left_count = Lpt0_rpts0s_id;
}
if (Lpt0_found && Lpt0_rpts0s_id < 0.4 / RESAMPLEDIST) {
circle_type = CIRCLE_RIGHT_OUT;
}
} else if (circle_type == CIRCLE_RIGHT_OUT) // 出环,寻内圆
{
track_type = TRACK_RIGHT;
if (is_straight0) // 加个有线长度判断
{
circle_type = CIRCLE_RIGHT_END;
}
} else if (circle_type == CIRCLE_RIGHT_END) // 走过圆环,寻左线
{
track_type = TRACK_LEFT;
if (pts_resample_right_count < 0.2 / RESAMPLEDIST) // 左线先丢后有
{
Right_Border_None_Circle++;
}
if (pts_resample_right_count > 0.7 / RESAMPLEDIST &&
Right_Border_None_Circle > FRAMENONE) {
circle_type = CIRCLE_NONE;
Right_Border_None_Circle = 0;
Right_Border_Have_Circle = 0;
Left_Border_ToLeft_Circle = 0;
Left_Border_ToRight_Circle = 0;
}
}
}

View File

@@ -1,24 +0,0 @@
#ifndef CIRCLE
#define CIRCLE
enum circle_type_e {
CIRCLE_NONE, // 非圆环模式
CIRCLE_LEFT_BEGIN,
CIRCLE_RIGHT_BEGIN, // 圆环开始识别到单侧L角点另一侧长直道。
CIRCLE_LEFT_IN,
CIRCLE_RIGHT_IN, // 圆环进入,即走到一侧直道,一侧圆环的位置。
CIRCLE_LEFT_RUNNING,
CIRCLE_RIGHT_RUNNING, // 圆环内部。
CIRCLE_LEFT_OUT,
CIRCLE_RIGHT_OUT, // 准备出圆环即识别到出环处的L角点。
CIRCLE_LEFT_END,
CIRCLE_RIGHT_END // 圆环结束,即再次走到单侧直道的位置。
};
extern enum circle_type_e circle_type;
void CheckCircle(void);
void RunCircle(void);
#endif /* COMMON_H_ */

View File

@@ -1,15 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
int32_t limit(int32_t x, int32_t low, int32_t up)
{
return x > up ? up : x < low ? low : x;
}
int clip(int x, int low, int up) {
return x > up ? up : x < low ? low : x;
}
float fclip(float x, float low, float up) {
return x > up ? up : x < low ? low : x;
}

View File

@@ -1,29 +0,0 @@
#ifndef COMMON_H_
#define COMMON_H_
#define IMAGE_H (MT9V03X_H)
#define IMAGE_W (MT9V03X_W)
#define BEGINH_L (50)
#define BEGINH_R (50)
#define BEGINW_L (-18)
#define BEGINW_R (-12)
#define PT_MAXLEN (75)
#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) // 获取像素点的值
#define FIX_BINTHRESHOLD (140) // 设置最开始的阈值
#define SELFADAPT_KERNELSIZE (7) // 巡线区域核大小
#define FILTER_KERNELSIZE (7) // 滤波核大小
#define SELFADAPT_OFFSET (8) // 适应性块大小
#define PIXPERMETER (56)
#define RESAMPLEDIST (0.02f)
#define ANGLEDIST (0.2f)
#define ROADWIDTH (0.45f)
#define FRAMENONE (1)
#define FRAMETOLEFT (5)
#define FRAMETORIGHT (5)
#define PIXEL_PER_METER (100)
int32_t limit(int32_t x, int32_t low, int32_t up);
int clip(int x, int low, int up);
float fclip(float x, float low, float up);
#endif /* COMMON_H_ */

View File

@@ -1,219 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
enum cross_type_e cross_type = CROSS_NONE;
bool far_Lpt0_found, far_Lpt1_found;
int32_t Both_Boder_None_Cross;
int far_Lpt0_rpts0s_id, far_Lpt1_rpts1s_id;
void CheckCross() {
bool Xfound = Lpt0_found && Lpt1_found;
if (cross_type == CROSS_NONE && Xfound){
cross_type = CROSS_BEGIN;
}
}
void RunCross() {
bool Xfound = Lpt0_found && Lpt1_found;
aim_distance = 0.4;
//检测到十字,先按照近线走
if (cross_type == CROSS_BEGIN) {
if (Lpt0_found) {
mid_left_count = pts_resample_left_count = Lpt0_rpts0s_id;
track_type = TRACK_LEFT;
}
else if(Lpt1_found) {
mid_right_count = pts_resample_right_count = Lpt1_rpts1s_id;
track_type = TRACK_RIGHT;
}
//近角点过少,进入远线控制
if ((Xfound && (Lpt0_rpts0s_id < 0.2 / RESAMPLEDIST && Lpt1_rpts1s_id < 0.2 / RESAMPLEDIST)) || (pts_resample_left_count <20 && pts_resample_right_count<20)) {
cross_type = CROSS_IN;
}
}
//远线控制进十字,begin_y渐变靠近防丢线
if (cross_type == CROSS_IN) {
//寻远线,算法与近线相同
cross_farline();
if (pts_resample_left_count < 5 && pts_resample_right_count < 5) {
Both_Boder_None_Cross++;
}
if (Both_Boder_None_Cross > 2 && pts_resample_left_count > 20 && pts_resample_right_count > 20) {
cross_type = CROSS_NONE;
Both_Boder_None_Cross = 0;
}
if (far_Lpt1_found) { track_type = TRACK_RIGHT; }
else if (far_Lpt0_found) { track_type = TRACK_LEFT; }
else if (Both_Boder_None_Cross > 0 && pts_far_resample_right_count < 5) { track_type = TRACK_RIGHT; }
else if (Both_Boder_None_Cross > 0 && pts_far_resample_left_count < 5) { track_type = TRACK_LEFT; }
}
}
void cross_farline(){
int cross_width = 4;
int far_y1 = 0, far_y2 = 0;
int far_x1 = 0, far_x2 = 0;
bool white_found = false;
pts_far_left_count = sizeof(pts_far_left) / sizeof(pts_far_left[0]);
int w1 = IMAGE_W / 2 - BEGINW_R, h1 = BEGINH_L;
for(;w1>cross_width*2; w1--)
{
if(GET_PIX_1C(mt9v03x_image_copy[0], h1, w1 - 1) < FIX_BINTHRESHOLD) {
far_x1 = w1 - cross_width;
break;
}
}
/*如果一行全为白色没写*/
if (far_x1 <= 20)
{
far_x1 = 20;
}
for (; h1 > 0; h1--) {
//先黑后白先找white
if (GET_PIX_1C(mt9v03x_image_copy[0], h1, far_x1) >= FIX_BINTHRESHOLD) { white_found = true; }
if (GET_PIX_1C(mt9v03x_image_copy[0], h1 - 1, far_x1) < FIX_BINTHRESHOLD && white_found) {
far_y1 = h1;
break;
}
}
if (GET_PIX_1C(mt9v03x_image_copy[0], far_y1, far_x1) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Left(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, far_y1, far_x1, pts_far_left, &pts_far_left_count);
}
else pts_far_left_count = 0;
int w2 = IMAGE_W / 2 + BEGINW_L, h2 = BEGINH_R;
white_found = false;
pts_far_right_count = sizeof(pts_far_right) / sizeof(pts_far_right[0]);
for(;w2 < IMAGE_W - cross_width*2; w2++)
{
if(GET_PIX_1C(mt9v03x_image_copy[0], h2, w2 + 1) < FIX_BINTHRESHOLD) {
far_x2 = w2 + cross_width;
break;
}
}
/*如果一行全为白色没写*/
if (far_x2 >= 100)
{
far_x2 = 100;
}
for (; h2 > 0; h2--) {
//先黑后白先找white
if (GET_PIX_1C(mt9v03x_image_copy[0], h2, far_x2) >= FIX_BINTHRESHOLD) { white_found = true; }
if (GET_PIX_1C(mt9v03x_image_copy[0], h2 - 1, far_x2) < FIX_BINTHRESHOLD && white_found) {
far_y2 = h2;
break;
}
}
if (GET_PIX_1C(mt9v03x_image_copy[0], far_y2, far_x2) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Right(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, far_y2, far_x2, pts_far_right, &pts_far_right_count);
}
else pts_far_right_count = 0;
//透视变换
for (int i = 0; i < pts_far_left_count; i++) {
pts_far_inv_l[i][1] = fclip(InverseMapW[pts_far_left[i][0]][pts_far_left[i][1]],0,IMAGE_W);
pts_far_inv_l[i][0] = fclip(InverseMapH[pts_far_left[i][0]][pts_far_left[i][1]],0,IMAGE_H);
}
pts_far_inv_l_count = pts_far_left_count;
for (int i = 0; i < pts_far_right_count; i++) {
pts_far_inv_r[i][1] = fclip(InverseMapW[pts_far_right[i][0]][pts_far_right[i][1]],0,IMAGE_W);
pts_far_inv_r[i][0] = fclip(InverseMapH[pts_far_right[i][0]][pts_far_right[i][1]],0,IMAGE_H);
}
pts_far_inv_r_count = pts_far_right_count;
// 边线滤波
GetLinesFilter(pts_far_inv_l, pts_far_inv_l_count, pts_far_filter_l, (int) round(FILTER_KERNELSIZE));
pts_far_filter_l_count = pts_far_inv_l_count;
GetLinesFilter(pts_far_inv_r, pts_far_inv_r_count, pts_far_filter_r, (int) round(FILTER_KERNELSIZE));
pts_far_filter_r_count = pts_far_inv_r_count;
// 边线等距采样
pts_far_resample_left_count = sizeof(pts_far_resample_left) / sizeof(pts_far_resample_left[0]);
GetLinesResample(pts_far_filter_l, pts_far_filter_l_count, pts_far_resample_left, &pts_far_resample_left_count, RESAMPLEDIST * PIXPERMETER);
pts_far_resample_right_count = sizeof(pts_far_resample_right) / sizeof(pts_far_resample_right[0]);
GetLinesResample(pts_far_filter_r, pts_far_filter_r_count, pts_far_resample_right, &pts_far_resample_right_count, RESAMPLEDIST * PIXPERMETER);
int valid_far_points_count = 0;
for (int i = 0; i < pts_far_resample_left_count; i++) {
int x = pts_far_resample_left[i][1];
int y = pts_far_resample_left[i][0];
if (y < IMAGE_H-3 && x > 3 && x < IMAGE_W-3 && y>=3 ) {
pts_far_resample_left[valid_far_points_count][0] = pts_far_resample_left[i][0];
pts_far_resample_left[valid_far_points_count][1] = pts_far_resample_left[i][1];
valid_far_points_count++;
}
}
pts_far_resample_left_count = valid_far_points_count;
valid_far_points_count = 0;
for (int i = 0; i < pts_far_resample_right_count; i++) {
int x = pts_far_resample_right[i][1];
int y = pts_far_resample_right[i][0];
if (y <= IMAGE_H-3 && x >= 3 && x <= IMAGE_W-3 && y>=3) {
pts_far_resample_right[valid_far_points_count][0] = pts_far_resample_right[i][0];
pts_far_resample_right[valid_far_points_count][1] = pts_far_resample_right[i][1];
valid_far_points_count++;
}
}
pts_far_resample_right_count = valid_far_points_count;
// 边线角度变化率
local_angle_points(pts_far_resample_left, pts_far_resample_left_count, far_angle_left, (int) round(ANGLEDIST / RESAMPLEDIST));
far_angle_left_num = pts_far_resample_left_count;
local_angle_points(pts_far_resample_right, pts_far_resample_right_count, far_angle_right, (int) round(ANGLEDIST / RESAMPLEDIST));
far_angle_right_num = pts_far_resample_right_count;
// 角度变化率非极大值抑制
nms_angle(far_angle_left, far_angle_left_num, far_angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
far_angle_new_left_num = far_angle_left_num;
nms_angle(far_angle_right, far_angle_right_num, far_angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
far_angle_new_right_num = far_angle_right_num;
// 找远线上的L角点
far_Lpt0_found = far_Lpt1_found = false;
// is_far_straight0 = pts_far_resample_left_count > 1.0 / RESAMPLEDIST;
// is_far_straight1 = pts_far_resample_right_count > 1.0 / RESAMPLEDIST;
for (int i = 0; i < pts_far_resample_left_count; i++) {
if (far_angle_new_left[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_left_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_left_count - 1);
float conf = fabs(far_angle_left[i]) - (fabs(far_angle_left[im1]) + fabs(far_angle_left[ip1])) / 2;
//L角点阈值
if (far_Lpt0_found == false && (66. / 180. * PI) < conf && conf < (140. / 180. * PI) && i < 0.7 / RESAMPLEDIST) {
far_Lpt0_rpts0s_id = i;
far_Lpt0_found = true;
}
}
for (int i = 0; i < pts_far_resample_right_count; i++) {
if (far_angle_new_right[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_right_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_far_resample_right_count - 1);
float conf = fabs(far_angle_right[i]) - (fabs(far_angle_right[im1]) + fabs(far_angle_right[ip1])) / 2;
if (far_Lpt1_found == false && (66. / 180. * PI) < conf && conf < 140. / 180. * PI && i < 0.7 / RESAMPLEDIST) {
far_Lpt1_rpts1s_id = i;
far_Lpt1_found = true;
}
}
}

View File

@@ -1,19 +0,0 @@
#ifndef CROSS
#define CROSS
enum cross_type_e {
CROSS_NONE, // 非十字模式
CROSS_BEGIN, // 找到左右两个L角点
CROSS_IN, // 两个L角点很近即进入十字内部(此时切换远线控制)
};
extern enum cross_type_e cross_type;
extern int32_t Both_Boder_None_Cross;
extern int far_Lpt0_rpts0s_id, far_Lpt1_rpts1s_id;
void CheckCross(void);
void RunCross(void);
void cross_farline(void);
#endif /* COMMON_H_ */

View File

@@ -1,95 +0,0 @@
#include "gl_data.h"
uint8_t (*Img_Gray)[MT9V03X_W];
int32_t pts_left[PT_MAXLEN][2];
int32_t pts_right[PT_MAXLEN][2];
int32_t pts_left_count;
int32_t pts_right_count;
int32_t pts_far_left[PT_MAXLEN][2];
int32_t pts_far_right[PT_MAXLEN][2];
int32_t pts_far_left_count;
int32_t pts_far_right_count;
float pts_inv_l[PT_MAXLEN][2];
float pts_inv_r[PT_MAXLEN][2];
int32_t pts_inv_l_count;
int32_t pts_inv_r_count;
float pts_far_inv_l[PT_MAXLEN][2];
float pts_far_inv_r[PT_MAXLEN][2];
int32_t pts_far_inv_l_count;
int32_t pts_far_inv_r_count;
float pts_filter_l[PT_MAXLEN][2];
float pts_filter_r[PT_MAXLEN][2];
int32_t pts_filter_l_count;
int32_t pts_filter_r_count;
float pts_far_filter_l[PT_MAXLEN][2];
float pts_far_filter_r[PT_MAXLEN][2];
int32_t pts_far_filter_l_count;
int32_t pts_far_filter_r_count;
float pts_resample_left[PT_MAXLEN][2];
float pts_resample_right[PT_MAXLEN][2];
int32_t pts_resample_left_count;
int32_t pts_resample_right_count;
float pts_far_resample_left[PT_MAXLEN][2];
float pts_far_resample_right[PT_MAXLEN][2];
int32_t pts_far_resample_left_count;
int32_t pts_far_resample_right_count;
float mid_left[PT_MAXLEN][2];
float mid_right[PT_MAXLEN][2];
int32_t mid_left_count;
int32_t mid_right_count;
float angle_new_left[PT_MAXLEN];
float angle_new_right[PT_MAXLEN];
int angle_new_left_num;
int angle_new_right_num;
float far_angle_new_left[PT_MAXLEN];
float far_angle_new_right[PT_MAXLEN];
int far_angle_new_left_num;
int far_angle_new_right_num;
uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W];
float angle_left[PT_MAXLEN];
float angle_right[PT_MAXLEN];
int angle_left_num;
int angle_right_num;
float far_angle_left[PT_MAXLEN];
float far_angle_right[PT_MAXLEN];
int far_angle_left_num;
int far_angle_right_num;
int Lpt0_rpts0s_id;
int Lpt1_rpts1s_id;
bool Lpt0_found;
bool Lpt1_found;
int Lpt1[2];
int Lpt0[2];
int far_Lpt1[2];
int far_Lpt0[2];
int Lpt_in0_rpts0s_id;
int Lpt_in1_rpts1s_id;
bool Lpt_in0_found;
bool Lpt_in1_found;
int Lpt_in1[2];
int Lpt_in0[2];
bool is_straight0;
bool is_straight1;
bool is_far_straight0;
bool is_far_straight1;
bool is_turn0;
bool is_turn1;
float rptsn[PT_MAXLEN][2];
int32_t rptsn_num;
float aim_distance;
track_type_e track_type = TRACK_RIGHT;

View File

@@ -1,108 +0,0 @@
#pragma once
#ifndef _GL_DATA_H
#define _GL_DATA_H
#include "gl_headfile.h"
typedef enum track_type_e {
TRACK_LEFT = 0,
TRACK_RIGHT,
} track_type_e;
extern uint8_t (*Img_Gray)[MT9V03X_W];
//未逆透视前边线数组
extern int32_t pts_left[PT_MAXLEN][2];
extern int32_t pts_right[PT_MAXLEN][2];
extern int32_t pts_left_count;
extern int32_t pts_right_count;
extern int32_t pts_far_left[PT_MAXLEN][2];
extern int32_t pts_far_right[PT_MAXLEN][2];
extern int32_t pts_far_left_count;
extern int32_t pts_far_right_count;
//逆透视后边线数组
extern float pts_inv_l[PT_MAXLEN][2];
extern float pts_inv_r[PT_MAXLEN][2];
extern int32_t pts_inv_l_count;
extern int32_t pts_inv_r_count;
extern float pts_far_inv_l[PT_MAXLEN][2];
extern float pts_far_inv_r[PT_MAXLEN][2];
extern int32_t pts_far_inv_l_count;
extern int32_t pts_far_inv_r_count;
//滤波后边线数组
extern float pts_filter_l[PT_MAXLEN][2];
extern float pts_filter_r[PT_MAXLEN][2];
extern int32_t pts_filter_l_count;
extern int32_t pts_filter_r_count;
extern float pts_far_filter_l[PT_MAXLEN][2];
extern float pts_far_filter_r[PT_MAXLEN][2];
extern int32_t pts_far_filter_l_count;
extern int32_t pts_far_filter_r_count;
//重采样后边线数组
extern float pts_resample_left[PT_MAXLEN][2];
extern float pts_resample_right[PT_MAXLEN][2];
extern int32_t pts_resample_left_count;
extern int32_t pts_resample_right_count;
extern float pts_far_resample_left[PT_MAXLEN][2];
extern float pts_far_resample_right[PT_MAXLEN][2];
extern int32_t pts_far_resample_left_count;
extern int32_t pts_far_resample_right_count;
extern float mid_left[PT_MAXLEN][2];
extern float mid_right[PT_MAXLEN][2];
extern int32_t mid_left_count;
extern int32_t mid_right_count;
extern float angle_new_left[PT_MAXLEN];
extern float angle_new_right[PT_MAXLEN];
extern int angle_new_left_num;
extern int angle_new_right_num;
extern float far_angle_new_left[PT_MAXLEN];
extern float far_angle_new_right[PT_MAXLEN];
extern int far_angle_new_left_num;
extern int far_angle_new_right_num;
extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W];
extern float angle_left[PT_MAXLEN];
extern float angle_right[PT_MAXLEN];
extern int angle_left_num;
extern int angle_right_num;
extern float far_angle_left[PT_MAXLEN];
extern float far_angle_right[PT_MAXLEN];
extern int far_angle_left_num;
extern int far_angle_right_num;
extern int Lpt0_rpts0s_id;
extern int Lpt1_rpts1s_id;
extern bool Lpt0_found;
extern bool Lpt1_found;
extern int Lpt1[2];
extern int Lpt0[2];
extern int far_Lpt1[2];
extern int far_Lpt0[2];
extern int Lpt_in0_rpts0s_id;
extern int Lpt_in1_rpts1s_id;
extern bool Lpt_in0_found;
extern bool Lpt_in1_found;
extern int Lpt_in1[2];
extern int Lpt_in0[2];
extern bool is_straight0;
extern bool is_straight1;
extern bool is_far_straight0;
extern bool is_far_straight1;
extern bool is_turn0;
extern bool is_turn1;
extern float rptsn[PT_MAXLEN][2];
extern int32_t rptsn_num;
extern float aim_distance;
extern track_type_e track_type;
#endif

View File

@@ -1,52 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
enum garage_type_e garage_type = GARAGE_NONE;
float (*garage_rpts)[2];
int garage_rpts_num;
float calculate_vector_angle(float x1, float y1, float x2, float y2) {
float dx = x2 - x1;
float dy = y2 - y1;
float vector_length = sqrt(dx*dx + dy*dy);
float angle_radians = acos(dx / vector_length);
float angle_degrees = angle_radians * 180 / M_PI;
return angle_degrees;
}
void CheckGarage() {
int change_num = 0;
int check_garage_h = 60;
for (int check_garage_w = 30; check_garage_w < IMAGE_W - 30; check_garage_w++)
{
if ((GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w) < FIX_BINTHRESHOLD && GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w + 1) >= FIX_BINTHRESHOLD) ||
(GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w) >= FIX_BINTHRESHOLD && GET_PIX_1C(mt9v03x_image_copy[0], check_garage_h, check_garage_w + 1) < FIX_BINTHRESHOLD))
{
change_num++;
}
}
if (change_num > 7)
{
garage_type = GARAGE_FOUND;
//printf("跳变点的数量为:%d\r\n", change_num);
}
change_num = 0;
}
void RunGarage(){
if (garage_type == GARAGE_FOUND)
{
printf("识别到车库\r\n");
}
}

View File

@@ -1,24 +0,0 @@
#ifndef GARAGE
#define GARAGE
enum garage_type_e {
GARAGE_NONE, // 非车库模式
GARAGE_FOUND,
GARAGE_OUT_LEFT,
GARAGE_OUT_RIGHT, // 出库陀螺仪转过45°即出库完毕
GARAGE_FOUND_LEFT,
GARAGE_FOUND_RIGHT, // 发现车库,即斑马线+单侧L角点(未使用)
GARAGE_IN_LEFT,
GARAGE_IN_RIGHT, // 进库,发现车库后判断第几次,从而决定是否进库
GARAGE_PASS_LEFT,
GARAGE_PASS_RIGHT, // 不进库,发现车库后判断第几次,从而决定是否进库
GARAGE_STOP // 进库完毕,停车
};
extern enum garage_type_e garage_type;
float calculate_vector_angle(float x1, float y1, float x2, float y2);\
void CheckGarage(void);
void RunGarage(void);
#endif /* COMMON_H_ */

View File

@@ -1,86 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
void get_corners() {
Lpt0_found = Lpt1_found = false;
Lpt_in0_found = Lpt_in1_found = false;
is_straight0 = pts_resample_left_count > 1.0 / RESAMPLEDIST;
is_straight1 = pts_resample_right_count > 1.0 / RESAMPLEDIST;
for (int i = 0; i < pts_resample_left_count; i++) {
if (angle_new_left[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_left_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_left_count - 1);
float conf = fabs(angle_left[i]) - (fabs(angle_left[im1]) + fabs(angle_left[ip1])) / 2;
//L角点阈值
if (Lpt0_found == false && (66. / 180. * PI) < conf && conf < (140. / 180. * PI) && i < 0.5 / RESAMPLEDIST) {
Lpt0_rpts0s_id = i;
Lpt0_found = true;
transform(pts_resample_left[Lpt0_rpts0s_id][1],pts_resample_left[Lpt0_rpts0s_id][0],&Lpt0[1],&Lpt0[0]);
}
//长直道阈值
if (conf > (7. / 180. * PI) && i < 0.8 / RESAMPLEDIST) is_straight0 = false;
if (Lpt0_found == true && is_straight0 == false) break;
}
// if(Lpt0_found){
// float angle1 = calculate_vector_angle(pts_resample_left[Lpt0_rpts0s_id][1],pts_resample_left[Lpt0_rpts0s_id][0],pts_resample_left[Lpt0_rpts0s_id+5][1],pts_resample_left[Lpt0_rpts0s_id+5][0]);
// if(angle1 < 85.) {
// Lpt_in0_found = true;
// Lpt0_found = false;
// Lpt_in0_rpts0s_id = Lpt0_rpts0s_id;
// }
// }
// else{
// is_turn0 = is_curve(angle_left ,clip(angle_left_num - 10, 0,angle_left_num),0.05);
// if(is_turn0){
// state_type = TURN_STATE;
// }
// }
if(is_straight0){
state_type = STRAIGHT_STATE;
}
for (int i = 0; i < pts_resample_right_count; i++) {
if (angle_new_right[i] == 0) continue;
int im1 = clip(i - (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_right_count - 1);
int ip1 = clip(i + (int) round(ANGLEDIST / RESAMPLEDIST), 0, pts_resample_right_count - 1);
float conf = fabs(angle_right[i]) - (fabs(angle_right[im1]) + fabs(angle_right[ip1])) / 2;
if (Lpt1_found == false && (66. / 180. * PI) < conf && conf < 140. / 180. * PI && i < 0.5 / RESAMPLEDIST) {
Lpt1_rpts1s_id = i;
Lpt1_found = true;
transform(pts_resample_right[Lpt1_rpts1s_id][1],pts_resample_right[Lpt1_rpts1s_id][0],&Lpt1[1],&Lpt1[0]);
}
if (conf > (7. / 180. * PI) && i < 0.8 / RESAMPLEDIST) is_straight1 = false;
if (Lpt1_found == true && is_straight1 == false) break;
}
// if(Lpt1_found){
// float angle2 = calculate_vector_angle(pts_resample_right[Lpt1_rpts1s_id][1],pts_resample_right[Lpt1_rpts1s_id][0],pts_resample_right[Lpt1_rpts1s_id+5][1],pts_resample_right[Lpt1_rpts1s_id+5][0]);
// if(angle2 > 100.) {
// Lpt_in1_found = true;
// Lpt1_found = false;
// Lpt_in1_rpts1s_id = Lpt1_rpts1s_id;
// }
// }
//else{
// is_turn1 = is_curve(angle_right, clip(angle_right_num - 10,0 ,angle_right_num), 0.05);
// if(is_turn1){
// state_type = TURN_STATE;
// }
//}
if(is_straight1){
state_type = STRAIGHT_STATE;
}
}

View File

@@ -1,8 +0,0 @@
#ifndef GET_CORNERS
#define GET_CORNERS
void get_corners(void);
#endif /* COMMON_H_ */

View File

@@ -1,239 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
const int32_t direction_front[4][2] = {{0, -1},{1, 0},{0, 1},{-1, 0}};
const int32_t direction_frontleft[4][2] = {{-1, -1},{1, -1},{1, 1},{-1, 1}};
const int32_t direction_frontright[4][2] ={{1, -1},{1, 1},{-1, 1},{-1, -1}};
void SearchLineAdaptive_Left(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num)
{
const int32_t half = block_size / 2;
int step = 0;
int dir = 0;
int turn = 0;
printf("shuzhi: %d\r\n", half);
while (step < *line_num && half < w && w < IMAGE_W - half -1 && half < h && h < IMAGE_H - half -1 && turn < 4) {
int local_thres = 0;
for (int dh = -1 * half; dh <= half; dh++) {
for (int dw = -1 * half; dw <= half; dw++) {
local_thres += GET_PIX_1C(img_gray, h + dh, w + dw);
}
}
local_thres /= block_size * block_size;
local_thres -= down_value;
int front_value = GET_PIX_1C(img_gray, h+direction_front[dir][1], w + direction_front[dir][0]);
int frontleft_value = GET_PIX_1C(img_gray, h + direction_frontleft[dir][1], w + direction_frontleft[dir][0]);
if (front_value < local_thres) {
dir = (dir + 1) % 4;
turn++;
} else if (frontleft_value < local_thres) {
w += direction_front[dir][0];
h += direction_front[dir][1];
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
} else {
w += direction_frontleft[dir][0];
h += direction_frontleft[dir][1];
dir = (dir + 3) % 4;
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
}
}
*line_num = step;
}
void SearchLineAdaptive_Right(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num)
{
int half = block_size / 2;
int step = 0, dir = 0, turn = 0;
while (step < *line_num && 0 < w && w < IMAGE_W - 1 && 0 < h && h < IMAGE_H -1 && turn < 4) {
int local_thres = 0;
for (int dh = -half; dh <= half; dh++) {
for (int dw = -half; dw <= half; dw++) {
local_thres += GET_PIX_1C(img_gray, h + dh, w + dw);
}
}
local_thres /= block_size * block_size;
local_thres -= down_value;
int front_value = GET_PIX_1C(img_gray, h + direction_front[dir][1], w + direction_front[dir][0]);
int frontright_value = GET_PIX_1C(img_gray, h + direction_frontright[dir][1], w + direction_frontright[dir][0]);
if (front_value < local_thres) {
dir = (dir + 3) % 4;
turn++;
} else if (frontright_value < local_thres) {
w += direction_front[dir][0];
h += direction_front[dir][1];
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
} else {
w += direction_frontright[dir][0];
h += direction_frontright[dir][1];
dir = (dir + 1) % 4;
pts[step][1] = w;
pts[step][0] = h;
step++;
turn = 0;
}
}
*line_num = step;
}
void GetLinesFilter(float pts_in[][2], int32_t pts_in_count, float pts_out[][2], int32_t kernelsize)
{
int half = kernelsize / 2;
for (int i = 0; i < pts_in_count; i++) {
pts_out[i][0] = 0;
pts_out[i][1] = 0;
for (int j = -half; j <= half; j++) {
pts_out[i][0] += pts_in[clip(i + j, 0, pts_in_count - 1)][0] * (half + 1 - abs(j));
pts_out[i][1] += pts_in[clip(i + j, 0, pts_in_count - 1)][1] * (half + 1 - abs(j));
}
pts_out[i][0] /= (2 * half + 2) * (half + 1) / 2;
pts_out[i][1] /= (2 * half + 2) * (half + 1) / 2;
}
}
void GetLinesResample(float pts_in[][2], int32_t num1, float pts_out[][2], int32_t* num2, float dist)
{
if (num1 < 0) {
*num2 = 0;
return;
}
pts_out[0][0] = pts_in[0][0];
pts_out[0][1] = pts_in[0][1];
int len = 1;
for (int i = 0; i < num1 - 1 && len < *num2; i++) {
float x0 = pts_in[i][1];
float y0 = pts_in[i][0];
float x1 = pts_in[i + 1][1];
float y1 = pts_in[i + 1][0];
do {
float x = pts_out[len - 1][1];
float y = pts_out[len - 1][0];
float dx0 = x0 - x;
float dy0 = y0 - y;
float dx1 = x1 - x;
float dy1 = y1 - y;
float dist0 = sqrt(dx0 * dx0 + dy0 * dy0);
float dist1 = sqrt(dx1 * dx1 + dy1 * dy1);
float r0 = (dist1 - dist) / (dist1 - dist0);
float r1 = 1 - r0;
if (r0 < 0 || r1 < 0) break;
x0 = x0 * r0 + x1 * r1;
y0 = y0 * r0 + y1 * r1;
pts_out[len][1] = x0;
pts_out[len][0] = y0;
len++;
} while (len < *num2);
}
*num2 = len;
}
void local_angle_points(float pts_in[][2], int num, float angle_out[], int dist) {
for (int i = 0; i < num; i++) {
if (i <= 0 || i >= num - 1) {
angle_out[i] = 0;
continue;
}
float dx1 = pts_in[i][0] - pts_in[clip(i - dist, 0, num - 1)][0];
float dy1 = pts_in[i][1] - pts_in[clip(i - dist, 0, num - 1)][1];
float dn1 = sqrtf(dx1 * dx1 + dy1 * dy1);
float dx2 = pts_in[clip(i + dist, 0, num - 1)][0] - pts_in[i][0];
float dy2 = pts_in[clip(i + dist, 0, num - 1)][1] - pts_in[i][1];
float dn2 = sqrtf(dx2 * dx2 + dy2 * dy2);
float c1 = dx1 / dn1;
float s1 = dy1 / dn1;
float c2 = dx2 / dn2;
float s2 = dy2 / dn2;
angle_out[i] = atan2f(c1 * s2 - c2 * s1, c2 * c1 + s2 * s1); //得到弧度 类似angle_out = 0.3491
}
}
void nms_angle(float angle_in[], int num, float angle_out[], int kernel) {
int half = kernel / 2;
for (int i = 0; i < num; i++) {
angle_out[i] = angle_in[i];
for (int j = -half; j <= half; j++) {
if (fabs(angle_in[clip(i + j, 0, num - 1)]) > fabs(angle_out[i])) {
angle_out[i] = 0;
break;
}
}
}
}
void GetMidLine_Left(float pts_left[][2], int32_t pts_left_count, float mid_left[][2], int32_t approx_num, float dist)
{
for (int i = 0; i < pts_left_count; i++) {
float dx = pts_left[clip(i + approx_num, 0, pts_left_count - 1)][1] - pts_left[clip(i - approx_num, 0, pts_left_count - 1)][1];
float dy = pts_left[clip(i + approx_num, 0, pts_left_count - 1)][0] - pts_left[clip(i - approx_num, 0, pts_left_count - 1)][0];
float dn = sqrt(dx * dx + dy * dy);
dx /= dn;
dy /= dn;
mid_left[i][0] = pts_left[i][0] + dx * dist;
mid_left[i][1] = pts_left[i][1] - dy * dist;
}
}
void GetMidLine_Right(float pts_right[][2], int32_t pts_right_count, float mid_right[][2], int32_t approx_num, float dist)
{
for (int i = 0; i < pts_right_count; i++) {
float dx = pts_right[clip(i + approx_num, 0, pts_right_count -1)][1] - pts_right[clip(i - approx_num, 0, pts_right_count -1 )][1];
float dy = pts_right[clip(i + approx_num, 0, pts_right_count -1)][0] - pts_right[clip(i - approx_num, 0, pts_right_count -1)][0];
float dn = sqrt(dx * dx + dy * dy);
dx /= dn;//sin
dy /= dn;//cos
mid_right[i][0] = pts_right[i][0] - dx * dist;
mid_right[i][1] = pts_right[i][1] + dy * dist;
}
}
int is_curve(float angle[], int n, float threshold) {
for (int i = 1; i < n - 1; i++) {
float da = fabs(angle[i] - angle[i-1]);
float db = fabs(angle[i+1] - angle[i]);
if (da > threshold && db > threshold) {
return 1; // 是弯道
}
}
return 0; // 不是弯道
}

View File

@@ -1,15 +0,0 @@
#ifndef HANDLE_IMG
#define HANDLE_IMG
void SearchStartPoint_Left(uint8_t img_gray[], int32_t* h_start, int32_t* w_start, uint8_t threshold);
void GetLinesFilter(float pts_in[][2], int32_t pts_in_count, float pts_out[][2], int32_t kernelsize);
void GetLinesResample(float pts_in[][2], int32_t num1, float pts_out[][2], int32_t* num2, float dist);
void local_angle_points(float pts_in[][2], int num, float angle_out[], int dist);
void nms_angle(float angle_in[], int num, float angle_out[], int kernel);
void GetMidLine_Left(float pts_left[][2], int32_t pts_left_count, float mid_left[][2], int32_t approx_num, float dist);
void GetMidLine_Right(float pts_right[][2], int32_t pts_right_count, float mid_right[][2], int32_t approx_num, float dist);
int is_curve(float angle[], int n, float threshold) ;
#endif /* COMMON_H_ */

View File

@@ -1,18 +0,0 @@
#ifndef GL_HEADFILE
#define GL_HEADFILE
#include "gl_state.h"
#include "gl_img_process.h"
#include "gl_common.h"
#include "main.h"
#include "gl_handle_img.h"
#include "gl_transform_table.h"
#include "gl_get_corners.h"
#include "gl_garage.h"
#include "gl_tracking.h"
#include "gl_circle.h"
#include "gl_cross.h"
#include "gl_data.h"
#include "math.h"
#endif /* STATE_H_ */

View File

@@ -1,111 +0,0 @@
#include "zf_common_headfile.h"
#include "math.h"
#include "gl_headfile.h"
/*******************************边线处理****************************************/
/*
@author: glz
@brief:
*/
void img_processing() {
int w1 = IMAGE_W / 2 - BEGINW_R, h1 = BEGINH_L;
pts_left_count = sizeof(pts_left) / sizeof(pts_left[0]);
for (; w1 > 0; w1--) {
if (GET_PIX_1C(mt9v03x_image_copy[0], h1, w1 - 1) < FIX_BINTHRESHOLD)
break;
}
if (GET_PIX_1C(mt9v03x_image_copy[0], h1, w1) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Left(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, h1, w1, pts_left, &pts_left_count);
}
else pts_left_count = 0;
int w2 = IMAGE_W / 2 + BEGINW_L, h2 = BEGINH_R;
pts_right_count = sizeof(pts_right) / sizeof(pts_right[0]);
for (; w2 < IMAGE_W - 1; w2++) {
if (GET_PIX_1C(mt9v03x_image_copy[0], h2, w2 + 1) < FIX_BINTHRESHOLD)
break;
}
if (GET_PIX_1C(mt9v03x_image_copy[0], h2, w2) >= FIX_BINTHRESHOLD){
SearchLineAdaptive_Right(mt9v03x_image_copy[0], SELFADAPT_KERNELSIZE, SELFADAPT_OFFSET, h2, w2, pts_right, &pts_right_count);
}
else pts_right_count = 0;
//透视变换
for (int i = 0; i < pts_left_count; i++) {
pts_inv_l[i][1] = fclip(InverseMapW[pts_left[i][0]][pts_left[i][1]],0,IMAGE_W);
pts_inv_l[i][0] = fclip(InverseMapH[pts_left[i][0]][pts_left[i][1]],0,IMAGE_H);
}
pts_inv_l_count = pts_left_count;
for (int i = 0; i < pts_right_count; i++) {
pts_inv_r[i][1] = fclip(InverseMapW[pts_right[i][0]][pts_right[i][1]],0,IMAGE_W);
pts_inv_r[i][0] = fclip(InverseMapH[pts_right[i][0]][pts_right[i][1]],0,IMAGE_H);
}
pts_inv_r_count = pts_right_count;
// 边线滤波
GetLinesFilter(pts_inv_l, pts_inv_l_count, pts_filter_l, (int) round(FILTER_KERNELSIZE));
pts_filter_l_count = pts_inv_l_count;
GetLinesFilter(pts_inv_r, pts_inv_r_count, pts_filter_r, (int) round(FILTER_KERNELSIZE));
pts_filter_r_count = pts_inv_r_count;
// 边线等距采样
pts_resample_left_count = sizeof(pts_resample_left) / sizeof(pts_resample_left[0]);
GetLinesResample(pts_filter_l, pts_filter_l_count, pts_resample_left, &pts_resample_left_count, RESAMPLEDIST * PIXPERMETER);
pts_resample_right_count = sizeof(pts_resample_right) / sizeof(pts_resample_right[0]);
GetLinesResample(pts_filter_r, pts_filter_r_count, pts_resample_right, &pts_resample_right_count, RESAMPLEDIST * PIXPERMETER);
int valid_points_count = 0;
for (int i = 0; i < pts_resample_left_count; i++) {
int x = pts_resample_left[i][1];
int y = pts_resample_left[i][0];
if (y < IMAGE_H-3 && x > 3 && x < IMAGE_W-3 && y>=3 ) {
pts_resample_left[valid_points_count][0] = pts_resample_left[i][0];
pts_resample_left[valid_points_count][1] = pts_resample_left[i][1];
valid_points_count++;
}
}
pts_resample_left_count = valid_points_count;
valid_points_count = 0;
for (int i = 0; i < pts_resample_right_count; i++) {
int x = pts_resample_right[i][1];
int y = pts_resample_right[i][0];
if (y <= IMAGE_H-3 && x >= 3 && x <= IMAGE_W-3 && y>=3) {
pts_resample_right[valid_points_count][0] = pts_resample_right[i][0];
pts_resample_right[valid_points_count][1] = pts_resample_right[i][1];
valid_points_count++;
}
}
pts_resample_right_count = valid_points_count;
// 边线角度变化率
local_angle_points(pts_resample_left, pts_resample_left_count, angle_left, (int) round(ANGLEDIST / RESAMPLEDIST));
angle_left_num = pts_resample_left_count;
local_angle_points(pts_resample_right, pts_resample_right_count, angle_right, (int) round(ANGLEDIST / RESAMPLEDIST));
angle_right_num = pts_resample_right_count;
// 角度变化率非极大值抑制
nms_angle(angle_left, angle_left_num, angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
angle_new_left_num = angle_left_num;
nms_angle(angle_right, angle_right_num, angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
angle_new_right_num = angle_right_num;
// 左右中线跟踪
GetMidLine_Left(pts_resample_left, pts_resample_left_count, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_left_count = pts_resample_left_count;
GetMidLine_Right(pts_resample_right, pts_resample_right_count, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_right_count = pts_resample_right_count;
}

View File

@@ -1,10 +0,0 @@
#ifndef IMG_PROCESS
#define IMG_PROCESS
#include "zf_common_headfile.h"
void img_processing(void);
void SearchLineAdaptive_Left(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num);
void SearchLineAdaptive_Right(uint8_t img_gray[], int32_t block_size, int32_t down_value, int32_t h, int32_t w, int32_t pts[][2], int32_t* line_num);
#endif /* STATE_H_ */

View File

@@ -1,4 +0,0 @@
#include "gl_state.h"
#include "gl_headfile.h"
enum state_type_e state_type =0;

View File

@@ -1,28 +0,0 @@
#ifndef STATE_H_
#define STATE_H_
enum state_type_e {
COMMON_STATE = 0,
CROSS_STATE,
HALF_STATE,
CIRCLE_IN_STATE,
CIRCLE_BEGIN_STATE,
CIRCLE_RUNNING_STATE,
CIRCLE_OUT_STATE,
TURN_STATE,
STRAIGHT_STATE,
BREAK_STATE,
BAR_STATE,
RAMP_STATE,
GARAGE_OUT_STATE,
GARAGE_IN_STATE,
GARAGE_STOP_STATE,
GARAGE_PASS_STATE,
};
extern enum state_type_e state_type;
#define CROSS_AIM (0.49f)
#define COMMON_AIM (0.31f)
#endif /* STATE_H_ */

View File

@@ -1,133 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
float (*mid_track)[2];
int32_t mid_track_count;
float near_angle;
float pure_angle;
float (*rpts)[2];
int rpts_num;
void tracking(){
if (pts_resample_left_count < pts_resample_right_count / 2 && pts_resample_left_count < 50) {
track_type = TRACK_RIGHT;
} else if (pts_resample_right_count < pts_resample_left_count / 2 && pts_resample_right_count < 58) {
track_type = TRACK_LEFT;
} else if (pts_resample_left_count < 20 && pts_resample_right_count > pts_resample_left_count) {
track_type = TRACK_RIGHT;
} else if (pts_resample_right_count < 20 && pts_resample_left_count > pts_resample_right_count) {
track_type = TRACK_LEFT;
}
}
void ElementJudge() {
CheckGarage();
if (garage_type == GARAGE_NONE) {
CheckCross();
if (cross_type == CROSS_NONE) {
CheckCircle();
}
}
if (garage_type != GARAGE_NONE)
{
cross_type = CROSS_NONE;
circle_type = CIRCLE_NONE;
}
}
void ElementRun() {
if (garage_type != GARAGE_NONE) {
RunGarage();
}
else if (cross_type != CROSS_NONE) {
RunCross();
}
else if (circle_type != CIRCLE_NONE) {
RunCircle();
}
}
void MidLineTrack() {
if (cross_type == CROSS_IN) {
if (track_type == TRACK_LEFT) {
mid_track = mid_left; // 这是为了预先分配内存
GetMidLine_Left(pts_far_resample_left + far_Lpt0_rpts0s_id, pts_far_resample_left_count - far_Lpt0_rpts0s_id, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_track_count = pts_far_resample_left_count - far_Lpt0_rpts0s_id;
} else {
mid_track = mid_right; // 这是为了预先分配内存
GetMidLine_Right(pts_far_resample_right + far_Lpt1_rpts1s_id, pts_far_resample_right_count - far_Lpt1_rpts1s_id, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
mid_track_count =pts_far_resample_right_count - far_Lpt1_rpts1s_id;
}
} else {
if (track_type == TRACK_LEFT) {
mid_track = mid_left;
mid_track_count = mid_left_count;
} else {
mid_track = mid_right;
mid_track_count = mid_right_count;
}
}
// 车轮对应点 (纯跟踪起始点)
float cx = InverseMapW[(int) (IMAGE_H * 0.75f)][94];
float cy = InverseMapH[(int) (IMAGE_H * 0.75f)][94];
// 找最近点 (起始点中线归一化)
float min_dist = 1e10;
int begin_id = -1;
for (int i = 0; i < mid_track_count; i++) {
float dx = mid_track[i][1] - cx;
float dy = mid_track[i][0] - cy;
float dist = sqrt(dx * dx + dy * dy);
if (dist < min_dist) {
min_dist = dist;
begin_id = i;
}
}
if (begin_id >= 0 && mid_track_count - begin_id >= 3){
// 归一化中线
mid_track[begin_id][0] = cy;
mid_track[begin_id][1] = cx;
rptsn_num = sizeof(rptsn) / sizeof(rptsn[0]);
GetLinesResample(mid_track + begin_id, mid_track_count - begin_id, rptsn, &rptsn_num, RESAMPLEDIST * PIXPERMETER );
// 远预锚点位置
int aim_idx = clip(round(aim_distance / RESAMPLEDIST), 0, rptsn_num - 1);
//近锚点位置
int aim_idx_near = clip(round(0.25 / RESAMPLEDIST), 0, rptsn_num - 1);
// 计算远锚点偏差值
float dx = rptsn[aim_idx][1] - cx;
float dy = cy - rptsn[aim_idx][0] + 0.2 * PIXPERMETER;
float dn = sqrt(dx * dx + dy * dy);
//float error = -atan2f(dx, dy) * 180 / PI;
// 计算近锚点偏差值
float dx_near = rptsn[aim_idx_near][1] - cx;
float dy_near = cy - rptsn[aim_idx_near][0] + 0.2 * PIXPERMETER;
float dn_near = sqrt(dx_near * dx_near + dy_near * dy_near);
//float error_near = -atan2f(dx_near, dy_near) * 180 / PI;
//考虑近点
near_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx_near / dn_near / dn_near) / PI * 180 ;
//考虑远点
pure_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx/ dn / dn) / PI * 180 ;
}
}

View File

@@ -1,11 +0,0 @@
#ifndef TRACKING
#define TRACKING
void tracking(void);
void ElementJudge(void);
void ElementRun(void);
void MidLineTrack(void);
#endif /* STATE_H_ */

View File

@@ -1,190 +0,0 @@
#include "zf_common_headfile.h"
#include "gl_headfile.h"
float H_inv[3][3] = {{0.092, -0.116, 7.559},
{0.002, 0, 2.415},
{0, -0.001, 0.161}};
// 逆变换,俯视->原图
void transform(float X, float Y, int* x, int* y) {
// Apply inverse transformation
double p[3] = {X, Y, 1.0};
double q[3] = {0.0, 0.0, 0.0};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
q[i] += H_inv[i][j] * p[j];
}
}
*x =(int) (q[0] / q[2]);
*y = (int) (q[1] / q[2]);
}
const float InverseMapH[80][140] = {
{-17.59, -17.51, -17.44, -17.36, -17.29, -17.21, -17.14, -17.07, -16.99, -16.92, -16.84, -16.77, -16.70, -16.62, -16.55, -16.48, -16.41, -16.34, -16.26, -16.19, -16.12, -16.05, -15.98, -15.91, -15.84, -15.77, -15.70, -15.63, -15.56, -15.49, -15.42, -15.35, -15.28, -15.21, -15.14, -15.07, -15.01, -14.94, -14.87, -14.80, -14.73, -14.67, -14.60, -14.53, -14.47, -14.40, -14.33, -14.27, -14.20, -14.13, -14.07, -14.00, -13.94, -13.87, -13.81, -13.74, -13.68, -13.61, -13.55, -13.49, -13.42, -13.36, -13.29, -13.23, -13.17, -13.10, -13.04, -12.98, -12.92, -12.85, -12.79, -12.73, -12.67, -12.61, -12.54, -12.48, -12.42, -12.36, -12.30, -12.24, -12.18, -12.12, -12.06, -12.00, -11.94, -11.88, -11.82, -11.76, -11.70, -11.64, -11.58, -11.52, -11.46, -11.40, -11.35, -11.29, -11.23, -11.17, -11.11, -11.06, -11.00, -10.94, -10.88, -10.83, -10.77, -10.71, -10.66, -10.60, -10.54, -10.49, -10.43, -10.37, -10.32, -10.26, -10.21, -10.15, -10.10, -10.04, -9.99, -9.93, -9.88, -9.82, -9.77, -9.71, -9.66, -9.61, -9.55, -9.50, -9.44, -9.39, -9.34, -9.28, -9.23, -9.18, -9.13, -9.07, -9.02, -8.97, -8.92, -8.86},
{-12.23, -12.17, -12.10, -12.04, -11.98, -11.91, -11.85, -11.78, -11.72, -11.66, -11.59, -11.53, -11.47, -11.40, -11.34, -11.28, -11.22, -11.16, -11.09, -11.03, -10.97, -10.91, -10.85, -10.79, -10.73, -10.66, -10.60, -10.54, -10.48, -10.42, -10.36, -10.30, -10.24, -10.18, -10.12, -10.07, -10.01, -9.95, -9.89, -9.83, -9.77, -9.71, -9.66, -9.60, -9.54, -9.48, -9.43, -9.37, -9.31, -9.25, -9.20, -9.14, -9.08, -9.03, -8.97, -8.92, -8.86, -8.80, -8.75, -8.69, -8.64, -8.58, -8.53, -8.47, -8.42, -8.36, -8.31, -8.25, -8.20, -8.15, -8.09, -8.04, -7.98, -7.93, -7.88, -7.82, -7.77, -7.72, -7.66, -7.61, -7.56, -7.51, -7.45, -7.40, -7.35, -7.30, -7.25, -7.19, -7.14, -7.09, -7.04, -6.99, -6.94, -6.89, -6.84, -6.79, -6.74, -6.68, -6.63, -6.58, -6.53, -6.48, -6.43, -6.38, -6.34, -6.29, -6.24, -6.19, -6.14, -6.09, -6.04, -5.99, -5.94, -5.89, -5.85, -5.80, -5.75, -5.70, -5.65, -5.61, -5.56, -5.51, -5.46, -5.42, -5.37, -5.32, -5.28, -5.23, -5.18, -5.14, -5.09, -5.04, -5.00, -4.95, -4.90, -4.86, -4.81, -4.77, -4.72, -4.67},
{-7.29, -7.23, -7.18, -7.12, -7.07, -7.01, -6.96, -6.90, -6.85, -6.79, -6.74, -6.68, -6.63, -6.58, -6.52, -6.47, -6.42, -6.36, -6.31, -6.26, -6.20, -6.15, -6.10, -6.04, -5.99, -5.94, -5.89, -5.84, -5.78, -5.73, -5.68, -5.63, -5.58, -5.53, -5.47, -5.42, -5.37, -5.32, -5.27, -5.22, -5.17, -5.12, -5.07, -5.02, -4.97, -4.92, -4.87, -4.82, -4.77, -4.72, -4.67, -4.63, -4.58, -4.53, -4.48, -4.43, -4.38, -4.33, -4.29, -4.24, -4.19, -4.14, -4.10, -4.05, -4.00, -3.95, -3.91, -3.86, -3.81, -3.77, -3.72, -3.67, -3.63, -3.58, -3.53, -3.49, -3.44, -3.40, -3.35, -3.30, -3.26, -3.21, -3.17, -3.12, -3.08, -3.03, -2.99, -2.94, -2.90, -2.85, -2.81, -2.77, -2.72, -2.68, -2.63, -2.59, -2.55, -2.50, -2.46, -2.41, -2.37, -2.33, -2.28, -2.24, -2.20, -2.16, -2.11, -2.07, -2.03, -1.99, -1.94, -1.90, -1.86, -1.82, -1.77, -1.73, -1.69, -1.65, -1.61, -1.57, -1.52, -1.48, -1.44, -1.40, -1.36, -1.32, -1.28, -1.24, -1.20, -1.16, -1.12, -1.08, -1.04, -1.00, -0.96, -0.92, -0.88, -0.84, -0.80, -0.76},
{-2.71, -2.66, -2.61, -2.57, -2.52, -2.47, -2.43, -2.38, -2.33, -2.28, -2.24, -2.19, -2.14, -2.10, -2.05, -2.01, -1.96, -1.91, -1.87, -1.82, -1.78, -1.73, -1.69, -1.64, -1.60, -1.55, -1.51, -1.46, -1.42, -1.37, -1.33, -1.28, -1.24, -1.20, -1.15, -1.11, -1.07, -1.02, -0.98, -0.94, -0.89, -0.85, -0.81, -0.76, -0.72, -0.68, -0.63, -0.59, -0.55, -0.51, -0.47, -0.42, -0.38, -0.34, -0.30, -0.26, -0.21, -0.17, -0.13, -0.09, -0.05, -0.01, 0.03, 0.07, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40, 0.44, 0.48, 0.52, 0.56, 0.60, 0.64, 0.68, 0.72, 0.75, 0.79, 0.83, 0.87, 0.91, 0.95, 0.99, 1.03, 1.07, 1.10, 1.14, 1.18, 1.22, 1.26, 1.29, 1.33, 1.37, 1.41, 1.45, 1.48, 1.52, 1.56, 1.60, 1.63, 1.67, 1.71, 1.74, 1.78, 1.82, 1.85, 1.89, 1.93, 1.96, 2.00, 2.04, 2.07, 2.11, 2.15, 2.18, 2.22, 2.25, 2.29, 2.32, 2.36, 2.40, 2.43, 2.47, 2.50, 2.54, 2.57, 2.61, 2.64, 2.68, 2.71, 2.75, 2.78, 2.81, 2.85, 2.88, 2.92},
{1.54, 1.59, 1.63, 1.67, 1.71, 1.75, 1.79, 1.83, 1.87, 1.91, 1.95, 1.99, 2.03, 2.07, 2.11, 2.15, 2.18, 2.22, 2.26, 2.30, 2.34, 2.38, 2.42, 2.46, 2.49, 2.53, 2.57, 2.61, 2.65, 2.69, 2.72, 2.76, 2.80, 2.84, 2.87, 2.91, 2.95, 2.99, 3.02, 3.06, 3.10, 3.13, 3.17, 3.21, 3.25, 3.28, 3.32, 3.35, 3.39, 3.43, 3.46, 3.50, 3.54, 3.57, 3.61, 3.64, 3.68, 3.71, 3.75, 3.78, 3.82, 3.86, 3.89, 3.93, 3.96, 4.00, 4.03, 4.06, 4.10, 4.13, 4.17, 4.20, 4.24, 4.27, 4.31, 4.34, 4.37, 4.41, 4.44, 4.48, 4.51, 4.54, 4.58, 4.61, 4.64, 4.68, 4.71, 4.74, 4.78, 4.81, 4.84, 4.87, 4.91, 4.94, 4.97, 5.01, 5.04, 5.07, 5.10, 5.14, 5.17, 5.20, 5.23, 5.26, 5.30, 5.33, 5.36, 5.39, 5.42, 5.45, 5.49, 5.52, 5.55, 5.58, 5.61, 5.64, 5.67, 5.70, 5.74, 5.77, 5.80, 5.83, 5.86, 5.89, 5.92, 5.95, 5.98, 6.01, 6.04, 6.07, 6.10, 6.13, 6.16, 6.19, 6.22, 6.25, 6.28, 6.31, 6.34, 6.37},
{5.51, 5.54, 5.58, 5.61, 5.65, 5.68, 5.71, 5.75, 5.78, 5.82, 5.85, 5.88, 5.92, 5.95, 5.98, 6.02, 6.05, 6.08, 6.12, 6.15, 6.18, 6.22, 6.25, 6.28, 6.31, 6.35, 6.38, 6.41, 6.44, 6.48, 6.51, 6.54, 6.57, 6.60, 6.64, 6.67, 6.70, 6.73, 6.76, 6.79, 6.83, 6.86, 6.89, 6.92, 6.95, 6.98, 7.01, 7.04, 7.08, 7.11, 7.14, 7.17, 7.20, 7.23, 7.26, 7.29, 7.32, 7.35, 7.38, 7.41, 7.44, 7.47, 7.50, 7.53, 7.56, 7.59, 7.62, 7.65, 7.68, 7.71, 7.74, 7.77, 7.80, 7.83, 7.86, 7.88, 7.91, 7.94, 7.97, 8.00, 8.03, 8.06, 8.09, 8.11, 8.14, 8.17, 8.20, 8.23, 8.26, 8.28, 8.31, 8.34, 8.37, 8.40, 8.42, 8.45, 8.48, 8.51, 8.54, 8.56, 8.59, 8.62, 8.65, 8.67, 8.70, 8.73, 8.75, 8.78, 8.81, 8.84, 8.86, 8.89, 8.92, 8.94, 8.97, 9.00, 9.02, 9.05, 9.08, 9.10, 9.13, 9.16, 9.18, 9.21, 9.23, 9.26, 9.29, 9.31, 9.34, 9.36, 9.39, 9.42, 9.44, 9.47, 9.49, 9.52, 9.54, 9.57, 9.59, 9.62},
{9.21, 9.24, 9.27, 9.29, 9.32, 9.35, 9.38, 9.41, 9.44, 9.47, 9.49, 9.52, 9.55, 9.58, 9.61, 9.64, 9.66, 9.69, 9.72, 9.75, 9.78, 9.80, 9.83, 9.86, 9.89, 9.91, 9.94, 9.97, 10.00, 10.02, 10.05, 10.08, 10.10, 10.13, 10.16, 10.19, 10.21, 10.24, 10.27, 10.29, 10.32, 10.35, 10.37, 10.40, 10.42, 10.45, 10.48, 10.50, 10.53, 10.56, 10.58, 10.61, 10.63, 10.66, 10.68, 10.71, 10.74, 10.76, 10.79, 10.81, 10.84, 10.86, 10.89, 10.91, 10.94, 10.96, 10.99, 11.01, 11.04, 11.06, 11.09, 11.11, 11.14, 11.16, 11.19, 11.21, 11.24, 11.26, 11.29, 11.31, 11.33, 11.36, 11.38, 11.41, 11.43, 11.46, 11.48, 11.50, 11.53, 11.55, 11.57, 11.60, 11.62, 11.65, 11.67, 11.69, 11.72, 11.74, 11.76, 11.79, 11.81, 11.83, 11.86, 11.88, 11.90, 11.93, 11.95, 11.97, 12.00, 12.02, 12.04, 12.06, 12.09, 12.11, 12.13, 12.15, 12.18, 12.20, 12.22, 12.24, 12.27, 12.29, 12.31, 12.33, 12.36, 12.38, 12.40, 12.42, 12.44, 12.47, 12.49, 12.51, 12.53, 12.55, 12.58, 12.60, 12.62, 12.64, 12.66, 12.68},
{12.67, 12.69, 12.72, 12.74, 12.77, 12.79, 12.81, 12.84, 12.86, 12.89, 12.91, 12.93, 12.96, 12.98, 13.00, 13.03, 13.05, 13.07, 13.10, 13.12, 13.14, 13.17, 13.19, 13.21, 13.24, 13.26, 13.28, 13.30, 13.33, 13.35, 13.37, 13.40, 13.42, 13.44, 13.46, 13.49, 13.51, 13.53, 13.55, 13.57, 13.60, 13.62, 13.64, 13.66, 13.68, 13.71, 13.73, 13.75, 13.77, 13.79, 13.82, 13.84, 13.86, 13.88, 13.90, 13.92, 13.94, 13.97, 13.99, 14.01, 14.03, 14.05, 14.07, 14.09, 14.11, 14.14, 14.16, 14.18, 14.20, 14.22, 14.24, 14.26, 14.28, 14.30, 14.32, 14.34, 14.36, 14.38, 14.41, 14.43, 14.45, 14.47, 14.49, 14.51, 14.53, 14.55, 14.57, 14.59, 14.61, 14.63, 14.65, 14.67, 14.69, 14.71, 14.73, 14.75, 14.77, 14.79, 14.81, 14.83, 14.84, 14.86, 14.88, 14.90, 14.92, 14.94, 14.96, 14.98, 15.00, 15.02, 15.04, 15.06, 15.08, 15.10, 15.11, 15.13, 15.15, 15.17, 15.19, 15.21, 15.23, 15.25, 15.26, 15.28, 15.30, 15.32, 15.34, 15.36, 15.38, 15.39, 15.41, 15.43, 15.45, 15.47, 15.49, 15.50, 15.52, 15.54, 15.56, 15.58},
{15.92, 15.94, 15.96, 15.98, 16.00, 16.02, 16.04, 16.05, 16.07, 16.09, 16.11, 16.13, 16.15, 16.17, 16.19, 16.21, 16.23, 16.25, 16.27, 16.29, 16.31, 16.32, 16.34, 16.36, 16.38, 16.40, 16.42, 16.44, 16.46, 16.48, 16.49, 16.51, 16.53, 16.55, 16.57, 16.59, 16.61, 16.62, 16.64, 16.66, 16.68, 16.70, 16.72, 16.73, 16.75, 16.77, 16.79, 16.81, 16.82, 16.84, 16.86, 16.88, 16.90, 16.91, 16.93, 16.95, 16.97, 16.98, 17.00, 17.02, 17.04, 17.05, 17.07, 17.09, 17.11, 17.12, 17.14, 17.16, 17.18, 17.19, 17.21, 17.23, 17.24, 17.26, 17.28, 17.29, 17.31, 17.33, 17.35, 17.36, 17.38, 17.40, 17.41, 17.43, 17.45, 17.46, 17.48, 17.50, 17.51, 17.53, 17.55, 17.56, 17.58, 17.59, 17.61, 17.63, 17.64, 17.66, 17.68, 17.69, 17.71, 17.72, 17.74, 17.76, 17.77, 17.79, 17.81, 17.82, 17.84, 17.85, 17.87, 17.88, 17.90, 17.92, 17.93, 17.95, 17.96, 17.98, 17.99, 18.01, 18.03, 18.04, 18.06, 18.07, 18.09, 18.10, 18.12, 18.13, 18.15, 18.16, 18.18, 18.19, 18.21, 18.22, 18.24, 18.25, 18.27, 18.29, 18.30, 18.32},
{18.97, 18.98, 19.00, 19.02, 19.03, 19.05, 19.06, 19.08, 19.09, 19.11, 19.13, 19.14, 19.16, 19.17, 19.19, 19.20, 19.22, 19.24, 19.25, 19.27, 19.28, 19.30, 19.31, 19.33, 19.34, 19.36, 19.37, 19.39, 19.40, 19.42, 19.43, 19.45, 19.46, 19.48, 19.49, 19.51, 19.52, 19.54, 19.55, 19.57, 19.58, 19.60, 19.61, 19.63, 19.64, 19.66, 19.67, 19.69, 19.70, 19.71, 19.73, 19.74, 19.76, 19.77, 19.79, 19.80, 19.82, 19.83, 19.84, 19.86, 19.87, 19.89, 19.90, 19.91, 19.93, 19.94, 19.96, 19.97, 19.98, 20.00, 20.01, 20.03, 20.04, 20.05, 20.07, 20.08, 20.10, 20.11, 20.12, 20.14, 20.15, 20.16, 20.18, 20.19, 20.20, 20.22, 20.23, 20.24, 20.26, 20.27, 20.28, 20.30, 20.31, 20.32, 20.34, 20.35, 20.36, 20.38, 20.39, 20.40, 20.42, 20.43, 20.44, 20.46, 20.47, 20.48, 20.49, 20.51, 20.52, 20.53, 20.55, 20.56, 20.57, 20.58, 20.60, 20.61, 20.62, 20.64, 20.65, 20.66, 20.67, 20.69, 20.70, 20.71, 20.72, 20.74, 20.75, 20.76, 20.77, 20.79, 20.80, 20.81, 20.82, 20.84, 20.85, 20.86, 20.87, 20.88, 20.90, 20.91},
{21.84, 21.85, 21.87, 21.88, 21.89, 21.90, 21.91, 21.93, 21.94, 21.95, 21.96, 21.98, 21.99, 22.00, 22.01, 22.03, 22.04, 22.05, 22.06, 22.07, 22.09, 22.10, 22.11, 22.12, 22.13, 22.15, 22.16, 22.17, 22.18, 22.19, 22.21, 22.22, 22.23, 22.24, 22.25, 22.27, 22.28, 22.29, 22.30, 22.31, 22.32, 22.34, 22.35, 22.36, 22.37, 22.38, 22.39, 22.40, 22.42, 22.43, 22.44, 22.45, 22.46, 22.47, 22.48, 22.50, 22.51, 22.52, 22.53, 22.54, 22.55, 22.56, 22.57, 22.58, 22.60, 22.61, 22.62, 22.63, 22.64, 22.65, 22.66, 22.67, 22.68, 22.69, 22.71, 22.72, 22.73, 22.74, 22.75, 22.76, 22.77, 22.78, 22.79, 22.80, 22.81, 22.82, 22.83, 22.84, 22.86, 22.87, 22.88, 22.89, 22.90, 22.91, 22.92, 22.93, 22.94, 22.95, 22.96, 22.97, 22.98, 22.99, 23.00, 23.01, 23.02, 23.03, 23.04, 23.05, 23.06, 23.07, 23.08, 23.09, 23.10, 23.11, 23.12, 23.13, 23.14, 23.15, 23.16, 23.17, 23.18, 23.19, 23.20, 23.21, 23.22, 23.23, 23.24, 23.25, 23.26, 23.27, 23.28, 23.29, 23.30, 23.31, 23.32, 23.33, 23.34, 23.35, 23.36, 23.37},
{24.55, 24.56, 24.57, 24.58, 24.59, 24.60, 24.61, 24.61, 24.62, 24.63, 24.64, 24.65, 24.66, 24.67, 24.68, 24.69, 24.70, 24.71, 24.72, 24.73, 24.74, 24.74, 24.75, 24.76, 24.77, 24.78, 24.79, 24.80, 24.81, 24.82, 24.83, 24.83, 24.84, 24.85, 24.86, 24.87, 24.88, 24.89, 24.90, 24.91, 24.91, 24.92, 24.93, 24.94, 24.95, 24.96, 24.97, 24.98, 24.98, 24.99, 25.00, 25.01, 25.02, 25.03, 25.04, 25.04, 25.05, 25.06, 25.07, 25.08, 25.09, 25.10, 25.10, 25.11, 25.12, 25.13, 25.14, 25.15, 25.15, 25.16, 25.17, 25.18, 25.19, 25.20, 25.20, 25.21, 25.22, 25.23, 25.24, 25.24, 25.25, 25.26, 25.27, 25.28, 25.29, 25.29, 25.30, 25.31, 25.32, 25.33, 25.33, 25.34, 25.35, 25.36, 25.37, 25.37, 25.38, 25.39, 25.40, 25.40, 25.41, 25.42, 25.43, 25.44, 25.44, 25.45, 25.46, 25.47, 25.48, 25.48, 25.49, 25.50, 25.51, 25.51, 25.52, 25.53, 25.54, 25.54, 25.55, 25.56, 25.57, 25.57, 25.58, 25.59, 25.60, 25.60, 25.61, 25.62, 25.63, 25.63, 25.64, 25.65, 25.66, 25.66, 25.67, 25.68, 25.69, 25.69, 25.70, 25.71},
{27.11, 27.11, 27.12, 27.13, 27.13, 27.14, 27.15, 27.15, 27.16, 27.17, 27.17, 27.18, 27.19, 27.19, 27.20, 27.21, 27.21, 27.22, 27.23, 27.23, 27.24, 27.25, 27.25, 27.26, 27.27, 27.27, 27.28, 27.29, 27.29, 27.30, 27.30, 27.31, 27.32, 27.32, 27.33, 27.34, 27.34, 27.35, 27.35, 27.36, 27.37, 27.37, 27.38, 27.39, 27.39, 27.40, 27.40, 27.41, 27.42, 27.42, 27.43, 27.44, 27.44, 27.45, 27.45, 27.46, 27.47, 27.47, 27.48, 27.48, 27.49, 27.50, 27.50, 27.51, 27.51, 27.52, 27.53, 27.53, 27.54, 27.54, 27.55, 27.56, 27.56, 27.57, 27.57, 27.58, 27.58, 27.59, 27.60, 27.60, 27.61, 27.61, 27.62, 27.63, 27.63, 27.64, 27.64, 27.65, 27.65, 27.66, 27.67, 27.67, 27.68, 27.68, 27.69, 27.69, 27.70, 27.71, 27.71, 27.72, 27.72, 27.73, 27.73, 27.74, 27.74, 27.75, 27.76, 27.76, 27.77, 27.77, 27.78, 27.78, 27.79, 27.79, 27.80, 27.80, 27.81, 27.82, 27.82, 27.83, 27.83, 27.84, 27.84, 27.85, 27.85, 27.86, 27.86, 27.87, 27.87, 27.88, 27.89, 27.89, 27.90, 27.90, 27.91, 27.91, 27.92, 27.92, 27.93, 27.93},
{29.53, 29.53, 29.54, 29.54, 29.55, 29.55, 29.55, 29.56, 29.56, 29.57, 29.57, 29.58, 29.58, 29.58, 29.59, 29.59, 29.60, 29.60, 29.60, 29.61, 29.61, 29.62, 29.62, 29.62, 29.63, 29.63, 29.64, 29.64, 29.64, 29.65, 29.65, 29.66, 29.66, 29.66, 29.67, 29.67, 29.68, 29.68, 29.68, 29.69, 29.69, 29.70, 29.70, 29.70, 29.71, 29.71, 29.72, 29.72, 29.72, 29.73, 29.73, 29.74, 29.74, 29.74, 29.75, 29.75, 29.76, 29.76, 29.76, 29.77, 29.77, 29.77, 29.78, 29.78, 29.79, 29.79, 29.79, 29.80, 29.80, 29.80, 29.81, 29.81, 29.82, 29.82, 29.82, 29.83, 29.83, 29.83, 29.84, 29.84, 29.85, 29.85, 29.85, 29.86, 29.86, 29.86, 29.87, 29.87, 29.87, 29.88, 29.88, 29.89, 29.89, 29.89, 29.90, 29.90, 29.90, 29.91, 29.91, 29.91, 29.92, 29.92, 29.92, 29.93, 29.93, 29.94, 29.94, 29.94, 29.95, 29.95, 29.95, 29.96, 29.96, 29.96, 29.97, 29.97, 29.97, 29.98, 29.98, 29.98, 29.99, 29.99, 29.99, 30.00, 30.00, 30.00, 30.01, 30.01, 30.01, 30.02, 30.02, 30.02, 30.03, 30.03, 30.03, 30.04, 30.04, 30.04, 30.05, 30.05},
{31.82, 31.83, 31.83, 31.83, 31.83, 31.83, 31.84, 31.84, 31.84, 31.84, 31.84, 31.84, 31.85, 31.85, 31.85, 31.85, 31.85, 31.86, 31.86, 31.86, 31.86, 31.86, 31.87, 31.87, 31.87, 31.87, 31.87, 31.88, 31.88, 31.88, 31.88, 31.88, 31.89, 31.89, 31.89, 31.89, 31.89, 31.90, 31.90, 31.90, 31.90, 31.90, 31.90, 31.91, 31.91, 31.91, 31.91, 31.91, 31.92, 31.92, 31.92, 31.92, 31.92, 31.92, 31.93, 31.93, 31.93, 31.93, 31.93, 31.94, 31.94, 31.94, 31.94, 31.94, 31.94, 31.95, 31.95, 31.95, 31.95, 31.95, 31.96, 31.96, 31.96, 31.96, 31.96, 31.96, 31.97, 31.97, 31.97, 31.97, 31.97, 31.98, 31.98, 31.98, 31.98, 31.98, 31.98, 31.99, 31.99, 31.99, 31.99, 31.99, 31.99, 32.00, 32.00, 32.00, 32.00, 32.00, 32.00, 32.01, 32.01, 32.01, 32.01, 32.01, 32.01, 32.02, 32.02, 32.02, 32.02, 32.02, 32.02, 32.03, 32.03, 32.03, 32.03, 32.03, 32.03, 32.04, 32.04, 32.04, 32.04, 32.04, 32.04, 32.05, 32.05, 32.05, 32.05, 32.05, 32.05, 32.06, 32.06, 32.06, 32.06, 32.06, 32.06, 32.07, 32.07, 32.07, 32.07, 32.07},
{34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00, 34.00},
{36.07, 36.07, 36.06, 36.06, 36.06, 36.06, 36.06, 36.06, 36.05, 36.05, 36.05, 36.05, 36.05, 36.05, 36.04, 36.04, 36.04, 36.04, 36.04, 36.03, 36.03, 36.03, 36.03, 36.03, 36.03, 36.02, 36.02, 36.02, 36.02, 36.02, 36.02, 36.01, 36.01, 36.01, 36.01, 36.01, 36.00, 36.00, 36.00, 36.00, 36.00, 36.00, 35.99, 35.99, 35.99, 35.99, 35.99, 35.99, 35.98, 35.98, 35.98, 35.98, 35.98, 35.98, 35.97, 35.97, 35.97, 35.97, 35.97, 35.97, 35.96, 35.96, 35.96, 35.96, 35.96, 35.96, 35.95, 35.95, 35.95, 35.95, 35.95, 35.95, 35.95, 35.94, 35.94, 35.94, 35.94, 35.94, 35.94, 35.93, 35.93, 35.93, 35.93, 35.93, 35.93, 35.92, 35.92, 35.92, 35.92, 35.92, 35.92, 35.92, 35.91, 35.91, 35.91, 35.91, 35.91, 35.91, 35.90, 35.90, 35.90, 35.90, 35.90, 35.90, 35.89, 35.89, 35.89, 35.89, 35.89, 35.89, 35.89, 35.88, 35.88, 35.88, 35.88, 35.88, 35.88, 35.88, 35.87, 35.87, 35.87, 35.87, 35.87, 35.87, 35.86, 35.86, 35.86, 35.86, 35.86, 35.86, 35.86, 35.85, 35.85, 35.85, 35.85, 35.85, 35.85, 35.85, 35.84, 35.84},
{38.04, 38.03, 38.03, 38.03, 38.02, 38.02, 38.02, 38.01, 38.01, 38.01, 38.00, 38.00, 38.00, 37.99, 37.99, 37.99, 37.98, 37.98, 37.98, 37.97, 37.97, 37.96, 37.96, 37.96, 37.95, 37.95, 37.95, 37.94, 37.94, 37.94, 37.94, 37.93, 37.93, 37.93, 37.92, 37.92, 37.92, 37.91, 37.91, 37.91, 37.90, 37.90, 37.90, 37.89, 37.89, 37.89, 37.88, 37.88, 37.88, 37.87, 37.87, 37.87, 37.86, 37.86, 37.86, 37.85, 37.85, 37.85, 37.84, 37.84, 37.84, 37.84, 37.83, 37.83, 37.83, 37.82, 37.82, 37.82, 37.81, 37.81, 37.81, 37.80, 37.80, 37.80, 37.80, 37.79, 37.79, 37.79, 37.78, 37.78, 37.78, 37.77, 37.77, 37.77, 37.76, 37.76, 37.76, 37.76, 37.75, 37.75, 37.75, 37.74, 37.74, 37.74, 37.73, 37.73, 37.73, 37.73, 37.72, 37.72, 37.72, 37.71, 37.71, 37.71, 37.71, 37.70, 37.70, 37.70, 37.69, 37.69, 37.69, 37.68, 37.68, 37.68, 37.68, 37.67, 37.67, 37.67, 37.66, 37.66, 37.66, 37.66, 37.65, 37.65, 37.65, 37.64, 37.64, 37.64, 37.64, 37.63, 37.63, 37.63, 37.63, 37.62, 37.62, 37.62, 37.61, 37.61, 37.61, 37.61},
{39.91, 39.91, 39.90, 39.90, 39.89, 39.89, 39.88, 39.88, 39.87, 39.87, 39.86, 39.86, 39.85, 39.85, 39.84, 39.84, 39.83, 39.83, 39.82, 39.82, 39.81, 39.81, 39.80, 39.80, 39.79, 39.79, 39.78, 39.78, 39.78, 39.77, 39.77, 39.76, 39.76, 39.75, 39.75, 39.74, 39.74, 39.73, 39.73, 39.72, 39.72, 39.71, 39.71, 39.71, 39.70, 39.70, 39.69, 39.69, 39.68, 39.68, 39.67, 39.67, 39.66, 39.66, 39.65, 39.65, 39.65, 39.64, 39.64, 39.63, 39.63, 39.62, 39.62, 39.61, 39.61, 39.61, 39.60, 39.60, 39.59, 39.59, 39.58, 39.58, 39.57, 39.57, 39.57, 39.56, 39.56, 39.55, 39.55, 39.54, 39.54, 39.53, 39.53, 39.53, 39.52, 39.52, 39.51, 39.51, 39.50, 39.50, 39.50, 39.49, 39.49, 39.48, 39.48, 39.47, 39.47, 39.47, 39.46, 39.46, 39.45, 39.45, 39.45, 39.44, 39.44, 39.43, 39.43, 39.42, 39.42, 39.42, 39.41, 39.41, 39.40, 39.40, 39.40, 39.39, 39.39, 39.38, 39.38, 39.37, 39.37, 39.37, 39.36, 39.36, 39.35, 39.35, 39.35, 39.34, 39.34, 39.33, 39.33, 39.33, 39.32, 39.32, 39.31, 39.31, 39.31, 39.30, 39.30, 39.29},
{41.70, 41.69, 41.69, 41.68, 41.67, 41.67, 41.66, 41.65, 41.65, 41.64, 41.64, 41.63, 41.62, 41.62, 41.61, 41.61, 41.60, 41.59, 41.59, 41.58, 41.57, 41.57, 41.56, 41.56, 41.55, 41.54, 41.54, 41.53, 41.53, 41.52, 41.51, 41.51, 41.50, 41.50, 41.49, 41.48, 41.48, 41.47, 41.47, 41.46, 41.45, 41.45, 41.44, 41.44, 41.43, 41.42, 41.42, 41.41, 41.41, 41.40, 41.40, 41.39, 41.38, 41.38, 41.37, 41.37, 41.36, 41.36, 41.35, 41.34, 41.34, 41.33, 41.33, 41.32, 41.32, 41.31, 41.30, 41.30, 41.29, 41.29, 41.28, 41.28, 41.27, 41.26, 41.26, 41.25, 41.25, 41.24, 41.24, 41.23, 41.23, 41.22, 41.21, 41.21, 41.20, 41.20, 41.19, 41.19, 41.18, 41.18, 41.17, 41.16, 41.16, 41.15, 41.15, 41.14, 41.14, 41.13, 41.13, 41.12, 41.12, 41.11, 41.10, 41.10, 41.09, 41.09, 41.08, 41.08, 41.07, 41.07, 41.06, 41.06, 41.05, 41.05, 41.04, 41.04, 41.03, 41.03, 41.02, 41.01, 41.01, 41.00, 41.00, 40.99, 40.99, 40.98, 40.98, 40.97, 40.97, 40.96, 40.96, 40.95, 40.95, 40.94, 40.94, 40.93, 40.93, 40.92, 40.92, 40.91},
{43.41, 43.40, 43.39, 43.38, 43.38, 43.37, 43.36, 43.35, 43.35, 43.34, 43.33, 43.32, 43.32, 43.31, 43.30, 43.29, 43.29, 43.28, 43.27, 43.26, 43.26, 43.25, 43.24, 43.24, 43.23, 43.22, 43.21, 43.21, 43.20, 43.19, 43.18, 43.18, 43.17, 43.16, 43.16, 43.15, 43.14, 43.13, 43.13, 43.12, 43.11, 43.11, 43.10, 43.09, 43.09, 43.08, 43.07, 43.06, 43.06, 43.05, 43.04, 43.04, 43.03, 43.02, 43.02, 43.01, 43.00, 42.99, 42.99, 42.98, 42.97, 42.97, 42.96, 42.95, 42.95, 42.94, 42.93, 42.93, 42.92, 42.91, 42.91, 42.90, 42.89, 42.89, 42.88, 42.87, 42.87, 42.86, 42.85, 42.85, 42.84, 42.83, 42.83, 42.82, 42.81, 42.81, 42.80, 42.79, 42.79, 42.78, 42.77, 42.77, 42.76, 42.75, 42.75, 42.74, 42.73, 42.73, 42.72, 42.71, 42.71, 42.70, 42.70, 42.69, 42.68, 42.68, 42.67, 42.66, 42.66, 42.65, 42.64, 42.64, 42.63, 42.62, 42.62, 42.61, 42.61, 42.60, 42.59, 42.59, 42.58, 42.57, 42.57, 42.56, 42.56, 42.55, 42.54, 42.54, 42.53, 42.52, 42.52, 42.51, 42.51, 42.50, 42.49, 42.49, 42.48, 42.48, 42.47, 42.46},
{45.04, 45.03, 45.02, 45.01, 45.00, 44.99, 44.99, 44.98, 44.97, 44.96, 44.95, 44.94, 44.93, 44.93, 44.92, 44.91, 44.90, 44.89, 44.88, 44.87, 44.87, 44.86, 44.85, 44.84, 44.83, 44.82, 44.82, 44.81, 44.80, 44.79, 44.78, 44.78, 44.77, 44.76, 44.75, 44.74, 44.73, 44.73, 44.72, 44.71, 44.70, 44.69, 44.69, 44.68, 44.67, 44.66, 44.65, 44.64, 44.64, 44.63, 44.62, 44.61, 44.60, 44.60, 44.59, 44.58, 44.57, 44.56, 44.56, 44.55, 44.54, 44.53, 44.53, 44.52, 44.51, 44.50, 44.49, 44.49, 44.48, 44.47, 44.46, 44.46, 44.45, 44.44, 44.43, 44.42, 44.42, 44.41, 44.40, 44.39, 44.39, 44.38, 44.37, 44.36, 44.36, 44.35, 44.34, 44.33, 44.32, 44.32, 44.31, 44.30, 44.29, 44.29, 44.28, 44.27, 44.26, 44.26, 44.25, 44.24, 44.23, 44.23, 44.22, 44.21, 44.21, 44.20, 44.19, 44.18, 44.18, 44.17, 44.16, 44.15, 44.15, 44.14, 44.13, 44.12, 44.12, 44.11, 44.10, 44.10, 44.09, 44.08, 44.07, 44.07, 44.06, 44.05, 44.05, 44.04, 44.03, 44.02, 44.02, 44.01, 44.00, 44.00, 43.99, 43.98, 43.97, 43.97, 43.96, 43.95},
{46.60, 46.59, 46.58, 46.57, 46.56, 46.55, 46.54, 46.53, 46.52, 46.51, 46.50, 46.49, 46.48, 46.47, 46.46, 46.45, 46.44, 46.44, 46.43, 46.42, 46.41, 46.40, 46.39, 46.38, 46.37, 46.36, 46.35, 46.34, 46.33, 46.32, 46.31, 46.30, 46.30, 46.29, 46.28, 46.27, 46.26, 46.25, 46.24, 46.23, 46.22, 46.21, 46.20, 46.20, 46.19, 46.18, 46.17, 46.16, 46.15, 46.14, 46.13, 46.12, 46.11, 46.11, 46.10, 46.09, 46.08, 46.07, 46.06, 46.05, 46.04, 46.03, 46.03, 46.02, 46.01, 46.00, 45.99, 45.98, 45.97, 45.96, 45.96, 45.95, 45.94, 45.93, 45.92, 45.91, 45.90, 45.90, 45.89, 45.88, 45.87, 45.86, 45.85, 45.84, 45.84, 45.83, 45.82, 45.81, 45.80, 45.79, 45.78, 45.78, 45.77, 45.76, 45.75, 45.74, 45.73, 45.73, 45.72, 45.71, 45.70, 45.69, 45.68, 45.68, 45.67, 45.66, 45.65, 45.64, 45.63, 45.63, 45.62, 45.61, 45.60, 45.59, 45.59, 45.58, 45.57, 45.56, 45.55, 45.54, 45.54, 45.53, 45.52, 45.51, 45.50, 45.50, 45.49, 45.48, 45.47, 45.46, 45.46, 45.45, 45.44, 45.43, 45.42, 45.42, 45.41, 45.40, 45.39, 45.38},
{48.09, 48.08, 48.07, 48.06, 48.05, 48.04, 48.03, 48.02, 48.01, 48.00, 47.99, 47.98, 47.97, 47.96, 47.94, 47.93, 47.92, 47.91, 47.90, 47.89, 47.88, 47.87, 47.86, 47.85, 47.84, 47.83, 47.82, 47.81, 47.80, 47.79, 47.78, 47.77, 47.76, 47.75, 47.74, 47.73, 47.72, 47.71, 47.70, 47.69, 47.68, 47.67, 47.66, 47.65, 47.64, 47.63, 47.62, 47.61, 47.60, 47.59, 47.58, 47.57, 47.56, 47.55, 47.54, 47.53, 47.52, 47.51, 47.50, 47.49, 47.48, 47.47, 47.47, 47.46, 47.45, 47.44, 47.43, 47.42, 47.41, 47.40, 47.39, 47.38, 47.37, 47.36, 47.35, 47.34, 47.33, 47.32, 47.31, 47.30, 47.29, 47.28, 47.27, 47.27, 47.26, 47.25, 47.24, 47.23, 47.22, 47.21, 47.20, 47.19, 47.18, 47.17, 47.16, 47.15, 47.14, 47.14, 47.13, 47.12, 47.11, 47.10, 47.09, 47.08, 47.07, 47.06, 47.05, 47.04, 47.04, 47.03, 47.02, 47.01, 47.00, 46.99, 46.98, 46.97, 46.96, 46.95, 46.95, 46.94, 46.93, 46.92, 46.91, 46.90, 46.89, 46.88, 46.87, 46.87, 46.86, 46.85, 46.84, 46.83, 46.82, 46.81, 46.80, 46.80, 46.79, 46.78, 46.77, 46.76},
{49.52, 49.51, 49.50, 49.49, 49.48, 49.47, 49.46, 49.44, 49.43, 49.42, 49.41, 49.40, 49.39, 49.38, 49.37, 49.35, 49.34, 49.33, 49.32, 49.31, 49.30, 49.29, 49.28, 49.27, 49.25, 49.24, 49.23, 49.22, 49.21, 49.20, 49.19, 49.18, 49.17, 49.16, 49.15, 49.13, 49.12, 49.11, 49.10, 49.09, 49.08, 49.07, 49.06, 49.05, 49.04, 49.03, 49.02, 49.01, 48.99, 48.98, 48.97, 48.96, 48.95, 48.94, 48.93, 48.92, 48.91, 48.90, 48.89, 48.88, 48.87, 48.86, 48.85, 48.84, 48.83, 48.82, 48.81, 48.80, 48.79, 48.77, 48.76, 48.75, 48.74, 48.73, 48.72, 48.71, 48.70, 48.69, 48.68, 48.67, 48.66, 48.65, 48.64, 48.63, 48.62, 48.61, 48.60, 48.59, 48.58, 48.57, 48.56, 48.55, 48.54, 48.53, 48.52, 48.51, 48.50, 48.49, 48.48, 48.47, 48.46, 48.45, 48.44, 48.43, 48.42, 48.41, 48.40, 48.39, 48.38, 48.37, 48.36, 48.35, 48.34, 48.33, 48.32, 48.31, 48.30, 48.30, 48.29, 48.28, 48.27, 48.26, 48.25, 48.24, 48.23, 48.22, 48.21, 48.20, 48.19, 48.18, 48.17, 48.16, 48.15, 48.14, 48.13, 48.12, 48.11, 48.10, 48.09, 48.09},
{50.90, 50.89, 50.87, 50.86, 50.85, 50.84, 50.82, 50.81, 50.80, 50.79, 50.78, 50.76, 50.75, 50.74, 50.73, 50.72, 50.70, 50.69, 50.68, 50.67, 50.66, 50.65, 50.63, 50.62, 50.61, 50.60, 50.59, 50.58, 50.56, 50.55, 50.54, 50.53, 50.52, 50.51, 50.49, 50.48, 50.47, 50.46, 50.45, 50.44, 50.42, 50.41, 50.40, 50.39, 50.38, 50.37, 50.36, 50.34, 50.33, 50.32, 50.31, 50.30, 50.29, 50.28, 50.27, 50.25, 50.24, 50.23, 50.22, 50.21, 50.20, 50.19, 50.18, 50.16, 50.15, 50.14, 50.13, 50.12, 50.11, 50.10, 50.09, 50.08, 50.07, 50.05, 50.04, 50.03, 50.02, 50.01, 50.00, 49.99, 49.98, 49.97, 49.96, 49.95, 49.93, 49.92, 49.91, 49.90, 49.89, 49.88, 49.87, 49.86, 49.85, 49.84, 49.83, 49.82, 49.81, 49.79, 49.78, 49.77, 49.76, 49.75, 49.74, 49.73, 49.72, 49.71, 49.70, 49.69, 49.68, 49.67, 49.66, 49.65, 49.64, 49.63, 49.62, 49.61, 49.60, 49.59, 49.57, 49.56, 49.55, 49.54, 49.53, 49.52, 49.51, 49.50, 49.49, 49.48, 49.47, 49.46, 49.45, 49.44, 49.43, 49.42, 49.41, 49.40, 49.39, 49.38, 49.37, 49.36},
{52.22, 52.20, 52.19, 52.18, 52.17, 52.15, 52.14, 52.13, 52.11, 52.10, 52.09, 52.08, 52.06, 52.05, 52.04, 52.03, 52.01, 52.00, 51.99, 51.98, 51.96, 51.95, 51.94, 51.93, 51.91, 51.90, 51.89, 51.88, 51.86, 51.85, 51.84, 51.83, 51.81, 51.80, 51.79, 51.78, 51.77, 51.75, 51.74, 51.73, 51.72, 51.70, 51.69, 51.68, 51.67, 51.66, 51.64, 51.63, 51.62, 51.61, 51.60, 51.58, 51.57, 51.56, 51.55, 51.54, 51.52, 51.51, 51.50, 51.49, 51.48, 51.47, 51.45, 51.44, 51.43, 51.42, 51.41, 51.39, 51.38, 51.37, 51.36, 51.35, 51.34, 51.32, 51.31, 51.30, 51.29, 51.28, 51.27, 51.26, 51.24, 51.23, 51.22, 51.21, 51.20, 51.19, 51.17, 51.16, 51.15, 51.14, 51.13, 51.12, 51.11, 51.10, 51.08, 51.07, 51.06, 51.05, 51.04, 51.03, 51.02, 51.01, 50.99, 50.98, 50.97, 50.96, 50.95, 50.94, 50.93, 50.92, 50.91, 50.89, 50.88, 50.87, 50.86, 50.85, 50.84, 50.83, 50.82, 50.81, 50.80, 50.78, 50.77, 50.76, 50.75, 50.74, 50.73, 50.72, 50.71, 50.70, 50.69, 50.68, 50.67, 50.65, 50.64, 50.63, 50.62, 50.61, 50.60, 50.59},
{53.48, 53.47, 53.46, 53.44, 53.43, 53.42, 53.40, 53.39, 53.38, 53.36, 53.35, 53.34, 53.32, 53.31, 53.30, 53.28, 53.27, 53.26, 53.24, 53.23, 53.22, 53.21, 53.19, 53.18, 53.17, 53.15, 53.14, 53.13, 53.11, 53.10, 53.09, 53.08, 53.06, 53.05, 53.04, 53.02, 53.01, 53.00, 52.99, 52.97, 52.96, 52.95, 52.93, 52.92, 52.91, 52.90, 52.88, 52.87, 52.86, 52.85, 52.83, 52.82, 52.81, 52.80, 52.78, 52.77, 52.76, 52.75, 52.73, 52.72, 52.71, 52.70, 52.68, 52.67, 52.66, 52.65, 52.63, 52.62, 52.61, 52.60, 52.58, 52.57, 52.56, 52.55, 52.54, 52.52, 52.51, 52.50, 52.49, 52.47, 52.46, 52.45, 52.44, 52.43, 52.41, 52.40, 52.39, 52.38, 52.37, 52.35, 52.34, 52.33, 52.32, 52.31, 52.29, 52.28, 52.27, 52.26, 52.25, 52.24, 52.22, 52.21, 52.20, 52.19, 52.18, 52.17, 52.15, 52.14, 52.13, 52.12, 52.11, 52.10, 52.08, 52.07, 52.06, 52.05, 52.04, 52.03, 52.01, 52.00, 51.99, 51.98, 51.97, 51.96, 51.95, 51.93, 51.92, 51.91, 51.90, 51.89, 51.88, 51.87, 51.85, 51.84, 51.83, 51.82, 51.81, 51.80, 51.79, 51.78},
{54.70, 54.69, 54.67, 54.66, 54.65, 54.63, 54.62, 54.60, 54.59, 54.58, 54.56, 54.55, 54.54, 54.52, 54.51, 54.49, 54.48, 54.47, 54.45, 54.44, 54.43, 54.41, 54.40, 54.38, 54.37, 54.36, 54.34, 54.33, 54.32, 54.30, 54.29, 54.28, 54.26, 54.25, 54.24, 54.22, 54.21, 54.20, 54.18, 54.17, 54.16, 54.14, 54.13, 54.12, 54.10, 54.09, 54.08, 54.06, 54.05, 54.04, 54.02, 54.01, 54.00, 53.98, 53.97, 53.96, 53.95, 53.93, 53.92, 53.91, 53.89, 53.88, 53.87, 53.85, 53.84, 53.83, 53.82, 53.80, 53.79, 53.78, 53.76, 53.75, 53.74, 53.73, 53.71, 53.70, 53.69, 53.68, 53.66, 53.65, 53.64, 53.62, 53.61, 53.60, 53.59, 53.57, 53.56, 53.55, 53.54, 53.52, 53.51, 53.50, 53.49, 53.47, 53.46, 53.45, 53.44, 53.42, 53.41, 53.40, 53.39, 53.38, 53.36, 53.35, 53.34, 53.33, 53.31, 53.30, 53.29, 53.28, 53.27, 53.25, 53.24, 53.23, 53.22, 53.21, 53.19, 53.18, 53.17, 53.16, 53.14, 53.13, 53.12, 53.11, 53.10, 53.08, 53.07, 53.06, 53.05, 53.04, 53.03, 53.01, 53.00, 52.99, 52.98, 52.97, 52.95, 52.94, 52.93, 52.92},
{55.88, 55.86, 55.85, 55.83, 55.82, 55.80, 55.79, 55.77, 55.76, 55.75, 55.73, 55.72, 55.70, 55.69, 55.67, 55.66, 55.65, 55.63, 55.62, 55.60, 55.59, 55.57, 55.56, 55.55, 55.53, 55.52, 55.50, 55.49, 55.48, 55.46, 55.45, 55.43, 55.42, 55.41, 55.39, 55.38, 55.36, 55.35, 55.34, 55.32, 55.31, 55.29, 55.28, 55.27, 55.25, 55.24, 55.23, 55.21, 55.20, 55.19, 55.17, 55.16, 55.14, 55.13, 55.12, 55.10, 55.09, 55.08, 55.06, 55.05, 55.04, 55.02, 55.01, 55.00, 54.98, 54.97, 54.96, 54.94, 54.93, 54.92, 54.90, 54.89, 54.88, 54.86, 54.85, 54.84, 54.82, 54.81, 54.80, 54.78, 54.77, 54.76, 54.74, 54.73, 54.72, 54.70, 54.69, 54.68, 54.67, 54.65, 54.64, 54.63, 54.61, 54.60, 54.59, 54.58, 54.56, 54.55, 54.54, 54.52, 54.51, 54.50, 54.49, 54.47, 54.46, 54.45, 54.43, 54.42, 54.41, 54.40, 54.38, 54.37, 54.36, 54.35, 54.33, 54.32, 54.31, 54.30, 54.28, 54.27, 54.26, 54.25, 54.23, 54.22, 54.21, 54.20, 54.18, 54.17, 54.16, 54.15, 54.13, 54.12, 54.11, 54.10, 54.08, 54.07, 54.06, 54.05, 54.04, 54.02},
{57.01, 56.99, 56.98, 56.96, 56.95, 56.93, 56.92, 56.90, 56.89, 56.87, 56.86, 56.84, 56.83, 56.81, 56.80, 56.78, 56.77, 56.75, 56.74, 56.72, 56.71, 56.69, 56.68, 56.66, 56.65, 56.64, 56.62, 56.61, 56.59, 56.58, 56.56, 56.55, 56.53, 56.52, 56.51, 56.49, 56.48, 56.46, 56.45, 56.43, 56.42, 56.41, 56.39, 56.38, 56.36, 56.35, 56.33, 56.32, 56.31, 56.29, 56.28, 56.26, 56.25, 56.24, 56.22, 56.21, 56.19, 56.18, 56.17, 56.15, 56.14, 56.12, 56.11, 56.10, 56.08, 56.07, 56.05, 56.04, 56.03, 56.01, 56.00, 55.99, 55.97, 55.96, 55.94, 55.93, 55.92, 55.90, 55.89, 55.88, 55.86, 55.85, 55.84, 55.82, 55.81, 55.80, 55.78, 55.77, 55.76, 55.74, 55.73, 55.71, 55.70, 55.69, 55.67, 55.66, 55.65, 55.63, 55.62, 55.61, 55.60, 55.58, 55.57, 55.56, 55.54, 55.53, 55.52, 55.50, 55.49, 55.48, 55.46, 55.45, 55.44, 55.42, 55.41, 55.40, 55.39, 55.37, 55.36, 55.35, 55.33, 55.32, 55.31, 55.29, 55.28, 55.27, 55.26, 55.24, 55.23, 55.22, 55.21, 55.19, 55.18, 55.17, 55.15, 55.14, 55.13, 55.12, 55.10, 55.09},
{58.09, 58.08, 58.06, 58.05, 58.03, 58.02, 58.00, 57.99, 57.97, 57.96, 57.94, 57.93, 57.91, 57.89, 57.88, 57.86, 57.85, 57.83, 57.82, 57.80, 57.79, 57.77, 57.76, 57.74, 57.73, 57.71, 57.70, 57.68, 57.67, 57.65, 57.64, 57.62, 57.61, 57.59, 57.58, 57.57, 57.55, 57.54, 57.52, 57.51, 57.49, 57.48, 57.46, 57.45, 57.43, 57.42, 57.40, 57.39, 57.37, 57.36, 57.35, 57.33, 57.32, 57.30, 57.29, 57.27, 57.26, 57.24, 57.23, 57.22, 57.20, 57.19, 57.17, 57.16, 57.14, 57.13, 57.12, 57.10, 57.09, 57.07, 57.06, 57.04, 57.03, 57.02, 57.00, 56.99, 56.97, 56.96, 56.95, 56.93, 56.92, 56.90, 56.89, 56.88, 56.86, 56.85, 56.83, 56.82, 56.81, 56.79, 56.78, 56.77, 56.75, 56.74, 56.72, 56.71, 56.70, 56.68, 56.67, 56.66, 56.64, 56.63, 56.61, 56.60, 56.59, 56.57, 56.56, 56.55, 56.53, 56.52, 56.51, 56.49, 56.48, 56.47, 56.45, 56.44, 56.43, 56.41, 56.40, 56.39, 56.37, 56.36, 56.35, 56.33, 56.32, 56.31, 56.29, 56.28, 56.27, 56.25, 56.24, 56.23, 56.21, 56.20, 56.19, 56.17, 56.16, 56.15, 56.14, 56.12},
{59.14, 59.13, 59.11, 59.10, 59.08, 59.07, 59.05, 59.03, 59.02, 59.00, 58.99, 58.97, 58.96, 58.94, 58.92, 58.91, 58.89, 58.88, 58.86, 58.85, 58.83, 58.82, 58.80, 58.79, 58.77, 58.75, 58.74, 58.72, 58.71, 58.69, 58.68, 58.66, 58.65, 58.63, 58.62, 58.60, 58.59, 58.57, 58.56, 58.54, 58.53, 58.51, 58.50, 58.48, 58.47, 58.45, 58.44, 58.42, 58.41, 58.39, 58.38, 58.36, 58.35, 58.33, 58.32, 58.30, 58.29, 58.27, 58.26, 58.24, 58.23, 58.21, 58.20, 58.18, 58.17, 58.16, 58.14, 58.13, 58.11, 58.10, 58.08, 58.07, 58.05, 58.04, 58.02, 58.01, 58.00, 57.98, 57.97, 57.95, 57.94, 57.92, 57.91, 57.89, 57.88, 57.87, 57.85, 57.84, 57.82, 57.81, 57.80, 57.78, 57.77, 57.75, 57.74, 57.72, 57.71, 57.70, 57.68, 57.67, 57.65, 57.64, 57.63, 57.61, 57.60, 57.58, 57.57, 57.56, 57.54, 57.53, 57.51, 57.50, 57.49, 57.47, 57.46, 57.45, 57.43, 57.42, 57.40, 57.39, 57.38, 57.36, 57.35, 57.34, 57.32, 57.31, 57.30, 57.28, 57.27, 57.25, 57.24, 57.23, 57.21, 57.20, 57.19, 57.17, 57.16, 57.15, 57.13, 57.12},
{60.16, 60.14, 60.12, 60.11, 60.09, 60.08, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.96, 59.95, 59.93, 59.92, 59.90, 59.88, 59.87, 59.85, 59.84, 59.82, 59.81, 59.79, 59.77, 59.76, 59.74, 59.73, 59.71, 59.70, 59.68, 59.66, 59.65, 59.63, 59.62, 59.60, 59.59, 59.57, 59.56, 59.54, 59.53, 59.51, 59.49, 59.48, 59.46, 59.45, 59.43, 59.42, 59.40, 59.39, 59.37, 59.36, 59.34, 59.33, 59.31, 59.30, 59.28, 59.27, 59.25, 59.24, 59.22, 59.21, 59.19, 59.18, 59.16, 59.15, 59.13, 59.12, 59.10, 59.09, 59.07, 59.06, 59.04, 59.03, 59.01, 59.00, 58.98, 58.97, 58.95, 58.94, 58.92, 58.91, 58.89, 58.88, 58.86, 58.85, 58.84, 58.82, 58.81, 58.79, 58.78, 58.76, 58.75, 58.73, 58.72, 58.70, 58.69, 58.68, 58.66, 58.65, 58.63, 58.62, 58.60, 58.59, 58.58, 58.56, 58.55, 58.53, 58.52, 58.50, 58.49, 58.48, 58.46, 58.45, 58.43, 58.42, 58.41, 58.39, 58.38, 58.36, 58.35, 58.34, 58.32, 58.31, 58.29, 58.28, 58.27, 58.25, 58.24, 58.22, 58.21, 58.20, 58.18, 58.17, 58.15, 58.14, 58.13, 58.11, 58.10, 58.09},
{61.14, 61.12, 61.10, 61.09, 61.07, 61.05, 61.04, 61.02, 61.00, 60.99, 60.97, 60.96, 60.94, 60.92, 60.91, 60.89, 60.87, 60.86, 60.84, 60.83, 60.81, 60.79, 60.78, 60.76, 60.75, 60.73, 60.71, 60.70, 60.68, 60.67, 60.65, 60.63, 60.62, 60.60, 60.59, 60.57, 60.55, 60.54, 60.52, 60.51, 60.49, 60.48, 60.46, 60.44, 60.43, 60.41, 60.40, 60.38, 60.37, 60.35, 60.33, 60.32, 60.30, 60.29, 60.27, 60.26, 60.24, 60.23, 60.21, 60.20, 60.18, 60.16, 60.15, 60.13, 60.12, 60.10, 60.09, 60.07, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.97, 59.95, 59.94, 59.92, 59.91, 59.89, 59.88, 59.86, 59.85, 59.83, 59.82, 59.80, 59.79, 59.77, 59.76, 59.74, 59.73, 59.71, 59.70, 59.68, 59.67, 59.65, 59.64, 59.62, 59.61, 59.59, 59.58, 59.57, 59.55, 59.54, 59.52, 59.51, 59.49, 59.48, 59.46, 59.45, 59.43, 59.42, 59.41, 59.39, 59.38, 59.36, 59.35, 59.33, 59.32, 59.30, 59.29, 59.28, 59.26, 59.25, 59.23, 59.22, 59.20, 59.19, 59.18, 59.16, 59.15, 59.13, 59.12, 59.10, 59.09, 59.08, 59.06, 59.05, 59.03, 59.02},
{62.08, 62.06, 62.05, 62.03, 62.01, 62.00, 61.98, 61.96, 61.95, 61.93, 61.91, 61.90, 61.88, 61.86, 61.85, 61.83, 61.81, 61.80, 61.78, 61.77, 61.75, 61.73, 61.72, 61.70, 61.68, 61.67, 61.65, 61.63, 61.62, 61.60, 61.59, 61.57, 61.55, 61.54, 61.52, 61.51, 61.49, 61.47, 61.46, 61.44, 61.42, 61.41, 61.39, 61.38, 61.36, 61.35, 61.33, 61.31, 61.30, 61.28, 61.27, 61.25, 61.23, 61.22, 61.20, 61.19, 61.17, 61.16, 61.14, 61.12, 61.11, 61.09, 61.08, 61.06, 61.05, 61.03, 61.01, 61.00, 60.98, 60.97, 60.95, 60.94, 60.92, 60.91, 60.89, 60.88, 60.86, 60.84, 60.83, 60.81, 60.80, 60.78, 60.77, 60.75, 60.74, 60.72, 60.71, 60.69, 60.68, 60.66, 60.65, 60.63, 60.62, 60.60, 60.59, 60.57, 60.56, 60.54, 60.53, 60.51, 60.50, 60.48, 60.47, 60.45, 60.44, 60.42, 60.41, 60.39, 60.38, 60.36, 60.35, 60.33, 60.32, 60.30, 60.29, 60.27, 60.26, 60.24, 60.23, 60.22, 60.20, 60.19, 60.17, 60.16, 60.14, 60.13, 60.11, 60.10, 60.08, 60.07, 60.06, 60.04, 60.03, 60.01, 60.00, 59.98, 59.97, 59.95, 59.94, 59.93},
{62.99, 62.98, 62.96, 62.94, 62.93, 62.91, 62.89, 62.88, 62.86, 62.84, 62.83, 62.81, 62.79, 62.77, 62.76, 62.74, 62.72, 62.71, 62.69, 62.67, 62.66, 62.64, 62.62, 62.61, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.49, 62.48, 62.46, 62.44, 62.43, 62.41, 62.39, 62.38, 62.36, 62.34, 62.33, 62.31, 62.30, 62.28, 62.26, 62.25, 62.23, 62.21, 62.20, 62.18, 62.17, 62.15, 62.13, 62.12, 62.10, 62.09, 62.07, 62.05, 62.04, 62.02, 62.01, 61.99, 61.97, 61.96, 61.94, 61.93, 61.91, 61.90, 61.88, 61.86, 61.85, 61.83, 61.82, 61.80, 61.79, 61.77, 61.75, 61.74, 61.72, 61.71, 61.69, 61.68, 61.66, 61.65, 61.63, 61.61, 61.60, 61.58, 61.57, 61.55, 61.54, 61.52, 61.51, 61.49, 61.48, 61.46, 61.45, 61.43, 61.42, 61.40, 61.38, 61.37, 61.35, 61.34, 61.32, 61.31, 61.29, 61.28, 61.26, 61.25, 61.23, 61.22, 61.20, 61.19, 61.17, 61.16, 61.14, 61.13, 61.11, 61.10, 61.08, 61.07, 61.05, 61.04, 61.02, 61.01, 60.99, 60.98, 60.97, 60.95, 60.94, 60.92, 60.91, 60.89, 60.88, 60.86, 60.85, 60.83, 60.82, 60.80},
{63.88, 63.86, 63.84, 63.83, 63.81, 63.79, 63.78, 63.76, 63.74, 63.72, 63.71, 63.69, 63.67, 63.66, 63.64, 63.62, 63.60, 63.59, 63.57, 63.55, 63.54, 63.52, 63.50, 63.49, 63.47, 63.45, 63.44, 63.42, 63.40, 63.39, 63.37, 63.35, 63.34, 63.32, 63.30, 63.29, 63.27, 63.25, 63.24, 63.22, 63.20, 63.19, 63.17, 63.15, 63.14, 63.12, 63.10, 63.09, 63.07, 63.06, 63.04, 63.02, 63.01, 62.99, 62.97, 62.96, 62.94, 62.93, 62.91, 62.89, 62.88, 62.86, 62.84, 62.83, 62.81, 62.80, 62.78, 62.76, 62.75, 62.73, 62.72, 62.70, 62.68, 62.67, 62.65, 62.64, 62.62, 62.60, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.49, 62.48, 62.46, 62.45, 62.43, 62.42, 62.40, 62.38, 62.37, 62.35, 62.34, 62.32, 62.31, 62.29, 62.28, 62.26, 62.25, 62.23, 62.21, 62.20, 62.18, 62.17, 62.15, 62.14, 62.12, 62.11, 62.09, 62.08, 62.06, 62.05, 62.03, 62.02, 62.00, 61.98, 61.97, 61.95, 61.94, 61.92, 61.91, 61.89, 61.88, 61.86, 61.85, 61.83, 61.82, 61.80, 61.79, 61.77, 61.76, 61.74, 61.73, 61.71, 61.70, 61.69, 61.67, 61.66},
{64.73, 64.72, 64.70, 64.68, 64.66, 64.65, 64.63, 64.61, 64.59, 64.58, 64.56, 64.54, 64.53, 64.51, 64.49, 64.47, 64.46, 64.44, 64.42, 64.41, 64.39, 64.37, 64.35, 64.34, 64.32, 64.30, 64.29, 64.27, 64.25, 64.24, 64.22, 64.20, 64.18, 64.17, 64.15, 64.13, 64.12, 64.10, 64.08, 64.07, 64.05, 64.03, 64.02, 64.00, 63.98, 63.97, 63.95, 63.93, 63.92, 63.90, 63.88, 63.87, 63.85, 63.83, 63.82, 63.80, 63.78, 63.77, 63.75, 63.74, 63.72, 63.70, 63.69, 63.67, 63.65, 63.64, 63.62, 63.61, 63.59, 63.57, 63.56, 63.54, 63.52, 63.51, 63.49, 63.48, 63.46, 63.44, 63.43, 63.41, 63.40, 63.38, 63.36, 63.35, 63.33, 63.32, 63.30, 63.28, 63.27, 63.25, 63.24, 63.22, 63.21, 63.19, 63.17, 63.16, 63.14, 63.13, 63.11, 63.10, 63.08, 63.06, 63.05, 63.03, 63.02, 63.00, 62.99, 62.97, 62.95, 62.94, 62.92, 62.91, 62.89, 62.88, 62.86, 62.85, 62.83, 62.82, 62.80, 62.78, 62.77, 62.75, 62.74, 62.72, 62.71, 62.69, 62.68, 62.66, 62.65, 62.63, 62.62, 62.60, 62.59, 62.57, 62.56, 62.54, 62.53, 62.51, 62.50, 62.48},
{65.56, 65.54, 65.53, 65.51, 65.49, 65.47, 65.46, 65.44, 65.42, 65.40, 65.39, 65.37, 65.35, 65.33, 65.32, 65.30, 65.28, 65.26, 65.25, 65.23, 65.21, 65.20, 65.18, 65.16, 65.14, 65.13, 65.11, 65.09, 65.08, 65.06, 65.04, 65.02, 65.01, 64.99, 64.97, 64.96, 64.94, 64.92, 64.90, 64.89, 64.87, 64.85, 64.84, 64.82, 64.80, 64.79, 64.77, 64.75, 64.74, 64.72, 64.70, 64.69, 64.67, 64.65, 64.64, 64.62, 64.60, 64.59, 64.57, 64.55, 64.54, 64.52, 64.50, 64.49, 64.47, 64.45, 64.44, 64.42, 64.40, 64.39, 64.37, 64.36, 64.34, 64.32, 64.31, 64.29, 64.27, 64.26, 64.24, 64.23, 64.21, 64.19, 64.18, 64.16, 64.14, 64.13, 64.11, 64.10, 64.08, 64.06, 64.05, 64.03, 64.02, 64.00, 63.98, 63.97, 63.95, 63.94, 63.92, 63.90, 63.89, 63.87, 63.86, 63.84, 63.83, 63.81, 63.79, 63.78, 63.76, 63.75, 63.73, 63.72, 63.70, 63.68, 63.67, 63.65, 63.64, 63.62, 63.61, 63.59, 63.57, 63.56, 63.54, 63.53, 63.51, 63.50, 63.48, 63.47, 63.45, 63.44, 63.42, 63.41, 63.39, 63.37, 63.36, 63.34, 63.33, 63.31, 63.30, 63.28},
{66.36, 66.35, 66.33, 66.31, 66.29, 66.28, 66.26, 66.24, 66.22, 66.21, 66.19, 66.17, 66.15, 66.13, 66.12, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 65.99, 65.98, 65.96, 65.94, 65.92, 65.91, 65.89, 65.87, 65.86, 65.84, 65.82, 65.80, 65.79, 65.77, 65.75, 65.74, 65.72, 65.70, 65.68, 65.67, 65.65, 65.63, 65.62, 65.60, 65.58, 65.56, 65.55, 65.53, 65.51, 65.50, 65.48, 65.46, 65.45, 65.43, 65.41, 65.40, 65.38, 65.36, 65.35, 65.33, 65.31, 65.30, 65.28, 65.26, 65.25, 65.23, 65.21, 65.20, 65.18, 65.16, 65.15, 65.13, 65.11, 65.10, 65.08, 65.06, 65.05, 65.03, 65.01, 65.00, 64.98, 64.97, 64.95, 64.93, 64.92, 64.90, 64.88, 64.87, 64.85, 64.84, 64.82, 64.80, 64.79, 64.77, 64.75, 64.74, 64.72, 64.71, 64.69, 64.67, 64.66, 64.64, 64.63, 64.61, 64.59, 64.58, 64.56, 64.55, 64.53, 64.51, 64.50, 64.48, 64.47, 64.45, 64.44, 64.42, 64.40, 64.39, 64.37, 64.36, 64.34, 64.33, 64.31, 64.29, 64.28, 64.26, 64.25, 64.23, 64.22, 64.20, 64.19, 64.17, 64.15, 64.14, 64.12, 64.11, 64.09, 64.08, 64.06},
{67.14, 67.12, 67.11, 67.09, 67.07, 67.05, 67.04, 67.02, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.89, 66.88, 66.86, 66.84, 66.82, 66.80, 66.79, 66.77, 66.75, 66.73, 66.72, 66.70, 66.68, 66.66, 66.65, 66.63, 66.61, 66.59, 66.58, 66.56, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.42, 66.40, 66.39, 66.37, 66.35, 66.34, 66.32, 66.30, 66.28, 66.27, 66.25, 66.23, 66.22, 66.20, 66.18, 66.17, 66.15, 66.13, 66.11, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 66.00, 65.98, 65.96, 65.95, 65.93, 65.91, 65.90, 65.88, 65.86, 65.85, 65.83, 65.81, 65.80, 65.78, 65.76, 65.75, 65.73, 65.71, 65.70, 65.68, 65.66, 65.65, 65.63, 65.62, 65.60, 65.58, 65.57, 65.55, 65.53, 65.52, 65.50, 65.49, 65.47, 65.45, 65.44, 65.42, 65.40, 65.39, 65.37, 65.36, 65.34, 65.32, 65.31, 65.29, 65.28, 65.26, 65.24, 65.23, 65.21, 65.20, 65.18, 65.16, 65.15, 65.13, 65.12, 65.10, 65.08, 65.07, 65.05, 65.04, 65.02, 65.01, 64.99, 64.97, 64.96, 64.94, 64.93, 64.91, 64.90, 64.88, 64.86, 64.85, 64.83, 64.82},
{67.90, 67.88, 67.86, 67.84, 67.82, 67.81, 67.79, 67.77, 67.75, 67.73, 67.72, 67.70, 67.68, 67.66, 67.65, 67.63, 67.61, 67.59, 67.57, 67.56, 67.54, 67.52, 67.50, 67.49, 67.47, 67.45, 67.43, 67.41, 67.40, 67.38, 67.36, 67.34, 67.33, 67.31, 67.29, 67.27, 67.26, 67.24, 67.22, 67.20, 67.19, 67.17, 67.15, 67.14, 67.12, 67.10, 67.08, 67.07, 67.05, 67.03, 67.01, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.89, 66.88, 66.86, 66.84, 66.83, 66.81, 66.79, 66.78, 66.76, 66.74, 66.73, 66.71, 66.69, 66.67, 66.66, 66.64, 66.62, 66.61, 66.59, 66.57, 66.56, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.42, 66.41, 66.39, 66.37, 66.36, 66.34, 66.32, 66.31, 66.29, 66.28, 66.26, 66.24, 66.23, 66.21, 66.19, 66.18, 66.16, 66.14, 66.13, 66.11, 66.10, 66.08, 66.06, 66.05, 66.03, 66.01, 66.00, 65.98, 65.97, 65.95, 65.93, 65.92, 65.90, 65.89, 65.87, 65.85, 65.84, 65.82, 65.81, 65.79, 65.77, 65.76, 65.74, 65.73, 65.71, 65.69, 65.68, 65.66, 65.65, 65.63, 65.62, 65.60, 65.58, 65.57, 65.55},
{68.63, 68.61, 68.59, 68.57, 68.56, 68.54, 68.52, 68.50, 68.48, 68.47, 68.45, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.32, 68.30, 68.29, 68.27, 68.25, 68.23, 68.21, 68.20, 68.18, 68.16, 68.14, 68.13, 68.11, 68.09, 68.07, 68.06, 68.04, 68.02, 68.00, 67.98, 67.97, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.84, 67.83, 67.81, 67.79, 67.78, 67.76, 67.74, 67.72, 67.71, 67.69, 67.67, 67.65, 67.64, 67.62, 67.60, 67.59, 67.57, 67.55, 67.53, 67.52, 67.50, 67.48, 67.47, 67.45, 67.43, 67.41, 67.40, 67.38, 67.36, 67.35, 67.33, 67.31, 67.30, 67.28, 67.26, 67.25, 67.23, 67.21, 67.20, 67.18, 67.16, 67.15, 67.13, 67.11, 67.10, 67.08, 67.06, 67.05, 67.03, 67.01, 67.00, 66.98, 66.96, 66.95, 66.93, 66.91, 66.90, 66.88, 66.86, 66.85, 66.83, 66.81, 66.80, 66.78, 66.77, 66.75, 66.73, 66.72, 66.70, 66.68, 66.67, 66.65, 66.64, 66.62, 66.60, 66.59, 66.57, 66.55, 66.54, 66.52, 66.51, 66.49, 66.47, 66.46, 66.44, 66.43, 66.41, 66.39, 66.38, 66.36, 66.35, 66.33, 66.31, 66.30, 66.28, 66.27},
{69.34, 69.32, 69.30, 69.28, 69.27, 69.25, 69.23, 69.21, 69.19, 69.18, 69.16, 69.14, 69.12, 69.10, 69.08, 69.07, 69.05, 69.03, 69.01, 68.99, 68.98, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.83, 68.82, 68.80, 68.78, 68.76, 68.74, 68.73, 68.71, 68.69, 68.67, 68.66, 68.64, 68.62, 68.60, 68.59, 68.57, 68.55, 68.53, 68.52, 68.50, 68.48, 68.46, 68.45, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.32, 68.31, 68.29, 68.27, 68.26, 68.24, 68.22, 68.20, 68.19, 68.17, 68.15, 68.14, 68.12, 68.10, 68.08, 68.07, 68.05, 68.03, 68.02, 68.00, 67.98, 67.96, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.85, 67.83, 67.81, 67.80, 67.78, 67.76, 67.75, 67.73, 67.71, 67.70, 67.68, 67.66, 67.65, 67.63, 67.61, 67.60, 67.58, 67.56, 67.55, 67.53, 67.51, 67.50, 67.48, 67.46, 67.45, 67.43, 67.41, 67.40, 67.38, 67.37, 67.35, 67.33, 67.32, 67.30, 67.28, 67.27, 67.25, 67.24, 67.22, 67.20, 67.19, 67.17, 67.15, 67.14, 67.12, 67.11, 67.09, 67.07, 67.06, 67.04, 67.03, 67.01, 66.99, 66.98, 66.96},
{70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.90, 69.88, 69.86, 69.85, 69.83, 69.81, 69.79, 69.77, 69.76, 69.74, 69.72, 69.70, 69.68, 69.66, 69.65, 69.63, 69.61, 69.59, 69.57, 69.56, 69.54, 69.52, 69.50, 69.49, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.34, 69.32, 69.31, 69.29, 69.27, 69.25, 69.24, 69.22, 69.20, 69.18, 69.17, 69.15, 69.13, 69.11, 69.10, 69.08, 69.06, 69.04, 69.03, 69.01, 68.99, 68.97, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.84, 68.82, 68.80, 68.78, 68.77, 68.75, 68.73, 68.72, 68.70, 68.68, 68.66, 68.65, 68.63, 68.61, 68.60, 68.58, 68.56, 68.55, 68.53, 68.51, 68.49, 68.48, 68.46, 68.44, 68.43, 68.41, 68.39, 68.38, 68.36, 68.34, 68.33, 68.31, 68.29, 68.28, 68.26, 68.24, 68.23, 68.21, 68.19, 68.18, 68.16, 68.14, 68.13, 68.11, 68.09, 68.08, 68.06, 68.04, 68.03, 68.01, 68.00, 67.98, 67.96, 67.95, 67.93, 67.91, 67.90, 67.88, 67.86, 67.85, 67.83, 67.82, 67.80, 67.78, 67.77, 67.75, 67.73, 67.72, 67.70, 67.69, 67.67, 67.65, 67.64},
{70.70, 70.68, 70.66, 70.64, 70.63, 70.61, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.46, 70.44, 70.42, 70.41, 70.39, 70.37, 70.35, 70.33, 70.32, 70.30, 70.28, 70.26, 70.24, 70.22, 70.21, 70.19, 70.17, 70.15, 70.14, 70.12, 70.10, 70.08, 70.06, 70.05, 70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.90, 69.89, 69.87, 69.85, 69.83, 69.82, 69.80, 69.78, 69.76, 69.74, 69.73, 69.71, 69.69, 69.67, 69.66, 69.64, 69.62, 69.60, 69.59, 69.57, 69.55, 69.54, 69.52, 69.50, 69.48, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.35, 69.33, 69.31, 69.29, 69.28, 69.26, 69.24, 69.23, 69.21, 69.19, 69.17, 69.16, 69.14, 69.12, 69.11, 69.09, 69.07, 69.06, 69.04, 69.02, 69.01, 68.99, 68.97, 68.96, 68.94, 68.92, 68.90, 68.89, 68.87, 68.85, 68.84, 68.82, 68.80, 68.79, 68.77, 68.75, 68.74, 68.72, 68.71, 68.69, 68.67, 68.66, 68.64, 68.62, 68.61, 68.59, 68.57, 68.56, 68.54, 68.52, 68.51, 68.49, 68.48, 68.46, 68.44, 68.43, 68.41, 68.39, 68.38, 68.36, 68.35, 68.33, 68.31, 68.30},
{71.35, 71.33, 71.31, 71.30, 71.28, 71.26, 71.24, 71.22, 71.20, 71.18, 71.17, 71.15, 71.13, 71.11, 71.09, 71.07, 71.06, 71.04, 71.02, 71.00, 70.98, 70.97, 70.95, 70.93, 70.91, 70.89, 70.87, 70.86, 70.84, 70.82, 70.80, 70.78, 70.77, 70.75, 70.73, 70.71, 70.69, 70.68, 70.66, 70.64, 70.62, 70.61, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.46, 70.45, 70.43, 70.41, 70.39, 70.37, 70.36, 70.34, 70.32, 70.30, 70.29, 70.27, 70.25, 70.23, 70.22, 70.20, 70.18, 70.16, 70.15, 70.13, 70.11, 70.10, 70.08, 70.06, 70.04, 70.03, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.91, 69.89, 69.87, 69.85, 69.84, 69.82, 69.80, 69.79, 69.77, 69.75, 69.73, 69.72, 69.70, 69.68, 69.67, 69.65, 69.63, 69.62, 69.60, 69.58, 69.57, 69.55, 69.53, 69.52, 69.50, 69.48, 69.47, 69.45, 69.43, 69.41, 69.40, 69.38, 69.36, 69.35, 69.33, 69.32, 69.30, 69.28, 69.27, 69.25, 69.23, 69.22, 69.20, 69.18, 69.17, 69.15, 69.13, 69.12, 69.10, 69.08, 69.07, 69.05, 69.04, 69.02, 69.00, 68.99, 68.97, 68.95, 68.94},
{71.98, 71.97, 71.95, 71.93, 71.91, 71.89, 71.87, 71.85, 71.84, 71.82, 71.80, 71.78, 71.76, 71.74, 71.73, 71.71, 71.69, 71.67, 71.65, 71.63, 71.62, 71.60, 71.58, 71.56, 71.54, 71.52, 71.51, 71.49, 71.47, 71.45, 71.43, 71.42, 71.40, 71.38, 71.36, 71.34, 71.33, 71.31, 71.29, 71.27, 71.25, 71.24, 71.22, 71.20, 71.18, 71.16, 71.15, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.02, 71.01, 70.99, 70.97, 70.95, 70.93, 70.92, 70.90, 70.88, 70.86, 70.85, 70.83, 70.81, 70.79, 70.78, 70.76, 70.74, 70.72, 70.71, 70.69, 70.67, 70.65, 70.64, 70.62, 70.60, 70.59, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.47, 70.45, 70.43, 70.41, 70.40, 70.38, 70.36, 70.35, 70.33, 70.31, 70.29, 70.28, 70.26, 70.24, 70.23, 70.21, 70.19, 70.18, 70.16, 70.14, 70.13, 70.11, 70.09, 70.07, 70.06, 70.04, 70.02, 70.01, 69.99, 69.97, 69.96, 69.94, 69.92, 69.91, 69.89, 69.87, 69.86, 69.84, 69.82, 69.81, 69.79, 69.78, 69.76, 69.74, 69.73, 69.71, 69.69, 69.68, 69.66, 69.64, 69.63, 69.61, 69.59, 69.58, 69.56},
{72.60, 72.58, 72.56, 72.54, 72.53, 72.51, 72.49, 72.47, 72.45, 72.43, 72.41, 72.40, 72.38, 72.36, 72.34, 72.32, 72.30, 72.29, 72.27, 72.25, 72.23, 72.21, 72.19, 72.18, 72.16, 72.14, 72.12, 72.10, 72.08, 72.07, 72.05, 72.03, 72.01, 71.99, 71.98, 71.96, 71.94, 71.92, 71.90, 71.89, 71.87, 71.85, 71.83, 71.81, 71.80, 71.78, 71.76, 71.74, 71.73, 71.71, 71.69, 71.67, 71.65, 71.64, 71.62, 71.60, 71.58, 71.57, 71.55, 71.53, 71.51, 71.49, 71.48, 71.46, 71.44, 71.42, 71.41, 71.39, 71.37, 71.35, 71.34, 71.32, 71.30, 71.28, 71.27, 71.25, 71.23, 71.22, 71.20, 71.18, 71.16, 71.15, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.03, 71.01, 70.99, 70.97, 70.96, 70.94, 70.92, 70.91, 70.89, 70.87, 70.85, 70.84, 70.82, 70.80, 70.79, 70.77, 70.75, 70.74, 70.72, 70.70, 70.69, 70.67, 70.65, 70.63, 70.62, 70.60, 70.58, 70.57, 70.55, 70.53, 70.52, 70.50, 70.48, 70.47, 70.45, 70.43, 70.42, 70.40, 70.38, 70.37, 70.35, 70.33, 70.32, 70.30, 70.28, 70.27, 70.25, 70.24, 70.22, 70.20, 70.19, 70.17},
{73.20, 73.18, 73.16, 73.14, 73.13, 73.11, 73.09, 73.07, 73.05, 73.03, 73.01, 73.00, 72.98, 72.96, 72.94, 72.92, 72.90, 72.88, 72.87, 72.85, 72.83, 72.81, 72.79, 72.77, 72.76, 72.74, 72.72, 72.70, 72.68, 72.67, 72.65, 72.63, 72.61, 72.59, 72.57, 72.56, 72.54, 72.52, 72.50, 72.48, 72.47, 72.45, 72.43, 72.41, 72.39, 72.38, 72.36, 72.34, 72.32, 72.30, 72.29, 72.27, 72.25, 72.23, 72.22, 72.20, 72.18, 72.16, 72.14, 72.13, 72.11, 72.09, 72.07, 72.06, 72.04, 72.02, 72.00, 71.99, 71.97, 71.95, 71.93, 71.92, 71.90, 71.88, 71.86, 71.85, 71.83, 71.81, 71.79, 71.78, 71.76, 71.74, 71.72, 71.71, 71.69, 71.67, 71.66, 71.64, 71.62, 71.60, 71.59, 71.57, 71.55, 71.54, 71.52, 71.50, 71.48, 71.47, 71.45, 71.43, 71.42, 71.40, 71.38, 71.36, 71.35, 71.33, 71.31, 71.30, 71.28, 71.26, 71.25, 71.23, 71.21, 71.20, 71.18, 71.16, 71.14, 71.13, 71.11, 71.09, 71.08, 71.06, 71.04, 71.03, 71.01, 70.99, 70.98, 70.96, 70.94, 70.93, 70.91, 70.89, 70.88, 70.86, 70.85, 70.83, 70.81, 70.80, 70.78, 70.76},
{73.78, 73.76, 73.75, 73.73, 73.71, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.54, 73.52, 73.50, 73.49, 73.47, 73.45, 73.43, 73.41, 73.39, 73.38, 73.36, 73.34, 73.32, 73.30, 73.28, 73.27, 73.25, 73.23, 73.21, 73.19, 73.17, 73.16, 73.14, 73.12, 73.10, 73.08, 73.07, 73.05, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.90, 72.89, 72.87, 72.85, 72.83, 72.82, 72.80, 72.78, 72.76, 72.74, 72.73, 72.71, 72.69, 72.67, 72.66, 72.64, 72.62, 72.60, 72.58, 72.57, 72.55, 72.53, 72.51, 72.50, 72.48, 72.46, 72.44, 72.43, 72.41, 72.39, 72.37, 72.36, 72.34, 72.32, 72.31, 72.29, 72.27, 72.25, 72.24, 72.22, 72.20, 72.18, 72.17, 72.15, 72.13, 72.12, 72.10, 72.08, 72.06, 72.05, 72.03, 72.01, 72.00, 71.98, 71.96, 71.94, 71.93, 71.91, 71.89, 71.88, 71.86, 71.84, 71.83, 71.81, 71.79, 71.77, 71.76, 71.74, 71.72, 71.71, 71.69, 71.67, 71.66, 71.64, 71.62, 71.61, 71.59, 71.57, 71.56, 71.54, 71.52, 71.51, 71.49, 71.47, 71.46, 71.44, 71.42, 71.41, 71.39, 71.37, 71.36, 71.34},
{74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.20, 74.18, 74.16, 74.15, 74.13, 74.11, 74.09, 74.07, 74.05, 74.04, 74.02, 74.00, 73.98, 73.96, 73.94, 73.92, 73.91, 73.89, 73.87, 73.85, 73.83, 73.82, 73.80, 73.78, 73.76, 73.74, 73.72, 73.71, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.54, 73.53, 73.51, 73.49, 73.47, 73.45, 73.44, 73.42, 73.40, 73.38, 73.36, 73.35, 73.33, 73.31, 73.29, 73.28, 73.26, 73.24, 73.22, 73.20, 73.19, 73.17, 73.15, 73.13, 73.12, 73.10, 73.08, 73.06, 73.05, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.91, 72.89, 72.87, 72.85, 72.84, 72.82, 72.80, 72.78, 72.77, 72.75, 72.73, 72.72, 72.70, 72.68, 72.66, 72.65, 72.63, 72.61, 72.59, 72.58, 72.56, 72.54, 72.53, 72.51, 72.49, 72.48, 72.46, 72.44, 72.42, 72.41, 72.39, 72.37, 72.36, 72.34, 72.32, 72.31, 72.29, 72.27, 72.26, 72.24, 72.22, 72.20, 72.19, 72.17, 72.15, 72.14, 72.12, 72.10, 72.09, 72.07, 72.05, 72.04, 72.02, 72.00, 71.99, 71.97, 71.95, 71.94, 71.92, 71.90},
{74.90, 74.89, 74.87, 74.85, 74.83, 74.81, 74.79, 74.77, 74.76, 74.74, 74.72, 74.70, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.57, 74.55, 74.53, 74.51, 74.50, 74.48, 74.46, 74.44, 74.42, 74.40, 74.39, 74.37, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.20, 74.19, 74.17, 74.15, 74.13, 74.11, 74.10, 74.08, 74.06, 74.04, 74.02, 74.01, 73.99, 73.97, 73.95, 73.93, 73.92, 73.90, 73.88, 73.86, 73.85, 73.83, 73.81, 73.79, 73.77, 73.76, 73.74, 73.72, 73.70, 73.69, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.55, 73.53, 73.51, 73.49, 73.48, 73.46, 73.44, 73.42, 73.41, 73.39, 73.37, 73.35, 73.34, 73.32, 73.30, 73.28, 73.27, 73.25, 73.23, 73.22, 73.20, 73.18, 73.16, 73.15, 73.13, 73.11, 73.09, 73.08, 73.06, 73.04, 73.03, 73.01, 72.99, 72.98, 72.96, 72.94, 72.92, 72.91, 72.89, 72.87, 72.86, 72.84, 72.82, 72.81, 72.79, 72.77, 72.76, 72.74, 72.72, 72.70, 72.69, 72.67, 72.65, 72.64, 72.62, 72.60, 72.59, 72.57, 72.55, 72.54, 72.52, 72.50, 72.49, 72.47, 72.45},
{75.44, 75.43, 75.41, 75.39, 75.37, 75.35, 75.33, 75.31, 75.29, 75.28, 75.26, 75.24, 75.22, 75.20, 75.18, 75.16, 75.15, 75.13, 75.11, 75.09, 75.07, 75.05, 75.04, 75.02, 75.00, 74.98, 74.96, 74.94, 74.93, 74.91, 74.89, 74.87, 74.85, 74.83, 74.82, 74.80, 74.78, 74.76, 74.74, 74.73, 74.71, 74.69, 74.67, 74.65, 74.63, 74.62, 74.60, 74.58, 74.56, 74.55, 74.53, 74.51, 74.49, 74.47, 74.46, 74.44, 74.42, 74.40, 74.38, 74.37, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.22, 74.21, 74.19, 74.17, 74.15, 74.14, 74.12, 74.10, 74.08, 74.07, 74.05, 74.03, 74.01, 74.00, 73.98, 73.96, 73.94, 73.93, 73.91, 73.89, 73.87, 73.86, 73.84, 73.82, 73.80, 73.79, 73.77, 73.75, 73.74, 73.72, 73.70, 73.68, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.56, 73.55, 73.53, 73.51, 73.50, 73.48, 73.46, 73.44, 73.43, 73.41, 73.39, 73.38, 73.36, 73.34, 73.33, 73.31, 73.29, 73.28, 73.26, 73.24, 73.23, 73.21, 73.19, 73.17, 73.16, 73.14, 73.12, 73.11, 73.09, 73.07, 73.06, 73.04, 73.02, 73.01, 72.99},
{75.97, 75.95, 75.93, 75.91, 75.89, 75.88, 75.86, 75.84, 75.82, 75.80, 75.78, 75.76, 75.75, 75.73, 75.71, 75.69, 75.67, 75.65, 75.63, 75.62, 75.60, 75.58, 75.56, 75.54, 75.52, 75.51, 75.49, 75.47, 75.45, 75.43, 75.41, 75.40, 75.38, 75.36, 75.34, 75.32, 75.31, 75.29, 75.27, 75.25, 75.23, 75.21, 75.20, 75.18, 75.16, 75.14, 75.12, 75.11, 75.09, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.89, 74.87, 74.86, 74.84, 74.82, 74.80, 74.79, 74.77, 74.75, 74.73, 74.71, 74.70, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.57, 74.56, 74.54, 74.52, 74.50, 74.49, 74.47, 74.45, 74.43, 74.42, 74.40, 74.38, 74.36, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.23, 74.21, 74.19, 74.17, 74.16, 74.14, 74.12, 74.11, 74.09, 74.07, 74.05, 74.04, 74.02, 74.00, 73.99, 73.97, 73.95, 73.94, 73.92, 73.90, 73.88, 73.87, 73.85, 73.83, 73.82, 73.80, 73.78, 73.77, 73.75, 73.73, 73.72, 73.70, 73.68, 73.67, 73.65, 73.63, 73.62, 73.60, 73.58, 73.57, 73.55, 73.53, 73.52},
{76.48, 76.46, 76.44, 76.43, 76.41, 76.39, 76.37, 76.35, 76.33, 76.31, 76.30, 76.28, 76.26, 76.24, 76.22, 76.20, 76.18, 76.17, 76.15, 76.13, 76.11, 76.09, 76.07, 76.06, 76.04, 76.02, 76.00, 75.98, 75.96, 75.95, 75.93, 75.91, 75.89, 75.87, 75.85, 75.84, 75.82, 75.80, 75.78, 75.76, 75.75, 75.73, 75.71, 75.69, 75.67, 75.66, 75.64, 75.62, 75.60, 75.58, 75.57, 75.55, 75.53, 75.51, 75.49, 75.48, 75.46, 75.44, 75.42, 75.40, 75.39, 75.37, 75.35, 75.33, 75.32, 75.30, 75.28, 75.26, 75.24, 75.23, 75.21, 75.19, 75.17, 75.16, 75.14, 75.12, 75.10, 75.09, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.89, 74.88, 74.86, 74.84, 74.82, 74.81, 74.79, 74.77, 74.76, 74.74, 74.72, 74.70, 74.69, 74.67, 74.65, 74.64, 74.62, 74.60, 74.58, 74.57, 74.55, 74.53, 74.52, 74.50, 74.48, 74.46, 74.45, 74.43, 74.41, 74.40, 74.38, 74.36, 74.35, 74.33, 74.31, 74.30, 74.28, 74.26, 74.24, 74.23, 74.21, 74.19, 74.18, 74.16, 74.14, 74.13, 74.11, 74.09, 74.08, 74.06, 74.04, 74.03},
{76.98, 76.96, 76.94, 76.93, 76.91, 76.89, 76.87, 76.85, 76.83, 76.81, 76.80, 76.78, 76.76, 76.74, 76.72, 76.70, 76.68, 76.67, 76.65, 76.63, 76.61, 76.59, 76.57, 76.56, 76.54, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.37, 76.35, 76.34, 76.32, 76.30, 76.28, 76.26, 76.25, 76.23, 76.21, 76.19, 76.17, 76.16, 76.14, 76.12, 76.10, 76.08, 76.07, 76.05, 76.03, 76.01, 75.99, 75.98, 75.96, 75.94, 75.92, 75.90, 75.89, 75.87, 75.85, 75.83, 75.82, 75.80, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.67, 75.66, 75.64, 75.62, 75.60, 75.59, 75.57, 75.55, 75.53, 75.52, 75.50, 75.48, 75.46, 75.45, 75.43, 75.41, 75.39, 75.38, 75.36, 75.34, 75.33, 75.31, 75.29, 75.27, 75.26, 75.24, 75.22, 75.20, 75.19, 75.17, 75.15, 75.14, 75.12, 75.10, 75.08, 75.07, 75.05, 75.03, 75.02, 75.00, 74.98, 74.96, 74.95, 74.93, 74.91, 74.90, 74.88, 74.86, 74.85, 74.83, 74.81, 74.80, 74.78, 74.76, 74.74, 74.73, 74.71, 74.69, 74.68, 74.66, 74.64, 74.63, 74.61, 74.59, 74.58, 74.56, 74.54, 74.53},
{77.47, 77.45, 77.43, 77.41, 77.39, 77.38, 77.36, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.17, 77.15, 77.14, 77.12, 77.10, 77.08, 77.06, 77.04, 77.03, 77.01, 76.99, 76.97, 76.95, 76.93, 76.92, 76.90, 76.88, 76.86, 76.84, 76.82, 76.81, 76.79, 76.77, 76.75, 76.73, 76.72, 76.70, 76.68, 76.66, 76.64, 76.63, 76.61, 76.59, 76.57, 76.55, 76.54, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.38, 76.36, 76.34, 76.32, 76.30, 76.29, 76.27, 76.25, 76.23, 76.22, 76.20, 76.18, 76.16, 76.15, 76.13, 76.11, 76.09, 76.08, 76.06, 76.04, 76.02, 76.01, 75.99, 75.97, 75.95, 75.94, 75.92, 75.90, 75.88, 75.87, 75.85, 75.83, 75.81, 75.80, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.68, 75.66, 75.64, 75.62, 75.61, 75.59, 75.57, 75.56, 75.54, 75.52, 75.50, 75.49, 75.47, 75.45, 75.44, 75.42, 75.40, 75.39, 75.37, 75.35, 75.33, 75.32, 75.30, 75.28, 75.27, 75.25, 75.23, 75.22, 75.20, 75.18, 75.17, 75.15, 75.13, 75.12, 75.10, 75.08, 75.07, 75.05, 75.03, 75.02},
{77.95, 77.93, 77.91, 77.89, 77.87, 77.85, 77.83, 77.82, 77.80, 77.78, 77.76, 77.74, 77.72, 77.70, 77.69, 77.67, 77.65, 77.63, 77.61, 77.59, 77.57, 77.56, 77.54, 77.52, 77.50, 77.48, 77.46, 77.45, 77.43, 77.41, 77.39, 77.37, 77.36, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.17, 77.16, 77.14, 77.12, 77.10, 77.08, 77.07, 77.05, 77.03, 77.01, 76.99, 76.98, 76.96, 76.94, 76.92, 76.91, 76.89, 76.87, 76.85, 76.83, 76.82, 76.80, 76.78, 76.76, 76.75, 76.73, 76.71, 76.69, 76.68, 76.66, 76.64, 76.62, 76.60, 76.59, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.46, 76.45, 76.43, 76.41, 76.39, 76.38, 76.36, 76.34, 76.33, 76.31, 76.29, 76.27, 76.26, 76.24, 76.22, 76.20, 76.19, 76.17, 76.15, 76.14, 76.12, 76.10, 76.08, 76.07, 76.05, 76.03, 76.02, 76.00, 75.98, 75.96, 75.95, 75.93, 75.91, 75.90, 75.88, 75.86, 75.85, 75.83, 75.81, 75.79, 75.78, 75.76, 75.74, 75.73, 75.71, 75.69, 75.68, 75.66, 75.64, 75.63, 75.61, 75.59, 75.58, 75.56, 75.54, 75.53, 75.51, 75.49},
{78.41, 78.39, 78.37, 78.35, 78.34, 78.32, 78.30, 78.28, 78.26, 78.24, 78.22, 78.21, 78.19, 78.17, 78.15, 78.13, 78.11, 78.10, 78.08, 78.06, 78.04, 78.02, 78.00, 77.99, 77.97, 77.95, 77.93, 77.91, 77.89, 77.88, 77.86, 77.84, 77.82, 77.80, 77.78, 77.77, 77.75, 77.73, 77.71, 77.69, 77.68, 77.66, 77.64, 77.62, 77.60, 77.59, 77.57, 77.55, 77.53, 77.51, 77.50, 77.48, 77.46, 77.44, 77.42, 77.41, 77.39, 77.37, 77.35, 77.34, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.19, 77.18, 77.16, 77.14, 77.12, 77.11, 77.09, 77.07, 77.05, 77.04, 77.02, 77.00, 76.98, 76.97, 76.95, 76.93, 76.91, 76.90, 76.88, 76.86, 76.84, 76.83, 76.81, 76.79, 76.77, 76.76, 76.74, 76.72, 76.71, 76.69, 76.67, 76.65, 76.64, 76.62, 76.60, 76.58, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.47, 76.45, 76.43, 76.41, 76.40, 76.38, 76.36, 76.35, 76.33, 76.31, 76.30, 76.28, 76.26, 76.24, 76.23, 76.21, 76.19, 76.18, 76.16, 76.14, 76.13, 76.11, 76.09, 76.08, 76.06, 76.04, 76.03, 76.01, 75.99, 75.98, 75.96},
{78.86, 78.85, 78.83, 78.81, 78.79, 78.77, 78.75, 78.73, 78.72, 78.70, 78.68, 78.66, 78.64, 78.62, 78.60, 78.59, 78.57, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.42, 78.40, 78.38, 78.37, 78.35, 78.33, 78.31, 78.29, 78.28, 78.26, 78.24, 78.22, 78.20, 78.19, 78.17, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.02, 78.01, 77.99, 77.97, 77.95, 77.93, 77.92, 77.90, 77.88, 77.86, 77.84, 77.83, 77.81, 77.79, 77.77, 77.76, 77.74, 77.72, 77.70, 77.68, 77.67, 77.65, 77.63, 77.61, 77.60, 77.58, 77.56, 77.54, 77.53, 77.51, 77.49, 77.47, 77.46, 77.44, 77.42, 77.40, 77.39, 77.37, 77.35, 77.33, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.20, 77.18, 77.16, 77.14, 77.13, 77.11, 77.09, 77.08, 77.06, 77.04, 77.02, 77.01, 76.99, 76.97, 76.96, 76.94, 76.92, 76.90, 76.89, 76.87, 76.85, 76.84, 76.82, 76.80, 76.79, 76.77, 76.75, 76.73, 76.72, 76.70, 76.68, 76.67, 76.65, 76.63, 76.62, 76.60, 76.58, 76.57, 76.55, 76.53, 76.52, 76.50, 76.48, 76.47, 76.45, 76.43, 76.42},
{79.31, 79.29, 79.27, 79.25, 79.23, 79.21, 79.20, 79.18, 79.16, 79.14, 79.12, 79.10, 79.09, 79.07, 79.05, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.79, 78.77, 78.76, 78.74, 78.72, 78.70, 78.68, 78.67, 78.65, 78.63, 78.61, 78.59, 78.58, 78.56, 78.54, 78.52, 78.50, 78.49, 78.47, 78.45, 78.43, 78.41, 78.40, 78.38, 78.36, 78.34, 78.32, 78.31, 78.29, 78.27, 78.25, 78.24, 78.22, 78.20, 78.18, 78.17, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.02, 78.01, 77.99, 77.97, 77.95, 77.94, 77.92, 77.90, 77.88, 77.87, 77.85, 77.83, 77.81, 77.80, 77.78, 77.76, 77.74, 77.73, 77.71, 77.69, 77.68, 77.66, 77.64, 77.62, 77.61, 77.59, 77.57, 77.56, 77.54, 77.52, 77.50, 77.49, 77.47, 77.45, 77.44, 77.42, 77.40, 77.38, 77.37, 77.35, 77.33, 77.32, 77.30, 77.28, 77.26, 77.25, 77.23, 77.21, 77.20, 77.18, 77.16, 77.15, 77.13, 77.11, 77.10, 77.08, 77.06, 77.05, 77.03, 77.01, 77.00, 76.98, 76.96, 76.94, 76.93, 76.91, 76.89, 76.88, 76.86},
{79.74, 79.72, 79.70, 79.68, 79.67, 79.65, 79.63, 79.61, 79.59, 79.57, 79.56, 79.54, 79.52, 79.50, 79.48, 79.46, 79.45, 79.43, 79.41, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.28, 79.26, 79.24, 79.23, 79.21, 79.19, 79.17, 79.15, 79.14, 79.12, 79.10, 79.08, 79.06, 79.05, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.79, 78.78, 78.76, 78.74, 78.72, 78.71, 78.69, 78.67, 78.65, 78.64, 78.62, 78.60, 78.58, 78.56, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.42, 78.41, 78.39, 78.37, 78.35, 78.34, 78.32, 78.30, 78.28, 78.27, 78.25, 78.23, 78.22, 78.20, 78.18, 78.16, 78.15, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.03, 78.01, 77.99, 77.97, 77.96, 77.94, 77.92, 77.91, 77.89, 77.87, 77.85, 77.84, 77.82, 77.80, 77.79, 77.77, 77.75, 77.73, 77.72, 77.70, 77.68, 77.67, 77.65, 77.63, 77.62, 77.60, 77.58, 77.57, 77.55, 77.53, 77.52, 77.50, 77.48, 77.46, 77.45, 77.43, 77.41, 77.40, 77.38, 77.36, 77.35, 77.33, 77.31, 77.30},
{80.16, 80.14, 80.13, 80.11, 80.09, 80.07, 80.05, 80.03, 80.02, 80.00, 79.98, 79.96, 79.94, 79.92, 79.91, 79.89, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.72, 79.70, 79.69, 79.67, 79.65, 79.63, 79.61, 79.60, 79.58, 79.56, 79.54, 79.52, 79.51, 79.49, 79.47, 79.45, 79.43, 79.42, 79.40, 79.38, 79.36, 79.34, 79.33, 79.31, 79.29, 79.27, 79.26, 79.24, 79.22, 79.20, 79.18, 79.17, 79.15, 79.13, 79.11, 79.10, 79.08, 79.06, 79.04, 79.03, 79.01, 78.99, 78.97, 78.96, 78.94, 78.92, 78.90, 78.88, 78.87, 78.85, 78.83, 78.81, 78.80, 78.78, 78.76, 78.75, 78.73, 78.71, 78.69, 78.68, 78.66, 78.64, 78.62, 78.61, 78.59, 78.57, 78.55, 78.54, 78.52, 78.50, 78.49, 78.47, 78.45, 78.43, 78.42, 78.40, 78.38, 78.37, 78.35, 78.33, 78.31, 78.30, 78.28, 78.26, 78.25, 78.23, 78.21, 78.20, 78.18, 78.16, 78.14, 78.13, 78.11, 78.09, 78.08, 78.06, 78.04, 78.03, 78.01, 77.99, 77.98, 77.96, 77.94, 77.93, 77.91, 77.89, 77.88, 77.86, 77.84, 77.83, 77.81, 77.79, 77.78, 77.76, 77.74, 77.73},
{80.58, 80.56, 80.54, 80.52, 80.50, 80.48, 80.47, 80.45, 80.43, 80.41, 80.39, 80.37, 80.36, 80.34, 80.32, 80.30, 80.28, 80.27, 80.25, 80.23, 80.21, 80.19, 80.17, 80.16, 80.14, 80.12, 80.10, 80.08, 80.07, 80.05, 80.03, 80.01, 79.99, 79.98, 79.96, 79.94, 79.92, 79.90, 79.89, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.72, 79.71, 79.69, 79.67, 79.65, 79.64, 79.62, 79.60, 79.58, 79.56, 79.55, 79.53, 79.51, 79.49, 79.48, 79.46, 79.44, 79.42, 79.41, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.28, 79.27, 79.25, 79.23, 79.21, 79.20, 79.18, 79.16, 79.14, 79.13, 79.11, 79.09, 79.08, 79.06, 79.04, 79.02, 79.01, 78.99, 78.97, 78.95, 78.94, 78.92, 78.90, 78.89, 78.87, 78.85, 78.83, 78.82, 78.80, 78.78, 78.77, 78.75, 78.73, 78.71, 78.70, 78.68, 78.66, 78.65, 78.63, 78.61, 78.60, 78.58, 78.56, 78.55, 78.53, 78.51, 78.49, 78.48, 78.46, 78.44, 78.43, 78.41, 78.39, 78.38, 78.36, 78.34, 78.33, 78.31, 78.29, 78.28, 78.26, 78.24, 78.23, 78.21, 78.19, 78.18, 78.16, 78.14},
{80.98, 80.96, 80.94, 80.93, 80.91, 80.89, 80.87, 80.85, 80.83, 80.82, 80.80, 80.78, 80.76, 80.74, 80.73, 80.71, 80.69, 80.67, 80.65, 80.63, 80.62, 80.60, 80.58, 80.56, 80.54, 80.53, 80.51, 80.49, 80.47, 80.45, 80.44, 80.42, 80.40, 80.38, 80.36, 80.35, 80.33, 80.31, 80.29, 80.27, 80.26, 80.24, 80.22, 80.20, 80.18, 80.17, 80.15, 80.13, 80.11, 80.10, 80.08, 80.06, 80.04, 80.02, 80.01, 79.99, 79.97, 79.95, 79.94, 79.92, 79.90, 79.88, 79.87, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.73, 79.71, 79.69, 79.67, 79.66, 79.64, 79.62, 79.60, 79.59, 79.57, 79.55, 79.53, 79.52, 79.50, 79.48, 79.47, 79.45, 79.43, 79.41, 79.40, 79.38, 79.36, 79.35, 79.33, 79.31, 79.29, 79.28, 79.26, 79.24, 79.23, 79.21, 79.19, 79.17, 79.16, 79.14, 79.12, 79.11, 79.09, 79.07, 79.06, 79.04, 79.02, 79.00, 78.99, 78.97, 78.95, 78.94, 78.92, 78.90, 78.89, 78.87, 78.85, 78.84, 78.82, 78.80, 78.79, 78.77, 78.75, 78.74, 78.72, 78.70, 78.69, 78.67, 78.65, 78.64, 78.62, 78.60, 78.59, 78.57, 78.55},
{81.38, 81.36, 81.34, 81.32, 81.30, 81.29, 81.27, 81.25, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.12, 81.10, 81.08, 81.07, 81.05, 81.03, 81.01, 80.99, 80.98, 80.96, 80.94, 80.92, 80.90, 80.89, 80.87, 80.85, 80.83, 80.81, 80.80, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.65, 80.64, 80.62, 80.60, 80.58, 80.56, 80.55, 80.53, 80.51, 80.49, 80.48, 80.46, 80.44, 80.42, 80.41, 80.39, 80.37, 80.35, 80.33, 80.32, 80.30, 80.28, 80.26, 80.25, 80.23, 80.21, 80.19, 80.18, 80.16, 80.14, 80.12, 80.11, 80.09, 80.07, 80.06, 80.04, 80.02, 80.00, 79.99, 79.97, 79.95, 79.93, 79.92, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.74, 79.73, 79.71, 79.69, 79.68, 79.66, 79.64, 79.62, 79.61, 79.59, 79.57, 79.56, 79.54, 79.52, 79.51, 79.49, 79.47, 79.46, 79.44, 79.42, 79.40, 79.39, 79.37, 79.35, 79.34, 79.32, 79.30, 79.29, 79.27, 79.25, 79.24, 79.22, 79.20, 79.19, 79.17, 79.15, 79.14, 79.12, 79.10, 79.09, 79.07, 79.05, 79.04, 79.02, 79.00, 78.99, 78.97, 78.95},
{81.76, 81.75, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.56, 81.55, 81.53, 81.51, 81.49, 81.47, 81.45, 81.44, 81.42, 81.40, 81.38, 81.36, 81.35, 81.33, 81.31, 81.29, 81.27, 81.26, 81.24, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.11, 81.10, 81.08, 81.06, 81.04, 81.02, 81.01, 80.99, 80.97, 80.95, 80.94, 80.92, 80.90, 80.88, 80.87, 80.85, 80.83, 80.81, 80.79, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.65, 80.64, 80.62, 80.60, 80.58, 80.57, 80.55, 80.53, 80.51, 80.50, 80.48, 80.46, 80.45, 80.43, 80.41, 80.39, 80.38, 80.36, 80.34, 80.32, 80.31, 80.29, 80.27, 80.26, 80.24, 80.22, 80.20, 80.19, 80.17, 80.15, 80.14, 80.12, 80.10, 80.08, 80.07, 80.05, 80.03, 80.02, 80.00, 79.98, 79.97, 79.95, 79.93, 79.91, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.75, 79.73, 79.71, 79.70, 79.68, 79.66, 79.64, 79.63, 79.61, 79.59, 79.58, 79.56, 79.54, 79.53, 79.51, 79.49, 79.48, 79.46, 79.44, 79.43, 79.41, 79.40, 79.38, 79.36, 79.35},
{82.14, 82.12, 82.11, 82.09, 82.07, 82.05, 82.03, 82.02, 82.00, 81.98, 81.96, 81.94, 81.92, 81.91, 81.89, 81.87, 81.85, 81.83, 81.82, 81.80, 81.78, 81.76, 81.74, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.57, 81.55, 81.53, 81.51, 81.49, 81.48, 81.46, 81.44, 81.42, 81.41, 81.39, 81.37, 81.35, 81.33, 81.32, 81.30, 81.28, 81.26, 81.25, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.12, 81.11, 81.09, 81.07, 81.05, 81.04, 81.02, 81.00, 80.98, 80.97, 80.95, 80.93, 80.91, 80.90, 80.88, 80.86, 80.84, 80.83, 80.81, 80.79, 80.78, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.60, 80.59, 80.57, 80.55, 80.54, 80.52, 80.50, 80.48, 80.47, 80.45, 80.43, 80.42, 80.40, 80.38, 80.37, 80.35, 80.33, 80.31, 80.30, 80.28, 80.26, 80.25, 80.23, 80.21, 80.20, 80.18, 80.16, 80.15, 80.13, 80.11, 80.10, 80.08, 80.06, 80.05, 80.03, 80.01, 80.00, 79.98, 79.96, 79.95, 79.93, 79.91, 79.90, 79.88, 79.86, 79.85, 79.83, 79.81, 79.80, 79.78, 79.76, 79.75, 79.73},
{82.51, 82.50, 82.48, 82.46, 82.44, 82.42, 82.40, 82.39, 82.37, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.24, 82.22, 82.21, 82.19, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.06, 82.04, 82.03, 82.01, 81.99, 81.97, 81.96, 81.94, 81.92, 81.90, 81.88, 81.87, 81.85, 81.83, 81.81, 81.80, 81.78, 81.76, 81.74, 81.73, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.58, 81.57, 81.55, 81.53, 81.51, 81.50, 81.48, 81.46, 81.44, 81.43, 81.41, 81.39, 81.37, 81.36, 81.34, 81.32, 81.31, 81.29, 81.27, 81.25, 81.24, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.12, 81.10, 81.08, 81.06, 81.05, 81.03, 81.01, 81.00, 80.98, 80.96, 80.94, 80.93, 80.91, 80.89, 80.88, 80.86, 80.84, 80.83, 80.81, 80.79, 80.77, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.61, 80.59, 80.57, 80.56, 80.54, 80.52, 80.50, 80.49, 80.47, 80.45, 80.44, 80.42, 80.40, 80.39, 80.37, 80.35, 80.34, 80.32, 80.30, 80.29, 80.27, 80.26, 80.24, 80.22, 80.21, 80.19, 80.17, 80.16, 80.14, 80.12, 80.11},
{82.88, 82.86, 82.84, 82.82, 82.80, 82.79, 82.77, 82.75, 82.73, 82.71, 82.70, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.53, 82.52, 82.50, 82.48, 82.46, 82.44, 82.43, 82.41, 82.39, 82.37, 82.36, 82.34, 82.32, 82.30, 82.28, 82.27, 82.25, 82.23, 82.21, 82.20, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.07, 82.06, 82.04, 82.02, 82.00, 81.98, 81.97, 81.95, 81.93, 81.92, 81.90, 81.88, 81.86, 81.85, 81.83, 81.81, 81.79, 81.78, 81.76, 81.74, 81.72, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.53, 81.52, 81.50, 81.48, 81.47, 81.45, 81.43, 81.41, 81.40, 81.38, 81.36, 81.35, 81.33, 81.31, 81.29, 81.28, 81.26, 81.24, 81.23, 81.21, 81.19, 81.18, 81.16, 81.14, 81.13, 81.11, 81.09, 81.07, 81.06, 81.04, 81.02, 81.01, 80.99, 80.97, 80.96, 80.94, 80.92, 80.91, 80.89, 80.87, 80.86, 80.84, 80.82, 80.81, 80.79, 80.77, 80.76, 80.74, 80.72, 80.71, 80.69, 80.67, 80.66, 80.64, 80.62, 80.61, 80.59, 80.57, 80.56, 80.54, 80.53, 80.51, 80.49, 80.48},
{83.23, 83.21, 83.20, 83.18, 83.16, 83.14, 83.12, 83.11, 83.09, 83.07, 83.05, 83.03, 83.02, 83.00, 82.98, 82.96, 82.94, 82.93, 82.91, 82.89, 82.87, 82.85, 82.84, 82.82, 82.80, 82.78, 82.77, 82.75, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.54, 82.52, 82.50, 82.48, 82.47, 82.45, 82.43, 82.41, 82.40, 82.38, 82.36, 82.34, 82.33, 82.31, 82.29, 82.27, 82.26, 82.24, 82.22, 82.20, 82.19, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.07, 82.05, 82.03, 82.01, 82.00, 81.98, 81.96, 81.94, 81.93, 81.91, 81.89, 81.88, 81.86, 81.84, 81.82, 81.81, 81.79, 81.77, 81.76, 81.74, 81.72, 81.71, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.54, 81.52, 81.50, 81.49, 81.47, 81.45, 81.44, 81.42, 81.40, 81.38, 81.37, 81.35, 81.33, 81.32, 81.30, 81.28, 81.27, 81.25, 81.23, 81.22, 81.20, 81.18, 81.17, 81.15, 81.13, 81.12, 81.10, 81.08, 81.07, 81.05, 81.04, 81.02, 81.00, 80.99, 80.97, 80.95, 80.94, 80.92, 80.90, 80.89, 80.87, 80.85, 80.84},
{83.58, 83.56, 83.54, 83.53, 83.51, 83.49, 83.47, 83.45, 83.44, 83.42, 83.40, 83.38, 83.36, 83.35, 83.33, 83.31, 83.29, 83.28, 83.26, 83.24, 83.22, 83.20, 83.19, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.06, 83.04, 83.03, 83.01, 82.99, 82.97, 82.96, 82.94, 82.92, 82.90, 82.89, 82.87, 82.85, 82.83, 82.82, 82.80, 82.78, 82.76, 82.75, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.55, 82.54, 82.52, 82.50, 82.49, 82.47, 82.45, 82.43, 82.42, 82.40, 82.38, 82.37, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.25, 82.23, 82.21, 82.19, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.08, 82.06, 82.04, 82.02, 82.01, 81.99, 81.97, 81.96, 81.94, 81.92, 81.91, 81.89, 81.87, 81.86, 81.84, 81.82, 81.81, 81.79, 81.77, 81.75, 81.74, 81.72, 81.70, 81.69, 81.67, 81.65, 81.64, 81.62, 81.60, 81.59, 81.57, 81.55, 81.54, 81.52, 81.50, 81.49, 81.47, 81.46, 81.44, 81.42, 81.41, 81.39, 81.37, 81.36, 81.34, 81.32, 81.31, 81.29, 81.27, 81.26, 81.24, 81.22, 81.21, 81.19},
{83.92, 83.90, 83.89, 83.87, 83.85, 83.83, 83.81, 83.80, 83.78, 83.76, 83.74, 83.72, 83.71, 83.69, 83.67, 83.65, 83.63, 83.62, 83.60, 83.58, 83.56, 83.55, 83.53, 83.51, 83.49, 83.48, 83.46, 83.44, 83.42, 83.40, 83.39, 83.37, 83.35, 83.33, 83.32, 83.30, 83.28, 83.26, 83.25, 83.23, 83.21, 83.19, 83.18, 83.16, 83.14, 83.12, 83.11, 83.09, 83.07, 83.05, 83.04, 83.02, 83.00, 82.99, 82.97, 82.95, 82.93, 82.92, 82.90, 82.88, 82.86, 82.85, 82.83, 82.81, 82.80, 82.78, 82.76, 82.74, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.56, 82.54, 82.52, 82.51, 82.49, 82.47, 82.45, 82.44, 82.42, 82.40, 82.39, 82.37, 82.35, 82.34, 82.32, 82.30, 82.29, 82.27, 82.25, 82.24, 82.22, 82.20, 82.18, 82.17, 82.15, 82.13, 82.12, 82.10, 82.08, 82.07, 82.05, 82.03, 82.02, 82.00, 81.98, 81.97, 81.95, 81.93, 81.92, 81.90, 81.89, 81.87, 81.85, 81.84, 81.82, 81.80, 81.79, 81.77, 81.75, 81.74, 81.72, 81.70, 81.69, 81.67, 81.65, 81.64, 81.62, 81.61, 81.59, 81.57, 81.56, 81.54},
{84.26, 84.24, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.11, 84.09, 84.08, 84.06, 84.04, 84.02, 84.01, 83.99, 83.97, 83.95, 83.93, 83.92, 83.90, 83.88, 83.86, 83.85, 83.83, 83.81, 83.79, 83.78, 83.76, 83.74, 83.72, 83.71, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.58, 83.57, 83.55, 83.53, 83.51, 83.50, 83.48, 83.46, 83.44, 83.43, 83.41, 83.39, 83.37, 83.36, 83.34, 83.32, 83.31, 83.29, 83.27, 83.25, 83.24, 83.22, 83.20, 83.18, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.07, 83.05, 83.03, 83.01, 83.00, 82.98, 82.96, 82.95, 82.93, 82.91, 82.89, 82.88, 82.86, 82.84, 82.83, 82.81, 82.79, 82.78, 82.76, 82.74, 82.73, 82.71, 82.69, 82.68, 82.66, 82.64, 82.62, 82.61, 82.59, 82.57, 82.56, 82.54, 82.52, 82.51, 82.49, 82.47, 82.46, 82.44, 82.42, 82.41, 82.39, 82.37, 82.36, 82.34, 82.32, 82.31, 82.29, 82.28, 82.26, 82.24, 82.23, 82.21, 82.19, 82.18, 82.16, 82.14, 82.13, 82.11, 82.09, 82.08, 82.06, 82.04, 82.03, 82.01, 82.00, 81.98, 81.96, 81.95, 81.93, 81.91, 81.90, 81.88},
{84.58, 84.56, 84.55, 84.53, 84.51, 84.49, 84.48, 84.46, 84.44, 84.42, 84.40, 84.39, 84.37, 84.35, 84.33, 84.32, 84.30, 84.28, 84.26, 84.25, 84.23, 84.21, 84.19, 84.18, 84.16, 84.14, 84.12, 84.10, 84.09, 84.07, 84.05, 84.03, 84.02, 84.00, 83.98, 83.96, 83.95, 83.93, 83.91, 83.90, 83.88, 83.86, 83.84, 83.83, 83.81, 83.79, 83.77, 83.76, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.58, 83.57, 83.55, 83.53, 83.52, 83.50, 83.48, 83.46, 83.45, 83.43, 83.41, 83.40, 83.38, 83.36, 83.35, 83.33, 83.31, 83.29, 83.28, 83.26, 83.24, 83.23, 83.21, 83.19, 83.18, 83.16, 83.14, 83.13, 83.11, 83.09, 83.07, 83.06, 83.04, 83.02, 83.01, 82.99, 82.97, 82.96, 82.94, 82.92, 82.91, 82.89, 82.87, 82.86, 82.84, 82.82, 82.81, 82.79, 82.77, 82.76, 82.74, 82.72, 82.71, 82.69, 82.67, 82.66, 82.64, 82.63, 82.61, 82.59, 82.58, 82.56, 82.54, 82.53, 82.51, 82.49, 82.48, 82.46, 82.44, 82.43, 82.41, 82.40, 82.38, 82.36, 82.35, 82.33, 82.31, 82.30, 82.28, 82.26, 82.25, 82.23, 82.22},
{84.90, 84.89, 84.87, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.67, 84.66, 84.64, 84.62, 84.60, 84.59, 84.57, 84.55, 84.53, 84.51, 84.50, 84.48, 84.46, 84.44, 84.43, 84.41, 84.39, 84.38, 84.36, 84.34, 84.32, 84.31, 84.29, 84.27, 84.25, 84.24, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.11, 84.10, 84.08, 84.06, 84.05, 84.03, 84.01, 83.99, 83.98, 83.96, 83.94, 83.93, 83.91, 83.89, 83.87, 83.86, 83.84, 83.82, 83.81, 83.79, 83.77, 83.76, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.55, 83.54, 83.52, 83.50, 83.48, 83.47, 83.45, 83.43, 83.42, 83.40, 83.38, 83.37, 83.35, 83.33, 83.32, 83.30, 83.28, 83.27, 83.25, 83.23, 83.22, 83.20, 83.18, 83.17, 83.15, 83.13, 83.12, 83.10, 83.08, 83.07, 83.05, 83.03, 83.02, 83.00, 82.99, 82.97, 82.95, 82.94, 82.92, 82.90, 82.89, 82.87, 82.85, 82.84, 82.82, 82.80, 82.79, 82.77, 82.76, 82.74, 82.72, 82.71, 82.69, 82.67, 82.66, 82.64, 82.63, 82.61, 82.59, 82.58, 82.56, 82.54},
{85.22, 85.20, 85.18, 85.16, 85.15, 85.13, 85.11, 85.09, 85.08, 85.06, 85.04, 85.02, 85.01, 84.99, 84.97, 84.95, 84.94, 84.92, 84.90, 84.88, 84.87, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.67, 84.66, 84.64, 84.62, 84.60, 84.59, 84.57, 84.55, 84.54, 84.52, 84.50, 84.48, 84.47, 84.45, 84.43, 84.42, 84.40, 84.38, 84.36, 84.35, 84.33, 84.31, 84.30, 84.28, 84.26, 84.24, 84.23, 84.21, 84.19, 84.18, 84.16, 84.14, 84.12, 84.11, 84.09, 84.07, 84.06, 84.04, 84.02, 84.01, 83.99, 83.97, 83.96, 83.94, 83.92, 83.91, 83.89, 83.87, 83.85, 83.84, 83.82, 83.80, 83.79, 83.77, 83.75, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.55, 83.54, 83.52, 83.50, 83.49, 83.47, 83.45, 83.44, 83.42, 83.41, 83.39, 83.37, 83.36, 83.34, 83.32, 83.31, 83.29, 83.27, 83.26, 83.24, 83.22, 83.21, 83.19, 83.18, 83.16, 83.14, 83.13, 83.11, 83.09, 83.08, 83.06, 83.04, 83.03, 83.01, 83.00, 82.98, 82.96, 82.95, 82.93, 82.92, 82.90, 82.88, 82.87},
{85.53, 85.51, 85.49, 85.47, 85.46, 85.44, 85.42, 85.40, 85.39, 85.37, 85.35, 85.33, 85.32, 85.30, 85.28, 85.26, 85.25, 85.23, 85.21, 85.19, 85.18, 85.16, 85.14, 85.12, 85.11, 85.09, 85.07, 85.05, 85.04, 85.02, 85.00, 84.98, 84.97, 84.95, 84.93, 84.92, 84.90, 84.88, 84.86, 84.85, 84.83, 84.81, 84.80, 84.78, 84.76, 84.74, 84.73, 84.71, 84.69, 84.68, 84.66, 84.64, 84.62, 84.61, 84.59, 84.57, 84.56, 84.54, 84.52, 84.51, 84.49, 84.47, 84.45, 84.44, 84.42, 84.40, 84.39, 84.37, 84.35, 84.34, 84.32, 84.30, 84.29, 84.27, 84.25, 84.23, 84.22, 84.20, 84.18, 84.17, 84.15, 84.13, 84.12, 84.10, 84.08, 84.07, 84.05, 84.03, 84.02, 84.00, 83.98, 83.97, 83.95, 83.93, 83.92, 83.90, 83.88, 83.87, 83.85, 83.84, 83.82, 83.80, 83.79, 83.77, 83.75, 83.74, 83.72, 83.70, 83.69, 83.67, 83.65, 83.64, 83.62, 83.60, 83.59, 83.57, 83.56, 83.54, 83.52, 83.51, 83.49, 83.47, 83.46, 83.44, 83.43, 83.41, 83.39, 83.38, 83.36, 83.34, 83.33, 83.31, 83.30, 83.28, 83.26, 83.25, 83.23, 83.22, 83.20, 83.18}
};
const float InverseMapW[80][140] = {
{-43.41, -41.64, -39.87, -38.10, -36.34, -34.58, -32.83, -31.09, -29.34, -27.61, -25.88, -24.15, -22.43, -20.72, -19.00, -17.30, -15.60, -13.90, -12.21, -10.52, -8.84, -7.16, -5.49, -3.82, -2.16, -0.50, 1.15, 2.80, 4.44, 6.08, 7.72, 9.35, 10.97, 12.60, 14.21, 15.82, 17.43, 19.04, 20.63, 22.23, 23.82, 25.40, 26.99, 28.56, 30.13, 31.70, 33.27, 34.83, 36.38, 37.93, 39.48, 41.02, 42.56, 44.10, 45.63, 47.15, 48.67, 50.19, 51.70, 53.21, 54.72, 56.22, 57.72, 59.21, 60.70, 62.19, 63.67, 65.15, 66.62, 68.09, 69.55, 71.02, 72.47, 73.93, 75.38, 76.82, 78.27, 79.71, 81.14, 82.57, 84.00, 85.42, 86.84, 88.26, 89.67, 91.08, 92.49, 93.89, 95.29, 96.68, 98.07, 99.46, 100.84, 102.22, 103.60, 104.97, 106.34, 107.71, 109.07, 110.43, 111.78, 113.14, 114.48, 115.83, 117.17, 118.51, 119.84, 121.18, 122.50, 123.83, 125.15, 126.47, 127.78, 129.10, 130.40, 131.71, 133.01, 134.31, 135.60, 136.90, 138.18, 139.47, 140.75, 142.03, 143.31, 144.58, 145.85, 147.12, 148.38, 149.64, 150.90, 152.15, 153.40, 154.65, 155.90, 157.14, 158.38, 159.61, 160.84, 162.07},
{-38.86, -37.16, -35.46, -33.77, -32.09, -30.41, -28.73, -27.06, -25.39, -23.73, -22.07, -20.42, -18.77, -17.13, -15.49, -13.85, -12.22, -10.60, -8.97, -7.36, -5.75, -4.14, -2.53, -0.93, 0.66, 2.25, 3.84, 5.42, 7.00, 8.57, 10.14, 11.70, 13.27, 14.82, 16.37, 17.92, 19.47, 21.01, 22.54, 24.07, 25.60, 27.13, 28.65, 30.16, 31.67, 33.18, 34.68, 36.18, 37.68, 39.17, 40.66, 42.14, 43.62, 45.10, 46.57, 48.04, 49.50, 50.96, 52.42, 53.87, 55.32, 56.77, 58.21, 59.65, 61.08, 62.51, 63.94, 65.36, 66.78, 68.20, 69.61, 71.02, 72.43, 73.83, 75.23, 76.62, 78.01, 79.40, 80.78, 82.16, 83.54, 84.92, 86.29, 87.65, 89.02, 90.37, 91.73, 93.08, 94.43, 95.78, 97.12, 98.46, 99.80, 101.13, 102.46, 103.79, 105.11, 106.43, 107.75, 109.06, 110.37, 111.68, 112.98, 114.28, 115.58, 116.87, 118.16, 119.45, 120.73, 122.01, 123.29, 124.57, 125.84, 127.11, 128.37, 129.64, 130.90, 132.15, 133.41, 134.66, 135.90, 137.15, 138.39, 139.63, 140.86, 142.10, 143.33, 144.55, 145.78, 147.00, 148.22, 149.43, 150.64, 151.85, 153.06, 154.26, 155.46, 156.66, 157.86, 159.05},
{-34.65, -33.02, -31.39, -29.77, -28.16, -26.55, -24.94, -23.34, -21.74, -20.14, -18.55, -16.97, -15.38, -13.81, -12.23, -10.66, -9.10, -7.54, -5.98, -4.43, -2.88, -1.34, 0.20, 1.74, 3.27, 4.80, 6.33, 7.85, 9.36, 10.87, 12.38, 13.89, 15.39, 16.89, 18.38, 19.87, 21.35, 22.83, 24.31, 25.79, 27.26, 28.72, 30.18, 31.64, 33.10, 34.55, 36.00, 37.44, 38.88, 40.32, 41.75, 43.18, 44.61, 46.03, 47.45, 48.86, 50.27, 51.68, 53.09, 54.49, 55.88, 57.28, 58.67, 60.06, 61.44, 62.82, 64.20, 65.57, 66.94, 68.30, 69.67, 71.03, 72.38, 73.74, 75.09, 76.43, 77.78, 79.12, 80.45, 81.79, 83.12, 84.44, 85.77, 87.09, 88.40, 89.72, 91.03, 92.33, 93.64, 94.94, 96.24, 97.53, 98.82, 100.11, 101.40, 102.68, 103.96, 105.24, 106.51, 107.78, 109.05, 110.31, 111.57, 112.83, 114.09, 115.34, 116.59, 117.84, 119.08, 120.32, 121.56, 122.79, 124.02, 125.25, 126.48, 127.70, 128.92, 130.14, 131.35, 132.57, 133.77, 134.98, 136.18, 137.38, 138.58, 139.78, 140.97, 142.16, 143.35, 144.53, 145.71, 146.89, 148.07, 149.24, 150.41, 151.58, 152.74, 153.90, 155.06, 156.22},
{-30.75, -29.19, -27.63, -26.07, -24.52, -22.97, -21.43, -19.89, -18.35, -16.82, -15.29, -13.77, -12.24, -10.73, -9.22, -7.71, -6.20, -4.70, -3.20, -1.71, -0.22, 1.26, 2.75, 4.22, 5.70, 7.17, 8.64, 10.10, 11.56, 13.02, 14.47, 15.92, 17.36, 18.80, 20.24, 21.68, 23.11, 24.53, 25.96, 27.38, 28.79, 30.21, 31.62, 33.02, 34.43, 35.82, 37.22, 38.61, 40.00, 41.39, 42.77, 44.15, 45.52, 46.90, 48.26, 49.63, 50.99, 52.35, 53.71, 55.06, 56.41, 57.75, 59.09, 60.43, 61.77, 63.10, 64.43, 65.76, 67.08, 68.40, 69.72, 71.03, 72.34, 73.65, 74.96, 76.26, 77.55, 78.85, 80.14, 81.43, 82.72, 84.00, 85.28, 86.56, 87.83, 89.10, 90.37, 91.63, 92.90, 94.16, 95.41, 96.67, 97.92, 99.16, 100.41, 101.65, 102.89, 104.12, 105.36, 106.59, 107.81, 109.04, 110.26, 111.48, 112.70, 113.91, 115.12, 116.33, 117.53, 118.73, 119.93, 121.13, 122.32, 123.52, 124.70, 125.89, 127.07, 128.25, 129.43, 130.61, 131.78, 132.95, 134.12, 135.28, 136.44, 137.60, 138.76, 139.92, 141.07, 142.22, 143.36, 144.51, 145.65, 146.79, 147.92, 149.06, 150.19, 151.32, 152.45, 153.57},
{-27.13, -25.62, -24.12, -22.63, -21.13, -19.64, -18.16, -16.68, -15.20, -13.73, -12.26, -10.79, -9.32, -7.87, -6.41, -4.96, -3.51, -2.06, -0.62, 0.82, 2.25, 3.68, 5.11, 6.54, 7.96, 9.37, 10.79, 12.20, 13.61, 15.01, 16.41, 17.81, 19.20, 20.59, 21.98, 23.36, 24.74, 26.12, 27.49, 28.86, 30.23, 31.59, 32.95, 34.31, 35.66, 37.01, 38.36, 39.71, 41.05, 42.38, 43.72, 45.05, 46.38, 47.70, 49.03, 50.35, 51.66, 52.97, 54.28, 55.59, 56.90, 58.20, 59.49, 60.79, 62.08, 63.37, 64.65, 65.94, 67.22, 68.49, 69.77, 71.04, 72.31, 73.57, 74.83, 76.09, 77.35, 78.60, 79.85, 81.10, 82.34, 83.59, 84.83, 86.06, 87.30, 88.53, 89.75, 90.98, 92.20, 93.42, 94.64, 95.85, 97.06, 98.27, 99.48, 100.68, 101.88, 103.08, 104.28, 105.47, 106.66, 107.85, 109.03, 110.21, 111.39, 112.57, 113.74, 114.91, 116.08, 117.25, 118.41, 119.57, 120.73, 121.89, 123.04, 124.19, 125.34, 126.49, 127.63, 128.77, 129.91, 131.05, 132.18, 133.31, 134.44, 135.56, 136.69, 137.81, 138.93, 140.04, 141.16, 142.27, 143.38, 144.49, 145.59, 146.69, 147.79, 148.89, 149.98, 151.08},
{-23.75, -22.31, -20.86, -19.42, -17.98, -16.55, -15.12, -13.69, -12.26, -10.84, -9.43, -8.01, -6.60, -5.20, -3.79, -2.39, -0.99, 0.40, 1.79, 3.18, 4.56, 5.94, 7.32, 8.69, 10.06, 11.43, 12.80, 14.16, 15.52, 16.87, 18.22, 19.57, 20.92, 22.26, 23.60, 24.93, 26.27, 27.60, 28.92, 30.25, 31.57, 32.89, 34.20, 35.51, 36.82, 38.13, 39.43, 40.73, 42.02, 43.32, 44.61, 45.89, 47.18, 48.46, 49.74, 51.02, 52.29, 53.56, 54.83, 56.09, 57.35, 58.61, 59.87, 61.12, 62.37, 63.62, 64.86, 66.10, 67.34, 68.58, 69.81, 71.04, 72.27, 73.50, 74.72, 75.94, 77.15, 78.37, 79.58, 80.79, 82.00, 83.20, 84.40, 85.60, 86.79, 87.99, 89.18, 90.37, 91.55, 92.73, 93.91, 95.09, 96.27, 97.44, 98.61, 99.77, 100.94, 102.10, 103.26, 104.42, 105.57, 106.72, 107.87, 109.02, 110.17, 111.31, 112.45, 113.59, 114.72, 115.85, 116.98, 118.11, 119.24, 120.36, 121.48, 122.60, 123.71, 124.83, 125.94, 127.04, 128.15, 129.25, 130.36, 131.46, 132.55, 133.65, 134.74, 135.83, 136.92, 138.00, 139.08, 140.17, 141.24, 142.32, 143.39, 144.47, 145.54, 146.60, 147.67, 148.73},
{-20.61, -19.21, -17.82, -16.43, -15.04, -13.65, -12.27, -10.90, -9.52, -8.15, -6.78, -5.42, -4.06, -2.70, -1.34, 0.01, 1.36, 2.70, 4.04, 5.38, 6.72, 8.05, 9.39, 10.71, 12.04, 13.36, 14.68, 15.99, 17.30, 18.61, 19.92, 21.22, 22.52, 23.82, 25.12, 26.41, 27.70, 28.98, 30.27, 31.55, 32.82, 34.10, 35.37, 36.64, 37.90, 39.17, 40.43, 41.68, 42.94, 44.19, 45.44, 46.69, 47.93, 49.17, 50.41, 51.64, 52.88, 54.11, 55.33, 56.56, 57.78, 59.00, 60.22, 61.43, 62.64, 63.85, 65.06, 66.26, 67.46, 68.66, 69.85, 71.05, 72.24, 73.42, 74.61, 75.79, 76.97, 78.15, 79.33, 80.50, 81.67, 82.84, 84.00, 85.16, 86.32, 87.48, 88.64, 89.79, 90.94, 92.09, 93.23, 94.37, 95.51, 96.65, 97.79, 98.92, 100.05, 101.18, 102.31, 103.43, 104.55, 105.67, 106.79, 107.90, 109.01, 110.12, 111.23, 112.34, 113.44, 114.54, 115.64, 116.73, 117.83, 118.92, 120.01, 121.09, 122.18, 123.26, 124.34, 125.42, 126.49, 127.57, 128.64, 129.71, 130.77, 131.84, 132.90, 133.96, 135.02, 136.08, 137.13, 138.18, 139.23, 140.28, 141.32, 142.37, 143.41, 144.45, 145.48, 146.52},
{-17.66, -16.31, -14.96, -13.62, -12.28, -10.95, -9.61, -8.28, -6.95, -5.63, -4.31, -2.99, -1.67, -0.36, 0.95, 2.25, 3.56, 4.86, 6.16, 7.45, 8.74, 10.03, 11.32, 12.60, 13.89, 15.16, 16.44, 17.71, 18.98, 20.25, 21.51, 22.77, 24.03, 25.29, 26.54, 27.79, 29.04, 30.28, 31.52, 32.76, 34.00, 35.24, 36.47, 37.70, 38.92, 40.14, 41.37, 42.58, 43.80, 45.01, 46.22, 47.43, 48.63, 49.84, 51.04, 52.23, 53.43, 54.62, 55.81, 57.00, 58.18, 59.37, 60.55, 61.72, 62.90, 64.07, 65.24, 66.41, 67.57, 68.73, 69.89, 71.05, 72.21, 73.36, 74.51, 75.66, 76.80, 77.94, 79.08, 80.22, 81.36, 82.49, 83.62, 84.75, 85.88, 87.00, 88.12, 89.24, 90.36, 91.48, 92.59, 93.70, 94.81, 95.91, 97.02, 98.12, 99.22, 100.31, 101.41, 102.50, 103.59, 104.68, 105.76, 106.85, 107.93, 109.01, 110.08, 111.16, 112.23, 113.30, 114.37, 115.43, 116.50, 117.56, 118.62, 119.68, 120.73, 121.78, 122.84, 123.88, 124.93, 125.98, 127.02, 128.06, 129.10, 130.13, 131.17, 132.20, 133.23, 134.26, 135.29, 136.31, 137.33, 138.35, 139.37, 140.39, 141.40, 142.41, 143.42, 144.43},
{-14.89, -13.59, -12.29, -10.99, -9.70, -8.40, -7.12, -5.83, -4.55, -3.26, -1.99, -0.71, 0.56, 1.83, 3.10, 4.36, 5.63, 6.88, 8.14, 9.39, 10.65, 11.89, 13.14, 14.38, 15.62, 16.86, 18.09, 19.33, 20.56, 21.78, 23.01, 24.23, 25.45, 26.66, 27.88, 29.09, 30.30, 31.51, 32.71, 33.91, 35.11, 36.30, 37.50, 38.69, 39.88, 41.06, 42.25, 43.43, 44.61, 45.78, 46.96, 48.13, 49.30, 50.46, 51.63, 52.79, 53.95, 55.11, 56.26, 57.41, 58.56, 59.71, 60.85, 62.00, 63.14, 64.28, 65.41, 66.54, 67.68, 68.80, 69.93, 71.05, 72.18, 73.30, 74.41, 75.53, 76.64, 77.75, 78.86, 79.96, 81.07, 82.17, 83.27, 84.37, 85.46, 86.55, 87.64, 88.73, 89.82, 90.90, 91.98, 93.06, 94.14, 95.21, 96.29, 97.36, 98.43, 99.49, 100.56, 101.62, 102.68, 103.74, 104.80, 105.85, 106.90, 107.95, 109.00, 110.04, 111.09, 112.13, 113.17, 114.21, 115.24, 116.28, 117.31, 118.34, 119.36, 120.39, 121.41, 122.43, 123.45, 124.47, 125.49, 126.50, 127.51, 128.52, 129.53, 130.54, 131.54, 132.54, 133.54, 134.54, 135.53, 136.53, 137.52, 138.51, 139.50, 140.49, 141.47, 142.45},
{-12.30, -11.04, -9.78, -8.52, -7.27, -6.02, -4.77, -3.52, -2.28, -1.04, 0.20, 1.43, 2.67, 3.90, 5.12, 6.35, 7.57, 8.79, 10.01, 11.22, 12.43, 13.64, 14.85, 16.05, 17.26, 18.46, 19.65, 20.85, 22.04, 23.23, 24.42, 25.60, 26.78, 27.96, 29.14, 30.31, 31.49, 32.66, 33.82, 34.99, 36.15, 37.31, 38.47, 39.63, 40.78, 41.93, 43.08, 44.23, 45.37, 46.51, 47.65, 48.79, 49.92, 51.06, 52.19, 53.31, 54.44, 55.56, 56.68, 57.80, 58.92, 60.03, 61.15, 62.26, 63.36, 64.47, 65.57, 66.67, 67.77, 68.87, 69.97, 71.06, 72.15, 73.24, 74.32, 75.41, 76.49, 77.57, 78.64, 79.72, 80.79, 81.86, 82.93, 84.00, 85.06, 86.13, 87.19, 88.25, 89.30, 90.36, 91.41, 92.46, 93.51, 94.55, 95.60, 96.64, 97.68, 98.72, 99.76, 100.79, 101.82, 102.85, 103.88, 104.91, 105.93, 106.95, 107.97, 108.99, 110.01, 111.02, 112.04, 113.05, 114.06, 115.06, 116.07, 117.07, 118.07, 119.07, 120.07, 121.06, 122.06, 123.05, 124.04, 125.03, 126.01, 127.00, 127.98, 128.96, 129.94, 130.91, 131.89, 132.86, 133.83, 134.80, 135.77, 136.74, 137.70, 138.66, 139.62, 140.58},
{-9.85, -8.63, -7.41, -6.19, -4.98, -3.77, -2.56, -1.35, -0.15, 1.06, 2.26, 3.45, 4.65, 5.84, 7.03, 8.22, 9.40, 10.59, 11.77, 12.94, 14.12, 15.29, 16.46, 17.63, 18.80, 19.96, 21.12, 22.28, 23.44, 24.59, 25.74, 26.89, 28.04, 29.19, 30.33, 31.47, 32.61, 33.74, 34.88, 36.01, 37.14, 38.26, 39.39, 40.51, 41.63, 42.75, 43.87, 44.98, 46.09, 47.20, 48.31, 49.41, 50.51, 51.62, 52.71, 53.81, 54.90, 56.00, 57.09, 58.17, 59.26, 60.34, 61.42, 62.50, 63.58, 64.65, 65.73, 66.80, 67.87, 68.93, 70.00, 71.06, 72.12, 73.18, 74.24, 75.29, 76.34, 77.39, 78.44, 79.49, 80.53, 81.58, 82.62, 83.65, 84.69, 85.73, 86.76, 87.79, 88.82, 89.84, 90.87, 91.89, 92.91, 93.93, 94.95, 95.96, 96.98, 97.99, 99.00, 100.00, 101.01, 102.01, 103.01, 104.01, 105.01, 106.01, 107.00, 108.00, 108.99, 109.97, 110.96, 111.95, 112.93, 113.91, 114.89, 115.87, 116.84, 117.82, 118.79, 119.76, 120.73, 121.70, 122.66, 123.63, 124.59, 125.55, 126.51, 127.46, 128.42, 129.37, 130.32, 131.27, 132.22, 133.16, 134.11, 135.05, 135.99, 136.93, 137.87, 138.80},
{-7.55, -6.36, -5.18, -4.00, -2.82, -1.65, -0.47, 0.70, 1.87, 3.03, 4.20, 5.36, 6.52, 7.68, 8.83, 9.98, 11.13, 12.28, 13.43, 14.57, 15.71, 16.85, 17.99, 19.12, 20.25, 21.38, 22.51, 23.64, 24.76, 25.88, 27.00, 28.12, 29.23, 30.34, 31.45, 32.56, 33.67, 34.77, 35.87, 36.97, 38.07, 39.16, 40.26, 41.35, 42.44, 43.52, 44.61, 45.69, 46.77, 47.85, 48.93, 50.00, 51.07, 52.14, 53.21, 54.28, 55.34, 56.40, 57.46, 58.52, 59.58, 60.63, 61.68, 62.73, 63.78, 64.83, 65.87, 66.92, 67.96, 68.99, 70.03, 71.06, 72.10, 73.13, 74.16, 75.18, 76.21, 77.23, 78.25, 79.27, 80.29, 81.30, 82.32, 83.33, 84.34, 85.34, 86.35, 87.35, 88.36, 89.36, 90.35, 91.35, 92.35, 93.34, 94.33, 95.32, 96.31, 97.29, 98.28, 99.26, 100.24, 101.22, 102.19, 103.17, 104.14, 105.11, 106.08, 107.05, 108.02, 108.98, 109.94, 110.90, 111.86, 112.82, 113.78, 114.73, 115.68, 116.63, 117.58, 118.53, 119.47, 120.42, 121.36, 122.30, 123.24, 124.17, 125.11, 126.04, 126.97, 127.90, 128.83, 129.76, 130.69, 131.61, 132.53, 133.45, 134.37, 135.29, 136.20, 137.12},
{-5.37, -4.22, -3.07, -1.93, -0.78, 0.36, 1.50, 2.64, 3.77, 4.90, 6.03, 7.16, 8.29, 9.41, 10.53, 11.65, 12.77, 13.88, 15.00, 16.11, 17.22, 18.32, 19.43, 20.53, 21.63, 22.73, 23.82, 24.92, 26.01, 27.10, 28.19, 29.27, 30.36, 31.44, 32.52, 33.59, 34.67, 35.74, 36.81, 37.88, 38.95, 40.02, 41.08, 42.14, 43.20, 44.26, 45.31, 46.37, 47.42, 48.47, 49.51, 50.56, 51.60, 52.64, 53.68, 54.72, 55.76, 56.79, 57.82, 58.85, 59.88, 60.91, 61.93, 62.95, 63.98, 64.99, 66.01, 67.03, 68.04, 69.05, 70.06, 71.07, 72.07, 73.08, 74.08, 75.08, 76.08, 77.07, 78.07, 79.06, 80.05, 81.04, 82.03, 83.02, 84.00, 84.98, 85.96, 86.94, 87.92, 88.89, 89.87, 90.84, 91.81, 92.78, 93.74, 94.71, 95.67, 96.63, 97.59, 98.55, 99.51, 100.46, 101.41, 102.36, 103.31, 104.26, 105.21, 106.15, 107.09, 108.03, 108.97, 109.91, 110.85, 111.78, 112.72, 113.65, 114.58, 115.50, 116.43, 117.35, 118.28, 119.20, 120.12, 121.04, 121.95, 122.87, 123.78, 124.69, 125.60, 126.51, 127.42, 128.32, 129.23, 130.13, 131.03, 131.93, 132.83, 133.72, 134.62, 135.51},
{-3.31, -2.19, -1.08, 0.04, 1.15, 2.26, 3.36, 4.47, 5.57, 6.67, 7.77, 8.87, 9.96, 11.05, 12.14, 13.23, 14.32, 15.40, 16.48, 17.56, 18.64, 19.72, 20.79, 21.86, 22.93, 24.00, 25.07, 26.13, 27.19, 28.25, 29.31, 30.37, 31.42, 32.47, 33.52, 34.57, 35.62, 36.66, 37.71, 38.75, 39.79, 40.82, 41.86, 42.89, 43.92, 44.95, 45.98, 47.00, 48.03, 49.05, 50.07, 51.09, 52.10, 53.12, 54.13, 55.14, 56.15, 57.16, 58.16, 59.17, 60.17, 61.17, 62.17, 63.16, 64.16, 65.15, 66.14, 67.13, 68.12, 69.10, 70.09, 71.07, 72.05, 73.03, 74.01, 74.98, 75.95, 76.93, 77.90, 78.86, 79.83, 80.80, 81.76, 82.72, 83.68, 84.64, 85.59, 86.55, 87.50, 88.45, 89.40, 90.35, 91.30, 92.24, 93.19, 94.13, 95.07, 96.00, 96.94, 97.88, 98.81, 99.74, 100.67, 101.60, 102.53, 103.45, 104.37, 105.30, 106.22, 107.14, 108.05, 108.97, 109.88, 110.80, 111.71, 112.62, 113.52, 114.43, 115.33, 116.24, 117.14, 118.04, 118.94, 119.83, 120.73, 121.62, 122.52, 123.41, 124.30, 125.18, 126.07, 126.96, 127.84, 128.72, 129.60, 130.48, 131.36, 132.23, 133.11, 133.98},
{-1.36, -0.27, 0.81, 1.90, 2.98, 4.06, 5.13, 6.21, 7.28, 8.35, 9.42, 10.48, 11.55, 12.61, 13.67, 14.73, 15.79, 16.84, 17.89, 18.94, 19.99, 21.04, 22.09, 23.13, 24.17, 25.21, 26.25, 27.28, 28.32, 29.35, 30.38, 31.41, 32.43, 33.46, 34.48, 35.50, 36.52, 37.54, 38.55, 39.57, 40.58, 41.59, 42.60, 43.60, 44.61, 45.61, 46.61, 47.61, 48.61, 49.61, 50.60, 51.59, 52.58, 53.57, 54.56, 55.54, 56.53, 57.51, 58.49, 59.47, 60.44, 61.42, 62.39, 63.36, 64.33, 65.30, 66.27, 67.23, 68.19, 69.16, 70.11, 71.07, 72.03, 72.98, 73.94, 74.89, 75.84, 76.79, 77.73, 78.68, 79.62, 80.56, 81.50, 82.44, 83.38, 84.31, 85.24, 86.18, 87.11, 88.04, 88.96, 89.89, 90.81, 91.73, 92.66, 93.57, 94.49, 95.41, 96.32, 97.24, 98.15, 99.06, 99.96, 100.87, 101.78, 102.68, 103.58, 104.48, 105.38, 106.28, 107.18, 108.07, 108.96, 109.86, 110.75, 111.63, 112.52, 113.41, 114.29, 115.17, 116.05, 116.93, 117.81, 118.69, 119.57, 120.44, 121.31, 122.18, 123.05, 123.92, 124.79, 125.65, 126.52, 127.38, 128.24, 129.10, 129.96, 130.81, 131.67, 132.52},
{0.50, 1.55, 2.61, 3.66, 4.71, 5.76, 6.81, 7.86, 8.90, 9.94, 10.98, 12.02, 13.05, 14.09, 15.12, 16.15, 17.18, 18.21, 19.23, 20.26, 21.28, 22.30, 23.32, 24.33, 25.35, 26.36, 27.37, 28.38, 29.39, 30.39, 31.39, 32.40, 33.40, 34.39, 35.39, 36.39, 37.38, 38.37, 39.36, 40.35, 41.33, 42.32, 43.30, 44.28, 45.26, 46.24, 47.22, 48.19, 49.16, 50.13, 51.10, 52.07, 53.04, 54.00, 54.96, 55.92, 56.88, 57.84, 58.80, 59.75, 60.70, 61.65, 62.60, 63.55, 64.50, 65.44, 66.38, 67.33, 68.27, 69.20, 70.14, 71.08, 72.01, 72.94, 73.87, 74.80, 75.73, 76.65, 77.58, 78.50, 79.42, 80.34, 81.26, 82.17, 83.09, 84.00, 84.91, 85.82, 86.73, 87.64, 88.54, 89.45, 90.35, 91.25, 92.15, 93.05, 93.94, 94.84, 95.73, 96.62, 97.51, 98.40, 99.29, 100.18, 101.06, 101.95, 102.83, 103.71, 104.59, 105.46, 106.34, 107.21, 108.09, 108.96, 109.83, 110.70, 111.57, 112.43, 113.30, 114.16, 115.02, 115.88, 116.74, 117.60, 118.45, 119.31, 120.16, 121.01, 121.86, 122.71, 123.56, 124.41, 125.25, 126.10, 126.94, 127.78, 128.62, 129.46, 130.30, 131.13},
{2.26, 3.29, 4.31, 5.34, 6.36, 7.38, 8.40, 9.42, 10.44, 11.45, 12.47, 13.48, 14.49, 15.50, 16.50, 17.51, 18.51, 19.51, 20.51, 21.50, 22.50, 23.49, 24.49, 25.48, 26.46, 27.45, 28.44, 29.42, 30.40, 31.38, 32.36, 33.34, 34.31, 35.29, 36.26, 37.23, 38.20, 39.16, 40.13, 41.09, 42.05, 43.01, 43.97, 44.93, 45.88, 46.84, 47.79, 48.74, 49.69, 50.64, 51.58, 52.53, 53.47, 54.41, 55.35, 56.29, 57.22, 58.16, 59.09, 60.02, 60.95, 61.88, 62.81, 63.73, 64.66, 65.58, 66.50, 67.42, 68.33, 69.25, 70.17, 71.08, 71.99, 72.90, 73.81, 74.71, 75.62, 76.52, 77.43, 78.33, 79.23, 80.13, 81.02, 81.92, 82.81, 83.70, 84.59, 85.48, 86.37, 87.26, 88.14, 89.03, 89.91, 90.79, 91.67, 92.54, 93.42, 94.30, 95.17, 96.04, 96.91, 97.78, 98.65, 99.52, 100.38, 101.24, 102.11, 102.97, 103.83, 104.68, 105.54, 106.40, 107.25, 108.10, 108.95, 109.80, 110.65, 111.50, 112.35, 113.19, 114.03, 114.87, 115.72, 116.55, 117.39, 118.23, 119.06, 119.90, 120.73, 121.56, 122.39, 123.22, 124.05, 124.87, 125.70, 126.52, 127.34, 128.16, 128.98, 129.80},
{3.93, 4.94, 5.94, 6.94, 7.93, 8.93, 9.92, 10.92, 11.91, 12.89, 13.88, 14.87, 15.85, 16.83, 17.81, 18.79, 19.77, 20.75, 21.72, 22.69, 23.66, 24.63, 25.60, 26.56, 27.53, 28.49, 29.45, 30.41, 31.37, 32.33, 33.28, 34.23, 35.18, 36.13, 37.08, 38.03, 38.97, 39.92, 40.86, 41.80, 42.74, 43.67, 44.61, 45.54, 46.48, 47.41, 48.34, 49.26, 50.19, 51.11, 52.04, 52.96, 53.88, 54.80, 55.72, 56.63, 57.55, 58.46, 59.37, 60.28, 61.19, 62.09, 63.00, 63.90, 64.81, 65.71, 66.61, 67.50, 68.40, 69.29, 70.19, 71.08, 71.97, 72.86, 73.75, 74.63, 75.52, 76.40, 77.28, 78.17, 79.04, 79.92, 80.80, 81.67, 82.55, 83.42, 84.29, 85.16, 86.03, 86.89, 87.76, 88.62, 89.49, 90.35, 91.21, 92.06, 92.92, 93.78, 94.63, 95.48, 96.34, 97.19, 98.04, 98.88, 99.73, 100.57, 101.42, 102.26, 103.10, 103.94, 104.78, 105.62, 106.45, 107.29, 108.12, 108.95, 109.78, 110.61, 111.44, 112.26, 113.09, 113.91, 114.74, 115.56, 116.38, 117.20, 118.01, 118.83, 119.64, 120.46, 121.27, 122.08, 122.89, 123.70, 124.51, 125.32, 126.12, 126.92, 127.73, 128.53},
{5.53, 6.51, 7.48, 8.46, 9.43, 10.40, 11.37, 12.34, 13.30, 14.27, 15.23, 16.19, 17.15, 18.11, 19.07, 20.02, 20.97, 21.93, 22.88, 23.82, 24.77, 25.72, 26.66, 27.60, 28.54, 29.48, 30.42, 31.36, 32.29, 33.23, 34.16, 35.09, 36.02, 36.94, 37.87, 38.79, 39.71, 40.64, 41.56, 42.47, 43.39, 44.30, 45.22, 46.13, 47.04, 47.95, 48.86, 49.76, 50.67, 51.57, 52.47, 53.37, 54.27, 55.17, 56.07, 56.96, 57.85, 58.75, 59.64, 60.53, 61.41, 62.30, 63.18, 64.07, 64.95, 65.83, 66.71, 67.59, 68.46, 69.34, 70.21, 71.08, 71.95, 72.82, 73.69, 74.56, 75.42, 76.29, 77.15, 78.01, 78.87, 79.73, 80.59, 81.44, 82.30, 83.15, 84.00, 84.85, 85.70, 86.55, 87.39, 88.24, 89.08, 89.92, 90.77, 91.61, 92.44, 93.28, 94.12, 94.95, 95.79, 96.62, 97.45, 98.28, 99.11, 99.93, 100.76, 101.58, 102.41, 103.23, 104.05, 104.87, 105.69, 106.50, 107.32, 108.13, 108.95, 109.76, 110.57, 111.38, 112.19, 112.99, 113.80, 114.60, 115.41, 116.21, 117.01, 117.81, 118.61, 119.40, 120.20, 120.99, 121.79, 122.58, 123.37, 124.16, 124.95, 125.74, 126.52, 127.31},
{7.05, 8.00, 8.96, 9.91, 10.86, 11.80, 12.75, 13.69, 14.64, 15.58, 16.52, 17.45, 18.39, 19.33, 20.26, 21.19, 22.12, 23.05, 23.98, 24.91, 25.83, 26.75, 27.67, 28.59, 29.51, 30.43, 31.35, 32.26, 33.17, 34.08, 34.99, 35.90, 36.81, 37.72, 38.62, 39.52, 40.42, 41.32, 42.22, 43.12, 44.01, 44.91, 45.80, 46.69, 47.58, 48.47, 49.36, 50.24, 51.13, 52.01, 52.89, 53.77, 54.65, 55.53, 56.40, 57.28, 58.15, 59.02, 59.89, 60.76, 61.63, 62.50, 63.36, 64.22, 65.09, 65.95, 66.81, 67.67, 68.52, 69.38, 70.23, 71.08, 71.94, 72.79, 73.64, 74.48, 75.33, 76.17, 77.02, 77.86, 78.70, 79.54, 80.38, 81.22, 82.05, 82.89, 83.72, 84.55, 85.39, 86.22, 87.04, 87.87, 88.70, 89.52, 90.34, 91.17, 91.99, 92.81, 93.63, 94.44, 95.26, 96.07, 96.89, 97.70, 98.51, 99.32, 100.13, 100.94, 101.74, 102.55, 103.35, 104.15, 104.95, 105.75, 106.55, 107.35, 108.15, 108.94, 109.74, 110.53, 111.32, 112.11, 112.90, 113.69, 114.48, 115.26, 116.05, 116.83, 117.61, 118.39, 119.17, 119.95, 120.73, 121.51, 122.28, 123.06, 123.83, 124.60, 125.37, 126.14},
{8.50, 9.43, 10.36, 11.29, 12.22, 13.14, 14.07, 14.99, 15.91, 16.83, 17.74, 18.66, 19.58, 20.49, 21.40, 22.31, 23.22, 24.13, 25.03, 25.94, 26.84, 27.74, 28.64, 29.54, 30.44, 31.34, 32.23, 33.12, 34.02, 34.91, 35.80, 36.68, 37.57, 38.45, 39.34, 40.22, 41.10, 41.98, 42.86, 43.73, 44.61, 45.48, 46.36, 47.23, 48.10, 48.97, 49.83, 50.70, 51.56, 52.43, 53.29, 54.15, 55.01, 55.87, 56.72, 57.58, 58.43, 59.29, 60.14, 60.99, 61.84, 62.68, 63.53, 64.37, 65.22, 66.06, 66.90, 67.74, 68.58, 69.42, 70.25, 71.09, 71.92, 72.75, 73.58, 74.41, 75.24, 76.07, 76.89, 77.72, 78.54, 79.36, 80.19, 81.01, 81.82, 82.64, 83.46, 84.27, 85.09, 85.90, 86.71, 87.52, 88.33, 89.13, 89.94, 90.75, 91.55, 92.35, 93.15, 93.95, 94.75, 95.55, 96.35, 97.14, 97.94, 98.73, 99.52, 100.31, 101.10, 101.89, 102.68, 103.47, 104.25, 105.04, 105.82, 106.60, 107.38, 108.16, 108.94, 109.71, 110.49, 111.27, 112.04, 112.81, 113.58, 114.35, 115.12, 115.89, 116.66, 117.42, 118.19, 118.95, 119.71, 120.48, 121.24, 122.00, 122.75, 123.51, 124.27, 125.02},
{9.89, 10.80, 11.71, 12.61, 13.52, 14.42, 15.33, 16.23, 17.13, 18.02, 18.92, 19.81, 20.71, 21.60, 22.49, 23.38, 24.27, 25.16, 26.04, 26.93, 27.81, 28.69, 29.57, 30.45, 31.33, 32.20, 33.08, 33.95, 34.82, 35.69, 36.56, 37.43, 38.30, 39.16, 40.02, 40.89, 41.75, 42.61, 43.47, 44.32, 45.18, 46.04, 46.89, 47.74, 48.59, 49.44, 50.29, 51.14, 51.98, 52.83, 53.67, 54.51, 55.35, 56.19, 57.03, 57.87, 58.70, 59.54, 60.37, 61.20, 62.03, 62.86, 63.69, 64.52, 65.34, 66.17, 66.99, 67.81, 68.63, 69.45, 70.27, 71.09, 71.90, 72.72, 73.53, 74.35, 75.16, 75.97, 76.78, 77.58, 78.39, 79.19, 80.00, 80.80, 81.60, 82.40, 83.20, 84.00, 84.80, 85.59, 86.39, 87.18, 87.97, 88.76, 89.55, 90.34, 91.13, 91.92, 92.70, 93.49, 94.27, 95.05, 95.83, 96.61, 97.39, 98.17, 98.94, 99.72, 100.49, 101.27, 102.04, 102.81, 103.58, 104.35, 105.11, 105.88, 106.65, 107.41, 108.17, 108.93, 109.69, 110.45, 111.21, 111.97, 112.73, 113.48, 114.24, 114.99, 115.74, 116.49, 117.24, 117.99, 118.74, 119.49, 120.23, 120.98, 121.72, 122.46, 123.21, 123.95},
{11.22, 12.11, 13.00, 13.88, 14.77, 15.65, 16.53, 17.41, 18.29, 19.17, 20.04, 20.92, 21.79, 22.66, 23.54, 24.41, 25.27, 26.14, 27.01, 27.87, 28.73, 29.60, 30.46, 31.32, 32.17, 33.03, 33.89, 34.74, 35.59, 36.44, 37.29, 38.14, 38.99, 39.84, 40.68, 41.53, 42.37, 43.21, 44.05, 44.89, 45.73, 46.56, 47.40, 48.23, 49.07, 49.90, 50.73, 51.56, 52.38, 53.21, 54.04, 54.86, 55.68, 56.50, 57.33, 58.14, 58.96, 59.78, 60.59, 61.41, 62.22, 63.03, 63.85, 64.66, 65.46, 66.27, 67.08, 67.88, 68.69, 69.49, 70.29, 71.09, 71.89, 72.69, 73.48, 74.28, 75.08, 75.87, 76.66, 77.45, 78.24, 79.03, 79.82, 80.60, 81.39, 82.17, 82.96, 83.74, 84.52, 85.30, 86.08, 86.86, 87.63, 88.41, 89.18, 89.96, 90.73, 91.50, 92.27, 93.04, 93.80, 94.57, 95.34, 96.10, 96.86, 97.63, 98.39, 99.15, 99.91, 100.66, 101.42, 102.18, 102.93, 103.69, 104.44, 105.19, 105.94, 106.69, 107.44, 108.18, 108.93, 109.68, 110.42, 111.16, 111.91, 112.65, 113.39, 114.12, 114.86, 115.60, 116.34, 117.07, 117.80, 118.54, 119.27, 120.00, 120.73, 121.46, 122.19, 122.91},
{12.49, 13.36, 14.23, 15.09, 15.96, 16.82, 17.68, 18.54, 19.40, 20.26, 21.12, 21.98, 22.83, 23.68, 24.54, 25.39, 26.24, 27.08, 27.93, 28.78, 29.62, 30.46, 31.31, 32.15, 32.99, 33.82, 34.66, 35.50, 36.33, 37.17, 38.00, 38.83, 39.66, 40.49, 41.31, 42.14, 42.96, 43.79, 44.61, 45.43, 46.25, 47.07, 47.89, 48.70, 49.52, 50.33, 51.15, 51.96, 52.77, 53.58, 54.39, 55.19, 56.00, 56.80, 57.61, 58.41, 59.21, 60.01, 60.81, 61.61, 62.40, 63.20, 63.99, 64.79, 65.58, 66.37, 67.16, 67.95, 68.74, 69.52, 70.31, 71.09, 71.88, 72.66, 73.44, 74.22, 75.00, 75.77, 76.55, 77.33, 78.10, 78.87, 79.65, 80.42, 81.19, 81.96, 82.72, 83.49, 84.26, 85.02, 85.78, 86.55, 87.31, 88.07, 88.83, 89.58, 90.34, 91.10, 91.85, 92.61, 93.36, 94.11, 94.86, 95.61, 96.36, 97.11, 97.85, 98.60, 99.34, 100.09, 100.83, 101.57, 102.31, 103.05, 103.79, 104.53, 105.26, 106.00, 106.73, 107.46, 108.20, 108.93, 109.66, 110.39, 111.11, 111.84, 112.57, 113.29, 114.02, 114.74, 115.46, 116.18, 116.90, 117.62, 118.34, 119.06, 119.78, 120.49, 121.21, 121.92},
{13.71, 14.56, 15.41, 16.26, 17.10, 17.95, 18.79, 19.63, 20.47, 21.31, 22.15, 22.99, 23.83, 24.66, 25.49, 26.33, 27.16, 27.99, 28.82, 29.65, 30.47, 31.30, 32.12, 32.94, 33.77, 34.59, 35.41, 36.22, 37.04, 37.86, 38.67, 39.49, 40.30, 41.11, 41.92, 42.73, 43.54, 44.34, 45.15, 45.95, 46.75, 47.56, 48.36, 49.16, 49.96, 50.75, 51.55, 52.34, 53.14, 53.93, 54.72, 55.51, 56.30, 57.09, 57.88, 58.66, 59.45, 60.23, 61.02, 61.80, 62.58, 63.36, 64.14, 64.91, 65.69, 66.47, 67.24, 68.01, 68.79, 69.56, 70.33, 71.09, 71.86, 72.63, 73.39, 74.16, 74.92, 75.68, 76.45, 77.21, 77.96, 78.72, 79.48, 80.24, 80.99, 81.74, 82.50, 83.25, 84.00, 84.75, 85.50, 86.25, 86.99, 87.74, 88.48, 89.23, 89.97, 90.71, 91.45, 92.19, 92.93, 93.67, 94.40, 95.14, 95.87, 96.61, 97.34, 98.07, 98.80, 99.53, 100.26, 100.99, 101.71, 102.44, 103.16, 103.89, 104.61, 105.33, 106.05, 106.77, 107.49, 108.21, 108.92, 109.64, 110.35, 111.07, 111.78, 112.49, 113.20, 113.91, 114.62, 115.33, 116.04, 116.74, 117.45, 118.15, 118.86, 119.56, 120.26, 120.96},
{14.88, 15.71, 16.54, 17.37, 18.20, 19.03, 19.85, 20.68, 21.50, 22.32, 23.14, 23.96, 24.78, 25.60, 26.41, 27.23, 28.04, 28.86, 29.67, 30.48, 31.29, 32.10, 32.90, 33.71, 34.51, 35.32, 36.12, 36.92, 37.72, 38.52, 39.32, 40.12, 40.91, 41.71, 42.50, 43.29, 44.08, 44.87, 45.66, 46.45, 47.24, 48.02, 48.81, 49.59, 50.37, 51.16, 51.94, 52.71, 53.49, 54.27, 55.05, 55.82, 56.59, 57.37, 58.14, 58.91, 59.68, 60.45, 61.22, 61.98, 62.75, 63.51, 64.27, 65.04, 65.80, 66.56, 67.32, 68.07, 68.83, 69.59, 70.34, 71.10, 71.85, 72.60, 73.35, 74.10, 74.85, 75.60, 76.34, 77.09, 77.83, 78.58, 79.32, 80.06, 80.80, 81.54, 82.28, 83.02, 83.75, 84.49, 85.22, 85.96, 86.69, 87.42, 88.15, 88.88, 89.61, 90.34, 91.07, 91.79, 92.52, 93.24, 93.96, 94.68, 95.41, 96.13, 96.84, 97.56, 98.28, 99.00, 99.71, 100.42, 101.14, 101.85, 102.56, 103.27, 103.98, 104.69, 105.40, 106.10, 106.81, 107.51, 108.22, 108.92, 109.62, 110.32, 111.02, 111.72, 112.42, 113.12, 113.81, 114.51, 115.21, 115.90, 116.59, 117.28, 117.97, 118.66, 119.35, 120.04},
{16.00, 16.82, 17.63, 18.44, 19.25, 20.06, 20.87, 21.68, 22.48, 23.29, 24.09, 24.90, 25.70, 26.50, 27.30, 28.10, 28.89, 29.69, 30.49, 31.28, 32.07, 32.86, 33.66, 34.44, 35.23, 36.02, 36.81, 37.59, 38.38, 39.16, 39.94, 40.72, 41.50, 42.28, 43.06, 43.84, 44.61, 45.38, 46.16, 46.93, 47.70, 48.47, 49.24, 50.01, 50.78, 51.54, 52.31, 53.07, 53.83, 54.60, 55.36, 56.12, 56.88, 57.63, 58.39, 59.15, 59.90, 60.65, 61.41, 62.16, 62.91, 63.66, 64.41, 65.15, 65.90, 66.65, 67.39, 68.13, 68.88, 69.62, 70.36, 71.10, 71.84, 72.57, 73.31, 74.05, 74.78, 75.51, 76.25, 76.98, 77.71, 78.44, 79.17, 79.89, 80.62, 81.35, 82.07, 82.80, 83.52, 84.24, 84.96, 85.68, 86.40, 87.12, 87.84, 88.55, 89.27, 89.98, 90.69, 91.41, 92.12, 92.83, 93.54, 94.25, 94.96, 95.66, 96.37, 97.07, 97.78, 98.48, 99.18, 99.88, 100.58, 101.28, 101.98, 102.68, 103.38, 104.07, 104.77, 105.46, 106.15, 106.85, 107.54, 108.23, 108.92, 109.61, 110.29, 110.98, 111.67, 112.35, 113.04, 113.72, 114.40, 115.08, 115.76, 116.44, 117.12, 117.80, 118.48, 119.15},
{17.08, 17.88, 18.68, 19.47, 20.27, 21.06, 21.85, 22.64, 23.43, 24.22, 25.01, 25.79, 26.58, 27.37, 28.15, 28.93, 29.71, 30.49, 31.27, 32.05, 32.83, 33.60, 34.38, 35.15, 35.92, 36.70, 37.47, 38.24, 39.01, 39.77, 40.54, 41.31, 42.07, 42.83, 43.60, 44.36, 45.12, 45.88, 46.64, 47.39, 48.15, 48.90, 49.66, 50.41, 51.16, 51.91, 52.67, 53.41, 54.16, 54.91, 55.66, 56.40, 57.15, 57.89, 58.63, 59.37, 60.11, 60.85, 61.59, 62.33, 63.06, 63.80, 64.53, 65.27, 66.00, 66.73, 67.46, 68.19, 68.92, 69.65, 70.37, 71.10, 71.82, 72.55, 73.27, 73.99, 74.71, 75.43, 76.15, 76.87, 77.59, 78.30, 79.02, 79.73, 80.45, 81.16, 81.87, 82.58, 83.29, 84.00, 84.71, 85.41, 86.12, 86.83, 87.53, 88.23, 88.94, 89.64, 90.34, 91.04, 91.74, 92.43, 93.13, 93.83, 94.52, 95.22, 95.91, 96.60, 97.29, 97.98, 98.67, 99.36, 100.05, 100.74, 101.42, 102.11, 102.79, 103.48, 104.16, 104.84, 105.52, 106.20, 106.88, 107.56, 108.24, 108.91, 109.59, 110.27, 110.94, 111.61, 112.29, 112.96, 113.63, 114.30, 114.97, 115.63, 116.30, 116.97, 117.63, 118.30},
{18.12, 18.90, 19.68, 20.46, 21.24, 22.02, 22.79, 23.57, 24.34, 25.12, 25.89, 26.66, 27.43, 28.20, 28.97, 29.73, 30.50, 31.26, 32.03, 32.79, 33.55, 34.31, 35.07, 35.83, 36.59, 37.35, 38.10, 38.86, 39.61, 40.36, 41.12, 41.87, 42.62, 43.36, 44.11, 44.86, 45.61, 46.35, 47.09, 47.84, 48.58, 49.32, 50.06, 50.80, 51.54, 52.27, 53.01, 53.74, 54.48, 55.21, 55.94, 56.68, 57.41, 58.13, 58.86, 59.59, 60.32, 61.04, 61.77, 62.49, 63.21, 63.93, 64.66, 65.38, 66.09, 66.81, 67.53, 68.25, 68.96, 69.67, 70.39, 71.10, 71.81, 72.52, 73.23, 73.94, 74.65, 75.36, 76.06, 76.77, 77.47, 78.17, 78.88, 79.58, 80.28, 80.98, 81.68, 82.38, 83.07, 83.77, 84.46, 85.16, 85.85, 86.54, 87.24, 87.93, 88.62, 89.31, 89.99, 90.68, 91.37, 92.05, 92.74, 93.42, 94.10, 94.79, 95.47, 96.15, 96.83, 97.51, 98.18, 98.86, 99.54, 100.21, 100.89, 101.56, 102.23, 102.90, 103.57, 104.24, 104.91, 105.58, 106.25, 106.92, 107.58, 108.25, 108.91, 109.58, 110.24, 110.90, 111.56, 112.22, 112.88, 113.54, 114.20, 114.85, 115.51, 116.16, 116.82, 117.47},
{19.12, 19.88, 20.65, 21.41, 22.18, 22.94, 23.70, 24.46, 25.22, 25.98, 26.73, 27.49, 28.25, 29.00, 29.75, 30.51, 31.26, 32.01, 32.76, 33.50, 34.25, 35.00, 35.74, 36.49, 37.23, 37.97, 38.71, 39.45, 40.19, 40.93, 41.67, 42.41, 43.14, 43.88, 44.61, 45.34, 46.08, 46.81, 47.54, 48.27, 48.99, 49.72, 50.45, 51.17, 51.90, 52.62, 53.34, 54.06, 54.78, 55.50, 56.22, 56.94, 57.66, 58.37, 59.09, 59.80, 60.51, 61.23, 61.94, 62.65, 63.36, 64.07, 64.77, 65.48, 66.19, 66.89, 67.60, 68.30, 69.00, 69.70, 70.40, 71.10, 71.80, 72.50, 73.20, 73.89, 74.59, 75.28, 75.97, 76.67, 77.36, 78.05, 78.74, 79.43, 80.12, 80.80, 81.49, 82.18, 82.86, 83.54, 84.23, 84.91, 85.59, 86.27, 86.95, 87.63, 88.31, 88.98, 89.66, 90.34, 91.01, 91.68, 92.36, 93.03, 93.70, 94.37, 95.04, 95.71, 96.38, 97.04, 97.71, 98.38, 99.04, 99.70, 100.37, 101.03, 101.69, 102.35, 103.01, 103.67, 104.33, 104.98, 105.64, 106.30, 106.95, 107.60, 108.26, 108.91, 109.56, 110.21, 110.86, 111.51, 112.16, 112.81, 113.45, 114.10, 114.74, 115.39, 116.03, 116.68},
{20.08, 20.83, 21.58, 22.33, 23.08, 23.83, 24.57, 25.32, 26.06, 26.81, 27.55, 28.29, 29.03, 29.77, 30.51, 31.25, 31.99, 32.72, 33.46, 34.19, 34.92, 35.66, 36.39, 37.12, 37.85, 38.58, 39.30, 40.03, 40.76, 41.48, 42.20, 42.93, 43.65, 44.37, 45.09, 45.81, 46.53, 47.25, 47.96, 48.68, 49.39, 50.11, 50.82, 51.53, 52.24, 52.95, 53.66, 54.37, 55.08, 55.78, 56.49, 57.19, 57.90, 58.60, 59.30, 60.00, 60.70, 61.40, 62.10, 62.80, 63.50, 64.19, 64.89, 65.58, 66.27, 66.97, 67.66, 68.35, 69.04, 69.73, 70.42, 71.10, 71.79, 72.48, 73.16, 73.84, 74.53, 75.21, 75.89, 76.57, 77.25, 77.93, 78.61, 79.28, 79.96, 80.64, 81.31, 81.98, 82.66, 83.33, 84.00, 84.67, 85.34, 86.01, 86.68, 87.34, 88.01, 88.68, 89.34, 90.00, 90.67, 91.33, 91.99, 92.65, 93.31, 93.97, 94.63, 95.29, 95.94, 96.60, 97.25, 97.91, 98.56, 99.21, 99.86, 100.52, 101.17, 101.82, 102.46, 103.11, 103.76, 104.40, 105.05, 105.69, 106.34, 106.98, 107.62, 108.27, 108.91, 109.55, 110.19, 110.82, 111.46, 112.10, 112.74, 113.37, 114.01, 114.64, 115.27, 115.91},
{21.01, 21.74, 22.48, 23.21, 23.95, 24.68, 25.42, 26.15, 26.88, 27.61, 28.34, 29.06, 29.79, 30.52, 31.24, 31.97, 32.69, 33.41, 34.13, 34.85, 35.57, 36.29, 37.01, 37.73, 38.44, 39.16, 39.87, 40.59, 41.30, 42.01, 42.72, 43.43, 44.14, 44.85, 45.55, 46.26, 46.97, 47.67, 48.37, 49.08, 49.78, 50.48, 51.18, 51.88, 52.58, 53.27, 53.97, 54.67, 55.36, 56.05, 56.75, 57.44, 58.13, 58.82, 59.51, 60.20, 60.89, 61.57, 62.26, 62.95, 63.63, 64.31, 65.00, 65.68, 66.36, 67.04, 67.72, 68.40, 69.08, 69.75, 70.43, 71.10, 71.78, 72.45, 73.13, 73.80, 74.47, 75.14, 75.81, 76.48, 77.15, 77.81, 78.48, 79.14, 79.81, 80.47, 81.14, 81.80, 82.46, 83.12, 83.78, 84.44, 85.10, 85.75, 86.41, 87.07, 87.72, 88.38, 89.03, 89.68, 90.33, 90.99, 91.64, 92.29, 92.93, 93.58, 94.23, 94.88, 95.52, 96.17, 96.81, 97.45, 98.10, 98.74, 99.38, 100.02, 100.66, 101.30, 101.94, 102.57, 103.21, 103.85, 104.48, 105.11, 105.75, 106.38, 107.01, 107.64, 108.27, 108.90, 109.53, 110.16, 110.79, 111.42, 112.04, 112.67, 113.29, 113.92, 114.54, 115.16},
{21.90, 22.62, 23.35, 24.07, 24.79, 25.51, 26.23, 26.95, 27.66, 28.38, 29.09, 29.81, 30.52, 31.24, 31.95, 32.66, 33.37, 34.08, 34.79, 35.49, 36.20, 36.91, 37.61, 38.31, 39.02, 39.72, 40.42, 41.12, 41.82, 42.52, 43.22, 43.91, 44.61, 45.31, 46.00, 46.69, 47.39, 48.08, 48.77, 49.46, 50.15, 50.84, 51.53, 52.21, 52.90, 53.58, 54.27, 54.95, 55.63, 56.32, 57.00, 57.68, 58.36, 59.03, 59.71, 60.39, 61.06, 61.74, 62.41, 63.09, 63.76, 64.43, 65.10, 65.77, 66.44, 67.11, 67.78, 68.45, 69.11, 69.78, 70.44, 71.11, 71.77, 72.43, 73.09, 73.75, 74.41, 75.07, 75.73, 76.39, 77.04, 77.70, 78.36, 79.01, 79.66, 80.32, 80.97, 81.62, 82.27, 82.92, 83.57, 84.22, 84.86, 85.51, 86.16, 86.80, 87.44, 88.09, 88.73, 89.37, 90.01, 90.65, 91.29, 91.93, 92.57, 93.21, 93.85, 94.48, 95.12, 95.75, 96.38, 97.02, 97.65, 98.28, 98.91, 99.54, 100.17, 100.80, 101.43, 102.05, 102.68, 103.31, 103.93, 104.55, 105.18, 105.80, 106.42, 107.04, 107.66, 108.28, 108.90, 109.52, 110.14, 110.75, 111.37, 111.99, 112.60, 113.21, 113.83, 114.44},
{22.76, 23.47, 24.18, 24.89, 25.60, 26.30, 27.01, 27.72, 28.42, 29.12, 29.83, 30.53, 31.23, 31.93, 32.63, 33.33, 34.02, 34.72, 35.42, 36.11, 36.80, 37.50, 38.19, 38.88, 39.57, 40.26, 40.95, 41.64, 42.33, 43.01, 43.70, 44.38, 45.07, 45.75, 46.43, 47.11, 47.79, 48.47, 49.15, 49.83, 50.51, 51.19, 51.86, 52.54, 53.21, 53.88, 54.56, 55.23, 55.90, 56.57, 57.24, 57.91, 58.57, 59.24, 59.91, 60.57, 61.24, 61.90, 62.56, 63.22, 63.89, 64.55, 65.21, 65.86, 66.52, 67.18, 67.84, 68.49, 69.15, 69.80, 70.45, 71.11, 71.76, 72.41, 73.06, 73.71, 74.36, 75.01, 75.65, 76.30, 76.95, 77.59, 78.24, 78.88, 79.52, 80.16, 80.81, 81.45, 82.09, 82.72, 83.36, 84.00, 84.64, 85.27, 85.91, 86.54, 87.18, 87.81, 88.44, 89.07, 89.70, 90.33, 90.96, 91.59, 92.22, 92.85, 93.47, 94.10, 94.72, 95.35, 95.97, 96.59, 97.22, 97.84, 98.46, 99.08, 99.70, 100.32, 100.93, 101.55, 102.17, 102.78, 103.40, 104.01, 104.62, 105.24, 105.85, 106.46, 107.07, 107.68, 108.29, 108.90, 109.51, 110.11, 110.72, 111.33, 111.93, 112.54, 113.14, 113.74},
{23.59, 24.29, 24.99, 25.68, 26.38, 27.07, 27.77, 28.46, 29.15, 29.84, 30.53, 31.22, 31.91, 32.60, 33.29, 33.97, 34.66, 35.34, 36.02, 36.71, 37.39, 38.07, 38.75, 39.43, 40.11, 40.79, 41.46, 42.14, 42.81, 43.49, 44.16, 44.84, 45.51, 46.18, 46.85, 47.52, 48.19, 48.86, 49.52, 50.19, 50.86, 51.52, 52.18, 52.85, 53.51, 54.17, 54.83, 55.49, 56.15, 56.81, 57.47, 58.13, 58.78, 59.44, 60.09, 60.75, 61.40, 62.05, 62.71, 63.36, 64.01, 64.66, 65.30, 65.95, 66.60, 67.25, 67.89, 68.54, 69.18, 69.82, 70.47, 71.11, 71.75, 72.39, 73.03, 73.67, 74.31, 74.94, 75.58, 76.22, 76.85, 77.49, 78.12, 78.75, 79.39, 80.02, 80.65, 81.28, 81.91, 82.54, 83.16, 83.79, 84.42, 85.04, 85.67, 86.29, 86.92, 87.54, 88.16, 88.78, 89.40, 90.02, 90.64, 91.26, 91.88, 92.50, 93.11, 93.73, 94.34, 94.96, 95.57, 96.18, 96.80, 97.41, 98.02, 98.63, 99.24, 99.85, 100.46, 101.06, 101.67, 102.28, 102.88, 103.49, 104.09, 104.69, 105.30, 105.90, 106.50, 107.10, 107.70, 108.30, 108.90, 109.50, 110.09, 110.69, 111.28, 111.88, 112.47, 113.07},
{24.40, 25.08, 25.77, 26.45, 27.14, 27.82, 28.50, 29.18, 29.86, 30.54, 31.22, 31.89, 32.57, 33.25, 33.92, 34.59, 35.27, 35.94, 36.61, 37.28, 37.95, 38.62, 39.29, 39.96, 40.63, 41.29, 41.96, 42.62, 43.29, 43.95, 44.61, 45.27, 45.93, 46.59, 47.25, 47.91, 48.57, 49.23, 49.88, 50.54, 51.19, 51.85, 52.50, 53.15, 53.80, 54.45, 55.10, 55.75, 56.40, 57.05, 57.69, 58.34, 58.99, 59.63, 60.28, 60.92, 61.56, 62.20, 62.84, 63.48, 64.12, 64.76, 65.40, 66.04, 66.67, 67.31, 67.95, 68.58, 69.21, 69.85, 70.48, 71.11, 71.74, 72.37, 73.00, 73.63, 74.26, 74.88, 75.51, 76.14, 76.76, 77.38, 78.01, 78.63, 79.25, 79.88, 80.50, 81.12, 81.74, 82.35, 82.97, 83.59, 84.21, 84.82, 85.44, 86.05, 86.66, 87.28, 87.89, 88.50, 89.11, 89.72, 90.33, 90.94, 91.55, 92.16, 92.76, 93.37, 93.98, 94.58, 95.18, 95.79, 96.39, 96.99, 97.59, 98.20, 98.80, 99.39, 99.99, 100.59, 101.19, 101.79, 102.38, 102.98, 103.57, 104.17, 104.76, 105.35, 105.94, 106.54, 107.13, 107.72, 108.31, 108.90, 109.48, 110.07, 110.66, 111.24, 111.83, 112.41},
{25.18, 25.85, 26.52, 27.20, 27.87, 28.54, 29.21, 29.88, 30.54, 31.21, 31.88, 32.54, 33.21, 33.87, 34.54, 35.20, 35.86, 36.52, 37.18, 37.84, 38.50, 39.16, 39.81, 40.47, 41.13, 41.78, 42.44, 43.09, 43.74, 44.39, 45.05, 45.70, 46.35, 46.99, 47.64, 48.29, 48.94, 49.58, 50.23, 50.87, 51.52, 52.16, 52.80, 53.44, 54.08, 54.72, 55.36, 56.00, 56.64, 57.28, 57.91, 58.55, 59.18, 59.82, 60.45, 61.08, 61.72, 62.35, 62.98, 63.61, 64.24, 64.87, 65.49, 66.12, 66.75, 67.37, 68.00, 68.62, 69.24, 69.87, 70.49, 71.11, 71.73, 72.35, 72.97, 73.59, 74.21, 74.82, 75.44, 76.06, 76.67, 77.29, 77.90, 78.51, 79.13, 79.74, 80.35, 80.96, 81.57, 82.18, 82.79, 83.39, 84.00, 84.61, 85.21, 85.82, 86.42, 87.02, 87.63, 88.23, 88.83, 89.43, 90.03, 90.63, 91.23, 91.83, 92.43, 93.02, 93.62, 94.21, 94.81, 95.40, 96.00, 96.59, 97.18, 97.77, 98.37, 98.96, 99.55, 100.13, 100.72, 101.31, 101.90, 102.48, 103.07, 103.66, 104.24, 104.82, 105.41, 105.99, 106.57, 107.15, 107.73, 108.31, 108.89, 109.47, 110.05, 110.63, 111.20, 111.78},
{25.93, 26.59, 27.25, 27.91, 28.57, 29.23, 29.89, 30.55, 31.20, 31.86, 32.52, 33.17, 33.82, 34.48, 35.13, 35.78, 36.43, 37.08, 37.73, 38.38, 39.03, 39.67, 40.32, 40.97, 41.61, 42.26, 42.90, 43.54, 44.18, 44.83, 45.47, 46.11, 46.74, 47.38, 48.02, 48.66, 49.29, 49.93, 50.56, 51.20, 51.83, 52.46, 53.09, 53.73, 54.36, 54.99, 55.61, 56.24, 56.87, 57.50, 58.12, 58.75, 59.37, 60.00, 60.62, 61.24, 61.87, 62.49, 63.11, 63.73, 64.35, 64.97, 65.58, 66.20, 66.82, 67.43, 68.05, 68.66, 69.28, 69.89, 70.50, 71.11, 71.72, 72.33, 72.94, 73.55, 74.16, 74.77, 75.37, 75.98, 76.59, 77.19, 77.80, 78.40, 79.00, 79.60, 80.21, 80.81, 81.41, 82.01, 82.61, 83.20, 83.80, 84.40, 84.99, 85.59, 86.18, 86.78, 87.37, 87.97, 88.56, 89.15, 89.74, 90.33, 90.92, 91.51, 92.10, 92.69, 93.27, 93.86, 94.45, 95.03, 95.62, 96.20, 96.78, 97.37, 97.95, 98.53, 99.11, 99.69, 100.27, 100.85, 101.43, 102.01, 102.58, 103.16, 103.74, 104.31, 104.89, 105.46, 106.03, 106.61, 107.18, 107.75, 108.32, 108.89, 109.46, 110.03, 110.60, 111.17},
{26.66, 27.31, 27.96, 28.61, 29.26, 29.91, 30.55, 31.20, 31.85, 32.49, 33.13, 33.78, 34.42, 35.06, 35.71, 36.35, 36.99, 37.63, 38.26, 38.90, 39.54, 40.18, 40.81, 41.45, 42.08, 42.71, 43.35, 43.98, 44.61, 45.24, 45.87, 46.50, 47.13, 47.76, 48.39, 49.01, 49.64, 50.26, 50.89, 51.51, 52.13, 52.76, 53.38, 54.00, 54.62, 55.24, 55.86, 56.48, 57.09, 57.71, 58.33, 58.94, 59.56, 60.17, 60.79, 61.40, 62.01, 62.62, 63.23, 63.84, 64.45, 65.06, 65.67, 66.28, 66.88, 67.49, 68.10, 68.70, 69.30, 69.91, 70.51, 71.11, 71.71, 72.32, 72.92, 73.52, 74.11, 74.71, 75.31, 75.91, 76.50, 77.10, 77.69, 78.29, 78.88, 79.47, 80.07, 80.66, 81.25, 81.84, 82.43, 83.02, 83.61, 84.20, 84.78, 85.37, 85.96, 86.54, 87.13, 87.71, 88.29, 88.88, 89.46, 90.04, 90.62, 91.20, 91.78, 92.36, 92.94, 93.52, 94.09, 94.67, 95.25, 95.82, 96.40, 96.97, 97.54, 98.12, 98.69, 99.26, 99.83, 100.40, 100.97, 101.54, 102.11, 102.68, 103.25, 103.81, 104.38, 104.95, 105.51, 106.08, 106.64, 107.20, 107.77, 108.33, 108.89, 109.45, 110.01, 110.57},
{27.36, 28.00, 28.64, 29.28, 29.92, 30.56, 31.19, 31.83, 32.47, 33.10, 33.73, 34.37, 35.00, 35.63, 36.26, 36.89, 37.52, 38.15, 38.78, 39.41, 40.03, 40.66, 41.29, 41.91, 42.54, 43.16, 43.78, 44.40, 45.03, 45.65, 46.27, 46.89, 47.50, 48.12, 48.74, 49.36, 49.97, 50.59, 51.20, 51.82, 52.43, 53.04, 53.65, 54.27, 54.88, 55.49, 56.10, 56.70, 57.31, 57.92, 58.53, 59.13, 59.74, 60.34, 60.95, 61.55, 62.15, 62.75, 63.36, 63.96, 64.56, 65.16, 65.75, 66.35, 66.95, 67.55, 68.14, 68.74, 69.33, 69.93, 70.52, 71.11, 71.71, 72.30, 72.89, 73.48, 74.07, 74.66, 75.25, 75.84, 76.42, 77.01, 77.60, 78.18, 78.77, 79.35, 79.93, 80.52, 81.10, 81.68, 82.26, 82.84, 83.42, 84.00, 84.58, 85.16, 85.73, 86.31, 86.89, 87.46, 88.04, 88.61, 89.18, 89.76, 90.33, 90.90, 91.47, 92.04, 92.61, 93.18, 93.75, 94.32, 94.89, 95.46, 96.02, 96.59, 97.15, 97.72, 98.28, 98.84, 99.41, 99.97, 100.53, 101.09, 101.65, 102.21, 102.77, 103.33, 103.89, 104.45, 105.00, 105.56, 106.12, 106.67, 107.23, 107.78, 108.33, 108.89, 109.44, 109.99},
{28.05, 28.68, 29.30, 29.93, 30.56, 31.19, 31.82, 32.44, 33.07, 33.69, 34.31, 34.94, 35.56, 36.18, 36.80, 37.42, 38.04, 38.66, 39.28, 39.90, 40.52, 41.13, 41.75, 42.36, 42.98, 43.59, 44.20, 44.82, 45.43, 46.04, 46.65, 47.26, 47.87, 48.48, 49.08, 49.69, 50.30, 50.90, 51.51, 52.11, 52.72, 53.32, 53.92, 54.52, 55.12, 55.73, 56.32, 56.92, 57.52, 58.12, 58.72, 59.31, 59.91, 60.51, 61.10, 61.69, 62.29, 62.88, 63.47, 64.07, 64.66, 65.25, 65.84, 66.43, 67.01, 67.60, 68.19, 68.78, 69.36, 69.95, 70.53, 71.12, 71.70, 72.28, 72.86, 73.45, 74.03, 74.61, 75.19, 75.77, 76.34, 76.92, 77.50, 78.08, 78.65, 79.23, 79.80, 80.38, 80.95, 81.52, 82.10, 82.67, 83.24, 83.81, 84.38, 84.95, 85.52, 86.09, 86.65, 87.22, 87.79, 88.35, 88.92, 89.48, 90.05, 90.61, 91.17, 91.74, 92.30, 92.86, 93.42, 93.98, 94.54, 95.10, 95.66, 96.22, 96.77, 97.33, 97.88, 98.44, 99.00, 99.55, 100.10, 100.66, 101.21, 101.76, 102.31, 102.86, 103.41, 103.96, 104.51, 105.06, 105.61, 106.16, 106.70, 107.25, 107.80, 108.34, 108.89, 109.43},
{28.71, 29.33, 29.95, 30.57, 31.18, 31.80, 32.42, 33.03, 33.65, 34.26, 34.88, 35.49, 36.10, 36.72, 37.33, 37.94, 38.55, 39.16, 39.77, 40.37, 40.98, 41.59, 42.19, 42.80, 43.40, 44.01, 44.61, 45.21, 45.82, 46.42, 47.02, 47.62, 48.22, 48.82, 49.42, 50.01, 50.61, 51.21, 51.80, 52.40, 52.99, 53.59, 54.18, 54.77, 55.37, 55.96, 56.55, 57.14, 57.73, 58.32, 58.90, 59.49, 60.08, 60.67, 61.25, 61.84, 62.42, 63.00, 63.59, 64.17, 64.75, 65.33, 65.92, 66.50, 67.08, 67.65, 68.23, 68.81, 69.39, 69.96, 70.54, 71.12, 71.69, 72.27, 72.84, 73.41, 73.98, 74.56, 75.13, 75.70, 76.27, 76.84, 77.41, 77.97, 78.54, 79.11, 79.68, 80.24, 80.81, 81.37, 81.94, 82.50, 83.06, 83.63, 84.19, 84.75, 85.31, 85.87, 86.43, 86.99, 87.55, 88.10, 88.66, 89.22, 89.77, 90.33, 90.88, 91.44, 91.99, 92.55, 93.10, 93.65, 94.20, 94.75, 95.30, 95.85, 96.40, 96.95, 97.50, 98.05, 98.59, 99.14, 99.69, 100.23, 100.78, 101.32, 101.86, 102.41, 102.95, 103.49, 104.03, 104.58, 105.12, 105.66, 106.19, 106.73, 107.27, 107.81, 108.35, 108.88},
{29.35, 29.96, 30.57, 31.18, 31.79, 32.39, 33.00, 33.61, 34.21, 34.82, 35.42, 36.03, 36.63, 37.23, 37.83, 38.44, 39.04, 39.64, 40.24, 40.83, 41.43, 42.03, 42.63, 43.22, 43.82, 44.41, 45.01, 45.60, 46.19, 46.79, 47.38, 47.97, 48.56, 49.15, 49.74, 50.33, 50.92, 51.50, 52.09, 52.68, 53.26, 53.85, 54.43, 55.02, 55.60, 56.18, 56.76, 57.34, 57.93, 58.51, 59.09, 59.66, 60.24, 60.82, 61.40, 61.97, 62.55, 63.12, 63.70, 64.27, 64.85, 65.42, 65.99, 66.56, 67.14, 67.71, 68.28, 68.85, 69.41, 69.98, 70.55, 71.12, 71.68, 72.25, 72.81, 73.38, 73.94, 74.51, 75.07, 75.63, 76.19, 76.76, 77.32, 77.88, 78.44, 78.99, 79.55, 80.11, 80.67, 81.23, 81.78, 82.34, 82.89, 83.45, 84.00, 84.55, 85.11, 85.66, 86.21, 86.76, 87.31, 87.86, 88.41, 88.96, 89.51, 90.06, 90.60, 91.15, 91.70, 92.24, 92.79, 93.33, 93.87, 94.42, 94.96, 95.50, 96.04, 96.58, 97.13, 97.67, 98.20, 98.74, 99.28, 99.82, 100.36, 100.89, 101.43, 101.97, 102.50, 103.04, 103.57, 104.10, 104.64, 105.17, 105.70, 106.23, 106.76, 107.29, 107.82, 108.35},
{29.97, 30.57, 31.17, 31.77, 32.37, 32.97, 33.57, 34.17, 34.76, 35.36, 35.95, 36.55, 37.14, 37.73, 38.33, 38.92, 39.51, 40.10, 40.69, 41.28, 41.87, 42.46, 43.05, 43.63, 44.22, 44.81, 45.39, 45.98, 46.56, 47.14, 47.73, 48.31, 48.89, 49.47, 50.05, 50.63, 51.21, 51.79, 52.37, 52.95, 53.52, 54.10, 54.68, 55.25, 55.83, 56.40, 56.97, 57.55, 58.12, 58.69, 59.26, 59.83, 60.40, 60.97, 61.54, 62.11, 62.67, 63.24, 63.81, 64.37, 64.94, 65.50, 66.07, 66.63, 67.19, 67.76, 68.32, 68.88, 69.44, 70.00, 70.56, 71.12, 71.68, 72.23, 72.79, 73.35, 73.90, 74.46, 75.01, 75.57, 76.12, 76.68, 77.23, 77.78, 78.33, 78.88, 79.43, 79.98, 80.53, 81.08, 81.63, 82.18, 82.73, 83.27, 83.82, 84.36, 84.91, 85.45, 86.00, 86.54, 87.08, 87.63, 88.17, 88.71, 89.25, 89.79, 90.33, 90.87, 91.41, 91.94, 92.48, 93.02, 93.55, 94.09, 94.63, 95.16, 95.69, 96.23, 96.76, 97.29, 97.83, 98.36, 98.89, 99.42, 99.95, 100.48, 101.01, 101.54, 102.06, 102.59, 103.12, 103.64, 104.17, 104.70, 105.22, 105.74, 106.27, 106.79, 107.31, 107.84},
{30.58, 31.17, 31.76, 32.35, 32.94, 33.53, 34.12, 34.71, 35.29, 35.88, 36.47, 37.05, 37.64, 38.22, 38.81, 39.39, 39.97, 40.55, 41.14, 41.72, 42.30, 42.88, 43.46, 44.03, 44.61, 45.19, 45.77, 46.34, 46.92, 47.49, 48.07, 48.64, 49.21, 49.79, 50.36, 50.93, 51.50, 52.07, 52.64, 53.21, 53.78, 54.35, 54.91, 55.48, 56.05, 56.61, 57.18, 57.74, 58.30, 58.87, 59.43, 59.99, 60.55, 61.12, 61.68, 62.24, 62.80, 63.35, 63.91, 64.47, 65.03, 65.58, 66.14, 66.70, 67.25, 67.80, 68.36, 68.91, 69.46, 70.02, 70.57, 71.12, 71.67, 72.22, 72.77, 73.32, 73.87, 74.41, 74.96, 75.51, 76.05, 76.60, 77.14, 77.69, 78.23, 78.78, 79.32, 79.86, 80.40, 80.94, 81.48, 82.02, 82.56, 83.10, 83.64, 84.18, 84.72, 85.25, 85.79, 86.33, 86.86, 87.40, 87.93, 88.46, 89.00, 89.53, 90.06, 90.59, 91.12, 91.66, 92.19, 92.72, 93.24, 93.77, 94.30, 94.83, 95.36, 95.88, 96.41, 96.93, 97.46, 97.98, 98.51, 99.03, 99.55, 100.08, 100.60, 101.12, 101.64, 102.16, 102.68, 103.20, 103.72, 104.24, 104.75, 105.27, 105.79, 106.30, 106.82, 107.34},
{31.16, 31.75, 32.33, 32.91, 33.49, 34.07, 34.65, 35.23, 35.81, 36.39, 36.97, 37.54, 38.12, 38.70, 39.27, 39.85, 40.42, 40.99, 41.57, 42.14, 42.71, 43.28, 43.85, 44.42, 44.99, 45.56, 46.13, 46.70, 47.26, 47.83, 48.40, 48.96, 49.53, 50.09, 50.65, 51.22, 51.78, 52.34, 52.90, 53.46, 54.02, 54.58, 55.14, 55.70, 56.26, 56.82, 57.37, 57.93, 58.49, 59.04, 59.60, 60.15, 60.70, 61.26, 61.81, 62.36, 62.91, 63.46, 64.01, 64.56, 65.11, 65.66, 66.21, 66.76, 67.31, 67.85, 68.40, 68.94, 69.49, 70.03, 70.58, 71.12, 71.66, 72.20, 72.75, 73.29, 73.83, 74.37, 74.91, 75.45, 75.99, 76.52, 77.06, 77.60, 78.13, 78.67, 79.21, 79.74, 80.27, 80.81, 81.34, 81.87, 82.41, 82.94, 83.47, 84.00, 84.53, 85.06, 85.59, 86.12, 86.65, 87.17, 87.70, 88.23, 88.75, 89.28, 89.80, 90.33, 90.85, 91.38, 91.90, 92.42, 92.94, 93.46, 93.98, 94.51, 95.03, 95.54, 96.06, 96.58, 97.10, 97.62, 98.13, 98.65, 99.17, 99.68, 100.20, 100.71, 101.23, 101.74, 102.25, 102.76, 103.28, 103.79, 104.30, 104.81, 105.32, 105.83, 106.34, 106.85},
{31.74, 32.31, 32.88, 33.46, 34.03, 34.60, 35.17, 35.74, 36.31, 36.88, 37.45, 38.02, 38.59, 39.16, 39.72, 40.29, 40.85, 41.42, 41.98, 42.55, 43.11, 43.67, 44.24, 44.80, 45.36, 45.92, 46.48, 47.04, 47.60, 48.16, 48.72, 49.27, 49.83, 50.39, 50.94, 51.50, 52.05, 52.61, 53.16, 53.71, 54.26, 54.82, 55.37, 55.92, 56.47, 57.02, 57.57, 58.12, 58.66, 59.21, 59.76, 60.30, 60.85, 61.40, 61.94, 62.48, 63.03, 63.57, 64.11, 64.66, 65.20, 65.74, 66.28, 66.82, 67.36, 67.90, 68.44, 68.97, 69.51, 70.05, 70.58, 71.12, 71.66, 72.19, 72.72, 73.26, 73.79, 74.32, 74.86, 75.39, 75.92, 76.45, 76.98, 77.51, 78.04, 78.57, 79.10, 79.62, 80.15, 80.68, 81.20, 81.73, 82.25, 82.78, 83.30, 83.83, 84.35, 84.87, 85.39, 85.91, 86.44, 86.96, 87.48, 88.00, 88.51, 89.03, 89.55, 90.07, 90.59, 91.10, 91.62, 92.13, 92.65, 93.16, 93.68, 94.19, 94.70, 95.22, 95.73, 96.24, 96.75, 97.26, 97.77, 98.28, 98.79, 99.30, 99.81, 100.32, 100.82, 101.33, 101.84, 102.34, 102.85, 103.35, 103.86, 104.36, 104.86, 105.37, 105.87, 106.37},
{32.29, 32.86, 33.42, 33.99, 34.55, 35.11, 35.68, 36.24, 36.80, 37.36, 37.92, 38.48, 39.04, 39.60, 40.16, 40.72, 41.28, 41.83, 42.39, 42.95, 43.50, 44.06, 44.61, 45.17, 45.72, 46.27, 46.82, 47.38, 47.93, 48.48, 49.03, 49.58, 50.13, 50.67, 51.22, 51.77, 52.32, 52.86, 53.41, 53.95, 54.50, 55.04, 55.58, 56.13, 56.67, 57.21, 57.75, 58.29, 58.84, 59.38, 59.91, 60.45, 60.99, 61.53, 62.07, 62.60, 63.14, 63.68, 64.21, 64.75, 65.28, 65.81, 66.35, 66.88, 67.41, 67.94, 68.47, 69.00, 69.53, 70.06, 70.59, 71.12, 71.65, 72.18, 72.70, 73.23, 73.76, 74.28, 74.81, 75.33, 75.86, 76.38, 76.90, 77.42, 77.95, 78.47, 78.99, 79.51, 80.03, 80.55, 81.07, 81.59, 82.10, 82.62, 83.14, 83.66, 84.17, 84.69, 85.20, 85.72, 86.23, 86.75, 87.26, 87.77, 88.28, 88.79, 89.31, 89.82, 90.33, 90.84, 91.35, 91.85, 92.36, 92.87, 93.38, 93.89, 94.39, 94.90, 95.40, 95.91, 96.41, 96.92, 97.42, 97.92, 98.43, 98.93, 99.43, 99.93, 100.43, 100.93, 101.43, 101.93, 102.43, 102.93, 103.43, 103.92, 104.42, 104.92, 105.41, 105.91},
{32.83, 33.39, 33.94, 34.50, 35.06, 35.61, 36.17, 36.72, 37.28, 37.83, 38.38, 38.94, 39.49, 40.04, 40.59, 41.14, 41.69, 42.24, 42.79, 43.34, 43.88, 44.43, 44.98, 45.52, 46.07, 46.61, 47.16, 47.70, 48.24, 48.79, 49.33, 49.87, 50.41, 50.95, 51.49, 52.03, 52.57, 53.11, 53.65, 54.19, 54.72, 55.26, 55.80, 56.33, 56.87, 57.40, 57.94, 58.47, 59.00, 59.53, 60.07, 60.60, 61.13, 61.66, 62.19, 62.72, 63.25, 63.78, 64.30, 64.83, 65.36, 65.89, 66.41, 66.94, 67.46, 67.99, 68.51, 69.03, 69.56, 70.08, 70.60, 71.12, 71.64, 72.16, 72.68, 73.20, 73.72, 74.24, 74.76, 75.28, 75.79, 76.31, 76.83, 77.34, 77.86, 78.37, 78.89, 79.40, 79.91, 80.42, 80.94, 81.45, 81.96, 82.47, 82.98, 83.49, 84.00, 84.51, 85.02, 85.53, 86.03, 86.54, 87.05, 87.55, 88.06, 88.56, 89.07, 89.57, 90.07, 90.58, 91.08, 91.58, 92.08, 92.59, 93.09, 93.59, 94.09, 94.59, 95.09, 95.58, 96.08, 96.58, 97.08, 97.57, 98.07, 98.57, 99.06, 99.56, 100.05, 100.54, 101.04, 101.53, 102.02, 102.52, 103.01, 103.50, 103.99, 104.48, 104.97, 105.46},
{33.35, 33.90, 34.45, 35.00, 35.55, 36.10, 36.64, 37.19, 37.74, 38.28, 38.83, 39.37, 39.92, 40.46, 41.00, 41.55, 42.09, 42.63, 43.17, 43.71, 44.25, 44.79, 45.33, 45.87, 46.41, 46.94, 47.48, 48.02, 48.55, 49.09, 49.62, 50.16, 50.69, 51.23, 51.76, 52.29, 52.82, 53.35, 53.88, 54.41, 54.94, 55.47, 56.00, 56.53, 57.06, 57.59, 58.11, 58.64, 59.17, 59.69, 60.22, 60.74, 61.26, 61.79, 62.31, 62.83, 63.35, 63.88, 64.40, 64.92, 65.44, 65.96, 66.47, 66.99, 67.51, 68.03, 68.55, 69.06, 69.58, 70.09, 70.61, 71.12, 71.64, 72.15, 72.66, 73.18, 73.69, 74.20, 74.71, 75.22, 75.73, 76.24, 76.75, 77.26, 77.77, 78.28, 78.78, 79.29, 79.80, 80.30, 80.81, 81.31, 81.82, 82.32, 82.83, 83.33, 83.83, 84.33, 84.84, 85.34, 85.84, 86.34, 86.84, 87.34, 87.84, 88.34, 88.83, 89.33, 89.83, 90.33, 90.82, 91.32, 91.81, 92.31, 92.80, 93.30, 93.79, 94.28, 94.78, 95.27, 95.76, 96.25, 96.74, 97.23, 97.72, 98.21, 98.70, 99.19, 99.68, 100.17, 100.65, 101.14, 101.63, 102.11, 102.60, 103.08, 103.57, 104.05, 104.54, 105.02},
{33.86, 34.41, 34.95, 35.49, 36.03, 36.57, 37.11, 37.65, 38.19, 38.73, 39.26, 39.80, 40.34, 40.87, 41.41, 41.94, 42.48, 43.01, 43.55, 44.08, 44.61, 45.14, 45.68, 46.21, 46.74, 47.27, 47.80, 48.33, 48.85, 49.38, 49.91, 50.44, 50.96, 51.49, 52.02, 52.54, 53.07, 53.59, 54.11, 54.64, 55.16, 55.68, 56.20, 56.72, 57.25, 57.77, 58.29, 58.80, 59.32, 59.84, 60.36, 60.88, 61.39, 61.91, 62.43, 62.94, 63.46, 63.97, 64.49, 65.00, 65.51, 66.02, 66.54, 67.05, 67.56, 68.07, 68.58, 69.09, 69.60, 70.11, 70.62, 71.12, 71.63, 72.14, 72.64, 73.15, 73.66, 74.16, 74.67, 75.17, 75.67, 76.18, 76.68, 77.18, 77.68, 78.18, 78.69, 79.19, 79.69, 80.19, 80.68, 81.18, 81.68, 82.18, 82.68, 83.17, 83.67, 84.17, 84.66, 85.16, 85.65, 86.14, 86.64, 87.13, 87.62, 88.12, 88.61, 89.10, 89.59, 90.08, 90.57, 91.06, 91.55, 92.04, 92.53, 93.01, 93.50, 93.99, 94.48, 94.96, 95.45, 95.93, 96.42, 96.90, 97.39, 97.87, 98.35, 98.83, 99.32, 99.80, 100.28, 100.76, 101.24, 101.72, 102.20, 102.68, 103.16, 103.64, 104.11, 104.59},
{34.36, 34.89, 35.43, 35.96, 36.50, 37.03, 37.56, 38.09, 38.62, 39.16, 39.69, 40.22, 40.75, 41.27, 41.80, 42.33, 42.86, 43.38, 43.91, 44.44, 44.96, 45.49, 46.01, 46.54, 47.06, 47.58, 48.10, 48.63, 49.15, 49.67, 50.19, 50.71, 51.23, 51.75, 52.27, 52.79, 53.30, 53.82, 54.34, 54.85, 55.37, 55.88, 56.40, 56.91, 57.43, 57.94, 58.45, 58.97, 59.48, 59.99, 60.50, 61.01, 61.52, 62.03, 62.54, 63.05, 63.56, 64.06, 64.57, 65.08, 65.59, 66.09, 66.60, 67.10, 67.61, 68.11, 68.61, 69.12, 69.62, 70.12, 70.62, 71.12, 71.63, 72.13, 72.63, 73.13, 73.62, 74.12, 74.62, 75.12, 75.62, 76.11, 76.61, 77.10, 77.60, 78.10, 78.59, 79.08, 79.58, 80.07, 80.56, 81.06, 81.55, 82.04, 82.53, 83.02, 83.51, 84.00, 84.49, 84.98, 85.47, 85.95, 86.44, 86.93, 87.42, 87.90, 88.39, 88.87, 89.36, 89.84, 90.33, 90.81, 91.29, 91.77, 92.26, 92.74, 93.22, 93.70, 94.18, 94.66, 95.14, 95.62, 96.10, 96.58, 97.06, 97.53, 98.01, 98.49, 98.96, 99.44, 99.91, 100.39, 100.86, 101.34, 101.81, 102.29, 102.76, 103.23, 103.70, 104.17},
{34.84, 35.37, 35.90, 36.42, 36.95, 37.48, 38.00, 38.53, 39.05, 39.57, 40.10, 40.62, 41.14, 41.66, 42.19, 42.71, 43.23, 43.75, 44.27, 44.79, 45.30, 45.82, 46.34, 46.86, 47.37, 47.89, 48.40, 48.92, 49.43, 49.95, 50.46, 50.97, 51.49, 52.00, 52.51, 53.02, 53.53, 54.04, 54.55, 55.06, 55.57, 56.08, 56.59, 57.10, 57.60, 58.11, 58.62, 59.12, 59.63, 60.13, 60.64, 61.14, 61.64, 62.15, 62.65, 63.15, 63.65, 64.16, 64.66, 65.16, 65.66, 66.16, 66.65, 67.15, 67.65, 68.15, 68.65, 69.14, 69.64, 70.14, 70.63, 71.13, 71.62, 72.11, 72.61, 73.10, 73.59, 74.09, 74.58, 75.07, 75.56, 76.05, 76.54, 77.03, 77.52, 78.01, 78.50, 78.98, 79.47, 79.96, 80.45, 80.93, 81.42, 81.90, 82.39, 82.87, 83.36, 83.84, 84.32, 84.80, 85.29, 85.77, 86.25, 86.73, 87.21, 87.69, 88.17, 88.65, 89.13, 89.61, 90.09, 90.56, 91.04, 91.52, 91.99, 92.47, 92.95, 93.42, 93.90, 94.37, 94.84, 95.32, 95.79, 96.26, 96.73, 97.21, 97.68, 98.15, 98.62, 99.09, 99.56, 100.03, 100.50, 100.97, 101.43, 101.90, 102.37, 102.83, 103.30, 103.77},
{35.31, 35.83, 36.36, 36.87, 37.39, 37.91, 38.43, 38.95, 39.47, 39.98, 40.50, 41.01, 41.53, 42.04, 42.56, 43.07, 43.59, 44.10, 44.61, 45.12, 45.64, 46.15, 46.66, 47.17, 47.68, 48.19, 48.70, 49.20, 49.71, 50.22, 50.73, 51.23, 51.74, 52.24, 52.75, 53.25, 53.76, 54.26, 54.77, 55.27, 55.77, 56.27, 56.78, 57.28, 57.78, 58.28, 58.78, 59.28, 59.77, 60.27, 60.77, 61.27, 61.77, 62.26, 62.76, 63.25, 63.75, 64.24, 64.74, 65.23, 65.73, 66.22, 66.71, 67.20, 67.70, 68.19, 68.68, 69.17, 69.66, 70.15, 70.64, 71.13, 71.61, 72.10, 72.59, 73.08, 73.56, 74.05, 74.53, 75.02, 75.50, 75.99, 76.47, 76.96, 77.44, 77.92, 78.40, 78.89, 79.37, 79.85, 80.33, 80.81, 81.29, 81.77, 82.25, 82.73, 83.20, 83.68, 84.16, 84.64, 85.11, 85.59, 86.06, 86.54, 87.01, 87.49, 87.96, 88.44, 88.91, 89.38, 89.85, 90.32, 90.80, 91.27, 91.74, 92.21, 92.68, 93.15, 93.62, 94.08, 94.55, 95.02, 95.49, 95.95, 96.42, 96.89, 97.35, 97.82, 98.28, 98.75, 99.21, 99.67, 100.14, 100.60, 101.06, 101.53, 101.99, 102.45, 102.91, 103.37},
{35.77, 36.29, 36.80, 37.31, 37.83, 38.34, 38.85, 39.36, 39.87, 40.38, 40.89, 41.40, 41.91, 42.42, 42.92, 43.43, 43.94, 44.44, 44.95, 45.45, 45.96, 46.46, 46.97, 47.47, 47.98, 48.48, 48.98, 49.48, 49.98, 50.48, 50.98, 51.48, 51.98, 52.48, 52.98, 53.48, 53.98, 54.48, 54.97, 55.47, 55.97, 56.46, 56.96, 57.45, 57.94, 58.44, 58.93, 59.43, 59.92, 60.41, 60.90, 61.39, 61.88, 62.37, 62.86, 63.35, 63.84, 64.33, 64.82, 65.31, 65.79, 66.28, 66.77, 67.25, 67.74, 68.22, 68.71, 69.19, 69.68, 70.16, 70.64, 71.13, 71.61, 72.09, 72.57, 73.05, 73.53, 74.01, 74.49, 74.97, 75.45, 75.93, 76.41, 76.89, 77.36, 77.84, 78.32, 78.79, 79.27, 79.74, 80.22, 80.69, 81.17, 81.64, 82.11, 82.58, 83.06, 83.53, 84.00, 84.47, 84.94, 85.41, 85.88, 86.35, 86.82, 87.29, 87.76, 88.22, 88.69, 89.16, 89.63, 90.09, 90.56, 91.02, 91.49, 91.95, 92.42, 92.88, 93.34, 93.81, 94.27, 94.73, 95.19, 95.65, 96.12, 96.58, 97.04, 97.50, 97.95, 98.41, 98.87, 99.33, 99.79, 100.25, 100.70, 101.16, 101.62, 102.07, 102.53, 102.98},
{36.22, 36.73, 37.23, 37.74, 38.25, 38.75, 39.26, 39.76, 40.26, 40.77, 41.27, 41.77, 42.28, 42.78, 43.28, 43.78, 44.28, 44.78, 45.28, 45.78, 46.28, 46.77, 47.27, 47.77, 48.27, 48.76, 49.26, 49.75, 50.25, 50.74, 51.24, 51.73, 52.22, 52.72, 53.21, 53.70, 54.19, 54.68, 55.17, 55.66, 56.15, 56.64, 57.13, 57.62, 58.11, 58.60, 59.08, 59.57, 60.06, 60.54, 61.03, 61.51, 62.00, 62.48, 62.97, 63.45, 63.93, 64.42, 64.90, 65.38, 65.86, 66.34, 66.82, 67.30, 67.78, 68.26, 68.74, 69.22, 69.70, 70.17, 70.65, 71.13, 71.60, 72.08, 72.56, 73.03, 73.50, 73.98, 74.45, 74.93, 75.40, 75.87, 76.34, 76.82, 77.29, 77.76, 78.23, 78.70, 79.17, 79.64, 80.11, 80.58, 81.04, 81.51, 81.98, 82.45, 82.91, 83.38, 83.84, 84.31, 84.78, 85.24, 85.70, 86.17, 86.63, 87.09, 87.56, 88.02, 88.48, 88.94, 89.40, 89.86, 90.32, 90.78, 91.24, 91.70, 92.16, 92.62, 93.08, 93.53, 93.99, 94.45, 94.90, 95.36, 95.82, 96.27, 96.73, 97.18, 97.63, 98.09, 98.54, 98.99, 99.45, 99.90, 100.35, 100.80, 101.25, 101.70, 102.15, 102.60},
{36.66, 37.16, 37.66, 38.16, 38.66, 39.16, 39.65, 40.15, 40.65, 41.15, 41.64, 42.14, 42.63, 43.13, 43.62, 44.12, 44.61, 45.11, 45.60, 46.09, 46.58, 47.08, 47.57, 48.06, 48.55, 49.04, 49.53, 50.02, 50.51, 50.99, 51.48, 51.97, 52.46, 52.94, 53.43, 53.92, 54.40, 54.89, 55.37, 55.85, 56.34, 56.82, 57.30, 57.79, 58.27, 58.75, 59.23, 59.71, 60.19, 60.67, 61.15, 61.63, 62.11, 62.59, 63.07, 63.54, 64.02, 64.50, 64.97, 65.45, 65.93, 66.40, 66.87, 67.35, 67.82, 68.30, 68.77, 69.24, 69.71, 70.19, 70.66, 71.13, 71.60, 72.07, 72.54, 73.01, 73.48, 73.95, 74.41, 74.88, 75.35, 75.82, 76.28, 76.75, 77.21, 77.68, 78.14, 78.61, 79.07, 79.54, 80.00, 80.46, 80.93, 81.39, 81.85, 82.31, 82.77, 83.23, 83.69, 84.15, 84.61, 85.07, 85.53, 85.99, 86.45, 86.90, 87.36, 87.82, 88.27, 88.73, 89.19, 89.64, 90.10, 90.55, 91.01, 91.46, 91.91, 92.37, 92.82, 93.27, 93.72, 94.17, 94.62, 95.07, 95.53, 95.98, 96.42, 96.87, 97.32, 97.77, 98.22, 98.67, 99.11, 99.56, 100.01, 100.45, 100.90, 101.34, 101.79, 102.23},
{37.08, 37.58, 38.07, 38.56, 39.06, 39.55, 40.04, 40.53, 41.02, 41.51, 42.00, 42.49, 42.98, 43.47, 43.96, 44.45, 44.94, 45.42, 45.91, 46.40, 46.88, 47.37, 47.86, 48.34, 48.82, 49.31, 49.79, 50.27, 50.76, 51.24, 51.72, 52.20, 52.68, 53.17, 53.65, 54.13, 54.60, 55.08, 55.56, 56.04, 56.52, 57.00, 57.47, 57.95, 58.43, 58.90, 59.38, 59.85, 60.33, 60.80, 61.27, 61.75, 62.22, 62.69, 63.16, 63.64, 64.11, 64.58, 65.05, 65.52, 65.99, 66.46, 66.93, 67.39, 67.86, 68.33, 68.80, 69.26, 69.73, 70.20, 70.66, 71.13, 71.59, 72.06, 72.52, 72.99, 73.45, 73.91, 74.37, 74.84, 75.30, 75.76, 76.22, 76.68, 77.14, 77.60, 78.06, 78.52, 78.98, 79.44, 79.90, 80.35, 80.81, 81.27, 81.72, 82.18, 82.64, 83.09, 83.55, 84.00, 84.45, 84.91, 85.36, 85.81, 86.27, 86.72, 87.17, 87.62, 88.07, 88.52, 88.97, 89.42, 89.87, 90.32, 90.77, 91.22, 91.67, 92.12, 92.56, 93.01, 93.46, 93.90, 94.35, 94.80, 95.24, 95.69, 96.13, 96.57, 97.02, 97.46, 97.90, 98.35, 98.79, 99.23, 99.67, 100.11, 100.55, 100.99, 101.43, 101.87},
{37.50, 37.99, 38.47, 38.96, 39.45, 39.93, 40.42, 40.90, 41.39, 41.87, 42.36, 42.84, 43.33, 43.81, 44.29, 44.77, 45.25, 45.74, 46.22, 46.70, 47.18, 47.66, 48.14, 48.62, 49.09, 49.57, 50.05, 50.53, 51.00, 51.48, 51.96, 52.43, 52.91, 53.38, 53.86, 54.33, 54.80, 55.28, 55.75, 56.22, 56.69, 57.17, 57.64, 58.11, 58.58, 59.05, 59.52, 59.99, 60.46, 60.92, 61.39, 61.86, 62.33, 62.79, 63.26, 63.73, 64.19, 64.66, 65.12, 65.59, 66.05, 66.51, 66.98, 67.44, 67.90, 68.36, 68.83, 69.29, 69.75, 70.21, 70.67, 71.13, 71.59, 72.05, 72.51, 72.96, 73.42, 73.88, 74.34, 74.79, 75.25, 75.71, 76.16, 76.62, 77.07, 77.53, 77.98, 78.43, 78.89, 79.34, 79.79, 80.25, 80.70, 81.15, 81.60, 82.05, 82.50, 82.95, 83.40, 83.85, 84.30, 84.75, 85.20, 85.64, 86.09, 86.54, 86.98, 87.43, 87.88, 88.32, 88.77, 89.21, 89.66, 90.10, 90.54, 90.99, 91.43, 91.87, 92.32, 92.76, 93.20, 93.64, 94.08, 94.52, 94.96, 95.40, 95.84, 96.28, 96.72, 97.16, 97.60, 98.03, 98.47, 98.91, 99.34, 99.78, 100.22, 100.65, 101.09, 101.52},
{37.90, 38.38, 38.87, 39.35, 39.83, 40.31, 40.79, 41.27, 41.75, 42.23, 42.70, 43.18, 43.66, 44.14, 44.61, 45.09, 45.56, 46.04, 46.51, 46.99, 47.46, 47.94, 48.41, 48.88, 49.36, 49.83, 50.30, 50.77, 51.24, 51.71, 52.18, 52.65, 53.12, 53.59, 54.06, 54.53, 55.00, 55.46, 55.93, 56.40, 56.86, 57.33, 57.80, 58.26, 58.73, 59.19, 59.65, 60.12, 60.58, 61.04, 61.51, 61.97, 62.43, 62.89, 63.35, 63.81, 64.27, 64.73, 65.19, 65.65, 66.11, 66.57, 67.03, 67.48, 67.94, 68.40, 68.85, 69.31, 69.77, 70.22, 70.68, 71.13, 71.58, 72.04, 72.49, 72.94, 73.40, 73.85, 74.30, 74.75, 75.20, 75.65, 76.10, 76.55, 77.00, 77.45, 77.90, 78.35, 78.80, 79.25, 79.69, 80.14, 80.59, 81.03, 81.48, 81.93, 82.37, 82.82, 83.26, 83.70, 84.15, 84.59, 85.03, 85.48, 85.92, 86.36, 86.80, 87.24, 87.69, 88.13, 88.57, 89.01, 89.44, 89.88, 90.32, 90.76, 91.20, 91.64, 92.07, 92.51, 92.95, 93.38, 93.82, 94.26, 94.69, 95.13, 95.56, 95.99, 96.43, 96.86, 97.29, 97.73, 98.16, 98.59, 99.02, 99.45, 99.89, 100.32, 100.75, 101.18},
{38.30, 38.77, 39.25, 39.73, 40.20, 40.67, 41.15, 41.62, 42.10, 42.57, 43.04, 43.51, 43.98, 44.46, 44.93, 45.40, 45.87, 46.34, 46.81, 47.27, 47.74, 48.21, 48.68, 49.15, 49.61, 50.08, 50.55, 51.01, 51.48, 51.94, 52.41, 52.87, 53.34, 53.80, 54.26, 54.72, 55.19, 55.65, 56.11, 56.57, 57.03, 57.49, 57.95, 58.41, 58.87, 59.33, 59.79, 60.25, 60.70, 61.16, 61.62, 62.08, 62.53, 62.99, 63.44, 63.90, 64.35, 64.81, 65.26, 65.72, 66.17, 66.62, 67.07, 67.53, 67.98, 68.43, 68.88, 69.33, 69.78, 70.23, 70.68, 71.13, 71.58, 72.03, 72.48, 72.92, 73.37, 73.82, 74.26, 74.71, 75.16, 75.60, 76.05, 76.49, 76.94, 77.38, 77.82, 78.27, 78.71, 79.15, 79.60, 80.04, 80.48, 80.92, 81.36, 81.80, 82.24, 82.68, 83.12, 83.56, 84.00, 84.44, 84.88, 85.31, 85.75, 86.19, 86.63, 87.06, 87.50, 87.93, 88.37, 88.80, 89.24, 89.67, 90.11, 90.54, 90.97, 91.41, 91.84, 92.27, 92.70, 93.13, 93.56, 93.99, 94.43, 94.86, 95.28, 95.71, 96.14, 96.57, 97.00, 97.43, 97.86, 98.28, 98.71, 99.14, 99.56, 99.99, 100.41, 100.84},
{38.68, 39.15, 39.62, 40.09, 40.56, 41.03, 41.50, 41.97, 42.44, 42.90, 43.37, 43.84, 44.30, 44.77, 45.23, 45.70, 46.16, 46.63, 47.09, 47.55, 48.02, 48.48, 48.94, 49.40, 49.86, 50.33, 50.79, 51.25, 51.71, 52.17, 52.62, 53.08, 53.54, 54.00, 54.46, 54.91, 55.37, 55.83, 56.28, 56.74, 57.20, 57.65, 58.11, 58.56, 59.01, 59.47, 59.92, 60.37, 60.83, 61.28, 61.73, 62.18, 62.63, 63.08, 63.53, 63.98, 64.43, 64.88, 65.33, 65.78, 66.23, 66.67, 67.12, 67.57, 68.01, 68.46, 68.91, 69.35, 69.80, 70.24, 70.69, 71.13, 71.57, 72.02, 72.46, 72.90, 73.35, 73.79, 74.23, 74.67, 75.11, 75.55, 75.99, 76.43, 76.87, 77.31, 77.75, 78.19, 78.63, 79.06, 79.50, 79.94, 80.37, 80.81, 81.25, 81.68, 82.12, 82.55, 82.99, 83.42, 83.86, 84.29, 84.72, 85.15, 85.59, 86.02, 86.45, 86.88, 87.31, 87.74, 88.18, 88.61, 89.04, 89.46, 89.89, 90.32, 90.75, 91.18, 91.61, 92.03, 92.46, 92.89, 93.31, 93.74, 94.17, 94.59, 95.02, 95.44, 95.86, 96.29, 96.71, 97.14, 97.56, 97.98, 98.40, 98.83, 99.25, 99.67, 100.09, 100.51},
{39.06, 39.53, 39.99, 40.45, 40.92, 41.38, 41.84, 42.31, 42.77, 43.23, 43.69, 44.15, 44.61, 45.07, 45.53, 45.99, 46.45, 46.91, 47.37, 47.83, 48.28, 48.74, 49.20, 49.65, 50.11, 50.56, 51.02, 51.48, 51.93, 52.38, 52.84, 53.29, 53.74, 54.20, 54.65, 55.10, 55.55, 56.00, 56.45, 56.91, 57.36, 57.81, 58.25, 58.70, 59.15, 59.60, 60.05, 60.50, 60.94, 61.39, 61.84, 62.28, 62.73, 63.17, 63.62, 64.06, 64.51, 64.95, 65.40, 65.84, 66.28, 66.73, 67.17, 67.61, 68.05, 68.49, 68.93, 69.37, 69.81, 70.25, 70.69, 71.13, 71.57, 72.01, 72.45, 72.88, 73.32, 73.76, 74.20, 74.63, 75.07, 75.50, 75.94, 76.37, 76.81, 77.24, 77.68, 78.11, 78.54, 78.98, 79.41, 79.84, 80.27, 80.70, 81.13, 81.57, 82.00, 82.43, 82.86, 83.29, 83.71, 84.14, 84.57, 85.00, 85.43, 85.85, 86.28, 86.71, 87.13, 87.56, 87.99, 88.41, 88.84, 89.26, 89.69, 90.11, 90.53, 90.96, 91.38, 91.80, 92.23, 92.65, 93.07, 93.49, 93.91, 94.33, 94.75, 95.17, 95.59, 96.01, 96.43, 96.85, 97.27, 97.69, 98.10, 98.52, 98.94, 99.36, 99.77, 100.19},
{39.43, 39.89, 40.35, 40.81, 41.26, 41.72, 42.18, 42.64, 43.09, 43.55, 44.01, 44.46, 44.92, 45.37, 45.83, 46.28, 46.73, 47.19, 47.64, 48.09, 48.54, 49.00, 49.45, 49.90, 50.35, 50.80, 51.25, 51.70, 52.15, 52.60, 53.05, 53.49, 53.94, 54.39, 54.84, 55.28, 55.73, 56.18, 56.62, 57.07, 57.51, 57.96, 58.40, 58.84, 59.29, 59.73, 60.17, 60.62, 61.06, 61.50, 61.94, 62.38, 62.82, 63.26, 63.70, 64.14, 64.58, 65.02, 65.46, 65.90, 66.34, 66.77, 67.21, 67.65, 68.09, 68.52, 68.96, 69.39, 69.83, 70.26, 70.70, 71.13, 71.57, 72.00, 72.43, 72.87, 73.30, 73.73, 74.16, 74.59, 75.02, 75.46, 75.89, 76.32, 76.75, 77.17, 77.60, 78.03, 78.46, 78.89, 79.32, 79.74, 80.17, 80.60, 81.02, 81.45, 81.88, 82.30, 82.73, 83.15, 83.58, 84.00, 84.42, 84.85, 85.27, 85.69, 86.12, 86.54, 86.96, 87.38, 87.80, 88.22, 88.64, 89.06, 89.48, 89.90, 90.32, 90.74, 91.16, 91.58, 92.00, 92.41, 92.83, 93.25, 93.66, 94.08, 94.50, 94.91, 95.33, 95.74, 96.16, 96.57, 96.98, 97.40, 97.81, 98.22, 98.64, 99.05, 99.46, 99.87},
{39.79, 40.24, 40.70, 41.15, 41.60, 42.06, 42.51, 42.96, 43.41, 43.86, 44.31, 44.76, 45.21, 45.66, 46.11, 46.56, 47.01, 47.46, 47.90, 48.35, 48.80, 49.25, 49.69, 50.14, 50.58, 51.03, 51.47, 51.92, 52.36, 52.81, 53.25, 53.69, 54.13, 54.58, 55.02, 55.46, 55.90, 56.34, 56.78, 57.22, 57.66, 58.10, 58.54, 58.98, 59.42, 59.86, 60.30, 60.73, 61.17, 61.61, 62.04, 62.48, 62.92, 63.35, 63.79, 64.22, 64.66, 65.09, 65.52, 65.96, 66.39, 66.82, 67.26, 67.69, 68.12, 68.55, 68.98, 69.41, 69.84, 70.27, 70.70, 71.13, 71.56, 71.99, 72.42, 72.85, 73.27, 73.70, 74.13, 74.56, 74.98, 75.41, 75.83, 76.26, 76.68, 77.11, 77.53, 77.96, 78.38, 78.80, 79.23, 79.65, 80.07, 80.50, 80.92, 81.34, 81.76, 82.18, 82.60, 83.02, 83.44, 83.86, 84.28, 84.70, 85.12, 85.54, 85.95, 86.37, 86.79, 87.20, 87.62, 88.04, 88.45, 88.87, 89.28, 89.70, 90.11, 90.53, 90.94, 91.36, 91.77, 92.18, 92.60, 93.01, 93.42, 93.83, 94.24, 94.65, 95.07, 95.48, 95.89, 96.30, 96.71, 97.12, 97.52, 97.93, 98.34, 98.75, 99.16, 99.57},
{40.14, 40.59, 41.04, 41.49, 41.93, 42.38, 42.83, 43.28, 43.72, 44.17, 44.61, 45.06, 45.50, 45.95, 46.39, 46.83, 47.28, 47.72, 48.16, 48.61, 49.05, 49.49, 49.93, 50.37, 50.81, 51.25, 51.69, 52.13, 52.57, 53.01, 53.45, 53.89, 54.32, 54.76, 55.20, 55.63, 56.07, 56.51, 56.94, 57.38, 57.81, 58.25, 58.68, 59.12, 59.55, 59.98, 60.42, 60.85, 61.28, 61.71, 62.15, 62.58, 63.01, 63.44, 63.87, 64.30, 64.73, 65.16, 65.59, 66.02, 66.44, 66.87, 67.30, 67.73, 68.15, 68.58, 69.01, 69.43, 69.86, 70.28, 70.71, 71.13, 71.56, 71.98, 72.41, 72.83, 73.25, 73.67, 74.10, 74.52, 74.94, 75.36, 75.78, 76.20, 76.62, 77.04, 77.46, 77.88, 78.30, 78.72, 79.14, 79.56, 79.98, 80.39, 80.81, 81.23, 81.65, 82.06, 82.48, 82.89, 83.31, 83.72, 84.14, 84.55, 84.97, 85.38, 85.79, 86.21, 86.62, 87.03, 87.44, 87.86, 88.27, 88.68, 89.09, 89.50, 89.91, 90.32, 90.73, 91.14, 91.55, 91.96, 92.37, 92.77, 93.18, 93.59, 94.00, 94.40, 94.81, 95.22, 95.62, 96.03, 96.43, 96.84, 97.24, 97.65, 98.05, 98.46, 98.86, 99.26},
{40.49, 40.93, 41.37, 41.82, 42.26, 42.70, 43.14, 43.58, 44.03, 44.47, 44.91, 45.35, 45.79, 46.23, 46.66, 47.10, 47.54, 47.98, 48.42, 48.85, 49.29, 49.73, 50.16, 50.60, 51.04, 51.47, 51.91, 52.34, 52.77, 53.21, 53.64, 54.08, 54.51, 54.94, 55.37, 55.80, 56.24, 56.67, 57.10, 57.53, 57.96, 58.39, 58.82, 59.25, 59.68, 60.11, 60.53, 60.96, 61.39, 61.82, 62.24, 62.67, 63.10, 63.52, 63.95, 64.37, 64.80, 65.22, 65.65, 66.07, 66.49, 66.92, 67.34, 67.76, 68.19, 68.61, 69.03, 69.45, 69.87, 70.29, 70.71, 71.13, 71.55, 71.97, 72.39, 72.81, 73.23, 73.65, 74.07, 74.48, 74.90, 75.32, 75.73, 76.15, 76.57, 76.98, 77.40, 77.81, 78.23, 78.64, 79.06, 79.47, 79.88, 80.30, 80.71, 81.12, 81.53, 81.95, 82.36, 82.77, 83.18, 83.59, 84.00, 84.41, 84.82, 85.23, 85.64, 86.05, 86.46, 86.86, 87.27, 87.68, 88.09, 88.49, 88.90, 89.31, 89.71, 90.12, 90.52, 90.93, 91.33, 91.74, 92.14, 92.55, 92.95, 93.35, 93.76, 94.16, 94.56, 94.96, 95.37, 95.77, 96.17, 96.57, 96.97, 97.37, 97.77, 98.17, 98.57, 98.97},
{40.82, 41.26, 41.70, 42.14, 42.58, 43.01, 43.45, 43.89, 44.32, 44.76, 45.19, 45.63, 46.06, 46.50, 46.93, 47.37, 47.80, 48.23, 48.66, 49.10, 49.53, 49.96, 50.39, 50.82, 51.25, 51.69, 52.12, 52.54, 52.97, 53.40, 53.83, 54.26, 54.69, 55.12, 55.54, 55.97, 56.40, 56.82, 57.25, 57.68, 58.10, 58.53, 58.95, 59.38, 59.80, 60.23, 60.65, 61.07, 61.49, 61.92, 62.34, 62.76, 63.18, 63.60, 64.03, 64.45, 64.87, 65.29, 65.71, 66.13, 66.55, 66.96, 67.38, 67.80, 68.22, 68.64, 69.05, 69.47, 69.89, 70.30, 70.72, 71.13, 71.55, 71.96, 72.38, 72.79, 73.21, 73.62, 74.03, 74.45, 74.86, 75.27, 75.69, 76.10, 76.51, 76.92, 77.33, 77.74, 78.15, 78.56, 78.97, 79.38, 79.79, 80.20, 80.61, 81.02, 81.42, 81.83, 82.24, 82.65, 83.05, 83.46, 83.86, 84.27, 84.68, 85.08, 85.49, 85.89, 86.29, 86.70, 87.10, 87.51, 87.91, 88.31, 88.71, 89.12, 89.52, 89.92, 90.32, 90.72, 91.12, 91.52, 91.92, 92.32, 92.72, 93.12, 93.52, 93.92, 94.32, 94.71, 95.11, 95.51, 95.91, 96.30, 96.70, 97.10, 97.49, 97.89, 98.28, 98.68},
{41.15, 41.59, 42.02, 42.45, 42.89, 43.32, 43.75, 44.18, 44.61, 45.04, 45.47, 45.90, 46.33, 46.76, 47.19, 47.62, 48.05, 48.48, 48.91, 49.34, 49.76, 50.19, 50.62, 51.04, 51.47, 51.89, 52.32, 52.75, 53.17, 53.59, 54.02, 54.44, 54.87, 55.29, 55.71, 56.13, 56.56, 56.98, 57.40, 57.82, 58.24, 58.66, 59.08, 59.50, 59.92, 60.34, 60.76, 61.18, 61.60, 62.02, 62.43, 62.85, 63.27, 63.69, 64.10, 64.52, 64.93, 65.35, 65.76, 66.18, 66.59, 67.01, 67.42, 67.84, 68.25, 68.66, 69.08, 69.49, 69.90, 70.31, 70.72, 71.13, 71.55, 71.96, 72.37, 72.78, 73.19, 73.60, 74.00, 74.41, 74.82, 75.23, 75.64, 76.05, 76.45, 76.86, 77.27, 77.67, 78.08, 78.48, 78.89, 79.30, 79.70, 80.10, 80.51, 80.91, 81.32, 81.72, 82.12, 82.53, 82.93, 83.33, 83.73, 84.13, 84.54, 84.94, 85.34, 85.74, 86.14, 86.54, 86.94, 87.34, 87.73, 88.13, 88.53, 88.93, 89.33, 89.72, 90.12, 90.52, 90.92, 91.31, 91.71, 92.10, 92.50, 92.89, 93.29, 93.68, 94.08, 94.47, 94.87, 95.26, 95.65, 96.04, 96.44, 96.83, 97.22, 97.61, 98.00, 98.40},
{41.48, 41.90, 42.33, 42.76, 43.19, 43.62, 44.04, 44.47, 44.90, 45.32, 45.75, 46.17, 46.60, 47.03, 47.45, 47.87, 48.30, 48.72, 49.15, 49.57, 49.99, 50.41, 50.84, 51.26, 51.68, 52.10, 52.52, 52.94, 53.36, 53.78, 54.20, 54.62, 55.04, 55.46, 55.88, 56.29, 56.71, 57.13, 57.55, 57.96, 58.38, 58.80, 59.21, 59.63, 60.04, 60.46, 60.87, 61.29, 61.70, 62.11, 62.53, 62.94, 63.35, 63.76, 64.18, 64.59, 65.00, 65.41, 65.82, 66.23, 66.64, 67.05, 67.46, 67.87, 68.28, 68.69, 69.10, 69.51, 69.91, 70.32, 70.73, 71.14, 71.54, 71.95, 72.35, 72.76, 73.17, 73.57, 73.98, 74.38, 74.78, 75.19, 75.59, 76.00, 76.40, 76.80, 77.20, 77.61, 78.01, 78.41, 78.81, 79.21, 79.61, 80.01, 80.41, 80.81, 81.21, 81.61, 82.01, 82.41, 82.81, 83.20, 83.60, 84.00, 84.40, 84.79, 85.19, 85.59, 85.98, 86.38, 86.77, 87.17, 87.56, 87.96, 88.35, 88.75, 89.14, 89.53, 89.93, 90.32, 90.71, 91.11, 91.50, 91.89, 92.28, 92.67, 93.06, 93.45, 93.84, 94.23, 94.62, 95.01, 95.40, 95.79, 96.18, 96.57, 96.96, 97.34, 97.73, 98.12},
{41.79, 42.22, 42.64, 43.06, 43.49, 43.91, 44.33, 44.75, 45.18, 45.60, 46.02, 46.44, 46.86, 47.28, 47.70, 48.12, 48.54, 48.96, 49.38, 49.80, 50.21, 50.63, 51.05, 51.47, 51.88, 52.30, 52.72, 53.13, 53.55, 53.96, 54.38, 54.79, 55.21, 55.62, 56.04, 56.45, 56.86, 57.28, 57.69, 58.10, 58.51, 58.92, 59.34, 59.75, 60.16, 60.57, 60.98, 61.39, 61.80, 62.21, 62.62, 63.02, 63.43, 63.84, 64.25, 64.66, 65.06, 65.47, 65.88, 66.28, 66.69, 67.10, 67.50, 67.91, 68.31, 68.71, 69.12, 69.52, 69.93, 70.33, 70.73, 71.14, 71.54, 71.94, 72.34, 72.74, 73.14, 73.55, 73.95, 74.35, 74.75, 75.15, 75.55, 75.95, 76.34, 76.74, 77.14, 77.54, 77.94, 78.33, 78.73, 79.13, 79.53, 79.92, 80.32, 80.71, 81.11, 81.50, 81.90, 82.29, 82.69, 83.08, 83.48, 83.87, 84.26, 84.65, 85.05, 85.44, 85.83, 86.22, 86.62, 87.01, 87.40, 87.79, 88.18, 88.57, 88.96, 89.35, 89.74, 90.13, 90.51, 90.90, 91.29, 91.68, 92.07, 92.45, 92.84, 93.23, 93.61, 94.00, 94.39, 94.77, 95.16, 95.54, 95.93, 96.31, 96.70, 97.08, 97.46, 97.85},
{42.10, 42.52, 42.94, 43.36, 43.78, 44.19, 44.61, 45.03, 45.45, 45.87, 46.28, 46.70, 47.11, 47.53, 47.95, 48.36, 48.78, 49.19, 49.61, 50.02, 50.43, 50.85, 51.26, 51.67, 52.08, 52.50, 52.91, 53.32, 53.73, 54.14, 54.55, 54.96, 55.37, 55.78, 56.19, 56.60, 57.01, 57.42, 57.83, 58.24, 58.64, 59.05, 59.46, 59.87, 60.27, 60.68, 61.08, 61.49, 61.89, 62.30, 62.70, 63.11, 63.51, 63.92, 64.32, 64.72, 65.13, 65.53, 65.93, 66.33, 66.74, 67.14, 67.54, 67.94, 68.34, 68.74, 69.14, 69.54, 69.94, 70.34, 70.74, 71.14, 71.53, 71.93, 72.33, 72.73, 73.12, 73.52, 73.92, 74.31, 74.71, 75.11, 75.50, 75.90, 76.29, 76.69, 77.08, 77.47, 77.87, 78.26, 78.65, 79.05, 79.44, 79.83, 80.22, 80.62, 81.01, 81.40, 81.79, 82.18, 82.57, 82.96, 83.35, 83.74, 84.13, 84.52, 84.91, 85.30, 85.68, 86.07, 86.46, 86.85, 87.23, 87.62, 88.01, 88.39, 88.78, 89.16, 89.55, 89.93, 90.32, 90.70, 91.09, 91.47, 91.86, 92.24, 92.62, 93.01, 93.39, 93.77, 94.15, 94.53, 94.92, 95.30, 95.68, 96.06, 96.44, 96.82, 97.20, 97.58},
{42.40, 42.82, 43.23, 43.65, 44.06, 44.47, 44.89, 45.30, 45.71, 46.13, 46.54, 46.95, 47.36, 47.78, 48.19, 48.60, 49.01, 49.42, 49.83, 50.24, 50.65, 51.06, 51.47, 51.87, 52.28, 52.69, 53.10, 53.50, 53.91, 54.32, 54.72, 55.13, 55.54, 55.94, 56.35, 56.75, 57.16, 57.56, 57.97, 58.37, 58.77, 59.18, 59.58, 59.98, 60.38, 60.79, 61.19, 61.59, 61.99, 62.39, 62.79, 63.19, 63.59, 63.99, 64.39, 64.79, 65.19, 65.59, 65.99, 66.38, 66.78, 67.18, 67.58, 67.97, 68.37, 68.77, 69.16, 69.56, 69.95, 70.35, 70.74, 71.14, 71.53, 71.92, 72.32, 72.71, 73.11, 73.50, 73.89, 74.28, 74.67, 75.07, 75.46, 75.85, 76.24, 76.63, 77.02, 77.41, 77.80, 78.19, 78.58, 78.97, 79.36, 79.75, 80.13, 80.52, 80.91, 81.30, 81.68, 82.07, 82.46, 82.84, 83.23, 83.61, 84.00, 84.39, 84.77, 85.15, 85.54, 85.92, 86.31, 86.69, 87.07, 87.46, 87.84, 88.22, 88.60, 88.99, 89.37, 89.75, 90.13, 90.51, 90.89, 91.27, 91.65, 92.03, 92.41, 92.79, 93.17, 93.55, 93.92, 94.30, 94.68, 95.06, 95.44, 95.81, 96.19, 96.57, 96.94, 97.32},
{42.70, 43.11, 43.52, 43.93, 44.34, 44.75, 45.16, 45.57, 45.98, 46.38, 46.79, 47.20, 47.61, 48.02, 48.42, 48.83, 49.23, 49.64, 50.05, 50.45, 50.86, 51.26, 51.67, 52.07, 52.47, 52.88, 53.28, 53.68, 54.09, 54.49, 54.89, 55.29, 55.70, 56.10, 56.50, 56.90, 57.30, 57.70, 58.10, 58.50, 58.90, 59.30, 59.70, 60.09, 60.49, 60.89, 61.29, 61.69, 62.08, 62.48, 62.88, 63.27, 63.67, 64.06, 64.46, 64.85, 65.25, 65.64, 66.04, 66.43, 66.83, 67.22, 67.61, 68.00, 68.40, 68.79, 69.18, 69.57, 69.96, 70.36, 70.75, 71.14, 71.53, 71.92, 72.31, 72.70, 73.09, 73.47, 73.86, 74.25, 74.64, 75.03, 75.42, 75.80, 76.19, 76.58, 76.96, 77.35, 77.73, 78.12, 78.51, 78.89, 79.28, 79.66, 80.04, 80.43, 80.81, 81.20, 81.58, 81.96, 82.34, 82.73, 83.11, 83.49, 83.87, 84.25, 84.64, 85.02, 85.40, 85.78, 86.16, 86.54, 86.92, 87.30, 87.67, 88.05, 88.43, 88.81, 89.19, 89.56, 89.94, 90.32, 90.70, 91.07, 91.45, 91.83, 92.20, 92.58, 92.95, 93.33, 93.70, 94.08, 94.45, 94.82, 95.20, 95.57, 95.94, 96.32, 96.69, 97.06},
{42.99, 43.40, 43.80, 44.21, 44.61, 45.02, 45.42, 45.83, 46.23, 46.64, 47.04, 47.44, 47.85, 48.25, 48.65, 49.06, 49.46, 49.86, 50.26, 50.66, 51.06, 51.46, 51.86, 52.26, 52.66, 53.06, 53.46, 53.86, 54.26, 54.66, 55.06, 55.45, 55.85, 56.25, 56.65, 57.04, 57.44, 57.84, 58.23, 58.63, 59.02, 59.42, 59.81, 60.21, 60.60, 60.99, 61.39, 61.78, 62.17, 62.57, 62.96, 63.35, 63.74, 64.13, 64.53, 64.92, 65.31, 65.70, 66.09, 66.48, 66.87, 67.26, 67.65, 68.04, 68.42, 68.81, 69.20, 69.59, 69.98, 70.36, 70.75, 71.14, 71.52, 71.91, 72.30, 72.68, 73.07, 73.45, 73.84, 74.22, 74.61, 74.99, 75.37, 75.76, 76.14, 76.52, 76.91, 77.29, 77.67, 78.05, 78.43, 78.82, 79.20, 79.58, 79.96, 80.34, 80.72, 81.10, 81.48, 81.86, 82.24, 82.61, 82.99, 83.37, 83.75, 84.13, 84.50, 84.88, 85.26, 85.63, 86.01, 86.39, 86.76, 87.14, 87.51, 87.89, 88.26, 88.64, 89.01, 89.39, 89.76, 90.13, 90.51, 90.88, 91.25, 91.62, 92.00, 92.37, 92.74, 93.11, 93.48, 93.85, 94.22, 94.59, 94.96, 95.33, 95.70, 96.07, 96.44, 96.81},
{43.27, 43.68, 44.08, 44.48, 44.88, 45.28, 45.68, 46.08, 46.48, 46.88, 47.28, 47.68, 48.08, 48.48, 48.88, 49.28, 49.68, 50.07, 50.47, 50.87, 51.26, 51.66, 52.06, 52.45, 52.85, 53.24, 53.64, 54.03, 54.43, 54.82, 55.22, 55.61, 56.00, 56.40, 56.79, 57.18, 57.58, 57.97, 58.36, 58.75, 59.14, 59.53, 59.92, 60.32, 60.71, 61.10, 61.48, 61.87, 62.26, 62.65, 63.04, 63.43, 63.82, 64.20, 64.59, 64.98, 65.37, 65.75, 66.14, 66.53, 66.91, 67.30, 67.68, 68.07, 68.45, 68.84, 69.22, 69.60, 69.99, 70.37, 70.76, 71.14, 71.52, 71.90, 72.29, 72.67, 73.05, 73.43, 73.81, 74.19, 74.57, 74.95, 75.33, 75.71, 76.09, 76.47, 76.85, 77.23, 77.61, 77.98, 78.36, 78.74, 79.12, 79.49, 79.87, 80.25, 80.62, 81.00, 81.38, 81.75, 82.13, 82.50, 82.88, 83.25, 83.63, 84.00, 84.37, 84.75, 85.12, 85.49, 85.87, 86.24, 86.61, 86.98, 87.35, 87.73, 88.10, 88.47, 88.84, 89.21, 89.58, 89.95, 90.32, 90.69, 91.06, 91.43, 91.80, 92.16, 92.53, 92.90, 93.27, 93.63, 94.00, 94.37, 94.74, 95.10, 95.47, 95.83, 96.20, 96.56},
{43.55, 43.95, 44.35, 44.75, 45.14, 45.54, 45.94, 46.33, 46.73, 47.13, 47.52, 47.92, 48.31, 48.71, 49.10, 49.49, 49.89, 50.28, 50.68, 51.07, 51.46, 51.85, 52.25, 52.64, 53.03, 53.42, 53.81, 54.20, 54.59, 54.98, 55.38, 55.76, 56.15, 56.54, 56.93, 57.32, 57.71, 58.10, 58.49, 58.87, 59.26, 59.65, 60.04, 60.42, 60.81, 61.19, 61.58, 61.97, 62.35, 62.74, 63.12, 63.50, 63.89, 64.27, 64.66, 65.04, 65.42, 65.81, 66.19, 66.57, 66.95, 67.33, 67.72, 68.10, 68.48, 68.86, 69.24, 69.62, 70.00, 70.38, 70.76, 71.14, 71.52, 71.90, 72.27, 72.65, 73.03, 73.41, 73.79, 74.16, 74.54, 74.92, 75.29, 75.67, 76.04, 76.42, 76.79, 77.17, 77.54, 77.92, 78.29, 78.67, 79.04, 79.41, 79.79, 80.16, 80.53, 80.91, 81.28, 81.65, 82.02, 82.39, 82.76, 83.14, 83.51, 83.88, 84.25, 84.62, 84.99, 85.36, 85.73, 86.09, 86.46, 86.83, 87.20, 87.57, 87.93, 88.30, 88.67, 89.04, 89.40, 89.77, 90.14, 90.50, 90.87, 91.23, 91.60, 91.96, 92.33, 92.69, 93.06, 93.42, 93.78, 94.15, 94.51, 94.87, 95.24, 95.60, 95.96, 96.32},
{43.82, 44.22, 44.61, 45.01, 45.40, 45.79, 46.19, 46.58, 46.97, 47.36, 47.75, 48.15, 48.54, 48.93, 49.32, 49.71, 50.10, 50.49, 50.88, 51.27, 51.66, 52.04, 52.43, 52.82, 53.21, 53.60, 53.98, 54.37, 54.76, 55.14, 55.53, 55.92, 56.30, 56.69, 57.07, 57.46, 57.84, 58.23, 58.61, 58.99, 59.38, 59.76, 60.14, 60.53, 60.91, 61.29, 61.67, 62.06, 62.44, 62.82, 63.20, 63.58, 63.96, 64.34, 64.72, 65.10, 65.48, 65.86, 66.24, 66.62, 66.99, 67.37, 67.75, 68.13, 68.50, 68.88, 69.26, 69.64, 70.01, 70.39, 70.76, 71.14, 71.51, 71.89, 72.26, 72.64, 73.01, 73.39, 73.76, 74.13, 74.51, 74.88, 75.25, 75.63, 76.00, 76.37, 76.74, 77.11, 77.48, 77.85, 78.23, 78.60, 78.97, 79.34, 79.71, 80.07, 80.44, 80.81, 81.18, 81.55, 81.92, 82.29, 82.65, 83.02, 83.39, 83.76, 84.12, 84.49, 84.85, 85.22, 85.59, 85.95, 86.32, 86.68, 87.05, 87.41, 87.78, 88.14, 88.50, 88.87, 89.23, 89.59, 89.96, 90.32, 90.68, 91.04, 91.40, 91.77, 92.13, 92.49, 92.85, 93.21, 93.57, 93.93, 94.29, 94.65, 95.01, 95.37, 95.73, 96.09},
{44.09, 44.48, 44.87, 45.26, 45.65, 46.04, 46.43, 46.82, 47.21, 47.59, 47.98, 48.37, 48.76, 49.14, 49.53, 49.92, 50.30, 50.69, 51.07, 51.46, 51.85, 52.23, 52.61, 53.00, 53.38, 53.77, 54.15, 54.53, 54.92, 55.30, 55.68, 56.06, 56.45, 56.83, 57.21, 57.59, 57.97, 58.35, 58.73, 59.11, 59.49, 59.87, 60.25, 60.63, 61.01, 61.39, 61.77, 62.14, 62.52, 62.90, 63.28, 63.65, 64.03, 64.41, 64.78, 65.16, 65.53, 65.91, 66.28, 66.66, 67.03, 67.41, 67.78, 68.16, 68.53, 68.90, 69.28, 69.65, 70.02, 70.40, 70.77, 71.14, 71.51, 71.88, 72.25, 72.62, 73.00, 73.37, 73.74, 74.11, 74.48, 74.84, 75.21, 75.58, 75.95, 76.32, 76.69, 77.06, 77.42, 77.79, 78.16, 78.53, 78.89, 79.26, 79.62, 79.99, 80.36, 80.72, 81.09, 81.45, 81.82, 82.18, 82.55, 82.91, 83.27, 83.64, 84.00, 84.36, 84.73, 85.09, 85.45, 85.81, 86.17, 86.54, 86.90, 87.26, 87.62, 87.98, 88.34, 88.70, 89.06, 89.42, 89.78, 90.14, 90.50, 90.86, 91.21, 91.57, 91.93, 92.29, 92.65, 93.00, 93.36, 93.72, 94.07, 94.43, 94.79, 95.14, 95.50, 95.85},
{44.36, 44.74, 45.13, 45.51, 45.90, 46.28, 46.67, 47.05, 47.44, 47.82, 48.21, 48.59, 48.97, 49.36, 49.74, 50.12, 50.50, 50.89, 51.27, 51.65, 52.03, 52.41, 52.79, 53.17, 53.55, 53.93, 54.31, 54.69, 55.07, 55.45, 55.83, 56.21, 56.59, 56.96, 57.34, 57.72, 58.10, 58.47, 58.85, 59.23, 59.60, 59.98, 60.35, 60.73, 61.11, 61.48, 61.85, 62.23, 62.60, 62.98, 63.35, 63.72, 64.10, 64.47, 64.84, 65.22, 65.59, 65.96, 66.33, 66.70, 67.07, 67.44, 67.82, 68.19, 68.56, 68.93, 69.30, 69.66, 70.03, 70.40, 70.77, 71.14, 71.51, 71.88, 72.24, 72.61, 72.98, 73.34, 73.71, 74.08, 74.44, 74.81, 75.18, 75.54, 75.91, 76.27, 76.64, 77.00, 77.36, 77.73, 78.09, 78.46, 78.82, 79.18, 79.55, 79.91, 80.27, 80.63, 80.99, 81.36, 81.72, 82.08, 82.44, 82.80, 83.16, 83.52, 83.88, 84.24, 84.60, 84.96, 85.32, 85.68, 86.03, 86.39, 86.75, 87.11, 87.47, 87.82, 88.18, 88.54, 88.89, 89.25, 89.61, 89.96, 90.32, 90.67, 91.03, 91.38, 91.74, 92.09, 92.45, 92.80, 93.16, 93.51, 93.86, 94.22, 94.57, 94.92, 95.27, 95.63}
};

View File

@@ -1,14 +0,0 @@
#ifndef TRANSFORM_TABLE_H_
#define TRANSFORM_TABLE_H_
#include "zf_common_headfile.h"
extern const float InverseMapH[80][140] ;
extern const float InverseMapW[80][140] ;
void transform(float X, float Y, int* x, int* y);
#endif /* TRANSFORM_TABLE_H_ */

View File

@@ -42,7 +42,6 @@
#include "jj_motion.h"
#include "jj_blueteeth.h"
#include "jj_blueteeth.h"
void NMI_Handler(void) __attribute__((interrupt()));
void HardFault_Handler(void) __attribute__((interrupt()));
@@ -279,7 +278,7 @@ void TIM1_UP_IRQHandler(void)
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) {
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
sport_motion2(bt_fly);
sport_motion();
}
}
@@ -314,7 +313,8 @@ void TIM5_IRQHandler(void)
void TIM6_IRQHandler(void)
{
if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) {
ICM_getEulerianAngles();
//ICM_getEulerianAngles();
imu660ra_get_gyro();
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
}
}

View File

@@ -3,21 +3,17 @@
#include "by_fan_control.h"
bool bt_rx_flag = false;
uint8 bt_buffer; // 接收字符存入
float bt_angle = 0.0f;
uint32_t bt_run_flag = 0;
uint8_t bt_flow_flag = 0;
uint8_t bt_fly_flag = 0;
uint32_t bt_run = 0;
uint32_t bt_fly = 0;
uint32_t bt_flow = 0;
enum bt_order {
Start_work = 0x01,
Turn_Left = 0x02,
Turn_Right = 0x03,
Speed_up = 0x04,
Speed_down = 0x05,
Stop_fly = 0x06,
Flow_on = 0x08,
Flow_up = 0x09,
Flow_down = 0x10,
Fly_ctrl = 0x01, // 起飞转换
Fly_up = 0x02, // 起飞程度增加
Fly_dowm = 0x03, // 起飞程度减小
Speed_up = 0x04, // 加速
Speed_down = 0x05, // 减速
Speed_ctrl = 0x06, // 速度开关
};
/**
* @brief 蓝牙初始化
@@ -36,41 +32,27 @@ void jj_bt_run()
{
if (bt_rx_flag) {
switch (bt_buffer) {
case Start_work:
bt_angle = 0.0f;
case Fly_ctrl:
bt_fly_flag = !bt_fly_flag;
break;
case Turn_Left:
bt_angle = 10.0f;
case Speed_ctrl:
bt_run_flag = !bt_run_flag;
break;
case Turn_Right:
bt_angle = -10.0f;
case Fly_up:
bt_fly += 10;
break;
case Speed_down:
case Fly_dowm:
bt_fly -= 10;
break;
case Speed_up:
bt_fly += 10;
bt_run += 10;
break;
case Stop_fly:
bt_run_flag = !bt_run_flag;
break;
case Flow_on:
bt_flow_flag = !bt_flow_flag;
break;
case Flow_up:
bt_flow += 20;
break;
case Flow_down:
bt_flow -= 20;
case Speed_down:
bt_run -= 10;
break;
default:
break;
}
if (bt_flow_flag == 0) {
bt_flow = 0;
}
by_pwm_update_duty(bt_flow + 500, bt_flow + 500);
bt_rx_flag = false;
}
}
@@ -88,5 +70,4 @@ void bt_printf(const char *format, ...)
;
USART_SendData((USART_TypeDef *)uart_index[UART_2], sbuf[i]);
}
}

View File

@@ -2,12 +2,12 @@
#define _JJ_BLUETEETH_H_
#include "stdio.h"
#include "zf_driver_uart.h"
extern bool bt_rx_flag;
extern uint8_t bt_buffer;
extern uint32_t bt_fly;
extern uint8 bt_buffer; // 接收字符存入
extern uint32_t bt_run_flag;
extern float bt_angle;
extern uint8_t bt_fly_flag;
extern uint32_t bt_run;
extern uint32_t bt_fly;
void jj_bt_init();
void jj_bt_run();
void bt_printf(const char *format, ...);

View File

@@ -1,44 +1,80 @@
#include "jj_motion.h"
#include "by_fan_control.h"
#include "by_imu.h"
#include "../3rd-lib/PID-Library/pid.h"
#include "jj_blueteeth.h"
#include "gl_common.h"
PID_TypeDef angle_pid;
PID_TypeDef gyro_z_pid;
PID_TypeDef img_x_pid;
#include "../3rd-lib/PID-Library/pid.h"
#include "zf_driver_encoder.h"
PID_TypeDef far_angle_pid;
PID_TypeDef far_gyro_pid;
PID_TypeDef near_pos_pid;
PID_TypeDef speed_pid;
float an_Kp = 8.0f;
float an_Ki = 0.0f;
float an_Ki = 1.0f;
float an_Kd = 2.0f;
float im_Kp = 1.0f;
float im_Ki = 0.0f;
float im_Kd = 0.0f;
float set_x = 0.0f;
float img_x = 40.0f;
float yaw0 = 0;
float out_M = 0;
float out_yaw;
uint32_t cnt1 = 0;
float in_angle;
float set_angle = 0.0f;
float out_angle;
float gy_Kp = 1.0f;
float gy_Ki = 0.0f;
float gy_Kd = 0.0f;
float in_gyro;
float out_gyro;
//float set_gyro = 0.0f;
float po_Kp = 1.0f;
float po_Ki = 0.0f;
float po_Kd = 0.0f;
float in_pos;
float out_pos;
float set_pos = 0.0f;
float sp_Kp = 1.0f;
float sp_Ki = 0.0f;
float sp_Kd = 0.0f;
float in_speed;
float out_speed;
float set_speed = 0.0f;
/**
* @brief
*
* @param fy y轴的加速度
*/
void sport_motion2(uint32_t fy)
int cnt1 = 0;
void sport_motion(void)
{
cnt1++;
yaw0 = imu660ra_gyro_z;
if (cnt1 >= 50) {
PID_Compute(&angle_pid);
in_gyro = imu660ra_gyro_z; // 陀螺仪输入
in_angle = 0; // 图像远端输入
in_pos = 0; // 图像近端输入
in_speed = encoder_get_count(TIM5_ENCOEDER) / 1024 / 0.01 * 0.25; // 速度输入,m/s
encoder_clear_count(TIM5_ENCOEDER); // 清除计数
PID_Compute(&far_gyro_pid);
if (cnt1 >= 10) {
PID_Compute(&far_angle_pid);
PID_Compute(&speed_pid);
cnt1 = 0;
}
PID_Compute(&gyro_z_pid);
PID_Compute(&near_pos_pid);
if (bt_run_flag == 1) {
by_pwm_power_duty((int32_t)(500 + fy + out_M), (int32_t)(500 + fy - out_M),
(int32_t)(500 + fy + out_M), (int32_t)(500 + fy - out_M));
by_pwm_power_duty((int32_t)(500 + out_pos + out_gyro),
(int32_t)(500 - out_pos - out_gyro),
(int32_t)(500 + out_speed + out_gyro),
(int32_t)(500 + out_speed - out_gyro));
} else {
by_pwm_power_duty(500, 500, 500, 500);
}
if (bt_fly_flag == 0) {
bt_fly = 0;
}
by_pwm_update_duty(bt_fly + 500, bt_fly + 500);
}
/**
* @brief 结构体初始化
@@ -47,14 +83,25 @@ void sport_motion2(uint32_t fy)
void sport_pid_init()
{
PID(&angle_pid, &bt_angle, &out_yaw, &set_x, im_Kp, im_Ki, im_Kd, 0, 0);
PID(&gyro_z_pid, &yaw0, &out_M, &out_yaw, an_Kp, an_Ki, an_Kd, 1, 1);
PID_Init(&angle_pid);
PID_Init(&gyro_z_pid);
PID(&far_angle_pid, &in_angle, &out_angle, &set_angle, an_Kp, an_Ki, an_Kd, 0, 0);
PID(&far_gyro_pid, &in_gyro, &out_gyro, &out_angle, gy_Kp, gy_Ki, gy_Kd, 1, 1);
PID_Init(&far_angle_pid);
PID_Init(&far_gyro_pid);
PID_SetOutputLimits(&angle_pid, -500.0f, 500.0f);
PID_SetOutputLimits(&gyro_z_pid, -400.0f, 400.0f);
PID_SetOutputLimits(&far_angle_pid, -500.0f, 500.0f);
PID_SetOutputLimits(&far_gyro_pid, -500.0f, 500.0f);
PID_SetMode(&gyro_z_pid, 1);
PID_SetMode(&angle_pid, 1);
PID_SetMode(&far_gyro_pid, 1);
PID_SetMode(&far_angle_pid, 1);
PID(&near_pos_pid, &in_pos, &out_pos, &set_pos, po_Kp, po_Ki, po_Kd, 0, 0);
PID(&speed_pid, &in_speed, &out_speed, &out_speed, sp_Kp, sp_Ki, sp_Kd, 1, 1);
PID_Init(&near_pos_pid);
PID_Init(&speed_pid);
PID_SetOutputLimits(&near_pos_pid, -500.0f, 500.0f);
PID_SetOutputLimits(&speed_pid, -400.0f, 400.0f);
PID_SetMode(&near_pos_pid, 1);
PID_SetMode(&speed_pid, 1);
}

View File

@@ -2,17 +2,35 @@
#define _JJ_MOTION_H_
#include "ch32v30x.h"
#include "../3rd-lib/PID-Library/pid.h"
extern PID_TypeDef angle_pid;
extern PID_TypeDef gyro_z_pid;
extern float an_Kp;
extern float an_Ki;
extern float an_Kd;
extern float im_Kp;
extern float im_Ki;
extern float im_Kd;
extern float out_M;
extern float out_yaw;
extern float yaw0;
extern float in_angle;
extern float set_angle;
extern float out_angle;
extern float gy_Kp;
extern float gy_Ki;
extern float gy_Kd;
extern float in_gyro;
extern float out_gyro;
extern float set_gyro;
extern float po_Kp;
extern float po_Ki;
extern float po_Kd;
extern float in_pos;
extern float out_pos;
extern float set_pos;
extern float sp_Kp;
extern float sp_Ki;
extern float sp_Kd;
extern float in_speed;
extern float out_speed;
extern float set_speed;
void sport_pid_init();
void sport_motion2(uint32_t fy);
void sport_motion(void);
#endif

View File

@@ -3,23 +3,71 @@
#include "./page/page.h"
#include "zf_common_headfile.h"
#include "jj_motion.h"
PARAM_INFO Param_Data[DATA_NUM];
soft_iic_info_struct eeprom_param;
TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM];
void jj_param_eeprom_init()
/**
* @brief 参数初始化注册
*
*/
void jj_param_eeprom_init(void)
{
soft_iic_init(&eeprom_param, K24C02_DEV_ADDR, K24C02_SOFT_IIC_DELAY, K24C02_SCL_PIN, K24C02_SDA_PIN); // eeprom初始化
PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P"); // 注冊
PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I"); // 注冊
PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D"); // 注冊
PARAM_REG(imgax_Kp, &im_Kp, EFLOAT, 1, "im_P"); // 注冊
PARAM_REG(imgax_Ki, &im_Ki, EFLOAT, 1, "im_I"); // 注冊
PARAM_REG(imgax_Kd, &im_Kd, EFLOAT, 1, "im_D"); // 注冊
for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) {
PARAM_REG(angle_Kp, &an_Kp, EFLOAT, 1, "an_P:"); // 注冊
PARAM_REG(angle_Ki, &an_Ki, EFLOAT, 1, "an_I:"); // 注冊
PARAM_REG(angle_Kd, &an_Kd, EFLOAT, 1, "an_D:");
soft_iic_read_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4);
PARAM_REG(gyro_Kp, &gy_Kp, EFLOAT, 1, "im_P:"); // 注冊
PARAM_REG(gyro_Ki, &gy_Ki, EFLOAT, 1, "im_I:"); // 注冊
PARAM_REG(gyro_Kd, &gy_Kd, EFLOAT, 1, "im_D:");
PARAM_REG(speed_Kp, &sp_Kp, EFLOAT, 1, "sp_P:"); // 注冊
PARAM_REG(speed_Ki, &sp_Ki, EFLOAT, 1, "sp_I:"); // 注冊
PARAM_REG(speed_Kd, &sp_Kd, EFLOAT, 1, "sp_D:");
PARAM_REG(pos_Kp, &po_Kp, EFLOAT, 1, "po_P:"); // 注冊
PARAM_REG(pos_Ki, &po_Ki, EFLOAT, 1, "po_I:"); // 注冊
PARAM_REG(pos_Kd, &po_Kd, EFLOAT, 1, "po_D:");
PARAM_REG(param_set_speed, &set_speed, EFLOAT, 1, "rate:");
jj_param_read(); // 注冊
}
/**
* @brief 参数写入
*
*/
void jj_param_write(void)
{
for (uint8 i = 0; i < DATA_IN_FLASH_NUM-1; i++) {
switch (Param_Data[i].type) {
case EFLOAT:
iic_buffer[i].f32 = *((float *)(Param_Data[i].p_data));
break;
case EUINT32:
iic_buffer[i].u32 = *((uint32 *)(Param_Data[i].p_data));
break;
case EINT32:
iic_buffer[i].s32 = *((int32 *)(Param_Data[i].p_data));
break;
default:
break;
}
eep_soft_iic_write_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4);
system_delay_ms(10);
}
}
/**
* @brief 参数读出
*
*/
void jj_param_read(void)
{
for (uint8 i = 0; i < DATA_IN_FLASH_NUM-1; i++) {
eep_soft_iic_read_8bit_registers(&eeprom_param, (4 * i) >> 8, (4 * i), (uint8 *)&iic_buffer[i], 4);
switch (Param_Data[i].type) {
case EFLOAT:
*((float *)(Param_Data[i].p_data)) =
@@ -39,27 +87,3 @@ void jj_param_eeprom_init()
system_delay_ms(10);
}
}
/**
* @brief 参数更新
*
*/
void jj_param_update()
{
for (uint8 i = 0; i < DATA_IN_FLASH_NUM; i++) {
switch (Param_Data[i].type) {
case EFLOAT:
iic_buffer[i].f32 = *((float *)(Param_Data[i].p_data));
break;
case EUINT32:
iic_buffer[i].u32 = *((uint32 *)(Param_Data[i].p_data));
break;
case EINT32:
iic_buffer[i].s32 = *((int32 *)(Param_Data[i].p_data));
break;
default:
break;
}
soft_iic_write_8bit_registers(&eeprom_param, 4 * i, (uint8 *)&iic_buffer[i], 4);
system_delay_ms(10);
}
}

View File

@@ -8,21 +8,35 @@
* @brief 注册需调参数
*
*/
#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_,_text_) \
Param_Data[_data_tag_].p_data = (void *)_p_data_; \
Param_Data[_data_tag_].type = _type_; \
Param_Data[_data_tag_].cmd = _cmd_; \
#define PARAM_REG(_data_tag_, _p_data_, _type_, _cmd_, _text_) \
Param_Data[_data_tag_].p_data = (void *)_p_data_; \
Param_Data[_data_tag_].type = _type_; \
Param_Data[_data_tag_].cmd = _cmd_; \
Param_Data[_data_tag_].text = _text_;
typedef enum {
DATA_HEAD = -1,
angle_Kp,
Page1_head = 0,
angle_Kp = Page1_head,
angle_Ki,
angle_Kd,
imgax_Kp,
imgax_Ki,
imgax_Kd,
gyro_Kp,
gyro_Ki,
gyro_Kd,
speed_Kp,
speed_Ki,
speed_Kd,
pos_Kp,
pos_Ki,
pos_Kd,
param_set_speed,
Page2_head,
DATA_IN_FLASH_NUM,
delta_x,
delta_y,
DATA_NUM,
} data_tag_t;
@@ -30,26 +44,27 @@ typedef enum {
EUINT32,
EINT32,
EFLOAT,
}ENUM_TYPE;
} ENUM_TYPE;
typedef union{
typedef union {
uint32_t u32;
int32_t s32;
float f32;
uint8_t u8;
}TYPE_UNION;
} TYPE_UNION;
typedef struct {
void *p_data;
ENUM_TYPE type;
uint8_t cmd;
uint8_t cmd; // 01:仅存储 00仅显示 02传输并显示
char *text;
}PARAM_INFO;
} PARAM_INFO;
extern soft_iic_info_struct eeprom_param;
extern PARAM_INFO Param_Data[DATA_NUM];
extern TYPE_UNION iic_buffer[DATA_IN_FLASH_NUM];
void jj_param_eeprom_init();
void jj_param_update();
void jj_param_show();
void jj_param_eeprom_init(void);
void jj_param_write(void);
void jj_param_read(void);
extern float data7;
#endif

View File

@@ -25,8 +25,6 @@
#include "page.h"
#include "page_ui_widget.h"
#include "gl_headfile.h"
#include "jj_param.h"
#include "jj_motion.h"
#include "jj_blueteeth.h"
@@ -43,26 +41,31 @@ int main(void)
system_delay_init();
debug_init();
encoder_dir_init(TIM5_ENCOEDER, TIM5_ENCOEDER_MAP0_CH1_A0, TIM5_ENCOEDER_MAP0_CH2_A1);
ips200_init(IPS200_TYPE_SPI);
while (imu660ra_init())
;
jj_param_eeprom_init();
jj_bt_init();
by_rb_init();
by_pwm_init();
by_buzzer_init();
by_tiny_frame_init();
// by_buzzer_init();
by_tiny_frame_init();
Page_Init();
sport_pid_init();
pit_ms_init(TIM6_PIT, 10); // 陀螺仪
pit_ms_init(TIM1_PIT, 1); // 运动解算,bianmaqi
printf("ok\r\n");
while (1) {
by_buzzer_run();
Page_Run();
//by_buzzer_run();
jj_bt_run();
/** 测试完成后移除 **/
by_tiny_frame_run();
// by_tiny_frame_pack_send(&frame_now);
system_delay_ms(10);
by_tiny_frame_parse_timer_handle();
/** 测试完成后移除 **/
}
}

View File

@@ -124,7 +124,7 @@ void Page_Run(void)
void Page_Init(void)
{
PAGE_REG(page_menu);
PAGE_REG(page_rtcam);
// PAGE_REG(page_rtcam);
PAGE_REG(page_param);
// PAGE_REG(page_argv);
// PAGE_REG(page_sys);

View File

@@ -19,7 +19,7 @@ enum PageID {
PAGE_NULL = -1,
//......
page_menu,
page_rtcam,
//page_rtcam,
page_param,
// page_argv,
// page_sys,

View File

@@ -2,6 +2,7 @@
#include "page_ui_widget.h"
#include "jj_motion.h"
#include "page.h"
#include <math.h>
#define LINE_HEAD 0
#define LINE_END DATA_NUM - 2
@@ -25,14 +26,14 @@ static void Setup()
{
ips200_clear();
Print_Curser(Curser, Curser_Last, RGB565_PURPLE);
for (int16 i = 0; i < DATA_NUM - 1; i++) {
ips200_show_string(10, i * 18 + 2, Param_Data[i].text);
for (int16 i = 0; i < DATA_IN_FLASH_NUM - 1; i++) {
ips200_show_string(0, i * 18 + 2, Param_Data[i].text);
if (Param_Data[i].type == EINT32)
ips200_show_int(50, i * 18 + 2, *((int32 *)(Param_Data[i].p_data)), 5);
else if (Param_Data[i].type == EFLOAT)
ips200_show_float(50, i * 18 + 2, *((float *)(Param_Data[i].p_data)), 4, 5);
}
ips200_show_int(50, (DATA_NUM-1)* 18 + 2, index_power, 5);
ips200_show_int(50, (DATA_IN_FLASH_NUM-1)* 18 + 2, index_power, 5);
}
@@ -74,7 +75,7 @@ static void Event(page_event event)
Print_Curser(Curser, Curser_Last, RGB565_RED);
return;
} else if (page_event_press_long == event) {
jj_param_update();
jj_param_write();
sport_pid_init();
Page_Shift(page_menu);
return;

View File

@@ -1,91 +0,0 @@
#include "zf_common_headfile.h"
#include "page_ui_widget.h"
#include "page.h"
#define LINE_HEAD 11
#define LINE_END 16
static char Text[] = "RealTime Image";
static int8_t Curser = LINE_HEAD; // 定义光标位置
static int8_t Curser_Last = LINE_HEAD; // 定义光标位置
/***************************************************************************************
*
* 以下为页面模板函数
*
***************************************************************************************/
/**
* @brief 页面初始化事件
* @param 无
* @retval 无
*/
static void Setup()
{
ips200_clear();
Print_Curser(Curser, Curser_Last,RGB565_PURPLE);
}
/**
* @brief 页面退出事件
* @param 无
* @retval 无
*/
static void Exit()
{
}
/**
* @brief 页面循环执行的内容
* @param 无
* @retval 无
*/
static void Loop()
{
Show_Marked_Image();
}
/**
* @brief 页面事件
* @param btn:发出事件的按键
* @param event:事件编号
* @retval 无
*/
static void Event(page_event event)
{
Curser_Last = Curser;
if (page_event_forward == event) {
Curser--; // 光标上移
} else if (page_event_backward == event) {
Curser++; // 光标下移
} else if (page_event_press_short == event) {
} else if (page_event_press_long == event) {
Page_Shift(page_menu);
}
if (Curser < LINE_HEAD) {
Curser = LINE_END;
} else if (Curser > LINE_END) {
Curser = LINE_HEAD;
}
Print_Curser(Curser, Curser_Last,RGB565_PURPLE);
}
/**
* @brief 页面注册函数
*
* @param pageID
*/
void PageRegister_page_rtcam(unsigned char pageID)
{
Page_Register(pageID, Text, Setup, Loop, Exit, Event);
}
/***************************************************************************************
*
* 以下为页面自定义功能函数
*
***************************************************************************************/

View File

@@ -1,6 +1,6 @@
#include "page_ui_widget.h"
#include "zf_common_headfile.h"
#include "gl_data.h"
/**
* @brief 绘制光标
@@ -137,57 +137,57 @@ void Set_Vaule(ITEM *item, uint8_t item_num, float step)
// }
}
void Show_Marked_Image(void)
{
#define IMAGE_DISPLAY_WIDTH (230U)
#define IMAGE_DISPLAY_HEIGHT (146U)
#define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U)
#define START_Y (16U)
// void Show_Marked_Image(void)
// {
// #define IMAGE_DISPLAY_WIDTH (230U)
// #define IMAGE_DISPLAY_HEIGHT (146U)
// #define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U)
// #define START_Y (16U)
float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W));
float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H));
// float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W));
// float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H));
ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0);
ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE);
// 确认边线数组在显示前不会清空
for (uint i = 0; i < PT_MAXLEN; i++) {
//寻近线逆透视后边线数组
uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate);
uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate);
uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate);
uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate);
//寻远线逆透视后边线数组
uint16_t far_l_x = START_X + (uint16_t)((float)pts_far_inv_r[i][1] * horizontal_zoom_rate);
uint16_t far_l_y = START_Y + (uint16_t)((float)pts_far_inv_r[i][0] * vertical_zoom_rate);
uint16_t far_r_x = START_X + (uint16_t)((float)pts_far_inv_l[i][1] * horizontal_zoom_rate);
uint16_t far_r_y = START_Y + (uint16_t)((float)pts_far_inv_l[i][0] * vertical_zoom_rate);
//寻近线中线数组
uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate);
uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate);
uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate);
uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate);
// ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0);
// ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE);
// // 确认边线数组在显示前不会清空
// for (uint i = 0; i < PT_MAXLEN; i++) {
// //寻近线逆透视后边线数组
// uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate);
// uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate);
// uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate);
// uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate);
// //寻远线逆透视后边线数组
// uint16_t far_l_x = START_X + (uint16_t)((float)pts_far_inv_r[i][1] * horizontal_zoom_rate);
// uint16_t far_l_y = START_Y + (uint16_t)((float)pts_far_inv_r[i][0] * vertical_zoom_rate);
// uint16_t far_r_x = START_X + (uint16_t)((float)pts_far_inv_l[i][1] * horizontal_zoom_rate);
// uint16_t far_r_y = START_Y + (uint16_t)((float)pts_far_inv_l[i][0] * vertical_zoom_rate);
// //寻近线中线数组
// uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate);
// uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate);
// uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate);
// uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate);
//近线数组显示
ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED);
ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE);
// //近线数组显示
// ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED);
// ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE);
//远线数组显示
//ips200_draw_rect(far_l_x, far_l_y, far_l_x + 2, far_l_y, RGB565_RED);
//ips200_draw_rect(far_r_x - 2, far_r_y, far_r_x, far_r_y, RGB565_BLUE);
// //远线数组显示
// //ips200_draw_rect(far_l_x, far_l_y, far_l_x + 2, far_l_y, RGB565_RED);
// //ips200_draw_rect(far_r_x - 2, far_r_y, far_r_x, far_r_y, RGB565_BLUE);
//中线数组显示
ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK);
ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE);
// //中线数组显示
// ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK);
// ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE);
// ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
}
#undef IMAGE_DISPLAY_WIDTH
#undef START_X
#undef START_Y
}
// // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// // ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// // ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// }
// #undef IMAGE_DISPLAY_WIDTH
// #undef START_X
// #undef START_Y
// }
uint16_t rgb_gradient(uint16_t i)
{

View File

@@ -6,6 +6,8 @@
#include "by_tiny_frame_parse.h"
#include "by_tiny_frame_pack.h"
#include "jj_motion.h"
void by_tiny_frame_read_write_run(void)
{
// empty
@@ -26,13 +28,22 @@ void by_tiny_frame_read_write_handle(by_tf_parse_frame_t frame_s, uint8_t status
switch (frame_s.cmd) {
case 0x03:
// 添加查询接口,操作完成后应答
frame_pack_s.data = 0XFFFFFFFF; // 示例
// 添加查询接口,操作完成后应答,主机读取,这个是从机
frame_pack_s.data = 0XFFFFFFFF; //it's useless just now
by_tiny_frame_pack_send(&frame_pack_s);
break;
case 0x06:
// 添加写入接口,操作完成后应答
frame_pack_s.data = frame_s.data;
switch (frame_pack_s.reg_addr) {
case 0x00:
in_angle = (float)frame_s.data;
break;
case 0x01:
in_pos = (float)frame_s.data;
break;
default:
break;
}
by_tiny_frame_pack_send(&frame_pack_s);
break;
default:

View File

@@ -1 +1,185 @@
ENTRY( _start )
ENTRY( _start )
__stack_size = 2048;
PROVIDE( _stack_size = __stack_size );
MEMORY
{
/* CH32V30x_D8C - CH32V305RB-CH32V305FB
CH32V30x_D8 - CH32V303CB-CH32V303RB
*/
/*
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 128K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
*/
/* CH32V30x_D8C - CH32V307VC-CH32V307WC-CH32V307RC
CH32V30x_D8 - CH32V303VC-CH32V303RC
FLASH + RAM supports the following configuration
FLASH-192K + RAM-128K
FLASH-224K + RAM-96K
FLASH-256K + RAM-64K
FLASH-288K + RAM-32K
*/
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 288K
}
SECTIONS
{
.init :
{
_sinit = .;
. = ALIGN(4);
KEEP(*(SORT_NONE(.init)))
. = ALIGN(4);
_einit = .;
} >FLASH AT>FLASH
.vector :
{
*(.vector);
. = ALIGN(64);
} >FLASH AT>FLASH
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.rodata)
*(.rodata*)
*(.glue_7)
*(.glue_7t)
*(.gnu.linkonce.t.*)
. = ALIGN(4);
} >FLASH AT>FLASH
.fini :
{
KEEP(*(SORT_NONE(.fini)))
. = ALIGN(4);
} >FLASH AT>FLASH
PROVIDE( _etext = . );
PROVIDE( _eitcm = . );
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH AT>FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH AT>FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH AT>FLASH
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} >FLASH AT>FLASH
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} >FLASH AT>FLASH
.dalign :
{
. = ALIGN(4);
PROVIDE(_data_vma = .);
} >RAM AT>FLASH
.dlalign :
{
. = ALIGN(4);
PROVIDE(_data_lma = .);
} >FLASH AT>FLASH
.data :
{
*(.gnu.linkonce.r.*)
*(.data .data.*)
*(.gnu.linkonce.d.*)
. = ALIGN(8);
PROVIDE( __global_pointer$ = . + 0x800 );
*(.sdata .sdata.*)
*(.sdata2.*)
*(.gnu.linkonce.s.*)
. = ALIGN(8);
*(.srodata.cst16)
*(.srodata.cst8)
*(.srodata.cst4)
*(.srodata.cst2)
*(.srodata .srodata.*)
. = ALIGN(4);
PROVIDE( _edata = .);
} >RAM AT>FLASH
.bss :
{
. = ALIGN(4);
PROVIDE( _sbss = .);
*(.sbss*)
*(.gnu.linkonce.sb.*)
*(.bss*)
*(.gnu.linkonce.b.*)
*(COMMON*)
. = ALIGN(4);
PROVIDE( _ebss = .);
} >RAM AT>FLASH
PROVIDE( _end = _ebss);
PROVIDE( end = . );
.stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size :
{
PROVIDE( _heap_end = . );
. = ALIGN(4);
PROVIDE(_susrstack = . );
. = . + __stack_size;
PROVIDE( _eusrstack = .);
} >RAM
}

View File

@@ -228,7 +228,7 @@ uint8 imu660ra_init(void)
#if IMU660RA_USE_SOFT_IIC
soft_iic_init(&imu660ra_iic_struct, IMU660RA_DEV_ADDR, IMU660RA_SOFT_IIC_DELAY, IMU660RA_SCL_PIN, IMU660RA_SDA_PIN); // 配置 IMU660RA 的 IIC 端口
#else
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, SPI_CS_NULL); // 配置 IMU660RA 的 SPI 端口
spi_init(IMU660RA_SPI, SPI_MODE0, IMU660RA_SPI_SPEED, IMU660RA_SPC_PIN, IMU660RA_SDI_PIN, IMU660RA_SDO_PIN, IMU660RA_CS_PIN); // 配置 IMU660RA 的 SPI 端口
gpio_init(IMU660RA_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 配置 IMU660RA 的 CS 端口
imu660ra_read_register(IMU660RA_CHIP_ID); // 读取一下设备 ID 将设备设置为 SPI 模式
#endif

View File

@@ -62,21 +62,21 @@
#if IMU660RA_USE_SOFT_IIC // 这两段 颜色正常的才是正确的 颜色灰的就是没有用的
//====================================================软件 IIC 驱动====================================================
#define IMU660RA_SOFT_IIC_DELAY (10) // 软件 IIC 的时钟延时周期 数值越小 IIC 通信速率越快
#define IMU660RA_SCL_PIN (E7) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (E8) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
#define IMU660RA_SCL_PIN (B3) // 软件 IIC SCL 引脚 连接 IMU660RA 的 SCL 引脚
#define IMU660RA_SDA_PIN (B5) // 软件 IIC SDA 引脚 连接 IMU660RA 的 SDA 引脚
//====================================================软件 IIC 驱动====================================================
#else
//====================================================硬件 SPI 驱动====================================================
#define IMU660RA_SPI_SPEED (10 * 1000 * 1000) // 硬件 SPI 速率
#define IMU660RA_SPI SPI_3 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI3_MAP0_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI3_MAP0_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI3_MAP0_MISO_B4 // 硬件 SPI MISO 引脚
#define IMU660RA_SPI SPI_1 // 硬件 SPI 号
#define IMU660RA_SPC_PIN SPI1_MAP1_SCK_B3 // 硬件 SPI SCK 引脚
#define IMU660RA_SDI_PIN SPI1_MAP1_MOSI_B5 // 硬件 SPI MOSI 引脚
#define IMU660RA_SDO_PIN SPI1_MAP1_MISO_B4 // 硬件 SPI MISO 引脚
//====================================================硬件 SPI 驱动====================================================
#endif
#define IMU660RA_CS_PIN (C10) // CS 片选引脚
#define IMU660RA_CS_PIN (B6) // CS 片选引脚
#define IMU660RA_CS(x) ((x) ? (gpio_high(IMU660RA_CS_PIN)) : (gpio_low(IMU660RA_CS_PIN)))
typedef enum {

View File

@@ -1,43 +1,43 @@
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是CH32V307VCT6 开源库的一部分
*
* CH32V307VCT6 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款
* 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MounRiver Studio V1.8.1
* 适用平台 CH32V307VCT6
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
* 日期 作者 备注
* 2022-09-15 大W first version
********************************************************************************************************************/
* CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是CH32V307VCT6 开源库的一部分
*
* CH32V307VCT6 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款
* 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MounRiver Studio V1.8.1
* 适用平台 CH32V307VCT6
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
* 日期 作者 备注
* 2022-09-15 大W first version
********************************************************************************************************************/
#include "zf_common_debug.h"
#include "zf_driver_soft_iic.h"
#define SOFT_IIC_SDA_IO_SWITCH (0) // 是否需要 SDA 进行 I/O 切换 0-不需要 1-需要
#define SOFT_IIC_SDA_IO_SWITCH (0) // 是否需要 SDA 进行 I/O 切换 0-不需要 1-需要
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 软件 IIC 延时
@@ -46,12 +46,12 @@
// 使用示例 soft_iic_delay(1);
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
//static void soft_iic_delay (vuint32 delay)
// static void soft_iic_delay (vuint32 delay)
//{
// volatile uint32 count = delay;
// while(count --);
//}
#define soft_iic_delay(x) for(uint32 i = x; i--; )
#define soft_iic_delay(x) for (uint32 i = x; i--;)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 软件 IIC START 信号
@@ -60,16 +60,16 @@
// 使用示例 soft_iic_start(soft_iic_obj);
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_start (soft_iic_info_struct *soft_iic_obj)
static void soft_iic_start(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
gpio_high(soft_iic_obj->scl_pin); // SCL 高电平
gpio_high(soft_iic_obj->sda_pin); // SDA 高电平
gpio_high(soft_iic_obj->scl_pin); // SCL 高电平
gpio_high(soft_iic_obj->sda_pin); // SDA 高电平
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->sda_pin); // SDA 先拉低
gpio_low(soft_iic_obj->sda_pin); // SDA 先拉低
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL 再拉低
gpio_low(soft_iic_obj->scl_pin); // SCL 再拉低
}
//-------------------------------------------------------------------------------------------------------------------
@@ -79,16 +79,16 @@ static void soft_iic_start (soft_iic_info_struct *soft_iic_obj)
// 使用示例 soft_iic_stop(soft_iic_obj);
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj)
static void soft_iic_stop(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
gpio_low(soft_iic_obj->sda_pin); // SDA 低电平
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_low(soft_iic_obj->sda_pin); // SDA 低电平
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL 先拉高
gpio_high(soft_iic_obj->scl_pin); // SCL 先拉高
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->sda_pin); // SDA 再拉高
gpio_high(soft_iic_obj->sda_pin); // SDA 再拉高
soft_iic_delay(soft_iic_obj->delay);
}
@@ -100,25 +100,22 @@ static void soft_iic_stop (soft_iic_info_struct *soft_iic_obj)
// 使用示例 soft_iic_send_ack(soft_iic_obj, 1);
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack)
static void soft_iic_send_ack(soft_iic_info_struct *soft_iic_obj, uint8 ack)
{
zf_assert(soft_iic_obj != NULL);
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
if(ack)
{
gpio_high(soft_iic_obj->sda_pin); // SDA 拉高
}
else
{
gpio_low(soft_iic_obj->sda_pin); // SDA 拉低
if (ack) {
gpio_high(soft_iic_obj->sda_pin); // SDA 拉高
} else {
gpio_low(soft_iic_obj->sda_pin); // SDA 拉低
}
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL 拉高
gpio_high(soft_iic_obj->scl_pin); // SCL 拉高
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL 拉低
gpio_high(soft_iic_obj->sda_pin); // SDA 拉高
gpio_low(soft_iic_obj->scl_pin); // SCL 拉低
gpio_high(soft_iic_obj->sda_pin); // SDA 拉高
}
//-------------------------------------------------------------------------------------------------------------------
@@ -128,25 +125,24 @@ static void soft_iic_send_ack (soft_iic_info_struct *soft_iic_obj, uint8 ack)
// 使用示例 soft_iic_wait_ack(soft_iic_obj);
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
static uint8 soft_iic_wait_ack(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_high(soft_iic_obj->sda_pin); // SDA 高电平 释放 SDA
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_high(soft_iic_obj->sda_pin); // SDA 高电平 释放 SDA
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN);
#endif
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL 高电平
gpio_high(soft_iic_obj->scl_pin); // SCL 高电平
soft_iic_delay(soft_iic_obj->delay);
if(gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin))
{
if (gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin)) {
temp = 1;
}
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPO, GPO_OPEN_DTAIN);
#endif
@@ -162,22 +158,21 @@ static uint8 soft_iic_wait_ack (soft_iic_info_struct *soft_iic_obj)
// 返回参数 uint8 ACK 状态
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8 data)
static uint8 soft_iic_send_data(soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0x80;
while(temp)
{
// gpio_set_level(soft_iic_obj->sda_pin, data & temp);
while (temp) {
// gpio_set_level(soft_iic_obj->sda_pin, data & temp);
((data & temp) ? (gpio_high(soft_iic_obj->sda_pin)) : (gpio_low(soft_iic_obj->sda_pin)));
temp >>= 1;
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL 拉高
gpio_high(soft_iic_obj->scl_pin); // SCL 拉高
soft_iic_delay(soft_iic_obj->delay);
gpio_low(soft_iic_obj->scl_pin); // SCL 拉低
gpio_low(soft_iic_obj->scl_pin); // SCL 拉低
}
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1 );
return ((soft_iic_wait_ack(soft_iic_obj) == 1) ? 0 : 1);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -187,27 +182,26 @@ static uint8 soft_iic_send_data (soft_iic_info_struct *soft_iic_obj, const uint8
// 返回参数 uint8 数据
// 备注信息 内部调用
//-------------------------------------------------------------------------------------------------------------------
static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
static uint8 soft_iic_read_data(soft_iic_info_struct *soft_iic_obj, uint8 ack)
{
zf_assert(soft_iic_obj != NULL);
uint8 data = 0x00;
uint8 temp = 8;
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->sda_pin); // SDA 高电平 释放 SDA
gpio_high(soft_iic_obj->sda_pin); // SDA 高电平 释放 SDA
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPI, GPI_FLOATING_IN);
#endif
while(temp --)
{
gpio_low(soft_iic_obj->scl_pin); // SCL 拉低
while (temp--) {
gpio_low(soft_iic_obj->scl_pin); // SCL 拉低
soft_iic_delay(soft_iic_obj->delay);
gpio_high(soft_iic_obj->scl_pin); // SCL 拉高
gpio_high(soft_iic_obj->scl_pin); // SCL 拉高
soft_iic_delay(soft_iic_obj->delay);
data = ((data << 1) | gpio_get_level((gpio_pin_enum)soft_iic_obj->sda_pin));
}
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
gpio_low(soft_iic_obj->scl_pin); // SCL 低电平
#if SOFT_IIC_SDA_IO_SWITCH
gpio_set_dir(soft_iic_obj->sda_pin, GPO, GPO_OPEN_DTAIN);
#endif
@@ -224,7 +218,7 @@ static uint8 soft_iic_read_data (soft_iic_info_struct *soft_iic_obj, uint8 ack)
// 使用示例 soft_iic_write_8bit_register(soft_iic_obj, 0x01);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data)
void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -242,15 +236,14 @@ void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data)
// 使用示例 soft_iic_write_8bit_array(soft_iic_obj, data, 6);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len)
void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(len --)
{
soft_iic_send_data(soft_iic_obj, *data ++);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}
@@ -263,7 +256,7 @@ void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8
// 使用示例 soft_iic_write_16bit(soft_iic_obj, 0x0101);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data)
void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -282,16 +275,15 @@ void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data
// 使用示例 soft_iic_write_16bit_array(soft_iic_obj, data, 6);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len)
void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(len --)
{
while (len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF));
}
soft_iic_stop(soft_iic_obj);
}
@@ -305,7 +297,7 @@ void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint1
// 使用示例 soft_iic_write_8bit_register(soft_iic_obj, 0x01, 0x01);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data)
void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -325,16 +317,15 @@ void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin
// 使用示例 soft_iic_write_8bit_registers(soft_iic_obj, 0x01, data, 6);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len)
void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name);
while(len --)
{
soft_iic_send_data(soft_iic_obj, *data ++);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}
@@ -348,7 +339,7 @@ void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
// 使用示例 soft_iic_write_16bit_register(soft_iic_obj, 0x0101, 0x0101);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data)
void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -370,7 +361,7 @@ void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const ui
// 使用示例 soft_iic_write_16bit_registers(soft_iic_obj, 0x0101, data, 6);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len)
void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -378,10 +369,9 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, (uint8)((register_name & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF));
while(len--)
{
while (len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*data++ & 0x00FF));
}
soft_iic_stop(soft_iic_obj);
}
@@ -393,7 +383,7 @@ void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const u
// 使用示例 soft_iic_read_8bit(soft_iic_obj);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj)
uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -414,15 +404,14 @@ uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj)
// 使用示例 soft_iic_read_8bit_array(soft_iic_obj, data, 8);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len)
void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
*data ++ = soft_iic_read_data(soft_iic_obj, len == 0);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
@@ -435,14 +424,14 @@ void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data,
// 使用示例 soft_iic_read_16bit(soft_iic_obj);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj)
uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj)
{
zf_assert(soft_iic_obj != NULL);
uint16 temp = 0;
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
temp = soft_iic_read_data(soft_iic_obj, 0);
temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1));
temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1));
soft_iic_stop(soft_iic_obj);
return temp;
}
@@ -456,17 +445,16 @@ uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj)
// 使用示例 soft_iic_read_16bit_array(soft_iic_obj, data, 8);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len)
void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
while (len--) {
*data = soft_iic_read_data(soft_iic_obj, 0);
*data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0));
data ++;
*data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0));
data++;
}
soft_iic_stop(soft_iic_obj);
}
@@ -479,7 +467,7 @@ void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data
// 使用示例 soft_iic_read_8bit_register(soft_iic_obj, 0x01);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -503,7 +491,7 @@ uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uin
// 使用示例 soft_iic_read_8bit_registers(soft_iic_obj, 0x01, data, 8);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len)
void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -512,9 +500,8 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin
soft_iic_send_data(soft_iic_obj, register_name);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
*data ++ = soft_iic_read_data(soft_iic_obj, len == 0);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
@@ -527,7 +514,7 @@ void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uin
// 使用示例 soft_iic_read_16bit_register(soft_iic_obj, 0x0101);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name)
uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint16 temp = 0;
@@ -538,7 +525,7 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
temp = soft_iic_read_data(soft_iic_obj, 0);
temp = ((temp << 8)| soft_iic_read_data(soft_iic_obj, 1));
temp = ((temp << 8) | soft_iic_read_data(soft_iic_obj, 1));
soft_iic_stop(soft_iic_obj);
return temp;
}
@@ -553,7 +540,7 @@ uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const u
// 使用示例 soft_iic_read_16bit_registers(soft_iic_obj, 0x0101, data, 8);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len)
void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
@@ -563,11 +550,10 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
soft_iic_send_data(soft_iic_obj, (uint8)(register_name & 0x00FF));
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(len --)
{
while (len--) {
*data = soft_iic_read_data(soft_iic_obj, 0);
*data = ((*data << 8)| soft_iic_read_data(soft_iic_obj, len == 0));
data ++;
*data = ((*data << 8) | soft_iic_read_data(soft_iic_obj, len == 0));
data++;
}
soft_iic_stop(soft_iic_obj);
}
@@ -583,25 +569,22 @@ void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const ui
// 使用示例 iic_transfer_8bit_array(IIC_1, addr, data, 64, data, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len)
void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(write_data != NULL);
zf_assert(read_data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(write_len --)
{
soft_iic_send_data(soft_iic_obj, *write_data ++);
while (write_len--) {
soft_iic_send_data(soft_iic_obj, *write_data++);
}
if(read_len)
{
if (read_len) {
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(read_len --)
{
*read_data ++ = soft_iic_read_data(soft_iic_obj, read_len == 0);
while (read_len--) {
*read_data++ = soft_iic_read_data(soft_iic_obj, read_len == 0);
}
}
soft_iic_stop(soft_iic_obj);
@@ -618,27 +601,24 @@ void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uin
// 使用示例 iic_transfer_16bit_array(IIC_1, addr, data, 64, data, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len)
void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(write_data != NULL);
zf_assert(read_data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
while(write_len--)
{
while (write_len--) {
soft_iic_send_data(soft_iic_obj, (uint8)((*write_data & 0xFF00) >> 8));
soft_iic_send_data(soft_iic_obj, (uint8)(*write_data ++ & 0x00FF));
soft_iic_send_data(soft_iic_obj, (uint8)(*write_data++ & 0x00FF));
}
if(read_len)
{
if (read_len) {
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while(read_len --)
{
while (read_len--) {
*read_data = soft_iic_read_data(soft_iic_obj, 0);
*read_data = ((*read_data << 8)| soft_iic_read_data(soft_iic_obj, read_len == 0));
read_data ++;
*read_data = ((*read_data << 8) | soft_iic_read_data(soft_iic_obj, read_len == 0));
read_data++;
}
}
soft_iic_stop(soft_iic_obj);
@@ -653,7 +633,7 @@ void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const ui
// 使用示例 soft_iic_sccb_write_register(soft_iic_obj, 0x01, 0x01);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data)
void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data)
{
zf_assert(soft_iic_obj != NULL);
soft_iic_start(soft_iic_obj);
@@ -671,7 +651,7 @@ void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uin
// 使用示例 soft_iic_sccb_read_register(soft_iic_obj, 0x01);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name)
{
zf_assert(soft_iic_obj != NULL);
uint8 temp = 0;
@@ -698,14 +678,42 @@ uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uin
// 使用示例 soft_iic_init(&soft_iic_obj, addr, 100, B6, B7);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin)
void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(scl_pin != sda_pin); // 醒醒! scl_pin 与 sda_pin 怎么能填同一个引脚?
zf_assert(scl_pin != sda_pin); // 醒醒! scl_pin 与 sda_pin 怎么能填同一个引脚?
soft_iic_obj->scl_pin = scl_pin;
soft_iic_obj->sda_pin = sda_pin;
soft_iic_obj->addr = addr;
soft_iic_obj->delay = delay;
gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 提取对应IO索引 AF功能编码
gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // 提取对应IO索引 AF功能编码
soft_iic_obj->addr = addr;
soft_iic_obj->delay = delay;
gpio_init(scl_pin, GPO, GPIO_HIGH, GPO_PUSH_PULL); // 提取对应IO索引 AF功能编码
gpio_init(sda_pin, GPO, GPIO_HIGH, GPO_OPEN_DTAIN); // 提取对应IO索引 AF功能编码
}
void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name_h);
soft_iic_send_data(soft_iic_obj, register_name_l);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1 | 0x01);
while (len--) {
*data++ = soft_iic_read_data(soft_iic_obj, len == 0);
}
soft_iic_stop(soft_iic_obj);
}
void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len)
{
zf_assert(soft_iic_obj != NULL);
zf_assert(data != NULL);
soft_iic_start(soft_iic_obj);
soft_iic_send_data(soft_iic_obj, soft_iic_obj->addr << 1);
soft_iic_send_data(soft_iic_obj, register_name_h);
soft_iic_send_data(soft_iic_obj, register_name_l);
while (len--) {
soft_iic_send_data(soft_iic_obj, *data++);
}
soft_iic_stop(soft_iic_obj);
}

View File

@@ -1,83 +1,84 @@
/*********************************************************************************************************************
* CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是CH32V307VCT6 开源库的一部分
*
* CH32V307VCT6 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款
* 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MounRiver Studio V1.8.1
* 适用平台 CH32V307VCT6
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
* 日期 作者 备注
* 2022-09-15 大W first version
********************************************************************************************************************/
* CH32V307VCT6 Opensourec Library 即CH32V307VCT6 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是CH32V307VCT6 开源库的一部分
*
* CH32V307VCT6 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPLGNU General Public License即 GNU通用公共许可证的条款
* 即 GPL 的第3版即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 MounRiver Studio V1.8.1
* 适用平台 CH32V307VCT6
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
* 日期 作者 备注
* 2022-09-15 大W first version
********************************************************************************************************************/
#ifndef _zf_driver_soft_iic_h_
#define _zf_driver_soft_iic_h_
#include "zf_driver_gpio.h"
typedef struct
{
gpio_pin_enum scl_pin; // 用于记录对应的引脚编号
gpio_pin_enum sda_pin; // 用于记录对应的引脚编号
uint8 addr; // 器件地址 七位地址模式
uint32 delay; // 模拟 IIC 软延时时长
}soft_iic_info_struct;
gpio_pin_enum scl_pin; // 用于记录对应的引脚编号
gpio_pin_enum sda_pin; // 用于记录对应的引脚编号
uint8 addr; // 器件地址 七位地址模式
uint32 delay; // 模拟 IIC 软延时时长
} soft_iic_info_struct;
void soft_iic_write_8bit (soft_iic_info_struct *soft_iic_obj, const uint8 data);
void soft_iic_write_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len);
void soft_iic_write_8bit(soft_iic_info_struct *soft_iic_obj, const uint8 data);
void soft_iic_write_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *data, uint32 len);
void soft_iic_write_16bit (soft_iic_info_struct *soft_iic_obj, const uint16 data);
void soft_iic_write_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len);
void soft_iic_write_16bit(soft_iic_info_struct *soft_iic_obj, const uint16 data);
void soft_iic_write_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *data, uint32 len);
void soft_iic_write_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data);
void soft_iic_write_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len);
void soft_iic_write_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 data);
void soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, const uint8 *data, uint32 len);
void soft_iic_write_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data);
void soft_iic_write_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len);
void soft_iic_write_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 data);
void soft_iic_write_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, const uint16 *data, uint32 len);
uint8 soft_iic_read_8bit (soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_8bit_array (soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len);
uint8 soft_iic_read_8bit(soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_8bit_array(soft_iic_info_struct *soft_iic_obj, uint8 *data, uint32 len);
uint16 soft_iic_read_16bit (soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_16bit_array (soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len);
uint16 soft_iic_read_16bit(soft_iic_info_struct *soft_iic_obj);
void soft_iic_read_16bit_array(soft_iic_info_struct *soft_iic_obj, uint16 *data, uint32 len);
uint8 soft_iic_read_8bit_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_read_8bit_registers (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len);
uint8 soft_iic_read_8bit_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 *data, uint32 len);
uint16 soft_iic_read_16bit_register (soft_iic_info_struct *soft_iic_obj, const uint16 register_name);
void soft_iic_read_16bit_registers (soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len);
uint16 soft_iic_read_16bit_register(soft_iic_info_struct *soft_iic_obj, const uint16 register_name);
void soft_iic_read_16bit_registers(soft_iic_info_struct *soft_iic_obj, const uint16 register_name, uint16 *data, uint32 len);
void soft_iic_transfer_8bit_array (soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len);
void soft_iic_transfer_16bit_array (soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len);
void soft_iic_transfer_8bit_array(soft_iic_info_struct *soft_iic_obj, const uint8 *write_data, uint32 write_len, uint8 *read_data, uint32 read_len);
void soft_iic_transfer_16bit_array(soft_iic_info_struct *soft_iic_obj, const uint16 *write_data, uint32 write_len, uint16 *read_data, uint32 read_len);
void soft_iic_sccb_write_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data);
uint8 soft_iic_sccb_read_register (soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_sccb_write_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name, uint8 data);
uint8 soft_iic_sccb_read_register(soft_iic_info_struct *soft_iic_obj, const uint8 register_name);
void soft_iic_init (soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin);
void soft_iic_init(soft_iic_info_struct *soft_iic_obj, uint8 addr, uint32 delay, gpio_pin_enum scl_pin, gpio_pin_enum sda_pin);
void eep_soft_iic_write_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, const uint8 *data, uint32 len);
void eep_soft_iic_read_8bit_registers(soft_iic_info_struct *soft_iic_obj, const uint8 register_name_h, const uint8 register_name_l, uint8 *data, uint32 len);
#endif