TMF8801激光测距芯片驱动程序

news/2024/10/18 7:51:47/

TMF8801激光测距芯片驱动程序

一、芯片介绍

TMF8801是2019年艾迈斯半导体推出的用于测量直接飞行时间(dToF)距离的集成式模块,号称全球体积最小(表示怀疑,不过体积确实非常小)。这个传感器可以精准测量0.02m至2.5m范围,我实际测试在较亮的环境下能达到2.4m(我站在2.4m的位置,1s检测一次,测试了几分钟,大概有百分五十的概率能检测到),暗环境下能够测量到2.5m,2m以内基本都能检测到。相比于我们熟知的VL53L0X测距模块,测量距离和精度确实要好很多。关于芯片的介绍我就不多说了,感兴趣的同学可以去查一下。

二、引脚定义

在这里插入图片描述

引脚号引脚名称信号类型描述
1VCCD电源供电电压3V;接一个0.1uF电容到地
2GNDC电源负极
3GPIO0IO通用IO口,如果不用,请保持开路
4INT输出中断输出,如果不用,请接到地
5SCL输入IIC时钟引脚
6SDAIOIIC数据引脚
7VDD电源供电电压3V;接一个0.1uF电容到地
8GND电源负极
9EN输入启用输入有效高电平;设置为低电平强制器件关闭,所有内存内容都会丢失;如果未使用,则连接至VDD
10GPIO1IO通用IO口,如果不用,请保持开路
11GNDV电源负极
12VDDV电源供电电压3V;接一个0.1uF电容到地

三、驱动流程

1、IIC引脚初始化
2、模块初始化

1)复位(寄存器地址:0xE0)
2)初始化下载 HW(寄存器地址:0x08)
3)设置写 RAM 地址(寄存器首地址:0x08)
4)写 RAM数据(寄存器首地址:0x08)
5)重映射 RAM 到地址 0 并复位
6)获取 TMF8801 信息
6.1)读取APP0 主版本号(寄存器地址:0x01)
6.2)读取次版本号和修订版本号(寄存器地址:0x12)
6.3)读取芯片修订 ID(寄存器地址:0xE4)
6.4)生成序列号(寄存器地址:0x10)
6.5)读取序列号(寄存器地址:0x1E)
7)使能检测中断
3、配置APP0
写入校准数据(寄存器地址:0x20)
4、检测中断
5、获取结果

四、驱动程序

驱动的程序我这里以stm32的为例
1、IIC驱动部分(用IO口模拟IIC时序)

#include "tmf8801_iic.h"
#include "math.h"#define TMF8001_Address                  0x82//器件地址/********************************************************** 名称: iic_delay_us* 功能: 用于IIC通讯延时* 形参: 无        * 返回: 无* 说明: 直接用软件延时,延时的时间和主频有关,如要移植到别的单片机* 	    可能需要修改i的次数以确保延时时间足够*********************************************************/
void iic_delay_us(u8 time)
{u8 i;while(time --){	for(i=0;i<6;i++);}
}/********************************************************** 名称: TMF8001_I2C_Init* 功能: I2C引脚初始化* 形参: 无        * 返回: 无* 说明: 无  *********************************************************/
void TMF8001_I2C_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(TMF8001_I2C_RCC, ENABLE);	GPIO_InitStructure.GPIO_Pin = TMF8001_I2C_SCL_PIN | TMF8001_I2C_SDA_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(TMF8001_I2C_PORT, &GPIO_InitStructure);TMF8001_I2C_SCL_HIGHT;TMF8001_I2C_SDA_HIGHT;
}/********************************************************** 名称: TMF8001_I2C_Start* 功能: 模拟I2C的起始条件* 形参: 无        * 返回: 无* 说明: 标准的I2C协议I2C起始条件:SCL为高时,SDA由高变低             *********************************************************/
void TMF8001_I2C_Start(void)
{TMF8001_I2C_SDA_Out;TMF8001_I2C_SCL_HIGHT;TMF8001_I2C_SDA_HIGHT;iic_delay_us(4);TMF8001_I2C_SDA_LOW;//标准的I2C协议I2C起始条件:SCL为高时,SDA由高变低iic_delay_us(4);TMF8001_I2C_SCL_LOW;//钳住I2C总线,准备发送或接收数据 
}/********************************************************** 名称: TMF8001_I2C_Stop* 功能: 模拟I2C的停止条件* 形参: 无        * 返回: 无* 说明: 标准的I2C协议I2C停止条件:SCL为高时,SDA由低变高             *********************************************************/
void TMF8001_I2C_Stop(void)
{TMF8001_I2C_SDA_Out;TMF8001_I2C_SCL_LOW;TMF8001_I2C_SDA_LOW;iic_delay_us(4);TMF8001_I2C_SCL_HIGHT;TMF8001_I2C_SDA_HIGHT;iic_delay_us(4);
}/********************************************************** 名称: TMF8001_I2C_Wait_Ack* 功能: 等待应答信号* 形参: 无        * 返回: 0:接收成功 1:接收失败* 说明: 无       *********************************************************/
u8 TMF8001_I2C_Wait_Ack(void)
{u8 ucErrTime=0;TMF8001_I2C_SDA_In;TMF8001_I2C_SDA_HIGHT;iic_delay_us(4);	   TMF8001_I2C_SCL_HIGHT;iic_delay_us(4);	 while(Get_TMF8001_I2C_SDA){ucErrTime ++;if(ucErrTime > 250){TMF8001_I2C_Stop();return 1;}}TMF8001_I2C_SCL_LOW;return 0;
}/********************************************************** 名称: TMF8001_I2C_Ack* 功能: 模拟I2C的应答* 形参: 无        * 返回: 无* 说明: 根据标准的I2C协议,从I2C从器件读1个byte后也就是在第9个CLK的时候,I2C主设备的SDA要变低表示I2C主器件已经接收完一个字节byte,I2C从器件继续发送数据              *********************************************************/
void TMF8001_I2C_Ack(void)
{TMF8001_I2C_SCL_LOW;TMF8001_I2C_SDA_Out;TMF8001_I2C_SDA_LOW;iic_delay_us(4);TMF8001_I2C_SCL_HIGHT;iic_delay_us(4);TMF8001_I2C_SCL_LOW;
}/********************************************************** 名称: TMF8001_I2C_NAck* 功能: 模拟I2C的不应答* 形参: 无        * 返回: 无* 说明:            *********************************************************/
void TMF8001_I2C_NAck(void)
{TMF8001_I2C_SCL_LOW;TMF8001_I2C_SDA_Out;TMF8001_I2C_SDA_HIGHT;iic_delay_us(4);TMF8001_I2C_SCL_HIGHT;iic_delay_us(4);TMF8001_I2C_SCL_LOW;
}/********************************************************** 名称: TMF8001_I2C_Send_Byte* 功能: 模拟I2C发送一个字节* 形参: Byte        * 返回: 无* 说明:              *********************************************************/
void TMF8001_I2C_Send_Byte(u8 Byte)
{u8 bit;TMF8001_I2C_SDA_Out;TMF8001_I2C_SCL_LOW;for(bit=0;bit<8;bit++){if((Byte&0x80)>>7){TMF8001_I2C_SDA_HIGHT;}else {TMF8001_I2C_SDA_LOW;}Byte<<=1;//iic_delay_us(4);TMF8001_I2C_SCL_HIGHT;iic_delay_us(4);TMF8001_I2C_SCL_LOW;iic_delay_us(4);}
}/************************************************* 名称: TMF8001_I2C_Read_Byte* 功能: 模拟I2C读取一个字节* 形参: 无       * 返回: 1个字节* 说明: 无              **************************************************/
u8 TMF8001_I2C_Read_Byte(u8 ack)
{u8 bit,Receive_Byte=0;TMF8001_I2C_SDA_In;for(bit=0;bit<8;bit++){TMF8001_I2C_SCL_LOW;iic_delay_us(4);TMF8001_I2C_SCL_HIGHT;Receive_Byte<<=1;//把上一时刻的值左移一位if(Get_TMF8001_I2C_SDA){Receive_Byte|=0x01;}iic_delay_us(4);}if(!ack){TMF8001_I2C_NAck();}else{TMF8001_I2C_Ack();}return Receive_Byte;
}/******************************************************************************** 名称: I2C_TMF8001_WriteByte* 功能: 通过I2C协议向TMF8001写入1个字节* 形参: Data_com -> 要写入的数据* 返回: 无* 说明: 无 ******************************************************************************/
void I2C_TMF8001_WriteByte(u8 Addr, u8 *Data_Com, u8 Len)
{u8 i;TMF8001_I2C_Start();	/*I2C Start*/TMF8001_I2C_Send_Byte(TMF8001_Address);	/*Send TMF8001 Driver  address*/TMF8001_I2C_Ack();TMF8001_I2C_Send_Byte(Addr);	/*Send byte*/TMF8001_I2C_Ack();for(i=0;i<Len;i++){TMF8001_I2C_Send_Byte(Data_Com[i]);	/*Send byte*/TMF8001_I2C_Ack();}TMF8001_I2C_Stop();	/*I2C Stop*/
}/******************************************************************************** 名称: I2C_TMF8001_ReadByte* 功能: 通过I2C协议从TMF8001读取6个字节* 形参: Addr -> 写入寄存器地址 *Read_Buf -> 存数据的数组地址* 返回: 1个字节数据* 说明: 无 ******************************************************************************/
u8 I2C_TMF8001_ReadByte(u8 Addr, u8 *Read_Buf, u8 Len)
{	u8 i;TMF8001_I2C_Start();/*I2C start*/TMF8001_I2C_Send_Byte(TMF8001_Address);	/*Send TMF8001 Driver  address*/TMF8001_I2C_Ack();TMF8001_I2C_Send_Byte(Addr);	/*Send byte*/TMF8001_I2C_Ack();TMF8001_I2C_Start();/*I2C start*/TMF8001_I2C_Send_Byte(TMF8001_Address|0x01);/*Send ReadCommand*/TMF8001_I2C_Ack();for(i=0;i<Len;i++){if(i == (Len - 1)){Read_Buf[i] = TMF8001_I2C_Read_Byte(0);/*I2C ReadByte*/}else{Read_Buf[i] = TMF8001_I2C_Read_Byte(1);/*I2C ReadByte*/}}TMF8001_I2C_Stop();/*I2C Stop*/
//	printf("Read_Buf0: %02X ",Read_Buf[0]);
}

2、TMF8001驱动部分

#include "tmf8801.h"
#include "tmf8801_iic.h"//TMF8x01 寄存器地址定义 
#define TMF8x01_REGADDR_COMMAND         0x10
#define TMF8x01_REGADDR_STATUS          0x1D       
#define TMF8x01_REGADDR_CONTENTS        0x1E
#define TMF8x01_REGADDR_TID             0x1F
#define TMF8x01_REGADDR_ENABLE          0xE0//RAM数据缓存
const uint8_t app_buf[] = {
0x6D, 0xC9, 0x41, 0x85, 0x3D, 0x15, 0xAA, 0x51, 0xF4, 0xD2, 0x9E, 0xA8, 0xA7, 0xAC, 0x77, 0xE9,
0xF9, 0xEC, 0x20, 0x24, 0x63, 0xB8, 0xF1, 0xA5, 0x0B, 0xA7, 0x65, 0xB4, 0x32, 0xB8, 0x18, 0xD7,
0x5C, 0xF4, 0x00, 0xD0, 0xDC, 0xFD, 0xD9, 0xD5, 0x98, 0xAF, 0x6F, 0x40, 0x96, 0x0A, 0xB2, 0xFA,
0x9E, 0x13, 0x44, 0xF8, 0x6F, 0x5B, 0xF1, 0x65, 0xA6, 0x88, 0x67, 0xD7, 0x75, 0x0A, 0x4A, 0x7F,
0x81, 0x9C, 0xF6, 0x91, 0x7B, 0xCF, 0xF2, 0x7C, 0xC1, 0x83, 0xF3, 0xA5, 0xF6, 0xEB, 0xD2, 0xFA,
0x14, 0x01, 0x7B, 0x81, 0x6D, 0xA9, 0x31, 0x0B, 0x79, 0x14, 0x9D, 0xFE, 0xAA, 0x24, 0x5A, 0x5A,
0x77, 0xF0, 0x00, 0x00, 0x88, 0x76, 0xBA, 0x20, 0xD1, 0x33, 0xB2, 0x66, 0xCF, 0xD9, 0x67, 0xDD,
0x4C, 0xF8, 0x5E, 0xAD, 0x6C, 0xF5, 0xF4, 0x7A, 0x60, 0x3D, 0xFB, 0x05, 0x4B, 0xB9, 0x26, 0xA5,
0xDF, 0xF1, 0xE3, 0xC7, 0x7E, 0x55, 0xEC, 0x50, 0x9C, 0xE3, 0xC9, 0xDA, 0x91, 0xAE, 0x5E, 0x9F,
0x13, 0x0E, 0x96, 0x52, 0x27, 0x8E, 0x06, 0x22, 0x63, 0x69, 0xAC, 0x61, 0x9C, 0x23, 0xF1, 0x38,
0x5F, 0x3A, 0x1D, 0x03, 0xBD, 0xCA, 0xDA, 0x42, 0xBB, 0x21, 0x55, 0x35, 0xC8, 0x30, 0x50, 0x6D,
0x09, 0xBF, 0x32, 0x39, 0x7D, 0xF1, 0x4B, 0x9C, 0x09, 0x33, 0xF0, 0xA1, 0xBD, 0x1B, 0x89, 0xCD,
0xFC, 0x75, 0xCD, 0x92, 0x52, 0x8E, 0xA8, 0xD1, 0xD2, 0xED, 0x6B, 0x63, 0x41, 0x38, 0x0F, 0x22,
0xFF, 0xA6, 0x6A, 0xE3, 0xE0, 0x78, 0x83, 0xF5, 0x95, 0xC2, 0x88, 0x77, 0x5C, 0x4B, 0x9C, 0xAD,
0x32, 0xE4, 0x39, 0x85, 0xBF, 0x4E, 0x2C, 0x21, 0xCF, 0x19, 0x9D, 0x93, 0xFD, 0x9B, 0xFA, 0x15,
0x2D, 0xB5, 0x7C, 0xD1, 0x43, 0x83, 0x58, 0x4F, 0x8C, 0x66, 0x3E, 0xAA, 0xD2, 0xD2, 0x66, 0xA1,
0x56, 0x80, 0xD8, 0xF1, 0xED, 0x1F, 0x4D, 0x45, 0x06, 0x64, 0x9A, 0x02, 0xF9, 0x69, 0x6B, 0xCE,
0xA0, 0x84, 0xD2, 0x67, 0x85, 0xE1, 0xE7, 0x8D, 0xE2, 0xEF, 0x11, 0x5B, 0xDD, 0x27, 0x5A, 0x9E,
0x34, 0x9D, 0x66, 0x66, 0xE3, 0xA5, 0xD4, 0xC7, 0x6E, 0x80, 0x0D, 0xC6, 0x9C, 0x36, 0x86, 0x19,
0x32, 0xD0, 0x16, 0x67, 0x45, 0x2D, 0xE5, 0x09, 0x89, 0xC5, 0x80, 0x0F, 0x71, 0x2C, 0x9F, 0xB1,
0x38, 0x4A, 0x0B, 0xFD, 0x6F, 0x27, 0x69, 0xCD, 0x8B, 0x0F, 0x4B, 0x62, 0xF0, 0xC5, 0xC1, 0x96,
0xFD, 0xD2, 0x06, 0xCE, 0x01, 0xC4, 0x16, 0x84, 0x42, 0xEA, 0x01, 0x06, 0x16, 0xD9, 0x2C, 0x10,
0x7B, 0x6D, 0x95, 0xA0, 0x3C, 0x90, 0x7E, 0x83, 0x91, 0xF0, 0x9B, 0x51, 0x2E, 0xD8, 0x87, 0x81,
0x69, 0x54, 0x9C, 0xD9, 0x7F, 0x99, 0x11, 0x65, 0x85, 0xAA, 0xC7, 0x65, 0xDA, 0x00, 0xE4, 0xDA,
0x94, 0xDD, 0xCB, 0xEE, 0x04, 0xD6, 0xB5, 0xBD, 0x2D, 0x30, 0xFC, 0x20, 0x4F, 0x15, 0x7C, 0x9E,
0xD3, 0x2F, 0x39, 0xFC, 0xA6, 0xFB, 0xB5, 0x83, 0xD1, 0xDE, 0x43, 0x3A, 0x72, 0x51, 0x4A, 0xE2,
0x15, 0xCC, 0x63, 0x70, 0x88, 0x72, 0x52, 0x84, 0x86, 0x35, 0x05, 0xCF, 0xEF, 0x5D, 0x51, 0xFA,
0x95, 0x39, 0x0D, 0x37, 0xA1, 0xDD, 0x51, 0xDF, 0x54, 0x39, 0xC6, 0xFB, 0x76, 0x4C, 0x0B, 0xD6,
0x62, 0xEA, 0x84, 0x95, 0x56, 0xDF, 0xF8, 0x7F, 0xAA, 0x76, 0xDE, 0xDE, 0x5E, 0xA0, 0xA6, 0x56,
0x93, 0x31, 0xB3, 0x06, 0x34, 0x7B, 0xEC, 0x71, 0xB5, 0x47, 0xEF, 0x3E, 0xD4, 0x8B, 0x0A, 0xB2,
0xB1, 0xC7, 0x5F, 0xC5, 0x9B, 0xB0, 0x72, 0x38, 0xFF, 0x6C, 0x2E, 0x2E, 0xCF, 0x04, 0x00, 0x3C,
0xFC, 0x07, 0x9F, 0xF0, 0x6F, 0xB0, 0x14, 0xAD, 0x7B, 0x4D, 0xAC, 0x71, 0x53, 0xD8, 0xD1, 0x08,
0x5F, 0x11, 0xD8, 0x24, 0xD9, 0xB5, 0xA2, 0x0B, 0xFE, 0x8C, 0xDA, 0x83, 0x25, 0xC5, 0x2A, 0xCA,
0x97, 0x31, 0x3C, 0x4E, 0x53, 0xA6, 0x65, 0x3E, 0x59, 0xC5, 0xFE, 0x92, 0x8E, 0xA8, 0xE9, 0x93,
0xB6, 0xDF, 0xB8, 0x3A, 0xFE, 0xE9, 0x1C, 0x29, 0x60, 0x42, 0xA6, 0xC4, 0xE0, 0x0A, 0x04, 0xDC,
0xC5, 0x97, 0xCF, 0x79, 0x94, 0x67, 0x6D, 0x78, 0x7B, 0x88, 0xBA, 0x71, 0x96, 0xC1, 0xB9, 0x2D,
0xB6, 0x79, 0xFA, 0xC0, 0x00, 0x46, 0xE5, 0x11, 0x96, 0x13, 0xB0, 0x15, 0x48, 0x06, 0x5A, 0x94,
0x2C, 0x05, 0x01, 0xCF, 0x21, 0x7C, 0x7E, 0x47, 0xA1, 0x1E, 0x68, 0xD7, 0x84, 0x45, 0x1B, 0x1B,
0x1B, 0x03, 0x78, 0xD9, 0x2C, 0x58, 0xEF, 0xB5, 0xCC, 0x88, 0xF5, 0x0D, 0xCD, 0xC3, 0xD5, 0xF6,
0x26, 0x18, 0xCE, 0x53, 0x7C, 0x90, 0x34, 0x0D, 0xF1, 0x43, 0x70, 0x0F, 0xF1, 0x70, 0x77, 0xB0,
0x71, 0x4B, 0x83, 0x3D, 0xCC, 0xA3, 0x16, 0xAA, 0x8D, 0x96, 0xFF, 0x00, 0xB5, 0xC5, 0xB4, 0x52,
0x90, 0xDE, 0x1F, 0xB5, 0x7A, 0x8F, 0x6C, 0xA0, 0x22, 0xD5, 0x76, 0x48, 0xE5, 0x10, 0xE6, 0x59,
0xC2, 0xB7, 0xF7, 0x16, 0x13, 0x8E, 0x35, 0xFF, 0xCE, 0x34, 0x96, 0x7C, 0xFD, 0x18, 0x61, 0xA2,
0x5A, 0x88, 0x88, 0x2C, 0xE6, 0x66, 0x26, 0xB6, 0xA0, 0xDE, 0x04, 0x6D, 0x71, 0x46, 0xDB, 0xCE,
0xFC, 0x2D, 0x4C, 0xAF, 0x1B, 0xCE, 0xE2, 0x18, 0xCA, 0x96, 0x3D, 0xDF, 0x2B, 0xFC, 0x57, 0x29,
0xF4, 0x07, 0xC3, 0xB6, 0x5A, 0x37, 0x00, 0x44, 0xF7, 0x1F, 0x54, 0x8D, 0x38, 0x5D, 0xA0, 0xBC,
0xF8, 0x34, 0x7B, 0x9C, 0xFD, 0xCB, 0x42, 0x62, 0x0F, 0xC3, 0xBF, 0x5C, 0xE6, 0x3F, 0x8D, 0xBD,
0xDD, 0x3C, 0xA8, 0xE6, 0x21, 0x24, 0xF1, 0x38, 0x58, 0xF5, 0xF0, 0x9B, 0xB3, 0xA2, 0xE1, 0x40,
0xDC, 0xAB, 0xFD, 0xD3, 0xFB, 0x78, 0x26, 0x50, 0x93, 0x5A, 0xE4, 0x72, 0x6F, 0x2C, 0xC4, 0x4F,
0xD7, 0x77, 0xD9, 0xE4, 0xBC, 0x86, 0x2B, 0x0B, 0x36, 0xE4, 0xC2, 0x7F, 0x3E, 0x4B, 0xB5, 0xBA,
0xDD, 0xDA, 0xDE, 0x7F, 0xEE, 0x71, 0x51, 0xAF, 0x55, 0x6A, 0xD4, 0x45, 0xEC, 0x21, 0x0A, 0x94,
0x08, 0xAE, 0x1B, 0x0D, 0x68, 0x1A, 0x81, 0x0A, 0x5B, 0x3C, 0xDA, 0xC6, 0xF2, 0x78, 0x4E, 0xAF,
0x79, 0x06, 0x6A, 0xEB, 0x00, 0x67, 0xCE, 0x2E, 0xBC, 0xDF, 0xB9, 0xAF, 0x2F, 0x99, 0x30, 0x51,
0x78, 0x56, 0x89, 0x86, 0xDB, 0x5D, 0x9C, 0x0A, 0x68, 0xC2, 0x41, 0x01, 0x68, 0xC5, 0x1D, 0x9E,
0x47, 0xDC, 0x78, 0xDD, 0xF5, 0x1B, 0x9E, 0x75, 0x0D, 0x31, 0x59, 0xCE, 0xB3, 0xA1, 0x7D, 0x27,
0xF9, 0x3A, 0xC3, 0x96, 0xCD, 0x4B, 0x88, 0xE8, 0x8E, 0xC0, 0xC5, 0x06, 0x0B, 0xE6, 0x5E, 0x5E,
0xA1, 0xFA, 0xB5, 0x05, 0xD4, 0xF7, 0x6A, 0x10, 0xCF, 0xFE, 0x2E, 0xE0, 0xF8, 0x83, 0x6C, 0x6B,
0x51, 0xBE, 0x10, 0x4E, 0x64, 0x3B, 0x14, 0x4C, 0x9B, 0xA6, 0xD0, 0x53, 0x1F, 0x48, 0x68, 0xDC,
0x49, 0x38, 0x0B, 0x28, 0x59, 0xA6, 0x41, 0xD4, 0xC5, 0xC9, 0x69, 0x91, 0xA1, 0x49, 0x89, 0x10,
0xF8, 0xA6, 0x50, 0xDE, 0xCB, 0xB5, 0x7B, 0x00, 0x23, 0x6A, 0x23, 0x48, 0xDE, 0xBB, 0x9E, 0x67,
0x22, 0x37, 0x8B, 0x80, 0xC6, 0xD3, 0x78, 0x66, 0x48, 0x1D, 0xAE, 0x1C, 0x23, 0x6C, 0xEB, 0xDF,
0x68, 0x72, 0xFA, 0xEF, 0x0A, 0x29, 0x5D, 0xB1, 0xA9, 0x8B, 0xB7, 0xC9, 0xBF, 0xCB, 0x7F, 0x99,
0x4A, 0x7F, 0xB9, 0x15, 0x17, 0xCE, 0x14, 0xC8, 0xCC, 0xC1, 0xC3, 0x53, 0x5A, 0xBB, 0x05, 0x32,
0x79, 0xBC, 0xB9, 0x27, 0x2B, 0x7C, 0x93, 0x2F, 0xAA, 0xC0, 0x8F, 0xB0, 0x5A, 0xD1, 0x37, 0xF8,
0x37, 0x4D, 0x2C, 0x1B, 0xD4, 0x23, 0x8D, 0x06, 0xA1, 0xF5, 0x49, 0xFC, 0x11, 0x6A, 0x0D, 0x1B,
0x51, 0x75, 0x4B, 0xEE, 0xD4, 0xB1, 0xEF, 0xDD, 0x4C, 0xDB, 0x55, 0xAD, 0xF9, 0x4B, 0x45, 0x0D,
0x57, 0xC4, 0x5C, 0x91, 0xD2, 0x9A, 0xD0, 0xA9, 0x4D, 0x5D, 0xC9, 0x86, 0x67, 0xEF, 0x0E, 0x70,
0x42, 0x1F, 0x39, 0x15, 0x6F, 0x11, 0x61, 0xFE, 0xE5, 0x39, 0xA4, 0xE6, 0x20, 0xB6, 0x1E, 0x8B,
0xC6, 0xBC, 0xB1, 0xFA, 0x95, 0xA2, 0x39, 0xA5, 0x16, 0x7D, 0xC8, 0x3E, 0xA3, 0x10, 0x5E, 0x21,
0x34, 0x6D, 0x20, 0x4E, 0x98, 0xFF, 0xA7, 0x04, 0xCA, 0x81, 0x3B, 0x8C, 0x57, 0x4C, 0x74, 0x05,
0xCE, 0x2F, 0xEA, 0xFE, 0x84, 0xFC, 0xD7, 0x5E, 0x46, 0x2E, 0xF9, 0x63, 0xF9, 0x6A, 0x9C, 0x34,
0xAB, 0x96, 0xD6, 0xE5, 0xC1, 0xF3, 0x20, 0x4B, 0x74, 0x0D, 0x6B, 0x97, 0x54, 0xC4, 0x05, 0xE0,
0xC7, 0xDC, 0xE2, 0xF0, 0x80, 0xD4, 0xF7, 0xD0, 0xF4, 0xFE, 0x96, 0x5E, 0xC1, 0x2D, 0x6D, 0xBF,
0xC5, 0xC7, 0xC7, 0x9F, 0x12, 0x27, 0x6D, 0xD8, 0xD2, 0x25, 0x9F, 0xE3, 0x69, 0xFD, 0xF9, 0xBC,
0xE0, 0x40, 0x9A, 0x92, 0xE6, 0x5F, 0xD1, 0x2C, 0xDA, 0x67, 0x23, 0xC5, 0x48, 0x62, 0x55, 0xE9,
0x61, 0x99, 0x57, 0x34, 0xA2, 0xD3, 0x44, 0xDD, 0xBA, 0x92, 0xF1, 0xE5, 0x9A, 0xE5, 0xE1, 0x25,
0x99, 0xAE, 0x43, 0x0C, 0xFA, 0xA9, 0xF6, 0xE9, 0x56, 0x12, 0x8A, 0xB6, 0x4F, 0xD6, 0x9B, 0xC4,
0x51, 0xC9, 0x10, 0xFB, 0xB6, 0x4E, 0x58, 0x57, 0x44, 0xA9, 0xD1, 0x21, 0xC2, 0xA7, 0x04, 0x9A,
0xC4, 0xCB, 0x10, 0xC8, 0x37, 0xAD, 0x50, 0x67, 0x78, 0x15, 0xB7, 0x6A, 0xE4, 0xE3, 0xB0, 0xEC,
0x7C, 0x80, 0xDA, 0xAF, 0x93, 0xC4, 0x9A, 0xF1, 0xBA, 0xE1, 0x32, 0x6B, 0xAC, 0x2F, 0xF7, 0x8E,
0x1A, 0x13, 0x17, 0x19, 0x55, 0x48, 0x7D, 0xC3, 0x16, 0xA3, 0xE5, 0x88, 0xB7, 0xAC, 0xEF, 0x9E,
0x6B, 0x9F, 0x45, 0xB9, 0x36, 0xB6, 0x13, 0x8F, 0xA0, 0x9B, 0xBF, 0xCE, 0xC2, 0x9B, 0x60, 0x5C,
0x04, 0x1C, 0x72, 0xE7, 0xCA, 0x29, 0x8A, 0x51, 0x98, 0x26, 0x31, 0x10, 0xFB, 0x47, 0x04, 0x86,
0x1F, 0x78, 0x7B, 0xE5, 0x8C, 0xCA, 0x96, 0x18, 0xBD, 0xC9, 0x6E, 0xC4, 0xE2, 0xE8, 0xF1, 0xD2,
0xA6, 0x2C, 0x6C, 0x24, 0x48, 0x7D, 0x76, 0xB1, 0x57, 0x56, 0xD9, 0x38, 0xCA, 0xC6, 0x63, 0xAB,
0x57, 0x7E, 0xE1, 0xEF, 0x4B, 0xD9, 0x7C, 0x26, 0x17, 0x30, 0x31, 0xCE, 0xB1, 0xBB, 0x1D, 0xAC,
0xB9, 0x49, 0x52, 0xFF, 0x4F, 0xC5, 0x21, 0xC2, 0x5C, 0x38, 0x78, 0xE8, 0x00, 0xE6, 0xFC, 0x91,
0x4C, 0x49, 0x16, 0x4A, 0x70, 0xFF, 0x70, 0x51, 0xBA, 0xB0, 0x03, 0x60, 0xEB, 0x44, 0xF0, 0xBC,
0xD3, 0xEA, 0xD5, 0x18, 0x6E, 0xFA, 0xE0, 0x6F, 0xB0, 0x42, 0xF0, 0xDB, 0xAF, 0xE9, 0x8D, 0x43,
0x1B, 0x93, 0x3D, 0xCE, 0x44, 0xDC, 0xFB, 0xCD, 0x05, 0xE4, 0xD6, 0x89, 0xB2, 0x4A, 0xBE, 0x86,
0x51, 0x9B, 0x50, 0xF7, 0x70, 0x15, 0xF9, 0x34, 0xFE, 0x3D, 0x7B, 0x06, 0xF2, 0x24, 0x72, 0xB1,
0x52, 0xC5, 0x95, 0x34, 0xA4, 0x9C, 0xE0, 0x0A, 0x31, 0x80, 0x40, 0x83, 0x6E, 0xC7, 0x02, 0x38,
0xA1, 0x0C, 0x17, 0xDC, 0xEA, 0x74, 0x09, 0x31, 0xDF, 0xB6, 0x2A, 0x29, 0xDC, 0xF3, 0x2F, 0x12,
0x0E, 0x73, 0x23, 0x5F, 0xAD, 0xC8, 0x76, 0x05, 0xA2, 0x5B, 0x94, 0xFE, 0x91, 0xBF, 0x6B, 0x74,
0x00, 0xF8, 0x30, 0x20, 0x50, 0x1E, 0x93, 0xC2, 0xD8, 0xC6, 0x0A, 0xE4, 0x91, 0x84, 0x78, 0xC7,
0x91, 0xCF, 0x6D, 0xE8, 0x2E, 0x43, 0xE4, 0xF8, 0xB6, 0xE3, 0xE4, 0xDD, 0xBC, 0x8C, 0xD4, 0x1F,
0xDA, 0x3D, 0xD4, 0xDC, 0x45, 0x16, 0x35, 0xA5, 0xB2, 0x26, 0xFC, 0x6E, 0x73, 0x0E, 0xDB, 0xA8,
0xA9, 0x05, 0x33, 0xCA, 0xF2, 0x37, 0x34, 0x9F, 0x93, 0x01, 0x67, 0x0B, 0xAF, 0x03, 0xDF, 0x71,
0x07, 0x79, 0xFA, 0xAF, 0x4F, 0x4E, 0xCC, 0xD8, 0x9F, 0x4C, 0xD7, 0x34, 0x48, 0xD6, 0xF6, 0xCB,
0x84, 0x01, 0x1C, 0xB4, 0xC7, 0xBE, 0x0D, 0x51, 0xC1, 0x43, 0xF8, 0x4A, 0x34, 0x5B, 0xA5, 0x3F,
0xCC, 0x42, 0x1F, 0xCA, 0x47, 0x0F, 0x36, 0xFC, 0x22, 0xD1, 0x87, 0x76, 0x97, 0xB1, 0x2D, 0x91,
0x12, 0xCE, 0xD4, 0xC9, 0xED, 0x6F, 0x59, 0x2C, 0x87, 0x57, 0x01, 0x86, 0x10, 0x27, 0xE9, 0x57,
0x87, 0xA3, 0x4F, 0x21, 0x97, 0x77, 0x9B, 0x52, 0xF3, 0xA1, 0xE8, 0x7B, 0xCA, 0x4A, 0x60, 0x36,
0x3D, 0x65, 0xE1, 0x0B, 0x11, 0x2C, 0xB9, 0x06, 0xBA, 0xC5, 0xCF, 0x2C, 0xD8, 0x5E, 0xB7, 0x0E,
0x14, 0xC3, 0x04, 0x2B, 0xF9, 0x4C, 0x5A, 0xF0, 0xED, 0x87, 0xFC, 0x71, 0xF6, 0xC9, 0x1C, 0x56,
0x62, 0xBD, 0x09, 0x1F, 0x77, 0xD9, 0x53, 0x47, 0xA9, 0x6C, 0x96, 0x06, 0x92, 0xB8, 0x51, 0xCB,
0xFA, 0x86, 0x27, 0x8D, 0xF6, 0x55, 0x64, 0xE4, 0xB4, 0x69, 0xB8, 0xE6, 0xD0, 0x20, 0xA4, 0x43,
0x5A, 0x1C, 0x36, 0x19, 0x99, 0x0E, 0x78, 0x25, 0x92, 0x00, 0xAC, 0x49, 0x99, 0xF4, 0x68, 0x8F,
0xE5, 0xD6, 0xB4, 0xF5, 0xB4, 0x48, 0x8D, 0x7B, 0x66, 0x1D, 0x22, 0xB5, 0xCE, 0xA1, 0xC8, 0x61,
0x68, 0x51, 0xEC, 0x30, 0x5A, 0x69, 0xB4, 0x1C, 0x15, 0x76, 0xB9, 0x51, 0xF1, 0x19, 0xC6, 0xCB,
0x37, 0x12, 0x4E, 0x07, 0xB5, 0xDA, 0xF7, 0x0D, 0xCE, 0x63, 0x0F, 0x61, 0x55, 0x75, 0x37, 0x1D,
0x1D, 0xA4, 0x0F, 0x6A, 0x8C, 0x29, 0x70, 0xFC, 0x53, 0x6C, 0x59, 0xEC, 0xC0, 0xEE, 0xF3, 0xB6,
0x3C, 0xB1, 0xCF, 0x9F, 0x7E, 0x17, 0x77, 0xC6, 0x8D, 0x37, 0x7F, 0x2D, 0x7F, 0x14, 0x36, 0x44,
0xEE, 0x4A, 0xC3, 0x7A, 0x1E, 0x15, 0x19, 0xBB, 0x70, 0x45, 0x25, 0xC9, 0x5F, 0x21, 0xC5, 0xC5,
0xC5, 0x26, 0x54, 0xCB, 0x8C, 0xE1, 0x7E, 0x01, 0x9E, 0x3D, 0x29, 0xC2, 0x6D, 0xF0, 0xBD, 0x4B,
0x97, 0x12, 0x79, 0xAE, 0x27, 0xD3, 0x7F, 0x7F, 0xF2, 0x02, 0x29, 0xD3, 0x5E, 0x87, 0x5F, 0x20,
0x02, 0x55, 0x27, 0xCE, 0xF1, 0x1E, 0x99, 0xFD, 0x52, 0xC2, 0xF5, 0xB3, 0xE5, 0x43, 0xC5, 0x48,
0xC2, 0xFE, 0x45, 0x19, 0x6B, 0xD7, 0x7B, 0x80, 0x42, 0x7F, 0x74, 0x80, 0xF0, 0x36, 0x24, 0xFF,
0xB3, 0x81, 0xBC, 0x75, 0x43, 0x59, 0x64, 0x55, 0x55, 0xBA, 0xC3, 0xE6, 0xAC, 0x24, 0x7A, 0x86,
0x63, 0x46, 0xD8, 0xF7, 0x56, 0xAD, 0xAA, 0xA5, 0xF0, 0x65, 0x8D, 0xA0, 0xF5, 0xD6, 0xB2, 0x0C,
0x74, 0x11, 0x16, 0x60, 0xF0, 0xCC, 0xD3, 0x83, 0xE5, 0xC9, 0xC7, 0x69, 0x0D, 0x25, 0x25, 0x83,
0xB5, 0xAE, 0xA1, 0xC3, 0x75, 0x37, 0x6F, 0x3C, 0x2B, 0x81, 0x19, 0x49, 0x37, 0x02, 0x35, 0xA3,
0xF7, 0x6C, 0x09, 0xB1, 0x29, 0xB1, 0x98, 0x67, 0x2F, 0xBC, 0xE2, 0xB9, 0x9C, 0x27, 0x54, 0x12,
0x7D, 0xAE, 0x55, 0x48, 0xD5, 0x54, 0xC9, 0x9C, 0xDF, 0x51, 0x49, 0x1B, 0x0B, 0x9B, 0x56, 0xE5,
0x12, 0xEE, 0x5C, 0x45, 0xE8, 0xB9, 0xD0, 0xE1, 0xB1, 0xCC, 0x05, 0xFC, 0x24, 0xA5, 0x1B, 0x1B,
0xB4, 0x76, 0xCF, 0x19, 0x5A, 0x85, 0x13, 0xBC, 0x3B, 0xCC, 0x4A, 0x37, 0xFA, 0xBA, 0x1A, 0x17,
0xAA, 0x7A, 0x03, 0xDB, 0x18, 0x7D, 0xBD, 0x52, 0xFC, 0xDE, 0x89, 0xFE, 0x97, 0x9D, 0xD8, 0x65,
0xF9, 0xF3, 0xDC, 0x16, 0x0C, 0xD5, 0x1A, 0x7F, 0x7A, 0x9D, 0x45, 0xDE, 0x35, 0x8E, 0xD8, 0xD7,
0xA8, 0x9A, 0x16, 0xE4, 0x9A, 0xAD, 0x62, 0x45, 0x78, 0xE0, 0xA5, 0xBB, 0x4A, 0x2C, 0xD5, 0xDF,
0x07, 0xD2, 0xA0, 0xA8, 0x85, 0x9F, 0x14, 0x5F, 0xE1, 0x65, 0x3B, 0xA9, 0x9F, 0x45, 0xDF, 0x4C,
0xB8, 0x44, 0xF7, 0xEF, 0x67, 0x41, 0xD6, 0xE2, 0xF3, 0xBF, 0x87, 0x1E, 0x44, 0xA4, 0x95, 0xD4,
0x72, 0xE2, 0x16, 0x83, 0xC5, 0x2F, 0x96, 0xE8, 0x4A, 0x00, 0x7A, 0xE2, 0xA5, 0x57, 0xF4, 0xF4,
0x32, 0x34, 0x5F, 0x94, 0x8C, 0x17, 0x4A, 0xF0, 0xB7, 0xE7, 0xFA, 0xF0, 0xB5, 0x1E, 0x6B, 0x55,
0x2D, 0x6F, 0x5E, 0xCD, 0xCF, 0xD3, 0x10, 0xBE, 0x17, 0xC7, 0x6E, 0x97, 0xA0, 0xCA, 0x48, 0x08,
0xBD, 0x24, 0x5C, 0xE2, 0x41, 0x38, 0x3A, 0x34, 0xF5, 0x3D, 0xAC, 0x3C, 0xD1, 0x79, 0xAD, 0x55,
0x8B, 0x3B, 0x0E, 0x6E, 0xB1, 0x06, 0xA3, 0x2A, 0xF6, 0x7A, 0x97, 0xAA, 0x99, 0xD9, 0x9D, 0x2B,
0x2F, 0xFA, 0xF9, 0x65, 0xC5, 0x8C, 0x44, 0x8C, 0x0D, 0x8F, 0x8A, 0x77, 0x2D, 0xED, 0x2A, 0xDD,
0x90, 0x45, 0xAF, 0xBC, 0x75, 0x61, 0x94, 0xD5, 0xF8, 0x25, 0x77, 0x2E, 0xB5, 0xC0, 0xEB, 0xA2,
0x14, 0x47, 0x80, 0x35, 0x3C, 0xBF, 0x93, 0x26, 0x93, 0x68, 0xBD, 0x1F, 0xF7, 0x72, 0x0B, 0x21,
0x1B, 0xE7, 0x5D, 0xE0, 0xA8, 0xAE, 0x7B, 0xCE, 0x53, 0xF4, 0x27, 0x25, 0x92, 0x7D, 0xE8, 0xF7,
0x60, 0xA4, 0x8A, 0x99, 0x15, 0xB0, 0x89, 0x6C, 0x73, 0x09, 0x50, 0xC3, 0x32, 0x6D, 0x8C, 0x17,
0x63, 0x63, 0xFB, 0xE2, 0x35, 0x35, 0xC5, 0x64, 0x4B, 0x85, 0xB5, 0xAF, 0x45, 0xF4, 0xB4, 0xDD,
0xF6, 0xDE, 0xAD, 0x99, 0xD8, 0xFA, 0xBA, 0x45, 0xC0, 0x80, 0xB8, 0x41, 0x3C, 0x92, 0x3B, 0xF0,
0xBE, 0xBB, 0x34, 0x78, 0x01, 0x8A, 0xA1, 0x92, 0x5A, 0x04, 0x8B, 0x0B, 0xDA, 0x92, 0xC9, 0xB6,
0x5C, 0xD0, 0x54, 0x5B, 0xB9, 0x41, 0xD3, 0xDF, 0x10, 0x2C, 0x22, 0xF9, 0x25, 0xC2, 0x05, 0xD5,
0xCB, 0x0A, 0xC2, 0x9C, 0xAA, 0xC4, 0x23, 0x49, 0x9C, 0x47, 0x53, 0xBC, 0x1D, 0xB1, 0x88, 0x92,
0xE5, 0xFC, 0x9A, 0xE0, 0x4F, 0x03, 0x4A, 0x44, 0xE9, 0x68, 0x7D, 0xC1, 0x16, 0xC2, 0xDC, 0xA2,
0xEC, 0xC6, 0x02, 0x06, 0x91, 0x21, 0x3F, 0x54, 0xA4, 0xF7, 0x5A, 0x70, 0x7D, 0x5D, 0xA6, 0xA8,
0x33, 0x9A, 0x42, 0x6D, 0x1C, 0xDE, 0x12, 0x41, 0xC3, 0x32, 0x80, 0x78, 0xA7, 0x1A, 0x4F, 0xDE,
0x08, 0x18, 0xF6, 0x7B, 0x65, 0x95, 0x49, 0xC6, 0xCD, 0x1B, 0x65, 0x8C, 0x29, 0x3C, 0x3A, 0x54,
0x49, 0xE5, 0x62, 0x90, 0x36, 0x6C, 0x76, 0x1D, 0x00, 0xA9, 0x94, 0x43, 0xD6, 0x55, 0x5E, 0xBA,
0x5B, 0x1C, 0xA2, 0xF8, 0x27, 0x96, 0x9C, 0xAA, 0xE9, 0xED, 0x7A, 0x98, 0xC5, 0x84, 0xF0, 0xE1,
0xFF, 0x00, 0xDD, 0x7C, 0x1C, 0xAA, 0x58, 0x91, 0x16, 0x61, 0x3E, 0x8C, 0x11, 0xA6, 0x05, 0x29,
0x51, 0xFB, 0x14, 0xDD, 0xA3, 0x82, 0xD2, 0x39, 0xBD, 0xC4, 0x42, 0x69, 0x4F, 0x56, 0x51, 0x88,
0x5F, 0x4A, 0x7D, 0xC6, 0xE4, 0x45, 0x43, 0x27, 0x4C, 0x6E, 0x3A, 0xAE, 0xDE, 0xC6, 0xEF, 0x58,
0xAB, 0xF0, 0x5C, 0x62, 0x53, 0x94, 0x4A, 0x71, 0xA5, 0x6B, 0x7C, 0x50, 0x48, 0xB5, 0xAF, 0xE7,
0xA5, 0xB8, 0x56, 0x65, 0x94, 0x5D, 0x69, 0xCE, 0x5E, 0x1B, 0xF5, 0x04, 0x5C, 0x3F, 0x74, 0x4A,
0x80, 0xB6, 0x4C, 0x56, 0xE8, 0x97, 0x1A, 0xFF, 0xB8, 0x30, 0x5A, 0x7A, 0x13, 0xD9, 0x02, 0x34,
0x57, 0x4C, 0x40, 0xC4, 0xAC, 0xEF, 0xDC, 0x5F, 0xF4, 0x88, 0xC2, 0x4A, 0x50, 0xF0, 0xF3, 0xEF,
0xB0, 0x20, 0xAF, 0xD2, 0x8B, 0x2E, 0xBE, 0xF5, 0xF4, 0xC0, 0xF1, 0x3C, 0x4B, 0x34, 0x9B, 0x86,
0x8A, 0xDA, 0x33, 0x64, 0x08, 0x28, 0xFB, 0xC0, 0x81, 0x8D, 0x6A, 0x6D, 0x01, 0xEE, 0x63, 0x84,
0x83, 0xAB, 0xFC, 0x21, 0xF9, 0x33, 0x76, 0xCF, 0xBA, 0x01, 0x0D, 0x20, 0x1E, 0x87, 0x94, 0x42,
0x96, 0x9F, 0x8A, 0xA2, 0xC1, 0xBC, 0x83, 0x22, 0x2A, 0xFF, 0x6E, 0x6D, 0x67, 0x94, 0xF1, 0x4C,
0xE8, 0xD1, 0x4E, 0x58, 0x1E, 0xE9, 0xE2, 0x9F, 0xA9, 0x72, 0x2E, 0x0D, 0x98, 0xA8, 0x40, 0xA9,
0x52, 0x9E, 0xF6, 0x3B, 0xBE, 0xC5, 0x71, 0x4C, 0xE6, 0x56, 0x86, 0x76, 0x17, 0xD5, 0x48, 0xF9,
0x5A, 0xCB, 0x84, 0x30, 0xA9, 0xFA, 0xC8, 0x5E, 0xD9, 0xA9, 0x19, 0xA7, 0xB6, 0xE7, 0xAA, 0x5B,
0x4F, 0x11, 0xB8, 0x15, 0x57, 0x6C, 0x25, 0x32, 0x94, 0xD2, 0xCD, 0x1E, 0x84, 0xD4, 0x2F, 0xAA,
0xB3, 0xF6, 0x62, 0x74, 0xD0, 0x6F, 0x2F, 0x08, 0x25, 0xF7, 0x0C, 0x04, 0x4E, 0xB7, 0x57, 0xCC,
0x61, 0x37, 0x7A, 0x23, 0x4F, 0x15, 0x85, 0x91, 0xBC, 0x4D, 0xA4, 0x74, 0x79, 0xFD, 0x03, 0xE5,
0x11, 0xEA, 0xEC, 0xB6, 0x07, 0x92, 0x22, 0xE9, 0x91, 0x9D, 0x3F, 0xD4, 0x2E, 0x39, 0xFD, 0xAB,
0x41, 0xBE, 0xEC, 0x0D, 0xCA, 0x59, 0x83, 0x37, 0x8D, 0x35, 0xCF, 0x73, 0xC7, 0x95, 0xFD, 0x71,
0xE9, 0x01, 0x16, 0x2D, 0xB6, 0x96, 0x49, 0x5E, 0x92, 0xC7, 0x35, 0xBD, 0x7E, 0x8D, 0x52, 0x13,
0xCE, 0x69, 0x9B, 0x27, 0x57, 0xBD, 0x2A, 0xB1, 0x24, 0xD6, 0x7C, 0x04, 0x0E, 0x43, 0xF5, 0x25,
0x1D, 0xB3, 0xC7, 0xBF, 0x05, 0xBB, 0x0F, 0x18, 0x1B, 0x70, 0x3A, 0x85, 0xB8, 0x91, 0xF8, 0xA2,
0xE0, 0x15, 0x43, 0xAA, 0x7C, 0xD9, 0xD7, 0x3C, 0x50, 0xEB, 0x64, 0x46, 0xF1, 0xDC, 0x49, 0xBC,
0x75, 0x5D, 0x70, 0x00, 0x04, 0xE9, 0xEE, 0x9D, 0xF2, 0xD9, 0xBF, 0x04, 0xA8, 0x05, 0xE3, 0x40,
0x9A, 0xA3, 0x93, 0x76, 0x44, 0xFB, 0x4A, 0x07, 0x3B, 0xD1, 0x07, 0x1F, 0x03, 0xCC, 0x0E, 0xC0,
0x5D, 0xE2, 0x9B, 0xB5, 0x9F, 0xA9, 0xAF, 0x5B, 0x06, 0x60, 0x5F, 0x13, 0xA4, 0xA7, 0x9C, 0x21,
0x3E, 0x3F, 0x69, 0xCD, 0xCA, 0xB5, 0x55, 0x4F, 0xC1, 0x3C, 0xF3, 0x29, 0xD5, 0x60, 0xDD, 0x1F,
0x7F, 0x98, 0x27, 0x8A, 0xEC, 0x46, 0xFD, 0xAA, 0x76, 0xFE, 0x38, 0x85, 0xA9, 0x0D, 0xE0, 0x94,
0x62, 0x14, 0x78, 0x58, 0xAC, 0x83, 0xB1, 0x54, 0x8B, 0x7C, 0x1C, 0x0E, 0xF4, 0xA7, 0x06, 0x86,
0x1F, 0xA5, 0x4B, 0x0A, 0xF7, 0x9A, 0x15, 0xF9, 0x8D, 0x6D, 0x54, 0xC1, 0x5D, 0x5F, 0x0A, 0xC6,
0x1C, 0xB2, 0x46, 0x34, 0xE8, 0xBC, 0x4B, 0x44, 0xB6, 0xD7, 0xF6, 0xA7, 0xF0, 0xE1, 0x89, 0xAA,
0x6D, 0x67, 0xC0, 0x4F, 0xD0, 0xE0, 0xA0, 0x90, 0x3B, 0x07, 0x00, 0xB0, 0xCF, 0x6C, 0x14, 0xF2,
0x7A, 0x67, 0xE3, 0x16, 0x85, 0x3D, 0xE0, 0x60, 0x56, 0xD8, 0x7C, 0xC8, 0xD0, 0x6B, 0xA0, 0xAB,
0x04, 0x94, 0x14, 0xB7, 0xFF, 0x1F, 0x05, 0x2B, 0x78, 0x08, 0xD2, 0x2A, 0x54, 0xD4, 0xF5, 0xCA,
0xDC, 0xC2, 0x89, 0x77, 0xEA, 0x60, 0x83, 0x73, 0xB6, 0xA6, 0xDB, 0xA6, 0xCE, 0xAE, 0xCA, 0x8F,
0xCB, 0x10, 0xF0, 0x7F, 0x93, 0x5E, 0xEE, 0x4E, 0x15, 0xBB, 0xDD, 0x23, 0x28, 0x2F, 0x2C, 0x3E,
0xB5, 0xFA, 0x7F, 0x5F, 0x3D, 0xF1, 0x30, 0xDC, 0x92, 0xF7, 0xC8, 0xC8, 0x48, 0x98, 0x03, 0xAF,
0x84, 0xF5, 0xD1, 0xBD, 0x1E, 0x01, 0xBD, 0xCD, 0x85, 0x2B, 0xBD, 0x95, 0x5E, 0xB0, 0xDC, 0x7D,
0x3B, 0xF5, 0x01, 0x6A, 0x47, 0x90, 0x77, 0xB7, 0x02, 0x05, 0xA8, 0x79, 0x00, 0x91, 0x8C, 0x86,
0x97, 0x7B, 0x27, 0x4A, 0xB8, 0x33, 0x28, 0xC5, 0x75, 0x05, 0xC7, 0xCE, 0x96, 0x95, 0xE6, 0x99,
0xB6, 0xCC, 0x0D, 0x34, 0xB8, 0x10, 0xC3, 0x2D, 0xCB, 0x04, 0xCA, 0x9F, 0x23, 0x30, 0x35, 0xD5,
0xF6, 0x3B, 0x23, 0xEA, 0x15, 0x7D, 0x9D, 0x6D, 0xB6, 0x68, 0xB0, 0x31, 0x88, 0x0E, 0x35, 0xF1,
0x72, 0xC0, 0xF3, 0xC5, 0xFF, 0x7A, 0x52, 0x90, 0x70, 0xE7, 0xB9, 0x29, 0x25, 0x8B, 0x5C, 0x5D,
0xF4, 0x15, 0x2D, 0x92, 0xAF, 0x86, 0x72, 0x58, 0x3B, 0x2A, 0x09, 0x25, 0x29, 0xC0, 0x41, 0xE0,
0xA1, 0x4C, 0x76, 0x69, 0x63, 0x93, 0x65, 0x08, 0x75, 0x18, 0xA9, 0x09, 0xA8, 0xBF, 0x2A, 0x90,
0xFC, 0x95, 0x4E, 0x50, 0xD5, 0xA9, 0xB1, 0x87, 0x33, 0x94, 0xCC, 0x49, 0x69, 0x2A, 0xDE, 0x86,
0x06, 0xB5, 0x3F, 0xF6, 0xC2, 0xBB, 0x52, 0xF5, 0xED, 0x22, 0x6B, 0x38, 0xE7, 0x5B, 0x03, 0x63,
0x31, 0x44, 0x47, 0x25, 0xE4, 0x34, 0xF0, 0x03, 0xDD, 0xDC, 0x20, 0xDC, 0x70, 0xCA, 0xCC, 0xD9,
0xBA, 0x5F, 0x68, 0xC4, 0x91, 0x5B, 0x49, 0x6D, 0xB3, 0xAA, 0xEA, 0x34, 0x2A, 0xC9, 0xE6, 0x46,
0x41, 0x4A, 0x8F, 0xD0, 0xF5, 0xC7, 0x99, 0xB3, 0x2A, 0x5A, 0xE1, 0x17, 0x4D, 0xC8, 0x24, 0xDC,
0x20, 0x86, 0x4A, 0x25, 0x3F, 0x0C, 0xCC, 0x14, 0x07, 0xAD, 0x5C, 0x12, 0xC0, 0x50, 0x57, 0x41,
0x4A, 0x48, 0x2F, 0x4D, 0x18, 0x08, 0x79, 0x35, 0x20, 0xA7, 0x5F, 0xB9, 0x83, 0x5E, 0x93, 0x91,
0xE2, 0xCB, 0xAB, 0x8B, 0xAB, 0xF1, 0x92, 0x19, 0x52, 0xF1, 0x33, 0x3F, 0x0A, 0xB8, 0x61, 0xD5,
0x5C, 0xC8, 0x6F, 0x05, 0x6C, 0x69, 0x0E, 0x3D, 0x99, 0xE2, 0xD2, 0xD2, 0x08, 0x76, 0x64, 0xEB,
0x1B, 0xBC, 0x79, 0xB6, 0xE4, 0xA9, 0x82, 0xF1, 0x77, 0x59, 0x78, 0xC0, 0x80, 0xAD, 0xD2, 0x7D,
0xC2, 0xC7, 0x6C, 0xF1, 0x2A, 0x6E, 0xDE, 0x0C, 0x9F, 0xE0, 0x77, 0x91, 0xF2, 0xE8, 0xE4, 0x7B,
0xA7, 0xEF, 0xDA, 0xD0, 0x78, 0xCD, 0x29, 0x3E, 0x59, 0x05, 0x68, 0xBA, 0x6A, 0x7A, 0x17, 0x7E,
0x37, 0xF0, 0x21, 0xF8, 0x4E, 0xC7, 0xD8, 0xDE, 0x13, 0x43, 0x55, 0x0F, 0x41, 0x5A, 0x6E, 0x98,
0x6B, 0xD0, 0x24, 0xC1, 0x0E, 0xA9, 0x6B, 0x63, 0xA9, 0xAF, 0x8C, 0x66, 0x9C, 0xA0, 0x43, 0xCB,
0x2E, 0xEF, 0xA0, 0x20, 0x49, 0xEA, 0x11, 0x06, 0x2D, 0xDB, 0xDD, 0x2F, 0x5F, 0xB7, 0x5B, 0x06,
0xD5, 0xA4, 0xFE, 0xEA, 0xE8, 0x76, 0xEA, 0x29, 0xD3, 0x21, 0x52, 0x0D, 0x96, 0xA4, 0xF7, 0x58,
0x74, 0xAF, 0xAD, 0xB8, 0x29, 0xDB, 0x5D, 0x0A, 0xC2, 0x89, 0xEF, 0xF6, 0x35, 0x2A, 0xD6, 0xEB,
0x03, 0xDD, 0x73, 0x41, 0x6D, 0xBB, 0x52, 0xFA, 0xC0, 0x5E, 0xFD, 0xFF, 0xF2, 0x64, 0x2E, 0x42,
0xCB, 0x95, 0x40, 0xA7, 0xDD, 0x2E, 0x7C, 0xEF, 0x2A, 0x18, 0x97, 0x53, 0x67, 0xDB, 0x00, 0xC5,
0x94, 0xFD, 0x2F, 0xD9, 0xF7, 0x10, 0xA6, 0xC1, 0x0B, 0x20, 0x4C, 0xE0, 0x2E, 0x72, 0x6D, 0xE9,
0x00, 0x23, 0xE4, 0x63, 0xD3, 0x03, 0x16, 0x8C, 0x71, 0x35, 0x95, 0xAE, 0x99, 0x88, 0xA4, 0x40,
0x9D, 0x3C, 0xCB, 0x58, 0x4E, 0x78, 0xF4, 0x9E, 0xBD, 0x17, 0xDD, 0x6E, 0x08, 0xDF, 0xD9, 0x66,
0xEB, 0xD9, 0x2F, 0x7E, 0x41, 0x29, 0xCB, 0xD3, 0xEA, 0x3B, 0xF0, 0x57, 0xAE, 0xD9, 0x64, 0x8E,
0x75, 0xE7, 0x48, 0x71, 0x22, 0xD9, 0x68, 0xC7, 0x49, 0x41, 0x9B, 0x78, 0xCE, 0x05, 0x1C, 0xA8,
0xFF, 0x66, 0x4A, 0xE1, 0x56, 0x13, 0x47, 0x9A, 0x1E, 0x99, 0xC4, 0x00, 0xE4, 0xF3, 0xBD, 0x00,
0x9B, 0x58, 0xA0, 0xC7, 0xDC, 0x9B, 0x53, 0xE7, 0x81, 0xF6, 0xDE, 0x8E, 0x82, 0x35, 0x77, 0xB4,
0x47, 0x44, 0x6B, 0x7E, 0xDA, 0x6D, 0x49, 0xD6, 0x1C, 0x7A, 0xFB, 0x83, 0xA7, 0xCE, 0xA7, 0x0C,
0xE8, 0xAD, 0xBA, 0x94, 0xBF, 0xB0, 0xD9, 0xEC, 0x7D, 0x7A, 0xC5, 0x73, 0x38, 0xAA, 0x61, 0xDE,
0x25, 0xAE, 0x86, 0x18, 0x78, 0x04, 0x5C, 0x9A, 0x2C, 0x58, 0x54, 0xD2, 0x8D, 0x01, 0x30, 0x3F,
0xE1, 0xBA, 0x6D, 0x18, 0x9D, 0x01, 0x98, 0x94, 0x19, 0xE0, 0x46, 0x91, 0xFC, 0xAF, 0x9B, 0x88,
0x2A, 0xB9, 0x3E, 0x97, 0x1D, 0xA1, 0x0D, 0x2A, 0x57, 0xE7, 0xBF, 0x8F, 0xE8, 0x82, 0xDC, 0x5F,
0xF9, 0xD6, 0x3B, 0x1A, 0x8C, 0x10, 0xCF, 0x17, 0x48, 0x13, 0x09, 0x1D, 0x0D, 0xC6, 0x16, 0x75,
0x59, 0xD2, 0x28, 0x08, 0xE6, 0x03, 0x3C, 0x47, 0xED, 0xC0, 0x9C, 0x0F, 0xD2, 0x24, 0x1E, 0xD2,
0xAF, 0x20, 0x05, 0xEF, 0x88, 0x8C, 0xC0, 0x8F, 0x7C, 0xA4, 0xF7, 0xB6, 0xC5, 0x26, 0xBC, 0xF8,
0xDB, 0xF3, 0xC1, 0xEE, 0x63, 0x76, 0xBC, 0xBC, 0xB1, 0x90, 0xE0, 0x1C, 0x13, 0xF4, 0x6D, 0x03,
0x44, 0x2D, 0xE4, 0xFB, 0x43, 0x78, 0x05, 0x00, 0xEA, 0x2C, 0xBC, 0x86, 0xA4, 0x72, 0x1B, 0xC8,
0x0D, 0xC0, 0x6E, 0xD4, 0x87, 0x16, 0x0F, 0x55, 0xE6, 0x02, 0x88, 0x9C, 0xC5, 0x99, 0x85, 0x8C,
0x8A, 0x6A, 0x38, 0xCD, 0xE8, 0x57, 0xF1, 0x80, 0x60, 0x52, 0xB8, 0xEB, 0xB0, 0xC2, 0xC4, 0xA9,
0x53, 0x19, 0xDC, 0x53, 0xCE, 0x66, 0xDB, 0xFA, 0x4D, 0x17, 0x39, 0xA4, 0xEA, 0x9D, 0xE8, 0x14,
0x77, 0xCA, 0x62, 0xDD, 0x26, 0xEA, 0x76, 0x08, 0xF5, 0xFF, 0xEE, 0xD5, 0x23, 0x8D, 0xF1, 0xFE,
0x8E, 0x93, 0xEA, 0x22, 0xF8, 0xE9, 0xE8, 0x61, 0xE6, 0x32, 0xB9, 0x7E, 0xB3, 0x5D, 0x16, 0xE2,
0xED, 0x96, 0xEC, 0x89, 0x60, 0xE6, 0x44, 0x1C, 0x4B, 0xFC, 0x49, 0x08, 0x73, 0x08, 0xC1, 0x13,
0xA7, 0xCB, 0xAD, 0xEA, 0x24, 0x09, 0xA9, 0x12, 0x48, 0x7A, 0x19, 0xC5, 0x0C, 0x6D, 0x91, 0xBE,
0xC3, 0x65, 0xD3, 0x46, 0xCF, 0xCE, 0x81, 0xFC, 0x9E, 0xA9, 0x51, 0xD9, 0x9D, 0xC1, 0x85, 0x36,
0xED, 0xDB, 0xC7, 0x09, 0x16, 0xC5, 0xD0, 0xF1, 0xB7, 0x4C, 0x80, 0x5F, 0x40, 0x7A, 0xB3, 0xEE,
0x07, 0xE7, 0xF5, 0x50, 0xC3, 0xF0, 0xE7, 0xEB, 0x89, 0xF6, 0x0F, 0x9E, 0x36, 0x42, 0x52, 0x1A,
0x41, 0xDF, 0x5C, 0xEC, 0x27, 0xC1, 0x92, 0x14, 0xE8, 0x58, 0xFA, 0xF6, 0x6F, 0x1D, 0x5D, 0xE9,
0x80, 0xBD, 0x83, 0xD6, 0x50, 0xA4, 0x5B, 0xF2, 0xBD, 0xDA, 0xB4, 0x3A, 0x19, 0x51, 0x1B, 0xC7,
0x2E, 0x17, 0xD4, 0x19, 0x78, 0x9F, 0x18, 0xFB, 0xD7, 0x20, 0x3B, 0x70, 0x30, 0xE1, 0x4C, 0x36,
0x83, 0xD8, 0x9F, 0xB9, 0x57, 0x4F, 0xDF, 0x66, 0x54, 0x37, 0xB4, 0xDD, 0xB3, 0xB6, 0x52, 0x2D,
0x1D, 0x30, 0x19, 0x60, 0x6A, 0x7A, 0x85, 0x7D, 0xC3, 0xB3, 0xDC, 0x1D, 0xAB, 0xB4, 0xE5, 0x3F,
0x72, 0x12, 0xBB, 0x46, 0xEC, 0x28, 0xFC, 0x2B, 0x9E, 0x36, 0xD0, 0x92, 0x07, 0x59, 0x59, 0xFE,
0x3C, 0x9C, 0x52, 0x1B, 0x91, 0x43, 0xA1, 0xFD, 0xF6, 0x79, 0xB4, 0x5C, 0xEE, 0xCB, 0x00, 0xA4,
0xB2, 0xFF, 0xD1, 0xDA, 0xF4, 0x8A, 0x24, 0xF9, 0xCF, 0x61, 0xA5, 0x9D, 0xEC, 0x6D, 0xC3, 0xCF,
0xEC, 0xC6, 0x9A, 0x12, 0x2B, 0x9A, 0xFF, 0xDC, 0x61, 0x2E, 0x4D, 0x5D, 0xA5, 0x53, 0x6C, 0x34,
0x8E, 0x62, 0x23, 0x85, 0x55, 0x40, 0xC1, 0x89, 0x1D, 0x7F, 0x65, 0xF3, 0x03, 0xCE, 0xA1, 0xFF,
0x37, 0xD6, 0xFD, 0x1F, 0x68, 0x1A, 0xFF, 0xBD, 0xB4, 0xEC, 0x77, 0xE4, 0xF8, 0x01, 0xE6, 0x30,
0xBB, 0xC3, 0x69, 0xC7, 0xDE, 0xAE, 0xA6, 0x4F, 0x66, 0xCE, 0xCF, 0xB6, 0xF0, 0x82, 0x94, 0x6C,
0x8D, 0xBE, 0xD7, 0xF9, 0x0B, 0xDD, 0xD6, 0x0A, 0x93, 0xF0, 0xF3, 0xC0, 0xFC, 0xD5, 0x16, 0xDE,
0x12, 0xF3, 0x0D, 0xFF, 0x1F, 0xCE, 0xD7, 0xFD, 0x8F, 0x3A, 0xF6, 0xFA, 0x8B, 0xA4, 0x00, 0xF3,
0x92, 0x48, 0x88, 0x7C, 0xD0, 0x0C, 0xDE, 0xC0, 0xE2, 0x84, 0xA9, 0x05, 0xE2, 0x8E, 0xD2, 0xDA,
0x00, 0xA8, 0x20, 0x3E, 0x89, 0xEC, 0x81, 0xE5, 0xE4, 0xED, 0xFA, 0x37, 0xCC, 0x2A, 0x78, 0xC8,
0x49, 0xF4, 0xE4, 0xF3, 0x98, 0x56, 0x0A, 0x86, 0x49, 0x78, 0x3A, 0xEC, 0x64, 0xAA, 0xBC, 0x39,
0x95, 0xAC, 0xD5, 0xA8, 0x2A, 0x23, 0x49, 0x5A, 0xE0, 0xB0, 0xFB, 0x8A, 0x45, 0xE1, 0x2A, 0xBA,
0xA3, 0x39, 0x87, 0x91, 0x1C, 0xF9, 0x0D, 0x9F, 0x27, 0x4A, 0x0C, 0x5B, 0x73, 0x41, 0xB8, 0xF3,
0x8C, 0x05, 0x4F, 0x97, 0x46, 0x4E, 0x19, 0x2C, 0x91, 0xA2, 0xFD, 0xE3, 0x3B, 0x76, 0x1B, 0xE0,
0xEB, 0x8E, 0x08, 0xFC, 0x6A, 0xBD, 0x53, 0x5A, 0x93, 0x6B, 0x6E, 0xCF, 0x63, 0xF0, 0x9D, 0xE3,
0xC4, 0x8F, 0xBE, 0x19, 0xD2, 0x25, 0x50, 0xC4, 0x87, 0x02, 0xD6, 0xFC, 0xC3, 0x69, 0x97, 0xB5,
0x26, 0x9D, 0x7A, 0xBE, 0x61, 0x92, 0xA8, 0x08, 0x19, 0x25, 0xF4, 0x77, 0xD6, 0x1B, 0x75, 0x51,
0x43, 0xBF, 0x58, 0x1F, 0x4B, 0xD2, 0x57, 0x7E, 0xA5, 0x51, 0xD4, 0x6A, 0x56, 0x46, 0x9E, 0x61,
0xFB, 0xB7, 0xD2, 0x9B, 0xEA, 0x8E, 0xB9, 0x69, 0xAC, 0xEC, 0xB3, 0x80, 0x03, 0x31, 0xD5, 0x8A,
0x40, 0xA5, 0x20, 0x48, 0x58, 0xD1, 0xEE, 0x10, 0xBA, 0x91, 0xAC, 0xEA, 0xDC, 0x15, 0xB6, 0xFF,
0xE6, 0xD4, 0x25, 0xDB, 0xD3, 0x36, 0x86, 0xE2, 0x65, 0xDD, 0x40, 0x3A, 0xC2, 0x31, 0x31, 0x9F,
0x7E, 0x6C, 0xFA, 0xF8, 0x57, 0x0E, 0x49, 0x80, 0x1E, 0xED, 0x64, 0xF6, 0x53, 0xD0, 0xEF, 0x75,
0x82, 0x98, 0x28, 0xEE, 0xE1, 0x74, 0x09, 0xA6, 0x7A, 0x84, 0x73, 0x91, 0x96, 0xBC, 0x8B, 0x1F,
0x99, 0x46, 0xE5, 0x4A, 0xC3, 0x99, 0x3D, 0x99, 0xC3, 0x49, 0x1F, 0xA6, 0x1F, 0xA5, 0x3C, 0x19,
0x4D, 0x9E, 0x5A, 0x65, 0xFA, 0x79, 0xFC, 0x89, 0x77, 0xB8, 0xF8, 0x11, 0x56, 0x5E, 0xEE, 0x64,
0xD3, 0x96, 0xAF, 0x76, 0x4D, 0xA7, 0x51, 0x7C, 0xDA, 0x82, 0x21, 0xF1, 0x36, 0x51, 0x9C, 0xE0,
0x09, 0x16, 0x01, 0x4F, 0xEC, 0x3C, 0x43, 0xAB, 0xA0, 0x21, 0xC1, 0xE5, 0x32, 0x7D, 0xA1, 0x64,
0x31, 0x22, 0xB0, 0xD0, 0x7A, 0x86, 0x74, 0xA4, 0x94, 0x5E, 0xB4, 0x1E, 0xF6, 0xDC, 0x47, 0xBF,
0x28, 0x10, 0xDD, 0x6D, 0x09, 0x4B, 0xC4, 0x8B, 0x08, 0x0A, 0x3A, 0x10, 0xC1, 0xC9, 0x6C, 0xCA,
0x1A, 0xEB, 0x99, 0x62, 0x5B, 0xA0, 0xF9, 0x57, 0x2C, 0x32, 0x4B, 0x76, 0x0E, 0x40, 0xE7, 0x92,
0xFA, 0x37, 0xE6, 0x64, 0xF2, 0x49, 0x35, 0x52, 0x64, 0x17, 0xD1, 0xFE, 0xF3, 0xF4, 0x5D, 0xC6,
0xBE, 0x83, 0x6B, 0x82, 0x3D, 0xB8, 0x4D, 0x43, 0xC4, 0xBB, 0xAD, 0x26, 0xD5, 0x5E, 0xB1, 0xAF,
0x80, 0x8A, 0x7A, 0xD0, 0x7C, 0xAA, 0x8A, 0xE6, 0x16, 0x91, 0x31, 0x9C, 0xF2, 0xE1, 0x1A, 0x85,
0x80, 0x5C, 0x3A, 0x65, 0x70, 0xC0, 0xEF, 0x90, 0x79, 0xED, 0x59, 0x07, 0xDD, 0xE8, 0xAF, 0xFE,
0x9B, 0x94, 0x51, 0x0D, 0xA6, 0x11, 0x47, 0xD8, 0xE7, 0x81, 0xDB, 0x65, 0x7A, 0x35, 0x32, 0xFB,
0x36, 0x14, 0x67, 0x2F, 0xA6, 0x98, 0x70, 0xF3, 0x2F, 0xB5, 0xD0, 0x12, 0x46, 0x3F, 0x2C, 0x44,
0x87, 0xC0, 0xF8, 0xDB, 0xB9, 0xF9, 0x76, 0x9E, 0xB8, 0x87, 0x44, 0x39, 0x4A, 0xCF, 0xFC, 0xCE,
0xD1, 0x7C, 0x4D, 0xDF, 0x73, 0x0F, 0xA7, 0x62, 0x6B, 0xD1, 0xC2, 0x6F, 0x16, 0xF1, 0xBA, 0xF3,
0x8C, 0xD5, 0xB9, 0xE1, 0x96, 0x87, 0xF3, 0xF4, 0x80, 0x79, 0x34, 0x09, 0xB1, 0x8A, 0x65, 0xC5,
0x15, 0xD4, 0xCC, 0x45, 0x99, 0xCB, 0x2E, 0x6D, 0x65, 0xBB, 0xFF, 0x01, 0x00, 0x33, 0xCB, 0x16,
0x86, 0x78, 0xF0, 0x39, 0x17, 0x05, 0xC4, 0x9D, 0x7C, 0xBE, 0xAA, 0x23, 0x6A, 0xF9, 0xC3, 0x91,
0xA0, 0x76, 0xCC, 0x39, 0xA2, 0x61, 0xE1, 0x13, 0xCD, 0xF8, 0xEC, 0xE6, 0x19, 0x3E, 0xD9, 0x1C,
0x7B, 0x2E, 0x20, 0xCA, 0x1F, 0xB0, 0xAE, 0xB2, 0xDE, 0xFC, 0xF6, 0x9C, 0xDC, 0xFC, 0xB5, 0xB0,
0xBD, 0x8E, 0x90, 0xE6, 0x64, 0x05, 0x80, 0xD8, 0x28, 0xF8, 0x99, 0xAF, 0x91, 0x2A, 0xEE, 0x74,
0x6E, 0x0B, 0x31, 0xD0, 0xAE, 0x92, 0x6B, 0xC8, 0xB8, 0x32, 0xA9, 0xED, 0x4E, 0x70, 0x2F, 0x7E,
0xB6, 0xB4, 0xA1, 0x8F, 0x7C, 0x33, 0xCF, 0xC5, 0x5E, 0xB0, 0x98, 0x03, 0x7C, 0x06, 0x40, 0x6A,
0x38, 0xB3, 0x69, 0x6B, 0x69, 0xD7, 0x52, 0x77, 0xAA, 0x23, 0x70, 0x0C, 0xE6, 0x0D, 0x26, 0x12,
0x7D, 0xF3, 0xA0, 0x2D, 0xE3, 0x42, 0xC7, 0x5D, 0xFF, 0x2E, 0x49, 0xAE, 0x5E, 0xEC, 0x0C, 0x7A,
0x08, 0x0B, 0xE4, 0x13, 0xF6, 0x65, 0x75, 0xA7, 0x76, 0x02, 0xF6, 0xAA, 0x5C, 0xF1, 0x6B, 0xAB,
0xA6, 0x39, 0x2D, 0x1C, 0xC5, 0x5E, 0x1B, 0x75, 0x29, 0xA2, 0x8D, 0xD0, 0xF5, 0xB3, 0x9D, 0x3C,
0xBA, 0xBD, 0xCB, 0x1F, 0xEF, 0x20, 0xC5, 0xE3, 0x88, 0xC5, 0x44, 0x58, 0x1F, 0xFC, 0x7B, 0x39,
0x6E, 0x3F, 0xA3, 0x30, 0x3A, 0x1A, 0xE5, 0x67, 0xE0, 0x44, 0xF0, 0x7C, 0x50, 0x7F, 0x66, 0x54,
0x1B, 0x5D, 0xD5, 0x75, 0x7D, 0xE1, 0x9B, 0x77, 0x38, 0x46, 0xBC, 0x8C, 0x37, 0x1D, 0xA8, 0xA7,
0x2B, 0xC0, 0x07, 0xDB, 0xE6, 0x6C, 0x63, 0x42, 0x4B, 0x6E, 0xEB, 0x42, 0xF2, 0x65, 0xEB, 0xEE,
0x85, 0x09, 0xDC, 0x6D, 0x11, 0xDE, 0x08, 0xD6, 0x1E, 0x97, 0x09, 0x85, 0x36, 0x5E, 0x5A, 0xDA,
0x8D, 0x54, 0x99, 0x6C, 0x8C, 0xAC, 0xE4, 0xD7, 0x6D, 0x27, 0x93, 0x05, 0x41, 0xCF, 0xB1, 0x41,
0x64, 0x05, 0xCC, 0x0B, 0xDD, 0x65, 0xF2, 0x00, 0xFE, 0x5A, 0xD2, 0xD1, 0x0C, 0x60, 0x6B, 0x1F,
0xAF, 0x3C, 0x1F, 0x1D, 0xED, 0xF5, 0xB9, 0xBA, 0xB8, 0xA7, 0xD6, 0x44, 0xA3, 0xFE, 0xCB, 0xB1,
0x30, 0xE1, 0xED, 0xDA, 0xDF, 0x38, 0xD1, 0x79, 0x90, 0x7A, 0x62, 0x5E, 0x74, 0x61, 0xC6, 0xC4,
0x07, 0x40, 0x0F, 0x1E, 0x2A, 0x53, 0x9F, 0xB1, 0x8E, 0x00, 0x9B, 0xB1, 0xAC, 0xA0, 0x12, 0x9D,
0x7E, 0xC6, 0xBA, 0xAF, 0x48, 0xE1, 0xA7, 0xF9, 0xC1, 0x02, 0x63, 0x42, 0xA7, 0x96, 0xCC, 0x46,
0x2A, 0xA8, 0xD6, 0x16, 0x5F, 0x53, 0x2D, 0x2A, 0xC4, 0x41, 0xA3, 0xBA, 0x6D, 0x7F, 0x80, 0x17,
0x6B, 0xDD, 0xC5, 0xEB, 0x91, 0x02, 0x8C, 0x62, 0x52, 0xAF, 0xE0, 0x62, 0xAD, 0x63, 0xE2, 0x41,
0xE3, 0x13, 0xEA, 0x26, 0xB2, 0x5A, 0xE5, 0xB2, 0xF6, 0x7B, 0xA5, 0x3C, 0xCD, 0xB2, 0xDB, 0xBC,
0x74, 0xCA, 0xD5, 0xEE, 0x8E, 0xF8, 0xD4, 0x92, 0x35, 0x7B, 0x11, 0x82, 0x13, 0x13, 0xEF, 0xCB,
0xA5, 0xE5, 0xD0, 0x07, 0x8E, 0x7D, 0xBD, 0x81, 0x35, 0xBF, 0x14, 0x4B, 0xAD, 0x8A, 0x55, 0x65,
0xFB, 0x5D, 0x54, 0xC3, 0xE9, 0x65, 0x7C, 0x22, 0x6E, 0x4E, 0x48, 0x46, 0xAB, 0x2E, 0x6A, 0x93,
0xB5, 0x7E, 0x3F, 0x1E, 0x9F, 0x6E, 0xC9, 0x11, 0xF1, 0xC9, 0x38, 0xE0, 0x8F, 0xAD, 0x83, 0x1F,
0x6D, 0xD2, 0xD6, 0x86, 0x98, 0x3C, 0x25, 0xA3, 0x9A, 0x49, 0xE3, 0x02, 0xC6, 0xD6, 0x2A, 0x09,
0x8B, 0x1F, 0xCD, 0x0A, 0x2B, 0x8D, 0x49, 0x46, 0xB8, 0x15, 0x45, 0x90, 0x71, 0x10, 0x4C, 0xAE,
0x5C, 0x3D, 0x6A, 0x54, 0x82, 0xEE, 0x88, 0x24, 0x69, 0x8D, 0x99, 0x7F, 0x05, 0xDC, 0x46, 0x5D,
0x69, 0xC1, 0x6C, 0x9D, 0xB7, 0x9F, 0x12, 0x75, 0xB2, 0x36, 0xA5, 0xD4, 0xCB, 0xBD, 0x2F, 0xB4,
0xB0, 0x88, 0x79, 0x9A, 0x34, 0x21, 0xB9, 0x29, 0x7C, 0xB1, 0x6F, 0x21, 0xFB, 0xD6, 0xB8, 0x86,
0xF8, 0xE0, 0x45, 0xE8, 0x7F, 0x07, 0x9B, 0x7B, 0xC9, 0x38, 0x48, 0x2E, 0x9E, 0xBB, 0x7B, 0x9C,
0x7C, 0xB2, 0x86, 0xE1, 0x2E, 0xA0, 0x8F, 0xB0, 0x32, 0xF2, 0xF0, 0xAA, 0x18, 0x53, 0x78, 0xEB,
0x71, 0x60, 0x4E, 0xF9, 0x6E, 0x70, 0xD6, 0x4A, 0x08, 0x3E, 0x09, 0xCB, 0xA1, 0x8B, 0xC3, 0xD3,
0xFC, 0xE8, 0xC8, 0xC6, 0x9A, 0xC3, 0xAB, 0x8C, 0xD8, 0x1F, 0x7F, 0x17, 0xC8, 0x92, 0x6E, 0x6A,
0x9C, 0x27, 0xA5, 0xF4, 0xA4, 0x51, 0x08, 0x61, 0xA7, 0x76, 0x23, 0x33, 0x6F, 0xAA, 0xE2, 0x76,
0x46, 0xFE, 0x7D, 0xDA, 0xCE, 0xF8, 0x07, 0xDD, 0xED, 0xE9, 0x38, 0xE0, 0x41, 0x23, 0x7B, 0x7C,
0x4B, 0x3D, 0x6C, 0x63, 0x55, 0xEF, 0xB0, 0x37, 0x75, 0x3D, 0x52, 0x97, 0x0E, 0x4A, 0xBF, 0x4E,
0x00, 0x4A, 0xDD, 0xFF, 0x14, 0x9D, 0xE4, 0xAD, 0x59, 0x4F, 0xEA, 0x23, 0x95, 0x06, 0x2B, 0xF5,
0x0B, 0x0A, 0x28, 0x89, 0x78, 0x9B, 0x82, 0xDE, 0x51, 0x6A, 0x9A, 0x7B, 0xCA, 0x94, 0xCC, 0x5A,
0xD5, 0x5D, 0x54, 0x02, 0xAC, 0x2E, 0x94, 0x3D, 0x29, 0x50, 0xFE, 0x42, 0xB2, 0x01, 0x1F, 0x07,
0x91, 0xAB, 0xEA, 0x49, 0x8C, 0xF4, 0x36, 0xD3, 0x38, 0xB3, 0x9F, 0xDF, 0x04, 0x07, 0x51, 0xCF,
0x17, 0xEE, 0xA6, 0x43, 0x0C, 0xFC, 0xA8, 0xEA, 0x56, 0x92, 0x91, 0x99, 0x59, 0xBE, 0xEA, 0x2A,
0xD2, 0xD8, 0x64, 0x38, 0xC0, 0xD5, 0x87, 0x4D, 0xC4, 0x15, 0xB1, 0x4C, 0xAE, 0x32, 0x3B, 0xCD,
0x8B, 0x2A, 0xF9, 0x3A, 0x0E, 0xC2, 0x24, 0x1E, 0xEF, 0x94, 0xFB, 0x58, 0xB6, 0x6C, 0x5E, 0x97,
0xD6, 0x9B, 0xDF, 0xCB, 0xFF, 0xC5, 0xF8, 0xE5, 0xD8, 0x3E, 0x76, 0x5D, 0x1D, 0xA2, 0x63, 0xB2,
0xF0, 0x63, 0x9B, 0xB4, 0x6D, 0x15, 0xF7, 0xFE, 0xA2, 0xDD, 0x83, 0x7F, 0x85, 0x1E, 0x8B, 0x3E,
0x53, 0xD7, 0x51, 0xEE, 0xE1, 0x0B, 0x4F, 0xA2, 0x9D, 0x82, 0x04, 0x36, 0x68, 0x20, 0x7D, 0x9F,
0xDF, 0x62, 0x59, 0x71, 0xEF, 0x4A, 0x1E, 0x68, 0x72, 0xFB, 0xDF, 0x53, 0x56, 0x63, 0xA0, 0x2B,
0xC6, 0xD2, 0x51, 0xA3, 0x5D, 0x4D, 0xD3, 0x0A, 0xA8, 0xF7, 0x90, 0xA3, 0xFF, 0xFD, 0xA3, 0xB8,
0x9D, 0x1E, 0xD9, 0x1E, 0x94, 0x73, 0x5E, 0xFE, 0x5F, 0xDD, 0x9D, 0x2D, 0x81, 0x82, 0x0A, 0x19,
0xBA, 0xDB, 0x37, 0xE0, 0xE1, 0x88, 0x24, 0xCC, 0x1E, 0xC8, 0xE4, 0xC4, 0xDE, 0xB2, 0x34, 0x9B,
0x88, 0x60, 0x2E, 0xFF, 0x57, 0x01, 0x65, 0x74, 0x13, 0xCC, 0xE9, 0x01, 0x25, 0xAE, 0x49, 0x51,
0x4C, 0x40, 0x85, 0xA1, 0x28, 0xD4, 0x37, 0x0E, 0x83, 0x86, 0x60, 0x2E, 0x52, 0x93, 0x76, 0xE2,
0x7A, 0x66, 0x2D, 0x7A, 0x0C, 0xEB, 0xAB, 0x27, 0x1F, 0xC5, 0xE7, 0xD3, 0xA2, 0x1C, 0x50, 0xCA,
0x59, 0x4A, 0x56, 0x10, 0xC8, 0xF0, 0xA3, 0xEF, 0x1B, 0x98, 0xE3, 0xDF, 0xAA, 0xA9, 0x3E, 0x32,
0x27, 0xA0, 0x90, 0xC7, 0x74, 0xC6, 0xD3, 0xBD, 0x8F, 0x47, 0x59, 0x19, 0xC8, 0xFB, 0xD8, 0xED,
0x8A, 0xDF, 0xE4, 0x40, 0xF0, 0x28, 0xC6, 0x7E, 0x13, 0x9E, 0xC6, 0x2E, 0x57, 0x6C, 0xAC, 0x88,
0xA9, 0x1F, 0x52, 0xB8, 0xDB, 0xDA, 0x01, 0x05, 0x02, 0xAC, 0x44, 0x29, 0xAD, 0xAF, 0x06, 0x74,
0x11, 0x51, 0x62, 0xEA, 0x69, 0x8C, 0xF4, 0xEE, 0xE2, 0x1B, 0x97, 0xEF, 0x7C, 0x17, 0xEC, 0x3A,
0xA4, 0x1D, 0xD6, 0xB5, 0xD4, 0xEF, 0xF2, 0x97, 0xD0, 0xF3, 0x34, 0xAA, 0xBB, 0x60, 0x17, 0x03,
0x02, 0x55, 0x83, 0xC3, 0xCE, 0xCE, 0x5A, 0xE9, 0xD1, 0xF6, 0x44, 0x50, 0x28, 0x26, 0x43, 0x5A,
0xD6, 0x79, 0xB9, 0x24, 0xCC, 0x1B, 0x3A, 0x78, 0x43, 0x0D, 0x47, 0xE7, 0x38, 0x01, 0xA2, 0xD8,
0xE3, 0x67, 0xBF, 0x8D, 0x2A, 0x3C, 0x53, 0xA8, 0x87, 0x84, 0x2E, 0x42, 0xD9, 0x6A, 0x8C, 0x62,
0xF1, 0x12, 0x3A, 0xAF, 0x1D, 0x38, 0x8D, 0x51, 0x9D, 0xEA, 0xBC, 0x35, 0x90, 0xF0, 0x94, 0xA0,
0x42, 0xD9, 0xC0, 0x91, 0xFB, 0x58, 0x73, 0x0B, 0xEE, 0xA0, 0xF4, 0xB5, 0xFD, 0x38, 0x4C, 0xB1,
0xA9, 0x49, 0x28, 0x74, 0x7E, 0xC1, 0xFA, 0xCC, 0x0C, 0xAD, 0xE9, 0xE6, 0x9A, 0xA5, 0x92, 0xEE,
0xC4, 0xC6, 0x1C, 0xAF, 0x80, 0x11, 0x49, 0x9C, 0x2F, 0x45, 0xC2, 0xF1, 0x1E, 0x03, 0x12, 0x23,
0xE6, 0xB4, 0x9C, 0x65, 0xA9, 0xE6, 0x43, 0x6E, 0xF0, 0x7E, 0xFB, 0x94, 0xF8, 0x9E, 0x23, 0x59,
0xF8, 0x7C, 0xFC, 0x0A, 0x03, 0xF8, 0xAA, 0x2D, 0x6D, 0x92, 0xEF, 0xEC, 0xA4, 0x32, 0x28, 0xA7,
0xA2, 0xA5, 0xF5, 0xE0, 0x29, 0x66, 0x8C, 0x8C, 0xA5, 0xEB, 0x08, 0x95, 0x11, 0x87, 0x63, 0x88,
0xF8, 0x5E, 0x08, 0xFD, 0x6F, 0xEA, 0x43, 0x55, 0x9D, 0xB2, 0x35, 0xC6, 0xAF, 0xDF, 0xE2, 0xCF,
0xCB, 0x7A, 0xCB, 0x21, 0x9E, 0xDD, 0xDD, 0x2F, 0x9B, 0xCB, 0xD7, 0x1E, 0x11, 0x67, 0xD4, 0xA9,
0x58, 0x95, 0xD2, 0xAD, 0x24, 0xF4, 0x11, 0xF6, 0xE3, 0x77, 0x2F, 0xB3, 0xAD, 0xA4, 0x45, 0xB8,
0x54, 0x3E, 0x6F, 0x22, 0x1D, 0x1F, 0xA2, 0xC4, 0xCA, 0x81, 0xC8, 0x24, 0x03, 0xCB, 0x34, 0x38,
0x0E, 0xF5, 0xCF, 0x68, 0x57, 0x5C, 0x5E, 0x3C, 0xF2, 0x39, 0xB7, 0xAA, 0xE0, 0x0B, 0xF3, 0x87,
0x13, 0x27, 0x99, 0x5C, 0x33, 0xBB, 0xAE, 0x87, 0x9A, 0xA2, 0xD0, 0x6B, 0x63, 0xFB, 0x94, 0xF7,
0x33, 0x13, 0x25, 0xC4, 0x97, 0x9E, 0x1F, 0x49, 0xB8, 0x44, 0x63, 0xD7, 0x1D, 0x97, 0x48, 0xE7,
0x91, 0xE9, 0x62, 0xDC, 0x2B, 0xD6, 0xC1, 0xE1, 0x57, 0x68, 0xE2, 0x59, 0xE3, 0xFA, 0x0D, 0xEB,
0x01, 0x57, 0xCF, 0xD1, 0x67, 0xB6, 0x60, 0xAC, 0x7B, 0x1D, 0x4C, 0x15, 0xB0, 0xD0, 0x0F, 0x17,
0xF8, 0xF3, 0xD5, 0x85, 0xDE, 0xFF, 0x12, 0xE6, 0x21, 0x06, 0xE4, 0x71, 0x71, 0x44, 0xD0, 0x73,
0x3F, 0x23, 0x17, 0xDC, 0x82, 0x24, 0x52, 0xA8, 0x4D, 0x73, 0x94, 0xB4, 0x95, 0xAB, 0x0B, 0xF5,
0xEB, 0x70, 0x90, 0xFF, 0x5F, 0xFA, 0xB2, 0xFC, 0x47, 0xA3, 0x2D, 0x57, 0xF8, 0xB6, 0xFD, 0xF4,
0xF6, 0xAE, 0xC6, 0x35, 0x13, 0x4A, 0xBF, 0x3D, 0xDA, 0x6F, 0xFE, 0x30, 0x52, 0x1E, 0x7F, 0x28,
0x31, 0x41, 0xC0, 0xC9, 0x7F, 0x57, 0xE7, 0x1F, 0x6D, 0x57, 0xD6, 0x09, 0x14, 0xDC, 0x62, 0xCE,
0x3B, 0xEB, 0x66, 0x1C, 0xA4, 0xFA, 0x67, 0x9D, 0x3B, 0x4B, 0x76, 0x65, 0x94, 0xDE, 0xA0, 0x31,
0x82, 0x80, 0xD3, 0x73, 0x73, 0x68, 0x38, 0x1D, 0x54, 0xB1, 0xE1, 0xDC, 0x24, 0xBE, 0xA7, 0xCD,
0xC6, 0x45, 0x6F, 0xC1, 0x49, 0xC5, 0xB7, 0xC4, 0x80, 0xA3, 0x57, 0x89, 0x0C, 0xC6, 0x5E, 0x80,
0x3F, 0x78, 0xB6, 0x17, 0x4E, 0x92, 0x77, 0xB4, 0xFF, 0xF2, 0x34, 0x4F, 0xBF, 0x50, 0x8B, 0x38,
0x22, 0x60, 0x43, 0x55, 0xE8, 0x53, 0x0C, 0x42, 0xE0, 0xA9, 0x10, 0xB6, 0x89, 0x85, 0x9B, 0xC3,
0xF1, 0x84, 0xE5, 0xBE, 0x4F, 0x76, 0xBA, 0x07, 0x32, 0xF7, 0x20, 0x41, 0xE7, 0x7A, 0xF2, 0x87,
0x52, 0x3A, 0xF2, 0x2C, 0x88, 0x8E, 0x97, 0x05, 0xFF, 0xE4, 0xD6, 0xCF, 0x28, 0x30, 0xC0, 0xB5,
0x6E, 0x89, 0xFA, 0x61, 0x5C, 0xFF, 0x54, 0x30, 0x4F, 0xDD, 0xF6, 0x49, 0x49, 0xB8, 0x97, 0x22,
0x33, 0xC2, 0x75, 0x2A, 0x5A, 0xE4, 0x46, 0xCA, 0x16, 0xEA, 0x83, 0x7C, 0x85, 0xB1, 0x6B, 0x82,
0xC6, 0x93, 0xF0, 0xFD, 0xB7, 0x8A, 0x17, 0x0E, 0x8E, 0xD8, 0x71, 0xD6, 0xEF, 0x8A, 0xC9, 0x85,
0xDB, 0x47, 0x08, 0x7A, 0x3E, 0xF0, 0x34, 0x9B, 0x8C, 0x8B, 0xD4, 0x5D, 0x33, 0xFF, 0xDD, 0x89,
0x67, 0x9C, 0x90, 0x6B, 0x78, 0x54, 0xDF, 0x1C, 0xA6, 0x2E, 0x1B, 0xDE, 0x0D, 0x44, 0xB9, 0x6C,
0xF9, 0xF6, 0x4C, 0x57, 0xAA, 0x1E, 0xC3, 0x0E, 0x2A, 0xFC, 0x0D, 0xA6, 0x0F, 0x0E, 0xD6, 0xA7,
0xDC, 0x97, 0x85, 0x30, 0x3E, 0x1D, 0x6D, 0xD9, 0x28, 0x44, 0xA3, 0x58, 0xF4, 0x2E, 0xDA, 0xBB,
0xC9, 0xF2, 0x2F, 0xF6, 0xDB, 0xF2, 0xB9, 0xFD, 0x7D, 0x95, 0x5B, 0x26, 0x43, 0x64, 0x25, 0x66,
0xAD, 0x7A, 0x3A, 0xFB, 0x7B, 0x51, 0x0A, 0x33, 0xFD, 0x24, 0xB4, 0x45, 0x3D, 0x2E, 0xD4, 0xD8,
0xF6, 0x34, 0x5A, 0x3D, 0xFF, 0x08, 0x5F, 0x62, 0x53, 0x59, 0xFE, 0xA1, 0x9E, 0x8D, 0x04, 0xE3,
0xEF, 0x00, 0x49, 0x98, 0xD8, 0xAE, 0x8E, 0x7E, 0x92, 0x7F, 0x09, 0xE7, 0xA6, 0xEE, 0x85, 0xA9,
0x26, 0x73, 0x64, 0x74, 0x94, 0x36, 0x7D, 0x75, 0xA5, 0x69, 0x5B, 0x65, 0xC4, 0xC6, 0x20, 0xB6,
0xA8, 0x31, 0xFB, 0x70, 0x0D, 0x2D, 0x31, 0x9F, 0x16, 0xB5, 0xBF, 0x6A, 0x25, 0x52, 0x77, 0x79,
0xDA, 0xEC, 0x56, 0x57, 0x4C, 0x3C, 0xCB, 0x81, 0x08, 0x04, 0xF1, 0xA5, 0x51, 0x66, 0x6A, 0xA9,
0x96, 0xA4, 0x08, 0xDB, 0x10, 0x78, 0xD0, 0x15, 0x1B, 0x6A, 0x0A, 0xC2, 0xF2, 0x81, 0x61, 0x3E,
0x80, 0x15, 0x77, 0x24, 0x54, 0xE7, 0x86, 0xA0, 0xA7, 0x48, 0xE8, 0x15, 0xB4, 0xBD, 0x66, 0x24,
0x16, 0xBC, 0xDB, 0xF2, 0x98, 0x4C, 0x9E, 0xD5, 0xB4, 0x26, 0x20, 0x13, 0x5A, 0x86, 0x9E, 0xC3,
0xFB, 0xC7, 0xC1, 0xE6, 0xE7, 0x52, 0x12, 0xD4, 0x2C, 0x68, 0x6E, 0x69, 0x1E, 0x6D, 0xCA, 0xAB,
0x32, 0x16, 0x89, 0x0E, 0x43, 0x17, 0xCC, 0xE2, 0x66, 0xB0, 0x77, 0x7A, 0x31, 0x90, 0xBA, 0x31,
0xFB, 0x16, 0x28, 0xEC, 0x8F, 0xF7, 0x52, 0xF0, 0x64, 0xC1, 0x0C, 0x08, 0x37, 0x51, 0x8A, 0x59,
0x8B, 0x19, 0xE9, 0x42, 0x3A, 0x4A, 0x7C, 0x41, 0xA9, 0x19, 0xC9, 0xA8, 0x15, 0x6D, 0x02, 0x24,
0x41, 0x2C, 0xA5, 0xDF, 0xF3, 0xD9, 0x5E, 0xDC, 0x2A, 0x3D, 0xB1, 0x94, 0x5C, 0xB8, 0x6C, 0x8D,
0x25, 0xC3, 0xFE, 0xA9, 0x2F, 0x6F, 0x61, 0x14, 0x89, 0xB3, 0x8A, 0x7E, 0x72, 0x72, 0xC6, 0x76,
0xDE, 0x1B, 0x79, 0x31, 0x5D, 0x3D, 0xAD, 0xA9, 0x2E, 0xBF, 0x2A, 0x42, 0x32, 0x4E, 0x3B, 0x23,
0xE5, 0x8A, 0x0F, 0x58, 0x4A, 0x5A, 0x29, 0xDD, 0x20, 0x3E, 0x92, 0xE4, 0x87, 0x9C, 0x63, 0x75,
0x00, 0xDD, 0xF4, 0xF9, 0xF2, 0x35, 0x2E, 0x5D, 0xB9, 0x02, 0xEC, 0xCF, 0xBE, 0x00, 0x61, 0x58,
0xF7, 0x52, 0x40, 0x90, 0xEA, 0x28, 0x56, 0x6F, 0x13, 0xF6, 0xCF, 0xCA, 0xBF, 0x8A, 0xC9, 0x9D,
0x40, 0x30, 0xC3, 0xBE, 0xCC, 0xE4, 0xF4, 0xBE, 0xE4, 0xF7, 0xB7, 0xD9, 0x30, 0xEE, 0x34, 0x7F,
0x52, 0x25, 0xDA, 0x50, 0x42, 0x6E, 0x56, 0xBD, 0x83, 0x51, 0x2F, 0x0B, 0x26, 0xC9, 0x6B, 0x1A,
0xAC, 0x47, 0x4B, 0xD5, 0xDF, 0x7F, 0x1B, 0xF0, 0x76, 0x54, 0x74, 0x88, 0xA5, 0xB7, 0xE0, 0x13,
0x92, 0xAA, 0xD7, 0x25, 0xFF, 0x81, 0x7A, 0xB4, 0xFB, 0x40, 0xE1, 0xC3, 0x66, 0xA8, 0x2F, 0x2C,
0xA3, 0xEE, 0xC1, 0x92, 0x05, 0x92, 0xF6, 0x72, 0x9D, 0x8C, 0x6E, 0xD8, 0x03, 0xD4, 0xE9, 0xA7,
0x0A, 0xF2, 0x92, 0x7C, 0x61, 0x5E, 0xAC, 0x8F, 0xE3, 0xE4, 0x0F, 0xE1, 0xB1, 0xC8, 0xD0, 0x15,
0xDF, 0x5E, 0x80, 0x80, 0x16, 0x2D, 0x24, 0xC2, 0xB8, 0xE4, 0x4F, 0x5E, 0xEC, 0x7A, 0x9B, 0x28,
0xE2, 0xF8, 0x0E, 0x92, 0x55, 0x0C, 0x21, 0x9B, 0x4E, 0x0B, 0xC0, 0xC2, 0x91, 0xB3, 0xF6, 0x8B,
0xE0, 0xD2, 0xFF, 0xEB, 0x7E, 0x60, 0x74, 0x62, 0xD8, 0xFB, 0x59, 0x86, 0xE0, 0x0A, 0x03, 0xCB,
0xBB, 0x05, 0xEE, 0x11, 0x49, 0xA5, 0xEC, 0xBB, 0x9C, 0x20, 0x7E, 0x4E, 0xAF, 0x4C, 0x5D, 0xCA,
0x45, 0xAB, 0x14, 0xD0, 0x0C, 0xFD, 0x42, 0x6E, 0x2F, 0x12, 0xAB, 0x4B, 0x71, 0xF7, 0xD6, 0x60,
0x4E, 0x5A, 0x7B, 0xA7, 0x78, 0x30, 0xA1, 0x4E, 0x3F, 0x9D, 0x89, 0x1D, 0x8B, 0x86, 0x50, 0x81,
0xFD, 0x1E, 0xA3, 0x31, 0xA0, 0xCE, 0x06, 0xA3, 0x0D, 0x51, 0x4B, 0x84, 0x2A, 0x49, 0xDF, 0xCE,
0xB7, 0x2A, 0x2D, 0x08, 0x08, 0x5F, 0x06, 0x27, 0x5A, 0x4F, 0x65, 0x12, 0xF0, 0x9C, 0xCE, 0xA0,
0xF5, 0x8B, 0xCC, 0x31, 0x4B, 0xB8, 0xFD, 0x4A, 0x05, 0xC6, 0x10, 0x15, 0x60, 0x00, 0x89, 0x85,
0x3B, 0xB0, 0x7F, 0x66, 0x1D, 0x19, 0xF7, 0x8D, 0xC0, 0x59, 0x0F, 0x40, 0xE2, 0xE5, 0xCC, 0xAC,
0x08, 0xAA, 0xE5, 0x4A, 0x27, 0x59, 0x44, 0x2F, 0x94, 0x0C, 0xCB, 0x5F, 0xFB, 0xBF, 0x96, 0x34,
0x19, 0x81, 0x0B, 0xE5, 0x1B, 0xDC, 0x30, 0xB8, 0xEA, 0x91, 0xC8, 0xBE, 0xED, 0x62, 0xF2, 0x37,
0x51, 0x7A, 0x09, 0xB3, 0xD5, 0x16, 0xF9, 0x11, 0xDC, 0xD1, 0x0C, 0xF7, 0xC4, 0x08, 0x06, 0x84,
0xF8, 0x4F, 0x10, 0x76, 0xDA, 0xC0, 0xEB, 0x60, 0xF9, 0x5F, 0x27, 0x3E, 0xCB, 0x4A, 0x40, 0xD7,
0xFC, 0x55, 0x90, 0x36, 0x45, 0xFC, 0xF0, 0xE3, 0x76, 0x29, 0x64, 0xAC, 0xEE, 0x31, 0xAF, 0xA1,
0xD1, 0x53, 0x2C, 0x5C, 0xC6, 0xBF, 0x6E, 0x36, 0x98, 0x6E, 0x8A, 0x27, 0x97, 0x46, 0x89, 0x2F,
0xB9, 0x29, 0x14, 0xCF, 0x9F, 0x97, 0x80, 0x13, 0xA2, 0x4C, 0x80, 0xFD, 0x26, 0x46, 0x7C, 0xBE,
0xE4, 0x54, 0x98, 0x62, 0x6E, 0x0E, 0xA4, 0xB5, 0xC1, 0xF0, 0x02, 0xA6, 0x32, 0x65, 0x3A, 0x62,
0x92, 0x6E, 0x74, 0xDD, 0xE9, 0x3F, 0x16, 0xAE, 0xF4, 0x82, 0x91, 0xD9, 0xF0, 0x2F, 0x50, 0x0F,
0x8E, 0x4B, 0xB5, 0x41, 0xF3, 0x66, 0x92, 0xE0, 0x9B, 0xC0, 0xE5, 0x2F, 0x38, 0x72, 0x71, 0x75,
0x0A, 0xD3, 0xBE, 0x63, 0x84, 0x6A, 0x42, 0x0A, 0x55, 0x67, 0xDF, 0xF4, 0xC7, 0x04, 0xD1, 0x6B,
0xAA, 0x78, 0x22, 0x8F, 0x3A, 0x2C, 0xD1, 0xD3, 0x39, 0x51, 0x5A, 0x03, 0x6A, 0x0A, 0x33, 0x67,
0x9B, 0x50, 0xA8, 0x60, 0x91, 0xF0, 0x42, 0xAA, 0x7F, 0x3E, 0x5D, 0x2F, 0xC9, 0x61, 0xFF, 0xF0,
0x7C, 0x68, 0x9F, 0xF5, 0x32, 0x34, 0x00, 0x87, 0x2A, 0xCD, 0xD4, 0x30, 0x48, 0xED, 0x26, 0x19,
0x34, 0xDD, 0xFA, 0x71, 0x0C, 0x0D, 0xCB, 0x1F, 0xC8, 0xB0, 0xDC, 0xED, 0x64, 0xA0, 0xEA, 0xF7,
0x9C, 0x88, 0x33, 0xD3, 0xBD, 0x06, 0x9E, 0x1B, 0x61, 0x6E, 0x45, 0x65, 0xEB, 0xD6, 0xCE, 0x1A,
0x94, 0x10, 0x8B, 0x11, 0x05, 0xDC, 0x43, 0x5B, 0x87, 0x9D, 0xE0, 0x1A, 0xAA, 0xF9, 0x76, 0x57,
0x9F, 0xF2, 0x48, 0x07, 0x35, 0x92, 0x57, 0x98, 0x7B, 0xAF, 0x82, 0x02, 0x50, 0x94, 0x07, 0xF5,
0xFD, 0x71, 0x77, 0x61, 0x12, 0xEB, 0x09, 0xE2, 0xC6, 0xDF, 0xC2, 0x5F, 0xB5, 0x4F, 0xE8, 0x56,
0xDB, 0xF5, 0x1E, 0xC2, 0xD5, 0xF0, 0x00, 0xC3, 0x1D, 0x0A, 0xBA, 0xCE, 0x43, 0x4A, 0xF0, 0x21,
0xFE, 0xEC, 0x91, 0x27, 0x65, 0xB1, 0xC3, 0xCA, 0x92, 0xA2, 0xD1, 0x1F, 0xE7, 0x6E, 0x03, 0xB6,
0xDB, 0x02, 0x12, 0x70, 0x9C, 0xE3, 0x65, 0xF6, 0x97, 0x3E, 0x0C, 0x9B, 0xC8, 0x6D, 0x24, 0x72,
0x5C, 0xAD, 0xCD, 0xBE, 0x97, 0x53, 0x83, 0x99, 0x6A, 0xF2, 0x23, 0xA0, 0x3A, 0x38, 0xC2, 0xBE,
0x40, 0xF6, 0x00, 0x50, 0xF3, 0xF9, 0x7D, 0xF8, 0x28, 0xE5, 0x00, 0x52, 0xFD, 0x46, 0x4E, 0xE5,
0xDC, 0x68, 0x81, 0x48, 0xA3, 0x4C, 0x30, 0x60, 0x58, 0x43, 0xCC, 0x5C, 0x65, 0x3A, 0xBE, 0x8B,
0x31, 0x91, 0xD6, 0xE7, 0xF4, 0x01, 0x33, 0xFD, 0x96, 0xD8, 0xBA, 0x8C, 0x7A, 0x97, 0xBE, 0xBB,
0x0F, 0x10, 0x6E, 0x91, 0x32, 0x01, 0x8C, 0xE3, 0xBD, 0xDD, 0xA7, 0x1A, 0xE8, 0x5E, 0x6E, 0xF3,
0x88, 0xE4, 0x06, 0x4E, 0xB6, 0x3C, 0xA4, 0x82, 0xF5, 0x05, 0x59, 0xCB, 0xD7, 0xFB, 0x72, 0xF3,
0x4B, 0x26, 0x4A, 0x4C, 0x75, 0x6A, 0x88, 0x6D, 0x95, 0x7A, 0x33, 0x58, 0xC0, 0x1D, 0x02, 0xB6,
0x66, 0x6B, 0x12, 0xB1, 0x81, 0x6B, 0xAB, 0x5D, 0x4B, 0xF4, 0xDE, 0x76, 0x46, 0x91, 0xCD, 0xDB,
0x71, 0x3A, 0x10, 0x72, 0x6A, 0x54, 0x93, 0x8D, 0x70, 0x5E, 0x3A, 0x52, 0x2D, 0x68, 0xE1, 0x7B,
0x84, 0x3F, 0xEC, 0xD9, 0x74, 0x5D, 0x39, 0x6B, 0x58, 0x6A, 0xE6, 0xF8, 0x89, 0x4A, 0xA2, 0x27,
0x67, 0x0D, 0x5D, 0x92, 0x74, 0x40, 0xE9, 0x82, 0xFE, 0x23, 0x67, 0xB3, 0x94, 0xE0, 0xFB, 0xB5,
0xB1, 0xD2, 0xBA, 0xCD, 0xFC, 0xC1, 0x14, 0xD0, 0xBF, 0x7C, 0xF8, 0xD0, 0x9F, 0x0A, 0xD0, 0x22,
0xE3, 0xB3, 0x1F, 0xBD, 0xFA, 0xC5, 0xFE, 0xFE, 0x2F, 0x95, 0xB6, 0xEE, 0x22, 0x74, 0xD1, 0x8A,
0xA1, 0x45, 0xED, 0x8D, 0xB2, 0x02, 0xE1, 0x5C, 0x5D, 0x3A, 0xA5, 0x0E, 0xC5, 0xE4, 0x5D, 0x93,
0xE9, 0x05, 0xCD, 0xE8, 0xE5, 0xC7, 0xDE, 0x3D, 0xD6, 0x30, 0xDE, 0x0E, 0x8C, 0x3C, 0xA0, 0x1A,
0xE9, 0xE5, 0x77, 0x01, 0x5B, 0x4C, 0xAA, 0x7B, 0x21, 0x7A, 0x27, 0xED, 0x5E, 0x6B, 0x74, 0xED,
0x58, 0x17, 0xAC, 0x83, 0x82, 0x31, 0xCA, 0x04, 0x8A, 0xFA, 0x1E, 0x19, 0xE3, 0xDA, 0xFD, 0x5B,
0xC6, 0xD1, 0x83, 0x8B, 0x2B, 0x09, 0x60, 0x89, 0x1B, 0x47, 0x94, 0x25, 0xFD, 0xBC, 0x1D, 0x80,
0xBE, 0x3D, 0x7E, 0x5A, 0x2F, 0xAA, 0x7B, 0xBE, 0x61, 0x16, 0xA1, 0x12, 0xAB, 0xF9, 0xAB, 0x5C,
0xDA, 0x3D, 0x69, 0xB0, 0x97, 0x79, 0x00, 0x95, 0x8F, 0xD0, 0xC4, 0x99, 0x10, 0xE1, 0x6F, 0xC5,
0x7C, 0x02, 0x2E, 0xA2, 0xAB, 0x60, 0xEC, 0x88, 0xEA, 0x45, 0x81, 0x52, 0x3B, 0x2E, 0x95, 0x17,
0xD9, 0x47, 0x30, 0xC2, 0x9B, 0x26, 0xE0, 0xD8, 0x03, 0x14, 0x58, 0xE1, 0xDB, 0x53, 0xA8, 0xC2,
0x3F, 0xB1, 0xF5, 0xC5, 0x36, 0x4E, 0xF3, 0x30, 0xBA, 0xD0, 0x0B, 0x1F, 0xFC, 0x59, 0x0A, 0x0C,
0x0F, 0xB4, 0xA3, 0x01, 0xEF, 0xCE, 0xA6, 0xDE, 0xF0, 0x2F, 0x98, 0x82, 0xAC, 0xB2, 0xC3, 0xF5,
0xB1, 0xC1, 0xEA, 0xDF, 0xFD, 0xE0, 0x39, 0x3E, 0x23, 0x8D, 0xFE, 0x2B, 0x86, 0x2F, 0x5D, 0xAA,
0x76, 0x47, 0x79, 0x5A, 0x34, 0x95, 0xA2, 0x4D, 0x64, 0x5A, 0x6C, 0xC5, 0xF6, 0x51, 0x53, 0x5B,
0xF7, 0x60, 0x65, 0x9D, 0x31, 0x72, 0xB1, 0x62, 0xD2, 0x45, 0xE4, 0xAD, 0xE4, 0xB2, 0x6C, 0xDF,
0x94, 0xE8, 0xDA, 0x21, 0x44, 0x02, 0xDE, 0xBD, 0x03, 0x1C, 0x9F, 0x2B, 0x7E, 0x63, 0x75, 0x44,
0x97, 0x08, 0x0F, 0x58, 0x03, 0x92, 0xA5, 0x4F, 0x2B, 0xC7, 0x8C, 0xCD, 0xF6, 0x28, 0x8D, 0x0C,
0xA6, 0x5C, 0x65, 0xBE, 0xD2, 0x0F, 0x77, 0x5F, 0x39, 0x56, 0x78, 0x16, 0x29, 0x4D, 0x9B, 0x14,
0x34, 0xEF, 0xED, 0xF8, 0xDB, 0x13, 0x91, 0x39, 0xDF, 0x09, 0x8F, 0x3D, 0x1B, 0x8A, 0x43, 0xEB,
0xEB, 0x10, 0xBB, 0x78, 0x05, 0x3C, 0x45, 0x4B, 0x95, 0xF0, 0x95, 0xA9, 0x82, 0x07, 0x8A, 0x76,
0x95, 0xE1, 0x0E, 0xE7, 0x35, 0xF5, 0x6A, 0xE5, 0x4D, 0x88, 0x20, 0x3D, 0x6E, 0x18, 0x73, 0x2A,
0xF1, 0x42, 0xA6, 0x66, 0xEE, 0xC1, 0xE7, 0x65, 0xCC, 0x11, 0x2E, 0xB9, 0x79, 0x9B, 0x22, 0x1B,
0x7A, 0x67, 0xEC, 0xF5, 0x9D, 0xD8, 0x52, 0x6C, 0xDD, 0x41, 0x2B, 0x8B, 0xE6, 0x1A, 0x69, 0xDA,
0x97, 0xB1, 0x10, 0x4E, 0xD1, 0x4B, 0x5C, 0xCE, 0x18, 0xD9, 0xFE, 0x87, 0x3E, 0x6C, 0x09, 0x87,
0x90, 0x57, 0x08, 0xC1, 0x15, 0x21, 0xEA, 0x09, 0x19, 0x13, 0x62, 0xD9, 0x65, 0xE3, 0x92, 0x17,
0xD2, 0x33, 0x4C, 0xBD, 0x52, 0xCB, 0x9D, 0x3A, 0xF2, 0x79, 0x4F, 0x0B, 0x54, 0x0E, 0x59, 0xC0,
0xF7, 0x50, 0x16, 0xF5, 0x33, 0xDC, 0xB7, 0xD8, 0x8F, 0x4A, 0xC8, 0xB1, 0x92, 0x46, 0xFE, 0xE2,
0xB7, 0x50, 0xA0, 0x60, 0x15, 0x65, 0x6C, 0x54, 0x46, 0x65, 0xFE, 0x3D, 0xB7, 0x99, 0x93, 0xF3,
0x42, 0x8A, 0xCA, 0x39, 0x03, 0xA6, 0x9E, 0xFF, 0x7C, 0x8C, 0x94, 0xA1, 0x21, 0xA3, 0xE2, 0xC6,
0x15, 0x1E, 0xED, 0x23, 0x61, 0x0B, 0x43, 0x70, 0x1C, 0xAD, 0xC7, 0x9D, 0xE2, 0xB4, 0x3A, 0xB1,
0x96, 0x23, 0xC0, 0xFB, 0x88, 0x60, 0x89, 0xF7, 0x3A, 0x59, 0xB6, 0x76, 0x52, 0xE8, 0xB5, 0xA6,
0xEF, 0x0F, 0x16, 0x0F, 0x02, 0x1E, 0x6E, 0xDB, 0x9F, 0x30, 0xAC, 0x4F, 0x8C, 0xAA, 0x1F, 0x93,
0xBB, 0xC4, 0x1E, 0x54, 0x11, 0xEF, 0x4A, 0xFB, 0x3E, 0x6C, 0x98, 0x4A, 0xE7, 0x1D, 0xD9, 0x03,
0x59, 0x81, 0xA1, 0x07, 0xBA, 0x17, 0x80, 0x38, 0x08, 0x93, 0xE0, 0xBF, 0x61, 0xAF, 0x1F, 0x0D,
0xB1, 0x63, 0x8C, 0xD4, 0x24, 0xA3, 0xDC, 0x3D, 0x18, 0x1F, 0x02, 0x4C, 0xE8, 0x03, 0x1E, 0xFF,
0x6F, 0xC7, 0x1F, 0x1A, 0x9A, 0xB8, 0x48, 0x35, 0xDB, 0x7A, 0x62, 0x02, 0x1E, 0x4D, 0x64, 0x33,
0x14, 0xC7, 0xF5, 0x32, 0x7B, 0x3F, 0x50, 0x2B, 0x7F, 0xC4, 0xBF, 0x5E, 0xCD, 0x62, 0x23, 0x5F,
0xC6, 0x7F, 0x6F, 0x64, 0x1B, 0xA7, 0x63, 0x67, 0xCD, 0x69, 0x02, 0xA0, 0xBB, 0xAB, 0x27, 0x9C,
0xDB, 0xAC, 0x76, 0x15, 0xF7, 0x08, 0x04, 0x45, 0x79, 0x2E, 0x4B, 0xF5, 0x94, 0xDB, 0xB0, 0xD3,
0x51, 0x02, 0x7F, 0x25, 0x99, 0xDF, 0xE4, 0x14, 0x97, 0xA6, 0x22, 0x5D, 0x3E, 0xE6, 0xF8, 0x98,
0x59, 0x8A, 0xB4, 0x0A, 0x70, 0x19, 0x09, 0xF6, 0x42, 0x8B, 0x61, 0x9F, 0x22, 0x8D, 0x03, 0x77,
0xC1, 0x81, 0x05, 0xA2, 0xA8, 0x16, 0x00, 0xEF, 0xE4, 0x15, 0x70, 0x88, 0xCB, 0x02, 0xF8, 0xE7,
0xD2, 0xD6, 0x6F, 0x5D, 0x57, 0xB7, 0x5C, 0xAD, 0x6C, 0x6A, 0x79, 0x22, 0x60, 0x30, 0xBD, 0x8B,
0x9C, 0xE4, 0x78, 0x97, 0x6E, 0x5E, 0x49, 0x25, 0xB1, 0x9A, 0x74, 0x6B, 0x74, 0xB9, 0xDA, 0xBE,
0x1F, 0x81, 0xD2, 0xE3, 0x46, 0x2A, 0x54, 0xD8, 0x5B, 0x8F, 0x90, 0x28, 0xC0, 0xAD, 0xBE, 0xEA,
0x14, 0x6E, 0xD7, 0xFE, 0x89, 0xB8, 0x2E, 0xE6, 0xAA, 0x44, 0x57, 0xBA, 0xF3, 0xEC, 0xBE, 0x05,
0x83, 0x09, 0x5D, 0x11, 0x8F, 0x8E, 0x87, 0x21, 0x57, 0x8C, 0x9C, 0x1F, 0x24, 0x3F, 0x47, 0x9D,
0x41, 0x54, 0xD9, 0x83, 0xAF, 0xC2, 0x6F, 0xC5, 0x86, 0x40, 0xB9, 0x86, 0x70, 0x14, 0xB0, 0x37,
0xC4, 0x0B, 0xAC, 0x85, 0x2A, 0x39, 0xCF, 0x5E, 0xD4, 0xC2, 0x21, 0x7B, 0x49, 0x1E, 0x3D, 0x65,
0xCB, 0xA9, 0xF8, 0xCE, 0xF5, 0xB3, 0x0D, 0x3D, 0x13, 0xB3, 0x9A, 0xDB, 0x35, 0x21, 0x7A, 0xA7,
0xE3, 0xFF, 0xD4, 0x42, 0xA6, 0x04, 0x86, 0xAC, 0x44, 0x2A, 0xAF, 0xA0, 0x8A, 0x01, 0x16, 0x5E,
0xE0, 0x72, 0xCD, 0xA3, 0xE8, 0xC7, 0xF2, 0x73, 0x71, 0x7C, 0x61, 0xF5, 0xA7, 0xFC, 0xC7, 0x6B,
0x68, 0xC8, 0x51, 0xE2, 0xF8, 0x20, 0x93, 0xB0, 0x5E, 0xD3, 0x5B, 0x11, 0x4C, 0x3E, 0xDD, 0x7C,
0xA7, 0x5F, 0x2F, 0xAD, 0x99, 0x5C, 0xF5, 0x57, 0xF5, 0x38, 0x67, 0x8D, 0xD4, 0x2B, 0x73, 0x64,
0xAC, 0x58, 0x76, 0xFA, 0x0F, 0x43, 0x97, 0xC1, 0x68, 0x2F, 0xE6, 0x61, 0x3D, 0x89, 0x70, 0xB4,
0x85, 0xB1, 0x65, 0xA1, 0x0E, 0xC8, 0xAB, 0x22, 0x2D, 0xD1, 0xB6, 0xBC, 0x77, 0x49, 0xD6, 0x22,
0xE0, 0x0C, 0xA2, 0x6B, 0xD8, 0x45, 0xA6, 0x80, 0xE2, 0x1A, 0x7C, 0x6D, 0x4D, 0x7C, 0x6B, 0xF8,
0x40, 0x62, 0xDD, 0xD6, 0x32, 0xB4, 0x52, 0x9B, 0x3C, 0x4E, 0xD0, 0x29, 0x87, 0x3D, 0x41, 0xE4,
0x35, 0x20, 0xF0, 0x4F, 0x61, 0xD4, 0x18, 0x64, 0x39, 0x87, 0x90, 0x64, 0xF5, 0xCE, 0xA9, 0xAA,
0x18, 0xBE, 0x66, 0x53, 0xA9, 0x23, 0xF9, 0xF4, 0x53, 0x3F, 0xEA, 0x25, 0xD9, 0xD4, 0x79, 0x2C,
0xD4, 0x64, 0x0B, 0xAE, 0xDF, 0xDE, 0xCE, 0xCD, 0xC5, 0x91, 0xE2, 0xB9, 0x94, 0x17, 0xF3, 0xC7,
0x6F, 0x01, 0xF8, 0xCD, 0xE7, 0x0C, 0x30, 0xDF, 0x58, 0x34, 0x3D, 0x20, 0x61, 0xD8, 0xF9, 0x0A,
0x2F, 0x3D, 0xA7, 0xE9, 0x5C, 0x7A, 0x52, 0xDB, 0xEE, 0x45, 0x47, 0x7A, 0x2E, 0x1D, 0xE3, 0x2D,
0x6C, 0xA4, 0xBD, 0xED, 0x65, 0x5C, 0x0E, 0x09, 0x67, 0x0B, 0x77, 0x27, 0x51, 0x9B, 0x38, 0x72,
0xD3, 0x9A, 0xEA, 0x21, 0x71, 0x75, 0x2B, 0x0F, 0xC7, 0xD0, 0x35, 0x08, 0x02, 0x19, 0xF5, 0x97,
0xEB, 0xF4, 0xB9, 0x39, 0x30, 0x10, 0x52, 0xA3, 0x50, 0x09, 0x89, 0xF8, 0xF1, 0xA8, 0x31, 0xB2,
0xEF, 0x6B, 0x85, 0x35, 0x45, 0xF7, 0x89, 0x58, 0x8D, 0x6A, 0xD3, 0x5C, 0x57, 0xA3, 0x43, 0x18,
0xB5, 0x09, 0x08, 0xD8, 0x24, 0x8C, 0xD3, 0xFA, 0xAC, 0x6D, 0xEE, 0x4F, 0xB4, 0x77, 0xF3, 0x46,
0xE9, 0x1E, 0xB3, 0x40, 0x8E, 0xC7, 0x85, 0xEA, 0xEF, 0xD9, 0xF4, 0xB5, 0xFF, 0x90, 0x03, 0xA0,
0x61, 0x65, 0x83, 0x2C, 0x6D, 0x66, 0x98, 0x67, 0x1E, 0x41, 0x41, 0x66, 0xBC, 0x28, 0x8A, 0x76,
0x8A, 0x0E, 0xF6, 0x0B, 0xD9, 0x7C, 0x51, 0x90, 0xD2, 0x28, 0x77, 0xA0, 0x9B, 0xE6, 0xBB, 0x3C,
0xA1, 0x53, 0xDB, 0xE7, 0x75, 0xCD, 0x3D, 0x0E, 0x1C, 0x11, 0x3E, 0xD8, 0x7A, 0x09, 0xE1, 0x12,
0x5E, 0x1D, 0x9A, 0x29, 0x06, 0x79, 0xFD, 0x8D, 0x49, 0xB9, 0xD3, 0x0E, 0xB7, 0x7D, 0x69, 0x83,
0x81, 0x56, 0x82, 0x58, 0x2F, 0xEA, 0xCF, 0x66, 0xD8, 0x34, 0x16, 0x17, 0x27, 0x18, 0xEF, 0x65,
0xBE, 0x01, 0x65, 0xBF, 0x6F, 0xAE, 0x21, 0xA4, 0xA3, 0xA2, 0x95, 0xBC, 0x0B, 0x83, 0x30, 0xEA,
0x46, 0xC0, 0xAB, 0xA8, 0xA4, 0xCB, 0x22, 0x53, 0xAD, 0xC7, 0x8C, 0x03, 0x6B, 0x35, 0xB9, 0xB0,
0x69, 0xA0, 0xB9, 0xE0, 0x68, 0xB6, 0x4E, 0xE7, 0x91, 0x67, 0x05, 0x9C, 0x81, 0x47, 0xD3, 0x36,
0x06, 0xEE, 0xE3, 0x06, 0x04, 0xDB, 0x29, 0xFA, 0x62, 0x1F, 0xC7, 0xD6, 0xF4, 0x63, 0x75, 0x46,
0xD9, 0x1D, 0x17, 0x7C, 0x94, 0x81, 0x05, 0xA8, 0x92, 0x99, 0xD4, 0x5F, 0xB8, 0xF7, 0x21, 0x6D,
0x3D, 0x2B, 0x47, 0x04, 0xF9, 0x17, 0xC9, 0xDC, 0x2D, 0xC0, 0xB8, 0x1B, 0x0C, 0xF9, 0xBA, 0x35,
0x63, 0xD8, 0xF5, 0xAF, 0x52, 0x67, 0x02, 0x47, 0x1F, 0x0A, 0x93, 0x19, 0x8A, 0x40, 0x5B, 0x58,
0xA8, 0x9B, 0x4B, 0x93, 0x44, 0x30, 0xB1, 0x14, 0x1B, 0x66, 0xD4, 0x58, 0x4C, 0xD0, 0x0A, 0x2C,
0xD2, 0x91, 0xBF, 0x69, 0xEC, 0xFB, 0x10, 0xBF, 0x84, 0x13, 0x24, 0x25, 0xD7, 0x8E, 0x78, 0x8A,
0xF5, 0xD2, 0x24, 0x8B, 0x4C, 0xD6, 0x26, 0x92, 0x56, 0x6B, 0xF5, 0x8D, 0x67, 0x51, 0x1B, 0xDE,
0xFD, 0xE9, 0x8F, 0x27, 0x6C, 0x07, 0x41, 0xD5, 0x0A, 0x85, 0xA8, 0xA7, 0x55, 0x82, 0x38, 0x8C,
0x38, 0x60, 0x18, 0xDA, 0xFC, 0xD5, 0xC4, 0x9A, 0x20, 0x14, 0xBF, 0x91, 0x4E, 0x97, 0xE9, 0xF2,
0x54, 0xB7, 0x1E, 0x5B, 0x43, 0x59, 0x5E, 0xA3, 0x29, 0xDF, 0xE5, 0x55, 0x21, 0x7B, 0x2B, 0x16,
0x6C, 0x35, 0x12, 0xCB, 0xB0, 0x4B, 0xCB, 0xF3, 0x8C, 0x89, 0xDD, 0xCA, 0xCB, 0x66, 0xF2, 0x2B,
0xC2, 0x4E, 0x24, 0xBA, 0xD1, 0x94, 0xA6, 0xA3, 0x01, 0x9B, 0xB3, 0xFA, 0xCD, 0x26, 0x2B, 0x51,
0x78, 0x54, 0x2F, 0x90, 0xF9, 0xAA, 0x45, 0x0A, 0xCA, 0x16, 0x41, 0xD4, 0xA2, 0xFE, 0xA5, 0x9D,
0x0B, 0x8E, 0x29, 0xB7, 0xE4, 0xE8, 0xDE, 0x29, 0x76, 0xC7, 0xA6, 0x74, 0x48, 0x9D, 0x75, 0x69,
0xBA, 0xB9, 0xFD, 0x3C, 0x44, 0x28, 0x7D, 0x8E, 0xDC, 0xE0, 0xCB, 0xC9, 0x25, 0x26, 0x55, 0x80,
0x84, 0xA8, 0xB8, 0x80, 0x9B, 0x57, 0x0E, 0x61, 0xFB, 0x06, 0xFF, 0x87, 0xA1, 0x8D, 0xF0, 0x33,
0xDD, 0xED, 0x06, 0x96, 0x90, 0xED, 0x42, 0x2D, 0xEE, 0x85, 0x06, 0x1A, 0x9F, 0xAC, 0x74, 0x79,
0xA2, 0x95, 0xE9, 0x5E, 0x14, 0x7B, 0xC3, 0xCF, 0xEE, 0x48, 0xEC, 0xD6, 0x9D, 0x3E, 0x66, 0x9E,
0x30, 0xAB, 0x8C, 0xCF, 0x11, 0xE2, 0x22, 0x69, 0x5B, 0x45, 0xA8, 0xC8, 0x87, 0x90, 0xE4, 0x9E,
0xB7, 0x9A, 0x41, 0x6E, 0x1D, 0x83, 0xDE, 0x9C, 0xFB, 0xC6, 0xCC, 0x0C, 0x79, 0x8F, 0xFF, 0xC0,
0xF4, 0xE9, 0x38, 0xA5, 0xC6, 0x96, 0x5A, 0xE6, 0xA8, 0xAA, 0xA8, 0x8B, 0xCF, 0x0C, 0x1B, 0x08,
0xDC, 0x07, 0xB0, 0xF5, 0xEA, 0xAC, 0xB5, 0x90, 0x97, 0x95, 0xCA, 0x41, 0x49, 0x90, 0xF2, 0x84,
0x32, 0xF3, 0x60, 0x47, 0xF1, 0xEA, 0x1A, 0xA3, 0x79, 0x14, 0x00, 0x2E, 0xEB, 0xEC, 0xBC, 0x80,
0x05, 0x8B, 0xDE, 0xD7, 0xE6, 0x17, 0xF9, 0xF1, 0xD4, 0xD1, 0xFD, 0xA7, 0x14, 0xDA, 0x07, 0xB9,
0x2A, 0x6B, 0x7D, 0x4D, 0xD2, 0x5F, 0x14, 0xD5, 0x23, 0x5B, 0x9B, 0x3C, 0xD2, 0xCE, 0x9F, 0xE8,
0x31, 0x2E, 0x6F, 0xF5, 0x72, 0x11, 0xD1, 0x81, 0x19, 0xDC, 0x6E, 0xA2, 0xD2, 0xDA, 0xD2, 0xD5,
0xE3, 0x3D, 0x3E, 0xB4, 0x41, 0x16, 0xE7, 0x52, 0x03, 0xE2, 0x81, 0xBB, 0x49, 0x85, 0xAF, 0xEC,
0x6D, 0x31, 0x27, 0xC4, 0x46, 0x71, 0xAA, 0xCD, 0x5C, 0x21, 0xD1, 0x61, 0x8B, 0x02, 0xFA, 0xF3,
0x4E, 0x56, 0x54, 0xB9, 0x4F, 0x0F, 0x80, 0x7A, 0xA7, 0x72, 0x6F, 0x40, 0x57, 0xF8, 0xBC, 0x15,
0x29, 0x33, 0x9E, 0x4A, 0x0C, 0xDB, 0x7B, 0x37, 0x55, 0x90, 0xD7, 0x73, 0xAD, 0x19, 0x77, 0xD2,
0xEB, 0x95, 0x51, 0x57, 0xF4, 0xBC, 0x37, 0xD2, 0x64, 0xAE, 0xF7, 0xC6, 0x02, 0xD8, 0x31, 0x7F,
0xC4, 0xB0, 0x50, 0x64, 0x8C, 0x95, 0xBE, 0xCF, 0x53, 0x68, 0x7C, 0xDA, 0x3D, 0x85, 0xBB, 0xEE,
0x2E, 0xCD, 0xF1, 0xF5, 0x09, 0x3C, 0x2D, 0x2E, 0x2E, 0xBE, 0x68, 0x35, 0x70, 0x99, 0x00, 0x0B,
0x71, 0x86, 0x52, 0x9D, 0x09, 0x48, 0x9B, 0x5D, 0xFD, 0xAA, 0xB4, 0xC9, 0x75, 0xB3, 0x45, 0xC8,
0x41, 0x14, 0x6F, 0x71, 0x45, 0x0D, 0x16, 0x1F, 0x2F, 0xB2, 0x25, 0x52, 0x46, 0x3B, 0x72, 0x00,
0x04, 0x3E, 0x09, 0x6A, 0x86, 0x5C, 0x59, 0x0C, 0x36, 0x4B, 0x98, 0xDD, 0x0D, 0x98, 0xB0, 0xF1,
0x48, 0xE3, 0xC7, 0x2B, 0xC8, 0xBB, 0x1B, 0x23, 0xCC, 0xDD, 0x24, 0x5B, 0xAE, 0xF9, 0xAC, 0xE5,
0xD1, 0xB1, 0x7D, 0x13, 0xA3, 0xC3, 0xBC, 0x86, 0xB2, 0xBC, 0xC5, 0x50, 0x94, 0x6C, 0xED, 0xDB,
0x13, 0xB8, 0x11, 0x1B, 0x63, 0x19, 0x85, 0xE3, 0xF3, 0x24, 0x59, 0xDD, 0xB3, 0x9D, 0x37, 0xF9,
0x5A, 0x89, 0xD3, 0x34, 0xEE, 0x37, 0xCA, 0x00, 0x55, 0xC6, 0x59, 0x33, 0x87, 0x32, 0xC9, 0xB2,
0x73, 0x7E, 0x8B, 0x2B, 0x63, 0x5F, 0x9E, 0x49, 0x1A, 0x0C, 0xCE, 0x24, 0x4B, 0xE7, 0xC3, 0x7D,
0xF8, 0x90, 0xD7, 0xA1, 0xBE, 0x07, 0x8B, 0xB7, 0x7D, 0x91, 0xBD, 0xD3, 0x50, 0xB9, 0x66, 0xEA,
0x5A, 0x11, 0x24, 0x42, 0xBD, 0x72, 0x02, 0x98, 0x7F, 0xCF, 0x13, 0x56, 0xE0, 0x00, 0x24, 0x59,
0x84, 0xAE, 0xA1, 0x89, 0x83, 0xEB, 0xA9, 0x73, 0x94, 0x4C, 0xD2, 0xEE, 0xB6, 0x94, 0xC2, 0xDA,
0xBB, 0x3F, 0x66, 0x5E, 0x5C, 0x9A, 0x05, 0xF6, 0x94, 0x44, 0x86, 0x45, 0xEE, 0xBA, 0xF0, 0x29,
0x97, 0x16, 0x2E, 0xB0, 0xB4, 0x67, 0x1E, 0xF9, 0x37, 0x4D, 0x47, 0x15, 0x43, 0xBE, 0xBB, 0xFC,
0xA1, 0x9B, 0xB9, 0xA6, 0xA1, 0x49, 0x34, 0xF5, 0x99, 0xAB, 0x11, 0x5F, 0x4F, 0xE2, 0x3C, 0xAA,
0xAF, 0xED, 0x64, 0xC6, 0x06, 0x25, 0xB7, 0xCA, 0xEB, 0xF5, 0xE9, 0xBD, 0xF2, 0x50, 0x0F, 0xC2,
0x90, 0x2C, 0xE3, 0xDD, 0xE5, 0xD9, 0x07, 0x14, 0xB4, 0x6D, 0xE8, 0x22, 0x1A, 0xB8, 0xAD, 0xFB,
0xC0, 0x86, 0x5E, 0x54, 0xC2, 0x78, 0x9B, 0xC2, 0x84, 0x1C, 0x82, 0x07, 0x16, 0x39, 0xB4, 0x11,
0x20, 0x6F, 0xA2, 0x70, 0x8A, 0xB5, 0xAF, 0xD3, 0x37, 0x10, 0xCC, 0x81, 0xEF, 0x8C, 0x1E, 0x8E,
0x5E, 0xAC, 0x39, 0xB7, 0x46, 0x86, 0x88, 0x34, 0x0E, 0x39, 0x58, 0xE0, 0xCB, 0x3B, 0x03, 0x93,
0x42, 0xCB, 0x29, 0x51, 0x9D, 0xDA, 0xE2, 0xC3, 0x42, 0xEA, 0x4C, 0x03, 0x05, 0xEB, 0x63, 0x0D,
0xEC, 0x4B, 0x9C, 0x7F, 0x31, 0xE3, 0x59, 0x4A, 0x6F, 0xBD, 0xD8, 0x9A, 0x30, 0x2E, 0x1F, 0x0B,
0x13, 0x8F, 0xF5, 0xD9, 0xD2, 0x22, 0xF3, 0xA8, 0x6C, 0x71, 0xC1, 0x18, 0x24, 0x34, 0x86, 0x40,
0xF8, 0x17, 0xEA, 0xBA, 0x32, 0x9E, 0x64, 0xAD, 0xFC, 0x32, 0x50, 0x25, 0x5E, 0x2E, 0x5D, 0xDD,
0x8D, 0x8B, 0x1C, 0xAB, 0xCB, 0x33, 0x67, 0x37, 0x17, 0x56, 0xFC, 0x10, 0x58, 0x67, 0x9E, 0x53,
0xF1, 0x48, 0x6B, 0xBC, 0x07, 0x68, 0x9E, 0x0E, 0xF1, 0xE1, 0xD9, 0x80, 0x49, 0x62, 0x39, 0xB0,
0x3A, 0xF5, 0x79, 0xF1, 0x36, 0xE6, 0x71, 0xC2, 0x24, 0x98, 0xE2, 0x6A, 0x60, 0x53, 0xEC, 0x48,
0x00, 0xA6, 0xEB, 0x23, 0xB3, 0xF9, 0x2D, 0xAD, 0xF2, 0x51, 0xCC, 0x90, 0x1D, 0x9B, 0x71, 0x5F,
0x22, 0xE1, 0x80, 0x4D, 0xB9, 0x51, 0x3B, 0xB0, 0xEB, 0xDF, 0x0A, 0x88, 0xC1, 0x06, 0x7D, 0xB5,
0x36, 0x27, 0x40, 0x04, 0x72, 0xBA, 0xE6, 0xE5, 0x20, 0x9B, 0xB1, 0xDC, 0x11, 0x04, 0x98, 0x75,
0x51, 0x5E, 0x66, 0x7E, 0xE8, 0xAB, 0xC1, 0x6E, 0x9E, 0x61, 0xBA, 0x88, 0x1C, 0xB0, 0x4A, 0x5D,
0xAC, 0x37, 0x63, 0x65, 0x2F, 0x2F, 0x11, 0x5D, 0x32, 0x3D, 0x71, 0x7E, 0x61, 0x98, 0xC0, 0x0C,
0xCB, 0x34, 0x81, 0x48, 0x81, 0x66, 0xE0, 0xAD, 0xC9, 0x43, 0x00, 0x8B, 0xCF, 0x8D, 0xEF, 0xA4,
0xFC, 0xD4, 0x67, 0xE9, 0xEF, 0xDB, 0x45, 0x2A, 0x59, 0x2F, 0xEE, 0xC2, 0xDB, 0x5A, 0x07, 0xD0,
0x53, 0x41, 0x66, 0x81, 0xC3, 0x30, 0xB4, 0xE3, 0x7F, 0x8B, 0xBD, 0xB4, 0x84, 0xC4, 0xEE, 0xEE,
0xFE, 0x2D, 0x71, 0x3A, 0x39, 0x5A, 0xED, 0xE5, 0xF3, 0xF0, 0xE5, 0xB1, 0x0C, 0x53, 0x2A, 0x37,
0xCF, 0x04, 0xF9, 0xFE, 0x70, 0xBF, 0x5A, 0x68, 0x57, 0x0B, 0x54, 0x98, 0x48, 0x8D, 0xDB, 0x80,
0xC9, 0x4C, 0xB7, 0x14, 0x45, 0x4C, 0xA3, 0xA2, 0x0C, 0x11, 0xDB, 0x02, 0x4D, 0xE9, 0xA6, 0xA6,
0x03, 0x63, 0x41, 0xD9, 0xCB, 0xE5, 0x8A, 0xA5, 0xEF, 0x09, 0xCA, 0xF9, 0x92, 0x4D, 0x75, 0xF8,
0xB7, 0x10, 0x78, 0x5D, 0x59, 0x3D, 0x75, 0x6A, 0xE6, 0xFD, 0x8E, 0xC2, 0x5F, 0x7A, 0xCA, 0x03,
0xAB, 0x95, 0x61, 0x79, 0x9F, 0x4F, 0x8F, 0xEF, 0x45, 0x07, 0xBB, 0x7E, 0x12, 0x43, 0x1A, 0xA7,
0x87, 0x33, 0x61, 0x71, 0x3A, 0x74, 0x6D, 0x98, 0x59, 0xF5, 0x47, 0xA6, 0x07, 0x03, 0x41, 0x45,
0x09, 0xB1, 0x0A, 0x45, 0xBA, 0x82, 0xAA, 0x6E, 0xCB, 0xD8, 0xDA, 0x4D, 0x83, 0xE2, 0x6B, 0x13,
0x96, 0x33, 0xA3, 0xC0, 0xF9, 0x10, 0x8E, 0x01, 0x1E, 0xAD, 0xD7, 0xB9, 0x6F, 0xB4, 0x69, 0x79,
0x3D, 0x36, 0x45, 0xEA, 0x48, 0x19, 0x46, 0xDC, 0x1E, 0x42, 0x65, 0x28, 0x70, 0x08, 0x06, 0xA8,
0x82, 0xA5, 0x7B, 0xDE, 0xEC, 0x1E, 0x97, 0x0D, 0xE0, 0xCC, 0x6D, 0x1B, 0x57, 0xE5, 0xCA, 0x60,
0xC2, 0xF8, 0xBD, 0x39, 0xAA, 0xA9, 0x91, 0x5E, 0x8E, 0x12, 0x84, 0x2E, 0x0C, 0xE8, 0xD3, 0x5E,
0xE6, 0x15, 0xB8, 0x53, 0x4A, 0x89, 0xB3, 0x0E, 0xCF, 0x4D, 0x90, 0x1B, 0x9A, 0x9E, 0x32, 0x6C,
0xAF, 0xE3, 0x35, 0xE1, 0xC1, 0xFB, 0x66, 0x1C, 0x5F, 0xD6, 0xA2, 0x83, 0x33, 0xEE, 0xE5, 0x14,
0x0D, 0x92, 0xF6, 0xB4, 0x7D, 0x8C, 0x67, 0xA2, 0xC8, 0xFB, 0x26, 0x09, 0x30, 0x10, 0x37, 0x4F,
0x73, 0x97, 0xE7, 0x43, 0x4B, 0xE2, 0xEB, 0x8F, 0x90, 0x85, 0x50, 0xFF, 0x65, 0xFF, 0x1E, 0x45,
0x5B, 0xF8, 0xFD, 0x87, 0xEE, 0xE2, 0xA4, 0x75, 0x1A, 0xF6, 0x18, 0x44, 0x37, 0xE4, 0xF5, 0xEB,
0x77, 0x9E, 0xED, 0x64, 0xC5, 0x82, 0xF6, 0x19, 0x06, 0x31, 0xC2, 0xCD, 0x18, 0x52, 0x01, 0xB7,
0x67, 0x6E, 0x1D, 0xCD, 0x38, 0xDF, 0xCE, 0x56, 0xAC, 0x7F, 0x66, 0xED, 0x2D, 0xD1, 0x20, 0xE1,
0xB8, 0x6D, 0xA8, 0x8B, 0x7D, 0x6C, 0x14, 0x10, 0xFE, 0x3A, 0xCA, 0xBA, 0x5C, 0xD6, 0x02, 0xA9,
0xCC, 0x2E, 0xC4, 0xB4, 0xCE, 0x31, 0x91, 0x81, 0x50, 0xCA, 0x6F, 0x36, 0xF9, 0xF4, 0xC4, 0x5F,
0xE9, 0x98, 0xA6, 0x67, 0x09, 0x07, 0x0C, 0x7A, 0x04, 0x3F, 0xAE, 0x20, 0xF9, 0x41, 0x25, 0xA6,
0x0D, 0xD7, 0x78, 0x08, 0xA0, 0x51, 0xE3, 0x72, 0xD6, 0x6F, 0xB2, 0x4C, 0x33, 0x8A, 0x4D, 0xC7,
0x17, 0xA3, 0x33, 0xC3, 0x44, 0xE3, 0x92, 0xDA, 0x33, 0xA5, 0x4B, 0x88, 0xF3, 0x7C, 0x85, 0x2E,
0xC2, 0x7D, 0x19, 0x1E, 0x9C, 0x40, 0xA9, 0x09, 0x2B, 0xF8, 0xD5, 0x91, 0xFD, 0x8A, 0xC4, 0xBD,
0x25, 0x23, 0x43, 0xB7, 0x37, 0x9A, 0x89, 0xA9, 0x7C, 0xEB, 0x2E, 0x47, 0x38, 0x00, 0xEC, 0x6A,
0x94, 0xB7, 0xA9, 0x60, 0xEF, 0xCD, 0x4A, 0x2A, 0xA5, 0x40, 0xA5, 0x40, 0x2B, 0x1C, 0xFA, 0x48,
0xA1, 0x71, 0xC6, 0xA2, 0x79, 0x76, 0x5D, 0x74, 0xE6, 0x09, 0x05, 0x1C, 0x97, 0xED, 0x15, 0x37,
0x61, 0xE5, 0x9F, 0xDA, 0xAA, 0x79, 0x4A, 0x7F, 0x85, 0x71, 0x29, 0x62, 0x1B, 0x56, 0x89, 0x23,
0xC1, 0xC4, 0xBB, 0x32, 0x5A, 0x3B, 0xAE, 0x5F, 0xC2, 0x3A, 0x90, 0xAD, 0xE6, 0x72, 0x36, 0xB5,
0xB3, 0x25, 0xDB, 0x78, 0x5D, 0x24, 0xD7, 0x20, 0x32, 0x88, 0xC9, 0x01, 0x29, 0x41, 0xE3, 0x20,
0x3A, 0xC1, 0x6D, 0xD8, 0x7C, 0xB5, 0xCB, 0x54, 0x69, 0xE6, 0x65, 0xA3, 0xE2, 0x61, 0xF7, 0x7A,
0x79, 0x89, 0xB6, 0xE6, 0x4F, 0x82, 0x20, 0x30, 0x6F, 0x11, 0x56, 0xB1, 0x9E, 0xC1, 0xFD, 0x1F,
0xF0, 0x7A, 0xF5, 0x10, 0x3F, 0x33, 0x64, 0xEE, 0x16, 0x26, 0x94, 0x5A, 0xDB, 0xFC, 0x02, 0xB4,
0x7F, 0xC6, 0x4B, 0xAF, 0x88, 0xAB, 0x06, 0xBA, 0x5B, 0x70, 0xD4, 0xAD, 0x90, 0xBB, 0x7E, 0x71,
0x45, 0x3C, 0x62, 0xF0, 0xD9, 0xDE, 0xBC, 0x3C, 0x61, 0x7F, 0x50, 0x65, 0x8D, 0x1E, 0x72, 0x88,
0x69, 0xF4, 0xD5, 0xDA, 0x1F, 0x2B, 0x65, 0x9A, 0xEA, 0x05, 0x0A, 0x30, 0xC0, 0x56, 0x20, 0x01,
0x27, 0xCD, 0xDD, 0xF4, 0xBD, 0x37, 0x87, 0x58, 0x4F, 0x6D, 0x52, 0x12, 0xDC, 0xD7, 0x25, 0xCD,
0x21, 0xEF, 0x77, 0x78, 0x61, 0x06, 0x6B, 0x63, 0xC5, 0xCC, 0x9A, 0x36, 0x27, 0x5A, 0xF9, 0xC6,
0xDF, 0x28, 0x58, 0x38, 0xD9, 0x62, 0x98, 0x7E, 0x79, 0x4A, 0x6F, 0xD0, 0xBF, 0x6D, 0x20, 0x1D,
0x78, 0x5C, 0xF3, 0xAD, 0x4A, 0x31, 0xB4, 0xDD, 0xCD, 0xFC, 0xF2, 0x9C, 0x66, 0xEF, 0xC4, 0x46,
0xDB, 0xA8, 0x39, 0xDF, 0x6B, 0x78, 0x6F, 0xB5, 0xC2, 0xE0, 0xB2, 0xE4, 0x82, 0xF4, 0xAC, 0x26,
0xB6, 0xEA, 0xEF, 0xDD, 0xEB, 0xE9, 0x04, 0x39, 0x7E, 0x43, 0xD6, 0x7A, 0xF2, 0xE4, 0x26, 0xDB,
0x42, 0xBB, 0x0C, 0xDB, 0xB9, 0x00, 0xF2, 0x07, 0x7A, 0xED, 0xCC, 0x32, 0xFE, 0xEB, 0x12, 0x8D,
0x8E, 0x9D, 0x5B, 0xCF, 0x36, 0x4A, 0xB2, 0x90, 0xAE, 0xAE, 0xC3, 0x46, 0x94, 0x2B, 0x67, 0xD9,
0x0D, 0x88, 0x22, 0x74, 0x42, 0x90, 0x80, 0x24, 0xDD, 0x11, 0xE0, 0xC2, 0x20, 0xAC, 0xD1, 0x90,
0x5E, 0x18, 0x70, 0x5C, 0xB1, 0x2E, 0xA5, 0x6B, 0xC5, 0x0F, 0x7E, 0xFF, 0x86, 0x91, 0x26, 0x09,
0x76, 0x5F, 0x8A, 0xB6, 0xAC, 0xFA, 0x84, 0x6C, 0x5C, 0x4F, 0x1F, 0x45, 0x45, 0x45, 0xE8, 0x0A,
0x5B, 0x95, 0x05, 0x1F, 0xFC, 0xD7, 0x72, 0xA9, 0xA0, 0x2E, 0x1D, 0x7F, 0xE3, 0xF6, 0xC1, 0xBF,
0x64, 0xA1, 0x11, 0x1C, 0x9F, 0xDA, 0x64, 0x78, 0x1A, 0x5A, 0xC8, 0x1D, 0x85, 0xD3, 0xC5, 0x70,
0xCE, 0x7E, 0xAB, 0x94, 0x92, 0xCE, 0xF5, 0x20, 0xD3, 0x59, 0xD5, 0x43, 0xDE, 0xC7, 0x40, 0x1E,
0x1F, 0x1B, 0xFC, 0x06, 0xD3, 0xE5, 0x81, 0xE6, 0xDC, 0x75, 0x13, 0xF5, 0xD7, 0x95, 0x3A, 0xC3,
0x2F, 0xBE, 0xD5, 0x27, 0xEB, 0xE9, 0x82, 0x55, 0x74, 0x2A, 0x30, 0x50, 0xB4, 0xAD, 0x06, 0xB2,
0xE6, 0x4C, 0xAF, 0x1E, 0x8B, 0x6B, 0xB4, 0x76, 0x89, 0x37, 0x38, 0x23, 0x2C, 0xA2, 0xAF, 0x7E,
0xA0, 0x60, 0x1A, 0xFA, 0xD5, 0xB4, 0xD1, 0x66, 0x5F, 0xBB, 0x03, 0x8A, 0x09, 0x26, 0xAE, 0xE5,
0x0C, 0xF7, 0xF8, 0x02, 0xA6, 0xC4, 0x75, 0x37, 0xD4, 0x90, 0x58, 0xD0, 0x44, 0xFC, 0x57, 0xD6,
0xF3, 0x85, 0x9A, 0xEF, 0x44, 0xC3, 0xF3, 0xE3, 0xDE, 0x38, 0xFE, 0xA6, 0x48, 0x96, 0x9A, 0xB4,
0xB7, 0x9D, 0x0B, 0x3A, 0x2C, 0xCE, 0xD5, 0x37, 0xA0, 0xB7, 0x9E, 0x6B, 0x5F, 0xDE, 0x04, 0x52,
0x81, 0xC4, 0x92, 0xE6, 0xDC, 0x56, 0x08, 0xF2, 0x11, 0x98, 0x3E, 0xFF, 0x31, 0x3C, 0x54, 0xD2,
0xB5, 0xAF, 0x69, 0x51, 0x06, 0xB4, 0xF3, 0x54, 0xAF, 0xC4, 0x3B, 0x8D, 0x94, 0xC3, 0x05, 0x4D,
0x5F, 0xD8, 0x06, 0xA0, 0x90, 0xEB, 0xEC, 0xFB, 0x6E, 0x7B, 0xA5, 0xBE, 0x94, 0xAD, 0xFF, 0x32,
0x9E, 0x59, 0xF4, 0x6C, 0x55, 0x17, 0x6A, 0xE9, 0xA8, 0x5A, 0x14, 0xAA, 0x7C, 0x1B, 0xD3, 0xBB,
0xA4, 0x7E, 0x80, 0xCE, 0x02, 0xDF, 0xA2, 0x93, 0x07, 0xF3, 0xD9, 0xDB, 0x96, 0x5F, 0xA8, 0xC7,
0xF8, 0xE7, 0x5D, 0xB6, 0x52, 0xC7, 0x3B, 0x6D, 0xE0, 0xAF, 0x4F, 0x19, 0xEB, 0x77, 0xE9, 0x7D,
0xDB, 0x51, 0xEE, 0x60, 0xC9, 0x94, 0x5B, 0x4D, 0x4B, 0x6B, 0x59, 0x97, 0x8D, 0xB6, 0x06, 0x30,
0x57, 0x0D, 0xB6, 0x70, 0xC9, 0xDC, 0x54, 0x68, 0xB4, 0xF1, 0x8B, 0x3B, 0xB0, 0x09, 0xD7, 0x20,
0x21, 0x12, 0x29, 0x87, 0x4C, 0x35, 0x01, 0xB3, 0x76, 0xB6, 0x99, 0xD1, 0x4B, 0x2C, 0x3C, 0xED,
0xF9, 0xC0, 0x78, 0x97, 0x19, 0xF3, 0x9F, 0x73, 0x9D, 0xF7, 0xCC, 0x06, 0x6A, 0x9B, 0xEC, 0x94,
0xD7, 0xD1, 0x77, 0x20, 0xC3, 0xA2, 0x8B, 0x74, 0xCA, 0x96, 0x9F, 0x69, 0x6D, 0xAD, 0xE3, 0x62,
0x98, 0xEB, 0x86, 0x7E, 0xAC, 0xB9, 0x8B, 0x17, 0xA9, 0x4F, 0x07, 0xBB, 0x0C, 0xE3, 0x82, 0xDD,
0x40, 0xFF, 0x22, 0x7A, 0xF2, 0x46, 0x80, 0x5A, 0x8D, 0x5A, 0xF6, 0xCC, 0x3E, 0xC5, 0x34, 0x02,
0x0D, 0xAC, 0xDC, 0xE9, 0xC1, 0x1A, 0xC6, 0x5E, 0x68, 0xEE, 0x05, 0x1B, 0x6A, 0x6D, 0x39, 0x3F,
0x10, 0xF8, 0xEB, 0x43, 0x6F, 0x52, 0x81, 0x49, 0x6C, 0x0A, 0x23, 0x30, 0x24, 0x25, 0xF9, 0xB4,
0xF3, 0x95, 0x74, 0x23, 0x51, 0x6E, 0x27, 0xEC, 0x1C, 0x84, 0xB5, 0xD1, 0x0D, 0x8D, 0x17, 0x53,
0xCA, 0xB7, 0x1E, 0x3F, 0xA4, 0x5F, 0x07, 0x58, 0xB1, 0x6D, 0x94, 0xAE, 0x60, 0x23, 0x3F, 0x51,
0xAF, 0x7A, 0x45, 0xC3, 0x3B, 0x76, 0xE4, 0x9A, 0x5B, 0xB3, 0x5C, 0xBA, 0x64, 0xB9, 0x25, 0x92,
0xAB, 0x60, 0xB6, 0x2E, 0xF5, 0xCF, 0x85, 0xEB, 0x3E, 0xAB, 0xD4, 0x6B, 0x47, 0xDC, 0x8D, 0x69,
0x3C, 0x53, 0x51, 0x64, 0x7B, 0x22, 0xBE, 0xC8, 0xB0, 0x61, 0xD7, 0x89, 0xF6, 0xCA, 0xCF, 0x1D,
0x29, 0x18, 0xF2, 0x71, 0x5C, 0x58, 0xD7, 0x18, 0xEF, 0xDB, 0xE1, 0xD6, 0x83, 0xC3, 0x26, 0x1A,
0xBE, 0xF2, 0x7F, 0xDB, 0x0E, 0x99, 0x9F, 0x8C, 0x56, 0xD7, 0x6E, 0xD6, 0xCA, 0x55, 0x52, 0x66,
};/** \brief 校准数据 */
uint8_t g_cali_buf[14] = {0x81, 0x47, 0x00, 0xf5, 0x94, 0x3f, 0xc3, 0x07, 0x0b, 0x08, 0x32, 0x6c, 0x00, 0x04,};/** \brief 状态数据 */
uint8_t g_state_buf[11] = {        0xB1, 0xD3, 0x04, 0x00, 0x37, 0x70,0x02, 0x00, 0x00, 0x00, 0x00}; /** \brief 存储 TOF 获取的结果 */
result_info_t   g_tof_result = {0};     /*** \brief 读取 TMF8801 状态标志位 ** \retval TMF8x01_OK  : 操作成功* \retval TMF8x01_NK  : 操作失败*/
static int8_t __tmf8801_status_read (void)
{uint8_t sta_buf[3] = {0};/* 读状态寄存器 */I2C_TMF8001_ReadByte(0x08, sta_buf, 3);if (sta_buf[0] != 0x00 ||sta_buf[1] != 0x00 ||sta_buf[2] != 0xFF) {//        printf("Error\r\n");return TMF8x01_NK;}return TMF8x01_OK;
}/*** \brief 初始化下载 HW */
static int8_t __tmf8801_download_init (void)
{/** cmd_buf[0]    : 初始化下载 HW 命令(0x14)* cmd_buf[1]    : 数据长度(0x01)* cmd_buf[3]    : 1个字节数据* cmd_buf[4]    : 校验字节*/uint8_t  cmd_buf[] = {0x14, 0x01, 0x29, 0xC1};uint32_t tick = 0;I2C_TMF8001_WriteByte(0x08, cmd_buf, 4);while (1) {if (__tmf8801_status_read() == TMF8x01_OK) {break;}tick ++;if (tick >= 10) {printf("__tmf8801_download_init tmo!\r\n");return TMF8x01_NK;}}return TMF8x01_OK;
}/*** \brief 设置写 RAM 地址*/
static int8_t __tmf8801_set_ram_addr (uint16_t addr)
{/** cmd_buf[0]    : 写 RAM 地址命令(0x43)* cmd_buf[1]    : 数据长度(0x02)* cmd_buf[4:3]  : 2个字节数据* cmd_buf[5]    : 校验字节*/uint8_t  cmd_buf[5] = {0};uint32_t tick       =  0;cmd_buf[0] = 0x43;                  cmd_buf[1] = 0x02;cmd_buf[2] = (uint8_t)addr;         /* 地址低 8 位 */cmd_buf[3] = (uint8_t)(addr >> 8);  /* 地址高 8 位 */cmd_buf[4] = (cmd_buf[0]            /* 校验字节 */ +  cmd_buf[1]+  cmd_buf[2]+  cmd_buf[3])^ 0xFF;I2C_TMF8001_WriteByte(0x08, cmd_buf, 5);while (1) {if (__tmf8801_status_read() == TMF8x01_OK) {break;}tick ++;if (tick >= 10) {printf("__tmf8801_set_ram_addr tmo!\r\n");return TMF8x01_NK;}}return TMF8x01_OK;
}/*** \brief 写 RAM */
static int8_t __tmf8801_write_ram (void)
{   /** cmd_buf[0]    : 命令(0x41)* cmd_buf[1]    : 数据长度(0x10)* cmd_buf[17:2] : 16个字节数据* cmd_buf[18]   : 校验字节*/uint8_t  cmd_buf[19] = {0};  uint16_t buf_length  =  0;        /* app_buf 总字节个数 */ uint16_t buf_line    =  0;        /* app_buf 行地址 */uint32_t tick        =  0;uint16_t i           =  0;uint16_t j           =  0;buf_length = sizeof(app_buf) / sizeof(app_buf[0]);buf_line   = buf_length / 16;cmd_buf[0] = 0x41;                          /* 写 RAM */cmd_buf[1] = 0x10;                          /* 待写数据长度:16字节 */for (i = 0; i < buf_line; i++) {/* 装载命令数据缓存区 */for (j = 0; j < 16; j++) {              /* 16字节 */cmd_buf[2+j] = app_buf[16 * i + j]; }/* 计算校验字节 */cmd_buf[18] = 0;                        /* 清零校验字节 */for (j = 0; j < 18; j++) {              /* 累加 */cmd_buf[18] += cmd_buf[j];}cmd_buf[18] ^= 0xFF;                    /* 异或 0xFF *//* 写 RAM */I2C_TMF8001_WriteByte(0x08, cmd_buf, 19);    /* 读状态寄存器 */while (1) {if (__tmf8801_status_read() == TMF8x01_OK) {break;}tick ++;if (tick >= 10) {printf("__tmf8801_write_ram tmo!\r\n");return TMF8x01_NK;}} } return TMF8x01_OK;
}/*** \brief 重映射 RAM 到地址 0 并复位*/
static int8_t __tmf8801_ram_remap_rst (void)
{/** cmd_buf[0]    : RAM 地址重映射并复位命令(0x11)* cmd_buf[1]    : 数据长度(0x00)* cmd_buf[2]    : 校验字节*/uint8_t  cmd_buf[] = {0x11, 0x00, 0xEE};       uint8_t  regval    =  0;uint32_t tick      =  0;I2C_TMF8001_WriteByte(0x08, cmd_buf, 3);while (1) {             /* wait CPU ready */I2C_TMF8001_ReadByte(0xE0, &regval, 1);if (regval == 0x41) {break;}tick ++;if (tick >= 10) {printf("__tmf8801_ram_remap_rst tmo!\r\n");return TMF8x01_NK;}}return TMF8x01_OK; 
}/*** \brief TMF8801 复位*/
static int8_t __tmf8801_rst (void) 
{uint8_t  regval = 0;       uint32_t tick   = 0;regval = 0x81;I2C_TMF8001_WriteByte(0xE0, &regval, 1);while (1) {/* wait CPU ready */I2C_TMF8001_ReadByte(0xE0, &regval , 1);if (regval == 0x41) {break;}tick ++;if (tick >= 100) {printf("__tmf8801_rst tmo!\r\n");return TMF8x01_NK;}}  return TMF8x01_OK;
}/*** \brief 获取 TMF8801 信息*/
static int8_t __tmf8801_info_read (void)
{  uint8_t  app0_rev_num[3] = {0};uint8_t  chip_rev_id     =  0;uint8_t  serial_num[4]   = {0};uint8_t  regval          =  0;    uint32_t tick            =  0;/* APP0 主版本号 */I2C_TMF8001_ReadByte(0x01, &app0_rev_num[0], 1);/* 次版本号和修订版本号 */I2C_TMF8001_ReadByte(0x12, &app0_rev_num[1], 2);/* 芯片修订 ID */I2C_TMF8001_ReadByte(0xE4, &chip_rev_id, 1);       /* 序列号 */regval = 0x47;                                  /* 发送读序列号命令 */I2C_TMF8001_WriteByte(0x10, &regval, 1);while (1) {                                     /* 等待序列号生成完毕 */I2C_TMF8001_ReadByte(0x1E, &regval, 1);if (regval == 0x47) {break;}tick ++;if (tick >= 10) {printf("__tmf8801_info_read tmo!\r\n");return TMF8x01_NK;}}   I2C_TMF8001_ReadByte(0x28, serial_num, 4);/* 打印 */printf("Serial Number: %02x-%02x-%02x-%02x\r\n",serial_num[0], serial_num[1], serial_num[2], serial_num[3]);printf("App0 Revision: %d.%d.%d\r\n",app0_rev_num[0], app0_rev_num[1], app0_rev_num[2]);printf("Chip Revision: %d\r\n", chip_rev_id);return TMF8x01_OK;
}/******************************************************************************/
int8_t tmf8801_init (void)
{   /* TMF8801 复位 */if (__tmf8801_rst() == TMF8x01_NK) {return TMF8x01_NK;}  /* 补丁下载初始化 */    if (__tmf8801_download_init() == TMF8x01_NK) {  return TMF8x01_NK;}/* 设置写 RAM 地址 */if (__tmf8801_set_ram_addr(0x00) == TMF8x01_NK) {return TMF8x01_NK;}/* 写 RAM */if (__tmf8801_write_ram() == TMF8x01_NK) {return TMF8x01_NK;}     /* 复位 RAM */if (__tmf8801_ram_remap_rst() == TMF8x01_NK) {return TMF8x01_NK;}delay_ms(100);/* 获取 TMF8801 芯片信息 */if (__tmf8801_info_read() == TMF8x01_NK) {return TMF8x01_NK;} /* 使能检测中断 */tmf8801_intx_enable();return TMF8x01_OK;
}/******************************************************************************/
int8_t tmf8801_app0_start (app0_init_config_t *p_config)
{   /** cmd_data7=03  Algorithm state and factory calibration is provided* cmd_data6=23  * cmd_data5=00  No GPIO control used* cmd_data4=00  No GPIO control used* cmd_data3=00  Object detection threshold* cmd_data2=64  Repetition period in ms 64 hex = 100ms* cmd_data1=84  Number of iterations, low byte; 1 LSB=1 k* cmd_data0=03  Number of iterations, high byte; Set to 900k iterations* command  =02  Set flag to perform target distance measurement with 8 *               bytes of data containing where including setting of *               calibration (and algorithm state) configuration.*/uint8_t cmd_buf[9] = {0x00, 0xA3, 0x00, 0x00, 0x00, 0x64, 0x84, 0x03, 0x02};    uint8_t  cali_ok   =  0;uint8_t  regval    =  0;    uint8_t  i         =  0;I2C_TMF8001_ReadByte(0xE0, &regval, 1);if (regval != 0x41) {/* CPU 没准备好与主机 IIC 通信 */return TMF8x01_NK;}/* 配置 APP0 相关参数 */cmd_buf[0] = p_config->calibration_state_mask;cmd_buf[2] = p_config->gpio_control;cmd_buf[3] = p_config->gpio_output_control;cmd_buf[5] = p_config->repetition_period_ms;cmd_buf[6] = p_config->iterations & 0xFF;cmd_buf[7] = (p_config->iterations >> 8) & 0xFF;/* 预装载工厂校准数据或算法状态数据 */    if (cmd_buf[0] & FACTORY_CALIBRATION_PROVIDE) {/* 提供了工厂校准数据 */#if 0if (eepromRead(CALI_STA_ADDR, &cali_ok, 1) != EE_SUCCESS) {return TMF8x01_NK;}if (cali_ok == 0xAA) {/* 执行过工厂校准 */if (eepromRead(CALI_DATA_ADDR, g_cali_buf, 14) != EE_SUCCESS)/* 读取工厂校准数据 */{return TMF8x01_NK;}}#endifI2C_TMF8001_WriteByte(0x20, g_cali_buf, 14);/* 写入 14 字节校准数据 */if (cmd_buf[0] & ALGORITHM_STATE_PROVIDE) {/* 提供了算法状态数据 */I2C_TMF8001_WriteByte(0x2E, g_state_buf, 11);/* 写入 11 字节算法状态数据 */}} else if (cmd_buf[0] & ALGORITHM_STATE_PROVIDE) {/* 提供了算法状态数据 */I2C_TMF8001_WriteByte(0x20, g_state_buf, 11);/* 写入 11 字节算法状态数据 */}I2C_TMF8001_WriteByte(0x08, cmd_buf, 9);/* 配置 TOF 功能并启动 */printf("配置并启动APP0:\r\n"); /* 回显打印 */for (i = 0; i < 9; i++) {             printf("%02x ", cmd_buf[i]);}printf("\r\n");return TMF8x01_OK;
}/******************************************************************************/
int8_t tof_timestamp_get (uint8_t *timestamp) 
{uint8_t  status    =  0;/** 一定要从ToF_REGADDR_STATUS开始读,并判断ToF_REGADDR_CONTENTS中的值为0x55* 否则可能读出时间戳为0!!! */I2C_TMF8001_ReadByte(TMF8x01_REGADDR_STATUS, &status, 1);printf("TMF8x01_REGADDR_STATUS: %x\r\n", status);I2C_TMF8001_ReadByte(TMF8x01_REGADDR_CONTENTS, &status, 1);printf("TMF8x01_REGADDR_CONTENTS: %x\r\n", status);if (status != 0x55) {/* 未生成结果数据 */return TMF8x01_ENORES;}I2C_TMF8001_ReadByte(0x24, timestamp, 4);     /* 读取时间戳 */printf("timestamp: %d\r\n", *timestamp);return TMF8x01_OK;
}/******************************************************************************/
int8_t tmf8801_result_get (result_info_t *p_res)
{uint8_t result_buf[0x3A - 0x20 + 1] = {0};uint8_t regval                      =  0;uint8_t i                           =  0;I2C_TMF8001_ReadByte(TMF8x01_REGADDR_STATUS, &regval, 1);I2C_TMF8001_ReadByte(TMF8x01_REGADDR_CONTENTS, &regval, 1);if (regval != 0x55) {/* 未生成结果数据 */return TMF8x01_ENORES;}/* 读取结果数据 */I2C_TMF8001_ReadByte(0x20, result_buf, 0x3A - 0x20 + 1);p_res->result_num        = result_buf[0x20 - 0x20];p_res->reliability       = result_buf[0x21 - 0x20] & 0x3F;p_res->distance_peak     = ((uint16_t)result_buf[0x23 - 0x20] << 8) + result_buf[0x22 - 0x20];p_res->time_stamp        = ((uint32_t)result_buf[0x27 - 0x20] << 24) | ((uint32_t)result_buf[0x26 - 0x20] << 16) |((uint32_t)result_buf[0x25 - 0x20] << 8)  |((uint32_t)result_buf[0x24 - 0x20] << 0);p_res->reference_hits    = ((uint32_t)result_buf[0x36 - 0x20] << 24) | ((uint32_t)result_buf[0x35 - 0x20] << 16) |((uint32_t)result_buf[0x34 - 0x20] << 8)  |((uint32_t)result_buf[0x33 - 0x20] << 0);p_res->object_hits       = ((uint32_t)result_buf[0x3A - 0x20] << 24) | ((uint32_t)result_buf[0x39 - 0x20] << 16) |((uint32_t)result_buf[0x38 - 0x20] << 8)  |((uint32_t)result_buf[0x37 - 0x20] << 0);  /* 备份算法状态数据 */for (i = 0; i < 11; i++) {      g_state_buf[i] = result_buf[0x28 - 0x20 + i];} return TMF8x01_OK;
}/******************************************************************************/
void tmf8801_result_display (result_info_t result)
{    printf("Result number:%d\r\n", result.result_num);printf("Distance(mm):%d\r\n", result.distance_peak);printf("Reliability:%d\r\n", result.reliability);  printf("Timestamp(100us):%d\r\n", result.time_stamp);printf("State data:%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n",g_state_buf[0], g_state_buf[1], g_state_buf[2], g_state_buf[3], g_state_buf[4], g_state_buf[5], g_state_buf[6], g_state_buf[7], g_state_buf[8], g_state_buf[9], g_state_buf[10]);   printf("Reference hits:%d\r\n", result.reference_hits);printf("Object hits:%d\r\n", result.object_hits);
}/******************************************************************************/
int8_t tmf8801_app0_stop (void)
{uint32_t tick   = 0;   uint8_t  regval = 0xFF;I2C_TMF8001_WriteByte(TMF8x01_REGADDR_COMMAND, &regval, 1);while (1) {/* wait CPU ready */I2C_TMF8001_ReadByte(0xE0, &regval, 1);if (regval == 0x41) {break;}       tick ++;if (tick >= 5) {   /* 重新发送停止命令 */I2C_TMF8001_WriteByte(TMF8x01_REGADDR_COMMAND, &regval, 1);}if (tick >= 10)  { /* 超时 */printf("tmf8801_app0_stop err!\r\n");return TMF8x01_NK;}}    return TMF8x01_OK;  
}/******************************************************************************/
int8_t tmf8801_factory_calibration (void)
{uint8_t  cali_ok = 0;uint8_t  regval  = 0;    uint32_t tick    = 0;uint8_t  i       = 0;I2C_TMF8001_ReadByte(TMF8x01_REGADDR_ENABLE, &regval, 1);if (regval != 0x41) {/* 传感器忙 */return TMF8x01_ENOTREADY;}regval = 0x0A;I2C_TMF8001_WriteByte(TMF8x01_REGADDR_COMMAND, &regval, 1);  /* 执行工厂校准命令 */while (1) {                             /* 等待校准数据生成完毕 */I2C_TMF8001_ReadByte(0x1E, &regval, 1);if (regval == 0x0A) {break;}tick ++;if (tick >= 10){printf("tmf8801_factory_calibration tmo!\r\n");return TMF8x01_NK;}}/* 读取14字节的校验数据 */I2C_TMF8001_ReadByte(0x20, g_cali_buf, 14);cali_ok = 0xAA;       /* 标志已经执行过工厂校准 */#if 0/* 备份工厂校准数据 */if (eepromRead(0, g_sys_para, SYSPARA_BUF_LEN) != EE_SUCCESS) {return TMF8x01_NK;}for (i = 0; i < 14; i++) {g_sys_para[i] = g_cali_buf[i];}g_sys_para[CALI_STA_ADDR] = cali_ok;   if (eepromWriteNByte(0, g_sys_para, SYSPARA_BUF_LEN) != EE_SUCCESS) {return TMF8x01_NK;}#endifprintf("工厂校准数据: ");for (i = 0; i < 14; i++) {             printf("0x%02x, ", g_cali_buf[i]);}printf("\r\n");return TMF8x01_OK;   
}/******************************************************************************/
void tmf8801_app0_get_default_config (app0_init_config_t *p_config)
{/* 不提供工厂校准数据和算法状态数据 */p_config->calibration_state_mask = NO_DATA_PROVIDE;/* GPIO0, GPIO1 均作输入(复位值) */p_config->gpio_control           = GPIO0_INPUT | GPIO1_INPUT;/* 无信号输出 */p_config->gpio_output_control    = 0;/* 重复测量周期为 6ms */p_config->repetition_period_ms   = 6;       /* 迭代次数 900k */p_config->iterations             = 900;
}/******************************************************************************/
int8_t tmf8801_app0_osc_trim (int32_t change)
{uint8_t  regval   = 0;uint8_t  fuse3    = 0;uint8_t  fuse6    = 0;int32_t  trim_val = 0;uint32_t tick     = 0;regval = 0x29;  I2C_TMF8001_WriteByte(0x06, &regval, 1);regval = 0x00;          /* PON = 0 */I2C_TMF8001_WriteByte(0xE0, &regval, 1);while (1) {             /* 等待进入待机模式 */I2C_TMF8001_ReadByte(0xE0, &regval, 1);{if (regval == 0x00) {break;}}tick ++;if (tick >= 10){printf("tmf8801_app0_osc_trim tmo!\r\n");return TMF8x01_NK;}}  I2C_TMF8001_ReadByte(0x03, &fuse3, 1);I2C_TMF8001_ReadByte(0x06, &fuse6, 1);trim_val = (((int32_t)fuse3) << 1) | ((fuse6 & (0x01 << 6)) >> 6);trim_val += change;trim_val &= 0x1FF;fuse6 &= ~(0x01 << 6);fuse6 |= ((trim_val & 0x01) << 6);fuse3  = ((trim_val >> 1) & 0xFF);I2C_TMF8001_WriteByte(0x03, &fuse3, 1);I2C_TMF8001_WriteByte(0x06, &fuse6, 1);regval = 0x01;          /* PON = 1 */I2C_TMF8001_WriteByte(0xE0, &regval, 1);while (1) {/* 等待进入空闲模式 */I2C_TMF8001_ReadByte(0xE0, &regval, 1);{if (regval == 0x41) {break;}}tick ++;if (tick >= 10){printf("tmf8801_app0_osc_trim tmo!\r\n");return TMF8x01_NK;}}  return TMF8x01_OK;
}/******************************************************************************/
void tmf8801_intx_enable (void)
{uint8_t regval = 0x01;I2C_TMF8001_WriteByte(0xE2, &regval, 1);
}/******************************************************************************/
uint8_t tmf8801_int_status_get (void)
{uint8_t status = 0;I2C_TMF8001_ReadByte(0xE1, &status, 1);return status;
}/******************************************************************************/
void tmf8801_int_status_clr (void)
{uint8_t regval = 0x01;I2C_TMF8001_WriteByte(0xE1, &regval, 1);
}/******************************************************************************/
int8_t tmf8801_handle_irq (void)
{uint8_t  status = 0;uint32_t tick   = 0;status = tmf8801_int_status_get();if (status & 0x01) {       /* 发生检测中断 */tmf8801_int_status_clr();while (1) {if (tmf8801_result_get(&g_tof_result) == TMF8x01_OK) {break;}tick ++;if (tick >= 10){printf("tmf8801_result_get tmo!\r\n");return TMF8x01_NK;}}      }  return TMF8x01_OK;
}

3、main函数

//有些变量是全局变量关系比较复杂,我这里就不写出来了,你们看一下TMF8801配置的流程就行了
int main(void)
{   u8 tof_timestamp[4];static uint32_t tof_timestamp_t1 = {0};static uint32_t tof_timestamp_t0 = {0};static uint8_t  cnt              =  0;  app0_init_config_t config = {0}; uart_init(115200);TIM3_Int_Init(10,36000);//5ms定时,实际测量5MSTMF8001_I2C_Init();//初始化TMF8x01if (tmf8801_init() == TMF8x01_NK) {printf("tmf8801_init err!\r\n");} //配置APP0config.calibration_state_mask = FACTORY_CALIBRATION_PROVIDE;//提供了工厂校准数据config.repetition_period_ms = 100;//重复测量周期为100msconfig.iterations           = 900;//迭代次数 900kif (tmf8801_app0_start(&config) == TMF8x01_NK)//配置APP0 {printf("tmf8801_app0_start err!\r\n");} while(1){if(System_Tick > 200){System_Tick = 0;tmf8801_handle_irq();printf("num:%3d  测量距离(mm):%4d  可信度:%2d", g_tof_result.result_num,g_tof_result.distance_peak,g_tof_result.reliability);}}
}   

五、测试

1、正常运行时串口打印的数据:
在这里插入图片描述
2、单片机和TMF8801通讯有问题时串口打印的数据:
在这里插入图片描述
好了,关于这款传感器的介绍就到这里,想要完整的驱动程序,可以在下面的链接下载,有stm8/stm32的驱动程序,也有立功科技的一个demo板的原理图和程序,用的是LPC824主控。如果还有什么问题可以留言给我,如果发现文章有误,请一定要指出来,谢谢!!!

程序下载链接:https://download.csdn.net/download/ShenZhen_zixian/12063597


http://www.ppmy.cn/news/248308.html

相关文章

TX2--TX2介绍

一、性能参数介绍 1、具体参数如下 二、实物 三、架构 1、CPU、GPU、软件架构详见 TX2学习笔记--Tegra架构介绍。 致谢 1、 Hardware For Every Situation&#xff08;官方&#xff09; 2、 TX2学习笔记--Tegra架构介绍

关于ElementPlus中的表单验证

关于ElementPlus中表单的校验规则&#xff0c;官网文档已经给出了&#xff0c;但是没有说明性文字&#xff0c;所以我想来记录一下&#xff0c;给出一些文字说明 ElementPlus中的简单校验 ElementPlus的表单的一般结构是&#xff1a; <el-form><el-form-item>&l…

vue3的api解读-watch

目录 副作用&#xff08;Side Effect&#xff09; 纯粹计算背后的效果【我们做UI时非常需要】 副作用的封装&#xff08;伪代码&#xff09; 副作用失效&#xff08;Invalidate&#xff09;问题 API:WatchEffect Coding&#xff1a;WatchEffect【演示代码】 /src/exampl…

【虚拟机】常用的9款虚拟机软件

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;善假于物&#…

RestCloud-新一代(智能)全域数据集成平台

新一代智能全域数据集成平台 一、介绍1.1 企业级数据集成架构面临的痛点1.2 RestCloud说明1.3 重构企业数据融合架构&#xff0c;解决各种复杂、即时、高合规的数据集成需求1.4 (智能)全域数据集成平台1.5 300数据及应用连接器轻松汇聚全域数据 二、产品简介2.1 功能特性2.2 产…

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建

基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建 文章目录 基于双视角图表示算法的双向人职匹配偏好建模推荐系统构建1. 传统推荐系统模型2. 协同过滤算法3. 基于双视角图表示学习算法的模型构建3.1 数据输入3.2 双视角交互图的构建3.3 混合偏好传播策略3.4 对于双向意…

简单的建立一个网络电视直播软件

网上有很多的软件或者网站都有网络电视直播的功能&#xff0c;电视台非常的丰富&#xff0c;不仅是卫视台&#xff0c;甚至是省市台&#xff0c;国外电视台都有&#xff0c;其实建立这样的一个软件非常简单。 其实整个网络电视就是一个WebBrowser中显示一个HTML网页就行了&…

智能电视聚好看连接服务器失败,最新海信电视网络故障解决方法汇总!新老用户值得收藏!...

智能电视标准不统一&#xff0c;所以使用起来也会繁琐&#xff0c;在使用过程中会遇到各种问题和操作上的麻烦。本文收集整理了一些关于海信电视使用中遇到一些网络方面的故障&#xff0c;并且一一给出解决方案。希望能够帮助到大家解决问题。 故障现象一&#xff1a; “聚好看…