当前位置: 首页 > news >正文

软件培训机构贵州seo排名

软件培训机构,贵州seo排名,网络规划设计师的发证机构,免费营销课程培训TMF8801激光测距芯片驱动程序 一、芯片介绍 TMF8801是2019年艾迈斯半导体推出的用于测量直接飞行时间(dToF)距离的集成式模块#xff0c;号称全球体积最小#xff08;表示怀疑#xff0c;不过体积确实非常小#xff09;。这个传感器可以精准测量0.02m至2.5m范围#xff…TMF8801激光测距芯片驱动程序 一、芯片介绍 TMF8801是2019年艾迈斯半导体推出的用于测量直接飞行时间(dToF)距离的集成式模块号称全球体积最小表示怀疑不过体积确实非常小。这个传感器可以精准测量0.02m至2.5m范围我实际测试在较亮的环境下能达到2.4m我站在2.4m的位置1s检测一次测试了几分钟大概有百分五十的概率能检测到暗环境下能够测量到2.5m2m以内基本都能检测到。相比于我们熟知的VL53L0X测距模块测量距离和精度确实要好很多。关于芯片的介绍我就不多说了感兴趣的同学可以去查一下。 二、引脚定义 引脚号引脚名称信号类型描述1VCCD电源供电电压3V接一个0.1uF电容到地2GNDC地电源负极3GPIO0IO通用IO口如果不用请保持开路4INT输出中断输出如果不用请接到地5SCL输入IIC时钟引脚6SDAIOIIC数据引脚7VDD电源供电电压3V接一个0.1uF电容到地8GND地电源负极9EN输入启用输入有效高电平设置为低电平强制器件关闭所有内存内容都会丢失如果未使用则连接至VDD10GPIO1IO通用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(i0;i6;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 ucErrTime0;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主器件已经接收完一个字节byteI2C从器件继续发送数据 *********************************************************/ 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(bit0;bit8;bit){if((Byte0x80)7){TMF8001_I2C_SDA_HIGHT;}else {TMF8001_I2C_SDA_LOW;}Byte1;//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_Byte0;TMF8001_I2C_SDA_In;for(bit0;bit8;bit){TMF8001_I2C_SCL_LOW;iic_delay_us(4);TMF8001_I2C_SCL_HIGHT;Receive_Byte1;//把上一时刻的值左移一位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(i0;iLen;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(i0;iLen;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[2j] 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_data703 Algorithm state and factory calibration is provided* cmd_data623 * cmd_data500 No GPIO control used* cmd_data400 No GPIO control used* cmd_data300 Object detection threshold* cmd_data264 Repetition period in ms 64 hex 100ms* cmd_data184 Number of iterations, low byte; 1 LSB1 k* cmd_data003 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.dnsts.com.cn/news/243576.html

相关文章:

  • 在省建设厅网站怎样报建旅游网站设计图
  • 成都官微最新发布微信seo是什么意思
  • 网站首页地址 网站域名莱芜定制网站建设公司
  • 杭州哪家公司可以做网站网站网站制作开发需要哪些技术
  • 做网站什么语言最好建行业网站的必要性
  • 兰州新站点seo加盟为什么中国人都跑去泰国做网站网站
  • 系统开发文档企业网站优化做什么
  • 如何把html网站改为asp网站山东网站建设哪里有
  • 汕头建站河南省罗山县做网站的公司
  • 企业网站建设设计服务科技有限公司英文
  • 广州英文建站公司江西事件最新消息新闻
  • 品牌网站建设工作室商务网站建设概念
  • 单页面网站推广方法wordpress默认字体改黑色
  • 大连建设安全网站动态图表制作软件
  • 做视频网站的流程建设银行总部投诉网站
  • 建设商场黄金网站南充房产信息
  • 加强政务网站建设小程序开发兼职的哪家好
  • 网站开发工程师岗位描述自己做小程序开个社区团购
  • 苏州网站建设中心三门县正规营销型网站建设地址
  • 手机微信网站链接重启服务器 wordpress
  • 云南省建设厅勘察设计处网站渭南网站制作学校
  • 企业网站建设的方案ppt美工宝盒网站
  • 网站宣传册怎么做丹徒网站建设哪家好
  • 网站验收全面的郑州网站建设
  • 做外贸哪个网站可以接单做旅游计划上哪个网站
  • 做网站的销售员电话话术花茶网站模板
  • 做公司的网站怎么上线江苏九天建设有限公司网站
  • 帮人做彩票网站支付接口wordpress本地上传阿里元
  • 免备案的网站网上有哪些网站做兼职
  • 做一个平台网站大概多少钱中山做展示型网站