4.3 AT open source API
- PWLINK2 (including Lite), PW400 Please note that the functions described on the current page are not supported.
1.1 Overview
AT Command Port, which supports control of input and output from both ends of the PowerWriter, i.e., the USB port and the extended general-purpose RX/TX port for input and output commands.
PWX1 UART port AT is not supported.
- USB-CDC: Users can send data to the PowerWriter via USB-CDC, and can also control the behaviour of the PowerWriter via AT commands supported by the PowerWriter to read status or data. This mode is suitable for users who want to develop secondary desktop software to integrate the PowerWriter to control the production process.
- Hardware UART (output serial port): In addition to using USB -CDC to control the behaviour of the PowerWriter, users can also integrate the PowerWriter into a hardware control system to control the behaviour of the PowerWriter, data uploads and downloads, which is suitable for the development mode away from the desktop system.
#github (refer to download the zip above)
git clone https://github.com/openpowerwriter/PowerWriter_AT_Command.git
#gitee code cloud (refer to download the above zip file)
git clone https://gitee.com/openpowerwriter/PowerWriter_AT_Command.git
1.2 AT command enable
To use the AT function, you need to enable AT mode on the device first, refer to. Device Preferences..
1.3 AT Command Structure
The standard AT command starts with "AT" and ends with a carriage return CR (LF), and the response style returned is
<\r\n><\r\n><body><\r\n><\r\n>
which is a purely string-based terminal response mode. On PowerWriter, due to the need for some interfaces to send large amounts of data, as well as the need for data encryption and better real-time performance, and to reduce the communications bandwidth consumption, the overall trade-offs, PowerWriter open AT interface using a unified binary format in order to provide better performance, the command structure is shown below:
frame header | length | data | crc32 |
---|---|---|---|
"PWAT" | uint32_t | object | crc32 |
frame header : Sync header signal for PowerWriter to fetch AT commands from the stream, four bytes, no '\0' endings.
length: length of the command frame, including: frameheader, length, data, crc32.
data: object type, it is the command entity data, related to the corresponding command, please refer to AT command details and code.
The format of data is defined as follows
typedef struct S_ATCmdObject{
E_ATcmdType m_cmdType; //Type
uint32_t m_cmdSize; //Size
U_ATCmdProprety * m_cmdPropretyp; //Payload
}S_ATCmdObject;m_cmdType: Indicates the command type, please refer to the definition of E_ATcmdType.
m_cmdSize: indicates the effective data length of the current command (reserved)
U_ATCmdProprety : indicates the property node of the current command, each command has its own property node, please refer to the definition of U_ATCmdProprety.
crc32: whole frame checksum value of command frame (frameheader, length, data),parameter configuration:
Polynomial : 0x04C11DB7
Initial/Final remainder : 0xffffffff
Input/Output reverse : yes
- The interface data can be encrypted with AES128CBC encryption, and the communication password must be set manually on the PowerWriter.
- Pure command line AT interface, please submit feedback.
- data nodes are forced to be byte-aligned by default when they are defined. The purpose of doing so is to remove differences in compiler features (structure padding) across platforms, which can result in some performance loss, and in order to make up for the possible performance loss (memory copying), an attempt is made to align attribute nodes to 4 bytes by default when they are defined (32-bit platforms), which makes no difference in practice, but cannot be relied upon as a default feature of the compiler. .
- The data node is not uniform in length, so if encryption is turned on, it will check if the total size of the object is aligned to 16 bytes, and if it is not, it will perform Zero padding at the end (some open source AES128CBC libraries come with other internal methods such as PKCS15, and not relying on the discretisation feature is a good choice), so m_ cmdSize may actually be less than the length of the data node, up to 15 bytes.
1.4 AT Command Classification
The current PowerWriter AT interface provides the following operational interfaces:
// PowerWriter AT command type
typedef enum E_ATcmdType
{
// Null command for reserved
ATCmdNull = 0,
// Query and configuration
ATCmdGetWriterInfo = 1, // Get writer information
ATCmdRspWriterInfo, // Respone writer information
ATCmdGetWriterCfg, // Get writer configuration
ATCmdRspWriterCfg, // Respone writer configuration
ATCmdSetWriterCfg, // Update writer confuguration
ATCmdSetBaudrate, // Set AT hardware commander baudrate
// Online mode target chip operation
ATCmdConnectTarget = 100, // Connnect target chip (manual operation)
ATCmdGetTargetStatus, // Get target chip status
ATCmdGetTargetChipID, // Get target chip id
ATCmdRspTargetChipID, // Respone target chip id
ATCmdReadTargetMemory, // Read target memory
ATCmdRspTargetMemory, // Respone target memory content
ATCmdEraseTarget, // Erase target chip (full)
ATCmdEraseTargetSectors, // Erase target sectors
ATCmdWriteTargetMemory, // Write target memory
ATCmdReadTargetOptionByte, // Read target option byte
ATCmdRspTargetOptionByte, // Respone target option byte
ATCmdWriteTargetVendorOptionByte, // Write vendor's default option byte to target
ATCmdWriteTargetUserOptionByte, // Write user's option byte to target
ATCmdResetTarget, //Reset target
// Offline mode target chip operation
ATCmdGetProjectInfo = 200, // Get project info from PowerWriter
ATCmdRspProjectInfo,
ATCmdLoadProject, // Load project to PowerWriter
ATCmdLoadProjectSend, //Load project to PowerWriter send package
ATCmdDisableProject, // Delete project from PowerWriter (Mark as invalid)
ATCmdStartOffline, // Start offline programming
ATCmdGetOfflineStatus, // Get offline programming status
// Benchmark instruction
ATCmdFactoryRunSRAMFW = 300, // Load & run factory SRAM firmware
ATCmdFactoryRunFlashFW, // Load & run factory Flash firmware
// Other command fields
ATCmdBroadcast = 400, // Broadcast data
//...
// State instruction
ATCmdStatusOK = (UINT32_MAX - 100), // Status Ok
ATCmdStatusError, // Status error with error code
ATCmdStatusProgress, // Status busy (progress)
// Align to 4 bytes, compiler independent
_ATCmdTypeMax = UINT32_MAX
} E_ATcmdType;
PowerWriter will update and maintain the developed instructions, please refer to the repository source code for details.
1.4.1 Query and configuration
1.4.1.1 Query information
ATCmdGetWriterInfo:
Parameter: no parameter required, but placeholder (empty structure causes some compiler warnings)
typedef struct S_ATCmdObject{
union powerwriter_at_type{
uint32_t m_placeholder; // An placeholder for empty structure
}property;
}S_ATCmdGetWriterInfo;
m_placeholder:placeholder
A part of commands only have command type, no parameters, are expressed as S_ATCmdObject, and will not repeat the description.
The Command returns :ATCmdRspWriterInfo
1.4.1.2 Return information
ATCmdRspWriterInfo:
invoke parameter:ATCmdGetWriterInfo
Return value:
typedef struct S_ATCmdRspWriterInfo
{
uint8_t m_oem[PW_OEM_LENGTH]; // PowerWriter oem, such as PW200,PW300,PWLINK etc...
uint8_t m_sn[PW_SN_LENGTH]; // PowerWriter sn, formated as "xxxxxxxxxxxx..."
uint8_t m_hardwareVersion[PW_VERSION_LENGTH]; // PowerWriter hardware version, formated as "x.xx.xx"
uint8_t m_bootloaderVersion[PW_VERSION_LENGTH]; // PowerWriter bootloader version, formated as "x.xx.xx"
uint8_t m_interfaceVersion[PW_VERSION_LENGTH]; // PowerWriter interface version, formated as "x.xx.xx"
} S_ATCmdRspWriterInfo;
m_oem:PowerWriter OEM models.
m_sn:PowerWriter serial number.
m_hardwareVersion: PowerWriter hardware version.
m_bootloaderVersion: PowerWriter bootloader version.
m_interfaceVersion: PowerWriter interface firmware version.
1.4.1.3 Querying Configuration
ATCmdGetWriterCfg:
Call parameter: S_ATCmdObject。
The Command returns :ATCmdRspWriterCfg
1.4.1.4 Return Configuration
ATCmdRspWriterCfg:
Invoke parameter:ATCmdGetWriterCfg
Return Value:
// Target names
typedef struct S_TargetName
{
uint8_t m_targetVendor[PW_TARGET_NAME_MAX]; // target chip vendor,such as 'nations'(Note: not changed)
uint8_t m_targetSeries[PW_TARGET_NAME_MAX]; // target chip series,such as 'N32G020'(Note: not changed)
uint8_t m_targetModel[PW_TARGET_NAME_MAX]; // target chip model,such as 'N32G020G5'(Note: not changed)
} S_TargetName;
// Base setting
typedef struct S_BaseWriterCfg
{
uint8_t m_eraseType; // Erase type: 0(no erase),1(chip erase),2(sector erase)
uint8_t m_outputVextType; // Output VEXT: 0(1.8V),1(3.3V),2(5.0V),3(refer to external power supply)
uint8_t m_clockType; // Colok: 0(20Mhz fast mode),1(10Mhz default),2(5Mhz),3(2Mhz),4(1Mhz), etc ...
uint8_t m_buzzerEnable; // 0: disable 1: enable
uint8_t m_obUpdateType; // 0: No operation before programming, no operation after programming
// 1: No operation is performed before programming, and user - defined OptionByte is written after flash programming
// 2: Restore default values is performed before programming, no operation after programming.
// 3: Restore default values is performed before programming, and user - defined OptionByte is written after flash programming
} S_BaseWriterCfg;
// Offline configure
typedef struct S_OfflineWriterCfg
{
uint8_t m_limitOfNumberEnable; // 0 : disable 1: enable (Note: not changed)
uint32_t m_limitOfNumber; // Current remaining quantity (Note: not changed)
uint8_t m_targetAutoEnable; // 0: disable 1:enable
uint16_t m_targetAutoInDebonce; // Target connected debonce time
uint16_t m_chipAutoChkOut; // Target disconnected debonce time
} S_OfflineWriterCfg;
// Output Ctrl configure
typedef struct S_OutputCtrlWriterCfg
{
uint8_t m_disablePowerAP; // 0 : disable 1:enable (Power off when programming is complete)
uint8_t m_runAP; // 0 : disbale 1:enable (Run when programming is complete)
uint16_t m_poweronDebonce; // Debonce the output power supply (ms)
uint16_t m_powerdownDebonce; // Debonce the output power off (ms)
uint8_t m_resetType; // 0 : Keep low
// 1 : Off, high resistance
// 2 : Reset output then to off
} S_OutputCtrlWriterCfg;
// Writer configure for currrent project
typedef struct S_ATCmdWriterCfg
{
S_TargetName m_targetName; // Target names
S_BaseWriterCfg m_baseCfg; // Base config
S_OfflineWriterCfg m_offlineCfg; // Offline configure
S_OutputCtrlWriterCfg m_outputCtrlCfg; // Output control configure
} S_ATCmdRspWriterCfg, S_ATCmdSetWriterCfg;
1.4.1.4 Updating Configuration
ATCmdSetWriterCfg
Invoke Parameter:S_ATCmdSetWriterCfg, same as ATCmdRspWriterCfg
Return Value
ATCmdStatusOK、ATCmdStatusError。
- For security reasons, some PowerWriter configurations are not allowed to be changed (modification is invalid), such as: m_targetName, m_limitOfNumberEnable, m_limitOfNumber.
- Programmer configuration information, by default PowerWrietr loads the offline project information at startup, if no offline project is preloaded, the default value is returned.
1.4.1.4 Setting the AT BaudRate
ATCmdSetBaudrate
Invoke Parameter:S_ATCmdSetBaudrate
typedef struct S_ATCmdObject
{
union powerwriter_at_type
{
uint32_t m_baudrate; // Set UART AT new baudrate;
}property;
}S_ATCmdSetBaudrate;
m_baudrate: set new baud rate
Return Value
ATCmdStatusOK、ATCmdStatusError。
- The USB port does not need to change the baud rate, it is a CDC interface and supports all baud rates, which are set automatically, and the UART port AT is a hardware UART port with a default baud rate of 9600.
- After receiving the command, the PowerWriter returns the response according to the baud rate before the setting, if the setting is successful, the PowerWriter will automatically enter the new baud rate communication, if it fails, it still keeps the old baud rate setting.
1.4.2 Online operating
For online operation commands, you need to load the offline project first and perform data presetting before it is supported.
1.4.2.1 Connecting target chip
ATCmdConnectTarget
Invoke Parameter:S_ATCmdObject
Return Value
ATCmdStatusOK、ATCmdStatusError。
1.4.2.2 Get connection status
ATCmdGetTargetStatus
Invoke Parameter:S_ATCmdObject
Return Value
ATCmdStatusOK、ATCmdStatusError。
1.4.2.3 Get target chip ID
ATCmdGetTargetChipID
Invoke Parameter:S_ATCmdObject
Return Value
ATCmdRspTargetChipID、ATCmdStatusError。
1.4.2.4 Returns target chip ID
ATCmdRspTargetChipID
Invoke Parameter:ATCmdGetTargetChipID
Return Value
typedef struct S_ATCmdRspTargetChipID
{
uint8_t m_CIDSize; // Target chip ID size
uint8_t m_CIDData[PW_TARGET_ID_MAX]; // Target chip ID data
} S_ATCmdRspTargetChipID;
m_CIDSize: Current chip ID length
m_CIDData: The ID Data Buffer of the current chip, the reserved buffer length is PW_TARGET_ID_MAX(16).
Some chips have non-contiguous IDs, PowerWriter will give the non-contiguous chips in a continuous mode to remove redundant information.
1.4.2.5 Read target chip data
ATCmdReadTargetMemory
Invoke Parameter:S_ATCmdReadTargetMemory
typedef struct S_ATCmdReadTargetMemory{
uint32_t m_address; //Target chip address, support such as SRAM、Flash、EEPROM、OTP etc...
uint32_t m_size; //Data size of a single read (Must be less than 256)
}S_ATCmdReadTargetMemory;
m_address: address for reading data, support SRAM, peripheral register value (some modules may need special permission, please feedback with us), Flash, EEPROM, OTP, etc.
m_size: the size of the read data.
The size of a single read should not exceed PW_BUFFER_MAX(256), otherwise PowerWriter will only return the length of PW_BUFFER_MAX. PowerWriter does not provide a continuous read command yet, although the continuous can improve the read/write efficiency, but it needs a large storage space to receive the data, which is not friendly to the AT interface of UART. This is not friendly to the AT interface on the UART side. If you have any special needs, please give us feedback, and there is no interface for mem8, mem16, mem32.
Return Value:Refer to ATCmdRspTargetMemory、ATCmdStatusError.
1.4.2.6 Return data
ATCmdRspTargetMemory
Invoke Parameter:ATCmdReadTargetMemory
Return ValueS_ATCmdReadTargetMemory
// Respone target chip memory
typedef struct S_ATCmdRspTargetMemory{
uint32_t m_address; //Current data address
uint32_t m_size; //Current data size
uint8_t m_buffer[PW_BUFFER_MAX]; //Current data buffer (fixed length)
}S_ATCmdRspTargetMemory;
m_address: Starting address of the actual returned data.
m_size:Length of data actually read successfully.
m_buffer:Data buffer (Note: buffer is fixed length).
1.4.2.7 Erase Target Chip
ATCmdEraseTarget
Invoke Parameter:S_ATCmdObject
Return ValueATCmdStatusOK、ATCmdStatusError。
The time to erase the target chip is uncertain, and you need to reserve enough waiting time when executing this command.
1.4.2.8 Erase Sector
ATCmdEraseTargetSectors
Invoke Parameter:ATCmdEraseTargetSectors
// Erase target chip
typedef struct S_ATCmdReadTargetMemory{
uint32_t m_address; //Target chip address, support such as SRAM、Flash、EEPROM、OTP etc...
uint32_t m_size; //Data size of a single read (Must be less than 256)
}S_ATCmdReadTargetMemory,
S_ATCmdEraseTargetSectors;
m_address: Erase the address of the target chip (you can erase Flash, EEPROM, and other memory with a sector table).
m_size:Erase Length
Return ValueATCmdStatusOK、ATCmdStatusError。
Erasing addresses aligned to the sector start address, erasing an integer number of sectors is the optimal solution, if the start or end address is not aligned, more sectors will be erased at the start address (rounded down) and one more sector at the end (rounded up).
The time to erase the target chip is uncertain, and you need to reserve enough waiting time when executing this command.
1.4.2.9 Write data
ATCmdWriteTargetMemory
Invoke Parameter:S_ATCmdWriteTargetMemory
// Respone target chip memory
// Write target chip memory
typedef struct S_ATCmdTargetMemory{
uint32_t m_address; //Current data address
uint32_t m_size; //Current data size
uint8_t m_buffer[PW_BUFFER_MAX]; //Current data buffer (fixed length)
}S_ATCmdRspTargetMemory,
S_ATCmdWriteTargetMemory;
m_address: Starting address of the actual data written
m_size:Actual length of data written and read
m_buffer:Data buffer (Note: buffer is fixed length)
Return ValueATCmdStatusOK、ATCmdStatusError。
Write data support write to SRAM, write to Flash, EEPROM, OTP, etc., other area write is not fully tested.
1.4.2.10 Read option byte
ATCmdReadTargetOptionByte
Invoke Parameter:S_ATCmdReadTargetOptionByte
Return ValueATCmdRspTargetOptionByte、ATCmdStatusError。
1.4.2.11 Return option byte
ATCmdRspTargetOptionByte
Invoke Parameter:ATCmdReadTargetOptionByte
Return Value
// Respone target chip option byte
typedef struct S_ATCmdRspTargetOptionByte{
uint32_t m_OBsize; //Option byte size
uint8_t m_OBData[PW_OB_MAX]; //Option byte data buffer
}S_ATCmdRspTargetOptionByte;
m_OBsize:Length of option bytes
m_OBData:Option byte buffer (currently fixed length, will be optimised later)
1.4.2.12 Write default option byte
ATCmdWriteTargetVendorOptionByte
Invoke Parameter:S_ATCmdWriteTargetVendorOptionByte
Return ValueATCmdStatusOK、ATCmdStatusError。
Write option words with data from an offline project (pkg), be sure to preload them first!
1.4.2.13 Write user option byte
ATCmdWriteTargetUserOptionByte
Invoke Parameter:S_ATCmdWriteTargetUserOptionByte
Return ValueATCmdStatusOK、ATCmdStatusError。
Write option words with data from an offline project (pkg), be sure to preload them first!
1.4.2.14 Reset target chip
ATCmdTargetReset
Param:S_ATCmdTargetReset
// Reset Target type
typedef enum E_resetType
{
HWKeepLow, //Hardware Keeplow
HWNoneReset, //Hardware high resistance state
HWReset, //Hardware reset
HWCoreReset, //Hardware & core reset
CoreReset, //Soft Core Reset
VectorReset, //Soft Vector Reset
POROnly, //Power On Reset
PORAndRelease, //Power On Reset and release port
_TARGET_RESET_ = PW_ENUM_MAX
}E_resetType;
typedef struct S_ATCmdObject
{
union powerwriter_at_type
{
uint32_t resetType; // Set UART AT new baudrate;
}property;
}S_ATCmdTargetReset;
resetType: reset target chip operation type.
Return:
ATCmdStatusOK、ATCmdStatusError。
- After reset, the chip will be offline, if you need to perform online operation again, you need to reconnect the chip, see Connecting Chip Operation Instruction.
1.4.3 Offline Operation Command
1.4.3.1 Offline Info
ATCmdGetProjectInfo
Invoke Parameter:S_ATCmdGetProjectInfo
Return ValueATCmdRspProjectInfo、ATCmdStatusError。
1.4.3.2 Return Project Information
ATCmdRspProjectInfo
Invoke Parameter:ATCmdGetProjectInfo
Return ValueS_ATCmdRspProjectInfo。
// Respone offline project infomation
typedef struct S_ATCmdRspProjectInfo{
uint8_t m_activate; // 0 : Inactivate 1: Activate
uint32_t m_projectSize; // Offline project size
uint32_t m_projectcrc32; // Offline project crc32
}S_ATCmdRspProjectInfo;
m_activate: 0 means not valid, 1 means valid
m_projectSize : offline project size
m_projectcrc32 :offline project crc32
1.4.3.3 Load Offline Project
ATCmdLoadProject
Invoke Parameter:S_ATCmdLoadProject
//Load offline project to PowerWriter
typedef struct S_ATCmdLoadProject
{
uint8_t m_password[PW_PROJECT_PWD_SIZE] //Project password
uint32_t m_projectSize; //Project Size
uint32_t m_projectCRC32; //Project crc32
}S_ATCmdLoadProject;
m_password: Project file password
m_projectSize : Project file size
m_projectCRC32:CRC32 checksum of the project file
Return ValueATCmdStatusOK、ATCmdStatusError。
- The maximum length of the project file password is 16 characters, if password is shorter than 16 bytes, please fill the remaining part with 0x00 .
- The transmission of project file passwords is sensitive data, so users with security needs should enable the AT communication encryption function (Encryption algorithm is AES128 CBC).
1.4.3.4 Load offline project send
ATCmdLoadProjectSend
Invoke Parameter:S_ATCmdLoadProjectSend
//Load offline project to PowerWriter send
typedef struct S_ATCmdLoadProjectSend
{
uint32_t m_offset; //offset of project
uint32_t m_Size; //currrent acitvate
uint8_t m_data[PW_PACKAGE_SIZE]; //data buffer
}S_ATCmdLoadProjectSend;
m_offset:The offset address of the currently sent data.
m_Size:The length of the current send.
m_data:Current data buffer.
Return ValueATCmdStatusOK、ATCmdStatusError。
1.4.3.5 Disable offline projects
ATCmdDisableProject:
Invoke Parameter:S_ATCmdDisableProject
Return ValueATCmdStatusOK、ATCmdStatusError。
1.4.3.6 Start offline Programming
ATCmdStartOffline:
Invoke Parameter:S_ATCmdStartOffline
Return ValueATCmdStatusOK、ATCmdStatusError。
1.4.3.7 Query Offline Status
ATCmdGetOfflineStatus
Invoke Parameter:S_ATCmdGetOfflineStatus
Return ValueATCmdStatusOK、ATCmdStatusError、ATCmdStatusProgress。
1.4.4 Benchmark
1.4.4.1:Run SRAM firmware
ATCmdFactoryRunSRAMFW
Invoke Parameter:S_ATCmdFactoryRunSRAMFW
Return ValueATCmdStatusOK、ATCmdStatusError。
1.4.4.2:Run Flash firmware
ATCmdFactoryRunFlashFW
Invoke Parameter:S_ATCmdFactoryRunFlashFW
Return ValueATCmdStatusOK、ATCmdStatusError。
1.4.5 Extensions
1.4.5.1 Broadcast
ATCmdBroadcast
Invoke Parameter:S_ATCmdBroadcast
typedef enum S_ATCmdBroadcastDirection{
DIR_CDC2UART, //Forwarding from USB to UART
DIR_UART2CDC, //Forwarding from UART to USB
_DIR_MAX_ = UINT32_MAX
}S_ATCmdBroadcastDirection;
typedef struct S_ATCmdBroadcast
{
uint8_t m_keepATFrame; //0 : Forwarding valid data, 1: forwarding Full AT frame data
S_ATCmdBroadcastDirection m_dirType; //Direction
uint32_t m_size; //Activate size
uint8_t m_data[PW_PACKAGE_SIZE] //data
}S_ATCmdBroadcast;
m_keepATFrame:0 for forwarding only valid data, 1 for forwarding the full AT frame structure (parse AT instructions on other systems as well )
m_dirType:Broadcast path
m_size:The length of the data currently being sent
m_data:data buffer
Return ValueATCmdStatusOK、ATCmdStatusError。
- Why a transport path is specified: Some products have only two ports, USB and UART, while others have multiple forwarding ports for compatibility reasons.
1.4.6 Debug command
Not available (if necessary, please let us know)...
1.4.7 IO control commands
Not available (if necessary, please let us know)...
1.4.8 State
1.4.8.1 Return Status Ok
Invoke Parameter:All major commands that do not return data will return an Ok response.
Return:S_ATCmdObject
1.4.8.2 Return Status Error
Invoke Parameter:All commands may return ATCmdStatusError and will not be described in detail.
Return:
typedef struct S_ATCmdObject
{
union powerwriter_at_type
{
uint32_t m_errorcode; // Status error code
}property;
} S_ATCmdStatusError;
m_errorcode:The error code returned; see the definition in powerwriter_at_error.h
1.4.8.3 Return Status Progress
Invoke Parameter:ATCmdGetOfflineStatus。
Return:
//ATCmdStatusProgress
typedef struct S_ATCmdStatusProgress{
uint32_t m_total; //Total size
uint32_t m_processed; //Processed size
}S_ATCmdStatusProgress;
m_total: Total length of treatment
m_processed: Length processed
2.0:API
The previous section describes the command classification, and the corresponding input and output parameter types, this section, describes the currently provided interface API, see powerwriter_at_api.h.
/**
* @file powerwriter_at_api.h
* @brief PowerWriter open communication interface
*
* PowerWriter AT
* Copyright (c) 2009-2021, ICWorkshop Limited, All Rights Reserved
* SPDX-License-Identifier: MIT
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __powerwriter_at_api_h
#define __powerwriter_at_api_h
#include "powerwriter_at_type.h"
#include "powerwriter_at_utils.h"
#include "powerwriter_at_cert.h"
#include "powerwriter_at_porting.h"
#ifdef __cplusplus
extern "C"
{
#endif
#include "powerwriter_at_log.h"
/* Print basic information */
extern void powerwriter_at_introduction(void);
// Running benchmark tests
extern bool powerwriter_at_benchmark(S_ATChannel *, bool, ATCmdStreamOut, ATCmdEventOut);
// initialisation
extern bool powerwriter_at_init(S_ATChannel *, bool, ATCmdStreamOut, ATCmdEventOut);
// Fill receive data to AT
extern bool powerwriter_at_datain(S_ATChannel *ch, void *data, size_t size);
// Get current frame information
extern const S_ATCmdFrame *powerwriter_at_received_frame(S_ATChannel *ch);
// Get last error code
extern E_ATCmdError powerwriter_at_last_error(S_ATChannel *ch);
// Getting PowerWriter Information
extern bool powerwriter_at_get_writerinfo(S_ATChannel *ch, S_ATCmdRspWriterInfo *info);
// Getting the PowerWriter Configuration
extern bool powerwriter_at_get_writerconfig(S_ATChannel *ch, S_ATCmdRspWriterCfg *cfg);
// Updating the PowerWriter Configuration
extern bool powerwriter_at_set_writerconfig(S_ATChannel *ch, const S_ATCmdRspWriterCfg *cfg);
// Update the baud rate of the AT
extern bool powerwriter_at_set_baudrate(S_ATChannel *ch, int baudrate);
// Initialise target chip connection
extern bool powerwriter_at_target_connect(S_ATChannel *ch);
// Get Connection Status
extern bool powerwriter_at_target_status(S_ATChannel *ch);
// Read target chip ID
extern bool powerwriter_at_target_id(S_ATChannel *ch, S_ATCmdRspTargetChipID *rsp);
// Read target chip memory
extern bool powerwriter_at_target_read(S_ATChannel *ch, uint32_t addr, uint32_t size, S_ATCmdRspTargetMemory **memory);
// Erase Target Chip
extern bool powerwriter_at_target_erase(S_ATChannel *ch, int timout_ms);
// Erase target chip flash memory
extern bool powerwriter_at_target_erase_sector(S_ATChannel *ch, uint32_t addr, uint32_t size, int timout_ms);
// Programming target chip flash data
extern bool powerwriter_at_target_write_prepare(S_ATChannel *ch, uint32_t total);
extern bool powerwriter_at_target_write(S_ATChannel *ch, uint32_t addr, void *buffer, size_t buffersize);
// Read target chip option byte
extern bool powerwriter_at_target_read_ob(S_ATChannel *ch, S_ATCmdRspTargetOptionByte **ppob);
// Write default factory default option words to the target chip
extern bool powerwriter_at_target_write_vendor_ob(S_ATChannel *ch, int timout_ms);
// Write the current user-defined option word
extern bool powerwriter_at_target_write_user_ob(S_ATChannel *ch, int timout_ms);
// Get offline project information
extern bool powerwriter_at_project_info(S_ATChannel *ch, S_ATCmdRspProjectInfo **ppproject);
// Disable offline projects
extern bool powerwriter_at_project_disable(S_ATChannel *ch);
// Loading offline projects
extern bool powerwriter_at_project_load(S_ATChannel *ch, const char *password, const void *prj_data, size_t prj_size, ATProgress p_cb);
// Initiate offline programming
extern bool powerwriter_at_offline_start(S_ATChannel *ch);
// Query offline programming status
extern bool powerwriter_at_offline_status(S_ATChannel *ch, S_ATCmdStatus *ps);
// Simplex broadcast with no answer
extern bool powerwriter_at_easy_broadcast_no_rsp(S_ATChannel *ch, const void *bcdata, size_t bcsize, S_ATCmdBroadcastDir bcdir);
// standard broadcast
extern bool powerwriter_at_broadcast(S_ATChannel *ch, const void *bcdata, size_t bcsize, S_ATCmdBroadcastDir bcdir, bool keepframe,
bool waitrsp, S_ATCmdBroadcast *prsp, int waitrsptimeout);
/* Factory Testing */
// Running SRAM Test Firmware
bool powerwriter_at_run_factory_sram_fw(S_ATChannel *ch, int timeout);
// Running Flash Test Firmware
bool powerwriter_at_run_factory_flash_fw(S_ATChannel *ch, int timeout);
#ifdef __cplusplus
}
#endif
#endif
3.0:Configuration and Migration
This section provides guidance for porting the source code and configuring the interface.
3.0.1:Configure
/**
* @file powerwriter_at_config.h
* @brief PowerWriter open communication interface
*
* PowerWriter AT
* Copyright (c) 2009-2021, ICWorkshop Limited, All Rights Reserved
* SPDX-License-Identifier: MIT
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __powerwriter_at_CONFIG_h
#define __powerwriter_at_CONFIG_h
#include <stdint.h>
#include <string.h>
// The global control
#define POWERWRITER_AT_LOGGER_ENABLE /* Whether to enable log printing, the default is printf */
//#define POWERWRITER_AT_HWCRC_ENABLE /* Whether to use hardware CRC32 to improve performance */
//#define POWERWRITER_AT_ENCRYPT_ENABLE /* Whether to enable data encryption */
#define POWERWRITER_AT_ASSERT_ENABLE /* Whether to enable assertion */
// If encryption is enabled, configure the encryption password information yourself
#if defined(POWERWRITER_AT_ENCRYPT_ENABLE)
//#define POWERWRITER_AT_ENCRYPT_HW_AES /* Use hardware AES */
// AES128Bit-CBC Encrypt Key & IV For PowerWriter AT Command
//AES128Bit-CBC Encrypt Key & IV For PowerWriter AT Command
//72C634F2CF2EF3D5F740DA5CEEBE4018
static uint8_t m_at_encrypt_key[] = { 0x72,0xc6,0x34,0xf2,0xcf,0x2e,0xf3,0xd5,0xf7,0x40,0xda,0x5c,0xee,0xbe,0x40,0x18 };
//4BFEB618B2F1F1C92C7E4C376DF0B28A
static uint8_t m_at_encrypt_iv_[] = { 0x4b,0xfe,0xb6,0x18,0xb2,0xf1,0xf1,0xc9,0x2c,0x7e,0x4c,0x37,0x6d,0xf0,0xb2,0x8a };
#endif
/* Multi-threaded lock, empty by default, can be ported according to the current platform */
#ifndef __arm__
//#include <thread>
//#include <mutex>
#define MACRO_THREAD_TYPE // std::mutex m_thread_lock;
#define MACRO_THREAD_LOCK(ch) // std::lock_guard<std::mutex> m_thread_mutex(ch->m_ATConfig.m_thread_lock);
#define MACRO_THREAD_EXIT
#else
#define MACRO_THREAD_TYPE /* Threads locked to your operating system! */
#define MACRO_THREAD_LOCK(ch) /* Threads locked to your operating system! */
#define MACRO_THREAD_EXIT /* Threads locked to your operating system! */
#endif // ! __arm__
#endif
3.0.2:Porting
/**
* @file powerwriter_porting.c
* @brief ICWorkShop Safety License Shield Api Functions
*
* Safety License Shield
* Copyright (c) 2009-2021, ICWorkshop Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "powerwriter_at_porting.h"
#include "3rd/crc/crc.h"
#ifdef __arm__
#include <stdio.h>
#include "stm32f1xx_hal.h"
#else
#include <time.h>
#endif
// Sleep
#ifdef WIN32
#include <windows.h>
#elif defined(__GNUC__)
#include <unistd.h>
#endif
/*
Get Timestamp Interface
*/
uint32_t GetSystemTick()
{
#ifdef __arm__ /* arm complier */
return HAL_GetTick();
#else /* other complier in client */
return (int)clock();
#endif
}
/*
Thread delay Interface
*/
void ATSleep(uint32_t ms)
{
#ifdef WIN32
Sleep(ms);
#elif defined(__GNUC__)
usleep(ms);
#else
uint32_t ts = GetSystemTick();
while (GetSystemTick() - ts < ms)
;
#endif
// add a sleep interface to your platform or operating system ...
//...
}
/* log print printf proxy ?*/
#ifdef POWERWRITER_AT_LOGGER_ENABLE
#ifdef __arm__
extern UART_HandleTypeDef huart1;
extern "C"
{
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 10);
return (ch);
}
}
#endif
#endif
/* crc32 API implementation */
uint32_t GetCrc32(const void *data, size_t size)
{
#ifdef POWERWRITER_AT_HWCRC_ENABLE
/*
CRC Setting Reference
Polynomial : 0x04C11DB7
Initial/Final remainder : 0xffffffff
Input/Output reverse : yes
*/
#error "You must implement the hardware AES128-CBC on the current platform"
#else
return crc32(data, (int)size);
#endif
}
4.0:Routine
Provides a Demo project under Windows, based on the Demo project reference example source code, see below, write AT applications need to implement the part contains:
- Device port management (device scanning, connecting, disconnecting, etc.)
- Data transmitting and receiving (device data transmitting and receiving interface)
- Application process
#include "SerialPortApp.h"
SerialPortApp m_App;
/* Send command frame */
bool powerwriter_data_out(S_ATCmdFrame * pf, int timeout)
{
return m_App.OnSend(pf, pf->m_frameLength);
}
/* AT Event Interface, Command Event, or Error Event*/
void powerwriter_event_out(void * obj, S_ATCmdEvent event)
{
S_ATChannel * ch = (S_ATChannel *)obj;
switch (event)
{
/* received package */
case ATEventCmd:
{
const S_ATCmdFrame * frame;
if (frame = powerwriter_at_received_frame(ch)) {
powerwriter_at_log(LOGD, "AT received cmd: [%04X]\r\n", frame->m_payload.m_cmdType);
}
}
break;
case ATEventError:
{
powerwriter_at_log(LOGE, "AT received error: [%04X]\r\n", powerwriter_at_last_error(ch));
break;
}
default:
break;
}
}
int main() {
/* Printing information */
powerwriter_at_introduction();
return m_App.RunATBenchmark(false, powerwriter_data_out, NULL);
}
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <iostream>
/* PowerWriter AT Commander */
#include "./../../powerwriter_at_core/powerwriter_at_api.h"
/* A serial port */
#include "./CSerialPort/SerialPort.h"
#include "./CSerialPort/SerialPortInfo.h"
#include "NLock.h"
using namespace itas109;
class SerialPortApp : public has_slots<>
{
public:
SerialPortApp() {
m_SerialPort.OnReadReadyCallBack.connect(this, &SerialPortApp::OnReceve);
m_SerialPort.OnDisconnectCallBack.connect(this, &SerialPortApp::DisconnectSerialPort);
}
~SerialPortApp() {
this->DisconnectSerialPort();
}
/* Run AT benchmark */
E_ATCmdError RunATBenchmark(
bool encrypt,
ATCmdStreamOut pfDataOut,
ATCmdEventOut pfEvent)
{
vector<SerialPortInfo> m_SerialPortInfo = CSerialPortInfo::availablePortInfos();
powerwriter_at_log(LOGI, "The serial port is as follows:\r\n");
for (auto s : m_SerialPortInfo) {
powerwriter_at_log(LOGI, "[Port:%s]:%s\r\n", s.portName.c_str(), s.description.c_str());
if (!ConnectSerialPort(s.portName)) {
powerwriter_at_log(LOGE, "Unable to connect to port:%s\r\n", s.portName.c_str());
continue;
}
powerwriter_at_log(LOGI, ">>>benchmark...\r\n");
if (!powerwriter_at_benchmark(&this->m_ATCmdApp, encrypt, pfDataOut, pfEvent)) {
powerwriter_at_log(LOGE, "%s benchmark failed...\r\n", s.portName.c_str());
continue;
}
powerwriter_at_log(LOGD, ">>>All passed...\r\n");
}
return ATErrorNone;
}
/* AT send data */
bool OnSend(void * data, size_t size) {
//object_print(data, size, "Send command");
if (m_SerialPort.isOpened()) {
return m_SerialPort.writeData((char *)data, size) == size;
}
return false;
}
/* Connect Device */
bool ConnectSerialPort(
std::string Device,
int BaudRate = PW_AT_DEFAULT_BAUDRATE,
itas109::Parity Parity = itas109::Parity::ParityNone,
itas109::DataBits DataBits = itas109::DataBits::DataBits8,
itas109::StopBits StopBits = itas109::StopBits::StopOne
){
try
{
DisconnectSerialPort();
m_SerialPort.init(Device.c_str(), BaudRate, Parity, DataBits, StopBits);
m_SerialPort.open();
if (m_SerialPort.isOpened()){
return true;
}
}
catch (const std::exception& e)
{
std::cout << e.what() << endl;
}
return false;
}
/* Close serial port */
void DisconnectSerialPort()
{
try
{
if (m_SerialPort.isOpened())
{
m_SerialPort.close();
}
}
catch (const std::exception& e){
std::cout << e.what() << endl;
}
}
/* public command */
public:
/* private inner */
private:
//recv data
void OnReceve()
{
try
{
vector<char> m_curRead;
int iRet = m_SerialPort.readAllData(m_curRead);
if (iRet > 0) {
//object_print(m_curRead.data(), iRet, "Recived data");
powerwriter_at_datain(&this->m_ATCmdApp, m_curRead.data(), iRet);
}
}
catch (const std::exception & ex)
{
std::cout << std::string("AT commander port exception: ") + ex.what();
}
}
private:
S_ATChannel m_ATCmdApp;
CSerialPort m_SerialPort;
};
Demonstration examples of all AT APIs are shown below:
/**
* @file powerwriter_at_samples.c
* @brief PowerWriter open communication interface
*
* PowerWriter AT
* Copyright (c) 2009-2021, ICWorkshop Limited, All Rights Reserved
* SPDX-License-Identifier: MIT
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include "powerwriter_at_api.h"
// PowerWriter AT test project
unsigned char AT_Project[16516] = { 0x02, 0x2C, 0x85, 0x83, 0x62, 0xBF, 0x30, 0x2C, 0x08, 0xA1, 0x1A, 0x5B,
0xFE, 0x67, 0xDA, 0x80, 0x7B, 0x80, 0x31, 0x4A, 0x1C, 0xC0, 0xA4, 0xE2,
0x46, 0x2D, 0x5C, 0x7D, 0xF0, 0x70, 0x53, 0xB0, 0x1A, 0x34, 0xC1, 0xB2,
0x0B, 0x88, 0xB6, 0x11, 0x57, 0x41, 0x38, 0xAA, 0x3D, 0xE8, 0xAF, 0xF2,
0x66, 0xC0, 0x98, 0x0A, 0x16, 0x10, 0x74, 0xE1, 0xB2, 0x70, 0x74, 0xAE,
0xF7, 0xDC, 0x0D, 0x4C, 0xEF, 0x80, 0xA3, 0xCE, 0xB0, 0x48, 0x68, 0xA2,
0x4E, 0x00, 0xE5, 0x5A, 0xA8, 0xAC, 0x9B, 0x00, 0xA2, 0x80, 0xC3, 0x52,
0x34, 0x74, 0x8F, 0x2D, 0x0A, 0x70, 0x06, 0x54, 0x91, 0xD4, 0x2C, 0x35,
0x2C, 0x03, 0x70, 0xEA, 0xE6, 0xBC, 0x58, 0xCC, 0x16, 0xAE, 0x1C, 0x93,
0x2A, 0x49, 0x80, 0xFF, 0x1A, 0xEA, 0x8C, 0x77, 0xB2, 0x15, 0x00, 0x2A,
0x46, 0xD0, 0x40, 0x22, 0x76, 0xE9, 0x00, 0x87, 0x80, 0xDA, 0x88, 0x66,
0xBA, 0xFF, 0x10, 0x38, 0xAA, 0x3D, 0xE8, 0xAE, 0xF2, 0x66, 0xC0, 0x3A,
0x0A, 0x16, 0x10, 0x09, 0xE0, 0xB2, 0x70, 0x0F, 0xAC, 0xF7, 0xDC, 0x9B,
0x46, 0xEF, 0x80, 0x24, 0xC4, 0xB0, 0x48, 0xE4, 0x98, 0x4E, 0x00, 0x50,
0x50, 0xA8, 0xAC, 0x9D, 0xDC, 0xA2, 0x80, 0x5C, 0x28, 0x34, 0x74, 0x4D,
0xEE, 0x0A, 0x70, 0x99, 0x14, 0x91, 0xD4, 0x35, 0xCE, 0x50, 0x80, 0x84,
0x4E, 0x04, 0xE0, 0x88, 0x9A, 0xBA, 0x38, 0x90, 0xA8, 0x7B, 0x30, 0xF3,
0x8E, 0xAE, 0x40, 0xD8, 0xF4, 0x01, 0x78, 0xE7, 0x32, 0x62, 0x18, 0x83,
0x0A, 0x95, 0xCC, 0xC3, 0x94, 0x82, 0x80, 0x96, 0x82, 0x14, 0x88, 0x95,
0x58, 0xED, 0x60, 0xC7, 0xE4, 0xEF, 0xF4, 0xA7, 0xA2, 0xD8, 0x70, 0x35,
0x3C, 0x45, 0x9C, 0x07, 0xE2, 0xA0, 0x70, 0x57, 0x60, 0x50, 0x18, 0xE1,
0x72, 0x80, 0x60, 0xC0, 0x7C, 0xB6, 0x78, 0xEB, 0x16, 0xF6, 0xC0, 0x69,
0x86, 0x7A, 0x88, 0x83, 0xEC, 0x8C, 0xE0, 0xBD, 0x84, 0xBC, 0x84, 0x90,
0xD4, 0xCE, 0x08, 0xDE, 0x02, 0xC3, 0x64, 0xC9, 0x1E, 0xE2, 0x00, 0xA2,
0x20, 0x96, 0x50, 0xD4, 0x0C, 0x00, 0x80, 0xC8, 0xB0, 0xA3, 0x8C, 0xFA,
0xE4, 0xE8, 0xC0, 0xB4, 0xB8, 0xCB, 0xB4, 0x89, 0x04, 0xE6, 0xD8, 0xA2,
0x8E, 0x81, 0xFC, 0x85, 0xA0, 0xC4, 0x80, 0xF7, 0xD8, 0x28, 0xA0, 0x1B,
0x84, 0x95, 0x80, 0x24, 0xCA, 0x4C, 0x94, 0x9D, 0x7C, 0x44, 0x80, 0xAA,
0xC6, 0x82, 0xFC, 0x77, 0x34, 0xAB, 0x28, 0xA1, 0xE6, 0x1F, 0x04, 0xDE,
0x04, 0xCB, 0x00, 0x01, 0xB8, 0x26, 0x44, 0xF4, 0x82, 0xF4, 0x78, 0x1A,
0xC2, 0x55, 0x24, 0x2C, 0x85, 0x83, 0x5B, 0xA1, 0xEA, 0xE6, 0xBC, 0x58,
0x7B, 0xB3, 0x5A, 0xD0, 0x94, 0x7D, 0x9D, 0xCD, 0x32, 0x4C, 0xEA, 0x8C,
0x77, 0xB2, 0x15, 0x00, 0x2A, 0x46, 0xD0, 0x40, 0x22, 0xC9, 0x3D, 0x4D,
0xBA, 0xB2, 0x21, 0xB8, 0x86, 0x0D, 0x64, 0x82, 0xA1, 0x0F, 0xB0, 0xE8,
0xAE, 0x45, 0xBA, 0x0D, 0x6D, 0x3C, 0x5D, 0x40, 0x40, 0x10, 0x2A, 0xB2,
0x0F, 0xAC, 0xF7, 0xDC, 0x9B, 0x47, 0xF0, 0x83, 0x25, 0xC4, 0xB0, 0x48,
0xE4, 0x98, 0x4E, 0x01, 0x50, 0x50, 0xA8, 0xA8, 0x9C, 0xDD, 0xAA, 0x80,
0x5D, 0x10, 0x37, 0x74, 0x4D, 0xEE, 0x04, 0x70, 0x93, 0x14, 0x91, 0xD4,
0x99, 0xCE, 0xB4, 0x80, 0x87, 0xDE, 0x79, 0xDF, 0xA7, 0xA6, 0xBA, 0x38,
0x90, 0xA8, 0x7B, 0x3C, 0xF3, 0x8E, 0xAE, 0x40, 0xD8, 0xF4, 0x01, 0x78,
0xE7, 0x32, 0x62, 0x18, 0x83, 0x0A, 0x95, 0xCC, 0xC3, 0x94, 0x82, 0x80,
0x96, 0x82, 0x14, 0x88, 0x95, 0x58, 0xED, 0x60, 0xC7, 0xE4, 0xEF, 0xF4,
0xA7, 0xA2, 0xD8, 0x70, 0x35, 0x3C, 0x45, 0x9C, 0x07, 0xE2, 0xA0, 0x70,
0x57, 0x60, 0x50, 0x18, 0xE1, 0x72, 0x80, 0x60, 0xC0, 0x7C, 0xB6, 0x78,
0xEB, 0x16, 0xF6, 0xC0, 0x69, 0x86, 0x7A, 0x88, 0x83, 0xEC, 0x8C, 0xE0,
0xBD, 0x84, 0xBC, 0x84, 0x90, 0xD4, 0xCE, 0x08, 0xDE, 0x02, 0xC3, 0x64,
0xC9, 0x1E, 0xE2, 0x00, 0xA2, 0x20, 0x96, 0x50, 0xD4, 0x0C, 0x00, 0x80,
0xC8, 0xB0, 0xA3, 0x8C, 0xFA, 0xE4, 0xE8, 0xC0, 0xB4, 0xB8, 0xCB, 0xB4,
0x89, 0x04, 0xE6, 0xD8, 0xA2, 0x8E, 0x81, 0xFC, 0x85, 0xA0, 0xC4, 0x80,
0xF7, 0xD8, 0x28, 0xA0, 0x1B, 0x84, 0x95, 0x80, 0x24, 0xCA, 0x4C, 0x94,
0x9D, 0x7C, 0x44, 0x80, 0xAA, 0xC6, 0x82, 0xFC, 0x77, 0x34, 0xAB, 0x28,
0xA1, 0x2C, 0x35, 0x2C, 0x03, 0x70, 0xEA, 0xE6, 0xBC, 0x58, 0xCC, 0x16,
0xAE, 0x1C, 0x3D, 0x0B, 0x48, 0x5F, 0x3E, 0x1A, 0xEA, 0x8C, 0xB6, 0xB2,
0x15, 0x00, 0x2A, 0x46, 0xD0, 0x40, 0x22, 0x76, 0xE9, 0x00, 0x87, 0x80,
0xDA, 0x88, 0x66, 0xBA, 0xFF, 0x10, 0x38, 0xAA, 0x3D, 0xE8, 0xAE, 0xF2,
0x66, 0xC0, 0x3A, 0x0A, 0x16, 0x10, 0x09, 0xE0, 0xB2, 0x70, 0x0F, 0xAC,
0xF7, 0xDC, 0x9B, 0x46, 0xEF, 0x80, 0x24, 0xC4, 0xB0, 0x48, 0xE4, 0x98,
0x4E, 0x00, 0x50, 0x50, 0xA8, 0xAC, 0x9D, 0xDC, 0xA2, 0x80, 0x5C, 0x28,
0x34, 0x74, 0x4D, 0xEE, 0x0A, 0x70, 0x99, 0x14, 0x91, 0xD4, 0x35, 0xCE,
0x50, 0x80, 0x84, 0x4E, 0x04, 0xE0, 0x88, 0x9A, 0xBA, 0x38, 0x90, 0xA8,
0x7B, 0x30, 0xF3, 0x8E, 0xAE, 0x40, 0xD8, 0xF4, 0x01, 0x78, 0xE7, 0x32,
0x62, 0x18, 0x83, 0x0A, 0x95, 0xCC, 0xC3, 0x94, 0x82, 0x80, 0x96, 0x82,
0x14, 0x88, 0x95, 0x58, 0xED, 0x60, 0xC7, 0xE4, 0xEF, 0xF4, 0xA7, 0xA2,
0xD8, 0x70, 0x35, 0x3C, 0x45, 0x9C, 0x07, 0xE2, 0xA0, 0x70, 0x57, 0x60,
0x50, 0x18, 0xE1, 0x72, 0x80, 0x60, 0xC0, 0x7C, 0xB6, 0x78, 0xEB, 0x16,
0xF6, 0xC0, 0x69, 0x86, 0x7A, 0x88, 0x83, 0xEC, 0x8C, 0xE0, 0xBD, 0x84,
0xBC, 0x84, 0x90, 0xD4, 0xCE, 0x08, 0xDE, 0x02, 0xC3, 0x64, 0xC9, 0x1E,
0xE2, 0x00, 0xA2, 0x20, 0x96, 0x50, 0xD4, 0x0C, 0x00, 0x80, 0xC8, 0xB0,
0xA3, 0x8C, 0xFA, 0xE4, 0xE8, 0xC0, 0xB4, 0xB8, 0xCB, 0xB4, 0x89, 0x04,
0xE6, 0xD8, 0xA2, 0x8E, 0x81, 0xFC, 0x85, 0xA0, 0xC4, 0x80, 0xF7, 0xD8,
0x28, 0xA0, 0x1B, 0x84, 0x95, 0x80, 0x24, 0xCA, 0x4C, 0x94, 0x9D, 0x7C,
0x44, 0x80, 0xAA, 0xC6, 0x82, 0xFC, 0x77, 0x34, 0xAB, 0x28, 0xA1, 0xE6,
0x1F, 0x04, 0xDE, 0x04, 0xCB, 0x00, 0x01, 0xB8, 0x26, 0x44, 0xF4, 0x82,
0xF4, 0x78, 0x1A, 0xC2, 0x55, 0x24, 0xFB, 0x30, 0xE1, 0x50, 0x8E, 0xFE,
0xC1, 0x5C, 0xAF, 0x40, 0xB6, 0x68, 0xF0, 0x60, 0x0E, 0x4C, 0xFB, 0x00,
0x39, 0x00, 0x1E, 0xE4, 0x8A, 0x1C, 0x2D, 0xDC, 0x48, 0x28, 0xCF, 0x0C,
0x62, 0x14, 0x72, 0x58, 0x86, 0x70, 0xF2, 0x68, 0xFF, 0x40, 0xF6, 0x2C,
0x01, 0x10, 0x0D, 0xAA, 0x2D, 0x4C, 0x4D, 0x44, 0xDC, 0x80, 0x90, 0xE4,
0xBC, 0x10, 0xCA, 0x00, 0xB0, 0x40, 0xB8, 0x9A, 0x7B, 0x18, 0x26, 0x50,
0x24, 0x40, 0x3C, 0x22, 0x1B, 0x24, 0xFE, 0x5C, 0x17, 0x30, 0x8B, 0x2E,
0xC3, 0x3C, 0xF0, 0x08, 0x7C, 0xA0, 0xAC, 0x70, 0xB8, 0x9C, 0x4E, 0xF2,
0x70, 0xA0, 0x19, 0x68, 0x35, 0xAC, 0x4A, 0x48, 0x28, 0x60, 0x8B, 0x8C,
0x11, 0xBC, 0x06, 0x3E, 0xCD, 0x38, 0x37, 0x72, 0x45, 0x28, 0x86, 0x16,
0x6A, 0x80, 0x5C, 0xC4, 0xF3, 0x90, 0x17, 0x88, 0x29, 0x50, 0x95, 0xB6,
0xA1, 0x54, 0x88, 0x52, 0x6B, 0xE0, 0xB7, 0xE6, 0xB1, 0x7C, 0xE0, 0xFC,
0x79, 0x80, 0x70, 0x04, 0xB7, 0x84, 0x80, 0x12, 0x40, 0xC0, 0x12, 0x9C,
0x4D, 0x44, 0xC2, 0xD0, 0xE7, 0x18, 0x9E, 0x3C, 0xA5, 0xF8, 0x24, 0x2C,
0x23, 0x60, 0x14, 0x7A, 0xF0, 0x18, 0x8A, 0xFA, 0x42, 0x18, 0x91, 0xF6,
0xCF, 0x7C, 0xA6, 0xB8, 0x5E, 0x00, 0x32, 0x28, 0x4C, 0x88, 0x00, 0xE0,
0xB8, 0xC0, 0x91, 0x6A, 0x36, 0x68, 0xB8, 0x88, 0xCC, 0xC0, 0x79, 0x82,
0xBF, 0xF8, 0xD2, 0x56, 0xBE, 0x88, 0xDB, 0x8A, 0xF3, 0x40, 0x4C, 0x78,
0x49, 0x80, 0xB8, 0xD0, 0x1D, 0x18, 0x4F, 0x60, 0x1C, 0x68, 0x84, 0xD6,
0xBB, 0x18, 0x4C, 0xD0, 0x16, 0x50, 0x96, 0x26, 0x01, 0xD8, 0xD1, 0x72,
0xCF, 0x88, 0xC5, 0x86, 0x72, 0x08, 0x61, 0xD4, 0xFF, 0x00, 0x62, 0xA2,
0x2C, 0xAC, 0x1C, 0xDA, 0x86, 0x68, 0x17, 0x1E, 0xAD, 0xE0, 0xC3, 0x86,
0x32, 0x70, 0x0B, 0x06, 0x49, 0x80, 0x42, 0x8A, 0x10, 0x80, 0xFA, 0x22,
0x0D, 0x00, 0xEB, 0x80, 0x62, 0x40, 0xAE, 0x7E, 0x5B, 0xA8, 0x58, 0xA6,
0x61, 0x30, 0x16, 0x36, 0x7E, 0xF0, 0xD2, 0xD6, 0xCE, 0xC0, 0xF5, 0xA0,
0x3A, 0xE8, 0xF3, 0x74, 0x23, 0x78, 0xBF, 0x52, 0xAB, 0x08, 0x94, 0x3C,
0x70, 0x80, 0x94, 0x88, 0x46, 0x00, 0x10, 0x30, 0xC8, 0x88, 0x59, 0x54,
0xAA, 0x20, 0xEC, 0x58, 0x44, 0xD0, 0xE9, 0x5A, 0xF2, 0x48, 0x95, 0x4C,
0x85, 0x88, 0x51, 0xAA, 0x90, 0x90, 0x74, 0xF2, 0x54, 0x00, 0xE8, 0x9E,
0xE2, 0xAC, 0x50, 0x98, 0xB7, 0xA0, 0x77, 0xCA, 0xE6, 0x50, 0x78, 0xCC,
0x15, 0xA0, 0x3B, 0x46, 0xAA, 0x64, 0x17, 0x66, 0xD9, 0x18, 0xC7, 0xBC,
0x8A, 0xAC, 0x3E, 0x7E, 0xA4, 0x00, 0x51, 0xC8, 0x41, 0xB0, 0x8B, 0xBC,
0x3B, 0x78, 0x9B, 0x06, 0x38, 0x34, 0xA1, 0x84, 0x29, 0x30, 0x5B, 0x16,
0x20, 0x88, 0x9B, 0xA0, 0x90, 0xF0, 0x8D, 0x96, 0x80, 0xC4, 0xC0, 0x04,
0x6E, 0xC0, 0xAF, 0x72, 0x8E, 0xE0, 0x65, 0xAA, 0xC2, 0xF0, 0xC7, 0x04,
0xBC, 0x78, 0x89, 0x3C, 0x6C, 0x70, 0x50, 0x5C, 0x46, 0xEC, 0xA6, 0x2E,
0x5F, 0x88, 0xD5, 0xDA, 0x6A, 0x70, 0x1A, 0xE0, 0xCE, 0x00, 0xC4, 0x04,
0x00, 0x40, 0xA8, 0xD0, 0x7F, 0x48, 0x72, 0xEC, 0x88, 0x50, 0xE4, 0xC8,
0x27, 0x50, 0xF5, 0xEC, 0xBE, 0xD4, 0xDA, 0x82, 0x35, 0x18, 0x61, 0xE0,
0xD4, 0x70, 0x9B, 0x28, 0x48, 0x00, 0x1F, 0xAC, 0x09, 0x40, 0x14, 0x06,
0xBC, 0x18, 0xD9, 0xB4, 0x54, 0x20, 0x82, 0xDA, 0xAA, 0x50, 0x8B, 0x7C,
0xF7, 0xBC, 0xFD, 0x2A, 0x6B, 0x08, 0x06, 0x0C, 0xF7, 0xA8, 0xFD, 0x48,
0x9E, 0x00, 0x64, 0xD6, 0x44, 0x3C, 0xF2, 0x0E, 0xD9, 0x18, 0x5F, 0x90,
0xA5, 0xBC, 0xD6, 0xE2, 0x55, 0xB0, 0xE3, 0xC0, 0xCE, 0xAC, 0x30, 0xA0,
0xE6, 0xF8, 0x1F, 0x00, 0x9D, 0x00, 0xA6, 0x9C, 0xD2, 0xE0, 0x89, 0x74,
0x68, 0x24, 0xF3, 0x54, 0xCA, 0x58, 0x8A, 0x88, 0x1E, 0x3C, 0xAA, 0x18,
0xEB, 0x00, 0x7E, 0xA4, 0xE5, 0xD8, 0x39, 0x46, 0x51, 0x58, 0x09, 0xCC,
0x4C, 0xF8, 0x50, 0x1C, 0x6C, 0x00, 0xC2, 0x00, 0x70, 0x20, 0xD8, 0x76,
0x37, 0x90, 0x2E, 0xF0, 0xB4, 0x70, 0x4C, 0x7E, 0xB7, 0x90, 0xE6, 0x34,
0x13, 0x68, 0x7F, 0xE2, 0xDF, 0x18, 0x30, 0x18, 0x6C, 0x44, 0xFC, 0x90,
0x18, 0xA0, 0x76, 0x66, 0x30, 0x90, 0x55, 0xD8, 0xB9, 0xE8, 0x82, 0x58,
0xC8, 0x38, 0x9F, 0xB4, 0x65, 0xD0, 0x4E, 0x8A, 0x61, 0x94, 0x7B, 0xBE,
0x49, 0x50, 0x8E, 0x42, 0x12, 0x7C, 0xEC, 0x3C, 0xAF, 0x00, 0x6B, 0xD8,
0xED, 0x28, 0xE1, 0x3A, 0x95, 0xB8, 0xE8, 0x16, 0xD7, 0x28, 0x9B, 0x7A,
0x05, 0xB0, 0x60, 0x14, 0xBD, 0xC0, 0xB0, 0xDC, 0x63, 0xA8, 0x80, 0x76,
0x40, 0x48, 0xCA, 0xE4, 0x11, 0xA0, 0x5A, 0xF0, 0xE3, 0x3C, 0xE6, 0xA4,
0xE9, 0x10, 0x54, 0xC4, 0xEF, 0x18, 0xC4, 0x66, 0xB0, 0xA0, 0x02, 0xDE,
0x0A, 0x44, 0x2D, 0x1A, 0xDB, 0x38, 0x2E, 0x28, 0xD6, 0xC0, 0x6A, 0xD8,
0x3C, 0x80, 0x00, 0xA0, 0x98, 0xE0, 0x6D, 0x26, 0xAE, 0x70, 0x58, 0x18,
0xFC, 0xD0, 0xD5, 0x1E, 0x2B, 0xE0, 0xAA, 0x52, 0xF6, 0x7C, 0x8F, 0xA6,
0xCF, 0x80, 0x5C, 0x68, 0xED, 0xD0, 0xD8, 0x30, 0x21, 0x40, 0xC3, 0x20,
0x0C, 0xA4, 0xF4, 0x5A, 0xF7, 0x50, 0x5C, 0x70, 0xEE, 0x64, 0xBE, 0x7A,
0x15, 0x20, 0x1D, 0x06, 0x2B, 0xCC, 0x11, 0x8A, 0x9A, 0x10, 0x8D, 0x7C,
0xFB, 0x90, 0xDA, 0x5E, 0x9C, 0x00, 0x6C, 0x9E, 0x5E, 0xB4, 0x9B, 0x12,
0x11, 0x40, 0x87, 0xF2, 0x7A, 0x54, 0x2C, 0x35, 0x2C, 0x03, 0x70, 0xEA,
0xE6, 0xBC, 0x58, 0xCC, 0x16, 0xAE, 0x1C, 0x3D, 0x0B, 0x48, 0x5F, 0x3E,
0x1A, 0xEA, 0x8C, 0xB6, 0xB2, 0x15, 0x00, 0x2A, 0x46, 0xD0, 0x40, 0x22,
0x76, 0xE9, 0x00, 0x87, 0x80, 0xDA, 0x88, 0x66, 0xBA, 0xFF, 0x10, 0x38,
0xAA, 0x3D, 0xE8, 0xAE, 0xF2, 0x66, 0xC0, 0x3A, 0x0A, 0x16, 0x10, 0x09,
0xE0, 0xB2, 0x70, 0x0F, 0xAC, 0xF7, 0xDC, 0x9B, 0x46, 0xEF, 0x80, 0x24,
0xC4, 0xB0, 0x48, 0xE4, 0x98, 0x4E, 0x00, 0x50, 0x50, 0xA8, 0xAC, 0x9D,
0xDC, 0xA2, 0x80, 0x5C, 0x28, 0x34, 0x74, 0x4D, 0xEE, 0x0A, 0x70, 0x99,
0x14, 0x91, 0xD4, 0x35, 0xCE, 0x50, 0x80, 0x84, 0x4E, 0x04, 0xE0, 0x88,
0x9A, 0xBA, 0x38, 0x90, 0xA8, 0x7B, 0x30, 0xF3, 0x8E, 0xAE, 0x40, 0xD8,
0xF4, 0x01, 0x78, 0xE7, 0x32, 0x62, 0x18, 0x83, 0x0A, 0x95, 0xCC, 0xC3,
0x94, 0x82, 0x80, 0x96, 0x82, 0x14, 0x88, 0x95, 0x58, 0xED, 0x60, 0xC7,
0xE4, 0xEF, 0xF4, 0xA7, 0xA2, 0xD8, 0x70, 0x35, 0x3C, 0x45, 0x9C, 0x07,
0xE2, 0xA0, 0x70, 0x57, 0x60, 0x50, 0x18, 0xE1, 0x72, 0x80, 0x60, 0xC0,
0x7C, 0xB6, 0x78, 0xEB, 0x16, 0xF6, 0xC0, 0x69, 0x86, 0x7A, 0x88, 0x83,
0xEC, 0x8C, 0xE0, 0xBD, 0x84, 0xBC, 0x84, 0x90, 0xD4, 0xCE, 0x08, 0xDE,
0x02, 0xC3, 0x64, 0xC9, 0x1E, 0xE2, 0x00, 0xA2, 0x20, 0x96, 0x50, 0xD4,
0x0C, 0x00, 0x80, 0xC8, 0xB0, 0xA3, 0x8C, 0xFA, 0xE4, 0xE8, 0xC0, 0xB4,
0xB8, 0xCB, 0xB4, 0x89, 0x04, 0xE6, 0xD8, 0xA2, 0x8E, 0x81, 0xFC, 0x85,
0xA0, 0xC4, 0x80, 0xF7, 0xD8, 0x28, 0xA0, 0x1B, 0x84, 0x95, 0x80, 0x24,
0xCA, 0x4C, 0x94, 0x9D, 0x7C, 0x44, 0x80, 0xAA, 0xC6, 0x82, 0xFC, 0x77,
0x34, 0xAB, 0x28, 0xA1, 0xE6, 0x1F, 0x04, 0xDE, 0x04, 0xCB, 0x00, 0x01,
0xB8, 0x26, 0x44, 0xF4, 0x82, 0xF4, 0x78, 0x1A, 0xC2, 0x55, 0x24, 0xFB,
0x30, 0xE1, 0x50, 0x8E, 0xFE, 0xC1, 0x5C, 0xAF, 0x40, 0xB6, 0x68, 0xF0,
0x60, 0x0E, 0x4C, 0xFB, 0x00, 0x39, 0x00, 0x1E, 0xE4, 0x8A, 0x1C, 0x2D,
0xDC, 0x48, 0x28, 0xCF, 0x0C, 0x62, 0x14, 0x72, 0x58, 0x86, 0x70, 0xF2,
0x68, 0xFF, 0x40, 0xF6, 0x2C, 0x01, 0x10, 0x0D, 0xAA, 0x2D, 0x4C, 0x4D,
0x44, 0xDC, 0x80, 0x90, 0xE4, 0xBC, 0x10, 0xCA, 0x00, 0xB0, 0x40, 0xB8,
0x9A, 0x7B, 0x18, 0x26, 0x50, 0x24, 0x40, 0x3C, 0x22, 0x1B, 0x24, 0xFE,
0x5C, 0x17, 0x30, 0x8B, 0x2E, 0xC3, 0x3C, 0xF0, 0x08, 0x7C, 0xA0, 0xAC,
0x70, 0xB8, 0x9C, 0x4E, 0xF2, 0x70, 0xA0, 0x19, 0x68, 0x35, 0xAC, 0x4A,
0x48, 0x28, 0x60, 0x8B, 0x8C, 0x11, 0xBC, 0x06, 0x3E, 0xCD, 0x38, 0x37,
0x72, 0x45, 0x28, 0x86, 0x16, 0x6A, 0x80, 0x5C, 0xC4, 0xF3, 0x90, 0x17,
0x88, 0x29, 0x50, 0x95, 0xB6, 0xA1, 0x54, 0x88, 0x52, 0x6B, 0xE0, 0xB7,
0xE6, 0xB1, 0x7C, 0xE0, 0xFC, 0x79, 0x80, 0x70, 0x04, 0xB7, 0x84, 0x80,
0x12, 0x40, 0xC0, 0x12, 0x9C, 0x4D, 0x44, 0xC2, 0xD0, 0xE7, 0x18, 0x9E,
0x3C, 0xA5, 0xF8, 0x24, 0x2C, 0x23, 0x60, 0x14, 0x7A, 0xF0, 0x18, 0x8A,
0xFA, 0x42, 0x18, 0x91, 0xF6, 0xCF, 0x7C, 0xA6, 0xB8, 0x5E, 0x00, 0x32,
0x28, 0x4C, 0x88, 0x00, 0xE0, 0xB8, 0xC0, 0x91, 0x6A, 0x36, 0x68, 0xB8,
0x88, 0xCC, 0xC0, 0x79, 0x82, 0xBF, 0xF8, 0xD2, 0x56, 0xBE, 0x88, 0xDB,
0x8A, 0xF3, 0x40, 0x4C, 0x78, 0x49, 0x80, 0xB8, 0xD0, 0x1D, 0x18, 0x4F,
0x60, 0x1C, 0x68, 0x84, 0xD6, 0xBB, 0x18, 0x4C, 0xD0, 0x16, 0x50, 0x96,
0x26, 0x01, 0xD8, 0xD1, 0x72, 0xCF, 0x88, 0xC5, 0x86, 0x72, 0x08, 0x61,
0xD4, 0xFF, 0x00, 0x62, 0xA2, 0x2C, 0xAC, 0x1C, 0xDA, 0x86, 0x68, 0x17,
0x1E, 0xAD, 0xE0, 0xC3, 0x86, 0x32, 0x70, 0x0B, 0x06, 0x49, 0x80, 0x42,
0x8A, 0x10, 0x80, 0xFA, 0x22, 0x0D, 0x00, 0xEB, 0x80, 0x62, 0x40, 0xAE,
0x7E, 0x5B, 0xA8, 0x58, 0xA6, 0x61, 0x30, 0x16, 0x36, 0x7E, 0xF0, 0xD2,
0xD6, 0xCE, 0xC0, 0xF5, 0xA0, 0x3A, 0xE8, 0xF3, 0x74, 0x23, 0x78, 0xBF,
0x52, 0xAB, 0x08, 0x94, 0x3C, 0x70, 0x80, 0x94, 0x88, 0x46, 0x00, 0x10,
0x30, 0xC8, 0x88, 0x59, 0x54, 0xAA, 0x20, 0xEC, 0x58, 0x44, 0xD0, 0xE9,
0x5A, 0xF2, 0x48, 0x95, 0x4C, 0x85, 0x88, 0x51, 0xAA, 0x90, 0x90, 0x74,
0xF2, 0x54, 0x00, 0xE8, 0x9E, 0xE2, 0xAC, 0x50, 0x98, 0xB7, 0xA0, 0x77,
0xCA, 0xE6, 0x50, 0x78, 0xCC, 0x15, 0xA0, 0x3B, 0x46, 0xAA, 0x64, 0x17,
0x66, 0xD9, 0x18, 0xC7, 0xBC, 0x8A, 0xAC, 0x3E, 0x7E, 0xA4, 0x00, 0x51,
0xC8, 0x41, 0xB0, 0x8B, 0xBC, 0x3B, 0x78, 0x9B, 0x06, 0x38, 0x34, 0xA1,
0x84, 0x29, 0x30, 0x5B, 0x16, 0x20, 0x88, 0x9B, 0xA0, 0x90, 0xF0, 0x8D,
0x96, 0x80, 0xC4, 0xC0, 0x04, 0x6E, 0xC0, 0xAF, 0x72, 0x8E, 0xE0, 0x65,
0xAA, 0xC2, 0xF0, 0xC7, 0x04, 0xBC, 0x78, 0x89, 0x3C, 0x6C, 0x70, 0x50,
0x5C, 0x46, 0xEC, 0xA6, 0x2E, 0x5F, 0x88, 0xD5, 0xDA, 0x6A, 0x70, 0x1A,
0xE0, 0xCE, 0x00, 0xC4, 0x04, 0x00, 0x40, 0xA8, 0xD0, 0x7F, 0x48, 0x72,
0xEC, 0x88, 0x50, 0xE4, 0xC8, 0x27, 0x50, 0xF5, 0xEC, 0xBE, 0xD4, 0xDA,
0x82, 0x35, 0x18, 0x61, 0xE0, 0xD4, 0x70, 0x9B, 0x28, 0x48, 0x00, 0x1F,
0xAC, 0x09, 0x40, 0x14, 0x06, 0xBC, 0x18, 0xD9, 0xB4, 0x54, 0x20, 0x82,
0xDA, 0xAA, 0x50, 0x8B, 0x7C, 0xF7, 0xBC, 0xFD, 0x2A, 0x6B, 0x08, 0x06,
0x0C, 0xF7, 0xA8, 0xFD, 0x48, 0x9E, 0x00, 0x64, 0xD6, 0x44, 0x3C, 0xF2,
0x0E, 0xD9, 0x18, 0x5F, 0x90, 0xA5, 0xBC, 0xD6, 0xE2, 0x55, 0xB0, 0xE3,
0xC0, 0xCE, 0xAC, 0x30, 0xA0, 0xE6, 0xF8, 0x1F, 0x00, 0x9D, 0x00, 0xA6,
0x9C, 0xD2, 0xE0, 0x89, 0x74, 0x68, 0x24, 0xF3, 0x54, 0xCA, 0x58, 0x8A,
0x88, 0x1E, 0x3C, 0xAA, 0x18, 0xEB, 0x00, 0x7E, 0xA4, 0xE5, 0xD8, 0x39,
0x46, 0x51, 0x58, 0x09, 0xCC, 0x4C, 0xF8, 0x50, 0x1C, 0x6C, 0x00, 0xC2,
0x00, 0x70, 0x20, 0xD8, 0x76, 0x37, 0x90, 0x2E, 0xF0, 0xB4, 0x70, 0x4C,
0x7E, 0xB7, 0x90, 0xE6, 0x34, 0x13, 0x68, 0x7F, 0xE2, 0xDF, 0x18, 0x30,
0x18, 0x6C, 0x44, 0xFC, 0x90, 0x18, 0xA0, 0x76, 0x66, 0x30, 0x90, 0x55,
0xD8, 0xB9, 0xE8, 0x82, 0x58, 0xC8, 0x38, 0x9F, 0xB4, 0x65, 0xD0, 0x4E,
0x8A, 0x61, 0x94, 0x7B, 0xBE, 0x49, 0x50, 0x8E, 0x42, 0x12, 0x7C, 0xEC,
0x3C, 0xAF, 0x00, 0x6B, 0xD8, 0xED, 0x28, 0xE1, 0x3A, 0x95, 0xB8, 0xE8,
0x16, 0xD7, 0x28, 0x9B, 0x7A, 0x05, 0xB0, 0x60, 0x14, 0xBD, 0xC0, 0xB0,
0xDC, 0x63, 0xA8, 0x80, 0x76, 0x40, 0x48, 0xCA, 0xE4, 0x11, 0xA0, 0x5A,
0xF0, 0xE3, 0x3C, 0xE6, 0xA4, 0xE9, 0x10, 0x54, 0xC4, 0xEF, 0x18, 0xC4,
0x66, 0xB0, 0xA0, 0x02, 0xDE, 0x0A, 0x44, 0x2D, 0x1A, 0xDB, 0x38, 0x2E,
0x28, 0xD6, 0xC0, 0x6A, 0xD8, 0x3C, 0x80, 0x00, 0xA0, 0x98, 0xE0, 0x6D,
0x26, 0xAE, 0x70, 0x58, 0x18, 0xFC, 0xD0, 0xD5, 0x1E, 0x2B, 0xE0, 0xAA,
0x52, 0xF6, 0x7C, 0x8F, 0xA6, 0xCF, 0x80, 0x5C, 0x68, 0xED, 0xD0, 0xD8,
0x30, 0x21, 0x40, 0xC3, 0x20, 0x0C, 0xA4, 0xF4, 0x5A, 0xF7, 0x50, 0x5C,
0x70, 0xEE, 0x64, 0xBE, 0x7A, 0x15, 0x20, 0x1D, 0x06, 0x2B, 0xCC, 0x11,
0x8A, 0x9A, 0x10, 0x8D, 0x7C, 0xFB, 0x90, 0xDA, 0x5E, 0x9C, 0x00, 0x6C,
0x9E, 0x5E, 0xB4, 0x9B, 0x12, 0x11, 0x40, 0x87, 0xF2, 0x7A, 0x54, 0x2C,
0x36, 0x2C, 0x03, 0x70, 0x2C, 0xCA, 0x36, 0x03, 0x70, 0x53, 0x00, 0xBC,
0x58, 0xCC, 0x16, 0xAE, 0x24, 0xFB, 0x44, 0x49, 0x80, 0x2C, 0xDD, 0x30,
0x03, 0x90, 0xBB, 0xE6, 0xBC, 0x60, 0xCB, 0x19, 0xAE, 0x24, 0x90, 0x2D,
0x49, 0x88, 0xFF, 0x1A, 0xEA, 0x8C, 0x77, 0xB2, 0x15, 0x00, 0x2A, 0x46,
0xD0, 0x40, 0x22, 0x76, 0xE9, 0x00, 0x87, 0x80, 0xDA, 0x88, 0x66, 0xBA,
0xFF, 0x10, 0x38, 0xAA, 0x3D, 0xE8, 0x71, 0x01, 0x66, 0xC8, 0x3A, 0x0A,
0x16, 0x10, 0x09, 0xE0, 0xB2, 0x70, 0xD0, 0xBB, 0xF7, 0xE4, 0x60, 0x55,
0xEF, 0x88, 0x07, 0xC4, 0xB0, 0x50, 0xE4, 0x98, 0x4E, 0x00, 0x33, 0x50,
0xA8, 0xB4, 0x80, 0xDC, 0xA2, 0x88, 0x3F, 0x28, 0x34, 0x7C, 0x30, 0xEE,
0x0A, 0x78, 0x7C, 0x14, 0x91, 0xDC, 0x18, 0xCE, 0x50, 0x88, 0x84, 0x4E,
0x04, 0xE0, 0x6B, 0x9A, 0xBA, 0x40, 0x73, 0xA8, 0x7B, 0x38, 0xD6, 0x8E,
0xAE, 0x48, 0xBB, 0xF4, 0x01, 0x80, 0xCA, 0x32, 0x62, 0x20, 0x66, 0x0A,
0x95, 0xD4, 0xC3, 0x94, 0x82, 0x80, 0x79, 0x82, 0x14, 0x90, 0x78, 0x58,
0xED, 0x68, 0xAA, 0xE4, 0xEF, 0xFC, 0x8A, 0xA2, 0xD8, 0x78, 0x18, 0x3C,
0x45, 0xA4, 0xEA, 0xE2, 0xA0, 0x78, 0x3A, 0x60, 0x50, 0x20, 0xC4, 0x72,
0x80, 0x68, 0xA3, 0x7C, 0xB6, 0x80, 0xCE, 0x16, 0xF6, 0xC8, 0x4C, 0x86,
0x7A, 0x90, 0x66, 0xEC, 0x8C, 0xE8, 0xA0, 0x84, 0xBC, 0x8C, 0x73, 0xD4,
0xCE, 0x10, 0xE2, 0x4A, 0x48, 0xAA, 0xC9, 0x0E, 0x50, 0xF8, 0xA2, 0x68,
0x96, 0x97, 0xE9, 0x25, 0x00, 0x88, 0x88, 0xF6, 0x63, 0xD2, 0xA2, 0xE8,
0xE8, 0xE0, 0xB8, 0x00, 0x4B, 0xFB, 0x8D, 0x4C, 0xE6, 0x1F, 0xA0, 0x75,
0x7F, 0xE3, 0x83, 0x87, 0xC2, 0x67, 0xF5, 0xBF, 0x26, 0x87, 0x42, 0x94,
0x95, 0x88, 0xDD, 0xCA, 0x4C, 0x9C, 0xCD, 0x31, 0x4F, 0xC6, 0xAB, 0x0C,
0x82, 0x1C, 0x97, 0x56, 0xAC, 0x4C, 0xAA, 0xC6, 0x2C, 0x4A, 0xB3, 0x44,
0x68, 0x42, 0x06, 0x8B, 0x43, 0x8A, 0x89, 0xC2, 0x3D, 0x93, 0x3F, 0x08,
0xEA, 0x64, 0x3B, 0x49, 0xF6, 0x96, 0xE0, 0x1C, 0xC1, 0x89, 0xA0, 0x1C,
0xE6, 0x25, 0xC2, 0x12, 0x0F, 0x2C, 0xFD, 0x70, 0x79, 0x1C, 0x67, 0x02,
0x85, 0xEE, 0x9D, 0x23, 0x48, 0x4A, 0xC5, 0xF3, 0x72, 0xC9, 0x85, 0x9E,
0x90, 0xB6, 0xF6, 0xAE, 0x18, 0x86, 0xF5, 0x23, 0xF1, 0x0F, 0x2D, 0xF0,
0x3D, 0x09, 0x3D, 0xF9, 0xFB, 0x34, 0x96, 0x2A, 0xBC, 0x30, 0x4C, 0xB0,
0xB5, 0x86, 0xF8, 0xBE, 0x7C, 0xA9, 0x26, 0xE0, 0x3F, 0x20, 0x3D, 0xBB,
0x3D, 0x6A, 0x0D, 0xA2, 0x47, 0x76, 0x8B, 0x1E, 0x05, 0x34, 0xF4, 0xA2,
0x81, 0x3B, 0x2C, 0x8A, 0x51, 0xDD, 0x5E, 0xC5, 0x80, 0xE6, 0x32, 0xAE,
0x57, 0xF2, 0x4A, 0x38, 0x50, 0x58, 0xC1, 0xA6, 0xA0, 0xFD, 0x07, 0xD5,
0xEF, 0x7E, 0x38, 0x92, 0x45, 0x49, 0x86, 0xB5, 0x6A, 0x70, 0x7B, 0xBC,
0x2B, 0xA8, 0x64, 0xC9, 0x29, 0xE0, 0xB5, 0xFC, 0x05, 0x72, 0x88, 0x7A,
0x4A, 0xBC, 0xB8, 0x81, 0xB1, 0x14, 0x09, 0x42, 0xAB, 0xC6, 0x77, 0xB4,
0xA7, 0x41, 0x86, 0x5E, 0x41, 0xE5, 0x18, 0xEA, 0x52, 0x24, 0xA5, 0x38,
0xEE, 0xE4, 0xC9, 0x7F, 0xB1, 0x34, 0xBC, 0x73, 0x33, 0x94, 0xC8, 0xBC,
0xE7, 0xEB, 0x89, 0xF1, 0xC6, 0x17, 0xC5, 0x10, 0xCF, 0x84, 0xFA, 0xD2,
0x5E, 0x08, 0x42, 0xDD, 0x6C, 0xB2, 0x04, 0xBB, 0xB9, 0x06, 0xB1, 0xA4,
0xC7, 0xA8, 0xB8, 0xA8, 0xDC, 0x7D, 0x0A, 0xC2, 0xDF, 0x1B, 0x6E, 0x70,
0xC1, 0xCE, 0xBE, 0xCA, 0x0C, 0x83, 0xDC, 0xB8, 0x59, 0x3D, 0xC8, 0x85,
0x3D, 0x42, 0x53, 0x3B, 0x24, 0xAE, 0xA4, 0x10, 0x8B, 0x58, 0x4C, 0xF1,
0x26, 0x0D, 0xA1, 0x6C, 0xD4, 0x18, 0xA1, 0xB2, 0xEF, 0xAC, 0x67, 0xA0,
0x03, 0x48, 0x69, 0x17, 0x18, 0x46, 0x72, 0x5F, 0x9E, 0x62, 0x1A, 0xC1,
0x86, 0x68, 0x07, 0xD3, 0xAD, 0x03, 0xC6, 0xAA, 0xCC, 0x50, 0x35, 0x4C,
0x4A, 0xA5, 0xDF, 0xCA, 0x3A, 0xC0, 0x78, 0xF2, 0x1B, 0x79, 0xA1, 0x87,
0x18, 0x4F, 0xAF, 0xAC, 0x5C, 0x78, 0x5A, 0xD4, 0x77, 0x01, 0x9C, 0x9E,
0xA5, 0x36, 0x86, 0x1C, 0x2C, 0xC0, 0xAB, 0xE6, 0xF1, 0x28, 0x59, 0xBA,
0xE1, 0xBB, 0x73, 0x98, 0x7A, 0x70, 0x0A, 0x82, 0x27, 0xC0, 0xFA, 0xCE,
0x7D, 0x43, 0x97, 0x90, 0x0E, 0xF0, 0x07, 0x97, 0xB7, 0x99, 0xD9, 0x5E,
0x31, 0xDF, 0x86, 0x9A, 0x27, 0x8B, 0xDA, 0xAC, 0x92, 0x01, 0x3E, 0xED,
0x3D, 0x97, 0x7C, 0xC2, 0x19, 0x68, 0x47, 0x9E, 0x08, 0xF2, 0x0E, 0xD8,
0x6C, 0xE3, 0x05, 0x32, 0xA4, 0x90, 0xA6, 0x0F, 0xDB, 0x00, 0x48, 0xBF,
0x57, 0x6B, 0xC4, 0x75, 0xDB, 0x45, 0xD5, 0x8D, 0x67, 0xB4, 0xEB, 0x7E,
0xD1, 0x18, 0xFD, 0x0E, 0x6E, 0x1A, 0xE9, 0xC3, 0x31, 0x86, 0xAA, 0x2D,
0xEF, 0x74, 0x5E, 0xC7, 0x38, 0x99, 0x12, 0x56, 0x4F, 0xCB, 0x00, 0xE6,
0xBF, 0x52, 0x92, 0xFE, 0xDF, 0xC4, 0xE6, 0x4A, 0x2C, 0x00, 0x64, 0xB5,
0x9C, 0x59, 0x1B, 0xB1, 0x78, 0xFF, 0x85, 0x44, 0xEA, 0xBB, 0x8F, 0x9C,
0xB9, 0xD8, 0xFD, 0x5F, 0xF3, 0xFB, 0xEC, 0xFE, 0xFD, 0x90, 0xFB, 0x27,
0x20, 0x70, 0x8F, 0xF9, 0x7A, 0x46, 0xF1, 0x72, 0x9E, 0x47, 0x9E, 0xDE,
0x8E, 0x6F, 0x29, 0x2C, 0x45, 0x93, 0xE9, 0xEF, 0x66, 0x57, 0xAD, 0x2E,
0xBF, 0xA5, 0xDA, 0xA9, 0x44, 0xF8, 0x80, 0x2F, 0x8C, 0xB2, 0x9C, 0xF9,
0x49, 0x27, 0x29, 0x8C, 0x27, 0x8F, 0xCC, 0x48, 0xBD, 0xE9, 0xDB, 0xDB,
0x59, 0x00, 0x9E, 0x29, 0x62, 0x92, 0x8C, 0x4D, 0xFA, 0xE3, 0xFD, 0x0A,
0x70, 0x2F, 0xBD, 0x4C, 0x26, 0xEB, 0x12, 0x95, 0x04, 0x46, 0x9B, 0x3C,
0x71, 0xA4, 0x40, 0x76, 0x6E, 0x5B, 0x55, 0x92, 0xA5, 0x91, 0xEB, 0x25,
0x66, 0xFF, 0x20, 0x20, 0x4B, 0x14, 0xC5, 0xE3, 0xE6, 0xD8, 0x33, 0xE0,
0xEB, 0x68, 0x5C, 0x9E, 0xD2, 0xB5, 0x9E, 0xB7, 0xE5, 0x84, 0xFE, 0xA1,
0x4A, 0x8D, 0xF8, 0xF0, 0x6D, 0xA4, 0x40, 0x5B, 0xAA, 0x03, 0x7E, 0x79,
0xFB, 0x1B, 0xA7, 0xA6, 0x7F, 0xC0, 0x58, 0x34, 0xE2, 0x3B, 0x4F, 0x1F,
0x6C, 0xD5, 0xD8, 0x43, 0x9E, 0x80, 0x33, 0x92, 0x41, 0xF8, 0x43, 0x36,
0x8E, 0xB0, 0x4C, 0x4E, 0x16, 0x77, 0xD6, 0xF1, 0x13, 0x68, 0x7F, 0xFA,
0xE1, 0x58, 0x30, 0x1C, 0x6C, 0x94, 0xFC, 0x98, 0x18, 0xF0, 0x76, 0x72,
0x30, 0xE0, 0x55, 0x02, 0xBA, 0xB8, 0x03, 0xB9, 0x38, 0x7F, 0x20, 0x16,
0xD5, 0x17, 0x4F, 0xD2, 0xE1, 0xFC, 0xEB, 0x05, 0x49, 0x50, 0x8E, 0x42,
0x12, 0x9C, 0xEE, 0x84, 0x30, 0x68, 0x6D, 0x50, 0x76, 0x40, 0x62, 0x9A,
0x05, 0xFF, 0xE8, 0x16, 0xD7, 0x48, 0xAB, 0x2F, 0x0D, 0xF8, 0x60, 0x38,
0xBE, 0x28, 0x32, 0xF1, 0x74, 0xEB, 0x81, 0xD6, 0x43, 0x68, 0xCA, 0xD4,
0x1B, 0x98, 0x5A, 0x18, 0xE4, 0x0C, 0xE7, 0xC8, 0xEA, 0xF0, 0x54, 0xB4,
0x53, 0x10, 0xE4, 0xAC, 0xC0, 0x5D, 0x02, 0xFE, 0x0C, 0x84, 0x9D, 0xCF,
0xEA, 0x86, 0x2E, 0x4C, 0x07, 0x38, 0x6F, 0x1E, 0x3C, 0xA9, 0x15, 0x70,
0x15, 0x00, 0x2D, 0x26, 0xAD, 0x67, 0xE9, 0x16, 0xFD, 0x16, 0xDF, 0x66,
0x2B, 0x48, 0xA9, 0x49, 0x82, 0x7A, 0x8F, 0x96, 0x0D, 0x7C, 0x5C, 0x90,
0xF5, 0xA1, 0xDC, 0x5D, 0x27, 0x12, 0xC3, 0x42, 0x35, 0xEA, 0x34, 0x78,
0xF7, 0x40, 0xBB, 0x68, 0x63, 0xC4, 0xBE, 0x5A, 0x16, 0x44, 0x3D, 0x4C,
0x9B, 0x89, 0x11, 0x8A, 0x9A, 0x30, 0x99, 0x7C, 0xFB, 0xB0, 0xD8, 0x45,
0x9A, 0xE7, 0x6C, 0x9E, 0x5E, 0xB4, 0x9B, 0x12, 0x11, 0x40, 0x87, 0xF2,
0x7A, 0x54, 0x9F, 0x5A, 0x7D, 0x00, 0x5A, 0xCE, 0x50, 0xC0, 0xD2, 0xCE,
0x31, 0x00, 0x4F, 0x80, 0xEA, 0xF8, 0xF6, 0x42, 0xB7, 0x40, 0x78, 0xA2,
0x85, 0x78, 0x7E, 0x7A, 0x96, 0x20, 0x6A, 0xA2, 0x86, 0x70, 0xE1, 0x60,
0xC2, 0x60, 0xD7, 0x3C, 0x4F, 0x14, 0xE3, 0x5E, 0x67, 0x90, 0x04, 0xB4,
0x30, 0xB8, 0x44, 0x78, 0x3E, 0x00, 0xD0, 0x10, 0xE8, 0x64, 0x15, 0xCC,
0xB2, 0xC0, 0x7C, 0x88, 0x54, 0x2C, 0x85, 0xC6, 0xDA, 0x20, 0x91, 0x84,
0x79, 0x3C, 0x6D, 0x86, 0xD0, 0xA0, 0x64, 0x96, 0xA4, 0x20, 0x48, 0xA2,
0x0A, 0x20, 0x10, 0x88, 0xF3, 0x10, 0xFB, 0x06, 0x1E, 0x60, 0x18, 0xA4,
0x29, 0xC8, 0x8F, 0x5A, 0xF2, 0xB0, 0xAB, 0xC2, 0x1D, 0x64, 0xD3, 0x99,
0x9D, 0x20, 0xE7, 0xE2, 0x35, 0x9A, 0x1E, 0x7B, 0x96, 0x60, 0x4F, 0xFC,
0x97, 0x3C, 0x8F, 0xFA, 0x9F, 0x40, 0x4D, 0x04, 0xCF, 0x2F, 0xB0, 0x4E,
0xAA, 0xE3, 0xA1, 0x43, 0x90, 0x33, 0x41, 0xFA, 0x80, 0xB8, 0xC3, 0xAC,
0x66, 0x0A, 0x73, 0xBE, 0xF6, 0xFB, 0x69, 0x8B, 0x0A, 0x58, 0x4B, 0x2C,
0xEE, 0x50, 0x65, 0xA9, 0x1C, 0x4C, 0xC9, 0xE3, 0xCE, 0x8D, 0x7E, 0x0F,
0x0A, 0xF8, 0x02, 0xFE, 0xF5, 0x02, 0xE4, 0xA2, 0x97, 0xF3, 0xB5, 0x3F,
0x21, 0x60, 0x49, 0x0F, 0x5A, 0x3D, 0xE4, 0x2D, 0x36, 0xB1, 0x1E, 0x20,
0x89, 0x0D, 0x61, 0x3C, 0xDE, 0x13, 0x1B, 0xBF, 0xE8, 0x2B, 0x48, 0x1E,
0x24, 0x7C, 0x41, 0x58, 0x68, 0x88, 0x28, 0xA4, 0xBD, 0x1E, 0x65, 0xAB,
0x75, 0xA1, 0x0E, 0xC0, 0x64, 0xE0, 0x6A, 0xAB, 0xD5, 0xC4, 0xAF, 0x81,
0x43, 0x50, 0x59, 0xDE, 0xB7, 0x4C, 0x3A, 0x14, 0x23, 0x70, 0x39, 0x1A,
0x25, 0xBC, 0xCC, 0xDF, 0x98, 0x46, 0xCA, 0xC2, 0x5D, 0x32, 0x15, 0x3D,
0xE9, 0x2B, 0x76, 0x9B, 0x3A, 0x4C, 0x17, 0x67, 0x26, 0x28, 0x30, 0x4B,
0x7E, 0xA4, 0x4C, 0xD4, 0x4F, 0x48, 0x6E, 0x8C, 0xDC, 0x0F, 0xE6, 0x10,
0x92, 0x63, 0xD9, 0xFF, 0xF2, 0x07, 0xAA, 0xF8, 0xB7, 0x2F, 0x62, 0x58,
0x21, 0x08, 0x07, 0x84, 0x4B, 0xB5, 0x76, 0x25, 0x76, 0xC4, 0xC4, 0x4B,
0xD8, 0x6F, 0x10, 0xE4, 0x21, 0xD0, 0xB9, 0xF7, 0x48, 0xFF, 0xF8, 0xEB,
0x33, 0x22, 0x38, 0xB8, 0x69, 0x78, 0x9E, 0x22, 0x53, 0x64, 0x8E, 0x11,
0x04, 0x75, 0x5B, 0xFF, 0xFE, 0x15, 0x79, 0x2A, 0x64, 0x28, 0x5B, 0x80,
0x19, 0x0D, 0x1F, 0x1C, 0xFC, 0x50, 0x79, 0xB1, 0x40, 0x45, 0xC3, 0x6A,
0x52, 0x79, 0x3B, 0x1F, 0xBA, 0x05, 0x9F, 0xDA, 0xFF, 0x33, 0xA9, 0x6B,
0x37, 0xE1, 0x20, 0xB1, 0xA4, 0xD9, 0x64, 0x15, 0x2B, 0x77, 0xCE, 0xF8,
0xB0, 0xF7, 0x24, 0xBC, 0x89, 0xAC, 0x50, 0xBA, 0x42, 0x67, 0x72, 0x0C,
0x59, 0x7D, 0x21, 0x46, 0x33, 0x48, 0x71, 0xF6, 0x10, 0xA5, 0x83, 0x00,
0x49, 0xB0, 0x6A, 0x95, 0x55, 0x03, 0xE5, 0xE5, 0xC7, 0xC9, 0x31, 0x2D,
0x36, 0x2A, 0x0C, 0x9F, 0x5C, 0x39, 0x7C, 0x95, 0x58, 0x89, 0x7A, 0xF1,
0xD7, 0x40, 0xF0, 0x86, 0x27, 0x2C, 0x77, 0x03, 0x50, 0x84, 0x33, 0xCB,
0xED, 0xDB, 0x20, 0xD8, 0x38, 0x07, 0x4E, 0xB2, 0x8E, 0xE1, 0x59, 0x10,
0xAC, 0xE8, 0xB1, 0xBA, 0x9F, 0x0B, 0xEA, 0xAF, 0x4E, 0xE8, 0xC3, 0xC9,
0xB0, 0x95, 0xD4, 0xC1, 0x9D, 0x41, 0x80, 0xD3, 0xC6, 0xD0, 0x3F, 0x23,
0x64, 0x41, 0x84, 0x56, 0xB3, 0x8E, 0x72, 0xE5, 0x2E, 0xE1, 0xE9, 0xEF,
0x32, 0x6B, 0xF1, 0xDD, 0x68, 0x78, 0x65, 0xD1, 0x2A, 0x79, 0xD9, 0xAC,
0x37, 0x24, 0x63, 0xEF, 0x74, 0xBD, 0x1D, 0xCB, 0xB6, 0x00, 0x9F, 0x0E,
0x7D, 0xE3, 0xB3, 0xBF, 0xC3, 0x59, 0x93, 0x17, 0x3A, 0x87, 0xFA, 0x54,
0x96, 0xD1, 0xB9, 0xC2, 0x95, 0x38, 0x74, 0xE8, 0x73, 0xD2, 0x50, 0x0A,
0x24, 0x1B, 0x59, 0xFE, 0xC9, 0x48, 0xE6, 0xC3, 0xC0, 0x25, 0x6A, 0xD7,
0x41, 0x41, 0x56, 0x23, 0xD2, 0x1B, 0xDC, 0x6D, 0x83, 0xF3, 0x6F, 0xCB,
0x24, 0x39, 0x94, 0x95, 0x79, 0xF3, 0x7C, 0xAA, 0x3C, 0xD1, 0x94, 0x38,
0x48, 0x78, 0x92, 0xAC, 0xBB, 0x82, 0x1E, 0xBC, 0x75, 0xCB, 0xE2, 0x92,
0xF2, 0x3E, 0x85, 0x79, 0x6D, 0xF0, 0xC9, 0x72, 0x12, 0xF0, 0x54, 0xAA,
0xF4, 0x80, 0x30, 0xB9, 0x32, 0x94, 0xC8, 0x2D, 0x3E, 0xC6, 0x85, 0x42,
0x99, 0x40, 0x05, 0xC9, 0x65, 0x58, 0x23, 0x75, 0x7A, 0x0B, 0xF7, 0x60,
0x74, 0x82, 0xF7, 0x74, 0x5A, 0x0C, 0x4E, 0x76, 0xFC, 0x33, 0xF1, 0x08,
0xE8, 0x47, 0x8C, 0x6A, 0xD7, 0xC6, 0x88, 0xAE, 0xF7, 0xB3, 0xEE, 0x12,
0xF2, 0x73, 0x48, 0xC6, 0xA1, 0xFA, 0x84, 0xF8, 0x38, 0x08, 0x25, 0xE5,
0xC0, 0x9B, 0x78, 0x56, 0xD2, 0x21, 0x67, 0x92, 0x00, 0x6C, 0xDE, 0xF9,
0x5F, 0x95, 0x8F, 0x3B, 0x20, 0x7D, 0xC1, 0x14, 0xD3, 0x69, 0xD9, 0x6F,
0x3E, 0xF7, 0xD6, 0xE6, 0x37, 0x38, 0xFC, 0x73, 0x83, 0x52, 0x92, 0xA3,
0xEF, 0xC8, 0xAC, 0x37, 0xA0, 0x20, 0x98, 0x88, 0xF7, 0xC7, 0x94, 0xCC,
0x38, 0xD8, 0x45, 0x10, 0xE9, 0x58, 0xCF, 0xE4, 0x79, 0x9C, 0x4A, 0x92,
0xAC, 0x20, 0x4D, 0xA9, 0x34, 0x81, 0xE6, 0xF0, 0x96, 0x90, 0xF0, 0x65,
0x7A, 0xC7, 0xF8, 0x5E, 0xBD, 0x88, 0xDA, 0x27, 0x75, 0x40, 0x53, 0x6A,
0x83, 0xF9, 0xB3, 0x35, 0x95, 0xBF, 0xB6, 0xD2, 0xFB, 0xCD, 0x77, 0x84,
0x98, 0xFD, 0xED, 0x4F, 0x97, 0xE2, 0x33, 0x65, 0x85, 0x2C, 0x6B, 0xAE,
0xAA, 0x00, 0x28, 0x93, 0xCE, 0xF4, 0x65, 0xA1, 0xB1, 0x56, 0x4B, 0x50,
0x04, 0x14, 0xAF, 0x17, 0xC6, 0x4E, 0x67, 0x99, 0xA6, 0x1A, 0xD8, 0x54,
0xE3, 0xAA, 0x5C, 0x7C, 0x48, 0x84, 0x73, 0x05, 0xA2, 0x20, 0x2B, 0x50,
0x17, 0xD4, 0xA2, 0xBA, 0xB4, 0x51, 0xB6, 0xFC, 0xED, 0x6F, 0xD1, 0x8D,
0x51, 0xB2, 0x98, 0xB5, 0x46, 0x30, 0xD1, 0xF4, 0x95, 0xE8, 0x7B, 0x00,
0x29, 0x23, 0x19, 0x8E, 0xAE, 0x77, 0x55, 0x2E, 0xD9, 0x16, 0x73, 0x16,
0xEE, 0x5F, 0xC9, 0xE2, 0x4C, 0xF3, 0x7B, 0x92, 0x98, 0x12, 0xB1, 0x11,
0x4F, 0xAC, 0x94, 0x8D, 0xE9, 0xF0, 0xC6, 0xB6, 0xF0, 0x77, 0x0D, 0xC7,
0x79, 0xA2, 0xE3, 0x49, 0x38, 0x60, 0x07, 0x0B, 0x13, 0xCD, 0x7E, 0x8A,
0x90, 0x6D, 0x0C, 0x59, 0xD9, 0xE3, 0x8F, 0x02, 0x6A, 0xB7, 0xAC, 0x8C,
0x27, 0xD0, 0x44, 0x70, 0x16, 0x40, 0xB5, 0x64, 0x06, 0x89, 0xB9, 0xDE,
0xB8, 0x02, 0xB4, 0xFE, 0x76, 0x1E, 0x29, 0x52, 0x0D, 0x80, 0x37, 0xD5,
0xC3, 0x50, 0x87, 0x86, 0x40, 0xC0, 0x39, 0x6B, 0xA7, 0x56, 0x82, 0xED,
0xDB, 0x84, 0x76, 0x94, 0x73, 0x80, 0x3C, 0x07, 0x87, 0x88, 0x24, 0x4E,
0x32, 0xF0, 0xC6, 0xBF, 0x9A, 0xA4, 0x71, 0x62, 0xF3, 0xD0, 0x42, 0x08,
0xC6, 0x60, 0xE0, 0x80, 0x23, 0xB9, 0x00, 0x88, 0xE1, 0x88, 0x2B, 0xE8,
0xE7, 0x84, 0xE1, 0x47, 0xE5, 0xF0, 0xDE, 0xB2, 0xCC, 0xB6, 0x23, 0x58,
0x2E, 0xA4, 0x67, 0x25, 0x87, 0x00, 0x88, 0x48, 0x35, 0x90, 0x18, 0x00,
0x2B, 0xD0, 0xBF, 0xBA, 0xEC, 0x24, 0xE4, 0x17, 0x8F, 0x0C, 0x1C, 0x18,
0xBE, 0xD6, 0x8E, 0x28, 0x7D, 0xBF, 0xCB, 0xFE, 0x83, 0xBC, 0x29, 0x98,
0x2B, 0x2F, 0x35, 0xDC, 0xF4, 0xD9, 0xD9, 0xA6, 0x1D, 0x10, 0x95, 0x2C,
0x57, 0x5B, 0xA5, 0x23, 0xEB, 0xD0, 0xAF, 0x32, 0x8A, 0x22, 0x07, 0x11,
0xE9, 0x28, 0xAD, 0x26, 0x70, 0xA8, 0x02, 0x2C, 0xB9, 0x0F, 0x1A, 0xA8,
0x1B, 0x38, 0x86, 0xEA, 0x7F, 0x2D, 0xD8, 0x02, 0xCE, 0x29, 0xCE, 0x06,
0x06, 0x8F, 0x1B, 0x7A, 0x06, 0x16, 0xCB, 0xC0, 0xB3, 0xB8, 0x2A, 0xD3,
0x88, 0xB4, 0xC6, 0x85, 0x28, 0xA6, 0x2D, 0xB3, 0xF9, 0x44, 0xA7, 0x83,
0x2E, 0xD0, 0x60, 0x16, 0x27, 0x13, 0xE4, 0xB8, 0xA3, 0x68, 0xE5, 0xEC,
0xBD, 0xF2, 0x05, 0xE1, 0x8B, 0x38, 0xD2, 0x03, 0xAA, 0xC0, 0xA4, 0x35,
0x9E, 0xBC, 0x54, 0x9B, 0x45, 0x80, 0xC8, 0xAD, 0x6A, 0xC5, 0x0D, 0x88,
0x6B, 0xF2, 0x13, 0x3B, 0x8E, 0x80, 0x58, 0x64, 0x53, 0x58, 0x37, 0xA6,
0x76, 0x48, 0xCB, 0x2F, 0xA9, 0xFC, 0x51, 0x04, 0xC2, 0xA8, 0x6E, 0x99,
0x14, 0x6F, 0x6E, 0x65, 0x3D, 0xC8, 0x1D, 0x14, 0xC7, 0x6C, 0x60, 0x9A,
0x90, 0xC0, 0x6E, 0x63, 0x5E, 0xFB, 0x67, 0xDA, 0xA2, 0xA0, 0x6F, 0x88,
0x5B, 0x48, 0x92, 0xE2, 0x83, 0x19, 0xC8, 0x6C, 0x97, 0xB8, 0x5D, 0xEE,
0x56, 0x44, 0xDB, 0x58, 0xA4, 0xF9, 0xBC, 0xB4, 0x4D, 0x83, 0x16, 0xC4,
0x91, 0x14, 0xB8, 0x5C, 0x2E, 0x9B, 0x2C, 0x87, 0x93, 0x5C, 0xF9, 0x36,
0xDF, 0x90, 0xAC, 0x00, 0x7B, 0x33, 0x95, 0x0D, 0x1B, 0x84, 0xD1, 0x34,
0xAD, 0xBE, 0x04, 0x6C, 0x6A, 0xD1, 0x7E, 0x3B, 0x65, 0x84, 0x23, 0x8B,
0xC8, 0x0B, 0xAC, 0xBE, 0x79, 0xD4, 0x7D, 0xE3, 0x2C, 0xA0, 0xE7, 0x80,
0xA8, 0x48, 0x37, 0xF4, 0x64, 0x77, 0x2F, 0xB7, 0x12, 0xEA, 0x91, 0x3C,
0x83, 0xF7, 0x51, 0x13, 0xA2, 0x67, 0x2B, 0x7C, 0x4E, 0x50, 0x39, 0x5E,
0xCF, 0x17, 0x75, 0xF9, 0x86, 0x80, 0xF0, 0xEF, 0x44, 0x31, 0xBA, 0x18,
0x38, 0x68, 0x79, 0xE9, 0x9F, 0xF1, 0x0B, 0xCB, 0x55, 0x28, 0x9F, 0x66,
0x39, 0x14, 0xFF, 0x43, 0x0D, 0x4C, 0x10, 0xD8, 0xEE, 0x03, 0xF4, 0xD5,
0x71, 0x68, 0x27, 0x2C, 0xE2, 0x6C, 0x27, 0x43, 0xCF, 0x39, 0xF1, 0x3B,
0xCB, 0x26, 0xE2, 0x40, 0xE8, 0x70, 0xD2, 0x50, 0xC2, 0x10, 0x17, 0xEC,
0x93, 0x5A, 0xCD, 0xEA, 0x9D, 0xE4, 0x3D, 0x8C, 0xE2, 0x30, 0xB8, 0x2C,
0x04, 0x13, 0xCB, 0x69, 0xB8, 0x03, 0x60, 0x6A, 0x93, 0x60, 0x45, 0xF1,
0x65, 0x31, 0x84, 0xD5, 0xB3, 0x34, 0x9D, 0xB3, 0x1B, 0x0D, 0x61, 0x44,
0x5F, 0x8C, 0x1A, 0xB0, 0x8E, 0x35, 0xEE, 0xC5, 0x1A, 0x14, 0xEE, 0xEC,
0xF9, 0x30, 0x73, 0x90, 0xC4, 0xBF, 0x45, 0x8A, 0x42, 0x03, 0x3E, 0x95,
0x7C, 0x0E, 0x40, 0xB1, 0x87, 0x08, 0x47, 0xCA, 0x55, 0xA8, 0x33, 0xA6,
0x18, 0x41, 0xC4, 0x0C, 0x6B, 0x93, 0x88, 0x31, 0x41, 0xF3, 0xED, 0x26,
0x99, 0x4C, 0x09, 0x83, 0x9B, 0x04, 0x87, 0x45, 0x82, 0x8C, 0x86, 0xA4,
0x88, 0x77, 0x21, 0x5F, 0x0D, 0x5D, 0x88, 0x02, 0xE6, 0x28, 0xF2, 0x24,
0x5C, 0xAB, 0x31, 0x4D, 0xD7, 0xD0, 0x35, 0xAD, 0xD7, 0x38, 0xE3, 0x83,
0x3B, 0x3C, 0x54, 0x45, 0xF2, 0x60, 0x09, 0x62, 0x8A, 0x30, 0x41, 0x8B,
0xF6, 0x41, 0x2E, 0xE0, 0xBD, 0x21, 0x1B, 0xEA, 0x94, 0xAB, 0x61, 0x49,
0x41, 0x42, 0x09, 0x9D, 0x7E, 0xE8, 0x49, 0xA8, 0xB5, 0x68, 0xE8, 0x12,
0x70, 0xC8, 0xB3, 0x89, 0xC7, 0xB8, 0xAA, 0xF1, 0x35, 0x3C, 0x92, 0x7E,
0xDE, 0xA0, 0xD0, 0x30, 0x2C, 0xAF, 0xEC, 0x5C, 0x5C, 0x73, 0x46, 0x0E,
0x2F, 0xD0, 0xB4, 0xB8, 0xB6, 0xA5, 0x2D, 0x4A, 0x71, 0x70, 0x92, 0x10,
0x3F, 0x9F, 0x23, 0x6B, 0xBA, 0x90, 0x91, 0x7A, 0x2F, 0x4F, 0x45, 0xBA,
0xF6, 0xCC, 0xFC, 0x53, 0xE6, 0xC0, 0x57, 0x58, 0x53, 0x30, 0xD4, 0x57,
0x5A, 0x43, 0x8B, 0xB8, 0x18, 0x77, 0x57, 0x96, 0x17, 0xC6, 0x65, 0xB2,
0xCD, 0x6A, 0xFB, 0x87, 0x9D, 0xF5, 0x6E, 0xF7, 0xCB, 0x30, 0x77, 0x66,
0x08, 0x30, 0xB5, 0x3D, 0x88, 0xAC, 0xF2, 0x21, 0xB0, 0xA8, 0x15, 0x78,
0x8A, 0x32, 0x03, 0x9B, 0xCA, 0xBD, 0x5D, 0x62, 0xDB, 0x30, 0x94, 0x1C,
0xA0, 0xC2, 0x53, 0x3F, 0xC4, 0xFC, 0x17, 0xF6, 0x4C, 0xD8, 0x48, 0x2B,
0x64, 0x9C, 0xEC, 0x33, 0x86, 0x68, 0xB9, 0xE2, 0xC2, 0x12, 0x05, 0x33,
0x4C, 0x2C, 0xE1, 0x92, 0xD0, 0xD7, 0xA0, 0x57, 0x3C, 0xE8, 0x68, 0xD5,
0x02, 0x82, 0x90, 0x67, 0xAB, 0x88, 0x9F, 0x8A, 0xAE, 0xFB, 0xB8, 0x2C,
0x6D, 0x14, 0x74, 0x01, 0xCB, 0xB4, 0x67, 0xDD, 0xEA, 0x8B, 0xC0, 0xBF,
0x93, 0xC7, 0xDF, 0xAE, 0xE5, 0x07, 0x41, 0x19, 0x00, 0x38, 0x9C, 0x84,
0x34, 0x8D, 0x84, 0x6A, 0xB9, 0xAC, 0xD3, 0xB9, 0xCA, 0xC3, 0xAC, 0x46,
0x1F, 0xDF, 0x20, 0x9C, 0x90, 0xE0, 0x4A, 0x06, 0x03, 0x34, 0xB0, 0x8D,
0xCE, 0xE7, 0x09, 0xB7, 0x8E, 0xC8, 0x55, 0x62, 0x5F, 0x60, 0x1D, 0x44,
0x7B, 0xCF, 0x22, 0x18, 0x2C, 0xB9, 0x90, 0x96, 0x28, 0xA4, 0xF4, 0xB6,
0x31, 0x60, 0x05, 0x32, 0x4A, 0x35, 0xEF, 0xB5, 0x4F, 0x28, 0x85, 0x0D,
0x10, 0x10, 0x2C, 0x70, 0xF4, 0x61, 0x43, 0x75, 0x19, 0x60, 0xED, 0x10,
0xE0, 0xC0, 0x96, 0xED, 0x0F, 0x2D, 0x3B, 0x95, 0xF6, 0xE9, 0x71, 0x48,
0x14, 0x58, 0x41, 0x38, 0xC7, 0x77, 0x7E, 0x48, 0xD9, 0xD0, 0xE2, 0xD6,
0x6C, 0x91, 0xCA, 0xB5, 0x9C, 0xE3, 0xD2, 0x8B, 0x3D, 0x87, 0xDC, 0xDF,
0x18, 0x6D, 0x64, 0x21, 0x9A, 0x0F, 0xE9, 0x28, 0xA7, 0xE1, 0x2E, 0xA2,
0xCF, 0x38, 0xA5, 0x68, 0xE9, 0x24, 0x42, 0xA7, 0x69, 0xEF, 0xE4, 0xE5,
0xC3, 0x4C, 0xF5, 0x69, 0xDD, 0xFC, 0xB3, 0x50, 0x35, 0x9C, 0x8C, 0x80,
0x45, 0x9F, 0xE2, 0xFC, 0x2D, 0x99, 0x07, 0x96, 0x3B, 0x38, 0x7A, 0x16,
0x3D, 0xEC, 0x73, 0xDD, 0xEA, 0x6F, 0xDF, 0x1C, 0x7E, 0x9B, 0x8E, 0xA8,
0x84, 0x6B, 0x9F, 0xA4, 0x75, 0xFF, 0x6A, 0xF9, 0xCA, 0xEB, 0xD9, 0x55,
0x0C, 0x00, 0xC3, 0xCC, 0xD5, 0x28, 0x2B, 0x06, 0xB9, 0xAF, 0x5A, 0x0F,
0x74, 0x40, 0x4F, 0x96, 0x2A, 0x36, 0x8E, 0x16, 0x4F, 0xA8, 0x8B, 0x64,
0xB3, 0x8B, 0x77, 0x12, 0x4E, 0x7F, 0x43, 0x54, 0x30, 0x1A, 0x76, 0xF0,
0x48, 0xF3, 0x3E, 0x96, 0x2F, 0x47, 0x52, 0x94, 0xD0, 0x1E, 0x66, 0x78,
0x47, 0x8F, 0xF8, 0x50, 0x75, 0x3B, 0x70, 0xE2, 0xDE, 0xDC, 0xB3, 0x56,
0xD9, 0xF1, 0xA5, 0xC6, 0x13, 0xD6, 0x4C, 0x86, 0x41, 0x2A, 0xC3, 0x5B,
0xDE, 0xF2, 0x23, 0x4C, 0x76, 0x8B, 0x70, 0x69, 0xA8, 0xB3, 0x33, 0x0D,
0x3E, 0xE8, 0x8D, 0xBE, 0xDE, 0x00, 0xB8, 0x7F, 0xFB, 0x98, 0xA8, 0x6E,
0x70, 0xAB, 0xD2, 0x64, 0x09, 0x78, 0xBB, 0x91, 0xD3, 0xAC, 0x43, 0x24,
0x02, 0x77, 0x1C, 0x67, 0x07, 0x58, 0x83, 0x0D, 0x98, 0xBB, 0xE6, 0xB4,
0x2E, 0xD4, 0x9C, 0xA1, 0xEF, 0x23, 0x4E, 0x03, 0xB8, 0xE8, 0x52, 0x70,
0x24, 0xC8, 0x80, 0xA1, 0x0F, 0x35, 0x0C, 0xF6, 0x8D, 0x87, 0xB3, 0x53,
0xBC, 0x2B, 0x47, 0xB6, 0xDC, 0x59, 0x0D, 0x62, 0xCE, 0x09, 0x87, 0x7E,
0xBF, 0x81, 0x91, 0xFC, 0x65, 0x78, 0x73, 0xF9, 0x39, 0x20, 0x7B, 0x80,
0xEC, 0x74, 0xB5, 0x92, 0xDB, 0x00, 0x84, 0x58, 0x70, 0x1E, 0xDF, 0xD1,
0xEE, 0x4F, 0xDE, 0x98, 0xB1, 0xAD, 0xB1, 0xBB, 0x9C, 0x9A, 0x3E, 0x5C,
0x7C, 0x12, 0xCB, 0x1F, 0xDB, 0x71, 0x4E, 0x18, 0xC7, 0xE6, 0xAC, 0x22,
0xB3, 0xC2, 0x28, 0xE4, 0xA4, 0xB5, 0x0E, 0xCB, 0x96, 0x04, 0x9C, 0x48,
0x51, 0x00, 0xC3, 0xC0, 0xC5, 0xD1, 0x1F, 0x8F, 0x2B, 0x43, 0x56, 0x59,
0xAF, 0xE2, 0xF9, 0x62, 0x16, 0xB8, 0x16, 0x47, 0xF6, 0x00, 0xC2, 0x8F,
0x66, 0x30, 0x91, 0x70, 0xE4, 0x80, 0x67, 0x80, 0xF3, 0x84, 0x7F, 0x8E,
0x57, 0xD0, 0xC8, 0x94, 0x30, 0xB8, 0x44, 0x48, 0x20, 0x40, 0xD0, 0x00,
0x68, 0x14, 0x8D, 0xBF, 0xD2, 0x40, 0x48, 0xC8, 0x55, 0xBB, 0xF1, 0x75,
0x78, 0x6F, 0x84, 0xAD, 0x53, 0x74, 0xE0, 0x19, 0x2B, 0xE2, 0xBE, 0x69,
0xE6, 0xE3, 0xD2, 0x12, 0x1A, 0x37, 0x10, 0x48, 0xE4, 0x10, 0x14, 0x3F,
0x0E, 0x55, 0xD8, 0x22, 0x01, 0xAA, 0xE0, 0x83, 0x13, 0x00, 0x0B, 0xEF,
0x34, 0xE0, 0x3B, 0xE5, 0xB5, 0xA9, 0x8E, 0x89, 0x74, 0x48, 0xD6, 0xF3,
0xE5, 0x60, 0xFF, 0x55, 0xBE, 0x2C, 0x7F, 0x5B, 0x18, 0x28, 0xCD, 0xA9,
0x9D, 0x14, 0xFE, 0x19, 0x9F, 0x00, 0xEF, 0xC0, 0xD0, 0x08, 0xF9, 0xFF,
0x81, 0xFE, 0x40, 0xDD, 0x10, 0xA1, 0x84, 0x68, 0x9B, 0x50, 0x52, 0x80,
0x34, 0x69, 0x3F, 0x9E, 0x36, 0xD0, 0x87, 0x3C, 0xEF, 0x74, 0x24, 0x6C,
0x02, 0x68, 0xF2, 0x0A, 0x7F, 0x9C, 0x12, 0xA8, 0x64, 0xA7, 0x05, 0xE3,
0xE6, 0x92, 0xB6, 0x42, 0x00, 0x68, 0x0B, 0xD0, 0xEB, 0x14, 0x52, 0x74,
0xB2, 0x91, 0xE4, 0x5E, 0x03, 0x19, 0x13, 0x94, 0x06, 0x7D, 0x62, 0xFB,
0xBD, 0xEA, 0xB2, 0x66, 0xA4, 0x54, 0xEF, 0x31, 0xE9, 0x08, 0x4D, 0x44,
0x4E, 0x20, 0xE4, 0xA3, 0x10, 0xCC, 0xA5, 0x2C, 0xCC, 0xA8, 0xC0, 0xA6,
0x74, 0x5C, 0x41, 0xEC, 0xC5, 0xA0, 0xCB, 0xDE, 0x0F, 0x84, 0x50, 0x9C,
0xDA, 0x13, 0x44, 0x1E, 0x90, 0xEF, 0x9E, 0xBD, 0x56, 0x70, 0x52, 0xD0,
0x6D, 0xCC, 0xEC, 0x69, 0xA1, 0x40, 0x44, 0xB6, 0x59, 0x74, 0x87, 0xA0,
0x46, 0x20, 0x90, 0x51, 0x8E, 0x11, 0xD5, 0x20, 0x01, 0xBD, 0xBE, 0xE9,
0x3E, 0xFA, 0x5A, 0xB2, 0x88, 0x44, 0xC7, 0x35, 0xD3, 0xD4, 0x1B, 0x48,
0x17, 0x58, 0x62, 0xF9, 0xAB, 0xE0, 0xC6, 0x5C, 0x81, 0x28, 0x1B, 0xBA,
0x07, 0xFC, 0x07, 0x7C, 0xCE, 0x50, 0x12, 0x94, 0x04, 0x18, 0x1C, 0x68,
0x02, 0x80, 0x4A, 0xCA, 0xED, 0x2B, 0xD8, 0x70, 0xAC, 0xA6, 0x9C, 0x3A,
0x39, 0xA5, 0x96, 0xD4, 0x05, 0xE0, 0x63, 0x86, 0x0B, 0xC4, 0x70, 0x88,
0x3C, 0xE9, 0xFC, 0xED, 0xFA, 0xD4, 0xAE, 0x67, 0x60, 0xF5, 0x85, 0x08,
0x52, 0xE4, 0xBF, 0xEE, 0x68, 0xA5, 0xAB, 0xE4, 0x09, 0x5C, 0xB8, 0xD6,
0x4B, 0x40, 0xD0, 0x5A, 0xCD, 0xD5, 0xB6, 0x3E, 0x82, 0xD9, 0xDC, 0xDA,
0x5B, 0x20, 0x36, 0x60, 0xE5, 0x80, 0x05, 0x2E, 0x79, 0x14, 0xC9, 0x52,
0x3C, 0x98, 0x58, 0x5E, 0xAA, 0x14, 0x00, 0xD2, 0x11, 0xF0, 0xFD, 0x0E,
0xC0, 0x84, 0x6D, 0x3A, 0xE0, 0x5A, 0x62, 0x74, 0xE7, 0x3C, 0x72, 0xD6,
0xCF, 0xE0, 0xBB, 0xA5, 0x5D, 0xF0, 0x85, 0x24, 0xF4, 0xD2, 0x06, 0x04,
0x01, 0x8B, 0x9B, 0xB2, 0x12, 0x88, 0xBA, 0x36, 0x41, 0x06, 0x67, 0x9B,
0xAF, 0xE0, 0xA2, 0xB0, 0xED, 0xC0, 0x01, 0x82, 0x09, 0xC3, 0xBA, 0x32,
0x26, 0xDE, 0x78, 0xD8, 0xAC, 0x19, 0x11, 0xE7, 0x47, 0x68, 0x12, 0xF3,
0x9B, 0xF0, 0x17, 0x78, 0x2F, 0xE1, 0x14, 0x5E, 0x20, 0x57, 0x26, 0x09,
0x51, 0x29, 0x0C, 0x88, 0xBB, 0xC7, 0xCE, 0xE7, 0x39, 0xB1, 0xCC, 0xF8,
0xAE, 0x0A, 0xAB, 0xEF, 0x7B, 0xAD, 0x99, 0x0E, 0xFC, 0xC8, 0x92, 0x33,
0x69, 0xCC, 0x68, 0xBB, 0x71, 0x5B, 0x32, 0x32, 0xCD, 0x74, 0xFB, 0x69,
0x9F, 0x2A, 0x3E, 0x1E, 0xC7, 0x8B, 0x5C, 0x2F, 0x2B, 0xCC, 0x8D, 0x41,
0x43, 0xE3, 0x94, 0x8D, 0x9A, 0x40, 0x16, 0xBC, 0x27, 0x6B, 0x44, 0xA1,
0x9C, 0xD3, 0xA0, 0x79, 0xC3, 0xA3, 0x1C, 0x1F, 0x41, 0x20, 0x92, 0x5E,
0x1A, 0x30, 0x62, 0x2E, 0x23, 0x00, 0x7F, 0xB4, 0x6B, 0x4D, 0x4E, 0xB8,
0x94, 0x66, 0x97, 0xA1, 0x12, 0x2F, 0x25, 0x05, 0xFD, 0x80, 0xE4, 0xE5,
0x16, 0x00, 0x90, 0xB4, 0x88, 0xF0, 0xC1, 0x34, 0xDC, 0x20, 0x4B, 0x2D,
0xAB, 0x3E, 0x95, 0x28, 0xE2, 0x8F, 0x35, 0x04, 0xC0, 0x70, 0x06, 0x18,
0x30, 0x18, 0x16, 0x9A, 0x36, 0xE0, 0x2F, 0x66, 0xC2, 0x21, 0xD0, 0x65,
0x2B, 0x10, 0x94, 0xCA, 0x36, 0xD8, 0x41, 0xAC, 0x8E, 0xB0, 0xD4, 0x26,
0x5A, 0x2F, 0x10, 0xD0, 0x77, 0xB1, 0xFF, 0x15, 0xBA, 0xDC, 0x31, 0x37,
0xEC, 0xD7, 0xBA, 0x38, 0x3A, 0xB0, 0x0F, 0xB3, 0x03, 0xB0, 0x8B, 0xBF,
0x99, 0xEC, 0xE1, 0x94, 0x80, 0x9F, 0xCE, 0x48, 0x21, 0xA8, 0x59, 0x66,
0x50, 0x36, 0x9A, 0x06, 0x30, 0x9E, 0xC5, 0xCC, 0xAE, 0xF2, 0x48, 0xBA,
0xBF, 0x08, 0x4D, 0x85, 0xF3, 0xA2, 0x61, 0x65, 0xFC, 0x71, 0x51, 0xB4,
0x8E, 0xC8, 0xD2, 0x21, 0x16, 0x69, 0x6B, 0x16, 0x07, 0x80, 0x1F, 0xD2,
0xAC, 0xF0, 0xEA, 0x82, 0x9E, 0x41, 0x84, 0x1A, 0x00, 0xB0, 0x27, 0x8A,
0xA7, 0xD8, 0x5A, 0xED, 0x4A, 0x48, 0x04, 0x50, 0x66, 0xC8, 0x9E, 0xC4,
0xCE, 0x34, 0xB2, 0x9C, 0x6F, 0x58, 0xC9, 0x7C, 0x36, 0xA0, 0x63, 0x92,
0x48, 0x5E, 0x27, 0x1E, 0xB1, 0x4A, 0xB5, 0x09, 0x5C, 0x58, 0x47, 0x9C,
0xB4, 0x70, 0x78, 0x23, 0x9A, 0x6A, 0x43, 0x4D, 0xDF, 0x7A, 0x25, 0xB2,
0x59, 0x1A, 0xF6, 0x64, 0x07, 0x68, 0xE8, 0xC8, 0x1D, 0x4F, 0x2C, 0x56,
0x45, 0x3C, 0xC2, 0xDB, 0xB1, 0xDD, 0x3F, 0x32, 0xEA, 0x60, 0x6C, 0x21,
0xED, 0xC8, 0xD3, 0x20, 0x5E, 0x64, 0x54, 0x07, 0xF6, 0x00, 0x67, 0xB5,
0x7B, 0xB0, 0xEA, 0x0D, 0xEA, 0xBE, 0xB0, 0xFB, 0x35, 0x05, 0xDB, 0x4C,
0x7B, 0x5B, 0x1B, 0xCC, 0xCF, 0x47, 0x3B, 0x9B, 0xB4, 0xEB, 0xCF, 0xB4,
0x42, 0x19, 0x83, 0x59, 0x2B, 0xC1, 0x7B, 0x3F, 0x2E, 0x2B, 0x10, 0xD7,
0x97, 0xEE, 0x9A, 0x40, 0x3D, 0x63, 0x9D, 0x2E, 0x9F, 0x82, 0x87, 0xF6,
0x44, 0xD6, 0xAB, 0x9D, 0x75, 0x12, 0x56, 0x65, 0xFD, 0x49, 0x3A, 0xAB,
0x87, 0xD5, 0xB1, 0x0C, 0x75, 0x62, 0x0C, 0x96, 0x57, 0xAF, 0xC5, 0x17,
0xB6, 0xE0, 0x2D, 0x35, 0xD1, 0x50, 0xD2, 0xC8, 0x8A, 0x88, 0x17, 0xA8,
0x5D, 0x98, 0x0E, 0x07, 0xF1, 0x04, 0x29, 0xCF, 0x62, 0xA0, 0x9F, 0x6B,
0x4B, 0x66, 0x8D, 0x6C, 0x17, 0xC1, 0xE4, 0x18, 0x46, 0x98, 0xAA, 0xB3,
0xCE, 0x71, 0xE9, 0x0F, 0x60, 0x3A, 0xFF, 0x14, 0x3E, 0x4A, 0xA2, 0x05,
0xD6, 0xA2, 0x2F, 0xE3, 0x52, 0x7E, 0x80, 0xF6, 0x41, 0x48, 0x8C, 0x4A,
0xA7, 0xAF, 0xEA, 0xD1, 0xD7, 0x5C, 0x95, 0x0B, 0x3D, 0x9E, 0x74, 0x7C,
0xB8, 0x38, 0x56, 0xA4, 0x2E, 0xB7, 0xD2, 0x57, 0xC2, 0x94, 0xD4, 0xE9,
0xB3, 0x9E, 0x5E, 0xF0, 0xA7, 0x10, 0x2C, 0xAE, 0xDA, 0x37, 0x04, 0x68,
0xD7, 0x97, 0x00, 0x8C, 0x7E, 0xC8, 0x19, 0x48, 0x8E, 0xE6, 0xFB, 0xAD,
0xC3, 0x0D, 0xBA, 0x7E, 0x46, 0x74, 0xDB, 0x4E, 0xF7, 0x20, 0x2C, 0x4F,
0x35, 0xF7, 0xA8, 0x25, 0x38, 0x27, 0x54, 0x99, 0xBC, 0xC9, 0xA4, 0x27,
0xF1, 0x50, 0xF0, 0x51, 0x66, 0x22, 0xAD, 0x69, 0x34, 0xC8, 0xE5, 0xA2,
0x54, 0x84, 0xE6, 0x36, 0x98, 0xD4, 0xA4, 0x00, 0x23, 0xF2, 0xBA, 0x5A,
0x3B, 0xEF, 0xAF, 0x30, 0x70, 0x9C, 0xB3, 0x5A, 0x29, 0x81, 0x22, 0x0A,
0x6A, 0xCC, 0x1C, 0xE2, 0xB9, 0x94, 0xF1, 0xFA, 0x38, 0x86, 0xE1, 0xCD,
0x3D, 0xFC, 0xA7, 0xA8, 0x1B, 0x18, 0x18, 0x90, 0xDD, 0xB7, 0x3F, 0xAA,
0x6A, 0xB8, 0xFC, 0xA6, 0x35, 0xD4, 0xFA, 0x8B, 0xE6, 0x24, 0x76, 0x88,
0xF1, 0x27, 0x50, 0xE7, 0x57, 0xE4, 0xBC, 0x76, 0x41, 0x76, 0xA2, 0x6B,
0xC2, 0xB8, 0x74, 0xD5, 0x7E, 0x47, 0x48, 0x05, 0xAC, 0xD2, 0xBE, 0x0A,
0x22, 0xB4, 0xDC, 0xD1, 0xC9, 0x24, 0x2D, 0xB6, 0xCB, 0x98, 0xF9, 0x3C,
0x3A, 0x75, 0x62, 0xBD, 0x5A, 0x4E, 0x44, 0x7D, 0xBB, 0x26, 0xB9, 0x16,
0x02, 0x17, 0xC8, 0x84, 0x1B, 0xB0, 0x12, 0x65, 0xBC, 0xB8, 0x38, 0x39,
0x19, 0x15, 0xF8, 0x2F, 0x62, 0x78, 0x22, 0xE1, 0xFD, 0x24, 0x03, 0x59,
0xBA, 0x9D, 0xD7, 0x82, 0xF4, 0xCD, 0x6F, 0xBF, 0x8D, 0xE0, 0xB3, 0xBD,
0x4F, 0x1C, 0x57, 0x77, 0xD9, 0x1D, 0x5E, 0x83, 0x6C, 0x0C, 0xA8, 0xEA,
0xEA, 0x98, 0x78, 0x83, 0xAB, 0xDC, 0xDB, 0xD5, 0x43, 0xEA, 0xDA, 0xFF,
0xC0, 0x18, 0x0C, 0x83, 0x3F, 0xC7, 0x50, 0x7B, 0xBB, 0x30, 0xED, 0x14,
0x0D, 0xC3, 0x38, 0x48, 0xD6, 0x27, 0x93, 0x7F, 0xA8, 0x6B, 0x68, 0xC2,
0xA4, 0x11, 0x72, 0x05, 0x29, 0x55, 0x63, 0x88, 0xA0, 0x38, 0x55, 0xEF,
0x9B, 0x84, 0x62, 0xF3, 0xC6, 0xD7, 0xD4, 0x67, 0x32, 0xA0, 0x35, 0xC5,
0xB4, 0x9B, 0xF0, 0x19, 0xA7, 0x20, 0xAC, 0x96, 0x22, 0xFF, 0x40, 0xA3,
0xDE, 0x43, 0x9A, 0xC3, 0x42, 0xE3, 0x85, 0x24, 0x36, 0x0D, 0x6D, 0xB0,
0xD3, 0x89, 0x7F, 0xA4, 0x55, 0xE8, 0x6B, 0x89, 0xDD, 0x9F, 0xB0, 0xB7,
0xCE, 0x33, 0x9A, 0x49, 0x10, 0x84, 0x1F, 0xD1, 0xB4, 0x46, 0xE8, 0x0D,
0xE7, 0x8C, 0xFE, 0x8A, 0x75, 0xBB, 0x35, 0x25, 0x0F, 0x07, 0x1E, 0x9C,
0x1B, 0xF3, 0x58, 0x7E, 0x62, 0x89, 0x98, 0x46, 0x88, 0x5D, 0xF3, 0xC8,
0x28, 0x14, 0x1C, 0x21, 0x62, 0x05, 0xA2, 0x10, 0x54, 0x7F, 0x2F, 0xDF,
0xA2, 0x68, 0x31, 0xB8, 0x2C, 0x76, 0x39, 0xA9, 0x48, 0x38, 0x03, 0x50,
0x62, 0x63, 0x91, 0xF1, 0xBA, 0x93, 0xF0, 0xF6, 0x66, 0xEF, 0x7E, 0xE4,
0x5D, 0xCD, 0x99, 0xAA, 0x43, 0x65, 0x8B, 0x68, 0xFA, 0xA8, 0xB9, 0x9D,
0x36, 0xDC, 0x26, 0xBC, 0x3E, 0x03, 0xBE, 0x45, 0x45, 0xE4, 0x4E, 0xD9,
0xF7, 0xF0, 0x29, 0x83, 0xA9, 0x62, 0xF0, 0xAD, 0x7C, 0xF6, 0x30, 0xB6,
0xED, 0x1D, 0x8D, 0x89, 0x84, 0x19, 0xFA, 0x78, 0x75, 0xF4, 0x0A, 0x30,
0x3A, 0x6F, 0x2B, 0xD3, 0xBA, 0x31, 0x47, 0xBF, 0x6D, 0xAF, 0x57, 0xF4,
0xAE, 0x6D, 0xE6, 0xBC, 0xAB, 0xFB, 0xDC, 0x74, 0xB7, 0x08, 0xB7, 0x30,
0x56, 0xE1, 0x15, 0x3E, 0x41, 0xDC, 0xC8, 0x79, 0xD6, 0xF5, 0xD8, 0xA7,
0x51, 0xB3, 0xE0, 0xDE, 0x22, 0x85, 0x90, 0x0A, 0x18, 0x3F, 0x80, 0x22,
0x16, 0xF8, 0xD2, 0x04, 0x6E, 0xF4, 0x85, 0xF0, 0xC5, 0xF5, 0xFE, 0x9C,
0x75, 0x18, 0x94, 0x4C, 0x68, 0x86, 0xB9, 0x41, 0x25, 0xC9, 0x4A, 0x3A,
0x80, 0x35, 0x70, 0x15, 0x2E, 0x5D, 0xDE, 0xED, 0x22, 0x46, 0x72, 0x10,
0xED, 0xB1, 0xE2, 0x49, 0xC0, 0x03, 0xD2, 0xB3, 0xF6, 0xCD, 0xC9, 0x4B,
0x6E, 0xA8, 0x61, 0xA5, 0x30, 0xA0, 0xE5, 0x81, 0x97, 0x68, 0x7C, 0xAD,
0xE4, 0xA0, 0xED, 0x60, 0xB1, 0x68, 0xBB, 0xF2, 0x4F, 0x5B, 0x7F, 0xA3,
0x7E, 0xB0, 0x14, 0x39, 0xE3, 0x38, 0x6D, 0x39, 0xF6, 0x5A, 0xF8, 0x2E,
0xA9, 0x5B, 0xC2, 0x7A, 0xFB, 0xF3, 0x3E, 0xE6, 0xB3, 0x8B, 0x52, 0x74,
0xFF, 0xE8, 0xE3, 0xEC, 0x0E, 0xB6, 0xA5, 0x03, 0x4F, 0xC9, 0x48, 0x01,
0x8E, 0x42, 0x2A, 0x30, 0x92, 0xF8, 0xF2, 0xEF, 0x79, 0xC2, 0x0C, 0x7B,
0x58, 0xE9, 0x3A, 0x89, 0xAD, 0x0F, 0x2B, 0x50, 0xA3, 0x28, 0x02, 0x6E,
0x3D, 0x90, 0x68, 0x56, 0x84, 0x98, 0x72, 0x27, 0x4F, 0x50, 0xD3, 0x80,
0x1E, 0x82, 0x65, 0x71, 0xC2, 0x11, 0x1F, 0xD5, 0x8B, 0x98, 0xF1, 0x82,
0x8F, 0x70, 0x1A, 0xCC, 0x78, 0x68, 0x16, 0xD8, 0x12, 0x28, 0x1E, 0x01,
0xCB, 0x48, 0x3B, 0x35, 0xF6, 0x00, 0x70, 0xF9, 0xCE, 0x90, 0xD1, 0xDB,
0x3A, 0xE8, 0xAD, 0x55, 0xAD, 0x6A, 0x33, 0x5A, 0xC8, 0x59, 0x7C, 0x54,
0xD5, 0xD1, 0xE8, 0xDF, 0x22, 0x2C, 0x60, 0x39, 0x98, 0x42, 0x7A, 0x13,
0x78, 0xD3, 0xAC, 0xD4, 0xEA, 0x2E, 0x10, 0x35, 0x7D, 0x06, 0xDE, 0x17,
0xF9, 0xA1, 0xED, 0xCC, 0xCC, 0x35, 0x89, 0x2E, 0x28, 0xE9, 0x36, 0x18,
0xE9, 0x59, 0xE8, 0x4D, 0xB7, 0x78, 0x3A, 0x1D, 0xDC, 0x4E, 0x02, 0xA4,
0x48, 0xC7, 0xB0, 0xB0, 0x20, 0x70, 0xF7, 0x70, 0xF1, 0x1A, 0x36, 0xB6,
0xF1, 0x3E, 0xBE, 0x3B, 0x64, 0xFF, 0x30, 0xBA, 0x8E, 0xE0, 0x8F, 0xD2,
0x82, 0x48, 0xE5, 0xBB, 0x6C, 0x37, 0xEA, 0x42, 0xFC, 0x09, 0x09, 0xDE,
0x2C, 0xE4, 0x0A, 0xD7, 0x88, 0xC4, 0x36, 0xFA, 0xAA, 0xF7, 0x1A, 0xEF,
0x96, 0xC3, 0x68, 0xA4, 0x10, 0x86, 0x8F, 0xB7, 0x5F, 0x51, 0x38, 0xFC,
0x8A, 0xF9, 0x6F, 0x18, 0x0B, 0x59, 0x5A, 0xFC, 0x86, 0xDD, 0xAF, 0xF3,
0xEB, 0xD8, 0x40, 0xD7, 0xD0, 0xEA, 0xBC, 0x88, 0x47, 0xF7, 0xCC, 0xE6,
0xA9, 0x68, 0xA8, 0xB6, 0x9D, 0xA2, 0x02, 0x74, 0x45, 0x7A, 0x40, 0x71,
0xF8, 0xEF, 0x8C, 0x24, 0xA1, 0x64, 0x5D, 0x62, 0xC9, 0x1F, 0x4F, 0x4B,
0x58, 0x2E, 0xED, 0x01, 0x17, 0x22, 0xE7, 0x4F, 0xC5, 0x81, 0xB6, 0x4E,
0x09, 0xFE, 0x6C, 0x77, 0x45, 0xCE, 0x37, 0x6A, 0xBD, 0xB0, 0xA3, 0x06,
0x8F, 0xED, 0x70, 0xD0, 0xE7, 0xDD, 0x40, 0x85, 0xBD, 0x20, 0x46, 0xC3,
0xB2, 0x67, 0x91, 0x7A, 0x60, 0xC1, 0x06, 0xFD, 0x09, 0x47, 0x49, 0xFC,
0xDD, 0xAD, 0x6A, 0xD0, 0x4C, 0x40, 0xFE, 0x74, 0x07, 0x58, 0x99, 0x6A,
0x71, 0xF8, 0xE9, 0x54, 0xCC, 0xF8, 0x50, 0x28, 0xEC, 0xC0, 0x82, 0x24,
0x64, 0x20, 0x84, 0x6F, 0x17, 0x58, 0x5D, 0xEF, 0x34, 0xF0, 0xCB, 0x13,
0x18, 0xA0, 0x2B, 0x3A, 0x0A, 0x6E, 0x23, 0xC8, 0x3F, 0x2D, 0x3A, 0x36,
0x40, 0x44, 0xEC, 0xAC, 0x6A, 0x90, 0xB5, 0xFD, 0x46, 0x08, 0x39, 0xF1,
0x19, 0xE2, 0xF2, 0x1A, 0xF7, 0xD0, 0x3F, 0x22, 0x32, 0x40, 0xAE, 0x52,
0x02, 0xDC, 0xE4, 0x25, 0xAF, 0x65, 0x8E, 0x0B, 0x12, 0x9F, 0x6C, 0x01,
0xD1, 0x54, 0x0C, 0x78, 0x2E, 0x50, 0x01, 0x5C, 0x3D, 0x3A, 0xD7, 0x29,
0x47, 0xE8, 0xBC, 0x3B, 0x26, 0x43, 0x70, 0x5C, 0xFE, 0x28, 0xBB, 0x04,
0xC2, 0xEA, 0x21, 0xC8, 0xD3, 0xCB, 0x95, 0x84, 0xB1, 0x73, 0x2A, 0x78,
0xB2, 0x4F, 0x36, 0x64, 0x0A, 0xF1, 0x55, 0x77, 0x5F, 0x60, 0x65, 0x2E,
0x3A, 0x48, 0x14, 0x06, 0x9C, 0xA4, 0x97, 0x9A, 0xBB, 0x0B, 0x7E, 0x30,
0xB6, 0xE0, 0xD2, 0xB8, 0xA4, 0xA0, 0x28, 0x01, 0x98, 0x00, 0x75, 0x77,
0x71, 0xD0, 0x5D, 0x48, 0x6C, 0x0D, 0xA4, 0xF1, 0x9B, 0xA0, 0x6B, 0x53,
0x37, 0x0F, 0x3F, 0x0E, 0xD0, 0xE8, 0xE6, 0x50, 0x0C, 0x73, 0x79, 0x63,
0xDB, 0xC3, 0x6D, 0x80, 0x0C, 0x77, 0x84, 0x02, 0xC6, 0x03, 0xEC, 0xF0,
0xAF, 0x25, 0x7F, 0x0D, 0xC5, 0xE8, 0x9E, 0x0E, 0x95, 0x54, 0xC3, 0xB2,
0x2C, 0x50, 0x77, 0x1C, 0x5B, 0x03, 0xAA, 0xC6, 0x3C, 0xC0, 0x94, 0x1E,
0x06, 0x74, 0x98, 0x99, 0x51, 0xA8, 0x68, 0xBB, 0xBC, 0x0C, 0xC7, 0x3D,
0x21, 0xD0, 0x1A, 0x0E, 0x08, 0x02, 0x34, 0xFE, 0x51, 0x20, 0x45, 0x67,
0x2B, 0xD8, 0x2F, 0x49, 0x97, 0x00, 0x87, 0x36, 0xB5, 0x6D, 0xC1, 0x43,
0x5A, 0xEB, 0x2E, 0x4C, 0x48, 0x88, 0x41, 0x50, 0x3C, 0x18, 0x07, 0x38,
0xB7, 0xB0, 0x07, 0x6E, 0x5F, 0x17, 0x7D, 0x8C, 0x30, 0x80, 0xD4, 0xF8,
0xFE, 0x20, 0x53, 0x17, 0xE7, 0x66, 0xD0, 0x9A, 0x8C, 0x00, 0x85, 0x0F,
0xDD, 0x1A, 0xFE, 0x66, 0x1A, 0x08, 0x79, 0x1F, 0x9C, 0xE4, 0x56, 0xAE,
0x6B, 0x20, 0xFF, 0xCE, 0x3C, 0x88, 0xD8, 0x05, 0x52, 0x03, 0x28, 0x68,
0x43, 0xD7, 0x1B, 0xED, 0xDE, 0xEF, 0x20, 0x9C, 0x4C, 0x10, 0x33, 0x42,
0xCD, 0x10, 0x66, 0xBA, 0x15, 0x2D, 0x7B, 0x67, 0xDA, 0x7B, 0xFE, 0xBB,
0x24, 0x7F, 0xED, 0x9C, 0x35, 0x60, 0x6F, 0x41, 0xE7, 0xFC, 0x31, 0x6A,
0xA0, 0xE0, 0x7F, 0x2B, 0x35, 0x25, 0x4F, 0x14, 0x9A, 0x31, 0x6F, 0x27,
0x40, 0xCF, 0x99, 0xFA, 0x81, 0x28, 0xC1, 0x8D, 0xF8, 0x67, 0x93, 0xD8,
0xE1, 0xD1, 0xB1, 0x35, 0x4A, 0x98, 0x2A, 0x91, 0xFD, 0x80, 0xC4, 0xFA,
0xA1, 0x02, 0x10, 0x4A, 0x84, 0xD0, 0xD3, 0xE2, 0xE5, 0x9C, 0x55, 0x10,
0x45, 0xF9, 0xE2, 0xE7, 0x33, 0x4C, 0xAA, 0xD8, 0x28, 0x78, 0x88, 0x18,
0x30, 0xB5, 0xDA, 0x7A, 0x3D, 0x10, 0x84, 0x15, 0x63, 0xF0, 0xC1, 0xA8,
0x57, 0xD1, 0xC5, 0x60, 0x8B, 0xA8, 0x1D, 0x00, 0x68, 0x23, 0xCC, 0x14,
0x93, 0xD8, 0x4B, 0x5A, 0x3D, 0x3B, 0x1C, 0x62, 0xBC, 0xFE, 0xEC, 0x7D,
0x0C, 0x38, 0x44, 0xB6, 0x20, 0x14, 0x41, 0x26, 0xCB, 0x68, 0x3A, 0xD4,
0x47, 0x65, 0x77, 0x7D, 0x98, 0x68, 0xD9, 0xF1, 0xE0, 0xBF, 0xAD, 0x0D,
0x44, 0x59, 0xCA, 0xD2, 0x91, 0xEF, 0x50, 0x0C, 0x89, 0x18, 0x4F, 0xCD,
0x8A, 0x73, 0xB7, 0xD0, 0xA6, 0x38, 0x75, 0xBA, 0x7F, 0x24, 0xA3, 0x03,
0x25, 0x43, 0x6E, 0xAC, 0x9A, 0x06, 0xC5, 0x5C, 0x8A, 0x20, 0x3B, 0x1F,
0xDF, 0xD8, 0x8A, 0xB0, 0xA4, 0x90, 0x37, 0x19, 0x3B, 0xE0, 0x4A, 0x1F,
0x51, 0x58, 0x32, 0xDE, 0xBF, 0xEC, 0xAF, 0x65, 0x3D, 0xFF, 0x7D, 0x30,
0x9E, 0x00, 0x85, 0xE0, 0x32, 0x99, 0x02, 0x54, 0x24, 0x0B, 0xA6, 0xC9,
0x04, 0x38, 0x49, 0xD6, 0x35, 0xEC, 0x36, 0x44, 0xF0, 0xA6, 0x43, 0x6F,
0xE4, 0xFD, 0x63, 0x81, 0x04, 0x80, 0x38, 0xD8, 0x88, 0x94, 0xE4, 0x56,
0x3C, 0x28, 0x8B, 0x98, 0xC5, 0x2C, 0x88, 0xB8, 0xD2, 0xF8, 0x6A, 0xED,
0x5D, 0x64, 0x4A, 0x5E, 0xA8, 0xA0, 0x59, 0x92, 0x7F, 0x89, 0xE6, 0xAE,
0xFB, 0x78, 0x3C, 0x79, 0x4F, 0x33, 0x6B, 0x88, 0xD2, 0xE1, 0x96, 0xE3,
0x2A, 0x1C, 0x4B, 0x1B, 0xAC, 0xB5, 0xAB, 0xF1, 0x62, 0xFC, 0x61, 0x2E,
0x24, 0xD1, 0xF1, 0x94, 0x6F, 0xF1, 0xA4, 0x12, 0xAD, 0x2C, 0xAF, 0x88,
0x1D, 0x54, 0x20, 0x38, 0xDD, 0x50, 0x7A, 0x28, 0xB0, 0x10, 0x35, 0xEC,
0x1F, 0x6C, 0xF4, 0xDA, 0xFB, 0x38, 0x92, 0x0A, 0x23, 0xA1, 0x5B, 0x3E,
0xAB, 0xFC, 0x71, 0xE8, 0x77, 0xA8, 0x6E, 0xD9, 0x24, 0x18, 0x73, 0x88,
0xA5, 0xD0, 0x2D, 0x9E, 0x55, 0xE0, 0x68, 0xF8, 0x1C, 0x88, 0x15, 0x6B,
0x9E, 0xE8, 0xB7, 0x56, 0x5A, 0xE0, 0x5B, 0xCA, 0xF6, 0x90, 0x00, 0x72,
0xC4, 0x39, 0x88, 0xD7, 0xBB, 0xC4, 0x39, 0xC0, 0xDC, 0xC2, 0x24, 0x0D,
0x15, 0x70, 0xF3, 0xE0, 0x89, 0x40, 0x30, 0x3E, 0xCD, 0xD0, 0x01, 0xA2,
0x71, 0x00, 0xC3, 0x0E, 0x41, 0x75, 0x6F, 0x44, 0x0F, 0x08, 0x03, 0x11,
0x92, 0x54, 0x7D, 0xE2, 0xEE, 0x47, 0x77, 0x0E, 0x9B, 0x20, 0x60, 0xA5,
0x08, 0xC8, 0xC6, 0x35, 0x89, 0xF8, 0x9B, 0x78, 0x98, 0x74, 0x6A, 0xFA,
0xBD, 0x74, 0xD7, 0x28, 0xB5, 0x00, 0x7F, 0x46, 0xF6, 0x78, 0xD0, 0xE6,
0xCC, 0x90, 0x26, 0xFE, 0x2E, 0x13, 0x01, 0xEB, 0x5F, 0xA7, 0x3C, 0xF5,
0x8A, 0xB9, 0xDC, 0x24, 0xDC, 0x29, 0x70, 0xE6, 0x05, 0xF2, 0xF5, 0x7D,
0x81, 0xF2, 0x87, 0xC2, 0x77, 0x42, 0x87, 0xCB, 0x09, 0xBA, 0xB4, 0x9D,
0x83, 0xBC, 0x8C, 0x61, 0xD6, 0x39, 0x0C, 0x72, 0x02, 0xD9, 0x6E, 0x5C,
0x0E, 0x29, 0xB2, 0x5E, 0x11, 0xC1, 0x55, 0x9C, 0x6E, 0x1B, 0xA9, 0x60,
0x75, 0xCD, 0x59, 0x54, 0x0F, 0x29, 0x94, 0xF3, 0x17, 0x89, 0xB8, 0xD4,
0xF0, 0xCA, 0xC3, 0x28, 0x7A, 0xEC, 0x00, 0x44, 0x95, 0xAB, 0xEF, 0x3C,
0x16, 0x5D, 0xCF, 0xEF, 0xC4, 0xC9, 0xEF, 0x40, 0x90, 0xB0, 0x36, 0xC4,
0x36, 0x39, 0x23, 0x66, 0x41, 0xF8, 0xDC, 0xE5, 0x25, 0x92, 0xB6, 0xB7,
0xB0, 0xBF, 0x44, 0xB8, 0x50, 0x7E, 0x46, 0x8E, 0xC0, 0xC8, 0xB2, 0x25,
0xBF, 0xD6, 0x6B, 0xA5, 0x91, 0xBA, 0x3D, 0xAA, 0x92, 0xF0, 0x84, 0xED,
0x22, 0x81, 0xEE, 0x88, 0x56, 0x8F, 0x11, 0x8C, 0x29, 0xB4, 0xAA, 0xC6,
0x81, 0x10, 0x4D, 0x53, 0xBE, 0x60, 0xCF, 0xF1, 0x5E, 0xE2, 0x65, 0xC3,
0x02, 0xE9, 0x6D, 0xE0, 0x18, 0x6F, 0xE4, 0x53, 0x5C, 0x36, 0xC7, 0x91,
0xC4, 0x38, 0x34, 0xDC, 0x2D, 0xC9, 0x09, 0x12, 0x3C, 0x30, 0xFC, 0x2F,
0x7A, 0xB0, 0x03, 0xFA, 0x4A, 0xD7, 0xDB, 0x82, 0x95, 0xE9, 0x76, 0x2F,
0x5C, 0xF2, 0xF2, 0xFB, 0x80, 0xA6, 0xF2, 0xC4, 0x9B, 0xDE, 0xE7, 0x91,
0xF5, 0x5E, 0x9F, 0x18, 0x63, 0x51, 0xD6, 0x9E, 0x40, 0x79, 0x61, 0x2E,
0x7B, 0x79, 0xC6, 0xFE, 0x85, 0xE9, 0x66, 0xDB, 0x2C, 0xC1, 0xB1, 0x96,
0x5E, 0x6A, 0xA7, 0xEB, 0x20, 0xD8, 0xCC, 0xC7, 0xBF, 0x24, 0xD0, 0x41,
0x4D, 0x97, 0x88, 0x91, 0xDA, 0xE0, 0x00, 0xEC, 0xAD, 0x68, 0x31, 0x84,
0xB1, 0xDC, 0x6B, 0x44, 0xDE, 0x90, 0x7A, 0x89, 0x12, 0x54, 0xDE, 0x3B,
0x2B, 0xA0, 0xD3, 0xE5, 0xCF, 0x38, 0xF4, 0x3E, 0xC1, 0xF0, 0x61, 0x3D,
0xB1, 0x39, 0xD4, 0xDC, 0xAC, 0x62, 0xB3, 0x0F, 0xF2, 0x09, 0x1D, 0xDE,
0x90, 0x0F, 0x7E, 0x52, 0xE8, 0x96, 0xEF, 0x3F, 0xD5, 0x98, 0xFC, 0x84,
0xEA, 0xB5, 0x06, 0xF2, 0xF6, 0xB0, 0xB3, 0x87, 0x58, 0xF2, 0x1F, 0xB0,
0x58, 0x7A, 0x0A, 0x17, 0xB0, 0xC1, 0x6D, 0xEA, 0xE1, 0x61, 0xB3, 0x89,
0x29, 0xAF, 0x93, 0x19, 0xD6, 0x10, 0x21, 0x13, 0x99, 0x55, 0x29, 0x86,
0x75, 0x7A, 0xEE, 0x1B, 0xA7, 0xEF, 0xD6, 0x2C, 0x21, 0xA3, 0xB8, 0xC8,
0xA3, 0x78, 0x19, 0x83, 0x87, 0xE6, 0xB9, 0x34, 0x10, 0x19, 0x8B, 0x22,
0xAE, 0xFE, 0x61, 0x47, 0x6B, 0x10, 0x60, 0x6D, 0x85, 0x56, 0x91, 0xD4,
0x43, 0x31, 0x4B, 0x2A, 0xBB, 0x59, 0x4B, 0xC1, 0xBF, 0x3E, 0xBE, 0xD5,
0x96, 0x9B, 0x7E, 0xF4, 0x01, 0x8B, 0xB0, 0x6F, 0x91, 0x36, 0xB3, 0x09,
0xDB, 0xCD, 0xA6, 0x89, 0x5A, 0x65, 0xAE, 0xA9, 0xF0, 0x86, 0xAB, 0x2E,
0x9D, 0x51, 0x01, 0xB1, 0x5A, 0xB9, 0x4E, 0x9C, 0x60, 0x51, 0xC1, 0x30,
0x34, 0x99, 0x71, 0x06, 0x9A, 0x91, 0x1D, 0xBB, 0x35, 0xAD, 0xA6, 0x4F,
0x74, 0xE0, 0x35, 0x69, 0x4E, 0xD7, 0x79, 0x36, 0x4E, 0x6B, 0x4F, 0x3A,
0x6A, 0xF3, 0x13, 0x7E, 0x52, 0x1B, 0x88, 0xF6, 0xF9, 0x88, 0x5D, 0x5C,
0x2F, 0x0E, 0x24, 0x60, 0xD6, 0xE4, 0x6A, 0xF8, 0x2B, 0xA3, 0x35, 0xDD,
0xE2, 0xC8, 0x91, 0x5F, 0x04, 0x62, 0xAC, 0x76, 0xD1, 0x3C, 0x23, 0xA1,
0xFD, 0xD5, 0x30, 0x4A, 0x4A, 0x40, 0xEB, 0xE5, 0x87, 0x98, 0x4B, 0x56,
0xD1, 0x60, 0x44, 0x16, 0x9C, 0x99, 0xBF, 0xC2, 0x3B, 0x05, 0x06, 0x04,
0x4F, 0x10, 0xB8, 0x9A, 0x2E, 0x60, 0x90, 0xB2, 0x87, 0x98, 0x63, 0xB2,
0xB6, 0xE8, 0x59, 0xFA, 0x12, 0xA0, 0x9F, 0x0F, 0x0D, 0x00, 0x6C, 0x1C,
0xD3, 0x7B, 0x77, 0xFE, 0xB0, 0x80, 0x24, 0xC8, 0x48, 0xF8, 0xD6, 0xE9,
0x28, 0x1C, 0x71, 0x0C, 0x0A, 0xE0, 0x22, 0x11, 0xFC, 0x20, 0xB1, 0x98,
0xFD, 0x29, 0xF9, 0xFB, 0x05, 0xDC, 0xC5, 0x3A, 0xC6, 0x5C, 0xC8, 0x8E,
0xC5, 0xF9, 0x90, 0x0C, 0x8D, 0x83, 0x70, 0xEB, 0x57, 0x45, 0x44, 0xA4,
0x62, 0x9B, 0x6B, 0xAE, 0xF1, 0xF0, 0xD7, 0x12, 0x04, 0xA0, 0xF9, 0x73,
0xC9, 0x3C, 0x07, 0x0E, 0x12, 0xB0, 0x89, 0xEB, 0x64, 0x6F, 0xDB, 0xB4,
0xDF, 0xB9, 0x3F, 0x22, 0x81, 0xB4, 0x17, 0x7B, 0x4D, 0x7C, 0x4D, 0x7C,
0x04, 0x24, 0x06, 0xEB, 0xA0, 0x08, 0xD0, 0x7C, 0x5F, 0xC9, 0x05, 0xBC,
0x93, 0xA9, 0x50, 0x23, 0xCC, 0xF4, 0x1E, 0xFF, 0x5E, 0x5E, 0x3C, 0xC6,
0xDA, 0x91, 0xA4, 0xE8, 0xC6, 0xE6, 0x56, 0x4C, 0xFD, 0x94, 0xC0, 0x65,
0xA0, 0xEB, 0x72, 0x47, 0x49, 0x4B, 0x91, 0x27, 0xA3, 0xA2, 0xA5, 0x84,
0x9B, 0xF6, 0x14, 0xAC, 0x00, 0x80, 0x78, 0x61, 0x25, 0x8F, 0xCE, 0x79,
0x9E, 0xB7, 0x2C, 0xB1, 0x5C, 0x46, 0xDC, 0x28, 0x4B, 0xEE, 0x42, 0xFE,
0xF1, 0x4C, 0xCD, 0x55, 0x88, 0x06, 0xA7, 0xBD, 0xC6, 0x66, 0x62, 0xAA,
0x8D, 0x84, 0x68, 0x6E, 0x91, 0xA4, 0xA6, 0x62, 0x24, 0x20, 0x7A, 0xFD,
0xCF, 0x08, 0xCB, 0xB2, 0x34, 0xED, 0x19, 0x5C, 0xA7, 0xF1, 0xBD, 0x19,
0xDF, 0x26, 0xD1, 0x9D, 0x47, 0xC4, 0x52, 0xB8, 0x7C, 0xAB, 0x3B, 0x27,
0xB5, 0xBB, 0xAB, 0x90, 0x31, 0x87, 0x76, 0xB2, 0xB5, 0x21, 0x24, 0x20,
0x0E, 0xDE, 0xF3, 0xF9, 0xDE, 0xA3, 0x18, 0x1C, 0x4D, 0x1E, 0x77, 0x59,
0x12, 0x92, 0x82, 0xAC, 0xB8, 0xB5, 0x92, 0x21, 0x46, 0x8F, 0x93, 0xBA,
0x0F, 0x46, 0x95, 0xF0, 0x0E, 0x37, 0xED, 0xC6, 0xB1, 0x08, 0x39, 0xB7,
0xDD, 0xDC, 0x1C, 0xA3, 0x1C, 0x20, 0xA4, 0x84, 0xFC, 0x70, 0x68, 0xF7,
0xEA, 0xBD, 0x37, 0xE1, 0xA3, 0xB3, 0x85, 0xC7, 0xD4, 0x7A, 0xFB, 0x69,
0x85, 0x2F, 0xF6, 0x1C, 0xE6, 0xC7, 0x66, 0x9B, 0x2B, 0xD9, 0xF0, 0xEC,
0xE5, 0xAD, 0x83, 0x90, 0x37, 0xC3, 0x93, 0x5F, 0xD4, 0xFC, 0xCD, 0x5A,
0x69, 0xA8, 0xE1, 0xDB, 0xBE, 0x20, 0x7A, 0x63, 0x5F, 0xA9, 0x7B, 0x6E,
0xBC, 0x7F, 0xC2, 0xFF, 0x8B, 0x55, 0xE6, 0x4A, 0x73, 0xAD, 0x2B, 0x04,
0xC2, 0xC7, 0x5C, 0x45, 0xBD, 0x8C, 0x09, 0x98, 0x1D, 0x30, 0xFF, 0x55,
0x89, 0xE0, 0x66, 0xCD, 0xEF, 0xE9, 0xED, 0xBC, 0xA8, 0x77, 0xBB, 0x21,
0xD6, 0x81, 0x80, 0xE6, 0x69, 0x7D, 0xB9, 0x9C, 0x7C, 0x8B, 0x27, 0x4D,
0x1B, 0xE4, 0xE2, 0xCE, 0x39, 0x44, 0x5B, 0x1F, 0xB9, 0xA0, 0x53, 0x81,
0x2E, 0x75, 0x28, 0x91, 0xA2, 0x28, 0x54, 0x14, 0x99, 0x4C, 0x06, 0xFC,
0xFE, 0x08, 0xF7, 0x98, 0xBE, 0xA0, 0x20, 0xE0, 0x38, 0x40, 0xEE, 0x44,
0xD6, 0xC8, 0xA5, 0xA9, 0x80, 0xF2, 0x32, 0x4A, 0x09, 0xD8, 0xF6, 0x2A,
0x5E, 0x00, 0x5B, 0xDE, 0x43, 0x48, 0x0D, 0xB8, 0xFB, 0x40, 0x3C, 0x50,
0x53, 0xF8, 0xC7, 0x60, 0x66, 0x38, 0xD0, 0x06, 0x9B, 0xB8, 0x2C, 0x50,
0x76, 0x40, 0xF6, 0x16, 0xF1, 0x39, 0x62, 0x63, 0x20, 0xBB, 0x5C, 0xB7,
0x52, 0x68, 0x79, 0xB8, 0xD1, 0xC4, 0x0A, 0x73, 0x6D, 0x9D, 0xDC, 0x0A,
0xA6, 0xF8, 0x47, 0x8E, 0x5D, 0x60, 0xF3, 0x96, 0x92, 0x20, 0xFB, 0xF6,
0xB9, 0x80, 0x62, 0xBA, 0x10, 0x80, 0x1A, 0x32, 0xBD, 0x00, 0x9B, 0x80,
0xC2, 0xE0, 0x0E, 0xAE, 0xAB, 0xC8, 0xD9, 0x76, 0x11, 0x90, 0xF8, 0x66,
0x9E, 0x30, 0xF5, 0x66, 0x6E, 0x00, 0x09, 0xA0, 0x9A, 0x88, 0xA9, 0xD4,
0x33, 0xC8, 0x76, 0xE2, 0x7B, 0x68, 0xDC, 0xDC, 0x70, 0x20, 0xDD, 0xC8,
0xE6, 0x00, 0x10, 0xB0, 0x48, 0xD8, 0x29, 0xF4, 0x0A, 0xA0, 0xAC, 0x98,
0x04, 0x20, 0x39, 0x6A, 0xD2, 0x68, 0x66, 0xEC, 0xF5, 0xF8, 0xA3, 0xFA,
0x90, 0x50, 0xB7, 0xA2, 0x14, 0x80, 0x6C, 0xCE, 0xC2, 0x1C, 0xA4, 0xF2,
0x87, 0xE8, 0xA7, 0x9A, 0x86, 0x30, 0x0C, 0xEC, 0x05, 0x80, 0x8F, 0x4A,
0x0A, 0xFC, 0x6F, 0xD0, 0x09, 0xB0, 0x0B, 0x9C, 0xEA, 0xDC, 0xB2, 0x52,
0x64, 0xA0, 0x95, 0x1C, 0x31, 0x78, 0xBC, 0xDC, 0xCB, 0xA8, 0x0F, 0xB6,
0xB8, 0x64, 0xB1, 0xE4, 0xD9, 0x20, 0x4B, 0xAA, 0x14, 0xA8, 0xCB, 0xA0,
0x90, 0x10, 0x2C, 0x85, 0x83, 0x5B, 0xA1, 0xEA, 0xE6, 0xBC, 0x58, 0x7B,
0xB3, 0x5A, 0xD0, 0x93, 0x2A, 0x49, 0x88, 0xFF, 0x1A, 0xEC, 0x8C, 0x7F,
0xB2, 0x35, 0x20, 0x2C, 0x86, 0x04, 0x40, 0x22, 0x76, 0x09, 0x20, 0x89,
0xC0, 0xE6, 0x88, 0x66, 0xBA, 0x0B, 0x10, 0x38, 0xAA, 0x3D, 0x08, 0xAE,
0x82, 0x66, 0xC0, 0xE8, 0x0A, 0x16, 0x30, 0x69, 0xE2, 0xB2, 0x90, 0xDB,
0xAE, 0xF7, 0xFC, 0x79, 0x48, 0xEF, 0xA0, 0x3A, 0xC7, 0xB0, 0x68, 0x60,
0x9B, 0x4E, 0x20, 0x58, 0x55, 0xA8, 0xAC, 0xA5, 0xE1, 0xA2, 0xA0, 0x5C,
0x34, 0x34, 0x94, 0x4D, 0xFA, 0x0A, 0x90, 0x99, 0xD2, 0x9B, 0xB4, 0x42,
0x46, 0x7D, 0x86, 0xEC, 0x8E, 0x0C, 0x04, 0xC8, 0x9A, 0xBA, 0x0B, 0xE8,
0xE8, 0xDF, 0x4E, 0xED, 0x5F, 0xF7, 0x5C, 0x2A, 0x12, 0x01, 0xA2, 0xD9,
0x03, 0xD2, 0x5F, 0x73, 0xBF, 0x1C, 0x18, 0xC5, 0x0C, 0xCE, 0xC4, 0x97,
0xA5, 0x36, 0xF8, 0xAF, 0x9E, 0x06, 0x40, 0x46, 0x0F, 0xEF, 0xC5, 0xA7,
0xC5, 0xAD, 0x87, 0x62, 0x4B, 0xF2, 0xB4, 0x34, 0xEB, 0xCD, 0x71, 0xAC,
0x7B, 0x7D, 0x31, 0x4F, 0xEA, 0xA5, 0xD8, 0xA7, 0x94, 0x35, 0xF4, 0x59,
0x59, 0x4D, 0x03, 0x5F, 0x9F, 0xCF, 0xCB, 0xF8, 0x05, 0x12, 0x3C, 0x32,
0x9F, 0x42, 0x9C, 0xB0, 0x12, 0x20, 0x24, 0xD3, 0x79, 0x1E, 0x80, 0x53,
0x60, 0xC5, 0xDB, 0x92, 0xDD, 0xA6, 0x05, 0xD4, 0x2F, 0x02, 0x60, 0x94,
0x0C, 0x67, 0xE0, 0x55, 0x00, 0x7B, 0x02, 0xAE, 0x8B, 0xDB, 0x71, 0x99,
0xB9, 0xE6, 0xFA, 0xA1, 0xB1, 0x84, 0xDC, 0xCF, 0xC9, 0xC8, 0x50, 0x7A,
0x2C, 0x7A, 0xBC, 0xA5, 0xC6, 0x8E, 0x53, 0x34, 0x87, 0xD0, 0xAC, 0xDD,
0xB0, 0x28, 0xFF, 0x2E, 0x1A, 0x78, 0xE3, 0xB7, 0x4E, 0x98, 0x0F, 0xD1,
0x9B, 0x87, 0x4F, 0xDE, 0x25, 0x33, 0x4C, 0x4C, 0xFC, 0x3F, 0xB4, 0xFE,
0xC8, 0x70, 0xBC, 0x6F, 0xC2, 0xBA, 0x7F, 0x80, 0x72, 0xE1, 0x21, 0x8F,
0x1F, 0x13, 0x78, 0xB3, 0x6A, 0xAD, 0x3B, 0x09, 0xD0, 0x0E, 0x75, 0xFC,
0xD0, 0x39, 0x20, 0x4E, 0xA1, 0x8B, 0x3C, 0x5D, 0x99, 0x38, 0xDD, 0x2B,
0x58, 0x78, 0x5A, 0x81, 0x9E, 0x8B, 0xB6, 0x3E, 0xAC, 0xFF, 0x6B, 0x0E,
0xFC, 0x5C, 0x58, 0x64, 0xF4, 0x0D, 0xAC, 0x4D, 0x64, 0x26, 0xC4, 0x20,
0x16, 0xE7, 0x6C, 0xDB, 0x18, 0xFB, 0xB0, 0xF3, 0xF6, 0xBB, 0x34, 0x71,
0xC4, 0x34, 0x68, 0x33, 0xFD, 0x6C, 0x6C, 0x49, 0x7E, 0x5F, 0x74, 0xBC,
0x74, 0x74, 0x6C, 0xEF, 0xFF, 0x2D, 0x9F, 0xAD, 0x90, 0x58, 0xFC, 0x4E,
0x12, 0x60, 0x5D, 0x1A, 0xAE, 0x80, 0xF4, 0x5A, 0x6A, 0x70, 0xA4, 0xCB,
0xA8, 0x10, 0xB3, 0xAC, 0x3D, 0x15, 0x80, 0xB6, 0x94, 0x8D, 0x6C, 0xBF,
0x5C, 0x7B, 0xB0, 0x5B, 0xBB, 0x92, 0x8F, 0x47, 0x10, 0x29, 0x55, 0x95,
0xC3, 0xC1, 0xB5, 0x87, 0x49, 0x1F, 0xDF, 0xB7, 0x0E, 0x98, 0x4C, 0xE2,
0x1C, 0xA1, 0xF0, 0x6D, 0x24, 0x1F, 0xF4, 0x81, 0x32, 0x30, 0x7D, 0x82,
0x51, 0x8A, 0x90, 0xC4, 0x48, 0x33, 0x5C, 0x2E, 0x70, 0xC7, 0x68, 0x25,
0x4E, 0x3A, 0x40, 0xE7, 0x91, 0x0B, 0x27, 0x25, 0x12, 0x5D, 0x21, 0xAC,
0xF7, 0xA2, 0x96, 0xC4, 0xD1, 0xD1, 0x78, 0x57, 0xA0, 0xC2, 0x04, 0x6B,
0x23, 0x26, 0x03, 0x04, 0xAA, 0x8B, 0xAB, 0x23, 0xC8, 0x51, 0x1C, 0x64,
0x9C, 0xF1, 0x45, 0x1F, 0x9A, 0xAB, 0xF0, 0x88, 0xA2, 0x13, 0x7D, 0x37,
0xEF, 0x9B, 0x9C, 0x42, 0x12, 0x02, 0xF3, 0xBF, 0x1D, 0x1C, 0x85, 0x04,
0xDE, 0x3B, 0x18, 0x4C, 0xED, 0x86, 0x97, 0x86, 0xDB, 0x2B, 0x24, 0xEF,
0xB8, 0x63, 0xCE, 0xD2, 0xCC, 0x79, 0x4E, 0xAD, 0x18, 0x44, 0x2B, 0x6D,
0x73, 0x91, 0x16, 0x43, 0x44, 0xAE, 0xAE, 0x16, 0x15, 0x9A, 0xDF, 0xE5,
0xCF, 0x34, 0xB6, 0x54, 0x4A, 0x45, 0xB1, 0xA2, 0xD0, 0x0F, 0x77, 0x4E,
0x21, 0x6D, 0x68, 0xEC, 0xA8, 0x63, 0x10, 0xAF, 0xAC, 0x6B, 0x78, 0x74,
0xEE, 0xAC, 0x51, 0x5E, 0x7A, 0x2F, 0x20, 0xD1, 0xCD, 0x86, 0xBF, 0x5E,
0xBC, 0x9A, 0x2E, 0xF2, 0x6B, 0x43, 0x77, 0x09, 0x73, 0x8B, 0x70, 0x93,
0x33, 0xBA, 0x7F, 0x94, 0xA9, 0x4E, 0x46, 0x22, 0x10, 0xEF, 0xEA, 0x81,
0x9A, 0x0F, 0x82, 0xEB, 0x4F, 0x0F, 0xCF, 0xEB, 0xA0, 0x03, 0x90, 0xF6,
0x92, 0xCD, 0xCC, 0x4D, 0xDA, 0x8F, 0x87, 0xA6, 0xF1, 0x55, 0x20, 0x48,
0xFE, 0xD2, 0x69, 0xB2, 0xDE, 0xC9, 0xFC, 0xC8, 0xE2, 0x26, 0x6C, 0x20,
0x0E, 0x0E, 0x73, 0x63, 0x8C, 0xA9, 0x5B, 0xCF, 0x65, 0x39, 0x5C, 0x47,
0xF4, 0x4A, 0x1B, 0xC6, 0xC0, 0xA5, 0xD0, 0x53, 0xE8, 0x31, 0x6D, 0xD0,
0xEA, 0x3D, 0x49, 0x9C, 0x2C, 0x38, 0x54, 0x01, 0xE4, 0x90, 0x91, 0x41,
0x77, 0x20, 0xA8, 0x40, 0x01, 0x80, 0xAD, 0xBD, 0x96, 0x80, 0xC4, 0xC4,
0x04, 0x6E, 0xC0, 0xED, 0x76, 0x8E, 0xE0, 0x85, 0xAA, 0xC2, 0x10, 0x5B,
0x4C, 0x51, 0xC1, 0x1E, 0x86, 0x6C, 0x50, 0x58, 0xBC, 0x59, 0x55, 0x81,
0x31, 0x5A, 0x5C, 0xD5, 0xBA, 0x72, 0xD0, 0x2D, 0x49, 0x69, 0x03, 0xBF,
0xD8, 0x11, 0xA9, 0x38, 0x18, 0x80, 0x8A, 0x76, 0xBC, 0x99, 0xB9, 0xE5,
0x0B, 0x38, 0xB1, 0xF6, 0x0C, 0x2E, 0x1B, 0xDA, 0xA2, 0xA5, 0x5F, 0x51,
0x95, 0x60, 0xB8, 0x9B, 0x4C, 0x90, 0x44, 0x24, 0x14, 0x91, 0x8B, 0x15,
0x33, 0xDB, 0xE9, 0xDD, 0x14, 0x6C, 0x88, 0x84, 0xFF, 0xD2, 0x93, 0xA3,
0xDC, 0x7E, 0x04, 0xC3, 0x92, 0xF2, 0x57, 0x44, 0x4F, 0xBD, 0x08, 0x03,
0xB0, 0x8D, 0x05, 0xA2, 0x19, 0x4A, 0x9C, 0xF8, 0x76, 0x8F, 0x19, 0x5B,
0x65, 0x6B, 0x24, 0xD7, 0x09, 0x94, 0xB7, 0x21, 0x03, 0x94, 0x0C, 0xB6,
0x08, 0x14, 0x3B, 0xA5, 0x60, 0x22, 0x68, 0x93, 0xA2, 0xCE, 0xB5, 0x06,
0xBC, 0x00, 0x84, 0x70, 0x9C, 0x62, 0xB8, 0x8B, 0xB2, 0x21, 0x0D, 0x26,
0x60, 0xC3, 0x60, 0xFA, 0xEC, 0xBD, 0x38, 0xB5, 0x8E, 0x99, 0x9C, 0x0A,
0x2C, 0xC8, 0x40, 0x98, 0x60, 0x70, 0x60, 0xC2, 0x20, 0x60, 0xDD, 0xD9,
0x9E, 0x3B, 0x61, 0x9C, 0x38, 0xF5, 0xD9, 0x8E, 0x82, 0xC8, 0xD3, 0x27,
0x95, 0x13, 0x88, 0xEF, 0x29, 0xEF, 0xCD, 0x34, 0x40, 0x82, 0x15, 0x65,
0xDC, 0x78, 0x09, 0x7A, 0x87, 0x38, 0xD3, 0xB5, 0x39, 0x19, 0x51, 0xCB,
0x5B, 0xD0, 0x7B, 0xFF, 0x15, 0xC5, 0x39, 0x97, 0x8A, 0x69, 0xD7, 0xDB,
0x1F, 0x48, 0x47, 0x25, 0x41, 0x12, 0xA4, 0xED, 0x0C, 0xB0, 0x20, 0x7B,
0x95, 0x4D, 0x91, 0x4B, 0x83, 0x9D, 0xF8, 0x48, 0x77, 0xD7, 0x48, 0xAB,
0x37, 0x75, 0x65, 0xBC, 0x60, 0x1E, 0x29, 0x17, 0x26, 0x74, 0xE8, 0xE1,
0xD7, 0xA3, 0x91, 0xCB, 0x06, 0x5A, 0xE4, 0x63, 0x58, 0xB5, 0x42, 0x2F,
0xAC, 0x73, 0x28, 0xB7, 0x0F, 0xF0, 0x22, 0xC5, 0x8B, 0xC9, 0xE0, 0x6F,
0xE1, 0x8C, 0x86, 0x2F, 0xF2, 0x3B, 0xA1, 0x56, 0x6B, 0x36, 0x21, 0xCA,
0x41, 0x3E, 0xA6, 0x31, 0xE3, 0xA0, 0x23, 0xCD, 0x87, 0x0E, 0xD9, 0x49,
0x1B, 0x04, 0x13, 0x35, 0x7F, 0x2A, 0xD7, 0x15, 0x51, 0xF6, 0xA4, 0x90,
0x76, 0xD0, 0xA0, 0xCC, 0x25, 0x4D, 0x39, 0x88, 0x73, 0x81, 0xA1, 0x23,
0x89, 0xB4, 0xE7, 0x54, 0xBB, 0x57, 0xB9, 0x5B, 0x91, 0xB7, 0x64, 0x46,
0xBD, 0x75, 0x81, 0x1D, 0x26, 0x9B, 0x89, 0x09, 0x3F, 0xAF, 0x56, 0x8C,
0x73, 0xF5, 0x8E, 0x9A, 0x10, 0x9D, 0x28, 0x7A, 0x6E, 0x60, 0xDC, 0xA9,
0xE2, 0x5E, 0x88, 0xD4, 0x3B, 0xC2, 0x98, 0xA5, 0xC2, 0xCA, 0x48, 0xA3,
0x12, 0x98, 0x04, 0xD2, 0x36, 0x3D, 0x68, 0xD3, 0xC6, 0xEB, 0x20, 0xFA,
0x12, 0xC7, 0x20, 0x78, 0xC2, 0x7D, 0x35, 0x7F, 0x9A, 0x8E, 0xDD, 0x4E,
0xBF, 0x6A, 0x78, 0xC5, 0x60, 0xC2, 0x80, 0xD6, 0x5F, 0x51, 0xF4, 0xF5,
0x76, 0x12, 0xE4, 0x44, 0xD0, 0x3A, 0x20, 0xEB, 0x92, 0xC5, 0x42, 0xC8,
0xE8, 0x0F, 0xAA, 0x59, 0xAC, 0x12, 0x06, 0x7D, 0xB0, 0x74, 0xFC, 0xA5,
0xEE, 0xF8, 0xF0, 0xBD, 0xD2, 0xA1, 0xA4, 0x9D, 0xE8, 0x38, 0x08, 0x54,
0xF8, 0x4C, 0x88, 0x78, 0x05, 0x16, 0x4C, 0x15, 0x61, 0x1B, 0x58, 0xE4,
0x6E, 0x5E, 0x90, 0xD9, 0x04, 0x52, 0x31, 0x90, 0xBB, 0x62, 0x19, 0xAC,
0xE3, 0x66, 0x68, 0xD3, 0x27, 0x02, 0x39, 0xE5, 0x71, 0x4A, 0x77, 0x0D,
0x60, 0xD0, 0xD0, 0x70, 0xDC, 0xB7, 0x5D, 0xC8, 0x85, 0xC0, 0x3E, 0x0C,
0xC3, 0x41, 0xC2, 0x79, 0x31, 0xA3, 0x6D, 0x11, 0x48, 0x43, 0x30, 0x89,
0xFA, 0xD9, 0x68, 0xC8, 0xC9, 0x2E, 0x4B, 0x88, 0x9E, 0x3F, 0x48, 0xA2,
0x37, 0x0B, 0x7A, 0x1C, 0x5F, 0x2D, 0x71, 0x7D, 0x5C, 0x4C, 0xBC, 0x78,
0x4C, 0x2E, 0x30, 0x6D, 0x51, 0xF5, 0xAA, 0xA1, 0x48, 0x78, 0x26, 0x95,
0x6D, 0x38, 0x18, 0x27, 0x64, 0x50, 0x40, 0xE1, 0x30, 0x63, 0x41, 0xF2,
0x37, 0x35, 0xB1, 0x1D, 0xB8, 0x8B, 0x28, 0x69, 0x09, 0x9E, 0x06, 0x12,
0xA2, 0xA1, 0x05, 0x76, 0x66, 0x0C, 0xA6, 0x3E, 0x6F, 0x74, 0x5E, 0xC3,
0xBB, 0xED, 0x46, 0x04, 0x6A, 0x2F, 0x6C, 0x1C, 0x35, 0x6C, 0x08, 0x62,
0x4F, 0x9D, 0x8B, 0xA4, 0x0C, 0x84, 0xB9, 0xA2, 0x76, 0x00, 0x0C, 0x6F,
0x75, 0x0B, 0x37, 0x26, 0xF1, 0x01, 0xA3, 0x7E, 0xD4, 0x94, 0x00, 0xCA,
0x8A, 0x5D, 0x4C, 0xC3, 0x10, 0x6B, 0x68, 0x18, 0x09, 0xE9, 0x04, 0x23,
0x40, 0xE6, 0xF0, 0x70, 0xF0, 0xC0, 0xE4, 0x55, 0x00, 0x01, 0x20, 0x51,
0x55, 0x81, 0xE9, 0x90, 0x95, 0x77, 0xED, 0x52, 0xC6, 0x4B, 0xA4, 0x21,
0x26, 0x13, 0x54, 0x8E, 0xC8, 0xD7, 0xC0, 0x0E, 0x1C, 0xC9, 0xA0, 0x60,
0x61, 0x74, 0x63, 0xCC, 0x2C, 0xBB, 0x6F, 0x08, 0x5F, 0x1C, 0xF0, 0xD2,
0x00, 0x30, 0x00, 0x14, 0x52, 0xF3, 0x08, 0x56, 0x90, 0x44, 0xA0, 0xBC,
0xDE, 0xB9, 0x00, 0x24, 0x10, 0x76, 0xA4, 0x73, 0x96, 0xFB, 0xF4, 0x70,
0x28, 0x5C, 0xE8, 0x4C, 0xB0, 0x78, 0xA4, 0x9E, 0xDA, 0xF0, 0x80, 0x91,
0x48, 0x3D, 0x2C, 0xBA, 0x70, 0x68, 0x10, 0x2C, 0x35, 0x2C, 0x03, 0x70,
0xED, 0xE6, 0xBC, 0x58, 0x1B, 0x6A, 0xFE, 0x3C, 0xE0, 0x8F, 0xB6, 0xEF,
0x71, 0x93, 0xEA, 0x8C, 0x77, 0xB2, 0x15, 0x00, 0x2A, 0x46, 0xD0, 0x40,
0x22, 0x76, 0xE9, 0x00, 0x87, 0x80, 0xDA, 0x88, 0x66, 0xBA, 0xFF, 0x10,
0x38, 0x1A, 0x3C, 0x07, 0xAE, 0xF6, 0x66, 0xC0, 0x42, 0x0A, 0x16, 0x10,
0x08, 0xE2, 0xB2, 0x70, 0x0F, 0xAC, 0xF7, 0xDC, 0x9B, 0x46, 0xEF, 0x80,
0x24, 0x17, 0x25, 0xB8, 0x49, 0x0A, 0xA1, 0x4E, 0x50, 0x50, 0xA8, 0xAC,
0x9D, 0xDC, 0xA2, 0x80, 0x5C, 0x28, 0x34, 0x74, 0x4D, 0xEE, 0x0A, 0x70,
0x99, 0x14, 0x91, 0xD4, 0x35, 0xCE, 0x50, 0x80, 0x84, 0x4E, 0x04, 0xE0,
0x88, 0x9A, 0xBA, 0x38, 0x90, 0xA8, 0x7B, 0x30, 0xF3, 0x8E, 0xAE, 0x80,
0xD8, 0x74, 0x01, 0x78, 0xE7, 0x32, 0x71, 0x1A, 0x83, 0x0A, 0x96, 0xCC,
0x83, 0x93, 0x83, 0x88, 0x97, 0x82, 0x14, 0x88, 0xD5, 0x58, 0xED, 0x60,
0xC7, 0xE4, 0xEF, 0xF4, 0xA7, 0xA2, 0xD8, 0x70, 0x35, 0x3C, 0x45, 0x9C,
0x07, 0xE2, 0xA0, 0x70, 0x57, 0x60, 0x50, 0x18, 0xE1, 0x72, 0x80, 0x60,
0xC0, 0x7C, 0xB6, 0x78, 0xEB, 0x16, 0xF6, 0xC0, 0x69, 0x86, 0x7A, 0x88,
0x83, 0xEC, 0x8C, 0xE0, 0xBD, 0x84, 0xBC, 0x84, 0x90, 0xD4, 0xCE, 0x08,
0xDE, 0x02, 0xC3, 0x64, 0xC9, 0x1E, 0xE2, 0x00, 0xA2, 0x20, 0x96, 0x50,
0xD4, 0x0C, 0x00, 0x81, 0xC9, 0xB0, 0xA3, 0x8C, 0xFA, 0xE4, 0xE8, 0xC0,
0xB4, 0xB8, 0xCB, 0xB4, 0x89, 0x04, 0xE6, 0xD8, 0xA2, 0x8E, 0x81, 0xFC,
0x85, 0xA0, 0xC4, 0x80, 0xF7, 0xD8, 0x28, 0xA0, 0x1B, 0x84, 0x95, 0x80,
0x24, 0xCA, 0x4C, 0x94, 0x9D, 0x7C, 0x44, 0x80, 0xAA, 0xC6, 0x82, 0xFC,
0x77, 0x34, 0xAB, 0x28, 0xA1, 0xE6, 0x1F, 0x04, 0xDE, 0x04, 0xCB, 0x00,
0x01, 0xB8, 0x26, 0x44, 0xF4, 0x82, 0xF4, 0x87, 0x1A, 0xC2, 0x55, 0x24,
0xFB, 0x30, 0xE1, 0x50, 0x8E, 0xFE, 0xC1, 0x5C, 0xAF, 0x40, 0xB6, 0x68,
0xF0, 0x60, 0x0E, 0x4C, 0xFB, 0x00, 0x39, 0x00, 0x1E, 0xE4, 0x8A, 0x1C,
0x2D, 0xDC, 0x48, 0x28, 0xCF, 0x0C, 0x62, 0x14, 0x72, 0x58, 0x86, 0x70,
0xF2, 0x68, 0xFF, 0x40, 0xF6, 0x2C, 0x01, 0x10, 0x0D, 0xAA, 0x2D, 0x4C,
0x4D, 0x44, 0xDC, 0x80, 0x90, 0xE4, 0xBC, 0x10, 0xCA, 0x00, 0xB0, 0x6F,
0xB9, 0xA2, 0x7B, 0x18, 0x26, 0x8F, 0x24, 0x40, 0x3C, 0x47, 0x1B, 0x24,
0xFE, 0x61, 0x17, 0x30, 0x8B, 0x71, 0xFD, 0x98, 0x45, 0x7B, 0xE1, 0x12,
0x1F, 0xCC, 0xFB, 0xEF, 0x96, 0x45, 0xBF, 0xE6, 0x6D, 0xC4, 0x79, 0x11,
0xBD, 0xB3, 0x9C, 0xCF, 0xFB, 0xE8, 0xC4, 0x68, 0xC2, 0xF4, 0x9D, 0x2A,
0xF8, 0x42, 0xFF, 0xED, 0x38, 0xF8, 0x34, 0x54, 0x2A, 0x88, 0xAF, 0x8E,
0x45, 0x00, 0x95, 0xC3, 0x0D, 0xB6, 0xA1, 0x54, 0x88, 0x52, 0x6B, 0xE0,
0xB7, 0xE6, 0xB1, 0x7C, 0xE0, 0xFC, 0x79, 0x80, 0x70, 0x04, 0xB7, 0x84,
0x80, 0x12, 0x40, 0xC0, 0x12, 0x9C, 0x4D, 0x44, 0xC2, 0xD0, 0xE7, 0x18,
0x9E, 0x3C, 0xA5, 0xF8, 0x24, 0x2C, 0x23, 0x60, 0x14, 0x7A, 0xF0, 0x18,
0x8A, 0xFA, 0x42, 0x18, 0x91, 0xF6, 0xCF, 0x7C, 0xA6, 0xB8, 0x5E, 0x00,
0x32, 0x28, 0x4C, 0x88, 0x00, 0xE0, 0xB8, 0xC0, 0x91, 0x6A, 0x36, 0x68,
0xB8, 0x88, 0xCC, 0xC0, 0x79, 0x82, 0xBF, 0xF8, 0xD2, 0x56, 0xBE, 0x88,
0xDB, 0x8A, 0xF3, 0x40, 0x4C, 0x78, 0x49, 0x80, 0xB8, 0xD0, 0x1D, 0x18,
0x4F, 0x60, 0x1C, 0x68, 0x84, 0xD6, 0xBB, 0x18, 0x4C, 0xD0, 0x16, 0x50,
0x96, 0x26, 0x01, 0xD8, 0xD1, 0x72, 0xCF, 0x88, 0xC5, 0x86, 0x72, 0x08,
0x61, 0xD4, 0xFF, 0x00, 0x62, 0xA2, 0x2C, 0xAC, 0x1C, 0xDA, 0x86, 0x68,
0x17, 0x1E, 0xAD, 0xE0, 0xC3, 0x86, 0x32, 0x70, 0x0B, 0x06, 0x49, 0x80,
0x42, 0x8A, 0x10, 0x80, 0xFA, 0x22, 0x0D, 0x00, 0xEB, 0x80, 0x62, 0x40,
0xAE, 0x7E, 0x5B, 0xA8, 0x58, 0xA6, 0x61, 0x30, 0x16, 0x36, 0x7E, 0xF0,
0xD2, 0xD6, 0xCE, 0xC0, 0xF5, 0xA0, 0x3A, 0xE8, 0xF3, 0x74, 0x23, 0x78,
0xBF, 0x52, 0xAB, 0x08, 0x94, 0x3C, 0x70, 0x80, 0x94, 0x88, 0x46, 0x00,
0x10, 0x30, 0xC8, 0x88, 0x59, 0x54, 0xAA, 0x20, 0xEC, 0x58, 0x44, 0xD0,
0xE9, 0x5A, 0xF2, 0x48, 0x95, 0x4C, 0x85, 0x88, 0x51, 0xAA, 0x90, 0x90,
0x74, 0xF3, 0x54, 0x00, 0xE8, 0xCE, 0x16, 0xE3, 0x95, 0xCA, 0xFD, 0xD4,
0xAF, 0xFA, 0x16, 0x93, 0xBA, 0x0E, 0x56, 0xD2, 0x6F, 0x76, 0xDB, 0x97,
0x4C, 0x99, 0x09, 0x4F, 0xF7, 0xEC, 0xBF, 0xE4, 0x6E, 0xC2, 0xDD, 0x31,
0x93, 0xF8, 0x75, 0xE0, 0xBB, 0xEC, 0x7E, 0xB0, 0xDE, 0x4C, 0x99, 0x97,
0x15, 0xF3, 0x9B, 0xA9, 0xAF, 0x7B, 0x93, 0xFC, 0x9B, 0xA4, 0x90, 0xF0,
0x8D, 0x9C, 0x80, 0xC4, 0xC0, 0x04, 0x6E, 0xC0, 0xAF, 0x72, 0x8E, 0xE0,
0x65, 0xAA, 0xC2, 0xF0, 0xC7, 0x04, 0xBC, 0x78, 0x89, 0x3C, 0x6C, 0x70,
0x50, 0x5C, 0x46, 0xEC, 0xA6, 0x2E, 0x5F, 0xC8, 0xD5, 0x5A, 0x6A, 0x70,
0x1A, 0xE0, 0xE6, 0x12, 0xC4, 0x04, 0x01, 0x41, 0xA8, 0xD0, 0x7F, 0x48,
0x72, 0xEC, 0x88, 0x50, 0xE4, 0xC8, 0x27, 0x50, 0xF5, 0xEC, 0xBE, 0xD4,
0xDA, 0x82, 0x35, 0x18, 0x61, 0xE0, 0xD4, 0x70, 0x9B, 0x28, 0x48, 0x00,
0x1F, 0xAC, 0x09, 0x40, 0x14, 0x06, 0xBC, 0x18, 0xD9, 0xB4, 0x54, 0x20,
0x82, 0xDA, 0xAA, 0x50, 0x8B, 0x7C, 0xF7, 0xBC, 0xFD, 0x2A, 0x6B, 0x08,
0x06, 0x0C, 0xF7, 0xA8, 0xFD, 0x48, 0x9E, 0x00, 0x64, 0xD6, 0x44, 0x3C,
0xF2, 0x0E, 0xD9, 0x18, 0x5F, 0x90, 0xA5, 0xBC, 0xD6, 0xE2, 0x55, 0xB0,
0xE3, 0xC0, 0xCE, 0xAC, 0x30, 0xA0, 0xE6, 0xF8, 0x1F, 0x00, 0x9D, 0x00,
0xA6, 0x9C, 0xD2, 0xE0, 0x89, 0x74, 0x68, 0x24, 0xF3, 0x54, 0xCA, 0x58,
0x8A, 0x88, 0x1E, 0x3C, 0xAA, 0x18, 0xEB, 0x00, 0x7E, 0xA4, 0xE5, 0xD8,
0x39, 0x46, 0x51, 0x58, 0x09, 0xCC, 0x4C, 0xF8, 0x50, 0x1C, 0x6C, 0x00,
0xC2, 0x00, 0x70, 0x20, 0xD8, 0x76, 0x37, 0x90, 0x2E, 0xF0, 0xB4, 0x70,
0x4C, 0x7E, 0xB7, 0x90, 0xE6, 0x34, 0x13, 0x68, 0x7F, 0xE2, 0xDF, 0x18,
0x30, 0x18, 0x6C, 0x44, 0xFC, 0x90, 0x18, 0xA0, 0x76, 0x66, 0x30, 0x90,
0x55, 0xD8, 0xB9, 0xE8, 0x82, 0x58, 0xC8, 0x38, 0x9F, 0xB4, 0x65, 0xD0,
0x4E, 0x8A, 0x61, 0x94, 0x7B, 0xBE, 0x49, 0x50, 0x8E, 0x42, 0x12, 0x7C,
0xEC, 0x3C, 0xAF, 0x00, 0x6B, 0xD8, 0xED, 0x28, 0xE1, 0x3A, 0x95, 0xB8,
0xE8, 0x16, 0xD7, 0x28, 0x9B, 0x7A, 0x05, 0xB0, 0x60, 0x14, 0xBD, 0xC0,
0xB0, 0xDC, 0x63, 0xA8, 0x80, 0x76, 0x40, 0x48, 0xCA, 0xE4, 0x11, 0xA0,
0x5A, 0xF0, 0xE3, 0x3C, 0xE6, 0xA4, 0xE9, 0x10, 0x54, 0xC4, 0xEF, 0x18,
0xC4, 0x66, 0xB0, 0xA0, 0x02, 0xDE, 0x0A, 0x44, 0x2D, 0x1A, 0xDB, 0x38,
0x2E, 0x28, 0xD6, 0xC0, 0x6A, 0xD8, 0x3C, 0x80, 0x00, 0xA0, 0x98, 0xE0,
0x6D, 0x26, 0xAE, 0x70, 0x58, 0x18, 0xFC, 0xD0, 0xD5, 0x1E, 0x2B, 0xE0,
0xAA, 0x52, 0xF6, 0x84, 0xA7, 0xB4, 0xCF, 0x80, 0xA1, 0xA2, 0x49, 0x1D,
0x39, 0x99, 0x8F, 0x90, 0x35, 0x8F, 0x76, 0x09, 0x57, 0xCE, 0x6A, 0xAC,
0x8E, 0xA0, 0x20, 0x96, 0x1A, 0xEA, 0x84, 0x97, 0x82, 0x78, 0xA2, 0x3E,
0x7A, 0xFE, 0xFF, 0x82, 0xEC, 0xEB, 0x69, 0xF5, 0x39, 0xBF, 0x0E, 0x6D,
0xCB, 0x0E, 0xD0, 0x23, 0xFF, 0x87, 0x74, 0xB4, 0xF0, 0x61, 0xE8, 0xB0,
0x01, 0xBF, 0xEB, 0x63, 0xC2, 0x3B, 0xB1, 0x32, 0x3D, 0x2A, 0xA1, 0x72,
0xBE, 0xEA, 0x4F, 0x5B, 0x6A, 0x9E, 0x2A, 0xB4, 0xE5, 0xD5, 0xB7, 0xDF,
0xAE, 0xB1, 0xC6, 0x7C, 0xD0, 0x03, 0xE9, 0xE4, 0x50, 0xD2, 0x3B, 0xD4,
0x3C, 0xAF, 0xC3, 0x70, 0x30, 0xA2, 0xB2, 0xBD, 0x45, 0x06, 0x7D, 0x14,
0xAA, 0xD9, 0xA1, 0x74, 0x3F, 0x82, 0x61, 0xD8, 0x7A, 0x3F, 0x26, 0x1C,
0xE2, 0xE9, 0xB7, 0xA0, 0xF4, 0x38, 0x53, 0x94, 0xF6, 0xF7, 0xED, 0x6A,
0xD5, 0xEB, 0x48, 0xA0, 0x64, 0x96, 0xA4, 0x20, 0x48, 0xA2, 0x0A, 0x20,
0x10, 0x88, 0xF3, 0x10, 0xFB, 0x06, 0x1E, 0x60, 0x18, 0xA4, 0x29, 0xC8,
0x8F, 0x5A, 0xF2, 0xB0, 0xAB, 0xC2, 0x1D, 0x64, 0xCB, 0xE4, 0x92, 0xD8,
0xE6, 0x7A, 0x34, 0x78, 0x0D, 0x38, 0x95, 0x00, 0x4F, 0x94, 0x87, 0xFC,
0x8F, 0x6A, 0x98, 0xF8, 0x0D, 0xCC, 0x0D, 0xC4, 0xAF, 0x4A, 0xA0, 0xA0,
0xDF, 0xE0, 0xD0, 0xC8, 0x39, 0xBA, 0x80, 0x28, 0xC0, 0x8C, 0x26, 0x08,
0x73, 0xCE, 0x26, 0x00, 0x61, 0xCE, 0x0A, 0x58, 0x0B, 0x1C, 0xEC, 0x10,
0x55, 0xF4, 0x1C, 0x5C, 0x10, 0xE4, 0xBE, 0xD0, 0x6E, 0x5A, 0xFB, 0xAC,
0xE1, 0x96, 0xF2, 0xE0, 0x92, 0xA0, 0x06, 0xB0, 0xB4, 0xFC, 0x00, 0x00,
0x88, 0xF0, 0x5B, 0x04, 0xEA, 0xF4, 0x28, 0xE0, 0x14, 0xD8, 0x83, 0xEC,
0x61, 0xD4, 0x96, 0xD0, 0x12, 0x76, 0xE9, 0x34, 0x3D, 0x20, 0xE4, 0x60,
0x3F, 0x78, 0x68, 0x60, 0x24, 0xD5, 0xED, 0x17, 0x04, 0x42, 0x2D, 0x9C,
0x95, 0xEC, 0x84, 0xC0, 0x5C, 0xEF, 0xD8, 0xA4, 0x9F, 0xC4, 0xC3, 0x50,
0x79, 0x6E, 0xB9, 0x0D, 0x34, 0x14, 0x23, 0x50, 0xF9, 0xD8, 0x16, 0xBC,
0xD4, 0x2A, 0x94, 0x00, 0xCA, 0x5A, 0x5D, 0x0C, 0xC3, 0xF0, 0x69, 0x28,
0x1E, 0xC6, 0xE9, 0x04, 0x17, 0x40, 0xE6, 0xF0, 0x70, 0xE0, 0xBE, 0xA4,
0x43, 0x00, 0x01, 0x00, 0x2E, 0x54, 0x1A, 0xA4, 0xE5, 0x0C, 0x88, 0x20,
0x17, 0x9C, 0x32, 0x9C, 0xA2, 0xB8, 0xB6, 0x08, 0x62, 0xC8, 0xD7, 0xC0,
0x06, 0x1C, 0xC9, 0xA0, 0x65, 0xE2, 0x75, 0x64, 0xC5, 0x54, 0xBC, 0x70,
0x10, 0x54, 0x1C, 0xF0, 0xBA, 0x00, 0x30, 0x00, 0xF8, 0x52, 0xF3, 0x08,
0x36, 0x90, 0x44, 0xA0, 0x5C, 0xDA, 0x53, 0xFC, 0xCE, 0x0C, 0x0F, 0xA0,
0x73, 0x96, 0xFB, 0xF4, 0x70, 0x28, 0x5C, 0xE8, 0x4C, 0xB0, 0x78, 0xA4,
0x9E, 0xDA, 0xF0, 0x80, 0x91, 0x48, 0x3D, 0x24, 0xBA, 0x68, 0x68, 0x10,
0xB3, 0xDC, 0xB9, 0xE4, 0x96, 0xD6, 0xF5, 0xF0, 0xBF, 0x0A, 0x4D, 0x78,
0x96, 0x6E, 0xBA, 0x78, 0x7C, 0xB4, 0x6B, 0x70, 0xBF, 0x28, 0xB1, 0x00,
0x2D, 0xBE, 0x89, 0x1C, 0x48, 0xDA, 0x43, 0x70, 0x7F, 0x0E, 0x59, 0xE4,
0xE0, 0x2C, 0x01, 0x00, 0xF0, 0xB4, 0x0F, 0xCC, 0x80, 0xDA, 0x40, 0xD0,
0x82, 0x2C, 0xD5, 0xFC, 0xF2, 0x10, 0xDF, 0x60, 0x2E, 0x0C, 0x2D, 0x28,
0x84, 0x5C, 0xBB, 0xD0, 0x74, 0x52, 0x70, 0x28, 0x7A, 0xC2, 0xD2, 0x70,
0xC9, 0x3E, 0xE7, 0xF4, 0xB6, 0x98, 0x4E, 0x80, 0xA2, 0x88, 0x2C, 0x78,
0x00, 0x60, 0x78, 0x00, 0x49, 0xE2, 0x26, 0x78, 0xF8, 0xA8, 0x2C, 0xE0,
0x31, 0xBA, 0x97, 0xC8, 0x82, 0x4E, 0x2E, 0x70, 0x43, 0xC2, 0xAB, 0xC0,
0x6C, 0x58, 0x91, 0x20, 0xF8, 0x90, 0x25, 0x68, 0x37, 0xE0, 0xFC, 0xE0,
0x64, 0xDE, 0x33, 0x88, 0x6C, 0x10, 0xC6, 0x78, 0xE6, 0xCE, 0x29, 0x68,
0x69, 0x9A, 0x87, 0x10, 0x5D, 0x8E, 0xC2, 0x18, 0xB9, 0x24, 0xF7, 0x20,
0x52, 0x1A, 0x0C, 0x54, 0xBC, 0x62, 0x36, 0x00, 0x1F, 0x06, 0x75, 0xA0,
0x4B, 0x5E, 0xC2, 0x38, 0x33, 0xAE, 0xB1, 0x80, 0x72, 0x12, 0x90, 0x00,
0xAA, 0x7A, 0x55, 0x00, 0xB3, 0x80, 0x72, 0xB0, 0x3E, 0x06, 0x13, 0xD8,
0x98, 0x9E, 0xA9, 0xC0, 0xE6, 0xBE, 0xAE, 0x50, 0x02, 0x6E, 0x3E, 0x20,
0xCD, 0x20, 0x4A, 0xD8, 0xBB, 0x04, 0x7B, 0xB0, 0x07, 0x6A, 0x23, 0x18,
0x74, 0x2C, 0xF0, 0xF0, 0xF4, 0x68, 0x36, 0x00, 0x90, 0xF0, 0x08, 0x40,
0xD1, 0x44, 0xBA, 0x60, 0x0C, 0xB8, 0x64, 0x88, 0x21, 0x32, 0xC2, 0xF8,
0x8D, 0xBC, 0x6D, 0xF0, 0x89, 0x62, 0x10, 0xB0, 0x54, 0x3A, 0xF4, 0x40,
0xA8, 0xA6, 0x32, 0x94, 0xD0, 0x78, 0x2F, 0x80, 0x7F, 0x42, 0x56, 0x70,
0xB8, 0x7C, 0x3D, 0xF0, 0xE3, 0x6E, 0x3A, 0xFC, 0x3F, 0x1E, 0x61, 0xB0,
0xCF, 0x0C, 0x9A, 0x04, 0x8E, 0x76, 0xC4, 0xF0, 0xC9, 0xA8, 0xE9, 0x50,
0x13, 0x6C, 0xD3, 0x80, 0x83, 0xCE, 0xF8, 0xBC, 0x79, 0x14, 0xF1, 0x58,
0x03, 0x7E, 0x20, 0xB8, 0x23, 0x20, 0x10, 0xA0, 0xE5, 0xDE, 0x80, 0x8C,
0xC0, 0x14, 0xDE, 0x50, 0x37, 0x2A, 0xBE, 0x20, 0x5D, 0xF2, 0x52, 0xC0,
0x4F, 0x34, 0x1C, 0xA8, 0x21, 0xAC, 0xCC, 0x48, 0xD0, 0x6C, 0x36, 0xB4,
0x36, 0x86, 0x97, 0xD0, 0xED, 0x52, 0x7A, 0x50, 0x0A, 0x60, 0x3E, 0x60,
0xA4, 0xF4, 0x00, 0xC0, 0x68, 0x10, 0x37, 0xC0, 0x62, 0xFC, 0x38, 0x76,
0x44, 0x08, 0x3C, 0x89, 0xCD, 0xC4, 0xF3, 0xD8, 0x4A, 0x72, 0xC6, 0x5C,
0x19, 0x68, 0xF4, 0x50, 0xE3, 0xC8, 0x88, 0xC0, 0x27, 0xFC, 0xF1, 0xC0,
0xF4, 0x7E, 0x9C, 0x20, 0x51, 0x24, 0x74, 0x60, 0x32, 0x02, 0xFA, 0xF8,
0xB3, 0x0C, 0x8F, 0xE4, 0xB5, 0xB2, 0x8C, 0x1C, 0x56, 0x24, 0x4F, 0xF8,
0xF5, 0x68, 0x8E, 0x78, 0x44, 0x7E, 0x6B, 0xD0, 0xA2, 0xAE, 0x6C, 0x0C,
0x27, 0x58, 0x9C, 0x95, 0x66, 0xB2, 0x7D, 0x58, 0x4B, 0xC0, 0x6D, 0x35,
0xB0, 0x28, 0x05, 0x51, 0x67, 0x08, 0xD4, 0x01, 0xB6, 0x14, 0xD1, 0x69,
0x41, 0xAC, 0x17, 0x1D, 0x3B, 0xEC, 0x09, 0xE1, 0xBA, 0xF0, 0x4E, 0xD4,
0x1A, 0x78, 0x32, 0x81, 0x8E, 0x9C, 0x1C, 0x69, 0x91, 0x86, 0x08, 0x71,
0x81, 0xE4, 0x9B, 0xE9, 0xD0, 0x94, 0x3B, 0xE1, 0xB2, 0x08, 0x5F, 0xE1,
0x18, 0x36, 0xAF, 0x80, 0x3E, 0x30, 0x43, 0xD1, 0x6C, 0x3E, 0x5E, 0x69,
0xB6, 0xEC, 0x7A, 0xD9, 0x67, 0x52, 0x86, 0xD1, 0xB0, 0x40, 0xBB, 0x8D,
0x9C, 0xD8, 0x47, 0xA9, 0xC6, 0x56, 0x1F, 0x71, 0xCD, 0xC0, 0x30, 0x61,
0xF2, 0x80, 0x77, 0xE9, 0xC7, 0x0C, 0x7C, 0xF9, 0xDE, 0x2A, 0xF8, 0x4D,
0x03, 0x5E, 0xC0, 0xA1, 0x9E, 0xA2, 0xD1, 0x75, 0x0C, 0x34, 0x96, 0xE1,
0x13, 0x80, 0x75, 0xC8, 0x7B, 0x3A, 0x7D, 0x70, 0xE6, 0x96, 0xBB, 0x58,
0x93, 0x6A, 0xB5, 0x50, 0x84, 0x5C, 0x72, 0x58, 0xD2, 0xD2, 0x22, 0x0E,
0x2B, 0x84, 0x94, 0x9E, 0x97, 0xBA, 0x45, 0x9A, 0x8B, 0x01, 0xDB, 0x74,
0xA6, 0x6C, 0xEF, 0x86, 0xC3, 0x32, 0x96, 0x54, 0xDA, 0x84, 0x31, 0xD6,
0x25, 0xE8, 0x9A, 0x6C, 0x60, 0x7C, 0x95, 0xF6, 0xE9, 0x4E, 0xF9, 0x83,
0xF2, 0x7F, 0xF8, 0x7C, 0x00, 0x20, 0x64, 0x2D, 0x25, 0x9E, 0xAE, 0xBA,
0x9A, 0x0B, 0xD4, 0xB8, 0x05, 0x17, 0xFD, 0x88, 0xAC, 0x51, 0x67, 0x37,
0x27, 0xA6, 0xB7, 0xC1, 0x7D, 0x1D, 0x39, 0xD8, 0x24, 0x50, 0x99, 0xD7,
0xAB, 0xA0, 0xEC, 0x3F, 0xD4, 0x86, 0x6F, 0xE5, 0x7C, 0xD6, 0xAE, 0xC6,
0x0F, 0xF5, 0xB5, 0x71, 0xB0, 0x06, 0x35, 0x5B, 0xA9, 0x65, 0x1A, 0xE1,
0xE5, 0xA1, 0xFE, 0x10, 0x3A, 0x1D, 0x9B, 0x5D, 0x2B, 0xE3, 0x1E, 0x01,
0xB3, 0xB7, 0xD9, 0xF0, 0x09, 0xC2, 0x1B, 0x62, 0xC6, 0xF9, 0xDC, 0xFF,
0x8A, 0x46, 0xCB, 0x3D, 0x82, 0x16, 0x8B, 0xF9, 0x1A, 0x34, 0xF9, 0x5F,
0x78, 0xC9, 0x72, 0x2C, 0xB8, 0x8A, 0xE6, 0x01, 0x4E, 0x02, 0xCD, 0xC8,
0x1A, 0x81, 0xFD, 0x18, 0xB9, 0x27, 0xD0, 0x37, 0x9D, 0xB3, 0xA5, 0x33,
0x29, 0x5D, 0xDD, 0x87, 0xE2, 0x8B, 0xB4, 0x70, 0xA9, 0xA1, 0x33, 0x4A,
0x56, 0x1B, 0x98, 0x63, 0x8D, 0xBC, 0xBD, 0x0C, 0x9C, 0xF0, 0x2D, 0xE4,
0xBD, 0xA6, 0x1A, 0xD0, 0x89, 0x14, 0xD1, 0xAA, 0xA5, 0x5E, 0xC0, 0xC2,
0x44, 0xFE, 0xB4, 0x62, 0x08, 0xCA, 0x5B, 0xE8, 0x94, 0x28, 0x74, 0x0F,
0x07, 0xA7, 0x89, 0x52, 0xE3, 0x5B, 0x52, 0xED, 0x39, 0x02, 0x02, 0x64,
0x9C, 0x81, 0xA5, 0xCC, 0xD5, 0xA4, 0x12, 0x77, 0x36, 0x9B, 0x5F, 0x38,
0x48, 0x1F, 0x3F, 0x70, 0xD9, 0xB4, 0x5F, 0x20, 0xC0, 0x50, 0x5A, 0xA9,
0xE9, 0x2F, 0x58, 0xF3, 0x59, 0x87, 0xA2, 0x50, 0xE7, 0x7C, 0xD9, 0x96,
0x74, 0xE9, 0x80, 0x12, 0xAE, 0x83, 0x96, 0xBA, 0xDA, 0x6D, 0x56, 0x62,
0x5C, 0x1F, 0x25, 0x6A, 0xBF, 0x1F, 0x4F, 0x4A, 0x78, 0xA6, 0x8D, 0x07,
0x90, 0x17, 0x4A, 0xDE, 0x4C, 0x92, 0x36, 0x3A, 0x04, 0x51, 0x3E, 0x94,
0x82, 0x42, 0xB9, 0x18, 0x1F, 0x2E, 0x31, 0x53, 0x4B, 0x39, 0x9E, 0xBE,
0xF6, 0xD7, 0x6B, 0x0A, 0xFF, 0x3A, 0x3C, 0xF7, 0xCD, 0xEA, 0x85, 0xA8,
0x45, 0x67, 0xDC, 0xAE, 0xF6, 0x73, 0xCF, 0x41, 0x47, 0x32, 0xFA, 0x61,
0xAE, 0x2D, 0xF0, 0xC2, 0xE5, 0x8D, 0x97, 0xA5, 0x4D, 0x76, 0xD6, 0x41,
0x4D, 0x1F, 0xAD, 0x8E, 0xC8, 0x27, 0x26, 0x79, 0xD1, 0x10, 0xA1, 0x55,
0x81, 0x2D, 0x06, 0xE2, 0xF2, 0xCB, 0x11, 0x35, 0x74, 0xEC, 0x86, 0xC9,
0x3D, 0xFA, 0xF0, 0x36, 0x8C, 0x83, 0xBC, 0x00, 0x6E, 0xA8, 0x63, 0xED,
0x02, 0x48, 0xA1, 0xBA, 0xF1, 0x33, 0xF9, 0xFC, 0x4B, 0x1A, 0x1B, 0x41,
0x81, 0xCC, 0x35, 0x6E, 0x9E, 0x0F, 0x13, 0x18, 0x1F, 0x46, 0x54, 0x65,
0x13, 0x32, 0xE6, 0x72, 0xD3, 0x6E, 0x01, 0x81, 0x26, 0x52, 0x01, 0x77,
0x1A, 0xFA, 0x87, 0x8B, 0x3D, 0x34, 0xE5, 0xA2, 0x93, 0xD4, 0x7C, 0xA3,
0xEA, 0x42, 0x03, 0x00, 0x38, 0x2C, 0x07, 0x3E, 0x49, 0xD9, 0xEF, 0x42,
0xA9, 0x65, 0x8E, 0xDE, 0x29, 0xFE, 0x19, 0xE3, 0x57, 0x20, 0xBC, 0xAD,
0x02, 0x02, 0x3F, 0x3A, 0x77, 0x32, 0x44, 0x7F, 0x77, 0xC3, 0x02, 0x71,
0x94, 0x6A, 0x4D, 0x6F, 0xB3, 0x89, 0x3A, 0xD1, 0x66, 0x6E, 0x65, 0xDF,
0xAF, 0x6F, 0x57, 0x78, 0xD9, 0xB3, 0x55, 0xA8, 0x2F, 0xCF, 0xCD, 0x79,
0x27, 0xE6, 0xE4, 0x23, 0x32, 0xC9, 0xF9, 0xCA, 0x17, 0x07, 0xF4, 0xED,
0x93, 0xA4, 0x1C, 0xD3, 0xD2, 0x37, 0xC1, 0x66, 0x32, 0x9D, 0xCC, 0x89,
0xFB, 0xA6, 0x68, 0xE7, 0xCB, 0xA3, 0x00, 0xFA, 0x44, 0xFD, 0x60, 0xBD,
0xAD, 0x92, 0xD8, 0x7B, 0xC9, 0xDD, 0x75, 0x72, 0x36, 0xCD, 0x16, 0x48,
0x5F, 0x6C, 0xF1, 0x0B, 0x35, 0x8A, 0x22, 0xE2, 0x53, 0xC7, 0x82, 0x74,
0x51, 0xBA, 0x3F, 0xD3, 0x9D, 0xE8, 0xCC, 0x82, 0x52, 0x21, 0x11, 0x12,
0x44, 0x62, 0xA1, 0xCA, 0x39, 0x9B, 0xD7, 0x00, 0xA9, 0x0C, 0xC1, 0xD9,
0x73, 0x60, 0x9E, 0x2A, 0xAC, 0x40, 0xC6, 0x86, 0xDE, 0x79, 0x34, 0xD0,
0x48, 0x96, 0x2E, 0x8B, 0x5F, 0xA2, 0xDC, 0x83, 0x44, 0xBB, 0xF4, 0x3A,
0xFC, 0x97, 0xD9, 0xE6, 0x91, 0x86, 0x51, 0xCB, 0x41, 0x04, 0x40, 0x4D,
0xF5, 0xB6, 0xD2, 0x6E, 0xD1, 0xBA, 0xF1, 0xFD, 0xB2, 0xD9, 0x5C, 0x43,
0xCC, 0x31, 0x5B, 0xDE, 0x27, 0xDE, 0x62, 0x58, 0x81, 0x7C, 0x57, 0x00,
0xC4, 0x9C, 0x6C, 0xC6, 0x62, 0xA2, 0xD0, 0x80, 0xDF, 0x18, 0xB5, 0xB0,
0x9B, 0x35, 0x81, 0x17, 0xDE, 0x8D, 0x2B, 0xC4, 0xD8, 0xBD, 0x3A, 0x58,
0x6C, 0x8C, 0xDE, 0xD6, 0xF2, 0xCB, 0x6E, 0x45, 0x65, 0x65, 0x1A, 0x8D,
0x43, 0x59, 0x93, 0xAD, 0x0F, 0x47, 0x5B, 0xED, 0x94, 0x59, 0xB9, 0x60,
0xE1, 0x8E, 0x96, 0x47, 0x20, 0x65, 0x4C, 0x3E, 0x09, 0x7A, 0x8A, 0xE6,
0x4C, 0x5E, 0x83, 0x37, 0x40, 0x08, 0xA2, 0x65, 0x85, 0x2C, 0x55, 0xA0,
0x31, 0x61, 0xA0, 0xD0, 0x34, 0xA2, 0x95, 0xC9, 0x80, 0xCE, 0x2D, 0x3A,
0x4E, 0x3F, 0xCD, 0x60, 0x89, 0xBA, 0x36, 0xD7, 0xF8, 0x2C, 0x55, 0xF5,
0x8B, 0xB9, 0xCD, 0xB8, 0x01, 0xB6, 0x13, 0x8E, 0xD8, 0x81, 0x47, 0x9C,
0x08, 0xAE, 0x62, 0xB0, 0x4F, 0x01, 0x47, 0xF7, 0x51, 0x2B, 0x6C, 0xB6,
0x6C, 0x66, 0xBA, 0x72, 0x67, 0x75, 0x3F, 0xE8, 0xD2, 0x2C, 0xD4, 0x2E,
0x09, 0xA0, 0x46, 0x96, 0xF4, 0x66, 0xE6, 0x9A, 0x7E, 0x67, 0x02, 0x26,
0x8E, 0x4A, 0x64, 0xA6, 0x0C, 0x7A, 0x48, 0xD6, 0x0E, 0xA7, 0x03, 0x38,
0xFF, 0x84, 0xDA, 0x63, 0x5D, 0xF5, 0x13, 0x82, 0xB3, 0xED, 0x6C, 0x58,
0x3A, 0x0D, 0xCF, 0x90, 0x07, 0x59, 0x9B, 0x03, 0x31, 0xEB, 0x08, 0x10,
0xED, 0xB8, 0x4E, 0x38, 0x78, 0x52, 0xC6, 0xD0, 0x59, 0x4B, 0x25, 0x28,
0x63, 0xCC, 0x4C, 0x07, 0x80, 0xB2, 0x12, 0x01, 0x7E, 0xE7, 0xC1, 0x3F,
0x2D, 0x95, 0xD6, 0x51, 0x0C, 0x54, 0x86, 0x40, 0x01, 0x0E, 0x28, 0x6E,
0xF6, 0xFE, 0xF2, 0xA7, 0xD8, 0x38, 0x59, 0xC7, 0x92, 0xDC, 0xE4, 0x4F,
0x7C, 0xA3, 0x52, 0x58, 0xD5, 0x6F, 0x0C, 0x8E, 0x1C, 0xEA, 0x83, 0x58,
0x83, 0x26, 0xAA, 0x92, 0x10, 0x7E, 0x9E, 0x2B, 0xFD, 0x89, 0x6B, 0x73,
0xAC, 0x81, 0x63, 0x40, 0xE1, 0x03, 0x34, 0x1C, 0x7D, 0x08, 0xF3, 0xAB,
0x5C, 0x0F, 0x73, 0xD0, 0x64, 0x84, 0x18, 0x3D, 0xAF, 0xD4, 0x5D, 0x2D,
0x2F, 0xBA, 0x97, 0xD6, 0x88, 0x4F, 0x74, 0x7A, 0x99, 0xFF, 0x52, 0x40,
0x5B, 0xC7, 0x7A, 0x1F, 0x28, 0xBD, 0x99, 0xCA, 0xFA, 0xBD, 0x0C, 0xFF,
0x5F, 0xDC, 0x4B, 0x0F, 0x5A, 0x42, 0x71, 0x71, 0x59, 0x0D, 0x31, 0x50,
0x6C, 0xBF, 0xAC, 0x72, 0x8D, 0xBF, 0x29, 0x67, 0x8B, 0x74, 0x1F, 0x97,
0x07, 0xF4, 0x50, 0x59, 0x33, 0x7F, 0x2C, 0xB4, 0x41, 0x37, 0x4F, 0xF0,
0x45, 0x79, 0x45, 0x9D, 0xAB, 0xDE, 0x00, 0x3E, 0x8F, 0x00, 0x96, 0x00,
0x84, 0x97, 0xAB, 0x22, 0x6E, 0x8F, 0xC6, 0x47, 0x9C, 0x3D, 0x96, 0x50,
0x2B, 0x5A, 0x47, 0xAF, 0x2C, 0xFC, 0xB3, 0xA0, 0x09, 0x80, 0xB3, 0x8A,
0x11, 0x1F, 0x7A, 0x8B, 0xE5, 0x86, 0x92, 0x95, 0xAB, 0xFF, 0xC3, 0xE8,
0xAF, 0xDC, 0x63, 0x03, 0x6F, 0x3F, 0x13, 0x0D, 0x96, 0x49, 0xAE, 0xC8,
0xD8, 0x6C, 0x70, 0x78, 0x50, 0xB3, 0xD2, 0xCF, 0x06, 0x19, 0x0F, 0xB3,
0x42, 0x84, 0x7A, 0x14, 0x8E, 0x7E, 0xC5, 0x06, 0xBC, 0xAE, 0x2A, 0xC4,
0xFC, 0x91, 0xFB, 0xE5, 0x4E, 0xE8, 0xB6, 0xD8, 0x4C, 0xD8, 0xFC, 0x64,
0x00, 0xF0, 0x18, 0x68, 0xDD, 0x66, 0x8E, 0x9C, 0xD8, 0xA8, 0xFE, 0x79,
0x58, 0xD4, 0xE6, 0xC0, 0x25, 0x46, 0x67, 0x8F, 0x6A, 0x59, 0xC2, 0xE1,
0x0C, 0x6F, 0x7D, 0x3A, 0x59, 0x80, 0xB2, 0x41, 0x03, 0x67, 0x4D, 0xF6,
0x24, 0xB1, 0xE8, 0x78, 0x1C, 0x58, 0xBE, 0xFB, 0x5E, 0xCA, 0x65, 0x40,
0x4D, 0x76, 0x9D, 0x24, 0xC2, 0x02, 0x3C, 0xA8, 0xC6, 0x34, 0x6C, 0x30,
0x2A, 0x95, 0x5C, 0x50, 0xAC, 0xCE, 0xCE, 0x99, 0xB3, 0x2A, 0xA1, 0xE4,
0x98, 0x0A, 0x1C, 0xF9, 0x00, 0xED, 0x4E, 0x60, 0xBD, 0xFE, 0x50, 0xB0,
0x3C, 0x76, 0xC1, 0x28, 0xE0, 0x50, 0x0B, 0xFC, 0x17, 0x32, 0x27, 0x90,
0x20, 0x8A, 0x35, 0xDE, 0x2E, 0x47, 0xF6, 0x00, 0xCC, 0x12, 0xD6, 0xE5,
0xA0, 0xAE, 0xE2, 0x64, 0x98, 0xD4, 0x04, 0xCA, 0x73, 0xB7, 0x6C, 0x80,
0x41, 0xB4, 0xF0, 0x98, 0x03, 0x2F, 0x51, 0xFE, 0xD1, 0xD6, 0x72, 0x1C,
0x05, 0x14, 0xD1, 0x37, 0xEA, 0x46, 0x94, 0x8C, 0x33, 0x71, 0x7A, 0xA8,
0x89, 0x35, 0x4D, 0x39, 0xE3, 0xC8, 0xD0, 0x02, 0x4D, 0x6C, 0x24, 0xBE,
0xC8, 0xA2, 0xCD, 0xE8, 0x85, 0xA8, 0xE3, 0xB0, 0x0C, 0x1A, 0x1E, 0xE6,
0x08, 0xC1, 0x79, 0x68, 0xDF, 0xCA, 0x1E, 0xE0, 0xFB, 0x52, 0x35, 0x49,
0xE6, 0xCC, 0xB3, 0xF0, 0x87, 0x8C, 0x85, 0x9B, 0xFE, 0x58, 0xE5, 0xA8,
0x6F, 0x34, 0xB7, 0x9C, 0x66, 0x42, 0x58, 0x40, 0x7F, 0x57, 0x9E, 0x18,
0x09, 0x5D, 0x62, 0x63, 0xAF, 0x4B, 0xD8, 0x68, 0xE9, 0xDA, 0x83, 0xD8,
0x00, 0xAE, 0x06, 0x18, 0x8F, 0x39, 0x8E, 0x3D, 0x51, 0x5E, 0x6A, 0x08,
0x1D, 0xBC, 0xBC, 0x25, 0x85, 0xC4, 0x6D, 0x07, 0x20, 0xC1, 0xAE, 0x15,
0x9D, 0x56, 0x8C, 0xA4, 0x14, 0xA8, 0x64, 0xA2, 0x03, 0xE3, 0xE7, 0xB3,
0x95, 0x3C, 0xC1, 0x1F, 0x07, 0xA9, 0xC5, 0x2D, 0xD8, 0xE5, 0xB2, 0x68,
0xDA, 0x39, 0xF3, 0xC4, 0x59, 0xB7, 0xFF, 0x09, 0xF1, 0x3D, 0xA2, 0xA1,
0xED, 0x3C, 0x26, 0x00, 0xCF, 0xE0, 0xED, 0xB0, 0x73, 0x92, 0xAE, 0x69,
0x0D, 0x37, 0xE5, 0x80, 0x05, 0xEC, 0xB4, 0xFD, 0xBD, 0x5E, 0x82, 0xB1,
0xEF, 0xE4, 0x73, 0x10, 0xC9, 0xBE, 0xF3, 0x1C, 0xCE, 0x54, 0x13, 0x32,
0xF8, 0x18, 0xEE, 0x61, 0xA3, 0xC0, 0xDA, 0x10, 0x6D, 0x5A, 0xBA, 0x29,
0x7B, 0xD8, 0xB9, 0xDF, 0x7E, 0x65, 0xF1, 0x96, 0xFA, 0x12, 0x6E, 0x68,
0x30, 0xE8, 0xDE, 0x54, 0x0B, 0x43, 0xB9, 0x60, 0x4D, 0x2B, 0x9F, 0xB3,
0x59, 0xB2, 0x0D, 0xF0, 0xA6, 0xB3, 0x33, 0xAB, 0x03, 0x93, 0x5B, 0x80,
0xC3, 0xCA, 0xE8, 0x98, 0x4E, 0x64, 0x99, 0xC7, 0x55, 0x61, 0xBD, 0xD6,
0xA9, 0x45, 0xAC, 0xB8, 0x52, 0x80, 0x5D, 0xB7, 0xA7, 0xD5, 0x70, 0x87,
0x7C, 0x97, 0x83, 0x50, 0x5D, 0x31, 0x8D, 0x63, 0xA4, 0x8D, 0x63, 0x0C,
0x0E, 0xD4, 0x0E, 0xA1, 0x4C, 0x68, 0xF3, 0xA7, 0x21, 0xD0, 0x24, 0xBB,
0x2C, 0x90, 0x28, 0x2C, 0xFE, 0xB1, 0x22, 0x10, 0xF1, 0x70, 0x4E, 0x3C,
0xA4, 0x78, 0xEA, 0x98, 0x0E, 0x4C, 0x09, 0x5C, 0xC5, 0xD6, 0x79, 0xA9,
0x0F, 0x6B, 0x60, 0x40, 0xC4, 0xEE, 0x23, 0xD1, 0x45, 0x9B, 0x5F, 0x10,
0x30, 0xD0, 0x4A, 0x63, 0x5E, 0xAE, 0x7A, 0x14, 0x51, 0xEB, 0xF3, 0xB9,
0x15, 0x39, 0xAA, 0xD4, 0xD8, 0x49, 0x32, 0x68, 0x39, 0x19, 0xB7, 0x43,
0x89, 0xD4, 0x2F, 0xD7, 0x03, 0xB4, 0xAE, 0x74, 0x1B, 0x90, 0xD0, 0x33,
0xEF, 0x0C, 0x3C, 0x7F, 0x64, 0xBB, 0xEB, 0x40, 0x3A, 0xE2, 0x6F, 0x3F,
0x76, 0x51, 0xF2, 0xB9, 0x7A, 0xE8, 0x39, 0x2C, 0x57, 0x9A, 0x49, 0x58,
0x22, 0xB0, 0x24, 0x79, 0x08, 0xA0, 0x69, 0xE8, 0x82, 0xD2, 0x8E, 0xDA,
0x69, 0xB9, 0x14, 0x88, 0xE1, 0x31, 0x87, 0x77, 0x9A, 0x80, 0x25, 0x19,
0x2D, 0x7A, 0x1C, 0x28, 0x75, 0x20, 0xEA, 0x60, 0xB1, 0x53, 0x36, 0x68,
0x06, 0xD7, 0xBF, 0xCF, 0x29, 0x34, 0x2A, 0x48, 0xAB, 0x87, 0x25, 0xC6,
0xC7, 0x39, 0x8D, 0xD0, 0x1A, 0x2C, 0xF8, 0xF9, 0x90, 0xBE, 0x5A, 0xF5,
0x7A, 0x0C, 0xE7, 0xC8, 0x72, 0x11, 0x0C, 0xB3, 0xB4, 0xB4, 0x87, 0x01,
0x5F, 0x4E, 0x45, 0x27, 0x61, 0xE3, 0x82, 0x30, 0x8A, 0x1F, 0x8A, 0x83,
0x5A, 0x65, 0x81, 0x68, 0x12, 0x6D, 0x85, 0x60, 0x43, 0x70, 0xAF, 0x88,
0xFF, 0x7E, 0xBF, 0x5A, 0xA1, 0x97, 0x4A, 0x20, 0x8F, 0x18, 0x5F, 0x6C,
0x2B, 0xA4, 0xE7, 0xEE, 0x45, 0x60, 0x71, 0x01, 0x53, 0x84, 0x32, 0x68,
0x97, 0x02, 0x12, 0x2F, 0x2E, 0x0A, 0xE8, 0x8D, 0xB4, 0x28, 0x16, 0x20,
0x92, 0xB0, 0x10, 0xC3, 0xC1, 0x24, 0xDA, 0xF0, 0x4E, 0xB8, 0x34, 0x05,
0x91, 0xEA, 0x6E, 0x58, 0x7D, 0xBC, 0x41, 0xC0, 0xF9, 0xF2, 0x20, 0xA5,
0x34, 0x16, 0xD4, 0x28, 0x48, 0x00, 0x52, 0x6A, 0x10, 0x47, 0x35, 0x10,
0x2F, 0x9A, 0xB6, 0xB6, 0x79, 0xEB, 0xDD, 0xA0, 0x34, 0xE7, 0x69, 0xFC,
0x30, 0xF6, 0xFA, 0xE6, 0x28, 0xBB, 0xBC, 0xDD, 0x40, 0x36, 0xA4, 0x38,
0x39, 0x6E, 0x79, 0x9F, 0x27, 0xF4, 0x26, 0x60, 0xF3, 0xC6, 0xF8, 0xD2,
0x69, 0x43, 0x84, 0xD0, 0x74, 0x1E, 0x20, 0x38, 0x43, 0xDD, 0x30, 0x68,
0x96, 0x8F, 0x00, 0x20, 0x00, 0x43, 0x3F, 0xB0, 0x57, 0xE0, 0x30, 0x80,
0x2E, 0xEA, 0xFD, 0x67, 0x40, 0xFC, 0x77, 0x17, 0x9A, 0x92, 0xD5, 0x07,
0x19, 0xA8, 0x19, 0x6F, 0x56, 0x06, 0x17, 0xA6, 0x1C, 0x39, 0x93, 0x0C,
0xCB, 0xC8, 0x67, 0x24, 0xAD, 0xE2, 0x48, 0x03, 0xC9, 0xF8, 0xF0, 0xBF,
0x8B, 0x38, 0x47, 0xA7, 0xF4, 0x24, 0x5F, 0xB5, 0x7E, 0x7C, 0x8E, 0xBF,
0x3A, 0xF7, 0xEA, 0xE0, 0x89, 0x62, 0x44, 0xCD, 0x73, 0x08, 0x08, 0x50,
0x39, 0xDC, 0xC1, 0xE4, 0xA8, 0x6E, 0x54, 0xE5, 0x45, 0x04, 0x32, 0xB0,
0xB2, 0xCA, 0xD2, 0x6F, 0xC3, 0x33, 0xA8, 0x81, 0x25, 0xEA, 0x79, 0xF0,
0x9E, 0xA4, 0xE8, 0x00, 0x1D, 0xE8, 0xF7, 0x6F, 0x8D, 0xDD, 0x34, 0xFC,
0x04, 0xA6, 0xF9, 0xF8, 0xC2, 0xA0, 0x3E, 0x24, 0x89, 0x63, 0xD5, 0x78,
0x1C, 0xE0, 0xC0, 0xAC, 0xB0, 0x24, 0x78, 0x42, 0x01, 0xD1, 0x1E, 0x68,
0xD7, 0x2F, 0xAB, 0xD8, 0xC6, 0xE4, 0x50, 0x74, 0x4B, 0x07, 0x68, 0xC5,
0x7A, 0x10, 0xAE, 0x2C, 0xD7, 0x08, 0x9D, 0x60, 0xB3, 0x97, 0x3E, 0xA9,
0x5C, 0xF2, 0xB2, 0xA4, 0x0B, 0x3E, 0x16, 0x30, 0xD2, 0x3D, 0x96, 0xE3,
0xBC, 0x60, 0xDA, 0x47, 0x1A, 0xE1, 0xC9, 0xC0, 0x86, 0x18, 0x9C, 0xD3,
0xD4, 0x06, 0xBF, 0x80, 0x56, 0x6C, 0x07, 0x88, 0x36, 0x11, 0xD2, 0x3E,
0xB6, 0xBE, 0x10, 0xFC, 0xDB, 0x47, 0x9F, 0xB6, 0xE6, 0x39, 0x14, 0x58,
0x30, 0x50, 0xF9, 0xB8, 0x52, 0xBB, 0x7F, 0x1D, 0x22, 0x84, 0x5C, 0x3F,
0x3C, 0x50, 0xDF, 0x02, 0x17, 0x66, 0x60, 0x37, 0xF8, 0x48, 0x82, 0x7F,
0xB0, 0x34, 0x08, 0x78, 0x8B, 0x20, 0x05, 0x3B, 0xA0, 0x26, 0x6D, 0x88,
0xA8, 0xB5, 0xC8, 0xAD, 0x9B, 0x5A, 0xE6, 0x50, 0x98, 0xE4, 0xDF, 0x47,
0x37, 0x0D, 0xFD, 0x8F, 0x49, 0xD0, 0x50, 0xA0, 0x1C, 0x64, 0xA9, 0xF0,
0xFD, 0x80, 0xCC, 0xF4, 0x98, 0x3E, 0x91, 0x70, 0x54, 0xBC, 0xB7, 0x90,
0x2A, 0xBE, 0x58, 0x38, 0x5A, 0x79, 0xDB, 0xB5, 0xDD, 0x35, 0x4B, 0x00,
0x86, 0x30, 0xA5, 0x61, 0xBB, 0x29, 0xE4, 0x93, 0x28, 0x80, 0xD7, 0x97,
0xA9, 0x8C, 0x84, 0xE6, 0x44, 0x58, 0x46, 0x98, 0x4F, 0xCB, 0xB5, 0x25,
0x9C, 0xA2, 0x46, 0x5E, 0x50, 0x1E, 0x61, 0x68, 0x3B, 0x2B, 0xE0, 0xB2,
0x32, 0xB3, 0x9C, 0x99, 0x96, 0xA2, 0xC6, 0x4F, 0xFE, 0xD2, 0x5F, 0xC8,
0xBC, 0x10, 0x8B, 0xBC, 0xBC, 0x43, 0xB5, 0x38, 0x6D, 0xC1, 0x74, 0xCD,
0xE1, 0xE5, 0xB2, 0xA0, 0xBD, 0xD4, 0xE4, 0x11, 0x2A, 0xCA, 0x7C, 0x07,
0xCD, 0x76, 0x14, 0xC4, 0xB2, 0xC1, 0xBC, 0x7C, 0xC5, 0xC3, 0x32, 0x0C,
0xBD, 0x9A, 0xB5, 0x68, 0xE9, 0x5D, 0xDF, 0x3E, 0xE2, 0xFE, 0x80, 0xD1,
0xC9, 0x60, 0x19, 0x3F, 0x8E, 0xD7, 0x5F, 0xEB, 0x3A, 0xB2, 0xFC, 0x00,
0x16, 0x7A, 0x66, 0x45, 0xF1, 0x3F, 0x3E, 0xF8, 0xE8, 0x01, 0xFB, 0x32,
0xB7, 0x2F, 0xB8, 0x25, 0xC4, 0xA8, 0xD7, 0x03, 0x0C, 0xE4, 0xC1, 0xE8,
0x8D, 0x80, 0x0D, 0x20, 0x51, 0x80, 0x29, 0xCF, 0xA6, 0xFC, 0xE1, 0x77,
0xAE, 0xA5, 0xBA, 0x9A, 0x32, 0x2E, 0xE2, 0x10, 0x78, 0xCB, 0xFE, 0x71,
0x95, 0xC9, 0x52, 0x28, 0x88, 0x46, 0xAC, 0x48, 0xC8, 0xBF, 0xF1, 0xAC,
0xB0, 0xA0, 0xEC, 0xFE, 0x13, 0x75, 0x9C, 0x95, 0x80, 0x1C, 0x21, 0xBE,
0xC7, 0xE1, 0xA5, 0xA0, 0x2D, 0xBA, 0x55, 0x95, 0xE3, 0xFC, 0xF2, 0x4A,
0xEC, 0x32, 0x95, 0x69, 0x7D, 0x1B, 0xBD, 0x42, 0xE6, 0x9B, 0x04, 0x11,
0x4E, 0x08, 0xE3, 0x70, 0xC5, 0xE6, 0xE5, 0x43, 0xC2, 0x57, 0x40, 0x99,
0x77, 0x88, 0xEF, 0xA8, 0x58, 0x72, 0x7F, 0x77, 0x6A, 0xB9, 0x36, 0xD3,
0x0D, 0x1E, 0x26, 0x98, 0x79, 0x10, 0x3A, 0xCF, 0x9A, 0x81, 0x1A, 0x80,
0x5D, 0x4C, 0x7C, 0xE4, 0xC0, 0x76, 0x8D, 0x1F, 0xBC, 0x5F, 0xAA, 0xCA,
0x2D, 0xDE, 0x21, 0x77, 0xFC, 0x1D, 0x16, 0xEB, 0x56, 0xF4, 0x60, 0x58,
0xF8, 0x1A, 0x03, 0x73, 0xB1, 0xF8, 0x08, 0xB8, 0x74, 0x3F, 0x17, 0x69,
0x91, 0xAC, 0xA6, 0xDF, 0xE2, 0x34, 0x61, 0xEB, 0x69, 0xC8, 0x5C, 0xD0,
0xFF, 0xC3, 0xE8, 0xA0, 0x43, 0x98, 0x1E, 0xEB, 0xA5, 0xCA, 0xCC, 0xBB,
0x7E, 0x7F, 0xAD, 0xE3, 0x53, 0xD1, 0xC3, 0xDC, 0x18, 0x9B, 0x0B, 0x59,
0xF0, 0x4E, 0x80, 0x8C, 0xE7, 0x49, 0x44, 0x14, 0xE2, 0xA0, 0x68, 0x39,
0x85, 0x65, 0x75, 0xF8, 0xD9, 0x19, 0xEA, 0xC1, 0x1B, 0xC0, 0x0E, 0x90,
0x51, 0xFE, 0x51, 0x65, 0xCF, 0x47, 0xC0, 0x5D, 0x90, 0xC8, 0xCE, 0xD4,
0x98, 0xD0, 0x9F, 0xE0, 0x5D, 0x9B, 0x33, 0x39, 0x0D, 0x35, 0x88, 0x22,
0xF1, 0x74, 0xD0, 0x0C, 0x94, 0x20, 0x46, 0x38, 0x72, 0xED, 0x54, 0x15,
0xD7, 0x54, 0x22, 0x79, 0x7D, 0x5A, 0x51, 0xCC, 0x32, 0xAD, 0x4D, 0xA9,
0xA1, 0x74, 0x85, 0x98, 0xD3, 0x00, 0xA1, 0xA1, 0xA9, 0xE3, 0xDC, 0x1B,
0x57, 0xB1, 0x44, 0x28, 0xBC, 0x2A, 0x11, 0x54, 0x3D, 0x13, 0x46, 0xED,
0x2B, 0x5E, 0xB1, 0xFC, 0xE0, 0xF1, 0xFD, 0xE1, 0x34, 0xB3, 0xA8, 0x1D,
0x81, 0x79, 0x71, 0x63, 0xEA, 0x49, 0x4C, 0x73, 0x09, 0xBF, 0x6B, 0x1D,
0x2B, 0x65, 0xF2, 0x76, 0x97, 0xE6, 0xEE, 0x5A, 0xBC, 0xAA, 0x55, 0xD1,
0x46, 0x7D, 0x9F, 0x35, 0xEA, 0x64, 0xD2, 0x07, 0xEF, 0x05, 0x49, 0xA0,
0xFC, 0xB6, 0x9D, 0x54, 0x87, 0x69, 0xFE, 0x1D, 0xD7, 0x1F, 0x92, 0x36,
0x29, 0x04, 0x1A, 0xC2, 0xC5, 0x9C, 0x07, 0x0D, 0x00, 0x39, 0x35, 0xD4,
0xD2, 0x0B, 0x71, 0xF4, 0x6B, 0x3B, 0xC8, 0x58, 0xDE, 0x83, 0x46, 0xFB,
0x8D, 0x4F, 0x63, 0x89, 0x94, 0x02, 0x63, 0x28, 0xF3, 0x82, 0x0B, 0x7E,
0xBA, 0x25, 0x31, 0x85, 0x33, 0x08, 0x1F, 0x26, 0x28, 0xAE, 0xCE, 0x70,
0x28, 0x48, 0xBD, 0x90, 0x21, 0x8D, 0x1E, 0x08, 0xB7, 0xFF, 0x5F, 0x3D,
0x5D, 0xA8, 0x59, 0x18, 0x42, 0x79, 0xA6, 0x88, 0x7A, 0x61, 0xE0, 0x3D,
0xD3, 0x3E, 0x6D, 0xE0, 0xB7, 0xC7, 0x46, 0x55, 0xAF, 0x7B, 0x9E, 0x70,
0x31, 0xCE, 0xC3, 0x40, 0x4C, 0xD1, 0xCD, 0xC4, 0x37, 0x30, 0xC1, 0x82,
0xD3, 0x7C, 0xB7, 0xEB, 0x06, 0x10, 0xC4, 0x4A, 0xD2, 0x57, 0xE7, 0xC3,
0x43, 0xED, 0xB4, 0x8F, 0x85, 0x62, 0x73, 0x12, 0x48, 0xFE, 0xD5, 0x23,
0xCB, 0x46, 0x9A, 0xF8, 0xDB, 0xE9, 0x11, 0xE0, 0xEA, 0x12, 0x11, 0xA1,
0xBA, 0x62, 0x6A, 0xE0, 0x14, 0x87, 0xAA, 0x43, 0xD6, 0xFE, 0x3A, 0x5F,
0x40, 0x82, 0x85, 0xB6, 0x5A, 0x36, 0x3D, 0x67, 0x76, 0x32, 0x8E, 0x5B,
0x57, 0xC8, 0x82, 0x80, 0x3B, 0x1C, 0x03, 0x59, 0xD6, 0x87, 0xBA, 0x28,
0x13, 0xF3, 0x4B, 0x3C, 0x14, 0x23, 0x08, 0x28, 0x11, 0x09, 0xCB, 0x88,
0x31, 0xD1, 0x12, 0x88, 0xEC, 0xD9, 0xB9, 0x84, 0xB1, 0x22, 0x4D, 0x51,
0x7D, 0x4C, 0x0D, 0x88, 0x51, 0x6A, 0x91, 0x38, 0xE8, 0xE2, 0xBC, 0x68,
0x0A, 0x28, 0xA3, 0x53, 0xD9, 0x27, 0x28, 0x62, 0xAD, 0x7B, 0x16, 0xF1,
0xDA, 0xF6, 0xB6, 0x20, 0x6C, 0x28, 0xFB, 0x95, 0x36, 0x67, 0x9B, 0xE2,
0xF0, 0xFE, 0xCB, 0x4C, 0x90, 0x60, 0xB5, 0x02, 0x3B, 0x19, 0x00, 0x51,
0xF4, 0x80, 0x7D, 0x02, 0x3C, 0x66, 0xC9, 0x96, 0x05, 0x95, 0x89, 0xDF,
0x1C, 0x21, 0x60, 0x4F, 0x43, 0xE2, 0x91, 0x80, 0xEE, 0xD6, 0x78, 0xA1,
0xC0, 0x64, 0x26, 0xBD, 0xCF, 0x52, 0x4E, 0xF0, 0x47, 0x0A, 0x02, 0x54,
0xDB, 0xC4, 0x48, 0x38, 0xE9, 0x1C, 0xF0, 0xD0, 0x50, 0xBC, 0x46, 0x1C,
0xE8, 0xCE, 0x3F, 0x18, 0x35, 0xFA, 0x32, 0x03, 0xDA, 0xE0, 0x1A, 0x00,
0x05, 0xE3, 0xFC, 0x3F, 0xA6, 0xBF, 0x62, 0x71, 0x3C, 0x94, 0x8B, 0xF3,
0xBF, 0x4A, 0xA1, 0x73, 0x57, 0x6F, 0x88, 0x14, 0x0A, 0x69, 0xD5, 0xF8,
0x42, 0x20, 0x5D, 0x39, 0xCB, 0x5D, 0x88, 0x1E, 0xC7, 0x2E, 0xAA, 0x19,
0x95, 0x06, 0x4C, 0xF5, 0xC0, 0xC0, 0x34, 0x81, 0x45, 0x9B, 0xF2, 0x0F,
0x2B, 0xAC, 0xCC, 0x54, 0xDD, 0x6A, 0x6B, 0x89, 0x4D, 0x6C, 0x77, 0x49,
0xDD, 0xE8, 0x6E, 0x9D, 0xE4, 0x76, 0xC3, 0x5B, 0xB1, 0x6E, 0xF9, 0x98,
0x7F, 0x70, 0xC3, 0x03, 0x16, 0x02, 0x65, 0x05, 0x09, 0x70, 0xA2, 0xED,
0x98, 0xE6, 0xA5, 0x4F, 0x0B, 0xFA, 0xCD, 0x48, 0x28, 0xC7, 0x14, 0x21,
0x73, 0x77, 0xAA, 0x67, 0x55, 0xFF, 0x14, 0xB8, 0x4F, 0x9A, 0x1F, 0x07,
0x6B, 0xBC, 0x6C, 0x43, 0xFF, 0xC7, 0x45, 0x83, 0xA4, 0x74, 0x91, 0xF8,
0x8E, 0x0F, 0xD1, 0x48, 0x50, 0xFE, 0x15, 0xC6, 0xB2, 0x46, 0x6F, 0x17,
0x2A, 0x52, 0x17, 0x71, 0x70, 0x81, 0x37, 0x81, 0xCC, 0xF3, 0x98, 0x84,
0x8F, 0x3A, 0x23, 0x6E, 0x1E, 0x79, 0x52, 0xF3, 0x36, 0x48, 0x5C, 0x21,
0x7C, 0x90, 0x18, 0xD0, 0xB8, 0x46, 0x30, 0x14, 0x35, 0xA8, 0xD7, 0xAF,
0xB2, 0x1F, 0x38, 0x3F, 0x4F, 0xA9, 0x04, 0x67, 0xD6, 0xE6, 0x11, 0x31,
0xCB, 0xD3, 0xFA, 0x40, 0x02, 0xC3, 0xBA, 0xA2, 0x6B, 0xF3, 0x28, 0x7A,
0x0B, 0x7D, 0x0E, 0x08, 0x4E, 0xEF, 0x43, 0x6D, 0xF7, 0xCB, 0x77, 0x6A,
0xCB, 0xAF, 0xA4, 0x47, 0xF6, 0xD0, 0xDF, 0xE4, 0x90, 0x9D, 0xC6, 0x58,
0x80, 0x2A, 0x80, 0xA8, 0x8F, 0xB4, 0x39, 0xA0, 0x24, 0x80, 0x43, 0x5F,
0x31, 0x74, 0x10, 0x64, 0xD4, 0x87, 0x53, 0x6D, 0x50, 0x56, 0xB9, 0x75,
0xCA, 0x92, 0xB2, 0xEA, 0x0C, 0x31, 0xD6, 0x15, 0x6E, 0xD0, 0x97, 0x90,
0x9C, 0x0E, 0xBA, 0x27, 0x07, 0xC0, 0xA5, 0x89, 0x7E, 0xC7, 0x70, 0xD1,
0x65, 0x40, 0x8C, 0xE5, 0xB4, 0xF5, 0x28, 0x1C, 0x6A, 0x5A, 0xB7, 0xEC,
0xA1, 0x3C, 0xAD, 0x67, 0xED, 0x98, 0x3D, 0x0D, 0x48, 0x77, 0xC4, 0x87,
0x62, 0x42, 0x67, 0x92, 0x0E, 0xBA, 0x60, 0x17, 0xE5, 0x7E, 0x47, 0x44,
0xFE, 0x42, 0xBD, 0x3B, 0x00, 0xAE, 0x14, 0x34, 0x0C, 0xAA, 0xF5, 0x68,
0x05, 0x24, 0x6B, 0x53, 0xA2, 0x81, 0x34, 0x00, 0x5C, 0x05, 0x1E, 0x1B,
0xBB, 0xC1, 0x39, 0x78, 0x2A, 0x5A, 0xBE, 0xBC, 0xDA, 0xFA, 0x38, 0x18,
0xF2, 0x57, 0xE0, 0x03, 0x9A, 0x71, 0x29, 0x61, 0xDF, 0xC7, 0x2A, 0x9C,
0x36, 0x42, 0x97, 0xED, 0x78, 0x62, 0xA4, 0xAF, 0xB4, 0x95, 0x55, 0x97,
0xCF, 0x01, 0x45, 0xE7, 0xB1, 0x5F, 0x03, 0x47, 0xF7, 0xA0, 0xBB, 0x41,
0x10, 0x0C, 0x06, 0xD3, 0x83, 0x6B, 0x0D, 0x73, 0xBE, 0x19, 0xFD, 0xF7,
0x0A, 0x0A, 0x88, 0x86, 0xED, 0x5C, 0xF6, 0x06, 0x10, 0x30, 0xDA, 0xE9,
0x65, 0x48, 0x53, 0x26, 0x78, 0x8C, 0x18, 0xD3, 0x17, 0x61, 0x05, 0x80,
0xD2, 0x9D, 0x5D, 0x66, 0x4C, 0x0A, 0x49, 0xB7, 0xCC, 0x03, 0xBC, 0x77,
0x1B, 0xE6, 0xDF, 0xE6, 0x18, 0x64, 0xC9, 0x88, 0x2F, 0x1A, 0x32, 0x14,
0x4B, 0xF2, 0x3D, 0xC4, 0xEB, 0x24, 0xD2, 0x38, 0x26, 0x5A, 0xB4, 0x38,
0xED, 0xB8, 0x35, 0x80, 0x6F, 0x54, 0xE7, 0x1C, 0x2F, 0x8A, 0x98, 0x18,
0x6D, 0x0C, 0x2D, 0x64, 0x4F, 0xEA, 0xA0, 0x60, 0xFF, 0xE0, 0xD1, 0x88,
0x99, 0xDA, 0x82, 0x48, 0xC0, 0xCC, 0xE9, 0x48, 0x93, 0xAE, 0xEA, 0x00,
0x41, 0xEE, 0x50, 0x98, 0x2B, 0xDC, 0x73, 0xD0, 0xB5, 0xB4, 0xA4, 0xBC,
0x10, 0x24, 0x87, 0xF0, 0xAE, 0xBA, 0xDB, 0xDA, 0x41, 0x7E, 0x32, 0x60,
0x52, 0xC0, 0xD6, 0x30, 0x34, 0xBC, 0xFC, 0x00, 0x88, 0xF8, 0x4B, 0xF2,
0xAA, 0x3C, 0x28, 0xE0, 0x94, 0x78, 0x67, 0xCC, 0xC1, 0x14, 0x52, 0xB0,
0xD2, 0x1E, 0x99, 0x22, 0x1D, 0x28, 0x74, 0xE0, 0x5F, 0x18, 0xC8, 0x66,
0x43, 0x14, 0x35, 0x01, 0x84, 0x2A, 0xAD, 0xBC, 0xF5, 0xAC, 0xE8, 0xC0,
0x1A, 0x8E, 0x12, 0x44, 0x3F, 0x04, 0xA3, 0x14, 0x2D, 0x8E, 0x17, 0x2C,
0x6E, 0x54, 0x82, 0x8F, 0xD8, 0x57, 0x2C, 0x42, 0x36, 0x32, 0x9F, 0x0A,
0x2F, 0xFF, 0xAF, 0x18, 0x7F, 0x1C, 0x87, 0xC1, 0x8D, 0xB9, 0xF0, 0x39,
0x3A, 0xA0, 0x34, 0x49, 0x97, 0xE8, 0xA6, 0xFD, 0x09, 0x83, 0x0C, 0xF2,
0x68, 0x9E, 0xC4, 0x47, 0x60, 0xAA, 0x58, 0x34, 0x64, 0xA0, 0xB3, 0x45,
0xB4, 0x6C, 0x17, 0xBB, 0xFC, 0x89, 0x29, 0xA8, 0x6D, 0x82, 0x85, 0x6D,
0x45, 0xD2, 0x92, 0x82, 0x20, 0x5B, 0x3D, 0x01, 0xBE, 0x1D, 0xE8, 0x46,
0xD1, 0xBA, 0x6B, 0x4D, 0x06, 0xB1, 0x6C, 0xC5, 0xB4, 0x0D, 0xCC, 0xBF,
0x25, 0xE5, 0xD7, 0xA8, 0x91, 0xA2, 0xDF, 0x7B, 0x56, 0x2C, 0x7D, 0xA3,
0x37, 0xFA, 0x42, 0x98, 0x3A, 0xC5, 0xE4, 0xE9, 0x6E, 0x26, 0x29, 0xCB,
0xF1, 0x06, 0xA1, 0xFE, 0x13, 0xBF, 0x9C, 0x5A, 0xBC, 0x16, 0x62, 0xE5,
0xFE, 0x24, 0xE1, 0x55, 0x95, 0xCE, 0x8D, 0xE7, 0x6F, 0xB5, 0xEE, 0x30,
0xFD, 0xF0, 0xE9, 0xC5, 0xD2, 0x83, 0xFF, 0xFA, 0xCA, 0x44, 0xD2, 0x30,
0x58, 0x54, 0x66, 0xC7, 0xF6, 0x3D, 0xE2, 0xA2, 0xA5, 0xB3, 0xFD, 0x73,
0x26, 0x0C, 0xD7, 0x85, 0xC8, 0x72, 0x25, 0xEB, 0x95, 0xE9, 0xCE, 0x23,
0xE8, 0x2B, 0xDC, 0x50, 0x36, 0x18, 0x35, 0xD9, 0xEA, 0xDB, 0xFC, 0xE8,
0x1B, 0x01, 0x50, 0x21, 0xE5, 0x30, 0xE9, 0xBE, 0x3C, 0xF0, 0x15, 0xE8,
0x31, 0xF2, 0x87, 0x32, 0x8C, 0x45, 0x6C, 0x17, 0x84, 0xFB, 0x70, 0xF6,
0x55, 0x43, 0xD7, 0x14, 0x19, 0x11, 0xF7, 0x59, 0x2D, 0x56, 0x34, 0x19,
0x2A, 0x31, 0x15, 0xEC, 0x69, 0x14, 0x40, 0xC4, 0x98, 0xB0, 0x2B, 0xE9,
0x05, 0x3A, 0xE9, 0x5A, 0x3D, 0x48, 0x01, 0x8B, 0xF4, 0xA2, 0x8A, 0x47,
0x33, 0xBA, 0xF7, 0x09, 0xF1, 0xA8, 0xE5, 0xCA, 0xE8, 0xB0, 0x2B, 0xE0,
0xA4, 0x0E, 0x57, 0x11, 0x55, 0x96, 0x69, 0x50, 0x63, 0x34, 0x00, 0x01,
0xB8, 0x26, 0x44, 0xF4, 0x82, 0x04, 0x78, 0x1A, 0xC2, 0x55, 0x24, 0xFB,
0x30, 0xE1, 0x50, 0x8E, 0xFE, 0xC1, 0x5C, 0xAF, 0x40, 0xB6, 0x68, 0xF0,
0x60, 0x0D, 0x4B, 0xFA, 0xFF, 0x38, 0xFF, 0x1D, 0xE3, 0x89, 0x1B, 0x2C,
0xDB, 0x47, 0x27, 0xCE, 0x0B, 0x2C, 0x47, 0x2C, 0x03, 0x70, 0x3D, 0x3A,
0x09, 0x8B, 0xFE, 0x5D, 0xDE, 0x53, 0xC3, 0x6D, 0x8B, 0xD4, 0x35, 0x48,
0x52, 0xF1, 0xEF, 0xB2
};
// PowerWriter At interface information
void powerwriter_at_introduction()
{
powerwriter_at_log(LOGI, "\t\tPowerWriter open communication interface\r\n");
powerwriter_at_log(LOGI, "\r\n");
powerwriter_at_log(LOGI, "The PowerWriter AT open interface allows you to control PowerWriter behavior, implement \r\n");
powerwriter_at_log(LOGI, "highly flexible personalized and customized requirements, native hardware support, and \r\n");
powerwriter_at_log(LOGI, "cross-platform.For more information, visit: \r\n");
powerwriter_at_log(LOGI, "https://docs.powerwriter.com/docs/powerwriter_for_arm/reference/ATCommand\r\n");
powerwriter_at_log(LOGI, "\r\n");
powerwriter_at_log(LOGI, "ICWorkshop HPT Dep Team(PowerWriter)\r\n");
powerwriter_at_log(LOGI, "Technical support: csh@icworkshop.com\r\n");
powerwriter_at_log(LOGI, "https://www.icworkshop.com / https://www.powerwriter.com\r\n");
powerwriter_at_log(LOGI, "\r\n");
}
// Print PowerWriter information
void powerwriter_info_print(S_ATCmdRspWriterInfo *info)
{
if (info)
{
powerwriter_at_log(LOGD, ">print info\r\n");
powerwriter_at_log(LOGD, "\t<type>: %s\r\n", info->m_oem);
powerwriter_at_log(LOGD, "\t<SN>: %.32s\r\n", info->m_sn); // PW_SN_LENGTH
powerwriter_at_log(LOGD, "\t<hardware version>: %s\r\n", info->m_hardwareVersion);
powerwriter_at_log(LOGD, "\t<bootloader version>: %s\r\n", info->m_bootloaderVersion);
powerwriter_at_log(LOGD, "\t<interface version>: %s\r\n", info->m_interfaceVersion);
}
}
// Print PowerWriter configuration
void powerwriter_cfg_print(S_ATCmdRspWriterCfg *cfg)
{
if (cfg)
{
powerwriter_at_log(LOGD, ">print config\r\n");
powerwriter_at_log(LOGD, "\tnames\r\n");
powerwriter_at_log(LOGD, "\t<vendor>: %.16s\r\n", cfg->m_targetName.m_targetVendor);
powerwriter_at_log(LOGD, "\t<series>: %.16s\r\n", cfg->m_targetName.m_targetSeries);
powerwriter_at_log(LOGD, "\t<model>: %.16s\r\n", cfg->m_targetName.m_targetModel);
powerwriter_at_log(LOGD, "\tbase config\r\n");
powerwriter_at_log(LOGD, "\t<erase>: %d\r\n", cfg->m_baseCfg.m_eraseType);
powerwriter_at_log(LOGD, "\t<vext>: %d\r\n", cfg->m_baseCfg.m_outputVEXTType);
powerwriter_at_log(LOGD, "\t<clock>: %d\r\n", cfg->m_baseCfg.m_clockType);
powerwriter_at_log(LOGD, "\t<buzzer>: %d\r\n", cfg->m_baseCfg.m_buzzerEnable);
powerwriter_at_log(LOGD, "\t<option byte type>: %d\r\n", cfg->m_baseCfg.m_obUpdateType);
powerwriter_at_log(LOGD, "\toffline config\r\n");
powerwriter_at_log(LOGD, "\t<limit enable>: %d\r\n", cfg->m_offlineCfg.m_limitOfNumberEnable);
powerwriter_at_log(LOGD, "\t<limit number>: %d\r\n", cfg->m_offlineCfg.m_limitOfNumber);
powerwriter_at_log(LOGD, "\t<auto>: %d\r\n", cfg->m_offlineCfg.m_targetAutoEnable);
powerwriter_at_log(LOGD, "\t<in debounce>: %d ms\r\n", cfg->m_offlineCfg.m_targetAutoInDebounce);
powerwriter_at_log(LOGD, "\t<out debounce>: %d ms\r\n", cfg->m_offlineCfg.m_targetAutoOutDebounce);
powerwriter_at_log(LOGD, "\toutput config\r\n");
powerwriter_at_log(LOGD, "\t<disable power after programming>: %d\r\n", cfg->m_outputCtrlCfg.m_disablePowerAP);
powerwriter_at_log(LOGD, "\t<run target after programming>: %d\r\n", cfg->m_outputCtrlCfg.m_runAP);
powerwriter_at_log(LOGD, "\t<power on debounce>: %d\r\n", cfg->m_outputCtrlCfg.m_powerOnDebounce);
powerwriter_at_log(LOGD, "\t<power off debounce>: %d\r\n", cfg->m_outputCtrlCfg.m_powerOffDebounce);
powerwriter_at_log(LOGD, "\t<reset pin ctrl>: %d\r\n", cfg->m_outputCtrlCfg.m_resetType);
}
}
bool powerwriter_at_project_info_print(const S_ATCmdRspProjectInfo *pproject)
{
AT_CHECK_PARAM(pproject, false)
powerwriter_at_log(LOGD, "Project enabled: %s\r\n", pproject->m_activate ? "yes" : "no");
powerwriter_at_log(LOGD, "Project size: %d\r\n", pproject->m_projectSize);
powerwriter_at_log(LOGD, "Project CRC32: 0x%08X\r\n", pproject->m_projectCrc32);
return true;
}
void powerwriter_at_progress_print(S_ATCmdStatusProgress *psg)
{
AT_CHECK_PARAM_VOID(psg);
static int percentlast = 0, countchlast = 0, percentcur = 0;
if (psg->m_total != 0)
{
percentcur = 100 * psg->m_processed / psg->m_total;
}
if (percentcur != percentlast)
{
percentlast = percentcur;
int countch = percentlast / 10;
if (countchlast != countch)
{
countchlast = countch;
powerwriter_at_log(LOGD, "progress:");
do
{
powerwriter_at_log(LOGN, ">");
} while (countch--);
powerwriter_at_log(LOGN, ":%d%%\r\n", percentcur);
}
}
}
bool powerwriter_at_connect_target(S_ATChannel *channel)
{
bool connect = false;
powerwriter_at_log(LOGD, ">>>Target online bechmark ...\r\n");
/* Init target connnect */
if (!powerwriter_at_target_connect(channel))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter initial connect target failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter initial connect target successfully ...\r\n");
/* Get target status */
uint32_t ts = GetSystemTick();
uint32_t te = ts;
powerwriter_at_log(LOGD, "Target connecting >");
do
{
ATSleep(50);
if (powerwriter_at_target_status(channel))
{
powerwriter_at_log(LOGN, "powerwriter target connected...");
connect = true;
break;
}
powerwriter_at_log(LOGN, ">>");
te = GetSystemTick();
} while (te - ts < 10000);
powerwriter_at_log(LOGN, "\r\n");
return connect;
}
// PowerWriter At interface benchmarking
bool powerwriter_at_benchmark(
S_ATChannel *channel,
bool encrypt,
ATCmdStreamOut pfDataOut,
ATCmdEventOut pfEvent)
{
/* Initial */
if (!powerwriter_at_init(channel, encrypt, pfDataOut, pfEvent))
{
powerwriter_at_log(LOGE, "powerwriter AT Init failure...\r\n");
return false;
}
powerwriter_at_log(LOGE, "powerwriter AT Init passed ...\r\n");
/* Get PowerWriter Info */
S_ATCmdRspWriterInfo info;
if (!powerwriter_at_get_writerinfo(channel, &info))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter AT get writer information failure...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter AT get writer information passed ...\r\n");
/* Print writer information */
powerwriter_info_print(&info);
/* load project */
powerwriter_at_log(LOGD, "powerwriter load project ...\r\n");
if (!powerwriter_at_project_load(channel, "", AT_Project, sizeof(AT_Project), powerwriter_at_progress_print)) {
powerwriter_at_log(LOGE, "[%08X]:powerwriter load project failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter load project passed ...\r\n");
/* Get PowerWriter Configuration */
S_ATCmdRspWriterCfg cfg;
if (!powerwriter_at_get_writerconfig(channel, &cfg))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter AT get writer configuration failure...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter AT get writer configuration passed ...\r\n");
/* Print writer information */
powerwriter_cfg_print(&cfg);
/* Set writer config */
/* can't change */
strcpy(cfg.m_targetName.m_targetVendor, "vendor");
strcpy(cfg.m_targetName.m_targetSeries, "Series");
strcpy(cfg.m_targetName.m_targetModel, "model");
cfg.m_offlineCfg.m_limitOfNumberEnable = true;
cfg.m_offlineCfg.m_limitOfNumber = 100;
/* can change */
cfg.m_offlineCfg.m_targetAutoEnable = 1;
//...
if (!powerwriter_at_set_writerconfig(channel, &cfg))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter AT set writer configuration failure...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter AT set writer configuration passed ...\r\n");
powerwriter_at_get_writerconfig(channel, &cfg);
/* Set AT baud rate */
if (!powerwriter_at_set_baudrate(channel, 115200))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter AT set baudrate failure...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter AT set baudrate passed ...\r\n");
powerwriter_at_log(LOGD, "Note: you need to change the baud rate of the host UART port to the latest baud rate ...\r\n");
// Target online bechmark
if (!powerwriter_at_connect_target(channel)) {
return false;
}
/* Get target id */
S_ATCmdRspTargetChipID m_target_id;
if (!powerwriter_at_target_id(channel, &m_target_id))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter get target id failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
object_print(m_target_id.m_CIDData, m_target_id.m_CIDSize, "Target chip id");
powerwriter_at_log(LOGD, "powerwriter get target id successfully ...\r\n");
/* Read Target memory */
// example is G32F350xB ,128 KB Flash & 16K sram
int i = 0;
powerwriter_at_log(LOGD, "powerwriter read target memory starting ...\r\n");
S_ChipMemoryCfg m_chip_memory[] = {
{.m_s_addr = 0x20000000,
.m_e_addr = 0x20004000,
.m_name = "16K SRAM"},
{.m_s_addr = 0x08000000,
.m_e_addr = 0x08010000,
.m_name = "128K Flash"},
};
S_ATCmdRspTargetMemory *mem = 0;
for (i = 0; i < ARRAY_SIZE(m_chip_memory); i++)
{
uint32_t addr = m_chip_memory[i].m_s_addr;
do
{
if (!powerwriter_at_target_read(channel, addr, PW_PACKAGE_SIZE, &mem))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter read target memory failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "(%s)memmory addr: 0x%08X, memory size: %d\r\n", m_chip_memory[i].m_name,
mem->m_address, mem->m_size);
object_print(mem->m_buffer, mem->m_size, "data block:");
addr += mem->m_size;
} while (addr < m_chip_memory[i].m_e_addr);
}
powerwriter_at_log(LOGD, "powerwriter read target memory test passed ...\r\n");
/* write vendor's default option byte */
powerwriter_at_log(LOGD, "powerwriter write target vendor's default option byte ...\r\n");
if (!powerwriter_at_target_write_vendor_ob(channel, PW_AT_TIMEOUT_BASE))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter write target vendor's default option byte failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter write target vendor's default option byte passed ...\r\n");
/* erase target chip */
if (!powerwriter_at_connect_target(channel)) {
return false;
}
/*
powerwriter_at_log(LOGD, "powerwriter erase target chip ...\r\n");
if (!powerwriter_at_target_erase(channel, 10000))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter erase target chip failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter erase target chip test passed ...\r\n");
*/
/* erase target chip sectors (The hit sectors will be erased) */
powerwriter_at_log(LOGD, "powerwriter erase memory sector start(the hit sector will be erased)...\r\n");
if (!powerwriter_at_target_erase_sector(channel, 0x080015FF, 0x1002, 10000))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter erase memory sector failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter erase memory sector passed...\r\n");
// write target chip
/*
S_ChipMemoryCfg m_chip_write =
{
.m_s_addr = 0x08000000,
.m_e_addr = 0x08020000,
.m_name = "128K Flash"
};
uint8_t m_raw_data[PW_PACKAGE_SIZE];
int rand_step = 0;
powerwriter_at_log(LOGD, "powerwriter write memory start...\r\n");
if (!powerwriter_at_target_write_prepare(channel, m_chip_write.m_e_addr - m_chip_write.m_s_addr)) {
powerwriter_at_log(LOGE, "[%08X]:powerwriter prepare write memory failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
do{
//gen data
rand_step++;
i = 0;
do {
m_raw_data[i] = i + rand_step;
i++;
} while (i < sizeof(m_raw_data));
powerwriter_at_log(LOGN, ">");
if (!powerwriter_at_target_write(channel, m_chip_write.m_s_addr, m_raw_data, sizeof(m_raw_data))) {
powerwriter_at_log(LOGN, "\r\n");
powerwriter_at_log(LOGE, "[%08X]:powerwriter write memory addr 0x%08x failure ...\r\n",
powerwriter_at_last_error(channel), m_chip_write.m_s_addr);
return false;
}
m_chip_write.m_s_addr += sizeof(m_raw_data);
} while (m_chip_write.m_s_addr < m_chip_write.m_e_addr);
powerwriter_at_log(LOGN, "\r\n");
powerwriter_at_log(LOGD, "powerwriter write memory passed...\r\n");
/* Read target chip option byte */
S_ATCmdRspTargetOptionByte *ppob = NULL;
powerwriter_at_log(LOGD, "powerwriter read target option byte ...\r\n");
if (!powerwriter_at_target_read_ob(channel, &ppob))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter read target option byte failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
object_print(ppob->m_OBData, ppob->m_OBsize, "Options byte raw");
powerwriter_at_log(LOGD, "powerwriter read target option byte passed ...\r\n");
/* write user option byte */
powerwriter_at_log(LOGD, "powerwriter write target user's option byte ...\r\n");
if (!powerwriter_at_target_write_user_ob(channel, PW_AT_TIMEOUT_BASE))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter write target user's option byte failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter write target user's option byte passed ...\r\n");
/* get project information */
S_ATCmdRspProjectInfo *pproject = NULL;
powerwriter_at_log(LOGD, "powerwriter get project information ...\r\n");
if (!powerwriter_at_project_info(channel, &pproject))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter get project information failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_project_info_print(pproject);
powerwriter_at_log(LOGD, "powerwriter get project information passed ...\r\n");
// disbale project
/*
powerwriter_at_log(LOGD, "powerwriter disable project ...\r\n");
if (!powerwriter_at_project_disable(channel)) {
powerwriter_at_log(LOGE, "[%08X]:powerwriter disable project failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter disable project passed ...\r\n");
*/
/* start offline program */
powerwriter_at_log(LOGD, "powerwriter start offline program ...\r\n");
if (!powerwriter_at_offline_start(channel))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter start offline program failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter start offline program passed ...\r\n");
/* Query the offline programming status */
S_ATCmdStatus status;
bool query_status = true;
powerwriter_at_log(LOGD, "query the offline programming status...\r\n");
do
{
if (!powerwriter_at_offline_status(channel, &status))
{
powerwriter_at_log(LOGE, "[%08X]:query the offline programming status failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
switch (status.m_statusType)
{
case ATStatusOk: // offline done
query_status = false;
powerwriter_at_log(LOGE, "offline programming done ...\r\n");
break;
case ATStatusError: // offline error
query_status = false;
powerwriter_at_log(LOGE, "[%08X]:offline programming failure ...\r\n", powerwriter_at_last_error(channel));
break;
case ATStatusProgress:
powerwriter_at_progress_print(&status.param.m_progress);
break;
default:
break;
}
} while (query_status);
powerwriter_at_log(LOGD, "query the offline programming status finished ...\r\n");
/* broadcast */
powerwriter_at_log(LOGD, "powerwriter AT broadcast ...\r\n");
const char *broad_data = "Hello powerwriter AT\r\n";
if (!powerwriter_at_easy_broadcast_no_rsp(channel, broad_data, strlen(broad_data), DIR_CDC2UART))
{
powerwriter_at_log(LOGE, "[%08X]:powerwriter AT broadcast failure ...\r\n",
powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "powerwriter AT broadcast passed ...\r\n");
/* run factory sarm firmware */
if (!powerwriter_at_connect_target(channel)) {
return false;
}
powerwriter_at_log(LOGD, "run powerwriter factory sram firmware ...\r\n");
if (!powerwriter_at_run_factory_flash_fw(channel, PW_AT_TIMEOUT_BASE * 2))
{
powerwriter_at_log(LOGE, "[%08X]:run powerwriter factory sram firmware failure ...\r\n", powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "run powerwriter factory sram firmware passed ...\r\n");
/* run factory flash firmware */
/*
powerwriter_at_log(LOGD, "run powerwriter factory flash firmware ...\r\n");
if (!powerwriter_at_run_factory_flash_fw(channel, PW_AT_TIMEOUT_BASE))
{
powerwriter_at_log(LOGE, "[%08X]:run powerwriter factory flash firmware failure ...\r\n", powerwriter_at_last_error(channel));
return false;
}
powerwriter_at_log(LOGD, "run powerwriter factory flash firmware passed ...\r\n");
*/
return true;
}